]> git.openstreetmap.org Git - rails.git/blob - vendor/assets/iD/iD.js
Merge pull request #2485 from mmd-osm/patch/json2
[rails.git] / vendor / assets / iD / iD.js
1 (function () {
2         var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
3
4         function commonjsRequire () {
5                 throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');
6         }
7
8         function unwrapExports (x) {
9                 return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
10         }
11
12         function createCommonjsModule(fn, module) {
13                 return module = { exports: {} }, fn(module, module.exports), module.exports;
14         }
15
16         function getCjsExportFromNamespace (n) {
17                 return n && n['default'] || n;
18         }
19
20         var isImplemented = function () {
21                 var set, iterator, result;
22                 if (typeof Set !== 'function') { return false; }
23                 set = new Set(['raz', 'dwa', 'trzy']);
24                 if (String(set) !== '[object Set]') { return false; }
25                 if (set.size !== 3) { return false; }
26                 if (typeof set.add !== 'function') { return false; }
27                 if (typeof set.clear !== 'function') { return false; }
28                 if (typeof set.delete !== 'function') { return false; }
29                 if (typeof set.entries !== 'function') { return false; }
30                 if (typeof set.forEach !== 'function') { return false; }
31                 if (typeof set.has !== 'function') { return false; }
32                 if (typeof set.keys !== 'function') { return false; }
33                 if (typeof set.values !== 'function') { return false; }
34
35                 iterator = set.values();
36                 result = iterator.next();
37                 if (result.done !== false) { return false; }
38                 if (result.value !== 'raz') { return false; }
39
40                 return true;
41         };
42
43         // eslint-disable-next-line no-empty-function
44         var noop = function () {};
45
46         var _undefined = noop(); // Support ES3 engines
47
48         var isValue = function (val) { return val !== _undefined && val !== null; };
49
50         var validValue = function (value) {
51                 if (!isValue(value)) { throw new TypeError("Cannot use null or undefined"); }
52                 return value;
53         };
54
55         var clear = function () {
56                 validValue(this).length = 0;
57                 return this;
58         };
59
60         var isImplemented$1 = function () {
61                 var numberIsNaN = Number.isNaN;
62                 if (typeof numberIsNaN !== "function") { return false; }
63                 return !numberIsNaN({}) && numberIsNaN(NaN) && !numberIsNaN(34);
64         };
65
66         var shim = function (value) {
67                 // eslint-disable-next-line no-self-compare
68                 return value !== value;
69         };
70
71         var isNan = isImplemented$1() ? Number.isNaN : shim;
72
73         var isImplemented$2 = function () {
74                 var sign = Math.sign;
75                 if (typeof sign !== "function") { return false; }
76                 return sign(10) === 1 && sign(-20) === -1;
77         };
78
79         var shim$1 = function (value) {
80                 value = Number(value);
81                 if (isNaN(value) || value === 0) { return value; }
82                 return value > 0 ? 1 : -1;
83         };
84
85         var sign = isImplemented$2() ? Math.sign : shim$1;
86
87         var abs   = Math.abs
88           , floor = Math.floor;
89
90         var toInteger = function (value) {
91                 if (isNaN(value)) { return 0; }
92                 value = Number(value);
93                 if (value === 0 || !isFinite(value)) { return value; }
94                 return sign(value) * floor(abs(value));
95         };
96
97         var max       = Math.max;
98
99         var toPosInteger = function (value) { return max(0, toInteger(value)); };
100
101         var indexOf           = Array.prototype.indexOf
102           , objHasOwnProperty = Object.prototype.hasOwnProperty
103           , abs$1               = Math.abs
104           , floor$1             = Math.floor;
105
106         var eIndexOf = function (searchElement/*, fromIndex*/) {
107                 var i, length, fromIndex, val;
108                 if (!isNan(searchElement)) { return indexOf.apply(this, arguments); }
109
110                 length = toPosInteger(validValue(this).length);
111                 fromIndex = arguments[1];
112                 if (isNaN(fromIndex)) { fromIndex = 0; }
113                 else if (fromIndex >= 0) { fromIndex = floor$1(fromIndex); }
114                 else { fromIndex = toPosInteger(this.length) - floor$1(abs$1(fromIndex)); }
115
116                 for (i = fromIndex; i < length; ++i) {
117                         if (objHasOwnProperty.call(this, i)) {
118                                 val = this[i];
119                                 if (isNan(val)) { return i; } // Jslint: ignore
120                         }
121                 }
122                 return -1;
123         };
124
125         var create = Object.create, getPrototypeOf = Object.getPrototypeOf, plainObject = {};
126
127         var isImplemented$3 = function (/* CustomCreate*/) {
128                 var setPrototypeOf = Object.setPrototypeOf, customCreate = arguments[0] || create;
129                 if (typeof setPrototypeOf !== "function") { return false; }
130                 return getPrototypeOf(setPrototypeOf(customCreate(null), plainObject)) === plainObject;
131         };
132
133         var map = { function: true, object: true };
134
135         var isObject = function (value) { return (isValue(value) && map[typeof value]) || false; };
136
137         var create$1 = Object.create, shim$2;
138
139         if (!isImplemented$3()) {
140                 shim$2 = shim$3;
141         }
142
143         var create_1 = (function () {
144                 var nullObject, polyProps, desc;
145                 if (!shim$2) { return create$1; }
146                 if (shim$2.level !== 1) { return create$1; }
147
148                 nullObject = {};
149                 polyProps = {};
150                 desc = { configurable: false, enumerable: false, writable: true, value: undefined };
151                 Object.getOwnPropertyNames(Object.prototype).forEach(function (name) {
152                         if (name === "__proto__") {
153                                 polyProps[name] = {
154                                         configurable: true,
155                                         enumerable: false,
156                                         writable: true,
157                                         value: undefined
158                                 };
159                                 return;
160                         }
161                         polyProps[name] = desc;
162                 });
163                 Object.defineProperties(nullObject, polyProps);
164
165                 Object.defineProperty(shim$2, "nullPolyfill", {
166                         configurable: false,
167                         enumerable: false,
168                         writable: false,
169                         value: nullObject
170                 });
171
172                 return function (prototype, props) {
173                         return create$1(prototype === null ? nullObject : prototype, props);
174                 };
175         })();
176
177         var objIsPrototypeOf = Object.prototype.isPrototypeOf
178           , defineProperty   = Object.defineProperty
179           , nullDesc         = { configurable: true, enumerable: false, writable: true, value: undefined }
180           , validate;
181
182         validate = function (obj, prototype) {
183                 validValue(obj);
184                 if (prototype === null || isObject(prototype)) { return obj; }
185                 throw new TypeError("Prototype must be null or an object");
186         };
187
188         var shim$3 = (function (status) {
189                 var fn, set;
190                 if (!status) { return null; }
191                 if (status.level === 2) {
192                         if (status.set) {
193                                 set = status.set;
194                                 fn = function (obj, prototype) {
195                                         set.call(validate(obj, prototype), prototype);
196                                         return obj;
197                                 };
198                         } else {
199                                 fn = function (obj, prototype) {
200                                         validate(obj, prototype).__proto__ = prototype;
201                                         return obj;
202                                 };
203                         }
204                 } else {
205                         fn = function self(obj, prototype) {
206                                 var isNullBase;
207                                 validate(obj, prototype);
208                                 isNullBase = objIsPrototypeOf.call(self.nullPolyfill, obj);
209                                 if (isNullBase) { delete self.nullPolyfill.__proto__; }
210                                 if (prototype === null) { prototype = self.nullPolyfill; }
211                                 obj.__proto__ = prototype;
212                                 if (isNullBase) { defineProperty(self.nullPolyfill, "__proto__", nullDesc); }
213                                 return obj;
214                         };
215                 }
216                 return Object.defineProperty(fn, "level", {
217                         configurable: false,
218                         enumerable: false,
219                         writable: false,
220                         value: status.level
221                 });
222         })(
223                 (function () {
224                         var tmpObj1 = Object.create(null)
225                           , tmpObj2 = {}
226                           , set
227                           , desc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
228
229                         if (desc) {
230                                 try {
231                                         set = desc.set; // Opera crashes at this point
232                                         set.call(tmpObj1, tmpObj2);
233                                 } catch (ignore) {}
234                                 if (Object.getPrototypeOf(tmpObj1) === tmpObj2) { return { set: set, level: 2 }; }
235                         }
236
237                         tmpObj1.__proto__ = tmpObj2;
238                         if (Object.getPrototypeOf(tmpObj1) === tmpObj2) { return { level: 2 }; }
239
240                         tmpObj1 = {};
241                         tmpObj1.__proto__ = tmpObj2;
242                         if (Object.getPrototypeOf(tmpObj1) === tmpObj2) { return { level: 1 }; }
243
244                         return false;
245                 })()
246         );
247
248         var setPrototypeOf = isImplemented$3() ? Object.setPrototypeOf : shim$3;
249
250         var validCallable = function (fn) {
251                 if (typeof fn !== "function") { throw new TypeError(fn + " is not a function"); }
252                 return fn;
253         };
254
255         // ES3 safe
256         var _undefined$1 = void 0;
257
258         var is = function (value) { return value !== _undefined$1 && value !== null; };
259
260         // prettier-ignore
261         var possibleTypes = { "object": true, "function": true, "undefined": true /* document.all */ };
262
263         var is$1 = function (value) {
264                 if (!is(value)) { return false; }
265                 return hasOwnProperty.call(possibleTypes, typeof value);
266         };
267
268         var is$2 = function (value) {
269                 if (!is$1(value)) { return false; }
270                 try {
271                         if (!value.constructor) { return false; }
272                         return value.constructor.prototype === value;
273                 } catch (error) {
274                         return false;
275                 }
276         };
277
278         var is$3 = function (value) {
279                 if (typeof value !== "function") { return false; }
280
281                 if (!hasOwnProperty.call(value, "length")) { return false; }
282
283                 try {
284                         if (typeof value.length !== "number") { return false; }
285                         if (typeof value.call !== "function") { return false; }
286                         if (typeof value.apply !== "function") { return false; }
287                 } catch (error) {
288                         return false;
289                 }
290
291                 return !is$2(value);
292         };
293
294         var classRe = /^\s*class[\s{/}]/, functionToString = Function.prototype.toString;
295
296         var is$4 = function (value) {
297                 if (!is$3(value)) { return false; }
298                 if (classRe.test(functionToString.call(value))) { return false; }
299                 return true;
300         };
301
302         var isImplemented$4 = function () {
303                 var assign = Object.assign, obj;
304                 if (typeof assign !== "function") { return false; }
305                 obj = { foo: "raz" };
306                 assign(obj, { bar: "dwa" }, { trzy: "trzy" });
307                 return obj.foo + obj.bar + obj.trzy === "razdwatrzy";
308         };
309
310         var isImplemented$5 = function () {
311                 try {
312                         Object.keys("primitive");
313                         return true;
314                 } catch (e) {
315                         return false;
316                 }
317         };
318
319         var keys = Object.keys;
320
321         var shim$4 = function (object) { return keys(isValue(object) ? Object(object) : object); };
322
323         var keys$1 = isImplemented$5() ? Object.keys : shim$4;
324
325         var max$1   = Math.max;
326
327         var shim$5 = function (dest, src/*, …srcn*/) {
328                 var arguments$1 = arguments;
329
330                 var error, i, length = max$1(arguments.length, 2), assign;
331                 dest = Object(validValue(dest));
332                 assign = function (key) {
333                         try {
334                                 dest[key] = src[key];
335                         } catch (e) {
336                                 if (!error) { error = e; }
337                         }
338                 };
339                 for (i = 1; i < length; ++i) {
340                         src = arguments$1[i];
341                         keys$1(src).forEach(assign);
342                 }
343                 if (error !== undefined) { throw error; }
344                 return dest;
345         };
346
347         var assign = isImplemented$4() ? Object.assign : shim$5;
348
349         var forEach = Array.prototype.forEach, create$2 = Object.create;
350
351         var process$1 = function (src, obj) {
352                 var key;
353                 for (key in src) { obj[key] = src[key]; }
354         };
355
356         // eslint-disable-next-line no-unused-vars
357         var normalizeOptions = function (opts1/*, …options*/) {
358                 var result = create$2(null);
359                 forEach.call(arguments, function (options) {
360                         if (!isValue(options)) { return; }
361                         process$1(Object(options), result);
362                 });
363                 return result;
364         };
365
366         var str = "razdwatrzy";
367
368         var isImplemented$6 = function () {
369                 if (typeof str.contains !== "function") { return false; }
370                 return str.contains("dwa") === true && str.contains("foo") === false;
371         };
372
373         var indexOf$1 = String.prototype.indexOf;
374
375         var shim$6 = function (searchString/*, position*/) {
376                 return indexOf$1.call(this, searchString, arguments[1]) > -1;
377         };
378
379         var contains = isImplemented$6() ? String.prototype.contains : shim$6;
380
381         var d_1 = createCommonjsModule(function (module) {
382
383
384
385         var d = (module.exports = function (dscr, value/*, options*/) {
386                 var c, e, w, options, desc;
387                 if (arguments.length < 2 || typeof dscr !== "string") {
388                         options = value;
389                         value = dscr;
390                         dscr = null;
391                 } else {
392                         options = arguments[2];
393                 }
394                 if (is(dscr)) {
395                         c = contains.call(dscr, "c");
396                         e = contains.call(dscr, "e");
397                         w = contains.call(dscr, "w");
398                 } else {
399                         c = w = true;
400                         e = false;
401                 }
402
403                 desc = { value: value, configurable: c, enumerable: e, writable: w };
404                 return !options ? desc : assign(normalizeOptions(options), desc);
405         });
406
407         d.gs = function (dscr, get, set/*, options*/) {
408                 var c, e, options, desc;
409                 if (typeof dscr !== "string") {
410                         options = set;
411                         set = get;
412                         get = dscr;
413                         dscr = null;
414                 } else {
415                         options = arguments[3];
416                 }
417                 if (!is(get)) {
418                         get = undefined;
419                 } else if (!is$4(get)) {
420                         options = get;
421                         get = set = undefined;
422                 } else if (!is(set)) {
423                         set = undefined;
424                 } else if (!is$4(set)) {
425                         options = set;
426                         set = undefined;
427                 }
428                 if (is(dscr)) {
429                         c = contains.call(dscr, "c");
430                         e = contains.call(dscr, "e");
431                 } else {
432                         c = true;
433                         e = false;
434                 }
435
436                 desc = { get: get, set: set, configurable: c, enumerable: e };
437                 return !options ? desc : assign(normalizeOptions(options), desc);
438         };
439         });
440
441         var eventEmitter = createCommonjsModule(function (module, exports) {
442
443         var apply = Function.prototype.apply, call = Function.prototype.call
444           , create = Object.create, defineProperty = Object.defineProperty
445           , defineProperties = Object.defineProperties
446           , hasOwnProperty = Object.prototype.hasOwnProperty
447           , descriptor = { configurable: true, enumerable: false, writable: true }
448
449           , on, once, off, emit, methods, descriptors, base;
450
451         on = function (type, listener) {
452                 var data;
453
454                 validCallable(listener);
455
456                 if (!hasOwnProperty.call(this, '__ee__')) {
457                         data = descriptor.value = create(null);
458                         defineProperty(this, '__ee__', descriptor);
459                         descriptor.value = null;
460                 } else {
461                         data = this.__ee__;
462                 }
463                 if (!data[type]) { data[type] = listener; }
464                 else if (typeof data[type] === 'object') { data[type].push(listener); }
465                 else { data[type] = [data[type], listener]; }
466
467                 return this;
468         };
469
470         once = function (type, listener) {
471                 var once, self;
472
473                 validCallable(listener);
474                 self = this;
475                 on.call(this, type, once = function () {
476                         off.call(self, type, once);
477                         apply.call(listener, this, arguments);
478                 });
479
480                 once.__eeOnceListener__ = listener;
481                 return this;
482         };
483
484         off = function (type, listener) {
485                 var data, listeners, candidate, i;
486
487                 validCallable(listener);
488
489                 if (!hasOwnProperty.call(this, '__ee__')) { return this; }
490                 data = this.__ee__;
491                 if (!data[type]) { return this; }
492                 listeners = data[type];
493
494                 if (typeof listeners === 'object') {
495                         for (i = 0; (candidate = listeners[i]); ++i) {
496                                 if ((candidate === listener) ||
497                                                 (candidate.__eeOnceListener__ === listener)) {
498                                         if (listeners.length === 2) { data[type] = listeners[i ? 0 : 1]; }
499                                         else { listeners.splice(i, 1); }
500                                 }
501                         }
502                 } else {
503                         if ((listeners === listener) ||
504                                         (listeners.__eeOnceListener__ === listener)) {
505                                 delete data[type];
506                         }
507                 }
508
509                 return this;
510         };
511
512         emit = function (type) {
513                 var arguments$1 = arguments;
514
515                 var i, l, listener, listeners, args;
516
517                 if (!hasOwnProperty.call(this, '__ee__')) { return; }
518                 listeners = this.__ee__[type];
519                 if (!listeners) { return; }
520
521                 if (typeof listeners === 'object') {
522                         l = arguments.length;
523                         args = new Array(l - 1);
524                         for (i = 1; i < l; ++i) { args[i - 1] = arguments$1[i]; }
525
526                         listeners = listeners.slice();
527                         for (i = 0; (listener = listeners[i]); ++i) {
528                                 apply.call(listener, this, args);
529                         }
530                 } else {
531                         switch (arguments.length) {
532                         case 1:
533                                 call.call(listeners, this);
534                                 break;
535                         case 2:
536                                 call.call(listeners, this, arguments[1]);
537                                 break;
538                         case 3:
539                                 call.call(listeners, this, arguments[1], arguments[2]);
540                                 break;
541                         default:
542                                 l = arguments.length;
543                                 args = new Array(l - 1);
544                                 for (i = 1; i < l; ++i) {
545                                         args[i - 1] = arguments$1[i];
546                                 }
547                                 apply.call(listeners, this, args);
548                         }
549                 }
550         };
551
552         methods = {
553                 on: on,
554                 once: once,
555                 off: off,
556                 emit: emit
557         };
558
559         descriptors = {
560                 on: d_1(on),
561                 once: d_1(once),
562                 off: d_1(off),
563                 emit: d_1(emit)
564         };
565
566         base = defineProperties({}, descriptors);
567
568         module.exports = exports = function (o) {
569                 return (o == null) ? create(base) : defineProperties(Object(o), descriptors);
570         };
571         exports.methods = methods;
572         });
573         var eventEmitter_1 = eventEmitter.methods;
574
575         var validTypes = { object: true, symbol: true };
576
577         var isImplemented$7 = function () {
578                 var symbol;
579                 if (typeof Symbol !== 'function') { return false; }
580                 symbol = Symbol('test symbol');
581                 try { String(symbol); } catch (e) { return false; }
582
583                 // Return 'true' also for polyfills
584                 if (!validTypes[typeof Symbol.iterator]) { return false; }
585                 if (!validTypes[typeof Symbol.toPrimitive]) { return false; }
586                 if (!validTypes[typeof Symbol.toStringTag]) { return false; }
587
588                 return true;
589         };
590
591         var isSymbol = function (x) {
592                 if (!x) { return false; }
593                 if (typeof x === 'symbol') { return true; }
594                 if (!x.constructor) { return false; }
595                 if (x.constructor.name !== 'Symbol') { return false; }
596                 return (x[x.constructor.toStringTag] === 'Symbol');
597         };
598
599         var validateSymbol = function (value) {
600                 if (!isSymbol(value)) { throw new TypeError(value + " is not a symbol"); }
601                 return value;
602         };
603
604         var create$3 = Object.create, defineProperties = Object.defineProperties
605           , defineProperty$1 = Object.defineProperty, objPrototype = Object.prototype
606           , NativeSymbol, SymbolPolyfill, HiddenSymbol, globalSymbols = create$3(null)
607           , isNativeSafe;
608
609         if (typeof Symbol === 'function') {
610                 NativeSymbol = Symbol;
611                 try {
612                         String(NativeSymbol());
613                         isNativeSafe = true;
614                 } catch (ignore) {}
615         }
616
617         var generateName = (function () {
618                 var created = create$3(null);
619                 return function (desc) {
620                         var postfix = 0, name, ie11BugWorkaround;
621                         while (created[desc + (postfix || '')]) { ++postfix; }
622                         desc += (postfix || '');
623                         created[desc] = true;
624                         name = '@@' + desc;
625                         defineProperty$1(objPrototype, name, d_1.gs(null, function (value) {
626                                 // For IE11 issue see:
627                                 // https://connect.microsoft.com/IE/feedbackdetail/view/1928508/
628                                 //    ie11-broken-getters-on-dom-objects
629                                 // https://github.com/medikoo/es6-symbol/issues/12
630                                 if (ie11BugWorkaround) { return; }
631                                 ie11BugWorkaround = true;
632                                 defineProperty$1(this, name, d_1(value));
633                                 ie11BugWorkaround = false;
634                         }));
635                         return name;
636                 };
637         }());
638
639         // Internal constructor (not one exposed) for creating Symbol instances.
640         // This one is used to ensure that `someSymbol instanceof Symbol` always return false
641         HiddenSymbol = function Symbol(description) {
642                 if (this instanceof HiddenSymbol) { throw new TypeError('Symbol is not a constructor'); }
643                 return SymbolPolyfill(description);
644         };
645
646         // Exposed `Symbol` constructor
647         // (returns instances of HiddenSymbol)
648         var polyfill = SymbolPolyfill = function Symbol(description) {
649                 var symbol;
650                 if (this instanceof Symbol) { throw new TypeError('Symbol is not a constructor'); }
651                 if (isNativeSafe) { return NativeSymbol(description); }
652                 symbol = create$3(HiddenSymbol.prototype);
653                 description = (description === undefined ? '' : String(description));
654                 return defineProperties(symbol, {
655                         __description__: d_1('', description),
656                         __name__: d_1('', generateName(description))
657                 });
658         };
659         defineProperties(SymbolPolyfill, {
660                 for: d_1(function (key) {
661                         if (globalSymbols[key]) { return globalSymbols[key]; }
662                         return (globalSymbols[key] = SymbolPolyfill(String(key)));
663                 }),
664                 keyFor: d_1(function (s) {
665                         var key;
666                         validateSymbol(s);
667                         for (key in globalSymbols) { if (globalSymbols[key] === s) { return key; } }
668                 }),
669
670                 // To ensure proper interoperability with other native functions (e.g. Array.from)
671                 // fallback to eventual native implementation of given symbol
672                 hasInstance: d_1('', (NativeSymbol && NativeSymbol.hasInstance) || SymbolPolyfill('hasInstance')),
673                 isConcatSpreadable: d_1('', (NativeSymbol && NativeSymbol.isConcatSpreadable) ||
674                         SymbolPolyfill('isConcatSpreadable')),
675                 iterator: d_1('', (NativeSymbol && NativeSymbol.iterator) || SymbolPolyfill('iterator')),
676                 match: d_1('', (NativeSymbol && NativeSymbol.match) || SymbolPolyfill('match')),
677                 replace: d_1('', (NativeSymbol && NativeSymbol.replace) || SymbolPolyfill('replace')),
678                 search: d_1('', (NativeSymbol && NativeSymbol.search) || SymbolPolyfill('search')),
679                 species: d_1('', (NativeSymbol && NativeSymbol.species) || SymbolPolyfill('species')),
680                 split: d_1('', (NativeSymbol && NativeSymbol.split) || SymbolPolyfill('split')),
681                 toPrimitive: d_1('', (NativeSymbol && NativeSymbol.toPrimitive) || SymbolPolyfill('toPrimitive')),
682                 toStringTag: d_1('', (NativeSymbol && NativeSymbol.toStringTag) || SymbolPolyfill('toStringTag')),
683                 unscopables: d_1('', (NativeSymbol && NativeSymbol.unscopables) || SymbolPolyfill('unscopables'))
684         });
685
686         // Internal tweaks for real symbol producer
687         defineProperties(HiddenSymbol.prototype, {
688                 constructor: d_1(SymbolPolyfill),
689                 toString: d_1('', function () { return this.__name__; })
690         });
691
692         // Proper implementation of methods exposed on Symbol.prototype
693         // They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype
694         defineProperties(SymbolPolyfill.prototype, {
695                 toString: d_1(function () { return 'Symbol (' + validateSymbol(this).__description__ + ')'; }),
696                 valueOf: d_1(function () { return validateSymbol(this); })
697         });
698         defineProperty$1(SymbolPolyfill.prototype, SymbolPolyfill.toPrimitive, d_1('', function () {
699                 var symbol = validateSymbol(this);
700                 if (typeof symbol === 'symbol') { return symbol; }
701                 return symbol.toString();
702         }));
703         defineProperty$1(SymbolPolyfill.prototype, SymbolPolyfill.toStringTag, d_1('c', 'Symbol'));
704
705         // Proper implementaton of toPrimitive and toStringTag for returned symbol instances
706         defineProperty$1(HiddenSymbol.prototype, SymbolPolyfill.toStringTag,
707                 d_1('c', SymbolPolyfill.prototype[SymbolPolyfill.toStringTag]));
708
709         // Note: It's important to define `toPrimitive` as last one, as some implementations
710         // implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols)
711         // And that may invoke error in definition flow:
712         // See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149
713         defineProperty$1(HiddenSymbol.prototype, SymbolPolyfill.toPrimitive,
714                 d_1('c', SymbolPolyfill.prototype[SymbolPolyfill.toPrimitive]));
715
716         var es6Symbol = isImplemented$7() ? Symbol : polyfill;
717
718         var objToString = Object.prototype.toString
719           , id = objToString.call((function () { return arguments; })());
720
721         var isArguments = function (value) { return objToString.call(value) === id; };
722
723         var objToString$1 = Object.prototype.toString, id$1 = objToString$1.call("");
724
725         var isString = function (value) {
726                 return (
727                         typeof value === "string" ||
728                         (value &&
729                                 typeof value === "object" &&
730                                 (value instanceof String || objToString$1.call(value) === id$1)) ||
731                         false
732                 );
733         };
734
735         var isImplemented$8 = function () {
736                 if (typeof globalThis !== "object") { return false; }
737                 if (!globalThis) { return false; }
738                 return globalThis.Array === Array;
739         };
740
741         var naiveFallback = function () {
742                 if (typeof self === "object" && self) { return self; }
743                 if (typeof window === "object" && window) { return window; }
744                 throw new Error("Unable to resolve global `this`");
745         };
746
747         var implementation = (function () {
748                 if (this) { return this; }
749
750                 // Unexpected strict mode (may happen if e.g. bundled into ESM module)
751
752                 // Thanks @mathiasbynens -> https://mathiasbynens.be/notes/globalthis
753                 // In all ES5+ engines global object inherits from Object.prototype
754                 // (if you approached one that doesn't please report)
755                 try {
756                         Object.defineProperty(Object.prototype, "__global__", {
757                                 get: function () { return this; },
758                                 configurable: true
759                         });
760                 } catch (error) {
761                         // Unfortunate case of Object.prototype being sealed (via preventExtensions, seal or freeze)
762                         return naiveFallback();
763                 }
764                 try {
765                         // Safari case (window.__global__ is resolved with global context, but __global__ does not)
766                         if (!__global__) { return naiveFallback(); }
767                         return __global__;
768                 } finally {
769                         delete Object.prototype.__global__;
770                 }
771         })();
772
773         var globalThis_1 = isImplemented$8() ? globalThis : implementation;
774
775         var validTypes$1 = { object: true, symbol: true };
776
777         var isImplemented$9 = function () {
778                 var Symbol = globalThis_1.Symbol;
779                 var symbol;
780                 if (typeof Symbol !== "function") { return false; }
781                 symbol = Symbol("test symbol");
782                 try { String(symbol); }
783                 catch (e) { return false; }
784
785                 // Return 'true' also for polyfills
786                 if (!validTypes$1[typeof Symbol.iterator]) { return false; }
787                 if (!validTypes$1[typeof Symbol.toPrimitive]) { return false; }
788                 if (!validTypes$1[typeof Symbol.toStringTag]) { return false; }
789
790                 return true;
791         };
792
793         var isSymbol$1 = function (value) {
794                 if (!value) { return false; }
795                 if (typeof value === "symbol") { return true; }
796                 if (!value.constructor) { return false; }
797                 if (value.constructor.name !== "Symbol") { return false; }
798                 return value[value.constructor.toStringTag] === "Symbol";
799         };
800
801         var validateSymbol$1 = function (value) {
802                 if (!isSymbol$1(value)) { throw new TypeError(value + " is not a symbol"); }
803                 return value;
804         };
805
806         var create$4 = Object.create, defineProperty$2 = Object.defineProperty, objPrototype$1 = Object.prototype;
807
808         var created = create$4(null);
809         var generateName$1 = function (desc) {
810                 var postfix = 0, name, ie11BugWorkaround;
811                 while (created[desc + (postfix || "")]) { ++postfix; }
812                 desc += postfix || "";
813                 created[desc] = true;
814                 name = "@@" + desc;
815                 defineProperty$2(
816                         objPrototype$1,
817                         name,
818                         d_1.gs(null, function (value) {
819                                 // For IE11 issue see:
820                                 // https://connect.microsoft.com/IE/feedbackdetail/view/1928508/
821                                 //    ie11-broken-getters-on-dom-objects
822                                 // https://github.com/medikoo/es6-symbol/issues/12
823                                 if (ie11BugWorkaround) { return; }
824                                 ie11BugWorkaround = true;
825                                 defineProperty$2(this, name, d_1(value));
826                                 ie11BugWorkaround = false;
827                         })
828                 );
829                 return name;
830         };
831
832         var NativeSymbol$1 = globalThis_1.Symbol;
833
834         var standardSymbols = function (SymbolPolyfill) {
835                 return Object.defineProperties(SymbolPolyfill, {
836                         // To ensure proper interoperability with other native functions (e.g. Array.from)
837                         // fallback to eventual native implementation of given symbol
838                         hasInstance: d_1(
839                                 "", (NativeSymbol$1 && NativeSymbol$1.hasInstance) || SymbolPolyfill("hasInstance")
840                         ),
841                         isConcatSpreadable: d_1(
842                                 "",
843                                 (NativeSymbol$1 && NativeSymbol$1.isConcatSpreadable) ||
844                                         SymbolPolyfill("isConcatSpreadable")
845                         ),
846                         iterator: d_1("", (NativeSymbol$1 && NativeSymbol$1.iterator) || SymbolPolyfill("iterator")),
847                         match: d_1("", (NativeSymbol$1 && NativeSymbol$1.match) || SymbolPolyfill("match")),
848                         replace: d_1("", (NativeSymbol$1 && NativeSymbol$1.replace) || SymbolPolyfill("replace")),
849                         search: d_1("", (NativeSymbol$1 && NativeSymbol$1.search) || SymbolPolyfill("search")),
850                         species: d_1("", (NativeSymbol$1 && NativeSymbol$1.species) || SymbolPolyfill("species")),
851                         split: d_1("", (NativeSymbol$1 && NativeSymbol$1.split) || SymbolPolyfill("split")),
852                         toPrimitive: d_1(
853                                 "", (NativeSymbol$1 && NativeSymbol$1.toPrimitive) || SymbolPolyfill("toPrimitive")
854                         ),
855                         toStringTag: d_1(
856                                 "", (NativeSymbol$1 && NativeSymbol$1.toStringTag) || SymbolPolyfill("toStringTag")
857                         ),
858                         unscopables: d_1(
859                                 "", (NativeSymbol$1 && NativeSymbol$1.unscopables) || SymbolPolyfill("unscopables")
860                         )
861                 });
862         };
863
864         var registry = Object.create(null);
865
866         var symbolRegistry = function (SymbolPolyfill) {
867                 return Object.defineProperties(SymbolPolyfill, {
868                         for: d_1(function (key) {
869                                 if (registry[key]) { return registry[key]; }
870                                 return (registry[key] = SymbolPolyfill(String(key)));
871                         }),
872                         keyFor: d_1(function (symbol) {
873                                 var key;
874                                 validateSymbol$1(symbol);
875                                 for (key in registry) {
876                                         if (registry[key] === symbol) { return key; }
877                                 }
878                                 return undefined;
879                         })
880                 });
881         };
882
883         var NativeSymbol$2         = globalThis_1.Symbol;
884
885         var create$5 = Object.create
886           , defineProperties$1 = Object.defineProperties
887           , defineProperty$3 = Object.defineProperty;
888
889         var SymbolPolyfill$1, HiddenSymbol$1, isNativeSafe$1;
890
891         if (typeof NativeSymbol$2 === "function") {
892                 try {
893                         String(NativeSymbol$2());
894                         isNativeSafe$1 = true;
895                 } catch (ignore) {}
896         } else {
897                 NativeSymbol$2 = null;
898         }
899
900         // Internal constructor (not one exposed) for creating Symbol instances.
901         // This one is used to ensure that `someSymbol instanceof Symbol` always return false
902         HiddenSymbol$1 = function Symbol(description) {
903                 if (this instanceof HiddenSymbol$1) { throw new TypeError("Symbol is not a constructor"); }
904                 return SymbolPolyfill$1(description);
905         };
906
907         // Exposed `Symbol` constructor
908         // (returns instances of HiddenSymbol)
909         var polyfill$1 = SymbolPolyfill$1 = function Symbol(description) {
910                 var symbol;
911                 if (this instanceof Symbol) { throw new TypeError("Symbol is not a constructor"); }
912                 if (isNativeSafe$1) { return NativeSymbol$2(description); }
913                 symbol = create$5(HiddenSymbol$1.prototype);
914                 description = description === undefined ? "" : String(description);
915                 return defineProperties$1(symbol, {
916                         __description__: d_1("", description),
917                         __name__: d_1("", generateName$1(description))
918                 });
919         };
920
921         standardSymbols(SymbolPolyfill$1);
922         symbolRegistry(SymbolPolyfill$1);
923
924         // Internal tweaks for real symbol producer
925         defineProperties$1(HiddenSymbol$1.prototype, {
926                 constructor: d_1(SymbolPolyfill$1),
927                 toString: d_1("", function () { return this.__name__; })
928         });
929
930         // Proper implementation of methods exposed on Symbol.prototype
931         // They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype
932         defineProperties$1(SymbolPolyfill$1.prototype, {
933                 toString: d_1(function () { return "Symbol (" + validateSymbol$1(this).__description__ + ")"; }),
934                 valueOf: d_1(function () { return validateSymbol$1(this); })
935         });
936         defineProperty$3(
937                 SymbolPolyfill$1.prototype,
938                 SymbolPolyfill$1.toPrimitive,
939                 d_1("", function () {
940                         var symbol = validateSymbol$1(this);
941                         if (typeof symbol === "symbol") { return symbol; }
942                         return symbol.toString();
943                 })
944         );
945         defineProperty$3(SymbolPolyfill$1.prototype, SymbolPolyfill$1.toStringTag, d_1("c", "Symbol"));
946
947         // Proper implementaton of toPrimitive and toStringTag for returned symbol instances
948         defineProperty$3(
949                 HiddenSymbol$1.prototype, SymbolPolyfill$1.toStringTag,
950                 d_1("c", SymbolPolyfill$1.prototype[SymbolPolyfill$1.toStringTag])
951         );
952
953         // Note: It's important to define `toPrimitive` as last one, as some implementations
954         // implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols)
955         // And that may invoke error in definition flow:
956         // See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149
957         defineProperty$3(
958                 HiddenSymbol$1.prototype, SymbolPolyfill$1.toPrimitive,
959                 d_1("c", SymbolPolyfill$1.prototype[SymbolPolyfill$1.toPrimitive])
960         );
961
962         var es6Symbol$1 = isImplemented$9()
963                 ? globalThis_1.Symbol
964                 : polyfill$1;
965
966         var iteratorSymbol = es6Symbol$1.iterator
967           , isArray        = Array.isArray;
968
969         var isIterable = function (value) {
970                 if (!isValue(value)) { return false; }
971                 if (isArray(value)) { return true; }
972                 if (isString(value)) { return true; }
973                 if (isArguments(value)) { return true; }
974                 return typeof value[iteratorSymbol] === "function";
975         };
976
977         var validIterable = function (value) {
978                 if (!isIterable(value)) { throw new TypeError(value + " is not iterable"); }
979                 return value;
980         };
981
982         var objectToString = Object.prototype.toString;
983
984         var coerce = function (value) {
985                 if (!is(value)) { return null; }
986                 if (is$1(value)) {
987                         // Reject Object.prototype.toString coercion
988                         var valueToString = value.toString;
989                         if (typeof valueToString !== "function") { return null; }
990                         if (valueToString === objectToString) { return null; }
991                         // Note: It can be object coming from other realm, still as there's no ES3 and CSP compliant
992                         // way to resolve its realm's Object.prototype.toString it's left as not addressed edge case
993                 }
994                 try {
995                         return "" + value; // Ensure implicit coercion
996                 } catch (error) {
997                         return null;
998                 }
999         };
1000
1001         var safeToString = function (value) {
1002                 try {
1003                         return value.toString();
1004                 } catch (error) {
1005                         try { return String(value); }
1006                         catch (error2) { return null; }
1007                 }
1008         };
1009
1010         var reNewLine = /[\n\r\u2028\u2029]/g;
1011
1012         var toShortString = function (value) {
1013                 var string = safeToString(value);
1014                 if (string === null) { return "<Non-coercible to string value>"; }
1015                 // Trim if too long
1016                 if (string.length > 100) { string = string.slice(0, 99) + "…"; }
1017                 // Replace eventual new lines
1018                 string = string.replace(reNewLine, function (char) {
1019                         switch (char) {
1020                                 case "\n":
1021                                         return "\\n";
1022                                 case "\r":
1023                                         return "\\r";
1024                                 case "\u2028":
1025                                         return "\\u2028";
1026                                 case "\u2029":
1027                                         return "\\u2029";
1028                                 /* istanbul ignore next */
1029                                 default:
1030                                         throw new Error("Unexpected character");
1031                         }
1032                 });
1033                 return string;
1034         };
1035
1036         var resolveMessage = function (message, value) {
1037                 return message.replace("%v", toShortString(value));
1038         };
1039
1040         var resolveException = function (value, defaultMessage, inputOptions) {
1041                 if (!is$1(inputOptions)) { throw new TypeError(resolveMessage(defaultMessage, value)); }
1042                 if (!is(value)) {
1043                         if ("default" in inputOptions) { return inputOptions["default"]; }
1044                         if (inputOptions.isOptional) { return null; }
1045                 }
1046                 var errorMessage = coerce(inputOptions.errorMessage);
1047                 if (!is(errorMessage)) { errorMessage = defaultMessage; }
1048                 throw new TypeError(resolveMessage(errorMessage, value));
1049         };
1050
1051         var ensure = function (value/*, options*/) {
1052                 if (is(value)) { return value; }
1053                 return resolveException(value, "Cannot use %v", arguments[1]);
1054         };
1055
1056         var ensure$1 = function (value/*, options*/) {
1057                 if (is$4(value)) { return value; }
1058                 return resolveException(value, "%v is not a plain function", arguments[1]);
1059         };
1060
1061         var isImplemented$a = function () {
1062                 var from = Array.from, arr, result;
1063                 if (typeof from !== "function") { return false; }
1064                 arr = ["raz", "dwa"];
1065                 result = from(arr);
1066                 return Boolean(result && result !== arr && result[1] === "dwa");
1067         };
1068
1069         var objToString$2 = Object.prototype.toString
1070           , isFunctionStringTag = RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);
1071
1072         var isFunction = function (value) {
1073                 return typeof value === "function" && isFunctionStringTag(objToString$2.call(value));
1074         };
1075
1076         var iteratorSymbol$1 = es6Symbol$1.iterator
1077           , isArray$1        = Array.isArray
1078           , call           = Function.prototype.call
1079           , desc           = { configurable: true, enumerable: true, writable: true, value: null }
1080           , defineProperty$4 = Object.defineProperty;
1081
1082         // eslint-disable-next-line complexity, max-lines-per-function
1083         var shim$7 = function (arrayLike/*, mapFn, thisArg*/) {
1084                 var mapFn = arguments[1]
1085                   , thisArg = arguments[2]
1086                   , Context
1087                   , i
1088                   , j
1089                   , arr
1090                   , length
1091                   , code
1092                   , iterator
1093                   , result
1094                   , getIterator
1095                   , value;
1096
1097                 arrayLike = Object(validValue(arrayLike));
1098
1099                 if (isValue(mapFn)) { validCallable(mapFn); }
1100                 if (!this || this === Array || !isFunction(this)) {
1101                         // Result: Plain array
1102                         if (!mapFn) {
1103                                 if (isArguments(arrayLike)) {
1104                                         // Source: Arguments
1105                                         length = arrayLike.length;
1106                                         if (length !== 1) { return Array.apply(null, arrayLike); }
1107                                         arr = new Array(1);
1108                                         arr[0] = arrayLike[0];
1109                                         return arr;
1110                                 }
1111                                 if (isArray$1(arrayLike)) {
1112                                         // Source: Array
1113                                         arr = new Array((length = arrayLike.length));
1114                                         for (i = 0; i < length; ++i) { arr[i] = arrayLike[i]; }
1115                                         return arr;
1116                                 }
1117                         }
1118                         arr = [];
1119                 } else {
1120                         // Result: Non plain array
1121                         Context = this;
1122                 }
1123
1124                 if (!isArray$1(arrayLike)) {
1125                         if ((getIterator = arrayLike[iteratorSymbol$1]) !== undefined) {
1126                                 // Source: Iterator
1127                                 iterator = validCallable(getIterator).call(arrayLike);
1128                                 if (Context) { arr = new Context(); }
1129                                 result = iterator.next();
1130                                 i = 0;
1131                                 while (!result.done) {
1132                                         value = mapFn ? call.call(mapFn, thisArg, result.value, i) : result.value;
1133                                         if (Context) {
1134                                                 desc.value = value;
1135                                                 defineProperty$4(arr, i, desc);
1136                                         } else {
1137                                                 arr[i] = value;
1138                                         }
1139                                         result = iterator.next();
1140                                         ++i;
1141                                 }
1142                                 length = i;
1143                         } else if (isString(arrayLike)) {
1144                                 // Source: String
1145                                 length = arrayLike.length;
1146                                 if (Context) { arr = new Context(); }
1147                                 for (i = 0, j = 0; i < length; ++i) {
1148                                         value = arrayLike[i];
1149                                         if (i + 1 < length) {
1150                                                 code = value.charCodeAt(0);
1151                                                 // eslint-disable-next-line max-depth
1152                                                 if (code >= 0xd800 && code <= 0xdbff) { value += arrayLike[++i]; }
1153                                         }
1154                                         value = mapFn ? call.call(mapFn, thisArg, value, j) : value;
1155                                         if (Context) {
1156                                                 desc.value = value;
1157                                                 defineProperty$4(arr, j, desc);
1158                                         } else {
1159                                                 arr[j] = value;
1160                                         }
1161                                         ++j;
1162                                 }
1163                                 length = j;
1164                         }
1165                 }
1166                 if (length === undefined) {
1167                         // Source: array or array-like
1168                         length = toPosInteger(arrayLike.length);
1169                         if (Context) { arr = new Context(length); }
1170                         for (i = 0; i < length; ++i) {
1171                                 value = mapFn ? call.call(mapFn, thisArg, arrayLike[i], i) : arrayLike[i];
1172                                 if (Context) {
1173                                         desc.value = value;
1174                                         defineProperty$4(arr, i, desc);
1175                                 } else {
1176                                         arr[i] = value;
1177                                 }
1178                         }
1179                 }
1180                 if (Context) {
1181                         desc.value = null;
1182                         arr.length = length;
1183                 }
1184                 return arr;
1185         };
1186
1187         var from_1 = isImplemented$a() ? Array.from : shim$7;
1188
1189         var copy = function (obj/*, propertyNames, options*/) {
1190                 var copy = Object(validValue(obj)), propertyNames = arguments[1], options = Object(arguments[2]);
1191                 if (copy !== obj && !propertyNames) { return copy; }
1192                 var result = {};
1193                 if (propertyNames) {
1194                         from_1(propertyNames, function (propertyName) {
1195                                 if (options.ensure || propertyName in obj) { result[propertyName] = obj[propertyName]; }
1196                         });
1197                 } else {
1198                         assign(result, obj);
1199                 }
1200                 return result;
1201         };
1202
1203         var bind                    = Function.prototype.bind
1204           , call$1                    = Function.prototype.call
1205           , keys$2                    = Object.keys
1206           , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
1207
1208         var _iterate = function (method, defVal) {
1209                 return function (obj, cb/*, thisArg, compareFn*/) {
1210                         var list, thisArg = arguments[2], compareFn = arguments[3];
1211                         obj = Object(validValue(obj));
1212                         validCallable(cb);
1213
1214                         list = keys$2(obj);
1215                         if (compareFn) {
1216                                 list.sort(typeof compareFn === "function" ? bind.call(compareFn, obj) : undefined);
1217                         }
1218                         if (typeof method !== "function") { method = list[method]; }
1219                         return call$1.call(method, list, function (key, index) {
1220                                 if (!objPropertyIsEnumerable.call(obj, key)) { return defVal; }
1221                                 return call$1.call(cb, thisArg, obj[key], key, obj, index);
1222                         });
1223                 };
1224         };
1225
1226         var forEach$1 = _iterate("forEach");
1227
1228         var call$2     = Function.prototype.call;
1229
1230         var map$1 = function (obj, cb/*, thisArg*/) {
1231                 var result = {}, thisArg = arguments[2];
1232                 validCallable(cb);
1233                 forEach$1(obj, function (value, key, targetObj, index) {
1234                         result[key] = call$2.call(cb, thisArg, value, key, targetObj, index);
1235                 });
1236                 return result;
1237         };
1238
1239         var bind$1 = Function.prototype.bind
1240           , defineProperty$5 = Object.defineProperty
1241           , hasOwnProperty$1 = Object.prototype.hasOwnProperty
1242           , define;
1243
1244         define = function (name, desc, options) {
1245                 var value = ensure(desc) && ensure$1(desc.value), dgs;
1246                 dgs = copy(desc);
1247                 delete dgs.writable;
1248                 delete dgs.value;
1249                 dgs.get = function () {
1250                         if (!options.overwriteDefinition && hasOwnProperty$1.call(this, name)) { return value; }
1251                         desc.value = bind$1.call(value, options.resolveContext ? options.resolveContext(this) : this);
1252                         defineProperty$5(this, name, desc);
1253                         return this[name];
1254                 };
1255                 return dgs;
1256         };
1257
1258         var autoBind = function (props/*, options*/) {
1259                 var options = normalizeOptions(arguments[1]);
1260                 if (is(options.resolveContext)) { ensure$1(options.resolveContext); }
1261                 return map$1(props, function (desc, name) { return define(name, desc, options); });
1262         };
1263
1264         var defineProperty$6 = Object.defineProperty, defineProperties$2 = Object.defineProperties, Iterator;
1265
1266         var es6Iterator = Iterator = function (list, context) {
1267                 if (!(this instanceof Iterator)) { throw new TypeError("Constructor requires 'new'"); }
1268                 defineProperties$2(this, {
1269                         __list__: d_1("w", validValue(list)),
1270                         __context__: d_1("w", context),
1271                         __nextIndex__: d_1("w", 0)
1272                 });
1273                 if (!context) { return; }
1274                 validCallable(context.on);
1275                 context.on("_add", this._onAdd);
1276                 context.on("_delete", this._onDelete);
1277                 context.on("_clear", this._onClear);
1278         };
1279
1280         // Internal %IteratorPrototype% doesn't expose its constructor
1281         delete Iterator.prototype.constructor;
1282
1283         defineProperties$2(
1284                 Iterator.prototype,
1285                 assign(
1286                         {
1287                                 _next: d_1(function () {
1288                                         var i;
1289                                         if (!this.__list__) { return undefined; }
1290                                         if (this.__redo__) {
1291                                                 i = this.__redo__.shift();
1292                                                 if (i !== undefined) { return i; }
1293                                         }
1294                                         if (this.__nextIndex__ < this.__list__.length) { return this.__nextIndex__++; }
1295                                         this._unBind();
1296                                         return undefined;
1297                                 }),
1298                                 next: d_1(function () {
1299                                         return this._createResult(this._next());
1300                                 }),
1301                                 _createResult: d_1(function (i) {
1302                                         if (i === undefined) { return { done: true, value: undefined }; }
1303                                         return { done: false, value: this._resolve(i) };
1304                                 }),
1305                                 _resolve: d_1(function (i) {
1306                                         return this.__list__[i];
1307                                 }),
1308                                 _unBind: d_1(function () {
1309                                         this.__list__ = null;
1310                                         delete this.__redo__;
1311                                         if (!this.__context__) { return; }
1312                                         this.__context__.off("_add", this._onAdd);
1313                                         this.__context__.off("_delete", this._onDelete);
1314                                         this.__context__.off("_clear", this._onClear);
1315                                         this.__context__ = null;
1316                                 }),
1317                                 toString: d_1(function () {
1318                                         return "[object " + (this[es6Symbol$1.toStringTag] || "Object") + "]";
1319                                 })
1320                         },
1321                         autoBind({
1322                                 _onAdd: d_1(function (index) {
1323                                         if (index >= this.__nextIndex__) { return; }
1324                                         ++this.__nextIndex__;
1325                                         if (!this.__redo__) {
1326                                                 defineProperty$6(this, "__redo__", d_1("c", [index]));
1327                                                 return;
1328                                         }
1329                                         this.__redo__.forEach(function (redo, i) {
1330                                                 if (redo >= index) { this.__redo__[i] = ++redo; }
1331                                         }, this);
1332                                         this.__redo__.push(index);
1333                                 }),
1334                                 _onDelete: d_1(function (index) {
1335                                         var i;
1336                                         if (index >= this.__nextIndex__) { return; }
1337                                         --this.__nextIndex__;
1338                                         if (!this.__redo__) { return; }
1339                                         i = this.__redo__.indexOf(index);
1340                                         if (i !== -1) { this.__redo__.splice(i, 1); }
1341                                         this.__redo__.forEach(function (redo, j) {
1342                                                 if (redo > index) { this.__redo__[j] = --redo; }
1343                                         }, this);
1344                                 }),
1345                                 _onClear: d_1(function () {
1346                                         if (this.__redo__) { clear.call(this.__redo__); }
1347                                         this.__nextIndex__ = 0;
1348                                 })
1349                         })
1350                 )
1351         );
1352
1353         defineProperty$6(
1354                 Iterator.prototype,
1355                 es6Symbol$1.iterator,
1356                 d_1(function () {
1357                         return this;
1358                 })
1359         );
1360
1361         var array = createCommonjsModule(function (module) {
1362
1363
1364
1365         var defineProperty = Object.defineProperty, ArrayIterator;
1366
1367         ArrayIterator = module.exports = function (arr, kind) {
1368                 if (!(this instanceof ArrayIterator)) { throw new TypeError("Constructor requires 'new'"); }
1369                 es6Iterator.call(this, arr);
1370                 if (!kind) { kind = "value"; }
1371                 else if (contains.call(kind, "key+value")) { kind = "key+value"; }
1372                 else if (contains.call(kind, "key")) { kind = "key"; }
1373                 else { kind = "value"; }
1374                 defineProperty(this, "__kind__", d_1("", kind));
1375         };
1376         if (setPrototypeOf) { setPrototypeOf(ArrayIterator, es6Iterator); }
1377
1378         // Internal %ArrayIteratorPrototype% doesn't expose its constructor
1379         delete ArrayIterator.prototype.constructor;
1380
1381         ArrayIterator.prototype = Object.create(es6Iterator.prototype, {
1382                 _resolve: d_1(function (i) {
1383                         if (this.__kind__ === "value") { return this.__list__[i]; }
1384                         if (this.__kind__ === "key+value") { return [i, this.__list__[i]]; }
1385                         return i;
1386                 })
1387         });
1388         defineProperty(ArrayIterator.prototype, es6Symbol$1.toStringTag, d_1("c", "Array Iterator"));
1389         });
1390
1391         var string = createCommonjsModule(function (module) {
1392
1393
1394
1395         var defineProperty = Object.defineProperty, StringIterator;
1396
1397         StringIterator = module.exports = function (str) {
1398                 if (!(this instanceof StringIterator)) { throw new TypeError("Constructor requires 'new'"); }
1399                 str = String(str);
1400                 es6Iterator.call(this, str);
1401                 defineProperty(this, "__length__", d_1("", str.length));
1402         };
1403         if (setPrototypeOf) { setPrototypeOf(StringIterator, es6Iterator); }
1404
1405         // Internal %ArrayIteratorPrototype% doesn't expose its constructor
1406         delete StringIterator.prototype.constructor;
1407
1408         StringIterator.prototype = Object.create(es6Iterator.prototype, {
1409                 _next: d_1(function () {
1410                         if (!this.__list__) { return undefined; }
1411                         if (this.__nextIndex__ < this.__length__) { return this.__nextIndex__++; }
1412                         this._unBind();
1413                         return undefined;
1414                 }),
1415                 _resolve: d_1(function (i) {
1416                         var char = this.__list__[i], code;
1417                         if (this.__nextIndex__ === this.__length__) { return char; }
1418                         code = char.charCodeAt(0);
1419                         if (code >= 0xd800 && code <= 0xdbff) { return char + this.__list__[this.__nextIndex__++]; }
1420                         return char;
1421                 })
1422         });
1423         defineProperty(StringIterator.prototype, es6Symbol$1.toStringTag, d_1("c", "String Iterator"));
1424         });
1425
1426         var iteratorSymbol$2 = es6Symbol$1.iterator;
1427
1428         var get = function (obj) {
1429                 if (typeof validIterable(obj)[iteratorSymbol$2] === "function") { return obj[iteratorSymbol$2](); }
1430                 if (isArguments(obj)) { return new array(obj); }
1431                 if (isString(obj)) { return new string(obj); }
1432                 return new array(obj);
1433         };
1434
1435         var isArray$2 = Array.isArray, call$3 = Function.prototype.call, some = Array.prototype.some;
1436
1437         var forOf = function (iterable, cb /*, thisArg*/) {
1438                 var mode, thisArg = arguments[2], result, doBreak, broken, i, length, char, code;
1439                 if (isArray$2(iterable) || isArguments(iterable)) { mode = "array"; }
1440                 else if (isString(iterable)) { mode = "string"; }
1441                 else { iterable = get(iterable); }
1442
1443                 validCallable(cb);
1444                 doBreak = function () {
1445                         broken = true;
1446                 };
1447                 if (mode === "array") {
1448                         some.call(iterable, function (value) {
1449                                 call$3.call(cb, thisArg, value, doBreak);
1450                                 return broken;
1451                         });
1452                         return;
1453                 }
1454                 if (mode === "string") {
1455                         length = iterable.length;
1456                         for (i = 0; i < length; ++i) {
1457                                 char = iterable[i];
1458                                 if (i + 1 < length) {
1459                                         code = char.charCodeAt(0);
1460                                         if (code >= 0xd800 && code <= 0xdbff) { char += iterable[++i]; }
1461                                 }
1462                                 call$3.call(cb, thisArg, char, doBreak);
1463                                 if (broken) { break; }
1464                         }
1465                         return;
1466                 }
1467                 result = iterable.next();
1468
1469                 while (!result.done) {
1470                         call$3.call(cb, thisArg, result.value, doBreak);
1471                         if (broken) { return; }
1472                         result = iterable.next();
1473                 }
1474         };
1475
1476         var iterator = createCommonjsModule(function (module) {
1477
1478         var toStringTagSymbol = es6Symbol.toStringTag
1479
1480           , defineProperty = Object.defineProperty
1481           , SetIterator;
1482
1483         SetIterator = module.exports = function (set, kind) {
1484                 if (!(this instanceof SetIterator)) { return new SetIterator(set, kind); }
1485                 es6Iterator.call(this, set.__setData__, set);
1486                 if (!kind) { kind = 'value'; }
1487                 else if (contains.call(kind, 'key+value')) { kind = 'key+value'; }
1488                 else { kind = 'value'; }
1489                 defineProperty(this, '__kind__', d_1('', kind));
1490         };
1491         if (setPrototypeOf) { setPrototypeOf(SetIterator, es6Iterator); }
1492
1493         SetIterator.prototype = Object.create(es6Iterator.prototype, {
1494                 constructor: d_1(SetIterator),
1495                 _resolve: d_1(function (i) {
1496                         if (this.__kind__ === 'value') { return this.__list__[i]; }
1497                         return [this.__list__[i], this.__list__[i]];
1498                 }),
1499                 toString: d_1(function () { return '[object Set Iterator]'; })
1500         });
1501         defineProperty(SetIterator.prototype, toStringTagSymbol, d_1('c', 'Set Iterator'));
1502         });
1503
1504         // Exports true if environment provides native `Set` implementation,
1505
1506         var isNativeImplemented = (function () {
1507                 if (typeof Set === 'undefined') { return false; }
1508                 return (Object.prototype.toString.call(Set.prototype) === '[object Set]');
1509         }());
1510
1511         var iterator$1       = validIterable
1512
1513           , call$4 = Function.prototype.call
1514           , defineProperty$7 = Object.defineProperty, getPrototypeOf$1 = Object.getPrototypeOf
1515           , SetPoly, getValues, NativeSet;
1516
1517         if (isNativeImplemented) { NativeSet = Set; }
1518
1519         var polyfill$2 = SetPoly = function Set(/*iterable*/) {
1520                 var iterable = arguments[0], self;
1521                 if (!(this instanceof SetPoly)) { throw new TypeError('Constructor requires \'new\''); }
1522                 if (isNativeImplemented && setPrototypeOf) { self = setPrototypeOf(new NativeSet(), getPrototypeOf$1(this)); }
1523                 else { self = this; }
1524                 if (iterable != null) { iterator$1(iterable); }
1525                 defineProperty$7(self, '__setData__', d_1('c', []));
1526                 if (!iterable) { return self; }
1527                 forOf(iterable, function (value) {
1528                         if (eIndexOf.call(this, value) !== -1) { return; }
1529                         this.push(value);
1530                 }, self.__setData__);
1531                 return self;
1532         };
1533
1534         if (isNativeImplemented) {
1535                 if (setPrototypeOf) { setPrototypeOf(SetPoly, NativeSet); }
1536                 SetPoly.prototype = Object.create(NativeSet.prototype, { constructor: d_1(SetPoly) });
1537         }
1538
1539         eventEmitter(Object.defineProperties(SetPoly.prototype, {
1540                 add: d_1(function (value) {
1541                         if (this.has(value)) { return this; }
1542                         this.emit('_add', this.__setData__.push(value) - 1, value);
1543                         return this;
1544                 }),
1545                 clear: d_1(function () {
1546                         if (!this.__setData__.length) { return; }
1547                         clear.call(this.__setData__);
1548                         this.emit('_clear');
1549                 }),
1550                 delete: d_1(function (value) {
1551                         var index = eIndexOf.call(this.__setData__, value);
1552                         if (index === -1) { return false; }
1553                         this.__setData__.splice(index, 1);
1554                         this.emit('_delete', index, value);
1555                         return true;
1556                 }),
1557                 entries: d_1(function () { return new iterator(this, 'key+value'); }),
1558                 forEach: d_1(function (cb/*, thisArg*/) {
1559                         var thisArg = arguments[1], iterator, result, value;
1560                         validCallable(cb);
1561                         iterator = this.values();
1562                         result = iterator._next();
1563                         while (result !== undefined) {
1564                                 value = iterator._resolve(result);
1565                                 call$4.call(cb, thisArg, value, value, this);
1566                                 result = iterator._next();
1567                         }
1568                 }),
1569                 has: d_1(function (value) {
1570                         return (eIndexOf.call(this.__setData__, value) !== -1);
1571                 }),
1572                 keys: d_1(getValues = function () { return this.values(); }),
1573                 size: d_1.gs(function () { return this.__setData__.length; }),
1574                 values: d_1(function () { return new iterator(this); }),
1575                 toString: d_1(function () { return '[object Set]'; })
1576         }));
1577         defineProperty$7(SetPoly.prototype, es6Symbol.iterator, d_1(getValues));
1578         defineProperty$7(SetPoly.prototype, es6Symbol.toStringTag, d_1('c', 'Set'));
1579
1580         var es6Set = isImplemented() ? Set : polyfill$2;
1581
1582         var isImplemented$b = function () {
1583                 var map, iterator, result;
1584                 if (typeof Map !== 'function') { return false; }
1585                 try {
1586                         // WebKit doesn't support arguments and crashes
1587                         map = new Map([['raz', 'one'], ['dwa', 'two'], ['trzy', 'three']]);
1588                 } catch (e) {
1589                         return false;
1590                 }
1591                 if (String(map) !== '[object Map]') { return false; }
1592                 if (map.size !== 3) { return false; }
1593                 if (typeof map.clear !== 'function') { return false; }
1594                 if (typeof map.delete !== 'function') { return false; }
1595                 if (typeof map.entries !== 'function') { return false; }
1596                 if (typeof map.forEach !== 'function') { return false; }
1597                 if (typeof map.get !== 'function') { return false; }
1598                 if (typeof map.has !== 'function') { return false; }
1599                 if (typeof map.keys !== 'function') { return false; }
1600                 if (typeof map.set !== 'function') { return false; }
1601                 if (typeof map.values !== 'function') { return false; }
1602
1603                 iterator = map.entries();
1604                 result = iterator.next();
1605                 if (result.done !== false) { return false; }
1606                 if (!result.value) { return false; }
1607                 if (result.value[0] !== 'raz') { return false; }
1608                 if (result.value[1] !== 'one') { return false; }
1609
1610                 return true;
1611         };
1612
1613         var forEach$2 = Array.prototype.forEach, create$6 = Object.create;
1614
1615         // eslint-disable-next-line no-unused-vars
1616         var primitiveSet = function (arg/*, …args*/) {
1617                 var set = create$6(null);
1618                 forEach$2.call(arguments, function (name) { set[name] = true; });
1619                 return set;
1620         };
1621
1622         var iteratorKinds = primitiveSet('key',
1623                 'value', 'key+value');
1624
1625         var iterator$2 = createCommonjsModule(function (module) {
1626
1627         var toStringTagSymbol = es6Symbol$1.toStringTag
1628
1629           , defineProperties = Object.defineProperties
1630           , unBind = es6Iterator.prototype._unBind
1631           , MapIterator;
1632
1633         MapIterator = module.exports = function (map, kind) {
1634                 if (!(this instanceof MapIterator)) { return new MapIterator(map, kind); }
1635                 es6Iterator.call(this, map.__mapKeysData__, map);
1636                 if (!kind || !iteratorKinds[kind]) { kind = 'key+value'; }
1637                 defineProperties(this, {
1638                         __kind__: d_1('', kind),
1639                         __values__: d_1('w', map.__mapValuesData__)
1640                 });
1641         };
1642         if (setPrototypeOf) { setPrototypeOf(MapIterator, es6Iterator); }
1643
1644         MapIterator.prototype = Object.create(es6Iterator.prototype, {
1645                 constructor: d_1(MapIterator),
1646                 _resolve: d_1(function (i) {
1647                         if (this.__kind__ === 'value') { return this.__values__[i]; }
1648                         if (this.__kind__ === 'key') { return this.__list__[i]; }
1649                         return [this.__list__[i], this.__values__[i]];
1650                 }),
1651                 _unBind: d_1(function () {
1652                         this.__values__ = null;
1653                         unBind.call(this);
1654                 }),
1655                 toString: d_1(function () { return '[object Map Iterator]'; })
1656         });
1657         Object.defineProperty(MapIterator.prototype, toStringTagSymbol,
1658                 d_1('c', 'Map Iterator'));
1659         });
1660
1661         // Exports true if environment provides native `Map` implementation,
1662
1663         var isNativeImplemented$1 = (function () {
1664                 if (typeof Map === 'undefined') { return false; }
1665                 return (Object.prototype.toString.call(new Map()) === '[object Map]');
1666         }());
1667
1668         var iterator$3       = validIterable
1669
1670           , call$5 = Function.prototype.call
1671           , defineProperties$3 = Object.defineProperties, getPrototypeOf$2 = Object.getPrototypeOf
1672           , MapPoly;
1673
1674         var polyfill$3 = MapPoly = function (/*iterable*/) {
1675                 var iterable = arguments[0], keys, values, self;
1676                 if (!(this instanceof MapPoly)) { throw new TypeError('Constructor requires \'new\''); }
1677                 if (isNativeImplemented$1 && setPrototypeOf && (Map !== MapPoly)) {
1678                         self = setPrototypeOf(new Map(), getPrototypeOf$2(this));
1679                 } else {
1680                         self = this;
1681                 }
1682                 if (iterable != null) { iterator$3(iterable); }
1683                 defineProperties$3(self, {
1684                         __mapKeysData__: d_1('c', keys = []),
1685                         __mapValuesData__: d_1('c', values = [])
1686                 });
1687                 if (!iterable) { return self; }
1688                 forOf(iterable, function (value) {
1689                         var key = validValue(value)[0];
1690                         value = value[1];
1691                         if (eIndexOf.call(keys, key) !== -1) { return; }
1692                         keys.push(key);
1693                         values.push(value);
1694                 }, self);
1695                 return self;
1696         };
1697
1698         if (isNativeImplemented$1) {
1699                 if (setPrototypeOf) { setPrototypeOf(MapPoly, Map); }
1700                 MapPoly.prototype = Object.create(Map.prototype, {
1701                         constructor: d_1(MapPoly)
1702                 });
1703         }
1704
1705         eventEmitter(defineProperties$3(MapPoly.prototype, {
1706                 clear: d_1(function () {
1707                         if (!this.__mapKeysData__.length) { return; }
1708                         clear.call(this.__mapKeysData__);
1709                         clear.call(this.__mapValuesData__);
1710                         this.emit('_clear');
1711                 }),
1712                 delete: d_1(function (key) {
1713                         var index = eIndexOf.call(this.__mapKeysData__, key);
1714                         if (index === -1) { return false; }
1715                         this.__mapKeysData__.splice(index, 1);
1716                         this.__mapValuesData__.splice(index, 1);
1717                         this.emit('_delete', index, key);
1718                         return true;
1719                 }),
1720                 entries: d_1(function () { return new iterator$2(this, 'key+value'); }),
1721                 forEach: d_1(function (cb/*, thisArg*/) {
1722                         var thisArg = arguments[1], iterator, result;
1723                         validCallable(cb);
1724                         iterator = this.entries();
1725                         result = iterator._next();
1726                         while (result !== undefined) {
1727                                 call$5.call(cb, thisArg, this.__mapValuesData__[result],
1728                                         this.__mapKeysData__[result], this);
1729                                 result = iterator._next();
1730                         }
1731                 }),
1732                 get: d_1(function (key) {
1733                         var index = eIndexOf.call(this.__mapKeysData__, key);
1734                         if (index === -1) { return; }
1735                         return this.__mapValuesData__[index];
1736                 }),
1737                 has: d_1(function (key) {
1738                         return (eIndexOf.call(this.__mapKeysData__, key) !== -1);
1739                 }),
1740                 keys: d_1(function () { return new iterator$2(this, 'key'); }),
1741                 set: d_1(function (key, value) {
1742                         var index = eIndexOf.call(this.__mapKeysData__, key), emit;
1743                         if (index === -1) {
1744                                 index = this.__mapKeysData__.push(key) - 1;
1745                                 emit = true;
1746                         }
1747                         this.__mapValuesData__[index] = value;
1748                         if (emit) { this.emit('_add', index, key); }
1749                         return this;
1750                 }),
1751                 size: d_1.gs(function () { return this.__mapKeysData__.length; }),
1752                 values: d_1(function () { return new iterator$2(this, 'value'); }),
1753                 toString: d_1(function () { return '[object Map]'; })
1754         }));
1755         Object.defineProperty(MapPoly.prototype, es6Symbol$1.iterator, d_1(function () {
1756                 return this.entries();
1757         }));
1758         Object.defineProperty(MapPoly.prototype, es6Symbol$1.toStringTag, d_1('c', 'Map'));
1759
1760         var es6Map = isImplemented$b() ? Map : polyfill$3;
1761
1762         var toStr = Object.prototype.toString;
1763
1764         var isArguments$1 = function isArguments(value) {
1765                 var str = toStr.call(value);
1766                 var isArgs = str === '[object Arguments]';
1767                 if (!isArgs) {
1768                         isArgs = str !== '[object Array]' &&
1769                                 value !== null &&
1770                                 typeof value === 'object' &&
1771                                 typeof value.length === 'number' &&
1772                                 value.length >= 0 &&
1773                                 toStr.call(value.callee) === '[object Function]';
1774                 }
1775                 return isArgs;
1776         };
1777
1778         var keysShim;
1779         if (!Object.keys) {
1780                 // modified from https://github.com/es-shims/es5-shim
1781                 var has = Object.prototype.hasOwnProperty;
1782                 var toStr$1 = Object.prototype.toString;
1783                 var isArgs = isArguments$1; // eslint-disable-line global-require
1784                 var isEnumerable = Object.prototype.propertyIsEnumerable;
1785                 var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
1786                 var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
1787                 var dontEnums = [
1788                         'toString',
1789                         'toLocaleString',
1790                         'valueOf',
1791                         'hasOwnProperty',
1792                         'isPrototypeOf',
1793                         'propertyIsEnumerable',
1794                         'constructor'
1795                 ];
1796                 var equalsConstructorPrototype = function (o) {
1797                         var ctor = o.constructor;
1798                         return ctor && ctor.prototype === o;
1799                 };
1800                 var excludedKeys = {
1801                         $applicationCache: true,
1802                         $console: true,
1803                         $external: true,
1804                         $frame: true,
1805                         $frameElement: true,
1806                         $frames: true,
1807                         $innerHeight: true,
1808                         $innerWidth: true,
1809                         $onmozfullscreenchange: true,
1810                         $onmozfullscreenerror: true,
1811                         $outerHeight: true,
1812                         $outerWidth: true,
1813                         $pageXOffset: true,
1814                         $pageYOffset: true,
1815                         $parent: true,
1816                         $scrollLeft: true,
1817                         $scrollTop: true,
1818                         $scrollX: true,
1819                         $scrollY: true,
1820                         $self: true,
1821                         $webkitIndexedDB: true,
1822                         $webkitStorageInfo: true,
1823                         $window: true
1824                 };
1825                 var hasAutomationEqualityBug = (function () {
1826                         /* global window */
1827                         if (typeof window === 'undefined') { return false; }
1828                         for (var k in window) {
1829                                 try {
1830                                         if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
1831                                                 try {
1832                                                         equalsConstructorPrototype(window[k]);
1833                                                 } catch (e) {
1834                                                         return true;
1835                                                 }
1836                                         }
1837                                 } catch (e) {
1838                                         return true;
1839                                 }
1840                         }
1841                         return false;
1842                 }());
1843                 var equalsConstructorPrototypeIfNotBuggy = function (o) {
1844                         /* global window */
1845                         if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
1846                                 return equalsConstructorPrototype(o);
1847                         }
1848                         try {
1849                                 return equalsConstructorPrototype(o);
1850                         } catch (e) {
1851                                 return false;
1852                         }
1853                 };
1854
1855                 keysShim = function keys(object) {
1856                         var isObject = object !== null && typeof object === 'object';
1857                         var isFunction = toStr$1.call(object) === '[object Function]';
1858                         var isArguments = isArgs(object);
1859                         var isString = isObject && toStr$1.call(object) === '[object String]';
1860                         var theKeys = [];
1861
1862                         if (!isObject && !isFunction && !isArguments) {
1863                                 throw new TypeError('Object.keys called on a non-object');
1864                         }
1865
1866                         var skipProto = hasProtoEnumBug && isFunction;
1867                         if (isString && object.length > 0 && !has.call(object, 0)) {
1868                                 for (var i = 0; i < object.length; ++i) {
1869                                         theKeys.push(String(i));
1870                                 }
1871                         }
1872
1873                         if (isArguments && object.length > 0) {
1874                                 for (var j = 0; j < object.length; ++j) {
1875                                         theKeys.push(String(j));
1876                                 }
1877                         } else {
1878                                 for (var name in object) {
1879                                         if (!(skipProto && name === 'prototype') && has.call(object, name)) {
1880                                                 theKeys.push(String(name));
1881                                         }
1882                                 }
1883                         }
1884
1885                         if (hasDontEnumBug) {
1886                                 var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
1887
1888                                 for (var k = 0; k < dontEnums.length; ++k) {
1889                                         if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
1890                                                 theKeys.push(dontEnums[k]);
1891                                         }
1892                                 }
1893                         }
1894                         return theKeys;
1895                 };
1896         }
1897         var implementation$1 = keysShim;
1898
1899         var slice = Array.prototype.slice;
1900
1901
1902         var origKeys = Object.keys;
1903         var keysShim$1 = origKeys ? function keys(o) { return origKeys(o); } : implementation$1;
1904
1905         var originalKeys = Object.keys;
1906
1907         keysShim$1.shim = function shimObjectKeys() {
1908                 if (Object.keys) {
1909                         var keysWorksWithArguments = (function () {
1910                                 // Safari 5.0 bug
1911                                 var args = Object.keys(arguments);
1912                                 return args && args.length === arguments.length;
1913                         }(1, 2));
1914                         if (!keysWorksWithArguments) {
1915                                 Object.keys = function keys(object) { // eslint-disable-line func-name-matching
1916                                         if (isArguments$1(object)) {
1917                                                 return originalKeys(slice.call(object));
1918                                         }
1919                                         return originalKeys(object);
1920                                 };
1921                         }
1922                 } else {
1923                         Object.keys = keysShim$1;
1924                 }
1925                 return Object.keys || keysShim$1;
1926         };
1927
1928         var objectKeys = keysShim$1;
1929
1930         var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
1931
1932         var toStr$2 = Object.prototype.toString;
1933         var concat = Array.prototype.concat;
1934         var origDefineProperty = Object.defineProperty;
1935
1936         var isFunction$1 = function (fn) {
1937                 return typeof fn === 'function' && toStr$2.call(fn) === '[object Function]';
1938         };
1939
1940         var arePropertyDescriptorsSupported = function () {
1941                 var obj = {};
1942                 try {
1943                         origDefineProperty(obj, 'x', { enumerable: false, value: obj });
1944                         // eslint-disable-next-line no-unused-vars, no-restricted-syntax
1945                         for (var _ in obj) { // jscs:ignore disallowUnusedVariables
1946                                 return false;
1947                         }
1948                         return obj.x === obj;
1949                 } catch (e) { /* this is IE 8. */
1950                         return false;
1951                 }
1952         };
1953         var supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();
1954
1955         var defineProperty$8 = function (object, name, value, predicate) {
1956                 if (name in object && (!isFunction$1(predicate) || !predicate())) {
1957                         return;
1958                 }
1959                 if (supportsDescriptors) {
1960                         origDefineProperty(object, name, {
1961                                 configurable: true,
1962                                 enumerable: false,
1963                                 value: value,
1964                                 writable: true
1965                         });
1966                 } else {
1967                         object[name] = value;
1968                 }
1969         };
1970
1971         var defineProperties$4 = function (object, map) {
1972                 var predicates = arguments.length > 2 ? arguments[2] : {};
1973                 var props = objectKeys(map);
1974                 if (hasSymbols) {
1975                         props = concat.call(props, Object.getOwnPropertySymbols(map));
1976                 }
1977                 for (var i = 0; i < props.length; i += 1) {
1978                         defineProperty$8(object, props[i], map[props[i]], predicates[props[i]]);
1979                 }
1980         };
1981
1982         defineProperties$4.supportsDescriptors = !!supportsDescriptors;
1983
1984         var defineProperties_1 = defineProperties$4;
1985
1986         /* eslint no-invalid-this: 1 */
1987
1988         var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
1989         var slice$1 = Array.prototype.slice;
1990         var toStr$3 = Object.prototype.toString;
1991         var funcType = '[object Function]';
1992
1993         var implementation$2 = function bind(that) {
1994             var target = this;
1995             if (typeof target !== 'function' || toStr$3.call(target) !== funcType) {
1996                 throw new TypeError(ERROR_MESSAGE + target);
1997             }
1998             var args = slice$1.call(arguments, 1);
1999
2000             var bound;
2001             var binder = function () {
2002                 if (this instanceof bound) {
2003                     var result = target.apply(
2004                         this,
2005                         args.concat(slice$1.call(arguments))
2006                     );
2007                     if (Object(result) === result) {
2008                         return result;
2009                     }
2010                     return this;
2011                 } else {
2012                     return target.apply(
2013                         that,
2014                         args.concat(slice$1.call(arguments))
2015                     );
2016                 }
2017             };
2018
2019             var boundLength = Math.max(0, target.length - args.length);
2020             var boundArgs = [];
2021             for (var i = 0; i < boundLength; i++) {
2022                 boundArgs.push('$' + i);
2023             }
2024
2025             bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
2026
2027             if (target.prototype) {
2028                 var Empty = function Empty() {};
2029                 Empty.prototype = target.prototype;
2030                 bound.prototype = new Empty();
2031                 Empty.prototype = null;
2032             }
2033
2034             return bound;
2035         };
2036
2037         var functionBind = Function.prototype.bind || implementation$2;
2038
2039         var src = functionBind.call(Function.call, Object.prototype.hasOwnProperty);
2040
2041         var isPrimitive = function isPrimitive(value) {
2042                 return value === null || (typeof value !== 'function' && typeof value !== 'object');
2043         };
2044
2045         var fnToStr = Function.prototype.toString;
2046
2047         var constructorRegex = /^\s*class\b/;
2048         var isES6ClassFn = function isES6ClassFunction(value) {
2049                 try {
2050                         var fnStr = fnToStr.call(value);
2051                         return constructorRegex.test(fnStr);
2052                 } catch (e) {
2053                         return false; // not a function
2054                 }
2055         };
2056
2057         var tryFunctionObject = function tryFunctionToStr(value) {
2058                 try {
2059                         if (isES6ClassFn(value)) { return false; }
2060                         fnToStr.call(value);
2061                         return true;
2062                 } catch (e) {
2063                         return false;
2064                 }
2065         };
2066         var toStr$4 = Object.prototype.toString;
2067         var fnClass = '[object Function]';
2068         var genClass = '[object GeneratorFunction]';
2069         var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
2070
2071         var isCallable = function isCallable(value) {
2072                 if (!value) { return false; }
2073                 if (typeof value !== 'function' && typeof value !== 'object') { return false; }
2074                 if (typeof value === 'function' && !value.prototype) { return true; }
2075                 if (hasToStringTag) { return tryFunctionObject(value); }
2076                 if (isES6ClassFn(value)) { return false; }
2077                 var strClass = toStr$4.call(value);
2078                 return strClass === fnClass || strClass === genClass;
2079         };
2080
2081         var getDay = Date.prototype.getDay;
2082         var tryDateObject = function tryDateObject(value) {
2083                 try {
2084                         getDay.call(value);
2085                         return true;
2086                 } catch (e) {
2087                         return false;
2088                 }
2089         };
2090
2091         var toStr$5 = Object.prototype.toString;
2092         var dateClass = '[object Date]';
2093         var hasToStringTag$1 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
2094
2095         var isDateObject = function isDateObject(value) {
2096                 if (typeof value !== 'object' || value === null) { return false; }
2097                 return hasToStringTag$1 ? tryDateObject(value) : toStr$5.call(value) === dateClass;
2098         };
2099
2100         /* eslint complexity: [2, 18], max-statements: [2, 33] */
2101         var shams = function hasSymbols() {
2102                 if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
2103                 if (typeof Symbol.iterator === 'symbol') { return true; }
2104
2105                 var obj = {};
2106                 var sym = Symbol('test');
2107                 var symObj = Object(sym);
2108                 if (typeof sym === 'string') { return false; }
2109
2110                 if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
2111                 if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
2112
2113                 // temp disabled per https://github.com/ljharb/object.assign/issues/17
2114                 // if (sym instanceof Symbol) { return false; }
2115                 // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
2116                 // if (!(symObj instanceof Symbol)) { return false; }
2117
2118                 // if (typeof Symbol.prototype.toString !== 'function') { return false; }
2119                 // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
2120
2121                 var symVal = 42;
2122                 obj[sym] = symVal;
2123                 for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax
2124                 if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
2125
2126                 if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
2127
2128                 var syms = Object.getOwnPropertySymbols(obj);
2129                 if (syms.length !== 1 || syms[0] !== sym) { return false; }
2130
2131                 if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
2132
2133                 if (typeof Object.getOwnPropertyDescriptor === 'function') {
2134                         var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
2135                         if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
2136                 }
2137
2138                 return true;
2139         };
2140
2141         var origSymbol = commonjsGlobal.Symbol;
2142
2143
2144         var hasSymbols$1 = function hasNativeSymbols() {
2145                 if (typeof origSymbol !== 'function') { return false; }
2146                 if (typeof Symbol !== 'function') { return false; }
2147                 if (typeof origSymbol('foo') !== 'symbol') { return false; }
2148                 if (typeof Symbol('bar') !== 'symbol') { return false; }
2149
2150                 return shams();
2151         };
2152
2153         var isSymbol$2 = createCommonjsModule(function (module) {
2154
2155         var toStr = Object.prototype.toString;
2156         var hasSymbols = hasSymbols$1();
2157
2158         if (hasSymbols) {
2159                 var symToStr = Symbol.prototype.toString;
2160                 var symStringRegex = /^Symbol\(.*\)$/;
2161                 var isSymbolObject = function isRealSymbolObject(value) {
2162                         if (typeof value.valueOf() !== 'symbol') {
2163                                 return false;
2164                         }
2165                         return symStringRegex.test(symToStr.call(value));
2166                 };
2167
2168                 module.exports = function isSymbol(value) {
2169                         if (typeof value === 'symbol') {
2170                                 return true;
2171                         }
2172                         if (toStr.call(value) !== '[object Symbol]') {
2173                                 return false;
2174                         }
2175                         try {
2176                                 return isSymbolObject(value);
2177                         } catch (e) {
2178                                 return false;
2179                         }
2180                 };
2181         } else {
2182
2183                 module.exports = function isSymbol(value) {
2184                         // this environment does not support Symbols.
2185                         return false ;
2186                 };
2187         }
2188         });
2189
2190         var hasSymbols$2 = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
2191
2192
2193
2194
2195
2196
2197         var ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {
2198                 if (typeof O === 'undefined' || O === null) {
2199                         throw new TypeError('Cannot call method on ' + O);
2200                 }
2201                 if (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {
2202                         throw new TypeError('hint must be "string" or "number"');
2203                 }
2204                 var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
2205                 var method, result, i;
2206                 for (i = 0; i < methodNames.length; ++i) {
2207                         method = O[methodNames[i]];
2208                         if (isCallable(method)) {
2209                                 result = method.call(O);
2210                                 if (isPrimitive(result)) {
2211                                         return result;
2212                                 }
2213                         }
2214                 }
2215                 throw new TypeError('No default value');
2216         };
2217
2218         var GetMethod = function GetMethod(O, P) {
2219                 var func = O[P];
2220                 if (func !== null && typeof func !== 'undefined') {
2221                         if (!isCallable(func)) {
2222                                 throw new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');
2223                         }
2224                         return func;
2225                 }
2226                 return void 0;
2227         };
2228
2229         // http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
2230         var es2015 = function ToPrimitive(input) {
2231                 if (isPrimitive(input)) {
2232                         return input;
2233                 }
2234                 var hint = 'default';
2235                 if (arguments.length > 1) {
2236                         if (arguments[1] === String) {
2237                                 hint = 'string';
2238                         } else if (arguments[1] === Number) {
2239                                 hint = 'number';
2240                         }
2241                 }
2242
2243                 var exoticToPrim;
2244                 if (hasSymbols$2) {
2245                         if (Symbol.toPrimitive) {
2246                                 exoticToPrim = GetMethod(input, Symbol.toPrimitive);
2247                         } else if (isSymbol$2(input)) {
2248                                 exoticToPrim = Symbol.prototype.valueOf;
2249                         }
2250                 }
2251                 if (typeof exoticToPrim !== 'undefined') {
2252                         var result = exoticToPrim.call(input, hint);
2253                         if (isPrimitive(result)) {
2254                                 return result;
2255                         }
2256                         throw new TypeError('unable to convert exotic object to primitive');
2257                 }
2258                 if (hint === 'default' && (isDateObject(input) || isSymbol$2(input))) {
2259                         hint = 'string';
2260                 }
2261                 return ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);
2262         };
2263
2264         var es6 = es2015;
2265
2266         var objectInspect = function inspect_ (obj, opts, depth, seen) {
2267             if (!opts) { opts = {}; }
2268             
2269             var maxDepth = opts.depth === undefined ? 5 : opts.depth;
2270             if (depth === undefined) { depth = 0; }
2271             if (depth > maxDepth && maxDepth > 0) { return '...'; }
2272             
2273             if (seen === undefined) { seen = []; }
2274             else if (indexOf$2(seen, obj) >= 0) {
2275                 return '[Circular]';
2276             }
2277             
2278             function inspect (value, from) {
2279                 if (from) {
2280                     seen = seen.slice();
2281                     seen.push(from);
2282                 }
2283                 return inspect_(value, opts, depth + 1, seen);
2284             }
2285             
2286             if (typeof obj === 'string') {
2287                 return inspectString(obj);
2288             }
2289             else if (typeof obj === 'function') {
2290                 var name = nameOf(obj);
2291                 return '[Function' + (name ? ': ' + name : '') + ']';
2292             }
2293             else if (obj === null) {
2294                 return 'null';
2295             }
2296             else if (isElement(obj)) {
2297                 var s = '<' + String(obj.nodeName).toLowerCase();
2298                 var attrs = obj.attributes || [];
2299                 for (var i = 0; i < attrs.length; i++) {
2300                     s += ' ' + attrs[i].name + '="' + quote(attrs[i].value) + '"';
2301                 }
2302                 s += '>';
2303                 if (obj.childNodes && obj.childNodes.length) { s += '...'; }
2304                 s += '</' + String(obj.tagName).toLowerCase() + '>';
2305                 return s;
2306             }
2307             else if (isArray$3(obj)) {
2308                 if (obj.length === 0) { return '[]'; }
2309                 var xs = Array(obj.length);
2310                 for (var i = 0; i < obj.length; i++) {
2311                     xs[i] = has$1(obj, i) ? inspect(obj[i], obj) : '';
2312                 }
2313                 return '[ ' + xs.join(', ') + ' ]';
2314             }
2315             else if (typeof obj === 'object' && typeof obj.inspect === 'function') {
2316                 return obj.inspect();
2317             }
2318             else if (typeof obj === 'object' && !isDate(obj) && !isRegExp(obj)) {
2319                 var xs = [], keys = [];
2320                 for (var key in obj) {
2321                     if (has$1(obj, key)) { keys.push(key); }
2322                 }
2323                 keys.sort();
2324                 for (var i = 0; i < keys.length; i++) {
2325                     var key = keys[i];
2326                     if (/[^\w$]/.test(key)) {
2327                         xs.push(inspect(key) + ': ' + inspect(obj[key], obj));
2328                     }
2329                     else { xs.push(key + ': ' + inspect(obj[key], obj)); }
2330                 }
2331                 if (xs.length === 0) { return '{}'; }
2332                 return '{ ' + xs.join(', ') + ' }';
2333             }
2334             else { return String(obj); }
2335         };
2336
2337         function quote (s) {
2338             return String(s).replace(/"/g, '&quot;');
2339         }
2340
2341         function isArray$3 (obj) {
2342             return {}.toString.call(obj) === '[object Array]';
2343         }
2344
2345         function isDate (obj) {
2346             return {}.toString.call(obj) === '[object Date]';
2347         }
2348
2349         function isRegExp (obj) {
2350             return {}.toString.call(obj) === '[object RegExp]';
2351         }
2352
2353         function has$1 (obj, key) {
2354             if (!{}.hasOwnProperty) { return key in obj; }
2355             return {}.hasOwnProperty.call(obj, key);
2356         }
2357
2358         function nameOf (f) {
2359             if (f.name) { return f.name; }
2360             var m = f.toString().match(/^function\s*([\w$]+)/);
2361             if (m) { return m[1]; }
2362         }
2363
2364         function indexOf$2 (xs, x) {
2365             if (xs.indexOf) { return xs.indexOf(x); }
2366             for (var i = 0, l = xs.length; i < l; i++) {
2367                 if (xs[i] === x) { return i; }
2368             }
2369             return -1;
2370         }
2371
2372         function isElement (x) {
2373             if (!x || typeof x !== 'object') { return false; }
2374             if (typeof HTMLElement !== 'undefined') {
2375                 return x instanceof HTMLElement;
2376             }
2377             else { return typeof x.nodeName === 'string'
2378                 && typeof x.getAttribute === 'function'
2379             ; }
2380         }
2381
2382         function inspectString (str) {
2383             var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte);
2384             return "'" + s + "'";
2385             
2386             function lowbyte (c) {
2387                 var n = c.charCodeAt(0);
2388                 var x = { 8: 'b', 9: 't', 10: 'n', 12: 'f', 13: 'r' }[n];
2389                 if (x) { return '\\' + x; }
2390                 return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16);
2391             }
2392         }
2393
2394         /* globals
2395                 Atomics,
2396                 SharedArrayBuffer,
2397         */
2398
2399         var undefined$1;
2400
2401         var $TypeError = TypeError;
2402
2403         var throwTypeError = function () { throw new $TypeError(); };
2404         var ThrowTypeError = Object.getOwnPropertyDescriptor
2405                 ? (function () {
2406                         try {
2407                                 // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
2408                                 arguments.callee; // IE 8 does not throw here
2409                                 return throwTypeError;
2410                         } catch (calleeThrows) {
2411                                 try {
2412                                         // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
2413                                         return Object.getOwnPropertyDescriptor(arguments, 'callee').get;
2414                                 } catch (gOPDthrows) {
2415                                         return throwTypeError;
2416                                 }
2417                         }
2418                 }())
2419                 : throwTypeError;
2420
2421         var hasSymbols$3 = hasSymbols$1();
2422
2423         var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto
2424         var generatorFunction =  undefined$1;
2425         var asyncFunction =  undefined$1;
2426         var asyncGenFunction =  undefined$1;
2427
2428         var TypedArray = typeof Uint8Array === 'undefined' ? undefined$1 : getProto(Uint8Array);
2429
2430         var INTRINSICS = {
2431                 '$ %Array%': Array,
2432                 '$ %ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer,
2433                 '$ %ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer.prototype,
2434                 '$ %ArrayIteratorPrototype%': hasSymbols$3 ? getProto([][Symbol.iterator]()) : undefined$1,
2435                 '$ %ArrayPrototype%': Array.prototype,
2436                 '$ %ArrayProto_entries%': Array.prototype.entries,
2437                 '$ %ArrayProto_forEach%': Array.prototype.forEach,
2438                 '$ %ArrayProto_keys%': Array.prototype.keys,
2439                 '$ %ArrayProto_values%': Array.prototype.values,
2440                 '$ %AsyncFromSyncIteratorPrototype%': undefined$1,
2441                 '$ %AsyncFunction%': asyncFunction,
2442                 '$ %AsyncFunctionPrototype%':  undefined$1,
2443                 '$ %AsyncGenerator%':  undefined$1,
2444                 '$ %AsyncGeneratorFunction%': asyncGenFunction,
2445                 '$ %AsyncGeneratorPrototype%':  undefined$1,
2446                 '$ %AsyncIteratorPrototype%':  undefined$1,
2447                 '$ %Atomics%': typeof Atomics === 'undefined' ? undefined$1 : Atomics,
2448                 '$ %Boolean%': Boolean,
2449                 '$ %BooleanPrototype%': Boolean.prototype,
2450                 '$ %DataView%': typeof DataView === 'undefined' ? undefined$1 : DataView,
2451                 '$ %DataViewPrototype%': typeof DataView === 'undefined' ? undefined$1 : DataView.prototype,
2452                 '$ %Date%': Date,
2453                 '$ %DatePrototype%': Date.prototype,
2454                 '$ %decodeURI%': decodeURI,
2455                 '$ %decodeURIComponent%': decodeURIComponent,
2456                 '$ %encodeURI%': encodeURI,
2457                 '$ %encodeURIComponent%': encodeURIComponent,
2458                 '$ %Error%': Error,
2459                 '$ %ErrorPrototype%': Error.prototype,
2460                 '$ %eval%': eval, // eslint-disable-line no-eval
2461                 '$ %EvalError%': EvalError,
2462                 '$ %EvalErrorPrototype%': EvalError.prototype,
2463                 '$ %Float32Array%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array,
2464                 '$ %Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array.prototype,
2465                 '$ %Float64Array%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array,
2466                 '$ %Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array.prototype,
2467                 '$ %Function%': Function,
2468                 '$ %FunctionPrototype%': Function.prototype,
2469                 '$ %Generator%':  undefined$1,
2470                 '$ %GeneratorFunction%': generatorFunction,
2471                 '$ %GeneratorPrototype%':  undefined$1,
2472                 '$ %Int8Array%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array,
2473                 '$ %Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array.prototype,
2474                 '$ %Int16Array%': typeof Int16Array === 'undefined' ? undefined$1 : Int16Array,
2475                 '$ %Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined$1 : Int8Array.prototype,
2476                 '$ %Int32Array%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array,
2477                 '$ %Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array.prototype,
2478                 '$ %isFinite%': isFinite,
2479                 '$ %isNaN%': isNaN,
2480                 '$ %IteratorPrototype%': hasSymbols$3 ? getProto(getProto([][Symbol.iterator]())) : undefined$1,
2481                 '$ %JSON%': typeof JSON === 'object' ? JSON : undefined$1,
2482                 '$ %JSONParse%': typeof JSON === 'object' ? JSON.parse : undefined$1,
2483                 '$ %Map%': typeof Map === 'undefined' ? undefined$1 : Map,
2484                 '$ %MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols$3 ? undefined$1 : getProto(new Map()[Symbol.iterator]()),
2485                 '$ %MapPrototype%': typeof Map === 'undefined' ? undefined$1 : Map.prototype,
2486                 '$ %Math%': Math,
2487                 '$ %Number%': Number,
2488                 '$ %NumberPrototype%': Number.prototype,
2489                 '$ %Object%': Object,
2490                 '$ %ObjectPrototype%': Object.prototype,
2491                 '$ %ObjProto_toString%': Object.prototype.toString,
2492                 '$ %ObjProto_valueOf%': Object.prototype.valueOf,
2493                 '$ %parseFloat%': parseFloat,
2494                 '$ %parseInt%': parseInt,
2495                 '$ %Promise%': typeof Promise === 'undefined' ? undefined$1 : Promise,
2496                 '$ %PromisePrototype%': typeof Promise === 'undefined' ? undefined$1 : Promise.prototype,
2497                 '$ %PromiseProto_then%': typeof Promise === 'undefined' ? undefined$1 : Promise.prototype.then,
2498                 '$ %Promise_all%': typeof Promise === 'undefined' ? undefined$1 : Promise.all,
2499                 '$ %Promise_reject%': typeof Promise === 'undefined' ? undefined$1 : Promise.reject,
2500                 '$ %Promise_resolve%': typeof Promise === 'undefined' ? undefined$1 : Promise.resolve,
2501                 '$ %Proxy%': typeof Proxy === 'undefined' ? undefined$1 : Proxy,
2502                 '$ %RangeError%': RangeError,
2503                 '$ %RangeErrorPrototype%': RangeError.prototype,
2504                 '$ %ReferenceError%': ReferenceError,
2505                 '$ %ReferenceErrorPrototype%': ReferenceError.prototype,
2506                 '$ %Reflect%': typeof Reflect === 'undefined' ? undefined$1 : Reflect,
2507                 '$ %RegExp%': RegExp,
2508                 '$ %RegExpPrototype%': RegExp.prototype,
2509                 '$ %Set%': typeof Set === 'undefined' ? undefined$1 : Set,
2510                 '$ %SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols$3 ? undefined$1 : getProto(new Set()[Symbol.iterator]()),
2511                 '$ %SetPrototype%': typeof Set === 'undefined' ? undefined$1 : Set.prototype,
2512                 '$ %SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer,
2513                 '$ %SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer.prototype,
2514                 '$ %String%': String,
2515                 '$ %StringIteratorPrototype%': hasSymbols$3 ? getProto(''[Symbol.iterator]()) : undefined$1,
2516                 '$ %StringPrototype%': String.prototype,
2517                 '$ %Symbol%': hasSymbols$3 ? Symbol : undefined$1,
2518                 '$ %SymbolPrototype%': hasSymbols$3 ? Symbol.prototype : undefined$1,
2519                 '$ %SyntaxError%': SyntaxError,
2520                 '$ %SyntaxErrorPrototype%': SyntaxError.prototype,
2521                 '$ %ThrowTypeError%': ThrowTypeError,
2522                 '$ %TypedArray%': TypedArray,
2523                 '$ %TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined$1,
2524                 '$ %TypeError%': $TypeError,
2525                 '$ %TypeErrorPrototype%': $TypeError.prototype,
2526                 '$ %Uint8Array%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array,
2527                 '$ %Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array.prototype,
2528                 '$ %Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray,
2529                 '$ %Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray.prototype,
2530                 '$ %Uint16Array%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array,
2531                 '$ %Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array.prototype,
2532                 '$ %Uint32Array%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array,
2533                 '$ %Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array.prototype,
2534                 '$ %URIError%': URIError,
2535                 '$ %URIErrorPrototype%': URIError.prototype,
2536                 '$ %WeakMap%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap,
2537                 '$ %WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap.prototype,
2538                 '$ %WeakSet%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet,
2539                 '$ %WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet.prototype
2540         };
2541
2542
2543         var $replace = functionBind.call(Function.call, String.prototype.replace);
2544
2545         /* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
2546         var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
2547         var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
2548         var stringToPath = function stringToPath(string) {
2549                 var result = [];
2550                 $replace(string, rePropName, function (match, number, quote, subString) {
2551                         result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : (number || match);
2552                 });
2553                 return result;
2554         };
2555         /* end adaptation */
2556
2557         var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
2558                 var key = '$ ' + name;
2559                 if (!(key in INTRINSICS)) {
2560                         throw new SyntaxError('intrinsic ' + name + ' does not exist!');
2561                 }
2562
2563                 // istanbul ignore if // hopefully this is impossible to test :-)
2564                 if (typeof INTRINSICS[key] === 'undefined' && !allowMissing) {
2565                         throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
2566                 }
2567
2568                 return INTRINSICS[key];
2569         };
2570
2571         var GetIntrinsic = function GetIntrinsic(name, allowMissing) {
2572                 if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
2573                         throw new TypeError('"allowMissing" argument must be a boolean');
2574                 }
2575
2576                 var parts = stringToPath(name);
2577
2578                 if (parts.length === 0) {
2579                         return getBaseIntrinsic(name, allowMissing);
2580                 }
2581
2582                 var value = getBaseIntrinsic('%' + parts[0] + '%', allowMissing);
2583                 for (var i = 1; i < parts.length; i += 1) {
2584                         if (value != null) {
2585                                 value = value[parts[i]];
2586                         }
2587                 }
2588                 return value;
2589         };
2590
2591         var $TypeError$1 = GetIntrinsic('%TypeError%');
2592         var $SyntaxError = GetIntrinsic('%SyntaxError%');
2593
2594
2595
2596         var predicates = {
2597                 // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
2598                 'Property Descriptor': function isPropertyDescriptor(ES, Desc) {
2599                         if (ES.Type(Desc) !== 'Object') {
2600                                 return false;
2601                         }
2602                         var allowed = {
2603                                 '[[Configurable]]': true,
2604                                 '[[Enumerable]]': true,
2605                                 '[[Get]]': true,
2606                                 '[[Set]]': true,
2607                                 '[[Value]]': true,
2608                                 '[[Writable]]': true
2609                         };
2610
2611                         for (var key in Desc) { // eslint-disable-line
2612                                 if (src(Desc, key) && !allowed[key]) {
2613                                         return false;
2614                                 }
2615                         }
2616
2617                         var isData = src(Desc, '[[Value]]');
2618                         var IsAccessor = src(Desc, '[[Get]]') || src(Desc, '[[Set]]');
2619                         if (isData && IsAccessor) {
2620                                 throw new $TypeError$1('Property Descriptors may not be both accessor and data descriptors');
2621                         }
2622                         return true;
2623                 }
2624         };
2625
2626         var assertRecord = function assertRecord(ES, recordType, argumentName, value) {
2627                 var predicate = predicates[recordType];
2628                 if (typeof predicate !== 'function') {
2629                         throw new $SyntaxError('unknown record type: ' + recordType);
2630                 }
2631                 if (!predicate(ES, value)) {
2632                         throw new $TypeError$1(argumentName + ' must be a ' + recordType);
2633                 }
2634         };
2635
2636         var _isNaN = Number.isNaN || function isNaN(a) {
2637                 return a !== a;
2638         };
2639
2640         var $isNaN = Number.isNaN || function (a) { return a !== a; };
2641
2642         var _isFinite = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };
2643
2644         var $Math = GetIntrinsic('%Math%');
2645         var $Number = GetIntrinsic('%Number%');
2646
2647         var maxSafeInteger = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;
2648
2649         var $assign = GetIntrinsic('%Object%').assign;
2650
2651         var assign$1 = function assign(target, source) {
2652                 if ($assign) {
2653                         return $assign(target, source);
2654                 }
2655
2656                 // eslint-disable-next-line no-restricted-syntax
2657                 for (var key in source) {
2658                         if (src(source, key)) {
2659                                 // eslint-disable-next-line no-param-reassign
2660                                 target[key] = source[key];
2661                         }
2662                 }
2663                 return target;
2664         };
2665
2666         var sign$1 = function sign(number) {
2667                 return number >= 0 ? 1 : -1;
2668         };
2669
2670         var mod = function mod(number, modulo) {
2671                 var remain = number % modulo;
2672                 return Math.floor(remain >= 0 ? remain : remain + modulo);
2673         };
2674
2675         var isPrimitive$1 = function isPrimitive(value) {
2676                 return value === null || (typeof value !== 'function' && typeof value !== 'object');
2677         };
2678
2679         var forEach$3 = function forEach(array, callback) {
2680                 for (var i = 0; i < array.length; i += 1) {
2681                         callback(array[i], i, array); // eslint-disable-line callback-return
2682                 }
2683         };
2684
2685         var every = function every(array, predicate) {
2686                 for (var i = 0; i < array.length; i += 1) {
2687                         if (!predicate(array[i], i, array)) {
2688                                 return false;
2689                         }
2690                 }
2691                 return true;
2692         };
2693
2694         var isSamePropertyDescriptor = function isSamePropertyDescriptor(ES, D1, D2) {
2695                 var fields = [
2696                         '[[Configurable]]',
2697                         '[[Enumerable]]',
2698                         '[[Get]]',
2699                         '[[Set]]',
2700                         '[[Value]]',
2701                         '[[Writable]]'
2702                 ];
2703                 return every(fields, function (field) {
2704                         if ((field in D1) !== (field in D2)) {
2705                                 return false;
2706                         }
2707                         return ES.SameValue(D1[field], D2[field]);
2708                 });
2709         };
2710
2711         var $TypeError$2 = GetIntrinsic('%TypeError%');
2712
2713         var isPropertyDescriptor = function IsPropertyDescriptor(ES, Desc) {
2714                 if (ES.Type(Desc) !== 'Object') {
2715                         return false;
2716                 }
2717                 var allowed = {
2718                         '[[Configurable]]': true,
2719                         '[[Enumerable]]': true,
2720                         '[[Get]]': true,
2721                         '[[Set]]': true,
2722                         '[[Value]]': true,
2723                         '[[Writable]]': true
2724                 };
2725
2726             for (var key in Desc) { // eslint-disable-line
2727                         if (src(Desc, key) && !allowed[key]) {
2728                                 return false;
2729                         }
2730                 }
2731
2732                 if (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {
2733                         throw new $TypeError$2('Property Descriptors may not be both accessor and data descriptors');
2734                 }
2735                 return true;
2736         };
2737
2738         var $Function = GetIntrinsic('%Function%');
2739         var $apply = $Function.apply;
2740         var $call = $Function.call;
2741
2742         var callBind = function callBind() {
2743                 return functionBind.apply($call, arguments);
2744         };
2745
2746         var apply = function applyBind() {
2747                 return functionBind.apply($apply, arguments);
2748         };
2749         callBind.apply = apply;
2750
2751         var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
2752
2753         var callBound = function callBoundIntrinsic(name, allowMissing) {
2754                 var intrinsic = GetIntrinsic(name, !!allowMissing);
2755                 if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.')) {
2756                         return callBind(intrinsic);
2757                 }
2758                 return intrinsic;
2759         };
2760
2761         var $test = GetIntrinsic('RegExp.prototype.test');
2762
2763
2764
2765         var regexTester = function regexTester(regex) {
2766                 return callBind($test, regex);
2767         };
2768
2769         var hasSymbols$4 = hasSymbols$1();
2770
2771
2772
2773         var $iterator = GetIntrinsic('%Symbol.iterator%', true);
2774         var $stringSlice = callBound('String.prototype.slice');
2775
2776         var getIteratorMethod = function getIteratorMethod(ES, iterable) {
2777                 var usingIterator;
2778                 if (hasSymbols$4) {
2779                         usingIterator = ES.GetMethod(iterable, $iterator);
2780                 } else if (ES.IsArray(iterable)) {
2781                         usingIterator = function () {
2782                                 var i = -1;
2783                                 var arr = this; // eslint-disable-line no-invalid-this
2784                                 return {
2785                                         next: function () {
2786                                                 i += 1;
2787                                                 return {
2788                                                         done: i >= arr.length,
2789                                                         value: arr[i]
2790                                                 };
2791                                         }
2792                                 };
2793                         };
2794                 } else if (ES.Type(iterable) === 'String') {
2795                         usingIterator = function () {
2796                                 var i = 0;
2797                                 return {
2798                                         next: function () {
2799                                                 var nextIndex = ES.AdvanceStringIndex(iterable, i, true);
2800                                                 var value = $stringSlice(iterable, i, nextIndex);
2801                                                 i = nextIndex;
2802                                                 return {
2803                                                         done: nextIndex > iterable.length,
2804                                                         value: value
2805                                                 };
2806                                         }
2807                                 };
2808                         };
2809                 }
2810                 return usingIterator;
2811         };
2812
2813         var getInferredName;
2814         try {
2815                 // eslint-disable-next-line no-new-func
2816                 getInferredName = Function('s', 'return { [s]() {} }[s].name;');
2817         } catch (e) {}
2818
2819         var inferred = function () {};
2820         var getInferredName_1 = getInferredName && inferred.name === 'inferred' ? getInferredName : null;
2821
2822         var $SyntaxError$1 = GetIntrinsic('%SyntaxError%');
2823         var symToStr = callBound('Symbol.prototype.toString', true);
2824
2825
2826
2827         var getSymbolDescription = function getSymbolDescription(symbol) {
2828                 if (!symToStr) {
2829                         throw new $SyntaxError$1('Symbols are not supported in this environment');
2830                 }
2831                 var str = symToStr(symbol); // will throw if not a symbol
2832
2833                 if (getInferredName_1) {
2834                         var name = getInferredName_1(symbol);
2835                         if (name === '') { return; }
2836                         // eslint-disable-next-line consistent-return
2837                         return name.slice(1, -1); // name.slice('['.length, -']'.length);
2838                 }
2839
2840                 var desc = str.slice(7, -1); // str.slice('Symbol('.length, -')'.length);
2841                 if (desc) {
2842                         // eslint-disable-next-line consistent-return
2843                         return desc;
2844                 }
2845         };
2846
2847         var originalSetProto = GetIntrinsic('%Object.setPrototypeOf%', true);
2848         var $ArrayProto = GetIntrinsic('%Array.prototype%');
2849
2850         var setProto = originalSetProto || (
2851                 // eslint-disable-next-line no-proto, no-negated-condition
2852                 [].__proto__ !== $ArrayProto
2853                         ? null
2854                         : function (O, proto) {
2855                                 O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign
2856                                 return O;
2857                         }
2858         );
2859
2860         var $strSlice = callBound('String.prototype.slice');
2861
2862         var isPrefixOf = function isPrefixOf(prefix, string) {
2863                 if (prefix === string) {
2864                         return true;
2865                 }
2866                 if (prefix.length > string.length) {
2867                         return false;
2868                 }
2869                 return $strSlice(string, 0, prefix.length) === prefix;
2870         };
2871
2872         var toStr$6 = Object.prototype.toString;
2873
2874
2875
2876
2877
2878         // http://ecma-international.org/ecma-262/5.1/#sec-8.12.8
2879         var ES5internalSlots = {
2880                 '[[DefaultValue]]': function (O) {
2881                         var actualHint;
2882                         if (arguments.length > 1) {
2883                                 actualHint = arguments[1];
2884                         } else {
2885                                 actualHint = toStr$6.call(O) === '[object Date]' ? String : Number;
2886                         }
2887
2888                         if (actualHint === String || actualHint === Number) {
2889                                 var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
2890                                 var value, i;
2891                                 for (i = 0; i < methods.length; ++i) {
2892                                         if (isCallable(O[methods[i]])) {
2893                                                 value = O[methods[i]]();
2894                                                 if (isPrimitive(value)) {
2895                                                         return value;
2896                                                 }
2897                                         }
2898                                 }
2899                                 throw new TypeError('No default value');
2900                         }
2901                         throw new TypeError('invalid [[DefaultValue]] hint supplied');
2902                 }
2903         };
2904
2905         // http://ecma-international.org/ecma-262/5.1/#sec-9.1
2906         var es5 = function ToPrimitive(input) {
2907                 if (isPrimitive(input)) {
2908                         return input;
2909                 }
2910                 if (arguments.length > 1) {
2911                         return ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);
2912                 }
2913                 return ES5internalSlots['[[DefaultValue]]'](input);
2914         };
2915
2916         var $Object = GetIntrinsic('%Object%');
2917         var $EvalError = GetIntrinsic('%EvalError%');
2918         var $TypeError$3 = GetIntrinsic('%TypeError%');
2919         var $String = GetIntrinsic('%String%');
2920         var $Date = GetIntrinsic('%Date%');
2921         var $Number$1 = GetIntrinsic('%Number%');
2922         var $floor = GetIntrinsic('%Math.floor%');
2923         var $DateUTC = GetIntrinsic('%Date.UTC%');
2924         var $abs = GetIntrinsic('%Math.abs%');
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940         var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
2941
2942         var HoursPerDay = 24;
2943         var MinutesPerHour = 60;
2944         var SecondsPerMinute = 60;
2945         var msPerSecond = 1e3;
2946         var msPerMinute = msPerSecond * SecondsPerMinute;
2947         var msPerHour = msPerMinute * MinutesPerHour;
2948         var msPerDay = 86400000;
2949
2950         // https://es5.github.io/#x9
2951         var ES5 = {
2952                 ToPrimitive: es5,
2953
2954                 ToBoolean: function ToBoolean(value) {
2955                         return !!value;
2956                 },
2957                 ToNumber: function ToNumber(value) {
2958                         return +value; // eslint-disable-line no-implicit-coercion
2959                 },
2960                 ToInteger: function ToInteger(value) {
2961                         var number = this.ToNumber(value);
2962                         if (_isNaN(number)) { return 0; }
2963                         if (number === 0 || !_isFinite(number)) { return number; }
2964                         return sign$1(number) * Math.floor(Math.abs(number));
2965                 },
2966                 ToInt32: function ToInt32(x) {
2967                         return this.ToNumber(x) >> 0;
2968                 },
2969                 ToUint32: function ToUint32(x) {
2970                         return this.ToNumber(x) >>> 0;
2971                 },
2972                 ToUint16: function ToUint16(value) {
2973                         var number = this.ToNumber(value);
2974                         if (_isNaN(number) || number === 0 || !_isFinite(number)) { return 0; }
2975                         var posInt = sign$1(number) * Math.floor(Math.abs(number));
2976                         return mod(posInt, 0x10000);
2977                 },
2978                 ToString: function ToString(value) {
2979                         return $String(value);
2980                 },
2981                 ToObject: function ToObject(value) {
2982                         this.CheckObjectCoercible(value);
2983                         return $Object(value);
2984                 },
2985                 CheckObjectCoercible: function CheckObjectCoercible(value, optMessage) {
2986                         /* jshint eqnull:true */
2987                         if (value == null) {
2988                                 throw new $TypeError$3(optMessage || 'Cannot call method on ' + value);
2989                         }
2990                         return value;
2991                 },
2992                 IsCallable: isCallable,
2993                 SameValue: function SameValue(x, y) {
2994                         if (x === y) { // 0 === -0, but they are not identical.
2995                                 if (x === 0) { return 1 / x === 1 / y; }
2996                                 return true;
2997                         }
2998                         return _isNaN(x) && _isNaN(y);
2999                 },
3000
3001                 // https://ecma-international.org/ecma-262/5.1/#sec-8
3002                 Type: function Type(x) {
3003                         if (x === null) {
3004                                 return 'Null';
3005                         }
3006                         if (typeof x === 'undefined') {
3007                                 return 'Undefined';
3008                         }
3009                         if (typeof x === 'function' || typeof x === 'object') {
3010                                 return 'Object';
3011                         }
3012                         if (typeof x === 'number') {
3013                                 return 'Number';
3014                         }
3015                         if (typeof x === 'boolean') {
3016                                 return 'Boolean';
3017                         }
3018                         if (typeof x === 'string') {
3019                                 return 'String';
3020                         }
3021                 },
3022
3023                 // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
3024                 IsPropertyDescriptor: function IsPropertyDescriptor(Desc) {
3025                         return isPropertyDescriptor(this, Desc);
3026                 },
3027
3028                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.1
3029                 IsAccessorDescriptor: function IsAccessorDescriptor(Desc) {
3030                         if (typeof Desc === 'undefined') {
3031                                 return false;
3032                         }
3033
3034                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3035
3036                         if (!src(Desc, '[[Get]]') && !src(Desc, '[[Set]]')) {
3037                                 return false;
3038                         }
3039
3040                         return true;
3041                 },
3042
3043                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.2
3044                 IsDataDescriptor: function IsDataDescriptor(Desc) {
3045                         if (typeof Desc === 'undefined') {
3046                                 return false;
3047                         }
3048
3049                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3050
3051                         if (!src(Desc, '[[Value]]') && !src(Desc, '[[Writable]]')) {
3052                                 return false;
3053                         }
3054
3055                         return true;
3056                 },
3057
3058                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.3
3059                 IsGenericDescriptor: function IsGenericDescriptor(Desc) {
3060                         if (typeof Desc === 'undefined') {
3061                                 return false;
3062                         }
3063
3064                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3065
3066                         if (!this.IsAccessorDescriptor(Desc) && !this.IsDataDescriptor(Desc)) {
3067                                 return true;
3068                         }
3069
3070                         return false;
3071                 },
3072
3073                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.4
3074                 FromPropertyDescriptor: function FromPropertyDescriptor(Desc) {
3075                         if (typeof Desc === 'undefined') {
3076                                 return Desc;
3077                         }
3078
3079                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3080
3081                         if (this.IsDataDescriptor(Desc)) {
3082                                 return {
3083                                         value: Desc['[[Value]]'],
3084                                         writable: !!Desc['[[Writable]]'],
3085                                         enumerable: !!Desc['[[Enumerable]]'],
3086                                         configurable: !!Desc['[[Configurable]]']
3087                                 };
3088                         } else if (this.IsAccessorDescriptor(Desc)) {
3089                                 return {
3090                                         get: Desc['[[Get]]'],
3091                                         set: Desc['[[Set]]'],
3092                                         enumerable: !!Desc['[[Enumerable]]'],
3093                                         configurable: !!Desc['[[Configurable]]']
3094                                 };
3095                         } else {
3096                                 throw new $TypeError$3('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
3097                         }
3098                 },
3099
3100                 // https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
3101                 ToPropertyDescriptor: function ToPropertyDescriptor(Obj) {
3102                         if (this.Type(Obj) !== 'Object') {
3103                                 throw new $TypeError$3('ToPropertyDescriptor requires an object');
3104                         }
3105
3106                         var desc = {};
3107                         if (src(Obj, 'enumerable')) {
3108                                 desc['[[Enumerable]]'] = this.ToBoolean(Obj.enumerable);
3109                         }
3110                         if (src(Obj, 'configurable')) {
3111                                 desc['[[Configurable]]'] = this.ToBoolean(Obj.configurable);
3112                         }
3113                         if (src(Obj, 'value')) {
3114                                 desc['[[Value]]'] = Obj.value;
3115                         }
3116                         if (src(Obj, 'writable')) {
3117                                 desc['[[Writable]]'] = this.ToBoolean(Obj.writable);
3118                         }
3119                         if (src(Obj, 'get')) {
3120                                 var getter = Obj.get;
3121                                 if (typeof getter !== 'undefined' && !this.IsCallable(getter)) {
3122                                         throw new TypeError('getter must be a function');
3123                                 }
3124                                 desc['[[Get]]'] = getter;
3125                         }
3126                         if (src(Obj, 'set')) {
3127                                 var setter = Obj.set;
3128                                 if (typeof setter !== 'undefined' && !this.IsCallable(setter)) {
3129                                         throw new $TypeError$3('setter must be a function');
3130                                 }
3131                                 desc['[[Set]]'] = setter;
3132                         }
3133
3134                         if ((src(desc, '[[Get]]') || src(desc, '[[Set]]')) && (src(desc, '[[Value]]') || src(desc, '[[Writable]]'))) {
3135                                 throw new $TypeError$3('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
3136                         }
3137                         return desc;
3138                 },
3139
3140                 // https://ecma-international.org/ecma-262/5.1/#sec-11.9.3
3141                 'Abstract Equality Comparison': function AbstractEqualityComparison(x, y) {
3142                         var xType = this.Type(x);
3143                         var yType = this.Type(y);
3144                         if (xType === yType) {
3145                                 return x === y; // ES6+ specified this shortcut anyways.
3146                         }
3147                         if (x == null && y == null) {
3148                                 return true;
3149                         }
3150                         if (xType === 'Number' && yType === 'String') {
3151                                 return this['Abstract Equality Comparison'](x, this.ToNumber(y));
3152                         }
3153                         if (xType === 'String' && yType === 'Number') {
3154                                 return this['Abstract Equality Comparison'](this.ToNumber(x), y);
3155                         }
3156                         if (xType === 'Boolean') {
3157                                 return this['Abstract Equality Comparison'](this.ToNumber(x), y);
3158                         }
3159                         if (yType === 'Boolean') {
3160                                 return this['Abstract Equality Comparison'](x, this.ToNumber(y));
3161                         }
3162                         if ((xType === 'String' || xType === 'Number') && yType === 'Object') {
3163                                 return this['Abstract Equality Comparison'](x, this.ToPrimitive(y));
3164                         }
3165                         if (xType === 'Object' && (yType === 'String' || yType === 'Number')) {
3166                                 return this['Abstract Equality Comparison'](this.ToPrimitive(x), y);
3167                         }
3168                         return false;
3169                 },
3170
3171                 // https://ecma-international.org/ecma-262/5.1/#sec-11.9.6
3172                 'Strict Equality Comparison': function StrictEqualityComparison(x, y) {
3173                         var xType = this.Type(x);
3174                         var yType = this.Type(y);
3175                         if (xType !== yType) {
3176                                 return false;
3177                         }
3178                         if (xType === 'Undefined' || xType === 'Null') {
3179                                 return true;
3180                         }
3181                         return x === y; // shortcut for steps 4-7
3182                 },
3183
3184                 // https://ecma-international.org/ecma-262/5.1/#sec-11.8.5
3185                 // eslint-disable-next-line max-statements
3186                 'Abstract Relational Comparison': function AbstractRelationalComparison(x, y, LeftFirst) {
3187                         if (this.Type(LeftFirst) !== 'Boolean') {
3188                                 throw new $TypeError$3('Assertion failed: LeftFirst argument must be a Boolean');
3189                         }
3190                         var px;
3191                         var py;
3192                         if (LeftFirst) {
3193                                 px = this.ToPrimitive(x, $Number$1);
3194                                 py = this.ToPrimitive(y, $Number$1);
3195                         } else {
3196                                 py = this.ToPrimitive(y, $Number$1);
3197                                 px = this.ToPrimitive(x, $Number$1);
3198                         }
3199                         var bothStrings = this.Type(px) === 'String' && this.Type(py) === 'String';
3200                         if (!bothStrings) {
3201                                 var nx = this.ToNumber(px);
3202                                 var ny = this.ToNumber(py);
3203                                 if (_isNaN(nx) || _isNaN(ny)) {
3204                                         return undefined;
3205                                 }
3206                                 if (_isFinite(nx) && _isFinite(ny) && nx === ny) {
3207                                         return false;
3208                                 }
3209                                 if (nx === 0 && ny === 0) {
3210                                         return false;
3211                                 }
3212                                 if (nx === Infinity) {
3213                                         return false;
3214                                 }
3215                                 if (ny === Infinity) {
3216                                         return true;
3217                                 }
3218                                 if (ny === -Infinity) {
3219                                         return false;
3220                                 }
3221                                 if (nx === -Infinity) {
3222                                         return true;
3223                                 }
3224                                 return nx < ny; // by now, these are both nonzero, finite, and not equal
3225                         }
3226                         if (isPrefixOf(py, px)) {
3227                                 return false;
3228                         }
3229                         if (isPrefixOf(px, py)) {
3230                                 return true;
3231                         }
3232                         return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
3233                 },
3234
3235                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
3236                 msFromTime: function msFromTime(t) {
3237                         return mod(t, msPerSecond);
3238                 },
3239
3240                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
3241                 SecFromTime: function SecFromTime(t) {
3242                         return mod($floor(t / msPerSecond), SecondsPerMinute);
3243                 },
3244
3245                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
3246                 MinFromTime: function MinFromTime(t) {
3247                         return mod($floor(t / msPerMinute), MinutesPerHour);
3248                 },
3249
3250                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
3251                 HourFromTime: function HourFromTime(t) {
3252                         return mod($floor(t / msPerHour), HoursPerDay);
3253                 },
3254
3255                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
3256                 Day: function Day(t) {
3257                         return $floor(t / msPerDay);
3258                 },
3259
3260                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
3261                 TimeWithinDay: function TimeWithinDay(t) {
3262                         return mod(t, msPerDay);
3263                 },
3264
3265                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
3266                 DayFromYear: function DayFromYear(y) {
3267                         return (365 * (y - 1970)) + $floor((y - 1969) / 4) - $floor((y - 1901) / 100) + $floor((y - 1601) / 400);
3268                 },
3269
3270                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
3271                 TimeFromYear: function TimeFromYear(y) {
3272                         return msPerDay * this.DayFromYear(y);
3273                 },
3274
3275                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
3276                 YearFromTime: function YearFromTime(t) {
3277                         // largest y such that this.TimeFromYear(y) <= t
3278                         return $getUTCFullYear(new $Date(t));
3279                 },
3280
3281                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
3282                 WeekDay: function WeekDay(t) {
3283                         return mod(this.Day(t) + 4, 7);
3284                 },
3285
3286                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
3287                 DaysInYear: function DaysInYear(y) {
3288                         if (mod(y, 4) !== 0) {
3289                                 return 365;
3290                         }
3291                         if (mod(y, 100) !== 0) {
3292                                 return 366;
3293                         }
3294                         if (mod(y, 400) !== 0) {
3295                                 return 365;
3296                         }
3297                         return 366;
3298                 },
3299
3300                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
3301                 InLeapYear: function InLeapYear(t) {
3302                         var days = this.DaysInYear(this.YearFromTime(t));
3303                         if (days === 365) {
3304                                 return 0;
3305                         }
3306                         if (days === 366) {
3307                                 return 1;
3308                         }
3309                         throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
3310                 },
3311
3312                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
3313                 DayWithinYear: function DayWithinYear(t) {
3314                         return this.Day(t) - this.DayFromYear(this.YearFromTime(t));
3315                 },
3316
3317                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
3318                 MonthFromTime: function MonthFromTime(t) {
3319                         var day = this.DayWithinYear(t);
3320                         if (0 <= day && day < 31) {
3321                                 return 0;
3322                         }
3323                         var leap = this.InLeapYear(t);
3324                         if (31 <= day && day < (59 + leap)) {
3325                                 return 1;
3326                         }
3327                         if ((59 + leap) <= day && day < (90 + leap)) {
3328                                 return 2;
3329                         }
3330                         if ((90 + leap) <= day && day < (120 + leap)) {
3331                                 return 3;
3332                         }
3333                         if ((120 + leap) <= day && day < (151 + leap)) {
3334                                 return 4;
3335                         }
3336                         if ((151 + leap) <= day && day < (181 + leap)) {
3337                                 return 5;
3338                         }
3339                         if ((181 + leap) <= day && day < (212 + leap)) {
3340                                 return 6;
3341                         }
3342                         if ((212 + leap) <= day && day < (243 + leap)) {
3343                                 return 7;
3344                         }
3345                         if ((243 + leap) <= day && day < (273 + leap)) {
3346                                 return 8;
3347                         }
3348                         if ((273 + leap) <= day && day < (304 + leap)) {
3349                                 return 9;
3350                         }
3351                         if ((304 + leap) <= day && day < (334 + leap)) {
3352                                 return 10;
3353                         }
3354                         if ((334 + leap) <= day && day < (365 + leap)) {
3355                                 return 11;
3356                         }
3357                 },
3358
3359                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
3360                 DateFromTime: function DateFromTime(t) {
3361                         var m = this.MonthFromTime(t);
3362                         var d = this.DayWithinYear(t);
3363                         if (m === 0) {
3364                                 return d + 1;
3365                         }
3366                         if (m === 1) {
3367                                 return d - 30;
3368                         }
3369                         var leap = this.InLeapYear(t);
3370                         if (m === 2) {
3371                                 return d - 58 - leap;
3372                         }
3373                         if (m === 3) {
3374                                 return d - 89 - leap;
3375                         }
3376                         if (m === 4) {
3377                                 return d - 119 - leap;
3378                         }
3379                         if (m === 5) {
3380                                 return d - 150 - leap;
3381                         }
3382                         if (m === 6) {
3383                                 return d - 180 - leap;
3384                         }
3385                         if (m === 7) {
3386                                 return d - 211 - leap;
3387                         }
3388                         if (m === 8) {
3389                                 return d - 242 - leap;
3390                         }
3391                         if (m === 9) {
3392                                 return d - 272 - leap;
3393                         }
3394                         if (m === 10) {
3395                                 return d - 303 - leap;
3396                         }
3397                         if (m === 11) {
3398                                 return d - 333 - leap;
3399                         }
3400                         throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
3401                 },
3402
3403                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
3404                 MakeDay: function MakeDay(year, month, date) {
3405                         if (!_isFinite(year) || !_isFinite(month) || !_isFinite(date)) {
3406                                 return NaN;
3407                         }
3408                         var y = this.ToInteger(year);
3409                         var m = this.ToInteger(month);
3410                         var dt = this.ToInteger(date);
3411                         var ym = y + $floor(m / 12);
3412                         var mn = mod(m, 12);
3413                         var t = $DateUTC(ym, mn, 1);
3414                         if (this.YearFromTime(t) !== ym || this.MonthFromTime(t) !== mn || this.DateFromTime(t) !== 1) {
3415                                 return NaN;
3416                         }
3417                         return this.Day(t) + dt - 1;
3418                 },
3419
3420                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
3421                 MakeDate: function MakeDate(day, time) {
3422                         if (!_isFinite(day) || !_isFinite(time)) {
3423                                 return NaN;
3424                         }
3425                         return (day * msPerDay) + time;
3426                 },
3427
3428                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
3429                 MakeTime: function MakeTime(hour, min, sec, ms) {
3430                         if (!_isFinite(hour) || !_isFinite(min) || !_isFinite(sec) || !_isFinite(ms)) {
3431                                 return NaN;
3432                         }
3433                         var h = this.ToInteger(hour);
3434                         var m = this.ToInteger(min);
3435                         var s = this.ToInteger(sec);
3436                         var milli = this.ToInteger(ms);
3437                         var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
3438                         return t;
3439                 },
3440
3441                 // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
3442                 TimeClip: function TimeClip(time) {
3443                         if (!_isFinite(time) || $abs(time) > 8.64e15) {
3444                                 return NaN;
3445                         }
3446                         return $Number$1(new $Date(this.ToNumber(time)));
3447                 },
3448
3449                 // https://ecma-international.org/ecma-262/5.1/#sec-5.2
3450                 modulo: function modulo(x, y) {
3451                         return mod(x, y);
3452                 }
3453         };
3454
3455         var es5$1 = ES5;
3456
3457         var regexExec = RegExp.prototype.exec;
3458         var gOPD = Object.getOwnPropertyDescriptor;
3459
3460         var tryRegexExecCall = function tryRegexExec(value) {
3461                 try {
3462                         var lastIndex = value.lastIndex;
3463                         value.lastIndex = 0;
3464
3465                         regexExec.call(value);
3466                         return true;
3467                 } catch (e) {
3468                         return false;
3469                 } finally {
3470                         value.lastIndex = lastIndex;
3471                 }
3472         };
3473         var toStr$7 = Object.prototype.toString;
3474         var regexClass = '[object RegExp]';
3475         var hasToStringTag$2 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
3476
3477         var isRegex = function isRegex(value) {
3478                 if (!value || typeof value !== 'object') {
3479                         return false;
3480                 }
3481                 if (!hasToStringTag$2) {
3482                         return toStr$7.call(value) === regexClass;
3483                 }
3484
3485                 var descriptor = gOPD(value, 'lastIndex');
3486                 var hasLastIndexDataProperty = descriptor && src(descriptor, 'value');
3487                 if (!hasLastIndexDataProperty) {
3488                         return false;
3489                 }
3490
3491                 return tryRegexExecCall(value);
3492         };
3493
3494         var $TypeError$4 = GetIntrinsic('%TypeError%');
3495         var $RangeError = GetIntrinsic('%RangeError%');
3496         var $SyntaxError$2 = GetIntrinsic('%SyntaxError%');
3497         var $Array = GetIntrinsic('%Array%');
3498         var $ArrayPrototype = $Array.prototype;
3499         var $String$1 = GetIntrinsic('%String%');
3500         var $Object$1 = GetIntrinsic('%Object%');
3501         var $Number$2 = GetIntrinsic('%Number%');
3502         var $Symbol = GetIntrinsic('%Symbol%', true);
3503         var $RegExp = GetIntrinsic('%RegExp%');
3504         var $Date$1 = GetIntrinsic('%Date%');
3505         var $Function$1 = GetIntrinsic('%Function%');
3506         var $preventExtensions = $Object$1.preventExtensions;
3507
3508         var hasSymbols$5 = hasSymbols$1();
3509
3510
3511
3512
3513         var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524         var parseInteger = parseInt;
3525
3526
3527
3528
3529
3530         var $PromiseThen = callBound('Promise.prototype.then', true);
3531         var arraySlice = callBound('Array.prototype.slice');
3532         var strSlice = callBound('String.prototype.slice');
3533         var $indexOf$1 = callBound('Array.prototype.indexOf');
3534         var $push = callBound('Array.prototype.push');
3535
3536         var isBinary = regexTester(/^0b[01]+$/i);
3537         var isOctal = regexTester(/^0o[0-7]+$/i);
3538         var isDigit = regexTester(/^[0-9]$/);
3539         var regexExec$1 = callBound('RegExp.prototype.exec');
3540         var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
3541         var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
3542         var hasNonWS = regexTester(nonWSregex);
3543         var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
3544         var $charCodeAt = callBound('String.prototype.charCodeAt');
3545         var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
3546
3547         var toStr$8 = callBound('Object.prototype.toString');
3548
3549         var $NumberValueOf = callBound('Number.prototype.valueOf');
3550         var $BooleanValueOf = callBound('Boolean.prototype.valueOf');
3551         var $StringValueOf = callBound('String.prototype.valueOf');
3552         var $DateValueOf = callBound('Date.prototype.valueOf');
3553         var $SymbolToString = callBound('Symbol.prototype.toString', true);
3554
3555         var $floor$1 = Math.floor;
3556         var $abs$1 = Math.abs;
3557
3558         var $ObjectCreate = $Object$1.create;
3559         var $gOPD = $Object$1.getOwnPropertyDescriptor;
3560         var $gOPN = $Object$1.getOwnPropertyNames;
3561         var $gOPS = $Object$1.getOwnPropertySymbols;
3562         var $isExtensible = $Object$1.isExtensible;
3563         var $defineProperty = $Object$1.defineProperty;
3564
3565
3566         var DefineOwnProperty = function DefineOwnProperty(ES, O, P, desc) {
3567                 if (!$defineProperty) {
3568                         if (!ES.IsDataDescriptor(desc)) {
3569                                 // ES3 does not support getters/setters
3570                                 return false;
3571                         }
3572                         if (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {
3573                                 return false;
3574                         }
3575
3576                         // fallback for ES3
3577                         if (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {
3578                                 // a non-enumerable existing property
3579                                 return false;
3580                         }
3581
3582                         // property does not exist at all, or exists but is enumerable
3583                         var V = desc['[[Value]]'];
3584                         // eslint-disable-next-line no-param-reassign
3585                         O[P] = V; // will use [[Define]]
3586                         return ES.SameValue(O[P], V);
3587                 }
3588                 $defineProperty(O, P, ES.FromPropertyDescriptor(desc));
3589                 return true;
3590         };
3591
3592         // whitespace from: https://es5.github.io/#x15.5.4.20
3593         // implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
3594         var ws = [
3595                 '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
3596                 '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
3597                 '\u2029\uFEFF'
3598         ].join('');
3599         var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
3600         var $replace$1 = callBound('String.prototype.replace');
3601         var trim = function (value) {
3602                 return $replace$1(value, trimRegex, '');
3603         };
3604
3605
3606
3607
3608
3609         // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-abstract-operations
3610         var ES6 = assign$1(assign$1({}, es5$1), {
3611
3612                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-call-f-v-args
3613                 Call: function Call(F, V) {
3614                         var args = arguments.length > 2 ? arguments[2] : [];
3615                         if (!this.IsCallable(F)) {
3616                                 throw new $TypeError$4(objectInspect(F) + ' is not a function');
3617                         }
3618                         return F.apply(V, args);
3619                 },
3620
3621                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toprimitive
3622                 ToPrimitive: es6,
3623
3624                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toboolean
3625                 // ToBoolean: ES5.ToBoolean,
3626
3627                 // https://ecma-international.org/ecma-262/6.0/#sec-tonumber
3628                 ToNumber: function ToNumber(argument) {
3629                         var value = isPrimitive$1(argument) ? argument : es6(argument, $Number$2);
3630                         if (typeof value === 'symbol') {
3631                                 throw new $TypeError$4('Cannot convert a Symbol value to a number');
3632                         }
3633                         if (typeof value === 'string') {
3634                                 if (isBinary(value)) {
3635                                         return this.ToNumber(parseInteger(strSlice(value, 2), 2));
3636                                 } else if (isOctal(value)) {
3637                                         return this.ToNumber(parseInteger(strSlice(value, 2), 8));
3638                                 } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
3639                                         return NaN;
3640                                 } else {
3641                                         var trimmed = trim(value);
3642                                         if (trimmed !== value) {
3643                                                 return this.ToNumber(trimmed);
3644                                         }
3645                                 }
3646                         }
3647                         return $Number$2(value);
3648                 },
3649
3650                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tointeger
3651                 // ToInteger: ES5.ToNumber,
3652
3653                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint32
3654                 // ToInt32: ES5.ToInt32,
3655
3656                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint32
3657                 // ToUint32: ES5.ToUint32,
3658
3659                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint16
3660                 ToInt16: function ToInt16(argument) {
3661                         var int16bit = this.ToUint16(argument);
3662                         return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
3663                 },
3664
3665                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint16
3666                 // ToUint16: ES5.ToUint16,
3667
3668                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toint8
3669                 ToInt8: function ToInt8(argument) {
3670                         var int8bit = this.ToUint8(argument);
3671                         return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
3672                 },
3673
3674                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint8
3675                 ToUint8: function ToUint8(argument) {
3676                         var number = this.ToNumber(argument);
3677                         if (_isNaN(number) || number === 0 || !_isFinite(number)) { return 0; }
3678                         var posInt = sign$1(number) * $floor$1($abs$1(number));
3679                         return mod(posInt, 0x100);
3680                 },
3681
3682                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-touint8clamp
3683                 ToUint8Clamp: function ToUint8Clamp(argument) {
3684                         var number = this.ToNumber(argument);
3685                         if (_isNaN(number) || number <= 0) { return 0; }
3686                         if (number >= 0xFF) { return 0xFF; }
3687                         var f = $floor$1(argument);
3688                         if (f + 0.5 < number) { return f + 1; }
3689                         if (number < f + 0.5) { return f; }
3690                         if (f % 2 !== 0) { return f + 1; }
3691                         return f;
3692                 },
3693
3694                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tostring
3695                 ToString: function ToString(argument) {
3696                         if (typeof argument === 'symbol') {
3697                                 throw new $TypeError$4('Cannot convert a Symbol value to a string');
3698                         }
3699                         return $String$1(argument);
3700                 },
3701
3702                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-toobject
3703                 ToObject: function ToObject(value) {
3704                         this.RequireObjectCoercible(value);
3705                         return $Object$1(value);
3706                 },
3707
3708                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-topropertykey
3709                 ToPropertyKey: function ToPropertyKey(argument) {
3710                         var key = this.ToPrimitive(argument, $String$1);
3711                         return typeof key === 'symbol' ? key : this.ToString(key);
3712                 },
3713
3714                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
3715                 ToLength: function ToLength(argument) {
3716                         var len = this.ToInteger(argument);
3717                         if (len <= 0) { return 0; } // includes converting -0 to +0
3718                         if (len > maxSafeInteger) { return maxSafeInteger; }
3719                         return len;
3720                 },
3721
3722                 // https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
3723                 CanonicalNumericIndexString: function CanonicalNumericIndexString(argument) {
3724                         if (toStr$8(argument) !== '[object String]') {
3725                                 throw new $TypeError$4('must be a string');
3726                         }
3727                         if (argument === '-0') { return -0; }
3728                         var n = this.ToNumber(argument);
3729                         if (this.SameValue(this.ToString(n), argument)) { return n; }
3730                         return void 0;
3731                 },
3732
3733                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-requireobjectcoercible
3734                 RequireObjectCoercible: es5$1.CheckObjectCoercible,
3735
3736                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isarray
3737                 IsArray: $Array.isArray || function IsArray(argument) {
3738                         return toStr$8(argument) === '[object Array]';
3739                 },
3740
3741                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-iscallable
3742                 // IsCallable: ES5.IsCallable,
3743
3744                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isconstructor
3745                 IsConstructor: function IsConstructor(argument) {
3746                         return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument` or Proxy
3747                 },
3748
3749                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isextensible-o
3750                 IsExtensible: $preventExtensions
3751                         ? function IsExtensible(obj) {
3752                                 if (isPrimitive$1(obj)) {
3753                                         return false;
3754                                 }
3755                                 return $isExtensible(obj);
3756                         }
3757                         : function isExtensible(obj) { return true; }, // eslint-disable-line no-unused-vars
3758
3759                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isinteger
3760                 IsInteger: function IsInteger(argument) {
3761                         if (typeof argument !== 'number' || _isNaN(argument) || !_isFinite(argument)) {
3762                                 return false;
3763                         }
3764                         var abs = $abs$1(argument);
3765                         return $floor$1(abs) === abs;
3766                 },
3767
3768                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-ispropertykey
3769                 IsPropertyKey: function IsPropertyKey(argument) {
3770                         return typeof argument === 'string' || typeof argument === 'symbol';
3771                 },
3772
3773                 // https://ecma-international.org/ecma-262/6.0/#sec-isregexp
3774                 IsRegExp: function IsRegExp(argument) {
3775                         if (!argument || typeof argument !== 'object') {
3776                                 return false;
3777                         }
3778                         if (hasSymbols$5) {
3779                                 var isRegExp = argument[$Symbol.match];
3780                                 if (typeof isRegExp !== 'undefined') {
3781                                         return es5$1.ToBoolean(isRegExp);
3782                                 }
3783                         }
3784                         return isRegex(argument);
3785                 },
3786
3787                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevalue
3788                 // SameValue: ES5.SameValue,
3789
3790                 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero
3791                 SameValueZero: function SameValueZero(x, y) {
3792                         return (x === y) || (_isNaN(x) && _isNaN(y));
3793                 },
3794
3795                 /**
3796                  * 7.3.2 GetV (V, P)
3797                  * 1. Assert: IsPropertyKey(P) is true.
3798                  * 2. Let O be ToObject(V).
3799                  * 3. ReturnIfAbrupt(O).
3800                  * 4. Return O.[[Get]](P, V).
3801                  */
3802                 GetV: function GetV(V, P) {
3803                         // 7.3.2.1
3804                         if (!this.IsPropertyKey(P)) {
3805                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
3806                         }
3807
3808                         // 7.3.2.2-3
3809                         var O = this.ToObject(V);
3810
3811                         // 7.3.2.4
3812                         return O[P];
3813                 },
3814
3815                 /**
3816                  * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
3817                  * 1. Assert: IsPropertyKey(P) is true.
3818                  * 2. Let func be GetV(O, P).
3819                  * 3. ReturnIfAbrupt(func).
3820                  * 4. If func is either undefined or null, return undefined.
3821                  * 5. If IsCallable(func) is false, throw a TypeError exception.
3822                  * 6. Return func.
3823                  */
3824                 GetMethod: function GetMethod(O, P) {
3825                         // 7.3.9.1
3826                         if (!this.IsPropertyKey(P)) {
3827                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
3828                         }
3829
3830                         // 7.3.9.2
3831                         var func = this.GetV(O, P);
3832
3833                         // 7.3.9.4
3834                         if (func == null) {
3835                                 return void 0;
3836                         }
3837
3838                         // 7.3.9.5
3839                         if (!this.IsCallable(func)) {
3840                                 throw new $TypeError$4(P + 'is not a function');
3841                         }
3842
3843                         // 7.3.9.6
3844                         return func;
3845                 },
3846
3847                 /**
3848                  * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
3849                  * 1. Assert: Type(O) is Object.
3850                  * 2. Assert: IsPropertyKey(P) is true.
3851                  * 3. Return O.[[Get]](P, O).
3852                  */
3853                 Get: function Get(O, P) {
3854                         // 7.3.1.1
3855                         if (this.Type(O) !== 'Object') {
3856                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
3857                         }
3858                         // 7.3.1.2
3859                         if (!this.IsPropertyKey(P)) {
3860                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true, got ' + objectInspect(P));
3861                         }
3862                         // 7.3.1.3
3863                         return O[P];
3864                 },
3865
3866                 Type: function Type(x) {
3867                         if (typeof x === 'symbol') {
3868                                 return 'Symbol';
3869                         }
3870                         return es5$1.Type(x);
3871                 },
3872
3873                 // https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
3874                 SpeciesConstructor: function SpeciesConstructor(O, defaultConstructor) {
3875                         if (this.Type(O) !== 'Object') {
3876                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
3877                         }
3878                         var C = O.constructor;
3879                         if (typeof C === 'undefined') {
3880                                 return defaultConstructor;
3881                         }
3882                         if (this.Type(C) !== 'Object') {
3883                                 throw new $TypeError$4('O.constructor is not an Object');
3884                         }
3885                         var S = hasSymbols$5 && $Symbol.species ? C[$Symbol.species] : void 0;
3886                         if (S == null) {
3887                                 return defaultConstructor;
3888                         }
3889                         if (this.IsConstructor(S)) {
3890                                 return S;
3891                         }
3892                         throw new $TypeError$4('no constructor found');
3893                 },
3894
3895                 // https://www.ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
3896                 FromPropertyDescriptor: function FromPropertyDescriptor(Desc) {
3897                         if (typeof Desc === 'undefined') {
3898                                 return Desc;
3899                         }
3900
3901                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3902
3903                         var obj = {};
3904                         if ('[[Value]]' in Desc) {
3905                                 obj.value = Desc['[[Value]]'];
3906                         }
3907                         if ('[[Writable]]' in Desc) {
3908                                 obj.writable = Desc['[[Writable]]'];
3909                         }
3910                         if ('[[Get]]' in Desc) {
3911                                 obj.get = Desc['[[Get]]'];
3912                         }
3913                         if ('[[Set]]' in Desc) {
3914                                 obj.set = Desc['[[Set]]'];
3915                         }
3916                         if ('[[Enumerable]]' in Desc) {
3917                                 obj.enumerable = Desc['[[Enumerable]]'];
3918                         }
3919                         if ('[[Configurable]]' in Desc) {
3920                                 obj.configurable = Desc['[[Configurable]]'];
3921                         }
3922                         return obj;
3923                 },
3924
3925                 // https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
3926                 CompletePropertyDescriptor: function CompletePropertyDescriptor(Desc) {
3927                         /* eslint no-param-reassign: 0 */
3928                         assertRecord(this, 'Property Descriptor', 'Desc', Desc);
3929
3930                         if (this.IsGenericDescriptor(Desc) || this.IsDataDescriptor(Desc)) {
3931                                 if (!src(Desc, '[[Value]]')) {
3932                                         Desc['[[Value]]'] = void 0;
3933                                 }
3934                                 if (!src(Desc, '[[Writable]]')) {
3935                                         Desc['[[Writable]]'] = false;
3936                                 }
3937                         } else {
3938                                 if (!src(Desc, '[[Get]]')) {
3939                                         Desc['[[Get]]'] = void 0;
3940                                 }
3941                                 if (!src(Desc, '[[Set]]')) {
3942                                         Desc['[[Set]]'] = void 0;
3943                                 }
3944                         }
3945                         if (!src(Desc, '[[Enumerable]]')) {
3946                                 Desc['[[Enumerable]]'] = false;
3947                         }
3948                         if (!src(Desc, '[[Configurable]]')) {
3949                                 Desc['[[Configurable]]'] = false;
3950                         }
3951                         return Desc;
3952                 },
3953
3954                 // https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
3955                 Set: function Set(O, P, V, Throw) {
3956                         if (this.Type(O) !== 'Object') {
3957                                 throw new $TypeError$4('O must be an Object');
3958                         }
3959                         if (!this.IsPropertyKey(P)) {
3960                                 throw new $TypeError$4('P must be a Property Key');
3961                         }
3962                         if (this.Type(Throw) !== 'Boolean') {
3963                                 throw new $TypeError$4('Throw must be a Boolean');
3964                         }
3965                         if (Throw) {
3966                                 O[P] = V;
3967                                 return true;
3968                         } else {
3969                                 try {
3970                                         O[P] = V;
3971                                 } catch (e) {
3972                                         return false;
3973                                 }
3974                         }
3975                 },
3976
3977                 // https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
3978                 HasOwnProperty: function HasOwnProperty(O, P) {
3979                         if (this.Type(O) !== 'Object') {
3980                                 throw new $TypeError$4('O must be an Object');
3981                         }
3982                         if (!this.IsPropertyKey(P)) {
3983                                 throw new $TypeError$4('P must be a Property Key');
3984                         }
3985                         return src(O, P);
3986                 },
3987
3988                 // https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
3989                 HasProperty: function HasProperty(O, P) {
3990                         if (this.Type(O) !== 'Object') {
3991                                 throw new $TypeError$4('O must be an Object');
3992                         }
3993                         if (!this.IsPropertyKey(P)) {
3994                                 throw new $TypeError$4('P must be a Property Key');
3995                         }
3996                         return P in O;
3997                 },
3998
3999                 // https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
4000                 IsConcatSpreadable: function IsConcatSpreadable(O) {
4001                         if (this.Type(O) !== 'Object') {
4002                                 return false;
4003                         }
4004                         if (hasSymbols$5 && typeof $Symbol.isConcatSpreadable === 'symbol') {
4005                                 var spreadable = this.Get(O, Symbol.isConcatSpreadable);
4006                                 if (typeof spreadable !== 'undefined') {
4007                                         return this.ToBoolean(spreadable);
4008                                 }
4009                         }
4010                         return this.IsArray(O);
4011                 },
4012
4013                 // https://ecma-international.org/ecma-262/6.0/#sec-invoke
4014                 Invoke: function Invoke(O, P) {
4015                         if (!this.IsPropertyKey(P)) {
4016                                 throw new $TypeError$4('P must be a Property Key');
4017                         }
4018                         var argumentsList = arraySlice(arguments, 2);
4019                         var func = this.GetV(O, P);
4020                         return this.Call(func, O, argumentsList);
4021                 },
4022
4023                 // https://ecma-international.org/ecma-262/6.0/#sec-getiterator
4024                 GetIterator: function GetIterator(obj, method) {
4025                         var actualMethod = method;
4026                         if (arguments.length < 2) {
4027                                 actualMethod = getIteratorMethod(this, obj);
4028                         }
4029                         var iterator = this.Call(actualMethod, obj);
4030                         if (this.Type(iterator) !== 'Object') {
4031                                 throw new $TypeError$4('iterator must return an object');
4032                         }
4033
4034                         return iterator;
4035                 },
4036
4037                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
4038                 IteratorNext: function IteratorNext(iterator, value) {
4039                         var result = this.Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
4040                         if (this.Type(result) !== 'Object') {
4041                                 throw new $TypeError$4('iterator next must return an object');
4042                         }
4043                         return result;
4044                 },
4045
4046                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
4047                 IteratorComplete: function IteratorComplete(iterResult) {
4048                         if (this.Type(iterResult) !== 'Object') {
4049                                 throw new $TypeError$4('Assertion failed: Type(iterResult) is not Object');
4050                         }
4051                         return this.ToBoolean(this.Get(iterResult, 'done'));
4052                 },
4053
4054                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
4055                 IteratorValue: function IteratorValue(iterResult) {
4056                         if (this.Type(iterResult) !== 'Object') {
4057                                 throw new $TypeError$4('Assertion failed: Type(iterResult) is not Object');
4058                         }
4059                         return this.Get(iterResult, 'value');
4060                 },
4061
4062                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
4063                 IteratorStep: function IteratorStep(iterator) {
4064                         var result = this.IteratorNext(iterator);
4065                         var done = this.IteratorComplete(result);
4066                         return done === true ? false : result;
4067                 },
4068
4069                 // https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
4070                 IteratorClose: function IteratorClose(iterator, completion) {
4071                         if (this.Type(iterator) !== 'Object') {
4072                                 throw new $TypeError$4('Assertion failed: Type(iterator) is not Object');
4073                         }
4074                         if (!this.IsCallable(completion)) {
4075                                 throw new $TypeError$4('Assertion failed: completion is not a thunk for a Completion Record');
4076                         }
4077                         var completionThunk = completion;
4078
4079                         var iteratorReturn = this.GetMethod(iterator, 'return');
4080
4081                         if (typeof iteratorReturn === 'undefined') {
4082                                 return completionThunk();
4083                         }
4084
4085                         var completionRecord;
4086                         try {
4087                                 var innerResult = this.Call(iteratorReturn, iterator, []);
4088                         } catch (e) {
4089                                 // if we hit here, then "e" is the innerResult completion that needs re-throwing
4090
4091                                 // if the completion is of type "throw", this will throw.
4092                                 completionRecord = completionThunk();
4093                                 completionThunk = null; // ensure it's not called twice.
4094
4095                                 // if not, then return the innerResult completion
4096                                 throw e;
4097                         }
4098                         completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
4099                         completionThunk = null; // ensure it's not called twice.
4100
4101                         if (this.Type(innerResult) !== 'Object') {
4102                                 throw new $TypeError$4('iterator .return must return an object');
4103                         }
4104
4105                         return completionRecord;
4106                 },
4107
4108                 // https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
4109                 CreateIterResultObject: function CreateIterResultObject(value, done) {
4110                         if (this.Type(done) !== 'Boolean') {
4111                                 throw new $TypeError$4('Assertion failed: Type(done) is not Boolean');
4112                         }
4113                         return {
4114                                 value: value,
4115                                 done: done
4116                         };
4117                 },
4118
4119                 // https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
4120                 RegExpExec: function RegExpExec(R, S) {
4121                         if (this.Type(R) !== 'Object') {
4122                                 throw new $TypeError$4('R must be an Object');
4123                         }
4124                         if (this.Type(S) !== 'String') {
4125                                 throw new $TypeError$4('S must be a String');
4126                         }
4127                         var exec = this.Get(R, 'exec');
4128                         if (this.IsCallable(exec)) {
4129                                 var result = this.Call(exec, R, [S]);
4130                                 if (result === null || this.Type(result) === 'Object') {
4131                                         return result;
4132                                 }
4133                                 throw new $TypeError$4('"exec" method must return `null` or an Object');
4134                         }
4135                         return regexExec$1(R, S);
4136                 },
4137
4138                 // https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
4139                 ArraySpeciesCreate: function ArraySpeciesCreate(originalArray, length) {
4140                         if (!this.IsInteger(length) || length < 0) {
4141                                 throw new $TypeError$4('Assertion failed: length must be an integer >= 0');
4142                         }
4143                         var len = length === 0 ? 0 : length;
4144                         var C;
4145                         var isArray = this.IsArray(originalArray);
4146                         if (isArray) {
4147                                 C = this.Get(originalArray, 'constructor');
4148                                 // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
4149                                 // if (this.IsConstructor(C)) {
4150                                 //      if C is another realm's Array, C = undefined
4151                                 //      Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
4152                                 // }
4153                                 if (this.Type(C) === 'Object' && hasSymbols$5 && $Symbol.species) {
4154                                         C = this.Get(C, $Symbol.species);
4155                                         if (C === null) {
4156                                                 C = void 0;
4157                                         }
4158                                 }
4159                         }
4160                         if (typeof C === 'undefined') {
4161                                 return $Array(len);
4162                         }
4163                         if (!this.IsConstructor(C)) {
4164                                 throw new $TypeError$4('C must be a constructor');
4165                         }
4166                         return new C(len); // this.Construct(C, len);
4167                 },
4168
4169                 CreateDataProperty: function CreateDataProperty(O, P, V) {
4170                         if (this.Type(O) !== 'Object') {
4171                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4172                         }
4173                         if (!this.IsPropertyKey(P)) {
4174                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
4175                         }
4176                         var oldDesc = $gOPD(O, P);
4177                         var extensible = oldDesc || this.IsExtensible(O);
4178                         var immutable = oldDesc && (!oldDesc.writable || !oldDesc.configurable);
4179                         if (immutable || !extensible) {
4180                                 return false;
4181                         }
4182                         return DefineOwnProperty(this, O, P, {
4183                                 '[[Configurable]]': true,
4184                                 '[[Enumerable]]': true,
4185                                 '[[Value]]': V,
4186                                 '[[Writable]]': true
4187                         });
4188                 },
4189
4190                 // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
4191                 CreateDataPropertyOrThrow: function CreateDataPropertyOrThrow(O, P, V) {
4192                         if (this.Type(O) !== 'Object') {
4193                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4194                         }
4195                         if (!this.IsPropertyKey(P)) {
4196                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
4197                         }
4198                         var success = this.CreateDataProperty(O, P, V);
4199                         if (!success) {
4200                                 throw new $TypeError$4('unable to create data property');
4201                         }
4202                         return success;
4203                 },
4204
4205                 // https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
4206                 ObjectCreate: function ObjectCreate(proto, internalSlotsList) {
4207                         if (proto !== null && this.Type(proto) !== 'Object') {
4208                                 throw new $TypeError$4('Assertion failed: proto must be null or an object');
4209                         }
4210                         var slots = arguments.length < 2 ? [] : internalSlotsList;
4211                         if (slots.length > 0) {
4212                                 throw new $SyntaxError$2('es-abstract does not yet support internal slots');
4213                         }
4214
4215                         if (proto === null && !$ObjectCreate) {
4216                                 throw new $SyntaxError$2('native Object.create support is required to create null objects');
4217                         }
4218
4219                         return $ObjectCreate(proto);
4220                 },
4221
4222                 // https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
4223                 AdvanceStringIndex: function AdvanceStringIndex(S, index, unicode) {
4224                         if (this.Type(S) !== 'String') {
4225                                 throw new $TypeError$4('S must be a String');
4226                         }
4227                         if (!this.IsInteger(index) || index < 0 || index > maxSafeInteger) {
4228                                 throw new $TypeError$4('Assertion failed: length must be an integer >= 0 and <= 2**53');
4229                         }
4230                         if (this.Type(unicode) !== 'Boolean') {
4231                                 throw new $TypeError$4('Assertion failed: unicode must be a Boolean');
4232                         }
4233                         if (!unicode) {
4234                                 return index + 1;
4235                         }
4236                         var length = S.length;
4237                         if ((index + 1) >= length) {
4238                                 return index + 1;
4239                         }
4240
4241                         var first = $charCodeAt(S, index);
4242                         if (first < 0xD800 || first > 0xDBFF) {
4243                                 return index + 1;
4244                         }
4245
4246                         var second = $charCodeAt(S, index + 1);
4247                         if (second < 0xDC00 || second > 0xDFFF) {
4248                                 return index + 1;
4249                         }
4250
4251                         return index + 2;
4252                 },
4253
4254                 // https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
4255                 CreateMethodProperty: function CreateMethodProperty(O, P, V) {
4256                         if (this.Type(O) !== 'Object') {
4257                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4258                         }
4259
4260                         if (!this.IsPropertyKey(P)) {
4261                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
4262                         }
4263
4264                         var newDesc = {
4265                                 '[[Configurable]]': true,
4266                                 '[[Enumerable]]': false,
4267                                 '[[Value]]': V,
4268                                 '[[Writable]]': true
4269                         };
4270                         return DefineOwnProperty(this, O, P, newDesc);
4271                 },
4272
4273                 // https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
4274                 DefinePropertyOrThrow: function DefinePropertyOrThrow(O, P, desc) {
4275                         if (this.Type(O) !== 'Object') {
4276                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4277                         }
4278
4279                         if (!this.IsPropertyKey(P)) {
4280                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
4281                         }
4282
4283                         var Desc = isPropertyDescriptor(this, desc) ? desc : this.ToPropertyDescriptor(desc);
4284                         if (!isPropertyDescriptor(this, Desc)) {
4285                                 throw new $TypeError$4('Assertion failed: Desc is not a valid Property Descriptor');
4286                         }
4287
4288                         return DefineOwnProperty(this, O, P, Desc);
4289                 },
4290
4291                 // https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
4292                 DeletePropertyOrThrow: function DeletePropertyOrThrow(O, P) {
4293                         if (this.Type(O) !== 'Object') {
4294                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4295                         }
4296
4297                         if (!this.IsPropertyKey(P)) {
4298                                 throw new $TypeError$4('Assertion failed: IsPropertyKey(P) is not true');
4299                         }
4300
4301                         var success = delete O[P];
4302                         if (!success) {
4303                                 throw new TypeError('Attempt to delete property failed.');
4304                         }
4305                         return success;
4306                 },
4307
4308                 // https://www.ecma-international.org/ecma-262/6.0/#sec-enumerableownnames
4309                 EnumerableOwnNames: function EnumerableOwnNames(O) {
4310                         if (this.Type(O) !== 'Object') {
4311                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4312                         }
4313
4314                         return objectKeys(O);
4315                 },
4316
4317                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
4318                 thisNumberValue: function thisNumberValue(value) {
4319                         if (this.Type(value) === 'Number') {
4320                                 return value;
4321                         }
4322
4323                         return $NumberValueOf(value);
4324                 },
4325
4326                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
4327                 thisBooleanValue: function thisBooleanValue(value) {
4328                         if (this.Type(value) === 'Boolean') {
4329                                 return value;
4330                         }
4331
4332                         return $BooleanValueOf(value);
4333                 },
4334
4335                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
4336                 thisStringValue: function thisStringValue(value) {
4337                         if (this.Type(value) === 'String') {
4338                                 return value;
4339                         }
4340
4341                         return $StringValueOf(value);
4342                 },
4343
4344                 // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object
4345                 thisTimeValue: function thisTimeValue(value) {
4346                         return $DateValueOf(value);
4347                 },
4348
4349                 // https://www.ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
4350                 SetIntegrityLevel: function SetIntegrityLevel(O, level) {
4351                         if (this.Type(O) !== 'Object') {
4352                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4353                         }
4354                         if (level !== 'sealed' && level !== 'frozen') {
4355                                 throw new $TypeError$4('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
4356                         }
4357                         if (!$preventExtensions) {
4358                                 throw new $SyntaxError$2('SetIntegrityLevel requires native `Object.preventExtensions` support');
4359                         }
4360                         var status = $preventExtensions(O);
4361                         if (!status) {
4362                                 return false;
4363                         }
4364                         if (!$gOPN) {
4365                                 throw new $SyntaxError$2('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
4366                         }
4367                         var theKeys = $gOPN(O);
4368                         var ES = this;
4369                         if (level === 'sealed') {
4370                                 forEach$3(theKeys, function (k) {
4371                                         ES.DefinePropertyOrThrow(O, k, { configurable: false });
4372                                 });
4373                         } else if (level === 'frozen') {
4374                                 forEach$3(theKeys, function (k) {
4375                                         var currentDesc = $gOPD(O, k);
4376                                         if (typeof currentDesc !== 'undefined') {
4377                                                 var desc;
4378                                                 if (ES.IsAccessorDescriptor(ES.ToPropertyDescriptor(currentDesc))) {
4379                                                         desc = { configurable: false };
4380                                                 } else {
4381                                                         desc = { configurable: false, writable: false };
4382                                                 }
4383                                                 ES.DefinePropertyOrThrow(O, k, desc);
4384                                         }
4385                                 });
4386                         }
4387                         return true;
4388                 },
4389
4390                 // https://www.ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
4391                 TestIntegrityLevel: function TestIntegrityLevel(O, level) {
4392                         if (this.Type(O) !== 'Object') {
4393                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4394                         }
4395                         if (level !== 'sealed' && level !== 'frozen') {
4396                                 throw new $TypeError$4('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
4397                         }
4398                         var status = this.IsExtensible(O);
4399                         if (status) {
4400                                 return false;
4401                         }
4402                         var theKeys = $gOPN(O);
4403                         var ES = this;
4404                         return theKeys.length === 0 || every(theKeys, function (k) {
4405                                 var currentDesc = $gOPD(O, k);
4406                                 if (typeof currentDesc !== 'undefined') {
4407                                         if (currentDesc.configurable) {
4408                                                 return false;
4409                                         }
4410                                         if (level === 'frozen' && ES.IsDataDescriptor(ES.ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
4411                                                 return false;
4412                                         }
4413                                 }
4414                                 return true;
4415                         });
4416                 },
4417
4418                 // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
4419                 OrdinaryHasInstance: function OrdinaryHasInstance(C, O) {
4420                         if (this.IsCallable(C) === false) {
4421                                 return false;
4422                         }
4423                         if (this.Type(O) !== 'Object') {
4424                                 return false;
4425                         }
4426                         var P = this.Get(C, 'prototype');
4427                         if (this.Type(P) !== 'Object') {
4428                                 throw new $TypeError$4('OrdinaryHasInstance called on an object with an invalid prototype property.');
4429                         }
4430                         return O instanceof C;
4431                 },
4432
4433                 // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
4434                 OrdinaryHasProperty: function OrdinaryHasProperty(O, P) {
4435                         if (this.Type(O) !== 'Object') {
4436                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4437                         }
4438                         if (!this.IsPropertyKey(P)) {
4439                                 throw new $TypeError$4('Assertion failed: P must be a Property Key');
4440                         }
4441                         return P in O;
4442                 },
4443
4444                 // https://www.ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
4445                 InstanceofOperator: function InstanceofOperator(O, C) {
4446                         if (this.Type(O) !== 'Object') {
4447                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4448                         }
4449                         var instOfHandler = hasSymbols$5 && $Symbol.hasInstance ? this.GetMethod(C, $Symbol.hasInstance) : void 0;
4450                         if (typeof instOfHandler !== 'undefined') {
4451                                 return this.ToBoolean(this.Call(instOfHandler, C, [O]));
4452                         }
4453                         if (!this.IsCallable(C)) {
4454                                 throw new $TypeError$4('`C` is not Callable');
4455                         }
4456                         return this.OrdinaryHasInstance(C, O);
4457                 },
4458
4459                 // https://www.ecma-international.org/ecma-262/6.0/#sec-ispromise
4460                 IsPromise: function IsPromise(x) {
4461                         if (this.Type(x) !== 'Object') {
4462                                 return false;
4463                         }
4464                         if (!$PromiseThen) { // Promises are not supported
4465                                 return false;
4466                         }
4467                         try {
4468                                 $PromiseThen(x); // throws if not a promise
4469                         } catch (e) {
4470                                 return false;
4471                         }
4472                         return true;
4473                 },
4474
4475                 // https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
4476                 'Abstract Equality Comparison': function AbstractEqualityComparison(x, y) {
4477                         var xType = this.Type(x);
4478                         var yType = this.Type(y);
4479                         if (xType === yType) {
4480                                 return x === y; // ES6+ specified this shortcut anyways.
4481                         }
4482                         if (x == null && y == null) {
4483                                 return true;
4484                         }
4485                         if (xType === 'Number' && yType === 'String') {
4486                                 return this['Abstract Equality Comparison'](x, this.ToNumber(y));
4487                         }
4488                         if (xType === 'String' && yType === 'Number') {
4489                                 return this['Abstract Equality Comparison'](this.ToNumber(x), y);
4490                         }
4491                         if (xType === 'Boolean') {
4492                                 return this['Abstract Equality Comparison'](this.ToNumber(x), y);
4493                         }
4494                         if (yType === 'Boolean') {
4495                                 return this['Abstract Equality Comparison'](x, this.ToNumber(y));
4496                         }
4497                         if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
4498                                 return this['Abstract Equality Comparison'](x, this.ToPrimitive(y));
4499                         }
4500                         if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
4501                                 return this['Abstract Equality Comparison'](this.ToPrimitive(x), y);
4502                         }
4503                         return false;
4504                 },
4505
4506                 // eslint-disable-next-line max-lines-per-function, max-statements, id-length, max-params
4507                 ValidateAndApplyPropertyDescriptor: function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
4508                         // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic.
4509                         var oType = this.Type(O);
4510                         if (oType !== 'Undefined' && oType !== 'Object') {
4511                                 throw new $TypeError$4('Assertion failed: O must be undefined or an Object');
4512                         }
4513                         if (this.Type(extensible) !== 'Boolean') {
4514                                 throw new $TypeError$4('Assertion failed: extensible must be a Boolean');
4515                         }
4516                         if (!isPropertyDescriptor(this, Desc)) {
4517                                 throw new $TypeError$4('Assertion failed: Desc must be a Property Descriptor');
4518                         }
4519                         if (this.Type(current) !== 'Undefined' && !isPropertyDescriptor(this, current)) {
4520                                 throw new $TypeError$4('Assertion failed: current must be a Property Descriptor, or undefined');
4521                         }
4522                         if (oType !== 'Undefined' && !this.IsPropertyKey(P)) {
4523                                 throw new $TypeError$4('Assertion failed: if O is not undefined, P must be a Property Key');
4524                         }
4525                         if (this.Type(current) === 'Undefined') {
4526                                 if (!extensible) {
4527                                         return false;
4528                                 }
4529                                 if (this.IsGenericDescriptor(Desc) || this.IsDataDescriptor(Desc)) {
4530                                         if (oType !== 'Undefined') {
4531                                                 DefineOwnProperty(this, O, P, {
4532                                                         '[[Configurable]]': Desc['[[Configurable]]'],
4533                                                         '[[Enumerable]]': Desc['[[Enumerable]]'],
4534                                                         '[[Value]]': Desc['[[Value]]'],
4535                                                         '[[Writable]]': Desc['[[Writable]]']
4536                                                 });
4537                                         }
4538                                 } else {
4539                                         if (!this.IsAccessorDescriptor(Desc)) {
4540                                                 throw new $TypeError$4('Assertion failed: Desc is not an accessor descriptor');
4541                                         }
4542                                         if (oType !== 'Undefined') {
4543                                                 return DefineOwnProperty(this, O, P, Desc);
4544                                         }
4545                                 }
4546                                 return true;
4547                         }
4548                         if (this.IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) {
4549                                 return true;
4550                         }
4551                         if (isSamePropertyDescriptor(this, Desc, current)) {
4552                                 return true; // removed by ES2017, but should still be correct
4553                         }
4554                         // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor
4555                         if (!current['[[Configurable]]']) {
4556                                 if (Desc['[[Configurable]]']) {
4557                                         return false;
4558                                 }
4559                                 if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) {
4560                                         return false;
4561                                 }
4562                         }
4563                         if (this.IsGenericDescriptor(Desc)) ; else if (this.IsDataDescriptor(current) !== this.IsDataDescriptor(Desc)) {
4564                                 if (!current['[[Configurable]]']) {
4565                                         return false;
4566                                 }
4567                                 if (this.IsDataDescriptor(current)) {
4568                                         if (oType !== 'Undefined') {
4569                                                 DefineOwnProperty(this, O, P, {
4570                                                         '[[Configurable]]': current['[[Configurable]]'],
4571                                                         '[[Enumerable]]': current['[[Enumerable]]'],
4572                                                         '[[Get]]': undefined
4573                                                 });
4574                                         }
4575                                 } else if (oType !== 'Undefined') {
4576                                         DefineOwnProperty(this, O, P, {
4577                                                 '[[Configurable]]': current['[[Configurable]]'],
4578                                                 '[[Enumerable]]': current['[[Enumerable]]'],
4579                                                 '[[Value]]': undefined
4580                                         });
4581                                 }
4582                         } else if (this.IsDataDescriptor(current) && this.IsDataDescriptor(Desc)) {
4583                                 if (!current['[[Configurable]]'] && !current['[[Writable]]']) {
4584                                         if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
4585                                                 return false;
4586                                         }
4587                                         if ('[[Value]]' in Desc && !this.SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
4588                                                 return false;
4589                                         }
4590                                         return true;
4591                                 }
4592                         } else if (this.IsAccessorDescriptor(current) && this.IsAccessorDescriptor(Desc)) {
4593                                 if (!current['[[Configurable]]']) {
4594                                         if ('[[Set]]' in Desc && !this.SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
4595                                                 return false;
4596                                         }
4597                                         if ('[[Get]]' in Desc && !this.SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
4598                                                 return false;
4599                                         }
4600                                         return true;
4601                                 }
4602                         } else {
4603                                 throw new $TypeError$4('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.');
4604                         }
4605                         if (oType !== 'Undefined') {
4606                                 return DefineOwnProperty(this, O, P, Desc);
4607                         }
4608                         return true;
4609                 },
4610
4611                 // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
4612                 OrdinaryDefineOwnProperty: function OrdinaryDefineOwnProperty(O, P, Desc) {
4613                         if (this.Type(O) !== 'Object') {
4614                                 throw new $TypeError$4('Assertion failed: O must be an Object');
4615                         }
4616                         if (!this.IsPropertyKey(P)) {
4617                                 throw new $TypeError$4('Assertion failed: P must be a Property Key');
4618                         }
4619                         if (!isPropertyDescriptor(this, Desc)) {
4620                                 throw new $TypeError$4('Assertion failed: Desc must be a Property Descriptor');
4621                         }
4622                         var desc = $gOPD(O, P);
4623                         var current = desc && this.ToPropertyDescriptor(desc);
4624                         var extensible = this.IsExtensible(O);
4625                         return this.ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
4626                 },
4627
4628                 // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
4629                 OrdinaryGetOwnProperty: function OrdinaryGetOwnProperty(O, P) {
4630                         if (this.Type(O) !== 'Object') {
4631                                 throw new $TypeError$4('Assertion failed: O must be an Object');
4632                         }
4633                         if (!this.IsPropertyKey(P)) {
4634                                 throw new $TypeError$4('Assertion failed: P must be a Property Key');
4635                         }
4636                         if (!src(O, P)) {
4637                                 return void 0;
4638                         }
4639                         if (!$gOPD) {
4640                                 // ES3 fallback
4641                                 var arrayLength = this.IsArray(O) && P === 'length';
4642                                 var regexLastIndex = this.IsRegExp(O) && P === 'lastIndex';
4643                                 return {
4644                                         '[[Configurable]]': !(arrayLength || regexLastIndex),
4645                                         '[[Enumerable]]': $isEnumerable(O, P),
4646                                         '[[Value]]': O[P],
4647                                         '[[Writable]]': true
4648                                 };
4649                         }
4650                         return this.ToPropertyDescriptor($gOPD(O, P));
4651                 },
4652
4653                 // https://www.ecma-international.org/ecma-262/6.0/#sec-arraycreate
4654                 ArrayCreate: function ArrayCreate(length) {
4655                         if (!this.IsInteger(length) || length < 0) {
4656                                 throw new $TypeError$4('Assertion failed: `length` must be an integer Number >= 0');
4657                         }
4658                         if (length > MAX_ARRAY_LENGTH) {
4659                                 throw new $RangeError('length is greater than (2**32 - 1)');
4660                         }
4661                         var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
4662                         var A = []; // steps 5 - 7, and 9
4663                         if (proto !== $ArrayPrototype) { // step 8
4664                                 if (!setProto) {
4665                                         throw new $SyntaxError$2('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
4666                                 }
4667                                 setProto(A, proto);
4668                         }
4669                         if (length !== 0) { // bypasses the need for step 2
4670                                 A.length = length;
4671                         }
4672                         /* step 10, the above as a shortcut for the below
4673                         this.OrdinaryDefineOwnProperty(A, 'length', {
4674                                 '[[Configurable]]': false,
4675                                 '[[Enumerable]]': false,
4676                                 '[[Value]]': length,
4677                                 '[[Writable]]': true
4678                         });
4679                         */
4680                         return A;
4681                 },
4682
4683                 // eslint-disable-next-line max-statements, max-lines-per-function
4684                 ArraySetLength: function ArraySetLength(A, Desc) {
4685                         if (!this.IsArray(A)) {
4686                                 throw new $TypeError$4('Assertion failed: A must be an Array');
4687                         }
4688                         if (!isPropertyDescriptor(this, Desc)) {
4689                                 throw new $TypeError$4('Assertion failed: Desc must be a Property Descriptor');
4690                         }
4691                         if (!('[[Value]]' in Desc)) {
4692                                 return this.OrdinaryDefineOwnProperty(A, 'length', Desc);
4693                         }
4694                         var newLenDesc = assign$1({}, Desc);
4695                         var newLen = this.ToUint32(Desc['[[Value]]']);
4696                         var numberLen = this.ToNumber(Desc['[[Value]]']);
4697                         if (newLen !== numberLen) {
4698                                 throw new $RangeError('Invalid array length');
4699                         }
4700                         newLenDesc['[[Value]]'] = newLen;
4701                         var oldLenDesc = this.OrdinaryGetOwnProperty(A, 'length');
4702                         if (!this.IsDataDescriptor(oldLenDesc)) {
4703                                 throw new $TypeError$4('Assertion failed: an array had a non-data descriptor on `length`');
4704                         }
4705                         var oldLen = oldLenDesc['[[Value]]'];
4706                         if (newLen >= oldLen) {
4707                                 return this.OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
4708                         }
4709                         if (!oldLenDesc['[[Writable]]']) {
4710                                 return false;
4711                         }
4712                         var newWritable;
4713                         if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
4714                                 newWritable = true;
4715                         } else {
4716                                 newWritable = false;
4717                                 newLenDesc['[[Writable]]'] = true;
4718                         }
4719                         var succeeded = this.OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
4720                         if (!succeeded) {
4721                                 return false;
4722                         }
4723                         while (newLen < oldLen) {
4724                                 oldLen -= 1;
4725                                 var deleteSucceeded = delete A[this.ToString(oldLen)];
4726                                 if (!deleteSucceeded) {
4727                                         newLenDesc['[[Value]]'] = oldLen + 1;
4728                                         if (!newWritable) {
4729                                                 newLenDesc['[[Writable]]'] = false;
4730                                                 this.OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
4731                                                 return false;
4732                                         }
4733                                 }
4734                         }
4735                         if (!newWritable) {
4736                                 return this.OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
4737                         }
4738                         return true;
4739                 },
4740
4741                 // https://www.ecma-international.org/ecma-262/6.0/#sec-createhtml
4742                 CreateHTML: function CreateHTML(string, tag, attribute, value) {
4743                         if (this.Type(tag) !== 'String' || this.Type(attribute) !== 'String') {
4744                                 throw new $TypeError$4('Assertion failed: `tag` and `attribute` must be strings');
4745                         }
4746                         var str = this.RequireObjectCoercible(string);
4747                         var S = this.ToString(str);
4748                         var p1 = '<' + tag;
4749                         if (attribute !== '') {
4750                                 var V = this.ToString(value);
4751                                 var escapedV = $replace$1(V, /\x22/g, '&quot;');
4752                                 p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
4753                         }
4754                         return p1 + '>' + S + '</' + tag + '>';
4755                 },
4756
4757                 // https://www.ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
4758                 GetOwnPropertyKeys: function GetOwnPropertyKeys(O, Type) {
4759                         if (this.Type(O) !== 'Object') {
4760                                 throw new $TypeError$4('Assertion failed: Type(O) is not Object');
4761                         }
4762                         if (Type === 'Symbol') {
4763                                 return hasSymbols$5 && $gOPS ? $gOPS(O) : [];
4764                         }
4765                         if (Type === 'String') {
4766                                 if (!$gOPN) {
4767                                         return objectKeys(O);
4768                                 }
4769                                 return $gOPN(O);
4770                         }
4771                         throw new $TypeError$4('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
4772                 },
4773
4774                 // https://www.ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
4775                 SymbolDescriptiveString: function SymbolDescriptiveString(sym) {
4776                         if (this.Type(sym) !== 'Symbol') {
4777                                 throw new $TypeError$4('Assertion failed: `sym` must be a Symbol');
4778                         }
4779                         return $SymbolToString(sym);
4780                 },
4781
4782                 // https://www.ecma-international.org/ecma-262/6.0/#sec-getsubstitution
4783                 // eslint-disable-next-line max-statements, max-params, max-lines-per-function
4784                 GetSubstitution: function GetSubstitution(matched, str, position, captures, replacement) {
4785                         if (this.Type(matched) !== 'String') {
4786                                 throw new $TypeError$4('Assertion failed: `matched` must be a String');
4787                         }
4788                         var matchLength = matched.length;
4789
4790                         if (this.Type(str) !== 'String') {
4791                                 throw new $TypeError$4('Assertion failed: `str` must be a String');
4792                         }
4793                         var stringLength = str.length;
4794
4795                         if (!this.IsInteger(position) || position < 0 || position > stringLength) {
4796                                 throw new $TypeError$4('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + objectInspect(position));
4797                         }
4798
4799                         var ES = this;
4800                         var isStringOrHole = function (capture, index, arr) { return ES.Type(capture) === 'String' || !(index in arr); };
4801                         if (!this.IsArray(captures) || !every(captures, isStringOrHole)) {
4802                                 throw new $TypeError$4('Assertion failed: `captures` must be a List of Strings, got ' + objectInspect(captures));
4803                         }
4804
4805                         if (this.Type(replacement) !== 'String') {
4806                                 throw new $TypeError$4('Assertion failed: `replacement` must be a String');
4807                         }
4808
4809                         var tailPos = position + matchLength;
4810                         var m = captures.length;
4811
4812                         var result = '';
4813                         for (var i = 0; i < replacement.length; i += 1) {
4814                                 // if this is a $, and it's not the end of the replacement
4815                                 var current = replacement[i];
4816                                 var isLast = (i + 1) >= replacement.length;
4817                                 var nextIsLast = (i + 2) >= replacement.length;
4818                                 if (current === '$' && !isLast) {
4819                                         var next = replacement[i + 1];
4820                                         if (next === '$') {
4821                                                 result += '$';
4822                                                 i += 1;
4823                                         } else if (next === '&') {
4824                                                 result += matched;
4825                                                 i += 1;
4826                                         } else if (next === '`') {
4827                                                 result += position === 0 ? '' : strSlice(str, 0, position - 1);
4828                                                 i += 1;
4829                                         } else if (next === "'") {
4830                                                 result += tailPos >= stringLength ? '' : strSlice(str, tailPos);
4831                                                 i += 1;
4832                                         } else {
4833                                                 var nextNext = nextIsLast ? null : replacement[i + 2];
4834                                                 if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) {
4835                                                         // $1 through $9, and not followed by a digit
4836                                                         var n = parseInteger(next, 10);
4837                                                         // if (n > m, impl-defined)
4838                                                         result += (n <= m && this.Type(captures[n - 1]) === 'Undefined') ? '' : captures[n - 1];
4839                                                         i += 1;
4840                                                 } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
4841                                                         // $00 through $99
4842                                                         var nn = next + nextNext;
4843                                                         var nnI = parseInteger(nn, 10) - 1;
4844                                                         // if nn === '00' or nn > m, impl-defined
4845                                                         result += (nn <= m && this.Type(captures[nnI]) === 'Undefined') ? '' : captures[nnI];
4846                                                         i += 2;
4847                                                 } else {
4848                                                         result += '$';
4849                                                 }
4850                                         }
4851                                 } else {
4852                                         // the final $, or else not a $
4853                                         result += replacement[i];
4854                                 }
4855                         }
4856                         return result;
4857                 },
4858
4859                 // https://ecma-international.org/ecma-262/6.0/#sec-todatestring
4860                 ToDateString: function ToDateString(tv) {
4861                         if (this.Type(tv) !== 'Number') {
4862                                 throw new $TypeError$4('Assertion failed: `tv` must be a Number');
4863                         }
4864                         if (_isNaN(tv)) {
4865                                 return 'Invalid Date';
4866                         }
4867                         return $Date$1(tv);
4868                 },
4869
4870                 // https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike
4871                 CreateListFromArrayLike: function CreateListFromArrayLike(obj) {
4872                         var elementTypes = arguments.length > 1
4873                                 ? arguments[1]
4874                                 : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object'];
4875
4876                         if (this.Type(obj) !== 'Object') {
4877                                 throw new $TypeError$4('Assertion failed: `obj` must be an Object');
4878                         }
4879                         if (!this.IsArray(elementTypes)) {
4880                                 throw new $TypeError$4('Assertion failed: `elementTypes`, if provided, must be an array');
4881                         }
4882                         var len = this.ToLength(this.Get(obj, 'length'));
4883                         var list = [];
4884                         var index = 0;
4885                         while (index < len) {
4886                                 var indexName = this.ToString(index);
4887                                 var next = this.Get(obj, indexName);
4888                                 var nextType = this.Type(next);
4889                                 if ($indexOf$1(elementTypes, nextType) < 0) {
4890                                         throw new $TypeError$4('item type ' + nextType + ' is not a valid elementType');
4891                                 }
4892                                 $push(list, next);
4893                                 index += 1;
4894                         }
4895                         return list;
4896                 },
4897
4898                 // https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor
4899                 GetPrototypeFromConstructor: function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
4900                         var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
4901                         if (!this.IsConstructor(constructor)) {
4902                                 throw new $TypeError$4('Assertion failed: `constructor` must be a constructor');
4903                         }
4904                         var proto = this.Get(constructor, 'prototype');
4905                         if (this.Type(proto) !== 'Object') {
4906                                 if (!(constructor instanceof $Function$1)) {
4907                                         // ignore other realms, for now
4908                                         throw new $TypeError$4('cross-realm constructors not currently supported');
4909                                 }
4910                                 proto = intrinsic;
4911                         }
4912                         return proto;
4913                 },
4914
4915                 // https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname
4916                 SetFunctionName: function SetFunctionName(F, name) {
4917                         if (typeof F !== 'function') {
4918                                 throw new $TypeError$4('Assertion failed: `F` must be a function');
4919                         }
4920                         if (!this.IsExtensible(F) || src(F, 'name')) {
4921                                 throw new $TypeError$4('Assertion failed: `F` must be extensible, and must not have a `name` own property');
4922                         }
4923                         var nameType = this.Type(name);
4924                         if (nameType !== 'Symbol' && nameType !== 'String') {
4925                                 throw new $TypeError$4('Assertion failed: `name` must be a Symbol or a String');
4926                         }
4927                         if (nameType === 'Symbol') {
4928                                 var description = getSymbolDescription(name);
4929                                 // eslint-disable-next-line no-param-reassign
4930                                 name = typeof description === 'undefined' ? '' : '[' + description + ']';
4931                         }
4932                         if (arguments.length > 2) {
4933                                 var prefix = arguments[2];
4934                                 // eslint-disable-next-line no-param-reassign
4935                                 name = prefix + ' ' + name;
4936                         }
4937                         return this.DefinePropertyOrThrow(F, 'name', {
4938                                 '[[Value]]': name,
4939                                 '[[Writable]]': false,
4940                                 '[[Enumerable]]': false,
4941                                 '[[Configurable]]': true
4942                         });
4943                 }
4944         });
4945
4946         delete ES6.CheckObjectCoercible; // renamed in ES6 to RequireObjectCoercible
4947
4948         var es2015$1 = ES6;
4949
4950         var es6$1 = es2015$1;
4951
4952         var implementation$3 = function find(predicate) {
4953                 var list = es6$1.ToObject(this);
4954                 var length = es6$1.ToLength(list.length);
4955                 if (!es6$1.IsCallable(predicate)) {
4956                         throw new TypeError('Array#find: predicate must be a function');
4957                 }
4958                 if (length === 0) {
4959                         return void 0;
4960                 }
4961                 var thisArg;
4962                 if (arguments.length > 0) {
4963                         thisArg = arguments[1];
4964                 }
4965
4966                 for (var i = 0, value; i < length; i++) {
4967                         value = list[i];
4968                         // inlined for performance: if (ES.Call(predicate, thisArg, [value, i, list])) {
4969                         if (predicate.apply(thisArg, [value, i, list])) {
4970                                 return value;
4971                         }
4972                 }
4973                 return void 0;
4974         };
4975
4976         var polyfill$4 = function getPolyfill() {
4977                 // Detect if an implementation exists
4978                 // Detect early implementations which skipped holes in sparse arrays
4979                 // eslint-disable-next-line no-sparse-arrays
4980                 var implemented = Array.prototype.find && [, 1].find(function () {
4981                         return true;
4982                 }) !== 1;
4983
4984                 // eslint-disable-next-line global-require
4985                 return implemented ? Array.prototype.find : implementation$3;
4986         };
4987
4988         var shim$8 = function shimArrayPrototypeFind() {
4989                 var polyfill = polyfill$4();
4990
4991                 defineProperties_1(Array.prototype, { find: polyfill }, {
4992                         find: function () {
4993                                 return Array.prototype.find !== polyfill;
4994                         }
4995                 });
4996
4997                 return polyfill;
4998         };
4999
5000         var slice$2 = Array.prototype.slice;
5001
5002         var polyfill$5 = polyfill$4();
5003
5004         var boundFindShim = function find(array, predicate) { // eslint-disable-line no-unused-vars
5005                 es6$1.RequireObjectCoercible(array);
5006                 var args = slice$2.call(arguments, 1);
5007                 return polyfill$5.apply(array, args);
5008         };
5009
5010         defineProperties_1(boundFindShim, {
5011                 getPolyfill: polyfill$4,
5012                 implementation: implementation$3,
5013                 shim: shim$8
5014         });
5015
5016         var array_prototype_find = boundFindShim;
5017
5018         var implementation$4 = function findIndex(predicate) {
5019                 var list = es6$1.ToObject(this);
5020                 var length = es6$1.ToLength(list.length);
5021                 if (!es6$1.IsCallable(predicate)) {
5022                         throw new TypeError('Array#findIndex: predicate must be a function');
5023                 }
5024                 if (length === 0) { return -1; }
5025                 var thisArg = arguments[1];
5026                 for (var i = 0, value; i < length; i++) {
5027                         value = list[i];
5028                         if (es6$1.Call(predicate, thisArg, [value, i, list])) { return i; }
5029                 }
5030                 return -1;
5031         };
5032
5033         var polyfill$6 = function getPolyfill() {
5034                 // Detect if an implementation exists
5035                 // Detect early implementations which skipped holes in sparse arrays
5036                 var implemented = Array.prototype.findIndex && ([, 1].findIndex(function (item, idx) {
5037                         return idx === 0;
5038                 }) === 0);
5039
5040
5041                 return implemented ? Array.prototype.findIndex : implementation$4;
5042         };
5043
5044         var shim$9 = function shimArrayPrototypeFindIndex() {
5045                 var polyfill = polyfill$6();
5046
5047                 defineProperties_1(Array.prototype, { findIndex: polyfill }, {
5048                         findIndex: function () {
5049                                 return Array.prototype.findIndex !== polyfill;
5050                         }
5051                 });
5052
5053                 return polyfill;
5054         };
5055
5056         var slice$3 = Array.prototype.slice;
5057
5058         var polyfill$7 = polyfill$6();
5059
5060         var boundShim = function findIndex(array, predicate) {
5061                 es6$1.RequireObjectCoercible(array);
5062                 var args = slice$3.call(arguments, 1);
5063                 return polyfill$7.apply(array, args);
5064         };
5065
5066         defineProperties_1(boundShim, {
5067                 implementation: implementation$4,
5068                 getPolyfill: polyfill$6,
5069                 shim: shim$9
5070         });
5071
5072         var array_prototype_findindex = boundShim;
5073
5074         var supportsDescriptors$1 = defineProperties_1.supportsDescriptors;
5075
5076         /*! https://mths.be/array-from v0.2.0 by @mathias */
5077         var implementation$5 = function from(arrayLike) {
5078                 var defineProperty = supportsDescriptors$1 ? Object.defineProperty : function put(object, key, descriptor) {
5079                         object[key] = descriptor.value;
5080                 };
5081                 var C = this;
5082                 if (arrayLike === null || typeof arrayLike === 'undefined') {
5083                         throw new TypeError('`Array.from` requires an array-like object, not `null` or `undefined`');
5084                 }
5085                 var items = es6$1.ToObject(arrayLike);
5086
5087                 var mapFn, T;
5088                 if (typeof arguments[1] !== 'undefined') {
5089                         mapFn = arguments[1];
5090                         if (!es6$1.IsCallable(mapFn)) {
5091                                 throw new TypeError('When provided, the second argument to `Array.from` must be a function');
5092                         }
5093                         if (arguments.length > 2) {
5094                                 T = arguments[2];
5095                         }
5096                 }
5097
5098                 var len = es6$1.ToLength(items.length);
5099                 var A = es6$1.IsCallable(C) ? es6$1.ToObject(new C(len)) : new Array(len);
5100                 var k = 0;
5101                 var kValue, mappedValue;
5102                 while (k < len) {
5103                         kValue = items[k];
5104                         if (mapFn) {
5105                                 mappedValue = typeof T === 'undefined' ? mapFn(kValue, k) : es6$1.Call(mapFn, T, [kValue, k]);
5106                         } else {
5107                                 mappedValue = kValue;
5108                         }
5109                         defineProperty(A, k, {
5110                                 'configurable': true,
5111                                 'enumerable': true,
5112                                 'value': mappedValue,
5113                                 'writable': true
5114                         });
5115                         k += 1;
5116                 }
5117                 A.length = len;
5118                 return A;
5119         };
5120
5121         var tryCall = function (fn) {
5122                 try {
5123                         fn();
5124                         return true;
5125                 } catch (e) {
5126                         return false;
5127                 }
5128         };
5129
5130         var polyfill$8 = function getPolyfill() {
5131                 var implemented = es6$1.IsCallable(Array.from)
5132                         && tryCall(function () { Array.from({ 'length': -Infinity }); })
5133                         && !tryCall(function () { Array.from([], undefined); });
5134
5135                 return implemented ? Array.from : implementation$5;
5136         };
5137
5138         var shim$a = function shimArrayFrom() {
5139                 var polyfill = polyfill$8();
5140
5141                 defineProperties_1(Array, { 'from': polyfill }, {
5142                         'from': function () {
5143                                 return Array.from !== polyfill;
5144                         }
5145                 });
5146
5147                 return polyfill;
5148         };
5149
5150         // eslint-disable-next-line no-unused-vars
5151         var boundFromShim = function from(array) {
5152             // eslint-disable-next-line no-invalid-this
5153                 return implementation$5.apply(this || Array, arguments);
5154         };
5155
5156         defineProperties_1(boundFromShim, {
5157                 'getPolyfill': polyfill$8,
5158                 'implementation': implementation$5,
5159                 'shim': shim$a
5160         });
5161
5162         var array_from = boundFromShim;
5163
5164         var originalGetProto = GetIntrinsic('%Object.getPrototypeOf%', true);
5165         var $ArrayProto$1 = GetIntrinsic('%Array.prototype%');
5166
5167         var getProto$1 = originalGetProto || (
5168                 // eslint-disable-next-line no-proto
5169                 [].__proto__ === $ArrayProto$1
5170                         ? function (O) {
5171                                 return O.__proto__; // eslint-disable-line no-proto
5172                         }
5173                         : null
5174         );
5175
5176         var $TypeError$5 = GetIntrinsic('%TypeError%');
5177         var $arrayPush = callBound('Array.prototype.push');
5178
5179
5180         var ES2016 = assign$1(assign$1({}, es2015$1), {
5181                 // https://www.ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber
5182                 SameValueNonNumber: function SameValueNonNumber(x, y) {
5183                         if (typeof x === 'number' || typeof x !== typeof y) {
5184                                 throw new TypeError('SameValueNonNumber requires two non-number values of the same type.');
5185                         }
5186                         return this.SameValue(x, y);
5187                 },
5188
5189                 // https://www.ecma-international.org/ecma-262/7.0/#sec-iterabletoarraylike
5190                 IterableToArrayLike: function IterableToArrayLike(items) {
5191                         var usingIterator = getIteratorMethod(this, items);
5192                         if (typeof usingIterator !== 'undefined') {
5193                                 var iterator = this.GetIterator(items, usingIterator);
5194                                 var values = [];
5195                                 var next = true;
5196                                 while (next) {
5197                                         next = this.IteratorStep(iterator);
5198                                         if (next) {
5199                                                 var nextValue = this.IteratorValue(next);
5200                                                 $arrayPush(values, nextValue);
5201                                         }
5202                                 }
5203                                 return values;
5204                         }
5205
5206                         return this.ToObject(items);
5207                 },
5208
5209                 // https://ecma-international.org/ecma-262/7.0/#sec-ordinarygetprototypeof
5210                 OrdinaryGetPrototypeOf: function (O) {
5211                         if (this.Type(O) !== 'Object') {
5212                                 throw new $TypeError$5('Assertion failed: O must be an Object');
5213                         }
5214                         if (!getProto$1) {
5215                                 throw new $TypeError$5('This environment does not support fetching prototypes.');
5216                         }
5217                         return getProto$1(O);
5218                 },
5219
5220                 // https://ecma-international.org/ecma-262/7.0/#sec-ordinarysetprototypeof
5221                 OrdinarySetPrototypeOf: function (O, V) {
5222                         if (this.Type(V) !== 'Object' && this.Type(V) !== 'Null') {
5223                                 throw new $TypeError$5('Assertion failed: V must be Object or Null');
5224                         }
5225                         /*
5226                         var extensible = this.IsExtensible(O);
5227                         var current = this.OrdinaryGetPrototypeOf(O);
5228                         if (this.SameValue(V, current)) {
5229                                 return true;
5230                         }
5231                         if (!extensible) {
5232                                 return false;
5233                         }
5234                         */
5235                         try {
5236                                 setProto(O, V);
5237                         } catch (e) {
5238                                 return false;
5239                         }
5240                         return this.OrdinaryGetPrototypeOf(O) === V;
5241                         /*
5242                         var p = V;
5243                         var done = false;
5244                         while (!done) {
5245                                 if (p === null) {
5246                                         done = true;
5247                                 } else if (this.SameValue(p, O)) {
5248                                         return false;
5249                                 } else {
5250                                         if (wat) {
5251                                                 done = true;
5252                                         } else {
5253                                                 p = p.[[Prototype]];
5254                                         }
5255                                 }
5256                          }
5257                          O.[[Prototype]] = V;
5258                          return true;
5259                          */
5260                 }
5261         });
5262
5263         var es2016 = ES2016;
5264
5265         var es7 = es2016;
5266
5267         var isEnumerable$1 = functionBind.call(Function.call, Object.prototype.propertyIsEnumerable);
5268
5269         var implementation$6 = function values(O) {
5270                 var obj = es7.RequireObjectCoercible(O);
5271                 var vals = [];
5272                 for (var key in obj) {
5273                         if (src(obj, key) && isEnumerable$1(obj, key)) {
5274                                 vals.push(obj[key]);
5275                         }
5276                 }
5277                 return vals;
5278         };
5279
5280         var polyfill$9 = function getPolyfill() {
5281                 return typeof Object.values === 'function' ? Object.values : implementation$6;
5282         };
5283
5284         var shim$b = function shimValues() {
5285                 var polyfill = polyfill$9();
5286                 defineProperties_1(Object, { values: polyfill }, {
5287                         values: function testValues() {
5288                                 return Object.values !== polyfill;
5289                         }
5290                 });
5291                 return polyfill;
5292         };
5293
5294         var polyfill$a = polyfill$9();
5295
5296         defineProperties_1(polyfill$a, {
5297                 getPolyfill: polyfill$9,
5298                 implementation: implementation$6,
5299                 shim: shim$b
5300         });
5301
5302         var object_values = polyfill$a;
5303
5304         // modified from https://github.com/es-shims/es6-shim
5305
5306
5307         var canBeObject = function (obj) {
5308                 return typeof obj !== 'undefined' && obj !== null;
5309         };
5310         var hasSymbols$6 = shams();
5311         var toObject = Object;
5312         var push = functionBind.call(Function.call, Array.prototype.push);
5313         var propIsEnumerable = functionBind.call(Function.call, Object.prototype.propertyIsEnumerable);
5314         var originalGetSymbols = hasSymbols$6 ? Object.getOwnPropertySymbols : null;
5315
5316         var implementation$7 = function assign(target, source1) {
5317                 var arguments$1 = arguments;
5318
5319                 if (!canBeObject(target)) { throw new TypeError('target must be an object'); }
5320                 var objTarget = toObject(target);
5321                 var s, source, i, props, syms, value, key;
5322                 for (s = 1; s < arguments.length; ++s) {
5323                         source = toObject(arguments$1[s]);
5324                         props = objectKeys(source);
5325                         var getSymbols = hasSymbols$6 && (Object.getOwnPropertySymbols || originalGetSymbols);
5326                         if (getSymbols) {
5327                                 syms = getSymbols(source);
5328                                 for (i = 0; i < syms.length; ++i) {
5329                                         key = syms[i];
5330                                         if (propIsEnumerable(source, key)) {
5331                                                 push(props, key);
5332                                         }
5333                                 }
5334                         }
5335                         for (i = 0; i < props.length; ++i) {
5336                                 key = props[i];
5337                                 value = source[key];
5338                                 if (propIsEnumerable(source, key)) {
5339                                         objTarget[key] = value;
5340                                 }
5341                         }
5342                 }
5343                 return objTarget;
5344         };
5345
5346         var lacksProperEnumerationOrder = function () {
5347                 if (!Object.assign) {
5348                         return false;
5349                 }
5350                 // v8, specifically in node 4.x, has a bug with incorrect property enumeration order
5351                 // note: this does not detect the bug unless there's 20 characters
5352                 var str = 'abcdefghijklmnopqrst';
5353                 var letters = str.split('');
5354                 var map = {};
5355                 for (var i = 0; i < letters.length; ++i) {
5356                         map[letters[i]] = letters[i];
5357                 }
5358                 var obj = Object.assign({}, map);
5359                 var actual = '';
5360                 for (var k in obj) {
5361                         actual += k;
5362                 }
5363                 return str !== actual;
5364         };
5365
5366         var assignHasPendingExceptions = function () {
5367                 if (!Object.assign || !Object.preventExtensions) {
5368                         return false;
5369                 }
5370                 // Firefox 37 still has "pending exception" logic in its Object.assign implementation,
5371                 // which is 72% slower than our shim, and Firefox 40's native implementation.
5372                 var thrower = Object.preventExtensions({ 1: 2 });
5373                 try {
5374                         Object.assign(thrower, 'xy');
5375                 } catch (e) {
5376                         return thrower[1] === 'y';
5377                 }
5378                 return false;
5379         };
5380
5381         var polyfill$b = function getPolyfill() {
5382                 if (!Object.assign) {
5383                         return implementation$7;
5384                 }
5385                 if (lacksProperEnumerationOrder()) {
5386                         return implementation$7;
5387                 }
5388                 if (assignHasPendingExceptions()) {
5389                         return implementation$7;
5390                 }
5391                 return Object.assign;
5392         };
5393
5394         var shim$c = function shimAssign() {
5395                 var polyfill = polyfill$b();
5396                 defineProperties_1(
5397                         Object,
5398                         { assign: polyfill },
5399                         { assign: function () { return Object.assign !== polyfill; } }
5400                 );
5401                 return polyfill;
5402         };
5403
5404         var polyfill$c = polyfill$b();
5405
5406         defineProperties_1(polyfill$c, {
5407                 getPolyfill: polyfill$b,
5408                 implementation: implementation$7,
5409                 shim: shim$c
5410         });
5411
5412         var object_assign = polyfill$c;
5413
5414         /**
5415          * @this {Promise}
5416          */
5417         function finallyConstructor(callback) {
5418           var constructor = this.constructor;
5419           return this.then(
5420             function(value) {
5421               // @ts-ignore
5422               return constructor.resolve(callback()).then(function() {
5423                 return value;
5424               });
5425             },
5426             function(reason) {
5427               // @ts-ignore
5428               return constructor.resolve(callback()).then(function() {
5429                 // @ts-ignore
5430                 return constructor.reject(reason);
5431               });
5432             }
5433           );
5434         }
5435
5436         // Store setTimeout reference so promise-polyfill will be unaffected by
5437         // other code modifying setTimeout (like sinon.useFakeTimers())
5438         var setTimeoutFunc = setTimeout;
5439
5440         function isArray$4(x) {
5441           return Boolean(x && typeof x.length !== 'undefined');
5442         }
5443
5444         function noop$1() {}
5445
5446         // Polyfill for Function.prototype.bind
5447         function bind$2(fn, thisArg) {
5448           return function() {
5449             fn.apply(thisArg, arguments);
5450           };
5451         }
5452
5453         /**
5454          * @constructor
5455          * @param {Function} fn
5456          */
5457         function Promise$1(fn) {
5458           if (!(this instanceof Promise$1))
5459             { throw new TypeError('Promises must be constructed via new'); }
5460           if (typeof fn !== 'function') { throw new TypeError('not a function'); }
5461           /** @type {!number} */
5462           this._state = 0;
5463           /** @type {!boolean} */
5464           this._handled = false;
5465           /** @type {Promise|undefined} */
5466           this._value = undefined;
5467           /** @type {!Array<!Function>} */
5468           this._deferreds = [];
5469
5470           doResolve(fn, this);
5471         }
5472
5473         function handle(self, deferred) {
5474           while (self._state === 3) {
5475             self = self._value;
5476           }
5477           if (self._state === 0) {
5478             self._deferreds.push(deferred);
5479             return;
5480           }
5481           self._handled = true;
5482           Promise$1._immediateFn(function() {
5483             var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
5484             if (cb === null) {
5485               (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
5486               return;
5487             }
5488             var ret;
5489             try {
5490               ret = cb(self._value);
5491             } catch (e) {
5492               reject(deferred.promise, e);
5493               return;
5494             }
5495             resolve(deferred.promise, ret);
5496           });
5497         }
5498
5499         function resolve(self, newValue) {
5500           try {
5501             // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
5502             if (newValue === self)
5503               { throw new TypeError('A promise cannot be resolved with itself.'); }
5504             if (
5505               newValue &&
5506               (typeof newValue === 'object' || typeof newValue === 'function')
5507             ) {
5508               var then = newValue.then;
5509               if (newValue instanceof Promise$1) {
5510                 self._state = 3;
5511                 self._value = newValue;
5512                 finale(self);
5513                 return;
5514               } else if (typeof then === 'function') {
5515                 doResolve(bind$2(then, newValue), self);
5516                 return;
5517               }
5518             }
5519             self._state = 1;
5520             self._value = newValue;
5521             finale(self);
5522           } catch (e) {
5523             reject(self, e);
5524           }
5525         }
5526
5527         function reject(self, newValue) {
5528           self._state = 2;
5529           self._value = newValue;
5530           finale(self);
5531         }
5532
5533         function finale(self) {
5534           if (self._state === 2 && self._deferreds.length === 0) {
5535             Promise$1._immediateFn(function() {
5536               if (!self._handled) {
5537                 Promise$1._unhandledRejectionFn(self._value);
5538               }
5539             });
5540           }
5541
5542           for (var i = 0, len = self._deferreds.length; i < len; i++) {
5543             handle(self, self._deferreds[i]);
5544           }
5545           self._deferreds = null;
5546         }
5547
5548         /**
5549          * @constructor
5550          */
5551         function Handler(onFulfilled, onRejected, promise) {
5552           this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
5553           this.onRejected = typeof onRejected === 'function' ? onRejected : null;
5554           this.promise = promise;
5555         }
5556
5557         /**
5558          * Take a potentially misbehaving resolver function and make sure
5559          * onFulfilled and onRejected are only called once.
5560          *
5561          * Makes no guarantees about asynchrony.
5562          */
5563         function doResolve(fn, self) {
5564           var done = false;
5565           try {
5566             fn(
5567               function(value) {
5568                 if (done) { return; }
5569                 done = true;
5570                 resolve(self, value);
5571               },
5572               function(reason) {
5573                 if (done) { return; }
5574                 done = true;
5575                 reject(self, reason);
5576               }
5577             );
5578           } catch (ex) {
5579             if (done) { return; }
5580             done = true;
5581             reject(self, ex);
5582           }
5583         }
5584
5585         Promise$1.prototype['catch'] = function(onRejected) {
5586           return this.then(null, onRejected);
5587         };
5588
5589         Promise$1.prototype.then = function(onFulfilled, onRejected) {
5590           // @ts-ignore
5591           var prom = new this.constructor(noop$1);
5592
5593           handle(this, new Handler(onFulfilled, onRejected, prom));
5594           return prom;
5595         };
5596
5597         Promise$1.prototype['finally'] = finallyConstructor;
5598
5599         Promise$1.all = function(arr) {
5600           return new Promise$1(function(resolve, reject) {
5601             if (!isArray$4(arr)) {
5602               return reject(new TypeError('Promise.all accepts an array'));
5603             }
5604
5605             var args = Array.prototype.slice.call(arr);
5606             if (args.length === 0) { return resolve([]); }
5607             var remaining = args.length;
5608
5609             function res(i, val) {
5610               try {
5611                 if (val && (typeof val === 'object' || typeof val === 'function')) {
5612                   var then = val.then;
5613                   if (typeof then === 'function') {
5614                     then.call(
5615                       val,
5616                       function(val) {
5617                         res(i, val);
5618                       },
5619                       reject
5620                     );
5621                     return;
5622                   }
5623                 }
5624                 args[i] = val;
5625                 if (--remaining === 0) {
5626                   resolve(args);
5627                 }
5628               } catch (ex) {
5629                 reject(ex);
5630               }
5631             }
5632
5633             for (var i = 0; i < args.length; i++) {
5634               res(i, args[i]);
5635             }
5636           });
5637         };
5638
5639         Promise$1.resolve = function(value) {
5640           if (value && typeof value === 'object' && value.constructor === Promise$1) {
5641             return value;
5642           }
5643
5644           return new Promise$1(function(resolve) {
5645             resolve(value);
5646           });
5647         };
5648
5649         Promise$1.reject = function(value) {
5650           return new Promise$1(function(resolve, reject) {
5651             reject(value);
5652           });
5653         };
5654
5655         Promise$1.race = function(arr) {
5656           return new Promise$1(function(resolve, reject) {
5657             if (!isArray$4(arr)) {
5658               return reject(new TypeError('Promise.race accepts an array'));
5659             }
5660
5661             for (var i = 0, len = arr.length; i < len; i++) {
5662               Promise$1.resolve(arr[i]).then(resolve, reject);
5663             }
5664           });
5665         };
5666
5667         // Use polyfill for setImmediate for performance gains
5668         Promise$1._immediateFn =
5669           // @ts-ignore
5670           (typeof setImmediate === 'function' &&
5671             function(fn) {
5672               // @ts-ignore
5673               setImmediate(fn);
5674             }) ||
5675           function(fn) {
5676             setTimeoutFunc(fn, 0);
5677           };
5678
5679         Promise$1._unhandledRejectionFn = function _unhandledRejectionFn(err) {
5680           if (typeof console !== 'undefined' && console) {
5681             console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
5682           }
5683         };
5684
5685         /** @suppress {undefinedVars} */
5686         var globalNS = (function() {
5687           // the only reliable means to get the global object is
5688           // `Function('return this')()`
5689           // However, this causes CSP violations in Chrome apps.
5690           if (typeof self !== 'undefined') {
5691             return self;
5692           }
5693           if (typeof window !== 'undefined') {
5694             return window;
5695           }
5696           if (typeof global !== 'undefined') {
5697             return global;
5698           }
5699           throw new Error('unable to locate global object');
5700         })();
5701
5702         if (!('Promise' in globalNS)) {
5703           globalNS['Promise'] = Promise$1;
5704         } else if (!globalNS.Promise.prototype['finally']) {
5705           globalNS.Promise.prototype['finally'] = finallyConstructor;
5706         }
5707
5708         var polyfill$d = /*#__PURE__*/Object.freeze({
5709                 __proto__: null
5710         });
5711
5712         var setAsap = createCommonjsModule(function (module) {
5713         (function (thisVar, undefined$1) {
5714                 var main = (typeof window === 'object' && window) || (typeof commonjsGlobal === 'object' && commonjsGlobal) ||
5715                         typeof self === 'object' && self || thisVar;
5716
5717                 var hasSetImmediate = typeof setImmediate === 'function';
5718                 var hasNextTick = typeof process === 'object' && !!process && typeof process.nextTick === 'function';
5719                 var index = 0;
5720
5721                 function getNewIndex() {
5722                         if (index === 9007199254740991) {
5723                                 return 0;
5724                         }
5725                         return ++index;
5726                 }
5727
5728                 var setAsap = (function () {
5729                         var hiddenDiv, scriptEl, timeoutFn, callbacks;
5730
5731                         // Modern browsers, fastest async
5732                         if (main.MutationObserver) {
5733                                 return function setAsap(callback) {
5734                                         hiddenDiv = document.createElement("div");
5735                                         (new MutationObserver(function() {
5736                                                 callback();
5737                                                 hiddenDiv = null;
5738                                         })).observe(hiddenDiv, { attributes: true });
5739                                         hiddenDiv.setAttribute('i', '1');
5740                                 };
5741
5742                         // Browsers that support postMessage
5743                         } else if (!hasSetImmediate && main.postMessage && !main.importScripts && main.addEventListener) {
5744
5745                                 var MESSAGE_PREFIX = "com.setImmediate" + Math.random();
5746                                 callbacks = {};
5747
5748                                 var onGlobalMessage = function (event) {
5749                                         if (event.source === main && event.data.indexOf(MESSAGE_PREFIX) === 0) {
5750                                                 var i = +event.data.split(':')[1];
5751                                                 callbacks[i]();
5752                                                 delete callbacks[i];
5753                                         }
5754                                 };
5755
5756                                 main.addEventListener("message", onGlobalMessage, false);
5757
5758                                 return function setAsap(callback) {
5759                                         var i = getNewIndex();
5760                                         callbacks[i] = callback;
5761                                         main.postMessage(MESSAGE_PREFIX + ':' + i, "*");
5762                                 };
5763
5764                                 // IE browsers without postMessage
5765                         } else if (!hasSetImmediate && main.document && 'onreadystatechange' in document.createElement('script')) {
5766
5767                                 return function setAsap(callback) {
5768                                         scriptEl = document.createElement("script");
5769                                         scriptEl.onreadystatechange = function onreadystatechange() {
5770                                                 scriptEl.onreadystatechange = null;
5771                                                 scriptEl.parentNode.removeChild(scriptEl);
5772                                                 scriptEl = null;
5773                                                 callback();
5774                                         };
5775                                         document.body.appendChild(scriptEl);
5776                                 };
5777
5778                         // All other browsers and node
5779                         } else {
5780
5781                                 timeoutFn = (hasSetImmediate && setImmediate) || (hasNextTick && process.nextTick) || setTimeout;
5782                                 return function setAsap(callback) {
5783                                         timeoutFn(callback);
5784                                 };
5785                         }
5786
5787                 })();
5788
5789                 if ( module.exports) {
5790                         module.exports = setAsap;
5791                 } else if (typeof commonjsRequire !== 'undefined' && commonjsRequire.amd) {
5792                         undefined$1(function () {
5793                                 return setAsap;
5794                         });
5795                 } else {
5796                         main.setAsap = setAsap;
5797                 }
5798         })(commonjsGlobal);
5799         });
5800
5801         var performanceNow = createCommonjsModule(function (module) {
5802         // Generated by CoffeeScript 1.12.2
5803         (function() {
5804           var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;
5805
5806           if ((typeof performance !== "undefined" && performance !== null) && performance.now) {
5807             module.exports = function() {
5808               return performance.now();
5809             };
5810           } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) {
5811             module.exports = function() {
5812               return (getNanoSeconds() - nodeLoadTime) / 1e6;
5813             };
5814             hrtime = process.hrtime;
5815             getNanoSeconds = function() {
5816               var hr;
5817               hr = hrtime();
5818               return hr[0] * 1e9 + hr[1];
5819             };
5820             moduleLoadTime = getNanoSeconds();
5821             upTime = process.uptime() * 1e9;
5822             nodeLoadTime = moduleLoadTime - upTime;
5823           } else if (Date.now) {
5824             module.exports = function() {
5825               return Date.now() - loadTime;
5826             };
5827             loadTime = Date.now();
5828           } else {
5829             module.exports = function() {
5830               return new Date().getTime() - loadTime;
5831             };
5832             loadTime = new Date().getTime();
5833           }
5834
5835         }).call(commonjsGlobal);
5836
5837
5838         });
5839
5840         var root = typeof window === 'undefined' ? commonjsGlobal : window
5841           , vendors = ['moz', 'webkit']
5842           , suffix = 'AnimationFrame'
5843           , raf = root['request' + suffix]
5844           , caf = root['cancel' + suffix] || root['cancelRequest' + suffix];
5845
5846         for(var i = 0; !raf && i < vendors.length; i++) {
5847           raf = root[vendors[i] + 'Request' + suffix];
5848           caf = root[vendors[i] + 'Cancel' + suffix]
5849               || root[vendors[i] + 'CancelRequest' + suffix];
5850         }
5851
5852         // Some versions of FF have rAF but not cAF
5853         if(!raf || !caf) {
5854           var last = 0
5855             , id$2 = 0
5856             , queue = []
5857             , frameDuration = 1000 / 60;
5858
5859           raf = function(callback) {
5860             if(queue.length === 0) {
5861               var _now = performanceNow()
5862                 , next = Math.max(0, frameDuration - (_now - last));
5863               last = next + _now;
5864               setTimeout(function() {
5865                 var cp = queue.slice(0);
5866                 // Clear queue here to prevent
5867                 // callbacks from appending listeners
5868                 // to the current frame's queue
5869                 queue.length = 0;
5870                 for(var i = 0; i < cp.length; i++) {
5871                   if(!cp[i].cancelled) {
5872                     try{
5873                       cp[i].callback(last);
5874                     } catch(e) {
5875                       setTimeout(function() { throw e }, 0);
5876                     }
5877                   }
5878                 }
5879               }, Math.round(next));
5880             }
5881             queue.push({
5882               handle: ++id$2,
5883               callback: callback,
5884               cancelled: false
5885             });
5886             return id$2
5887           };
5888
5889           caf = function(handle) {
5890             for(var i = 0; i < queue.length; i++) {
5891               if(queue[i].handle === handle) {
5892                 queue[i].cancelled = true;
5893               }
5894             }
5895           };
5896         }
5897
5898         var raf_1 = function(fn) {
5899           // Wrap in a new function to prevent
5900           // `cancel` potentially being assigned
5901           // to the native rAF function
5902           return raf.call(root, fn)
5903         };
5904         var cancel = function() {
5905           caf.apply(root, arguments);
5906         };
5907         var polyfill$e = function(object) {
5908           if (!object) {
5909             object = root;
5910           }
5911           object.requestAnimationFrame = raf;
5912           object.cancelAnimationFrame = caf;
5913         };
5914         raf_1.cancel = cancel;
5915         raf_1.polyfill = polyfill$e;
5916
5917         var support = {
5918           searchParams: 'URLSearchParams' in self,
5919           iterable: 'Symbol' in self && 'iterator' in Symbol,
5920           blob:
5921             'FileReader' in self &&
5922             'Blob' in self &&
5923             (function() {
5924               try {
5925                 new Blob();
5926                 return true
5927               } catch (e) {
5928                 return false
5929               }
5930             })(),
5931           formData: 'FormData' in self,
5932           arrayBuffer: 'ArrayBuffer' in self
5933         };
5934
5935         function isDataView(obj) {
5936           return obj && DataView.prototype.isPrototypeOf(obj)
5937         }
5938
5939         if (support.arrayBuffer) {
5940           var viewClasses = [
5941             '[object Int8Array]',
5942             '[object Uint8Array]',
5943             '[object Uint8ClampedArray]',
5944             '[object Int16Array]',
5945             '[object Uint16Array]',
5946             '[object Int32Array]',
5947             '[object Uint32Array]',
5948             '[object Float32Array]',
5949             '[object Float64Array]'
5950           ];
5951
5952           var isArrayBufferView =
5953             ArrayBuffer.isView ||
5954             function(obj) {
5955               return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
5956             };
5957         }
5958
5959         function normalizeName(name) {
5960           if (typeof name !== 'string') {
5961             name = String(name);
5962           }
5963           if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) {
5964             throw new TypeError('Invalid character in header field name')
5965           }
5966           return name.toLowerCase()
5967         }
5968
5969         function normalizeValue(value) {
5970           if (typeof value !== 'string') {
5971             value = String(value);
5972           }
5973           return value
5974         }
5975
5976         // Build a destructive iterator for the value list
5977         function iteratorFor(items) {
5978           var iterator = {
5979             next: function() {
5980               var value = items.shift();
5981               return {done: value === undefined, value: value}
5982             }
5983           };
5984
5985           if (support.iterable) {
5986             iterator[Symbol.iterator] = function() {
5987               return iterator
5988             };
5989           }
5990
5991           return iterator
5992         }
5993
5994         function Headers(headers) {
5995           this.map = {};
5996
5997           if (headers instanceof Headers) {
5998             headers.forEach(function(value, name) {
5999               this.append(name, value);
6000             }, this);
6001           } else if (Array.isArray(headers)) {
6002             headers.forEach(function(header) {
6003               this.append(header[0], header[1]);
6004             }, this);
6005           } else if (headers) {
6006             Object.getOwnPropertyNames(headers).forEach(function(name) {
6007               this.append(name, headers[name]);
6008             }, this);
6009           }
6010         }
6011
6012         Headers.prototype.append = function(name, value) {
6013           name = normalizeName(name);
6014           value = normalizeValue(value);
6015           var oldValue = this.map[name];
6016           this.map[name] = oldValue ? oldValue + ', ' + value : value;
6017         };
6018
6019         Headers.prototype['delete'] = function(name) {
6020           delete this.map[normalizeName(name)];
6021         };
6022
6023         Headers.prototype.get = function(name) {
6024           name = normalizeName(name);
6025           return this.has(name) ? this.map[name] : null
6026         };
6027
6028         Headers.prototype.has = function(name) {
6029           return this.map.hasOwnProperty(normalizeName(name))
6030         };
6031
6032         Headers.prototype.set = function(name, value) {
6033           this.map[normalizeName(name)] = normalizeValue(value);
6034         };
6035
6036         Headers.prototype.forEach = function(callback, thisArg) {
6037           for (var name in this.map) {
6038             if (this.map.hasOwnProperty(name)) {
6039               callback.call(thisArg, this.map[name], name, this);
6040             }
6041           }
6042         };
6043
6044         Headers.prototype.keys = function() {
6045           var items = [];
6046           this.forEach(function(value, name) {
6047             items.push(name);
6048           });
6049           return iteratorFor(items)
6050         };
6051
6052         Headers.prototype.values = function() {
6053           var items = [];
6054           this.forEach(function(value) {
6055             items.push(value);
6056           });
6057           return iteratorFor(items)
6058         };
6059
6060         Headers.prototype.entries = function() {
6061           var items = [];
6062           this.forEach(function(value, name) {
6063             items.push([name, value]);
6064           });
6065           return iteratorFor(items)
6066         };
6067
6068         if (support.iterable) {
6069           Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
6070         }
6071
6072         function consumed(body) {
6073           if (body.bodyUsed) {
6074             return Promise.reject(new TypeError('Already read'))
6075           }
6076           body.bodyUsed = true;
6077         }
6078
6079         function fileReaderReady(reader) {
6080           return new Promise(function(resolve, reject) {
6081             reader.onload = function() {
6082               resolve(reader.result);
6083             };
6084             reader.onerror = function() {
6085               reject(reader.error);
6086             };
6087           })
6088         }
6089
6090         function readBlobAsArrayBuffer(blob) {
6091           var reader = new FileReader();
6092           var promise = fileReaderReady(reader);
6093           reader.readAsArrayBuffer(blob);
6094           return promise
6095         }
6096
6097         function readBlobAsText(blob) {
6098           var reader = new FileReader();
6099           var promise = fileReaderReady(reader);
6100           reader.readAsText(blob);
6101           return promise
6102         }
6103
6104         function readArrayBufferAsText(buf) {
6105           var view = new Uint8Array(buf);
6106           var chars = new Array(view.length);
6107
6108           for (var i = 0; i < view.length; i++) {
6109             chars[i] = String.fromCharCode(view[i]);
6110           }
6111           return chars.join('')
6112         }
6113
6114         function bufferClone(buf) {
6115           if (buf.slice) {
6116             return buf.slice(0)
6117           } else {
6118             var view = new Uint8Array(buf.byteLength);
6119             view.set(new Uint8Array(buf));
6120             return view.buffer
6121           }
6122         }
6123
6124         function Body() {
6125           this.bodyUsed = false;
6126
6127           this._initBody = function(body) {
6128             this._bodyInit = body;
6129             if (!body) {
6130               this._bodyText = '';
6131             } else if (typeof body === 'string') {
6132               this._bodyText = body;
6133             } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
6134               this._bodyBlob = body;
6135             } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
6136               this._bodyFormData = body;
6137             } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
6138               this._bodyText = body.toString();
6139             } else if (support.arrayBuffer && support.blob && isDataView(body)) {
6140               this._bodyArrayBuffer = bufferClone(body.buffer);
6141               // IE 10-11 can't handle a DataView body.
6142               this._bodyInit = new Blob([this._bodyArrayBuffer]);
6143             } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
6144               this._bodyArrayBuffer = bufferClone(body);
6145             } else {
6146               this._bodyText = body = Object.prototype.toString.call(body);
6147             }
6148
6149             if (!this.headers.get('content-type')) {
6150               if (typeof body === 'string') {
6151                 this.headers.set('content-type', 'text/plain;charset=UTF-8');
6152               } else if (this._bodyBlob && this._bodyBlob.type) {
6153                 this.headers.set('content-type', this._bodyBlob.type);
6154               } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
6155                 this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
6156               }
6157             }
6158           };
6159
6160           if (support.blob) {
6161             this.blob = function() {
6162               var rejected = consumed(this);
6163               if (rejected) {
6164                 return rejected
6165               }
6166
6167               if (this._bodyBlob) {
6168                 return Promise.resolve(this._bodyBlob)
6169               } else if (this._bodyArrayBuffer) {
6170                 return Promise.resolve(new Blob([this._bodyArrayBuffer]))
6171               } else if (this._bodyFormData) {
6172                 throw new Error('could not read FormData body as blob')
6173               } else {
6174                 return Promise.resolve(new Blob([this._bodyText]))
6175               }
6176             };
6177
6178             this.arrayBuffer = function() {
6179               if (this._bodyArrayBuffer) {
6180                 return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
6181               } else {
6182                 return this.blob().then(readBlobAsArrayBuffer)
6183               }
6184             };
6185           }
6186
6187           this.text = function() {
6188             var rejected = consumed(this);
6189             if (rejected) {
6190               return rejected
6191             }
6192
6193             if (this._bodyBlob) {
6194               return readBlobAsText(this._bodyBlob)
6195             } else if (this._bodyArrayBuffer) {
6196               return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
6197             } else if (this._bodyFormData) {
6198               throw new Error('could not read FormData body as text')
6199             } else {
6200               return Promise.resolve(this._bodyText)
6201             }
6202           };
6203
6204           if (support.formData) {
6205             this.formData = function() {
6206               return this.text().then(decode)
6207             };
6208           }
6209
6210           this.json = function() {
6211             return this.text().then(JSON.parse)
6212           };
6213
6214           return this
6215         }
6216
6217         // HTTP methods whose capitalization should be normalized
6218         var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
6219
6220         function normalizeMethod(method) {
6221           var upcased = method.toUpperCase();
6222           return methods.indexOf(upcased) > -1 ? upcased : method
6223         }
6224
6225         function Request(input, options) {
6226           options = options || {};
6227           var body = options.body;
6228
6229           if (input instanceof Request) {
6230             if (input.bodyUsed) {
6231               throw new TypeError('Already read')
6232             }
6233             this.url = input.url;
6234             this.credentials = input.credentials;
6235             if (!options.headers) {
6236               this.headers = new Headers(input.headers);
6237             }
6238             this.method = input.method;
6239             this.mode = input.mode;
6240             this.signal = input.signal;
6241             if (!body && input._bodyInit != null) {
6242               body = input._bodyInit;
6243               input.bodyUsed = true;
6244             }
6245           } else {
6246             this.url = String(input);
6247           }
6248
6249           this.credentials = options.credentials || this.credentials || 'same-origin';
6250           if (options.headers || !this.headers) {
6251             this.headers = new Headers(options.headers);
6252           }
6253           this.method = normalizeMethod(options.method || this.method || 'GET');
6254           this.mode = options.mode || this.mode || null;
6255           this.signal = options.signal || this.signal;
6256           this.referrer = null;
6257
6258           if ((this.method === 'GET' || this.method === 'HEAD') && body) {
6259             throw new TypeError('Body not allowed for GET or HEAD requests')
6260           }
6261           this._initBody(body);
6262         }
6263
6264         Request.prototype.clone = function() {
6265           return new Request(this, {body: this._bodyInit})
6266         };
6267
6268         function decode(body) {
6269           var form = new FormData();
6270           body
6271             .trim()
6272             .split('&')
6273             .forEach(function(bytes) {
6274               if (bytes) {
6275                 var split = bytes.split('=');
6276                 var name = split.shift().replace(/\+/g, ' ');
6277                 var value = split.join('=').replace(/\+/g, ' ');
6278                 form.append(decodeURIComponent(name), decodeURIComponent(value));
6279               }
6280             });
6281           return form
6282         }
6283
6284         function parseHeaders(rawHeaders) {
6285           var headers = new Headers();
6286           // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
6287           // https://tools.ietf.org/html/rfc7230#section-3.2
6288           var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
6289           preProcessedHeaders.split(/\r?\n/).forEach(function(line) {
6290             var parts = line.split(':');
6291             var key = parts.shift().trim();
6292             if (key) {
6293               var value = parts.join(':').trim();
6294               headers.append(key, value);
6295             }
6296           });
6297           return headers
6298         }
6299
6300         Body.call(Request.prototype);
6301
6302         function Response(bodyInit, options) {
6303           if (!options) {
6304             options = {};
6305           }
6306
6307           this.type = 'default';
6308           this.status = options.status === undefined ? 200 : options.status;
6309           this.ok = this.status >= 200 && this.status < 300;
6310           this.statusText = 'statusText' in options ? options.statusText : 'OK';
6311           this.headers = new Headers(options.headers);
6312           this.url = options.url || '';
6313           this._initBody(bodyInit);
6314         }
6315
6316         Body.call(Response.prototype);
6317
6318         Response.prototype.clone = function() {
6319           return new Response(this._bodyInit, {
6320             status: this.status,
6321             statusText: this.statusText,
6322             headers: new Headers(this.headers),
6323             url: this.url
6324           })
6325         };
6326
6327         Response.error = function() {
6328           var response = new Response(null, {status: 0, statusText: ''});
6329           response.type = 'error';
6330           return response
6331         };
6332
6333         var redirectStatuses = [301, 302, 303, 307, 308];
6334
6335         Response.redirect = function(url, status) {
6336           if (redirectStatuses.indexOf(status) === -1) {
6337             throw new RangeError('Invalid status code')
6338           }
6339
6340           return new Response(null, {status: status, headers: {location: url}})
6341         };
6342
6343         var DOMException$1 = self.DOMException;
6344         try {
6345           new DOMException$1();
6346         } catch (err) {
6347           DOMException$1 = function(message, name) {
6348             this.message = message;
6349             this.name = name;
6350             var error = Error(message);
6351             this.stack = error.stack;
6352           };
6353           DOMException$1.prototype = Object.create(Error.prototype);
6354           DOMException$1.prototype.constructor = DOMException$1;
6355         }
6356
6357         function fetch$1(input, init) {
6358           return new Promise(function(resolve, reject) {
6359             var request = new Request(input, init);
6360
6361             if (request.signal && request.signal.aborted) {
6362               return reject(new DOMException$1('Aborted', 'AbortError'))
6363             }
6364
6365             var xhr = new XMLHttpRequest();
6366
6367             function abortXhr() {
6368               xhr.abort();
6369             }
6370
6371             xhr.onload = function() {
6372               var options = {
6373                 status: xhr.status,
6374                 statusText: xhr.statusText,
6375                 headers: parseHeaders(xhr.getAllResponseHeaders() || '')
6376               };
6377               options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');
6378               var body = 'response' in xhr ? xhr.response : xhr.responseText;
6379               resolve(new Response(body, options));
6380             };
6381
6382             xhr.onerror = function() {
6383               reject(new TypeError('Network request failed'));
6384             };
6385
6386             xhr.ontimeout = function() {
6387               reject(new TypeError('Network request failed'));
6388             };
6389
6390             xhr.onabort = function() {
6391               reject(new DOMException$1('Aborted', 'AbortError'));
6392             };
6393
6394             xhr.open(request.method, request.url, true);
6395
6396             if (request.credentials === 'include') {
6397               xhr.withCredentials = true;
6398             } else if (request.credentials === 'omit') {
6399               xhr.withCredentials = false;
6400             }
6401
6402             if ('responseType' in xhr && support.blob) {
6403               xhr.responseType = 'blob';
6404             }
6405
6406             request.headers.forEach(function(value, name) {
6407               xhr.setRequestHeader(name, value);
6408             });
6409
6410             if (request.signal) {
6411               request.signal.addEventListener('abort', abortXhr);
6412
6413               xhr.onreadystatechange = function() {
6414                 // DONE (success or failure)
6415                 if (xhr.readyState === 4) {
6416                   request.signal.removeEventListener('abort', abortXhr);
6417                 }
6418               };
6419             }
6420
6421             xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);
6422           })
6423         }
6424
6425         fetch$1.polyfill = true;
6426
6427         if (!self.fetch) {
6428           self.fetch = fetch$1;
6429           self.Headers = Headers;
6430           self.Request = Request;
6431           self.Response = Response;
6432         }
6433
6434         var lib = createCommonjsModule(function (module, exports) {
6435         Object.defineProperty(exports, "__esModule", { value: true });
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446         if (!window.Set) {
6447             window.Set = es6Set;
6448         }
6449         if (!window.Map) {
6450             window.Map = es6Map;
6451         }
6452         if (!window.Promise) {
6453             window.Promise = polyfill$d;
6454             window.Promise._immediateFn = setAsap;
6455         }
6456         if (!Array.prototype.find) {
6457             array_prototype_find.shim();
6458         }
6459         if (!Array.prototype.findIndex) {
6460             array_prototype_findindex.shim();
6461         }
6462         if (!Array.from) {
6463             array_from.shim();
6464         }
6465         if (!Object.values) {
6466             object_values.shim();
6467         }
6468         if (!Object.assign) {
6469             object_assign.shim();
6470         }
6471         if (!window.requestAnimationFrame || !window.cancelAnimationFrame) {
6472             window.requestAnimationFrame = raf_1;
6473             window.cancelAnimationFrame = raf_1.cancel;
6474         }
6475
6476         var finalFetch = window.fetch;
6477         var finalPromise = window.Promise;
6478         window.fetch = function (input, init) {
6479             try {
6480                 return finalFetch(input, init);
6481             }
6482             catch (error) {
6483                 return new finalPromise(function (_, reject) { return reject(error); });
6484             }
6485         };
6486         });
6487
6488         unwrapExports(lib);
6489
6490         /*! http://mths.be/fromcodepoint v0.2.1 by @mathias */
6491         if (!String.fromCodePoint) {
6492                 (function() {
6493                         var defineProperty = (function() {
6494                                 // IE 8 only supports `Object.defineProperty` on DOM elements
6495                                 try {
6496                                         var object = {};
6497                                         var $defineProperty = Object.defineProperty;
6498                                         var result = $defineProperty(object, object, object) && $defineProperty;
6499                                 } catch(error) {}
6500                                 return result;
6501                         }());
6502                         var stringFromCharCode = String.fromCharCode;
6503                         var floor = Math.floor;
6504                         var fromCodePoint = function(_) {
6505                                 var arguments$1 = arguments;
6506
6507                                 var MAX_SIZE = 0x4000;
6508                                 var codeUnits = [];
6509                                 var highSurrogate;
6510                                 var lowSurrogate;
6511                                 var index = -1;
6512                                 var length = arguments.length;
6513                                 if (!length) {
6514                                         return '';
6515                                 }
6516                                 var result = '';
6517                                 while (++index < length) {
6518                                         var codePoint = Number(arguments$1[index]);
6519                                         if (
6520                                                 !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
6521                                                 codePoint < 0 || // not a valid Unicode code point
6522                                                 codePoint > 0x10FFFF || // not a valid Unicode code point
6523                                                 floor(codePoint) != codePoint // not an integer
6524                                         ) {
6525                                                 throw RangeError('Invalid code point: ' + codePoint);
6526                                         }
6527                                         if (codePoint <= 0xFFFF) { // BMP code point
6528                                                 codeUnits.push(codePoint);
6529                                         } else { // Astral code point; split in surrogate halves
6530                                                 // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
6531                                                 codePoint -= 0x10000;
6532                                                 highSurrogate = (codePoint >> 10) + 0xD800;
6533                                                 lowSurrogate = (codePoint % 0x400) + 0xDC00;
6534                                                 codeUnits.push(highSurrogate, lowSurrogate);
6535                                         }
6536                                         if (index + 1 == length || codeUnits.length > MAX_SIZE) {
6537                                                 result += stringFromCharCode.apply(null, codeUnits);
6538                                                 codeUnits.length = 0;
6539                                         }
6540                                 }
6541                                 return result;
6542                         };
6543                         if (defineProperty) {
6544                                 defineProperty(String, 'fromCodePoint', {
6545                                         'value': fromCodePoint,
6546                                         'configurable': true,
6547                                         'writable': true
6548                                 });
6549                         } else {
6550                                 String.fromCodePoint = fromCodePoint;
6551                         }
6552                 }());
6553         }
6554
6555         (function (factory) {
6556           
6557           factory();
6558         }((function () {
6559           function _classCallCheck(instance, Constructor) {
6560             if (!(instance instanceof Constructor)) {
6561               throw new TypeError("Cannot call a class as a function");
6562             }
6563           }
6564
6565           function _defineProperties(target, props) {
6566             for (var i = 0; i < props.length; i++) {
6567               var descriptor = props[i];
6568               descriptor.enumerable = descriptor.enumerable || false;
6569               descriptor.configurable = true;
6570               if ("value" in descriptor) { descriptor.writable = true; }
6571               Object.defineProperty(target, descriptor.key, descriptor);
6572             }
6573           }
6574
6575           function _createClass(Constructor, protoProps, staticProps) {
6576             if (protoProps) { _defineProperties(Constructor.prototype, protoProps); }
6577             if (staticProps) { _defineProperties(Constructor, staticProps); }
6578             return Constructor;
6579           }
6580
6581           function _inherits(subClass, superClass) {
6582             if (typeof superClass !== "function" && superClass !== null) {
6583               throw new TypeError("Super expression must either be null or a function");
6584             }
6585
6586             subClass.prototype = Object.create(superClass && superClass.prototype, {
6587               constructor: {
6588                 value: subClass,
6589                 writable: true,
6590                 configurable: true
6591               }
6592             });
6593             if (superClass) { _setPrototypeOf(subClass, superClass); }
6594           }
6595
6596           function _getPrototypeOf(o) {
6597             _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
6598               return o.__proto__ || Object.getPrototypeOf(o);
6599             };
6600             return _getPrototypeOf(o);
6601           }
6602
6603           function _setPrototypeOf(o, p) {
6604             _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
6605               o.__proto__ = p;
6606               return o;
6607             };
6608
6609             return _setPrototypeOf(o, p);
6610           }
6611
6612           function _assertThisInitialized(self) {
6613             if (self === void 0) {
6614               throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
6615             }
6616
6617             return self;
6618           }
6619
6620           function _possibleConstructorReturn(self, call) {
6621             if (call && (typeof call === "object" || typeof call === "function")) {
6622               return call;
6623             }
6624
6625             return _assertThisInitialized(self);
6626           }
6627
6628           function _superPropBase(object, property) {
6629             while (!Object.prototype.hasOwnProperty.call(object, property)) {
6630               object = _getPrototypeOf(object);
6631               if (object === null) { break; }
6632             }
6633
6634             return object;
6635           }
6636
6637           function _get(target, property, receiver) {
6638             if (typeof Reflect !== "undefined" && Reflect.get) {
6639               _get = Reflect.get;
6640             } else {
6641               _get = function _get(target, property, receiver) {
6642                 var base = _superPropBase(target, property);
6643
6644                 if (!base) { return; }
6645                 var desc = Object.getOwnPropertyDescriptor(base, property);
6646
6647                 if (desc.get) {
6648                   return desc.get.call(receiver);
6649                 }
6650
6651                 return desc.value;
6652               };
6653             }
6654
6655             return _get(target, property, receiver || target);
6656           }
6657
6658           var Emitter =
6659           /*#__PURE__*/
6660           function () {
6661             function Emitter() {
6662               _classCallCheck(this, Emitter);
6663
6664               Object.defineProperty(this, 'listeners', {
6665                 value: {},
6666                 writable: true,
6667                 configurable: true
6668               });
6669             }
6670
6671             _createClass(Emitter, [{
6672               key: "addEventListener",
6673               value: function addEventListener(type, callback) {
6674                 if (!(type in this.listeners)) {
6675                   this.listeners[type] = [];
6676                 }
6677
6678                 this.listeners[type].push(callback);
6679               }
6680             }, {
6681               key: "removeEventListener",
6682               value: function removeEventListener(type, callback) {
6683                 if (!(type in this.listeners)) {
6684                   return;
6685                 }
6686
6687                 var stack = this.listeners[type];
6688
6689                 for (var i = 0, l = stack.length; i < l; i++) {
6690                   if (stack[i] === callback) {
6691                     stack.splice(i, 1);
6692                     return;
6693                   }
6694                 }
6695               }
6696             }, {
6697               key: "dispatchEvent",
6698               value: function dispatchEvent(event) {
6699                 var _this = this;
6700
6701                 if (!(event.type in this.listeners)) {
6702                   return;
6703                 }
6704
6705                 var debounce = function debounce(callback) {
6706                   setTimeout(function () {
6707                     return callback.call(_this, event);
6708                   });
6709                 };
6710
6711                 var stack = this.listeners[event.type];
6712
6713                 for (var i = 0, l = stack.length; i < l; i++) {
6714                   debounce(stack[i]);
6715                 }
6716
6717                 return !event.defaultPrevented;
6718               }
6719             }]);
6720
6721             return Emitter;
6722           }();
6723
6724           var AbortSignal =
6725           /*#__PURE__*/
6726           function (_Emitter) {
6727             _inherits(AbortSignal, _Emitter);
6728
6729             function AbortSignal() {
6730               var _this2;
6731
6732               _classCallCheck(this, AbortSignal);
6733
6734               _this2 = _possibleConstructorReturn(this, _getPrototypeOf(AbortSignal).call(this)); // Some versions of babel does not transpile super() correctly for IE <= 10, if the parent
6735               // constructor has failed to run, then "this.listeners" will still be undefined and then we call
6736               // the parent constructor directly instead as a workaround. For general details, see babel bug:
6737               // https://github.com/babel/babel/issues/3041
6738               // This hack was added as a fix for the issue described here:
6739               // https://github.com/Financial-Times/polyfill-library/pull/59#issuecomment-477558042
6740
6741               if (!_this2.listeners) {
6742                 Emitter.call(_assertThisInitialized(_this2));
6743               } // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
6744               // we want Object.keys(new AbortController().signal) to be [] for compat with the native impl
6745
6746
6747               Object.defineProperty(_assertThisInitialized(_this2), 'aborted', {
6748                 value: false,
6749                 writable: true,
6750                 configurable: true
6751               });
6752               Object.defineProperty(_assertThisInitialized(_this2), 'onabort', {
6753                 value: null,
6754                 writable: true,
6755                 configurable: true
6756               });
6757               return _this2;
6758             }
6759
6760             _createClass(AbortSignal, [{
6761               key: "toString",
6762               value: function toString() {
6763                 return '[object AbortSignal]';
6764               }
6765             }, {
6766               key: "dispatchEvent",
6767               value: function dispatchEvent(event) {
6768                 if (event.type === 'abort') {
6769                   this.aborted = true;
6770
6771                   if (typeof this.onabort === 'function') {
6772                     this.onabort.call(this, event);
6773                   }
6774                 }
6775
6776                 _get(_getPrototypeOf(AbortSignal.prototype), "dispatchEvent", this).call(this, event);
6777               }
6778             }]);
6779
6780             return AbortSignal;
6781           }(Emitter);
6782           var AbortController =
6783           /*#__PURE__*/
6784           function () {
6785             function AbortController() {
6786               _classCallCheck(this, AbortController);
6787
6788               // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
6789               // we want Object.keys(new AbortController()) to be [] for compat with the native impl
6790               Object.defineProperty(this, 'signal', {
6791                 value: new AbortSignal(),
6792                 writable: true,
6793                 configurable: true
6794               });
6795             }
6796
6797             _createClass(AbortController, [{
6798               key: "abort",
6799               value: function abort() {
6800                 var event;
6801
6802                 try {
6803                   event = new Event('abort');
6804                 } catch (e) {
6805                   if (typeof document !== 'undefined') {
6806                     if (!document.createEvent) {
6807                       // For Internet Explorer 8:
6808                       event = document.createEventObject();
6809                       event.type = 'abort';
6810                     } else {
6811                       // For Internet Explorer 11:
6812                       event = document.createEvent('Event');
6813                       event.initEvent('abort', false, false);
6814                     }
6815                   } else {
6816                     // Fallback where document isn't available:
6817                     event = {
6818                       type: 'abort',
6819                       bubbles: false,
6820                       cancelable: false
6821                     };
6822                   }
6823                 }
6824
6825                 this.signal.dispatchEvent(event);
6826               }
6827             }, {
6828               key: "toString",
6829               value: function toString() {
6830                 return '[object AbortController]';
6831               }
6832             }]);
6833
6834             return AbortController;
6835           }();
6836
6837           if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
6838             // These are necessary to make sure that we get correct output for:
6839             // Object.prototype.toString.call(new AbortController())
6840             AbortController.prototype[Symbol.toStringTag] = 'AbortController';
6841             AbortSignal.prototype[Symbol.toStringTag] = 'AbortSignal';
6842           }
6843
6844           function polyfillNeeded(self) {
6845             if (self.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
6846               console.log('__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL=true is set, will force install polyfill');
6847               return true;
6848             } // Note that the "unfetch" minimal fetch polyfill defines fetch() without
6849             // defining window.Request, and this polyfill need to work on top of unfetch
6850             // so the below feature detection needs the !self.AbortController part.
6851             // The Request.prototype check is also needed because Safari versions 11.1.2
6852             // up to and including 12.1.x has a window.AbortController present but still
6853             // does NOT correctly implement abortable fetch:
6854             // https://bugs.webkit.org/show_bug.cgi?id=174980#c2
6855
6856
6857             return typeof self.Request === 'function' && !self.Request.prototype.hasOwnProperty('signal') || !self.AbortController;
6858           }
6859
6860           /**
6861            * Note: the "fetch.Request" default value is available for fetch imported from
6862            * the "node-fetch" package and not in browsers. This is OK since browsers
6863            * will be importing umd-polyfill.js from that path "self" is passed the
6864            * decorator so the default value will not be used (because browsers that define
6865            * fetch also has Request). One quirky setup where self.fetch exists but
6866            * self.Request does not is when the "unfetch" minimal fetch polyfill is used
6867            * on top of IE11; for this case the browser will try to use the fetch.Request
6868            * default value which in turn will be undefined but then then "if (Request)"
6869            * will ensure that you get a patched fetch but still no Request (as expected).
6870            * @param {fetch, Request = fetch.Request}
6871            * @returns {fetch: abortableFetch, Request: AbortableRequest}
6872            */
6873
6874           function abortableFetchDecorator(patchTargets) {
6875             if ('function' === typeof patchTargets) {
6876               patchTargets = {
6877                 fetch: patchTargets
6878               };
6879             }
6880
6881             var _patchTargets = patchTargets,
6882                 fetch = _patchTargets.fetch,
6883                 _patchTargets$Request = _patchTargets.Request,
6884                 NativeRequest = _patchTargets$Request === void 0 ? fetch.Request : _patchTargets$Request,
6885                 NativeAbortController = _patchTargets.AbortController,
6886                 _patchTargets$__FORCE = _patchTargets.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL,
6887                 __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL = _patchTargets$__FORCE === void 0 ? false : _patchTargets$__FORCE;
6888
6889             if (!polyfillNeeded({
6890               fetch: fetch,
6891               Request: NativeRequest,
6892               AbortController: NativeAbortController,
6893               __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL: __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL
6894             })) {
6895               return {
6896                 fetch: fetch,
6897                 Request: Request
6898               };
6899             }
6900
6901             var Request = NativeRequest; // Note that the "unfetch" minimal fetch polyfill defines fetch() without
6902             // defining window.Request, and this polyfill need to work on top of unfetch
6903             // hence we only patch it if it's available. Also we don't patch it if signal
6904             // is already available on the Request prototype because in this case support
6905             // is present and the patching below can cause a crash since it assigns to
6906             // request.signal which is technically a read-only property. This latter error
6907             // happens when you run the main5.js node-fetch example in the repo
6908             // "abortcontroller-polyfill-examples". The exact error is:
6909             //   request.signal = init.signal;
6910             //   ^
6911             // TypeError: Cannot set property signal of #<Request> which has only a getter
6912
6913             if (Request && !Request.prototype.hasOwnProperty('signal') || __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
6914               Request = function Request(input, init) {
6915                 var signal;
6916
6917                 if (init && init.signal) {
6918                   signal = init.signal; // Never pass init.signal to the native Request implementation when the polyfill has
6919                   // been installed because if we're running on top of a browser with a
6920                   // working native AbortController (i.e. the polyfill was installed due to
6921                   // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our
6922                   // fake AbortSignal to the native fetch will trigger:
6923                   // TypeError: Failed to construct 'Request': member signal is not of type AbortSignal.
6924
6925                   delete init.signal;
6926                 }
6927
6928                 var request = new NativeRequest(input, init);
6929
6930                 if (signal) {
6931                   Object.defineProperty(request, 'signal', {
6932                     writable: false,
6933                     enumerable: false,
6934                     configurable: true,
6935                     value: signal
6936                   });
6937                 }
6938
6939                 return request;
6940               };
6941
6942               Request.prototype = NativeRequest.prototype;
6943             }
6944
6945             var realFetch = fetch;
6946
6947             var abortableFetch = function abortableFetch(input, init) {
6948               var signal = Request && Request.prototype.isPrototypeOf(input) ? input.signal : init ? init.signal : undefined;
6949
6950               if (signal) {
6951                 var abortError;
6952
6953                 try {
6954                   abortError = new DOMException('Aborted', 'AbortError');
6955                 } catch (err) {
6956                   // IE 11 does not support calling the DOMException constructor, use a
6957                   // regular error object on it instead.
6958                   abortError = new Error('Aborted');
6959                   abortError.name = 'AbortError';
6960                 } // Return early if already aborted, thus avoiding making an HTTP request
6961
6962
6963                 if (signal.aborted) {
6964                   return Promise.reject(abortError);
6965                 } // Turn an event into a promise, reject it once `abort` is dispatched
6966
6967
6968                 var cancellation = new Promise(function (_, reject) {
6969                   signal.addEventListener('abort', function () {
6970                     return reject(abortError);
6971                   }, {
6972                     once: true
6973                   });
6974                 });
6975
6976                 if (init && init.signal) {
6977                   // Never pass .signal to the native implementation when the polyfill has
6978                   // been installed because if we're running on top of a browser with a
6979                   // working native AbortController (i.e. the polyfill was installed due to
6980                   // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our
6981                   // fake AbortSignal to the native fetch will trigger:
6982                   // TypeError: Failed to execute 'fetch' on 'Window': member signal is not of type AbortSignal.
6983                   delete init.signal;
6984                 } // Return the fastest promise (don't need to wait for request to finish)
6985
6986
6987                 return Promise.race([cancellation, realFetch(input, init)]);
6988               }
6989
6990               return realFetch(input, init);
6991             };
6992
6993             return {
6994               fetch: abortableFetch,
6995               Request: Request
6996             };
6997           }
6998
6999           (function (self) {
7000
7001             if (!polyfillNeeded(self)) {
7002               return;
7003             }
7004
7005             if (!self.fetch) {
7006               console.warn('fetch() is not available, cannot install abortcontroller-polyfill');
7007               return;
7008             }
7009
7010             var _abortableFetch = abortableFetchDecorator(self),
7011                 fetch = _abortableFetch.fetch,
7012                 Request = _abortableFetch.Request;
7013
7014             self.fetch = fetch;
7015             self.Request = Request;
7016             Object.defineProperty(self, 'AbortController', {
7017               writable: true,
7018               enumerable: false,
7019               configurable: true,
7020               value: AbortController
7021             });
7022             Object.defineProperty(self, 'AbortSignal', {
7023               writable: true,
7024               enumerable: false,
7025               configurable: true,
7026               value: AbortSignal
7027             });
7028           })(typeof self !== 'undefined' ? self : commonjsGlobal);
7029
7030         })));
7031
7032         var version = "5.15.0";
7033
7034         function d3_ascending(a, b) {
7035           return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
7036         }
7037
7038         function d3_bisector(compare) {
7039           if (compare.length === 1) { compare = ascendingComparator(compare); }
7040           return {
7041             left: function(a, x, lo, hi) {
7042               if (lo == null) { lo = 0; }
7043               if (hi == null) { hi = a.length; }
7044               while (lo < hi) {
7045                 var mid = lo + hi >>> 1;
7046                 if (compare(a[mid], x) < 0) { lo = mid + 1; }
7047                 else { hi = mid; }
7048               }
7049               return lo;
7050             },
7051             right: function(a, x, lo, hi) {
7052               if (lo == null) { lo = 0; }
7053               if (hi == null) { hi = a.length; }
7054               while (lo < hi) {
7055                 var mid = lo + hi >>> 1;
7056                 if (compare(a[mid], x) > 0) { hi = mid; }
7057                 else { lo = mid + 1; }
7058               }
7059               return lo;
7060             }
7061           };
7062         }
7063
7064         function ascendingComparator(f) {
7065           return function(d, x) {
7066             return d3_ascending(f(d), x);
7067           };
7068         }
7069
7070         var ascendingBisect = d3_bisector(d3_ascending);
7071         var bisectRight = ascendingBisect.right;
7072         var bisectLeft = ascendingBisect.left;
7073
7074         function pairs(array, f) {
7075           if (f == null) { f = pair; }
7076           var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
7077           while (i < n) { pairs[i] = f(p, p = array[++i]); }
7078           return pairs;
7079         }
7080
7081         function pair(a, b) {
7082           return [a, b];
7083         }
7084
7085         function cross(values0, values1, reduce) {
7086           var n0 = values0.length,
7087               n1 = values1.length,
7088               values = new Array(n0 * n1),
7089               i0,
7090               i1,
7091               i,
7092               value0;
7093
7094           if (reduce == null) { reduce = pair; }
7095
7096           for (i0 = i = 0; i0 < n0; ++i0) {
7097             for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {
7098               values[i] = reduce(value0, values1[i1]);
7099             }
7100           }
7101
7102           return values;
7103         }
7104
7105         function d3_descending(a, b) {
7106           return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
7107         }
7108
7109         function number(x) {
7110           return x === null ? NaN : +x;
7111         }
7112
7113         function variance(values, valueof) {
7114           var n = values.length,
7115               m = 0,
7116               i = -1,
7117               mean = 0,
7118               value,
7119               delta,
7120               sum = 0;
7121
7122           if (valueof == null) {
7123             while (++i < n) {
7124               if (!isNaN(value = number(values[i]))) {
7125                 delta = value - mean;
7126                 mean += delta / ++m;
7127                 sum += delta * (value - mean);
7128               }
7129             }
7130           }
7131
7132           else {
7133             while (++i < n) {
7134               if (!isNaN(value = number(valueof(values[i], i, values)))) {
7135                 delta = value - mean;
7136                 mean += delta / ++m;
7137                 sum += delta * (value - mean);
7138               }
7139             }
7140           }
7141
7142           if (m > 1) { return sum / (m - 1); }
7143         }
7144
7145         function deviation(array, f) {
7146           var v = variance(array, f);
7147           return v ? Math.sqrt(v) : v;
7148         }
7149
7150         function extent(values, valueof) {
7151           var n = values.length,
7152               i = -1,
7153               value,
7154               min,
7155               max;
7156
7157           if (valueof == null) {
7158             while (++i < n) { // Find the first comparable value.
7159               if ((value = values[i]) != null && value >= value) {
7160                 min = max = value;
7161                 while (++i < n) { // Compare the remaining values.
7162                   if ((value = values[i]) != null) {
7163                     if (min > value) { min = value; }
7164                     if (max < value) { max = value; }
7165                   }
7166                 }
7167               }
7168             }
7169           }
7170
7171           else {
7172             while (++i < n) { // Find the first comparable value.
7173               if ((value = valueof(values[i], i, values)) != null && value >= value) {
7174                 min = max = value;
7175                 while (++i < n) { // Compare the remaining values.
7176                   if ((value = valueof(values[i], i, values)) != null) {
7177                     if (min > value) { min = value; }
7178                     if (max < value) { max = value; }
7179                   }
7180                 }
7181               }
7182             }
7183           }
7184
7185           return [min, max];
7186         }
7187
7188         var array$1 = Array.prototype;
7189
7190         var slice$4 = array$1.slice;
7191         var map$2 = array$1.map;
7192
7193         function constant(x) {
7194           return function() {
7195             return x;
7196           };
7197         }
7198
7199         function identity(x) {
7200           return x;
7201         }
7202
7203         function d3_range(start, stop, step) {
7204           start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
7205
7206           var i = -1,
7207               n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
7208               range = new Array(n);
7209
7210           while (++i < n) {
7211             range[i] = start + i * step;
7212           }
7213
7214           return range;
7215         }
7216
7217         var e10 = Math.sqrt(50),
7218             e5 = Math.sqrt(10),
7219             e2 = Math.sqrt(2);
7220
7221         function ticks(start, stop, count) {
7222           var reverse,
7223               i = -1,
7224               n,
7225               ticks,
7226               step;
7227
7228           stop = +stop, start = +start, count = +count;
7229           if (start === stop && count > 0) { return [start]; }
7230           if (reverse = stop < start) { n = start, start = stop, stop = n; }
7231           if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) { return []; }
7232
7233           if (step > 0) {
7234             start = Math.ceil(start / step);
7235             stop = Math.floor(stop / step);
7236             ticks = new Array(n = Math.ceil(stop - start + 1));
7237             while (++i < n) { ticks[i] = (start + i) * step; }
7238           } else {
7239             start = Math.floor(start * step);
7240             stop = Math.ceil(stop * step);
7241             ticks = new Array(n = Math.ceil(start - stop + 1));
7242             while (++i < n) { ticks[i] = (start - i) / step; }
7243           }
7244
7245           if (reverse) { ticks.reverse(); }
7246
7247           return ticks;
7248         }
7249
7250         function tickIncrement(start, stop, count) {
7251           var step = (stop - start) / Math.max(0, count),
7252               power = Math.floor(Math.log(step) / Math.LN10),
7253               error = step / Math.pow(10, power);
7254           return power >= 0
7255               ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
7256               : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
7257         }
7258
7259         function tickStep(start, stop, count) {
7260           var step0 = Math.abs(stop - start) / Math.max(0, count),
7261               step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
7262               error = step0 / step1;
7263           if (error >= e10) { step1 *= 10; }
7264           else if (error >= e5) { step1 *= 5; }
7265           else if (error >= e2) { step1 *= 2; }
7266           return stop < start ? -step1 : step1;
7267         }
7268
7269         function thresholdSturges(values) {
7270           return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
7271         }
7272
7273         function histogram() {
7274           var value = identity,
7275               domain = extent,
7276               threshold = thresholdSturges;
7277
7278           function histogram(data) {
7279             var i,
7280                 n = data.length,
7281                 x,
7282                 values = new Array(n);
7283
7284             for (i = 0; i < n; ++i) {
7285               values[i] = value(data[i], i, data);
7286             }
7287
7288             var xz = domain(values),
7289                 x0 = xz[0],
7290                 x1 = xz[1],
7291                 tz = threshold(values, x0, x1);
7292
7293             // Convert number of thresholds into uniform thresholds.
7294             if (!Array.isArray(tz)) {
7295               tz = tickStep(x0, x1, tz);
7296               tz = d3_range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive
7297             }
7298
7299             // Remove any thresholds outside the domain.
7300             var m = tz.length;
7301             while (tz[0] <= x0) { tz.shift(), --m; }
7302             while (tz[m - 1] > x1) { tz.pop(), --m; }
7303
7304             var bins = new Array(m + 1),
7305                 bin;
7306
7307             // Initialize bins.
7308             for (i = 0; i <= m; ++i) {
7309               bin = bins[i] = [];
7310               bin.x0 = i > 0 ? tz[i - 1] : x0;
7311               bin.x1 = i < m ? tz[i] : x1;
7312             }
7313
7314             // Assign data to bins by value, ignoring any outside the domain.
7315             for (i = 0; i < n; ++i) {
7316               x = values[i];
7317               if (x0 <= x && x <= x1) {
7318                 bins[bisectRight(tz, x, 0, m)].push(data[i]);
7319               }
7320             }
7321
7322             return bins;
7323           }
7324
7325           histogram.value = function(_) {
7326             return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;
7327           };
7328
7329           histogram.domain = function(_) {
7330             return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;
7331           };
7332
7333           histogram.thresholds = function(_) {
7334             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice$4.call(_)) : constant(_), histogram) : threshold;
7335           };
7336
7337           return histogram;
7338         }
7339
7340         function threshold(values, p, valueof) {
7341           if (valueof == null) { valueof = number; }
7342           if (!(n = values.length)) { return; }
7343           if ((p = +p) <= 0 || n < 2) { return +valueof(values[0], 0, values); }
7344           if (p >= 1) { return +valueof(values[n - 1], n - 1, values); }
7345           var n,
7346               i = (n - 1) * p,
7347               i0 = Math.floor(i),
7348               value0 = +valueof(values[i0], i0, values),
7349               value1 = +valueof(values[i0 + 1], i0 + 1, values);
7350           return value0 + (value1 - value0) * (i - i0);
7351         }
7352
7353         function freedmanDiaconis(values, min, max) {
7354           values = map$2.call(values, number).sort(d3_ascending);
7355           return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
7356         }
7357
7358         function scott(values, min, max) {
7359           return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
7360         }
7361
7362         function max$2(values, valueof) {
7363           var n = values.length,
7364               i = -1,
7365               value,
7366               max;
7367
7368           if (valueof == null) {
7369             while (++i < n) { // Find the first comparable value.
7370               if ((value = values[i]) != null && value >= value) {
7371                 max = value;
7372                 while (++i < n) { // Compare the remaining values.
7373                   if ((value = values[i]) != null && value > max) {
7374                     max = value;
7375                   }
7376                 }
7377               }
7378             }
7379           }
7380
7381           else {
7382             while (++i < n) { // Find the first comparable value.
7383               if ((value = valueof(values[i], i, values)) != null && value >= value) {
7384                 max = value;
7385                 while (++i < n) { // Compare the remaining values.
7386                   if ((value = valueof(values[i], i, values)) != null && value > max) {
7387                     max = value;
7388                   }
7389                 }
7390               }
7391             }
7392           }
7393
7394           return max;
7395         }
7396
7397         function mean(values, valueof) {
7398           var n = values.length,
7399               m = n,
7400               i = -1,
7401               value,
7402               sum = 0;
7403
7404           if (valueof == null) {
7405             while (++i < n) {
7406               if (!isNaN(value = number(values[i]))) { sum += value; }
7407               else { --m; }
7408             }
7409           }
7410
7411           else {
7412             while (++i < n) {
7413               if (!isNaN(value = number(valueof(values[i], i, values)))) { sum += value; }
7414               else { --m; }
7415             }
7416           }
7417
7418           if (m) { return sum / m; }
7419         }
7420
7421         function d3_median(values, valueof) {
7422           var n = values.length,
7423               i = -1,
7424               value,
7425               numbers = [];
7426
7427           if (valueof == null) {
7428             while (++i < n) {
7429               if (!isNaN(value = number(values[i]))) {
7430                 numbers.push(value);
7431               }
7432             }
7433           }
7434
7435           else {
7436             while (++i < n) {
7437               if (!isNaN(value = number(valueof(values[i], i, values)))) {
7438                 numbers.push(value);
7439               }
7440             }
7441           }
7442
7443           return threshold(numbers.sort(d3_ascending), 0.5);
7444         }
7445
7446         function merge(arrays) {
7447           var n = arrays.length,
7448               m,
7449               i = -1,
7450               j = 0,
7451               merged,
7452               array;
7453
7454           while (++i < n) { j += arrays[i].length; }
7455           merged = new Array(j);
7456
7457           while (--n >= 0) {
7458             array = arrays[n];
7459             m = array.length;
7460             while (--m >= 0) {
7461               merged[--j] = array[m];
7462             }
7463           }
7464
7465           return merged;
7466         }
7467
7468         function min(values, valueof) {
7469           var n = values.length,
7470               i = -1,
7471               value,
7472               min;
7473
7474           if (valueof == null) {
7475             while (++i < n) { // Find the first comparable value.
7476               if ((value = values[i]) != null && value >= value) {
7477                 min = value;
7478                 while (++i < n) { // Compare the remaining values.
7479                   if ((value = values[i]) != null && min > value) {
7480                     min = value;
7481                   }
7482                 }
7483               }
7484             }
7485           }
7486
7487           else {
7488             while (++i < n) { // Find the first comparable value.
7489               if ((value = valueof(values[i], i, values)) != null && value >= value) {
7490                 min = value;
7491                 while (++i < n) { // Compare the remaining values.
7492                   if ((value = valueof(values[i], i, values)) != null && min > value) {
7493                     min = value;
7494                   }
7495                 }
7496               }
7497             }
7498           }
7499
7500           return min;
7501         }
7502
7503         function permute(array, indexes) {
7504           var i = indexes.length, permutes = new Array(i);
7505           while (i--) { permutes[i] = array[indexes[i]]; }
7506           return permutes;
7507         }
7508
7509         function scan(values, compare) {
7510           if (!(n = values.length)) { return; }
7511           var n,
7512               i = 0,
7513               j = 0,
7514               xi,
7515               xj = values[j];
7516
7517           if (compare == null) { compare = d3_ascending; }
7518
7519           while (++i < n) {
7520             if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {
7521               xj = xi, j = i;
7522             }
7523           }
7524
7525           if (compare(xj, xj) === 0) { return j; }
7526         }
7527
7528         function shuffle(array, i0, i1) {
7529           var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
7530               t,
7531               i;
7532
7533           while (m) {
7534             i = Math.random() * m-- | 0;
7535             t = array[m + i0];
7536             array[m + i0] = array[i + i0];
7537             array[i + i0] = t;
7538           }
7539
7540           return array;
7541         }
7542
7543         function sum(values, valueof) {
7544           var n = values.length,
7545               i = -1,
7546               value,
7547               sum = 0;
7548
7549           if (valueof == null) {
7550             while (++i < n) {
7551               if (value = +values[i]) { sum += value; } // Note: zero and null are equivalent.
7552             }
7553           }
7554
7555           else {
7556             while (++i < n) {
7557               if (value = +valueof(values[i], i, values)) { sum += value; }
7558             }
7559           }
7560
7561           return sum;
7562         }
7563
7564         function transpose(matrix) {
7565           if (!(n = matrix.length)) { return []; }
7566           for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
7567             for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
7568               row[j] = matrix[j][i];
7569             }
7570           }
7571           return transpose;
7572         }
7573
7574         function length(d) {
7575           return d.length;
7576         }
7577
7578         function zip() {
7579           return transpose(arguments);
7580         }
7581
7582         var slice$5 = Array.prototype.slice;
7583
7584         function identity$1(x) {
7585           return x;
7586         }
7587
7588         var top = 1,
7589             right = 2,
7590             bottom = 3,
7591             left = 4,
7592             epsilon = 1e-6;
7593
7594         function translateX(x) {
7595           return "translate(" + (x + 0.5) + ",0)";
7596         }
7597
7598         function translateY(y) {
7599           return "translate(0," + (y + 0.5) + ")";
7600         }
7601
7602         function number$1(scale) {
7603           return function(d) {
7604             return +scale(d);
7605           };
7606         }
7607
7608         function center(scale) {
7609           var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.
7610           if (scale.round()) { offset = Math.round(offset); }
7611           return function(d) {
7612             return +scale(d) + offset;
7613           };
7614         }
7615
7616         function entering() {
7617           return !this.__axis;
7618         }
7619
7620         function axis(orient, scale) {
7621           var tickArguments = [],
7622               tickValues = null,
7623               tickFormat = null,
7624               tickSizeInner = 6,
7625               tickSizeOuter = 6,
7626               tickPadding = 3,
7627               k = orient === top || orient === left ? -1 : 1,
7628               x = orient === left || orient === right ? "x" : "y",
7629               transform = orient === top || orient === bottom ? translateX : translateY;
7630
7631           function axis(context) {
7632             var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
7633                 format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat,
7634                 spacing = Math.max(tickSizeInner, 0) + tickPadding,
7635                 range = scale.range(),
7636                 range0 = +range[0] + 0.5,
7637                 range1 = +range[range.length - 1] + 0.5,
7638                 position = (scale.bandwidth ? center : number$1)(scale.copy()),
7639                 selection = context.selection ? context.selection() : context,
7640                 path = selection.selectAll(".domain").data([null]),
7641                 tick = selection.selectAll(".tick").data(values, scale).order(),
7642                 tickExit = tick.exit(),
7643                 tickEnter = tick.enter().append("g").attr("class", "tick"),
7644                 line = tick.select("line"),
7645                 text = tick.select("text");
7646
7647             path = path.merge(path.enter().insert("path", ".tick")
7648                 .attr("class", "domain")
7649                 .attr("stroke", "currentColor"));
7650
7651             tick = tick.merge(tickEnter);
7652
7653             line = line.merge(tickEnter.append("line")
7654                 .attr("stroke", "currentColor")
7655                 .attr(x + "2", k * tickSizeInner));
7656
7657             text = text.merge(tickEnter.append("text")
7658                 .attr("fill", "currentColor")
7659                 .attr(x, k * spacing)
7660                 .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
7661
7662             if (context !== selection) {
7663               path = path.transition(context);
7664               tick = tick.transition(context);
7665               line = line.transition(context);
7666               text = text.transition(context);
7667
7668               tickExit = tickExit.transition(context)
7669                   .attr("opacity", epsilon)
7670                   .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); });
7671
7672               tickEnter
7673                   .attr("opacity", epsilon)
7674                   .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });
7675             }
7676
7677             tickExit.remove();
7678
7679             path
7680                 .attr("d", orient === left || orient == right
7681                     ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter : "M0.5," + range0 + "V" + range1)
7682                     : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + ",0.5H" + range1));
7683
7684             tick
7685                 .attr("opacity", 1)
7686                 .attr("transform", function(d) { return transform(position(d)); });
7687
7688             line
7689                 .attr(x + "2", k * tickSizeInner);
7690
7691             text
7692                 .attr(x, k * spacing)
7693                 .text(format);
7694
7695             selection.filter(entering)
7696                 .attr("fill", "none")
7697                 .attr("font-size", 10)
7698                 .attr("font-family", "sans-serif")
7699                 .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
7700
7701             selection
7702                 .each(function() { this.__axis = position; });
7703           }
7704
7705           axis.scale = function(_) {
7706             return arguments.length ? (scale = _, axis) : scale;
7707           };
7708
7709           axis.ticks = function() {
7710             return tickArguments = slice$5.call(arguments), axis;
7711           };
7712
7713           axis.tickArguments = function(_) {
7714             return arguments.length ? (tickArguments = _ == null ? [] : slice$5.call(_), axis) : tickArguments.slice();
7715           };
7716
7717           axis.tickValues = function(_) {
7718             return arguments.length ? (tickValues = _ == null ? null : slice$5.call(_), axis) : tickValues && tickValues.slice();
7719           };
7720
7721           axis.tickFormat = function(_) {
7722             return arguments.length ? (tickFormat = _, axis) : tickFormat;
7723           };
7724
7725           axis.tickSize = function(_) {
7726             return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
7727           };
7728
7729           axis.tickSizeInner = function(_) {
7730             return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
7731           };
7732
7733           axis.tickSizeOuter = function(_) {
7734             return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
7735           };
7736
7737           axis.tickPadding = function(_) {
7738             return arguments.length ? (tickPadding = +_, axis) : tickPadding;
7739           };
7740
7741           return axis;
7742         }
7743
7744         function axisTop(scale) {
7745           return axis(top, scale);
7746         }
7747
7748         function axisRight(scale) {
7749           return axis(right, scale);
7750         }
7751
7752         function axisBottom(scale) {
7753           return axis(bottom, scale);
7754         }
7755
7756         function axisLeft(scale) {
7757           return axis(left, scale);
7758         }
7759
7760         var noop$2 = {value: function() {}};
7761
7762         function dispatch() {
7763           var arguments$1 = arguments;
7764
7765           for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
7766             if (!(t = arguments$1[i] + "") || (t in _) || /[\s.]/.test(t)) { throw new Error("illegal type: " + t); }
7767             _[t] = [];
7768           }
7769           return new Dispatch(_);
7770         }
7771
7772         function Dispatch(_) {
7773           this._ = _;
7774         }
7775
7776         function parseTypenames(typenames, types) {
7777           return typenames.trim().split(/^|\s+/).map(function(t) {
7778             var name = "", i = t.indexOf(".");
7779             if (i >= 0) { name = t.slice(i + 1), t = t.slice(0, i); }
7780             if (t && !types.hasOwnProperty(t)) { throw new Error("unknown type: " + t); }
7781             return {type: t, name: name};
7782           });
7783         }
7784
7785         Dispatch.prototype = dispatch.prototype = {
7786           constructor: Dispatch,
7787           on: function(typename, callback) {
7788             var _ = this._,
7789                 T = parseTypenames(typename + "", _),
7790                 t,
7791                 i = -1,
7792                 n = T.length;
7793
7794             // If no callback was specified, return the callback of the given type and name.
7795             if (arguments.length < 2) {
7796               while (++i < n) { if ((t = (typename = T[i]).type) && (t = get$1(_[t], typename.name))) { return t; } }
7797               return;
7798             }
7799
7800             // If a type was specified, set the callback for the given type and name.
7801             // Otherwise, if a null callback was specified, remove callbacks of the given name.
7802             if (callback != null && typeof callback !== "function") { throw new Error("invalid callback: " + callback); }
7803             while (++i < n) {
7804               if (t = (typename = T[i]).type) { _[t] = set(_[t], typename.name, callback); }
7805               else if (callback == null) { for (t in _) { _[t] = set(_[t], typename.name, null); } }
7806             }
7807
7808             return this;
7809           },
7810           copy: function() {
7811             var copy = {}, _ = this._;
7812             for (var t in _) { copy[t] = _[t].slice(); }
7813             return new Dispatch(copy);
7814           },
7815           call: function(type, that) {
7816             var arguments$1 = arguments;
7817
7818             if ((n = arguments.length - 2) > 0) { for (var args = new Array(n), i = 0, n, t; i < n; ++i) { args[i] = arguments$1[i + 2]; } }
7819             if (!this._.hasOwnProperty(type)) { throw new Error("unknown type: " + type); }
7820             for (t = this._[type], i = 0, n = t.length; i < n; ++i) { t[i].value.apply(that, args); }
7821           },
7822           apply: function(type, that, args) {
7823             if (!this._.hasOwnProperty(type)) { throw new Error("unknown type: " + type); }
7824             for (var t = this._[type], i = 0, n = t.length; i < n; ++i) { t[i].value.apply(that, args); }
7825           }
7826         };
7827
7828         function get$1(type, name) {
7829           for (var i = 0, n = type.length, c; i < n; ++i) {
7830             if ((c = type[i]).name === name) {
7831               return c.value;
7832             }
7833           }
7834         }
7835
7836         function set(type, name, callback) {
7837           for (var i = 0, n = type.length; i < n; ++i) {
7838             if (type[i].name === name) {
7839               type[i] = noop$2, type = type.slice(0, i).concat(type.slice(i + 1));
7840               break;
7841             }
7842           }
7843           if (callback != null) { type.push({name: name, value: callback}); }
7844           return type;
7845         }
7846
7847         var xhtml = "http://www.w3.org/1999/xhtml";
7848
7849         var namespaces = {
7850           svg: "http://www.w3.org/2000/svg",
7851           xhtml: xhtml,
7852           xlink: "http://www.w3.org/1999/xlink",
7853           xml: "http://www.w3.org/XML/1998/namespace",
7854           xmlns: "http://www.w3.org/2000/xmlns/"
7855         };
7856
7857         function namespace(name) {
7858           var prefix = name += "", i = prefix.indexOf(":");
7859           if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") { name = name.slice(i + 1); }
7860           return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
7861         }
7862
7863         function creatorInherit(name) {
7864           return function() {
7865             var document = this.ownerDocument,
7866                 uri = this.namespaceURI;
7867             return uri === xhtml && document.documentElement.namespaceURI === xhtml
7868                 ? document.createElement(name)
7869                 : document.createElementNS(uri, name);
7870           };
7871         }
7872
7873         function creatorFixed(fullname) {
7874           return function() {
7875             return this.ownerDocument.createElementNS(fullname.space, fullname.local);
7876           };
7877         }
7878
7879         function creator(name) {
7880           var fullname = namespace(name);
7881           return (fullname.local
7882               ? creatorFixed
7883               : creatorInherit)(fullname);
7884         }
7885
7886         function none() {}
7887
7888         function selector(selector) {
7889           return selector == null ? none : function() {
7890             return this.querySelector(selector);
7891           };
7892         }
7893
7894         function selection_select(select) {
7895           if (typeof select !== "function") { select = selector(select); }
7896
7897           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
7898             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
7899               if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
7900                 if ("__data__" in node) { subnode.__data__ = node.__data__; }
7901                 subgroup[i] = subnode;
7902               }
7903             }
7904           }
7905
7906           return new Selection(subgroups, this._parents);
7907         }
7908
7909         function empty() {
7910           return [];
7911         }
7912
7913         function selectorAll(selector) {
7914           return selector == null ? empty : function() {
7915             return this.querySelectorAll(selector);
7916           };
7917         }
7918
7919         function selection_selectAll(select) {
7920           if (typeof select !== "function") { select = selectorAll(select); }
7921
7922           for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
7923             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
7924               if (node = group[i]) {
7925                 subgroups.push(select.call(node, node.__data__, i, group));
7926                 parents.push(node);
7927               }
7928             }
7929           }
7930
7931           return new Selection(subgroups, parents);
7932         }
7933
7934         function matcher(selector) {
7935           return function() {
7936             return this.matches(selector);
7937           };
7938         }
7939
7940         function selection_filter(match) {
7941           if (typeof match !== "function") { match = matcher(match); }
7942
7943           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
7944             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
7945               if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
7946                 subgroup.push(node);
7947               }
7948             }
7949           }
7950
7951           return new Selection(subgroups, this._parents);
7952         }
7953
7954         function sparse(update) {
7955           return new Array(update.length);
7956         }
7957
7958         function selection_enter() {
7959           return new Selection(this._enter || this._groups.map(sparse), this._parents);
7960         }
7961
7962         function EnterNode(parent, datum) {
7963           this.ownerDocument = parent.ownerDocument;
7964           this.namespaceURI = parent.namespaceURI;
7965           this._next = null;
7966           this._parent = parent;
7967           this.__data__ = datum;
7968         }
7969
7970         EnterNode.prototype = {
7971           constructor: EnterNode,
7972           appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
7973           insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
7974           querySelector: function(selector) { return this._parent.querySelector(selector); },
7975           querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
7976         };
7977
7978         function constant$1(x) {
7979           return function() {
7980             return x;
7981           };
7982         }
7983
7984         var keyPrefix = "$"; // Protect against keys like “__proto__”.
7985
7986         function bindIndex(parent, group, enter, update, exit, data) {
7987           var i = 0,
7988               node,
7989               groupLength = group.length,
7990               dataLength = data.length;
7991
7992           // Put any non-null nodes that fit into update.
7993           // Put any null nodes into enter.
7994           // Put any remaining data into enter.
7995           for (; i < dataLength; ++i) {
7996             if (node = group[i]) {
7997               node.__data__ = data[i];
7998               update[i] = node;
7999             } else {
8000               enter[i] = new EnterNode(parent, data[i]);
8001             }
8002           }
8003
8004           // Put any non-null nodes that don’t fit into exit.
8005           for (; i < groupLength; ++i) {
8006             if (node = group[i]) {
8007               exit[i] = node;
8008             }
8009           }
8010         }
8011
8012         function bindKey(parent, group, enter, update, exit, data, key) {
8013           var i,
8014               node,
8015               nodeByKeyValue = {},
8016               groupLength = group.length,
8017               dataLength = data.length,
8018               keyValues = new Array(groupLength),
8019               keyValue;
8020
8021           // Compute the key for each node.
8022           // If multiple nodes have the same key, the duplicates are added to exit.
8023           for (i = 0; i < groupLength; ++i) {
8024             if (node = group[i]) {
8025               keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
8026               if (keyValue in nodeByKeyValue) {
8027                 exit[i] = node;
8028               } else {
8029                 nodeByKeyValue[keyValue] = node;
8030               }
8031             }
8032           }
8033
8034           // Compute the key for each datum.
8035           // If there a node associated with this key, join and add it to update.
8036           // If there is not (or the key is a duplicate), add it to enter.
8037           for (i = 0; i < dataLength; ++i) {
8038             keyValue = keyPrefix + key.call(parent, data[i], i, data);
8039             if (node = nodeByKeyValue[keyValue]) {
8040               update[i] = node;
8041               node.__data__ = data[i];
8042               nodeByKeyValue[keyValue] = null;
8043             } else {
8044               enter[i] = new EnterNode(parent, data[i]);
8045             }
8046           }
8047
8048           // Add any remaining nodes that were not bound to data to exit.
8049           for (i = 0; i < groupLength; ++i) {
8050             if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
8051               exit[i] = node;
8052             }
8053           }
8054         }
8055
8056         function selection_data(value, key) {
8057           if (!value) {
8058             data = new Array(this.size()), j = -1;
8059             this.each(function(d) { data[++j] = d; });
8060             return data;
8061           }
8062
8063           var bind = key ? bindKey : bindIndex,
8064               parents = this._parents,
8065               groups = this._groups;
8066
8067           if (typeof value !== "function") { value = constant$1(value); }
8068
8069           for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
8070             var parent = parents[j],
8071                 group = groups[j],
8072                 groupLength = group.length,
8073                 data = value.call(parent, parent && parent.__data__, j, parents),
8074                 dataLength = data.length,
8075                 enterGroup = enter[j] = new Array(dataLength),
8076                 updateGroup = update[j] = new Array(dataLength),
8077                 exitGroup = exit[j] = new Array(groupLength);
8078
8079             bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
8080
8081             // Now connect the enter nodes to their following update node, such that
8082             // appendChild can insert the materialized enter node before this node,
8083             // rather than at the end of the parent node.
8084             for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
8085               if (previous = enterGroup[i0]) {
8086                 if (i0 >= i1) { i1 = i0 + 1; }
8087                 while (!(next = updateGroup[i1]) && ++i1 < dataLength){ }
8088                 previous._next = next || null;
8089               }
8090             }
8091           }
8092
8093           update = new Selection(update, parents);
8094           update._enter = enter;
8095           update._exit = exit;
8096           return update;
8097         }
8098
8099         function selection_exit() {
8100           return new Selection(this._exit || this._groups.map(sparse), this._parents);
8101         }
8102
8103         function selection_join(onenter, onupdate, onexit) {
8104           var enter = this.enter(), update = this, exit = this.exit();
8105           enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + "");
8106           if (onupdate != null) { update = onupdate(update); }
8107           if (onexit == null) { exit.remove(); } else { onexit(exit); }
8108           return enter && update ? enter.merge(update).order() : update;
8109         }
8110
8111         function selection_merge(selection) {
8112
8113           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) {
8114             for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
8115               if (node = group0[i] || group1[i]) {
8116                 merge[i] = node;
8117               }
8118             }
8119           }
8120
8121           for (; j < m0; ++j) {
8122             merges[j] = groups0[j];
8123           }
8124
8125           return new Selection(merges, this._parents);
8126         }
8127
8128         function selection_order() {
8129
8130           for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
8131             for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
8132               if (node = group[i]) {
8133                 if (next && node.compareDocumentPosition(next) ^ 4) { next.parentNode.insertBefore(node, next); }
8134                 next = node;
8135               }
8136             }
8137           }
8138
8139           return this;
8140         }
8141
8142         function selection_sort(compare) {
8143           if (!compare) { compare = ascending; }
8144
8145           function compareNode(a, b) {
8146             return a && b ? compare(a.__data__, b.__data__) : !a - !b;
8147           }
8148
8149           for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
8150             for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
8151               if (node = group[i]) {
8152                 sortgroup[i] = node;
8153               }
8154             }
8155             sortgroup.sort(compareNode);
8156           }
8157
8158           return new Selection(sortgroups, this._parents).order();
8159         }
8160
8161         function ascending(a, b) {
8162           return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
8163         }
8164
8165         function selection_call() {
8166           var callback = arguments[0];
8167           arguments[0] = this;
8168           callback.apply(null, arguments);
8169           return this;
8170         }
8171
8172         function selection_nodes() {
8173           var nodes = new Array(this.size()), i = -1;
8174           this.each(function() { nodes[++i] = this; });
8175           return nodes;
8176         }
8177
8178         function selection_node() {
8179
8180           for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
8181             for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
8182               var node = group[i];
8183               if (node) { return node; }
8184             }
8185           }
8186
8187           return null;
8188         }
8189
8190         function selection_size() {
8191           var size = 0;
8192           this.each(function() { ++size; });
8193           return size;
8194         }
8195
8196         function selection_empty() {
8197           return !this.node();
8198         }
8199
8200         function selection_each(callback) {
8201
8202           for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
8203             for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
8204               if (node = group[i]) { callback.call(node, node.__data__, i, group); }
8205             }
8206           }
8207
8208           return this;
8209         }
8210
8211         function attrRemove(name) {
8212           return function() {
8213             this.removeAttribute(name);
8214           };
8215         }
8216
8217         function attrRemoveNS(fullname) {
8218           return function() {
8219             this.removeAttributeNS(fullname.space, fullname.local);
8220           };
8221         }
8222
8223         function attrConstant(name, value) {
8224           return function() {
8225             this.setAttribute(name, value);
8226           };
8227         }
8228
8229         function attrConstantNS(fullname, value) {
8230           return function() {
8231             this.setAttributeNS(fullname.space, fullname.local, value);
8232           };
8233         }
8234
8235         function attrFunction(name, value) {
8236           return function() {
8237             var v = value.apply(this, arguments);
8238             if (v == null) { this.removeAttribute(name); }
8239             else { this.setAttribute(name, v); }
8240           };
8241         }
8242
8243         function attrFunctionNS(fullname, value) {
8244           return function() {
8245             var v = value.apply(this, arguments);
8246             if (v == null) { this.removeAttributeNS(fullname.space, fullname.local); }
8247             else { this.setAttributeNS(fullname.space, fullname.local, v); }
8248           };
8249         }
8250
8251         function selection_attr(name, value) {
8252           var fullname = namespace(name);
8253
8254           if (arguments.length < 2) {
8255             var node = this.node();
8256             return fullname.local
8257                 ? node.getAttributeNS(fullname.space, fullname.local)
8258                 : node.getAttribute(fullname);
8259           }
8260
8261           return this.each((value == null
8262               ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
8263               ? (fullname.local ? attrFunctionNS : attrFunction)
8264               : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
8265         }
8266
8267         function defaultView(node) {
8268           return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
8269               || (node.document && node) // node is a Window
8270               || node.defaultView; // node is a Document
8271         }
8272
8273         function styleRemove(name) {
8274           return function() {
8275             this.style.removeProperty(name);
8276           };
8277         }
8278
8279         function styleConstant(name, value, priority) {
8280           return function() {
8281             this.style.setProperty(name, value, priority);
8282           };
8283         }
8284
8285         function styleFunction(name, value, priority) {
8286           return function() {
8287             var v = value.apply(this, arguments);
8288             if (v == null) { this.style.removeProperty(name); }
8289             else { this.style.setProperty(name, v, priority); }
8290           };
8291         }
8292
8293         function selection_style(name, value, priority) {
8294           return arguments.length > 1
8295               ? this.each((value == null
8296                     ? styleRemove : typeof value === "function"
8297                     ? styleFunction
8298                     : styleConstant)(name, value, priority == null ? "" : priority))
8299               : styleValue(this.node(), name);
8300         }
8301
8302         function styleValue(node, name) {
8303           return node.style.getPropertyValue(name)
8304               || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);
8305         }
8306
8307         function propertyRemove(name) {
8308           return function() {
8309             delete this[name];
8310           };
8311         }
8312
8313         function propertyConstant(name, value) {
8314           return function() {
8315             this[name] = value;
8316           };
8317         }
8318
8319         function propertyFunction(name, value) {
8320           return function() {
8321             var v = value.apply(this, arguments);
8322             if (v == null) { delete this[name]; }
8323             else { this[name] = v; }
8324           };
8325         }
8326
8327         function selection_property(name, value) {
8328           return arguments.length > 1
8329               ? this.each((value == null
8330                   ? propertyRemove : typeof value === "function"
8331                   ? propertyFunction
8332                   : propertyConstant)(name, value))
8333               : this.node()[name];
8334         }
8335
8336         function classArray(string) {
8337           return string.trim().split(/^|\s+/);
8338         }
8339
8340         function classList(node) {
8341           return node.classList || new ClassList(node);
8342         }
8343
8344         function ClassList(node) {
8345           this._node = node;
8346           this._names = classArray(node.getAttribute("class") || "");
8347         }
8348
8349         ClassList.prototype = {
8350           add: function(name) {
8351             var i = this._names.indexOf(name);
8352             if (i < 0) {
8353               this._names.push(name);
8354               this._node.setAttribute("class", this._names.join(" "));
8355             }
8356           },
8357           remove: function(name) {
8358             var i = this._names.indexOf(name);
8359             if (i >= 0) {
8360               this._names.splice(i, 1);
8361               this._node.setAttribute("class", this._names.join(" "));
8362             }
8363           },
8364           contains: function(name) {
8365             return this._names.indexOf(name) >= 0;
8366           }
8367         };
8368
8369         function classedAdd(node, names) {
8370           var list = classList(node), i = -1, n = names.length;
8371           while (++i < n) { list.add(names[i]); }
8372         }
8373
8374         function classedRemove(node, names) {
8375           var list = classList(node), i = -1, n = names.length;
8376           while (++i < n) { list.remove(names[i]); }
8377         }
8378
8379         function classedTrue(names) {
8380           return function() {
8381             classedAdd(this, names);
8382           };
8383         }
8384
8385         function classedFalse(names) {
8386           return function() {
8387             classedRemove(this, names);
8388           };
8389         }
8390
8391         function classedFunction(names, value) {
8392           return function() {
8393             (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
8394           };
8395         }
8396
8397         function selection_classed(name, value) {
8398           var names = classArray(name + "");
8399
8400           if (arguments.length < 2) {
8401             var list = classList(this.node()), i = -1, n = names.length;
8402             while (++i < n) { if (!list.contains(names[i])) { return false; } }
8403             return true;
8404           }
8405
8406           return this.each((typeof value === "function"
8407               ? classedFunction : value
8408               ? classedTrue
8409               : classedFalse)(names, value));
8410         }
8411
8412         function textRemove() {
8413           this.textContent = "";
8414         }
8415
8416         function textConstant(value) {
8417           return function() {
8418             this.textContent = value;
8419           };
8420         }
8421
8422         function textFunction(value) {
8423           return function() {
8424             var v = value.apply(this, arguments);
8425             this.textContent = v == null ? "" : v;
8426           };
8427         }
8428
8429         function selection_text(value) {
8430           return arguments.length
8431               ? this.each(value == null
8432                   ? textRemove : (typeof value === "function"
8433                   ? textFunction
8434                   : textConstant)(value))
8435               : this.node().textContent;
8436         }
8437
8438         function htmlRemove() {
8439           this.innerHTML = "";
8440         }
8441
8442         function htmlConstant(value) {
8443           return function() {
8444             this.innerHTML = value;
8445           };
8446         }
8447
8448         function htmlFunction(value) {
8449           return function() {
8450             var v = value.apply(this, arguments);
8451             this.innerHTML = v == null ? "" : v;
8452           };
8453         }
8454
8455         function selection_html(value) {
8456           return arguments.length
8457               ? this.each(value == null
8458                   ? htmlRemove : (typeof value === "function"
8459                   ? htmlFunction
8460                   : htmlConstant)(value))
8461               : this.node().innerHTML;
8462         }
8463
8464         function raise() {
8465           if (this.nextSibling) { this.parentNode.appendChild(this); }
8466         }
8467
8468         function selection_raise() {
8469           return this.each(raise);
8470         }
8471
8472         function lower() {
8473           if (this.previousSibling) { this.parentNode.insertBefore(this, this.parentNode.firstChild); }
8474         }
8475
8476         function selection_lower() {
8477           return this.each(lower);
8478         }
8479
8480         function selection_append(name) {
8481           var create = typeof name === "function" ? name : creator(name);
8482           return this.select(function() {
8483             return this.appendChild(create.apply(this, arguments));
8484           });
8485         }
8486
8487         function constantNull() {
8488           return null;
8489         }
8490
8491         function selection_insert(name, before) {
8492           var create = typeof name === "function" ? name : creator(name),
8493               select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
8494           return this.select(function() {
8495             return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
8496           });
8497         }
8498
8499         function remove() {
8500           var parent = this.parentNode;
8501           if (parent) { parent.removeChild(this); }
8502         }
8503
8504         function selection_remove() {
8505           return this.each(remove);
8506         }
8507
8508         function selection_cloneShallow() {
8509           var clone = this.cloneNode(false), parent = this.parentNode;
8510           return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
8511         }
8512
8513         function selection_cloneDeep() {
8514           var clone = this.cloneNode(true), parent = this.parentNode;
8515           return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
8516         }
8517
8518         function selection_clone(deep) {
8519           return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
8520         }
8521
8522         function selection_datum(value) {
8523           return arguments.length
8524               ? this.property("__data__", value)
8525               : this.node().__data__;
8526         }
8527
8528         var filterEvents = {};
8529
8530         var event = null;
8531
8532         if (typeof document !== "undefined") {
8533           var element = document.documentElement;
8534           if (!("onmouseenter" in element)) {
8535             filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
8536           }
8537         }
8538
8539         function filterContextListener(listener, index, group) {
8540           listener = contextListener(listener, index, group);
8541           return function(event) {
8542             var related = event.relatedTarget;
8543             if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
8544               listener.call(this, event);
8545             }
8546           };
8547         }
8548
8549         function contextListener(listener, index, group) {
8550           return function(event1) {
8551             var event0 = event; // Events can be reentrant (e.g., focus).
8552             event = event1;
8553             try {
8554               listener.call(this, this.__data__, index, group);
8555             } finally {
8556               event = event0;
8557             }
8558           };
8559         }
8560
8561         function parseTypenames$1(typenames) {
8562           return typenames.trim().split(/^|\s+/).map(function(t) {
8563             var name = "", i = t.indexOf(".");
8564             if (i >= 0) { name = t.slice(i + 1), t = t.slice(0, i); }
8565             return {type: t, name: name};
8566           });
8567         }
8568
8569         function onRemove(typename) {
8570           return function() {
8571             var on = this.__on;
8572             if (!on) { return; }
8573             for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
8574               if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
8575                 this.removeEventListener(o.type, o.listener, o.capture);
8576               } else {
8577                 on[++i] = o;
8578               }
8579             }
8580             if (++i) { on.length = i; }
8581             else { delete this.__on; }
8582           };
8583         }
8584
8585         function onAdd(typename, value, capture) {
8586           var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
8587           return function(d, i, group) {
8588             var on = this.__on, o, listener = wrap(value, i, group);
8589             if (on) { for (var j = 0, m = on.length; j < m; ++j) {
8590               if ((o = on[j]).type === typename.type && o.name === typename.name) {
8591                 this.removeEventListener(o.type, o.listener, o.capture);
8592                 this.addEventListener(o.type, o.listener = listener, o.capture = capture);
8593                 o.value = value;
8594                 return;
8595               }
8596             } }
8597             this.addEventListener(typename.type, listener, capture);
8598             o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
8599             if (!on) { this.__on = [o]; }
8600             else { on.push(o); }
8601           };
8602         }
8603
8604         function selection_on(typename, value, capture) {
8605           var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
8606
8607           if (arguments.length < 2) {
8608             var on = this.node().__on;
8609             if (on) { for (var j = 0, m = on.length, o; j < m; ++j) {
8610               for (i = 0, o = on[j]; i < n; ++i) {
8611                 if ((t = typenames[i]).type === o.type && t.name === o.name) {
8612                   return o.value;
8613                 }
8614               }
8615             } }
8616             return;
8617           }
8618
8619           on = value ? onAdd : onRemove;
8620           if (capture == null) { capture = false; }
8621           for (i = 0; i < n; ++i) { this.each(on(typenames[i], value, capture)); }
8622           return this;
8623         }
8624
8625         function customEvent(event1, listener, that, args) {
8626           var event0 = event;
8627           event1.sourceEvent = event;
8628           event = event1;
8629           try {
8630             return listener.apply(that, args);
8631           } finally {
8632             event = event0;
8633           }
8634         }
8635
8636         function dispatchEvent(node, type, params) {
8637           var window = defaultView(node),
8638               event = window.CustomEvent;
8639
8640           if (typeof event === "function") {
8641             event = new event(type, params);
8642           } else {
8643             event = window.document.createEvent("Event");
8644             if (params) { event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; }
8645             else { event.initEvent(type, false, false); }
8646           }
8647
8648           node.dispatchEvent(event);
8649         }
8650
8651         function dispatchConstant(type, params) {
8652           return function() {
8653             return dispatchEvent(this, type, params);
8654           };
8655         }
8656
8657         function dispatchFunction(type, params) {
8658           return function() {
8659             return dispatchEvent(this, type, params.apply(this, arguments));
8660           };
8661         }
8662
8663         function selection_dispatch(type, params) {
8664           return this.each((typeof params === "function"
8665               ? dispatchFunction
8666               : dispatchConstant)(type, params));
8667         }
8668
8669         var root$1 = [null];
8670
8671         function Selection(groups, parents) {
8672           this._groups = groups;
8673           this._parents = parents;
8674         }
8675
8676         function selection() {
8677           return new Selection([[document.documentElement]], root$1);
8678         }
8679
8680         Selection.prototype = selection.prototype = {
8681           constructor: Selection,
8682           select: selection_select,
8683           selectAll: selection_selectAll,
8684           filter: selection_filter,
8685           data: selection_data,
8686           enter: selection_enter,
8687           exit: selection_exit,
8688           join: selection_join,
8689           merge: selection_merge,
8690           order: selection_order,
8691           sort: selection_sort,
8692           call: selection_call,
8693           nodes: selection_nodes,
8694           node: selection_node,
8695           size: selection_size,
8696           empty: selection_empty,
8697           each: selection_each,
8698           attr: selection_attr,
8699           style: selection_style,
8700           property: selection_property,
8701           classed: selection_classed,
8702           text: selection_text,
8703           html: selection_html,
8704           raise: selection_raise,
8705           lower: selection_lower,
8706           append: selection_append,
8707           insert: selection_insert,
8708           remove: selection_remove,
8709           clone: selection_clone,
8710           datum: selection_datum,
8711           on: selection_on,
8712           dispatch: selection_dispatch
8713         };
8714
8715         function d3_select(selector) {
8716           return typeof selector === "string"
8717               ? new Selection([[document.querySelector(selector)]], [document.documentElement])
8718               : new Selection([[selector]], root$1);
8719         }
8720
8721         function create$7(name) {
8722           return d3_select(creator(name).call(document.documentElement));
8723         }
8724
8725         var nextId = 0;
8726
8727         function local() {
8728           return new Local;
8729         }
8730
8731         function Local() {
8732           this._ = "@" + (++nextId).toString(36);
8733         }
8734
8735         Local.prototype = local.prototype = {
8736           constructor: Local,
8737           get: function(node) {
8738             var id = this._;
8739             while (!(id in node)) { if (!(node = node.parentNode)) { return; } }
8740             return node[id];
8741           },
8742           set: function(node, value) {
8743             return node[this._] = value;
8744           },
8745           remove: function(node) {
8746             return this._ in node && delete node[this._];
8747           },
8748           toString: function() {
8749             return this._;
8750           }
8751         };
8752
8753         function sourceEvent() {
8754           var current = event, source;
8755           while (source = current.sourceEvent) { current = source; }
8756           return current;
8757         }
8758
8759         function point(node, event) {
8760           var svg = node.ownerSVGElement || node;
8761
8762           if (svg.createSVGPoint) {
8763             var point = svg.createSVGPoint();
8764             point.x = event.clientX, point.y = event.clientY;
8765             point = point.matrixTransform(node.getScreenCTM().inverse());
8766             return [point.x, point.y];
8767           }
8768
8769           var rect = node.getBoundingClientRect();
8770           return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
8771         }
8772
8773         function d3_mouse(node) {
8774           var event = sourceEvent();
8775           if (event.changedTouches) { event = event.changedTouches[0]; }
8776           return point(node, event);
8777         }
8778
8779         function d3_selectAll(selector) {
8780           return typeof selector === "string"
8781               ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
8782               : new Selection([selector == null ? [] : selector], root$1);
8783         }
8784
8785         function touch(node, touches, identifier) {
8786           if (arguments.length < 3) { identifier = touches, touches = sourceEvent().changedTouches; }
8787
8788           for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
8789             if ((touch = touches[i]).identifier === identifier) {
8790               return point(node, touch);
8791             }
8792           }
8793
8794           return null;
8795         }
8796
8797         function d3_touches(node, touches) {
8798           if (touches == null) { touches = sourceEvent().touches; }
8799
8800           for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
8801             points[i] = point(node, touches[i]);
8802           }
8803
8804           return points;
8805         }
8806
8807         function nopropagation() {
8808           event.stopImmediatePropagation();
8809         }
8810
8811         function noevent() {
8812           event.preventDefault();
8813           event.stopImmediatePropagation();
8814         }
8815
8816         function dragDisable(view) {
8817           var root = view.document.documentElement,
8818               selection = d3_select(view).on("dragstart.drag", noevent, true);
8819           if ("onselectstart" in root) {
8820             selection.on("selectstart.drag", noevent, true);
8821           } else {
8822             root.__noselect = root.style.MozUserSelect;
8823             root.style.MozUserSelect = "none";
8824           }
8825         }
8826
8827         function yesdrag(view, noclick) {
8828           var root = view.document.documentElement,
8829               selection = d3_select(view).on("dragstart.drag", null);
8830           if (noclick) {
8831             selection.on("click.drag", noevent, true);
8832             setTimeout(function() { selection.on("click.drag", null); }, 0);
8833           }
8834           if ("onselectstart" in root) {
8835             selection.on("selectstart.drag", null);
8836           } else {
8837             root.style.MozUserSelect = root.__noselect;
8838             delete root.__noselect;
8839           }
8840         }
8841
8842         function constant$2(x) {
8843           return function() {
8844             return x;
8845           };
8846         }
8847
8848         function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
8849           this.target = target;
8850           this.type = type;
8851           this.subject = subject;
8852           this.identifier = id;
8853           this.active = active;
8854           this.x = x;
8855           this.y = y;
8856           this.dx = dx;
8857           this.dy = dy;
8858           this._ = dispatch;
8859         }
8860
8861         DragEvent.prototype.on = function() {
8862           var value = this._.on.apply(this._, arguments);
8863           return value === this._ ? this : value;
8864         };
8865
8866         // Ignore right-click, since that should open the context menu.
8867         function defaultFilter() {
8868           return !event.ctrlKey && !event.button;
8869         }
8870
8871         function defaultContainer() {
8872           return this.parentNode;
8873         }
8874
8875         function defaultSubject(d) {
8876           return d == null ? {x: event.x, y: event.y} : d;
8877         }
8878
8879         function defaultTouchable() {
8880           return navigator.maxTouchPoints || ("ontouchstart" in this);
8881         }
8882
8883         function d3_drag() {
8884           var filter = defaultFilter,
8885               container = defaultContainer,
8886               subject = defaultSubject,
8887               touchable = defaultTouchable,
8888               gestures = {},
8889               listeners = dispatch("start", "drag", "end"),
8890               active = 0,
8891               mousedownx,
8892               mousedowny,
8893               mousemoving,
8894               touchending,
8895               clickDistance2 = 0;
8896
8897           function drag(selection) {
8898             selection
8899                 .on("mousedown.drag", mousedowned)
8900               .filter(touchable)
8901                 .on("touchstart.drag", touchstarted)
8902                 .on("touchmove.drag", touchmoved)
8903                 .on("touchend.drag touchcancel.drag", touchended)
8904                 .style("touch-action", "none")
8905                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
8906           }
8907
8908           function mousedowned() {
8909             if (touchending || !filter.apply(this, arguments)) { return; }
8910             var gesture = beforestart("mouse", container.apply(this, arguments), d3_mouse, this, arguments);
8911             if (!gesture) { return; }
8912             d3_select(event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
8913             dragDisable(event.view);
8914             nopropagation();
8915             mousemoving = false;
8916             mousedownx = event.clientX;
8917             mousedowny = event.clientY;
8918             gesture("start");
8919           }
8920
8921           function mousemoved() {
8922             noevent();
8923             if (!mousemoving) {
8924               var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;
8925               mousemoving = dx * dx + dy * dy > clickDistance2;
8926             }
8927             gestures.mouse("drag");
8928           }
8929
8930           function mouseupped() {
8931             d3_select(event.view).on("mousemove.drag mouseup.drag", null);
8932             yesdrag(event.view, mousemoving);
8933             noevent();
8934             gestures.mouse("end");
8935           }
8936
8937           function touchstarted() {
8938             var arguments$1 = arguments;
8939
8940             if (!filter.apply(this, arguments)) { return; }
8941             var touches = event.changedTouches,
8942                 c = container.apply(this, arguments),
8943                 n = touches.length, i, gesture;
8944
8945             for (i = 0; i < n; ++i) {
8946               if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments$1)) {
8947                 nopropagation();
8948                 gesture("start");
8949               }
8950             }
8951           }
8952
8953           function touchmoved() {
8954             var touches = event.changedTouches,
8955                 n = touches.length, i, gesture;
8956
8957             for (i = 0; i < n; ++i) {
8958               if (gesture = gestures[touches[i].identifier]) {
8959                 noevent();
8960                 gesture("drag");
8961               }
8962             }
8963           }
8964
8965           function touchended() {
8966             var touches = event.changedTouches,
8967                 n = touches.length, i, gesture;
8968
8969             if (touchending) { clearTimeout(touchending); }
8970             touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
8971             for (i = 0; i < n; ++i) {
8972               if (gesture = gestures[touches[i].identifier]) {
8973                 nopropagation();
8974                 gesture("end");
8975               }
8976             }
8977           }
8978
8979           function beforestart(id, container, point, that, args) {
8980             var p = point(container, id), s, dx, dy,
8981                 sublisteners = listeners.copy();
8982
8983             if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
8984               if ((event.subject = s = subject.apply(that, args)) == null) { return false; }
8985               dx = s.x - p[0] || 0;
8986               dy = s.y - p[1] || 0;
8987               return true;
8988             })) { return; }
8989
8990             return function gesture(type) {
8991               var p0 = p, n;
8992               switch (type) {
8993                 case "start": gestures[id] = gesture, n = active++; break;
8994                 case "end": delete gestures[id], --active; // nobreak
8995                 case "drag": p = point(container, id), n = active; break;
8996               }
8997               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]);
8998             };
8999           }
9000
9001           drag.filter = function(_) {
9002             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), drag) : filter;
9003           };
9004
9005           drag.container = function(_) {
9006             return arguments.length ? (container = typeof _ === "function" ? _ : constant$2(_), drag) : container;
9007           };
9008
9009           drag.subject = function(_) {
9010             return arguments.length ? (subject = typeof _ === "function" ? _ : constant$2(_), drag) : subject;
9011           };
9012
9013           drag.touchable = function(_) {
9014             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$2(!!_), drag) : touchable;
9015           };
9016
9017           drag.on = function() {
9018             var value = listeners.on.apply(listeners, arguments);
9019             return value === listeners ? drag : value;
9020           };
9021
9022           drag.clickDistance = function(_) {
9023             return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);
9024           };
9025
9026           return drag;
9027         }
9028
9029         function define$1(constructor, factory, prototype) {
9030           constructor.prototype = factory.prototype = prototype;
9031           prototype.constructor = constructor;
9032         }
9033
9034         function extend(parent, definition) {
9035           var prototype = Object.create(parent.prototype);
9036           for (var key in definition) { prototype[key] = definition[key]; }
9037           return prototype;
9038         }
9039
9040         function Color() {}
9041
9042         var darker = 0.7;
9043         var brighter = 1 / darker;
9044
9045         var reI = "\\s*([+-]?\\d+)\\s*",
9046             reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
9047             reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
9048             reHex = /^#([0-9a-f]{3,8})$/,
9049             reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"),
9050             reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"),
9051             reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"),
9052             reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"),
9053             reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"),
9054             reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$");
9055
9056         var named = {
9057           aliceblue: 0xf0f8ff,
9058           antiquewhite: 0xfaebd7,
9059           aqua: 0x00ffff,
9060           aquamarine: 0x7fffd4,
9061           azure: 0xf0ffff,
9062           beige: 0xf5f5dc,
9063           bisque: 0xffe4c4,
9064           black: 0x000000,
9065           blanchedalmond: 0xffebcd,
9066           blue: 0x0000ff,
9067           blueviolet: 0x8a2be2,
9068           brown: 0xa52a2a,
9069           burlywood: 0xdeb887,
9070           cadetblue: 0x5f9ea0,
9071           chartreuse: 0x7fff00,
9072           chocolate: 0xd2691e,
9073           coral: 0xff7f50,
9074           cornflowerblue: 0x6495ed,
9075           cornsilk: 0xfff8dc,
9076           crimson: 0xdc143c,
9077           cyan: 0x00ffff,
9078           darkblue: 0x00008b,
9079           darkcyan: 0x008b8b,
9080           darkgoldenrod: 0xb8860b,
9081           darkgray: 0xa9a9a9,
9082           darkgreen: 0x006400,
9083           darkgrey: 0xa9a9a9,
9084           darkkhaki: 0xbdb76b,
9085           darkmagenta: 0x8b008b,
9086           darkolivegreen: 0x556b2f,
9087           darkorange: 0xff8c00,
9088           darkorchid: 0x9932cc,
9089           darkred: 0x8b0000,
9090           darksalmon: 0xe9967a,
9091           darkseagreen: 0x8fbc8f,
9092           darkslateblue: 0x483d8b,
9093           darkslategray: 0x2f4f4f,
9094           darkslategrey: 0x2f4f4f,
9095           darkturquoise: 0x00ced1,
9096           darkviolet: 0x9400d3,
9097           deeppink: 0xff1493,
9098           deepskyblue: 0x00bfff,
9099           dimgray: 0x696969,
9100           dimgrey: 0x696969,
9101           dodgerblue: 0x1e90ff,
9102           firebrick: 0xb22222,
9103           floralwhite: 0xfffaf0,
9104           forestgreen: 0x228b22,
9105           fuchsia: 0xff00ff,
9106           gainsboro: 0xdcdcdc,
9107           ghostwhite: 0xf8f8ff,
9108           gold: 0xffd700,
9109           goldenrod: 0xdaa520,
9110           gray: 0x808080,
9111           green: 0x008000,
9112           greenyellow: 0xadff2f,
9113           grey: 0x808080,
9114           honeydew: 0xf0fff0,
9115           hotpink: 0xff69b4,
9116           indianred: 0xcd5c5c,
9117           indigo: 0x4b0082,
9118           ivory: 0xfffff0,
9119           khaki: 0xf0e68c,
9120           lavender: 0xe6e6fa,
9121           lavenderblush: 0xfff0f5,
9122           lawngreen: 0x7cfc00,
9123           lemonchiffon: 0xfffacd,
9124           lightblue: 0xadd8e6,
9125           lightcoral: 0xf08080,
9126           lightcyan: 0xe0ffff,
9127           lightgoldenrodyellow: 0xfafad2,
9128           lightgray: 0xd3d3d3,
9129           lightgreen: 0x90ee90,
9130           lightgrey: 0xd3d3d3,
9131           lightpink: 0xffb6c1,
9132           lightsalmon: 0xffa07a,
9133           lightseagreen: 0x20b2aa,
9134           lightskyblue: 0x87cefa,
9135           lightslategray: 0x778899,
9136           lightslategrey: 0x778899,
9137           lightsteelblue: 0xb0c4de,
9138           lightyellow: 0xffffe0,
9139           lime: 0x00ff00,
9140           limegreen: 0x32cd32,
9141           linen: 0xfaf0e6,
9142           magenta: 0xff00ff,
9143           maroon: 0x800000,
9144           mediumaquamarine: 0x66cdaa,
9145           mediumblue: 0x0000cd,
9146           mediumorchid: 0xba55d3,
9147           mediumpurple: 0x9370db,
9148           mediumseagreen: 0x3cb371,
9149           mediumslateblue: 0x7b68ee,
9150           mediumspringgreen: 0x00fa9a,
9151           mediumturquoise: 0x48d1cc,
9152           mediumvioletred: 0xc71585,
9153           midnightblue: 0x191970,
9154           mintcream: 0xf5fffa,
9155           mistyrose: 0xffe4e1,
9156           moccasin: 0xffe4b5,
9157           navajowhite: 0xffdead,
9158           navy: 0x000080,
9159           oldlace: 0xfdf5e6,
9160           olive: 0x808000,
9161           olivedrab: 0x6b8e23,
9162           orange: 0xffa500,
9163           orangered: 0xff4500,
9164           orchid: 0xda70d6,
9165           palegoldenrod: 0xeee8aa,
9166           palegreen: 0x98fb98,
9167           paleturquoise: 0xafeeee,
9168           palevioletred: 0xdb7093,
9169           papayawhip: 0xffefd5,
9170           peachpuff: 0xffdab9,
9171           peru: 0xcd853f,
9172           pink: 0xffc0cb,
9173           plum: 0xdda0dd,
9174           powderblue: 0xb0e0e6,
9175           purple: 0x800080,
9176           rebeccapurple: 0x663399,
9177           red: 0xff0000,
9178           rosybrown: 0xbc8f8f,
9179           royalblue: 0x4169e1,
9180           saddlebrown: 0x8b4513,
9181           salmon: 0xfa8072,
9182           sandybrown: 0xf4a460,
9183           seagreen: 0x2e8b57,
9184           seashell: 0xfff5ee,
9185           sienna: 0xa0522d,
9186           silver: 0xc0c0c0,
9187           skyblue: 0x87ceeb,
9188           slateblue: 0x6a5acd,
9189           slategray: 0x708090,
9190           slategrey: 0x708090,
9191           snow: 0xfffafa,
9192           springgreen: 0x00ff7f,
9193           steelblue: 0x4682b4,
9194           tan: 0xd2b48c,
9195           teal: 0x008080,
9196           thistle: 0xd8bfd8,
9197           tomato: 0xff6347,
9198           turquoise: 0x40e0d0,
9199           violet: 0xee82ee,
9200           wheat: 0xf5deb3,
9201           white: 0xffffff,
9202           whitesmoke: 0xf5f5f5,
9203           yellow: 0xffff00,
9204           yellowgreen: 0x9acd32
9205         };
9206
9207         define$1(Color, color, {
9208           copy: function(channels) {
9209             return Object.assign(new this.constructor, this, channels);
9210           },
9211           displayable: function() {
9212             return this.rgb().displayable();
9213           },
9214           hex: color_formatHex, // Deprecated! Use color.formatHex.
9215           formatHex: color_formatHex,
9216           formatHsl: color_formatHsl,
9217           formatRgb: color_formatRgb,
9218           toString: color_formatRgb
9219         });
9220
9221         function color_formatHex() {
9222           return this.rgb().formatHex();
9223         }
9224
9225         function color_formatHsl() {
9226           return hslConvert(this).formatHsl();
9227         }
9228
9229         function color_formatRgb() {
9230           return this.rgb().formatRgb();
9231         }
9232
9233         function color(format) {
9234           var m, l;
9235           format = (format + "").trim().toLowerCase();
9236           return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000
9237               : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
9238               : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000
9239               : l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000
9240               : null) // invalid hex
9241               : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
9242               : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
9243               : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
9244               : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
9245               : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
9246               : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
9247               : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
9248               : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
9249               : null;
9250         }
9251
9252         function rgbn(n) {
9253           return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
9254         }
9255
9256         function rgba(r, g, b, a) {
9257           if (a <= 0) { r = g = b = NaN; }
9258           return new Rgb(r, g, b, a);
9259         }
9260
9261         function rgbConvert(o) {
9262           if (!(o instanceof Color)) { o = color(o); }
9263           if (!o) { return new Rgb; }
9264           o = o.rgb();
9265           return new Rgb(o.r, o.g, o.b, o.opacity);
9266         }
9267
9268         function rgb(r, g, b, opacity) {
9269           return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
9270         }
9271
9272         function Rgb(r, g, b, opacity) {
9273           this.r = +r;
9274           this.g = +g;
9275           this.b = +b;
9276           this.opacity = +opacity;
9277         }
9278
9279         define$1(Rgb, rgb, extend(Color, {
9280           brighter: function(k) {
9281             k = k == null ? brighter : Math.pow(brighter, k);
9282             return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
9283           },
9284           darker: function(k) {
9285             k = k == null ? darker : Math.pow(darker, k);
9286             return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
9287           },
9288           rgb: function() {
9289             return this;
9290           },
9291           displayable: function() {
9292             return (-0.5 <= this.r && this.r < 255.5)
9293                 && (-0.5 <= this.g && this.g < 255.5)
9294                 && (-0.5 <= this.b && this.b < 255.5)
9295                 && (0 <= this.opacity && this.opacity <= 1);
9296           },
9297           hex: rgb_formatHex, // Deprecated! Use color.formatHex.
9298           formatHex: rgb_formatHex,
9299           formatRgb: rgb_formatRgb,
9300           toString: rgb_formatRgb
9301         }));
9302
9303         function rgb_formatHex() {
9304           return "#" + hex$1(this.r) + hex$1(this.g) + hex$1(this.b);
9305         }
9306
9307         function rgb_formatRgb() {
9308           var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
9309           return (a === 1 ? "rgb(" : "rgba(")
9310               + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
9311               + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
9312               + Math.max(0, Math.min(255, Math.round(this.b) || 0))
9313               + (a === 1 ? ")" : ", " + a + ")");
9314         }
9315
9316         function hex$1(value) {
9317           value = Math.max(0, Math.min(255, Math.round(value) || 0));
9318           return (value < 16 ? "0" : "") + value.toString(16);
9319         }
9320
9321         function hsla(h, s, l, a) {
9322           if (a <= 0) { h = s = l = NaN; }
9323           else if (l <= 0 || l >= 1) { h = s = NaN; }
9324           else if (s <= 0) { h = NaN; }
9325           return new Hsl(h, s, l, a);
9326         }
9327
9328         function hslConvert(o) {
9329           if (o instanceof Hsl) { return new Hsl(o.h, o.s, o.l, o.opacity); }
9330           if (!(o instanceof Color)) { o = color(o); }
9331           if (!o) { return new Hsl; }
9332           if (o instanceof Hsl) { return o; }
9333           o = o.rgb();
9334           var r = o.r / 255,
9335               g = o.g / 255,
9336               b = o.b / 255,
9337               min = Math.min(r, g, b),
9338               max = Math.max(r, g, b),
9339               h = NaN,
9340               s = max - min,
9341               l = (max + min) / 2;
9342           if (s) {
9343             if (r === max) { h = (g - b) / s + (g < b) * 6; }
9344             else if (g === max) { h = (b - r) / s + 2; }
9345             else { h = (r - g) / s + 4; }
9346             s /= l < 0.5 ? max + min : 2 - max - min;
9347             h *= 60;
9348           } else {
9349             s = l > 0 && l < 1 ? 0 : h;
9350           }
9351           return new Hsl(h, s, l, o.opacity);
9352         }
9353
9354         function hsl(h, s, l, opacity) {
9355           return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
9356         }
9357
9358         function Hsl(h, s, l, opacity) {
9359           this.h = +h;
9360           this.s = +s;
9361           this.l = +l;
9362           this.opacity = +opacity;
9363         }
9364
9365         define$1(Hsl, hsl, extend(Color, {
9366           brighter: function(k) {
9367             k = k == null ? brighter : Math.pow(brighter, k);
9368             return new Hsl(this.h, this.s, this.l * k, this.opacity);
9369           },
9370           darker: function(k) {
9371             k = k == null ? darker : Math.pow(darker, k);
9372             return new Hsl(this.h, this.s, this.l * k, this.opacity);
9373           },
9374           rgb: function() {
9375             var h = this.h % 360 + (this.h < 0) * 360,
9376                 s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
9377                 l = this.l,
9378                 m2 = l + (l < 0.5 ? l : 1 - l) * s,
9379                 m1 = 2 * l - m2;
9380             return new Rgb(
9381               hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
9382               hsl2rgb(h, m1, m2),
9383               hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
9384               this.opacity
9385             );
9386           },
9387           displayable: function() {
9388             return (0 <= this.s && this.s <= 1 || isNaN(this.s))
9389                 && (0 <= this.l && this.l <= 1)
9390                 && (0 <= this.opacity && this.opacity <= 1);
9391           },
9392           formatHsl: function() {
9393             var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
9394             return (a === 1 ? "hsl(" : "hsla(")
9395                 + (this.h || 0) + ", "
9396                 + (this.s || 0) * 100 + "%, "
9397                 + (this.l || 0) * 100 + "%"
9398                 + (a === 1 ? ")" : ", " + a + ")");
9399           }
9400         }));
9401
9402         /* From FvD 13.37, CSS Color Module Level 3 */
9403         function hsl2rgb(h, m1, m2) {
9404           return (h < 60 ? m1 + (m2 - m1) * h / 60
9405               : h < 180 ? m2
9406               : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
9407               : m1) * 255;
9408         }
9409
9410         var deg2rad = Math.PI / 180;
9411         var rad2deg = 180 / Math.PI;
9412
9413         // https://observablehq.com/@mbostock/lab-and-rgb
9414         var K = 18,
9415             Xn = 0.96422,
9416             Yn = 1,
9417             Zn = 0.82521,
9418             t0 = 4 / 29,
9419             t1 = 6 / 29,
9420             t2 = 3 * t1 * t1,
9421             t3 = t1 * t1 * t1;
9422
9423         function labConvert(o) {
9424           if (o instanceof Lab) { return new Lab(o.l, o.a, o.b, o.opacity); }
9425           if (o instanceof Hcl) { return hcl2lab(o); }
9426           if (!(o instanceof Rgb)) { o = rgbConvert(o); }
9427           var r = rgb2lrgb(o.r),
9428               g = rgb2lrgb(o.g),
9429               b = rgb2lrgb(o.b),
9430               y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;
9431           if (r === g && g === b) { x = z = y; } else {
9432             x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
9433             z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
9434           }
9435           return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
9436         }
9437
9438         function gray(l, opacity) {
9439           return new Lab(l, 0, 0, opacity == null ? 1 : opacity);
9440         }
9441
9442         function lab(l, a, b, opacity) {
9443           return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
9444         }
9445
9446         function Lab(l, a, b, opacity) {
9447           this.l = +l;
9448           this.a = +a;
9449           this.b = +b;
9450           this.opacity = +opacity;
9451         }
9452
9453         define$1(Lab, lab, extend(Color, {
9454           brighter: function(k) {
9455             return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
9456           },
9457           darker: function(k) {
9458             return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
9459           },
9460           rgb: function() {
9461             var y = (this.l + 16) / 116,
9462                 x = isNaN(this.a) ? y : y + this.a / 500,
9463                 z = isNaN(this.b) ? y : y - this.b / 200;
9464             x = Xn * lab2xyz(x);
9465             y = Yn * lab2xyz(y);
9466             z = Zn * lab2xyz(z);
9467             return new Rgb(
9468               lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),
9469               lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),
9470               lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),
9471               this.opacity
9472             );
9473           }
9474         }));
9475
9476         function xyz2lab(t) {
9477           return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
9478         }
9479
9480         function lab2xyz(t) {
9481           return t > t1 ? t * t * t : t2 * (t - t0);
9482         }
9483
9484         function lrgb2rgb(x) {
9485           return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
9486         }
9487
9488         function rgb2lrgb(x) {
9489           return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
9490         }
9491
9492         function hclConvert(o) {
9493           if (o instanceof Hcl) { return new Hcl(o.h, o.c, o.l, o.opacity); }
9494           if (!(o instanceof Lab)) { o = labConvert(o); }
9495           if (o.a === 0 && o.b === 0) { return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity); }
9496           var h = Math.atan2(o.b, o.a) * rad2deg;
9497           return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
9498         }
9499
9500         function lch(l, c, h, opacity) {
9501           return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
9502         }
9503
9504         function hcl(h, c, l, opacity) {
9505           return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
9506         }
9507
9508         function Hcl(h, c, l, opacity) {
9509           this.h = +h;
9510           this.c = +c;
9511           this.l = +l;
9512           this.opacity = +opacity;
9513         }
9514
9515         function hcl2lab(o) {
9516           if (isNaN(o.h)) { return new Lab(o.l, 0, 0, o.opacity); }
9517           var h = o.h * deg2rad;
9518           return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
9519         }
9520
9521         define$1(Hcl, hcl, extend(Color, {
9522           brighter: function(k) {
9523             return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
9524           },
9525           darker: function(k) {
9526             return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
9527           },
9528           rgb: function() {
9529             return hcl2lab(this).rgb();
9530           }
9531         }));
9532
9533         var A = -0.14861,
9534             B = +1.78277,
9535             C = -0.29227,
9536             D = -0.90649,
9537             E = +1.97294,
9538             ED = E * D,
9539             EB = E * B,
9540             BC_DA = B * C - D * A;
9541
9542         function cubehelixConvert(o) {
9543           if (o instanceof Cubehelix) { return new Cubehelix(o.h, o.s, o.l, o.opacity); }
9544           if (!(o instanceof Rgb)) { o = rgbConvert(o); }
9545           var r = o.r / 255,
9546               g = o.g / 255,
9547               b = o.b / 255,
9548               l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
9549               bl = b - l,
9550               k = (E * (g - l) - C * bl) / D,
9551               s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
9552               h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
9553           return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
9554         }
9555
9556         function cubehelix(h, s, l, opacity) {
9557           return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
9558         }
9559
9560         function Cubehelix(h, s, l, opacity) {
9561           this.h = +h;
9562           this.s = +s;
9563           this.l = +l;
9564           this.opacity = +opacity;
9565         }
9566
9567         define$1(Cubehelix, cubehelix, extend(Color, {
9568           brighter: function(k) {
9569             k = k == null ? brighter : Math.pow(brighter, k);
9570             return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
9571           },
9572           darker: function(k) {
9573             k = k == null ? darker : Math.pow(darker, k);
9574             return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
9575           },
9576           rgb: function() {
9577             var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
9578                 l = +this.l,
9579                 a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
9580                 cosh = Math.cos(h),
9581                 sinh = Math.sin(h);
9582             return new Rgb(
9583               255 * (l + a * (A * cosh + B * sinh)),
9584               255 * (l + a * (C * cosh + D * sinh)),
9585               255 * (l + a * (E * cosh)),
9586               this.opacity
9587             );
9588           }
9589         }));
9590
9591         function basis(t1, v0, v1, v2, v3) {
9592           var t2 = t1 * t1, t3 = t2 * t1;
9593           return ((1 - 3 * t1 + 3 * t2 - t3) * v0
9594               + (4 - 6 * t2 + 3 * t3) * v1
9595               + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
9596               + t3 * v3) / 6;
9597         }
9598
9599         function basis$1(values) {
9600           var n = values.length - 1;
9601           return function(t) {
9602             var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
9603                 v1 = values[i],
9604                 v2 = values[i + 1],
9605                 v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
9606                 v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
9607             return basis((t - i / n) * n, v0, v1, v2, v3);
9608           };
9609         }
9610
9611         function basisClosed(values) {
9612           var n = values.length;
9613           return function(t) {
9614             var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
9615                 v0 = values[(i + n - 1) % n],
9616                 v1 = values[i % n],
9617                 v2 = values[(i + 1) % n],
9618                 v3 = values[(i + 2) % n];
9619             return basis((t - i / n) * n, v0, v1, v2, v3);
9620           };
9621         }
9622
9623         function constant$3(x) {
9624           return function() {
9625             return x;
9626           };
9627         }
9628
9629         function linear(a, d) {
9630           return function(t) {
9631             return a + t * d;
9632           };
9633         }
9634
9635         function exponential(a, b, y) {
9636           return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
9637             return Math.pow(a + t * b, y);
9638           };
9639         }
9640
9641         function hue(a, b) {
9642           var d = b - a;
9643           return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
9644         }
9645
9646         function gamma(y) {
9647           return (y = +y) === 1 ? nogamma : function(a, b) {
9648             return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a);
9649           };
9650         }
9651
9652         function nogamma(a, b) {
9653           var d = b - a;
9654           return d ? linear(a, d) : constant$3(isNaN(a) ? b : a);
9655         }
9656
9657         var d3_interpolateRgb = (function rgbGamma(y) {
9658           var color = gamma(y);
9659
9660           function rgb$1(start, end) {
9661             var r = color((start = rgb(start)).r, (end = rgb(end)).r),
9662                 g = color(start.g, end.g),
9663                 b = color(start.b, end.b),
9664                 opacity = nogamma(start.opacity, end.opacity);
9665             return function(t) {
9666               start.r = r(t);
9667               start.g = g(t);
9668               start.b = b(t);
9669               start.opacity = opacity(t);
9670               return start + "";
9671             };
9672           }
9673
9674           rgb$1.gamma = rgbGamma;
9675
9676           return rgb$1;
9677         })(1);
9678
9679         function rgbSpline(spline) {
9680           return function(colors) {
9681             var n = colors.length,
9682                 r = new Array(n),
9683                 g = new Array(n),
9684                 b = new Array(n),
9685                 i, color;
9686             for (i = 0; i < n; ++i) {
9687               color = rgb(colors[i]);
9688               r[i] = color.r || 0;
9689               g[i] = color.g || 0;
9690               b[i] = color.b || 0;
9691             }
9692             r = spline(r);
9693             g = spline(g);
9694             b = spline(b);
9695             color.opacity = 1;
9696             return function(t) {
9697               color.r = r(t);
9698               color.g = g(t);
9699               color.b = b(t);
9700               return color + "";
9701             };
9702           };
9703         }
9704
9705         var rgbBasis = rgbSpline(basis$1);
9706         var rgbBasisClosed = rgbSpline(basisClosed);
9707
9708         function numberArray(a, b) {
9709           if (!b) { b = []; }
9710           var n = a ? Math.min(b.length, a.length) : 0,
9711               c = b.slice(),
9712               i;
9713           return function(t) {
9714             for (i = 0; i < n; ++i) { c[i] = a[i] * (1 - t) + b[i] * t; }
9715             return c;
9716           };
9717         }
9718
9719         function isNumberArray(x) {
9720           return ArrayBuffer.isView(x) && !(x instanceof DataView);
9721         }
9722
9723         function array$2(a, b) {
9724           return (isNumberArray(b) ? numberArray : genericArray)(a, b);
9725         }
9726
9727         function genericArray(a, b) {
9728           var nb = b ? b.length : 0,
9729               na = a ? Math.min(nb, a.length) : 0,
9730               x = new Array(na),
9731               c = new Array(nb),
9732               i;
9733
9734           for (i = 0; i < na; ++i) { x[i] = d3_interpolate(a[i], b[i]); }
9735           for (; i < nb; ++i) { c[i] = b[i]; }
9736
9737           return function(t) {
9738             for (i = 0; i < na; ++i) { c[i] = x[i](t); }
9739             return c;
9740           };
9741         }
9742
9743         function date(a, b) {
9744           var d = new Date;
9745           return a = +a, b = +b, function(t) {
9746             return d.setTime(a * (1 - t) + b * t), d;
9747           };
9748         }
9749
9750         function d3_interpolateNumber(a, b) {
9751           return a = +a, b = +b, function(t) {
9752             return a * (1 - t) + b * t;
9753           };
9754         }
9755
9756         function object(a, b) {
9757           var i = {},
9758               c = {},
9759               k;
9760
9761           if (a === null || typeof a !== "object") { a = {}; }
9762           if (b === null || typeof b !== "object") { b = {}; }
9763
9764           for (k in b) {
9765             if (k in a) {
9766               i[k] = d3_interpolate(a[k], b[k]);
9767             } else {
9768               c[k] = b[k];
9769             }
9770           }
9771
9772           return function(t) {
9773             for (k in i) { c[k] = i[k](t); }
9774             return c;
9775           };
9776         }
9777
9778         var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
9779             reB = new RegExp(reA.source, "g");
9780
9781         function zero(b) {
9782           return function() {
9783             return b;
9784           };
9785         }
9786
9787         function one(b) {
9788           return function(t) {
9789             return b(t) + "";
9790           };
9791         }
9792
9793         function interpolateString(a, b) {
9794           var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
9795               am, // current match in a
9796               bm, // current match in b
9797               bs, // string preceding current number in b, if any
9798               i = -1, // index in s
9799               s = [], // string constants and placeholders
9800               q = []; // number interpolators
9801
9802           // Coerce inputs to strings.
9803           a = a + "", b = b + "";
9804
9805           // Interpolate pairs of numbers in a & b.
9806           while ((am = reA.exec(a))
9807               && (bm = reB.exec(b))) {
9808             if ((bs = bm.index) > bi) { // a string precedes the next number in b
9809               bs = b.slice(bi, bs);
9810               if (s[i]) { s[i] += bs; } // coalesce with previous string
9811               else { s[++i] = bs; }
9812             }
9813             if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
9814               if (s[i]) { s[i] += bm; } // coalesce with previous string
9815               else { s[++i] = bm; }
9816             } else { // interpolate non-matching numbers
9817               s[++i] = null;
9818               q.push({i: i, x: d3_interpolateNumber(am, bm)});
9819             }
9820             bi = reB.lastIndex;
9821           }
9822
9823           // Add remains of b.
9824           if (bi < b.length) {
9825             bs = b.slice(bi);
9826             if (s[i]) { s[i] += bs; } // coalesce with previous string
9827             else { s[++i] = bs; }
9828           }
9829
9830           // Special optimization for only a single match.
9831           // Otherwise, interpolate each of the numbers and rejoin the string.
9832           return s.length < 2 ? (q[0]
9833               ? one(q[0].x)
9834               : zero(b))
9835               : (b = q.length, function(t) {
9836                   for (var i = 0, o; i < b; ++i) { s[(o = q[i]).i] = o.x(t); }
9837                   return s.join("");
9838                 });
9839         }
9840
9841         function d3_interpolate(a, b) {
9842           var t = typeof b, c;
9843           return b == null || t === "boolean" ? constant$3(b)
9844               : (t === "number" ? d3_interpolateNumber
9845               : t === "string" ? ((c = color(b)) ? (b = c, d3_interpolateRgb) : interpolateString)
9846               : b instanceof color ? d3_interpolateRgb
9847               : b instanceof Date ? date
9848               : isNumberArray(b) ? numberArray
9849               : Array.isArray(b) ? genericArray
9850               : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
9851               : d3_interpolateNumber)(a, b);
9852         }
9853
9854         function discrete(range) {
9855           var n = range.length;
9856           return function(t) {
9857             return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
9858           };
9859         }
9860
9861         function hue$1(a, b) {
9862           var i = hue(+a, +b);
9863           return function(t) {
9864             var x = i(t);
9865             return x - 360 * Math.floor(x / 360);
9866           };
9867         }
9868
9869         function interpolateRound(a, b) {
9870           return a = +a, b = +b, function(t) {
9871             return Math.round(a * (1 - t) + b * t);
9872           };
9873         }
9874
9875         var degrees = 180 / Math.PI;
9876
9877         var identity$2 = {
9878           translateX: 0,
9879           translateY: 0,
9880           rotate: 0,
9881           skewX: 0,
9882           scaleX: 1,
9883           scaleY: 1
9884         };
9885
9886         function decompose(a, b, c, d, e, f) {
9887           var scaleX, scaleY, skewX;
9888           if (scaleX = Math.sqrt(a * a + b * b)) { a /= scaleX, b /= scaleX; }
9889           if (skewX = a * c + b * d) { c -= a * skewX, d -= b * skewX; }
9890           if (scaleY = Math.sqrt(c * c + d * d)) { c /= scaleY, d /= scaleY, skewX /= scaleY; }
9891           if (a * d < b * c) { a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; }
9892           return {
9893             translateX: e,
9894             translateY: f,
9895             rotate: Math.atan2(b, a) * degrees,
9896             skewX: Math.atan(skewX) * degrees,
9897             scaleX: scaleX,
9898             scaleY: scaleY
9899           };
9900         }
9901
9902         var cssNode,
9903             cssRoot,
9904             cssView,
9905             svgNode;
9906
9907         function parseCss(value) {
9908           if (value === "none") { return identity$2; }
9909           if (!cssNode) { cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; }
9910           cssNode.style.transform = value;
9911           value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
9912           cssRoot.removeChild(cssNode);
9913           value = value.slice(7, -1).split(",");
9914           return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
9915         }
9916
9917         function parseSvg(value) {
9918           if (value == null) { return identity$2; }
9919           if (!svgNode) { svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); }
9920           svgNode.setAttribute("transform", value);
9921           if (!(value = svgNode.transform.baseVal.consolidate())) { return identity$2; }
9922           value = value.matrix;
9923           return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
9924         }
9925
9926         function interpolateTransform(parse, pxComma, pxParen, degParen) {
9927
9928           function pop(s) {
9929             return s.length ? s.pop() + " " : "";
9930           }
9931
9932           function translate(xa, ya, xb, yb, s, q) {
9933             if (xa !== xb || ya !== yb) {
9934               var i = s.push("translate(", null, pxComma, null, pxParen);
9935               q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)});
9936             } else if (xb || yb) {
9937               s.push("translate(" + xb + pxComma + yb + pxParen);
9938             }
9939           }
9940
9941           function rotate(a, b, s, q) {
9942             if (a !== b) {
9943               if (a - b > 180) { b += 360; } else if (b - a > 180) { a += 360; } // shortest path
9944               q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: d3_interpolateNumber(a, b)});
9945             } else if (b) {
9946               s.push(pop(s) + "rotate(" + b + degParen);
9947             }
9948           }
9949
9950           function skewX(a, b, s, q) {
9951             if (a !== b) {
9952               q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: d3_interpolateNumber(a, b)});
9953             } else if (b) {
9954               s.push(pop(s) + "skewX(" + b + degParen);
9955             }
9956           }
9957
9958           function scale(xa, ya, xb, yb, s, q) {
9959             if (xa !== xb || ya !== yb) {
9960               var i = s.push(pop(s) + "scale(", null, ",", null, ")");
9961               q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)});
9962             } else if (xb !== 1 || yb !== 1) {
9963               s.push(pop(s) + "scale(" + xb + "," + yb + ")");
9964             }
9965           }
9966
9967           return function(a, b) {
9968             var s = [], // string constants and placeholders
9969                 q = []; // number interpolators
9970             a = parse(a), b = parse(b);
9971             translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
9972             rotate(a.rotate, b.rotate, s, q);
9973             skewX(a.skewX, b.skewX, s, q);
9974             scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
9975             a = b = null; // gc
9976             return function(t) {
9977               var i = -1, n = q.length, o;
9978               while (++i < n) { s[(o = q[i]).i] = o.x(t); }
9979               return s.join("");
9980             };
9981           };
9982         }
9983
9984         var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
9985         var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
9986
9987         var rho = Math.SQRT2,
9988             rho2 = 2,
9989             rho4 = 4,
9990             epsilon2 = 1e-12;
9991
9992         function cosh(x) {
9993           return ((x = Math.exp(x)) + 1 / x) / 2;
9994         }
9995
9996         function sinh(x) {
9997           return ((x = Math.exp(x)) - 1 / x) / 2;
9998         }
9999
10000         function tanh(x) {
10001           return ((x = Math.exp(2 * x)) - 1) / (x + 1);
10002         }
10003
10004         // p0 = [ux0, uy0, w0]
10005         // p1 = [ux1, uy1, w1]
10006         function interpolateZoom(p0, p1) {
10007           var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
10008               ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
10009               dx = ux1 - ux0,
10010               dy = uy1 - uy0,
10011               d2 = dx * dx + dy * dy,
10012               i,
10013               S;
10014
10015           // Special case for u0 ≅ u1.
10016           if (d2 < epsilon2) {
10017             S = Math.log(w1 / w0) / rho;
10018             i = function(t) {
10019               return [
10020                 ux0 + t * dx,
10021                 uy0 + t * dy,
10022                 w0 * Math.exp(rho * t * S)
10023               ];
10024             };
10025           }
10026
10027           // General case.
10028           else {
10029             var d1 = Math.sqrt(d2),
10030                 b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
10031                 b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
10032                 r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
10033                 r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
10034             S = (r1 - r0) / rho;
10035             i = function(t) {
10036               var s = t * S,
10037                   coshr0 = cosh(r0),
10038                   u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
10039               return [
10040                 ux0 + u * dx,
10041                 uy0 + u * dy,
10042                 w0 * coshr0 / cosh(rho * s + r0)
10043               ];
10044             };
10045           }
10046
10047           i.duration = S * 1000;
10048
10049           return i;
10050         }
10051
10052         function hsl$1(hue) {
10053           return function(start, end) {
10054             var h = hue((start = hsl(start)).h, (end = hsl(end)).h),
10055                 s = nogamma(start.s, end.s),
10056                 l = nogamma(start.l, end.l),
10057                 opacity = nogamma(start.opacity, end.opacity);
10058             return function(t) {
10059               start.h = h(t);
10060               start.s = s(t);
10061               start.l = l(t);
10062               start.opacity = opacity(t);
10063               return start + "";
10064             };
10065           }
10066         }
10067
10068         var hsl$2 = hsl$1(hue);
10069         var hslLong = hsl$1(nogamma);
10070
10071         function lab$1(start, end) {
10072           var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
10073               a = nogamma(start.a, end.a),
10074               b = nogamma(start.b, end.b),
10075               opacity = nogamma(start.opacity, end.opacity);
10076           return function(t) {
10077             start.l = l(t);
10078             start.a = a(t);
10079             start.b = b(t);
10080             start.opacity = opacity(t);
10081             return start + "";
10082           };
10083         }
10084
10085         function hcl$1(hue) {
10086           return function(start, end) {
10087             var h = hue((start = hcl(start)).h, (end = hcl(end)).h),
10088                 c = nogamma(start.c, end.c),
10089                 l = nogamma(start.l, end.l),
10090                 opacity = nogamma(start.opacity, end.opacity);
10091             return function(t) {
10092               start.h = h(t);
10093               start.c = c(t);
10094               start.l = l(t);
10095               start.opacity = opacity(t);
10096               return start + "";
10097             };
10098           }
10099         }
10100
10101         var hcl$2 = hcl$1(hue);
10102         var hclLong = hcl$1(nogamma);
10103
10104         function cubehelix$1(hue) {
10105           return (function cubehelixGamma(y) {
10106             y = +y;
10107
10108             function cubehelix$1(start, end) {
10109               var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h),
10110                   s = nogamma(start.s, end.s),
10111                   l = nogamma(start.l, end.l),
10112                   opacity = nogamma(start.opacity, end.opacity);
10113               return function(t) {
10114                 start.h = h(t);
10115                 start.s = s(t);
10116                 start.l = l(Math.pow(t, y));
10117                 start.opacity = opacity(t);
10118                 return start + "";
10119               };
10120             }
10121
10122             cubehelix$1.gamma = cubehelixGamma;
10123
10124             return cubehelix$1;
10125           })(1);
10126         }
10127
10128         var cubehelix$2 = cubehelix$1(hue);
10129         var cubehelixLong = cubehelix$1(nogamma);
10130
10131         function piecewise(interpolate, values) {
10132           var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);
10133           while (i < n) { I[i] = interpolate(v, v = values[++i]); }
10134           return function(t) {
10135             var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));
10136             return I[i](t - i);
10137           };
10138         }
10139
10140         function d3_quantize(interpolator, n) {
10141           var samples = new Array(n);
10142           for (var i = 0; i < n; ++i) { samples[i] = interpolator(i / (n - 1)); }
10143           return samples;
10144         }
10145
10146         var frame = 0, // is an animation frame pending?
10147             timeout = 0, // is a timeout pending?
10148             interval = 0, // are any timers active?
10149             pokeDelay = 1000, // how frequently we check for clock skew
10150             taskHead,
10151             taskTail,
10152             clockLast = 0,
10153             clockNow = 0,
10154             clockSkew = 0,
10155             clock = typeof performance === "object" && performance.now ? performance : Date,
10156             setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
10157
10158         function now() {
10159           return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
10160         }
10161
10162         function clearNow() {
10163           clockNow = 0;
10164         }
10165
10166         function Timer() {
10167           this._call =
10168           this._time =
10169           this._next = null;
10170         }
10171
10172         Timer.prototype = timer.prototype = {
10173           constructor: Timer,
10174           restart: function(callback, delay, time) {
10175             if (typeof callback !== "function") { throw new TypeError("callback is not a function"); }
10176             time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
10177             if (!this._next && taskTail !== this) {
10178               if (taskTail) { taskTail._next = this; }
10179               else { taskHead = this; }
10180               taskTail = this;
10181             }
10182             this._call = callback;
10183             this._time = time;
10184             sleep();
10185           },
10186           stop: function() {
10187             if (this._call) {
10188               this._call = null;
10189               this._time = Infinity;
10190               sleep();
10191             }
10192           }
10193         };
10194
10195         function timer(callback, delay, time) {
10196           var t = new Timer;
10197           t.restart(callback, delay, time);
10198           return t;
10199         }
10200
10201         function timerFlush() {
10202           now(); // Get the current time, if not already set.
10203           ++frame; // Pretend we’ve set an alarm, if we haven’t already.
10204           var t = taskHead, e;
10205           while (t) {
10206             if ((e = clockNow - t._time) >= 0) { t._call.call(null, e); }
10207             t = t._next;
10208           }
10209           --frame;
10210         }
10211
10212         function wake() {
10213           clockNow = (clockLast = clock.now()) + clockSkew;
10214           frame = timeout = 0;
10215           try {
10216             timerFlush();
10217           } finally {
10218             frame = 0;
10219             nap();
10220             clockNow = 0;
10221           }
10222         }
10223
10224         function poke() {
10225           var now = clock.now(), delay = now - clockLast;
10226           if (delay > pokeDelay) { clockSkew -= delay, clockLast = now; }
10227         }
10228
10229         function nap() {
10230           var t0, t1 = taskHead, t2, time = Infinity;
10231           while (t1) {
10232             if (t1._call) {
10233               if (time > t1._time) { time = t1._time; }
10234               t0 = t1, t1 = t1._next;
10235             } else {
10236               t2 = t1._next, t1._next = null;
10237               t1 = t0 ? t0._next = t2 : taskHead = t2;
10238             }
10239           }
10240           taskTail = t0;
10241           sleep(time);
10242         }
10243
10244         function sleep(time) {
10245           if (frame) { return; } // Soonest alarm already set, or will be.
10246           if (timeout) { timeout = clearTimeout(timeout); }
10247           var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
10248           if (delay > 24) {
10249             if (time < Infinity) { timeout = setTimeout(wake, time - clock.now() - clockSkew); }
10250             if (interval) { interval = clearInterval(interval); }
10251           } else {
10252             if (!interval) { clockLast = clock.now(), interval = setInterval(poke, pokeDelay); }
10253             frame = 1, setFrame(wake);
10254           }
10255         }
10256
10257         function d3_timeout(callback, delay, time) {
10258           var t = new Timer;
10259           delay = delay == null ? 0 : +delay;
10260           t.restart(function(elapsed) {
10261             t.stop();
10262             callback(elapsed + delay);
10263           }, delay, time);
10264           return t;
10265         }
10266
10267         function interval$1(callback, delay, time) {
10268           var t = new Timer, total = delay;
10269           if (delay == null) { return t.restart(callback, delay, time), t; }
10270           delay = +delay, time = time == null ? now() : +time;
10271           t.restart(function tick(elapsed) {
10272             elapsed += total;
10273             t.restart(tick, total += delay, time);
10274             callback(elapsed);
10275           }, delay, time);
10276           return t;
10277         }
10278
10279         var emptyOn = dispatch("start", "end", "cancel", "interrupt");
10280         var emptyTween = [];
10281
10282         var CREATED = 0;
10283         var SCHEDULED = 1;
10284         var STARTING = 2;
10285         var STARTED = 3;
10286         var RUNNING = 4;
10287         var ENDING = 5;
10288         var ENDED = 6;
10289
10290         function schedule(node, name, id, index, group, timing) {
10291           var schedules = node.__transition;
10292           if (!schedules) { node.__transition = {}; }
10293           else if (id in schedules) { return; }
10294           create$8(node, id, {
10295             name: name,
10296             index: index, // For context during callback.
10297             group: group, // For context during callback.
10298             on: emptyOn,
10299             tween: emptyTween,
10300             time: timing.time,
10301             delay: timing.delay,
10302             duration: timing.duration,
10303             ease: timing.ease,
10304             timer: null,
10305             state: CREATED
10306           });
10307         }
10308
10309         function init(node, id) {
10310           var schedule = get$2(node, id);
10311           if (schedule.state > CREATED) { throw new Error("too late; already scheduled"); }
10312           return schedule;
10313         }
10314
10315         function set$1(node, id) {
10316           var schedule = get$2(node, id);
10317           if (schedule.state > STARTED) { throw new Error("too late; already running"); }
10318           return schedule;
10319         }
10320
10321         function get$2(node, id) {
10322           var schedule = node.__transition;
10323           if (!schedule || !(schedule = schedule[id])) { throw new Error("transition not found"); }
10324           return schedule;
10325         }
10326
10327         function create$8(node, id, self) {
10328           var schedules = node.__transition,
10329               tween;
10330
10331           // Initialize the self timer when the transition is created.
10332           // Note the actual delay is not known until the first callback!
10333           schedules[id] = self;
10334           self.timer = timer(schedule, 0, self.time);
10335
10336           function schedule(elapsed) {
10337             self.state = SCHEDULED;
10338             self.timer.restart(start, self.delay, self.time);
10339
10340             // If the elapsed delay is less than our first sleep, start immediately.
10341             if (self.delay <= elapsed) { start(elapsed - self.delay); }
10342           }
10343
10344           function start(elapsed) {
10345             var i, j, n, o;
10346
10347             // If the state is not SCHEDULED, then we previously errored on start.
10348             if (self.state !== SCHEDULED) { return stop(); }
10349
10350             for (i in schedules) {
10351               o = schedules[i];
10352               if (o.name !== self.name) { continue; }
10353
10354               // While this element already has a starting transition during this frame,
10355               // defer starting an interrupting transition until that transition has a
10356               // chance to tick (and possibly end); see d3/d3-transition#54!
10357               if (o.state === STARTED) { return d3_timeout(start); }
10358
10359               // Interrupt the active transition, if any.
10360               if (o.state === RUNNING) {
10361                 o.state = ENDED;
10362                 o.timer.stop();
10363                 o.on.call("interrupt", node, node.__data__, o.index, o.group);
10364                 delete schedules[i];
10365               }
10366
10367               // Cancel any pre-empted transitions.
10368               else if (+i < id) {
10369                 o.state = ENDED;
10370                 o.timer.stop();
10371                 o.on.call("cancel", node, node.__data__, o.index, o.group);
10372                 delete schedules[i];
10373               }
10374             }
10375
10376             // Defer the first tick to end of the current frame; see d3/d3#1576.
10377             // Note the transition may be canceled after start and before the first tick!
10378             // Note this must be scheduled before the start event; see d3/d3-transition#16!
10379             // Assuming this is successful, subsequent callbacks go straight to tick.
10380             d3_timeout(function() {
10381               if (self.state === STARTED) {
10382                 self.state = RUNNING;
10383                 self.timer.restart(tick, self.delay, self.time);
10384                 tick(elapsed);
10385               }
10386             });
10387
10388             // Dispatch the start event.
10389             // Note this must be done before the tween are initialized.
10390             self.state = STARTING;
10391             self.on.call("start", node, node.__data__, self.index, self.group);
10392             if (self.state !== STARTING) { return; } // interrupted
10393             self.state = STARTED;
10394
10395             // Initialize the tween, deleting null tween.
10396             tween = new Array(n = self.tween.length);
10397             for (i = 0, j = -1; i < n; ++i) {
10398               if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
10399                 tween[++j] = o;
10400               }
10401             }
10402             tween.length = j + 1;
10403           }
10404
10405           function tick(elapsed) {
10406             var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
10407                 i = -1,
10408                 n = tween.length;
10409
10410             while (++i < n) {
10411               tween[i].call(node, t);
10412             }
10413
10414             // Dispatch the end event.
10415             if (self.state === ENDING) {
10416               self.on.call("end", node, node.__data__, self.index, self.group);
10417               stop();
10418             }
10419           }
10420
10421           function stop() {
10422             self.state = ENDED;
10423             self.timer.stop();
10424             delete schedules[id];
10425             for (var i in schedules) { return; } // eslint-disable-line no-unused-vars
10426             delete node.__transition;
10427           }
10428         }
10429
10430         function interrupt(node, name) {
10431           var schedules = node.__transition,
10432               schedule,
10433               active,
10434               empty = true,
10435               i;
10436
10437           if (!schedules) { return; }
10438
10439           name = name == null ? null : name + "";
10440
10441           for (i in schedules) {
10442             if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
10443             active = schedule.state > STARTING && schedule.state < ENDING;
10444             schedule.state = ENDED;
10445             schedule.timer.stop();
10446             schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);
10447             delete schedules[i];
10448           }
10449
10450           if (empty) { delete node.__transition; }
10451         }
10452
10453         function selection_interrupt(name) {
10454           return this.each(function() {
10455             interrupt(this, name);
10456           });
10457         }
10458
10459         function tweenRemove(id, name) {
10460           var tween0, tween1;
10461           return function() {
10462             var schedule = set$1(this, id),
10463                 tween = schedule.tween;
10464
10465             // If this node shared tween with the previous node,
10466             // just assign the updated shared tween and we’re done!
10467             // Otherwise, copy-on-write.
10468             if (tween !== tween0) {
10469               tween1 = tween0 = tween;
10470               for (var i = 0, n = tween1.length; i < n; ++i) {
10471                 if (tween1[i].name === name) {
10472                   tween1 = tween1.slice();
10473                   tween1.splice(i, 1);
10474                   break;
10475                 }
10476               }
10477             }
10478
10479             schedule.tween = tween1;
10480           };
10481         }
10482
10483         function tweenFunction(id, name, value) {
10484           var tween0, tween1;
10485           if (typeof value !== "function") { throw new Error; }
10486           return function() {
10487             var schedule = set$1(this, id),
10488                 tween = schedule.tween;
10489
10490             // If this node shared tween with the previous node,
10491             // just assign the updated shared tween and we’re done!
10492             // Otherwise, copy-on-write.
10493             if (tween !== tween0) {
10494               tween1 = (tween0 = tween).slice();
10495               for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
10496                 if (tween1[i].name === name) {
10497                   tween1[i] = t;
10498                   break;
10499                 }
10500               }
10501               if (i === n) { tween1.push(t); }
10502             }
10503
10504             schedule.tween = tween1;
10505           };
10506         }
10507
10508         function transition_tween(name, value) {
10509           var id = this._id;
10510
10511           name += "";
10512
10513           if (arguments.length < 2) {
10514             var tween = get$2(this.node(), id).tween;
10515             for (var i = 0, n = tween.length, t; i < n; ++i) {
10516               if ((t = tween[i]).name === name) {
10517                 return t.value;
10518               }
10519             }
10520             return null;
10521           }
10522
10523           return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
10524         }
10525
10526         function tweenValue(transition, name, value) {
10527           var id = transition._id;
10528
10529           transition.each(function() {
10530             var schedule = set$1(this, id);
10531             (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
10532           });
10533
10534           return function(node) {
10535             return get$2(node, id).value[name];
10536           };
10537         }
10538
10539         function interpolate(a, b) {
10540           var c;
10541           return (typeof b === "number" ? d3_interpolateNumber
10542               : b instanceof color ? d3_interpolateRgb
10543               : (c = color(b)) ? (b = c, d3_interpolateRgb)
10544               : interpolateString)(a, b);
10545         }
10546
10547         function attrRemove$1(name) {
10548           return function() {
10549             this.removeAttribute(name);
10550           };
10551         }
10552
10553         function attrRemoveNS$1(fullname) {
10554           return function() {
10555             this.removeAttributeNS(fullname.space, fullname.local);
10556           };
10557         }
10558
10559         function attrConstant$1(name, interpolate, value1) {
10560           var string00,
10561               string1 = value1 + "",
10562               interpolate0;
10563           return function() {
10564             var string0 = this.getAttribute(name);
10565             return string0 === string1 ? null
10566                 : string0 === string00 ? interpolate0
10567                 : interpolate0 = interpolate(string00 = string0, value1);
10568           };
10569         }
10570
10571         function attrConstantNS$1(fullname, interpolate, value1) {
10572           var string00,
10573               string1 = value1 + "",
10574               interpolate0;
10575           return function() {
10576             var string0 = this.getAttributeNS(fullname.space, fullname.local);
10577             return string0 === string1 ? null
10578                 : string0 === string00 ? interpolate0
10579                 : interpolate0 = interpolate(string00 = string0, value1);
10580           };
10581         }
10582
10583         function attrFunction$1(name, interpolate, value) {
10584           var string00,
10585               string10,
10586               interpolate0;
10587           return function() {
10588             var string0, value1 = value(this), string1;
10589             if (value1 == null) { return void this.removeAttribute(name); }
10590             string0 = this.getAttribute(name);
10591             string1 = value1 + "";
10592             return string0 === string1 ? null
10593                 : string0 === string00 && string1 === string10 ? interpolate0
10594                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
10595           };
10596         }
10597
10598         function attrFunctionNS$1(fullname, interpolate, value) {
10599           var string00,
10600               string10,
10601               interpolate0;
10602           return function() {
10603             var string0, value1 = value(this), string1;
10604             if (value1 == null) { return void this.removeAttributeNS(fullname.space, fullname.local); }
10605             string0 = this.getAttributeNS(fullname.space, fullname.local);
10606             string1 = value1 + "";
10607             return string0 === string1 ? null
10608                 : string0 === string00 && string1 === string10 ? interpolate0
10609                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
10610           };
10611         }
10612
10613         function transition_attr(name, value) {
10614           var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate;
10615           return this.attrTween(name, typeof value === "function"
10616               ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
10617               : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
10618               : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
10619         }
10620
10621         function attrInterpolate(name, i) {
10622           return function(t) {
10623             this.setAttribute(name, i.call(this, t));
10624           };
10625         }
10626
10627         function attrInterpolateNS(fullname, i) {
10628           return function(t) {
10629             this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));
10630           };
10631         }
10632
10633         function attrTweenNS(fullname, value) {
10634           var t0, i0;
10635           function tween() {
10636             var i = value.apply(this, arguments);
10637             if (i !== i0) { t0 = (i0 = i) && attrInterpolateNS(fullname, i); }
10638             return t0;
10639           }
10640           tween._value = value;
10641           return tween;
10642         }
10643
10644         function attrTween(name, value) {
10645           var t0, i0;
10646           function tween() {
10647             var i = value.apply(this, arguments);
10648             if (i !== i0) { t0 = (i0 = i) && attrInterpolate(name, i); }
10649             return t0;
10650           }
10651           tween._value = value;
10652           return tween;
10653         }
10654
10655         function transition_attrTween(name, value) {
10656           var key = "attr." + name;
10657           if (arguments.length < 2) { return (key = this.tween(key)) && key._value; }
10658           if (value == null) { return this.tween(key, null); }
10659           if (typeof value !== "function") { throw new Error; }
10660           var fullname = namespace(name);
10661           return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
10662         }
10663
10664         function delayFunction(id, value) {
10665           return function() {
10666             init(this, id).delay = +value.apply(this, arguments);
10667           };
10668         }
10669
10670         function delayConstant(id, value) {
10671           return value = +value, function() {
10672             init(this, id).delay = value;
10673           };
10674         }
10675
10676         function transition_delay(value) {
10677           var id = this._id;
10678
10679           return arguments.length
10680               ? this.each((typeof value === "function"
10681                   ? delayFunction
10682                   : delayConstant)(id, value))
10683               : get$2(this.node(), id).delay;
10684         }
10685
10686         function durationFunction(id, value) {
10687           return function() {
10688             set$1(this, id).duration = +value.apply(this, arguments);
10689           };
10690         }
10691
10692         function durationConstant(id, value) {
10693           return value = +value, function() {
10694             set$1(this, id).duration = value;
10695           };
10696         }
10697
10698         function transition_duration(value) {
10699           var id = this._id;
10700
10701           return arguments.length
10702               ? this.each((typeof value === "function"
10703                   ? durationFunction
10704                   : durationConstant)(id, value))
10705               : get$2(this.node(), id).duration;
10706         }
10707
10708         function easeConstant(id, value) {
10709           if (typeof value !== "function") { throw new Error; }
10710           return function() {
10711             set$1(this, id).ease = value;
10712           };
10713         }
10714
10715         function transition_ease(value) {
10716           var id = this._id;
10717
10718           return arguments.length
10719               ? this.each(easeConstant(id, value))
10720               : get$2(this.node(), id).ease;
10721         }
10722
10723         function transition_filter(match) {
10724           if (typeof match !== "function") { match = matcher(match); }
10725
10726           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
10727             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
10728               if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
10729                 subgroup.push(node);
10730               }
10731             }
10732           }
10733
10734           return new Transition(subgroups, this._parents, this._name, this._id);
10735         }
10736
10737         function transition_merge(transition) {
10738           if (transition._id !== this._id) { throw new Error; }
10739
10740           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) {
10741             for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
10742               if (node = group0[i] || group1[i]) {
10743                 merge[i] = node;
10744               }
10745             }
10746           }
10747
10748           for (; j < m0; ++j) {
10749             merges[j] = groups0[j];
10750           }
10751
10752           return new Transition(merges, this._parents, this._name, this._id);
10753         }
10754
10755         function start(name) {
10756           return (name + "").trim().split(/^|\s+/).every(function(t) {
10757             var i = t.indexOf(".");
10758             if (i >= 0) { t = t.slice(0, i); }
10759             return !t || t === "start";
10760           });
10761         }
10762
10763         function onFunction(id, name, listener) {
10764           var on0, on1, sit = start(name) ? init : set$1;
10765           return function() {
10766             var schedule = sit(this, id),
10767                 on = schedule.on;
10768
10769             // If this node shared a dispatch with the previous node,
10770             // just assign the updated shared dispatch and we’re done!
10771             // Otherwise, copy-on-write.
10772             if (on !== on0) { (on1 = (on0 = on).copy()).on(name, listener); }
10773
10774             schedule.on = on1;
10775           };
10776         }
10777
10778         function transition_on(name, listener) {
10779           var id = this._id;
10780
10781           return arguments.length < 2
10782               ? get$2(this.node(), id).on.on(name)
10783               : this.each(onFunction(id, name, listener));
10784         }
10785
10786         function removeFunction(id) {
10787           return function() {
10788             var parent = this.parentNode;
10789             for (var i in this.__transition) { if (+i !== id) { return; } }
10790             if (parent) { parent.removeChild(this); }
10791           };
10792         }
10793
10794         function transition_remove() {
10795           return this.on("end.remove", removeFunction(this._id));
10796         }
10797
10798         function transition_select(select) {
10799           var name = this._name,
10800               id = this._id;
10801
10802           if (typeof select !== "function") { select = selector(select); }
10803
10804           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
10805             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
10806               if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
10807                 if ("__data__" in node) { subnode.__data__ = node.__data__; }
10808                 subgroup[i] = subnode;
10809                 schedule(subgroup[i], name, id, i, subgroup, get$2(node, id));
10810               }
10811             }
10812           }
10813
10814           return new Transition(subgroups, this._parents, name, id);
10815         }
10816
10817         function transition_selectAll(select) {
10818           var name = this._name,
10819               id = this._id;
10820
10821           if (typeof select !== "function") { select = selectorAll(select); }
10822
10823           for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
10824             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
10825               if (node = group[i]) {
10826                 for (var children = select.call(node, node.__data__, i, group), child, inherit = get$2(node, id), k = 0, l = children.length; k < l; ++k) {
10827                   if (child = children[k]) {
10828                     schedule(child, name, id, k, children, inherit);
10829                   }
10830                 }
10831                 subgroups.push(children);
10832                 parents.push(node);
10833               }
10834             }
10835           }
10836
10837           return new Transition(subgroups, parents, name, id);
10838         }
10839
10840         var Selection$1 = selection.prototype.constructor;
10841
10842         function transition_selection() {
10843           return new Selection$1(this._groups, this._parents);
10844         }
10845
10846         function styleNull(name, interpolate) {
10847           var string00,
10848               string10,
10849               interpolate0;
10850           return function() {
10851             var string0 = styleValue(this, name),
10852                 string1 = (this.style.removeProperty(name), styleValue(this, name));
10853             return string0 === string1 ? null
10854                 : string0 === string00 && string1 === string10 ? interpolate0
10855                 : interpolate0 = interpolate(string00 = string0, string10 = string1);
10856           };
10857         }
10858
10859         function styleRemove$1(name) {
10860           return function() {
10861             this.style.removeProperty(name);
10862           };
10863         }
10864
10865         function styleConstant$1(name, interpolate, value1) {
10866           var string00,
10867               string1 = value1 + "",
10868               interpolate0;
10869           return function() {
10870             var string0 = styleValue(this, name);
10871             return string0 === string1 ? null
10872                 : string0 === string00 ? interpolate0
10873                 : interpolate0 = interpolate(string00 = string0, value1);
10874           };
10875         }
10876
10877         function styleFunction$1(name, interpolate, value) {
10878           var string00,
10879               string10,
10880               interpolate0;
10881           return function() {
10882             var string0 = styleValue(this, name),
10883                 value1 = value(this),
10884                 string1 = value1 + "";
10885             if (value1 == null) { string1 = value1 = (this.style.removeProperty(name), styleValue(this, name)); }
10886             return string0 === string1 ? null
10887                 : string0 === string00 && string1 === string10 ? interpolate0
10888                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
10889           };
10890         }
10891
10892         function styleMaybeRemove(id, name) {
10893           var on0, on1, listener0, key = "style." + name, event = "end." + key, remove;
10894           return function() {
10895             var schedule = set$1(this, id),
10896                 on = schedule.on,
10897                 listener = schedule.value[key] == null ? remove || (remove = styleRemove$1(name)) : undefined;
10898
10899             // If this node shared a dispatch with the previous node,
10900             // just assign the updated shared dispatch and we’re done!
10901             // Otherwise, copy-on-write.
10902             if (on !== on0 || listener0 !== listener) { (on1 = (on0 = on).copy()).on(event, listener0 = listener); }
10903
10904             schedule.on = on1;
10905           };
10906         }
10907
10908         function transition_style(name, value, priority) {
10909           var i = (name += "") === "transform" ? interpolateTransformCss : interpolate;
10910           return value == null ? this
10911               .styleTween(name, styleNull(name, i))
10912               .on("end.style." + name, styleRemove$1(name))
10913             : typeof value === "function" ? this
10914               .styleTween(name, styleFunction$1(name, i, tweenValue(this, "style." + name, value)))
10915               .each(styleMaybeRemove(this._id, name))
10916             : this
10917               .styleTween(name, styleConstant$1(name, i, value), priority)
10918               .on("end.style." + name, null);
10919         }
10920
10921         function styleInterpolate(name, i, priority) {
10922           return function(t) {
10923             this.style.setProperty(name, i.call(this, t), priority);
10924           };
10925         }
10926
10927         function styleTween(name, value, priority) {
10928           var t, i0;
10929           function tween() {
10930             var i = value.apply(this, arguments);
10931             if (i !== i0) { t = (i0 = i) && styleInterpolate(name, i, priority); }
10932             return t;
10933           }
10934           tween._value = value;
10935           return tween;
10936         }
10937
10938         function transition_styleTween(name, value, priority) {
10939           var key = "style." + (name += "");
10940           if (arguments.length < 2) { return (key = this.tween(key)) && key._value; }
10941           if (value == null) { return this.tween(key, null); }
10942           if (typeof value !== "function") { throw new Error; }
10943           return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
10944         }
10945
10946         function textConstant$1(value) {
10947           return function() {
10948             this.textContent = value;
10949           };
10950         }
10951
10952         function textFunction$1(value) {
10953           return function() {
10954             var value1 = value(this);
10955             this.textContent = value1 == null ? "" : value1;
10956           };
10957         }
10958
10959         function transition_text(value) {
10960           return this.tween("text", typeof value === "function"
10961               ? textFunction$1(tweenValue(this, "text", value))
10962               : textConstant$1(value == null ? "" : value + ""));
10963         }
10964
10965         function textInterpolate(i) {
10966           return function(t) {
10967             this.textContent = i.call(this, t);
10968           };
10969         }
10970
10971         function textTween(value) {
10972           var t0, i0;
10973           function tween() {
10974             var i = value.apply(this, arguments);
10975             if (i !== i0) { t0 = (i0 = i) && textInterpolate(i); }
10976             return t0;
10977           }
10978           tween._value = value;
10979           return tween;
10980         }
10981
10982         function transition_textTween(value) {
10983           var key = "text";
10984           if (arguments.length < 1) { return (key = this.tween(key)) && key._value; }
10985           if (value == null) { return this.tween(key, null); }
10986           if (typeof value !== "function") { throw new Error; }
10987           return this.tween(key, textTween(value));
10988         }
10989
10990         function transition_transition() {
10991           var name = this._name,
10992               id0 = this._id,
10993               id1 = newId();
10994
10995           for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
10996             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
10997               if (node = group[i]) {
10998                 var inherit = get$2(node, id0);
10999                 schedule(node, name, id1, i, group, {
11000                   time: inherit.time + inherit.delay + inherit.duration,
11001                   delay: 0,
11002                   duration: inherit.duration,
11003                   ease: inherit.ease
11004                 });
11005               }
11006             }
11007           }
11008
11009           return new Transition(groups, this._parents, name, id1);
11010         }
11011
11012         function transition_end() {
11013           var on0, on1, that = this, id = that._id, size = that.size();
11014           return new Promise(function(resolve, reject) {
11015             var cancel = {value: reject},
11016                 end = {value: function() { if (--size === 0) { resolve(); } }};
11017
11018             that.each(function() {
11019               var schedule = set$1(this, id),
11020                   on = schedule.on;
11021
11022               // If this node shared a dispatch with the previous node,
11023               // just assign the updated shared dispatch and we’re done!
11024               // Otherwise, copy-on-write.
11025               if (on !== on0) {
11026                 on1 = (on0 = on).copy();
11027                 on1._.cancel.push(cancel);
11028                 on1._.interrupt.push(cancel);
11029                 on1._.end.push(end);
11030               }
11031
11032               schedule.on = on1;
11033             });
11034           });
11035         }
11036
11037         var id$3 = 0;
11038
11039         function Transition(groups, parents, name, id) {
11040           this._groups = groups;
11041           this._parents = parents;
11042           this._name = name;
11043           this._id = id;
11044         }
11045
11046         function transition(name) {
11047           return selection().transition(name);
11048         }
11049
11050         function newId() {
11051           return ++id$3;
11052         }
11053
11054         var selection_prototype = selection.prototype;
11055
11056         Transition.prototype = transition.prototype = {
11057           constructor: Transition,
11058           select: transition_select,
11059           selectAll: transition_selectAll,
11060           filter: transition_filter,
11061           merge: transition_merge,
11062           selection: transition_selection,
11063           transition: transition_transition,
11064           call: selection_prototype.call,
11065           nodes: selection_prototype.nodes,
11066           node: selection_prototype.node,
11067           size: selection_prototype.size,
11068           empty: selection_prototype.empty,
11069           each: selection_prototype.each,
11070           on: transition_on,
11071           attr: transition_attr,
11072           attrTween: transition_attrTween,
11073           style: transition_style,
11074           styleTween: transition_styleTween,
11075           text: transition_text,
11076           textTween: transition_textTween,
11077           remove: transition_remove,
11078           tween: transition_tween,
11079           delay: transition_delay,
11080           duration: transition_duration,
11081           ease: transition_ease,
11082           end: transition_end
11083         };
11084
11085         function linear$1(t) {
11086           return +t;
11087         }
11088
11089         function quadIn(t) {
11090           return t * t;
11091         }
11092
11093         function quadOut(t) {
11094           return t * (2 - t);
11095         }
11096
11097         function quadInOut(t) {
11098           return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
11099         }
11100
11101         function cubicIn(t) {
11102           return t * t * t;
11103         }
11104
11105         function cubicOut(t) {
11106           return --t * t * t + 1;
11107         }
11108
11109         function cubicInOut(t) {
11110           return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
11111         }
11112
11113         var exponent = 3;
11114
11115         var polyIn = (function custom(e) {
11116           e = +e;
11117
11118           function polyIn(t) {
11119             return Math.pow(t, e);
11120           }
11121
11122           polyIn.exponent = custom;
11123
11124           return polyIn;
11125         })(exponent);
11126
11127         var polyOut = (function custom(e) {
11128           e = +e;
11129
11130           function polyOut(t) {
11131             return 1 - Math.pow(1 - t, e);
11132           }
11133
11134           polyOut.exponent = custom;
11135
11136           return polyOut;
11137         })(exponent);
11138
11139         var polyInOut = (function custom(e) {
11140           e = +e;
11141
11142           function polyInOut(t) {
11143             return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
11144           }
11145
11146           polyInOut.exponent = custom;
11147
11148           return polyInOut;
11149         })(exponent);
11150
11151         var pi = Math.PI,
11152             halfPi = pi / 2;
11153
11154         function sinIn(t) {
11155           return 1 - Math.cos(t * halfPi);
11156         }
11157
11158         function sinOut(t) {
11159           return Math.sin(t * halfPi);
11160         }
11161
11162         function sinInOut(t) {
11163           return (1 - Math.cos(pi * t)) / 2;
11164         }
11165
11166         function expIn(t) {
11167           return Math.pow(2, 10 * t - 10);
11168         }
11169
11170         function expOut(t) {
11171           return 1 - Math.pow(2, -10 * t);
11172         }
11173
11174         function expInOut(t) {
11175           return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
11176         }
11177
11178         function circleIn(t) {
11179           return 1 - Math.sqrt(1 - t * t);
11180         }
11181
11182         function circleOut(t) {
11183           return Math.sqrt(1 - --t * t);
11184         }
11185
11186         function circleInOut(t) {
11187           return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
11188         }
11189
11190         var b1 = 4 / 11,
11191             b2 = 6 / 11,
11192             b3 = 8 / 11,
11193             b4 = 3 / 4,
11194             b5 = 9 / 11,
11195             b6 = 10 / 11,
11196             b7 = 15 / 16,
11197             b8 = 21 / 22,
11198             b9 = 63 / 64,
11199             b0 = 1 / b1 / b1;
11200
11201         function bounceIn(t) {
11202           return 1 - bounceOut(1 - t);
11203         }
11204
11205         function bounceOut(t) {
11206           return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
11207         }
11208
11209         function bounceInOut(t) {
11210           return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
11211         }
11212
11213         var overshoot = 1.70158;
11214
11215         var backIn = (function custom(s) {
11216           s = +s;
11217
11218           function backIn(t) {
11219             return t * t * ((s + 1) * t - s);
11220           }
11221
11222           backIn.overshoot = custom;
11223
11224           return backIn;
11225         })(overshoot);
11226
11227         var backOut = (function custom(s) {
11228           s = +s;
11229
11230           function backOut(t) {
11231             return --t * t * ((s + 1) * t + s) + 1;
11232           }
11233
11234           backOut.overshoot = custom;
11235
11236           return backOut;
11237         })(overshoot);
11238
11239         var backInOut = (function custom(s) {
11240           s = +s;
11241
11242           function backInOut(t) {
11243             return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
11244           }
11245
11246           backInOut.overshoot = custom;
11247
11248           return backInOut;
11249         })(overshoot);
11250
11251         var tau = 2 * Math.PI,
11252             amplitude = 1,
11253             period = 0.3;
11254
11255         var elasticIn = (function custom(a, p) {
11256           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
11257
11258           function elasticIn(t) {
11259             return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
11260           }
11261
11262           elasticIn.amplitude = function(a) { return custom(a, p * tau); };
11263           elasticIn.period = function(p) { return custom(a, p); };
11264
11265           return elasticIn;
11266         })(amplitude, period);
11267
11268         var elasticOut = (function custom(a, p) {
11269           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
11270
11271           function elasticOut(t) {
11272             return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
11273           }
11274
11275           elasticOut.amplitude = function(a) { return custom(a, p * tau); };
11276           elasticOut.period = function(p) { return custom(a, p); };
11277
11278           return elasticOut;
11279         })(amplitude, period);
11280
11281         var elasticInOut = (function custom(a, p) {
11282           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
11283
11284           function elasticInOut(t) {
11285             return ((t = t * 2 - 1) < 0
11286                 ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
11287                 : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
11288           }
11289
11290           elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
11291           elasticInOut.period = function(p) { return custom(a, p); };
11292
11293           return elasticInOut;
11294         })(amplitude, period);
11295
11296         var defaultTiming = {
11297           time: null, // Set on use.
11298           delay: 0,
11299           duration: 250,
11300           ease: cubicInOut
11301         };
11302
11303         function inherit(node, id) {
11304           var timing;
11305           while (!(timing = node.__transition) || !(timing = timing[id])) {
11306             if (!(node = node.parentNode)) {
11307               return defaultTiming.time = now(), defaultTiming;
11308             }
11309           }
11310           return timing;
11311         }
11312
11313         function selection_transition(name) {
11314           var id,
11315               timing;
11316
11317           if (name instanceof Transition) {
11318             id = name._id, name = name._name;
11319           } else {
11320             id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
11321           }
11322
11323           for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
11324             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
11325               if (node = group[i]) {
11326                 schedule(node, name, id, i, group, timing || inherit(node, id));
11327               }
11328             }
11329           }
11330
11331           return new Transition(groups, this._parents, name, id);
11332         }
11333
11334         selection.prototype.interrupt = selection_interrupt;
11335         selection.prototype.transition = selection_transition;
11336
11337         var root$2 = [null];
11338
11339         function active(node, name) {
11340           var schedules = node.__transition,
11341               schedule,
11342               i;
11343
11344           if (schedules) {
11345             name = name == null ? null : name + "";
11346             for (i in schedules) {
11347               if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
11348                 return new Transition([[node]], root$2, name, +i);
11349               }
11350             }
11351           }
11352
11353           return null;
11354         }
11355
11356         function constant$4(x) {
11357           return function() {
11358             return x;
11359           };
11360         }
11361
11362         function BrushEvent(target, type, selection) {
11363           this.target = target;
11364           this.type = type;
11365           this.selection = selection;
11366         }
11367
11368         function nopropagation$1() {
11369           event.stopImmediatePropagation();
11370         }
11371
11372         function noevent$1() {
11373           event.preventDefault();
11374           event.stopImmediatePropagation();
11375         }
11376
11377         var MODE_DRAG = {name: "drag"},
11378             MODE_SPACE = {name: "space"},
11379             MODE_HANDLE = {name: "handle"},
11380             MODE_CENTER = {name: "center"};
11381
11382         function number1(e) {
11383           return [+e[0], +e[1]];
11384         }
11385
11386         function number2(e) {
11387           return [number1(e[0]), number1(e[1])];
11388         }
11389
11390         function toucher(identifier) {
11391           return function(target) {
11392             return touch(target, event.touches, identifier);
11393           };
11394         }
11395
11396         var X = {
11397           name: "x",
11398           handles: ["w", "e"].map(type),
11399           input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },
11400           output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
11401         };
11402
11403         var Y = {
11404           name: "y",
11405           handles: ["n", "s"].map(type),
11406           input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },
11407           output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
11408         };
11409
11410         var XY = {
11411           name: "xy",
11412           handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type),
11413           input: function(xy) { return xy == null ? null : number2(xy); },
11414           output: function(xy) { return xy; }
11415         };
11416
11417         var cursors = {
11418           overlay: "crosshair",
11419           selection: "move",
11420           n: "ns-resize",
11421           e: "ew-resize",
11422           s: "ns-resize",
11423           w: "ew-resize",
11424           nw: "nwse-resize",
11425           ne: "nesw-resize",
11426           se: "nwse-resize",
11427           sw: "nesw-resize"
11428         };
11429
11430         var flipX = {
11431           e: "w",
11432           w: "e",
11433           nw: "ne",
11434           ne: "nw",
11435           se: "sw",
11436           sw: "se"
11437         };
11438
11439         var flipY = {
11440           n: "s",
11441           s: "n",
11442           nw: "sw",
11443           ne: "se",
11444           se: "ne",
11445           sw: "nw"
11446         };
11447
11448         var signsX = {
11449           overlay: +1,
11450           selection: +1,
11451           n: null,
11452           e: +1,
11453           s: null,
11454           w: -1,
11455           nw: -1,
11456           ne: +1,
11457           se: +1,
11458           sw: -1
11459         };
11460
11461         var signsY = {
11462           overlay: +1,
11463           selection: +1,
11464           n: -1,
11465           e: null,
11466           s: +1,
11467           w: null,
11468           nw: -1,
11469           ne: -1,
11470           se: +1,
11471           sw: +1
11472         };
11473
11474         function type(t) {
11475           return {type: t};
11476         }
11477
11478         // Ignore right-click, since that should open the context menu.
11479         function defaultFilter$1() {
11480           return !event.ctrlKey && !event.button;
11481         }
11482
11483         function defaultExtent() {
11484           var svg = this.ownerSVGElement || this;
11485           if (svg.hasAttribute("viewBox")) {
11486             svg = svg.viewBox.baseVal;
11487             return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];
11488           }
11489           return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
11490         }
11491
11492         function defaultTouchable$1() {
11493           return navigator.maxTouchPoints || ("ontouchstart" in this);
11494         }
11495
11496         // Like d3.local, but with the name “__brush” rather than auto-generated.
11497         function local$1(node) {
11498           while (!node.__brush) { if (!(node = node.parentNode)) { return; } }
11499           return node.__brush;
11500         }
11501
11502         function empty$1(extent) {
11503           return extent[0][0] === extent[1][0]
11504               || extent[0][1] === extent[1][1];
11505         }
11506
11507         function brushSelection(node) {
11508           var state = node.__brush;
11509           return state ? state.dim.output(state.selection) : null;
11510         }
11511
11512         function brushX() {
11513           return brush$1(X);
11514         }
11515
11516         function brushY() {
11517           return brush$1(Y);
11518         }
11519
11520         function brush() {
11521           return brush$1(XY);
11522         }
11523
11524         function brush$1(dim) {
11525           var extent = defaultExtent,
11526               filter = defaultFilter$1,
11527               touchable = defaultTouchable$1,
11528               keys = true,
11529               listeners = dispatch("start", "brush", "end"),
11530               handleSize = 6,
11531               touchending;
11532
11533           function brush(group) {
11534             var overlay = group
11535                 .property("__brush", initialize)
11536               .selectAll(".overlay")
11537               .data([type("overlay")]);
11538
11539             overlay.enter().append("rect")
11540                 .attr("class", "overlay")
11541                 .attr("pointer-events", "all")
11542                 .attr("cursor", cursors.overlay)
11543               .merge(overlay)
11544                 .each(function() {
11545                   var extent = local$1(this).extent;
11546                   d3_select(this)
11547                       .attr("x", extent[0][0])
11548                       .attr("y", extent[0][1])
11549                       .attr("width", extent[1][0] - extent[0][0])
11550                       .attr("height", extent[1][1] - extent[0][1]);
11551                 });
11552
11553             group.selectAll(".selection")
11554               .data([type("selection")])
11555               .enter().append("rect")
11556                 .attr("class", "selection")
11557                 .attr("cursor", cursors.selection)
11558                 .attr("fill", "#777")
11559                 .attr("fill-opacity", 0.3)
11560                 .attr("stroke", "#fff")
11561                 .attr("shape-rendering", "crispEdges");
11562
11563             var handle = group.selectAll(".handle")
11564               .data(dim.handles, function(d) { return d.type; });
11565
11566             handle.exit().remove();
11567
11568             handle.enter().append("rect")
11569                 .attr("class", function(d) { return "handle handle--" + d.type; })
11570                 .attr("cursor", function(d) { return cursors[d.type]; });
11571
11572             group
11573                 .each(redraw)
11574                 .attr("fill", "none")
11575                 .attr("pointer-events", "all")
11576                 .on("mousedown.brush", started)
11577               .filter(touchable)
11578                 .on("touchstart.brush", started)
11579                 .on("touchmove.brush", touchmoved)
11580                 .on("touchend.brush touchcancel.brush", touchended)
11581                 .style("touch-action", "none")
11582                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
11583           }
11584
11585           brush.move = function(group, selection) {
11586             if (group.selection) {
11587               group
11588                   .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
11589                   .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
11590                   .tween("brush", function() {
11591                     var that = this,
11592                         state = that.__brush,
11593                         emit = emitter(that, arguments),
11594                         selection0 = state.selection,
11595                         selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),
11596                         i = d3_interpolate(selection0, selection1);
11597
11598                     function tween(t) {
11599                       state.selection = t === 1 && selection1 === null ? null : i(t);
11600                       redraw.call(that);
11601                       emit.brush();
11602                     }
11603
11604                     return selection0 !== null && selection1 !== null ? tween : tween(1);
11605                   });
11606             } else {
11607               group
11608                   .each(function() {
11609                     var that = this,
11610                         args = arguments,
11611                         state = that.__brush,
11612                         selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),
11613                         emit = emitter(that, args).beforestart();
11614
11615                     interrupt(that);
11616                     state.selection = selection1 === null ? null : selection1;
11617                     redraw.call(that);
11618                     emit.start().brush().end();
11619                   });
11620             }
11621           };
11622
11623           brush.clear = function(group) {
11624             brush.move(group, null);
11625           };
11626
11627           function redraw() {
11628             var group = d3_select(this),
11629                 selection = local$1(this).selection;
11630
11631             if (selection) {
11632               group.selectAll(".selection")
11633                   .style("display", null)
11634                   .attr("x", selection[0][0])
11635                   .attr("y", selection[0][1])
11636                   .attr("width", selection[1][0] - selection[0][0])
11637                   .attr("height", selection[1][1] - selection[0][1]);
11638
11639               group.selectAll(".handle")
11640                   .style("display", null)
11641                   .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })
11642                   .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })
11643                   .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })
11644                   .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });
11645             }
11646
11647             else {
11648               group.selectAll(".selection,.handle")
11649                   .style("display", "none")
11650                   .attr("x", null)
11651                   .attr("y", null)
11652                   .attr("width", null)
11653                   .attr("height", null);
11654             }
11655           }
11656
11657           function emitter(that, args, clean) {
11658             return (!clean && that.__brush.emitter) || new Emitter(that, args);
11659           }
11660
11661           function Emitter(that, args) {
11662             this.that = that;
11663             this.args = args;
11664             this.state = that.__brush;
11665             this.active = 0;
11666           }
11667
11668           Emitter.prototype = {
11669             beforestart: function() {
11670               if (++this.active === 1) { this.state.emitter = this, this.starting = true; }
11671               return this;
11672             },
11673             start: function() {
11674               if (this.starting) { this.starting = false, this.emit("start"); }
11675               else { this.emit("brush"); }
11676               return this;
11677             },
11678             brush: function() {
11679               this.emit("brush");
11680               return this;
11681             },
11682             end: function() {
11683               if (--this.active === 0) { delete this.state.emitter, this.emit("end"); }
11684               return this;
11685             },
11686             emit: function(type) {
11687               customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
11688             }
11689           };
11690
11691           function started() {
11692             if (touchending && !event.touches) { return; }
11693             if (!filter.apply(this, arguments)) { return; }
11694
11695             var that = this,
11696                 type = event.target.__data__.type,
11697                 mode = (keys && event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),
11698                 signX = dim === Y ? null : signsX[type],
11699                 signY = dim === X ? null : signsY[type],
11700                 state = local$1(that),
11701                 extent = state.extent,
11702                 selection = state.selection,
11703                 W = extent[0][0], w0, w1,
11704                 N = extent[0][1], n0, n1,
11705                 E = extent[1][0], e0, e1,
11706                 S = extent[1][1], s0, s1,
11707                 dx = 0,
11708                 dy = 0,
11709                 moving,
11710                 shifting = signX && signY && keys && event.shiftKey,
11711                 lockX,
11712                 lockY,
11713                 pointer = event.touches ? toucher(event.changedTouches[0].identifier) : d3_mouse,
11714                 point0 = pointer(that),
11715                 point = point0,
11716                 emit = emitter(that, arguments, true).beforestart();
11717
11718             if (type === "overlay") {
11719               if (selection) { moving = true; }
11720               state.selection = selection = [
11721                 [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
11722                 [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
11723               ];
11724             } else {
11725               w0 = selection[0][0];
11726               n0 = selection[0][1];
11727               e0 = selection[1][0];
11728               s0 = selection[1][1];
11729             }
11730
11731             w1 = w0;
11732             n1 = n0;
11733             e1 = e0;
11734             s1 = s0;
11735
11736             var group = d3_select(that)
11737                 .attr("pointer-events", "none");
11738
11739             var overlay = group.selectAll(".overlay")
11740                 .attr("cursor", cursors[type]);
11741
11742             if (event.touches) {
11743               emit.moved = moved;
11744               emit.ended = ended;
11745             } else {
11746               var view = d3_select(event.view)
11747                   .on("mousemove.brush", moved, true)
11748                   .on("mouseup.brush", ended, true);
11749               if (keys) { view
11750                   .on("keydown.brush", keydowned, true)
11751                   .on("keyup.brush", keyupped, true); }
11752
11753               dragDisable(event.view);
11754             }
11755
11756             nopropagation$1();
11757             interrupt(that);
11758             redraw.call(that);
11759             emit.start();
11760
11761             function moved() {
11762               var point1 = pointer(that);
11763               if (shifting && !lockX && !lockY) {
11764                 if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) { lockY = true; }
11765                 else { lockX = true; }
11766               }
11767               point = point1;
11768               moving = true;
11769               noevent$1();
11770               move();
11771             }
11772
11773             function move() {
11774               var t;
11775
11776               dx = point[0] - point0[0];
11777               dy = point[1] - point0[1];
11778
11779               switch (mode) {
11780                 case MODE_SPACE:
11781                 case MODE_DRAG: {
11782                   if (signX) { dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; }
11783                   if (signY) { dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; }
11784                   break;
11785                 }
11786                 case MODE_HANDLE: {
11787                   if (signX < 0) { dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; }
11788                   else if (signX > 0) { dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; }
11789                   if (signY < 0) { dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; }
11790                   else if (signY > 0) { dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; }
11791                   break;
11792                 }
11793                 case MODE_CENTER: {
11794                   if (signX) { w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); }
11795                   if (signY) { n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); }
11796                   break;
11797                 }
11798               }
11799
11800               if (e1 < w1) {
11801                 signX *= -1;
11802                 t = w0, w0 = e0, e0 = t;
11803                 t = w1, w1 = e1, e1 = t;
11804                 if (type in flipX) { overlay.attr("cursor", cursors[type = flipX[type]]); }
11805               }
11806
11807               if (s1 < n1) {
11808                 signY *= -1;
11809                 t = n0, n0 = s0, s0 = t;
11810                 t = n1, n1 = s1, s1 = t;
11811                 if (type in flipY) { overlay.attr("cursor", cursors[type = flipY[type]]); }
11812               }
11813
11814               if (state.selection) { selection = state.selection; } // May be set by brush.move!
11815               if (lockX) { w1 = selection[0][0], e1 = selection[1][0]; }
11816               if (lockY) { n1 = selection[0][1], s1 = selection[1][1]; }
11817
11818               if (selection[0][0] !== w1
11819                   || selection[0][1] !== n1
11820                   || selection[1][0] !== e1
11821                   || selection[1][1] !== s1) {
11822                 state.selection = [[w1, n1], [e1, s1]];
11823                 redraw.call(that);
11824                 emit.brush();
11825               }
11826             }
11827
11828             function ended() {
11829               nopropagation$1();
11830               if (event.touches) {
11831                 if (event.touches.length) { return; }
11832                 if (touchending) { clearTimeout(touchending); }
11833                 touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
11834               } else {
11835                 yesdrag(event.view, moving);
11836                 view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
11837               }
11838               group.attr("pointer-events", "all");
11839               overlay.attr("cursor", cursors.overlay);
11840               if (state.selection) { selection = state.selection; } // May be set by brush.move (on start)!
11841               if (empty$1(selection)) { state.selection = null, redraw.call(that); }
11842               emit.end();
11843             }
11844
11845             function keydowned() {
11846               switch (event.keyCode) {
11847                 case 16: { // SHIFT
11848                   shifting = signX && signY;
11849                   break;
11850                 }
11851                 case 18: { // ALT
11852                   if (mode === MODE_HANDLE) {
11853                     if (signX) { e0 = e1 - dx * signX, w0 = w1 + dx * signX; }
11854                     if (signY) { s0 = s1 - dy * signY, n0 = n1 + dy * signY; }
11855                     mode = MODE_CENTER;
11856                     move();
11857                   }
11858                   break;
11859                 }
11860                 case 32: { // SPACE; takes priority over ALT
11861                   if (mode === MODE_HANDLE || mode === MODE_CENTER) {
11862                     if (signX < 0) { e0 = e1 - dx; } else if (signX > 0) { w0 = w1 - dx; }
11863                     if (signY < 0) { s0 = s1 - dy; } else if (signY > 0) { n0 = n1 - dy; }
11864                     mode = MODE_SPACE;
11865                     overlay.attr("cursor", cursors.selection);
11866                     move();
11867                   }
11868                   break;
11869                 }
11870                 default: return;
11871               }
11872               noevent$1();
11873             }
11874
11875             function keyupped() {
11876               switch (event.keyCode) {
11877                 case 16: { // SHIFT
11878                   if (shifting) {
11879                     lockX = lockY = shifting = false;
11880                     move();
11881                   }
11882                   break;
11883                 }
11884                 case 18: { // ALT
11885                   if (mode === MODE_CENTER) {
11886                     if (signX < 0) { e0 = e1; } else if (signX > 0) { w0 = w1; }
11887                     if (signY < 0) { s0 = s1; } else if (signY > 0) { n0 = n1; }
11888                     mode = MODE_HANDLE;
11889                     move();
11890                   }
11891                   break;
11892                 }
11893                 case 32: { // SPACE
11894                   if (mode === MODE_SPACE) {
11895                     if (event.altKey) {
11896                       if (signX) { e0 = e1 - dx * signX, w0 = w1 + dx * signX; }
11897                       if (signY) { s0 = s1 - dy * signY, n0 = n1 + dy * signY; }
11898                       mode = MODE_CENTER;
11899                     } else {
11900                       if (signX < 0) { e0 = e1; } else if (signX > 0) { w0 = w1; }
11901                       if (signY < 0) { s0 = s1; } else if (signY > 0) { n0 = n1; }
11902                       mode = MODE_HANDLE;
11903                     }
11904                     overlay.attr("cursor", cursors[type]);
11905                     move();
11906                   }
11907                   break;
11908                 }
11909                 default: return;
11910               }
11911               noevent$1();
11912             }
11913           }
11914
11915           function touchmoved() {
11916             emitter(this, arguments).moved();
11917           }
11918
11919           function touchended() {
11920             emitter(this, arguments).ended();
11921           }
11922
11923           function initialize() {
11924             var state = this.__brush || {selection: null};
11925             state.extent = number2(extent.apply(this, arguments));
11926             state.dim = dim;
11927             return state;
11928           }
11929
11930           brush.extent = function(_) {
11931             return arguments.length ? (extent = typeof _ === "function" ? _ : constant$4(number2(_)), brush) : extent;
11932           };
11933
11934           brush.filter = function(_) {
11935             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$4(!!_), brush) : filter;
11936           };
11937
11938           brush.touchable = function(_) {
11939             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$4(!!_), brush) : touchable;
11940           };
11941
11942           brush.handleSize = function(_) {
11943             return arguments.length ? (handleSize = +_, brush) : handleSize;
11944           };
11945
11946           brush.keyModifiers = function(_) {
11947             return arguments.length ? (keys = !!_, brush) : keys;
11948           };
11949
11950           brush.on = function() {
11951             var value = listeners.on.apply(listeners, arguments);
11952             return value === listeners ? brush : value;
11953           };
11954
11955           return brush;
11956         }
11957
11958         var cos = Math.cos;
11959         var sin = Math.sin;
11960         var pi$1 = Math.PI;
11961         var halfPi$1 = pi$1 / 2;
11962         var tau$1 = pi$1 * 2;
11963         var max$3 = Math.max;
11964
11965         function compareValue(compare) {
11966           return function(a, b) {
11967             return compare(
11968               a.source.value + a.target.value,
11969               b.source.value + b.target.value
11970             );
11971           };
11972         }
11973
11974         function chord() {
11975           var padAngle = 0,
11976               sortGroups = null,
11977               sortSubgroups = null,
11978               sortChords = null;
11979
11980           function chord(matrix) {
11981             var n = matrix.length,
11982                 groupSums = [],
11983                 groupIndex = d3_range(n),
11984                 subgroupIndex = [],
11985                 chords = [],
11986                 groups = chords.groups = new Array(n),
11987                 subgroups = new Array(n * n),
11988                 k,
11989                 x,
11990                 x0,
11991                 dx,
11992                 i,
11993                 j;
11994
11995             // Compute the sum.
11996             k = 0, i = -1; while (++i < n) {
11997               x = 0, j = -1; while (++j < n) {
11998                 x += matrix[i][j];
11999               }
12000               groupSums.push(x);
12001               subgroupIndex.push(d3_range(n));
12002               k += x;
12003             }
12004
12005             // Sort groups…
12006             if (sortGroups) { groupIndex.sort(function(a, b) {
12007               return sortGroups(groupSums[a], groupSums[b]);
12008             }); }
12009
12010             // Sort subgroups…
12011             if (sortSubgroups) { subgroupIndex.forEach(function(d, i) {
12012               d.sort(function(a, b) {
12013                 return sortSubgroups(matrix[i][a], matrix[i][b]);
12014               });
12015             }); }
12016
12017             // Convert the sum to scaling factor for [0, 2pi].
12018             // TODO Allow start and end angle to be specified?
12019             // TODO Allow padding to be specified as percentage?
12020             k = max$3(0, tau$1 - padAngle * n) / k;
12021             dx = k ? padAngle : tau$1 / n;
12022
12023             // Compute the start and end angle for each group and subgroup.
12024             // Note: Opera has a bug reordering object literal properties!
12025             x = 0, i = -1; while (++i < n) {
12026               x0 = x, j = -1; while (++j < n) {
12027                 var di = groupIndex[i],
12028                     dj = subgroupIndex[di][j],
12029                     v = matrix[di][dj],
12030                     a0 = x,
12031                     a1 = x += v * k;
12032                 subgroups[dj * n + di] = {
12033                   index: di,
12034                   subindex: dj,
12035                   startAngle: a0,
12036                   endAngle: a1,
12037                   value: v
12038                 };
12039               }
12040               groups[di] = {
12041                 index: di,
12042                 startAngle: x0,
12043                 endAngle: x,
12044                 value: groupSums[di]
12045               };
12046               x += dx;
12047             }
12048
12049             // Generate chords for each (non-empty) subgroup-subgroup link.
12050             i = -1; while (++i < n) {
12051               j = i - 1; while (++j < n) {
12052                 var source = subgroups[j * n + i],
12053                     target = subgroups[i * n + j];
12054                 if (source.value || target.value) {
12055                   chords.push(source.value < target.value
12056                       ? {source: target, target: source}
12057                       : {source: source, target: target});
12058                 }
12059               }
12060             }
12061
12062             return sortChords ? chords.sort(sortChords) : chords;
12063           }
12064
12065           chord.padAngle = function(_) {
12066             return arguments.length ? (padAngle = max$3(0, _), chord) : padAngle;
12067           };
12068
12069           chord.sortGroups = function(_) {
12070             return arguments.length ? (sortGroups = _, chord) : sortGroups;
12071           };
12072
12073           chord.sortSubgroups = function(_) {
12074             return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
12075           };
12076
12077           chord.sortChords = function(_) {
12078             return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
12079           };
12080
12081           return chord;
12082         }
12083
12084         var slice$6 = Array.prototype.slice;
12085
12086         function constant$5(x) {
12087           return function() {
12088             return x;
12089           };
12090         }
12091
12092         var pi$2 = Math.PI,
12093             tau$2 = 2 * pi$2,
12094             epsilon$1 = 1e-6,
12095             tauEpsilon = tau$2 - epsilon$1;
12096
12097         function Path() {
12098           this._x0 = this._y0 = // start of current subpath
12099           this._x1 = this._y1 = null; // end of current subpath
12100           this._ = "";
12101         }
12102
12103         function path() {
12104           return new Path;
12105         }
12106
12107         Path.prototype = path.prototype = {
12108           constructor: Path,
12109           moveTo: function(x, y) {
12110             this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);
12111           },
12112           closePath: function() {
12113             if (this._x1 !== null) {
12114               this._x1 = this._x0, this._y1 = this._y0;
12115               this._ += "Z";
12116             }
12117           },
12118           lineTo: function(x, y) {
12119             this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);
12120           },
12121           quadraticCurveTo: function(x1, y1, x, y) {
12122             this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
12123           },
12124           bezierCurveTo: function(x1, y1, x2, y2, x, y) {
12125             this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
12126           },
12127           arcTo: function(x1, y1, x2, y2, r) {
12128             x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
12129             var x0 = this._x1,
12130                 y0 = this._y1,
12131                 x21 = x2 - x1,
12132                 y21 = y2 - y1,
12133                 x01 = x0 - x1,
12134                 y01 = y0 - y1,
12135                 l01_2 = x01 * x01 + y01 * y01;
12136
12137             // Is the radius negative? Error.
12138             if (r < 0) { throw new Error("negative radius: " + r); }
12139
12140             // Is this path empty? Move to (x1,y1).
12141             if (this._x1 === null) {
12142               this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);
12143             }
12144
12145             // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
12146             else if (!(l01_2 > epsilon$1));
12147
12148             // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
12149             // Equivalently, is (x1,y1) coincident with (x2,y2)?
12150             // Or, is the radius zero? Line to (x1,y1).
12151             else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) {
12152               this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);
12153             }
12154
12155             // Otherwise, draw an arc!
12156             else {
12157               var x20 = x2 - x0,
12158                   y20 = y2 - y0,
12159                   l21_2 = x21 * x21 + y21 * y21,
12160                   l20_2 = x20 * x20 + y20 * y20,
12161                   l21 = Math.sqrt(l21_2),
12162                   l01 = Math.sqrt(l01_2),
12163                   l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
12164                   t01 = l / l01,
12165                   t21 = l / l21;
12166
12167               // If the start tangent is not coincident with (x0,y0), line to.
12168               if (Math.abs(t01 - 1) > epsilon$1) {
12169                 this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);
12170               }
12171
12172               this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);
12173             }
12174           },
12175           arc: function(x, y, r, a0, a1, ccw) {
12176             x = +x, y = +y, r = +r, ccw = !!ccw;
12177             var dx = r * Math.cos(a0),
12178                 dy = r * Math.sin(a0),
12179                 x0 = x + dx,
12180                 y0 = y + dy,
12181                 cw = 1 ^ ccw,
12182                 da = ccw ? a0 - a1 : a1 - a0;
12183
12184             // Is the radius negative? Error.
12185             if (r < 0) { throw new Error("negative radius: " + r); }
12186
12187             // Is this path empty? Move to (x0,y0).
12188             if (this._x1 === null) {
12189               this._ += "M" + x0 + "," + y0;
12190             }
12191
12192             // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
12193             else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) {
12194               this._ += "L" + x0 + "," + y0;
12195             }
12196
12197             // Is this arc empty? We’re done.
12198             if (!r) { return; }
12199
12200             // Does the angle go the wrong way? Flip the direction.
12201             if (da < 0) { da = da % tau$2 + tau$2; }
12202
12203             // Is this a complete circle? Draw two arcs to complete the circle.
12204             if (da > tauEpsilon) {
12205               this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
12206             }
12207
12208             // Is this arc non-empty? Draw an arc!
12209             else if (da > epsilon$1) {
12210               this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));
12211             }
12212           },
12213           rect: function(x, y, w, h) {
12214             this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z";
12215           },
12216           toString: function() {
12217             return this._;
12218           }
12219         };
12220
12221         function defaultSource(d) {
12222           return d.source;
12223         }
12224
12225         function defaultTarget(d) {
12226           return d.target;
12227         }
12228
12229         function defaultRadius(d) {
12230           return d.radius;
12231         }
12232
12233         function defaultStartAngle(d) {
12234           return d.startAngle;
12235         }
12236
12237         function defaultEndAngle(d) {
12238           return d.endAngle;
12239         }
12240
12241         function ribbon() {
12242           var source = defaultSource,
12243               target = defaultTarget,
12244               radius = defaultRadius,
12245               startAngle = defaultStartAngle,
12246               endAngle = defaultEndAngle,
12247               context = null;
12248
12249           function ribbon() {
12250             var buffer,
12251                 argv = slice$6.call(arguments),
12252                 s = source.apply(this, argv),
12253                 t = target.apply(this, argv),
12254                 sr = +radius.apply(this, (argv[0] = s, argv)),
12255                 sa0 = startAngle.apply(this, argv) - halfPi$1,
12256                 sa1 = endAngle.apply(this, argv) - halfPi$1,
12257                 sx0 = sr * cos(sa0),
12258                 sy0 = sr * sin(sa0),
12259                 tr = +radius.apply(this, (argv[0] = t, argv)),
12260                 ta0 = startAngle.apply(this, argv) - halfPi$1,
12261                 ta1 = endAngle.apply(this, argv) - halfPi$1;
12262
12263             if (!context) { context = buffer = path(); }
12264
12265             context.moveTo(sx0, sy0);
12266             context.arc(0, 0, sr, sa0, sa1);
12267             if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
12268               context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
12269               context.arc(0, 0, tr, ta0, ta1);
12270             }
12271             context.quadraticCurveTo(0, 0, sx0, sy0);
12272             context.closePath();
12273
12274             if (buffer) { return context = null, buffer + "" || null; }
12275           }
12276
12277           ribbon.radius = function(_) {
12278             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$5(+_), ribbon) : radius;
12279           };
12280
12281           ribbon.startAngle = function(_) {
12282             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : startAngle;
12283           };
12284
12285           ribbon.endAngle = function(_) {
12286             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : endAngle;
12287           };
12288
12289           ribbon.source = function(_) {
12290             return arguments.length ? (source = _, ribbon) : source;
12291           };
12292
12293           ribbon.target = function(_) {
12294             return arguments.length ? (target = _, ribbon) : target;
12295           };
12296
12297           ribbon.context = function(_) {
12298             return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
12299           };
12300
12301           return ribbon;
12302         }
12303
12304         var prefix = "$";
12305
12306         function Map$1() {}
12307
12308         Map$1.prototype = map$3.prototype = {
12309           constructor: Map$1,
12310           has: function(key) {
12311             return (prefix + key) in this;
12312           },
12313           get: function(key) {
12314             return this[prefix + key];
12315           },
12316           set: function(key, value) {
12317             this[prefix + key] = value;
12318             return this;
12319           },
12320           remove: function(key) {
12321             var property = prefix + key;
12322             return property in this && delete this[property];
12323           },
12324           clear: function() {
12325             for (var property in this) { if (property[0] === prefix) { delete this[property]; } }
12326           },
12327           keys: function() {
12328             var keys = [];
12329             for (var property in this) { if (property[0] === prefix) { keys.push(property.slice(1)); } }
12330             return keys;
12331           },
12332           values: function() {
12333             var values = [];
12334             for (var property in this) { if (property[0] === prefix) { values.push(this[property]); } }
12335             return values;
12336           },
12337           entries: function() {
12338             var entries = [];
12339             for (var property in this) { if (property[0] === prefix) { entries.push({key: property.slice(1), value: this[property]}); } }
12340             return entries;
12341           },
12342           size: function() {
12343             var size = 0;
12344             for (var property in this) { if (property[0] === prefix) { ++size; } }
12345             return size;
12346           },
12347           empty: function() {
12348             for (var property in this) { if (property[0] === prefix) { return false; } }
12349             return true;
12350           },
12351           each: function(f) {
12352             for (var property in this) { if (property[0] === prefix) { f(this[property], property.slice(1), this); } }
12353           }
12354         };
12355
12356         function map$3(object, f) {
12357           var map = new Map$1;
12358
12359           // Copy constructor.
12360           if (object instanceof Map$1) { object.each(function(value, key) { map.set(key, value); }); }
12361
12362           // Index array by numeric index or specified key function.
12363           else if (Array.isArray(object)) {
12364             var i = -1,
12365                 n = object.length,
12366                 o;
12367
12368             if (f == null) { while (++i < n) { map.set(i, object[i]); } }
12369             else { while (++i < n) { map.set(f(o = object[i], i, object), o); } }
12370           }
12371
12372           // Convert object to map.
12373           else if (object) { for (var key in object) { map.set(key, object[key]); } }
12374
12375           return map;
12376         }
12377
12378         function nest() {
12379           var keys = [],
12380               sortKeys = [],
12381               sortValues,
12382               rollup,
12383               nest;
12384
12385           function apply(array, depth, createResult, setResult) {
12386             if (depth >= keys.length) {
12387               if (sortValues != null) { array.sort(sortValues); }
12388               return rollup != null ? rollup(array) : array;
12389             }
12390
12391             var i = -1,
12392                 n = array.length,
12393                 key = keys[depth++],
12394                 keyValue,
12395                 value,
12396                 valuesByKey = map$3(),
12397                 values,
12398                 result = createResult();
12399
12400             while (++i < n) {
12401               if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
12402                 values.push(value);
12403               } else {
12404                 valuesByKey.set(keyValue, [value]);
12405               }
12406             }
12407
12408             valuesByKey.each(function(values, key) {
12409               setResult(result, key, apply(values, depth, createResult, setResult));
12410             });
12411
12412             return result;
12413           }
12414
12415           function entries(map, depth) {
12416             if (++depth > keys.length) { return map; }
12417             var array, sortKey = sortKeys[depth - 1];
12418             if (rollup != null && depth >= keys.length) { array = map.entries(); }
12419             else { array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); }
12420             return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
12421           }
12422
12423           return nest = {
12424             object: function(array) { return apply(array, 0, createObject, setObject); },
12425             map: function(array) { return apply(array, 0, createMap, setMap); },
12426             entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
12427             key: function(d) { keys.push(d); return nest; },
12428             sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
12429             sortValues: function(order) { sortValues = order; return nest; },
12430             rollup: function(f) { rollup = f; return nest; }
12431           };
12432         }
12433
12434         function createObject() {
12435           return {};
12436         }
12437
12438         function setObject(object, key, value) {
12439           object[key] = value;
12440         }
12441
12442         function createMap() {
12443           return map$3();
12444         }
12445
12446         function setMap(map, key, value) {
12447           map.set(key, value);
12448         }
12449
12450         function Set$1() {}
12451
12452         var proto = map$3.prototype;
12453
12454         Set$1.prototype = set$2.prototype = {
12455           constructor: Set$1,
12456           has: proto.has,
12457           add: function(value) {
12458             value += "";
12459             this[prefix + value] = value;
12460             return this;
12461           },
12462           remove: proto.remove,
12463           clear: proto.clear,
12464           values: proto.keys,
12465           size: proto.size,
12466           empty: proto.empty,
12467           each: proto.each
12468         };
12469
12470         function set$2(object, f) {
12471           var set = new Set$1;
12472
12473           // Copy constructor.
12474           if (object instanceof Set$1) { object.each(function(value) { set.add(value); }); }
12475
12476           // Otherwise, assume it’s an array.
12477           else if (object) {
12478             var i = -1, n = object.length;
12479             if (f == null) { while (++i < n) { set.add(object[i]); } }
12480             else { while (++i < n) { set.add(f(object[i], i, object)); } }
12481           }
12482
12483           return set;
12484         }
12485
12486         function keys$3(map) {
12487           var keys = [];
12488           for (var key in map) { keys.push(key); }
12489           return keys;
12490         }
12491
12492         function values(map) {
12493           var values = [];
12494           for (var key in map) { values.push(map[key]); }
12495           return values;
12496         }
12497
12498         function entries(map) {
12499           var entries = [];
12500           for (var key in map) { entries.push({key: key, value: map[key]}); }
12501           return entries;
12502         }
12503
12504         var array$3 = Array.prototype;
12505
12506         var slice$7 = array$3.slice;
12507
12508         function ascending$1(a, b) {
12509           return a - b;
12510         }
12511
12512         function area(ring) {
12513           var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];
12514           while (++i < n) { area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; }
12515           return area;
12516         }
12517
12518         function constant$6(x) {
12519           return function() {
12520             return x;
12521           };
12522         }
12523
12524         function contains$1(ring, hole) {
12525           var i = -1, n = hole.length, c;
12526           while (++i < n) { if (c = ringContains(ring, hole[i])) { return c; } }
12527           return 0;
12528         }
12529
12530         function ringContains(ring, point) {
12531           var x = point[0], y = point[1], contains = -1;
12532           for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {
12533             var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];
12534             if (segmentContains(pi, pj, point)) { return 0; }
12535             if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) { contains = -contains; }
12536           }
12537           return contains;
12538         }
12539
12540         function segmentContains(a, b, c) {
12541           var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);
12542         }
12543
12544         function collinear(a, b, c) {
12545           return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);
12546         }
12547
12548         function within(p, q, r) {
12549           return p <= q && q <= r || r <= q && q <= p;
12550         }
12551
12552         function noop$3() {}
12553
12554         var cases = [
12555           [],
12556           [[[1.0, 1.5], [0.5, 1.0]]],
12557           [[[1.5, 1.0], [1.0, 1.5]]],
12558           [[[1.5, 1.0], [0.5, 1.0]]],
12559           [[[1.0, 0.5], [1.5, 1.0]]],
12560           [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],
12561           [[[1.0, 0.5], [1.0, 1.5]]],
12562           [[[1.0, 0.5], [0.5, 1.0]]],
12563           [[[0.5, 1.0], [1.0, 0.5]]],
12564           [[[1.0, 1.5], [1.0, 0.5]]],
12565           [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],
12566           [[[1.5, 1.0], [1.0, 0.5]]],
12567           [[[0.5, 1.0], [1.5, 1.0]]],
12568           [[[1.0, 1.5], [1.5, 1.0]]],
12569           [[[0.5, 1.0], [1.0, 1.5]]],
12570           []
12571         ];
12572
12573         function contours() {
12574           var dx = 1,
12575               dy = 1,
12576               threshold = thresholdSturges,
12577               smooth = smoothLinear;
12578
12579           function contours(values) {
12580             var tz = threshold(values);
12581
12582             // Convert number of thresholds into uniform thresholds.
12583             if (!Array.isArray(tz)) {
12584               var domain = extent(values), start = domain[0], stop = domain[1];
12585               tz = tickStep(start, stop, tz);
12586               tz = d3_range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);
12587             } else {
12588               tz = tz.slice().sort(ascending$1);
12589             }
12590
12591             return tz.map(function(value) {
12592               return contour(values, value);
12593             });
12594           }
12595
12596           // Accumulate, smooth contour rings, assign holes to exterior rings.
12597           // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js
12598           function contour(values, value) {
12599             var polygons = [],
12600                 holes = [];
12601
12602             isorings(values, value, function(ring) {
12603               smooth(ring, values, value);
12604               if (area(ring) > 0) { polygons.push([ring]); }
12605               else { holes.push(ring); }
12606             });
12607
12608             holes.forEach(function(hole) {
12609               for (var i = 0, n = polygons.length, polygon; i < n; ++i) {
12610                 if (contains$1((polygon = polygons[i])[0], hole) !== -1) {
12611                   polygon.push(hole);
12612                   return;
12613                 }
12614               }
12615             });
12616
12617             return {
12618               type: "MultiPolygon",
12619               value: value,
12620               coordinates: polygons
12621             };
12622           }
12623
12624           // Marching squares with isolines stitched into rings.
12625           // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js
12626           function isorings(values, value, callback) {
12627             var fragmentByStart = new Array,
12628                 fragmentByEnd = new Array,
12629                 x, y, t0, t1, t2, t3;
12630
12631             // Special case for the first row (y = -1, t2 = t3 = 0).
12632             x = y = -1;
12633             t1 = values[0] >= value;
12634             cases[t1 << 1].forEach(stitch);
12635             while (++x < dx - 1) {
12636               t0 = t1, t1 = values[x + 1] >= value;
12637               cases[t0 | t1 << 1].forEach(stitch);
12638             }
12639             cases[t1 << 0].forEach(stitch);
12640
12641             // General case for the intermediate rows.
12642             while (++y < dy - 1) {
12643               x = -1;
12644               t1 = values[y * dx + dx] >= value;
12645               t2 = values[y * dx] >= value;
12646               cases[t1 << 1 | t2 << 2].forEach(stitch);
12647               while (++x < dx - 1) {
12648                 t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;
12649                 t3 = t2, t2 = values[y * dx + x + 1] >= value;
12650                 cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);
12651               }
12652               cases[t1 | t2 << 3].forEach(stitch);
12653             }
12654
12655             // Special case for the last row (y = dy - 1, t0 = t1 = 0).
12656             x = -1;
12657             t2 = values[y * dx] >= value;
12658             cases[t2 << 2].forEach(stitch);
12659             while (++x < dx - 1) {
12660               t3 = t2, t2 = values[y * dx + x + 1] >= value;
12661               cases[t2 << 2 | t3 << 3].forEach(stitch);
12662             }
12663             cases[t2 << 3].forEach(stitch);
12664
12665             function stitch(line) {
12666               var start = [line[0][0] + x, line[0][1] + y],
12667                   end = [line[1][0] + x, line[1][1] + y],
12668                   startIndex = index(start),
12669                   endIndex = index(end),
12670                   f, g;
12671               if (f = fragmentByEnd[startIndex]) {
12672                 if (g = fragmentByStart[endIndex]) {
12673                   delete fragmentByEnd[f.end];
12674                   delete fragmentByStart[g.start];
12675                   if (f === g) {
12676                     f.ring.push(end);
12677                     callback(f.ring);
12678                   } else {
12679                     fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};
12680                   }
12681                 } else {
12682                   delete fragmentByEnd[f.end];
12683                   f.ring.push(end);
12684                   fragmentByEnd[f.end = endIndex] = f;
12685                 }
12686               } else if (f = fragmentByStart[endIndex]) {
12687                 if (g = fragmentByEnd[startIndex]) {
12688                   delete fragmentByStart[f.start];
12689                   delete fragmentByEnd[g.end];
12690                   if (f === g) {
12691                     f.ring.push(end);
12692                     callback(f.ring);
12693                   } else {
12694                     fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};
12695                   }
12696                 } else {
12697                   delete fragmentByStart[f.start];
12698                   f.ring.unshift(start);
12699                   fragmentByStart[f.start = startIndex] = f;
12700                 }
12701               } else {
12702                 fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};
12703               }
12704             }
12705           }
12706
12707           function index(point) {
12708             return point[0] * 2 + point[1] * (dx + 1) * 4;
12709           }
12710
12711           function smoothLinear(ring, values, value) {
12712             ring.forEach(function(point) {
12713               var x = point[0],
12714                   y = point[1],
12715                   xt = x | 0,
12716                   yt = y | 0,
12717                   v0,
12718                   v1 = values[yt * dx + xt];
12719               if (x > 0 && x < dx && xt === x) {
12720                 v0 = values[yt * dx + xt - 1];
12721                 point[0] = x + (value - v0) / (v1 - v0) - 0.5;
12722               }
12723               if (y > 0 && y < dy && yt === y) {
12724                 v0 = values[(yt - 1) * dx + xt];
12725                 point[1] = y + (value - v0) / (v1 - v0) - 0.5;
12726               }
12727             });
12728           }
12729
12730           contours.contour = contour;
12731
12732           contours.size = function(_) {
12733             if (!arguments.length) { return [dx, dy]; }
12734             var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
12735             if (!(_0 > 0) || !(_1 > 0)) { throw new Error("invalid size"); }
12736             return dx = _0, dy = _1, contours;
12737           };
12738
12739           contours.thresholds = function(_) {
12740             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$7.call(_)) : constant$6(_), contours) : threshold;
12741           };
12742
12743           contours.smooth = function(_) {
12744             return arguments.length ? (smooth = _ ? smoothLinear : noop$3, contours) : smooth === smoothLinear;
12745           };
12746
12747           return contours;
12748         }
12749
12750         // TODO Optimize edge cases.
12751         // TODO Optimize index calculation.
12752         // TODO Optimize arguments.
12753         function blurX(source, target, r) {
12754           var n = source.width,
12755               m = source.height,
12756               w = (r << 1) + 1;
12757           for (var j = 0; j < m; ++j) {
12758             for (var i = 0, sr = 0; i < n + r; ++i) {
12759               if (i < n) {
12760                 sr += source.data[i + j * n];
12761               }
12762               if (i >= r) {
12763                 if (i >= w) {
12764                   sr -= source.data[i - w + j * n];
12765                 }
12766                 target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);
12767               }
12768             }
12769           }
12770         }
12771
12772         // TODO Optimize edge cases.
12773         // TODO Optimize index calculation.
12774         // TODO Optimize arguments.
12775         function blurY(source, target, r) {
12776           var n = source.width,
12777               m = source.height,
12778               w = (r << 1) + 1;
12779           for (var i = 0; i < n; ++i) {
12780             for (var j = 0, sr = 0; j < m + r; ++j) {
12781               if (j < m) {
12782                 sr += source.data[i + j * n];
12783               }
12784               if (j >= r) {
12785                 if (j >= w) {
12786                   sr -= source.data[i + (j - w) * n];
12787                 }
12788                 target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);
12789               }
12790             }
12791           }
12792         }
12793
12794         function defaultX(d) {
12795           return d[0];
12796         }
12797
12798         function defaultY(d) {
12799           return d[1];
12800         }
12801
12802         function defaultWeight() {
12803           return 1;
12804         }
12805
12806         function density() {
12807           var x = defaultX,
12808               y = defaultY,
12809               weight = defaultWeight,
12810               dx = 960,
12811               dy = 500,
12812               r = 20, // blur radius
12813               k = 2, // log2(grid cell size)
12814               o = r * 3, // grid offset, to pad for blur
12815               n = (dx + o * 2) >> k, // grid width
12816               m = (dy + o * 2) >> k, // grid height
12817               threshold = constant$6(20);
12818
12819           function density(data) {
12820             var values0 = new Float32Array(n * m),
12821                 values1 = new Float32Array(n * m);
12822
12823             data.forEach(function(d, i, data) {
12824               var xi = (+x(d, i, data) + o) >> k,
12825                   yi = (+y(d, i, data) + o) >> k,
12826                   wi = +weight(d, i, data);
12827               if (xi >= 0 && xi < n && yi >= 0 && yi < m) {
12828                 values0[xi + yi * n] += wi;
12829               }
12830             });
12831
12832             // TODO Optimize.
12833             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
12834             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
12835             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
12836             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
12837             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
12838             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
12839
12840             var tz = threshold(values0);
12841
12842             // Convert number of thresholds into uniform thresholds.
12843             if (!Array.isArray(tz)) {
12844               var stop = max$2(values0);
12845               tz = tickStep(0, stop, tz);
12846               tz = d3_range(0, Math.floor(stop / tz) * tz, tz);
12847               tz.shift();
12848             }
12849
12850             return contours()
12851                 .thresholds(tz)
12852                 .size([n, m])
12853               (values0)
12854                 .map(transform);
12855           }
12856
12857           function transform(geometry) {
12858             geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.
12859             geometry.coordinates.forEach(transformPolygon);
12860             return geometry;
12861           }
12862
12863           function transformPolygon(coordinates) {
12864             coordinates.forEach(transformRing);
12865           }
12866
12867           function transformRing(coordinates) {
12868             coordinates.forEach(transformPoint);
12869           }
12870
12871           // TODO Optimize.
12872           function transformPoint(coordinates) {
12873             coordinates[0] = coordinates[0] * Math.pow(2, k) - o;
12874             coordinates[1] = coordinates[1] * Math.pow(2, k) - o;
12875           }
12876
12877           function resize() {
12878             o = r * 3;
12879             n = (dx + o * 2) >> k;
12880             m = (dy + o * 2) >> k;
12881             return density;
12882           }
12883
12884           density.x = function(_) {
12885             return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), density) : x;
12886           };
12887
12888           density.y = function(_) {
12889             return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), density) : y;
12890           };
12891
12892           density.weight = function(_) {
12893             return arguments.length ? (weight = typeof _ === "function" ? _ : constant$6(+_), density) : weight;
12894           };
12895
12896           density.size = function(_) {
12897             if (!arguments.length) { return [dx, dy]; }
12898             var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
12899             if (!(_0 >= 0) && !(_0 >= 0)) { throw new Error("invalid size"); }
12900             return dx = _0, dy = _1, resize();
12901           };
12902
12903           density.cellSize = function(_) {
12904             if (!arguments.length) { return 1 << k; }
12905             if (!((_ = +_) >= 1)) { throw new Error("invalid cell size"); }
12906             return k = Math.floor(Math.log(_) / Math.LN2), resize();
12907           };
12908
12909           density.thresholds = function(_) {
12910             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$7.call(_)) : constant$6(_), density) : threshold;
12911           };
12912
12913           density.bandwidth = function(_) {
12914             if (!arguments.length) { return Math.sqrt(r * (r + 1)); }
12915             if (!((_ = +_) >= 0)) { throw new Error("invalid bandwidth"); }
12916             return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();
12917           };
12918
12919           return density;
12920         }
12921
12922         var EOL = {},
12923             EOF = {},
12924             QUOTE = 34,
12925             NEWLINE = 10,
12926             RETURN = 13;
12927
12928         function objectConverter(columns) {
12929           return new Function("d", "return {" + columns.map(function(name, i) {
12930             return JSON.stringify(name) + ": d[" + i + "] || \"\"";
12931           }).join(",") + "}");
12932         }
12933
12934         function customConverter(columns, f) {
12935           var object = objectConverter(columns);
12936           return function(row, i) {
12937             return f(object(row), i, columns);
12938           };
12939         }
12940
12941         // Compute unique columns in order of discovery.
12942         function inferColumns(rows) {
12943           var columnSet = Object.create(null),
12944               columns = [];
12945
12946           rows.forEach(function(row) {
12947             for (var column in row) {
12948               if (!(column in columnSet)) {
12949                 columns.push(columnSet[column] = column);
12950               }
12951             }
12952           });
12953
12954           return columns;
12955         }
12956
12957         function pad(value, width) {
12958           var s = value + "", length = s.length;
12959           return length < width ? new Array(width - length + 1).join(0) + s : s;
12960         }
12961
12962         function formatYear(year) {
12963           return year < 0 ? "-" + pad(-year, 6)
12964             : year > 9999 ? "+" + pad(year, 6)
12965             : pad(year, 4);
12966         }
12967
12968         function formatDate(date) {
12969           var hours = date.getUTCHours(),
12970               minutes = date.getUTCMinutes(),
12971               seconds = date.getUTCSeconds(),
12972               milliseconds = date.getUTCMilliseconds();
12973           return isNaN(date) ? "Invalid Date"
12974               : formatYear(date.getUTCFullYear()) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2)
12975               + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z"
12976               : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z"
12977               : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z"
12978               : "");
12979         }
12980
12981         function dsvFormat(delimiter) {
12982           var reFormat = new RegExp("[\"" + delimiter + "\n\r]"),
12983               DELIMITER = delimiter.charCodeAt(0);
12984
12985           function parse(text, f) {
12986             var convert, columns, rows = parseRows(text, function(row, i) {
12987               if (convert) { return convert(row, i - 1); }
12988               columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
12989             });
12990             rows.columns = columns || [];
12991             return rows;
12992           }
12993
12994           function parseRows(text, f) {
12995             var rows = [], // output rows
12996                 N = text.length,
12997                 I = 0, // current character index
12998                 n = 0, // current line number
12999                 t, // current token
13000                 eof = N <= 0, // current token followed by EOF?
13001                 eol = false; // current token followed by EOL?
13002
13003             // Strip the trailing newline.
13004             if (text.charCodeAt(N - 1) === NEWLINE) { --N; }
13005             if (text.charCodeAt(N - 1) === RETURN) { --N; }
13006
13007             function token() {
13008               if (eof) { return EOF; }
13009               if (eol) { return eol = false, EOL; }
13010
13011               // Unescape quotes.
13012               var i, j = I, c;
13013               if (text.charCodeAt(j) === QUOTE) {
13014                 while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE){ }
13015                 if ((i = I) >= N) { eof = true; }
13016                 else if ((c = text.charCodeAt(I++)) === NEWLINE) { eol = true; }
13017                 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) { ++I; } }
13018                 return text.slice(j + 1, i - 1).replace(/""/g, "\"");
13019               }
13020
13021               // Find next delimiter or newline.
13022               while (I < N) {
13023                 if ((c = text.charCodeAt(i = I++)) === NEWLINE) { eol = true; }
13024                 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) { ++I; } }
13025                 else if (c !== DELIMITER) { continue; }
13026                 return text.slice(j, i);
13027               }
13028
13029               // Return last token before EOF.
13030               return eof = true, text.slice(j, N);
13031             }
13032
13033             while ((t = token()) !== EOF) {
13034               var row = [];
13035               while (t !== EOL && t !== EOF) { row.push(t), t = token(); }
13036               if (f && (row = f(row, n++)) == null) { continue; }
13037               rows.push(row);
13038             }
13039
13040             return rows;
13041           }
13042
13043           function preformatBody(rows, columns) {
13044             return rows.map(function(row) {
13045               return columns.map(function(column) {
13046                 return formatValue(row[column]);
13047               }).join(delimiter);
13048             });
13049           }
13050
13051           function format(rows, columns) {
13052             if (columns == null) { columns = inferColumns(rows); }
13053             return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n");
13054           }
13055
13056           function formatBody(rows, columns) {
13057             if (columns == null) { columns = inferColumns(rows); }
13058             return preformatBody(rows, columns).join("\n");
13059           }
13060
13061           function formatRows(rows) {
13062             return rows.map(formatRow).join("\n");
13063           }
13064
13065           function formatRow(row) {
13066             return row.map(formatValue).join(delimiter);
13067           }
13068
13069           function formatValue(value) {
13070             return value == null ? ""
13071                 : value instanceof Date ? formatDate(value)
13072                 : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\""
13073                 : value;
13074           }
13075
13076           return {
13077             parse: parse,
13078             parseRows: parseRows,
13079             format: format,
13080             formatBody: formatBody,
13081             formatRows: formatRows,
13082             formatRow: formatRow,
13083             formatValue: formatValue
13084           };
13085         }
13086
13087         var csv = dsvFormat(",");
13088
13089         var csvParse = csv.parse;
13090         var csvParseRows = csv.parseRows;
13091         var csvFormat = csv.format;
13092         var csvFormatBody = csv.formatBody;
13093         var csvFormatRows = csv.formatRows;
13094         var csvFormatRow = csv.formatRow;
13095         var csvFormatValue = csv.formatValue;
13096
13097         var tsv = dsvFormat("\t");
13098
13099         var tsvParse = tsv.parse;
13100         var tsvParseRows = tsv.parseRows;
13101         var tsvFormat = tsv.format;
13102         var tsvFormatBody = tsv.formatBody;
13103         var tsvFormatRows = tsv.formatRows;
13104         var tsvFormatRow = tsv.formatRow;
13105         var tsvFormatValue = tsv.formatValue;
13106
13107         function autoType(object) {
13108           for (var key in object) {
13109             var value = object[key].trim(), number, m;
13110             if (!value) { value = null; }
13111             else if (value === "true") { value = true; }
13112             else if (value === "false") { value = false; }
13113             else if (value === "NaN") { value = NaN; }
13114             else if (!isNaN(number = +value)) { value = number; }
13115             else if (m = value.match(/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/)) {
13116               if (fixtz && !!m[4] && !m[7]) { value = value.replace(/-/g, "/").replace(/T/, " "); }
13117               value = new Date(value);
13118             }
13119             else { continue; }
13120             object[key] = value;
13121           }
13122           return object;
13123         }
13124
13125         // https://github.com/d3/d3-dsv/issues/45
13126         var fixtz = new Date("2019-01-01T00:00").getHours() || new Date("2019-07-01T00:00").getHours();
13127
13128         function responseBlob(response) {
13129           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
13130           return response.blob();
13131         }
13132
13133         function blob(input, init) {
13134           return fetch(input, init).then(responseBlob);
13135         }
13136
13137         function responseArrayBuffer(response) {
13138           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
13139           return response.arrayBuffer();
13140         }
13141
13142         function buffer(input, init) {
13143           return fetch(input, init).then(responseArrayBuffer);
13144         }
13145
13146         function responseText(response) {
13147           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
13148           return response.text();
13149         }
13150
13151         function d3_text(input, init) {
13152           return fetch(input, init).then(responseText);
13153         }
13154
13155         function dsvParse(parse) {
13156           return function(input, init, row) {
13157             if (arguments.length === 2 && typeof init === "function") { row = init, init = undefined; }
13158             return d3_text(input, init).then(function(response) {
13159               return parse(response, row);
13160             });
13161           };
13162         }
13163
13164         function dsv(delimiter, input, init, row) {
13165           if (arguments.length === 3 && typeof init === "function") { row = init, init = undefined; }
13166           var format = dsvFormat(delimiter);
13167           return d3_text(input, init).then(function(response) {
13168             return format.parse(response, row);
13169           });
13170         }
13171
13172         var csv$1 = dsvParse(csvParse);
13173         var tsv$1 = dsvParse(tsvParse);
13174
13175         function image(input, init) {
13176           return new Promise(function(resolve, reject) {
13177             var image = new Image;
13178             for (var key in init) { image[key] = init[key]; }
13179             image.onerror = reject;
13180             image.onload = function() { resolve(image); };
13181             image.src = input;
13182           });
13183         }
13184
13185         function responseJson(response) {
13186           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
13187           return response.json();
13188         }
13189
13190         function d3_json(input, init) {
13191           return fetch(input, init).then(responseJson);
13192         }
13193
13194         function parser(type) {
13195           return function(input, init)  {
13196             return d3_text(input, init).then(function(text) {
13197               return (new DOMParser).parseFromString(text, type);
13198             });
13199           };
13200         }
13201
13202         var d3_xml = parser("application/xml");
13203
13204         var html = parser("text/html");
13205
13206         var svg = parser("image/svg+xml");
13207
13208         function center$1(x, y) {
13209           var nodes;
13210
13211           if (x == null) { x = 0; }
13212           if (y == null) { y = 0; }
13213
13214           function force() {
13215             var i,
13216                 n = nodes.length,
13217                 node,
13218                 sx = 0,
13219                 sy = 0;
13220
13221             for (i = 0; i < n; ++i) {
13222               node = nodes[i], sx += node.x, sy += node.y;
13223             }
13224
13225             for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
13226               node = nodes[i], node.x -= sx, node.y -= sy;
13227             }
13228           }
13229
13230           force.initialize = function(_) {
13231             nodes = _;
13232           };
13233
13234           force.x = function(_) {
13235             return arguments.length ? (x = +_, force) : x;
13236           };
13237
13238           force.y = function(_) {
13239             return arguments.length ? (y = +_, force) : y;
13240           };
13241
13242           return force;
13243         }
13244
13245         function constant$7(x) {
13246           return function() {
13247             return x;
13248           };
13249         }
13250
13251         function jiggle() {
13252           return (Math.random() - 0.5) * 1e-6;
13253         }
13254
13255         function tree_add(d) {
13256           var x = +this._x.call(null, d),
13257               y = +this._y.call(null, d);
13258           return add(this.cover(x, y), x, y, d);
13259         }
13260
13261         function add(tree, x, y, d) {
13262           if (isNaN(x) || isNaN(y)) { return tree; } // ignore invalid points
13263
13264           var parent,
13265               node = tree._root,
13266               leaf = {data: d},
13267               x0 = tree._x0,
13268               y0 = tree._y0,
13269               x1 = tree._x1,
13270               y1 = tree._y1,
13271               xm,
13272               ym,
13273               xp,
13274               yp,
13275               right,
13276               bottom,
13277               i,
13278               j;
13279
13280           // If the tree is empty, initialize the root as a leaf.
13281           if (!node) { return tree._root = leaf, tree; }
13282
13283           // Find the existing leaf for the new point, or add it.
13284           while (node.length) {
13285             if (right = x >= (xm = (x0 + x1) / 2)) { x0 = xm; } else { x1 = xm; }
13286             if (bottom = y >= (ym = (y0 + y1) / 2)) { y0 = ym; } else { y1 = ym; }
13287             if (parent = node, !(node = node[i = bottom << 1 | right])) { return parent[i] = leaf, tree; }
13288           }
13289
13290           // Is the new point is exactly coincident with the existing point?
13291           xp = +tree._x.call(null, node.data);
13292           yp = +tree._y.call(null, node.data);
13293           if (x === xp && y === yp) { return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; }
13294
13295           // Otherwise, split the leaf node until the old and new point are separated.
13296           do {
13297             parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
13298             if (right = x >= (xm = (x0 + x1) / 2)) { x0 = xm; } else { x1 = xm; }
13299             if (bottom = y >= (ym = (y0 + y1) / 2)) { y0 = ym; } else { y1 = ym; }
13300           } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
13301           return parent[j] = node, parent[i] = leaf, tree;
13302         }
13303
13304         function addAll(data) {
13305           var d, i, n = data.length,
13306               x,
13307               y,
13308               xz = new Array(n),
13309               yz = new Array(n),
13310               x0 = Infinity,
13311               y0 = Infinity,
13312               x1 = -Infinity,
13313               y1 = -Infinity;
13314
13315           // Compute the points and their extent.
13316           for (i = 0; i < n; ++i) {
13317             if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) { continue; }
13318             xz[i] = x;
13319             yz[i] = y;
13320             if (x < x0) { x0 = x; }
13321             if (x > x1) { x1 = x; }
13322             if (y < y0) { y0 = y; }
13323             if (y > y1) { y1 = y; }
13324           }
13325
13326           // If there were no (valid) points, abort.
13327           if (x0 > x1 || y0 > y1) { return this; }
13328
13329           // Expand the tree to cover the new points.
13330           this.cover(x0, y0).cover(x1, y1);
13331
13332           // Add the new points.
13333           for (i = 0; i < n; ++i) {
13334             add(this, xz[i], yz[i], data[i]);
13335           }
13336
13337           return this;
13338         }
13339
13340         function tree_cover(x, y) {
13341           if (isNaN(x = +x) || isNaN(y = +y)) { return this; } // ignore invalid points
13342
13343           var x0 = this._x0,
13344               y0 = this._y0,
13345               x1 = this._x1,
13346               y1 = this._y1;
13347
13348           // If the quadtree has no extent, initialize them.
13349           // Integer extent are necessary so that if we later double the extent,
13350           // the existing quadrant boundaries don’t change due to floating point error!
13351           if (isNaN(x0)) {
13352             x1 = (x0 = Math.floor(x)) + 1;
13353             y1 = (y0 = Math.floor(y)) + 1;
13354           }
13355
13356           // Otherwise, double repeatedly to cover.
13357           else {
13358             var z = x1 - x0,
13359                 node = this._root,
13360                 parent,
13361                 i;
13362
13363             while (x0 > x || x >= x1 || y0 > y || y >= y1) {
13364               i = (y < y0) << 1 | (x < x0);
13365               parent = new Array(4), parent[i] = node, node = parent, z *= 2;
13366               switch (i) {
13367                 case 0: x1 = x0 + z, y1 = y0 + z; break;
13368                 case 1: x0 = x1 - z, y1 = y0 + z; break;
13369                 case 2: x1 = x0 + z, y0 = y1 - z; break;
13370                 case 3: x0 = x1 - z, y0 = y1 - z; break;
13371               }
13372             }
13373
13374             if (this._root && this._root.length) { this._root = node; }
13375           }
13376
13377           this._x0 = x0;
13378           this._y0 = y0;
13379           this._x1 = x1;
13380           this._y1 = y1;
13381           return this;
13382         }
13383
13384         function tree_data() {
13385           var data = [];
13386           this.visit(function(node) {
13387             if (!node.length) { do { data.push(node.data); } while (node = node.next) }
13388           });
13389           return data;
13390         }
13391
13392         function tree_extent(_) {
13393           return arguments.length
13394               ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
13395               : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
13396         }
13397
13398         function Quad(node, x0, y0, x1, y1) {
13399           this.node = node;
13400           this.x0 = x0;
13401           this.y0 = y0;
13402           this.x1 = x1;
13403           this.y1 = y1;
13404         }
13405
13406         function tree_find(x, y, radius) {
13407           var data,
13408               x0 = this._x0,
13409               y0 = this._y0,
13410               x1,
13411               y1,
13412               x2,
13413               y2,
13414               x3 = this._x1,
13415               y3 = this._y1,
13416               quads = [],
13417               node = this._root,
13418               q,
13419               i;
13420
13421           if (node) { quads.push(new Quad(node, x0, y0, x3, y3)); }
13422           if (radius == null) { radius = Infinity; }
13423           else {
13424             x0 = x - radius, y0 = y - radius;
13425             x3 = x + radius, y3 = y + radius;
13426             radius *= radius;
13427           }
13428
13429           while (q = quads.pop()) {
13430
13431             // Stop searching if this quadrant can’t contain a closer node.
13432             if (!(node = q.node)
13433                 || (x1 = q.x0) > x3
13434                 || (y1 = q.y0) > y3
13435                 || (x2 = q.x1) < x0
13436                 || (y2 = q.y1) < y0) { continue; }
13437
13438             // Bisect the current quadrant.
13439             if (node.length) {
13440               var xm = (x1 + x2) / 2,
13441                   ym = (y1 + y2) / 2;
13442
13443               quads.push(
13444                 new Quad(node[3], xm, ym, x2, y2),
13445                 new Quad(node[2], x1, ym, xm, y2),
13446                 new Quad(node[1], xm, y1, x2, ym),
13447                 new Quad(node[0], x1, y1, xm, ym)
13448               );
13449
13450               // Visit the closest quadrant first.
13451               if (i = (y >= ym) << 1 | (x >= xm)) {
13452                 q = quads[quads.length - 1];
13453                 quads[quads.length - 1] = quads[quads.length - 1 - i];
13454                 quads[quads.length - 1 - i] = q;
13455               }
13456             }
13457
13458             // Visit this point. (Visiting coincident points isn’t necessary!)
13459             else {
13460               var dx = x - +this._x.call(null, node.data),
13461                   dy = y - +this._y.call(null, node.data),
13462                   d2 = dx * dx + dy * dy;
13463               if (d2 < radius) {
13464                 var d = Math.sqrt(radius = d2);
13465                 x0 = x - d, y0 = y - d;
13466                 x3 = x + d, y3 = y + d;
13467                 data = node.data;
13468               }
13469             }
13470           }
13471
13472           return data;
13473         }
13474
13475         function tree_remove(d) {
13476           if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) { return this; } // ignore invalid points
13477
13478           var parent,
13479               node = this._root,
13480               retainer,
13481               previous,
13482               next,
13483               x0 = this._x0,
13484               y0 = this._y0,
13485               x1 = this._x1,
13486               y1 = this._y1,
13487               x,
13488               y,
13489               xm,
13490               ym,
13491               right,
13492               bottom,
13493               i,
13494               j;
13495
13496           // If the tree is empty, initialize the root as a leaf.
13497           if (!node) { return this; }
13498
13499           // Find the leaf node for the point.
13500           // While descending, also retain the deepest parent with a non-removed sibling.
13501           if (node.length) { while (true) {
13502             if (right = x >= (xm = (x0 + x1) / 2)) { x0 = xm; } else { x1 = xm; }
13503             if (bottom = y >= (ym = (y0 + y1) / 2)) { y0 = ym; } else { y1 = ym; }
13504             if (!(parent = node, node = node[i = bottom << 1 | right])) { return this; }
13505             if (!node.length) { break; }
13506             if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) { retainer = parent, j = i; }
13507           } }
13508
13509           // Find the point to remove.
13510           while (node.data !== d) { if (!(previous = node, node = node.next)) { return this; } }
13511           if (next = node.next) { delete node.next; }
13512
13513           // If there are multiple coincident points, remove just the point.
13514           if (previous) { return (next ? previous.next = next : delete previous.next), this; }
13515
13516           // If this is the root point, remove it.
13517           if (!parent) { return this._root = next, this; }
13518
13519           // Remove this leaf.
13520           next ? parent[i] = next : delete parent[i];
13521
13522           // If the parent now contains exactly one leaf, collapse superfluous parents.
13523           if ((node = parent[0] || parent[1] || parent[2] || parent[3])
13524               && node === (parent[3] || parent[2] || parent[1] || parent[0])
13525               && !node.length) {
13526             if (retainer) { retainer[j] = node; }
13527             else { this._root = node; }
13528           }
13529
13530           return this;
13531         }
13532
13533         function removeAll(data) {
13534           for (var i = 0, n = data.length; i < n; ++i) { this.remove(data[i]); }
13535           return this;
13536         }
13537
13538         function tree_root() {
13539           return this._root;
13540         }
13541
13542         function tree_size() {
13543           var size = 0;
13544           this.visit(function(node) {
13545             if (!node.length) { do { ++size; } while (node = node.next) }
13546           });
13547           return size;
13548         }
13549
13550         function tree_visit(callback) {
13551           var quads = [], q, node = this._root, child, x0, y0, x1, y1;
13552           if (node) { quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); }
13553           while (q = quads.pop()) {
13554             if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
13555               var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
13556               if (child = node[3]) { quads.push(new Quad(child, xm, ym, x1, y1)); }
13557               if (child = node[2]) { quads.push(new Quad(child, x0, ym, xm, y1)); }
13558               if (child = node[1]) { quads.push(new Quad(child, xm, y0, x1, ym)); }
13559               if (child = node[0]) { quads.push(new Quad(child, x0, y0, xm, ym)); }
13560             }
13561           }
13562           return this;
13563         }
13564
13565         function tree_visitAfter(callback) {
13566           var quads = [], next = [], q;
13567           if (this._root) { quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); }
13568           while (q = quads.pop()) {
13569             var node = q.node;
13570             if (node.length) {
13571               var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
13572               if (child = node[0]) { quads.push(new Quad(child, x0, y0, xm, ym)); }
13573               if (child = node[1]) { quads.push(new Quad(child, xm, y0, x1, ym)); }
13574               if (child = node[2]) { quads.push(new Quad(child, x0, ym, xm, y1)); }
13575               if (child = node[3]) { quads.push(new Quad(child, xm, ym, x1, y1)); }
13576             }
13577             next.push(q);
13578           }
13579           while (q = next.pop()) {
13580             callback(q.node, q.x0, q.y0, q.x1, q.y1);
13581           }
13582           return this;
13583         }
13584
13585         function defaultX$1(d) {
13586           return d[0];
13587         }
13588
13589         function tree_x(_) {
13590           return arguments.length ? (this._x = _, this) : this._x;
13591         }
13592
13593         function defaultY$1(d) {
13594           return d[1];
13595         }
13596
13597         function tree_y(_) {
13598           return arguments.length ? (this._y = _, this) : this._y;
13599         }
13600
13601         function quadtree(nodes, x, y) {
13602           var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN);
13603           return nodes == null ? tree : tree.addAll(nodes);
13604         }
13605
13606         function Quadtree(x, y, x0, y0, x1, y1) {
13607           this._x = x;
13608           this._y = y;
13609           this._x0 = x0;
13610           this._y0 = y0;
13611           this._x1 = x1;
13612           this._y1 = y1;
13613           this._root = undefined;
13614         }
13615
13616         function leaf_copy(leaf) {
13617           var copy = {data: leaf.data}, next = copy;
13618           while (leaf = leaf.next) { next = next.next = {data: leaf.data}; }
13619           return copy;
13620         }
13621
13622         var treeProto = quadtree.prototype = Quadtree.prototype;
13623
13624         treeProto.copy = function() {
13625           var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
13626               node = this._root,
13627               nodes,
13628               child;
13629
13630           if (!node) { return copy; }
13631
13632           if (!node.length) { return copy._root = leaf_copy(node), copy; }
13633
13634           nodes = [{source: node, target: copy._root = new Array(4)}];
13635           while (node = nodes.pop()) {
13636             for (var i = 0; i < 4; ++i) {
13637               if (child = node.source[i]) {
13638                 if (child.length) { nodes.push({source: child, target: node.target[i] = new Array(4)}); }
13639                 else { node.target[i] = leaf_copy(child); }
13640               }
13641             }
13642           }
13643
13644           return copy;
13645         };
13646
13647         treeProto.add = tree_add;
13648         treeProto.addAll = addAll;
13649         treeProto.cover = tree_cover;
13650         treeProto.data = tree_data;
13651         treeProto.extent = tree_extent;
13652         treeProto.find = tree_find;
13653         treeProto.remove = tree_remove;
13654         treeProto.removeAll = removeAll;
13655         treeProto.root = tree_root;
13656         treeProto.size = tree_size;
13657         treeProto.visit = tree_visit;
13658         treeProto.visitAfter = tree_visitAfter;
13659         treeProto.x = tree_x;
13660         treeProto.y = tree_y;
13661
13662         function x(d) {
13663           return d.x + d.vx;
13664         }
13665
13666         function y(d) {
13667           return d.y + d.vy;
13668         }
13669
13670         function collide(radius) {
13671           var nodes,
13672               radii,
13673               strength = 1,
13674               iterations = 1;
13675
13676           if (typeof radius !== "function") { radius = constant$7(radius == null ? 1 : +radius); }
13677
13678           function force() {
13679             var i, n = nodes.length,
13680                 tree,
13681                 node,
13682                 xi,
13683                 yi,
13684                 ri,
13685                 ri2;
13686
13687             for (var k = 0; k < iterations; ++k) {
13688               tree = quadtree(nodes, x, y).visitAfter(prepare);
13689               for (i = 0; i < n; ++i) {
13690                 node = nodes[i];
13691                 ri = radii[node.index], ri2 = ri * ri;
13692                 xi = node.x + node.vx;
13693                 yi = node.y + node.vy;
13694                 tree.visit(apply);
13695               }
13696             }
13697
13698             function apply(quad, x0, y0, x1, y1) {
13699               var data = quad.data, rj = quad.r, r = ri + rj;
13700               if (data) {
13701                 if (data.index > node.index) {
13702                   var x = xi - data.x - data.vx,
13703                       y = yi - data.y - data.vy,
13704                       l = x * x + y * y;
13705                   if (l < r * r) {
13706                     if (x === 0) { x = jiggle(), l += x * x; }
13707                     if (y === 0) { y = jiggle(), l += y * y; }
13708                     l = (r - (l = Math.sqrt(l))) / l * strength;
13709                     node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
13710                     node.vy += (y *= l) * r;
13711                     data.vx -= x * (r = 1 - r);
13712                     data.vy -= y * r;
13713                   }
13714                 }
13715                 return;
13716               }
13717               return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
13718             }
13719           }
13720
13721           function prepare(quad) {
13722             if (quad.data) { return quad.r = radii[quad.data.index]; }
13723             for (var i = quad.r = 0; i < 4; ++i) {
13724               if (quad[i] && quad[i].r > quad.r) {
13725                 quad.r = quad[i].r;
13726               }
13727             }
13728           }
13729
13730           function initialize() {
13731             if (!nodes) { return; }
13732             var i, n = nodes.length, node;
13733             radii = new Array(n);
13734             for (i = 0; i < n; ++i) { node = nodes[i], radii[node.index] = +radius(node, i, nodes); }
13735           }
13736
13737           force.initialize = function(_) {
13738             nodes = _;
13739             initialize();
13740           };
13741
13742           force.iterations = function(_) {
13743             return arguments.length ? (iterations = +_, force) : iterations;
13744           };
13745
13746           force.strength = function(_) {
13747             return arguments.length ? (strength = +_, force) : strength;
13748           };
13749
13750           force.radius = function(_) {
13751             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
13752           };
13753
13754           return force;
13755         }
13756
13757         function index(d) {
13758           return d.index;
13759         }
13760
13761         function find(nodeById, nodeId) {
13762           var node = nodeById.get(nodeId);
13763           if (!node) { throw new Error("missing: " + nodeId); }
13764           return node;
13765         }
13766
13767         function link(links) {
13768           var id = index,
13769               strength = defaultStrength,
13770               strengths,
13771               distance = constant$7(30),
13772               distances,
13773               nodes,
13774               count,
13775               bias,
13776               iterations = 1;
13777
13778           if (links == null) { links = []; }
13779
13780           function defaultStrength(link) {
13781             return 1 / Math.min(count[link.source.index], count[link.target.index]);
13782           }
13783
13784           function force(alpha) {
13785             for (var k = 0, n = links.length; k < iterations; ++k) {
13786               for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
13787                 link = links[i], source = link.source, target = link.target;
13788                 x = target.x + target.vx - source.x - source.vx || jiggle();
13789                 y = target.y + target.vy - source.y - source.vy || jiggle();
13790                 l = Math.sqrt(x * x + y * y);
13791                 l = (l - distances[i]) / l * alpha * strengths[i];
13792                 x *= l, y *= l;
13793                 target.vx -= x * (b = bias[i]);
13794                 target.vy -= y * b;
13795                 source.vx += x * (b = 1 - b);
13796                 source.vy += y * b;
13797               }
13798             }
13799           }
13800
13801           function initialize() {
13802             if (!nodes) { return; }
13803
13804             var i,
13805                 n = nodes.length,
13806                 m = links.length,
13807                 nodeById = map$3(nodes, id),
13808                 link;
13809
13810             for (i = 0, count = new Array(n); i < m; ++i) {
13811               link = links[i], link.index = i;
13812               if (typeof link.source !== "object") { link.source = find(nodeById, link.source); }
13813               if (typeof link.target !== "object") { link.target = find(nodeById, link.target); }
13814               count[link.source.index] = (count[link.source.index] || 0) + 1;
13815               count[link.target.index] = (count[link.target.index] || 0) + 1;
13816             }
13817
13818             for (i = 0, bias = new Array(m); i < m; ++i) {
13819               link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
13820             }
13821
13822             strengths = new Array(m), initializeStrength();
13823             distances = new Array(m), initializeDistance();
13824           }
13825
13826           function initializeStrength() {
13827             if (!nodes) { return; }
13828
13829             for (var i = 0, n = links.length; i < n; ++i) {
13830               strengths[i] = +strength(links[i], i, links);
13831             }
13832           }
13833
13834           function initializeDistance() {
13835             if (!nodes) { return; }
13836
13837             for (var i = 0, n = links.length; i < n; ++i) {
13838               distances[i] = +distance(links[i], i, links);
13839             }
13840           }
13841
13842           force.initialize = function(_) {
13843             nodes = _;
13844             initialize();
13845           };
13846
13847           force.links = function(_) {
13848             return arguments.length ? (links = _, initialize(), force) : links;
13849           };
13850
13851           force.id = function(_) {
13852             return arguments.length ? (id = _, force) : id;
13853           };
13854
13855           force.iterations = function(_) {
13856             return arguments.length ? (iterations = +_, force) : iterations;
13857           };
13858
13859           force.strength = function(_) {
13860             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength;
13861           };
13862
13863           force.distance = function(_) {
13864             return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance;
13865           };
13866
13867           return force;
13868         }
13869
13870         function x$1(d) {
13871           return d.x;
13872         }
13873
13874         function y$1(d) {
13875           return d.y;
13876         }
13877
13878         var initialRadius = 10,
13879             initialAngle = Math.PI * (3 - Math.sqrt(5));
13880
13881         function simulation(nodes) {
13882           var simulation,
13883               alpha = 1,
13884               alphaMin = 0.001,
13885               alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
13886               alphaTarget = 0,
13887               velocityDecay = 0.6,
13888               forces = map$3(),
13889               stepper = timer(step),
13890               event = dispatch("tick", "end");
13891
13892           if (nodes == null) { nodes = []; }
13893
13894           function step() {
13895             tick();
13896             event.call("tick", simulation);
13897             if (alpha < alphaMin) {
13898               stepper.stop();
13899               event.call("end", simulation);
13900             }
13901           }
13902
13903           function tick(iterations) {
13904             var i, n = nodes.length, node;
13905
13906             if (iterations === undefined) { iterations = 1; }
13907
13908             for (var k = 0; k < iterations; ++k) {
13909               alpha += (alphaTarget - alpha) * alphaDecay;
13910
13911               forces.each(function (force) {
13912                 force(alpha);
13913               });
13914
13915               for (i = 0; i < n; ++i) {
13916                 node = nodes[i];
13917                 if (node.fx == null) { node.x += node.vx *= velocityDecay; }
13918                 else { node.x = node.fx, node.vx = 0; }
13919                 if (node.fy == null) { node.y += node.vy *= velocityDecay; }
13920                 else { node.y = node.fy, node.vy = 0; }
13921               }
13922             }
13923
13924             return simulation;
13925           }
13926
13927           function initializeNodes() {
13928             for (var i = 0, n = nodes.length, node; i < n; ++i) {
13929               node = nodes[i], node.index = i;
13930               if (node.fx != null) { node.x = node.fx; }
13931               if (node.fy != null) { node.y = node.fy; }
13932               if (isNaN(node.x) || isNaN(node.y)) {
13933                 var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
13934                 node.x = radius * Math.cos(angle);
13935                 node.y = radius * Math.sin(angle);
13936               }
13937               if (isNaN(node.vx) || isNaN(node.vy)) {
13938                 node.vx = node.vy = 0;
13939               }
13940             }
13941           }
13942
13943           function initializeForce(force) {
13944             if (force.initialize) { force.initialize(nodes); }
13945             return force;
13946           }
13947
13948           initializeNodes();
13949
13950           return simulation = {
13951             tick: tick,
13952
13953             restart: function() {
13954               return stepper.restart(step), simulation;
13955             },
13956
13957             stop: function() {
13958               return stepper.stop(), simulation;
13959             },
13960
13961             nodes: function(_) {
13962               return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
13963             },
13964
13965             alpha: function(_) {
13966               return arguments.length ? (alpha = +_, simulation) : alpha;
13967             },
13968
13969             alphaMin: function(_) {
13970               return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
13971             },
13972
13973             alphaDecay: function(_) {
13974               return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
13975             },
13976
13977             alphaTarget: function(_) {
13978               return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
13979             },
13980
13981             velocityDecay: function(_) {
13982               return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
13983             },
13984
13985             force: function(name, _) {
13986               return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
13987             },
13988
13989             find: function(x, y, radius) {
13990               var i = 0,
13991                   n = nodes.length,
13992                   dx,
13993                   dy,
13994                   d2,
13995                   node,
13996                   closest;
13997
13998               if (radius == null) { radius = Infinity; }
13999               else { radius *= radius; }
14000
14001               for (i = 0; i < n; ++i) {
14002                 node = nodes[i];
14003                 dx = x - node.x;
14004                 dy = y - node.y;
14005                 d2 = dx * dx + dy * dy;
14006                 if (d2 < radius) { closest = node, radius = d2; }
14007               }
14008
14009               return closest;
14010             },
14011
14012             on: function(name, _) {
14013               return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
14014             }
14015           };
14016         }
14017
14018         function manyBody() {
14019           var nodes,
14020               node,
14021               alpha,
14022               strength = constant$7(-30),
14023               strengths,
14024               distanceMin2 = 1,
14025               distanceMax2 = Infinity,
14026               theta2 = 0.81;
14027
14028           function force(_) {
14029             var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate);
14030             for (alpha = _, i = 0; i < n; ++i) { node = nodes[i], tree.visit(apply); }
14031           }
14032
14033           function initialize() {
14034             if (!nodes) { return; }
14035             var i, n = nodes.length, node;
14036             strengths = new Array(n);
14037             for (i = 0; i < n; ++i) { node = nodes[i], strengths[node.index] = +strength(node, i, nodes); }
14038           }
14039
14040           function accumulate(quad) {
14041             var strength = 0, q, c, weight = 0, x, y, i;
14042
14043             // For internal nodes, accumulate forces from child quadrants.
14044             if (quad.length) {
14045               for (x = y = i = 0; i < 4; ++i) {
14046                 if ((q = quad[i]) && (c = Math.abs(q.value))) {
14047                   strength += q.value, weight += c, x += c * q.x, y += c * q.y;
14048                 }
14049               }
14050               quad.x = x / weight;
14051               quad.y = y / weight;
14052             }
14053
14054             // For leaf nodes, accumulate forces from coincident quadrants.
14055             else {
14056               q = quad;
14057               q.x = q.data.x;
14058               q.y = q.data.y;
14059               do { strength += strengths[q.data.index]; }
14060               while (q = q.next);
14061             }
14062
14063             quad.value = strength;
14064           }
14065
14066           function apply(quad, x1, _, x2) {
14067             if (!quad.value) { return true; }
14068
14069             var x = quad.x - node.x,
14070                 y = quad.y - node.y,
14071                 w = x2 - x1,
14072                 l = x * x + y * y;
14073
14074             // Apply the Barnes-Hut approximation if possible.
14075             // Limit forces for very close nodes; randomize direction if coincident.
14076             if (w * w / theta2 < l) {
14077               if (l < distanceMax2) {
14078                 if (x === 0) { x = jiggle(), l += x * x; }
14079                 if (y === 0) { y = jiggle(), l += y * y; }
14080                 if (l < distanceMin2) { l = Math.sqrt(distanceMin2 * l); }
14081                 node.vx += x * quad.value * alpha / l;
14082                 node.vy += y * quad.value * alpha / l;
14083               }
14084               return true;
14085             }
14086
14087             // Otherwise, process points directly.
14088             else if (quad.length || l >= distanceMax2) { return; }
14089
14090             // Limit forces for very close nodes; randomize direction if coincident.
14091             if (quad.data !== node || quad.next) {
14092               if (x === 0) { x = jiggle(), l += x * x; }
14093               if (y === 0) { y = jiggle(), l += y * y; }
14094               if (l < distanceMin2) { l = Math.sqrt(distanceMin2 * l); }
14095             }
14096
14097             do { if (quad.data !== node) {
14098               w = strengths[quad.data.index] * alpha / l;
14099               node.vx += x * w;
14100               node.vy += y * w;
14101             } } while (quad = quad.next);
14102           }
14103
14104           force.initialize = function(_) {
14105             nodes = _;
14106             initialize();
14107           };
14108
14109           force.strength = function(_) {
14110             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
14111           };
14112
14113           force.distanceMin = function(_) {
14114             return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
14115           };
14116
14117           force.distanceMax = function(_) {
14118             return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
14119           };
14120
14121           force.theta = function(_) {
14122             return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
14123           };
14124
14125           return force;
14126         }
14127
14128         function radial(radius, x, y) {
14129           var nodes,
14130               strength = constant$7(0.1),
14131               strengths,
14132               radiuses;
14133
14134           if (typeof radius !== "function") { radius = constant$7(+radius); }
14135           if (x == null) { x = 0; }
14136           if (y == null) { y = 0; }
14137
14138           function force(alpha) {
14139             for (var i = 0, n = nodes.length; i < n; ++i) {
14140               var node = nodes[i],
14141                   dx = node.x - x || 1e-6,
14142                   dy = node.y - y || 1e-6,
14143                   r = Math.sqrt(dx * dx + dy * dy),
14144                   k = (radiuses[i] - r) * strengths[i] * alpha / r;
14145               node.vx += dx * k;
14146               node.vy += dy * k;
14147             }
14148           }
14149
14150           function initialize() {
14151             if (!nodes) { return; }
14152             var i, n = nodes.length;
14153             strengths = new Array(n);
14154             radiuses = new Array(n);
14155             for (i = 0; i < n; ++i) {
14156               radiuses[i] = +radius(nodes[i], i, nodes);
14157               strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);
14158             }
14159           }
14160
14161           force.initialize = function(_) {
14162             nodes = _, initialize();
14163           };
14164
14165           force.strength = function(_) {
14166             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
14167           };
14168
14169           force.radius = function(_) {
14170             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
14171           };
14172
14173           force.x = function(_) {
14174             return arguments.length ? (x = +_, force) : x;
14175           };
14176
14177           force.y = function(_) {
14178             return arguments.length ? (y = +_, force) : y;
14179           };
14180
14181           return force;
14182         }
14183
14184         function x$2(x) {
14185           var strength = constant$7(0.1),
14186               nodes,
14187               strengths,
14188               xz;
14189
14190           if (typeof x !== "function") { x = constant$7(x == null ? 0 : +x); }
14191
14192           function force(alpha) {
14193             for (var i = 0, n = nodes.length, node; i < n; ++i) {
14194               node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
14195             }
14196           }
14197
14198           function initialize() {
14199             if (!nodes) { return; }
14200             var i, n = nodes.length;
14201             strengths = new Array(n);
14202             xz = new Array(n);
14203             for (i = 0; i < n; ++i) {
14204               strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
14205             }
14206           }
14207
14208           force.initialize = function(_) {
14209             nodes = _;
14210             initialize();
14211           };
14212
14213           force.strength = function(_) {
14214             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
14215           };
14216
14217           force.x = function(_) {
14218             return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x;
14219           };
14220
14221           return force;
14222         }
14223
14224         function y$2(y) {
14225           var strength = constant$7(0.1),
14226               nodes,
14227               strengths,
14228               yz;
14229
14230           if (typeof y !== "function") { y = constant$7(y == null ? 0 : +y); }
14231
14232           function force(alpha) {
14233             for (var i = 0, n = nodes.length, node; i < n; ++i) {
14234               node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
14235             }
14236           }
14237
14238           function initialize() {
14239             if (!nodes) { return; }
14240             var i, n = nodes.length;
14241             strengths = new Array(n);
14242             yz = new Array(n);
14243             for (i = 0; i < n; ++i) {
14244               strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
14245             }
14246           }
14247
14248           force.initialize = function(_) {
14249             nodes = _;
14250             initialize();
14251           };
14252
14253           force.strength = function(_) {
14254             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
14255           };
14256
14257           force.y = function(_) {
14258             return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y;
14259           };
14260
14261           return force;
14262         }
14263
14264         // Computes the decimal coefficient and exponent of the specified number x with
14265         // significant digits p, where x is positive and p is in [1, 21] or undefined.
14266         // For example, formatDecimal(1.23) returns ["123", 0].
14267         function formatDecimal(x, p) {
14268           if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) { return null; } // NaN, ±Infinity
14269           var i, coefficient = x.slice(0, i);
14270
14271           // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
14272           // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
14273           return [
14274             coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
14275             +x.slice(i + 1)
14276           ];
14277         }
14278
14279         function exponent$1(x) {
14280           return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
14281         }
14282
14283         function formatGroup(grouping, thousands) {
14284           return function(value, width) {
14285             var i = value.length,
14286                 t = [],
14287                 j = 0,
14288                 g = grouping[0],
14289                 length = 0;
14290
14291             while (i > 0 && g > 0) {
14292               if (length + g + 1 > width) { g = Math.max(1, width - length); }
14293               t.push(value.substring(i -= g, i + g));
14294               if ((length += g + 1) > width) { break; }
14295               g = grouping[j = (j + 1) % grouping.length];
14296             }
14297
14298             return t.reverse().join(thousands);
14299           };
14300         }
14301
14302         function formatNumerals(numerals) {
14303           return function(value) {
14304             return value.replace(/[0-9]/g, function(i) {
14305               return numerals[+i];
14306             });
14307           };
14308         }
14309
14310         // [[fill]align][sign][symbol][0][width][,][.precision][~][type]
14311         var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
14312
14313         function formatSpecifier(specifier) {
14314           if (!(match = re.exec(specifier))) { throw new Error("invalid format: " + specifier); }
14315           var match;
14316           return new FormatSpecifier({
14317             fill: match[1],
14318             align: match[2],
14319             sign: match[3],
14320             symbol: match[4],
14321             zero: match[5],
14322             width: match[6],
14323             comma: match[7],
14324             precision: match[8] && match[8].slice(1),
14325             trim: match[9],
14326             type: match[10]
14327           });
14328         }
14329
14330         formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
14331
14332         function FormatSpecifier(specifier) {
14333           this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
14334           this.align = specifier.align === undefined ? ">" : specifier.align + "";
14335           this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
14336           this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
14337           this.zero = !!specifier.zero;
14338           this.width = specifier.width === undefined ? undefined : +specifier.width;
14339           this.comma = !!specifier.comma;
14340           this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
14341           this.trim = !!specifier.trim;
14342           this.type = specifier.type === undefined ? "" : specifier.type + "";
14343         }
14344
14345         FormatSpecifier.prototype.toString = function() {
14346           return this.fill
14347               + this.align
14348               + this.sign
14349               + this.symbol
14350               + (this.zero ? "0" : "")
14351               + (this.width === undefined ? "" : Math.max(1, this.width | 0))
14352               + (this.comma ? "," : "")
14353               + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0))
14354               + (this.trim ? "~" : "")
14355               + this.type;
14356         };
14357
14358         // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
14359         function formatTrim(s) {
14360           out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
14361             switch (s[i]) {
14362               case ".": i0 = i1 = i; break;
14363               case "0": if (i0 === 0) { i0 = i; } i1 = i; break;
14364               default: if (!+s[i]) { break out; } if (i0 > 0) { i0 = 0; } break;
14365             }
14366           }
14367           return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
14368         }
14369
14370         var prefixExponent;
14371
14372         function formatPrefixAuto(x, p) {
14373           var d = formatDecimal(x, p);
14374           if (!d) { return x + ""; }
14375           var coefficient = d[0],
14376               exponent = d[1],
14377               i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
14378               n = coefficient.length;
14379           return i === n ? coefficient
14380               : i > n ? coefficient + new Array(i - n + 1).join("0")
14381               : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
14382               : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
14383         }
14384
14385         function formatRounded(x, p) {
14386           var d = formatDecimal(x, p);
14387           if (!d) { return x + ""; }
14388           var coefficient = d[0],
14389               exponent = d[1];
14390           return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
14391               : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
14392               : coefficient + new Array(exponent - coefficient.length + 2).join("0");
14393         }
14394
14395         var formatTypes = {
14396           "%": function(x, p) { return (x * 100).toFixed(p); },
14397           "b": function(x) { return Math.round(x).toString(2); },
14398           "c": function(x) { return x + ""; },
14399           "d": function(x) { return Math.round(x).toString(10); },
14400           "e": function(x, p) { return x.toExponential(p); },
14401           "f": function(x, p) { return x.toFixed(p); },
14402           "g": function(x, p) { return x.toPrecision(p); },
14403           "o": function(x) { return Math.round(x).toString(8); },
14404           "p": function(x, p) { return formatRounded(x * 100, p); },
14405           "r": formatRounded,
14406           "s": formatPrefixAuto,
14407           "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
14408           "x": function(x) { return Math.round(x).toString(16); }
14409         };
14410
14411         function identity$3(x) {
14412           return x;
14413         }
14414
14415         var map$4 = Array.prototype.map,
14416             prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
14417
14418         function formatLocale(locale) {
14419           var group = locale.grouping === undefined || locale.thousands === undefined ? identity$3 : formatGroup(map$4.call(locale.grouping, Number), locale.thousands + ""),
14420               currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
14421               currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
14422               decimal = locale.decimal === undefined ? "." : locale.decimal + "",
14423               numerals = locale.numerals === undefined ? identity$3 : formatNumerals(map$4.call(locale.numerals, String)),
14424               percent = locale.percent === undefined ? "%" : locale.percent + "",
14425               minus = locale.minus === undefined ? "-" : locale.minus + "",
14426               nan = locale.nan === undefined ? "NaN" : locale.nan + "";
14427
14428           function newFormat(specifier) {
14429             specifier = formatSpecifier(specifier);
14430
14431             var fill = specifier.fill,
14432                 align = specifier.align,
14433                 sign = specifier.sign,
14434                 symbol = specifier.symbol,
14435                 zero = specifier.zero,
14436                 width = specifier.width,
14437                 comma = specifier.comma,
14438                 precision = specifier.precision,
14439                 trim = specifier.trim,
14440                 type = specifier.type;
14441
14442             // The "n" type is an alias for ",g".
14443             if (type === "n") { comma = true, type = "g"; }
14444
14445             // The "" type, and any invalid type, is an alias for ".12~g".
14446             else if (!formatTypes[type]) { precision === undefined && (precision = 12), trim = true, type = "g"; }
14447
14448             // If zero fill is specified, padding goes after sign and before digits.
14449             if (zero || (fill === "0" && align === "=")) { zero = true, fill = "0", align = "="; }
14450
14451             // Compute the prefix and suffix.
14452             // For SI-prefix, the suffix is lazily computed.
14453             var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
14454                 suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
14455
14456             // What format function should we use?
14457             // Is this an integer type?
14458             // Can this type generate exponential notation?
14459             var formatType = formatTypes[type],
14460                 maybeSuffix = /[defgprs%]/.test(type);
14461
14462             // Set the default precision if not specified,
14463             // or clamp the specified precision to the supported range.
14464             // For significant precision, it must be in [1, 21].
14465             // For fixed precision, it must be in [0, 20].
14466             precision = precision === undefined ? 6
14467                 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
14468                 : Math.max(0, Math.min(20, precision));
14469
14470             function format(value) {
14471               var valuePrefix = prefix,
14472                   valueSuffix = suffix,
14473                   i, n, c;
14474
14475               if (type === "c") {
14476                 valueSuffix = formatType(value) + valueSuffix;
14477                 value = "";
14478               } else {
14479                 value = +value;
14480
14481                 // Perform the initial formatting.
14482                 var valueNegative = value < 0;
14483                 value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
14484
14485                 // Trim insignificant zeros.
14486                 if (trim) { value = formatTrim(value); }
14487
14488                 // If a negative value rounds to zero during formatting, treat as positive.
14489                 if (valueNegative && +value === 0) { valueNegative = false; }
14490
14491                 // Compute the prefix and suffix.
14492                 valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
14493
14494                 valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
14495
14496                 // Break the formatted value into the integer “value” part that can be
14497                 // grouped, and fractional or exponential “suffix” part that is not.
14498                 if (maybeSuffix) {
14499                   i = -1, n = value.length;
14500                   while (++i < n) {
14501                     if (c = value.charCodeAt(i), 48 > c || c > 57) {
14502                       valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
14503                       value = value.slice(0, i);
14504                       break;
14505                     }
14506                   }
14507                 }
14508               }
14509
14510               // If the fill character is not "0", grouping is applied before padding.
14511               if (comma && !zero) { value = group(value, Infinity); }
14512
14513               // Compute the padding.
14514               var length = valuePrefix.length + value.length + valueSuffix.length,
14515                   padding = length < width ? new Array(width - length + 1).join(fill) : "";
14516
14517               // If the fill character is "0", grouping is applied after padding.
14518               if (comma && zero) { value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; }
14519
14520               // Reconstruct the final output based on the desired alignment.
14521               switch (align) {
14522                 case "<": value = valuePrefix + value + valueSuffix + padding; break;
14523                 case "=": value = valuePrefix + padding + value + valueSuffix; break;
14524                 case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
14525                 default: value = padding + valuePrefix + value + valueSuffix; break;
14526               }
14527
14528               return numerals(value);
14529             }
14530
14531             format.toString = function() {
14532               return specifier + "";
14533             };
14534
14535             return format;
14536           }
14537
14538           function formatPrefix(specifier, value) {
14539             var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
14540                 e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
14541                 k = Math.pow(10, -e),
14542                 prefix = prefixes[8 + e / 3];
14543             return function(value) {
14544               return f(k * value) + prefix;
14545             };
14546           }
14547
14548           return {
14549             format: newFormat,
14550             formatPrefix: formatPrefix
14551           };
14552         }
14553
14554         var locale;
14555         var format;
14556         var formatPrefix;
14557
14558         defaultLocale({
14559           decimal: ".",
14560           thousands: ",",
14561           grouping: [3],
14562           currency: ["$", ""],
14563           minus: "-"
14564         });
14565
14566         function defaultLocale(definition) {
14567           locale = formatLocale(definition);
14568           format = locale.format;
14569           formatPrefix = locale.formatPrefix;
14570           return locale;
14571         }
14572
14573         function precisionFixed(step) {
14574           return Math.max(0, -exponent$1(Math.abs(step)));
14575         }
14576
14577         function precisionPrefix(step, value) {
14578           return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
14579         }
14580
14581         function precisionRound(step, max) {
14582           step = Math.abs(step), max = Math.abs(max) - step;
14583           return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
14584         }
14585
14586         // Adds floating point numbers with twice the normal precision.
14587         // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
14588         // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
14589         // 305–363 (1997).
14590         // Code adapted from GeographicLib by Charles F. F. Karney,
14591         // http://geographiclib.sourceforge.net/
14592
14593         function adder() {
14594           return new Adder;
14595         }
14596
14597         function Adder() {
14598           this.reset();
14599         }
14600
14601         Adder.prototype = {
14602           constructor: Adder,
14603           reset: function() {
14604             this.s = // rounded value
14605             this.t = 0; // exact error
14606           },
14607           add: function(y) {
14608             add$1(temp, y, this.t);
14609             add$1(this, temp.s, this.s);
14610             if (this.s) { this.t += temp.t; }
14611             else { this.s = temp.t; }
14612           },
14613           valueOf: function() {
14614             return this.s;
14615           }
14616         };
14617
14618         var temp = new Adder;
14619
14620         function add$1(adder, a, b) {
14621           var x = adder.s = a + b,
14622               bv = x - a,
14623               av = x - bv;
14624           adder.t = (a - av) + (b - bv);
14625         }
14626
14627         var epsilon$2 = 1e-6;
14628         var epsilon2$1 = 1e-12;
14629         var pi$3 = Math.PI;
14630         var halfPi$2 = pi$3 / 2;
14631         var quarterPi = pi$3 / 4;
14632         var tau$3 = pi$3 * 2;
14633
14634         var degrees$1 = 180 / pi$3;
14635         var radians = pi$3 / 180;
14636
14637         var abs$2 = Math.abs;
14638         var atan = Math.atan;
14639         var atan2 = Math.atan2;
14640         var cos$1 = Math.cos;
14641         var ceil = Math.ceil;
14642         var exp = Math.exp;
14643         var log = Math.log;
14644         var pow = Math.pow;
14645         var sin$1 = Math.sin;
14646         var sign$2 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
14647         var sqrt = Math.sqrt;
14648         var tan = Math.tan;
14649
14650         function acos(x) {
14651           return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x);
14652         }
14653
14654         function asin(x) {
14655           return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x);
14656         }
14657
14658         function haversin(x) {
14659           return (x = sin$1(x / 2)) * x;
14660         }
14661
14662         function noop$4() {}
14663
14664         function streamGeometry(geometry, stream) {
14665           if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
14666             streamGeometryType[geometry.type](geometry, stream);
14667           }
14668         }
14669
14670         var streamObjectType = {
14671           Feature: function(object, stream) {
14672             streamGeometry(object.geometry, stream);
14673           },
14674           FeatureCollection: function(object, stream) {
14675             var features = object.features, i = -1, n = features.length;
14676             while (++i < n) { streamGeometry(features[i].geometry, stream); }
14677           }
14678         };
14679
14680         var streamGeometryType = {
14681           Sphere: function(object, stream) {
14682             stream.sphere();
14683           },
14684           Point: function(object, stream) {
14685             object = object.coordinates;
14686             stream.point(object[0], object[1], object[2]);
14687           },
14688           MultiPoint: function(object, stream) {
14689             var coordinates = object.coordinates, i = -1, n = coordinates.length;
14690             while (++i < n) { object = coordinates[i], stream.point(object[0], object[1], object[2]); }
14691           },
14692           LineString: function(object, stream) {
14693             streamLine(object.coordinates, stream, 0);
14694           },
14695           MultiLineString: function(object, stream) {
14696             var coordinates = object.coordinates, i = -1, n = coordinates.length;
14697             while (++i < n) { streamLine(coordinates[i], stream, 0); }
14698           },
14699           Polygon: function(object, stream) {
14700             streamPolygon(object.coordinates, stream);
14701           },
14702           MultiPolygon: function(object, stream) {
14703             var coordinates = object.coordinates, i = -1, n = coordinates.length;
14704             while (++i < n) { streamPolygon(coordinates[i], stream); }
14705           },
14706           GeometryCollection: function(object, stream) {
14707             var geometries = object.geometries, i = -1, n = geometries.length;
14708             while (++i < n) { streamGeometry(geometries[i], stream); }
14709           }
14710         };
14711
14712         function streamLine(coordinates, stream, closed) {
14713           var i = -1, n = coordinates.length - closed, coordinate;
14714           stream.lineStart();
14715           while (++i < n) { coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); }
14716           stream.lineEnd();
14717         }
14718
14719         function streamPolygon(coordinates, stream) {
14720           var i = -1, n = coordinates.length;
14721           stream.polygonStart();
14722           while (++i < n) { streamLine(coordinates[i], stream, 1); }
14723           stream.polygonEnd();
14724         }
14725
14726         function d3_geoStream(object, stream) {
14727           if (object && streamObjectType.hasOwnProperty(object.type)) {
14728             streamObjectType[object.type](object, stream);
14729           } else {
14730             streamGeometry(object, stream);
14731           }
14732         }
14733
14734         var areaRingSum = adder();
14735
14736         var areaSum = adder(),
14737             lambda00,
14738             phi00,
14739             lambda0,
14740             cosPhi0,
14741             sinPhi0;
14742
14743         var areaStream = {
14744           point: noop$4,
14745           lineStart: noop$4,
14746           lineEnd: noop$4,
14747           polygonStart: function() {
14748             areaRingSum.reset();
14749             areaStream.lineStart = areaRingStart;
14750             areaStream.lineEnd = areaRingEnd;
14751           },
14752           polygonEnd: function() {
14753             var areaRing = +areaRingSum;
14754             areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing);
14755             this.lineStart = this.lineEnd = this.point = noop$4;
14756           },
14757           sphere: function() {
14758             areaSum.add(tau$3);
14759           }
14760         };
14761
14762         function areaRingStart() {
14763           areaStream.point = areaPointFirst;
14764         }
14765
14766         function areaRingEnd() {
14767           areaPoint(lambda00, phi00);
14768         }
14769
14770         function areaPointFirst(lambda, phi) {
14771           areaStream.point = areaPoint;
14772           lambda00 = lambda, phi00 = phi;
14773           lambda *= radians, phi *= radians;
14774           lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
14775         }
14776
14777         function areaPoint(lambda, phi) {
14778           lambda *= radians, phi *= radians;
14779           phi = phi / 2 + quarterPi; // half the angular distance from south pole
14780
14781           // Spherical excess E for a spherical triangle with vertices: south pole,
14782           // previous point, current point.  Uses a formula derived from Cagnoli’s
14783           // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
14784           var dLambda = lambda - lambda0,
14785               sdLambda = dLambda >= 0 ? 1 : -1,
14786               adLambda = sdLambda * dLambda,
14787               cosPhi = cos$1(phi),
14788               sinPhi = sin$1(phi),
14789               k = sinPhi0 * sinPhi,
14790               u = cosPhi0 * cosPhi + k * cos$1(adLambda),
14791               v = k * sdLambda * sin$1(adLambda);
14792           areaRingSum.add(atan2(v, u));
14793
14794           // Advance the previous points.
14795           lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
14796         }
14797
14798         function d3_geoArea(object) {
14799           areaSum.reset();
14800           d3_geoStream(object, areaStream);
14801           return areaSum * 2;
14802         }
14803
14804         function spherical(cartesian) {
14805           return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];
14806         }
14807
14808         function cartesian(spherical) {
14809           var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
14810           return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
14811         }
14812
14813         function cartesianDot(a, b) {
14814           return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
14815         }
14816
14817         function cartesianCross(a, b) {
14818           return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
14819         }
14820
14821         // TODO return a
14822         function cartesianAddInPlace(a, b) {
14823           a[0] += b[0], a[1] += b[1], a[2] += b[2];
14824         }
14825
14826         function cartesianScale(vector, k) {
14827           return [vector[0] * k, vector[1] * k, vector[2] * k];
14828         }
14829
14830         // TODO return d
14831         function cartesianNormalizeInPlace(d) {
14832           var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
14833           d[0] /= l, d[1] /= l, d[2] /= l;
14834         }
14835
14836         var lambda0$1, phi0, lambda1, phi1, // bounds
14837             lambda2, // previous lambda-coordinate
14838             lambda00$1, phi00$1, // first point
14839             p0, // previous 3D point
14840             deltaSum = adder(),
14841             ranges,
14842             range;
14843
14844         var boundsStream = {
14845           point: boundsPoint,
14846           lineStart: boundsLineStart,
14847           lineEnd: boundsLineEnd,
14848           polygonStart: function() {
14849             boundsStream.point = boundsRingPoint;
14850             boundsStream.lineStart = boundsRingStart;
14851             boundsStream.lineEnd = boundsRingEnd;
14852             deltaSum.reset();
14853             areaStream.polygonStart();
14854           },
14855           polygonEnd: function() {
14856             areaStream.polygonEnd();
14857             boundsStream.point = boundsPoint;
14858             boundsStream.lineStart = boundsLineStart;
14859             boundsStream.lineEnd = boundsLineEnd;
14860             if (areaRingSum < 0) { lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); }
14861             else if (deltaSum > epsilon$2) { phi1 = 90; }
14862             else if (deltaSum < -epsilon$2) { phi0 = -90; }
14863             range[0] = lambda0$1, range[1] = lambda1;
14864           },
14865           sphere: function() {
14866             lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
14867           }
14868         };
14869
14870         function boundsPoint(lambda, phi) {
14871           ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
14872           if (phi < phi0) { phi0 = phi; }
14873           if (phi > phi1) { phi1 = phi; }
14874         }
14875
14876         function linePoint(lambda, phi) {
14877           var p = cartesian([lambda * radians, phi * radians]);
14878           if (p0) {
14879             var normal = cartesianCross(p0, p),
14880                 equatorial = [normal[1], -normal[0], 0],
14881                 inflection = cartesianCross(equatorial, normal);
14882             cartesianNormalizeInPlace(inflection);
14883             inflection = spherical(inflection);
14884             var delta = lambda - lambda2,
14885                 sign = delta > 0 ? 1 : -1,
14886                 lambdai = inflection[0] * degrees$1 * sign,
14887                 phii,
14888                 antimeridian = abs$2(delta) > 180;
14889             if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
14890               phii = inflection[1] * degrees$1;
14891               if (phii > phi1) { phi1 = phii; }
14892             } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
14893               phii = -inflection[1] * degrees$1;
14894               if (phii < phi0) { phi0 = phii; }
14895             } else {
14896               if (phi < phi0) { phi0 = phi; }
14897               if (phi > phi1) { phi1 = phi; }
14898             }
14899             if (antimeridian) {
14900               if (lambda < lambda2) {
14901                 if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) { lambda1 = lambda; }
14902               } else {
14903                 if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) { lambda0$1 = lambda; }
14904               }
14905             } else {
14906               if (lambda1 >= lambda0$1) {
14907                 if (lambda < lambda0$1) { lambda0$1 = lambda; }
14908                 if (lambda > lambda1) { lambda1 = lambda; }
14909               } else {
14910                 if (lambda > lambda2) {
14911                   if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) { lambda1 = lambda; }
14912                 } else {
14913                   if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) { lambda0$1 = lambda; }
14914                 }
14915               }
14916             }
14917           } else {
14918             ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
14919           }
14920           if (phi < phi0) { phi0 = phi; }
14921           if (phi > phi1) { phi1 = phi; }
14922           p0 = p, lambda2 = lambda;
14923         }
14924
14925         function boundsLineStart() {
14926           boundsStream.point = linePoint;
14927         }
14928
14929         function boundsLineEnd() {
14930           range[0] = lambda0$1, range[1] = lambda1;
14931           boundsStream.point = boundsPoint;
14932           p0 = null;
14933         }
14934
14935         function boundsRingPoint(lambda, phi) {
14936           if (p0) {
14937             var delta = lambda - lambda2;
14938             deltaSum.add(abs$2(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
14939           } else {
14940             lambda00$1 = lambda, phi00$1 = phi;
14941           }
14942           areaStream.point(lambda, phi);
14943           linePoint(lambda, phi);
14944         }
14945
14946         function boundsRingStart() {
14947           areaStream.lineStart();
14948         }
14949
14950         function boundsRingEnd() {
14951           boundsRingPoint(lambda00$1, phi00$1);
14952           areaStream.lineEnd();
14953           if (abs$2(deltaSum) > epsilon$2) { lambda0$1 = -(lambda1 = 180); }
14954           range[0] = lambda0$1, range[1] = lambda1;
14955           p0 = null;
14956         }
14957
14958         // Finds the left-right distance between two longitudes.
14959         // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
14960         // the distance between ±180° to be 360°.
14961         function angle(lambda0, lambda1) {
14962           return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
14963         }
14964
14965         function rangeCompare(a, b) {
14966           return a[0] - b[0];
14967         }
14968
14969         function rangeContains(range, x) {
14970           return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
14971         }
14972
14973         function d3_geoBounds(feature) {
14974           var i, n, a, b, merged, deltaMax, delta;
14975
14976           phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
14977           ranges = [];
14978           d3_geoStream(feature, boundsStream);
14979
14980           // First, sort ranges by their minimum longitudes.
14981           if (n = ranges.length) {
14982             ranges.sort(rangeCompare);
14983
14984             // Then, merge any ranges that overlap.
14985             for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
14986               b = ranges[i];
14987               if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
14988                 if (angle(a[0], b[1]) > angle(a[0], a[1])) { a[1] = b[1]; }
14989                 if (angle(b[0], a[1]) > angle(a[0], a[1])) { a[0] = b[0]; }
14990               } else {
14991                 merged.push(a = b);
14992               }
14993             }
14994
14995             // Finally, find the largest gap between the merged ranges.
14996             // The final bounding box will be the inverse of this gap.
14997             for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
14998               b = merged[i];
14999               if ((delta = angle(a[1], b[0])) > deltaMax) { deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; }
15000             }
15001           }
15002
15003           ranges = range = null;
15004
15005           return lambda0$1 === Infinity || phi0 === Infinity
15006               ? [[NaN, NaN], [NaN, NaN]]
15007               : [[lambda0$1, phi0], [lambda1, phi1]];
15008         }
15009
15010         var W0, W1,
15011             X0, Y0, Z0,
15012             X1, Y1, Z1,
15013             X2, Y2, Z2,
15014             lambda00$2, phi00$2, // first point
15015             x0, y0, z0; // previous point
15016
15017         var centroidStream = {
15018           sphere: noop$4,
15019           point: centroidPoint,
15020           lineStart: centroidLineStart,
15021           lineEnd: centroidLineEnd,
15022           polygonStart: function() {
15023             centroidStream.lineStart = centroidRingStart;
15024             centroidStream.lineEnd = centroidRingEnd;
15025           },
15026           polygonEnd: function() {
15027             centroidStream.lineStart = centroidLineStart;
15028             centroidStream.lineEnd = centroidLineEnd;
15029           }
15030         };
15031
15032         // Arithmetic mean of Cartesian vectors.
15033         function centroidPoint(lambda, phi) {
15034           lambda *= radians, phi *= radians;
15035           var cosPhi = cos$1(phi);
15036           centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
15037         }
15038
15039         function centroidPointCartesian(x, y, z) {
15040           ++W0;
15041           X0 += (x - X0) / W0;
15042           Y0 += (y - Y0) / W0;
15043           Z0 += (z - Z0) / W0;
15044         }
15045
15046         function centroidLineStart() {
15047           centroidStream.point = centroidLinePointFirst;
15048         }
15049
15050         function centroidLinePointFirst(lambda, phi) {
15051           lambda *= radians, phi *= radians;
15052           var cosPhi = cos$1(phi);
15053           x0 = cosPhi * cos$1(lambda);
15054           y0 = cosPhi * sin$1(lambda);
15055           z0 = sin$1(phi);
15056           centroidStream.point = centroidLinePoint;
15057           centroidPointCartesian(x0, y0, z0);
15058         }
15059
15060         function centroidLinePoint(lambda, phi) {
15061           lambda *= radians, phi *= radians;
15062           var cosPhi = cos$1(phi),
15063               x = cosPhi * cos$1(lambda),
15064               y = cosPhi * sin$1(lambda),
15065               z = sin$1(phi),
15066               w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
15067           W1 += w;
15068           X1 += w * (x0 + (x0 = x));
15069           Y1 += w * (y0 + (y0 = y));
15070           Z1 += w * (z0 + (z0 = z));
15071           centroidPointCartesian(x0, y0, z0);
15072         }
15073
15074         function centroidLineEnd() {
15075           centroidStream.point = centroidPoint;
15076         }
15077
15078         // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
15079         // J. Applied Mechanics 42, 239 (1975).
15080         function centroidRingStart() {
15081           centroidStream.point = centroidRingPointFirst;
15082         }
15083
15084         function centroidRingEnd() {
15085           centroidRingPoint(lambda00$2, phi00$2);
15086           centroidStream.point = centroidPoint;
15087         }
15088
15089         function centroidRingPointFirst(lambda, phi) {
15090           lambda00$2 = lambda, phi00$2 = phi;
15091           lambda *= radians, phi *= radians;
15092           centroidStream.point = centroidRingPoint;
15093           var cosPhi = cos$1(phi);
15094           x0 = cosPhi * cos$1(lambda);
15095           y0 = cosPhi * sin$1(lambda);
15096           z0 = sin$1(phi);
15097           centroidPointCartesian(x0, y0, z0);
15098         }
15099
15100         function centroidRingPoint(lambda, phi) {
15101           lambda *= radians, phi *= radians;
15102           var cosPhi = cos$1(phi),
15103               x = cosPhi * cos$1(lambda),
15104               y = cosPhi * sin$1(lambda),
15105               z = sin$1(phi),
15106               cx = y0 * z - z0 * y,
15107               cy = z0 * x - x0 * z,
15108               cz = x0 * y - y0 * x,
15109               m = sqrt(cx * cx + cy * cy + cz * cz),
15110               w = asin(m), // line weight = angle
15111               v = m && -w / m; // area weight multiplier
15112           X2 += v * cx;
15113           Y2 += v * cy;
15114           Z2 += v * cz;
15115           W1 += w;
15116           X1 += w * (x0 + (x0 = x));
15117           Y1 += w * (y0 + (y0 = y));
15118           Z1 += w * (z0 + (z0 = z));
15119           centroidPointCartesian(x0, y0, z0);
15120         }
15121
15122         function d3_geoCentroid(object) {
15123           W0 = W1 =
15124           X0 = Y0 = Z0 =
15125           X1 = Y1 = Z1 =
15126           X2 = Y2 = Z2 = 0;
15127           d3_geoStream(object, centroidStream);
15128
15129           var x = X2,
15130               y = Y2,
15131               z = Z2,
15132               m = x * x + y * y + z * z;
15133
15134           // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
15135           if (m < epsilon2$1) {
15136             x = X1, y = Y1, z = Z1;
15137             // If the feature has zero length, fall back to arithmetic mean of point vectors.
15138             if (W1 < epsilon$2) { x = X0, y = Y0, z = Z0; }
15139             m = x * x + y * y + z * z;
15140             // If the feature still has an undefined ccentroid, then return.
15141             if (m < epsilon2$1) { return [NaN, NaN]; }
15142           }
15143
15144           return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1];
15145         }
15146
15147         function constant$8(x) {
15148           return function() {
15149             return x;
15150           };
15151         }
15152
15153         function compose(a, b) {
15154
15155           function compose(x, y) {
15156             return x = a(x, y), b(x[0], x[1]);
15157           }
15158
15159           if (a.invert && b.invert) { compose.invert = function(x, y) {
15160             return x = b.invert(x, y), x && a.invert(x[0], x[1]);
15161           }; }
15162
15163           return compose;
15164         }
15165
15166         function rotationIdentity(lambda, phi) {
15167           return [abs$2(lambda) > pi$3 ? lambda + Math.round(-lambda / tau$3) * tau$3 : lambda, phi];
15168         }
15169
15170         rotationIdentity.invert = rotationIdentity;
15171
15172         function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
15173           return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
15174             : rotationLambda(deltaLambda))
15175             : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
15176             : rotationIdentity);
15177         }
15178
15179         function forwardRotationLambda(deltaLambda) {
15180           return function(lambda, phi) {
15181             return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];
15182           };
15183         }
15184
15185         function rotationLambda(deltaLambda) {
15186           var rotation = forwardRotationLambda(deltaLambda);
15187           rotation.invert = forwardRotationLambda(-deltaLambda);
15188           return rotation;
15189         }
15190
15191         function rotationPhiGamma(deltaPhi, deltaGamma) {
15192           var cosDeltaPhi = cos$1(deltaPhi),
15193               sinDeltaPhi = sin$1(deltaPhi),
15194               cosDeltaGamma = cos$1(deltaGamma),
15195               sinDeltaGamma = sin$1(deltaGamma);
15196
15197           function rotation(lambda, phi) {
15198             var cosPhi = cos$1(phi),
15199                 x = cos$1(lambda) * cosPhi,
15200                 y = sin$1(lambda) * cosPhi,
15201                 z = sin$1(phi),
15202                 k = z * cosDeltaPhi + x * sinDeltaPhi;
15203             return [
15204               atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
15205               asin(k * cosDeltaGamma + y * sinDeltaGamma)
15206             ];
15207           }
15208
15209           rotation.invert = function(lambda, phi) {
15210             var cosPhi = cos$1(phi),
15211                 x = cos$1(lambda) * cosPhi,
15212                 y = sin$1(lambda) * cosPhi,
15213                 z = sin$1(phi),
15214                 k = z * cosDeltaGamma - y * sinDeltaGamma;
15215             return [
15216               atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
15217               asin(k * cosDeltaPhi - x * sinDeltaPhi)
15218             ];
15219           };
15220
15221           return rotation;
15222         }
15223
15224         function rotation(rotate) {
15225           rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
15226
15227           function forward(coordinates) {
15228             coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
15229             return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
15230           }
15231
15232           forward.invert = function(coordinates) {
15233             coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
15234             return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
15235           };
15236
15237           return forward;
15238         }
15239
15240         // Generates a circle centered at [0°, 0°], with a given radius and precision.
15241         function circleStream(stream, radius, delta, direction, t0, t1) {
15242           if (!delta) { return; }
15243           var cosRadius = cos$1(radius),
15244               sinRadius = sin$1(radius),
15245               step = direction * delta;
15246           if (t0 == null) {
15247             t0 = radius + direction * tau$3;
15248             t1 = radius - step / 2;
15249           } else {
15250             t0 = circleRadius(cosRadius, t0);
15251             t1 = circleRadius(cosRadius, t1);
15252             if (direction > 0 ? t0 < t1 : t0 > t1) { t0 += direction * tau$3; }
15253           }
15254           for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
15255             point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
15256             stream.point(point[0], point[1]);
15257           }
15258         }
15259
15260         // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
15261         function circleRadius(cosRadius, point) {
15262           point = cartesian(point), point[0] -= cosRadius;
15263           cartesianNormalizeInPlace(point);
15264           var radius = acos(-point[1]);
15265           return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3;
15266         }
15267
15268         function circle() {
15269           var center = constant$8([0, 0]),
15270               radius = constant$8(90),
15271               precision = constant$8(6),
15272               ring,
15273               rotate,
15274               stream = {point: point};
15275
15276           function point(x, y) {
15277             ring.push(x = rotate(x, y));
15278             x[0] *= degrees$1, x[1] *= degrees$1;
15279           }
15280
15281           function circle() {
15282             var c = center.apply(this, arguments),
15283                 r = radius.apply(this, arguments) * radians,
15284                 p = precision.apply(this, arguments) * radians;
15285             ring = [];
15286             rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
15287             circleStream(stream, r, p, 1);
15288             c = {type: "Polygon", coordinates: [ring]};
15289             ring = rotate = null;
15290             return c;
15291           }
15292
15293           circle.center = function(_) {
15294             return arguments.length ? (center = typeof _ === "function" ? _ : constant$8([+_[0], +_[1]]), circle) : center;
15295           };
15296
15297           circle.radius = function(_) {
15298             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$8(+_), circle) : radius;
15299           };
15300
15301           circle.precision = function(_) {
15302             return arguments.length ? (precision = typeof _ === "function" ? _ : constant$8(+_), circle) : precision;
15303           };
15304
15305           return circle;
15306         }
15307
15308         function clipBuffer() {
15309           var lines = [],
15310               line;
15311           return {
15312             point: function(x, y) {
15313               line.push([x, y]);
15314             },
15315             lineStart: function() {
15316               lines.push(line = []);
15317             },
15318             lineEnd: noop$4,
15319             rejoin: function() {
15320               if (lines.length > 1) { lines.push(lines.pop().concat(lines.shift())); }
15321             },
15322             result: function() {
15323               var result = lines;
15324               lines = [];
15325               line = null;
15326               return result;
15327             }
15328           };
15329         }
15330
15331         function pointEqual(a, b) {
15332           return abs$2(a[0] - b[0]) < epsilon$2 && abs$2(a[1] - b[1]) < epsilon$2;
15333         }
15334
15335         function Intersection(point, points, other, entry) {
15336           this.x = point;
15337           this.z = points;
15338           this.o = other; // another intersection
15339           this.e = entry; // is an entry?
15340           this.v = false; // visited
15341           this.n = this.p = null; // next & previous
15342         }
15343
15344         // A generalized polygon clipping algorithm: given a polygon that has been cut
15345         // into its visible line segments, and rejoins the segments by interpolating
15346         // along the clip edge.
15347         function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {
15348           var subject = [],
15349               clip = [],
15350               i,
15351               n;
15352
15353           segments.forEach(function(segment) {
15354             if ((n = segment.length - 1) <= 0) { return; }
15355             var n, p0 = segment[0], p1 = segment[n], x;
15356
15357             // If the first and last points of a segment are coincident, then treat as a
15358             // closed ring. TODO if all rings are closed, then the winding order of the
15359             // exterior ring should be checked.
15360             if (pointEqual(p0, p1)) {
15361               stream.lineStart();
15362               for (i = 0; i < n; ++i) { stream.point((p0 = segment[i])[0], p0[1]); }
15363               stream.lineEnd();
15364               return;
15365             }
15366
15367             subject.push(x = new Intersection(p0, segment, null, true));
15368             clip.push(x.o = new Intersection(p0, null, x, false));
15369             subject.push(x = new Intersection(p1, segment, null, false));
15370             clip.push(x.o = new Intersection(p1, null, x, true));
15371           });
15372
15373           if (!subject.length) { return; }
15374
15375           clip.sort(compareIntersection);
15376           link$1(subject);
15377           link$1(clip);
15378
15379           for (i = 0, n = clip.length; i < n; ++i) {
15380             clip[i].e = startInside = !startInside;
15381           }
15382
15383           var start = subject[0],
15384               points,
15385               point;
15386
15387           while (1) {
15388             // Find first unvisited intersection.
15389             var current = start,
15390                 isSubject = true;
15391             while (current.v) { if ((current = current.n) === start) { return; } }
15392             points = current.z;
15393             stream.lineStart();
15394             do {
15395               current.v = current.o.v = true;
15396               if (current.e) {
15397                 if (isSubject) {
15398                   for (i = 0, n = points.length; i < n; ++i) { stream.point((point = points[i])[0], point[1]); }
15399                 } else {
15400                   interpolate(current.x, current.n.x, 1, stream);
15401                 }
15402                 current = current.n;
15403               } else {
15404                 if (isSubject) {
15405                   points = current.p.z;
15406                   for (i = points.length - 1; i >= 0; --i) { stream.point((point = points[i])[0], point[1]); }
15407                 } else {
15408                   interpolate(current.x, current.p.x, -1, stream);
15409                 }
15410                 current = current.p;
15411               }
15412               current = current.o;
15413               points = current.z;
15414               isSubject = !isSubject;
15415             } while (!current.v);
15416             stream.lineEnd();
15417           }
15418         }
15419
15420         function link$1(array) {
15421           if (!(n = array.length)) { return; }
15422           var n,
15423               i = 0,
15424               a = array[0],
15425               b;
15426           while (++i < n) {
15427             a.n = b = array[i];
15428             b.p = a;
15429             a = b;
15430           }
15431           a.n = b = array[0];
15432           b.p = a;
15433         }
15434
15435         var sum$1 = adder();
15436
15437         function longitude(point) {
15438           if (abs$2(point[0]) <= pi$3)
15439             { return point[0]; }
15440           else
15441             { return sign$2(point[0]) * ((abs$2(point[0]) + pi$3) % tau$3 - pi$3); }
15442         }
15443
15444         function polygonContains(polygon, point) {
15445           var lambda = longitude(point),
15446               phi = point[1],
15447               sinPhi = sin$1(phi),
15448               normal = [sin$1(lambda), -cos$1(lambda), 0],
15449               angle = 0,
15450               winding = 0;
15451
15452           sum$1.reset();
15453
15454           if (sinPhi === 1) { phi = halfPi$2 + epsilon$2; }
15455           else if (sinPhi === -1) { phi = -halfPi$2 - epsilon$2; }
15456
15457           for (var i = 0, n = polygon.length; i < n; ++i) {
15458             if (!(m = (ring = polygon[i]).length)) { continue; }
15459             var ring,
15460                 m,
15461                 point0 = ring[m - 1],
15462                 lambda0 = longitude(point0),
15463                 phi0 = point0[1] / 2 + quarterPi,
15464                 sinPhi0 = sin$1(phi0),
15465                 cosPhi0 = cos$1(phi0);
15466
15467             for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
15468               var point1 = ring[j],
15469                   lambda1 = longitude(point1),
15470                   phi1 = point1[1] / 2 + quarterPi,
15471                   sinPhi1 = sin$1(phi1),
15472                   cosPhi1 = cos$1(phi1),
15473                   delta = lambda1 - lambda0,
15474                   sign = delta >= 0 ? 1 : -1,
15475                   absDelta = sign * delta,
15476                   antimeridian = absDelta > pi$3,
15477                   k = sinPhi0 * sinPhi1;
15478
15479               sum$1.add(atan2(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
15480               angle += antimeridian ? delta + sign * tau$3 : delta;
15481
15482               // Are the longitudes either side of the point’s meridian (lambda),
15483               // and are the latitudes smaller than the parallel (phi)?
15484               if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
15485                 var arc = cartesianCross(cartesian(point0), cartesian(point1));
15486                 cartesianNormalizeInPlace(arc);
15487                 var intersection = cartesianCross(normal, arc);
15488                 cartesianNormalizeInPlace(intersection);
15489                 var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);
15490                 if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
15491                   winding += antimeridian ^ delta >= 0 ? 1 : -1;
15492                 }
15493               }
15494             }
15495           }
15496
15497           // First, determine whether the South pole is inside or outside:
15498           //
15499           // It is inside if:
15500           // * the polygon winds around it in a clockwise direction.
15501           // * the polygon does not (cumulatively) wind around it, but has a negative
15502           //   (counter-clockwise) area.
15503           //
15504           // Second, count the (signed) number of times a segment crosses a lambda
15505           // from the point to the South pole.  If it is zero, then the point is the
15506           // same side as the South pole.
15507
15508           return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);
15509         }
15510
15511         function clip(pointVisible, clipLine, interpolate, start) {
15512           return function(sink) {
15513             var line = clipLine(sink),
15514                 ringBuffer = clipBuffer(),
15515                 ringSink = clipLine(ringBuffer),
15516                 polygonStarted = false,
15517                 polygon,
15518                 segments,
15519                 ring;
15520
15521             var clip = {
15522               point: point,
15523               lineStart: lineStart,
15524               lineEnd: lineEnd,
15525               polygonStart: function() {
15526                 clip.point = pointRing;
15527                 clip.lineStart = ringStart;
15528                 clip.lineEnd = ringEnd;
15529                 segments = [];
15530                 polygon = [];
15531               },
15532               polygonEnd: function() {
15533                 clip.point = point;
15534                 clip.lineStart = lineStart;
15535                 clip.lineEnd = lineEnd;
15536                 segments = merge(segments);
15537                 var startInside = polygonContains(polygon, start);
15538                 if (segments.length) {
15539                   if (!polygonStarted) { sink.polygonStart(), polygonStarted = true; }
15540                   clipRejoin(segments, compareIntersection, startInside, interpolate, sink);
15541                 } else if (startInside) {
15542                   if (!polygonStarted) { sink.polygonStart(), polygonStarted = true; }
15543                   sink.lineStart();
15544                   interpolate(null, null, 1, sink);
15545                   sink.lineEnd();
15546                 }
15547                 if (polygonStarted) { sink.polygonEnd(), polygonStarted = false; }
15548                 segments = polygon = null;
15549               },
15550               sphere: function() {
15551                 sink.polygonStart();
15552                 sink.lineStart();
15553                 interpolate(null, null, 1, sink);
15554                 sink.lineEnd();
15555                 sink.polygonEnd();
15556               }
15557             };
15558
15559             function point(lambda, phi) {
15560               if (pointVisible(lambda, phi)) { sink.point(lambda, phi); }
15561             }
15562
15563             function pointLine(lambda, phi) {
15564               line.point(lambda, phi);
15565             }
15566
15567             function lineStart() {
15568               clip.point = pointLine;
15569               line.lineStart();
15570             }
15571
15572             function lineEnd() {
15573               clip.point = point;
15574               line.lineEnd();
15575             }
15576
15577             function pointRing(lambda, phi) {
15578               ring.push([lambda, phi]);
15579               ringSink.point(lambda, phi);
15580             }
15581
15582             function ringStart() {
15583               ringSink.lineStart();
15584               ring = [];
15585             }
15586
15587             function ringEnd() {
15588               pointRing(ring[0][0], ring[0][1]);
15589               ringSink.lineEnd();
15590
15591               var clean = ringSink.clean(),
15592                   ringSegments = ringBuffer.result(),
15593                   i, n = ringSegments.length, m,
15594                   segment,
15595                   point;
15596
15597               ring.pop();
15598               polygon.push(ring);
15599               ring = null;
15600
15601               if (!n) { return; }
15602
15603               // No intersections.
15604               if (clean & 1) {
15605                 segment = ringSegments[0];
15606                 if ((m = segment.length - 1) > 0) {
15607                   if (!polygonStarted) { sink.polygonStart(), polygonStarted = true; }
15608                   sink.lineStart();
15609                   for (i = 0; i < m; ++i) { sink.point((point = segment[i])[0], point[1]); }
15610                   sink.lineEnd();
15611                 }
15612                 return;
15613               }
15614
15615               // Rejoin connected segments.
15616               // TODO reuse ringBuffer.rejoin()?
15617               if (n > 1 && clean & 2) { ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); }
15618
15619               segments.push(ringSegments.filter(validSegment));
15620             }
15621
15622             return clip;
15623           };
15624         }
15625
15626         function validSegment(segment) {
15627           return segment.length > 1;
15628         }
15629
15630         // Intersections are sorted along the clip edge. For both antimeridian cutting
15631         // and circle clipping, the same comparison is used.
15632         function compareIntersection(a, b) {
15633           return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1])
15634                - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]);
15635         }
15636
15637         var clipAntimeridian = clip(
15638           function() { return true; },
15639           clipAntimeridianLine,
15640           clipAntimeridianInterpolate,
15641           [-pi$3, -halfPi$2]
15642         );
15643
15644         // Takes a line and cuts into visible segments. Return values: 0 - there were
15645         // intersections or the line was empty; 1 - no intersections; 2 - there were
15646         // intersections, and the first and last segments should be rejoined.
15647         function clipAntimeridianLine(stream) {
15648           var lambda0 = NaN,
15649               phi0 = NaN,
15650               sign0 = NaN,
15651               clean; // no intersections
15652
15653           return {
15654             lineStart: function() {
15655               stream.lineStart();
15656               clean = 1;
15657             },
15658             point: function(lambda1, phi1) {
15659               var sign1 = lambda1 > 0 ? pi$3 : -pi$3,
15660                   delta = abs$2(lambda1 - lambda0);
15661               if (abs$2(delta - pi$3) < epsilon$2) { // line crosses a pole
15662                 stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2);
15663                 stream.point(sign0, phi0);
15664                 stream.lineEnd();
15665                 stream.lineStart();
15666                 stream.point(sign1, phi0);
15667                 stream.point(lambda1, phi0);
15668                 clean = 0;
15669               } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian
15670                 if (abs$2(lambda0 - sign0) < epsilon$2) { lambda0 -= sign0 * epsilon$2; } // handle degeneracies
15671                 if (abs$2(lambda1 - sign1) < epsilon$2) { lambda1 -= sign1 * epsilon$2; }
15672                 phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
15673                 stream.point(sign0, phi0);
15674                 stream.lineEnd();
15675                 stream.lineStart();
15676                 stream.point(sign1, phi0);
15677                 clean = 0;
15678               }
15679               stream.point(lambda0 = lambda1, phi0 = phi1);
15680               sign0 = sign1;
15681             },
15682             lineEnd: function() {
15683               stream.lineEnd();
15684               lambda0 = phi0 = NaN;
15685             },
15686             clean: function() {
15687               return 2 - clean; // if intersections, rejoin first and last segments
15688             }
15689           };
15690         }
15691
15692         function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
15693           var cosPhi0,
15694               cosPhi1,
15695               sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
15696           return abs$2(sinLambda0Lambda1) > epsilon$2
15697               ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
15698                   - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
15699                   / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
15700               : (phi0 + phi1) / 2;
15701         }
15702
15703         function clipAntimeridianInterpolate(from, to, direction, stream) {
15704           var phi;
15705           if (from == null) {
15706             phi = direction * halfPi$2;
15707             stream.point(-pi$3, phi);
15708             stream.point(0, phi);
15709             stream.point(pi$3, phi);
15710             stream.point(pi$3, 0);
15711             stream.point(pi$3, -phi);
15712             stream.point(0, -phi);
15713             stream.point(-pi$3, -phi);
15714             stream.point(-pi$3, 0);
15715             stream.point(-pi$3, phi);
15716           } else if (abs$2(from[0] - to[0]) > epsilon$2) {
15717             var lambda = from[0] < to[0] ? pi$3 : -pi$3;
15718             phi = direction * lambda / 2;
15719             stream.point(-lambda, phi);
15720             stream.point(0, phi);
15721             stream.point(lambda, phi);
15722           } else {
15723             stream.point(to[0], to[1]);
15724           }
15725         }
15726
15727         function clipCircle(radius) {
15728           var cr = cos$1(radius),
15729               delta = 6 * radians,
15730               smallRadius = cr > 0,
15731               notHemisphere = abs$2(cr) > epsilon$2; // TODO optimise for this common case
15732
15733           function interpolate(from, to, direction, stream) {
15734             circleStream(stream, radius, delta, direction, from, to);
15735           }
15736
15737           function visible(lambda, phi) {
15738             return cos$1(lambda) * cos$1(phi) > cr;
15739           }
15740
15741           // Takes a line and cuts into visible segments. Return values used for polygon
15742           // clipping: 0 - there were intersections or the line was empty; 1 - no
15743           // intersections 2 - there were intersections, and the first and last segments
15744           // should be rejoined.
15745           function clipLine(stream) {
15746             var point0, // previous point
15747                 c0, // code for previous point
15748                 v0, // visibility of previous point
15749                 v00, // visibility of first point
15750                 clean; // no intersections
15751             return {
15752               lineStart: function() {
15753                 v00 = v0 = false;
15754                 clean = 1;
15755               },
15756               point: function(lambda, phi) {
15757                 var point1 = [lambda, phi],
15758                     point2,
15759                     v = visible(lambda, phi),
15760                     c = smallRadius
15761                       ? v ? 0 : code(lambda, phi)
15762                       : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0;
15763                 if (!point0 && (v00 = v0 = v)) { stream.lineStart(); }
15764                 // Handle degeneracies.
15765                 // TODO ignore if not clipping polygons.
15766                 if (v !== v0) {
15767                   point2 = intersect(point0, point1);
15768                   if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {
15769                     point1[0] += epsilon$2;
15770                     point1[1] += epsilon$2;
15771                     v = visible(point1[0], point1[1]);
15772                   }
15773                 }
15774                 if (v !== v0) {
15775                   clean = 0;
15776                   if (v) {
15777                     // outside going in
15778                     stream.lineStart();
15779                     point2 = intersect(point1, point0);
15780                     stream.point(point2[0], point2[1]);
15781                   } else {
15782                     // inside going out
15783                     point2 = intersect(point0, point1);
15784                     stream.point(point2[0], point2[1]);
15785                     stream.lineEnd();
15786                   }
15787                   point0 = point2;
15788                 } else if (notHemisphere && point0 && smallRadius ^ v) {
15789                   var t;
15790                   // If the codes for two points are different, or are both zero,
15791                   // and there this segment intersects with the small circle.
15792                   if (!(c & c0) && (t = intersect(point1, point0, true))) {
15793                     clean = 0;
15794                     if (smallRadius) {
15795                       stream.lineStart();
15796                       stream.point(t[0][0], t[0][1]);
15797                       stream.point(t[1][0], t[1][1]);
15798                       stream.lineEnd();
15799                     } else {
15800                       stream.point(t[1][0], t[1][1]);
15801                       stream.lineEnd();
15802                       stream.lineStart();
15803                       stream.point(t[0][0], t[0][1]);
15804                     }
15805                   }
15806                 }
15807                 if (v && (!point0 || !pointEqual(point0, point1))) {
15808                   stream.point(point1[0], point1[1]);
15809                 }
15810                 point0 = point1, v0 = v, c0 = c;
15811               },
15812               lineEnd: function() {
15813                 if (v0) { stream.lineEnd(); }
15814                 point0 = null;
15815               },
15816               // Rejoin first and last segments if there were intersections and the first
15817               // and last points were visible.
15818               clean: function() {
15819                 return clean | ((v00 && v0) << 1);
15820               }
15821             };
15822           }
15823
15824           // Intersects the great circle between a and b with the clip circle.
15825           function intersect(a, b, two) {
15826             var pa = cartesian(a),
15827                 pb = cartesian(b);
15828
15829             // We have two planes, n1.p = d1 and n2.p = d2.
15830             // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
15831             var n1 = [1, 0, 0], // normal
15832                 n2 = cartesianCross(pa, pb),
15833                 n2n2 = cartesianDot(n2, n2),
15834                 n1n2 = n2[0], // cartesianDot(n1, n2),
15835                 determinant = n2n2 - n1n2 * n1n2;
15836
15837             // Two polar points.
15838             if (!determinant) { return !two && a; }
15839
15840             var c1 =  cr * n2n2 / determinant,
15841                 c2 = -cr * n1n2 / determinant,
15842                 n1xn2 = cartesianCross(n1, n2),
15843                 A = cartesianScale(n1, c1),
15844                 B = cartesianScale(n2, c2);
15845             cartesianAddInPlace(A, B);
15846
15847             // Solve |p(t)|^2 = 1.
15848             var u = n1xn2,
15849                 w = cartesianDot(A, u),
15850                 uu = cartesianDot(u, u),
15851                 t2 = w * w - uu * (cartesianDot(A, A) - 1);
15852
15853             if (t2 < 0) { return; }
15854
15855             var t = sqrt(t2),
15856                 q = cartesianScale(u, (-w - t) / uu);
15857             cartesianAddInPlace(q, A);
15858             q = spherical(q);
15859
15860             if (!two) { return q; }
15861
15862             // Two intersection points.
15863             var lambda0 = a[0],
15864                 lambda1 = b[0],
15865                 phi0 = a[1],
15866                 phi1 = b[1],
15867                 z;
15868
15869             if (lambda1 < lambda0) { z = lambda0, lambda0 = lambda1, lambda1 = z; }
15870
15871             var delta = lambda1 - lambda0,
15872                 polar = abs$2(delta - pi$3) < epsilon$2,
15873                 meridian = polar || delta < epsilon$2;
15874
15875             if (!polar && phi1 < phi0) { z = phi0, phi0 = phi1, phi1 = z; }
15876
15877             // Check that the first point is between a and b.
15878             if (meridian
15879                 ? polar
15880                   ? phi0 + phi1 > 0 ^ q[1] < (abs$2(q[0] - lambda0) < epsilon$2 ? phi0 : phi1)
15881                   : phi0 <= q[1] && q[1] <= phi1
15882                 : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
15883               var q1 = cartesianScale(u, (-w + t) / uu);
15884               cartesianAddInPlace(q1, A);
15885               return [q, spherical(q1)];
15886             }
15887           }
15888
15889           // Generates a 4-bit vector representing the location of a point relative to
15890           // the small circle's bounding box.
15891           function code(lambda, phi) {
15892             var r = smallRadius ? radius : pi$3 - radius,
15893                 code = 0;
15894             if (lambda < -r) { code |= 1; } // left
15895             else if (lambda > r) { code |= 2; } // right
15896             if (phi < -r) { code |= 4; } // below
15897             else if (phi > r) { code |= 8; } // above
15898             return code;
15899           }
15900
15901           return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]);
15902         }
15903
15904         function clipLine(a, b, x0, y0, x1, y1) {
15905           var ax = a[0],
15906               ay = a[1],
15907               bx = b[0],
15908               by = b[1],
15909               t0 = 0,
15910               t1 = 1,
15911               dx = bx - ax,
15912               dy = by - ay,
15913               r;
15914
15915           r = x0 - ax;
15916           if (!dx && r > 0) { return; }
15917           r /= dx;
15918           if (dx < 0) {
15919             if (r < t0) { return; }
15920             if (r < t1) { t1 = r; }
15921           } else if (dx > 0) {
15922             if (r > t1) { return; }
15923             if (r > t0) { t0 = r; }
15924           }
15925
15926           r = x1 - ax;
15927           if (!dx && r < 0) { return; }
15928           r /= dx;
15929           if (dx < 0) {
15930             if (r > t1) { return; }
15931             if (r > t0) { t0 = r; }
15932           } else if (dx > 0) {
15933             if (r < t0) { return; }
15934             if (r < t1) { t1 = r; }
15935           }
15936
15937           r = y0 - ay;
15938           if (!dy && r > 0) { return; }
15939           r /= dy;
15940           if (dy < 0) {
15941             if (r < t0) { return; }
15942             if (r < t1) { t1 = r; }
15943           } else if (dy > 0) {
15944             if (r > t1) { return; }
15945             if (r > t0) { t0 = r; }
15946           }
15947
15948           r = y1 - ay;
15949           if (!dy && r < 0) { return; }
15950           r /= dy;
15951           if (dy < 0) {
15952             if (r > t1) { return; }
15953             if (r > t0) { t0 = r; }
15954           } else if (dy > 0) {
15955             if (r < t0) { return; }
15956             if (r < t1) { t1 = r; }
15957           }
15958
15959           if (t0 > 0) { a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; }
15960           if (t1 < 1) { b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; }
15961           return true;
15962         }
15963
15964         var clipMax = 1e9, clipMin = -clipMax;
15965
15966         // TODO Use d3-polygon’s polygonContains here for the ring check?
15967         // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
15968
15969         function clipRectangle(x0, y0, x1, y1) {
15970
15971           function visible(x, y) {
15972             return x0 <= x && x <= x1 && y0 <= y && y <= y1;
15973           }
15974
15975           function interpolate(from, to, direction, stream) {
15976             var a = 0, a1 = 0;
15977             if (from == null
15978                 || (a = corner(from, direction)) !== (a1 = corner(to, direction))
15979                 || comparePoint(from, to) < 0 ^ direction > 0) {
15980               do { stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); }
15981               while ((a = (a + direction + 4) % 4) !== a1);
15982             } else {
15983               stream.point(to[0], to[1]);
15984             }
15985           }
15986
15987           function corner(p, direction) {
15988             return abs$2(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3
15989                 : abs$2(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1
15990                 : abs$2(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0
15991                 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
15992           }
15993
15994           function compareIntersection(a, b) {
15995             return comparePoint(a.x, b.x);
15996           }
15997
15998           function comparePoint(a, b) {
15999             var ca = corner(a, 1),
16000                 cb = corner(b, 1);
16001             return ca !== cb ? ca - cb
16002                 : ca === 0 ? b[1] - a[1]
16003                 : ca === 1 ? a[0] - b[0]
16004                 : ca === 2 ? a[1] - b[1]
16005                 : b[0] - a[0];
16006           }
16007
16008           return function(stream) {
16009             var activeStream = stream,
16010                 bufferStream = clipBuffer(),
16011                 segments,
16012                 polygon,
16013                 ring,
16014                 x__, y__, v__, // first point
16015                 x_, y_, v_, // previous point
16016                 first,
16017                 clean;
16018
16019             var clipStream = {
16020               point: point,
16021               lineStart: lineStart,
16022               lineEnd: lineEnd,
16023               polygonStart: polygonStart,
16024               polygonEnd: polygonEnd
16025             };
16026
16027             function point(x, y) {
16028               if (visible(x, y)) { activeStream.point(x, y); }
16029             }
16030
16031             function polygonInside() {
16032               var winding = 0;
16033
16034               for (var i = 0, n = polygon.length; i < n; ++i) {
16035                 for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
16036                   a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
16037                   if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) { ++winding; } }
16038                   else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) { --winding; } }
16039                 }
16040               }
16041
16042               return winding;
16043             }
16044
16045             // Buffer geometry within a polygon and then clip it en masse.
16046             function polygonStart() {
16047               activeStream = bufferStream, segments = [], polygon = [], clean = true;
16048             }
16049
16050             function polygonEnd() {
16051               var startInside = polygonInside(),
16052                   cleanInside = clean && startInside,
16053                   visible = (segments = merge(segments)).length;
16054               if (cleanInside || visible) {
16055                 stream.polygonStart();
16056                 if (cleanInside) {
16057                   stream.lineStart();
16058                   interpolate(null, null, 1, stream);
16059                   stream.lineEnd();
16060                 }
16061                 if (visible) {
16062                   clipRejoin(segments, compareIntersection, startInside, interpolate, stream);
16063                 }
16064                 stream.polygonEnd();
16065               }
16066               activeStream = stream, segments = polygon = ring = null;
16067             }
16068
16069             function lineStart() {
16070               clipStream.point = linePoint;
16071               if (polygon) { polygon.push(ring = []); }
16072               first = true;
16073               v_ = false;
16074               x_ = y_ = NaN;
16075             }
16076
16077             // TODO rather than special-case polygons, simply handle them separately.
16078             // Ideally, coincident intersection points should be jittered to avoid
16079             // clipping issues.
16080             function lineEnd() {
16081               if (segments) {
16082                 linePoint(x__, y__);
16083                 if (v__ && v_) { bufferStream.rejoin(); }
16084                 segments.push(bufferStream.result());
16085               }
16086               clipStream.point = point;
16087               if (v_) { activeStream.lineEnd(); }
16088             }
16089
16090             function linePoint(x, y) {
16091               var v = visible(x, y);
16092               if (polygon) { ring.push([x, y]); }
16093               if (first) {
16094                 x__ = x, y__ = y, v__ = v;
16095                 first = false;
16096                 if (v) {
16097                   activeStream.lineStart();
16098                   activeStream.point(x, y);
16099                 }
16100               } else {
16101                 if (v && v_) { activeStream.point(x, y); }
16102                 else {
16103                   var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
16104                       b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
16105                   if (clipLine(a, b, x0, y0, x1, y1)) {
16106                     if (!v_) {
16107                       activeStream.lineStart();
16108                       activeStream.point(a[0], a[1]);
16109                     }
16110                     activeStream.point(b[0], b[1]);
16111                     if (!v) { activeStream.lineEnd(); }
16112                     clean = false;
16113                   } else if (v) {
16114                     activeStream.lineStart();
16115                     activeStream.point(x, y);
16116                     clean = false;
16117                   }
16118                 }
16119               }
16120               x_ = x, y_ = y, v_ = v;
16121             }
16122
16123             return clipStream;
16124           };
16125         }
16126
16127         function extent$1() {
16128           var x0 = 0,
16129               y0 = 0,
16130               x1 = 960,
16131               y1 = 500,
16132               cache,
16133               cacheStream,
16134               clip;
16135
16136           return clip = {
16137             stream: function(stream) {
16138               return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);
16139             },
16140             extent: function(_) {
16141               return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
16142             }
16143           };
16144         }
16145
16146         var lengthSum = adder(),
16147             lambda0$2,
16148             sinPhi0$1,
16149             cosPhi0$1;
16150
16151         var lengthStream = {
16152           sphere: noop$4,
16153           point: noop$4,
16154           lineStart: lengthLineStart,
16155           lineEnd: noop$4,
16156           polygonStart: noop$4,
16157           polygonEnd: noop$4
16158         };
16159
16160         function lengthLineStart() {
16161           lengthStream.point = lengthPointFirst;
16162           lengthStream.lineEnd = lengthLineEnd;
16163         }
16164
16165         function lengthLineEnd() {
16166           lengthStream.point = lengthStream.lineEnd = noop$4;
16167         }
16168
16169         function lengthPointFirst(lambda, phi) {
16170           lambda *= radians, phi *= radians;
16171           lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
16172           lengthStream.point = lengthPoint;
16173         }
16174
16175         function lengthPoint(lambda, phi) {
16176           lambda *= radians, phi *= radians;
16177           var sinPhi = sin$1(phi),
16178               cosPhi = cos$1(phi),
16179               delta = abs$2(lambda - lambda0$2),
16180               cosDelta = cos$1(delta),
16181               sinDelta = sin$1(delta),
16182               x = cosPhi * sinDelta,
16183               y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
16184               z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
16185           lengthSum.add(atan2(sqrt(x * x + y * y), z));
16186           lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
16187         }
16188
16189         function d3_geoLength(object) {
16190           lengthSum.reset();
16191           d3_geoStream(object, lengthStream);
16192           return +lengthSum;
16193         }
16194
16195         var coordinates = [null, null],
16196             object$1 = {type: "LineString", coordinates: coordinates};
16197
16198         function distance(a, b) {
16199           coordinates[0] = a;
16200           coordinates[1] = b;
16201           return d3_geoLength(object$1);
16202         }
16203
16204         var containsObjectType = {
16205           Feature: function(object, point) {
16206             return containsGeometry(object.geometry, point);
16207           },
16208           FeatureCollection: function(object, point) {
16209             var features = object.features, i = -1, n = features.length;
16210             while (++i < n) { if (containsGeometry(features[i].geometry, point)) { return true; } }
16211             return false;
16212           }
16213         };
16214
16215         var containsGeometryType = {
16216           Sphere: function() {
16217             return true;
16218           },
16219           Point: function(object, point) {
16220             return containsPoint(object.coordinates, point);
16221           },
16222           MultiPoint: function(object, point) {
16223             var coordinates = object.coordinates, i = -1, n = coordinates.length;
16224             while (++i < n) { if (containsPoint(coordinates[i], point)) { return true; } }
16225             return false;
16226           },
16227           LineString: function(object, point) {
16228             return containsLine(object.coordinates, point);
16229           },
16230           MultiLineString: function(object, point) {
16231             var coordinates = object.coordinates, i = -1, n = coordinates.length;
16232             while (++i < n) { if (containsLine(coordinates[i], point)) { return true; } }
16233             return false;
16234           },
16235           Polygon: function(object, point) {
16236             return containsPolygon(object.coordinates, point);
16237           },
16238           MultiPolygon: function(object, point) {
16239             var coordinates = object.coordinates, i = -1, n = coordinates.length;
16240             while (++i < n) { if (containsPolygon(coordinates[i], point)) { return true; } }
16241             return false;
16242           },
16243           GeometryCollection: function(object, point) {
16244             var geometries = object.geometries, i = -1, n = geometries.length;
16245             while (++i < n) { if (containsGeometry(geometries[i], point)) { return true; } }
16246             return false;
16247           }
16248         };
16249
16250         function containsGeometry(geometry, point) {
16251           return geometry && containsGeometryType.hasOwnProperty(geometry.type)
16252               ? containsGeometryType[geometry.type](geometry, point)
16253               : false;
16254         }
16255
16256         function containsPoint(coordinates, point) {
16257           return distance(coordinates, point) === 0;
16258         }
16259
16260         function containsLine(coordinates, point) {
16261           var ao, bo, ab;
16262           for (var i = 0, n = coordinates.length; i < n; i++) {
16263             bo = distance(coordinates[i], point);
16264             if (bo === 0) { return true; }
16265             if (i > 0) {
16266               ab = distance(coordinates[i], coordinates[i - 1]);
16267               if (
16268                 ab > 0 &&
16269                 ao <= ab &&
16270                 bo <= ab &&
16271                 (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2$1 * ab
16272               )
16273                 { return true; }
16274             }
16275             ao = bo;
16276           }
16277           return false;
16278         }
16279
16280         function containsPolygon(coordinates, point) {
16281           return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));
16282         }
16283
16284         function ringRadians(ring) {
16285           return ring = ring.map(pointRadians), ring.pop(), ring;
16286         }
16287
16288         function pointRadians(point) {
16289           return [point[0] * radians, point[1] * radians];
16290         }
16291
16292         function contains$2(object, point) {
16293           return (object && containsObjectType.hasOwnProperty(object.type)
16294               ? containsObjectType[object.type]
16295               : containsGeometry)(object, point);
16296         }
16297
16298         function graticuleX(y0, y1, dy) {
16299           var y = d3_range(y0, y1 - epsilon$2, dy).concat(y1);
16300           return function(x) { return y.map(function(y) { return [x, y]; }); };
16301         }
16302
16303         function graticuleY(x0, x1, dx) {
16304           var x = d3_range(x0, x1 - epsilon$2, dx).concat(x1);
16305           return function(y) { return x.map(function(x) { return [x, y]; }); };
16306         }
16307
16308         function graticule() {
16309           var x1, x0, X1, X0,
16310               y1, y0, Y1, Y0,
16311               dx = 10, dy = dx, DX = 90, DY = 360,
16312               x, y, X, Y,
16313               precision = 2.5;
16314
16315           function graticule() {
16316             return {type: "MultiLineString", coordinates: lines()};
16317           }
16318
16319           function lines() {
16320             return d3_range(ceil(X0 / DX) * DX, X1, DX).map(X)
16321                 .concat(d3_range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
16322                 .concat(d3_range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$2(x % DX) > epsilon$2; }).map(x))
16323                 .concat(d3_range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$2(y % DY) > epsilon$2; }).map(y));
16324           }
16325
16326           graticule.lines = function() {
16327             return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; });
16328           };
16329
16330           graticule.outline = function() {
16331             return {
16332               type: "Polygon",
16333               coordinates: [
16334                 X(X0).concat(
16335                 Y(Y1).slice(1),
16336                 X(X1).reverse().slice(1),
16337                 Y(Y0).reverse().slice(1))
16338               ]
16339             };
16340           };
16341
16342           graticule.extent = function(_) {
16343             if (!arguments.length) { return graticule.extentMinor(); }
16344             return graticule.extentMajor(_).extentMinor(_);
16345           };
16346
16347           graticule.extentMajor = function(_) {
16348             if (!arguments.length) { return [[X0, Y0], [X1, Y1]]; }
16349             X0 = +_[0][0], X1 = +_[1][0];
16350             Y0 = +_[0][1], Y1 = +_[1][1];
16351             if (X0 > X1) { _ = X0, X0 = X1, X1 = _; }
16352             if (Y0 > Y1) { _ = Y0, Y0 = Y1, Y1 = _; }
16353             return graticule.precision(precision);
16354           };
16355
16356           graticule.extentMinor = function(_) {
16357             if (!arguments.length) { return [[x0, y0], [x1, y1]]; }
16358             x0 = +_[0][0], x1 = +_[1][0];
16359             y0 = +_[0][1], y1 = +_[1][1];
16360             if (x0 > x1) { _ = x0, x0 = x1, x1 = _; }
16361             if (y0 > y1) { _ = y0, y0 = y1, y1 = _; }
16362             return graticule.precision(precision);
16363           };
16364
16365           graticule.step = function(_) {
16366             if (!arguments.length) { return graticule.stepMinor(); }
16367             return graticule.stepMajor(_).stepMinor(_);
16368           };
16369
16370           graticule.stepMajor = function(_) {
16371             if (!arguments.length) { return [DX, DY]; }
16372             DX = +_[0], DY = +_[1];
16373             return graticule;
16374           };
16375
16376           graticule.stepMinor = function(_) {
16377             if (!arguments.length) { return [dx, dy]; }
16378             dx = +_[0], dy = +_[1];
16379             return graticule;
16380           };
16381
16382           graticule.precision = function(_) {
16383             if (!arguments.length) { return precision; }
16384             precision = +_;
16385             x = graticuleX(y0, y1, 90);
16386             y = graticuleY(x0, x1, precision);
16387             X = graticuleX(Y0, Y1, 90);
16388             Y = graticuleY(X0, X1, precision);
16389             return graticule;
16390           };
16391
16392           return graticule
16393               .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]])
16394               .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);
16395         }
16396
16397         function graticule10() {
16398           return graticule()();
16399         }
16400
16401         function interpolate$1(a, b) {
16402           var x0 = a[0] * radians,
16403               y0 = a[1] * radians,
16404               x1 = b[0] * radians,
16405               y1 = b[1] * radians,
16406               cy0 = cos$1(y0),
16407               sy0 = sin$1(y0),
16408               cy1 = cos$1(y1),
16409               sy1 = sin$1(y1),
16410               kx0 = cy0 * cos$1(x0),
16411               ky0 = cy0 * sin$1(x0),
16412               kx1 = cy1 * cos$1(x1),
16413               ky1 = cy1 * sin$1(x1),
16414               d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
16415               k = sin$1(d);
16416
16417           var interpolate = d ? function(t) {
16418             var B = sin$1(t *= d) / k,
16419                 A = sin$1(d - t) / k,
16420                 x = A * kx0 + B * kx1,
16421                 y = A * ky0 + B * ky1,
16422                 z = A * sy0 + B * sy1;
16423             return [
16424               atan2(y, x) * degrees$1,
16425               atan2(z, sqrt(x * x + y * y)) * degrees$1
16426             ];
16427           } : function() {
16428             return [x0 * degrees$1, y0 * degrees$1];
16429           };
16430
16431           interpolate.distance = d;
16432
16433           return interpolate;
16434         }
16435
16436         function identity$4(x) {
16437           return x;
16438         }
16439
16440         var areaSum$1 = adder(),
16441             areaRingSum$1 = adder(),
16442             x00,
16443             y00,
16444             x0$1,
16445             y0$1;
16446
16447         var areaStream$1 = {
16448           point: noop$4,
16449           lineStart: noop$4,
16450           lineEnd: noop$4,
16451           polygonStart: function() {
16452             areaStream$1.lineStart = areaRingStart$1;
16453             areaStream$1.lineEnd = areaRingEnd$1;
16454           },
16455           polygonEnd: function() {
16456             areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$4;
16457             areaSum$1.add(abs$2(areaRingSum$1));
16458             areaRingSum$1.reset();
16459           },
16460           result: function() {
16461             var area = areaSum$1 / 2;
16462             areaSum$1.reset();
16463             return area;
16464           }
16465         };
16466
16467         function areaRingStart$1() {
16468           areaStream$1.point = areaPointFirst$1;
16469         }
16470
16471         function areaPointFirst$1(x, y) {
16472           areaStream$1.point = areaPoint$1;
16473           x00 = x0$1 = x, y00 = y0$1 = y;
16474         }
16475
16476         function areaPoint$1(x, y) {
16477           areaRingSum$1.add(y0$1 * x - x0$1 * y);
16478           x0$1 = x, y0$1 = y;
16479         }
16480
16481         function areaRingEnd$1() {
16482           areaPoint$1(x00, y00);
16483         }
16484
16485         var x0$2 = Infinity,
16486             y0$2 = x0$2,
16487             x1 = -x0$2,
16488             y1 = x1;
16489
16490         var boundsStream$1 = {
16491           point: boundsPoint$1,
16492           lineStart: noop$4,
16493           lineEnd: noop$4,
16494           polygonStart: noop$4,
16495           polygonEnd: noop$4,
16496           result: function() {
16497             var bounds = [[x0$2, y0$2], [x1, y1]];
16498             x1 = y1 = -(y0$2 = x0$2 = Infinity);
16499             return bounds;
16500           }
16501         };
16502
16503         function boundsPoint$1(x, y) {
16504           if (x < x0$2) { x0$2 = x; }
16505           if (x > x1) { x1 = x; }
16506           if (y < y0$2) { y0$2 = y; }
16507           if (y > y1) { y1 = y; }
16508         }
16509
16510         // TODO Enforce positive area for exterior, negative area for interior?
16511
16512         var X0$1 = 0,
16513             Y0$1 = 0,
16514             Z0$1 = 0,
16515             X1$1 = 0,
16516             Y1$1 = 0,
16517             Z1$1 = 0,
16518             X2$1 = 0,
16519             Y2$1 = 0,
16520             Z2$1 = 0,
16521             x00$1,
16522             y00$1,
16523             x0$3,
16524             y0$3;
16525
16526         var centroidStream$1 = {
16527           point: centroidPoint$1,
16528           lineStart: centroidLineStart$1,
16529           lineEnd: centroidLineEnd$1,
16530           polygonStart: function() {
16531             centroidStream$1.lineStart = centroidRingStart$1;
16532             centroidStream$1.lineEnd = centroidRingEnd$1;
16533           },
16534           polygonEnd: function() {
16535             centroidStream$1.point = centroidPoint$1;
16536             centroidStream$1.lineStart = centroidLineStart$1;
16537             centroidStream$1.lineEnd = centroidLineEnd$1;
16538           },
16539           result: function() {
16540             var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
16541                 : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
16542                 : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
16543                 : [NaN, NaN];
16544             X0$1 = Y0$1 = Z0$1 =
16545             X1$1 = Y1$1 = Z1$1 =
16546             X2$1 = Y2$1 = Z2$1 = 0;
16547             return centroid;
16548           }
16549         };
16550
16551         function centroidPoint$1(x, y) {
16552           X0$1 += x;
16553           Y0$1 += y;
16554           ++Z0$1;
16555         }
16556
16557         function centroidLineStart$1() {
16558           centroidStream$1.point = centroidPointFirstLine;
16559         }
16560
16561         function centroidPointFirstLine(x, y) {
16562           centroidStream$1.point = centroidPointLine;
16563           centroidPoint$1(x0$3 = x, y0$3 = y);
16564         }
16565
16566         function centroidPointLine(x, y) {
16567           var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);
16568           X1$1 += z * (x0$3 + x) / 2;
16569           Y1$1 += z * (y0$3 + y) / 2;
16570           Z1$1 += z;
16571           centroidPoint$1(x0$3 = x, y0$3 = y);
16572         }
16573
16574         function centroidLineEnd$1() {
16575           centroidStream$1.point = centroidPoint$1;
16576         }
16577
16578         function centroidRingStart$1() {
16579           centroidStream$1.point = centroidPointFirstRing;
16580         }
16581
16582         function centroidRingEnd$1() {
16583           centroidPointRing(x00$1, y00$1);
16584         }
16585
16586         function centroidPointFirstRing(x, y) {
16587           centroidStream$1.point = centroidPointRing;
16588           centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
16589         }
16590
16591         function centroidPointRing(x, y) {
16592           var dx = x - x0$3,
16593               dy = y - y0$3,
16594               z = sqrt(dx * dx + dy * dy);
16595
16596           X1$1 += z * (x0$3 + x) / 2;
16597           Y1$1 += z * (y0$3 + y) / 2;
16598           Z1$1 += z;
16599
16600           z = y0$3 * x - x0$3 * y;
16601           X2$1 += z * (x0$3 + x);
16602           Y2$1 += z * (y0$3 + y);
16603           Z2$1 += z * 3;
16604           centroidPoint$1(x0$3 = x, y0$3 = y);
16605         }
16606
16607         function PathContext(context) {
16608           this._context = context;
16609         }
16610
16611         PathContext.prototype = {
16612           _radius: 4.5,
16613           pointRadius: function(_) {
16614             return this._radius = _, this;
16615           },
16616           polygonStart: function() {
16617             this._line = 0;
16618           },
16619           polygonEnd: function() {
16620             this._line = NaN;
16621           },
16622           lineStart: function() {
16623             this._point = 0;
16624           },
16625           lineEnd: function() {
16626             if (this._line === 0) { this._context.closePath(); }
16627             this._point = NaN;
16628           },
16629           point: function(x, y) {
16630             switch (this._point) {
16631               case 0: {
16632                 this._context.moveTo(x, y);
16633                 this._point = 1;
16634                 break;
16635               }
16636               case 1: {
16637                 this._context.lineTo(x, y);
16638                 break;
16639               }
16640               default: {
16641                 this._context.moveTo(x + this._radius, y);
16642                 this._context.arc(x, y, this._radius, 0, tau$3);
16643                 break;
16644               }
16645             }
16646           },
16647           result: noop$4
16648         };
16649
16650         var lengthSum$1 = adder(),
16651             lengthRing,
16652             x00$2,
16653             y00$2,
16654             x0$4,
16655             y0$4;
16656
16657         var lengthStream$1 = {
16658           point: noop$4,
16659           lineStart: function() {
16660             lengthStream$1.point = lengthPointFirst$1;
16661           },
16662           lineEnd: function() {
16663             if (lengthRing) { lengthPoint$1(x00$2, y00$2); }
16664             lengthStream$1.point = noop$4;
16665           },
16666           polygonStart: function() {
16667             lengthRing = true;
16668           },
16669           polygonEnd: function() {
16670             lengthRing = null;
16671           },
16672           result: function() {
16673             var length = +lengthSum$1;
16674             lengthSum$1.reset();
16675             return length;
16676           }
16677         };
16678
16679         function lengthPointFirst$1(x, y) {
16680           lengthStream$1.point = lengthPoint$1;
16681           x00$2 = x0$4 = x, y00$2 = y0$4 = y;
16682         }
16683
16684         function lengthPoint$1(x, y) {
16685           x0$4 -= x, y0$4 -= y;
16686           lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));
16687           x0$4 = x, y0$4 = y;
16688         }
16689
16690         function PathString() {
16691           this._string = [];
16692         }
16693
16694         PathString.prototype = {
16695           _radius: 4.5,
16696           _circle: circle$1(4.5),
16697           pointRadius: function(_) {
16698             if ((_ = +_) !== this._radius) { this._radius = _, this._circle = null; }
16699             return this;
16700           },
16701           polygonStart: function() {
16702             this._line = 0;
16703           },
16704           polygonEnd: function() {
16705             this._line = NaN;
16706           },
16707           lineStart: function() {
16708             this._point = 0;
16709           },
16710           lineEnd: function() {
16711             if (this._line === 0) { this._string.push("Z"); }
16712             this._point = NaN;
16713           },
16714           point: function(x, y) {
16715             switch (this._point) {
16716               case 0: {
16717                 this._string.push("M", x, ",", y);
16718                 this._point = 1;
16719                 break;
16720               }
16721               case 1: {
16722                 this._string.push("L", x, ",", y);
16723                 break;
16724               }
16725               default: {
16726                 if (this._circle == null) { this._circle = circle$1(this._radius); }
16727                 this._string.push("M", x, ",", y, this._circle);
16728                 break;
16729               }
16730             }
16731           },
16732           result: function() {
16733             if (this._string.length) {
16734               var result = this._string.join("");
16735               this._string = [];
16736               return result;
16737             } else {
16738               return null;
16739             }
16740           }
16741         };
16742
16743         function circle$1(radius) {
16744           return "m0," + radius
16745               + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
16746               + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
16747               + "z";
16748         }
16749
16750         function d3_geoPath(projection, context) {
16751           var pointRadius = 4.5,
16752               projectionStream,
16753               contextStream;
16754
16755           function path(object) {
16756             if (object) {
16757               if (typeof pointRadius === "function") { contextStream.pointRadius(+pointRadius.apply(this, arguments)); }
16758               d3_geoStream(object, projectionStream(contextStream));
16759             }
16760             return contextStream.result();
16761           }
16762
16763           path.area = function(object) {
16764             d3_geoStream(object, projectionStream(areaStream$1));
16765             return areaStream$1.result();
16766           };
16767
16768           path.measure = function(object) {
16769             d3_geoStream(object, projectionStream(lengthStream$1));
16770             return lengthStream$1.result();
16771           };
16772
16773           path.bounds = function(object) {
16774             d3_geoStream(object, projectionStream(boundsStream$1));
16775             return boundsStream$1.result();
16776           };
16777
16778           path.centroid = function(object) {
16779             d3_geoStream(object, projectionStream(centroidStream$1));
16780             return centroidStream$1.result();
16781           };
16782
16783           path.projection = function(_) {
16784             return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection;
16785           };
16786
16787           path.context = function(_) {
16788             if (!arguments.length) { return context; }
16789             contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);
16790             if (typeof pointRadius !== "function") { contextStream.pointRadius(pointRadius); }
16791             return path;
16792           };
16793
16794           path.pointRadius = function(_) {
16795             if (!arguments.length) { return pointRadius; }
16796             pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
16797             return path;
16798           };
16799
16800           return path.projection(projection).context(context);
16801         }
16802
16803         function d3_geoTransform(methods) {
16804           return {
16805             stream: transformer(methods)
16806           };
16807         }
16808
16809         function transformer(methods) {
16810           return function(stream) {
16811             var s = new TransformStream;
16812             for (var key in methods) { s[key] = methods[key]; }
16813             s.stream = stream;
16814             return s;
16815           };
16816         }
16817
16818         function TransformStream() {}
16819
16820         TransformStream.prototype = {
16821           constructor: TransformStream,
16822           point: function(x, y) { this.stream.point(x, y); },
16823           sphere: function() { this.stream.sphere(); },
16824           lineStart: function() { this.stream.lineStart(); },
16825           lineEnd: function() { this.stream.lineEnd(); },
16826           polygonStart: function() { this.stream.polygonStart(); },
16827           polygonEnd: function() { this.stream.polygonEnd(); }
16828         };
16829
16830         function fit(projection, fitBounds, object) {
16831           var clip = projection.clipExtent && projection.clipExtent();
16832           projection.scale(150).translate([0, 0]);
16833           if (clip != null) { projection.clipExtent(null); }
16834           d3_geoStream(object, projection.stream(boundsStream$1));
16835           fitBounds(boundsStream$1.result());
16836           if (clip != null) { projection.clipExtent(clip); }
16837           return projection;
16838         }
16839
16840         function fitExtent(projection, extent, object) {
16841           return fit(projection, function(b) {
16842             var w = extent[1][0] - extent[0][0],
16843                 h = extent[1][1] - extent[0][1],
16844                 k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
16845                 x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
16846                 y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
16847             projection.scale(150 * k).translate([x, y]);
16848           }, object);
16849         }
16850
16851         function fitSize(projection, size, object) {
16852           return fitExtent(projection, [[0, 0], size], object);
16853         }
16854
16855         function fitWidth(projection, width, object) {
16856           return fit(projection, function(b) {
16857             var w = +width,
16858                 k = w / (b[1][0] - b[0][0]),
16859                 x = (w - k * (b[1][0] + b[0][0])) / 2,
16860                 y = -k * b[0][1];
16861             projection.scale(150 * k).translate([x, y]);
16862           }, object);
16863         }
16864
16865         function fitHeight(projection, height, object) {
16866           return fit(projection, function(b) {
16867             var h = +height,
16868                 k = h / (b[1][1] - b[0][1]),
16869                 x = -k * b[0][0],
16870                 y = (h - k * (b[1][1] + b[0][1])) / 2;
16871             projection.scale(150 * k).translate([x, y]);
16872           }, object);
16873         }
16874
16875         var maxDepth = 16, // maximum depth of subdivision
16876             cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
16877
16878         function resample(project, delta2) {
16879           return +delta2 ? resample$1(project, delta2) : resampleNone(project);
16880         }
16881
16882         function resampleNone(project) {
16883           return transformer({
16884             point: function(x, y) {
16885               x = project(x, y);
16886               this.stream.point(x[0], x[1]);
16887             }
16888           });
16889         }
16890
16891         function resample$1(project, delta2) {
16892
16893           function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
16894             var dx = x1 - x0,
16895                 dy = y1 - y0,
16896                 d2 = dx * dx + dy * dy;
16897             if (d2 > 4 * delta2 && depth--) {
16898               var a = a0 + a1,
16899                   b = b0 + b1,
16900                   c = c0 + c1,
16901                   m = sqrt(a * a + b * b + c * c),
16902                   phi2 = asin(c /= m),
16903                   lambda2 = abs$2(abs$2(c) - 1) < epsilon$2 || abs$2(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a),
16904                   p = project(lambda2, phi2),
16905                   x2 = p[0],
16906                   y2 = p[1],
16907                   dx2 = x2 - x0,
16908                   dy2 = y2 - y0,
16909                   dz = dy * dx2 - dx * dy2;
16910               if (dz * dz / d2 > delta2 // perpendicular projected distance
16911                   || abs$2((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
16912                   || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
16913                 resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
16914                 stream.point(x2, y2);
16915                 resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
16916               }
16917             }
16918           }
16919           return function(stream) {
16920             var lambda00, x00, y00, a00, b00, c00, // first point
16921                 lambda0, x0, y0, a0, b0, c0; // previous point
16922
16923             var resampleStream = {
16924               point: point,
16925               lineStart: lineStart,
16926               lineEnd: lineEnd,
16927               polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
16928               polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
16929             };
16930
16931             function point(x, y) {
16932               x = project(x, y);
16933               stream.point(x[0], x[1]);
16934             }
16935
16936             function lineStart() {
16937               x0 = NaN;
16938               resampleStream.point = linePoint;
16939               stream.lineStart();
16940             }
16941
16942             function linePoint(lambda, phi) {
16943               var c = cartesian([lambda, phi]), p = project(lambda, phi);
16944               resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
16945               stream.point(x0, y0);
16946             }
16947
16948             function lineEnd() {
16949               resampleStream.point = point;
16950               stream.lineEnd();
16951             }
16952
16953             function ringStart() {
16954               lineStart();
16955               resampleStream.point = ringPoint;
16956               resampleStream.lineEnd = ringEnd;
16957             }
16958
16959             function ringPoint(lambda, phi) {
16960               linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
16961               resampleStream.point = linePoint;
16962             }
16963
16964             function ringEnd() {
16965               resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
16966               resampleStream.lineEnd = lineEnd;
16967               lineEnd();
16968             }
16969
16970             return resampleStream;
16971           };
16972         }
16973
16974         var transformRadians = transformer({
16975           point: function(x, y) {
16976             this.stream.point(x * radians, y * radians);
16977           }
16978         });
16979
16980         function transformRotate(rotate) {
16981           return transformer({
16982             point: function(x, y) {
16983               var r = rotate(x, y);
16984               return this.stream.point(r[0], r[1]);
16985             }
16986           });
16987         }
16988
16989         function scaleTranslate(k, dx, dy) {
16990           function transform(x, y) {
16991             return [dx + k * x, dy - k * y];
16992           }
16993           transform.invert = function(x, y) {
16994             return [(x - dx) / k, (dy - y) / k];
16995           };
16996           return transform;
16997         }
16998
16999         function scaleTranslateRotate(k, dx, dy, alpha) {
17000           var cosAlpha = cos$1(alpha),
17001               sinAlpha = sin$1(alpha),
17002               a = cosAlpha * k,
17003               b = sinAlpha * k,
17004               ai = cosAlpha / k,
17005               bi = sinAlpha / k,
17006               ci = (sinAlpha * dy - cosAlpha * dx) / k,
17007               fi = (sinAlpha * dx + cosAlpha * dy) / k;
17008           function transform(x, y) {
17009             return [a * x - b * y + dx, dy - b * x - a * y];
17010           }
17011           transform.invert = function(x, y) {
17012             return [ai * x - bi * y + ci, fi - bi * x - ai * y];
17013           };
17014           return transform;
17015         }
17016
17017         function projection(project) {
17018           return projectionMutator(function() { return project; })();
17019         }
17020
17021         function projectionMutator(projectAt) {
17022           var project,
17023               k = 150, // scale
17024               x = 480, y = 250, // translate
17025               lambda = 0, phi = 0, // center
17026               deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate
17027               alpha = 0, // post-rotate
17028               theta = null, preclip = clipAntimeridian, // pre-clip angle
17029               x0 = null, y0, x1, y1, postclip = identity$4, // post-clip extent
17030               delta2 = 0.5, // precision
17031               projectResample,
17032               projectTransform,
17033               projectRotateTransform,
17034               cache,
17035               cacheStream;
17036
17037           function projection(point) {
17038             return projectRotateTransform(point[0] * radians, point[1] * radians);
17039           }
17040
17041           function invert(point) {
17042             point = projectRotateTransform.invert(point[0], point[1]);
17043             return point && [point[0] * degrees$1, point[1] * degrees$1];
17044           }
17045
17046           projection.stream = function(stream) {
17047             return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));
17048           };
17049
17050           projection.preclip = function(_) {
17051             return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;
17052           };
17053
17054           projection.postclip = function(_) {
17055             return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
17056           };
17057
17058           projection.clipAngle = function(_) {
17059             return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
17060           };
17061
17062           projection.clipExtent = function(_) {
17063             return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
17064           };
17065
17066           projection.scale = function(_) {
17067             return arguments.length ? (k = +_, recenter()) : k;
17068           };
17069
17070           projection.translate = function(_) {
17071             return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
17072           };
17073
17074           projection.center = function(_) {
17075             return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
17076           };
17077
17078           projection.rotate = function(_) {
17079             return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];
17080           };
17081
17082           projection.angle = function(_) {
17083             return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1;
17084           };
17085
17086           projection.precision = function(_) {
17087             return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);
17088           };
17089
17090           projection.fitExtent = function(extent, object) {
17091             return fitExtent(projection, extent, object);
17092           };
17093
17094           projection.fitSize = function(size, object) {
17095             return fitSize(projection, size, object);
17096           };
17097
17098           projection.fitWidth = function(width, object) {
17099             return fitWidth(projection, width, object);
17100           };
17101
17102           projection.fitHeight = function(height, object) {
17103             return fitHeight(projection, height, object);
17104           };
17105
17106           function recenter() {
17107             var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),
17108                 transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);
17109             rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);
17110             projectTransform = compose(project, transform);
17111             projectRotateTransform = compose(rotate, projectTransform);
17112             projectResample = resample(projectTransform, delta2);
17113             return reset();
17114           }
17115
17116           function reset() {
17117             cache = cacheStream = null;
17118             return projection;
17119           }
17120
17121           return function() {
17122             project = projectAt.apply(this, arguments);
17123             projection.invert = project.invert && invert;
17124             return recenter();
17125           };
17126         }
17127
17128         function conicProjection(projectAt) {
17129           var phi0 = 0,
17130               phi1 = pi$3 / 3,
17131               m = projectionMutator(projectAt),
17132               p = m(phi0, phi1);
17133
17134           p.parallels = function(_) {
17135             return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
17136           };
17137
17138           return p;
17139         }
17140
17141         function cylindricalEqualAreaRaw(phi0) {
17142           var cosPhi0 = cos$1(phi0);
17143
17144           function forward(lambda, phi) {
17145             return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
17146           }
17147
17148           forward.invert = function(x, y) {
17149             return [x / cosPhi0, asin(y * cosPhi0)];
17150           };
17151
17152           return forward;
17153         }
17154
17155         function conicEqualAreaRaw(y0, y1) {
17156           var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
17157
17158           // Are the parallels symmetrical around the Equator?
17159           if (abs$2(n) < epsilon$2) { return cylindricalEqualAreaRaw(y0); }
17160
17161           var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;
17162
17163           function project(x, y) {
17164             var r = sqrt(c - 2 * n * sin$1(y)) / n;
17165             return [r * sin$1(x *= n), r0 - r * cos$1(x)];
17166           }
17167
17168           project.invert = function(x, y) {
17169             var r0y = r0 - y;
17170             return [atan2(x, abs$2(r0y)) / n * sign$2(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
17171           };
17172
17173           return project;
17174         }
17175
17176         function conicEqualArea() {
17177           return conicProjection(conicEqualAreaRaw)
17178               .scale(155.424)
17179               .center([0, 33.6442]);
17180         }
17181
17182         function albers() {
17183           return conicEqualArea()
17184               .parallels([29.5, 45.5])
17185               .scale(1070)
17186               .translate([480, 250])
17187               .rotate([96, 0])
17188               .center([-0.6, 38.7]);
17189         }
17190
17191         // The projections must have mutually exclusive clip regions on the sphere,
17192         // as this will avoid emitting interleaving lines and polygons.
17193         function multiplex(streams) {
17194           var n = streams.length;
17195           return {
17196             point: function(x, y) { var i = -1; while (++i < n) { streams[i].point(x, y); } },
17197             sphere: function() { var i = -1; while (++i < n) { streams[i].sphere(); } },
17198             lineStart: function() { var i = -1; while (++i < n) { streams[i].lineStart(); } },
17199             lineEnd: function() { var i = -1; while (++i < n) { streams[i].lineEnd(); } },
17200             polygonStart: function() { var i = -1; while (++i < n) { streams[i].polygonStart(); } },
17201             polygonEnd: function() { var i = -1; while (++i < n) { streams[i].polygonEnd(); } }
17202           };
17203         }
17204
17205         // A composite projection for the United States, configured by default for
17206         // 960×500. The projection also works quite well at 960×600 if you change the
17207         // scale to 1285 and adjust the translate accordingly. The set of standard
17208         // parallels for each region comes from USGS, which is published here:
17209         // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
17210         function albersUsa() {
17211           var cache,
17212               cacheStream,
17213               lower48 = albers(), lower48Point,
17214               alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
17215               hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
17216               point, pointStream = {point: function(x, y) { point = [x, y]; }};
17217
17218           function albersUsa(coordinates) {
17219             var x = coordinates[0], y = coordinates[1];
17220             return point = null,
17221                 (lower48Point.point(x, y), point)
17222                 || (alaskaPoint.point(x, y), point)
17223                 || (hawaiiPoint.point(x, y), point);
17224           }
17225
17226           albersUsa.invert = function(coordinates) {
17227             var k = lower48.scale(),
17228                 t = lower48.translate(),
17229                 x = (coordinates[0] - t[0]) / k,
17230                 y = (coordinates[1] - t[1]) / k;
17231             return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
17232                 : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
17233                 : lower48).invert(coordinates);
17234           };
17235
17236           albersUsa.stream = function(stream) {
17237             return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
17238           };
17239
17240           albersUsa.precision = function(_) {
17241             if (!arguments.length) { return lower48.precision(); }
17242             lower48.precision(_), alaska.precision(_), hawaii.precision(_);
17243             return reset();
17244           };
17245
17246           albersUsa.scale = function(_) {
17247             if (!arguments.length) { return lower48.scale(); }
17248             lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
17249             return albersUsa.translate(lower48.translate());
17250           };
17251
17252           albersUsa.translate = function(_) {
17253             if (!arguments.length) { return lower48.translate(); }
17254             var k = lower48.scale(), x = +_[0], y = +_[1];
17255
17256             lower48Point = lower48
17257                 .translate(_)
17258                 .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
17259                 .stream(pointStream);
17260
17261             alaskaPoint = alaska
17262                 .translate([x - 0.307 * k, y + 0.201 * k])
17263                 .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]])
17264                 .stream(pointStream);
17265
17266             hawaiiPoint = hawaii
17267                 .translate([x - 0.205 * k, y + 0.212 * k])
17268                 .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]])
17269                 .stream(pointStream);
17270
17271             return reset();
17272           };
17273
17274           albersUsa.fitExtent = function(extent, object) {
17275             return fitExtent(albersUsa, extent, object);
17276           };
17277
17278           albersUsa.fitSize = function(size, object) {
17279             return fitSize(albersUsa, size, object);
17280           };
17281
17282           albersUsa.fitWidth = function(width, object) {
17283             return fitWidth(albersUsa, width, object);
17284           };
17285
17286           albersUsa.fitHeight = function(height, object) {
17287             return fitHeight(albersUsa, height, object);
17288           };
17289
17290           function reset() {
17291             cache = cacheStream = null;
17292             return albersUsa;
17293           }
17294
17295           return albersUsa.scale(1070);
17296         }
17297
17298         function azimuthalRaw(scale) {
17299           return function(x, y) {
17300             var cx = cos$1(x),
17301                 cy = cos$1(y),
17302                 k = scale(cx * cy);
17303             return [
17304               k * cy * sin$1(x),
17305               k * sin$1(y)
17306             ];
17307           }
17308         }
17309
17310         function azimuthalInvert(angle) {
17311           return function(x, y) {
17312             var z = sqrt(x * x + y * y),
17313                 c = angle(z),
17314                 sc = sin$1(c),
17315                 cc = cos$1(c);
17316             return [
17317               atan2(x * sc, z * cc),
17318               asin(z && y * sc / z)
17319             ];
17320           }
17321         }
17322
17323         var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
17324           return sqrt(2 / (1 + cxcy));
17325         });
17326
17327         azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
17328           return 2 * asin(z / 2);
17329         });
17330
17331         function azimuthalEqualArea() {
17332           return projection(azimuthalEqualAreaRaw)
17333               .scale(124.75)
17334               .clipAngle(180 - 1e-3);
17335         }
17336
17337         var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
17338           return (c = acos(c)) && c / sin$1(c);
17339         });
17340
17341         azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
17342           return z;
17343         });
17344
17345         function azimuthalEquidistant() {
17346           return projection(azimuthalEquidistantRaw)
17347               .scale(79.4188)
17348               .clipAngle(180 - 1e-3);
17349         }
17350
17351         function mercatorRaw(lambda, phi) {
17352           return [lambda, log(tan((halfPi$2 + phi) / 2))];
17353         }
17354
17355         mercatorRaw.invert = function(x, y) {
17356           return [x, 2 * atan(exp(y)) - halfPi$2];
17357         };
17358
17359         function mercator() {
17360           return mercatorProjection(mercatorRaw)
17361               .scale(961 / tau$3);
17362         }
17363
17364         function mercatorProjection(project) {
17365           var m = projection(project),
17366               center = m.center,
17367               scale = m.scale,
17368               translate = m.translate,
17369               clipExtent = m.clipExtent,
17370               x0 = null, y0, x1, y1; // clip extent
17371
17372           m.scale = function(_) {
17373             return arguments.length ? (scale(_), reclip()) : scale();
17374           };
17375
17376           m.translate = function(_) {
17377             return arguments.length ? (translate(_), reclip()) : translate();
17378           };
17379
17380           m.center = function(_) {
17381             return arguments.length ? (center(_), reclip()) : center();
17382           };
17383
17384           m.clipExtent = function(_) {
17385             return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];
17386           };
17387
17388           function reclip() {
17389             var k = pi$3 * scale(),
17390                 t = m(rotation(m.rotate()).invert([0, 0]));
17391             return clipExtent(x0 == null
17392                 ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw
17393                 ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]
17394                 : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);
17395           }
17396
17397           return reclip();
17398         }
17399
17400         function tany(y) {
17401           return tan((halfPi$2 + y) / 2);
17402         }
17403
17404         function conicConformalRaw(y0, y1) {
17405           var cy0 = cos$1(y0),
17406               n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)),
17407               f = cy0 * pow(tany(y0), n) / n;
17408
17409           if (!n) { return mercatorRaw; }
17410
17411           function project(x, y) {
17412             if (f > 0) { if (y < -halfPi$2 + epsilon$2) { y = -halfPi$2 + epsilon$2; } }
17413             else { if (y > halfPi$2 - epsilon$2) { y = halfPi$2 - epsilon$2; } }
17414             var r = f / pow(tany(y), n);
17415             return [r * sin$1(n * x), f - r * cos$1(n * x)];
17416           }
17417
17418           project.invert = function(x, y) {
17419             var fy = f - y, r = sign$2(n) * sqrt(x * x + fy * fy);
17420             return [atan2(x, abs$2(fy)) / n * sign$2(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2];
17421           };
17422
17423           return project;
17424         }
17425
17426         function conicConformal() {
17427           return conicProjection(conicConformalRaw)
17428               .scale(109.5)
17429               .parallels([30, 30]);
17430         }
17431
17432         function equirectangularRaw(lambda, phi) {
17433           return [lambda, phi];
17434         }
17435
17436         equirectangularRaw.invert = equirectangularRaw;
17437
17438         function equirectangular() {
17439           return projection(equirectangularRaw)
17440               .scale(152.63);
17441         }
17442
17443         function conicEquidistantRaw(y0, y1) {
17444           var cy0 = cos$1(y0),
17445               n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
17446               g = cy0 / n + y0;
17447
17448           if (abs$2(n) < epsilon$2) { return equirectangularRaw; }
17449
17450           function project(x, y) {
17451             var gy = g - y, nx = n * x;
17452             return [gy * sin$1(nx), g - gy * cos$1(nx)];
17453           }
17454
17455           project.invert = function(x, y) {
17456             var gy = g - y;
17457             return [atan2(x, abs$2(gy)) / n * sign$2(gy), g - sign$2(n) * sqrt(x * x + gy * gy)];
17458           };
17459
17460           return project;
17461         }
17462
17463         function conicEquidistant() {
17464           return conicProjection(conicEquidistantRaw)
17465               .scale(131.154)
17466               .center([0, 13.9389]);
17467         }
17468
17469         var A1 = 1.340264,
17470             A2 = -0.081106,
17471             A3 = 0.000893,
17472             A4 = 0.003796,
17473             M = sqrt(3) / 2,
17474             iterations = 12;
17475
17476         function equalEarthRaw(lambda, phi) {
17477           var l = asin(M * sin$1(phi)), l2 = l * l, l6 = l2 * l2 * l2;
17478           return [
17479             lambda * cos$1(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),
17480             l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))
17481           ];
17482         }
17483
17484         equalEarthRaw.invert = function(x, y) {
17485           var l = y, l2 = l * l, l6 = l2 * l2 * l2;
17486           for (var i = 0, delta, fy, fpy; i < iterations; ++i) {
17487             fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;
17488             fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);
17489             l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;
17490             if (abs$2(delta) < epsilon2$1) { break; }
17491           }
17492           return [
17493             M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos$1(l),
17494             asin(sin$1(l) / M)
17495           ];
17496         };
17497
17498         function equalEarth() {
17499           return projection(equalEarthRaw)
17500               .scale(177.158);
17501         }
17502
17503         function gnomonicRaw(x, y) {
17504           var cy = cos$1(y), k = cos$1(x) * cy;
17505           return [cy * sin$1(x) / k, sin$1(y) / k];
17506         }
17507
17508         gnomonicRaw.invert = azimuthalInvert(atan);
17509
17510         function gnomonic() {
17511           return projection(gnomonicRaw)
17512               .scale(144.049)
17513               .clipAngle(60);
17514         }
17515
17516         function scaleTranslate$1(kx, ky, tx, ty) {
17517           return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({
17518             point: function(x, y) {
17519               this.stream.point(x * kx + tx, y * ky + ty);
17520             }
17521           });
17522         }
17523
17524         function d3_geoIdentity() {
17525           var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect
17526               x0 = null, y0, x1, y1, // clip extent
17527               postclip = identity$4,
17528               cache,
17529               cacheStream,
17530               projection;
17531
17532           function reset() {
17533             cache = cacheStream = null;
17534             return projection;
17535           }
17536
17537           return projection = {
17538             stream: function(stream) {
17539               return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));
17540             },
17541             postclip: function(_) {
17542               return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
17543             },
17544             clipExtent: function(_) {
17545               return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
17546             },
17547             scale: function(_) {
17548               return arguments.length ? (transform = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;
17549             },
17550             translate: function(_) {
17551               return arguments.length ? (transform = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
17552             },
17553             reflectX: function(_) {
17554               return arguments.length ? (transform = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
17555             },
17556             reflectY: function(_) {
17557               return arguments.length ? (transform = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
17558             },
17559             fitExtent: function(extent, object) {
17560               return fitExtent(projection, extent, object);
17561             },
17562             fitSize: function(size, object) {
17563               return fitSize(projection, size, object);
17564             },
17565             fitWidth: function(width, object) {
17566               return fitWidth(projection, width, object);
17567             },
17568             fitHeight: function(height, object) {
17569               return fitHeight(projection, height, object);
17570             }
17571           };
17572         }
17573
17574         function naturalEarth1Raw(lambda, phi) {
17575           var phi2 = phi * phi, phi4 = phi2 * phi2;
17576           return [
17577             lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),
17578             phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))
17579           ];
17580         }
17581
17582         naturalEarth1Raw.invert = function(x, y) {
17583           var phi = y, i = 25, delta;
17584           do {
17585             var phi2 = phi * phi, phi4 = phi2 * phi2;
17586             phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /
17587                 (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));
17588           } while (abs$2(delta) > epsilon$2 && --i > 0);
17589           return [
17590             x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),
17591             phi
17592           ];
17593         };
17594
17595         function naturalEarth1() {
17596           return projection(naturalEarth1Raw)
17597               .scale(175.295);
17598         }
17599
17600         function orthographicRaw(x, y) {
17601           return [cos$1(y) * sin$1(x), sin$1(y)];
17602         }
17603
17604         orthographicRaw.invert = azimuthalInvert(asin);
17605
17606         function orthographic() {
17607           return projection(orthographicRaw)
17608               .scale(249.5)
17609               .clipAngle(90 + epsilon$2);
17610         }
17611
17612         function stereographicRaw(x, y) {
17613           var cy = cos$1(y), k = 1 + cos$1(x) * cy;
17614           return [cy * sin$1(x) / k, sin$1(y) / k];
17615         }
17616
17617         stereographicRaw.invert = azimuthalInvert(function(z) {
17618           return 2 * atan(z);
17619         });
17620
17621         function stereographic() {
17622           return projection(stereographicRaw)
17623               .scale(250)
17624               .clipAngle(142);
17625         }
17626
17627         function transverseMercatorRaw(lambda, phi) {
17628           return [log(tan((halfPi$2 + phi) / 2)), -lambda];
17629         }
17630
17631         transverseMercatorRaw.invert = function(x, y) {
17632           return [-y, 2 * atan(exp(x)) - halfPi$2];
17633         };
17634
17635         function transverseMercator() {
17636           var m = mercatorProjection(transverseMercatorRaw),
17637               center = m.center,
17638               rotate = m.rotate;
17639
17640           m.center = function(_) {
17641             return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
17642           };
17643
17644           m.rotate = function(_) {
17645             return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
17646           };
17647
17648           return rotate([0, 0, 90])
17649               .scale(159.155);
17650         }
17651
17652         function defaultSeparation(a, b) {
17653           return a.parent === b.parent ? 1 : 2;
17654         }
17655
17656         function meanX(children) {
17657           return children.reduce(meanXReduce, 0) / children.length;
17658         }
17659
17660         function meanXReduce(x, c) {
17661           return x + c.x;
17662         }
17663
17664         function maxY(children) {
17665           return 1 + children.reduce(maxYReduce, 0);
17666         }
17667
17668         function maxYReduce(y, c) {
17669           return Math.max(y, c.y);
17670         }
17671
17672         function leafLeft(node) {
17673           var children;
17674           while (children = node.children) { node = children[0]; }
17675           return node;
17676         }
17677
17678         function leafRight(node) {
17679           var children;
17680           while (children = node.children) { node = children[children.length - 1]; }
17681           return node;
17682         }
17683
17684         function cluster() {
17685           var separation = defaultSeparation,
17686               dx = 1,
17687               dy = 1,
17688               nodeSize = false;
17689
17690           function cluster(root) {
17691             var previousNode,
17692                 x = 0;
17693
17694             // First walk, computing the initial x & y values.
17695             root.eachAfter(function(node) {
17696               var children = node.children;
17697               if (children) {
17698                 node.x = meanX(children);
17699                 node.y = maxY(children);
17700               } else {
17701                 node.x = previousNode ? x += separation(node, previousNode) : 0;
17702                 node.y = 0;
17703                 previousNode = node;
17704               }
17705             });
17706
17707             var left = leafLeft(root),
17708                 right = leafRight(root),
17709                 x0 = left.x - separation(left, right) / 2,
17710                 x1 = right.x + separation(right, left) / 2;
17711
17712             // Second walk, normalizing x & y to the desired size.
17713             return root.eachAfter(nodeSize ? function(node) {
17714               node.x = (node.x - root.x) * dx;
17715               node.y = (root.y - node.y) * dy;
17716             } : function(node) {
17717               node.x = (node.x - x0) / (x1 - x0) * dx;
17718               node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
17719             });
17720           }
17721
17722           cluster.separation = function(x) {
17723             return arguments.length ? (separation = x, cluster) : separation;
17724           };
17725
17726           cluster.size = function(x) {
17727             return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
17728           };
17729
17730           cluster.nodeSize = function(x) {
17731             return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
17732           };
17733
17734           return cluster;
17735         }
17736
17737         function count(node) {
17738           var sum = 0,
17739               children = node.children,
17740               i = children && children.length;
17741           if (!i) { sum = 1; }
17742           else { while (--i >= 0) { sum += children[i].value; } }
17743           node.value = sum;
17744         }
17745
17746         function node_count() {
17747           return this.eachAfter(count);
17748         }
17749
17750         function node_each(callback) {
17751           var node = this, current, next = [node], children, i, n;
17752           do {
17753             current = next.reverse(), next = [];
17754             while (node = current.pop()) {
17755               callback(node), children = node.children;
17756               if (children) { for (i = 0, n = children.length; i < n; ++i) {
17757                 next.push(children[i]);
17758               } }
17759             }
17760           } while (next.length);
17761           return this;
17762         }
17763
17764         function node_eachBefore(callback) {
17765           var node = this, nodes = [node], children, i;
17766           while (node = nodes.pop()) {
17767             callback(node), children = node.children;
17768             if (children) { for (i = children.length - 1; i >= 0; --i) {
17769               nodes.push(children[i]);
17770             } }
17771           }
17772           return this;
17773         }
17774
17775         function node_eachAfter(callback) {
17776           var node = this, nodes = [node], next = [], children, i, n;
17777           while (node = nodes.pop()) {
17778             next.push(node), children = node.children;
17779             if (children) { for (i = 0, n = children.length; i < n; ++i) {
17780               nodes.push(children[i]);
17781             } }
17782           }
17783           while (node = next.pop()) {
17784             callback(node);
17785           }
17786           return this;
17787         }
17788
17789         function node_sum(value) {
17790           return this.eachAfter(function(node) {
17791             var sum = +value(node.data) || 0,
17792                 children = node.children,
17793                 i = children && children.length;
17794             while (--i >= 0) { sum += children[i].value; }
17795             node.value = sum;
17796           });
17797         }
17798
17799         function node_sort(compare) {
17800           return this.eachBefore(function(node) {
17801             if (node.children) {
17802               node.children.sort(compare);
17803             }
17804           });
17805         }
17806
17807         function node_path(end) {
17808           var start = this,
17809               ancestor = leastCommonAncestor(start, end),
17810               nodes = [start];
17811           while (start !== ancestor) {
17812             start = start.parent;
17813             nodes.push(start);
17814           }
17815           var k = nodes.length;
17816           while (end !== ancestor) {
17817             nodes.splice(k, 0, end);
17818             end = end.parent;
17819           }
17820           return nodes;
17821         }
17822
17823         function leastCommonAncestor(a, b) {
17824           if (a === b) { return a; }
17825           var aNodes = a.ancestors(),
17826               bNodes = b.ancestors(),
17827               c = null;
17828           a = aNodes.pop();
17829           b = bNodes.pop();
17830           while (a === b) {
17831             c = a;
17832             a = aNodes.pop();
17833             b = bNodes.pop();
17834           }
17835           return c;
17836         }
17837
17838         function node_ancestors() {
17839           var node = this, nodes = [node];
17840           while (node = node.parent) {
17841             nodes.push(node);
17842           }
17843           return nodes;
17844         }
17845
17846         function node_descendants() {
17847           var nodes = [];
17848           this.each(function(node) {
17849             nodes.push(node);
17850           });
17851           return nodes;
17852         }
17853
17854         function node_leaves() {
17855           var leaves = [];
17856           this.eachBefore(function(node) {
17857             if (!node.children) {
17858               leaves.push(node);
17859             }
17860           });
17861           return leaves;
17862         }
17863
17864         function node_links() {
17865           var root = this, links = [];
17866           root.each(function(node) {
17867             if (node !== root) { // Don’t include the root’s parent, if any.
17868               links.push({source: node.parent, target: node});
17869             }
17870           });
17871           return links;
17872         }
17873
17874         function hierarchy(data, children) {
17875           var root = new Node(data),
17876               valued = +data.value && (root.value = data.value),
17877               node,
17878               nodes = [root],
17879               child,
17880               childs,
17881               i,
17882               n;
17883
17884           if (children == null) { children = defaultChildren; }
17885
17886           while (node = nodes.pop()) {
17887             if (valued) { node.value = +node.data.value; }
17888             if ((childs = children(node.data)) && (n = childs.length)) {
17889               node.children = new Array(n);
17890               for (i = n - 1; i >= 0; --i) {
17891                 nodes.push(child = node.children[i] = new Node(childs[i]));
17892                 child.parent = node;
17893                 child.depth = node.depth + 1;
17894               }
17895             }
17896           }
17897
17898           return root.eachBefore(computeHeight);
17899         }
17900
17901         function node_copy() {
17902           return hierarchy(this).eachBefore(copyData);
17903         }
17904
17905         function defaultChildren(d) {
17906           return d.children;
17907         }
17908
17909         function copyData(node) {
17910           node.data = node.data.data;
17911         }
17912
17913         function computeHeight(node) {
17914           var height = 0;
17915           do { node.height = height; }
17916           while ((node = node.parent) && (node.height < ++height));
17917         }
17918
17919         function Node(data) {
17920           this.data = data;
17921           this.depth =
17922           this.height = 0;
17923           this.parent = null;
17924         }
17925
17926         Node.prototype = hierarchy.prototype = {
17927           constructor: Node,
17928           count: node_count,
17929           each: node_each,
17930           eachAfter: node_eachAfter,
17931           eachBefore: node_eachBefore,
17932           sum: node_sum,
17933           sort: node_sort,
17934           path: node_path,
17935           ancestors: node_ancestors,
17936           descendants: node_descendants,
17937           leaves: node_leaves,
17938           links: node_links,
17939           copy: node_copy
17940         };
17941
17942         var slice$8 = Array.prototype.slice;
17943
17944         function shuffle$1(array) {
17945           var m = array.length,
17946               t,
17947               i;
17948
17949           while (m) {
17950             i = Math.random() * m-- | 0;
17951             t = array[m];
17952             array[m] = array[i];
17953             array[i] = t;
17954           }
17955
17956           return array;
17957         }
17958
17959         function enclose(circles) {
17960           var i = 0, n = (circles = shuffle$1(slice$8.call(circles))).length, B = [], p, e;
17961
17962           while (i < n) {
17963             p = circles[i];
17964             if (e && enclosesWeak(e, p)) { ++i; }
17965             else { e = encloseBasis(B = extendBasis(B, p)), i = 0; }
17966           }
17967
17968           return e;
17969         }
17970
17971         function extendBasis(B, p) {
17972           var i, j;
17973
17974           if (enclosesWeakAll(p, B)) { return [p]; }
17975
17976           // If we get here then B must have at least one element.
17977           for (i = 0; i < B.length; ++i) {
17978             if (enclosesNot(p, B[i])
17979                 && enclosesWeakAll(encloseBasis2(B[i], p), B)) {
17980               return [B[i], p];
17981             }
17982           }
17983
17984           // If we get here then B must have at least two elements.
17985           for (i = 0; i < B.length - 1; ++i) {
17986             for (j = i + 1; j < B.length; ++j) {
17987               if (enclosesNot(encloseBasis2(B[i], B[j]), p)
17988                   && enclosesNot(encloseBasis2(B[i], p), B[j])
17989                   && enclosesNot(encloseBasis2(B[j], p), B[i])
17990                   && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {
17991                 return [B[i], B[j], p];
17992               }
17993             }
17994           }
17995
17996           // If we get here then something is very wrong.
17997           throw new Error;
17998         }
17999
18000         function enclosesNot(a, b) {
18001           var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;
18002           return dr < 0 || dr * dr < dx * dx + dy * dy;
18003         }
18004
18005         function enclosesWeak(a, b) {
18006           var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;
18007           return dr > 0 && dr * dr > dx * dx + dy * dy;
18008         }
18009
18010         function enclosesWeakAll(a, B) {
18011           for (var i = 0; i < B.length; ++i) {
18012             if (!enclosesWeak(a, B[i])) {
18013               return false;
18014             }
18015           }
18016           return true;
18017         }
18018
18019         function encloseBasis(B) {
18020           switch (B.length) {
18021             case 1: return encloseBasis1(B[0]);
18022             case 2: return encloseBasis2(B[0], B[1]);
18023             case 3: return encloseBasis3(B[0], B[1], B[2]);
18024           }
18025         }
18026
18027         function encloseBasis1(a) {
18028           return {
18029             x: a.x,
18030             y: a.y,
18031             r: a.r
18032           };
18033         }
18034
18035         function encloseBasis2(a, b) {
18036           var x1 = a.x, y1 = a.y, r1 = a.r,
18037               x2 = b.x, y2 = b.y, r2 = b.r,
18038               x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
18039               l = Math.sqrt(x21 * x21 + y21 * y21);
18040           return {
18041             x: (x1 + x2 + x21 / l * r21) / 2,
18042             y: (y1 + y2 + y21 / l * r21) / 2,
18043             r: (l + r1 + r2) / 2
18044           };
18045         }
18046
18047         function encloseBasis3(a, b, c) {
18048           var x1 = a.x, y1 = a.y, r1 = a.r,
18049               x2 = b.x, y2 = b.y, r2 = b.r,
18050               x3 = c.x, y3 = c.y, r3 = c.r,
18051               a2 = x1 - x2,
18052               a3 = x1 - x3,
18053               b2 = y1 - y2,
18054               b3 = y1 - y3,
18055               c2 = r2 - r1,
18056               c3 = r3 - r1,
18057               d1 = x1 * x1 + y1 * y1 - r1 * r1,
18058               d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,
18059               d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,
18060               ab = a3 * b2 - a2 * b3,
18061               xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,
18062               xb = (b3 * c2 - b2 * c3) / ab,
18063               ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,
18064               yb = (a2 * c3 - a3 * c2) / ab,
18065               A = xb * xb + yb * yb - 1,
18066               B = 2 * (r1 + xa * xb + ya * yb),
18067               C = xa * xa + ya * ya - r1 * r1,
18068               r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);
18069           return {
18070             x: x1 + xa + xb * r,
18071             y: y1 + ya + yb * r,
18072             r: r
18073           };
18074         }
18075
18076         function place(b, a, c) {
18077           var dx = b.x - a.x, x, a2,
18078               dy = b.y - a.y, y, b2,
18079               d2 = dx * dx + dy * dy;
18080           if (d2) {
18081             a2 = a.r + c.r, a2 *= a2;
18082             b2 = b.r + c.r, b2 *= b2;
18083             if (a2 > b2) {
18084               x = (d2 + b2 - a2) / (2 * d2);
18085               y = Math.sqrt(Math.max(0, b2 / d2 - x * x));
18086               c.x = b.x - x * dx - y * dy;
18087               c.y = b.y - x * dy + y * dx;
18088             } else {
18089               x = (d2 + a2 - b2) / (2 * d2);
18090               y = Math.sqrt(Math.max(0, a2 / d2 - x * x));
18091               c.x = a.x + x * dx - y * dy;
18092               c.y = a.y + x * dy + y * dx;
18093             }
18094           } else {
18095             c.x = a.x + c.r;
18096             c.y = a.y;
18097           }
18098         }
18099
18100         function intersects(a, b) {
18101           var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;
18102           return dr > 0 && dr * dr > dx * dx + dy * dy;
18103         }
18104
18105         function score(node) {
18106           var a = node._,
18107               b = node.next._,
18108               ab = a.r + b.r,
18109               dx = (a.x * b.r + b.x * a.r) / ab,
18110               dy = (a.y * b.r + b.y * a.r) / ab;
18111           return dx * dx + dy * dy;
18112         }
18113
18114         function Node$1(circle) {
18115           this._ = circle;
18116           this.next = null;
18117           this.previous = null;
18118         }
18119
18120         function packEnclose(circles) {
18121           if (!(n = circles.length)) { return 0; }
18122
18123           var a, b, c, n, aa, ca, i, j, k, sj, sk;
18124
18125           // Place the first circle.
18126           a = circles[0], a.x = 0, a.y = 0;
18127           if (!(n > 1)) { return a.r; }
18128
18129           // Place the second circle.
18130           b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
18131           if (!(n > 2)) { return a.r + b.r; }
18132
18133           // Place the third circle.
18134           place(b, a, c = circles[2]);
18135
18136           // Initialize the front-chain using the first three circles a, b and c.
18137           a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
18138           a.next = c.previous = b;
18139           b.next = a.previous = c;
18140           c.next = b.previous = a;
18141
18142           // Attempt to place each remaining circle…
18143           pack: for (i = 3; i < n; ++i) {
18144             place(a._, b._, c = circles[i]), c = new Node$1(c);
18145
18146             // Find the closest intersecting circle on the front-chain, if any.
18147             // “Closeness” is determined by linear distance along the front-chain.
18148             // “Ahead” or “behind” is likewise determined by linear distance.
18149             j = b.next, k = a.previous, sj = b._.r, sk = a._.r;
18150             do {
18151               if (sj <= sk) {
18152                 if (intersects(j._, c._)) {
18153                   b = j, a.next = b, b.previous = a, --i;
18154                   continue pack;
18155                 }
18156                 sj += j._.r, j = j.next;
18157               } else {
18158                 if (intersects(k._, c._)) {
18159                   a = k, a.next = b, b.previous = a, --i;
18160                   continue pack;
18161                 }
18162                 sk += k._.r, k = k.previous;
18163               }
18164             } while (j !== k.next);
18165
18166             // Success! Insert the new circle c between a and b.
18167             c.previous = a, c.next = b, a.next = b.previous = b = c;
18168
18169             // Compute the new closest circle pair to the centroid.
18170             aa = score(a);
18171             while ((c = c.next) !== b) {
18172               if ((ca = score(c)) < aa) {
18173                 a = c, aa = ca;
18174               }
18175             }
18176             b = a.next;
18177           }
18178
18179           // Compute the enclosing circle of the front chain.
18180           a = [b._], c = b; while ((c = c.next) !== b) { a.push(c._); } c = enclose(a);
18181
18182           // Translate the circles to put the enclosing circle around the origin.
18183           for (i = 0; i < n; ++i) { a = circles[i], a.x -= c.x, a.y -= c.y; }
18184
18185           return c.r;
18186         }
18187
18188         function siblings(circles) {
18189           packEnclose(circles);
18190           return circles;
18191         }
18192
18193         function optional(f) {
18194           return f == null ? null : required(f);
18195         }
18196
18197         function required(f) {
18198           if (typeof f !== "function") { throw new Error; }
18199           return f;
18200         }
18201
18202         function constantZero() {
18203           return 0;
18204         }
18205
18206         function constant$9(x) {
18207           return function() {
18208             return x;
18209           };
18210         }
18211
18212         function defaultRadius$1(d) {
18213           return Math.sqrt(d.value);
18214         }
18215
18216         function index$1() {
18217           var radius = null,
18218               dx = 1,
18219               dy = 1,
18220               padding = constantZero;
18221
18222           function pack(root) {
18223             root.x = dx / 2, root.y = dy / 2;
18224             if (radius) {
18225               root.eachBefore(radiusLeaf(radius))
18226                   .eachAfter(packChildren(padding, 0.5))
18227                   .eachBefore(translateChild(1));
18228             } else {
18229               root.eachBefore(radiusLeaf(defaultRadius$1))
18230                   .eachAfter(packChildren(constantZero, 1))
18231                   .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
18232                   .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
18233             }
18234             return root;
18235           }
18236
18237           pack.radius = function(x) {
18238             return arguments.length ? (radius = optional(x), pack) : radius;
18239           };
18240
18241           pack.size = function(x) {
18242             return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
18243           };
18244
18245           pack.padding = function(x) {
18246             return arguments.length ? (padding = typeof x === "function" ? x : constant$9(+x), pack) : padding;
18247           };
18248
18249           return pack;
18250         }
18251
18252         function radiusLeaf(radius) {
18253           return function(node) {
18254             if (!node.children) {
18255               node.r = Math.max(0, +radius(node) || 0);
18256             }
18257           };
18258         }
18259
18260         function packChildren(padding, k) {
18261           return function(node) {
18262             if (children = node.children) {
18263               var children,
18264                   i,
18265                   n = children.length,
18266                   r = padding(node) * k || 0,
18267                   e;
18268
18269               if (r) { for (i = 0; i < n; ++i) { children[i].r += r; } }
18270               e = packEnclose(children);
18271               if (r) { for (i = 0; i < n; ++i) { children[i].r -= r; } }
18272               node.r = e + r;
18273             }
18274           };
18275         }
18276
18277         function translateChild(k) {
18278           return function(node) {
18279             var parent = node.parent;
18280             node.r *= k;
18281             if (parent) {
18282               node.x = parent.x + k * node.x;
18283               node.y = parent.y + k * node.y;
18284             }
18285           };
18286         }
18287
18288         function roundNode(node) {
18289           node.x0 = Math.round(node.x0);
18290           node.y0 = Math.round(node.y0);
18291           node.x1 = Math.round(node.x1);
18292           node.y1 = Math.round(node.y1);
18293         }
18294
18295         function treemapDice(parent, x0, y0, x1, y1) {
18296           var nodes = parent.children,
18297               node,
18298               i = -1,
18299               n = nodes.length,
18300               k = parent.value && (x1 - x0) / parent.value;
18301
18302           while (++i < n) {
18303             node = nodes[i], node.y0 = y0, node.y1 = y1;
18304             node.x0 = x0, node.x1 = x0 += node.value * k;
18305           }
18306         }
18307
18308         function partition() {
18309           var dx = 1,
18310               dy = 1,
18311               padding = 0,
18312               round = false;
18313
18314           function partition(root) {
18315             var n = root.height + 1;
18316             root.x0 =
18317             root.y0 = padding;
18318             root.x1 = dx;
18319             root.y1 = dy / n;
18320             root.eachBefore(positionNode(dy, n));
18321             if (round) { root.eachBefore(roundNode); }
18322             return root;
18323           }
18324
18325           function positionNode(dy, n) {
18326             return function(node) {
18327               if (node.children) {
18328                 treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
18329               }
18330               var x0 = node.x0,
18331                   y0 = node.y0,
18332                   x1 = node.x1 - padding,
18333                   y1 = node.y1 - padding;
18334               if (x1 < x0) { x0 = x1 = (x0 + x1) / 2; }
18335               if (y1 < y0) { y0 = y1 = (y0 + y1) / 2; }
18336               node.x0 = x0;
18337               node.y0 = y0;
18338               node.x1 = x1;
18339               node.y1 = y1;
18340             };
18341           }
18342
18343           partition.round = function(x) {
18344             return arguments.length ? (round = !!x, partition) : round;
18345           };
18346
18347           partition.size = function(x) {
18348             return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
18349           };
18350
18351           partition.padding = function(x) {
18352             return arguments.length ? (padding = +x, partition) : padding;
18353           };
18354
18355           return partition;
18356         }
18357
18358         var keyPrefix$1 = "$", // Protect against keys like “__proto__”.
18359             preroot = {depth: -1},
18360             ambiguous = {};
18361
18362         function defaultId(d) {
18363           return d.id;
18364         }
18365
18366         function defaultParentId(d) {
18367           return d.parentId;
18368         }
18369
18370         function stratify() {
18371           var id = defaultId,
18372               parentId = defaultParentId;
18373
18374           function stratify(data) {
18375             var d,
18376                 i,
18377                 n = data.length,
18378                 root,
18379                 parent,
18380                 node,
18381                 nodes = new Array(n),
18382                 nodeId,
18383                 nodeKey,
18384                 nodeByKey = {};
18385
18386             for (i = 0; i < n; ++i) {
18387               d = data[i], node = nodes[i] = new Node(d);
18388               if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
18389                 nodeKey = keyPrefix$1 + (node.id = nodeId);
18390                 nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
18391               }
18392             }
18393
18394             for (i = 0; i < n; ++i) {
18395               node = nodes[i], nodeId = parentId(data[i], i, data);
18396               if (nodeId == null || !(nodeId += "")) {
18397                 if (root) { throw new Error("multiple roots"); }
18398                 root = node;
18399               } else {
18400                 parent = nodeByKey[keyPrefix$1 + nodeId];
18401                 if (!parent) { throw new Error("missing: " + nodeId); }
18402                 if (parent === ambiguous) { throw new Error("ambiguous: " + nodeId); }
18403                 if (parent.children) { parent.children.push(node); }
18404                 else { parent.children = [node]; }
18405                 node.parent = parent;
18406               }
18407             }
18408
18409             if (!root) { throw new Error("no root"); }
18410             root.parent = preroot;
18411             root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
18412             root.parent = null;
18413             if (n > 0) { throw new Error("cycle"); }
18414
18415             return root;
18416           }
18417
18418           stratify.id = function(x) {
18419             return arguments.length ? (id = required(x), stratify) : id;
18420           };
18421
18422           stratify.parentId = function(x) {
18423             return arguments.length ? (parentId = required(x), stratify) : parentId;
18424           };
18425
18426           return stratify;
18427         }
18428
18429         function defaultSeparation$1(a, b) {
18430           return a.parent === b.parent ? 1 : 2;
18431         }
18432
18433         // function radialSeparation(a, b) {
18434         //   return (a.parent === b.parent ? 1 : 2) / a.depth;
18435         // }
18436
18437         // This function is used to traverse the left contour of a subtree (or
18438         // subforest). It returns the successor of v on this contour. This successor is
18439         // either given by the leftmost child of v or by the thread of v. The function
18440         // returns null if and only if v is on the highest level of its subtree.
18441         function nextLeft(v) {
18442           var children = v.children;
18443           return children ? children[0] : v.t;
18444         }
18445
18446         // This function works analogously to nextLeft.
18447         function nextRight(v) {
18448           var children = v.children;
18449           return children ? children[children.length - 1] : v.t;
18450         }
18451
18452         // Shifts the current subtree rooted at w+. This is done by increasing
18453         // prelim(w+) and mod(w+) by shift.
18454         function moveSubtree(wm, wp, shift) {
18455           var change = shift / (wp.i - wm.i);
18456           wp.c -= change;
18457           wp.s += shift;
18458           wm.c += change;
18459           wp.z += shift;
18460           wp.m += shift;
18461         }
18462
18463         // All other shifts, applied to the smaller subtrees between w- and w+, are
18464         // performed by this function. To prepare the shifts, we have to adjust
18465         // change(w+), shift(w+), and change(w-).
18466         function executeShifts(v) {
18467           var shift = 0,
18468               change = 0,
18469               children = v.children,
18470               i = children.length,
18471               w;
18472           while (--i >= 0) {
18473             w = children[i];
18474             w.z += shift;
18475             w.m += shift;
18476             shift += w.s + (change += w.c);
18477           }
18478         }
18479
18480         // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
18481         // returns the specified (default) ancestor.
18482         function nextAncestor(vim, v, ancestor) {
18483           return vim.a.parent === v.parent ? vim.a : ancestor;
18484         }
18485
18486         function TreeNode(node, i) {
18487           this._ = node;
18488           this.parent = null;
18489           this.children = null;
18490           this.A = null; // default ancestor
18491           this.a = this; // ancestor
18492           this.z = 0; // prelim
18493           this.m = 0; // mod
18494           this.c = 0; // change
18495           this.s = 0; // shift
18496           this.t = null; // thread
18497           this.i = i; // number
18498         }
18499
18500         TreeNode.prototype = Object.create(Node.prototype);
18501
18502         function treeRoot(root) {
18503           var tree = new TreeNode(root, 0),
18504               node,
18505               nodes = [tree],
18506               child,
18507               children,
18508               i,
18509               n;
18510
18511           while (node = nodes.pop()) {
18512             if (children = node._.children) {
18513               node.children = new Array(n = children.length);
18514               for (i = n - 1; i >= 0; --i) {
18515                 nodes.push(child = node.children[i] = new TreeNode(children[i], i));
18516                 child.parent = node;
18517               }
18518             }
18519           }
18520
18521           (tree.parent = new TreeNode(null, 0)).children = [tree];
18522           return tree;
18523         }
18524
18525         // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
18526         function tree() {
18527           var separation = defaultSeparation$1,
18528               dx = 1,
18529               dy = 1,
18530               nodeSize = null;
18531
18532           function tree(root) {
18533             var t = treeRoot(root);
18534
18535             // Compute the layout using Buchheim et al.’s algorithm.
18536             t.eachAfter(firstWalk), t.parent.m = -t.z;
18537             t.eachBefore(secondWalk);
18538
18539             // If a fixed node size is specified, scale x and y.
18540             if (nodeSize) { root.eachBefore(sizeNode); }
18541
18542             // If a fixed tree size is specified, scale x and y based on the extent.
18543             // Compute the left-most, right-most, and depth-most nodes for extents.
18544             else {
18545               var left = root,
18546                   right = root,
18547                   bottom = root;
18548               root.eachBefore(function(node) {
18549                 if (node.x < left.x) { left = node; }
18550                 if (node.x > right.x) { right = node; }
18551                 if (node.depth > bottom.depth) { bottom = node; }
18552               });
18553               var s = left === right ? 1 : separation(left, right) / 2,
18554                   tx = s - left.x,
18555                   kx = dx / (right.x + s + tx),
18556                   ky = dy / (bottom.depth || 1);
18557               root.eachBefore(function(node) {
18558                 node.x = (node.x + tx) * kx;
18559                 node.y = node.depth * ky;
18560               });
18561             }
18562
18563             return root;
18564           }
18565
18566           // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
18567           // applied recursively to the children of v, as well as the function
18568           // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
18569           // node v is placed to the midpoint of its outermost children.
18570           function firstWalk(v) {
18571             var children = v.children,
18572                 siblings = v.parent.children,
18573                 w = v.i ? siblings[v.i - 1] : null;
18574             if (children) {
18575               executeShifts(v);
18576               var midpoint = (children[0].z + children[children.length - 1].z) / 2;
18577               if (w) {
18578                 v.z = w.z + separation(v._, w._);
18579                 v.m = v.z - midpoint;
18580               } else {
18581                 v.z = midpoint;
18582               }
18583             } else if (w) {
18584               v.z = w.z + separation(v._, w._);
18585             }
18586             v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
18587           }
18588
18589           // Computes all real x-coordinates by summing up the modifiers recursively.
18590           function secondWalk(v) {
18591             v._.x = v.z + v.parent.m;
18592             v.m += v.parent.m;
18593           }
18594
18595           // The core of the algorithm. Here, a new subtree is combined with the
18596           // previous subtrees. Threads are used to traverse the inside and outside
18597           // contours of the left and right subtree up to the highest common level. The
18598           // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
18599           // superscript o means outside and i means inside, the subscript - means left
18600           // subtree and + means right subtree. For summing up the modifiers along the
18601           // contour, we use respective variables si+, si-, so-, and so+. Whenever two
18602           // nodes of the inside contours conflict, we compute the left one of the
18603           // greatest uncommon ancestors using the function ANCESTOR and call MOVE
18604           // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
18605           // Finally, we add a new thread (if necessary).
18606           function apportion(v, w, ancestor) {
18607             if (w) {
18608               var vip = v,
18609                   vop = v,
18610                   vim = w,
18611                   vom = vip.parent.children[0],
18612                   sip = vip.m,
18613                   sop = vop.m,
18614                   sim = vim.m,
18615                   som = vom.m,
18616                   shift;
18617               while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
18618                 vom = nextLeft(vom);
18619                 vop = nextRight(vop);
18620                 vop.a = v;
18621                 shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
18622                 if (shift > 0) {
18623                   moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
18624                   sip += shift;
18625                   sop += shift;
18626                 }
18627                 sim += vim.m;
18628                 sip += vip.m;
18629                 som += vom.m;
18630                 sop += vop.m;
18631               }
18632               if (vim && !nextRight(vop)) {
18633                 vop.t = vim;
18634                 vop.m += sim - sop;
18635               }
18636               if (vip && !nextLeft(vom)) {
18637                 vom.t = vip;
18638                 vom.m += sip - som;
18639                 ancestor = v;
18640               }
18641             }
18642             return ancestor;
18643           }
18644
18645           function sizeNode(node) {
18646             node.x *= dx;
18647             node.y = node.depth * dy;
18648           }
18649
18650           tree.separation = function(x) {
18651             return arguments.length ? (separation = x, tree) : separation;
18652           };
18653
18654           tree.size = function(x) {
18655             return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
18656           };
18657
18658           tree.nodeSize = function(x) {
18659             return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
18660           };
18661
18662           return tree;
18663         }
18664
18665         function treemapSlice(parent, x0, y0, x1, y1) {
18666           var nodes = parent.children,
18667               node,
18668               i = -1,
18669               n = nodes.length,
18670               k = parent.value && (y1 - y0) / parent.value;
18671
18672           while (++i < n) {
18673             node = nodes[i], node.x0 = x0, node.x1 = x1;
18674             node.y0 = y0, node.y1 = y0 += node.value * k;
18675           }
18676         }
18677
18678         var phi = (1 + Math.sqrt(5)) / 2;
18679
18680         function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
18681           var rows = [],
18682               nodes = parent.children,
18683               row,
18684               nodeValue,
18685               i0 = 0,
18686               i1 = 0,
18687               n = nodes.length,
18688               dx, dy,
18689               value = parent.value,
18690               sumValue,
18691               minValue,
18692               maxValue,
18693               newRatio,
18694               minRatio,
18695               alpha,
18696               beta;
18697
18698           while (i0 < n) {
18699             dx = x1 - x0, dy = y1 - y0;
18700
18701             // Find the next non-empty node.
18702             do { sumValue = nodes[i1++].value; } while (!sumValue && i1 < n);
18703             minValue = maxValue = sumValue;
18704             alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
18705             beta = sumValue * sumValue * alpha;
18706             minRatio = Math.max(maxValue / beta, beta / minValue);
18707
18708             // Keep adding nodes while the aspect ratio maintains or improves.
18709             for (; i1 < n; ++i1) {
18710               sumValue += nodeValue = nodes[i1].value;
18711               if (nodeValue < minValue) { minValue = nodeValue; }
18712               if (nodeValue > maxValue) { maxValue = nodeValue; }
18713               beta = sumValue * sumValue * alpha;
18714               newRatio = Math.max(maxValue / beta, beta / minValue);
18715               if (newRatio > minRatio) { sumValue -= nodeValue; break; }
18716               minRatio = newRatio;
18717             }
18718
18719             // Position and record the row orientation.
18720             rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
18721             if (row.dice) { treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); }
18722             else { treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); }
18723             value -= sumValue, i0 = i1;
18724           }
18725
18726           return rows;
18727         }
18728
18729         var squarify = (function custom(ratio) {
18730
18731           function squarify(parent, x0, y0, x1, y1) {
18732             squarifyRatio(ratio, parent, x0, y0, x1, y1);
18733           }
18734
18735           squarify.ratio = function(x) {
18736             return custom((x = +x) > 1 ? x : 1);
18737           };
18738
18739           return squarify;
18740         })(phi);
18741
18742         function index$2() {
18743           var tile = squarify,
18744               round = false,
18745               dx = 1,
18746               dy = 1,
18747               paddingStack = [0],
18748               paddingInner = constantZero,
18749               paddingTop = constantZero,
18750               paddingRight = constantZero,
18751               paddingBottom = constantZero,
18752               paddingLeft = constantZero;
18753
18754           function treemap(root) {
18755             root.x0 =
18756             root.y0 = 0;
18757             root.x1 = dx;
18758             root.y1 = dy;
18759             root.eachBefore(positionNode);
18760             paddingStack = [0];
18761             if (round) { root.eachBefore(roundNode); }
18762             return root;
18763           }
18764
18765           function positionNode(node) {
18766             var p = paddingStack[node.depth],
18767                 x0 = node.x0 + p,
18768                 y0 = node.y0 + p,
18769                 x1 = node.x1 - p,
18770                 y1 = node.y1 - p;
18771             if (x1 < x0) { x0 = x1 = (x0 + x1) / 2; }
18772             if (y1 < y0) { y0 = y1 = (y0 + y1) / 2; }
18773             node.x0 = x0;
18774             node.y0 = y0;
18775             node.x1 = x1;
18776             node.y1 = y1;
18777             if (node.children) {
18778               p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
18779               x0 += paddingLeft(node) - p;
18780               y0 += paddingTop(node) - p;
18781               x1 -= paddingRight(node) - p;
18782               y1 -= paddingBottom(node) - p;
18783               if (x1 < x0) { x0 = x1 = (x0 + x1) / 2; }
18784               if (y1 < y0) { y0 = y1 = (y0 + y1) / 2; }
18785               tile(node, x0, y0, x1, y1);
18786             }
18787           }
18788
18789           treemap.round = function(x) {
18790             return arguments.length ? (round = !!x, treemap) : round;
18791           };
18792
18793           treemap.size = function(x) {
18794             return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
18795           };
18796
18797           treemap.tile = function(x) {
18798             return arguments.length ? (tile = required(x), treemap) : tile;
18799           };
18800
18801           treemap.padding = function(x) {
18802             return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
18803           };
18804
18805           treemap.paddingInner = function(x) {
18806             return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$9(+x), treemap) : paddingInner;
18807           };
18808
18809           treemap.paddingOuter = function(x) {
18810             return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
18811           };
18812
18813           treemap.paddingTop = function(x) {
18814             return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$9(+x), treemap) : paddingTop;
18815           };
18816
18817           treemap.paddingRight = function(x) {
18818             return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$9(+x), treemap) : paddingRight;
18819           };
18820
18821           treemap.paddingBottom = function(x) {
18822             return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$9(+x), treemap) : paddingBottom;
18823           };
18824
18825           treemap.paddingLeft = function(x) {
18826             return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$9(+x), treemap) : paddingLeft;
18827           };
18828
18829           return treemap;
18830         }
18831
18832         function binary(parent, x0, y0, x1, y1) {
18833           var nodes = parent.children,
18834               i, n = nodes.length,
18835               sum, sums = new Array(n + 1);
18836
18837           for (sums[0] = sum = i = 0; i < n; ++i) {
18838             sums[i + 1] = sum += nodes[i].value;
18839           }
18840
18841           partition(0, n, parent.value, x0, y0, x1, y1);
18842
18843           function partition(i, j, value, x0, y0, x1, y1) {
18844             if (i >= j - 1) {
18845               var node = nodes[i];
18846               node.x0 = x0, node.y0 = y0;
18847               node.x1 = x1, node.y1 = y1;
18848               return;
18849             }
18850
18851             var valueOffset = sums[i],
18852                 valueTarget = (value / 2) + valueOffset,
18853                 k = i + 1,
18854                 hi = j - 1;
18855
18856             while (k < hi) {
18857               var mid = k + hi >>> 1;
18858               if (sums[mid] < valueTarget) { k = mid + 1; }
18859               else { hi = mid; }
18860             }
18861
18862             if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) { --k; }
18863
18864             var valueLeft = sums[k] - valueOffset,
18865                 valueRight = value - valueLeft;
18866
18867             if ((x1 - x0) > (y1 - y0)) {
18868               var xk = (x0 * valueRight + x1 * valueLeft) / value;
18869               partition(i, k, valueLeft, x0, y0, xk, y1);
18870               partition(k, j, valueRight, xk, y0, x1, y1);
18871             } else {
18872               var yk = (y0 * valueRight + y1 * valueLeft) / value;
18873               partition(i, k, valueLeft, x0, y0, x1, yk);
18874               partition(k, j, valueRight, x0, yk, x1, y1);
18875             }
18876           }
18877         }
18878
18879         function sliceDice(parent, x0, y0, x1, y1) {
18880           (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
18881         }
18882
18883         var resquarify = (function custom(ratio) {
18884
18885           function resquarify(parent, x0, y0, x1, y1) {
18886             if ((rows = parent._squarify) && (rows.ratio === ratio)) {
18887               var rows,
18888                   row,
18889                   nodes,
18890                   i,
18891                   j = -1,
18892                   n,
18893                   m = rows.length,
18894                   value = parent.value;
18895
18896               while (++j < m) {
18897                 row = rows[j], nodes = row.children;
18898                 for (i = row.value = 0, n = nodes.length; i < n; ++i) { row.value += nodes[i].value; }
18899                 if (row.dice) { treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); }
18900                 else { treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); }
18901                 value -= row.value;
18902               }
18903             } else {
18904               parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
18905               rows.ratio = ratio;
18906             }
18907           }
18908
18909           resquarify.ratio = function(x) {
18910             return custom((x = +x) > 1 ? x : 1);
18911           };
18912
18913           return resquarify;
18914         })(phi);
18915
18916         function d3_polygonArea(polygon) {
18917           var i = -1,
18918               n = polygon.length,
18919               a,
18920               b = polygon[n - 1],
18921               area = 0;
18922
18923           while (++i < n) {
18924             a = b;
18925             b = polygon[i];
18926             area += a[1] * b[0] - a[0] * b[1];
18927           }
18928
18929           return area / 2;
18930         }
18931
18932         function d3_polygonCentroid(polygon) {
18933           var i = -1,
18934               n = polygon.length,
18935               x = 0,
18936               y = 0,
18937               a,
18938               b = polygon[n - 1],
18939               c,
18940               k = 0;
18941
18942           while (++i < n) {
18943             a = b;
18944             b = polygon[i];
18945             k += c = a[0] * b[1] - b[0] * a[1];
18946             x += (a[0] + b[0]) * c;
18947             y += (a[1] + b[1]) * c;
18948           }
18949
18950           return k *= 3, [x / k, y / k];
18951         }
18952
18953         // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
18954         // the 3D cross product in a quadrant I Cartesian coordinate system (+x is
18955         // right, +y is up). Returns a positive value if ABC is counter-clockwise,
18956         // negative if clockwise, and zero if the points are collinear.
18957         function cross$1(a, b, c) {
18958           return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
18959         }
18960
18961         function lexicographicOrder(a, b) {
18962           return a[0] - b[0] || a[1] - b[1];
18963         }
18964
18965         // Computes the upper convex hull per the monotone chain algorithm.
18966         // Assumes points.length >= 3, is sorted by x, unique in y.
18967         // Returns an array of indices into points in left-to-right order.
18968         function computeUpperHullIndexes(points) {
18969           var n = points.length,
18970               indexes = [0, 1],
18971               size = 2;
18972
18973           for (var i = 2; i < n; ++i) {
18974             while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) { --size; }
18975             indexes[size++] = i;
18976           }
18977
18978           return indexes.slice(0, size); // remove popped points
18979         }
18980
18981         function d3_polygonHull(points) {
18982           if ((n = points.length) < 3) { return null; }
18983
18984           var i,
18985               n,
18986               sortedPoints = new Array(n),
18987               flippedPoints = new Array(n);
18988
18989           for (i = 0; i < n; ++i) { sortedPoints[i] = [+points[i][0], +points[i][1], i]; }
18990           sortedPoints.sort(lexicographicOrder);
18991           for (i = 0; i < n; ++i) { flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; }
18992
18993           var upperIndexes = computeUpperHullIndexes(sortedPoints),
18994               lowerIndexes = computeUpperHullIndexes(flippedPoints);
18995
18996           // Construct the hull polygon, removing possible duplicate endpoints.
18997           var skipLeft = lowerIndexes[0] === upperIndexes[0],
18998               skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
18999               hull = [];
19000
19001           // Add upper hull in right-to-l order.
19002           // Then add lower hull in left-to-right order.
19003           for (i = upperIndexes.length - 1; i >= 0; --i) { hull.push(points[sortedPoints[upperIndexes[i]][2]]); }
19004           for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) { hull.push(points[sortedPoints[lowerIndexes[i]][2]]); }
19005
19006           return hull;
19007         }
19008
19009         function contains$3(polygon, point) {
19010           var n = polygon.length,
19011               p = polygon[n - 1],
19012               x = point[0], y = point[1],
19013               x0 = p[0], y0 = p[1],
19014               x1, y1,
19015               inside = false;
19016
19017           for (var i = 0; i < n; ++i) {
19018             p = polygon[i], x1 = p[0], y1 = p[1];
19019             if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) { inside = !inside; }
19020             x0 = x1, y0 = y1;
19021           }
19022
19023           return inside;
19024         }
19025
19026         function length$1(polygon) {
19027           var i = -1,
19028               n = polygon.length,
19029               b = polygon[n - 1],
19030               xa,
19031               ya,
19032               xb = b[0],
19033               yb = b[1],
19034               perimeter = 0;
19035
19036           while (++i < n) {
19037             xa = xb;
19038             ya = yb;
19039             b = polygon[i];
19040             xb = b[0];
19041             yb = b[1];
19042             xa -= xb;
19043             ya -= yb;
19044             perimeter += Math.sqrt(xa * xa + ya * ya);
19045           }
19046
19047           return perimeter;
19048         }
19049
19050         function defaultSource$1() {
19051           return Math.random();
19052         }
19053
19054         var uniform = (function sourceRandomUniform(source) {
19055           function randomUniform(min, max) {
19056             min = min == null ? 0 : +min;
19057             max = max == null ? 1 : +max;
19058             if (arguments.length === 1) { max = min, min = 0; }
19059             else { max -= min; }
19060             return function() {
19061               return source() * max + min;
19062             };
19063           }
19064
19065           randomUniform.source = sourceRandomUniform;
19066
19067           return randomUniform;
19068         })(defaultSource$1);
19069
19070         var normal = (function sourceRandomNormal(source) {
19071           function randomNormal(mu, sigma) {
19072             var x, r;
19073             mu = mu == null ? 0 : +mu;
19074             sigma = sigma == null ? 1 : +sigma;
19075             return function() {
19076               var y;
19077
19078               // If available, use the second previously-generated uniform random.
19079               if (x != null) { y = x, x = null; }
19080
19081               // Otherwise, generate a new x and y.
19082               else { do {
19083                 x = source() * 2 - 1;
19084                 y = source() * 2 - 1;
19085                 r = x * x + y * y;
19086               } while (!r || r > 1); }
19087
19088               return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
19089             };
19090           }
19091
19092           randomNormal.source = sourceRandomNormal;
19093
19094           return randomNormal;
19095         })(defaultSource$1);
19096
19097         var logNormal = (function sourceRandomLogNormal(source) {
19098           function randomLogNormal() {
19099             var randomNormal = normal.source(source).apply(this, arguments);
19100             return function() {
19101               return Math.exp(randomNormal());
19102             };
19103           }
19104
19105           randomLogNormal.source = sourceRandomLogNormal;
19106
19107           return randomLogNormal;
19108         })(defaultSource$1);
19109
19110         var irwinHall = (function sourceRandomIrwinHall(source) {
19111           function randomIrwinHall(n) {
19112             return function() {
19113               for (var sum = 0, i = 0; i < n; ++i) { sum += source(); }
19114               return sum;
19115             };
19116           }
19117
19118           randomIrwinHall.source = sourceRandomIrwinHall;
19119
19120           return randomIrwinHall;
19121         })(defaultSource$1);
19122
19123         var bates = (function sourceRandomBates(source) {
19124           function randomBates(n) {
19125             var randomIrwinHall = irwinHall.source(source)(n);
19126             return function() {
19127               return randomIrwinHall() / n;
19128             };
19129           }
19130
19131           randomBates.source = sourceRandomBates;
19132
19133           return randomBates;
19134         })(defaultSource$1);
19135
19136         var exponential$1 = (function sourceRandomExponential(source) {
19137           function randomExponential(lambda) {
19138             return function() {
19139               return -Math.log(1 - source()) / lambda;
19140             };
19141           }
19142
19143           randomExponential.source = sourceRandomExponential;
19144
19145           return randomExponential;
19146         })(defaultSource$1);
19147
19148         function initRange(domain, range) {
19149           switch (arguments.length) {
19150             case 0: break;
19151             case 1: this.range(domain); break;
19152             default: this.range(range).domain(domain); break;
19153           }
19154           return this;
19155         }
19156
19157         function initInterpolator(domain, interpolator) {
19158           switch (arguments.length) {
19159             case 0: break;
19160             case 1: this.interpolator(domain); break;
19161             default: this.interpolator(interpolator).domain(domain); break;
19162           }
19163           return this;
19164         }
19165
19166         var array$4 = Array.prototype;
19167
19168         var map$5 = array$4.map;
19169         var slice$9 = array$4.slice;
19170
19171         var implicit = {name: "implicit"};
19172
19173         function ordinal() {
19174           var index = map$3(),
19175               domain = [],
19176               range = [],
19177               unknown = implicit;
19178
19179           function scale(d) {
19180             var key = d + "", i = index.get(key);
19181             if (!i) {
19182               if (unknown !== implicit) { return unknown; }
19183               index.set(key, i = domain.push(d));
19184             }
19185             return range[(i - 1) % range.length];
19186           }
19187
19188           scale.domain = function(_) {
19189             if (!arguments.length) { return domain.slice(); }
19190             domain = [], index = map$3();
19191             var i = -1, n = _.length, d, key;
19192             while (++i < n) { if (!index.has(key = (d = _[i]) + "")) { index.set(key, domain.push(d)); } }
19193             return scale;
19194           };
19195
19196           scale.range = function(_) {
19197             return arguments.length ? (range = slice$9.call(_), scale) : range.slice();
19198           };
19199
19200           scale.unknown = function(_) {
19201             return arguments.length ? (unknown = _, scale) : unknown;
19202           };
19203
19204           scale.copy = function() {
19205             return ordinal(domain, range).unknown(unknown);
19206           };
19207
19208           initRange.apply(scale, arguments);
19209
19210           return scale;
19211         }
19212
19213         function band() {
19214           var scale = ordinal().unknown(undefined),
19215               domain = scale.domain,
19216               ordinalRange = scale.range,
19217               range = [0, 1],
19218               step,
19219               bandwidth,
19220               round = false,
19221               paddingInner = 0,
19222               paddingOuter = 0,
19223               align = 0.5;
19224
19225           delete scale.unknown;
19226
19227           function rescale() {
19228             var n = domain().length,
19229                 reverse = range[1] < range[0],
19230                 start = range[reverse - 0],
19231                 stop = range[1 - reverse];
19232             step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
19233             if (round) { step = Math.floor(step); }
19234             start += (stop - start - step * (n - paddingInner)) * align;
19235             bandwidth = step * (1 - paddingInner);
19236             if (round) { start = Math.round(start), bandwidth = Math.round(bandwidth); }
19237             var values = d3_range(n).map(function(i) { return start + step * i; });
19238             return ordinalRange(reverse ? values.reverse() : values);
19239           }
19240
19241           scale.domain = function(_) {
19242             return arguments.length ? (domain(_), rescale()) : domain();
19243           };
19244
19245           scale.range = function(_) {
19246             return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();
19247           };
19248
19249           scale.rangeRound = function(_) {
19250             return range = [+_[0], +_[1]], round = true, rescale();
19251           };
19252
19253           scale.bandwidth = function() {
19254             return bandwidth;
19255           };
19256
19257           scale.step = function() {
19258             return step;
19259           };
19260
19261           scale.round = function(_) {
19262             return arguments.length ? (round = !!_, rescale()) : round;
19263           };
19264
19265           scale.padding = function(_) {
19266             return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;
19267           };
19268
19269           scale.paddingInner = function(_) {
19270             return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;
19271           };
19272
19273           scale.paddingOuter = function(_) {
19274             return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;
19275           };
19276
19277           scale.align = function(_) {
19278             return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
19279           };
19280
19281           scale.copy = function() {
19282             return band(domain(), range)
19283                 .round(round)
19284                 .paddingInner(paddingInner)
19285                 .paddingOuter(paddingOuter)
19286                 .align(align);
19287           };
19288
19289           return initRange.apply(rescale(), arguments);
19290         }
19291
19292         function pointish(scale) {
19293           var copy = scale.copy;
19294
19295           scale.padding = scale.paddingOuter;
19296           delete scale.paddingInner;
19297           delete scale.paddingOuter;
19298
19299           scale.copy = function() {
19300             return pointish(copy());
19301           };
19302
19303           return scale;
19304         }
19305
19306         function point$1() {
19307           return pointish(band.apply(null, arguments).paddingInner(1));
19308         }
19309
19310         function constant$a(x) {
19311           return function() {
19312             return x;
19313           };
19314         }
19315
19316         function number$2(x) {
19317           return +x;
19318         }
19319
19320         var unit = [0, 1];
19321
19322         function identity$5(x) {
19323           return x;
19324         }
19325
19326         function normalize(a, b) {
19327           return (b -= (a = +a))
19328               ? function(x) { return (x - a) / b; }
19329               : constant$a(isNaN(b) ? NaN : 0.5);
19330         }
19331
19332         function clamper(domain) {
19333           var a = domain[0], b = domain[domain.length - 1], t;
19334           if (a > b) { t = a, a = b, b = t; }
19335           return function(x) { return Math.max(a, Math.min(b, x)); };
19336         }
19337
19338         // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
19339         // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
19340         function bimap(domain, range, interpolate) {
19341           var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
19342           if (d1 < d0) { d0 = normalize(d1, d0), r0 = interpolate(r1, r0); }
19343           else { d0 = normalize(d0, d1), r0 = interpolate(r0, r1); }
19344           return function(x) { return r0(d0(x)); };
19345         }
19346
19347         function polymap(domain, range, interpolate) {
19348           var j = Math.min(domain.length, range.length) - 1,
19349               d = new Array(j),
19350               r = new Array(j),
19351               i = -1;
19352
19353           // Reverse descending domains.
19354           if (domain[j] < domain[0]) {
19355             domain = domain.slice().reverse();
19356             range = range.slice().reverse();
19357           }
19358
19359           while (++i < j) {
19360             d[i] = normalize(domain[i], domain[i + 1]);
19361             r[i] = interpolate(range[i], range[i + 1]);
19362           }
19363
19364           return function(x) {
19365             var i = bisectRight(domain, x, 1, j) - 1;
19366             return r[i](d[i](x));
19367           };
19368         }
19369
19370         function copy$1(source, target) {
19371           return target
19372               .domain(source.domain())
19373               .range(source.range())
19374               .interpolate(source.interpolate())
19375               .clamp(source.clamp())
19376               .unknown(source.unknown());
19377         }
19378
19379         function transformer$1() {
19380           var domain = unit,
19381               range = unit,
19382               interpolate = d3_interpolate,
19383               transform,
19384               untransform,
19385               unknown,
19386               clamp = identity$5,
19387               piecewise,
19388               output,
19389               input;
19390
19391           function rescale() {
19392             piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;
19393             output = input = null;
19394             return scale;
19395           }
19396
19397           function scale(x) {
19398             return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));
19399           }
19400
19401           scale.invert = function(y) {
19402             return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3_interpolateNumber)))(y)));
19403           };
19404
19405           scale.domain = function(_) {
19406             return arguments.length ? (domain = map$5.call(_, number$2), clamp === identity$5 || (clamp = clamper(domain)), rescale()) : domain.slice();
19407           };
19408
19409           scale.range = function(_) {
19410             return arguments.length ? (range = slice$9.call(_), rescale()) : range.slice();
19411           };
19412
19413           scale.rangeRound = function(_) {
19414             return range = slice$9.call(_), interpolate = interpolateRound, rescale();
19415           };
19416
19417           scale.clamp = function(_) {
19418             return arguments.length ? (clamp = _ ? clamper(domain) : identity$5, scale) : clamp !== identity$5;
19419           };
19420
19421           scale.interpolate = function(_) {
19422             return arguments.length ? (interpolate = _, rescale()) : interpolate;
19423           };
19424
19425           scale.unknown = function(_) {
19426             return arguments.length ? (unknown = _, scale) : unknown;
19427           };
19428
19429           return function(t, u) {
19430             transform = t, untransform = u;
19431             return rescale();
19432           };
19433         }
19434
19435         function continuous(transform, untransform) {
19436           return transformer$1()(transform, untransform);
19437         }
19438
19439         function tickFormat(start, stop, count, specifier) {
19440           var step = tickStep(start, stop, count),
19441               precision;
19442           specifier = formatSpecifier(specifier == null ? ",f" : specifier);
19443           switch (specifier.type) {
19444             case "s": {
19445               var value = Math.max(Math.abs(start), Math.abs(stop));
19446               if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) { specifier.precision = precision; }
19447               return formatPrefix(specifier, value);
19448             }
19449             case "":
19450             case "e":
19451             case "g":
19452             case "p":
19453             case "r": {
19454               if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) { specifier.precision = precision - (specifier.type === "e"); }
19455               break;
19456             }
19457             case "f":
19458             case "%": {
19459               if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) { specifier.precision = precision - (specifier.type === "%") * 2; }
19460               break;
19461             }
19462           }
19463           return format(specifier);
19464         }
19465
19466         function linearish(scale) {
19467           var domain = scale.domain;
19468
19469           scale.ticks = function(count) {
19470             var d = domain();
19471             return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
19472           };
19473
19474           scale.tickFormat = function(count, specifier) {
19475             var d = domain();
19476             return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
19477           };
19478
19479           scale.nice = function(count) {
19480             if (count == null) { count = 10; }
19481
19482             var d = domain(),
19483                 i0 = 0,
19484                 i1 = d.length - 1,
19485                 start = d[i0],
19486                 stop = d[i1],
19487                 step;
19488
19489             if (stop < start) {
19490               step = start, start = stop, stop = step;
19491               step = i0, i0 = i1, i1 = step;
19492             }
19493
19494             step = tickIncrement(start, stop, count);
19495
19496             if (step > 0) {
19497               start = Math.floor(start / step) * step;
19498               stop = Math.ceil(stop / step) * step;
19499               step = tickIncrement(start, stop, count);
19500             } else if (step < 0) {
19501               start = Math.ceil(start * step) / step;
19502               stop = Math.floor(stop * step) / step;
19503               step = tickIncrement(start, stop, count);
19504             }
19505
19506             if (step > 0) {
19507               d[i0] = Math.floor(start / step) * step;
19508               d[i1] = Math.ceil(stop / step) * step;
19509               domain(d);
19510             } else if (step < 0) {
19511               d[i0] = Math.ceil(start * step) / step;
19512               d[i1] = Math.floor(stop * step) / step;
19513               domain(d);
19514             }
19515
19516             return scale;
19517           };
19518
19519           return scale;
19520         }
19521
19522         function linear$2() {
19523           var scale = continuous(identity$5, identity$5);
19524
19525           scale.copy = function() {
19526             return copy$1(scale, linear$2());
19527           };
19528
19529           initRange.apply(scale, arguments);
19530
19531           return linearish(scale);
19532         }
19533
19534         function identity$6(domain) {
19535           var unknown;
19536
19537           function scale(x) {
19538             return isNaN(x = +x) ? unknown : x;
19539           }
19540
19541           scale.invert = scale;
19542
19543           scale.domain = scale.range = function(_) {
19544             return arguments.length ? (domain = map$5.call(_, number$2), scale) : domain.slice();
19545           };
19546
19547           scale.unknown = function(_) {
19548             return arguments.length ? (unknown = _, scale) : unknown;
19549           };
19550
19551           scale.copy = function() {
19552             return identity$6(domain).unknown(unknown);
19553           };
19554
19555           domain = arguments.length ? map$5.call(domain, number$2) : [0, 1];
19556
19557           return linearish(scale);
19558         }
19559
19560         function nice(domain, interval) {
19561           domain = domain.slice();
19562
19563           var i0 = 0,
19564               i1 = domain.length - 1,
19565               x0 = domain[i0],
19566               x1 = domain[i1],
19567               t;
19568
19569           if (x1 < x0) {
19570             t = i0, i0 = i1, i1 = t;
19571             t = x0, x0 = x1, x1 = t;
19572           }
19573
19574           domain[i0] = interval.floor(x0);
19575           domain[i1] = interval.ceil(x1);
19576           return domain;
19577         }
19578
19579         function transformLog(x) {
19580           return Math.log(x);
19581         }
19582
19583         function transformExp(x) {
19584           return Math.exp(x);
19585         }
19586
19587         function transformLogn(x) {
19588           return -Math.log(-x);
19589         }
19590
19591         function transformExpn(x) {
19592           return -Math.exp(-x);
19593         }
19594
19595         function pow10(x) {
19596           return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
19597         }
19598
19599         function powp(base) {
19600           return base === 10 ? pow10
19601               : base === Math.E ? Math.exp
19602               : function(x) { return Math.pow(base, x); };
19603         }
19604
19605         function logp(base) {
19606           return base === Math.E ? Math.log
19607               : base === 10 && Math.log10
19608               || base === 2 && Math.log2
19609               || (base = Math.log(base), function(x) { return Math.log(x) / base; });
19610         }
19611
19612         function reflect(f) {
19613           return function(x) {
19614             return -f(-x);
19615           };
19616         }
19617
19618         function loggish(transform) {
19619           var scale = transform(transformLog, transformExp),
19620               domain = scale.domain,
19621               base = 10,
19622               logs,
19623               pows;
19624
19625           function rescale() {
19626             logs = logp(base), pows = powp(base);
19627             if (domain()[0] < 0) {
19628               logs = reflect(logs), pows = reflect(pows);
19629               transform(transformLogn, transformExpn);
19630             } else {
19631               transform(transformLog, transformExp);
19632             }
19633             return scale;
19634           }
19635
19636           scale.base = function(_) {
19637             return arguments.length ? (base = +_, rescale()) : base;
19638           };
19639
19640           scale.domain = function(_) {
19641             return arguments.length ? (domain(_), rescale()) : domain();
19642           };
19643
19644           scale.ticks = function(count) {
19645             var d = domain(),
19646                 u = d[0],
19647                 v = d[d.length - 1],
19648                 r;
19649
19650             if (r = v < u) { i = u, u = v, v = i; }
19651
19652             var i = logs(u),
19653                 j = logs(v),
19654                 p,
19655                 k,
19656                 t,
19657                 n = count == null ? 10 : +count,
19658                 z = [];
19659
19660             if (!(base % 1) && j - i < n) {
19661               i = Math.round(i) - 1, j = Math.round(j) + 1;
19662               if (u > 0) { for (; i < j; ++i) {
19663                 for (k = 1, p = pows(i); k < base; ++k) {
19664                   t = p * k;
19665                   if (t < u) { continue; }
19666                   if (t > v) { break; }
19667                   z.push(t);
19668                 }
19669               } } else { for (; i < j; ++i) {
19670                 for (k = base - 1, p = pows(i); k >= 1; --k) {
19671                   t = p * k;
19672                   if (t < u) { continue; }
19673                   if (t > v) { break; }
19674                   z.push(t);
19675                 }
19676               } }
19677             } else {
19678               z = ticks(i, j, Math.min(j - i, n)).map(pows);
19679             }
19680
19681             return r ? z.reverse() : z;
19682           };
19683
19684           scale.tickFormat = function(count, specifier) {
19685             if (specifier == null) { specifier = base === 10 ? ".0e" : ","; }
19686             if (typeof specifier !== "function") { specifier = format(specifier); }
19687             if (count === Infinity) { return specifier; }
19688             if (count == null) { count = 10; }
19689             var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
19690             return function(d) {
19691               var i = d / pows(Math.round(logs(d)));
19692               if (i * base < base - 0.5) { i *= base; }
19693               return i <= k ? specifier(d) : "";
19694             };
19695           };
19696
19697           scale.nice = function() {
19698             return domain(nice(domain(), {
19699               floor: function(x) { return pows(Math.floor(logs(x))); },
19700               ceil: function(x) { return pows(Math.ceil(logs(x))); }
19701             }));
19702           };
19703
19704           return scale;
19705         }
19706
19707         function log$1() {
19708           var scale = loggish(transformer$1()).domain([1, 10]);
19709
19710           scale.copy = function() {
19711             return copy$1(scale, log$1()).base(scale.base());
19712           };
19713
19714           initRange.apply(scale, arguments);
19715
19716           return scale;
19717         }
19718
19719         function transformSymlog(c) {
19720           return function(x) {
19721             return Math.sign(x) * Math.log1p(Math.abs(x / c));
19722           };
19723         }
19724
19725         function transformSymexp(c) {
19726           return function(x) {
19727             return Math.sign(x) * Math.expm1(Math.abs(x)) * c;
19728           };
19729         }
19730
19731         function symlogish(transform) {
19732           var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));
19733
19734           scale.constant = function(_) {
19735             return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;
19736           };
19737
19738           return linearish(scale);
19739         }
19740
19741         function symlog() {
19742           var scale = symlogish(transformer$1());
19743
19744           scale.copy = function() {
19745             return copy$1(scale, symlog()).constant(scale.constant());
19746           };
19747
19748           return initRange.apply(scale, arguments);
19749         }
19750
19751         function transformPow(exponent) {
19752           return function(x) {
19753             return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
19754           };
19755         }
19756
19757         function transformSqrt(x) {
19758           return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);
19759         }
19760
19761         function transformSquare(x) {
19762           return x < 0 ? -x * x : x * x;
19763         }
19764
19765         function powish(transform) {
19766           var scale = transform(identity$5, identity$5),
19767               exponent = 1;
19768
19769           function rescale() {
19770             return exponent === 1 ? transform(identity$5, identity$5)
19771                 : exponent === 0.5 ? transform(transformSqrt, transformSquare)
19772                 : transform(transformPow(exponent), transformPow(1 / exponent));
19773           }
19774
19775           scale.exponent = function(_) {
19776             return arguments.length ? (exponent = +_, rescale()) : exponent;
19777           };
19778
19779           return linearish(scale);
19780         }
19781
19782         function pow$1() {
19783           var scale = powish(transformer$1());
19784
19785           scale.copy = function() {
19786             return copy$1(scale, pow$1()).exponent(scale.exponent());
19787           };
19788
19789           initRange.apply(scale, arguments);
19790
19791           return scale;
19792         }
19793
19794         function sqrt$1() {
19795           return pow$1.apply(null, arguments).exponent(0.5);
19796         }
19797
19798         function quantile() {
19799           var domain = [],
19800               range = [],
19801               thresholds = [],
19802               unknown;
19803
19804           function rescale() {
19805             var i = 0, n = Math.max(1, range.length);
19806             thresholds = new Array(n - 1);
19807             while (++i < n) { thresholds[i - 1] = threshold(domain, i / n); }
19808             return scale;
19809           }
19810
19811           function scale(x) {
19812             return isNaN(x = +x) ? unknown : range[bisectRight(thresholds, x)];
19813           }
19814
19815           scale.invertExtent = function(y) {
19816             var i = range.indexOf(y);
19817             return i < 0 ? [NaN, NaN] : [
19818               i > 0 ? thresholds[i - 1] : domain[0],
19819               i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
19820             ];
19821           };
19822
19823           scale.domain = function(_) {
19824             if (!arguments.length) { return domain.slice(); }
19825             domain = [];
19826             for (var i = 0, n = _.length, d; i < n; ++i) { if (d = _[i], d != null && !isNaN(d = +d)) { domain.push(d); } }
19827             domain.sort(d3_ascending);
19828             return rescale();
19829           };
19830
19831           scale.range = function(_) {
19832             return arguments.length ? (range = slice$9.call(_), rescale()) : range.slice();
19833           };
19834
19835           scale.unknown = function(_) {
19836             return arguments.length ? (unknown = _, scale) : unknown;
19837           };
19838
19839           scale.quantiles = function() {
19840             return thresholds.slice();
19841           };
19842
19843           scale.copy = function() {
19844             return quantile()
19845                 .domain(domain)
19846                 .range(range)
19847                 .unknown(unknown);
19848           };
19849
19850           return initRange.apply(scale, arguments);
19851         }
19852
19853         function quantize() {
19854           var x0 = 0,
19855               x1 = 1,
19856               n = 1,
19857               domain = [0.5],
19858               range = [0, 1],
19859               unknown;
19860
19861           function scale(x) {
19862             return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;
19863           }
19864
19865           function rescale() {
19866             var i = -1;
19867             domain = new Array(n);
19868             while (++i < n) { domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); }
19869             return scale;
19870           }
19871
19872           scale.domain = function(_) {
19873             return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
19874           };
19875
19876           scale.range = function(_) {
19877             return arguments.length ? (n = (range = slice$9.call(_)).length - 1, rescale()) : range.slice();
19878           };
19879
19880           scale.invertExtent = function(y) {
19881             var i = range.indexOf(y);
19882             return i < 0 ? [NaN, NaN]
19883                 : i < 1 ? [x0, domain[0]]
19884                 : i >= n ? [domain[n - 1], x1]
19885                 : [domain[i - 1], domain[i]];
19886           };
19887
19888           scale.unknown = function(_) {
19889             return arguments.length ? (unknown = _, scale) : scale;
19890           };
19891
19892           scale.thresholds = function() {
19893             return domain.slice();
19894           };
19895
19896           scale.copy = function() {
19897             return quantize()
19898                 .domain([x0, x1])
19899                 .range(range)
19900                 .unknown(unknown);
19901           };
19902
19903           return initRange.apply(linearish(scale), arguments);
19904         }
19905
19906         function threshold$1() {
19907           var domain = [0.5],
19908               range = [0, 1],
19909               unknown,
19910               n = 1;
19911
19912           function scale(x) {
19913             return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;
19914           }
19915
19916           scale.domain = function(_) {
19917             return arguments.length ? (domain = slice$9.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
19918           };
19919
19920           scale.range = function(_) {
19921             return arguments.length ? (range = slice$9.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
19922           };
19923
19924           scale.invertExtent = function(y) {
19925             var i = range.indexOf(y);
19926             return [domain[i - 1], domain[i]];
19927           };
19928
19929           scale.unknown = function(_) {
19930             return arguments.length ? (unknown = _, scale) : unknown;
19931           };
19932
19933           scale.copy = function() {
19934             return threshold$1()
19935                 .domain(domain)
19936                 .range(range)
19937                 .unknown(unknown);
19938           };
19939
19940           return initRange.apply(scale, arguments);
19941         }
19942
19943         var t0$1 = new Date,
19944             t1$1 = new Date;
19945
19946         function newInterval(floori, offseti, count, field) {
19947
19948           function interval(date) {
19949             return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;
19950           }
19951
19952           interval.floor = function(date) {
19953             return floori(date = new Date(+date)), date;
19954           };
19955
19956           interval.ceil = function(date) {
19957             return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
19958           };
19959
19960           interval.round = function(date) {
19961             var d0 = interval(date),
19962                 d1 = interval.ceil(date);
19963             return date - d0 < d1 - date ? d0 : d1;
19964           };
19965
19966           interval.offset = function(date, step) {
19967             return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
19968           };
19969
19970           interval.range = function(start, stop, step) {
19971             var range = [], previous;
19972             start = interval.ceil(start);
19973             step = step == null ? 1 : Math.floor(step);
19974             if (!(start < stop) || !(step > 0)) { return range; } // also handles Invalid Date
19975             do { range.push(previous = new Date(+start)), offseti(start, step), floori(start); }
19976             while (previous < start && start < stop);
19977             return range;
19978           };
19979
19980           interval.filter = function(test) {
19981             return newInterval(function(date) {
19982               if (date >= date) { while (floori(date), !test(date)) { date.setTime(date - 1); } }
19983             }, function(date, step) {
19984               if (date >= date) {
19985                 if (step < 0) { while (++step <= 0) {
19986                   while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
19987                 } } else { while (--step >= 0) {
19988                   while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
19989                 } }
19990               }
19991             });
19992           };
19993
19994           if (count) {
19995             interval.count = function(start, end) {
19996               t0$1.setTime(+start), t1$1.setTime(+end);
19997               floori(t0$1), floori(t1$1);
19998               return Math.floor(count(t0$1, t1$1));
19999             };
20000
20001             interval.every = function(step) {
20002               step = Math.floor(step);
20003               return !isFinite(step) || !(step > 0) ? null
20004                   : !(step > 1) ? interval
20005                   : interval.filter(field
20006                       ? function(d) { return field(d) % step === 0; }
20007                       : function(d) { return interval.count(0, d) % step === 0; });
20008             };
20009           }
20010
20011           return interval;
20012         }
20013
20014         var millisecond = newInterval(function() {
20015           // noop
20016         }, function(date, step) {
20017           date.setTime(+date + step);
20018         }, function(start, end) {
20019           return end - start;
20020         });
20021
20022         // An optimized implementation for this simple case.
20023         millisecond.every = function(k) {
20024           k = Math.floor(k);
20025           if (!isFinite(k) || !(k > 0)) { return null; }
20026           if (!(k > 1)) { return millisecond; }
20027           return newInterval(function(date) {
20028             date.setTime(Math.floor(date / k) * k);
20029           }, function(date, step) {
20030             date.setTime(+date + step * k);
20031           }, function(start, end) {
20032             return (end - start) / k;
20033           });
20034         };
20035         var milliseconds = millisecond.range;
20036
20037         var durationSecond = 1e3;
20038         var durationMinute = 6e4;
20039         var durationHour = 36e5;
20040         var durationDay = 864e5;
20041         var durationWeek = 6048e5;
20042
20043         var second = newInterval(function(date) {
20044           date.setTime(date - date.getMilliseconds());
20045         }, function(date, step) {
20046           date.setTime(+date + step * durationSecond);
20047         }, function(start, end) {
20048           return (end - start) / durationSecond;
20049         }, function(date) {
20050           return date.getUTCSeconds();
20051         });
20052         var seconds = second.range;
20053
20054         var minute = newInterval(function(date) {
20055           date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
20056         }, function(date, step) {
20057           date.setTime(+date + step * durationMinute);
20058         }, function(start, end) {
20059           return (end - start) / durationMinute;
20060         }, function(date) {
20061           return date.getMinutes();
20062         });
20063         var minutes = minute.range;
20064
20065         var hour = newInterval(function(date) {
20066           date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
20067         }, function(date, step) {
20068           date.setTime(+date + step * durationHour);
20069         }, function(start, end) {
20070           return (end - start) / durationHour;
20071         }, function(date) {
20072           return date.getHours();
20073         });
20074         var hours = hour.range;
20075
20076         var day = newInterval(function(date) {
20077           date.setHours(0, 0, 0, 0);
20078         }, function(date, step) {
20079           date.setDate(date.getDate() + step);
20080         }, function(start, end) {
20081           return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
20082         }, function(date) {
20083           return date.getDate() - 1;
20084         });
20085         var days = day.range;
20086
20087         function weekday(i) {
20088           return newInterval(function(date) {
20089             date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
20090             date.setHours(0, 0, 0, 0);
20091           }, function(date, step) {
20092             date.setDate(date.getDate() + step * 7);
20093           }, function(start, end) {
20094             return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
20095           });
20096         }
20097
20098         var sunday = weekday(0);
20099         var monday = weekday(1);
20100         var tuesday = weekday(2);
20101         var wednesday = weekday(3);
20102         var thursday = weekday(4);
20103         var friday = weekday(5);
20104         var saturday = weekday(6);
20105
20106         var sundays = sunday.range;
20107         var mondays = monday.range;
20108         var tuesdays = tuesday.range;
20109         var wednesdays = wednesday.range;
20110         var thursdays = thursday.range;
20111         var fridays = friday.range;
20112         var saturdays = saturday.range;
20113
20114         var month = newInterval(function(date) {
20115           date.setDate(1);
20116           date.setHours(0, 0, 0, 0);
20117         }, function(date, step) {
20118           date.setMonth(date.getMonth() + step);
20119         }, function(start, end) {
20120           return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
20121         }, function(date) {
20122           return date.getMonth();
20123         });
20124         var months = month.range;
20125
20126         var year = newInterval(function(date) {
20127           date.setMonth(0, 1);
20128           date.setHours(0, 0, 0, 0);
20129         }, function(date, step) {
20130           date.setFullYear(date.getFullYear() + step);
20131         }, function(start, end) {
20132           return end.getFullYear() - start.getFullYear();
20133         }, function(date) {
20134           return date.getFullYear();
20135         });
20136
20137         // An optimized implementation for this simple case.
20138         year.every = function(k) {
20139           return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
20140             date.setFullYear(Math.floor(date.getFullYear() / k) * k);
20141             date.setMonth(0, 1);
20142             date.setHours(0, 0, 0, 0);
20143           }, function(date, step) {
20144             date.setFullYear(date.getFullYear() + step * k);
20145           });
20146         };
20147         var years = year.range;
20148
20149         var utcMinute = newInterval(function(date) {
20150           date.setUTCSeconds(0, 0);
20151         }, function(date, step) {
20152           date.setTime(+date + step * durationMinute);
20153         }, function(start, end) {
20154           return (end - start) / durationMinute;
20155         }, function(date) {
20156           return date.getUTCMinutes();
20157         });
20158         var utcMinutes = utcMinute.range;
20159
20160         var utcHour = newInterval(function(date) {
20161           date.setUTCMinutes(0, 0, 0);
20162         }, function(date, step) {
20163           date.setTime(+date + step * durationHour);
20164         }, function(start, end) {
20165           return (end - start) / durationHour;
20166         }, function(date) {
20167           return date.getUTCHours();
20168         });
20169         var utcHours = utcHour.range;
20170
20171         var utcDay = newInterval(function(date) {
20172           date.setUTCHours(0, 0, 0, 0);
20173         }, function(date, step) {
20174           date.setUTCDate(date.getUTCDate() + step);
20175         }, function(start, end) {
20176           return (end - start) / durationDay;
20177         }, function(date) {
20178           return date.getUTCDate() - 1;
20179         });
20180         var utcDays = utcDay.range;
20181
20182         function utcWeekday(i) {
20183           return newInterval(function(date) {
20184             date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
20185             date.setUTCHours(0, 0, 0, 0);
20186           }, function(date, step) {
20187             date.setUTCDate(date.getUTCDate() + step * 7);
20188           }, function(start, end) {
20189             return (end - start) / durationWeek;
20190           });
20191         }
20192
20193         var utcSunday = utcWeekday(0);
20194         var utcMonday = utcWeekday(1);
20195         var utcTuesday = utcWeekday(2);
20196         var utcWednesday = utcWeekday(3);
20197         var utcThursday = utcWeekday(4);
20198         var utcFriday = utcWeekday(5);
20199         var utcSaturday = utcWeekday(6);
20200
20201         var utcSundays = utcSunday.range;
20202         var utcMondays = utcMonday.range;
20203         var utcTuesdays = utcTuesday.range;
20204         var utcWednesdays = utcWednesday.range;
20205         var utcThursdays = utcThursday.range;
20206         var utcFridays = utcFriday.range;
20207         var utcSaturdays = utcSaturday.range;
20208
20209         var utcMonth = newInterval(function(date) {
20210           date.setUTCDate(1);
20211           date.setUTCHours(0, 0, 0, 0);
20212         }, function(date, step) {
20213           date.setUTCMonth(date.getUTCMonth() + step);
20214         }, function(start, end) {
20215           return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
20216         }, function(date) {
20217           return date.getUTCMonth();
20218         });
20219         var utcMonths = utcMonth.range;
20220
20221         var utcYear = newInterval(function(date) {
20222           date.setUTCMonth(0, 1);
20223           date.setUTCHours(0, 0, 0, 0);
20224         }, function(date, step) {
20225           date.setUTCFullYear(date.getUTCFullYear() + step);
20226         }, function(start, end) {
20227           return end.getUTCFullYear() - start.getUTCFullYear();
20228         }, function(date) {
20229           return date.getUTCFullYear();
20230         });
20231
20232         // An optimized implementation for this simple case.
20233         utcYear.every = function(k) {
20234           return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
20235             date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
20236             date.setUTCMonth(0, 1);
20237             date.setUTCHours(0, 0, 0, 0);
20238           }, function(date, step) {
20239             date.setUTCFullYear(date.getUTCFullYear() + step * k);
20240           });
20241         };
20242         var utcYears = utcYear.range;
20243
20244         function localDate(d) {
20245           if (0 <= d.y && d.y < 100) {
20246             var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
20247             date.setFullYear(d.y);
20248             return date;
20249           }
20250           return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
20251         }
20252
20253         function utcDate(d) {
20254           if (0 <= d.y && d.y < 100) {
20255             var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
20256             date.setUTCFullYear(d.y);
20257             return date;
20258           }
20259           return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
20260         }
20261
20262         function newDate(y, m, d) {
20263           return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};
20264         }
20265
20266         function formatLocale$1(locale) {
20267           var locale_dateTime = locale.dateTime,
20268               locale_date = locale.date,
20269               locale_time = locale.time,
20270               locale_periods = locale.periods,
20271               locale_weekdays = locale.days,
20272               locale_shortWeekdays = locale.shortDays,
20273               locale_months = locale.months,
20274               locale_shortMonths = locale.shortMonths;
20275
20276           var periodRe = formatRe(locale_periods),
20277               periodLookup = formatLookup(locale_periods),
20278               weekdayRe = formatRe(locale_weekdays),
20279               weekdayLookup = formatLookup(locale_weekdays),
20280               shortWeekdayRe = formatRe(locale_shortWeekdays),
20281               shortWeekdayLookup = formatLookup(locale_shortWeekdays),
20282               monthRe = formatRe(locale_months),
20283               monthLookup = formatLookup(locale_months),
20284               shortMonthRe = formatRe(locale_shortMonths),
20285               shortMonthLookup = formatLookup(locale_shortMonths);
20286
20287           var formats = {
20288             "a": formatShortWeekday,
20289             "A": formatWeekday,
20290             "b": formatShortMonth,
20291             "B": formatMonth,
20292             "c": null,
20293             "d": formatDayOfMonth,
20294             "e": formatDayOfMonth,
20295             "f": formatMicroseconds,
20296             "H": formatHour24,
20297             "I": formatHour12,
20298             "j": formatDayOfYear,
20299             "L": formatMilliseconds,
20300             "m": formatMonthNumber,
20301             "M": formatMinutes,
20302             "p": formatPeriod,
20303             "q": formatQuarter,
20304             "Q": formatUnixTimestamp,
20305             "s": formatUnixTimestampSeconds,
20306             "S": formatSeconds,
20307             "u": formatWeekdayNumberMonday,
20308             "U": formatWeekNumberSunday,
20309             "V": formatWeekNumberISO,
20310             "w": formatWeekdayNumberSunday,
20311             "W": formatWeekNumberMonday,
20312             "x": null,
20313             "X": null,
20314             "y": formatYear$1,
20315             "Y": formatFullYear,
20316             "Z": formatZone,
20317             "%": formatLiteralPercent
20318           };
20319
20320           var utcFormats = {
20321             "a": formatUTCShortWeekday,
20322             "A": formatUTCWeekday,
20323             "b": formatUTCShortMonth,
20324             "B": formatUTCMonth,
20325             "c": null,
20326             "d": formatUTCDayOfMonth,
20327             "e": formatUTCDayOfMonth,
20328             "f": formatUTCMicroseconds,
20329             "H": formatUTCHour24,
20330             "I": formatUTCHour12,
20331             "j": formatUTCDayOfYear,
20332             "L": formatUTCMilliseconds,
20333             "m": formatUTCMonthNumber,
20334             "M": formatUTCMinutes,
20335             "p": formatUTCPeriod,
20336             "q": formatUTCQuarter,
20337             "Q": formatUnixTimestamp,
20338             "s": formatUnixTimestampSeconds,
20339             "S": formatUTCSeconds,
20340             "u": formatUTCWeekdayNumberMonday,
20341             "U": formatUTCWeekNumberSunday,
20342             "V": formatUTCWeekNumberISO,
20343             "w": formatUTCWeekdayNumberSunday,
20344             "W": formatUTCWeekNumberMonday,
20345             "x": null,
20346             "X": null,
20347             "y": formatUTCYear,
20348             "Y": formatUTCFullYear,
20349             "Z": formatUTCZone,
20350             "%": formatLiteralPercent
20351           };
20352
20353           var parses = {
20354             "a": parseShortWeekday,
20355             "A": parseWeekday,
20356             "b": parseShortMonth,
20357             "B": parseMonth,
20358             "c": parseLocaleDateTime,
20359             "d": parseDayOfMonth,
20360             "e": parseDayOfMonth,
20361             "f": parseMicroseconds,
20362             "H": parseHour24,
20363             "I": parseHour24,
20364             "j": parseDayOfYear,
20365             "L": parseMilliseconds,
20366             "m": parseMonthNumber,
20367             "M": parseMinutes,
20368             "p": parsePeriod,
20369             "q": parseQuarter,
20370             "Q": parseUnixTimestamp,
20371             "s": parseUnixTimestampSeconds,
20372             "S": parseSeconds,
20373             "u": parseWeekdayNumberMonday,
20374             "U": parseWeekNumberSunday,
20375             "V": parseWeekNumberISO,
20376             "w": parseWeekdayNumberSunday,
20377             "W": parseWeekNumberMonday,
20378             "x": parseLocaleDate,
20379             "X": parseLocaleTime,
20380             "y": parseYear,
20381             "Y": parseFullYear,
20382             "Z": parseZone,
20383             "%": parseLiteralPercent
20384           };
20385
20386           // These recursive directive definitions must be deferred.
20387           formats.x = newFormat(locale_date, formats);
20388           formats.X = newFormat(locale_time, formats);
20389           formats.c = newFormat(locale_dateTime, formats);
20390           utcFormats.x = newFormat(locale_date, utcFormats);
20391           utcFormats.X = newFormat(locale_time, utcFormats);
20392           utcFormats.c = newFormat(locale_dateTime, utcFormats);
20393
20394           function newFormat(specifier, formats) {
20395             return function(date) {
20396               var string = [],
20397                   i = -1,
20398                   j = 0,
20399                   n = specifier.length,
20400                   c,
20401                   pad,
20402                   format;
20403
20404               if (!(date instanceof Date)) { date = new Date(+date); }
20405
20406               while (++i < n) {
20407                 if (specifier.charCodeAt(i) === 37) {
20408                   string.push(specifier.slice(j, i));
20409                   if ((pad = pads[c = specifier.charAt(++i)]) != null) { c = specifier.charAt(++i); }
20410                   else { pad = c === "e" ? " " : "0"; }
20411                   if (format = formats[c]) { c = format(date, pad); }
20412                   string.push(c);
20413                   j = i + 1;
20414                 }
20415               }
20416
20417               string.push(specifier.slice(j, i));
20418               return string.join("");
20419             };
20420           }
20421
20422           function newParse(specifier, Z) {
20423             return function(string) {
20424               var d = newDate(1900, undefined, 1),
20425                   i = parseSpecifier(d, specifier, string += "", 0),
20426                   week, day$1;
20427               if (i != string.length) { return null; }
20428
20429               // If a UNIX timestamp is specified, return it.
20430               if ("Q" in d) { return new Date(d.Q); }
20431               if ("s" in d) { return new Date(d.s * 1000 + ("L" in d ? d.L : 0)); }
20432
20433               // If this is utcParse, never use the local timezone.
20434               if (Z && !("Z" in d)) { d.Z = 0; }
20435
20436               // The am-pm flag is 0 for AM, and 1 for PM.
20437               if ("p" in d) { d.H = d.H % 12 + d.p * 12; }
20438
20439               // If the month was not specified, inherit from the quarter.
20440               if (d.m === undefined) { d.m = "q" in d ? d.q : 0; }
20441
20442               // Convert day-of-week and week-of-year to day-of-year.
20443               if ("V" in d) {
20444                 if (d.V < 1 || d.V > 53) { return null; }
20445                 if (!("w" in d)) { d.w = 1; }
20446                 if ("Z" in d) {
20447                   week = utcDate(newDate(d.y, 0, 1)), day$1 = week.getUTCDay();
20448                   week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);
20449                   week = utcDay.offset(week, (d.V - 1) * 7);
20450                   d.y = week.getUTCFullYear();
20451                   d.m = week.getUTCMonth();
20452                   d.d = week.getUTCDate() + (d.w + 6) % 7;
20453                 } else {
20454                   week = localDate(newDate(d.y, 0, 1)), day$1 = week.getDay();
20455                   week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);
20456                   week = day.offset(week, (d.V - 1) * 7);
20457                   d.y = week.getFullYear();
20458                   d.m = week.getMonth();
20459                   d.d = week.getDate() + (d.w + 6) % 7;
20460                 }
20461               } else if ("W" in d || "U" in d) {
20462                 if (!("w" in d)) { d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; }
20463                 day$1 = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
20464                 d.m = 0;
20465                 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;
20466               }
20467
20468               // If a time zone is specified, all fields are interpreted as UTC and then
20469               // offset according to the specified time zone.
20470               if ("Z" in d) {
20471                 d.H += d.Z / 100 | 0;
20472                 d.M += d.Z % 100;
20473                 return utcDate(d);
20474               }
20475
20476               // Otherwise, all fields are in local time.
20477               return localDate(d);
20478             };
20479           }
20480
20481           function parseSpecifier(d, specifier, string, j) {
20482             var i = 0,
20483                 n = specifier.length,
20484                 m = string.length,
20485                 c,
20486                 parse;
20487
20488             while (i < n) {
20489               if (j >= m) { return -1; }
20490               c = specifier.charCodeAt(i++);
20491               if (c === 37) {
20492                 c = specifier.charAt(i++);
20493                 parse = parses[c in pads ? specifier.charAt(i++) : c];
20494                 if (!parse || ((j = parse(d, string, j)) < 0)) { return -1; }
20495               } else if (c != string.charCodeAt(j++)) {
20496                 return -1;
20497               }
20498             }
20499
20500             return j;
20501           }
20502
20503           function parsePeriod(d, string, i) {
20504             var n = periodRe.exec(string.slice(i));
20505             return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
20506           }
20507
20508           function parseShortWeekday(d, string, i) {
20509             var n = shortWeekdayRe.exec(string.slice(i));
20510             return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
20511           }
20512
20513           function parseWeekday(d, string, i) {
20514             var n = weekdayRe.exec(string.slice(i));
20515             return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
20516           }
20517
20518           function parseShortMonth(d, string, i) {
20519             var n = shortMonthRe.exec(string.slice(i));
20520             return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
20521           }
20522
20523           function parseMonth(d, string, i) {
20524             var n = monthRe.exec(string.slice(i));
20525             return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
20526           }
20527
20528           function parseLocaleDateTime(d, string, i) {
20529             return parseSpecifier(d, locale_dateTime, string, i);
20530           }
20531
20532           function parseLocaleDate(d, string, i) {
20533             return parseSpecifier(d, locale_date, string, i);
20534           }
20535
20536           function parseLocaleTime(d, string, i) {
20537             return parseSpecifier(d, locale_time, string, i);
20538           }
20539
20540           function formatShortWeekday(d) {
20541             return locale_shortWeekdays[d.getDay()];
20542           }
20543
20544           function formatWeekday(d) {
20545             return locale_weekdays[d.getDay()];
20546           }
20547
20548           function formatShortMonth(d) {
20549             return locale_shortMonths[d.getMonth()];
20550           }
20551
20552           function formatMonth(d) {
20553             return locale_months[d.getMonth()];
20554           }
20555
20556           function formatPeriod(d) {
20557             return locale_periods[+(d.getHours() >= 12)];
20558           }
20559
20560           function formatQuarter(d) {
20561             return 1 + ~~(d.getMonth() / 3);
20562           }
20563
20564           function formatUTCShortWeekday(d) {
20565             return locale_shortWeekdays[d.getUTCDay()];
20566           }
20567
20568           function formatUTCWeekday(d) {
20569             return locale_weekdays[d.getUTCDay()];
20570           }
20571
20572           function formatUTCShortMonth(d) {
20573             return locale_shortMonths[d.getUTCMonth()];
20574           }
20575
20576           function formatUTCMonth(d) {
20577             return locale_months[d.getUTCMonth()];
20578           }
20579
20580           function formatUTCPeriod(d) {
20581             return locale_periods[+(d.getUTCHours() >= 12)];
20582           }
20583
20584           function formatUTCQuarter(d) {
20585             return 1 + ~~(d.getUTCMonth() / 3);
20586           }
20587
20588           return {
20589             format: function(specifier) {
20590               var f = newFormat(specifier += "", formats);
20591               f.toString = function() { return specifier; };
20592               return f;
20593             },
20594             parse: function(specifier) {
20595               var p = newParse(specifier += "", false);
20596               p.toString = function() { return specifier; };
20597               return p;
20598             },
20599             utcFormat: function(specifier) {
20600               var f = newFormat(specifier += "", utcFormats);
20601               f.toString = function() { return specifier; };
20602               return f;
20603             },
20604             utcParse: function(specifier) {
20605               var p = newParse(specifier += "", true);
20606               p.toString = function() { return specifier; };
20607               return p;
20608             }
20609           };
20610         }
20611
20612         var pads = {"-": "", "_": " ", "0": "0"},
20613             numberRe = /^\s*\d+/, // note: ignores next directive
20614             percentRe = /^%/,
20615             requoteRe = /[\\^$*+?|[\]().{}]/g;
20616
20617         function pad$1(value, fill, width) {
20618           var sign = value < 0 ? "-" : "",
20619               string = (sign ? -value : value) + "",
20620               length = string.length;
20621           return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
20622         }
20623
20624         function requote(s) {
20625           return s.replace(requoteRe, "\\$&");
20626         }
20627
20628         function formatRe(names) {
20629           return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
20630         }
20631
20632         function formatLookup(names) {
20633           var map = {}, i = -1, n = names.length;
20634           while (++i < n) { map[names[i].toLowerCase()] = i; }
20635           return map;
20636         }
20637
20638         function parseWeekdayNumberSunday(d, string, i) {
20639           var n = numberRe.exec(string.slice(i, i + 1));
20640           return n ? (d.w = +n[0], i + n[0].length) : -1;
20641         }
20642
20643         function parseWeekdayNumberMonday(d, string, i) {
20644           var n = numberRe.exec(string.slice(i, i + 1));
20645           return n ? (d.u = +n[0], i + n[0].length) : -1;
20646         }
20647
20648         function parseWeekNumberSunday(d, string, i) {
20649           var n = numberRe.exec(string.slice(i, i + 2));
20650           return n ? (d.U = +n[0], i + n[0].length) : -1;
20651         }
20652
20653         function parseWeekNumberISO(d, string, i) {
20654           var n = numberRe.exec(string.slice(i, i + 2));
20655           return n ? (d.V = +n[0], i + n[0].length) : -1;
20656         }
20657
20658         function parseWeekNumberMonday(d, string, i) {
20659           var n = numberRe.exec(string.slice(i, i + 2));
20660           return n ? (d.W = +n[0], i + n[0].length) : -1;
20661         }
20662
20663         function parseFullYear(d, string, i) {
20664           var n = numberRe.exec(string.slice(i, i + 4));
20665           return n ? (d.y = +n[0], i + n[0].length) : -1;
20666         }
20667
20668         function parseYear(d, string, i) {
20669           var n = numberRe.exec(string.slice(i, i + 2));
20670           return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
20671         }
20672
20673         function parseZone(d, string, i) {
20674           var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
20675           return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
20676         }
20677
20678         function parseQuarter(d, string, i) {
20679           var n = numberRe.exec(string.slice(i, i + 1));
20680           return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;
20681         }
20682
20683         function parseMonthNumber(d, string, i) {
20684           var n = numberRe.exec(string.slice(i, i + 2));
20685           return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
20686         }
20687
20688         function parseDayOfMonth(d, string, i) {
20689           var n = numberRe.exec(string.slice(i, i + 2));
20690           return n ? (d.d = +n[0], i + n[0].length) : -1;
20691         }
20692
20693         function parseDayOfYear(d, string, i) {
20694           var n = numberRe.exec(string.slice(i, i + 3));
20695           return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
20696         }
20697
20698         function parseHour24(d, string, i) {
20699           var n = numberRe.exec(string.slice(i, i + 2));
20700           return n ? (d.H = +n[0], i + n[0].length) : -1;
20701         }
20702
20703         function parseMinutes(d, string, i) {
20704           var n = numberRe.exec(string.slice(i, i + 2));
20705           return n ? (d.M = +n[0], i + n[0].length) : -1;
20706         }
20707
20708         function parseSeconds(d, string, i) {
20709           var n = numberRe.exec(string.slice(i, i + 2));
20710           return n ? (d.S = +n[0], i + n[0].length) : -1;
20711         }
20712
20713         function parseMilliseconds(d, string, i) {
20714           var n = numberRe.exec(string.slice(i, i + 3));
20715           return n ? (d.L = +n[0], i + n[0].length) : -1;
20716         }
20717
20718         function parseMicroseconds(d, string, i) {
20719           var n = numberRe.exec(string.slice(i, i + 6));
20720           return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;
20721         }
20722
20723         function parseLiteralPercent(d, string, i) {
20724           var n = percentRe.exec(string.slice(i, i + 1));
20725           return n ? i + n[0].length : -1;
20726         }
20727
20728         function parseUnixTimestamp(d, string, i) {
20729           var n = numberRe.exec(string.slice(i));
20730           return n ? (d.Q = +n[0], i + n[0].length) : -1;
20731         }
20732
20733         function parseUnixTimestampSeconds(d, string, i) {
20734           var n = numberRe.exec(string.slice(i));
20735           return n ? (d.s = +n[0], i + n[0].length) : -1;
20736         }
20737
20738         function formatDayOfMonth(d, p) {
20739           return pad$1(d.getDate(), p, 2);
20740         }
20741
20742         function formatHour24(d, p) {
20743           return pad$1(d.getHours(), p, 2);
20744         }
20745
20746         function formatHour12(d, p) {
20747           return pad$1(d.getHours() % 12 || 12, p, 2);
20748         }
20749
20750         function formatDayOfYear(d, p) {
20751           return pad$1(1 + day.count(year(d), d), p, 3);
20752         }
20753
20754         function formatMilliseconds(d, p) {
20755           return pad$1(d.getMilliseconds(), p, 3);
20756         }
20757
20758         function formatMicroseconds(d, p) {
20759           return formatMilliseconds(d, p) + "000";
20760         }
20761
20762         function formatMonthNumber(d, p) {
20763           return pad$1(d.getMonth() + 1, p, 2);
20764         }
20765
20766         function formatMinutes(d, p) {
20767           return pad$1(d.getMinutes(), p, 2);
20768         }
20769
20770         function formatSeconds(d, p) {
20771           return pad$1(d.getSeconds(), p, 2);
20772         }
20773
20774         function formatWeekdayNumberMonday(d) {
20775           var day = d.getDay();
20776           return day === 0 ? 7 : day;
20777         }
20778
20779         function formatWeekNumberSunday(d, p) {
20780           return pad$1(sunday.count(year(d) - 1, d), p, 2);
20781         }
20782
20783         function formatWeekNumberISO(d, p) {
20784           var day = d.getDay();
20785           d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);
20786           return pad$1(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);
20787         }
20788
20789         function formatWeekdayNumberSunday(d) {
20790           return d.getDay();
20791         }
20792
20793         function formatWeekNumberMonday(d, p) {
20794           return pad$1(monday.count(year(d) - 1, d), p, 2);
20795         }
20796
20797         function formatYear$1(d, p) {
20798           return pad$1(d.getFullYear() % 100, p, 2);
20799         }
20800
20801         function formatFullYear(d, p) {
20802           return pad$1(d.getFullYear() % 10000, p, 4);
20803         }
20804
20805         function formatZone(d) {
20806           var z = d.getTimezoneOffset();
20807           return (z > 0 ? "-" : (z *= -1, "+"))
20808               + pad$1(z / 60 | 0, "0", 2)
20809               + pad$1(z % 60, "0", 2);
20810         }
20811
20812         function formatUTCDayOfMonth(d, p) {
20813           return pad$1(d.getUTCDate(), p, 2);
20814         }
20815
20816         function formatUTCHour24(d, p) {
20817           return pad$1(d.getUTCHours(), p, 2);
20818         }
20819
20820         function formatUTCHour12(d, p) {
20821           return pad$1(d.getUTCHours() % 12 || 12, p, 2);
20822         }
20823
20824         function formatUTCDayOfYear(d, p) {
20825           return pad$1(1 + utcDay.count(utcYear(d), d), p, 3);
20826         }
20827
20828         function formatUTCMilliseconds(d, p) {
20829           return pad$1(d.getUTCMilliseconds(), p, 3);
20830         }
20831
20832         function formatUTCMicroseconds(d, p) {
20833           return formatUTCMilliseconds(d, p) + "000";
20834         }
20835
20836         function formatUTCMonthNumber(d, p) {
20837           return pad$1(d.getUTCMonth() + 1, p, 2);
20838         }
20839
20840         function formatUTCMinutes(d, p) {
20841           return pad$1(d.getUTCMinutes(), p, 2);
20842         }
20843
20844         function formatUTCSeconds(d, p) {
20845           return pad$1(d.getUTCSeconds(), p, 2);
20846         }
20847
20848         function formatUTCWeekdayNumberMonday(d) {
20849           var dow = d.getUTCDay();
20850           return dow === 0 ? 7 : dow;
20851         }
20852
20853         function formatUTCWeekNumberSunday(d, p) {
20854           return pad$1(utcSunday.count(utcYear(d) - 1, d), p, 2);
20855         }
20856
20857         function formatUTCWeekNumberISO(d, p) {
20858           var day = d.getUTCDay();
20859           d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
20860           return pad$1(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);
20861         }
20862
20863         function formatUTCWeekdayNumberSunday(d) {
20864           return d.getUTCDay();
20865         }
20866
20867         function formatUTCWeekNumberMonday(d, p) {
20868           return pad$1(utcMonday.count(utcYear(d) - 1, d), p, 2);
20869         }
20870
20871         function formatUTCYear(d, p) {
20872           return pad$1(d.getUTCFullYear() % 100, p, 2);
20873         }
20874
20875         function formatUTCFullYear(d, p) {
20876           return pad$1(d.getUTCFullYear() % 10000, p, 4);
20877         }
20878
20879         function formatUTCZone() {
20880           return "+0000";
20881         }
20882
20883         function formatLiteralPercent() {
20884           return "%";
20885         }
20886
20887         function formatUnixTimestamp(d) {
20888           return +d;
20889         }
20890
20891         function formatUnixTimestampSeconds(d) {
20892           return Math.floor(+d / 1000);
20893         }
20894
20895         var locale$1;
20896         var timeFormat;
20897         var timeParse;
20898         var utcFormat;
20899         var utcParse;
20900
20901         defaultLocale$1({
20902           dateTime: "%x, %X",
20903           date: "%-m/%-d/%Y",
20904           time: "%-I:%M:%S %p",
20905           periods: ["AM", "PM"],
20906           days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
20907           shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
20908           months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
20909           shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
20910         });
20911
20912         function defaultLocale$1(definition) {
20913           locale$1 = formatLocale$1(definition);
20914           timeFormat = locale$1.format;
20915           timeParse = locale$1.parse;
20916           utcFormat = locale$1.utcFormat;
20917           utcParse = locale$1.utcParse;
20918           return locale$1;
20919         }
20920
20921         var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
20922
20923         function formatIsoNative(date) {
20924           return date.toISOString();
20925         }
20926
20927         var formatIso = Date.prototype.toISOString
20928             ? formatIsoNative
20929             : utcFormat(isoSpecifier);
20930
20931         function parseIsoNative(string) {
20932           var date = new Date(string);
20933           return isNaN(date) ? null : date;
20934         }
20935
20936         var parseIso = +new Date("2000-01-01T00:00:00.000Z")
20937             ? parseIsoNative
20938             : utcParse(isoSpecifier);
20939
20940         var durationSecond$1 = 1000,
20941             durationMinute$1 = durationSecond$1 * 60,
20942             durationHour$1 = durationMinute$1 * 60,
20943             durationDay$1 = durationHour$1 * 24,
20944             durationWeek$1 = durationDay$1 * 7,
20945             durationMonth = durationDay$1 * 30,
20946             durationYear = durationDay$1 * 365;
20947
20948         function date$1(t) {
20949           return new Date(t);
20950         }
20951
20952         function number$3(t) {
20953           return t instanceof Date ? +t : +new Date(+t);
20954         }
20955
20956         function calendar(year, month, week, day, hour, minute, second, millisecond, format) {
20957           var scale = continuous(identity$5, identity$5),
20958               invert = scale.invert,
20959               domain = scale.domain;
20960
20961           var formatMillisecond = format(".%L"),
20962               formatSecond = format(":%S"),
20963               formatMinute = format("%I:%M"),
20964               formatHour = format("%I %p"),
20965               formatDay = format("%a %d"),
20966               formatWeek = format("%b %d"),
20967               formatMonth = format("%B"),
20968               formatYear = format("%Y");
20969
20970           var tickIntervals = [
20971             [second,  1,      durationSecond$1],
20972             [second,  5,  5 * durationSecond$1],
20973             [second, 15, 15 * durationSecond$1],
20974             [second, 30, 30 * durationSecond$1],
20975             [minute,  1,      durationMinute$1],
20976             [minute,  5,  5 * durationMinute$1],
20977             [minute, 15, 15 * durationMinute$1],
20978             [minute, 30, 30 * durationMinute$1],
20979             [  hour,  1,      durationHour$1  ],
20980             [  hour,  3,  3 * durationHour$1  ],
20981             [  hour,  6,  6 * durationHour$1  ],
20982             [  hour, 12, 12 * durationHour$1  ],
20983             [   day,  1,      durationDay$1   ],
20984             [   day,  2,  2 * durationDay$1   ],
20985             [  week,  1,      durationWeek$1  ],
20986             [ month,  1,      durationMonth ],
20987             [ month,  3,  3 * durationMonth ],
20988             [  year,  1,      durationYear  ]
20989           ];
20990
20991           function tickFormat(date) {
20992             return (second(date) < date ? formatMillisecond
20993                 : minute(date) < date ? formatSecond
20994                 : hour(date) < date ? formatMinute
20995                 : day(date) < date ? formatHour
20996                 : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
20997                 : year(date) < date ? formatMonth
20998                 : formatYear)(date);
20999           }
21000
21001           function tickInterval(interval, start, stop, step) {
21002             if (interval == null) { interval = 10; }
21003
21004             // If a desired tick count is specified, pick a reasonable tick interval
21005             // based on the extent of the domain and a rough estimate of tick size.
21006             // Otherwise, assume interval is already a time interval and use it.
21007             if (typeof interval === "number") {
21008               var target = Math.abs(stop - start) / interval,
21009                   i = d3_bisector(function(i) { return i[2]; }).right(tickIntervals, target);
21010               if (i === tickIntervals.length) {
21011                 step = tickStep(start / durationYear, stop / durationYear, interval);
21012                 interval = year;
21013               } else if (i) {
21014                 i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
21015                 step = i[1];
21016                 interval = i[0];
21017               } else {
21018                 step = Math.max(tickStep(start, stop, interval), 1);
21019                 interval = millisecond;
21020               }
21021             }
21022
21023             return step == null ? interval : interval.every(step);
21024           }
21025
21026           scale.invert = function(y) {
21027             return new Date(invert(y));
21028           };
21029
21030           scale.domain = function(_) {
21031             return arguments.length ? domain(map$5.call(_, number$3)) : domain().map(date$1);
21032           };
21033
21034           scale.ticks = function(interval, step) {
21035             var d = domain(),
21036                 t0 = d[0],
21037                 t1 = d[d.length - 1],
21038                 r = t1 < t0,
21039                 t;
21040             if (r) { t = t0, t0 = t1, t1 = t; }
21041             t = tickInterval(interval, t0, t1, step);
21042             t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
21043             return r ? t.reverse() : t;
21044           };
21045
21046           scale.tickFormat = function(count, specifier) {
21047             return specifier == null ? tickFormat : format(specifier);
21048           };
21049
21050           scale.nice = function(interval, step) {
21051             var d = domain();
21052             return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
21053                 ? domain(nice(d, interval))
21054                 : scale;
21055           };
21056
21057           scale.copy = function() {
21058             return copy$1(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));
21059           };
21060
21061           return scale;
21062         }
21063
21064         function time() {
21065           return initRange.apply(calendar(year, month, sunday, day, hour, minute, second, millisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);
21066         }
21067
21068         function utcTime() {
21069           return initRange.apply(calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);
21070         }
21071
21072         function transformer$2() {
21073           var x0 = 0,
21074               x1 = 1,
21075               t0,
21076               t1,
21077               k10,
21078               transform,
21079               interpolator = identity$5,
21080               clamp = false,
21081               unknown;
21082
21083           function scale(x) {
21084             return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));
21085           }
21086
21087           scale.domain = function(_) {
21088             return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];
21089           };
21090
21091           scale.clamp = function(_) {
21092             return arguments.length ? (clamp = !!_, scale) : clamp;
21093           };
21094
21095           scale.interpolator = function(_) {
21096             return arguments.length ? (interpolator = _, scale) : interpolator;
21097           };
21098
21099           scale.unknown = function(_) {
21100             return arguments.length ? (unknown = _, scale) : unknown;
21101           };
21102
21103           return function(t) {
21104             transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);
21105             return scale;
21106           };
21107         }
21108
21109         function copy$2(source, target) {
21110           return target
21111               .domain(source.domain())
21112               .interpolator(source.interpolator())
21113               .clamp(source.clamp())
21114               .unknown(source.unknown());
21115         }
21116
21117         function sequential() {
21118           var scale = linearish(transformer$2()(identity$5));
21119
21120           scale.copy = function() {
21121             return copy$2(scale, sequential());
21122           };
21123
21124           return initInterpolator.apply(scale, arguments);
21125         }
21126
21127         function sequentialLog() {
21128           var scale = loggish(transformer$2()).domain([1, 10]);
21129
21130           scale.copy = function() {
21131             return copy$2(scale, sequentialLog()).base(scale.base());
21132           };
21133
21134           return initInterpolator.apply(scale, arguments);
21135         }
21136
21137         function sequentialSymlog() {
21138           var scale = symlogish(transformer$2());
21139
21140           scale.copy = function() {
21141             return copy$2(scale, sequentialSymlog()).constant(scale.constant());
21142           };
21143
21144           return initInterpolator.apply(scale, arguments);
21145         }
21146
21147         function sequentialPow() {
21148           var scale = powish(transformer$2());
21149
21150           scale.copy = function() {
21151             return copy$2(scale, sequentialPow()).exponent(scale.exponent());
21152           };
21153
21154           return initInterpolator.apply(scale, arguments);
21155         }
21156
21157         function sequentialSqrt() {
21158           return sequentialPow.apply(null, arguments).exponent(0.5);
21159         }
21160
21161         function sequentialQuantile() {
21162           var domain = [],
21163               interpolator = identity$5;
21164
21165           function scale(x) {
21166             if (!isNaN(x = +x)) { return interpolator((bisectRight(domain, x) - 1) / (domain.length - 1)); }
21167           }
21168
21169           scale.domain = function(_) {
21170             if (!arguments.length) { return domain.slice(); }
21171             domain = [];
21172             for (var i = 0, n = _.length, d; i < n; ++i) { if (d = _[i], d != null && !isNaN(d = +d)) { domain.push(d); } }
21173             domain.sort(d3_ascending);
21174             return scale;
21175           };
21176
21177           scale.interpolator = function(_) {
21178             return arguments.length ? (interpolator = _, scale) : interpolator;
21179           };
21180
21181           scale.copy = function() {
21182             return sequentialQuantile(interpolator).domain(domain);
21183           };
21184
21185           return initInterpolator.apply(scale, arguments);
21186         }
21187
21188         function transformer$3() {
21189           var x0 = 0,
21190               x1 = 0.5,
21191               x2 = 1,
21192               t0,
21193               t1,
21194               t2,
21195               k10,
21196               k21,
21197               interpolator = identity$5,
21198               transform,
21199               clamp = false,
21200               unknown;
21201
21202           function scale(x) {
21203             return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));
21204           }
21205
21206           scale.domain = function(_) {
21207             return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];
21208           };
21209
21210           scale.clamp = function(_) {
21211             return arguments.length ? (clamp = !!_, scale) : clamp;
21212           };
21213
21214           scale.interpolator = function(_) {
21215             return arguments.length ? (interpolator = _, scale) : interpolator;
21216           };
21217
21218           scale.unknown = function(_) {
21219             return arguments.length ? (unknown = _, scale) : unknown;
21220           };
21221
21222           return function(t) {
21223             transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);
21224             return scale;
21225           };
21226         }
21227
21228         function diverging() {
21229           var scale = linearish(transformer$3()(identity$5));
21230
21231           scale.copy = function() {
21232             return copy$2(scale, diverging());
21233           };
21234
21235           return initInterpolator.apply(scale, arguments);
21236         }
21237
21238         function divergingLog() {
21239           var scale = loggish(transformer$3()).domain([0.1, 1, 10]);
21240
21241           scale.copy = function() {
21242             return copy$2(scale, divergingLog()).base(scale.base());
21243           };
21244
21245           return initInterpolator.apply(scale, arguments);
21246         }
21247
21248         function divergingSymlog() {
21249           var scale = symlogish(transformer$3());
21250
21251           scale.copy = function() {
21252             return copy$2(scale, divergingSymlog()).constant(scale.constant());
21253           };
21254
21255           return initInterpolator.apply(scale, arguments);
21256         }
21257
21258         function divergingPow() {
21259           var scale = powish(transformer$3());
21260
21261           scale.copy = function() {
21262             return copy$2(scale, divergingPow()).exponent(scale.exponent());
21263           };
21264
21265           return initInterpolator.apply(scale, arguments);
21266         }
21267
21268         function divergingSqrt() {
21269           return divergingPow.apply(null, arguments).exponent(0.5);
21270         }
21271
21272         function colors(specifier) {
21273           var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;
21274           while (i < n) { colors[i] = "#" + specifier.slice(i * 6, ++i * 6); }
21275           return colors;
21276         }
21277
21278         var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
21279
21280         var Accent = colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666");
21281
21282         var Dark2 = colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666");
21283
21284         var Paired = colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928");
21285
21286         var Pastel1 = colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2");
21287
21288         var Pastel2 = colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc");
21289
21290         var Set1 = colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999");
21291
21292         var Set2 = colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3");
21293
21294         var Set3 = colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f");
21295
21296         var Tableau10 = colors("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");
21297
21298         function ramp(scheme) {
21299           return rgbBasis(scheme[scheme.length - 1]);
21300         }
21301
21302         var scheme = new Array(3).concat(
21303           "d8b365f5f5f55ab4ac",
21304           "a6611adfc27d80cdc1018571",
21305           "a6611adfc27df5f5f580cdc1018571",
21306           "8c510ad8b365f6e8c3c7eae55ab4ac01665e",
21307           "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e",
21308           "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e",
21309           "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e",
21310           "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30",
21311           "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30"
21312         ).map(colors);
21313
21314         var BrBG = ramp(scheme);
21315
21316         var scheme$1 = new Array(3).concat(
21317           "af8dc3f7f7f77fbf7b",
21318           "7b3294c2a5cfa6dba0008837",
21319           "7b3294c2a5cff7f7f7a6dba0008837",
21320           "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837",
21321           "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837",
21322           "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837",
21323           "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837",
21324           "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b",
21325           "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b"
21326         ).map(colors);
21327
21328         var PRGn = ramp(scheme$1);
21329
21330         var scheme$2 = new Array(3).concat(
21331           "e9a3c9f7f7f7a1d76a",
21332           "d01c8bf1b6dab8e1864dac26",
21333           "d01c8bf1b6daf7f7f7b8e1864dac26",
21334           "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221",
21335           "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221",
21336           "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221",
21337           "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221",
21338           "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419",
21339           "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419"
21340         ).map(colors);
21341
21342         var PiYG = ramp(scheme$2);
21343
21344         var scheme$3 = new Array(3).concat(
21345           "998ec3f7f7f7f1a340",
21346           "5e3c99b2abd2fdb863e66101",
21347           "5e3c99b2abd2f7f7f7fdb863e66101",
21348           "542788998ec3d8daebfee0b6f1a340b35806",
21349           "542788998ec3d8daebf7f7f7fee0b6f1a340b35806",
21350           "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806",
21351           "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806",
21352           "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08",
21353           "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08"
21354         ).map(colors);
21355
21356         var PuOr = ramp(scheme$3);
21357
21358         var scheme$4 = new Array(3).concat(
21359           "ef8a62f7f7f767a9cf",
21360           "ca0020f4a58292c5de0571b0",
21361           "ca0020f4a582f7f7f792c5de0571b0",
21362           "b2182bef8a62fddbc7d1e5f067a9cf2166ac",
21363           "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac",
21364           "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac",
21365           "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac",
21366           "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061",
21367           "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061"
21368         ).map(colors);
21369
21370         var RdBu = ramp(scheme$4);
21371
21372         var scheme$5 = new Array(3).concat(
21373           "ef8a62ffffff999999",
21374           "ca0020f4a582bababa404040",
21375           "ca0020f4a582ffffffbababa404040",
21376           "b2182bef8a62fddbc7e0e0e09999994d4d4d",
21377           "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d",
21378           "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d",
21379           "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d",
21380           "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a",
21381           "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a"
21382         ).map(colors);
21383
21384         var RdGy = ramp(scheme$5);
21385
21386         var scheme$6 = new Array(3).concat(
21387           "fc8d59ffffbf91bfdb",
21388           "d7191cfdae61abd9e92c7bb6",
21389           "d7191cfdae61ffffbfabd9e92c7bb6",
21390           "d73027fc8d59fee090e0f3f891bfdb4575b4",
21391           "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4",
21392           "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4",
21393           "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4",
21394           "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695",
21395           "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695"
21396         ).map(colors);
21397
21398         var RdYlBu = ramp(scheme$6);
21399
21400         var scheme$7 = new Array(3).concat(
21401           "fc8d59ffffbf91cf60",
21402           "d7191cfdae61a6d96a1a9641",
21403           "d7191cfdae61ffffbfa6d96a1a9641",
21404           "d73027fc8d59fee08bd9ef8b91cf601a9850",
21405           "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850",
21406           "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850",
21407           "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850",
21408           "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837",
21409           "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837"
21410         ).map(colors);
21411
21412         var RdYlGn = ramp(scheme$7);
21413
21414         var scheme$8 = new Array(3).concat(
21415           "fc8d59ffffbf99d594",
21416           "d7191cfdae61abdda42b83ba",
21417           "d7191cfdae61ffffbfabdda42b83ba",
21418           "d53e4ffc8d59fee08be6f59899d5943288bd",
21419           "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd",
21420           "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd",
21421           "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd",
21422           "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2",
21423           "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2"
21424         ).map(colors);
21425
21426         var Spectral = ramp(scheme$8);
21427
21428         var scheme$9 = new Array(3).concat(
21429           "e5f5f999d8c92ca25f",
21430           "edf8fbb2e2e266c2a4238b45",
21431           "edf8fbb2e2e266c2a42ca25f006d2c",
21432           "edf8fbccece699d8c966c2a42ca25f006d2c",
21433           "edf8fbccece699d8c966c2a441ae76238b45005824",
21434           "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824",
21435           "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b"
21436         ).map(colors);
21437
21438         var BuGn = ramp(scheme$9);
21439
21440         var scheme$a = new Array(3).concat(
21441           "e0ecf49ebcda8856a7",
21442           "edf8fbb3cde38c96c688419d",
21443           "edf8fbb3cde38c96c68856a7810f7c",
21444           "edf8fbbfd3e69ebcda8c96c68856a7810f7c",
21445           "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b",
21446           "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b",
21447           "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b"
21448         ).map(colors);
21449
21450         var BuPu = ramp(scheme$a);
21451
21452         var scheme$b = new Array(3).concat(
21453           "e0f3dba8ddb543a2ca",
21454           "f0f9e8bae4bc7bccc42b8cbe",
21455           "f0f9e8bae4bc7bccc443a2ca0868ac",
21456           "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac",
21457           "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e",
21458           "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e",
21459           "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081"
21460         ).map(colors);
21461
21462         var GnBu = ramp(scheme$b);
21463
21464         var scheme$c = new Array(3).concat(
21465           "fee8c8fdbb84e34a33",
21466           "fef0d9fdcc8afc8d59d7301f",
21467           "fef0d9fdcc8afc8d59e34a33b30000",
21468           "fef0d9fdd49efdbb84fc8d59e34a33b30000",
21469           "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000",
21470           "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000",
21471           "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000"
21472         ).map(colors);
21473
21474         var OrRd = ramp(scheme$c);
21475
21476         var scheme$d = new Array(3).concat(
21477           "ece2f0a6bddb1c9099",
21478           "f6eff7bdc9e167a9cf02818a",
21479           "f6eff7bdc9e167a9cf1c9099016c59",
21480           "f6eff7d0d1e6a6bddb67a9cf1c9099016c59",
21481           "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450",
21482           "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450",
21483           "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636"
21484         ).map(colors);
21485
21486         var PuBuGn = ramp(scheme$d);
21487
21488         var scheme$e = new Array(3).concat(
21489           "ece7f2a6bddb2b8cbe",
21490           "f1eef6bdc9e174a9cf0570b0",
21491           "f1eef6bdc9e174a9cf2b8cbe045a8d",
21492           "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d",
21493           "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b",
21494           "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b",
21495           "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858"
21496         ).map(colors);
21497
21498         var PuBu = ramp(scheme$e);
21499
21500         var scheme$f = new Array(3).concat(
21501           "e7e1efc994c7dd1c77",
21502           "f1eef6d7b5d8df65b0ce1256",
21503           "f1eef6d7b5d8df65b0dd1c77980043",
21504           "f1eef6d4b9dac994c7df65b0dd1c77980043",
21505           "f1eef6d4b9dac994c7df65b0e7298ace125691003f",
21506           "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f",
21507           "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f"
21508         ).map(colors);
21509
21510         var PuRd = ramp(scheme$f);
21511
21512         var scheme$g = new Array(3).concat(
21513           "fde0ddfa9fb5c51b8a",
21514           "feebe2fbb4b9f768a1ae017e",
21515           "feebe2fbb4b9f768a1c51b8a7a0177",
21516           "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177",
21517           "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177",
21518           "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177",
21519           "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a"
21520         ).map(colors);
21521
21522         var RdPu = ramp(scheme$g);
21523
21524         var scheme$h = new Array(3).concat(
21525           "edf8b17fcdbb2c7fb8",
21526           "ffffcca1dab441b6c4225ea8",
21527           "ffffcca1dab441b6c42c7fb8253494",
21528           "ffffccc7e9b47fcdbb41b6c42c7fb8253494",
21529           "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84",
21530           "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84",
21531           "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58"
21532         ).map(colors);
21533
21534         var YlGnBu = ramp(scheme$h);
21535
21536         var scheme$i = new Array(3).concat(
21537           "f7fcb9addd8e31a354",
21538           "ffffccc2e69978c679238443",
21539           "ffffccc2e69978c67931a354006837",
21540           "ffffccd9f0a3addd8e78c67931a354006837",
21541           "ffffccd9f0a3addd8e78c67941ab5d238443005a32",
21542           "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32",
21543           "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529"
21544         ).map(colors);
21545
21546         var YlGn = ramp(scheme$i);
21547
21548         var scheme$j = new Array(3).concat(
21549           "fff7bcfec44fd95f0e",
21550           "ffffd4fed98efe9929cc4c02",
21551           "ffffd4fed98efe9929d95f0e993404",
21552           "ffffd4fee391fec44ffe9929d95f0e993404",
21553           "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04",
21554           "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04",
21555           "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506"
21556         ).map(colors);
21557
21558         var YlOrBr = ramp(scheme$j);
21559
21560         var scheme$k = new Array(3).concat(
21561           "ffeda0feb24cf03b20",
21562           "ffffb2fecc5cfd8d3ce31a1c",
21563           "ffffb2fecc5cfd8d3cf03b20bd0026",
21564           "ffffb2fed976feb24cfd8d3cf03b20bd0026",
21565           "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026",
21566           "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026",
21567           "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026"
21568         ).map(colors);
21569
21570         var YlOrRd = ramp(scheme$k);
21571
21572         var scheme$l = new Array(3).concat(
21573           "deebf79ecae13182bd",
21574           "eff3ffbdd7e76baed62171b5",
21575           "eff3ffbdd7e76baed63182bd08519c",
21576           "eff3ffc6dbef9ecae16baed63182bd08519c",
21577           "eff3ffc6dbef9ecae16baed64292c62171b5084594",
21578           "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594",
21579           "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b"
21580         ).map(colors);
21581
21582         var Blues = ramp(scheme$l);
21583
21584         var scheme$m = new Array(3).concat(
21585           "e5f5e0a1d99b31a354",
21586           "edf8e9bae4b374c476238b45",
21587           "edf8e9bae4b374c47631a354006d2c",
21588           "edf8e9c7e9c0a1d99b74c47631a354006d2c",
21589           "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32",
21590           "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32",
21591           "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b"
21592         ).map(colors);
21593
21594         var Greens = ramp(scheme$m);
21595
21596         var scheme$n = new Array(3).concat(
21597           "f0f0f0bdbdbd636363",
21598           "f7f7f7cccccc969696525252",
21599           "f7f7f7cccccc969696636363252525",
21600           "f7f7f7d9d9d9bdbdbd969696636363252525",
21601           "f7f7f7d9d9d9bdbdbd969696737373525252252525",
21602           "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525",
21603           "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000"
21604         ).map(colors);
21605
21606         var Greys = ramp(scheme$n);
21607
21608         var scheme$o = new Array(3).concat(
21609           "efedf5bcbddc756bb1",
21610           "f2f0f7cbc9e29e9ac86a51a3",
21611           "f2f0f7cbc9e29e9ac8756bb154278f",
21612           "f2f0f7dadaebbcbddc9e9ac8756bb154278f",
21613           "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486",
21614           "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486",
21615           "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d"
21616         ).map(colors);
21617
21618         var Purples = ramp(scheme$o);
21619
21620         var scheme$p = new Array(3).concat(
21621           "fee0d2fc9272de2d26",
21622           "fee5d9fcae91fb6a4acb181d",
21623           "fee5d9fcae91fb6a4ade2d26a50f15",
21624           "fee5d9fcbba1fc9272fb6a4ade2d26a50f15",
21625           "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d",
21626           "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d",
21627           "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d"
21628         ).map(colors);
21629
21630         var Reds = ramp(scheme$p);
21631
21632         var scheme$q = new Array(3).concat(
21633           "fee6cefdae6be6550d",
21634           "feeddefdbe85fd8d3cd94701",
21635           "feeddefdbe85fd8d3ce6550da63603",
21636           "feeddefdd0a2fdae6bfd8d3ce6550da63603",
21637           "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04",
21638           "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04",
21639           "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704"
21640         ).map(colors);
21641
21642         var Oranges = ramp(scheme$q);
21643
21644         function cividis(t) {
21645           t = Math.max(0, Math.min(1, t));
21646           return "rgb("
21647               + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + ", "
21648               + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + ", "
21649               + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))
21650               + ")";
21651         }
21652
21653         var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
21654
21655         var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
21656
21657         var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
21658
21659         var c = cubehelix();
21660
21661         function rainbow(t) {
21662           if (t < 0 || t > 1) { t -= Math.floor(t); }
21663           var ts = Math.abs(t - 0.5);
21664           c.h = 360 * t - 100;
21665           c.s = 1.5 - 1.5 * ts;
21666           c.l = 0.8 - 0.9 * ts;
21667           return c + "";
21668         }
21669
21670         var c$1 = rgb(),
21671             pi_1_3 = Math.PI / 3,
21672             pi_2_3 = Math.PI * 2 / 3;
21673
21674         function sinebow(t) {
21675           var x;
21676           t = (0.5 - t) * Math.PI;
21677           c$1.r = 255 * (x = Math.sin(t)) * x;
21678           c$1.g = 255 * (x = Math.sin(t + pi_1_3)) * x;
21679           c$1.b = 255 * (x = Math.sin(t + pi_2_3)) * x;
21680           return c$1 + "";
21681         }
21682
21683         function turbo(t) {
21684           t = Math.max(0, Math.min(1, t));
21685           return "rgb("
21686               + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + ", "
21687               + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + ", "
21688               + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))
21689               + ")";
21690         }
21691
21692         function ramp$1(range) {
21693           var n = range.length;
21694           return function(t) {
21695             return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
21696           };
21697         }
21698
21699         var viridis = ramp$1(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
21700
21701         var magma = ramp$1(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
21702
21703         var inferno = ramp$1(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
21704
21705         var plasma = ramp$1(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
21706
21707         function constant$b(x) {
21708           return function constant() {
21709             return x;
21710           };
21711         }
21712
21713         var abs$3 = Math.abs;
21714         var atan2$1 = Math.atan2;
21715         var cos$2 = Math.cos;
21716         var max$4 = Math.max;
21717         var min$1 = Math.min;
21718         var sin$2 = Math.sin;
21719         var sqrt$2 = Math.sqrt;
21720
21721         var epsilon$3 = 1e-12;
21722         var pi$4 = Math.PI;
21723         var halfPi$3 = pi$4 / 2;
21724         var tau$4 = 2 * pi$4;
21725
21726         function acos$1(x) {
21727           return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
21728         }
21729
21730         function asin$1(x) {
21731           return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);
21732         }
21733
21734         function arcInnerRadius(d) {
21735           return d.innerRadius;
21736         }
21737
21738         function arcOuterRadius(d) {
21739           return d.outerRadius;
21740         }
21741
21742         function arcStartAngle(d) {
21743           return d.startAngle;
21744         }
21745
21746         function arcEndAngle(d) {
21747           return d.endAngle;
21748         }
21749
21750         function arcPadAngle(d) {
21751           return d && d.padAngle; // Note: optional!
21752         }
21753
21754         function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
21755           var x10 = x1 - x0, y10 = y1 - y0,
21756               x32 = x3 - x2, y32 = y3 - y2,
21757               t = y32 * x10 - x32 * y10;
21758           if (t * t < epsilon$3) { return; }
21759           t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;
21760           return [x0 + t * x10, y0 + t * y10];
21761         }
21762
21763         // Compute perpendicular offset line of length rc.
21764         // http://mathworld.wolfram.com/Circle-LineIntersection.html
21765         function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
21766           var x01 = x0 - x1,
21767               y01 = y0 - y1,
21768               lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01),
21769               ox = lo * y01,
21770               oy = -lo * x01,
21771               x11 = x0 + ox,
21772               y11 = y0 + oy,
21773               x10 = x1 + ox,
21774               y10 = y1 + oy,
21775               x00 = (x11 + x10) / 2,
21776               y00 = (y11 + y10) / 2,
21777               dx = x10 - x11,
21778               dy = y10 - y11,
21779               d2 = dx * dx + dy * dy,
21780               r = r1 - rc,
21781               D = x11 * y10 - x10 * y11,
21782               d = (dy < 0 ? -1 : 1) * sqrt$2(max$4(0, r * r * d2 - D * D)),
21783               cx0 = (D * dy - dx * d) / d2,
21784               cy0 = (-D * dx - dy * d) / d2,
21785               cx1 = (D * dy + dx * d) / d2,
21786               cy1 = (-D * dx + dy * d) / d2,
21787               dx0 = cx0 - x00,
21788               dy0 = cy0 - y00,
21789               dx1 = cx1 - x00,
21790               dy1 = cy1 - y00;
21791
21792           // Pick the closer of the two intersection points.
21793           // TODO Is there a faster way to determine which intersection to use?
21794           if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) { cx0 = cx1, cy0 = cy1; }
21795
21796           return {
21797             cx: cx0,
21798             cy: cy0,
21799             x01: -ox,
21800             y01: -oy,
21801             x11: cx0 * (r1 / r - 1),
21802             y11: cy0 * (r1 / r - 1)
21803           };
21804         }
21805
21806         function arc() {
21807           var innerRadius = arcInnerRadius,
21808               outerRadius = arcOuterRadius,
21809               cornerRadius = constant$b(0),
21810               padRadius = null,
21811               startAngle = arcStartAngle,
21812               endAngle = arcEndAngle,
21813               padAngle = arcPadAngle,
21814               context = null;
21815
21816           function arc() {
21817             var buffer,
21818                 r,
21819                 r0 = +innerRadius.apply(this, arguments),
21820                 r1 = +outerRadius.apply(this, arguments),
21821                 a0 = startAngle.apply(this, arguments) - halfPi$3,
21822                 a1 = endAngle.apply(this, arguments) - halfPi$3,
21823                 da = abs$3(a1 - a0),
21824                 cw = a1 > a0;
21825
21826             if (!context) { context = buffer = path(); }
21827
21828             // Ensure that the outer radius is always larger than the inner radius.
21829             if (r1 < r0) { r = r1, r1 = r0, r0 = r; }
21830
21831             // Is it a point?
21832             if (!(r1 > epsilon$3)) { context.moveTo(0, 0); }
21833
21834             // Or is it a circle or annulus?
21835             else if (da > tau$4 - epsilon$3) {
21836               context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));
21837               context.arc(0, 0, r1, a0, a1, !cw);
21838               if (r0 > epsilon$3) {
21839                 context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));
21840                 context.arc(0, 0, r0, a1, a0, cw);
21841               }
21842             }
21843
21844             // Or is it a circular or annular sector?
21845             else {
21846               var a01 = a0,
21847                   a11 = a1,
21848                   a00 = a0,
21849                   a10 = a1,
21850                   da0 = da,
21851                   da1 = da,
21852                   ap = padAngle.apply(this, arguments) / 2,
21853                   rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)),
21854                   rc = min$1(abs$3(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
21855                   rc0 = rc,
21856                   rc1 = rc,
21857                   t0,
21858                   t1;
21859
21860               // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
21861               if (rp > epsilon$3) {
21862                 var p0 = asin$1(rp / r0 * sin$2(ap)),
21863                     p1 = asin$1(rp / r1 * sin$2(ap));
21864                 if ((da0 -= p0 * 2) > epsilon$3) { p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; }
21865                 else { da0 = 0, a00 = a10 = (a0 + a1) / 2; }
21866                 if ((da1 -= p1 * 2) > epsilon$3) { p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; }
21867                 else { da1 = 0, a01 = a11 = (a0 + a1) / 2; }
21868               }
21869
21870               var x01 = r1 * cos$2(a01),
21871                   y01 = r1 * sin$2(a01),
21872                   x10 = r0 * cos$2(a10),
21873                   y10 = r0 * sin$2(a10);
21874
21875               // Apply rounded corners?
21876               if (rc > epsilon$3) {
21877                 var x11 = r1 * cos$2(a11),
21878                     y11 = r1 * sin$2(a11),
21879                     x00 = r0 * cos$2(a00),
21880                     y00 = r0 * sin$2(a00),
21881                     oc;
21882
21883                 // Restrict the corner radius according to the sector angle.
21884                 if (da < pi$4 && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {
21885                   var ax = x01 - oc[0],
21886                       ay = y01 - oc[1],
21887                       bx = x11 - oc[0],
21888                       by = y11 - oc[1],
21889                       kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2),
21890                       lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]);
21891                   rc0 = min$1(rc, (r0 - lc) / (kc - 1));
21892                   rc1 = min$1(rc, (r1 - lc) / (kc + 1));
21893                 }
21894               }
21895
21896               // Is the sector collapsed to a line?
21897               if (!(da1 > epsilon$3)) { context.moveTo(x01, y01); }
21898
21899               // Does the sector’s outer ring have rounded corners?
21900               else if (rc1 > epsilon$3) {
21901                 t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
21902                 t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
21903
21904                 context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
21905
21906                 // Have the corners merged?
21907                 if (rc1 < rc) { context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); }
21908
21909                 // Otherwise, draw the two corners and the ring.
21910                 else {
21911                   context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
21912                   context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
21913                   context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
21914                 }
21915               }
21916
21917               // Or is the outer ring just a circular arc?
21918               else { context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); }
21919
21920               // Is there no inner ring, and it’s a circular sector?
21921               // Or perhaps it’s an annular sector collapsed due to padding?
21922               if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) { context.lineTo(x10, y10); }
21923
21924               // Does the sector’s inner ring (or point) have rounded corners?
21925               else if (rc0 > epsilon$3) {
21926                 t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
21927                 t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
21928
21929                 context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
21930
21931                 // Have the corners merged?
21932                 if (rc0 < rc) { context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); }
21933
21934                 // Otherwise, draw the two corners and the ring.
21935                 else {
21936                   context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
21937                   context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw);
21938                   context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
21939                 }
21940               }
21941
21942               // Or is the inner ring just a circular arc?
21943               else { context.arc(0, 0, r0, a10, a00, cw); }
21944             }
21945
21946             context.closePath();
21947
21948             if (buffer) { return context = null, buffer + "" || null; }
21949           }
21950
21951           arc.centroid = function() {
21952             var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
21953                 a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2;
21954             return [cos$2(a) * r, sin$2(a) * r];
21955           };
21956
21957           arc.innerRadius = function(_) {
21958             return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : innerRadius;
21959           };
21960
21961           arc.outerRadius = function(_) {
21962             return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : outerRadius;
21963           };
21964
21965           arc.cornerRadius = function(_) {
21966             return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : cornerRadius;
21967           };
21968
21969           arc.padRadius = function(_) {
21970             return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), arc) : padRadius;
21971           };
21972
21973           arc.startAngle = function(_) {
21974             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : startAngle;
21975           };
21976
21977           arc.endAngle = function(_) {
21978             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : endAngle;
21979           };
21980
21981           arc.padAngle = function(_) {
21982             return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : padAngle;
21983           };
21984
21985           arc.context = function(_) {
21986             return arguments.length ? ((context = _ == null ? null : _), arc) : context;
21987           };
21988
21989           return arc;
21990         }
21991
21992         function Linear(context) {
21993           this._context = context;
21994         }
21995
21996         Linear.prototype = {
21997           areaStart: function() {
21998             this._line = 0;
21999           },
22000           areaEnd: function() {
22001             this._line = NaN;
22002           },
22003           lineStart: function() {
22004             this._point = 0;
22005           },
22006           lineEnd: function() {
22007             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
22008             this._line = 1 - this._line;
22009           },
22010           point: function(x, y) {
22011             x = +x, y = +y;
22012             switch (this._point) {
22013               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
22014               case 1: this._point = 2; // proceed
22015               default: this._context.lineTo(x, y); break;
22016             }
22017           }
22018         };
22019
22020         function curveLinear(context) {
22021           return new Linear(context);
22022         }
22023
22024         function x$3(p) {
22025           return p[0];
22026         }
22027
22028         function y$3(p) {
22029           return p[1];
22030         }
22031
22032         function line() {
22033           var x = x$3,
22034               y = y$3,
22035               defined = constant$b(true),
22036               context = null,
22037               curve = curveLinear,
22038               output = null;
22039
22040           function line(data) {
22041             var i,
22042                 n = data.length,
22043                 d,
22044                 defined0 = false,
22045                 buffer;
22046
22047             if (context == null) { output = curve(buffer = path()); }
22048
22049             for (i = 0; i <= n; ++i) {
22050               if (!(i < n && defined(d = data[i], i, data)) === defined0) {
22051                 if (defined0 = !defined0) { output.lineStart(); }
22052                 else { output.lineEnd(); }
22053               }
22054               if (defined0) { output.point(+x(d, i, data), +y(d, i, data)); }
22055             }
22056
22057             if (buffer) { return output = null, buffer + "" || null; }
22058           }
22059
22060           line.x = function(_) {
22061             return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), line) : x;
22062           };
22063
22064           line.y = function(_) {
22065             return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), line) : y;
22066           };
22067
22068           line.defined = function(_) {
22069             return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), line) : defined;
22070           };
22071
22072           line.curve = function(_) {
22073             return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
22074           };
22075
22076           line.context = function(_) {
22077             return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
22078           };
22079
22080           return line;
22081         }
22082
22083         function area$1() {
22084           var x0 = x$3,
22085               x1 = null,
22086               y0 = constant$b(0),
22087               y1 = y$3,
22088               defined = constant$b(true),
22089               context = null,
22090               curve = curveLinear,
22091               output = null;
22092
22093           function area(data) {
22094             var i,
22095                 j,
22096                 k,
22097                 n = data.length,
22098                 d,
22099                 defined0 = false,
22100                 buffer,
22101                 x0z = new Array(n),
22102                 y0z = new Array(n);
22103
22104             if (context == null) { output = curve(buffer = path()); }
22105
22106             for (i = 0; i <= n; ++i) {
22107               if (!(i < n && defined(d = data[i], i, data)) === defined0) {
22108                 if (defined0 = !defined0) {
22109                   j = i;
22110                   output.areaStart();
22111                   output.lineStart();
22112                 } else {
22113                   output.lineEnd();
22114                   output.lineStart();
22115                   for (k = i - 1; k >= j; --k) {
22116                     output.point(x0z[k], y0z[k]);
22117                   }
22118                   output.lineEnd();
22119                   output.areaEnd();
22120                 }
22121               }
22122               if (defined0) {
22123                 x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
22124                 output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
22125               }
22126             }
22127
22128             if (buffer) { return output = null, buffer + "" || null; }
22129           }
22130
22131           function arealine() {
22132             return line().defined(defined).curve(curve).context(context);
22133           }
22134
22135           area.x = function(_) {
22136             return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), x1 = null, area) : x0;
22137           };
22138
22139           area.x0 = function(_) {
22140             return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), area) : x0;
22141           };
22142
22143           area.x1 = function(_) {
22144             return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : x1;
22145           };
22146
22147           area.y = function(_) {
22148             return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), y1 = null, area) : y0;
22149           };
22150
22151           area.y0 = function(_) {
22152             return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), area) : y0;
22153           };
22154
22155           area.y1 = function(_) {
22156             return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : y1;
22157           };
22158
22159           area.lineX0 =
22160           area.lineY0 = function() {
22161             return arealine().x(x0).y(y0);
22162           };
22163
22164           area.lineY1 = function() {
22165             return arealine().x(x0).y(y1);
22166           };
22167
22168           area.lineX1 = function() {
22169             return arealine().x(x1).y(y0);
22170           };
22171
22172           area.defined = function(_) {
22173             return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), area) : defined;
22174           };
22175
22176           area.curve = function(_) {
22177             return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
22178           };
22179
22180           area.context = function(_) {
22181             return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
22182           };
22183
22184           return area;
22185         }
22186
22187         function descending(a, b) {
22188           return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
22189         }
22190
22191         function identity$7(d) {
22192           return d;
22193         }
22194
22195         function pie() {
22196           var value = identity$7,
22197               sortValues = descending,
22198               sort = null,
22199               startAngle = constant$b(0),
22200               endAngle = constant$b(tau$4),
22201               padAngle = constant$b(0);
22202
22203           function pie(data) {
22204             var i,
22205                 n = data.length,
22206                 j,
22207                 k,
22208                 sum = 0,
22209                 index = new Array(n),
22210                 arcs = new Array(n),
22211                 a0 = +startAngle.apply(this, arguments),
22212                 da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)),
22213                 a1,
22214                 p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
22215                 pa = p * (da < 0 ? -1 : 1),
22216                 v;
22217
22218             for (i = 0; i < n; ++i) {
22219               if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
22220                 sum += v;
22221               }
22222             }
22223
22224             // Optionally sort the arcs by previously-computed values or by data.
22225             if (sortValues != null) { index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); }
22226             else if (sort != null) { index.sort(function(i, j) { return sort(data[i], data[j]); }); }
22227
22228             // Compute the arcs! They are stored in the original data's order.
22229             for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
22230               j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
22231                 data: data[j],
22232                 index: i,
22233                 value: v,
22234                 startAngle: a0,
22235                 endAngle: a1,
22236                 padAngle: p
22237               };
22238             }
22239
22240             return arcs;
22241           }
22242
22243           pie.value = function(_) {
22244             return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), pie) : value;
22245           };
22246
22247           pie.sortValues = function(_) {
22248             return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
22249           };
22250
22251           pie.sort = function(_) {
22252             return arguments.length ? (sort = _, sortValues = null, pie) : sort;
22253           };
22254
22255           pie.startAngle = function(_) {
22256             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : startAngle;
22257           };
22258
22259           pie.endAngle = function(_) {
22260             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : endAngle;
22261           };
22262
22263           pie.padAngle = function(_) {
22264             return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : padAngle;
22265           };
22266
22267           return pie;
22268         }
22269
22270         var curveRadialLinear = curveRadial(curveLinear);
22271
22272         function Radial(curve) {
22273           this._curve = curve;
22274         }
22275
22276         Radial.prototype = {
22277           areaStart: function() {
22278             this._curve.areaStart();
22279           },
22280           areaEnd: function() {
22281             this._curve.areaEnd();
22282           },
22283           lineStart: function() {
22284             this._curve.lineStart();
22285           },
22286           lineEnd: function() {
22287             this._curve.lineEnd();
22288           },
22289           point: function(a, r) {
22290             this._curve.point(r * Math.sin(a), r * -Math.cos(a));
22291           }
22292         };
22293
22294         function curveRadial(curve) {
22295
22296           function radial(context) {
22297             return new Radial(curve(context));
22298           }
22299
22300           radial._curve = curve;
22301
22302           return radial;
22303         }
22304
22305         function lineRadial(l) {
22306           var c = l.curve;
22307
22308           l.angle = l.x, delete l.x;
22309           l.radius = l.y, delete l.y;
22310
22311           l.curve = function(_) {
22312             return arguments.length ? c(curveRadial(_)) : c()._curve;
22313           };
22314
22315           return l;
22316         }
22317
22318         function lineRadial$1() {
22319           return lineRadial(line().curve(curveRadialLinear));
22320         }
22321
22322         function areaRadial() {
22323           var a = area$1().curve(curveRadialLinear),
22324               c = a.curve,
22325               x0 = a.lineX0,
22326               x1 = a.lineX1,
22327               y0 = a.lineY0,
22328               y1 = a.lineY1;
22329
22330           a.angle = a.x, delete a.x;
22331           a.startAngle = a.x0, delete a.x0;
22332           a.endAngle = a.x1, delete a.x1;
22333           a.radius = a.y, delete a.y;
22334           a.innerRadius = a.y0, delete a.y0;
22335           a.outerRadius = a.y1, delete a.y1;
22336           a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;
22337           a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;
22338           a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;
22339           a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;
22340
22341           a.curve = function(_) {
22342             return arguments.length ? c(curveRadial(_)) : c()._curve;
22343           };
22344
22345           return a;
22346         }
22347
22348         function pointRadial(x, y) {
22349           return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
22350         }
22351
22352         var slice$a = Array.prototype.slice;
22353
22354         function linkSource(d) {
22355           return d.source;
22356         }
22357
22358         function linkTarget(d) {
22359           return d.target;
22360         }
22361
22362         function link$2(curve) {
22363           var source = linkSource,
22364               target = linkTarget,
22365               x = x$3,
22366               y = y$3,
22367               context = null;
22368
22369           function link() {
22370             var buffer, argv = slice$a.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);
22371             if (!context) { context = buffer = path(); }
22372             curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));
22373             if (buffer) { return context = null, buffer + "" || null; }
22374           }
22375
22376           link.source = function(_) {
22377             return arguments.length ? (source = _, link) : source;
22378           };
22379
22380           link.target = function(_) {
22381             return arguments.length ? (target = _, link) : target;
22382           };
22383
22384           link.x = function(_) {
22385             return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), link) : x;
22386           };
22387
22388           link.y = function(_) {
22389             return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), link) : y;
22390           };
22391
22392           link.context = function(_) {
22393             return arguments.length ? ((context = _ == null ? null : _), link) : context;
22394           };
22395
22396           return link;
22397         }
22398
22399         function curveHorizontal(context, x0, y0, x1, y1) {
22400           context.moveTo(x0, y0);
22401           context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);
22402         }
22403
22404         function curveVertical(context, x0, y0, x1, y1) {
22405           context.moveTo(x0, y0);
22406           context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);
22407         }
22408
22409         function curveRadial$1(context, x0, y0, x1, y1) {
22410           var p0 = pointRadial(x0, y0),
22411               p1 = pointRadial(x0, y0 = (y0 + y1) / 2),
22412               p2 = pointRadial(x1, y0),
22413               p3 = pointRadial(x1, y1);
22414           context.moveTo(p0[0], p0[1]);
22415           context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);
22416         }
22417
22418         function linkHorizontal() {
22419           return link$2(curveHorizontal);
22420         }
22421
22422         function linkVertical() {
22423           return link$2(curveVertical);
22424         }
22425
22426         function linkRadial() {
22427           var l = link$2(curveRadial$1);
22428           l.angle = l.x, delete l.x;
22429           l.radius = l.y, delete l.y;
22430           return l;
22431         }
22432
22433         var circle$2 = {
22434           draw: function(context, size) {
22435             var r = Math.sqrt(size / pi$4);
22436             context.moveTo(r, 0);
22437             context.arc(0, 0, r, 0, tau$4);
22438           }
22439         };
22440
22441         var cross$2 = {
22442           draw: function(context, size) {
22443             var r = Math.sqrt(size / 5) / 2;
22444             context.moveTo(-3 * r, -r);
22445             context.lineTo(-r, -r);
22446             context.lineTo(-r, -3 * r);
22447             context.lineTo(r, -3 * r);
22448             context.lineTo(r, -r);
22449             context.lineTo(3 * r, -r);
22450             context.lineTo(3 * r, r);
22451             context.lineTo(r, r);
22452             context.lineTo(r, 3 * r);
22453             context.lineTo(-r, 3 * r);
22454             context.lineTo(-r, r);
22455             context.lineTo(-3 * r, r);
22456             context.closePath();
22457           }
22458         };
22459
22460         var tan30 = Math.sqrt(1 / 3),
22461             tan30_2 = tan30 * 2;
22462
22463         var diamond = {
22464           draw: function(context, size) {
22465             var y = Math.sqrt(size / tan30_2),
22466                 x = y * tan30;
22467             context.moveTo(0, -y);
22468             context.lineTo(x, 0);
22469             context.lineTo(0, y);
22470             context.lineTo(-x, 0);
22471             context.closePath();
22472           }
22473         };
22474
22475         var ka = 0.89081309152928522810,
22476             kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10),
22477             kx = Math.sin(tau$4 / 10) * kr,
22478             ky = -Math.cos(tau$4 / 10) * kr;
22479
22480         var star = {
22481           draw: function(context, size) {
22482             var r = Math.sqrt(size * ka),
22483                 x = kx * r,
22484                 y = ky * r;
22485             context.moveTo(0, -r);
22486             context.lineTo(x, y);
22487             for (var i = 1; i < 5; ++i) {
22488               var a = tau$4 * i / 5,
22489                   c = Math.cos(a),
22490                   s = Math.sin(a);
22491               context.lineTo(s * r, -c * r);
22492               context.lineTo(c * x - s * y, s * x + c * y);
22493             }
22494             context.closePath();
22495           }
22496         };
22497
22498         var square = {
22499           draw: function(context, size) {
22500             var w = Math.sqrt(size),
22501                 x = -w / 2;
22502             context.rect(x, x, w, w);
22503           }
22504         };
22505
22506         var sqrt3 = Math.sqrt(3);
22507
22508         var triangle = {
22509           draw: function(context, size) {
22510             var y = -Math.sqrt(size / (sqrt3 * 3));
22511             context.moveTo(0, y * 2);
22512             context.lineTo(-sqrt3 * y, -y);
22513             context.lineTo(sqrt3 * y, -y);
22514             context.closePath();
22515           }
22516         };
22517
22518         var c$2 = -0.5,
22519             s = Math.sqrt(3) / 2,
22520             k = 1 / Math.sqrt(12),
22521             a = (k / 2 + 1) * 3;
22522
22523         var wye = {
22524           draw: function(context, size) {
22525             var r = Math.sqrt(size / a),
22526                 x0 = r / 2,
22527                 y0 = r * k,
22528                 x1 = x0,
22529                 y1 = r * k + r,
22530                 x2 = -x1,
22531                 y2 = y1;
22532             context.moveTo(x0, y0);
22533             context.lineTo(x1, y1);
22534             context.lineTo(x2, y2);
22535             context.lineTo(c$2 * x0 - s * y0, s * x0 + c$2 * y0);
22536             context.lineTo(c$2 * x1 - s * y1, s * x1 + c$2 * y1);
22537             context.lineTo(c$2 * x2 - s * y2, s * x2 + c$2 * y2);
22538             context.lineTo(c$2 * x0 + s * y0, c$2 * y0 - s * x0);
22539             context.lineTo(c$2 * x1 + s * y1, c$2 * y1 - s * x1);
22540             context.lineTo(c$2 * x2 + s * y2, c$2 * y2 - s * x2);
22541             context.closePath();
22542           }
22543         };
22544
22545         var symbols = [
22546           circle$2,
22547           cross$2,
22548           diamond,
22549           square,
22550           star,
22551           triangle,
22552           wye
22553         ];
22554
22555         function symbol() {
22556           var type = constant$b(circle$2),
22557               size = constant$b(64),
22558               context = null;
22559
22560           function symbol() {
22561             var buffer;
22562             if (!context) { context = buffer = path(); }
22563             type.apply(this, arguments).draw(context, +size.apply(this, arguments));
22564             if (buffer) { return context = null, buffer + "" || null; }
22565           }
22566
22567           symbol.type = function(_) {
22568             return arguments.length ? (type = typeof _ === "function" ? _ : constant$b(_), symbol) : type;
22569           };
22570
22571           symbol.size = function(_) {
22572             return arguments.length ? (size = typeof _ === "function" ? _ : constant$b(+_), symbol) : size;
22573           };
22574
22575           symbol.context = function(_) {
22576             return arguments.length ? (context = _ == null ? null : _, symbol) : context;
22577           };
22578
22579           return symbol;
22580         }
22581
22582         function noop$5() {}
22583
22584         function point$2(that, x, y) {
22585           that._context.bezierCurveTo(
22586             (2 * that._x0 + that._x1) / 3,
22587             (2 * that._y0 + that._y1) / 3,
22588             (that._x0 + 2 * that._x1) / 3,
22589             (that._y0 + 2 * that._y1) / 3,
22590             (that._x0 + 4 * that._x1 + x) / 6,
22591             (that._y0 + 4 * that._y1 + y) / 6
22592           );
22593         }
22594
22595         function Basis(context) {
22596           this._context = context;
22597         }
22598
22599         Basis.prototype = {
22600           areaStart: function() {
22601             this._line = 0;
22602           },
22603           areaEnd: function() {
22604             this._line = NaN;
22605           },
22606           lineStart: function() {
22607             this._x0 = this._x1 =
22608             this._y0 = this._y1 = NaN;
22609             this._point = 0;
22610           },
22611           lineEnd: function() {
22612             switch (this._point) {
22613               case 3: point$2(this, this._x1, this._y1); // proceed
22614               case 2: this._context.lineTo(this._x1, this._y1); break;
22615             }
22616             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
22617             this._line = 1 - this._line;
22618           },
22619           point: function(x, y) {
22620             x = +x, y = +y;
22621             switch (this._point) {
22622               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
22623               case 1: this._point = 2; break;
22624               case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
22625               default: point$2(this, x, y); break;
22626             }
22627             this._x0 = this._x1, this._x1 = x;
22628             this._y0 = this._y1, this._y1 = y;
22629           }
22630         };
22631
22632         function basis$2(context) {
22633           return new Basis(context);
22634         }
22635
22636         function BasisClosed(context) {
22637           this._context = context;
22638         }
22639
22640         BasisClosed.prototype = {
22641           areaStart: noop$5,
22642           areaEnd: noop$5,
22643           lineStart: function() {
22644             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
22645             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
22646             this._point = 0;
22647           },
22648           lineEnd: function() {
22649             switch (this._point) {
22650               case 1: {
22651                 this._context.moveTo(this._x2, this._y2);
22652                 this._context.closePath();
22653                 break;
22654               }
22655               case 2: {
22656                 this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
22657                 this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
22658                 this._context.closePath();
22659                 break;
22660               }
22661               case 3: {
22662                 this.point(this._x2, this._y2);
22663                 this.point(this._x3, this._y3);
22664                 this.point(this._x4, this._y4);
22665                 break;
22666               }
22667             }
22668           },
22669           point: function(x, y) {
22670             x = +x, y = +y;
22671             switch (this._point) {
22672               case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
22673               case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
22674               case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
22675               default: point$2(this, x, y); break;
22676             }
22677             this._x0 = this._x1, this._x1 = x;
22678             this._y0 = this._y1, this._y1 = y;
22679           }
22680         };
22681
22682         function basisClosed$1(context) {
22683           return new BasisClosed(context);
22684         }
22685
22686         function BasisOpen(context) {
22687           this._context = context;
22688         }
22689
22690         BasisOpen.prototype = {
22691           areaStart: function() {
22692             this._line = 0;
22693           },
22694           areaEnd: function() {
22695             this._line = NaN;
22696           },
22697           lineStart: function() {
22698             this._x0 = this._x1 =
22699             this._y0 = this._y1 = NaN;
22700             this._point = 0;
22701           },
22702           lineEnd: function() {
22703             if (this._line || (this._line !== 0 && this._point === 3)) { this._context.closePath(); }
22704             this._line = 1 - this._line;
22705           },
22706           point: function(x, y) {
22707             x = +x, y = +y;
22708             switch (this._point) {
22709               case 0: this._point = 1; break;
22710               case 1: this._point = 2; break;
22711               case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
22712               case 3: this._point = 4; // proceed
22713               default: point$2(this, x, y); break;
22714             }
22715             this._x0 = this._x1, this._x1 = x;
22716             this._y0 = this._y1, this._y1 = y;
22717           }
22718         };
22719
22720         function basisOpen(context) {
22721           return new BasisOpen(context);
22722         }
22723
22724         function Bundle(context, beta) {
22725           this._basis = new Basis(context);
22726           this._beta = beta;
22727         }
22728
22729         Bundle.prototype = {
22730           lineStart: function() {
22731             this._x = [];
22732             this._y = [];
22733             this._basis.lineStart();
22734           },
22735           lineEnd: function() {
22736             var x = this._x,
22737                 y = this._y,
22738                 j = x.length - 1;
22739
22740             if (j > 0) {
22741               var x0 = x[0],
22742                   y0 = y[0],
22743                   dx = x[j] - x0,
22744                   dy = y[j] - y0,
22745                   i = -1,
22746                   t;
22747
22748               while (++i <= j) {
22749                 t = i / j;
22750                 this._basis.point(
22751                   this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
22752                   this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
22753                 );
22754               }
22755             }
22756
22757             this._x = this._y = null;
22758             this._basis.lineEnd();
22759           },
22760           point: function(x, y) {
22761             this._x.push(+x);
22762             this._y.push(+y);
22763           }
22764         };
22765
22766         var bundle = (function custom(beta) {
22767
22768           function bundle(context) {
22769             return beta === 1 ? new Basis(context) : new Bundle(context, beta);
22770           }
22771
22772           bundle.beta = function(beta) {
22773             return custom(+beta);
22774           };
22775
22776           return bundle;
22777         })(0.85);
22778
22779         function point$3(that, x, y) {
22780           that._context.bezierCurveTo(
22781             that._x1 + that._k * (that._x2 - that._x0),
22782             that._y1 + that._k * (that._y2 - that._y0),
22783             that._x2 + that._k * (that._x1 - x),
22784             that._y2 + that._k * (that._y1 - y),
22785             that._x2,
22786             that._y2
22787           );
22788         }
22789
22790         function Cardinal(context, tension) {
22791           this._context = context;
22792           this._k = (1 - tension) / 6;
22793         }
22794
22795         Cardinal.prototype = {
22796           areaStart: function() {
22797             this._line = 0;
22798           },
22799           areaEnd: function() {
22800             this._line = NaN;
22801           },
22802           lineStart: function() {
22803             this._x0 = this._x1 = this._x2 =
22804             this._y0 = this._y1 = this._y2 = NaN;
22805             this._point = 0;
22806           },
22807           lineEnd: function() {
22808             switch (this._point) {
22809               case 2: this._context.lineTo(this._x2, this._y2); break;
22810               case 3: point$3(this, this._x1, this._y1); break;
22811             }
22812             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
22813             this._line = 1 - this._line;
22814           },
22815           point: function(x, y) {
22816             x = +x, y = +y;
22817             switch (this._point) {
22818               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
22819               case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
22820               case 2: this._point = 3; // proceed
22821               default: point$3(this, x, y); break;
22822             }
22823             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
22824             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
22825           }
22826         };
22827
22828         var cardinal = (function custom(tension) {
22829
22830           function cardinal(context) {
22831             return new Cardinal(context, tension);
22832           }
22833
22834           cardinal.tension = function(tension) {
22835             return custom(+tension);
22836           };
22837
22838           return cardinal;
22839         })(0);
22840
22841         function CardinalClosed(context, tension) {
22842           this._context = context;
22843           this._k = (1 - tension) / 6;
22844         }
22845
22846         CardinalClosed.prototype = {
22847           areaStart: noop$5,
22848           areaEnd: noop$5,
22849           lineStart: function() {
22850             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
22851             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
22852             this._point = 0;
22853           },
22854           lineEnd: function() {
22855             switch (this._point) {
22856               case 1: {
22857                 this._context.moveTo(this._x3, this._y3);
22858                 this._context.closePath();
22859                 break;
22860               }
22861               case 2: {
22862                 this._context.lineTo(this._x3, this._y3);
22863                 this._context.closePath();
22864                 break;
22865               }
22866               case 3: {
22867                 this.point(this._x3, this._y3);
22868                 this.point(this._x4, this._y4);
22869                 this.point(this._x5, this._y5);
22870                 break;
22871               }
22872             }
22873           },
22874           point: function(x, y) {
22875             x = +x, y = +y;
22876             switch (this._point) {
22877               case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
22878               case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
22879               case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
22880               default: point$3(this, x, y); break;
22881             }
22882             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
22883             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
22884           }
22885         };
22886
22887         var cardinalClosed = (function custom(tension) {
22888
22889           function cardinal(context) {
22890             return new CardinalClosed(context, tension);
22891           }
22892
22893           cardinal.tension = function(tension) {
22894             return custom(+tension);
22895           };
22896
22897           return cardinal;
22898         })(0);
22899
22900         function CardinalOpen(context, tension) {
22901           this._context = context;
22902           this._k = (1 - tension) / 6;
22903         }
22904
22905         CardinalOpen.prototype = {
22906           areaStart: function() {
22907             this._line = 0;
22908           },
22909           areaEnd: function() {
22910             this._line = NaN;
22911           },
22912           lineStart: function() {
22913             this._x0 = this._x1 = this._x2 =
22914             this._y0 = this._y1 = this._y2 = NaN;
22915             this._point = 0;
22916           },
22917           lineEnd: function() {
22918             if (this._line || (this._line !== 0 && this._point === 3)) { this._context.closePath(); }
22919             this._line = 1 - this._line;
22920           },
22921           point: function(x, y) {
22922             x = +x, y = +y;
22923             switch (this._point) {
22924               case 0: this._point = 1; break;
22925               case 1: this._point = 2; break;
22926               case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
22927               case 3: this._point = 4; // proceed
22928               default: point$3(this, x, y); break;
22929             }
22930             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
22931             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
22932           }
22933         };
22934
22935         var cardinalOpen = (function custom(tension) {
22936
22937           function cardinal(context) {
22938             return new CardinalOpen(context, tension);
22939           }
22940
22941           cardinal.tension = function(tension) {
22942             return custom(+tension);
22943           };
22944
22945           return cardinal;
22946         })(0);
22947
22948         function point$4(that, x, y) {
22949           var x1 = that._x1,
22950               y1 = that._y1,
22951               x2 = that._x2,
22952               y2 = that._y2;
22953
22954           if (that._l01_a > epsilon$3) {
22955             var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
22956                 n = 3 * that._l01_a * (that._l01_a + that._l12_a);
22957             x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
22958             y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
22959           }
22960
22961           if (that._l23_a > epsilon$3) {
22962             var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
22963                 m = 3 * that._l23_a * (that._l23_a + that._l12_a);
22964             x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
22965             y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
22966           }
22967
22968           that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
22969         }
22970
22971         function CatmullRom(context, alpha) {
22972           this._context = context;
22973           this._alpha = alpha;
22974         }
22975
22976         CatmullRom.prototype = {
22977           areaStart: function() {
22978             this._line = 0;
22979           },
22980           areaEnd: function() {
22981             this._line = NaN;
22982           },
22983           lineStart: function() {
22984             this._x0 = this._x1 = this._x2 =
22985             this._y0 = this._y1 = this._y2 = NaN;
22986             this._l01_a = this._l12_a = this._l23_a =
22987             this._l01_2a = this._l12_2a = this._l23_2a =
22988             this._point = 0;
22989           },
22990           lineEnd: function() {
22991             switch (this._point) {
22992               case 2: this._context.lineTo(this._x2, this._y2); break;
22993               case 3: this.point(this._x2, this._y2); break;
22994             }
22995             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
22996             this._line = 1 - this._line;
22997           },
22998           point: function(x, y) {
22999             x = +x, y = +y;
23000
23001             if (this._point) {
23002               var x23 = this._x2 - x,
23003                   y23 = this._y2 - y;
23004               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
23005             }
23006
23007             switch (this._point) {
23008               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
23009               case 1: this._point = 2; break;
23010               case 2: this._point = 3; // proceed
23011               default: point$4(this, x, y); break;
23012             }
23013
23014             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
23015             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
23016             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
23017             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
23018           }
23019         };
23020
23021         var catmullRom = (function custom(alpha) {
23022
23023           function catmullRom(context) {
23024             return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
23025           }
23026
23027           catmullRom.alpha = function(alpha) {
23028             return custom(+alpha);
23029           };
23030
23031           return catmullRom;
23032         })(0.5);
23033
23034         function CatmullRomClosed(context, alpha) {
23035           this._context = context;
23036           this._alpha = alpha;
23037         }
23038
23039         CatmullRomClosed.prototype = {
23040           areaStart: noop$5,
23041           areaEnd: noop$5,
23042           lineStart: function() {
23043             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
23044             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
23045             this._l01_a = this._l12_a = this._l23_a =
23046             this._l01_2a = this._l12_2a = this._l23_2a =
23047             this._point = 0;
23048           },
23049           lineEnd: function() {
23050             switch (this._point) {
23051               case 1: {
23052                 this._context.moveTo(this._x3, this._y3);
23053                 this._context.closePath();
23054                 break;
23055               }
23056               case 2: {
23057                 this._context.lineTo(this._x3, this._y3);
23058                 this._context.closePath();
23059                 break;
23060               }
23061               case 3: {
23062                 this.point(this._x3, this._y3);
23063                 this.point(this._x4, this._y4);
23064                 this.point(this._x5, this._y5);
23065                 break;
23066               }
23067             }
23068           },
23069           point: function(x, y) {
23070             x = +x, y = +y;
23071
23072             if (this._point) {
23073               var x23 = this._x2 - x,
23074                   y23 = this._y2 - y;
23075               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
23076             }
23077
23078             switch (this._point) {
23079               case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
23080               case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
23081               case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
23082               default: point$4(this, x, y); break;
23083             }
23084
23085             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
23086             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
23087             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
23088             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
23089           }
23090         };
23091
23092         var catmullRomClosed = (function custom(alpha) {
23093
23094           function catmullRom(context) {
23095             return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
23096           }
23097
23098           catmullRom.alpha = function(alpha) {
23099             return custom(+alpha);
23100           };
23101
23102           return catmullRom;
23103         })(0.5);
23104
23105         function CatmullRomOpen(context, alpha) {
23106           this._context = context;
23107           this._alpha = alpha;
23108         }
23109
23110         CatmullRomOpen.prototype = {
23111           areaStart: function() {
23112             this._line = 0;
23113           },
23114           areaEnd: function() {
23115             this._line = NaN;
23116           },
23117           lineStart: function() {
23118             this._x0 = this._x1 = this._x2 =
23119             this._y0 = this._y1 = this._y2 = NaN;
23120             this._l01_a = this._l12_a = this._l23_a =
23121             this._l01_2a = this._l12_2a = this._l23_2a =
23122             this._point = 0;
23123           },
23124           lineEnd: function() {
23125             if (this._line || (this._line !== 0 && this._point === 3)) { this._context.closePath(); }
23126             this._line = 1 - this._line;
23127           },
23128           point: function(x, y) {
23129             x = +x, y = +y;
23130
23131             if (this._point) {
23132               var x23 = this._x2 - x,
23133                   y23 = this._y2 - y;
23134               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
23135             }
23136
23137             switch (this._point) {
23138               case 0: this._point = 1; break;
23139               case 1: this._point = 2; break;
23140               case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
23141               case 3: this._point = 4; // proceed
23142               default: point$4(this, x, y); break;
23143             }
23144
23145             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
23146             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
23147             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
23148             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
23149           }
23150         };
23151
23152         var catmullRomOpen = (function custom(alpha) {
23153
23154           function catmullRom(context) {
23155             return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
23156           }
23157
23158           catmullRom.alpha = function(alpha) {
23159             return custom(+alpha);
23160           };
23161
23162           return catmullRom;
23163         })(0.5);
23164
23165         function LinearClosed(context) {
23166           this._context = context;
23167         }
23168
23169         LinearClosed.prototype = {
23170           areaStart: noop$5,
23171           areaEnd: noop$5,
23172           lineStart: function() {
23173             this._point = 0;
23174           },
23175           lineEnd: function() {
23176             if (this._point) { this._context.closePath(); }
23177           },
23178           point: function(x, y) {
23179             x = +x, y = +y;
23180             if (this._point) { this._context.lineTo(x, y); }
23181             else { this._point = 1, this._context.moveTo(x, y); }
23182           }
23183         };
23184
23185         function linearClosed(context) {
23186           return new LinearClosed(context);
23187         }
23188
23189         function sign$3(x) {
23190           return x < 0 ? -1 : 1;
23191         }
23192
23193         // Calculate the slopes of the tangents (Hermite-type interpolation) based on
23194         // the following paper: Steffen, M. 1990. A Simple Method for Monotonic
23195         // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
23196         // NOV(II), P. 443, 1990.
23197         function slope3(that, x2, y2) {
23198           var h0 = that._x1 - that._x0,
23199               h1 = x2 - that._x1,
23200               s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
23201               s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
23202               p = (s0 * h1 + s1 * h0) / (h0 + h1);
23203           return (sign$3(s0) + sign$3(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
23204         }
23205
23206         // Calculate a one-sided slope.
23207         function slope2(that, t) {
23208           var h = that._x1 - that._x0;
23209           return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
23210         }
23211
23212         // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
23213         // "you can express cubic Hermite interpolation in terms of cubic Bézier curves
23214         // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
23215         function point$5(that, t0, t1) {
23216           var x0 = that._x0,
23217               y0 = that._y0,
23218               x1 = that._x1,
23219               y1 = that._y1,
23220               dx = (x1 - x0) / 3;
23221           that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
23222         }
23223
23224         function MonotoneX(context) {
23225           this._context = context;
23226         }
23227
23228         MonotoneX.prototype = {
23229           areaStart: function() {
23230             this._line = 0;
23231           },
23232           areaEnd: function() {
23233             this._line = NaN;
23234           },
23235           lineStart: function() {
23236             this._x0 = this._x1 =
23237             this._y0 = this._y1 =
23238             this._t0 = NaN;
23239             this._point = 0;
23240           },
23241           lineEnd: function() {
23242             switch (this._point) {
23243               case 2: this._context.lineTo(this._x1, this._y1); break;
23244               case 3: point$5(this, this._t0, slope2(this, this._t0)); break;
23245             }
23246             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
23247             this._line = 1 - this._line;
23248           },
23249           point: function(x, y) {
23250             var t1 = NaN;
23251
23252             x = +x, y = +y;
23253             if (x === this._x1 && y === this._y1) { return; } // Ignore coincident points.
23254             switch (this._point) {
23255               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
23256               case 1: this._point = 2; break;
23257               case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
23258               default: point$5(this, this._t0, t1 = slope3(this, x, y)); break;
23259             }
23260
23261             this._x0 = this._x1, this._x1 = x;
23262             this._y0 = this._y1, this._y1 = y;
23263             this._t0 = t1;
23264           }
23265         };
23266
23267         function MonotoneY(context) {
23268           this._context = new ReflectContext(context);
23269         }
23270
23271         (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
23272           MonotoneX.prototype.point.call(this, y, x);
23273         };
23274
23275         function ReflectContext(context) {
23276           this._context = context;
23277         }
23278
23279         ReflectContext.prototype = {
23280           moveTo: function(x, y) { this._context.moveTo(y, x); },
23281           closePath: function() { this._context.closePath(); },
23282           lineTo: function(x, y) { this._context.lineTo(y, x); },
23283           bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
23284         };
23285
23286         function monotoneX(context) {
23287           return new MonotoneX(context);
23288         }
23289
23290         function monotoneY(context) {
23291           return new MonotoneY(context);
23292         }
23293
23294         function Natural(context) {
23295           this._context = context;
23296         }
23297
23298         Natural.prototype = {
23299           areaStart: function() {
23300             this._line = 0;
23301           },
23302           areaEnd: function() {
23303             this._line = NaN;
23304           },
23305           lineStart: function() {
23306             this._x = [];
23307             this._y = [];
23308           },
23309           lineEnd: function() {
23310             var x = this._x,
23311                 y = this._y,
23312                 n = x.length;
23313
23314             if (n) {
23315               this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
23316               if (n === 2) {
23317                 this._context.lineTo(x[1], y[1]);
23318               } else {
23319                 var px = controlPoints(x),
23320                     py = controlPoints(y);
23321                 for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
23322                   this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
23323                 }
23324               }
23325             }
23326
23327             if (this._line || (this._line !== 0 && n === 1)) { this._context.closePath(); }
23328             this._line = 1 - this._line;
23329             this._x = this._y = null;
23330           },
23331           point: function(x, y) {
23332             this._x.push(+x);
23333             this._y.push(+y);
23334           }
23335         };
23336
23337         // See https://www.particleincell.com/2012/bezier-splines/ for derivation.
23338         function controlPoints(x) {
23339           var i,
23340               n = x.length - 1,
23341               m,
23342               a = new Array(n),
23343               b = new Array(n),
23344               r = new Array(n);
23345           a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
23346           for (i = 1; i < n - 1; ++i) { a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; }
23347           a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
23348           for (i = 1; i < n; ++i) { m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; }
23349           a[n - 1] = r[n - 1] / b[n - 1];
23350           for (i = n - 2; i >= 0; --i) { a[i] = (r[i] - a[i + 1]) / b[i]; }
23351           b[n - 1] = (x[n] + a[n - 1]) / 2;
23352           for (i = 0; i < n - 1; ++i) { b[i] = 2 * x[i + 1] - a[i + 1]; }
23353           return [a, b];
23354         }
23355
23356         function natural(context) {
23357           return new Natural(context);
23358         }
23359
23360         function Step(context, t) {
23361           this._context = context;
23362           this._t = t;
23363         }
23364
23365         Step.prototype = {
23366           areaStart: function() {
23367             this._line = 0;
23368           },
23369           areaEnd: function() {
23370             this._line = NaN;
23371           },
23372           lineStart: function() {
23373             this._x = this._y = NaN;
23374             this._point = 0;
23375           },
23376           lineEnd: function() {
23377             if (0 < this._t && this._t < 1 && this._point === 2) { this._context.lineTo(this._x, this._y); }
23378             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
23379             if (this._line >= 0) { this._t = 1 - this._t, this._line = 1 - this._line; }
23380           },
23381           point: function(x, y) {
23382             x = +x, y = +y;
23383             switch (this._point) {
23384               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
23385               case 1: this._point = 2; // proceed
23386               default: {
23387                 if (this._t <= 0) {
23388                   this._context.lineTo(this._x, y);
23389                   this._context.lineTo(x, y);
23390                 } else {
23391                   var x1 = this._x * (1 - this._t) + x * this._t;
23392                   this._context.lineTo(x1, this._y);
23393                   this._context.lineTo(x1, y);
23394                 }
23395                 break;
23396               }
23397             }
23398             this._x = x, this._y = y;
23399           }
23400         };
23401
23402         function step(context) {
23403           return new Step(context, 0.5);
23404         }
23405
23406         function stepBefore(context) {
23407           return new Step(context, 0);
23408         }
23409
23410         function stepAfter(context) {
23411           return new Step(context, 1);
23412         }
23413
23414         function none$1(series, order) {
23415           if (!((n = series.length) > 1)) { return; }
23416           for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
23417             s0 = s1, s1 = series[order[i]];
23418             for (j = 0; j < m; ++j) {
23419               s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
23420             }
23421           }
23422         }
23423
23424         function none$2(series) {
23425           var n = series.length, o = new Array(n);
23426           while (--n >= 0) { o[n] = n; }
23427           return o;
23428         }
23429
23430         function stackValue(d, key) {
23431           return d[key];
23432         }
23433
23434         function stack() {
23435           var keys = constant$b([]),
23436               order = none$2,
23437               offset = none$1,
23438               value = stackValue;
23439
23440           function stack(data) {
23441             var kz = keys.apply(this, arguments),
23442                 i,
23443                 m = data.length,
23444                 n = kz.length,
23445                 sz = new Array(n),
23446                 oz;
23447
23448             for (i = 0; i < n; ++i) {
23449               for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
23450                 si[j] = sij = [0, +value(data[j], ki, j, data)];
23451                 sij.data = data[j];
23452               }
23453               si.key = ki;
23454             }
23455
23456             for (i = 0, oz = order(sz); i < n; ++i) {
23457               sz[oz[i]].index = i;
23458             }
23459
23460             offset(sz, oz);
23461             return sz;
23462           }
23463
23464           stack.keys = function(_) {
23465             return arguments.length ? (keys = typeof _ === "function" ? _ : constant$b(slice$a.call(_)), stack) : keys;
23466           };
23467
23468           stack.value = function(_) {
23469             return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), stack) : value;
23470           };
23471
23472           stack.order = function(_) {
23473             return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$b(slice$a.call(_)), stack) : order;
23474           };
23475
23476           stack.offset = function(_) {
23477             return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;
23478           };
23479
23480           return stack;
23481         }
23482
23483         function expand(series, order) {
23484           if (!((n = series.length) > 0)) { return; }
23485           for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
23486             for (y = i = 0; i < n; ++i) { y += series[i][j][1] || 0; }
23487             if (y) { for (i = 0; i < n; ++i) { series[i][j][1] /= y; } }
23488           }
23489           none$1(series, order);
23490         }
23491
23492         function diverging$1(series, order) {
23493           if (!((n = series.length) > 0)) { return; }
23494           for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {
23495             for (yp = yn = 0, i = 0; i < n; ++i) {
23496               if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {
23497                 d[0] = yp, d[1] = yp += dy;
23498               } else if (dy < 0) {
23499                 d[1] = yn, d[0] = yn += dy;
23500               } else {
23501                 d[0] = 0, d[1] = dy;
23502               }
23503             }
23504           }
23505         }
23506
23507         function silhouette(series, order) {
23508           if (!((n = series.length) > 0)) { return; }
23509           for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
23510             for (var i = 0, y = 0; i < n; ++i) { y += series[i][j][1] || 0; }
23511             s0[j][1] += s0[j][0] = -y / 2;
23512           }
23513           none$1(series, order);
23514         }
23515
23516         function wiggle(series, order) {
23517           if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) { return; }
23518           for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
23519             for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
23520               var si = series[order[i]],
23521                   sij0 = si[j][1] || 0,
23522                   sij1 = si[j - 1][1] || 0,
23523                   s3 = (sij0 - sij1) / 2;
23524               for (var k = 0; k < i; ++k) {
23525                 var sk = series[order[k]],
23526                     skj0 = sk[j][1] || 0,
23527                     skj1 = sk[j - 1][1] || 0;
23528                 s3 += skj0 - skj1;
23529               }
23530               s1 += sij0, s2 += s3 * sij0;
23531             }
23532             s0[j - 1][1] += s0[j - 1][0] = y;
23533             if (s1) { y -= s2 / s1; }
23534           }
23535           s0[j - 1][1] += s0[j - 1][0] = y;
23536           none$1(series, order);
23537         }
23538
23539         function appearance(series) {
23540           var peaks = series.map(peak);
23541           return none$2(series).sort(function(a, b) { return peaks[a] - peaks[b]; });
23542         }
23543
23544         function peak(series) {
23545           var i = -1, j = 0, n = series.length, vi, vj = -Infinity;
23546           while (++i < n) { if ((vi = +series[i][1]) > vj) { vj = vi, j = i; } }
23547           return j;
23548         }
23549
23550         function ascending$2(series) {
23551           var sums = series.map(sum$2);
23552           return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; });
23553         }
23554
23555         function sum$2(series) {
23556           var s = 0, i = -1, n = series.length, v;
23557           while (++i < n) { if (v = +series[i][1]) { s += v; } }
23558           return s;
23559         }
23560
23561         function descending$1(series) {
23562           return ascending$2(series).reverse();
23563         }
23564
23565         function insideOut(series) {
23566           var n = series.length,
23567               i,
23568               j,
23569               sums = series.map(sum$2),
23570               order = appearance(series),
23571               top = 0,
23572               bottom = 0,
23573               tops = [],
23574               bottoms = [];
23575
23576           for (i = 0; i < n; ++i) {
23577             j = order[i];
23578             if (top < bottom) {
23579               top += sums[j];
23580               tops.push(j);
23581             } else {
23582               bottom += sums[j];
23583               bottoms.push(j);
23584             }
23585           }
23586
23587           return bottoms.reverse().concat(tops);
23588         }
23589
23590         function reverse(series) {
23591           return none$2(series).reverse();
23592         }
23593
23594         function constant$c(x) {
23595           return function() {
23596             return x;
23597           };
23598         }
23599
23600         function x$4(d) {
23601           return d[0];
23602         }
23603
23604         function y$4(d) {
23605           return d[1];
23606         }
23607
23608         function RedBlackTree() {
23609           this._ = null; // root node
23610         }
23611
23612         function RedBlackNode(node) {
23613           node.U = // parent node
23614           node.C = // color - true for red, false for black
23615           node.L = // left node
23616           node.R = // right node
23617           node.P = // previous node
23618           node.N = null; // next node
23619         }
23620
23621         RedBlackTree.prototype = {
23622           constructor: RedBlackTree,
23623
23624           insert: function(after, node) {
23625             var parent, grandpa, uncle;
23626
23627             if (after) {
23628               node.P = after;
23629               node.N = after.N;
23630               if (after.N) { after.N.P = node; }
23631               after.N = node;
23632               if (after.R) {
23633                 after = after.R;
23634                 while (after.L) { after = after.L; }
23635                 after.L = node;
23636               } else {
23637                 after.R = node;
23638               }
23639               parent = after;
23640             } else if (this._) {
23641               after = RedBlackFirst(this._);
23642               node.P = null;
23643               node.N = after;
23644               after.P = after.L = node;
23645               parent = after;
23646             } else {
23647               node.P = node.N = null;
23648               this._ = node;
23649               parent = null;
23650             }
23651             node.L = node.R = null;
23652             node.U = parent;
23653             node.C = true;
23654
23655             after = node;
23656             while (parent && parent.C) {
23657               grandpa = parent.U;
23658               if (parent === grandpa.L) {
23659                 uncle = grandpa.R;
23660                 if (uncle && uncle.C) {
23661                   parent.C = uncle.C = false;
23662                   grandpa.C = true;
23663                   after = grandpa;
23664                 } else {
23665                   if (after === parent.R) {
23666                     RedBlackRotateLeft(this, parent);
23667                     after = parent;
23668                     parent = after.U;
23669                   }
23670                   parent.C = false;
23671                   grandpa.C = true;
23672                   RedBlackRotateRight(this, grandpa);
23673                 }
23674               } else {
23675                 uncle = grandpa.L;
23676                 if (uncle && uncle.C) {
23677                   parent.C = uncle.C = false;
23678                   grandpa.C = true;
23679                   after = grandpa;
23680                 } else {
23681                   if (after === parent.L) {
23682                     RedBlackRotateRight(this, parent);
23683                     after = parent;
23684                     parent = after.U;
23685                   }
23686                   parent.C = false;
23687                   grandpa.C = true;
23688                   RedBlackRotateLeft(this, grandpa);
23689                 }
23690               }
23691               parent = after.U;
23692             }
23693             this._.C = false;
23694           },
23695
23696           remove: function(node) {
23697             if (node.N) { node.N.P = node.P; }
23698             if (node.P) { node.P.N = node.N; }
23699             node.N = node.P = null;
23700
23701             var parent = node.U,
23702                 sibling,
23703                 left = node.L,
23704                 right = node.R,
23705                 next,
23706                 red;
23707
23708             if (!left) { next = right; }
23709             else if (!right) { next = left; }
23710             else { next = RedBlackFirst(right); }
23711
23712             if (parent) {
23713               if (parent.L === node) { parent.L = next; }
23714               else { parent.R = next; }
23715             } else {
23716               this._ = next;
23717             }
23718
23719             if (left && right) {
23720               red = next.C;
23721               next.C = node.C;
23722               next.L = left;
23723               left.U = next;
23724               if (next !== right) {
23725                 parent = next.U;
23726                 next.U = node.U;
23727                 node = next.R;
23728                 parent.L = node;
23729                 next.R = right;
23730                 right.U = next;
23731               } else {
23732                 next.U = parent;
23733                 parent = next;
23734                 node = next.R;
23735               }
23736             } else {
23737               red = node.C;
23738               node = next;
23739             }
23740
23741             if (node) { node.U = parent; }
23742             if (red) { return; }
23743             if (node && node.C) { node.C = false; return; }
23744
23745             do {
23746               if (node === this._) { break; }
23747               if (node === parent.L) {
23748                 sibling = parent.R;
23749                 if (sibling.C) {
23750                   sibling.C = false;
23751                   parent.C = true;
23752                   RedBlackRotateLeft(this, parent);
23753                   sibling = parent.R;
23754                 }
23755                 if ((sibling.L && sibling.L.C)
23756                     || (sibling.R && sibling.R.C)) {
23757                   if (!sibling.R || !sibling.R.C) {
23758                     sibling.L.C = false;
23759                     sibling.C = true;
23760                     RedBlackRotateRight(this, sibling);
23761                     sibling = parent.R;
23762                   }
23763                   sibling.C = parent.C;
23764                   parent.C = sibling.R.C = false;
23765                   RedBlackRotateLeft(this, parent);
23766                   node = this._;
23767                   break;
23768                 }
23769               } else {
23770                 sibling = parent.L;
23771                 if (sibling.C) {
23772                   sibling.C = false;
23773                   parent.C = true;
23774                   RedBlackRotateRight(this, parent);
23775                   sibling = parent.L;
23776                 }
23777                 if ((sibling.L && sibling.L.C)
23778                   || (sibling.R && sibling.R.C)) {
23779                   if (!sibling.L || !sibling.L.C) {
23780                     sibling.R.C = false;
23781                     sibling.C = true;
23782                     RedBlackRotateLeft(this, sibling);
23783                     sibling = parent.L;
23784                   }
23785                   sibling.C = parent.C;
23786                   parent.C = sibling.L.C = false;
23787                   RedBlackRotateRight(this, parent);
23788                   node = this._;
23789                   break;
23790                 }
23791               }
23792               sibling.C = true;
23793               node = parent;
23794               parent = parent.U;
23795             } while (!node.C);
23796
23797             if (node) { node.C = false; }
23798           }
23799         };
23800
23801         function RedBlackRotateLeft(tree, node) {
23802           var p = node,
23803               q = node.R,
23804               parent = p.U;
23805
23806           if (parent) {
23807             if (parent.L === p) { parent.L = q; }
23808             else { parent.R = q; }
23809           } else {
23810             tree._ = q;
23811           }
23812
23813           q.U = parent;
23814           p.U = q;
23815           p.R = q.L;
23816           if (p.R) { p.R.U = p; }
23817           q.L = p;
23818         }
23819
23820         function RedBlackRotateRight(tree, node) {
23821           var p = node,
23822               q = node.L,
23823               parent = p.U;
23824
23825           if (parent) {
23826             if (parent.L === p) { parent.L = q; }
23827             else { parent.R = q; }
23828           } else {
23829             tree._ = q;
23830           }
23831
23832           q.U = parent;
23833           p.U = q;
23834           p.L = q.R;
23835           if (p.L) { p.L.U = p; }
23836           q.R = p;
23837         }
23838
23839         function RedBlackFirst(node) {
23840           while (node.L) { node = node.L; }
23841           return node;
23842         }
23843
23844         function createEdge(left, right, v0, v1) {
23845           var edge = [null, null],
23846               index = edges.push(edge) - 1;
23847           edge.left = left;
23848           edge.right = right;
23849           if (v0) { setEdgeEnd(edge, left, right, v0); }
23850           if (v1) { setEdgeEnd(edge, right, left, v1); }
23851           cells[left.index].halfedges.push(index);
23852           cells[right.index].halfedges.push(index);
23853           return edge;
23854         }
23855
23856         function createBorderEdge(left, v0, v1) {
23857           var edge = [v0, v1];
23858           edge.left = left;
23859           return edge;
23860         }
23861
23862         function setEdgeEnd(edge, left, right, vertex) {
23863           if (!edge[0] && !edge[1]) {
23864             edge[0] = vertex;
23865             edge.left = left;
23866             edge.right = right;
23867           } else if (edge.left === right) {
23868             edge[1] = vertex;
23869           } else {
23870             edge[0] = vertex;
23871           }
23872         }
23873
23874         // Liang–Barsky line clipping.
23875         function clipEdge(edge, x0, y0, x1, y1) {
23876           var a = edge[0],
23877               b = edge[1],
23878               ax = a[0],
23879               ay = a[1],
23880               bx = b[0],
23881               by = b[1],
23882               t0 = 0,
23883               t1 = 1,
23884               dx = bx - ax,
23885               dy = by - ay,
23886               r;
23887
23888           r = x0 - ax;
23889           if (!dx && r > 0) { return; }
23890           r /= dx;
23891           if (dx < 0) {
23892             if (r < t0) { return; }
23893             if (r < t1) { t1 = r; }
23894           } else if (dx > 0) {
23895             if (r > t1) { return; }
23896             if (r > t0) { t0 = r; }
23897           }
23898
23899           r = x1 - ax;
23900           if (!dx && r < 0) { return; }
23901           r /= dx;
23902           if (dx < 0) {
23903             if (r > t1) { return; }
23904             if (r > t0) { t0 = r; }
23905           } else if (dx > 0) {
23906             if (r < t0) { return; }
23907             if (r < t1) { t1 = r; }
23908           }
23909
23910           r = y0 - ay;
23911           if (!dy && r > 0) { return; }
23912           r /= dy;
23913           if (dy < 0) {
23914             if (r < t0) { return; }
23915             if (r < t1) { t1 = r; }
23916           } else if (dy > 0) {
23917             if (r > t1) { return; }
23918             if (r > t0) { t0 = r; }
23919           }
23920
23921           r = y1 - ay;
23922           if (!dy && r < 0) { return; }
23923           r /= dy;
23924           if (dy < 0) {
23925             if (r > t1) { return; }
23926             if (r > t0) { t0 = r; }
23927           } else if (dy > 0) {
23928             if (r < t0) { return; }
23929             if (r < t1) { t1 = r; }
23930           }
23931
23932           if (!(t0 > 0) && !(t1 < 1)) { return true; } // TODO Better check?
23933
23934           if (t0 > 0) { edge[0] = [ax + t0 * dx, ay + t0 * dy]; }
23935           if (t1 < 1) { edge[1] = [ax + t1 * dx, ay + t1 * dy]; }
23936           return true;
23937         }
23938
23939         function connectEdge(edge, x0, y0, x1, y1) {
23940           var v1 = edge[1];
23941           if (v1) { return true; }
23942
23943           var v0 = edge[0],
23944               left = edge.left,
23945               right = edge.right,
23946               lx = left[0],
23947               ly = left[1],
23948               rx = right[0],
23949               ry = right[1],
23950               fx = (lx + rx) / 2,
23951               fy = (ly + ry) / 2,
23952               fm,
23953               fb;
23954
23955           if (ry === ly) {
23956             if (fx < x0 || fx >= x1) { return; }
23957             if (lx > rx) {
23958               if (!v0) { v0 = [fx, y0]; }
23959               else if (v0[1] >= y1) { return; }
23960               v1 = [fx, y1];
23961             } else {
23962               if (!v0) { v0 = [fx, y1]; }
23963               else if (v0[1] < y0) { return; }
23964               v1 = [fx, y0];
23965             }
23966           } else {
23967             fm = (lx - rx) / (ry - ly);
23968             fb = fy - fm * fx;
23969             if (fm < -1 || fm > 1) {
23970               if (lx > rx) {
23971                 if (!v0) { v0 = [(y0 - fb) / fm, y0]; }
23972                 else if (v0[1] >= y1) { return; }
23973                 v1 = [(y1 - fb) / fm, y1];
23974               } else {
23975                 if (!v0) { v0 = [(y1 - fb) / fm, y1]; }
23976                 else if (v0[1] < y0) { return; }
23977                 v1 = [(y0 - fb) / fm, y0];
23978               }
23979             } else {
23980               if (ly < ry) {
23981                 if (!v0) { v0 = [x0, fm * x0 + fb]; }
23982                 else if (v0[0] >= x1) { return; }
23983                 v1 = [x1, fm * x1 + fb];
23984               } else {
23985                 if (!v0) { v0 = [x1, fm * x1 + fb]; }
23986                 else if (v0[0] < x0) { return; }
23987                 v1 = [x0, fm * x0 + fb];
23988               }
23989             }
23990           }
23991
23992           edge[0] = v0;
23993           edge[1] = v1;
23994           return true;
23995         }
23996
23997         function clipEdges(x0, y0, x1, y1) {
23998           var i = edges.length,
23999               edge;
24000
24001           while (i--) {
24002             if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
24003                 || !clipEdge(edge, x0, y0, x1, y1)
24004                 || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4
24005                     || Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) {
24006               delete edges[i];
24007             }
24008           }
24009         }
24010
24011         function createCell(site) {
24012           return cells[site.index] = {
24013             site: site,
24014             halfedges: []
24015           };
24016         }
24017
24018         function cellHalfedgeAngle(cell, edge) {
24019           var site = cell.site,
24020               va = edge.left,
24021               vb = edge.right;
24022           if (site === vb) { vb = va, va = site; }
24023           if (vb) { return Math.atan2(vb[1] - va[1], vb[0] - va[0]); }
24024           if (site === va) { va = edge[1], vb = edge[0]; }
24025           else { va = edge[0], vb = edge[1]; }
24026           return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
24027         }
24028
24029         function cellHalfedgeStart(cell, edge) {
24030           return edge[+(edge.left !== cell.site)];
24031         }
24032
24033         function cellHalfedgeEnd(cell, edge) {
24034           return edge[+(edge.left === cell.site)];
24035         }
24036
24037         function sortCellHalfedges() {
24038           for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
24039             if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
24040               var index = new Array(m),
24041                   array = new Array(m);
24042               for (j = 0; j < m; ++j) { index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]); }
24043               index.sort(function(i, j) { return array[j] - array[i]; });
24044               for (j = 0; j < m; ++j) { array[j] = halfedges[index[j]]; }
24045               for (j = 0; j < m; ++j) { halfedges[j] = array[j]; }
24046             }
24047           }
24048         }
24049
24050         function clipCells(x0, y0, x1, y1) {
24051           var nCells = cells.length,
24052               iCell,
24053               cell,
24054               site,
24055               iHalfedge,
24056               halfedges,
24057               nHalfedges,
24058               start,
24059               startX,
24060               startY,
24061               end,
24062               endX,
24063               endY,
24064               cover = true;
24065
24066           for (iCell = 0; iCell < nCells; ++iCell) {
24067             if (cell = cells[iCell]) {
24068               site = cell.site;
24069               halfedges = cell.halfedges;
24070               iHalfedge = halfedges.length;
24071
24072               // Remove any dangling clipped edges.
24073               while (iHalfedge--) {
24074                 if (!edges[halfedges[iHalfedge]]) {
24075                   halfedges.splice(iHalfedge, 1);
24076                 }
24077               }
24078
24079               // Insert any border edges as necessary.
24080               iHalfedge = 0, nHalfedges = halfedges.length;
24081               while (iHalfedge < nHalfedges) {
24082                 end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
24083                 start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
24084                 if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) {
24085                   halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
24086                       Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1]
24087                       : Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1]
24088                       : Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0]
24089                       : Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0]
24090                       : null)) - 1);
24091                   ++nHalfedges;
24092                 }
24093               }
24094
24095               if (nHalfedges) { cover = false; }
24096             }
24097           }
24098
24099           // If there weren’t any edges, have the closest site cover the extent.
24100           // It doesn’t matter which corner of the extent we measure!
24101           if (cover) {
24102             var dx, dy, d2, dc = Infinity;
24103
24104             for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
24105               if (cell = cells[iCell]) {
24106                 site = cell.site;
24107                 dx = site[0] - x0;
24108                 dy = site[1] - y0;
24109                 d2 = dx * dx + dy * dy;
24110                 if (d2 < dc) { dc = d2, cover = cell; }
24111               }
24112             }
24113
24114             if (cover) {
24115               var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
24116               cover.halfedges.push(
24117                 edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
24118                 edges.push(createBorderEdge(site, v01, v11)) - 1,
24119                 edges.push(createBorderEdge(site, v11, v10)) - 1,
24120                 edges.push(createBorderEdge(site, v10, v00)) - 1
24121               );
24122             }
24123           }
24124
24125           // Lastly delete any cells with no edges; these were entirely clipped.
24126           for (iCell = 0; iCell < nCells; ++iCell) {
24127             if (cell = cells[iCell]) {
24128               if (!cell.halfedges.length) {
24129                 delete cells[iCell];
24130               }
24131             }
24132           }
24133         }
24134
24135         var circlePool = [];
24136
24137         var firstCircle;
24138
24139         function Circle() {
24140           RedBlackNode(this);
24141           this.x =
24142           this.y =
24143           this.arc =
24144           this.site =
24145           this.cy = null;
24146         }
24147
24148         function attachCircle(arc) {
24149           var lArc = arc.P,
24150               rArc = arc.N;
24151
24152           if (!lArc || !rArc) { return; }
24153
24154           var lSite = lArc.site,
24155               cSite = arc.site,
24156               rSite = rArc.site;
24157
24158           if (lSite === rSite) { return; }
24159
24160           var bx = cSite[0],
24161               by = cSite[1],
24162               ax = lSite[0] - bx,
24163               ay = lSite[1] - by,
24164               cx = rSite[0] - bx,
24165               cy = rSite[1] - by;
24166
24167           var d = 2 * (ax * cy - ay * cx);
24168           if (d >= -epsilon2$2) { return; }
24169
24170           var ha = ax * ax + ay * ay,
24171               hc = cx * cx + cy * cy,
24172               x = (cy * ha - ay * hc) / d,
24173               y = (ax * hc - cx * ha) / d;
24174
24175           var circle = circlePool.pop() || new Circle;
24176           circle.arc = arc;
24177           circle.site = cSite;
24178           circle.x = x + bx;
24179           circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
24180
24181           arc.circle = circle;
24182
24183           var before = null,
24184               node = circles._;
24185
24186           while (node) {
24187             if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
24188               if (node.L) { node = node.L; }
24189               else { before = node.P; break; }
24190             } else {
24191               if (node.R) { node = node.R; }
24192               else { before = node; break; }
24193             }
24194           }
24195
24196           circles.insert(before, circle);
24197           if (!before) { firstCircle = circle; }
24198         }
24199
24200         function detachCircle(arc) {
24201           var circle = arc.circle;
24202           if (circle) {
24203             if (!circle.P) { firstCircle = circle.N; }
24204             circles.remove(circle);
24205             circlePool.push(circle);
24206             RedBlackNode(circle);
24207             arc.circle = null;
24208           }
24209         }
24210
24211         var beachPool = [];
24212
24213         function Beach() {
24214           RedBlackNode(this);
24215           this.edge =
24216           this.site =
24217           this.circle = null;
24218         }
24219
24220         function createBeach(site) {
24221           var beach = beachPool.pop() || new Beach;
24222           beach.site = site;
24223           return beach;
24224         }
24225
24226         function detachBeach(beach) {
24227           detachCircle(beach);
24228           beaches.remove(beach);
24229           beachPool.push(beach);
24230           RedBlackNode(beach);
24231         }
24232
24233         function removeBeach(beach) {
24234           var circle = beach.circle,
24235               x = circle.x,
24236               y = circle.cy,
24237               vertex = [x, y],
24238               previous = beach.P,
24239               next = beach.N,
24240               disappearing = [beach];
24241
24242           detachBeach(beach);
24243
24244           var lArc = previous;
24245           while (lArc.circle
24246               && Math.abs(x - lArc.circle.x) < epsilon$4
24247               && Math.abs(y - lArc.circle.cy) < epsilon$4) {
24248             previous = lArc.P;
24249             disappearing.unshift(lArc);
24250             detachBeach(lArc);
24251             lArc = previous;
24252           }
24253
24254           disappearing.unshift(lArc);
24255           detachCircle(lArc);
24256
24257           var rArc = next;
24258           while (rArc.circle
24259               && Math.abs(x - rArc.circle.x) < epsilon$4
24260               && Math.abs(y - rArc.circle.cy) < epsilon$4) {
24261             next = rArc.N;
24262             disappearing.push(rArc);
24263             detachBeach(rArc);
24264             rArc = next;
24265           }
24266
24267           disappearing.push(rArc);
24268           detachCircle(rArc);
24269
24270           var nArcs = disappearing.length,
24271               iArc;
24272           for (iArc = 1; iArc < nArcs; ++iArc) {
24273             rArc = disappearing[iArc];
24274             lArc = disappearing[iArc - 1];
24275             setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
24276           }
24277
24278           lArc = disappearing[0];
24279           rArc = disappearing[nArcs - 1];
24280           rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
24281
24282           attachCircle(lArc);
24283           attachCircle(rArc);
24284         }
24285
24286         function addBeach(site) {
24287           var x = site[0],
24288               directrix = site[1],
24289               lArc,
24290               rArc,
24291               dxl,
24292               dxr,
24293               node = beaches._;
24294
24295           while (node) {
24296             dxl = leftBreakPoint(node, directrix) - x;
24297             if (dxl > epsilon$4) { node = node.L; } else {
24298               dxr = x - rightBreakPoint(node, directrix);
24299               if (dxr > epsilon$4) {
24300                 if (!node.R) {
24301                   lArc = node;
24302                   break;
24303                 }
24304                 node = node.R;
24305               } else {
24306                 if (dxl > -epsilon$4) {
24307                   lArc = node.P;
24308                   rArc = node;
24309                 } else if (dxr > -epsilon$4) {
24310                   lArc = node;
24311                   rArc = node.N;
24312                 } else {
24313                   lArc = rArc = node;
24314                 }
24315                 break;
24316               }
24317             }
24318           }
24319
24320           createCell(site);
24321           var newArc = createBeach(site);
24322           beaches.insert(lArc, newArc);
24323
24324           if (!lArc && !rArc) { return; }
24325
24326           if (lArc === rArc) {
24327             detachCircle(lArc);
24328             rArc = createBeach(lArc.site);
24329             beaches.insert(newArc, rArc);
24330             newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
24331             attachCircle(lArc);
24332             attachCircle(rArc);
24333             return;
24334           }
24335
24336           if (!rArc) { // && lArc
24337             newArc.edge = createEdge(lArc.site, newArc.site);
24338             return;
24339           }
24340
24341           // else lArc !== rArc
24342           detachCircle(lArc);
24343           detachCircle(rArc);
24344
24345           var lSite = lArc.site,
24346               ax = lSite[0],
24347               ay = lSite[1],
24348               bx = site[0] - ax,
24349               by = site[1] - ay,
24350               rSite = rArc.site,
24351               cx = rSite[0] - ax,
24352               cy = rSite[1] - ay,
24353               d = 2 * (bx * cy - by * cx),
24354               hb = bx * bx + by * by,
24355               hc = cx * cx + cy * cy,
24356               vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
24357
24358           setEdgeEnd(rArc.edge, lSite, rSite, vertex);
24359           newArc.edge = createEdge(lSite, site, null, vertex);
24360           rArc.edge = createEdge(site, rSite, null, vertex);
24361           attachCircle(lArc);
24362           attachCircle(rArc);
24363         }
24364
24365         function leftBreakPoint(arc, directrix) {
24366           var site = arc.site,
24367               rfocx = site[0],
24368               rfocy = site[1],
24369               pby2 = rfocy - directrix;
24370
24371           if (!pby2) { return rfocx; }
24372
24373           var lArc = arc.P;
24374           if (!lArc) { return -Infinity; }
24375
24376           site = lArc.site;
24377           var lfocx = site[0],
24378               lfocy = site[1],
24379               plby2 = lfocy - directrix;
24380
24381           if (!plby2) { return lfocx; }
24382
24383           var hl = lfocx - rfocx,
24384               aby2 = 1 / pby2 - 1 / plby2,
24385               b = hl / plby2;
24386
24387           if (aby2) { return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; }
24388
24389           return (rfocx + lfocx) / 2;
24390         }
24391
24392         function rightBreakPoint(arc, directrix) {
24393           var rArc = arc.N;
24394           if (rArc) { return leftBreakPoint(rArc, directrix); }
24395           var site = arc.site;
24396           return site[1] === directrix ? site[0] : Infinity;
24397         }
24398
24399         var epsilon$4 = 1e-6;
24400         var epsilon2$2 = 1e-12;
24401         var beaches;
24402         var cells;
24403         var circles;
24404         var edges;
24405
24406         function triangleArea(a, b, c) {
24407           return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
24408         }
24409
24410         function lexicographic(a, b) {
24411           return b[1] - a[1]
24412               || b[0] - a[0];
24413         }
24414
24415         function Diagram(sites, extent) {
24416           var site = sites.sort(lexicographic).pop(),
24417               x,
24418               y,
24419               circle;
24420
24421           edges = [];
24422           cells = new Array(sites.length);
24423           beaches = new RedBlackTree;
24424           circles = new RedBlackTree;
24425
24426           while (true) {
24427             circle = firstCircle;
24428             if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
24429               if (site[0] !== x || site[1] !== y) {
24430                 addBeach(site);
24431                 x = site[0], y = site[1];
24432               }
24433               site = sites.pop();
24434             } else if (circle) {
24435               removeBeach(circle.arc);
24436             } else {
24437               break;
24438             }
24439           }
24440
24441           sortCellHalfedges();
24442
24443           if (extent) {
24444             var x0 = +extent[0][0],
24445                 y0 = +extent[0][1],
24446                 x1 = +extent[1][0],
24447                 y1 = +extent[1][1];
24448             clipEdges(x0, y0, x1, y1);
24449             clipCells(x0, y0, x1, y1);
24450           }
24451
24452           this.edges = edges;
24453           this.cells = cells;
24454
24455           beaches =
24456           circles =
24457           edges =
24458           cells = null;
24459         }
24460
24461         Diagram.prototype = {
24462           constructor: Diagram,
24463
24464           polygons: function() {
24465             var edges = this.edges;
24466
24467             return this.cells.map(function(cell) {
24468               var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
24469               polygon.data = cell.site.data;
24470               return polygon;
24471             });
24472           },
24473
24474           triangles: function() {
24475             var triangles = [],
24476                 edges = this.edges;
24477
24478             this.cells.forEach(function(cell, i) {
24479               if (!(m = (halfedges = cell.halfedges).length)) { return; }
24480               var site = cell.site,
24481                   halfedges,
24482                   j = -1,
24483                   m,
24484                   s0,
24485                   e1 = edges[halfedges[m - 1]],
24486                   s1 = e1.left === site ? e1.right : e1.left;
24487
24488               while (++j < m) {
24489                 s0 = s1;
24490                 e1 = edges[halfedges[j]];
24491                 s1 = e1.left === site ? e1.right : e1.left;
24492                 if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
24493                   triangles.push([site.data, s0.data, s1.data]);
24494                 }
24495               }
24496             });
24497
24498             return triangles;
24499           },
24500
24501           links: function() {
24502             return this.edges.filter(function(edge) {
24503               return edge.right;
24504             }).map(function(edge) {
24505               return {
24506                 source: edge.left.data,
24507                 target: edge.right.data
24508               };
24509             });
24510           },
24511
24512           find: function(x, y, radius) {
24513             var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;
24514
24515             // Use the previously-found cell, or start with an arbitrary one.
24516             while (!(cell = that.cells[i1])) { if (++i1 >= n) { return null; } }
24517             var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;
24518
24519             // Traverse the half-edges to find a closer cell, if any.
24520             do {
24521               cell = that.cells[i0 = i1], i1 = null;
24522               cell.halfedges.forEach(function(e) {
24523                 var edge = that.edges[e], v = edge.left;
24524                 if ((v === cell.site || !v) && !(v = edge.right)) { return; }
24525                 var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;
24526                 if (v2 < d2) { d2 = v2, i1 = v.index; }
24527               });
24528             } while (i1 !== null);
24529
24530             that._found = i0;
24531
24532             return radius == null || d2 <= radius * radius ? cell.site : null;
24533           }
24534         };
24535
24536         function voronoi() {
24537           var x = x$4,
24538               y = y$4,
24539               extent = null;
24540
24541           function voronoi(data) {
24542             return new Diagram(data.map(function(d, i) {
24543               var s = [Math.round(x(d, i, data) / epsilon$4) * epsilon$4, Math.round(y(d, i, data) / epsilon$4) * epsilon$4];
24544               s.index = i;
24545               s.data = d;
24546               return s;
24547             }), extent);
24548           }
24549
24550           voronoi.polygons = function(data) {
24551             return voronoi(data).polygons();
24552           };
24553
24554           voronoi.links = function(data) {
24555             return voronoi(data).links();
24556           };
24557
24558           voronoi.triangles = function(data) {
24559             return voronoi(data).triangles();
24560           };
24561
24562           voronoi.x = function(_) {
24563             return arguments.length ? (x = typeof _ === "function" ? _ : constant$c(+_), voronoi) : x;
24564           };
24565
24566           voronoi.y = function(_) {
24567             return arguments.length ? (y = typeof _ === "function" ? _ : constant$c(+_), voronoi) : y;
24568           };
24569
24570           voronoi.extent = function(_) {
24571             return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
24572           };
24573
24574           voronoi.size = function(_) {
24575             return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
24576           };
24577
24578           return voronoi;
24579         }
24580
24581         function constant$d(x) {
24582           return function() {
24583             return x;
24584           };
24585         }
24586
24587         function ZoomEvent(target, type, transform) {
24588           this.target = target;
24589           this.type = type;
24590           this.transform = transform;
24591         }
24592
24593         function Transform(k, x, y) {
24594           this.k = k;
24595           this.x = x;
24596           this.y = y;
24597         }
24598
24599         Transform.prototype = {
24600           constructor: Transform,
24601           scale: function(k) {
24602             return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
24603           },
24604           translate: function(x, y) {
24605             return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
24606           },
24607           apply: function(point) {
24608             return [point[0] * this.k + this.x, point[1] * this.k + this.y];
24609           },
24610           applyX: function(x) {
24611             return x * this.k + this.x;
24612           },
24613           applyY: function(y) {
24614             return y * this.k + this.y;
24615           },
24616           invert: function(location) {
24617             return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
24618           },
24619           invertX: function(x) {
24620             return (x - this.x) / this.k;
24621           },
24622           invertY: function(y) {
24623             return (y - this.y) / this.k;
24624           },
24625           rescaleX: function(x) {
24626             return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
24627           },
24628           rescaleY: function(y) {
24629             return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
24630           },
24631           toString: function() {
24632             return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
24633           }
24634         };
24635
24636         var identity$8 = new Transform(1, 0, 0);
24637
24638         transform.prototype = Transform.prototype;
24639
24640         function transform(node) {
24641           while (!node.__zoom) { if (!(node = node.parentNode)) { return identity$8; } }
24642           return node.__zoom;
24643         }
24644
24645         function nopropagation$2() {
24646           event.stopImmediatePropagation();
24647         }
24648
24649         function noevent$2() {
24650           event.preventDefault();
24651           event.stopImmediatePropagation();
24652         }
24653
24654         // Ignore right-click, since that should open the context menu.
24655         function defaultFilter$2() {
24656           return !event.ctrlKey && !event.button;
24657         }
24658
24659         function defaultExtent$1() {
24660           var e = this;
24661           if (e instanceof SVGElement) {
24662             e = e.ownerSVGElement || e;
24663             if (e.hasAttribute("viewBox")) {
24664               e = e.viewBox.baseVal;
24665               return [[e.x, e.y], [e.x + e.width, e.y + e.height]];
24666             }
24667             return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];
24668           }
24669           return [[0, 0], [e.clientWidth, e.clientHeight]];
24670         }
24671
24672         function defaultTransform() {
24673           return this.__zoom || identity$8;
24674         }
24675
24676         function defaultWheelDelta() {
24677           return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002);
24678         }
24679
24680         function defaultTouchable$2() {
24681           return navigator.maxTouchPoints || ("ontouchstart" in this);
24682         }
24683
24684         function defaultConstrain(transform, extent, translateExtent) {
24685           var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],
24686               dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],
24687               dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],
24688               dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];
24689           return transform.translate(
24690             dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
24691             dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
24692           );
24693         }
24694
24695         function d3_zoom() {
24696           var filter = defaultFilter$2,
24697               extent = defaultExtent$1,
24698               constrain = defaultConstrain,
24699               wheelDelta = defaultWheelDelta,
24700               touchable = defaultTouchable$2,
24701               scaleExtent = [0, Infinity],
24702               translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],
24703               duration = 250,
24704               interpolate = interpolateZoom,
24705               listeners = dispatch("start", "zoom", "end"),
24706               touchstarting,
24707               touchending,
24708               touchDelay = 500,
24709               wheelDelay = 150,
24710               clickDistance2 = 0;
24711
24712           function zoom(selection) {
24713             selection
24714                 .property("__zoom", defaultTransform)
24715                 .on("wheel.zoom", wheeled)
24716                 .on("mousedown.zoom", mousedowned)
24717                 .on("dblclick.zoom", dblclicked)
24718               .filter(touchable)
24719                 .on("touchstart.zoom", touchstarted)
24720                 .on("touchmove.zoom", touchmoved)
24721                 .on("touchend.zoom touchcancel.zoom", touchended)
24722                 .style("touch-action", "none")
24723                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
24724           }
24725
24726           zoom.transform = function(collection, transform, point) {
24727             var selection = collection.selection ? collection.selection() : collection;
24728             selection.property("__zoom", defaultTransform);
24729             if (collection !== selection) {
24730               schedule(collection, transform, point);
24731             } else {
24732               selection.interrupt().each(function() {
24733                 gesture(this, arguments)
24734                     .start()
24735                     .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
24736                     .end();
24737               });
24738             }
24739           };
24740
24741           zoom.scaleBy = function(selection, k, p) {
24742             zoom.scaleTo(selection, function() {
24743               var k0 = this.__zoom.k,
24744                   k1 = typeof k === "function" ? k.apply(this, arguments) : k;
24745               return k0 * k1;
24746             }, p);
24747           };
24748
24749           zoom.scaleTo = function(selection, k, p) {
24750             zoom.transform(selection, function() {
24751               var e = extent.apply(this, arguments),
24752                   t0 = this.__zoom,
24753                   p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p,
24754                   p1 = t0.invert(p0),
24755                   k1 = typeof k === "function" ? k.apply(this, arguments) : k;
24756               return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);
24757             }, p);
24758           };
24759
24760           zoom.translateBy = function(selection, x, y) {
24761             zoom.transform(selection, function() {
24762               return constrain(this.__zoom.translate(
24763                 typeof x === "function" ? x.apply(this, arguments) : x,
24764                 typeof y === "function" ? y.apply(this, arguments) : y
24765               ), extent.apply(this, arguments), translateExtent);
24766             });
24767           };
24768
24769           zoom.translateTo = function(selection, x, y, p) {
24770             zoom.transform(selection, function() {
24771               var e = extent.apply(this, arguments),
24772                   t = this.__zoom,
24773                   p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p;
24774               return constrain(identity$8.translate(p0[0], p0[1]).scale(t.k).translate(
24775                 typeof x === "function" ? -x.apply(this, arguments) : -x,
24776                 typeof y === "function" ? -y.apply(this, arguments) : -y
24777               ), e, translateExtent);
24778             }, p);
24779           };
24780
24781           function scale(transform, k) {
24782             k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));
24783             return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
24784           }
24785
24786           function translate(transform, p0, p1) {
24787             var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
24788             return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
24789           }
24790
24791           function centroid(extent) {
24792             return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
24793           }
24794
24795           function schedule(transition, transform, point) {
24796             transition
24797                 .on("start.zoom", function() { gesture(this, arguments).start(); })
24798                 .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
24799                 .tween("zoom", function() {
24800                   var that = this,
24801                       args = arguments,
24802                       g = gesture(that, args),
24803                       e = extent.apply(that, args),
24804                       p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point,
24805                       w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
24806                       a = that.__zoom,
24807                       b = typeof transform === "function" ? transform.apply(that, args) : transform,
24808                       i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
24809                   return function(t) {
24810                     if (t === 1) { t = b; } // Avoid rounding error on end.
24811                     else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
24812                     g.zoom(null, t);
24813                   };
24814                 });
24815           }
24816
24817           function gesture(that, args, clean) {
24818             return (!clean && that.__zooming) || new Gesture(that, args);
24819           }
24820
24821           function Gesture(that, args) {
24822             this.that = that;
24823             this.args = args;
24824             this.active = 0;
24825             this.extent = extent.apply(that, args);
24826             this.taps = 0;
24827           }
24828
24829           Gesture.prototype = {
24830             start: function() {
24831               if (++this.active === 1) {
24832                 this.that.__zooming = this;
24833                 this.emit("start");
24834               }
24835               return this;
24836             },
24837             zoom: function(key, transform) {
24838               if (this.mouse && key !== "mouse") { this.mouse[1] = transform.invert(this.mouse[0]); }
24839               if (this.touch0 && key !== "touch") { this.touch0[1] = transform.invert(this.touch0[0]); }
24840               if (this.touch1 && key !== "touch") { this.touch1[1] = transform.invert(this.touch1[0]); }
24841               this.that.__zoom = transform;
24842               this.emit("zoom");
24843               return this;
24844             },
24845             end: function() {
24846               if (--this.active === 0) {
24847                 delete this.that.__zooming;
24848                 this.emit("end");
24849               }
24850               return this;
24851             },
24852             emit: function(type) {
24853               customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
24854             }
24855           };
24856
24857           function wheeled() {
24858             if (!filter.apply(this, arguments)) { return; }
24859             var g = gesture(this, arguments),
24860                 t = this.__zoom,
24861                 k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),
24862                 p = d3_mouse(this);
24863
24864             // If the mouse is in the same location as before, reuse it.
24865             // If there were recent wheel events, reset the wheel idle timeout.
24866             if (g.wheel) {
24867               if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
24868                 g.mouse[1] = t.invert(g.mouse[0] = p);
24869               }
24870               clearTimeout(g.wheel);
24871             }
24872
24873             // If this wheel event won’t trigger a transform change, ignore it.
24874             else if (t.k === k) { return; }
24875
24876             // Otherwise, capture the mouse point and location at the start.
24877             else {
24878               g.mouse = [p, t.invert(p)];
24879               interrupt(this);
24880               g.start();
24881             }
24882
24883             noevent$2();
24884             g.wheel = setTimeout(wheelidled, wheelDelay);
24885             g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));
24886
24887             function wheelidled() {
24888               g.wheel = null;
24889               g.end();
24890             }
24891           }
24892
24893           function mousedowned() {
24894             if (touchending || !filter.apply(this, arguments)) { return; }
24895             var g = gesture(this, arguments, true),
24896                 v = d3_select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
24897                 p = d3_mouse(this),
24898                 x0 = event.clientX,
24899                 y0 = event.clientY;
24900
24901             dragDisable(event.view);
24902             nopropagation$2();
24903             g.mouse = [p, this.__zoom.invert(p)];
24904             interrupt(this);
24905             g.start();
24906
24907             function mousemoved() {
24908               noevent$2();
24909               if (!g.moved) {
24910                 var dx = event.clientX - x0, dy = event.clientY - y0;
24911                 g.moved = dx * dx + dy * dy > clickDistance2;
24912               }
24913               g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = d3_mouse(g.that), g.mouse[1]), g.extent, translateExtent));
24914             }
24915
24916             function mouseupped() {
24917               v.on("mousemove.zoom mouseup.zoom", null);
24918               yesdrag(event.view, g.moved);
24919               noevent$2();
24920               g.end();
24921             }
24922           }
24923
24924           function dblclicked() {
24925             if (!filter.apply(this, arguments)) { return; }
24926             var t0 = this.__zoom,
24927                 p0 = d3_mouse(this),
24928                 p1 = t0.invert(p0),
24929                 k1 = t0.k * (event.shiftKey ? 0.5 : 2),
24930                 t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);
24931
24932             noevent$2();
24933             if (duration > 0) { d3_select(this).transition().duration(duration).call(schedule, t1, p0); }
24934             else { d3_select(this).call(zoom.transform, t1); }
24935           }
24936
24937           function touchstarted() {
24938             if (!filter.apply(this, arguments)) { return; }
24939             var touches = event.touches,
24940                 n = touches.length,
24941                 g = gesture(this, arguments, event.changedTouches.length === n),
24942                 started, i, t, p;
24943
24944             nopropagation$2();
24945             for (i = 0; i < n; ++i) {
24946               t = touches[i], p = touch(this, touches, t.identifier);
24947               p = [p, this.__zoom.invert(p), t.identifier];
24948               if (!g.touch0) { g.touch0 = p, started = true, g.taps = 1 + !!touchstarting; }
24949               else if (!g.touch1 && g.touch0[2] !== p[2]) { g.touch1 = p, g.taps = 0; }
24950             }
24951
24952             if (touchstarting) { touchstarting = clearTimeout(touchstarting); }
24953
24954             if (started) {
24955               if (g.taps < 2) { touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); }
24956               interrupt(this);
24957               g.start();
24958             }
24959           }
24960
24961           function touchmoved() {
24962             if (!this.__zooming) { return; }
24963             var g = gesture(this, arguments),
24964                 touches = event.changedTouches,
24965                 n = touches.length, i, t, p, l;
24966
24967             noevent$2();
24968             if (touchstarting) { touchstarting = clearTimeout(touchstarting); }
24969             g.taps = 0;
24970             for (i = 0; i < n; ++i) {
24971               t = touches[i], p = touch(this, touches, t.identifier);
24972               if (g.touch0 && g.touch0[2] === t.identifier) { g.touch0[0] = p; }
24973               else if (g.touch1 && g.touch1[2] === t.identifier) { g.touch1[0] = p; }
24974             }
24975             t = g.that.__zoom;
24976             if (g.touch1) {
24977               var p0 = g.touch0[0], l0 = g.touch0[1],
24978                   p1 = g.touch1[0], l1 = g.touch1[1],
24979                   dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
24980                   dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
24981               t = scale(t, Math.sqrt(dp / dl));
24982               p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
24983               l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
24984             }
24985             else if (g.touch0) { p = g.touch0[0], l = g.touch0[1]; }
24986             else { return; }
24987             g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent));
24988           }
24989
24990           function touchended() {
24991             if (!this.__zooming) { return; }
24992             var g = gesture(this, arguments),
24993                 touches = event.changedTouches,
24994                 n = touches.length, i, t;
24995
24996             nopropagation$2();
24997             if (touchending) { clearTimeout(touchending); }
24998             touchending = setTimeout(function() { touchending = null; }, touchDelay);
24999             for (i = 0; i < n; ++i) {
25000               t = touches[i];
25001               if (g.touch0 && g.touch0[2] === t.identifier) { delete g.touch0; }
25002               else if (g.touch1 && g.touch1[2] === t.identifier) { delete g.touch1; }
25003             }
25004             if (g.touch1 && !g.touch0) { g.touch0 = g.touch1, delete g.touch1; }
25005             if (g.touch0) { g.touch0[1] = this.__zoom.invert(g.touch0[0]); }
25006             else {
25007               g.end();
25008               // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.
25009               if (g.taps === 2) {
25010                 var p = d3_select(this).on("dblclick.zoom");
25011                 if (p) { p.apply(this, arguments); }
25012               }
25013             }
25014           }
25015
25016           zoom.wheelDelta = function(_) {
25017             return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant$d(+_), zoom) : wheelDelta;
25018           };
25019
25020           zoom.filter = function(_) {
25021             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$d(!!_), zoom) : filter;
25022           };
25023
25024           zoom.touchable = function(_) {
25025             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$d(!!_), zoom) : touchable;
25026           };
25027
25028           zoom.extent = function(_) {
25029             return arguments.length ? (extent = typeof _ === "function" ? _ : constant$d([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
25030           };
25031
25032           zoom.scaleExtent = function(_) {
25033             return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];
25034           };
25035
25036           zoom.translateExtent = function(_) {
25037             return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];
25038           };
25039
25040           zoom.constrain = function(_) {
25041             return arguments.length ? (constrain = _, zoom) : constrain;
25042           };
25043
25044           zoom.duration = function(_) {
25045             return arguments.length ? (duration = +_, zoom) : duration;
25046           };
25047
25048           zoom.interpolate = function(_) {
25049             return arguments.length ? (interpolate = _, zoom) : interpolate;
25050           };
25051
25052           zoom.on = function() {
25053             var value = listeners.on.apply(listeners, arguments);
25054             return value === listeners ? zoom : value;
25055           };
25056
25057           zoom.clickDistance = function(_) {
25058             return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);
25059           };
25060
25061           return zoom;
25062         }
25063
25064
25065
25066         var index$3 = /*#__PURE__*/Object.freeze({
25067                 __proto__: null,
25068                 version: version,
25069                 bisect: bisectRight,
25070                 bisectRight: bisectRight,
25071                 bisectLeft: bisectLeft,
25072                 ascending: d3_ascending,
25073                 bisector: d3_bisector,
25074                 cross: cross,
25075                 descending: d3_descending,
25076                 deviation: deviation,
25077                 extent: extent,
25078                 histogram: histogram,
25079                 thresholdFreedmanDiaconis: freedmanDiaconis,
25080                 thresholdScott: scott,
25081                 thresholdSturges: thresholdSturges,
25082                 max: max$2,
25083                 mean: mean,
25084                 median: d3_median,
25085                 merge: merge,
25086                 min: min,
25087                 pairs: pairs,
25088                 permute: permute,
25089                 quantile: threshold,
25090                 range: d3_range,
25091                 scan: scan,
25092                 shuffle: shuffle,
25093                 sum: sum,
25094                 ticks: ticks,
25095                 tickIncrement: tickIncrement,
25096                 tickStep: tickStep,
25097                 transpose: transpose,
25098                 variance: variance,
25099                 zip: zip,
25100                 axisTop: axisTop,
25101                 axisRight: axisRight,
25102                 axisBottom: axisBottom,
25103                 axisLeft: axisLeft,
25104                 brush: brush,
25105                 brushX: brushX,
25106                 brushY: brushY,
25107                 brushSelection: brushSelection,
25108                 chord: chord,
25109                 ribbon: ribbon,
25110                 nest: nest,
25111                 set: set$2,
25112                 map: map$3,
25113                 keys: keys$3,
25114                 values: values,
25115                 entries: entries,
25116                 color: color,
25117                 rgb: rgb,
25118                 hsl: hsl,
25119                 lab: lab,
25120                 hcl: hcl,
25121                 lch: lch,
25122                 gray: gray,
25123                 cubehelix: cubehelix,
25124                 contours: contours,
25125                 contourDensity: density,
25126                 dispatch: dispatch,
25127                 drag: d3_drag,
25128                 dragDisable: dragDisable,
25129                 dragEnable: yesdrag,
25130                 dsvFormat: dsvFormat,
25131                 csvParse: csvParse,
25132                 csvParseRows: csvParseRows,
25133                 csvFormat: csvFormat,
25134                 csvFormatBody: csvFormatBody,
25135                 csvFormatRows: csvFormatRows,
25136                 csvFormatRow: csvFormatRow,
25137                 csvFormatValue: csvFormatValue,
25138                 tsvParse: tsvParse,
25139                 tsvParseRows: tsvParseRows,
25140                 tsvFormat: tsvFormat,
25141                 tsvFormatBody: tsvFormatBody,
25142                 tsvFormatRows: tsvFormatRows,
25143                 tsvFormatRow: tsvFormatRow,
25144                 tsvFormatValue: tsvFormatValue,
25145                 autoType: autoType,
25146                 easeLinear: linear$1,
25147                 easeQuad: quadInOut,
25148                 easeQuadIn: quadIn,
25149                 easeQuadOut: quadOut,
25150                 easeQuadInOut: quadInOut,
25151                 easeCubic: cubicInOut,
25152                 easeCubicIn: cubicIn,
25153                 easeCubicOut: cubicOut,
25154                 easeCubicInOut: cubicInOut,
25155                 easePoly: polyInOut,
25156                 easePolyIn: polyIn,
25157                 easePolyOut: polyOut,
25158                 easePolyInOut: polyInOut,
25159                 easeSin: sinInOut,
25160                 easeSinIn: sinIn,
25161                 easeSinOut: sinOut,
25162                 easeSinInOut: sinInOut,
25163                 easeExp: expInOut,
25164                 easeExpIn: expIn,
25165                 easeExpOut: expOut,
25166                 easeExpInOut: expInOut,
25167                 easeCircle: circleInOut,
25168                 easeCircleIn: circleIn,
25169                 easeCircleOut: circleOut,
25170                 easeCircleInOut: circleInOut,
25171                 easeBounce: bounceOut,
25172                 easeBounceIn: bounceIn,
25173                 easeBounceOut: bounceOut,
25174                 easeBounceInOut: bounceInOut,
25175                 easeBack: backInOut,
25176                 easeBackIn: backIn,
25177                 easeBackOut: backOut,
25178                 easeBackInOut: backInOut,
25179                 easeElastic: elasticOut,
25180                 easeElasticIn: elasticIn,
25181                 easeElasticOut: elasticOut,
25182                 easeElasticInOut: elasticInOut,
25183                 blob: blob,
25184                 buffer: buffer,
25185                 dsv: dsv,
25186                 csv: csv$1,
25187                 tsv: tsv$1,
25188                 image: image,
25189                 json: d3_json,
25190                 text: d3_text,
25191                 xml: d3_xml,
25192                 html: html,
25193                 svg: svg,
25194                 forceCenter: center$1,
25195                 forceCollide: collide,
25196                 forceLink: link,
25197                 forceManyBody: manyBody,
25198                 forceRadial: radial,
25199                 forceSimulation: simulation,
25200                 forceX: x$2,
25201                 forceY: y$2,
25202                 formatDefaultLocale: defaultLocale,
25203                 get format () { return format; },
25204                 get formatPrefix () { return formatPrefix; },
25205                 formatLocale: formatLocale,
25206                 formatSpecifier: formatSpecifier,
25207                 FormatSpecifier: FormatSpecifier,
25208                 precisionFixed: precisionFixed,
25209                 precisionPrefix: precisionPrefix,
25210                 precisionRound: precisionRound,
25211                 geoArea: d3_geoArea,
25212                 geoBounds: d3_geoBounds,
25213                 geoCentroid: d3_geoCentroid,
25214                 geoCircle: circle,
25215                 geoClipAntimeridian: clipAntimeridian,
25216                 geoClipCircle: clipCircle,
25217                 geoClipExtent: extent$1,
25218                 geoClipRectangle: clipRectangle,
25219                 geoContains: contains$2,
25220                 geoDistance: distance,
25221                 geoGraticule: graticule,
25222                 geoGraticule10: graticule10,
25223                 geoInterpolate: interpolate$1,
25224                 geoLength: d3_geoLength,
25225                 geoPath: d3_geoPath,
25226                 geoAlbers: albers,
25227                 geoAlbersUsa: albersUsa,
25228                 geoAzimuthalEqualArea: azimuthalEqualArea,
25229                 geoAzimuthalEqualAreaRaw: azimuthalEqualAreaRaw,
25230                 geoAzimuthalEquidistant: azimuthalEquidistant,
25231                 geoAzimuthalEquidistantRaw: azimuthalEquidistantRaw,
25232                 geoConicConformal: conicConformal,
25233                 geoConicConformalRaw: conicConformalRaw,
25234                 geoConicEqualArea: conicEqualArea,
25235                 geoConicEqualAreaRaw: conicEqualAreaRaw,
25236                 geoConicEquidistant: conicEquidistant,
25237                 geoConicEquidistantRaw: conicEquidistantRaw,
25238                 geoEqualEarth: equalEarth,
25239                 geoEqualEarthRaw: equalEarthRaw,
25240                 geoEquirectangular: equirectangular,
25241                 geoEquirectangularRaw: equirectangularRaw,
25242                 geoGnomonic: gnomonic,
25243                 geoGnomonicRaw: gnomonicRaw,
25244                 geoIdentity: d3_geoIdentity,
25245                 geoProjection: projection,
25246                 geoProjectionMutator: projectionMutator,
25247                 geoMercator: mercator,
25248                 geoMercatorRaw: mercatorRaw,
25249                 geoNaturalEarth1: naturalEarth1,
25250                 geoNaturalEarth1Raw: naturalEarth1Raw,
25251                 geoOrthographic: orthographic,
25252                 geoOrthographicRaw: orthographicRaw,
25253                 geoStereographic: stereographic,
25254                 geoStereographicRaw: stereographicRaw,
25255                 geoTransverseMercator: transverseMercator,
25256                 geoTransverseMercatorRaw: transverseMercatorRaw,
25257                 geoRotation: rotation,
25258                 geoStream: d3_geoStream,
25259                 geoTransform: d3_geoTransform,
25260                 cluster: cluster,
25261                 hierarchy: hierarchy,
25262                 pack: index$1,
25263                 packSiblings: siblings,
25264                 packEnclose: enclose,
25265                 partition: partition,
25266                 stratify: stratify,
25267                 tree: tree,
25268                 treemap: index$2,
25269                 treemapBinary: binary,
25270                 treemapDice: treemapDice,
25271                 treemapSlice: treemapSlice,
25272                 treemapSliceDice: sliceDice,
25273                 treemapSquarify: squarify,
25274                 treemapResquarify: resquarify,
25275                 interpolate: d3_interpolate,
25276                 interpolateArray: array$2,
25277                 interpolateBasis: basis$1,
25278                 interpolateBasisClosed: basisClosed,
25279                 interpolateDate: date,
25280                 interpolateDiscrete: discrete,
25281                 interpolateHue: hue$1,
25282                 interpolateNumber: d3_interpolateNumber,
25283                 interpolateNumberArray: numberArray,
25284                 interpolateObject: object,
25285                 interpolateRound: interpolateRound,
25286                 interpolateString: interpolateString,
25287                 interpolateTransformCss: interpolateTransformCss,
25288                 interpolateTransformSvg: interpolateTransformSvg,
25289                 interpolateZoom: interpolateZoom,
25290                 interpolateRgb: d3_interpolateRgb,
25291                 interpolateRgbBasis: rgbBasis,
25292                 interpolateRgbBasisClosed: rgbBasisClosed,
25293                 interpolateHsl: hsl$2,
25294                 interpolateHslLong: hslLong,
25295                 interpolateLab: lab$1,
25296                 interpolateHcl: hcl$2,
25297                 interpolateHclLong: hclLong,
25298                 interpolateCubehelix: cubehelix$2,
25299                 interpolateCubehelixLong: cubehelixLong,
25300                 piecewise: piecewise,
25301                 quantize: d3_quantize,
25302                 path: path,
25303                 polygonArea: d3_polygonArea,
25304                 polygonCentroid: d3_polygonCentroid,
25305                 polygonHull: d3_polygonHull,
25306                 polygonContains: contains$3,
25307                 polygonLength: length$1,
25308                 quadtree: quadtree,
25309                 randomUniform: uniform,
25310                 randomNormal: normal,
25311                 randomLogNormal: logNormal,
25312                 randomBates: bates,
25313                 randomIrwinHall: irwinHall,
25314                 randomExponential: exponential$1,
25315                 scaleBand: band,
25316                 scalePoint: point$1,
25317                 scaleIdentity: identity$6,
25318                 scaleLinear: linear$2,
25319                 scaleLog: log$1,
25320                 scaleSymlog: symlog,
25321                 scaleOrdinal: ordinal,
25322                 scaleImplicit: implicit,
25323                 scalePow: pow$1,
25324                 scaleSqrt: sqrt$1,
25325                 scaleQuantile: quantile,
25326                 scaleQuantize: quantize,
25327                 scaleThreshold: threshold$1,
25328                 scaleTime: time,
25329                 scaleUtc: utcTime,
25330                 scaleSequential: sequential,
25331                 scaleSequentialLog: sequentialLog,
25332                 scaleSequentialPow: sequentialPow,
25333                 scaleSequentialSqrt: sequentialSqrt,
25334                 scaleSequentialSymlog: sequentialSymlog,
25335                 scaleSequentialQuantile: sequentialQuantile,
25336                 scaleDiverging: diverging,
25337                 scaleDivergingLog: divergingLog,
25338                 scaleDivergingPow: divergingPow,
25339                 scaleDivergingSqrt: divergingSqrt,
25340                 scaleDivergingSymlog: divergingSymlog,
25341                 tickFormat: tickFormat,
25342                 schemeCategory10: category10,
25343                 schemeAccent: Accent,
25344                 schemeDark2: Dark2,
25345                 schemePaired: Paired,
25346                 schemePastel1: Pastel1,
25347                 schemePastel2: Pastel2,
25348                 schemeSet1: Set1,
25349                 schemeSet2: Set2,
25350                 schemeSet3: Set3,
25351                 schemeTableau10: Tableau10,
25352                 interpolateBrBG: BrBG,
25353                 schemeBrBG: scheme,
25354                 interpolatePRGn: PRGn,
25355                 schemePRGn: scheme$1,
25356                 interpolatePiYG: PiYG,
25357                 schemePiYG: scheme$2,
25358                 interpolatePuOr: PuOr,
25359                 schemePuOr: scheme$3,
25360                 interpolateRdBu: RdBu,
25361                 schemeRdBu: scheme$4,
25362                 interpolateRdGy: RdGy,
25363                 schemeRdGy: scheme$5,
25364                 interpolateRdYlBu: RdYlBu,
25365                 schemeRdYlBu: scheme$6,
25366                 interpolateRdYlGn: RdYlGn,
25367                 schemeRdYlGn: scheme$7,
25368                 interpolateSpectral: Spectral,
25369                 schemeSpectral: scheme$8,
25370                 interpolateBuGn: BuGn,
25371                 schemeBuGn: scheme$9,
25372                 interpolateBuPu: BuPu,
25373                 schemeBuPu: scheme$a,
25374                 interpolateGnBu: GnBu,
25375                 schemeGnBu: scheme$b,
25376                 interpolateOrRd: OrRd,
25377                 schemeOrRd: scheme$c,
25378                 interpolatePuBuGn: PuBuGn,
25379                 schemePuBuGn: scheme$d,
25380                 interpolatePuBu: PuBu,
25381                 schemePuBu: scheme$e,
25382                 interpolatePuRd: PuRd,
25383                 schemePuRd: scheme$f,
25384                 interpolateRdPu: RdPu,
25385                 schemeRdPu: scheme$g,
25386                 interpolateYlGnBu: YlGnBu,
25387                 schemeYlGnBu: scheme$h,
25388                 interpolateYlGn: YlGn,
25389                 schemeYlGn: scheme$i,
25390                 interpolateYlOrBr: YlOrBr,
25391                 schemeYlOrBr: scheme$j,
25392                 interpolateYlOrRd: YlOrRd,
25393                 schemeYlOrRd: scheme$k,
25394                 interpolateBlues: Blues,
25395                 schemeBlues: scheme$l,
25396                 interpolateGreens: Greens,
25397                 schemeGreens: scheme$m,
25398                 interpolateGreys: Greys,
25399                 schemeGreys: scheme$n,
25400                 interpolatePurples: Purples,
25401                 schemePurples: scheme$o,
25402                 interpolateReds: Reds,
25403                 schemeReds: scheme$p,
25404                 interpolateOranges: Oranges,
25405                 schemeOranges: scheme$q,
25406                 interpolateCividis: cividis,
25407                 interpolateCubehelixDefault: cubehelix$3,
25408                 interpolateRainbow: rainbow,
25409                 interpolateWarm: warm,
25410                 interpolateCool: cool,
25411                 interpolateSinebow: sinebow,
25412                 interpolateTurbo: turbo,
25413                 interpolateViridis: viridis,
25414                 interpolateMagma: magma,
25415                 interpolateInferno: inferno,
25416                 interpolatePlasma: plasma,
25417                 create: create$7,
25418                 creator: creator,
25419                 local: local,
25420                 matcher: matcher,
25421                 mouse: d3_mouse,
25422                 namespace: namespace,
25423                 namespaces: namespaces,
25424                 clientPoint: point,
25425                 select: d3_select,
25426                 selectAll: d3_selectAll,
25427                 selection: selection,
25428                 selector: selector,
25429                 selectorAll: selectorAll,
25430                 style: styleValue,
25431                 touch: touch,
25432                 touches: d3_touches,
25433                 window: defaultView,
25434                 get event () { return event; },
25435                 customEvent: customEvent,
25436                 arc: arc,
25437                 area: area$1,
25438                 line: line,
25439                 pie: pie,
25440                 areaRadial: areaRadial,
25441                 radialArea: areaRadial,
25442                 lineRadial: lineRadial$1,
25443                 radialLine: lineRadial$1,
25444                 pointRadial: pointRadial,
25445                 linkHorizontal: linkHorizontal,
25446                 linkVertical: linkVertical,
25447                 linkRadial: linkRadial,
25448                 symbol: symbol,
25449                 symbols: symbols,
25450                 symbolCircle: circle$2,
25451                 symbolCross: cross$2,
25452                 symbolDiamond: diamond,
25453                 symbolSquare: square,
25454                 symbolStar: star,
25455                 symbolTriangle: triangle,
25456                 symbolWye: wye,
25457                 curveBasisClosed: basisClosed$1,
25458                 curveBasisOpen: basisOpen,
25459                 curveBasis: basis$2,
25460                 curveBundle: bundle,
25461                 curveCardinalClosed: cardinalClosed,
25462                 curveCardinalOpen: cardinalOpen,
25463                 curveCardinal: cardinal,
25464                 curveCatmullRomClosed: catmullRomClosed,
25465                 curveCatmullRomOpen: catmullRomOpen,
25466                 curveCatmullRom: catmullRom,
25467                 curveLinearClosed: linearClosed,
25468                 curveLinear: curveLinear,
25469                 curveMonotoneX: monotoneX,
25470                 curveMonotoneY: monotoneY,
25471                 curveNatural: natural,
25472                 curveStep: step,
25473                 curveStepAfter: stepAfter,
25474                 curveStepBefore: stepBefore,
25475                 stack: stack,
25476                 stackOffsetExpand: expand,
25477                 stackOffsetDiverging: diverging$1,
25478                 stackOffsetNone: none$1,
25479                 stackOffsetSilhouette: silhouette,
25480                 stackOffsetWiggle: wiggle,
25481                 stackOrderAppearance: appearance,
25482                 stackOrderAscending: ascending$2,
25483                 stackOrderDescending: descending$1,
25484                 stackOrderInsideOut: insideOut,
25485                 stackOrderNone: none$2,
25486                 stackOrderReverse: reverse,
25487                 timeInterval: newInterval,
25488                 timeMillisecond: millisecond,
25489                 timeMilliseconds: milliseconds,
25490                 utcMillisecond: millisecond,
25491                 utcMilliseconds: milliseconds,
25492                 timeSecond: second,
25493                 timeSeconds: seconds,
25494                 utcSecond: second,
25495                 utcSeconds: seconds,
25496                 timeMinute: minute,
25497                 timeMinutes: minutes,
25498                 timeHour: hour,
25499                 timeHours: hours,
25500                 timeDay: day,
25501                 timeDays: days,
25502                 timeWeek: sunday,
25503                 timeWeeks: sundays,
25504                 timeSunday: sunday,
25505                 timeSundays: sundays,
25506                 timeMonday: monday,
25507                 timeMondays: mondays,
25508                 timeTuesday: tuesday,
25509                 timeTuesdays: tuesdays,
25510                 timeWednesday: wednesday,
25511                 timeWednesdays: wednesdays,
25512                 timeThursday: thursday,
25513                 timeThursdays: thursdays,
25514                 timeFriday: friday,
25515                 timeFridays: fridays,
25516                 timeSaturday: saturday,
25517                 timeSaturdays: saturdays,
25518                 timeMonth: month,
25519                 timeMonths: months,
25520                 timeYear: year,
25521                 timeYears: years,
25522                 utcMinute: utcMinute,
25523                 utcMinutes: utcMinutes,
25524                 utcHour: utcHour,
25525                 utcHours: utcHours,
25526                 utcDay: utcDay,
25527                 utcDays: utcDays,
25528                 utcWeek: utcSunday,
25529                 utcWeeks: utcSundays,
25530                 utcSunday: utcSunday,
25531                 utcSundays: utcSundays,
25532                 utcMonday: utcMonday,
25533                 utcMondays: utcMondays,
25534                 utcTuesday: utcTuesday,
25535                 utcTuesdays: utcTuesdays,
25536                 utcWednesday: utcWednesday,
25537                 utcWednesdays: utcWednesdays,
25538                 utcThursday: utcThursday,
25539                 utcThursdays: utcThursdays,
25540                 utcFriday: utcFriday,
25541                 utcFridays: utcFridays,
25542                 utcSaturday: utcSaturday,
25543                 utcSaturdays: utcSaturdays,
25544                 utcMonth: utcMonth,
25545                 utcMonths: utcMonths,
25546                 utcYear: utcYear,
25547                 utcYears: utcYears,
25548                 timeFormatDefaultLocale: defaultLocale$1,
25549                 get timeFormat () { return timeFormat; },
25550                 get timeParse () { return timeParse; },
25551                 get utcFormat () { return utcFormat; },
25552                 get utcParse () { return utcParse; },
25553                 timeFormatLocale: formatLocale$1,
25554                 isoFormat: formatIso,
25555                 isoParse: parseIso,
25556                 now: now,
25557                 timer: timer,
25558                 timerFlush: timerFlush,
25559                 timeout: d3_timeout,
25560                 interval: interval$1,
25561                 transition: transition,
25562                 active: active,
25563                 interrupt: interrupt,
25564                 voronoi: voronoi,
25565                 zoom: d3_zoom,
25566                 zoomTransform: transform,
25567                 zoomIdentity: identity$8
25568         });
25569
25570         function actionAddEntity(way) {
25571             return function(graph) {
25572                 return graph.replace(way);
25573             };
25574         }
25575
25576         /*
25577         Order the nodes of a way in reverse order and reverse any direction dependent tags
25578         other than `oneway`. (We assume that correcting a backwards oneway is the primary
25579         reason for reversing a way.)
25580
25581         In addition, numeric-valued `incline` tags are negated.
25582
25583         The JOSM implementation was used as a guide, but transformations that were of unclear benefit
25584         or adjusted tags that don't seem to be used in practice were omitted.
25585
25586         References:
25587             http://wiki.openstreetmap.org/wiki/Forward_%26_backward,_left_%26_right
25588             http://wiki.openstreetmap.org/wiki/Key:direction#Steps
25589             http://wiki.openstreetmap.org/wiki/Key:incline
25590             http://wiki.openstreetmap.org/wiki/Route#Members
25591             http://josm.openstreetmap.de/browser/josm/trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
25592             http://wiki.openstreetmap.org/wiki/Tag:highway%3Dstop
25593             http://wiki.openstreetmap.org/wiki/Key:traffic_sign#On_a_way_or_area
25594         */
25595         function actionReverse(entityID, options) {
25596             var ignoreKey = /^.*(_|:)?(description|name|note|website|ref|source|comment|watch|attribution)(_|:)?/;
25597             var numeric = /^([+\-]?)(?=[\d.])/;
25598             var directionKey = /direction$/;
25599             var turn_lanes = /^turn:lanes:?/;
25600             var keyReplacements = [
25601                 [/:right$/, ':left'],
25602                 [/:left$/, ':right'],
25603                 [/:forward$/, ':backward'],
25604                 [/:backward$/, ':forward'],
25605                 [/:right:/, ':left:'],
25606                 [/:left:/, ':right:'],
25607                 [/:forward:/, ':backward:'],
25608                 [/:backward:/, ':forward:']
25609             ];
25610             var valueReplacements = {
25611                 left: 'right',
25612                 right: 'left',
25613                 up: 'down',
25614                 down: 'up',
25615                 forward: 'backward',
25616                 backward: 'forward',
25617                 forwards: 'backward',
25618                 backwards: 'forward',
25619             };
25620             var roleReplacements = {
25621                 forward: 'backward',
25622                 backward: 'forward',
25623                 forwards: 'backward',
25624                 backwards: 'forward'
25625             };
25626             var onewayReplacements = {
25627                 yes: '-1',
25628                 '1': '-1',
25629                 '-1': 'yes'
25630             };
25631
25632             var compassReplacements = {
25633                 N: 'S',
25634                 NNE: 'SSW',
25635                 NE: 'SW',
25636                 ENE: 'WSW',
25637                 E: 'W',
25638                 ESE: 'WNW',
25639                 SE: 'NW',
25640                 SSE: 'NNW',
25641                 S: 'N',
25642                 SSW: 'NNE',
25643                 SW: 'NE',
25644                 WSW: 'ENE',
25645                 W: 'E',
25646                 WNW: 'ESE',
25647                 NW: 'SE',
25648                 NNW: 'SSE'
25649             };
25650
25651
25652             function reverseKey(key) {
25653                 for (var i = 0; i < keyReplacements.length; ++i) {
25654                     var replacement = keyReplacements[i];
25655                     if (replacement[0].test(key)) {
25656                         return key.replace(replacement[0], replacement[1]);
25657                     }
25658                 }
25659                 return key;
25660             }
25661
25662
25663             function reverseValue(key, value, includeAbsolute) {
25664                 if (ignoreKey.test(key)) { return value; }
25665
25666                 // Turn lanes are left/right to key (not way) direction - #5674
25667                 if (turn_lanes.test(key)) {
25668                     return value;
25669
25670                 } else if (key === 'incline' && numeric.test(value)) {
25671                     return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; });
25672
25673                 } else if (options && options.reverseOneway && key === 'oneway') {
25674                     return onewayReplacements[value] || value;
25675
25676                 } else if (includeAbsolute && directionKey.test(key)) {
25677                     if (compassReplacements[value]) { return compassReplacements[value]; }
25678
25679                     var degrees = parseFloat(value);
25680                     if (typeof degrees === 'number' && !isNaN(degrees)) {
25681                         if (degrees < 180) {
25682                             degrees += 180;
25683                         } else {
25684                             degrees -= 180;
25685                         }
25686                         return degrees.toString();
25687                     }
25688                 }
25689
25690                 return valueReplacements[value] || value;
25691             }
25692
25693
25694             // Reverse the direction of tags attached to the nodes - #3076
25695             function reverseNodeTags(graph, nodeIDs) {
25696                 for (var i = 0; i < nodeIDs.length; i++) {
25697                     var node = graph.hasEntity(nodeIDs[i]);
25698                     if (!node || !Object.keys(node.tags).length) { continue; }
25699
25700                     var tags = {};
25701                     for (var key in node.tags) {
25702                         tags[reverseKey(key)] = reverseValue(key, node.tags[key], node.id === entityID);
25703                     }
25704                     graph = graph.replace(node.update({tags: tags}));
25705                 }
25706                 return graph;
25707             }
25708
25709
25710             function reverseWay(graph, way) {
25711                 var nodes = way.nodes.slice().reverse();
25712                 var tags = {};
25713                 var role;
25714
25715                 for (var key in way.tags) {
25716                     tags[reverseKey(key)] = reverseValue(key, way.tags[key]);
25717                 }
25718
25719                 graph.parentRelations(way).forEach(function(relation) {
25720                     relation.members.forEach(function(member, index) {
25721                         if (member.id === way.id && (role = roleReplacements[member.role])) {
25722                             relation = relation.updateMember({role: role}, index);
25723                             graph = graph.replace(relation);
25724                         }
25725                     });
25726                 });
25727
25728                 // Reverse any associated directions on nodes on the way and then replace
25729                 // the way itself with the reversed node ids and updated way tags
25730                 return reverseNodeTags(graph, nodes)
25731                     .replace(way.update({nodes: nodes, tags: tags}));
25732             }
25733
25734
25735             var action = function(graph) {
25736                 var entity = graph.entity(entityID);
25737                 if (entity.type === 'way') {
25738                     return reverseWay(graph, entity);
25739                 }
25740                 return reverseNodeTags(graph, [entityID]);
25741             };
25742
25743             action.disabled = function(graph) {
25744                 var entity = graph.hasEntity(entityID);
25745                 if (!entity || entity.type === 'way') { return false; }
25746
25747                 for (var key in entity.tags) {
25748                     var value = entity.tags[key];
25749                     if (reverseKey(key) !== key || reverseValue(key, value, true) !== value) {
25750                         return false;
25751                     }
25752                 }
25753                 return 'nondirectional_node';
25754             };
25755
25756             action.entityID = function() {
25757                 return entityID;
25758             };
25759
25760             return action;
25761         }
25762
25763         function osmIsInterestingTag(key) {
25764             return key !== 'attribution' &&
25765                 key !== 'created_by' &&
25766                 key !== 'source' &&
25767                 key !== 'odbl' &&
25768                 key.indexOf('source:') !== 0 &&
25769                 key.indexOf('source_ref') !== 0 && // purposely exclude colon
25770                 key.indexOf('tiger:') !== 0;
25771         }
25772
25773         var osmAreaKeys = {};
25774         function osmSetAreaKeys(value) {
25775             osmAreaKeys = value;
25776         }
25777
25778         // Tags that indicate a node can be a standalone point
25779         // e.g. { amenity: { bar: true, parking: true, ... } ... }
25780         var osmPointTags = {};
25781         function osmSetPointTags(value) {
25782             osmPointTags = value;
25783         }
25784         // Tags that indicate a node can be part of a way
25785         // e.g. { amenity: { parking: true, ... }, highway: { stop: true ... } ... }
25786         var osmVertexTags = {};
25787         function osmSetVertexTags(value) {
25788             osmVertexTags = value;
25789         }
25790
25791         function osmNodeGeometriesForTags(nodeTags) {
25792             var geometries = {};
25793             for (var key in nodeTags) {
25794                 if (osmPointTags[key] &&
25795                     (osmPointTags[key]['*'] || osmPointTags[key][nodeTags[key]])) {
25796                     geometries.point = true;
25797                 }
25798                 if (osmVertexTags[key] &&
25799                     (osmVertexTags[key]['*'] || osmVertexTags[key][nodeTags[key]])) {
25800                     geometries.vertex = true;
25801                 }
25802                 // break early if both are already supported
25803                 if (geometries.point && geometries.vertex) { break; }
25804             }
25805             return geometries;
25806         }
25807
25808         var osmOneWayTags = {
25809             'aerialway': {
25810                 'chair_lift': true,
25811                 'drag_lift': true,
25812                 'j-bar': true,
25813                 'magic_carpet': true,
25814                 'mixed_lift': true,
25815                 'platter': true,
25816                 'rope_tow': true,
25817                 't-bar': true,
25818                 'zip_line': true
25819             },
25820             'highway': {
25821                 'motorway': true
25822             },
25823             'junction': {
25824                 'circular': true,
25825                 'roundabout': true
25826             },
25827             'man_made': {
25828                 'piste:halfpipe': true
25829             },
25830             'piste:type': {
25831                 'downhill': true,
25832                 'sled': true,
25833                 'yes': true
25834             },
25835             'waterway': {
25836                 'canal': true,
25837                 'ditch': true,
25838                 'drain': true,
25839                 'fish_pass': true,
25840                 'river': true,
25841                 'stream': true,
25842                 'tidal_channel': true
25843             }
25844         };
25845
25846
25847         var osmPavedTags = {
25848             'surface': {
25849                 'paved': true,
25850                 'asphalt': true,
25851                 'concrete': true,
25852                 'concrete:lanes': true,
25853                 'concrete:plates': true
25854             },
25855             'tracktype': {
25856                 'grade1': true
25857             }
25858         };
25859
25860         var osmRightSideIsInsideTags = {
25861             'natural': {
25862                 'cliff': true,
25863                 'coastline': 'coastline',
25864             },
25865             'barrier': {
25866                 'retaining_wall': true,
25867                 'kerb': true,
25868                 'guard_rail': true,
25869                 'city_wall': true,
25870             },
25871             'man_made': {
25872                 'embankment': true
25873             },
25874             'waterway': {
25875                 'weir': true
25876             }
25877         };
25878
25879         // "highway" tag values for pedestrian or vehicle right-of-ways that make up the routable network
25880         // (does not include `raceway`)
25881         var osmRoutableHighwayTagValues = {
25882             motorway: true, trunk: true, primary: true, secondary: true, tertiary: true, residential: true,
25883             motorway_link: true, trunk_link: true, primary_link: true, secondary_link: true, tertiary_link: true,
25884             unclassified: true, road: true, service: true, track: true, living_street: true, bus_guideway: true,
25885             path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
25886         };
25887         // "highway" tag values that generally do not allow motor vehicles
25888         var osmPathHighwayTagValues = {
25889             path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
25890         };
25891
25892         // "railway" tag values representing existing railroad tracks (purposely does not include 'abandoned')
25893         var osmRailwayTrackTagValues = {
25894             rail: true, light_rail: true, tram: true, subway: true,
25895             monorail: true, funicular: true, miniature: true, narrow_gauge: true,
25896             disused: true, preserved: true
25897         };
25898
25899         // "waterway" tag values for line features representing water flow
25900         var osmFlowingWaterwayTagValues = {
25901             canal: true, ditch: true, drain: true, fish_pass: true, river: true, stream: true, tidal_channel: true
25902         };
25903
25904         // constants
25905         var TAU = 2 * Math.PI;
25906         var EQUATORIAL_RADIUS = 6356752.314245179;
25907         var POLAR_RADIUS = 6378137.0;
25908
25909
25910         function geoLatToMeters(dLat) {
25911             return dLat * (TAU * POLAR_RADIUS / 360);
25912         }
25913
25914
25915         function geoLonToMeters(dLon, atLat) {
25916             return Math.abs(atLat) >= 90 ? 0 :
25917                 dLon * (TAU * EQUATORIAL_RADIUS / 360) * Math.abs(Math.cos(atLat * (Math.PI / 180)));
25918         }
25919
25920
25921         function geoMetersToLat(m) {
25922             return m / (TAU * POLAR_RADIUS / 360);
25923         }
25924
25925
25926         function geoMetersToLon(m, atLat) {
25927             return Math.abs(atLat) >= 90 ? 0 :
25928                 m / (TAU * EQUATORIAL_RADIUS / 360) / Math.abs(Math.cos(atLat * (Math.PI / 180)));
25929         }
25930
25931
25932         function geoMetersToOffset(meters, tileSize) {
25933             tileSize = tileSize || 256;
25934             return [
25935                 meters[0] * tileSize / (TAU * EQUATORIAL_RADIUS),
25936                 -meters[1] * tileSize / (TAU * POLAR_RADIUS)
25937             ];
25938         }
25939
25940
25941         function geoOffsetToMeters(offset, tileSize) {
25942             tileSize = tileSize || 256;
25943             return [
25944                 offset[0] * TAU * EQUATORIAL_RADIUS / tileSize,
25945                 -offset[1] * TAU * POLAR_RADIUS / tileSize
25946             ];
25947         }
25948
25949
25950         // Equirectangular approximation of spherical distances on Earth
25951         function geoSphericalDistance(a, b) {
25952             var x = geoLonToMeters(a[0] - b[0], (a[1] + b[1]) / 2);
25953             var y = geoLatToMeters(a[1] - b[1]);
25954             return Math.sqrt((x * x) + (y * y));
25955         }
25956
25957
25958         // scale to zoom
25959         function geoScaleToZoom(k, tileSize) {
25960             tileSize = tileSize || 256;
25961             var log2ts = Math.log(tileSize) * Math.LOG2E;
25962             return Math.log(k * TAU) / Math.LN2 - log2ts;
25963         }
25964
25965
25966         // zoom to scale
25967         function geoZoomToScale(z, tileSize) {
25968             tileSize = tileSize || 256;
25969             return tileSize * Math.pow(2, z) / TAU;
25970         }
25971
25972
25973         // returns info about the node from `nodes` closest to the given `point`
25974         function geoSphericalClosestNode(nodes, point) {
25975             var minDistance = Infinity, distance;
25976             var indexOfMin;
25977
25978             for (var i in nodes) {
25979                 distance = geoSphericalDistance(nodes[i].loc, point);
25980                 if (distance < minDistance) {
25981                     minDistance = distance;
25982                     indexOfMin = i;
25983                 }
25984             }
25985
25986             if (indexOfMin !== undefined) {
25987                 return { index: indexOfMin, distance: minDistance, node: nodes[indexOfMin] };
25988             } else {
25989                 return null;
25990             }
25991         }
25992
25993         function geoExtent(min, max) {
25994             if (!(this instanceof geoExtent)) {
25995                 return new geoExtent(min, max);
25996             } else if (min instanceof geoExtent) {
25997                 return min;
25998             } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) {
25999                 this[0] = min[0];
26000                 this[1] = min[1];
26001             } else {
26002                 this[0] = min        || [ Infinity,  Infinity];
26003                 this[1] = max || min || [-Infinity, -Infinity];
26004             }
26005         }
26006
26007         geoExtent.prototype = new Array(2);
26008
26009         Object.assign(geoExtent.prototype, {
26010
26011             equals: function (obj) {
26012                 return this[0][0] === obj[0][0] &&
26013                     this[0][1] === obj[0][1] &&
26014                     this[1][0] === obj[1][0] &&
26015                     this[1][1] === obj[1][1];
26016             },
26017
26018
26019             extend: function(obj) {
26020                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
26021                 return geoExtent(
26022                     [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])],
26023                     [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])]
26024                 );
26025             },
26026
26027
26028             _extend: function(extent) {
26029                 this[0][0] = Math.min(extent[0][0], this[0][0]);
26030                 this[0][1] = Math.min(extent[0][1], this[0][1]);
26031                 this[1][0] = Math.max(extent[1][0], this[1][0]);
26032                 this[1][1] = Math.max(extent[1][1], this[1][1]);
26033             },
26034
26035
26036             area: function() {
26037                 return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1]));
26038             },
26039
26040
26041             center: function() {
26042                 return [(this[0][0] + this[1][0]) / 2, (this[0][1] + this[1][1]) / 2];
26043             },
26044
26045
26046             rectangle: function() {
26047                 return [this[0][0], this[0][1], this[1][0], this[1][1]];
26048             },
26049
26050
26051             bbox: function() {
26052                 return { minX: this[0][0], minY: this[0][1], maxX: this[1][0], maxY: this[1][1] };
26053             },
26054
26055
26056             polygon: function() {
26057                 return [
26058                     [this[0][0], this[0][1]],
26059                     [this[0][0], this[1][1]],
26060                     [this[1][0], this[1][1]],
26061                     [this[1][0], this[0][1]],
26062                     [this[0][0], this[0][1]]
26063                 ];
26064             },
26065
26066
26067             contains: function(obj) {
26068                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
26069                 return obj[0][0] >= this[0][0] &&
26070                        obj[0][1] >= this[0][1] &&
26071                        obj[1][0] <= this[1][0] &&
26072                        obj[1][1] <= this[1][1];
26073             },
26074
26075
26076             intersects: function(obj) {
26077                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
26078                 return obj[0][0] <= this[1][0] &&
26079                        obj[0][1] <= this[1][1] &&
26080                        obj[1][0] >= this[0][0] &&
26081                        obj[1][1] >= this[0][1];
26082             },
26083
26084
26085             intersection: function(obj) {
26086                 if (!this.intersects(obj)) { return new geoExtent(); }
26087                 return new geoExtent(
26088                     [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])],
26089                     [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])]
26090                 );
26091             },
26092
26093
26094             percentContainedIn: function(obj) {
26095                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
26096                 var a1 = this.intersection(obj).area();
26097                 var a2 = this.area();
26098
26099                 if (a1 === Infinity || a2 === Infinity || a1 === 0 || a2 === 0) {
26100                     return 0;
26101                 } else {
26102                     return a1 / a2;
26103                 }
26104             },
26105
26106
26107             padByMeters: function(meters) {
26108                 var dLat = geoMetersToLat(meters);
26109                 var dLon = geoMetersToLon(meters, this.center()[1]);
26110                 return geoExtent(
26111                     [this[0][0] - dLon, this[0][1] - dLat],
26112                     [this[1][0] + dLon, this[1][1] + dLat]
26113                 );
26114             },
26115
26116
26117             toParam: function() {
26118                 return this.rectangle().join(',');
26119             }
26120
26121         });
26122
26123         // vector equals
26124         function geoVecEqual(a, b, epsilon) {
26125             if (epsilon) {
26126                 return (Math.abs(a[0] - b[0]) <= epsilon) && (Math.abs(a[1] - b[1]) <= epsilon);
26127             } else {
26128                 return (a[0] === b[0]) && (a[1] === b[1]);
26129             }
26130         }
26131
26132         // vector addition
26133         function geoVecAdd(a, b) {
26134             return [ a[0] + b[0], a[1] + b[1] ];
26135         }
26136
26137         // vector subtraction
26138         function geoVecSubtract(a, b) {
26139             return [ a[0] - b[0], a[1] - b[1] ];
26140         }
26141
26142         // vector scaling
26143         function geoVecScale(a, mag) {
26144             return [ a[0] * mag, a[1] * mag ];
26145         }
26146
26147         // vector rounding (was: geoRoundCoordinates)
26148         function geoVecFloor(a) {
26149             return [ Math.floor(a[0]), Math.floor(a[1]) ];
26150         }
26151
26152         // linear interpolation
26153         function geoVecInterp(a, b, t) {
26154             return [
26155                 a[0] + (b[0] - a[0]) * t,
26156                 a[1] + (b[1] - a[1]) * t
26157             ];
26158         }
26159
26160         // http://jsperf.com/id-dist-optimization
26161         function geoVecLength(a, b) {
26162             return Math.sqrt(geoVecLengthSquare(a,b));
26163         }
26164
26165         // length of vector raised to the power two
26166         function geoVecLengthSquare(a, b) {
26167             b = b || [0, 0];
26168             var x = a[0] - b[0];
26169             var y = a[1] - b[1];
26170             return (x * x) + (y * y);
26171         }
26172
26173         // get a unit vector
26174         function geoVecNormalize(a) {
26175             var length = Math.sqrt((a[0] * a[0]) + (a[1] * a[1]));
26176             if (length !== 0) {
26177                 return geoVecScale(a, 1 / length);
26178             }
26179             return [0, 0];
26180         }
26181
26182         // Return the counterclockwise angle in the range (-pi, pi)
26183         // between the positive X axis and the line intersecting a and b.
26184         function geoVecAngle(a, b) {
26185             return Math.atan2(b[1] - a[1], b[0] - a[0]);
26186         }
26187
26188         // dot product
26189         function geoVecDot(a, b, origin) {
26190             origin = origin || [0, 0];
26191             var p = geoVecSubtract(a, origin);
26192             var q = geoVecSubtract(b, origin);
26193             return (p[0]) * (q[0]) + (p[1]) * (q[1]);
26194         }
26195
26196         // normalized dot product
26197         function geoVecNormalizedDot(a, b, origin) {
26198             origin = origin || [0, 0];
26199             var p = geoVecNormalize(geoVecSubtract(a, origin));
26200             var q = geoVecNormalize(geoVecSubtract(b, origin));
26201             return geoVecDot(p, q);
26202         }
26203
26204         // 2D cross product of OA and OB vectors, returns magnitude of Z vector
26205         // Returns a positive value, if OAB makes a counter-clockwise turn,
26206         // negative for clockwise turn, and zero if the points are collinear.
26207         function geoVecCross(a, b, origin) {
26208             origin = origin || [0, 0];
26209             var p = geoVecSubtract(a, origin);
26210             var q = geoVecSubtract(b, origin);
26211             return (p[0]) * (q[1]) - (p[1]) * (q[0]);
26212         }
26213
26214
26215         // find closest orthogonal projection of point onto points array
26216         function geoVecProject(a, points) {
26217             var min = Infinity;
26218             var idx;
26219             var target;
26220
26221             for (var i = 0; i < points.length - 1; i++) {
26222                 var o = points[i];
26223                 var s = geoVecSubtract(points[i + 1], o);
26224                 var v = geoVecSubtract(a, o);
26225                 var proj = geoVecDot(v, s) / geoVecDot(s, s);
26226                 var p;
26227
26228                 if (proj < 0) {
26229                     p = o;
26230                 } else if (proj > 1) {
26231                     p = points[i + 1];
26232                 } else {
26233                     p = [o[0] + proj * s[0], o[1] + proj * s[1]];
26234                 }
26235
26236                 var dist = geoVecLength(p, a);
26237                 if (dist < min) {
26238                     min = dist;
26239                     idx = i + 1;
26240                     target = p;
26241                 }
26242             }
26243
26244             if (idx !== undefined) {
26245                 return { index: idx, distance: min, target: target };
26246             } else {
26247                 return null;
26248             }
26249         }
26250
26251         // Return the counterclockwise angle in the range (-pi, pi)
26252         // between the positive X axis and the line intersecting a and b.
26253         function geoAngle(a, b, projection) {
26254             return geoVecAngle(projection(a.loc), projection(b.loc));
26255         }
26256
26257
26258         function geoEdgeEqual(a, b) {
26259             return (a[0] === b[0] && a[1] === b[1]) ||
26260                 (a[0] === b[1] && a[1] === b[0]);
26261         }
26262
26263
26264         // Rotate all points counterclockwise around a pivot point by given angle
26265         function geoRotate(points, angle, around) {
26266             return points.map(function(point) {
26267                 var radial = geoVecSubtract(point, around);
26268                 return [
26269                     radial[0] * Math.cos(angle) - radial[1] * Math.sin(angle) + around[0],
26270                     radial[0] * Math.sin(angle) + radial[1] * Math.cos(angle) + around[1]
26271                 ];
26272             });
26273         }
26274
26275
26276         // Choose the edge with the minimal distance from `point` to its orthogonal
26277         // projection onto that edge, if such a projection exists, or the distance to
26278         // the closest vertex on that edge. Returns an object with the `index` of the
26279         // chosen edge, the chosen `loc` on that edge, and the `distance` to to it.
26280         function geoChooseEdge(nodes, point, projection, activeID) {
26281             var dist = geoVecLength;
26282             var points = nodes.map(function(n) { return projection(n.loc); });
26283             var ids = nodes.map(function(n) { return n.id; });
26284             var min = Infinity;
26285             var idx;
26286             var loc;
26287
26288             for (var i = 0; i < points.length - 1; i++) {
26289                 if (ids[i] === activeID || ids[i + 1] === activeID) { continue; }
26290
26291                 var o = points[i];
26292                 var s = geoVecSubtract(points[i + 1], o);
26293                 var v = geoVecSubtract(point, o);
26294                 var proj = geoVecDot(v, s) / geoVecDot(s, s);
26295                 var p;
26296
26297                 if (proj < 0) {
26298                     p = o;
26299                 } else if (proj > 1) {
26300                     p = points[i + 1];
26301                 } else {
26302                     p = [o[0] + proj * s[0], o[1] + proj * s[1]];
26303                 }
26304
26305                 var d = dist(p, point);
26306                 if (d < min) {
26307                     min = d;
26308                     idx = i + 1;
26309                     loc = projection.invert(p);
26310                 }
26311             }
26312
26313             if (idx !== undefined) {
26314                 return { index: idx, distance: min, loc: loc };
26315             } else {
26316                 return null;
26317             }
26318         }
26319
26320
26321         // Test active (dragged or drawing) segments against inactive segments
26322         // This is used to test e.g. multipolygon rings that cross
26323         // `activeNodes` is the ring containing the activeID being dragged.
26324         // `inactiveNodes` is the other ring to test against
26325         function geoHasLineIntersections(activeNodes, inactiveNodes, activeID) {
26326             var actives = [];
26327             var inactives = [];
26328             var j, k, n1, n2, segment;
26329
26330             // gather active segments (only segments in activeNodes that contain the activeID)
26331             for (j = 0; j < activeNodes.length - 1; j++) {
26332                 n1 = activeNodes[j];
26333                 n2 = activeNodes[j+1];
26334                 segment = [n1.loc, n2.loc];
26335                 if (n1.id === activeID || n2.id === activeID) {
26336                     actives.push(segment);
26337                 }
26338             }
26339
26340             // gather inactive segments
26341             for (j = 0; j < inactiveNodes.length - 1; j++) {
26342                 n1 = inactiveNodes[j];
26343                 n2 = inactiveNodes[j+1];
26344                 segment = [n1.loc, n2.loc];
26345                 inactives.push(segment);
26346             }
26347
26348             // test
26349             for (j = 0; j < actives.length; j++) {
26350                 for (k = 0; k < inactives.length; k++) {
26351                     var p = actives[j];
26352                     var q = inactives[k];
26353                     var hit = geoLineIntersection(p, q);
26354                     if (hit) {
26355                         return true;
26356                     }
26357                 }
26358             }
26359
26360             return false;
26361         }
26362
26363
26364         // Test active (dragged or drawing) segments against inactive segments
26365         // This is used to test whether a way intersects with itself.
26366         function geoHasSelfIntersections(nodes, activeID) {
26367             var actives = [];
26368             var inactives = [];
26369             var j, k;
26370
26371             // group active and passive segments along the nodes
26372             for (j = 0; j < nodes.length - 1; j++) {
26373                 var n1 = nodes[j];
26374                 var n2 = nodes[j+1];
26375                 var segment = [n1.loc, n2.loc];
26376                 if (n1.id === activeID || n2.id === activeID) {
26377                     actives.push(segment);
26378                 } else {
26379                     inactives.push(segment);
26380                 }
26381             }
26382
26383             // test
26384             for (j = 0; j < actives.length; j++) {
26385                 for (k = 0; k < inactives.length; k++) {
26386                     var p = actives[j];
26387                     var q = inactives[k];
26388                     // skip if segments share an endpoint
26389                     if (geoVecEqual(p[1], q[0]) || geoVecEqual(p[0], q[1]) ||
26390                         geoVecEqual(p[0], q[0]) || geoVecEqual(p[1], q[1]) ) {
26391                         continue;
26392                     }
26393
26394                     var hit = geoLineIntersection(p, q);
26395                     if (hit) {
26396                         var epsilon = 1e-8;
26397                         // skip if the hit is at the segment's endpoint
26398                         if (geoVecEqual(p[1], hit, epsilon) || geoVecEqual(p[0], hit, epsilon) ||
26399                             geoVecEqual(q[1], hit, epsilon) || geoVecEqual(q[0], hit, epsilon) ) {
26400                             continue;
26401                         } else {
26402                             return true;
26403                         }
26404                     }
26405                 }
26406             }
26407
26408             return false;
26409         }
26410
26411
26412         // Return the intersection point of 2 line segments.
26413         // From https://github.com/pgkelley4/line-segments-intersect
26414         // This uses the vector cross product approach described below:
26415         //  http://stackoverflow.com/a/565282/786339
26416         function geoLineIntersection(a, b) {
26417             var p = [a[0][0], a[0][1]];
26418             var p2 = [a[1][0], a[1][1]];
26419             var q = [b[0][0], b[0][1]];
26420             var q2 = [b[1][0], b[1][1]];
26421             var r = geoVecSubtract(p2, p);
26422             var s = geoVecSubtract(q2, q);
26423             var uNumerator = geoVecCross(geoVecSubtract(q, p), r);
26424             var denominator = geoVecCross(r, s);
26425
26426             if (uNumerator && denominator) {
26427                 var u = uNumerator / denominator;
26428                 var t = geoVecCross(geoVecSubtract(q, p), s) / denominator;
26429
26430                 if ((t >= 0) && (t <= 1) && (u >= 0) && (u <= 1)) {
26431                     return geoVecInterp(p, p2, t);
26432                 }
26433             }
26434
26435             return null;
26436         }
26437
26438
26439         function geoPathIntersections(path1, path2) {
26440             var intersections = [];
26441             for (var i = 0; i < path1.length - 1; i++) {
26442                 for (var j = 0; j < path2.length - 1; j++) {
26443                     var a = [ path1[i], path1[i+1] ];
26444                     var b = [ path2[j], path2[j+1] ];
26445                     var hit = geoLineIntersection(a, b);
26446                     if (hit) {
26447                         intersections.push(hit);
26448                     }
26449                 }
26450             }
26451             return intersections;
26452         }
26453
26454         function geoPathHasIntersections(path1, path2) {
26455             for (var i = 0; i < path1.length - 1; i++) {
26456                 for (var j = 0; j < path2.length - 1; j++) {
26457                     var a = [ path1[i], path1[i+1] ];
26458                     var b = [ path2[j], path2[j+1] ];
26459                     var hit = geoLineIntersection(a, b);
26460                     if (hit) {
26461                         return true;
26462                     }
26463                 }
26464             }
26465             return false;
26466         }
26467
26468
26469         // Return whether point is contained in polygon.
26470         //
26471         // `point` should be a 2-item array of coordinates.
26472         // `polygon` should be an array of 2-item arrays of coordinates.
26473         //
26474         // From https://github.com/substack/point-in-polygon.
26475         // ray-casting algorithm based on
26476         // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
26477         //
26478         function geoPointInPolygon(point, polygon) {
26479             var x = point[0];
26480             var y = point[1];
26481             var inside = false;
26482
26483             for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
26484                 var xi = polygon[i][0];
26485                 var yi = polygon[i][1];
26486                 var xj = polygon[j][0];
26487                 var yj = polygon[j][1];
26488
26489                 var intersect = ((yi > y) !== (yj > y)) &&
26490                     (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
26491                 if (intersect) { inside = !inside; }
26492             }
26493
26494             return inside;
26495         }
26496
26497
26498         function geoPolygonContainsPolygon(outer, inner) {
26499             return inner.every(function(point) {
26500                 return geoPointInPolygon(point, outer);
26501             });
26502         }
26503
26504
26505         function geoPolygonIntersectsPolygon(outer, inner, checkSegments) {
26506             function testPoints(outer, inner) {
26507                 return inner.some(function(point) {
26508                     return geoPointInPolygon(point, outer);
26509                 });
26510             }
26511
26512            return testPoints(outer, inner) || (!!checkSegments && geoPathHasIntersections(outer, inner));
26513         }
26514
26515
26516         // http://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points
26517         // http://gis.stackexchange.com/questions/3739/generalisation-strategies-for-building-outlines/3756#3756
26518         function geoGetSmallestSurroundingRectangle(points) {
26519             var hull = d3_polygonHull(points);
26520             var centroid = d3_polygonCentroid(hull);
26521             var minArea = Infinity;
26522             var ssrExtent = [];
26523             var ssrAngle = 0;
26524             var c1 = hull[0];
26525
26526             for (var i = 0; i <= hull.length - 1; i++) {
26527                 var c2 = (i === hull.length - 1) ? hull[0] : hull[i + 1];
26528                 var angle = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]);
26529                 var poly = geoRotate(hull, -angle, centroid);
26530                 var extent = poly.reduce(function(extent, point) {
26531                     return extent.extend(geoExtent(point));
26532                 }, geoExtent());
26533
26534                 var area = extent.area();
26535                 if (area < minArea) {
26536                     minArea = area;
26537                     ssrExtent = extent;
26538                     ssrAngle = angle;
26539                 }
26540                 c1 = c2;
26541             }
26542
26543             return {
26544                 poly: geoRotate(ssrExtent.polygon(), ssrAngle, centroid),
26545                 angle: ssrAngle
26546             };
26547         }
26548
26549
26550         function geoPathLength(path) {
26551             var length = 0;
26552             for (var i = 0; i < path.length - 1; i++) {
26553                 length += geoVecLength(path[i], path[i + 1]);
26554             }
26555             return length;
26556         }
26557
26558
26559         // If the given point is at the edge of the padded viewport,
26560         // return a vector that will nudge the viewport in that direction
26561         function geoViewportEdge(point, dimensions) {
26562             var pad = [80, 20, 50, 20];   // top, right, bottom, left
26563             var x = 0;
26564             var y = 0;
26565
26566             if (point[0] > dimensions[0] - pad[1])
26567                 { x = -10; }
26568             if (point[0] < pad[3])
26569                 { x = 10; }
26570             if (point[1] > dimensions[1] - pad[2])
26571                 { y = -10; }
26572             if (point[1] < pad[0])
26573                 { y = 10; }
26574
26575             if (x || y) {
26576                 return [x, y];
26577             } else {
26578                 return null;
26579             }
26580         }
26581
26582         /*
26583             Bypasses features of D3's default projection stream pipeline that are unnecessary:
26584             * Antimeridian clipping
26585             * Spherical rotation
26586             * Resampling
26587         */
26588         function geoRawMercator() {
26589             var project = mercatorRaw;
26590             var k = 512 / Math.PI; // scale
26591             var x = 0;
26592             var y = 0; // translate
26593             var clipExtent = [[0, 0], [0, 0]];
26594
26595
26596             function projection(point) {
26597                 point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
26598                 return [point[0] * k + x, y - point[1] * k];
26599             }
26600
26601
26602             projection.invert = function(point) {
26603                 point = project.invert((point[0] - x) / k, (y - point[1]) / k);
26604                 return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
26605             };
26606
26607
26608             projection.scale = function(_) {
26609                 if (!arguments.length) { return k; }
26610                 k = +_;
26611                 return projection;
26612             };
26613
26614
26615             projection.translate = function(_) {
26616                 if (!arguments.length) { return [x, y]; }
26617                 x = +_[0];
26618                 y = +_[1];
26619                 return projection;
26620             };
26621
26622
26623             projection.clipExtent = function(_) {
26624                 if (!arguments.length) { return clipExtent; }
26625                 clipExtent = _;
26626                 return projection;
26627             };
26628
26629
26630             projection.transform = function(obj) {
26631                 if (!arguments.length) { return identity$8.translate(x, y).scale(k); }
26632                 x = +obj.x;
26633                 y = +obj.y;
26634                 k = +obj.k;
26635                 return projection;
26636             };
26637
26638
26639             projection.stream = d3_geoTransform({
26640                 point: function(x, y) {
26641                     var vec = projection([x, y]);
26642                     this.stream.point(vec[0], vec[1]);
26643                 }
26644             }).stream;
26645
26646
26647             return projection;
26648         }
26649
26650         function geoOrthoNormalizedDotProduct(a, b, origin) {
26651             if (geoVecEqual(origin, a) || geoVecEqual(origin, b)) {
26652                 return 1;  // coincident points, treat as straight and try to remove
26653             }
26654             return geoVecNormalizedDot(a, b, origin);
26655         }
26656
26657
26658         function geoOrthoFilterDotProduct(dotp, epsilon, lowerThreshold, upperThreshold, allowStraightAngles) {
26659             var val = Math.abs(dotp);
26660             if (val < epsilon) {
26661                 return 0;      // already orthogonal
26662             } else if (allowStraightAngles && Math.abs(val-1) < epsilon) {
26663                 return 0;      // straight angle, which is okay in this case
26664             } else if (val < lowerThreshold || val > upperThreshold) {
26665                 return dotp;   // can be adjusted
26666             } else {
26667                 return null;   // ignore vertex
26668             }
26669         }
26670
26671
26672         function geoOrthoCalcScore(points, isClosed, epsilon, threshold) {
26673             var score = 0;
26674             var first = isClosed ? 0 : 1;
26675             var last = isClosed ? points.length : points.length - 1;
26676             var coords = points.map(function(p) { return p.coord; });
26677
26678             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
26679             var upperThreshold = Math.cos(threshold * Math.PI / 180);
26680
26681             for (var i = first; i < last; i++) {
26682                 var a = coords[(i - 1 + coords.length) % coords.length];
26683                 var origin = coords[i];
26684                 var b = coords[(i + 1) % coords.length];
26685
26686                 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold);
26687                 if (dotp === null) { continue; }    // ignore vertex
26688                 score = score + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
26689             }
26690
26691             return score;
26692         }
26693
26694         // returns the maximum angle less than `lessThan` between the actual corner and a 0° or 90° corner
26695         function geoOrthoMaxOffsetAngle(coords, isClosed, lessThan) {
26696             var max = -Infinity;
26697
26698             var first = isClosed ? 0 : 1;
26699             var last = isClosed ? coords.length : coords.length - 1;
26700
26701             for (var i = first; i < last; i++) {
26702                 var a = coords[(i - 1 + coords.length) % coords.length];
26703                 var origin = coords[i];
26704                 var b = coords[(i + 1) % coords.length];
26705                 var normalizedDotP = geoOrthoNormalizedDotProduct(a, b, origin);
26706
26707                 var angle = Math.acos(Math.abs(normalizedDotP)) * 180 / Math.PI;
26708
26709                 if (angle > 45) { angle = 90 - angle; }
26710
26711                 if (angle >= lessThan) { continue; }
26712
26713                 if (angle > max) { max = angle; }
26714             }
26715
26716             if (max === -Infinity) { return null; }
26717
26718             return max;
26719         }
26720
26721
26722         // similar to geoOrthoCalcScore, but returns quickly if there is something to do
26723         function geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles) {
26724             var score = null;
26725             var first = isClosed ? 0 : 1;
26726             var last = isClosed ? coords.length : coords.length - 1;
26727
26728             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
26729             var upperThreshold = Math.cos(threshold * Math.PI / 180);
26730
26731             for (var i = first; i < last; i++) {
26732                 var a = coords[(i - 1 + coords.length) % coords.length];
26733                 var origin = coords[i];
26734                 var b = coords[(i + 1) % coords.length];
26735
26736                 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold, allowStraightAngles);
26737                 if (dotp === null) { continue; }        // ignore vertex
26738                 if (Math.abs(dotp) > 0) { return 1; }   // something to do
26739                 score = 0;                          // already square
26740             }
26741
26742             return score;
26743         }
26744
26745         var wikibooks = [["Afrikaans","Afrikaans","af"],["Arabic","العربية","ar"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Bangla","বাংলা","bn"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["Chuvash","Чӑвашла","cv"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Western Frisian","Frysk","fy"],["Galician","galego","gl"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Croatian","hrvatski","hr"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Interlingua","interlingua","ia"],["Indonesian","Bahasa Indonesia","id"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Georgian","ქართული","ka"],["Kazakh","қазақша","kk"],["Khmer","ភាសាខ្មែរ","km"],["Korean","한국어","ko"],["Kurdish","Kurdî","ku"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Limburgish","Limburgs","li"],["Lithuanian","lietuvių","lt"],["Malagasy","Malagasy","mg"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Marathi","मराठी","mr"],["Malay","Bahasa Melayu","ms"],["Nepali","नेपाली","ne"],["Dutch","Nederlands","nl"],["Norwegian","norsk bokmål","no"],["Occitan","occitan","oc"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Sanskrit","संस्कृतम्","sa"],["Sinhala","සිංහල","si"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Tajik","тоҷикӣ","tg"],["Thai","ไทย","th"],["Tagalog","Tagalog","tl"],["Turkish","Türkçe","tr"],["Tatar","татарча/tatarça","tt"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Vietnamese","Tiếng Việt","vi"],["Chinese","中文","zh"]];
26746
26747         var wikibooks$1 = /*#__PURE__*/Object.freeze({
26748                 __proto__: null,
26749                 'default': wikibooks
26750         });
26751
26752         var wikinews = [["Arabic","العربية","ar"],["Bulgarian","български","bg"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Hebrew","עברית","he"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Korean","한국어","ko"],["Norwegian","norsk bokmål","no"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Turkish","Türkçe","tr"],["Ukrainian","українська","uk"],["Chinese","中文","zh"]];
26753
26754         var wikinews$1 = /*#__PURE__*/Object.freeze({
26755                 __proto__: null,
26756                 'default': wikinews
26757         });
26758
26759         var wikiquote = [["Afrikaans","Afrikaans","af"],["Arabic","العربية","ar"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Galician","galego","gl"],["Gujarati","ગુજરાતી","gu"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Croatian","hrvatski","hr"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Indonesian","Bahasa Indonesia","id"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Georgian","ქართული","ka"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Kurdish","Kurdî","ku"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Limburgish","Limburgs","li"],["Lithuanian","lietuvių","lt"],["Malayalam","മലയാളം","ml"],["Marathi","मराठी","mr"],["Dutch","Nederlands","nl"],["Norwegian Nynorsk","norsk nynorsk","nn"],["Norwegian","norsk bokmål","no"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Sanskrit","संस्कृतम्","sa"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Sundanese","Basa Sunda","su"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Thai","ไทย","th"],["Turkish","Türkçe","tr"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Uzbek","oʻzbekcha/ўзбекча","uz"],["Vietnamese","Tiếng Việt","vi"],["Wolof","Wolof","wo"],["Chinese","中文","zh"]];
26760
26761         var wikiquote$1 = /*#__PURE__*/Object.freeze({
26762                 __proto__: null,
26763                 'default': wikiquote
26764         });
26765
26766         var wikiversity = [["Arabic","العربية","ar"],["Czech","čeština","cs"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Spanish","español","es"],["Finnish","suomi","fi"],["French","français","fr"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Korean","한국어","ko"],["Portuguese","português","pt"],["Russian","русский","ru"],["Slovenian","slovenščina","sl"],["Swedish","svenska","sv"]];
26767
26768         var wikiversity$1 = /*#__PURE__*/Object.freeze({
26769                 __proto__: null,
26770                 'default': wikiversity
26771         });
26772
26773         var wikivoyage = [["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Spanish","español","es"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["French","français","fr"],["Hebrew","עברית","he"],["Italian","italiano","it"],["Dutch","Nederlands","nl"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Swedish","svenska","sv"],["Ukrainian","українська","uk"],["Vietnamese","Tiếng Việt","vi"],["Chinese","中文","zh"]];
26774
26775         var wikivoyage$1 = /*#__PURE__*/Object.freeze({
26776                 __proto__: null,
26777                 'default': wikivoyage
26778         });
26779
26780         var wiktionary = [["Afrikaans","Afrikaans","af"],["Amharic","አማርኛ","am"],["Aragonese","aragonés","an"],["Old English","Ænglisc","ang"],["Arabic","العربية","ar"],["Asturian","asturianu","ast"],["Aymara","Aymar aru","ay"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Bangla","বাংলা","bn"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Cherokee","ᏣᎳᎩ","chr"],["Corsican","corsu","co"],["Czech","čeština","cs"],["Kashubian","kaszëbsczi","csb"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Divehi","ދިވެހިބަސް","dv"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["Fijian","Na Vosa Vakaviti","fj"],["Faroese","føroyskt","fo"],["French","français","fr"],["Western Frisian","Frysk","fy"],["Irish","Gaeilge","ga"],["Scottish Gaelic","Gàidhlig","gd"],["Galician","galego","gl"],["Guarani","Avañe'ẽ","gn"],["Gujarati","ગુજરાતી","gu"],["Manx","Gaelg","gv"],["Hausa","Hausa","ha"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Croatian","hrvatski","hr"],["Upper Sorbian","hornjoserbsce","hsb"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Interlingua","interlingua","ia"],["Indonesian","Bahasa Indonesia","id"],["Interlingue","Interlingue","ie"],["Ido","Ido","io"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Inuktitut","ᐃᓄᒃᑎᑐᑦ/inuktitut","iu"],["Japanese","日本語","ja"],["Lojban","la .lojban.","jbo"],["Javanese","Basa Jawa","jv"],["Georgian","ქართული","ka"],["Kazakh","қазақша","kk"],["Kalaallisut","kalaallisut","kl"],["Khmer","ភាសាខ្មែរ","km"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Kashmiri","कॉशुर / کٲشُر","ks"],["Kurdish","Kurdî","ku"],["Cornish","kernowek","kw"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Luxembourgish","Lëtzebuergesch","lb"],["Limburgish","Limburgs","li"],["Lingala","lingála","ln"],["Lao","ລາວ","lo"],["Lithuanian","lietuvių","lt"],["Latvian","latviešu","lv"],["Malagasy","Malagasy","mg"],["Maori","Māori","mi"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Mongolian","монгол","mn"],["Marathi","मराठी","mr"],["Malay","Bahasa Melayu","ms"],["Maltese","Malti","mt"],["Burmese","မြန်မာဘာသာ","my"],["Nauru","Dorerin Naoero","na"],["Nāhuatl","Nāhuatl","nah"],["Low German","Plattdüütsch","nds"],["Nepali","नेपाली","ne"],["Dutch","Nederlands","nl"],["Norwegian Nynorsk","norsk nynorsk","nn"],["Norwegian","norsk bokmål","no"],["Occitan","occitan","oc"],["Oromo","Oromoo","om"],["Odia","ଓଡ଼ିଆ","or"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Polish","polski","pl"],["Western Punjabi","پنجابی","pnb"],["Pashto","پښتو","ps"],["Portuguese","português","pt"],["Quechua","Runa Simi","qu"],["Romanian","română","ro"],["Aromanian","armãneashti","roa-rup"],["Russian","русский","ru"],["Kinyarwanda","Kinyarwanda","rw"],["Sanskrit","संस्कृतम्","sa"],["Sicilian","sicilianu","scn"],["Sindhi","سنڌي","sd"],["Sango","Sängö","sg"],["Serbo-Croatian","srpskohrvatski / српскохрватски","sh"],["Sinhala","සිංහල","si"],["Simple English","Simple English","simple"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Samoan","Gagana Samoa","sm"],["Somali","Soomaaliga","so"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Swati","SiSwati","ss"],["Southern Sotho","Sesotho","st"],["Sundanese","Basa Sunda","su"],["Swedish","svenska","sv"],["Swahili","Kiswahili","sw"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Tajik","тоҷикӣ","tg"],["Thai","ไทย","th"],["Tigrinya","ትግርኛ","ti"],["Turkmen","Türkmençe","tk"],["Tagalog","Tagalog","tl"],["Tswana","Setswana","tn"],["Tok Pisin","Tok Pisin","tpi"],["Turkish","Türkçe","tr"],["Tsonga","Xitsonga","ts"],["Tatar","татарча/tatarça","tt"],["Uyghur","ئۇيغۇرچە / Uyghurche","ug"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Uzbek","oʻzbekcha/ўзбекча","uz"],["Venetian","vèneto","vec"],["Vietnamese","Tiếng Việt","vi"],["Volapük","Volapük","vo"],["Walloon","walon","wa"],["Wolof","Wolof","wo"],["Yiddish","ייִדיש","yi"],["Chinese","中文","zh"],["Chinese (Min Nan)","Bân-lâm-gú","zh-min-nan"],["Zulu","isiZulu","zu"]];
26781
26782         var wiktionary$1 = /*#__PURE__*/Object.freeze({
26783                 __proto__: null,
26784                 'default': wiktionary
26785         });
26786
26787         var wikipedia = [["Abkhazian","Аҧсшәа","ab"],["Achinese","Acèh","ace"],["Adyghe","адыгабзэ","ady"],["Afrikaans","Afrikaans","af"],["Akan","Akan","ak"],["Alemannisch","Alemannisch","als"],["Amharic","አማርኛ","am"],["Aragonese","aragonés","an"],["Old English","Ænglisc","ang"],["Arabic","العربية","ar"],["Aramaic","ܐܪܡܝܐ","arc"],["Egyptian Arabic","مصرى","arz"],["Assamese","অসমীয়া","as"],["Asturian","asturianu","ast"],["Avaric","авар","av"],["Aymara","Aymar aru","ay"],["Azerbaijani","azərbaycanca","az"],["تۆرکجه","تۆرکجه","azb"],["Bashkir","башҡортса","ba"],["Bavarian","Boarisch","bar"],["Samogitian","žemaitėška","bat-smg"],["Bikol Central","Bikol Central","bcl"],["Belarusian","беларуская","be"],["беларуская (тарашкевіца)‎","беларуская (тарашкевіца)‎","be-x-old"],["Bulgarian","български","bg"],["भोजपुरी","भोजपुरी","bh"],["Bislama","Bislama","bi"],["Banjar","Bahasa Banjar","bjn"],["Bambara","bamanankan","bm"],["Bangla","বাংলা","bn"],["Tibetan","བོད་ཡིག","bo"],["Bishnupriya","বিষ্ণুপ্রিয়া মণিপুরী","bpy"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Buginese","ᨅᨔ ᨕᨘᨁᨗ","bug"],["буряад","буряад","bxr"],["Catalan","català","ca"],["Chavacano de Zamboanga","Chavacano de Zamboanga","cbk-zam"],["Min Dong Chinese","Mìng-dĕ̤ng-ngṳ̄","cdo"],["Chechen","нохчийн","ce"],["Cebuano","Cebuano","ceb"],["Chamorro","Chamoru","ch"],["Cherokee","ᏣᎳᎩ","chr"],["Cheyenne","Tsetsêhestâhese","chy"],["Central Kurdish","کوردیی ناوەندی","ckb"],["Corsican","corsu","co"],["Cree","Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ","cr"],["Crimean Turkish","qırımtatarca","crh"],["Czech","čeština","cs"],["Kashubian","kaszëbsczi","csb"],["Church Slavic","словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ","cu"],["Chuvash","Чӑвашла","cv"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Zazaki","Zazaki","diq"],["Lower Sorbian","dolnoserbski","dsb"],["Divehi","ދިވެހިބަސް","dv"],["Dzongkha","ཇོང་ཁ","dz"],["Ewe","eʋegbe","ee"],["Greek","Ελληνικά","el"],["Emiliano-Romagnolo","emiliàn e rumagnòl","eml"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Extremaduran","estremeñu","ext"],["Persian","فارسی","fa"],["Fulah","Fulfulde","ff"],["Finnish","suomi","fi"],["Võro","Võro","fiu-vro"],["Fijian","Na Vosa Vakaviti","fj"],["Faroese","føroyskt","fo"],["French","français","fr"],["Arpitan","arpetan","frp"],["Northern Frisian","Nordfriisk","frr"],["Friulian","furlan","fur"],["Western Frisian","Frysk","fy"],["Irish","Gaeilge","ga"],["Gagauz","Gagauz","gag"],["Gan Chinese","贛語","gan"],["Scottish Gaelic","Gàidhlig","gd"],["Galician","galego","gl"],["Gilaki","گیلکی","glk"],["Guarani","Avañe'ẽ","gn"],["Goan Konkani","गोंयची कोंकणी / Gõychi Konknni","gom"],["Gothic","𐌲𐌿𐍄𐌹𐍃𐌺","got"],["Gujarati","ગુજરાતી","gu"],["Manx","Gaelg","gv"],["Hausa","Hausa","ha"],["Hakka Chinese","客家語/Hak-kâ-ngî","hak"],["Hawaiian","Hawaiʻi","haw"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Fiji Hindi","Fiji Hindi","hif"],["Croatian","hrvatski","hr"],["Upper Sorbian","hornjoserbsce","hsb"],["Haitian Creole","Kreyòl ayisyen","ht"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Interlingua","interlingua","ia"],["Indonesian","Bahasa Indonesia","id"],["Interlingue","Interlingue","ie"],["Igbo","Igbo","ig"],["Inupiaq","Iñupiak","ik"],["Iloko","Ilokano","ilo"],["Ido","Ido","io"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Inuktitut","ᐃᓄᒃᑎᑐᑦ/inuktitut","iu"],["Japanese","日本語","ja"],["Jamaican Creole English","Patois","jam"],["Lojban","la .lojban.","jbo"],["Javanese","Basa Jawa","jv"],["Georgian","ქართული","ka"],["Kara-Kalpak","Qaraqalpaqsha","kaa"],["Kabyle","Taqbaylit","kab"],["Kabardian","Адыгэбзэ","kbd"],["Kongo","Kongo","kg"],["Kikuyu","Gĩkũyũ","ki"],["Kazakh","қазақша","kk"],["Kalaallisut","kalaallisut","kl"],["Khmer","ភាសាខ្មែរ","km"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Komi-Permyak","Перем Коми","koi"],["Karachay-Balkar","къарачай-малкъар","krc"],["Kashmiri","कॉशुर / کٲشُر","ks"],["Colognian","Ripoarisch","ksh"],["Kurdish","Kurdî","ku"],["Komi","коми","kv"],["Cornish","kernowek","kw"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Ladino","Ladino","lad"],["Luxembourgish","Lëtzebuergesch","lb"],["лакку","лакку","lbe"],["Lezghian","лезги","lez"],["Ganda","Luganda","lg"],["Limburgish","Limburgs","li"],["Ligurian","Ligure","lij"],["Lombard","lumbaart","lmo"],["Lingala","lingála","ln"],["Lao","ລາວ","lo"],["Northern Luri","لۊری شومالی","lrc"],["Lithuanian","lietuvių","lt"],["Latgalian","latgaļu","ltg"],["Latvian","latviešu","lv"],["Maithili","मैथिली","mai"],["Basa Banyumasan","Basa Banyumasan","map-bms"],["Moksha","мокшень","mdf"],["Malagasy","Malagasy","mg"],["Eastern Mari","олык марий","mhr"],["Maori","Māori","mi"],["Minangkabau","Baso Minangkabau","min"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Mongolian","монгол","mn"],["Marathi","मराठी","mr"],["Western Mari","кырык мары","mrj"],["Malay","Bahasa Melayu","ms"],["Maltese","Malti","mt"],["Mirandese","Mirandés","mwl"],["Burmese","မြန်မာဘာသာ","my"],["Erzya","эрзянь","myv"],["Mazanderani","مازِرونی","mzn"],["Nauru","Dorerin Naoero","na"],["Nāhuatl","Nāhuatl","nah"],["Neapolitan","Napulitano","nap"],["Low German","Plattdüütsch","nds"],["Low Saxon","Nedersaksies","nds-nl"],["Nepali","नेपाली","ne"],["Newari","नेपाल भाषा","new"],["Dutch","Nederlands","nl"],["Norwegian Nynorsk","norsk nynorsk","nn"],["Norwegian","norsk bokmål","no"],["Novial","Novial","nov"],["Nouormand","Nouormand","nrm"],["Northern Sotho","Sesotho sa Leboa","nso"],["Navajo","Diné bizaad","nv"],["Nyanja","Chi-Chewa","ny"],["Occitan","occitan","oc"],["Livvi-Karelian","Livvinkarjala","olo"],["Oromo","Oromoo","om"],["Odia","ଓଡ଼ିଆ","or"],["Ossetic","Ирон","os"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Pangasinan","Pangasinan","pag"],["Pampanga","Kapampangan","pam"],["Papiamento","Papiamentu","pap"],["Picard","Picard","pcd"],["Pennsylvania German","Deitsch","pdc"],["Palatine German","Pälzisch","pfl"],["Pali","पालि","pi"],["Norfuk / Pitkern","Norfuk / Pitkern","pih"],["Polish","polski","pl"],["Piedmontese","Piemontèis","pms"],["Western Punjabi","پنجابی","pnb"],["Pontic","Ποντιακά","pnt"],["Pashto","پښتو","ps"],["Portuguese","português","pt"],["Quechua","Runa Simi","qu"],["Romansh","rumantsch","rm"],["Romani","Romani","rmy"],["Rundi","Kirundi","rn"],["Romanian","română","ro"],["Aromanian","armãneashti","roa-rup"],["tarandíne","tarandíne","roa-tara"],["Russian","русский","ru"],["Rusyn","русиньскый","rue"],["Kinyarwanda","Kinyarwanda","rw"],["Sanskrit","संस्कृतम्","sa"],["Sakha","саха тыла","sah"],["Sardinian","sardu","sc"],["Sicilian","sicilianu","scn"],["Scots","Scots","sco"],["Sindhi","سنڌي","sd"],["Northern Sami","sámegiella","se"],["Sango","Sängö","sg"],["Serbo-Croatian","srpskohrvatski / српскохрватски","sh"],["Sinhala","සිංහල","si"],["Simple English","Simple English","simple"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Samoan","Gagana Samoa","sm"],["Shona","chiShona","sn"],["Somali","Soomaaliga","so"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Sranan Tongo","Sranantongo","srn"],["Swati","SiSwati","ss"],["Southern Sotho","Sesotho","st"],["Saterland Frisian","Seeltersk","stq"],["Sundanese","Basa Sunda","su"],["Swedish","svenska","sv"],["Swahili","Kiswahili","sw"],["Silesian","ślůnski","szl"],["Tamil","தமிழ்","ta"],["Tulu","ತುಳು","tcy"],["Telugu","తెలుగు","te"],["Tetum","tetun","tet"],["Tajik","тоҷикӣ","tg"],["Thai","ไทย","th"],["Tigrinya","ትግርኛ","ti"],["Turkmen","Türkmençe","tk"],["Tagalog","Tagalog","tl"],["Tswana","Setswana","tn"],["Tongan","lea faka-Tonga","to"],["Tok Pisin","Tok Pisin","tpi"],["Turkish","Türkçe","tr"],["Tsonga","Xitsonga","ts"],["Tatar","татарча/tatarça","tt"],["Tumbuka","chiTumbuka","tum"],["Twi","Twi","tw"],["Tahitian","reo tahiti","ty"],["Tuvinian","тыва дыл","tyv"],["Udmurt","удмурт","udm"],["Uyghur","ئۇيغۇرچە / Uyghurche","ug"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Uzbek","oʻzbekcha/ўзбекча","uz"],["Venda","Tshivenda","ve"],["Venetian","vèneto","vec"],["Veps","vepsän kel’","vep"],["Vietnamese","Tiếng Việt","vi"],["West Flemish","West-Vlams","vls"],["Volapük","Volapük","vo"],["Walloon","walon","wa"],["Waray","Winaray","war"],["Wolof","Wolof","wo"],["Wu Chinese","吴语","wuu"],["Kalmyk","хальмг","xal"],["Xhosa","isiXhosa","xh"],["Mingrelian","მარგალური","xmf"],["Yiddish","ייִדיש","yi"],["Yoruba","Yorùbá","yo"],["Zhuang","Vahcuengh","za"],["Zeelandic","Zeêuws","zea"],["Chinese","中文","zh"],["Classical Chinese","文言","zh-classical"],["Chinese (Min Nan)","Bân-lâm-gú","zh-min-nan"],["Cantonese","粵語","zh-yue"],["Zulu","isiZulu","zu"]];
26788
26789         var wikipedia$1 = /*#__PURE__*/Object.freeze({
26790                 __proto__: null,
26791                 'default': wikipedia
26792         });
26793
26794         var wikisource = [["Arabic","العربية","ar"],["Assamese","অসমীয়া","as"],["Azerbaijani","azərbaycanca","az"],["Belarusian","беларуская","be"],["Bulgarian","български","bg"],["Bangla","বাংলা","bn"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Catalan","català","ca"],["Czech","čeština","cs"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Greek","Ελληνικά","el"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Persian","فارسی","fa"],["Finnish","suomi","fi"],["Faroese","føroyskt","fo"],["French","français","fr"],["Galician","galego","gl"],["Gujarati","ગુજરાતી","gu"],["Hebrew","עברית","he"],["Croatian","hrvatski","hr"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Indonesian","Bahasa Indonesia","id"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Japanese","日本語","ja"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Latin","Latina","la"],["Limburgish","Limburgs","li"],["Lithuanian","lietuvių","lt"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Marathi","मराठी","mr"],["Dutch","Nederlands","nl"],["Norwegian","norsk bokmål","no"],["Odia","ଓଡ଼ିଆ","or"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Polish","polski","pl"],["Portuguese","português","pt"],["Romanian","română","ro"],["Russian","русский","ru"],["Sanskrit","संस्कृतम्","sa"],["Sakha","саха тыла","sah"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Serbian","српски / srpski","sr"],["Swedish","svenska","sv"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Thai","ไทย","th"],["Turkish","Türkçe","tr"],["Ukrainian","українська","uk"],["Venetian","vèneto","vec"],["Vietnamese","Tiếng Việt","vi"],["Yiddish","ייִדיש","yi"],["Chinese","中文","zh"],["Chinese (Min Nan)","Bân-lâm-gú","zh-min-nan"]];
26795
26796         var wikisource$1 = /*#__PURE__*/Object.freeze({
26797                 __proto__: null,
26798                 'default': wikisource
26799         });
26800
26801         getCjsExportFromNamespace(wikibooks$1);
26802
26803         getCjsExportFromNamespace(wikinews$1);
26804
26805         getCjsExportFromNamespace(wikiquote$1);
26806
26807         getCjsExportFromNamespace(wikiversity$1);
26808
26809         getCjsExportFromNamespace(wikivoyage$1);
26810
26811         getCjsExportFromNamespace(wiktionary$1);
26812
26813         var require$$6 = getCjsExportFromNamespace(wikipedia$1);
26814
26815         getCjsExportFromNamespace(wikisource$1);
26816
26817         var wikipedia$2 = require$$6;
26818
26819         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"]],widths:{postcode:0.3,province:0.7,city:0.5,district:0.5,street:0.7,housenumber:0.3}},{countryCodes:["bo"],format:[["street","housenumber"],["neighbourhood","city"]],widths:{street:0.7,housenumber:0.3,neighbourhood:0.5,city:0.5}},{countryCodes:["pe"],format:[["street","housenumber"],["neighbourhood"],["city","state","postcode"]],dropdowns:["street","neighbourhood","city","state","postcode"],widths:{street:0.7,housenumber:0.3,city:0.4,state:0.4,postcode:0.2}}];
26820
26821         var dataDeprecated = [{old:{aerialway:"canopy"},replace:{aerialway:"zip_line"}},{old:{aeroway:"aerobridge"},replace:{aeroway:"jet_bridge",highway:"corridor"}},{old:{access:"public"},replace:{access:"yes"}},{old:{agrarian:"agrcultural_machinry"},replace:{agrarian:"agricultural_machinery"}},{old:{amenity:"advertising"},replace:{advertising:"*"}},{old:{amenity:"artwork"},replace:{tourism:"artwork"}},{old:{amenity:"bail_bonds"},replace:{office:"bail_bond_agent"}},{old:{amenity:"car_repair"},replace:{shop:"car_repair"}},{old:{amenity:"changing_room"},replace:{amenity:"dressing_room"}},{old:{amenity:"citymap_post"},replace:{tourism:"information"}},{old:{amenity:"club"},replace:{club:"*"}},{old:{amenity:"community_center"},replace:{amenity:"community_centre"}},{old:{amenity:"dancing_school"},replace:{leisure:"dance","dance:teaching":"yes"}},{old:{amenity:"dog_bin"},replace:{amenity:"waste_basket",waste:"dog_excrement"}},{old:{amenity:"dog_waste_bin"},replace:{amenity:"waste_basket",waste:"dog_excrement"}},{old:{amenity:"embassy"},replace:{office:"diplomatic"}},{old:{amenity:"ev_charging"},replace:{amenity:"charging_station"}},{old:{amenity:"fire_hydrant"},replace:{emergency:"fire_hydrant"}},{old:{amenity:"firepit"},replace:{leisure:"firepit"}},{old:{amenity:"garage"},replace:{landuse:"garages"}},{old:{amenity:"garages"},replace:{landuse:"garages"}},{old:{amenity:"gym"},replace:{leisure:"fitness_centre"}},{old:{amenity:"hotel"},replace:{tourism:"hotel"}},{old:{amenity:"kiosk"},replace:{shop:"kiosk"}},{old:{amenity:"nursery"},replace:{amenity:"kindergarten"}},{old:{amenity:"preschool"},replace:{amenity:"kindergarten",preschool:"yes"}},{old:{amenity:"public_building"},replace:{building:"public"}},{old:{amenity:"real_estate"},replace:{office:"estate_agent"}},{old:{amenity:"register_office"},replace:{office:"government",government:"register_office"}},{old:{amenity:"research_institution"},replace:{amenity:"research_institute"}},{old:{amenity:"sauna"},replace:{leisure:"sauna"}},{old:{amenity:"scrapyard"},replace:{landuse:"industrial",industrial:"scrap_yard"}},{old:{amenity:"shop"},replace:{shop:"*"}},{old:{amenity:"sloped_curb"},replace:{kerb:"lowered"}},{old:{amenity:"swimming_pool"},replace:{leisure:"swimming_pool"}},{old:{amenity:"ticket_booth"},replace:{shop:"ticket"}},{old:{amenity:"toilet"},replace:{amenity:"toilets"}},{old:{amenity:"vending_machine",vending:"news_papers"},replace:{amenity:"vending_machine",vending:"newspapers"}},{old:{amenity:"weigh_bridge"},replace:{amenity:"weighbridge"}},{old:{amenity:"winery"},replace:{craft:"winery"}},{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:{artwork:"*"},replace:{artwork_type:"$1"}},{old:{"artwork:type":"*"},replace:{artwork_type:"$1"}},{old:{attraction:"ferris_wheel"},replace:{attraction:"big_wheel"}},{old:{barrier:"curb"},replace:{barrier:"kerb"}},{old:{barrier:"embankment"},replace:{man_made:"embankment"}},{old:{barrier:"railing"},replace:{barrier:"fence",fence_type:"railing"}},{old:{barrier:"wall",type:"noise_barrier"},replace:{barrier:"wall",wall:"noise_barrier"}},{old:{barrier:"wire_fence"},replace:{barrier:"fence",fence_type:"wire"}},{old:{barrier:"wood_fence"},replace:{barrier:"fence",fence_type:"wood"}},{old:{building:"entrance"},replace:{entrance:"*"}},{old:{building:"family_house"},replace:{building:"house"}},{old:{building:"home"},replace:{building:"house"}},{old:{building:"household"},replace:{building:"house"}},{old:{"building:color":"*"},replace:{"building:colour":"$1"}},{old:{"building:roof:colour":"*"},replace:{"roof:colour":"$1"}},{old:{"building:type":"*"},replace:{building:"$1"}},{old:{camp_site:"camp_pitch"},replace:{tourism:"camp_pitch"}},{old:{shop:"clothes",clothes:"second_hand"},replace:{shop:"clothes",second_hand:"yes"}},{old:{color:"*"},replace:{colour:"$1"}},{old:{company:"consulting"},replace:{office:"consulting"}},{old:{craft:"catering"},replace:{craft:"caterer"}},{old:{craft:"glass"},replace:{craft:"glaziery"}},{old:{craft:"jeweler"},replace:{shop:"jewelry"}},{old:{craft:"optician"},replace:{shop:"optician"}},{old:{craft:"sculpter"},replace:{craft:"sculptor"}},{old:{crossing:"island"},replace:{"crossing:island":"yes"}},{old:{cuisine:"gluten-free"},replace:{"diet:gluten_free":"*"}},{old:{cuisine:"halal"},replace:{"diet:halal":"*"}},{old:{cuisine:"kosher"},replace:{"diet:kosher":"*"}},{old:{cuisine:"vegan"},replace:{"diet:vegan":"*"}},{old:{cuisine:"vegetarian"},replace:{"diet:vegetarian":"*"}},{old:{curb:"*"},replace:{kerb:"$1"}},{old:{diaper:"1"},replace:{changing_table:"yes","changing_table:count":"1"}},{old:{diaper:"no"},replace:{changing_table:"no"}},{old:{diaper:"room"},replace:{changing_table:"yes","changing_table:location":"room"}},{old:{diaper:"yes"},replace:{changing_table:"yes"}},{old:{direction:"all"},replace:{direction:"both"}},{old:{direction:"down",highway:"*"},replace:{incline:"down",highway:"$1"}},{old:{direction:"downhill"},replace:{incline:"down"}},{old:{direction:"East"},replace:{direction:"E"}},{old:{direction:"forward;backward"},replace:{direction:"both"}},{old:{direction:"North"},replace:{direction:"N"}},{old:{direction:"South"},replace:{direction:"S"}},{old:{direction:"up",highway:"*"},replace:{incline:"up",highway:"$1"}},{old:{direction:"uphill"},replace:{incline:"up"}},{old:{direction:"West"},replace:{direction:"W"}},{old:{drinkable:"*"},replace:{drinking_water:"$1"}},{old:{dropped_kerb:"*"},replace:{kerb:"lowered"}},{old:{embankment:"1"},replace:{embankment:"yes"}},{old:{embankment:"false"},replace:{embankment:"no"}},{old:{embankment:"right",man_made:"embankment"},replace:{man_made:"embankment"}},{old:{embankment:"true"},replace:{embankment:"yes"}},{old:{entrance:"emergency_exit"},replace:{entrance:"emergency"}},{old:{entrance:"fire_exit"},replace:{entrance:"emergency"}},{old:{entrance:"loading_dock"},replace:{amenity:"loading_dock"}},{old:{entrance:"main_entrance"},replace:{entrance:"main"}},{old:{entrance:"private"},replace:{entrance:"yes",access:"private"}},{old:{escalator:"*"},replace:{highway:"steps",conveying:"$1"}},{old:{fee:"0"},replace:{fee:"no"}},{old:{fee:"free"},replace:{fee:"no"}},{old:{fee:"Free"},replace:{fee:"no"}},{old:{fee:"No"},replace:{fee:"no"}},{old:{fee:"none"},replace:{fee:"no"}},{old:{fee:"some"},replace:{fee:"yes"}},{old:{fee:"Yes"},replace:{fee:"yes"}},{old:{fenced:"yes"},replace:{barrier:"fence"}},{old:{FIXME:"*"},replace:{fixme:"$1"}},{old:{footway:"both"},replace:{sidewalk:"both"}},{old:{footway:"crossing",highway:"cycleway"},replace:{cycleway:"crossing",highway:"cycleway"}},{old:{footway:"left"},replace:{sidewalk:"left"}},{old:{footway:"no"},replace:{sidewalk:"no"}},{old:{footway:"none"},replace:{sidewalk:"no"}},{old:{footway:"right"},replace:{sidewalk:"right"}},{old:{footway:"separate"},replace:{sidewalk:"separate"}},{old:{amenity:"gambling",gambling:"casino"},replace:{amenity:"casino"}},{old:{leisure:"amusement_arcade",gambling:"*"},replace:{leisure:"adult_gaming_centre",gambling:"$1"}},{old:{gambling:"slot_machine"},replace:{gambling:"slot_machines"}},{old:{"generator:source":"photovoltaic"},replace:{"generator:source":"solar","generator:method":"photovoltaic"}},{old:{golf:"faiway"},replace:{golf:"fairway",landuse:"grass"}},{old:{golf:"putting_green"},replace:{golf:"green",landuse:"grass"}},{old:{golf:"sand_trap"},replace:{golf:"bunker",natural:"sand"}},{old:{golf:"tee_area"},replace:{golf:"tee",landuse:"grass"}},{old:{golf:"tee_box"},replace:{golf:"tee",landuse:"grass"}},{old:{golf:"teebox"},replace:{golf:"tee",landuse:"grass"}},{old:{highway:"abandoned"},replace:{"abandoned:highway":"*"}},{old:{highway:"bridleway",horse:"no"},replace:{highway:"path",horse:"no"}},{old:{highway:"cycleway",bicycle:"no"},replace:{highway:"path",bicycle:"no"}},{old:{highway:"cycleway",cycleway:"track"},replace:{highway:"cycleway"}},{old:{highway:"footway",foot:"no"},replace:{highway:"path",foot:"no"}},{old:{highway:"ford"},replace:{ford:"*"}},{old:{highway:"no"}},{old:{highway:"platform"},replace:{highway:"platform",public_transport:"platform"}},{old:{highway:"stile"},replace:{barrier:"stile"}},{old:{highway:"unsurfaced"},replace:{highway:"road",surface:"unpaved"}},{old:{internet_access:"public"},replace:{internet_access:"yes","internet_access:fee":"no"}},{old:{internet_access:"wifi"},replace:{internet_access:"wlan"}},{old:{"internet_access:fee":"0"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"free"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"Free"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"No"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:name":"*"},replace:{"internet_access:ssid":"$1"}},{old:{"internet_access:type":"*"},replace:{internet_access:"$1"}},{old:{kerb:"dropped"},replace:{kerb:"lowered"}},{old:{kerb:"flat"},replace:{kerb:"flush"}},{old:{landuse:"basin"},replace:{natural:"water",water:"basin"}},{old:{landuse:"conservation"},replace:{boundary:"protected_area"}},{old:{landuse:"farm"},replace:{landuse:"farmland"}},{old:{landuse:"field"},replace:{landuse:"farmland"}},{old:{landuse:"garden"},replace:{leisure:"garden"}},{old:{landuse:"pond"},replace:{natural:"water",water:"pond"}},{old:{landuse:"port"},replace:{landuse:"industrial",industrial:"port"}},{old:{landuse:"reservoir"},replace:{natural:"water",water:"reservoir"}},{old:{landuse:"wood"},replace:{natural:"wood"}},{old:{lawyer:"notary"},replace:{office:"notary"}},{old:{leisure:"beach"},replace:{natural:"beach"}},{old:{leisure:"bingo"},replace:{amenity:"gambling",gambling:"bingo"}},{old:{leisure:"club"},replace:{club:"*"}},{old:{leisure:"gambling"},replace:{amenity:"gambling"}},{old:{leisure:"golf_pin"},replace:{golf:"pin"}},{old:{leisure:"ice_rink",sport:"hockey"},replace:{leisure:"ice_rink",sport:"ice_hockey"}},{old:{leisure:"ice_rink",sport:"skating"},replace:{leisure:"ice_rink",sport:"ice_skating"}},{old:{leisure:"recreation_ground"},replace:{landuse:"recreation_ground"}},{old:{leisure:"video_arcade"},replace:{leisure:"amusement_arcade"}},{old:{Level:"*"},replace:{level:"$1"}},{old:{LEVEL:"*"},replace:{level:"$1"}},{old:{levels:"*"},replace:{"building:levels":"$1"}},{old:{LEVELS:"*"},replace:{"building:levels":"$1"}},{old:{levels_count:"*"},replace:{"building:levels":"$1"}},{old:{man_made:"cut_line"},replace:{man_made:"cutline"}},{old:{man_made:"gas_well"},replace:{man_made:"petroleum_well",substance:"gas"}},{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:"fuel_storage_tank"},replace:{man_made:"storage_tank",content:"fuel"}},{old:{man_made:"oil_tank"},replace:{man_made:"storage_tank",content:"oil"}},{old:{man_made:"oil_well"},replace:{man_made:"petroleum_well",substance:"oil"}},{old:{man_made:"village_pump"},replace:{man_made:"water_well"}},{old:{man_made:"wastewater_tank"},replace:{man_made:"storage_tank",content:"wastewater"}},{old:{man_made:"water_tank"},replace:{man_made:"storage_tank",content:"water"}},{old:{man_made:"weigh_bridge"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighbridge"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighing_machine"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighing_scale"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighting machine"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighting_machine"},replace:{amenity:"weighbridge"}},{old:{man_made:"well"},replace:{man_made:"water_well"}},{old:{man_made:"winery"},replace:{craft:"winery"}},{old:{maxage:"*"},replace:{max_age:"$1"}},{old:{memorial:"plate"},replace:{memorial:"plaque"}},{old:{men:"*"},replace:{male:"$1"}},{old:{minage:"*"},replace:{min_age:"$1"}},{old:{mining_resource:"*"},replace:{resource:"$1"}},{old:{museum_type:"history"},replace:{museum:"history"}},{old:{museum_type:"private"},replace:{"operator:type":"private"}},{old:{museum_type:"public"},replace:{"operator:type":"public"}},{old:{natural:"marsh"},replace:{natural:"wetland",wetland:"marsh"}},{old:{natural:"waterfall"},replace:{waterway:"waterfall"}},{old:{NOTE:"*"},replace:{note:"$1"}},{old:{nosquare:"*"},replace:{nonsquare:"$1"}},{old:{office:"administrative"},replace:{office:"government"}},{old:{office:"consultancy"},replace:{office:"consulting"}},{old:{office:"consultant"},replace:{office:"consulting"}},{old:{office:"real_estate"},replace:{office:"estate_agent"}},{old:{oneway:"1"},replace:{oneway:"yes"}},{old:{oneway:"alternate"},replace:{oneway:"alternating"}},{old:{oneway:"no;yes"}},{old:{oneway:"unknown"}},{old:{"operator:type":"goverment"},replace:{"operator:type":"government"}},{old:{"operator:type":"Privado"},replace:{"operator:type":"private"}},{old:{"operator:type":"Private"},replace:{"operator:type":"private"}},{old:{"operator:type":"Public"},replace:{"operator:type":"public"}},{old:{"operator:type":"Publico"},replace:{"operator:type":"public"}},{old:{"operator:type":"unknown"}},{old:{place_name:"*"},replace:{name:"$1"}},{old:{pole:"transition"},replace:{"location:transition":"yes"}},{old:{postcode:"*"},replace:{"addr:postcode":"$1"}},{old:{power:"busbar"},replace:{power:"line",line:"busbar"}},{old:{power:"line",location:"underground"},replace:{power:"cable",location:"underground"}},{old:{power:"marker"},replace:{marker:"*",utility:"power"}},{old:{power:"sub_station"},replace:{power:"substation"}},{old:{power:"substation",location:"kiosk"},replace:{power:"substation",man_made:"street_cabinet",street_cabinet:"power"}},{old:{power:"underground_cable"},replace:{power:"cable",location:"underground"}},{old:{power_source:"*"},replace:{"generator:source":"$1"}},{old:{power_rating:"*"},replace:{"generator:output":"$1"}},{old:{public_transport:"station",aerialway:"yes"},replace:{public_transport:"station",aerialway:"station"}},{old:{pump:"hand_pump"},replace:{pump:"manual"}},{old:{pump:"electrical_pump"},replace:{pump:"powered"}},{old:{pump:"no_pump"},replace:{pump:"no"}},{old:{pump:"power"},replace:{pump:"powered"}},{old:{railway:"*",abandoned:"yes"},replace:{"abandoned:railway":"$1"}},{old:{railway:"*",disused:"yes"},replace:{"disused:railway":"$1"}},{old:{railway:"platform"},replace:{railway:"platform",public_transport:"platform"}},{old:{railway:"station"},replace:{railway:"station",public_transport:"station"}},{old:{railway:"tram_stop"},replace:{railway:"tram_stop",public_transport:"stop_position",tram:"yes"}},{old:{recommended_speed:"*"},replace:{"maxspeed:advisory":"$1"}},{old:{"recommended_speed:backward":"*"},replace:{"maxspeed:advisory:backward":"$1"}},{old:{"recommended_speed:forward":"*"},replace:{"maxspeed:advisory:forward":"$1"}},{old:{religion:"catholic"},replace:{religion:"christian",denomination:"catholic"}},{old:{reservations:"*"},replace:{reservation:"$1"}},{old:{"roof:color":"*"},replace:{"roof:colour":"$1"}},{old:{"roof:shape":"half_hipped"},replace:{"roof:shape":"half-hipped"}},{old:{route:"ncn"},replace:{route:"bicycle",network:"ncn"}},{old:{rwn_expected_route_relations:"*"},replace:{expected_rwn_route_relations:"$1"}},{old:{shop:"adult"},replace:{shop:"erotic"}},{old:{shop:"antique"},replace:{shop:"antiques"}},{old:{shop:"army_surplus"},replace:{shop:"military_surplus"}},{old:{shop:"auto_parts"},replace:{shop:"car_parts"}},{old:{shop:"baby"},replace:{shop:"baby_goods"}},{old:{shop:"baby_care"},replace:{shop:"baby_goods"}},{old:{shop:"bags"},replace:{shop:"bag"}},{old:{shop:"bail_bond"},replace:{office:"bail_bond_agent"}},{old:{shop:"bail_bonds"},replace:{office:"bail_bond_agent"}},{old:{shop:"betting"},replace:{shop:"bookmaker"}},{old:{shop:"boutique"},replace:{shop:"clothes"}},{old:{shop:"cafe"},replace:{amenity:"cafe"}},{old:{shop:"consulting"},replace:{office:"consulting"}},{old:{shop:"dive"},replace:{shop:"scuba_diving"}},{old:{shop:"fashion"},replace:{shop:"clothes"}},{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:"jewellery"},replace:{shop:"jewelry"}},{old:{shop:"lingerie"},replace:{shop:"clothes",clothes:"underwear"}},{old:{shop:"luggage"},replace:{shop:"bag"}},{old:{shop:"money_transfer"},replace:{amenity:"money_transfer"}},{old:{shop:"moneylender"},replace:{shop:"money_lender"}},{old:{shop:"organic"},replace:{shop:"supermarket",organic:"only"}},{old:{shop:"perfume"},replace:{shop:"perfumery"}},{old:{shop:"real_estate"},replace:{office:"estate_agent"}},{old:{shop:"tickets"},replace:{shop:"ticket"}},{old:{shop:"underwear"},replace:{shop:"clothes",clothes:"underwear"}},{old:{shop:"winery"},replace:{craft:"winery"}},{old:{showers:"*"},replace:{shower:"$1"}},{old:{sloped_curb:"0"},replace:{kerb:"flush"}},{old:{sloped_curb:"0.00"},replace:{kerb:"flush"}},{old:{sloped_curb:"0.01"},replace:{kerb:"lowered","kerb:height":"1 cm"}},{old:{sloped_curb:"0.02"},replace:{kerb:"lowered","kerb:height":"2 cm"}},{old:{sloped_curb:"0.03"},replace:{kerb:"lowered","kerb:height":"3 cm"}},{old:{sloped_curb:"at_grade"},replace:{kerb:"flush"}},{old:{sloped_curb:"both"},replace:{kerb:"lowered"}},{old:{sloped_curb:"flush"},replace:{kerb:"flush"}},{old:{sloped_curb:"low"},replace:{kerb:"lowered"}},{old:{sloped_curb:"no"},replace:{kerb:"raised"}},{old:{sloped_curb:"yes"},replace:{kerb:"lowered"}},{old:{speed_limit:"*"},replace:{maxspeed:"$1"}},{old:{speedlimit:"*"},replace:{maxspeed:"$1"}},{old:{SpeedLimit:"*"},replace:{maxspeed:"$1"}},{old:{SPEEDLIMIT:"*"},replace:{maxspeed:"$1"}},{old:{sport:"horse_shoes"},replace:{sport:"horseshoes"}},{old:{sport:"horseshoe"},replace:{sport:"horseshoes"}},{old:{sport:"shuffle_board"},replace:{sport:"shuffleboard"}},{old:{station:"light_rail"},replace:{station:"light_rail",light_rail:"yes"}},{old:{station:"monorail"},replace:{station:"monorail",monorail:"yes"}},{old:{station:"subway"},replace:{station:"subway",subway:"yes"}},{old:{station:"train"},replace:{station:"train",train:"yes"}},{old:{sustenance:"bar"},replace:{amenity:"bar"}},{old:{sustenance:"cafe"},replace:{amenity:"cafe"}},{old:{sustenance:"pub"},replace:{amenity:"pub"}},{old:{sustenance:"restaurant"},replace:{amenity:"restaurant"}},{old:{"theatre:type":"amphitheatre"},replace:{"theatre:type":"amphi"}},{old:{todo:"*"},replace:{fixme:"$1"}},{old:{TODO:"*"},replace:{fixme:"$1"}},{old:{"toilets:disposal":"longdrop"},replace:{"toilets:disposal":"pitlatrine"}},{old:{"toilets:disposal":"pit_latrine"},replace:{"toilets:disposal":"pitlatrine"}},{old:{tourism:"bed_and_breakfast"},replace:{tourism:"guest_house",guest_house:"bed_and_breakfast"}},{old:{"tower:type":"power"},replace:{power:"tower"}},{old:{"tower:type":"anchor"},replace:{line_attachment:"anchor"}},{old:{"tower:type":"suspension"},replace:{line_attachment:"suspension"}},{old:{"townhall:village":"yes"},replace:{amenity:"townhall","townhall:type":"village"}},{old:{type:"audio",amenity:"studio"},replace:{studio:"audio"}},{old:{type:"broad_leaved"},replace:{leaf_type:"broadleaved"}},{old:{type:"caldera"},replace:{"volcano:type":"caldera"}},{old:{type:"conifer"},replace:{leaf_type:"needleleaved"}},{old:{type:"deciduous"},replace:{leaf_cycle:"deciduous"}},{old:{type:"extinct"},replace:{"volcano:status":"extinct"}},{old:{type:"scoria"},replace:{"volcano:type":"scoria"}},{old:{type:"shield"},replace:{"volcano:type":"shield"}},{old:{type:"strato"},replace:{"volcano:type":"stratovolcano"}},{old:{type:"video",amenity:"studio"},replace:{studio:"video"}},{old:{unnamed:"*"},replace:{noname:"$1"}},{old:{volcano:"extinct"},replace:{"volcano:status":"extinct"}},{old:{wall_type:"noise_barrier"},replace:{wall:"noise_barrier"}},{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"}},{old:{waterway:"lock"},replace:{waterway:"canal",lock:"yes"}},{old:{waterway:"riverbank"},replace:{natural:"water",water:"river"}},{old:{wifi:"yes"},replace:{internet_access:"wlan"}},{old:{wifi:"free"},replace:{internet_access:"wlan","internet_access:fee":"no"}},{old:{women:"*"},replace:{female:"$1"}},{old:{wood:"coniferous"},replace:{leaf_type:"needleleaved"}},{old:{wood:"deciduous"},replace:{leaf_cycle:"deciduous"}},{old:{wood:"evergreen"},replace:{leaf_cycle:"evergreen"}},{old:{wood:"mixed"},replace:{leaf_cycle:"mixed",leaf_type:"mixed"}}];
26822
26823         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,"osmarender:nameDirection":true,"osmarender:renderName":true,"osmarender:renderRef":true,"osmarender:rendernames":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};
26824
26825         var dataLanguages = {af:{nativeName:"Afrikaans"},agq:{nativeName:"Aghem"},ak:{nativeName:"Akan"},am:{nativeName:"አማርኛ"},ar:{nativeName:"العربية"},as:{nativeName:"অসমীয়া"},asa:{nativeName:"Kipare"},ast:{nativeName:"asturianu"},az:{nativeName:"azərbaycan"},"az-Cyrl":{base:"az",script:"Cyrl"},"az-Latn":{base:"az",script:"Latn"},bas:{nativeName:"Ɓàsàa"},be:{nativeName:"беларуская"},bem:{nativeName:"Ichibemba"},bez:{nativeName:"Hibena"},bg:{nativeName:"български"},bm:{nativeName:"bamanakan"},bn:{nativeName:"বাংলা"},bo:{nativeName:"བོད་སྐད་"},br:{nativeName:"brezhoneg"},brx:{nativeName:"बड़ो"},bs:{nativeName:"bosanski"},"bs-Cyrl":{base:"bs",script:"Cyrl"},"bs-Latn":{base:"bs",script:"Latn"},ca:{nativeName:"català"},ccp:{nativeName:"𑄌𑄋𑄴𑄟𑄳𑄦"},ce:{nativeName:"нохчийн"},ceb:{nativeName:"Binisaya"},cgg:{nativeName:"Rukiga"},chr:{nativeName:"ᏣᎳᎩ"},ckb:{nativeName:"کوردیی ناوەندی"},cs:{nativeName:"čeština"},cu:{nativeName:"cu"},cy:{nativeName:"Cymraeg"},da:{nativeName:"dansk"},dav:{nativeName:"Kitaita"},de:{nativeName:"Deutsch"},dje:{nativeName:"Zarmaciine"},dsb:{nativeName:"dolnoserbšćina"},dua:{nativeName:"duálá"},dyo:{nativeName:"joola"},dz:{nativeName:"རྫོང་ཁ"},ebu:{nativeName:"Kĩembu"},ee:{nativeName:"Eʋegbe"},el:{nativeName:"Ελληνικά"},en:{nativeName:"English"},eo:{nativeName:"esperanto"},es:{nativeName:"español"},et:{nativeName:"eesti"},eu:{nativeName:"euskara"},ewo:{nativeName:"ewondo"},fa:{nativeName:"فارسی"},ff:{nativeName:"Pulaar"},"ff-Latn":{base:"ff",script:"Latn"},fi:{nativeName:"suomi"},fil:{nativeName:"Filipino"},fo:{nativeName:"føroyskt"},fr:{nativeName:"français"},fur:{nativeName:"furlan"},fy:{nativeName:"Frysk"},ga:{nativeName:"Gaeilge"},gd:{nativeName:"Gàidhlig"},gl:{nativeName:"galego"},gsw:{nativeName:"Schwiizertüütsch"},gu:{nativeName:"ગુજરાતી"},guz:{nativeName:"Ekegusii"},gv:{nativeName:"Gaelg"},ha:{nativeName:"Hausa"},haw:{nativeName:"ʻŌlelo Hawaiʻi"},he:{nativeName:"עברית"},hi:{nativeName:"हिन्दी"},hr:{nativeName:"hrvatski"},hsb:{nativeName:"hornjoserbšćina"},hu:{nativeName:"magyar"},hy:{nativeName:"հայերեն"},ia:{nativeName:"interlingua"},id:{nativeName:"Indonesia"},ig:{nativeName:"Asụsụ Igbo"},ii:{nativeName:"ꆈꌠꉙ"},is:{nativeName:"íslenska"},it:{nativeName:"italiano"},ja:{nativeName:"日本語"},"ja-Hira":{base:"ja",script:"Hira"},"ja-Latn":{base:"ja",script:"Latn"},jgo:{nativeName:"Ndaꞌa"},jmc:{nativeName:"Kimachame"},jv:{nativeName:"Jawa"},ka:{nativeName:"ქართული"},kab:{nativeName:"Taqbaylit"},kam:{nativeName:"Kikamba"},kde:{nativeName:"Chimakonde"},kea:{nativeName:"kabuverdianu"},khq:{nativeName:"Koyra ciini"},ki:{nativeName:"Gikuyu"},kk:{nativeName:"қазақ тілі"},kkj:{nativeName:"kakɔ"},kl:{nativeName:"kalaallisut"},kln:{nativeName:"Kalenjin"},km:{nativeName:"ខ្មែរ"},kn:{nativeName:"ಕನ್ನಡ"},ko:{nativeName:"한국어"},"ko-Latn":{base:"ko",script:"Latn"},kok:{nativeName:"कोंकणी"},ks:{nativeName:"کٲشُر"},ksb:{nativeName:"Kishambaa"},ksf:{nativeName:"rikpa"},ksh:{nativeName:"Kölsch"},ku:{nativeName:"kurdî"},kw:{nativeName:"kernewek"},ky:{nativeName:"кыргызча"},lag:{nativeName:"Kɨlaangi"},lb:{nativeName:"Lëtzebuergesch"},lg:{nativeName:"Luganda"},lkt:{nativeName:"Lakȟólʼiyapi"},ln:{nativeName:"lingála"},lo:{nativeName:"ລາວ"},lrc:{nativeName:"لۊری شومالی"},lt:{nativeName:"lietuvių"},lu:{nativeName:"Tshiluba"},luo:{nativeName:"Dholuo"},luy:{nativeName:"Luluhia"},lv:{nativeName:"latviešu"},mas:{nativeName:"Maa"},mer:{nativeName:"Kĩmĩrũ"},mfe:{nativeName:"kreol morisien"},mg:{nativeName:"Malagasy"},mgh:{nativeName:"Makua"},mgo:{nativeName:"metaʼ"},mi:{nativeName:"Māori"},mk:{nativeName:"македонски"},ml:{nativeName:"മലയാളം"},mn:{nativeName:"монгол"},mr:{nativeName:"मराठी"},ms:{nativeName:"Melayu"},mt:{nativeName:"Malti"},mua:{nativeName:"MUNDAŊ"},my:{nativeName:"မြန်မာ"},mzn:{nativeName:"مازرونی"},naq:{nativeName:"Khoekhoegowab"},nb:{nativeName:"norsk bokmål"},nd:{nativeName:"isiNdebele"},nds:{nativeName:"nds"},ne:{nativeName:"नेपाली"},nl:{nativeName:"Nederlands"},nmg:{nativeName:"nmg"},nn:{nativeName:"nynorsk"},nnh:{nativeName:"Shwóŋò ngiembɔɔn"},nus:{nativeName:"Thok Nath"},nyn:{nativeName:"Runyankore"},oc:{nativeName:"Occitan"},om:{nativeName:"Oromoo"},or:{nativeName:"ଓଡ଼ିଆ"},os:{nativeName:"ирон"},pa:{nativeName:"ਪੰਜਾਬੀ"},"pa-Arab":{base:"pa",script:"Arab"},"pa-Guru":{base:"pa",script:"Guru"},pl:{nativeName:"polski"},prg:{nativeName:"prūsiskan"},ps:{nativeName:"پښتو"},pt:{nativeName:"português"},qu:{nativeName:"Runasimi"},rm:{nativeName:"rumantsch"},rn:{nativeName:"Ikirundi"},ro:{nativeName:"română"},rof:{nativeName:"Kihorombo"},root:{nativeName:"root"},ru:{nativeName:"русский"},rw:{nativeName:"Kinyarwanda"},rwk:{nativeName:"Kiruwa"},sah:{nativeName:"саха тыла"},saq:{nativeName:"Kisampur"},sbp:{nativeName:"Ishisangu"},sd:{nativeName:"سنڌي"},se:{nativeName:"davvisámegiella"},seh:{nativeName:"sena"},ses:{nativeName:"Koyraboro senni"},sg:{nativeName:"Sängö"},shi:{nativeName:"ⵜⴰⵛⵍⵃⵉⵜ"},"shi-Latn":{base:"shi",script:"Latn"},"shi-Tfng":{base:"shi",script:"Tfng"},si:{nativeName:"සිංහල"},sk:{nativeName:"slovenčina"},sl:{nativeName:"slovenščina"},smn:{nativeName:"anarâškielâ"},sn:{nativeName:"chiShona"},so:{nativeName:"Soomaali"},sq:{nativeName:"shqip"},sr:{nativeName:"српски"},"sr-Cyrl":{base:"sr",script:"Cyrl"},"sr-Latn":{base:"sr",script:"Latn"},sv:{nativeName:"svenska"},sw:{nativeName:"Kiswahili"},ta:{nativeName:"தமிழ்"},te:{nativeName:"తెలుగు"},teo:{nativeName:"Kiteso"},tg:{nativeName:"тоҷикӣ"},th:{nativeName:"ไทย"},ti:{nativeName:"ትግርኛ"},tk:{nativeName:"türkmen dili"},to:{nativeName:"lea fakatonga"},tr:{nativeName:"Türkçe"},tt:{nativeName:"татар"},twq:{nativeName:"Tasawaq senni"},tzm:{nativeName:"Tamaziɣt n laṭlaṣ"},ug:{nativeName:"ئۇيغۇرچە"},uk:{nativeName:"українська"},ur:{nativeName:"اردو"},uz:{nativeName:"o‘zbek"},"uz-Arab":{base:"uz",script:"Arab"},"uz-Cyrl":{base:"uz",script:"Cyrl"},"uz-Latn":{base:"uz",script:"Latn"},vai:{nativeName:"ꕙꔤ"},"vai-Latn":{base:"vai",script:"Latn"},"vai-Vaii":{base:"vai",script:"Vaii"},vi:{nativeName:"Tiếng Việt"},vo:{nativeName:"vo"},vun:{nativeName:"Kyivunjo"},wae:{nativeName:"Walser"},wo:{nativeName:"Wolof"},xh:{nativeName:"isiXhosa"},xog:{nativeName:"Olusoga"},yav:{nativeName:"nuasue"},yi:{nativeName:"ייִדיש"},yo:{nativeName:"Èdè Yorùbá"},yue:{nativeName:"粵語"},"yue-Hans":{base:"yue",script:"Hans"},"yue-Hant":{base:"yue",script:"Hant"},zgh:{nativeName:"ⵜⴰⵎⴰⵣⵉⵖⵜ"},zh:{nativeName:"中文"},"zh-Hans":{base:"zh",script:"Hans",nativeName:"简体中文"},"zh-Hant":{base:"zh",script:"Hant",nativeName:"繁體中文"},zh_pinyin:{base:"zh",script:"Latn"},zu:{nativeName:"isiZulu"}};
26826
26827         var dataLocales = {af:{rtl:false,languageNames:{aa:"Afar",ab:"Abkasies",ace:"Atsjenees",ach:"Akoli",ada:"Adangme",ady:"Adyghe",af:"Afrikaans",agq:"Aghem",ain:"Ainu",ak:"Akan",ale:"Aleut",alt:"Suid-Altai",am:"Amharies",an:"Aragonees",anp:"Angika",ar:"Arabies","ar-001":"Moderne Standaardarabies",arc:"Aramees",arn:"Mapuche",arp:"Arapaho",as:"Assamees",asa:"Asu",ast:"Asturies",av:"Avaries",awa:"Awadhi",ay:"Aymara",az:"Azerbeidjans",ba:"Baskir",ban:"Balinees",bas:"Basaa",be:"Belarussies",bem:"Bemba",bez:"Bena",bg:"Bulgaars",bgn:"Wes-Balochi",bho:"Bhojpuri",bi:"Bislama",bin:"Bini",bla:"Siksika",bm:"Bambara",bn:"Bengaals",bo:"Tibettaans",br:"Bretons",brx:"Bodo",bs:"Bosnies",bug:"Buginees",byn:"Blin",ca:"Katalaans",ccp:"Tsjaakma",ce:"Tsjetsjeens",ceb:"Cebuano",cgg:"Kiga",ch:"Chamorro",chk:"Chuukees",chm:"Mari",cho:"Choctaw",chr:"Cherokees",chy:"Cheyennees",ckb:"Sorani",co:"Korsikaans",cop:"Kopties",crs:"Seselwa Franskreools",cs:"Tsjeggies",cu:"Kerkslawies",cv:"Chuvash",cy:"Wallies",da:"Deens",dak:"Dakotaans",dar:"Dakota",dav:"Taita",de:"Duits","de-AT":"Duits (Oostenryk)","de-CH":"Duits (Switserland)",dgr:"Dogrib",dje:"Zarma",dsb:"Benedesorbies",dua:"Duala",dv:"Divehi",dyo:"Jola-Fonyi",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egy:"Antieke Egipties",eka:"Ekajuk",el:"Grieks",en:"Engels","en-AU":"Engels (Australië)","en-CA":"Engels (Kanada)","en-GB":"Engels (VK)","en-US":"Engels (VSA)",eo:"Esperanto",es:"Spaans","es-419":"Spaans (Latyns-Amerika)","es-ES":"Spaans (Spanje)","es-MX":"Spaans (Meksiko)",et:"Estnies",eu:"Baskies",ewo:"Ewondo",fa:"Persies",ff:"Fulah",fi:"Fins",fil:"Filippyns",fj:"Fidjiaans",fo:"Faroëes",fon:"Fon",fr:"Frans","fr-CA":"Frans (Kanada)","fr-CH":"Frans (Switserland)",fur:"Friuliaans",fy:"Fries",ga:"Iers",gaa:"Gaa",gag:"Gagauz",gan:"Gan-Sjinees",gd:"Skotse Gallies",gez:"Geez",gil:"Gilbertees",gl:"Galisies",gn:"Guarani",gor:"Gorontalo",got:"Goties",grc:"Antieke Grieks",gsw:"Switserse Duits",gu:"Goedjarati",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hak:"Hakka-Sjinees",haw:"Hawais",he:"Hebreeus",hi:"Hindi",hil:"Hiligaynon",hit:"Hetities",hmn:"Hmong",hr:"Kroaties",hsb:"Oppersorbies",hsn:"Xiang-Sjinees",ht:"Haïtiaans",hu:"Hongaars",hup:"Hupa",hy:"Armeens",hz:"Herero",ia:"Interlingua",iba:"Ibanees",ibb:"Ibibio",id:"Indonesies",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Yslands",it:"Italiaans",iu:"Inuïties",ja:"Japannees",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jv:"Javaans",ka:"Georgies",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kbd:"Kabardiaans",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",kfo:"Koro",kg:"Kongolees",kha:"Khasi",khq:"Koyra Chiini",ki:"Kikuyu",kj:"Kuanyama",kk:"Kazaks",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Koreaans",koi:"Komi-Permyaks",kok:"Konkani",kpe:"Kpellees",kr:"Kanuri",krc:"Karachay-Balkar",krl:"Karelies",kru:"Kurukh",ks:"Kasjmirs",ksb:"Shambala",ksf:"Bafia",ksh:"Keuls",ku:"Koerdies",kum:"Kumyk",kv:"Komi",kw:"Kornies",ky:"Kirgisies",la:"Latyn",lad:"Ladino",lag:"Langi",lb:"Luxemburgs",lez:"Lezghies",lg:"Ganda",li:"Limburgs",lkt:"Lakota",ln:"Lingaals",lo:"Lao",loz:"Lozi",lrc:"Noord-Luri",lt:"Litaus",lu:"Luba-Katanga",lua:"Luba-Lulua",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Letties",mad:"Madurees",mag:"Magahi",mai:"Maithili",mak:"Makasar",mas:"Masai",mdf:"Moksha",men:"Mende",mer:"Meru",mfe:"Morisjen",mg:"Malgassies",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshallees",mi:"Maori",mic:"Micmac",min:"Minangkabaus",mk:"Masedonies",ml:"Malabaars",mn:"Mongools",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",ms:"Maleis",mt:"Maltees",mua:"Mundang",mus:"Kreek",mwl:"Mirandees",my:"Birmaans",myv:"Erzya",mzn:"Masanderani",na:"Nauru",nan:"Min Nan-Sjinees",nap:"Neapolitaans",naq:"Nama",nb:"Boeknoors",nd:"Noord-Ndebele",nds:"Nederduits","nds-NL":"Nedersaksies",ne:"Nepalees","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niueaans",nl:"Nederlands","nl-BE":"Vlaams",nmg:"Kwasio",nn:"Nuwe Noors",nnh:"Ngiemboon",no:"Noors",nog:"Nogai",nqo:"N’Ko",nr:"Suid-Ndebele",nso:"Noord-Sotho",nus:"Nuer",nv:"Navajo",ny:"Nyanja",nyn:"Nyankole",oc:"Oksitaans",om:"Oromo",or:"Oriya",os:"Osseties",pa:"Pandjabi",pag:"Pangasinan",pam:"Pampanga",pap:"Papiamento",pau:"Palauaans",pcm:"Nigeriese Pidgin",phn:"Fenisies",pl:"Pools",prg:"Pruisies",ps:"Pasjto",pt:"Portugees","pt-BR":"Portugees (Brasilië)","pt-PT":"Portugees (Portugal)",qu:"Quechua",quc:"K’iche’",rap:"Rapanui",rar:"Rarotongaans",rm:"Reto-Romaans",rn:"Rundi",ro:"Roemeens","ro-MD":"Roemeens (Moldowa)",rof:"Rombo",root:"Root",ru:"Russies",rup:"Aromanies",rw:"Rwandees",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawees",sah:"Sakhaans",saq:"Samburu",sat:"Santalies",sba:"Ngambay",sbp:"Sangu",sc:"Sardinies",scn:"Sisiliaans",sco:"Skots",sd:"Sindhi",sdh:"Suid-Koerdies",se:"Noord-Sami",seh:"Sena",ses:"Koyraboro Senni",sg:"Sango",sh:"Serwo-Kroaties",shi:"Tachelhit",shn:"Shan",si:"Sinhala",sk:"Slowaaks",sl:"Sloweens",sm:"Samoaans",sma:"Suid-Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somalies",sq:"Albanees",sr:"Serwies",srn:"Sranan Tongo",ss:"Swazi",ssy:"Saho",st:"Suid-Sotho",su:"Sundanees",suk:"Sukuma",sv:"Sweeds",sw:"Swahili","sw-CD":"Swahili (Demokratiese Republiek van die Kongo)",swb:"Comoraans",syr:"Siries",ta:"Tamil",te:"Teloegoe",tem:"Timne",teo:"Teso",tet:"Tetoem",tg:"Tadjiks",th:"Thai",ti:"Tigrinya",tig:"Tigre",tk:"Turkmeens",tlh:"Klingon",tn:"Tswana",to:"Tongaans",tpi:"Tok Pisin",tr:"Turks",trv:"Taroko",ts:"Tsonga",tt:"Tataars",tum:"Toemboeka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahities",tyv:"Tuvinees",tzm:"Sentraal-Atlas-Tamazight",udm:"Udmurt",ug:"Uighur",uk:"Oekraïens",umb:"Umbundu",ur:"Oerdoe",uz:"Oezbeeks",vai:"Vai",ve:"Venda",vi:"Viëtnamees",vo:"Volapük",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu-Sjinees",xal:"Kalmyk",xh:"Xhosa",xog:"Soga",yav:"Yangben",ybb:"Yemba",yi:"Jiddisj",yo:"Yoruba",yue:"Kantonees",zgh:"Standaard Marokkaanse Tamazight",zh:"Chinees","zh-Hans":"Mandarynse Chinees (Vereenvoudigd)","zh-Hant":"Mandarynse Chinees (Tradisioneel)",zu:"Zoeloe",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Sirillies",Latn:"Latyn",Arab:"Arabies",Guru:"Gurmukhi",Hans:"Vereenvoudig",Hant:"Tradisioneel"}},ar:{rtl:true,languageNames:{aa:"الأفارية",ab:"الأبخازية",ace:"الأتشينيزية",ach:"الأكولية",ada:"الأدانجمية",ady:"الأديغة",ae:"الأفستية",af:"الأفريقانية",afh:"الأفريهيلية",agq:"الأغم",ain:"الآينوية",ak:"الأكانية",akk:"الأكادية",ale:"الأليوتية",alt:"الألطائية الجنوبية",am:"الأمهرية",an:"الأراغونية",ang:"الإنجليزية القديمة",anp:"الأنجيكا",ar:"العربية","ar-001":"العربية الفصحى الحديثة",arc:"الآرامية",arn:"المابودونغونية",arp:"الأراباهو",ars:"اللهجة النجدية",arw:"الأراواكية",as:"الأسامية",asa:"الآسو",ast:"الأسترية",av:"الأوارية",awa:"الأوادية",ay:"الأيمارا",az:"الأذربيجانية",ba:"الباشكيرية",bal:"البلوشية",ban:"البالينية",bas:"الباسا",bax:"بامن",bbj:"لغة الغومالا",be:"البيلاروسية",bej:"البيجا",bem:"البيمبا",bez:"بينا",bfd:"لغة البافوت",bg:"البلغارية",bgn:"البلوشية الغربية",bho:"البهوجبورية",bi:"البيسلامية",bik:"البيكولية",bin:"البينية",bkm:"لغة الكوم",bla:"السيكسيكية",bm:"البامبارا",bn:"البنغالية",bo:"التبتية",br:"البريتونية",bra:"البراجية",brx:"البودو",bs:"البوسنية",bss:"أكوس",bua:"البرياتية",bug:"البجينيزية",bum:"لغة البولو",byn:"البلينية",byv:"لغة الميدومبا",ca:"الكتالانية",cad:"الكادو",car:"الكاريبية",cay:"الكايوجية",cch:"الأتسام",ccp:"تشاكما",ce:"الشيشانية",ceb:"السيبيوانية",cgg:"تشيغا",ch:"التشامورو",chb:"التشيبشا",chg:"التشاجاتاي",chk:"التشكيزية",chm:"الماري",chn:"الشينوك جارجون",cho:"الشوكتو",chp:"الشيباوايان",chr:"الشيروكي",chy:"الشايان",ckb:"السورانية الكردية",co:"الكورسيكية",cop:"القبطية",cr:"الكرى",crh:"لغة تتار القرم",crs:"الفرنسية الكريولية السيشيلية",cs:"التشيكية",csb:"الكاشبايان",cu:"سلافية كنسية",cv:"التشوفاشي",cy:"الويلزية",da:"الدانمركية",dak:"الداكوتا",dar:"الدارجوا",dav:"تيتا",de:"الألمانية","de-AT":"الألمانية النمساوية","de-CH":"الألمانية العليا السويسرية",del:"الديلوير",den:"السلافية",dgr:"الدوجريب",din:"الدنكا",dje:"الزارمية",doi:"الدوجرية",dsb:"صوربيا السفلى",dua:"الديولا",dum:"الهولندية الوسطى",dv:"المالديفية",dyo:"جولا فونيا",dyu:"الدايلا",dz:"الزونخاية",dzg:"القرعانية",ebu:"إمبو",ee:"الإيوي",efi:"الإفيك",egy:"المصرية القديمة",eka:"الإكاجك",el:"اليونانية",elx:"الإمايت",en:"الإنجليزية","en-AU":"الإنجليزية الأسترالية","en-CA":"الإنجليزية الكندية","en-GB":"الإنجليزية البريطانية","en-US":"الإنجليزية الأمريكية",enm:"الإنجليزية الوسطى",eo:"الإسبرانتو",es:"الإسبانية","es-419":"الإسبانية أمريكا اللاتينية","es-ES":"الإسبانية الأوروبية","es-MX":"الإسبانية المكسيكية",et:"الإستونية",eu:"الباسكية",ewo:"الإيوندو",fa:"الفارسية",fan:"الفانج",fat:"الفانتي",ff:"الفولانية",fi:"الفنلندية",fil:"الفلبينية",fj:"الفيجية",fo:"الفاروية",fon:"الفون",fr:"الفرنسية","fr-CA":"الفرنسية الكندية","fr-CH":"الفرنسية السويسرية",frc:"الفرنسية الكاجونية",frm:"الفرنسية الوسطى",fro:"الفرنسية القديمة",frr:"الفريزينية الشمالية",frs:"الفريزينية الشرقية",fur:"الفريلايان",fy:"الفريزيان",ga:"الأيرلندية",gaa:"الجا",gag:"الغاغوز",gan:"الغان الصينية",gay:"الجايو",gba:"الجبيا",gd:"الغيلية الأسكتلندية",gez:"الجعزية",gil:"لغة أهل جبل طارق",gl:"الجاليكية",gmh:"الألمانية العليا الوسطى",gn:"الغوارانية",goh:"الألمانية العليا القديمة",gon:"الجندي",gor:"الجورونتالو",got:"القوطية",grb:"الجريبو",grc:"اليونانية القديمة",gsw:"الألمانية السويسرية",gu:"الغوجاراتية",guz:"الغيزية",gv:"المنكية",gwi:"غوتشن",ha:"الهوسا",hai:"الهيدا",hak:"الهاكا الصينية",haw:"لغة هاواي",he:"العبرية",hi:"الهندية",hil:"الهيليجينون",hit:"الحثية",hmn:"الهمونجية",ho:"الهيري موتو",hr:"الكرواتية",hsb:"الصوربية العليا",hsn:"شيانغ الصينية",ht:"الكريولية الهايتية",hu:"الهنغارية",hup:"الهبا",hy:"الأرمنية",hz:"الهيريرو",ia:"اللّغة الوسيطة",iba:"الإيبان",ibb:"الإيبيبيو",id:"الإندونيسية",ie:"الإنترلينج",ig:"الإيجبو",ii:"السيتشيون يي",ik:"الإينبياك",ilo:"الإيلوكو",inh:"الإنجوشية",io:"الإيدو",is:"الأيسلندية",it:"الإيطالية",iu:"الإينكتيتت",ja:"اليابانية",jbo:"اللوجبان",jgo:"نغومبا",jmc:"الماتشامية",jpr:"الفارسية اليهودية",jrb:"العربية اليهودية",jv:"الجاوية",ka:"الجورجية",kaa:"الكارا-كالباك",kab:"القبيلية",kac:"الكاتشين",kaj:"الجو",kam:"الكامبا",kaw:"الكوي",kbd:"الكاباردايان",kbl:"كانمبو",kcg:"التايابية",kde:"ماكونده",kea:"كابوفيرديانو",kfo:"الكورو",kg:"الكونغو",kha:"الكازية",kho:"الخوتانيز",khq:"كويرا تشيني",ki:"الكيكيو",kj:"الكيونياما",kk:"الكازاخستانية",kkj:"لغة الكاكو",kl:"الكالاليست",kln:"كالينجين",km:"الخميرية",kmb:"الكيمبندو",kn:"الكانادا",ko:"الكورية",koi:"كومي-بيرماياك",kok:"الكونكانية",kos:"الكوسراين",kpe:"الكبيل",kr:"الكانوري",krc:"الكاراتشاي-بالكار",krl:"الكاريلية",kru:"الكوروخ",ks:"الكشميرية",ksb:"شامبالا",ksf:"لغة البافيا",ksh:"لغة الكولونيان",ku:"الكردية",kum:"القموقية",kut:"الكتيناي",kv:"الكومي",kw:"الكورنية",ky:"القيرغيزية",la:"اللاتينية",lad:"اللادينو",lag:"لانجي",lah:"اللاهندا",lam:"اللامبا",lb:"اللكسمبورغية",lez:"الليزجية",lg:"الغاندا",li:"الليمبورغية",lkt:"لاكوتا",ln:"اللينجالا",lo:"اللاوية",lol:"منغولى",lou:"الكريولية اللويزيانية",loz:"اللوزي",lrc:"اللرية الشمالية",lt:"الليتوانية",lu:"اللوبا كاتانغا",lua:"اللبا-لؤلؤ",lui:"اللوسينو",lun:"اللوندا",luo:"اللو",lus:"الميزو",luy:"لغة اللويا",lv:"اللاتفية",mad:"المادريز",mag:"الماجا",mai:"المايثيلي",mak:"الماكاسار",man:"الماندينغ",mas:"الماساي",mde:"مابا",mdf:"الموكشا",mdr:"الماندار",men:"الميند",mer:"الميرو",mfe:"المورسيانية",mg:"الملغاشي",mga:"الأيرلندية الوسطى",mgh:"ماخاوا-ميتو",mgo:"ميتا",mh:"المارشالية",mi:"الماورية",mic:"الميكماكيونية",min:"المينانجكاباو",mk:"المقدونية",ml:"المالايالامية",mn:"المنغولية",mnc:"المانشو",mni:"المانيبورية",moh:"الموهوك",mos:"الموسي",mr:"الماراثية",ms:"الماليزية",mt:"المالطية",mua:"مندنج",mus:"الكريك",mwl:"الميرانديز",mwr:"الماروارية",my:"البورمية",myv:"الأرزية",mzn:"المازندرانية",na:"النورو",nan:"مين-نان الصينية",nap:"النابولية",naq:"لغة الناما",nb:"النرويجية بوكمال",nd:"النديبيل الشمالية",nds:"الألمانية السفلى","nds-NL":"السكسونية السفلى",ne:"النيبالية","new":"النوارية",ng:"الندونجا",nia:"النياس",niu:"النيوي",nl:"الهولندية","nl-BE":"الفلمنكية",nmg:"كواسيو",nn:"النرويجية نينورسك",nnh:"لغة النجيمبون",no:"النرويجية",nog:"النوجاي",non:"النورس القديم",nqo:"أنكو",nr:"النديبيل الجنوبي",nso:"السوتو الشمالية",nus:"النوير",nv:"النافاجو",nwc:"النوارية التقليدية",ny:"النيانجا",nym:"النيامويزي",nyn:"النيانكول",nyo:"النيورو",nzi:"النزيما",oc:"الأوكسيتانية",oj:"الأوجيبوا",om:"الأورومية",or:"الأورية",os:"الأوسيتيك",osa:"الأوساج",ota:"التركية العثمانية",pa:"البنجابية",pag:"البانجاسينان",pal:"البهلوية",pam:"البامبانجا",pap:"البابيامينتو",pau:"البالوان",pcm:"البدجنية النيجيرية",peo:"الفارسية القديمة",phn:"الفينيقية",pi:"البالية",pl:"البولندية",pon:"البوهنبيايان",prg:"البروسياوية",pro:"البروفانسية القديمة",ps:"البشتو",pt:"البرتغالية","pt-BR":"البرتغالية البرازيلية","pt-PT":"البرتغالية الأوروبية",qu:"الكويتشوا",quc:"الكيشية",raj:"الراجاسثانية",rap:"الراباني",rar:"الراروتونجاني",rm:"الرومانشية",rn:"الرندي",ro:"الرومانية","ro-MD":"المولدوفية",rof:"الرومبو",rom:"الغجرية",root:"الجذر",ru:"الروسية",rup:"الأرومانيان",rw:"الكينيارواندا",rwk:"الروا",sa:"السنسكريتية",sad:"السانداوي",sah:"الساخيّة",sam:"الآرامية السامرية",saq:"سامبورو",sas:"الساساك",sat:"السانتالية",sba:"نامبي",sbp:"سانغو",sc:"السردينية",scn:"الصقلية",sco:"الأسكتلندية",sd:"السندية",sdh:"الكردية الجنوبية",se:"سامي الشمالية",see:"السنيكا",seh:"سينا",sel:"السيلكب",ses:"كويرابورو سيني",sg:"السانجو",sga:"الأيرلندية القديمة",sh:"صربية-كرواتية",shi:"تشلحيت",shn:"الشان",shu:"العربية التشادية",si:"السنهالية",sid:"السيدامو",sk:"السلوفاكية",sl:"السلوفانية",sm:"الساموائية",sma:"السامي الجنوبي",smj:"اللول سامي",smn:"الإيناري سامي",sms:"السكولت سامي",sn:"الشونا",snk:"السونينك",so:"الصومالية",sog:"السوجدين",sq:"الألبانية",sr:"الصربية",srn:"السرانان تونجو",srr:"السرر",ss:"السواتي",ssy:"لغة الساهو",st:"السوتو الجنوبية",su:"السوندانية",suk:"السوكوما",sus:"السوسو",sux:"السومارية",sv:"السويدية",sw:"السواحلية","sw-CD":"الكونغو السواحلية",swb:"القمرية",syc:"سريانية تقليدية",syr:"السريانية",ta:"التاميلية",te:"التيلوغوية",tem:"التيمن",teo:"تيسو",ter:"التيرينو",tet:"التيتم",tg:"الطاجيكية",th:"التايلاندية",ti:"التغرينية",tig:"التيغرية",tiv:"التيف",tk:"التركمانية",tkl:"التوكيلاو",tl:"التاغالوغية",tlh:"الكلينجون",tli:"التلينغيتية",tmh:"التاماشيك",tn:"التسوانية",to:"التونغية",tog:"تونجا - نياسا",tpi:"التوك بيسين",tr:"التركية",trv:"لغة التاروكو",ts:"السونجا",tsi:"التسيمشيان",tt:"التترية",tum:"التامبوكا",tvl:"التوفالو",tw:"التوي",twq:"تاساواق",ty:"التاهيتية",tyv:"التوفية",tzm:"الأمازيغية وسط الأطلس",udm:"الأدمرت",ug:"الأويغورية",uga:"اليجاريتيك",uk:"الأوكرانية",umb:"الأمبندو",ur:"الأوردية",uz:"الأوزبكية",vai:"الفاي",ve:"الفيندا",vi:"الفيتنامية",vo:"لغة الفولابوك",vot:"الفوتيك",vun:"الفونجو",wa:"الولونية",wae:"الوالسر",wal:"الولاياتا",war:"الواراي",was:"الواشو",wbp:"وارلبيري",wo:"الولوفية",wuu:"الوو الصينية",xal:"الكالميك",xh:"الخوسا",xog:"السوغا",yao:"الياو",yap:"اليابيز",yav:"يانجبن",ybb:"يمبا",yi:"اليديشية",yo:"اليوروبا",yue:"الكَنْتُونية",za:"الزهيونج",zap:"الزابوتيك",zbl:"رموز المعايير الأساسية",zen:"الزيناجا",zgh:"التمازيغية المغربية القياسية",zh:"الصينية","zh-Hans":"الصينية (المبسطة)","zh-Hant":"الصينية (التقليدية)",zu:"الزولو",zun:"الزونية",zza:"زازا"},scriptNames:{Cyrl:"السيريلية",Latn:"اللاتينية",Arab:"العربية",Guru:"الجرمخي",Tfng:"التيفيناغ",Vaii:"الفاي",Hans:"المبسطة",Hant:"التقليدية"}},"ar-AA":{rtl:true,languageNames:{aa:"الأفارية",ab:"الأبخازية",ace:"الأتشينيزية",ach:"الأكولية",ada:"الأدانجمية",ady:"الأديغة",ae:"الأفستية",af:"الأفريقانية",afh:"الأفريهيلية",agq:"الأغم",ain:"الآينوية",ak:"الأكانية",akk:"الأكادية",ale:"الأليوتية",alt:"الألطائية الجنوبية",am:"الأمهرية",an:"الأراغونية",ang:"الإنجليزية القديمة",anp:"الأنجيكا",ar:"العربية","ar-001":"العربية الفصحى الحديثة",arc:"الآرامية",arn:"المابودونغونية",arp:"الأراباهو",ars:"اللهجة النجدية",arw:"الأراواكية",as:"الأسامية",asa:"الآسو",ast:"الأسترية",av:"الأوارية",awa:"الأوادية",ay:"الأيمارا",az:"الأذربيجانية",ba:"الباشكيرية",bal:"البلوشية",ban:"البالينية",bas:"الباسا",bax:"بامن",bbj:"لغة الغومالا",be:"البيلاروسية",bej:"البيجا",bem:"البيمبا",bez:"بينا",bfd:"لغة البافوت",bg:"البلغارية",bgn:"البلوشية الغربية",bho:"البهوجبورية",bi:"البيسلامية",bik:"البيكولية",bin:"البينية",bkm:"لغة الكوم",bla:"السيكسيكية",bm:"البامبارا",bn:"البنغالية",bo:"التبتية",br:"البريتونية",bra:"البراجية",brx:"البودو",bs:"البوسنية",bss:"أكوس",bua:"البرياتية",bug:"البجينيزية",bum:"لغة البولو",byn:"البلينية",byv:"لغة الميدومبا",ca:"الكتالانية",cad:"الكادو",car:"الكاريبية",cay:"الكايوجية",cch:"الأتسام",ccp:"تشاكما",ce:"الشيشانية",ceb:"السيبيوانية",cgg:"تشيغا",ch:"التشامورو",chb:"التشيبشا",chg:"التشاجاتاي",chk:"التشكيزية",chm:"الماري",chn:"الشينوك جارجون",cho:"الشوكتو",chp:"الشيباوايان",chr:"الشيروكي",chy:"الشايان",ckb:"السورانية الكردية",co:"الكورسيكية",cop:"القبطية",cr:"الكرى",crh:"لغة تتار القرم",crs:"الفرنسية الكريولية السيشيلية",cs:"التشيكية",csb:"الكاشبايان",cu:"سلافية كنسية",cv:"التشوفاشي",cy:"الويلزية",da:"الدانمركية",dak:"الداكوتا",dar:"الدارجوا",dav:"تيتا",de:"الألمانية","de-AT":"الألمانية النمساوية","de-CH":"الألمانية العليا السويسرية",del:"الديلوير",den:"السلافية",dgr:"الدوجريب",din:"الدنكا",dje:"الزارمية",doi:"الدوجرية",dsb:"صوربيا السفلى",dua:"الديولا",dum:"الهولندية الوسطى",dv:"المالديفية",dyo:"جولا فونيا",dyu:"الدايلا",dz:"الزونخاية",dzg:"القرعانية",ebu:"إمبو",ee:"الإيوي",efi:"الإفيك",egy:"المصرية القديمة",eka:"الإكاجك",el:"اليونانية",elx:"الإمايت",en:"الإنجليزية","en-AU":"الإنجليزية الأسترالية","en-CA":"الإنجليزية الكندية","en-GB":"الإنجليزية البريطانية","en-US":"الإنجليزية الأمريكية",enm:"الإنجليزية الوسطى",eo:"الإسبرانتو",es:"الإسبانية","es-419":"الإسبانية أمريكا اللاتينية","es-ES":"الإسبانية الأوروبية","es-MX":"الإسبانية المكسيكية",et:"الإستونية",eu:"الباسكية",ewo:"الإيوندو",fa:"الفارسية",fan:"الفانج",fat:"الفانتي",ff:"الفولانية",fi:"الفنلندية",fil:"الفلبينية",fj:"الفيجية",fo:"الفاروية",fon:"الفون",fr:"الفرنسية","fr-CA":"الفرنسية الكندية","fr-CH":"الفرنسية السويسرية",frc:"الفرنسية الكاجونية",frm:"الفرنسية الوسطى",fro:"الفرنسية القديمة",frr:"الفريزينية الشمالية",frs:"الفريزينية الشرقية",fur:"الفريلايان",fy:"الفريزيان",ga:"الأيرلندية",gaa:"الجا",gag:"الغاغوز",gan:"الغان الصينية",gay:"الجايو",gba:"الجبيا",gd:"الغيلية الأسكتلندية",gez:"الجعزية",gil:"لغة أهل جبل طارق",gl:"الجاليكية",gmh:"الألمانية العليا الوسطى",gn:"الغوارانية",goh:"الألمانية العليا القديمة",gon:"الجندي",gor:"الجورونتالو",got:"القوطية",grb:"الجريبو",grc:"اليونانية القديمة",gsw:"الألمانية السويسرية",gu:"الغوجاراتية",guz:"الغيزية",gv:"المنكية",gwi:"غوتشن",ha:"الهوسا",hai:"الهيدا",hak:"الهاكا الصينية",haw:"لغة هاواي",he:"العبرية",hi:"الهندية",hil:"الهيليجينون",hit:"الحثية",hmn:"الهمونجية",ho:"الهيري موتو",hr:"الكرواتية",hsb:"الصوربية العليا",hsn:"شيانغ الصينية",ht:"الكريولية الهايتية",hu:"الهنغارية",hup:"الهبا",hy:"الأرمنية",hz:"الهيريرو",ia:"اللّغة الوسيطة",iba:"الإيبان",ibb:"الإيبيبيو",id:"الإندونيسية",ie:"الإنترلينج",ig:"الإيجبو",ii:"السيتشيون يي",ik:"الإينبياك",ilo:"الإيلوكو",inh:"الإنجوشية",io:"الإيدو",is:"الأيسلندية",it:"الإيطالية",iu:"الإينكتيتت",ja:"اليابانية",jbo:"اللوجبان",jgo:"نغومبا",jmc:"الماتشامية",jpr:"الفارسية اليهودية",jrb:"العربية اليهودية",jv:"الجاوية",ka:"الجورجية",kaa:"الكارا-كالباك",kab:"القبيلية",kac:"الكاتشين",kaj:"الجو",kam:"الكامبا",kaw:"الكوي",kbd:"الكاباردايان",kbl:"كانمبو",kcg:"التايابية",kde:"ماكونده",kea:"كابوفيرديانو",kfo:"الكورو",kg:"الكونغو",kha:"الكازية",kho:"الخوتانيز",khq:"كويرا تشيني",ki:"الكيكيو",kj:"الكيونياما",kk:"الكازاخستانية",kkj:"لغة الكاكو",kl:"الكالاليست",kln:"كالينجين",km:"الخميرية",kmb:"الكيمبندو",kn:"الكانادا",ko:"الكورية",koi:"كومي-بيرماياك",kok:"الكونكانية",kos:"الكوسراين",kpe:"الكبيل",kr:"الكانوري",krc:"الكاراتشاي-بالكار",krl:"الكاريلية",kru:"الكوروخ",ks:"الكشميرية",ksb:"شامبالا",ksf:"لغة البافيا",ksh:"لغة الكولونيان",ku:"الكردية",kum:"القموقية",kut:"الكتيناي",kv:"الكومي",kw:"الكورنية",ky:"القيرغيزية",la:"اللاتينية",lad:"اللادينو",lag:"لانجي",lah:"اللاهندا",lam:"اللامبا",lb:"اللكسمبورغية",lez:"الليزجية",lg:"الغاندا",li:"الليمبورغية",lkt:"لاكوتا",ln:"اللينجالا",lo:"اللاوية",lol:"منغولى",lou:"الكريولية اللويزيانية",loz:"اللوزي",lrc:"اللرية الشمالية",lt:"الليتوانية",lu:"اللوبا كاتانغا",lua:"اللبا-لؤلؤ",lui:"اللوسينو",lun:"اللوندا",luo:"اللو",lus:"الميزو",luy:"لغة اللويا",lv:"اللاتفية",mad:"المادريز",mag:"الماجا",mai:"المايثيلي",mak:"الماكاسار",man:"الماندينغ",mas:"الماساي",mde:"مابا",mdf:"الموكشا",mdr:"الماندار",men:"الميند",mer:"الميرو",mfe:"المورسيانية",mg:"الملغاشي",mga:"الأيرلندية الوسطى",mgh:"ماخاوا-ميتو",mgo:"ميتا",mh:"المارشالية",mi:"الماورية",mic:"الميكماكيونية",min:"المينانجكاباو",mk:"المقدونية",ml:"المالايالامية",mn:"المنغولية",mnc:"المانشو",mni:"المانيبورية",moh:"الموهوك",mos:"الموسي",mr:"الماراثية",ms:"الماليزية",mt:"المالطية",mua:"مندنج",mus:"الكريك",mwl:"الميرانديز",mwr:"الماروارية",my:"البورمية",myv:"الأرزية",mzn:"المازندرانية",na:"النورو",nan:"مين-نان الصينية",nap:"النابولية",naq:"لغة الناما",nb:"النرويجية بوكمال",nd:"النديبيل الشمالية",nds:"الألمانية السفلى","nds-NL":"السكسونية السفلى",ne:"النيبالية","new":"النوارية",ng:"الندونجا",nia:"النياس",niu:"النيوي",nl:"الهولندية","nl-BE":"الفلمنكية",nmg:"كواسيو",nn:"النرويجية نينورسك",nnh:"لغة النجيمبون",no:"النرويجية",nog:"النوجاي",non:"النورس القديم",nqo:"أنكو",nr:"النديبيل الجنوبي",nso:"السوتو الشمالية",nus:"النوير",nv:"النافاجو",nwc:"النوارية التقليدية",ny:"النيانجا",nym:"النيامويزي",nyn:"النيانكول",nyo:"النيورو",nzi:"النزيما",oc:"الأوكسيتانية",oj:"الأوجيبوا",om:"الأورومية",or:"الأورية",os:"الأوسيتيك",osa:"الأوساج",ota:"التركية العثمانية",pa:"البنجابية",pag:"البانجاسينان",pal:"البهلوية",pam:"البامبانجا",pap:"البابيامينتو",pau:"البالوان",pcm:"البدجنية النيجيرية",peo:"الفارسية القديمة",phn:"الفينيقية",pi:"البالية",pl:"البولندية",pon:"البوهنبيايان",prg:"البروسياوية",pro:"البروفانسية القديمة",ps:"البشتو",pt:"البرتغالية","pt-BR":"البرتغالية البرازيلية","pt-PT":"البرتغالية الأوروبية",qu:"الكويتشوا",quc:"الكيشية",raj:"الراجاسثانية",rap:"الراباني",rar:"الراروتونجاني",rm:"الرومانشية",rn:"الرندي",ro:"الرومانية","ro-MD":"المولدوفية",rof:"الرومبو",rom:"الغجرية",root:"الجذر",ru:"الروسية",rup:"الأرومانيان",rw:"الكينيارواندا",rwk:"الروا",sa:"السنسكريتية",sad:"السانداوي",sah:"الساخيّة",sam:"الآرامية السامرية",saq:"سامبورو",sas:"الساساك",sat:"السانتالية",sba:"نامبي",sbp:"سانغو",sc:"السردينية",scn:"الصقلية",sco:"الأسكتلندية",sd:"السندية",sdh:"الكردية الجنوبية",se:"سامي الشمالية",see:"السنيكا",seh:"سينا",sel:"السيلكب",ses:"كويرابورو سيني",sg:"السانجو",sga:"الأيرلندية القديمة",sh:"صربية-كرواتية",shi:"تشلحيت",shn:"الشان",shu:"العربية التشادية",si:"السنهالية",sid:"السيدامو",sk:"السلوفاكية",sl:"السلوفانية",sm:"الساموائية",sma:"السامي الجنوبي",smj:"اللول سامي",smn:"الإيناري سامي",sms:"السكولت سامي",sn:"الشونا",snk:"السونينك",so:"الصومالية",sog:"السوجدين",sq:"الألبانية",sr:"الصربية",srn:"السرانان تونجو",srr:"السرر",ss:"السواتي",ssy:"لغة الساهو",st:"السوتو الجنوبية",su:"السوندانية",suk:"السوكوما",sus:"السوسو",sux:"السومارية",sv:"السويدية",sw:"السواحلية","sw-CD":"الكونغو السواحلية",swb:"القمرية",syc:"سريانية تقليدية",syr:"السريانية",ta:"التاميلية",te:"التيلوغوية",tem:"التيمن",teo:"تيسو",ter:"التيرينو",tet:"التيتم",tg:"الطاجيكية",th:"التايلاندية",ti:"التغرينية",tig:"التيغرية",tiv:"التيف",tk:"التركمانية",tkl:"التوكيلاو",tl:"التاغالوغية",tlh:"الكلينجون",tli:"التلينغيتية",tmh:"التاماشيك",tn:"التسوانية",to:"التونغية",tog:"تونجا - نياسا",tpi:"التوك بيسين",tr:"التركية",trv:"لغة التاروكو",ts:"السونجا",tsi:"التسيمشيان",tt:"التترية",tum:"التامبوكا",tvl:"التوفالو",tw:"التوي",twq:"تاساواق",ty:"التاهيتية",tyv:"التوفية",tzm:"الأمازيغية وسط الأطلس",udm:"الأدمرت",ug:"الأويغورية",uga:"اليجاريتيك",uk:"الأوكرانية",umb:"الأمبندو",ur:"الأوردية",uz:"الأوزبكية",vai:"الفاي",ve:"الفيندا",vi:"الفيتنامية",vo:"لغة الفولابوك",vot:"الفوتيك",vun:"الفونجو",wa:"الولونية",wae:"الوالسر",wal:"الولاياتا",war:"الواراي",was:"الواشو",wbp:"وارلبيري",wo:"الولوفية",wuu:"الوو الصينية",xal:"الكالميك",xh:"الخوسا",xog:"السوغا",yao:"الياو",yap:"اليابيز",yav:"يانجبن",ybb:"يمبا",yi:"اليديشية",yo:"اليوروبا",yue:"الكَنْتُونية",za:"الزهيونج",zap:"الزابوتيك",zbl:"رموز المعايير الأساسية",zen:"الزيناجا",zgh:"التمازيغية المغربية القياسية",zh:"الصينية","zh-Hans":"الصينية (المبسطة)","zh-Hant":"الصينية (التقليدية)",zu:"الزولو",zun:"الزونية",zza:"زازا"},scriptNames:{Cyrl:"السيريلية",Latn:"اللاتينية",Arab:"العربية",Guru:"الجرمخي",Tfng:"التيفيناغ",Vaii:"الفاي",Hans:"المبسطة",Hant:"التقليدية"}},ast:{rtl:false,languageNames:{aa:"afar",ab:"abkhazianu",ace:"achinés",ach:"acoli",ada:"adangme",ady:"adyghe",ae:"avestanín",aeb:"árabe de Túnez",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadianu",akz:"alabama",ale:"aleut",aln:"gheg d’Albania",alt:"altai del sur",am:"amháricu",an:"aragonés",ang:"inglés antiguu",anp:"angika",ar:"árabe","ar-001":"árabe estándar modernu",arc:"araméu",arn:"mapuche",aro:"araona",arp:"arapaho",arq:"árabe d’Arxelia",arw:"arawak",ary:"árabe de Marruecos",arz:"árabe d’Exiptu",as:"asamés",asa:"asu",ase:"llingua de signos americana",ast:"asturianu",av:"aváricu",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azerbaixanu",ba:"bashkir",bal:"baluchi",ban:"balinés",bar:"bávaru",bas:"basaa",bax:"bamun",bbc:"batak toba",bbj:"ghomala",be:"bielorrusu",bej:"beja",bem:"bemba",bew:"betawi",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"búlgaru",bgn:"balochi occidental",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalín",bo:"tibetanu",bpy:"bishnupriya",bqi:"bakhtiari",br:"bretón",bra:"braj",brh:"brahui",brx:"bodo",bs:"bosniu",bss:"akoose",bua:"buriat",bug:"buginés",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalán",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ce:"chechenu",ceb:"cebuanu",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukés",chm:"mari",chn:"xíriga chinook",cho:"choctaw",chp:"chipewyanu",chr:"cheroqui",chy:"cheyenne",ckb:"kurdu central",co:"corsu",cop:"cópticu",cps:"capiznon",cr:"cree",crh:"turcu de Crimea",crs:"francés criollu seselwa",cs:"checu",csb:"kashubianu",cu:"eslávicu eclesiásticu",cv:"chuvash",cy:"galés",da:"danés",dak:"dakota",dar:"dargwa",dav:"taita",de:"alemán","de-AT":"alemán d’Austria","de-CH":"altualemán de Suiza",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baxu sorbiu",dtp:"dusun central",dua:"duala",dum:"neerlandés mediu",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embú",ee:"ewe",efi:"efik",egl:"emilianu",egy:"exipciu antiguu",eka:"ekajuk",el:"griegu",elx:"elamita",en:"inglés","en-AU":"inglés d’Australia","en-CA":"inglés de Canadá","en-GB":"inglés de Gran Bretaña","en-US":"inglés d’Estaos Xuníos",enm:"inglés mediu",eo:"esperanto",es:"español","es-419":"español d’América Llatina","es-ES":"español européu","es-MX":"español de Méxicu",esu:"yupik central",et:"estoniu",eu:"vascu",ewo:"ewondo",ext:"estremeñu",fa:"persa",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandés",fil:"filipín",fit:"finlandés de Tornedalen",fj:"fixanu",fo:"feroés",fr:"francés","fr-CA":"francés de Canadá","fr-CH":"francés de Suiza",frc:"francés cajun",frm:"francés mediu",fro:"francés antiguu",frp:"arpitanu",frr:"frisón del norte",frs:"frisón oriental",fur:"friulianu",fy:"frisón occidental",ga:"irlandés",gaa:"ga",gag:"gagauz",gan:"chinu gan",gay:"gayo",gba:"gbaya",gbz:"dari zoroastrianu",gd:"gaélicu escocés",gez:"geez",gil:"gilbertés",gl:"gallegu",glk:"gilaki",gmh:"altualemán mediu",gn:"guaraní",goh:"altualemán antiguu",gom:"goan konkani",gon:"gondi",gor:"gorontalo",got:"góticu",grb:"grebo",grc:"griegu antiguu",gsw:"alemán de Suiza",gu:"guyaratí",guc:"wayuu",gur:"frafra",guz:"gusii",gv:"manés",gwi:"gwichʼin",ha:"ḥausa",hai:"haida",hak:"chinu hakka",haw:"hawaianu",he:"hebréu",hi:"hindi",hif:"hindi de Fiji",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"altu sorbiu",hsn:"chinu xiang",ht:"haitianu",hu:"húngaru",hup:"hupa",hy:"armeniu",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesiu",ie:"interlingue",ig:"igbo",ii:"yi de Sichuán",ik:"inupiaq",ilo:"iloko",inh:"ingush",io:"ido",is:"islandés",it:"italianu",iu:"inuktitut",izh:"ingrianu",ja:"xaponés",jam:"inglés criollu xamaicanu",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"xudeo-persa",jrb:"xudeo-árabe",jut:"jutlandés",jv:"xavanés",ka:"xeorxanu",kaa:"kara-kalpak",kab:"kabileñu",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardianu",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"cabuverdianu",ken:"kenyang",kfo:"koro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"khotanés",khq:"koyra chiini",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazaquistanín",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"ḥemer",kmb:"kimbundu",kn:"canarés",ko:"coreanu",koi:"komi-permyak",kok:"konkani",kos:"kosraeanu",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",kri:"krio",krj:"kinaray-a",krl:"karelianu",kru:"kurukh",ks:"cachemirés",ksb:"shambala",ksf:"bafia",ksh:"colonianu",ku:"curdu",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnicu",ky:"kirguistanín",la:"llatín",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgués",lez:"lezghianu",lfn:"lingua franca nova",lg:"ganda",li:"limburgués",lij:"ligurianu",liv:"livonianu",lkt:"lakota",lmo:"lombardu",ln:"lingala",lo:"laosianu",lol:"mongo",loz:"lozi",lrc:"luri del norte",lt:"lituanu",ltg:"latgalianu",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letón",lzh:"chinu lliterariu",lzz:"laz",mad:"madurés",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masái",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgaxe",mga:"írlandés mediu",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshallés",mi:"maorí",mic:"micmac",min:"minangkabau",mk:"macedoniu",ml:"malayalam",mn:"mongol",mnc:"manchú",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"mari occidental",ms:"malayu",mt:"maltés",mua:"mundang",mus:"creek",mwl:"mirandés",mwr:"marwari",mwv:"mentawai",my:"birmanu",mye:"myene",myv:"erzya",mzn:"mazanderani",na:"nauru",nan:"chinu min nan",nap:"napolitanu",naq:"nama",nb:"noruegu Bokmål",nd:"ndebele del norte",nds:"baxu alemán","nds-NL":"baxu saxón",ne:"nepalés","new":"newari",ng:"ndonga",nia:"nias",niu:"niueanu",njo:"ao naga",nl:"neerlandés","nl-BE":"flamencu",nmg:"kwasio",nn:"noruegu Nynorsk",nnh:"ngiemboon",no:"noruegu",nog:"nogai",non:"noruegu antiguu",nov:"novial",nqo:"n’ko",nr:"ndebele del sur",nso:"sotho del norte",nus:"nuer",nv:"navajo",nwc:"newari clásicu",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitanu",oj:"ojibwa",om:"oromo",or:"oriya",os:"oséticu",osa:"osage",ota:"turcu otomanu",pa:"punyabí",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauanu",pcd:"pícaru",pcm:"nixerianu simplificáu",pdc:"alemán de Pennsylvania",pdt:"plautdietsch",peo:"persa antiguu",pfl:"alemán palatinu",phn:"feniciu",pi:"pali",pl:"polacu",pms:"piamontés",pnt:"pónticu",pon:"pohnpeianu",prg:"prusianu",pro:"provenzal antiguu",ps:"pashtu",pt:"portugués","pt-BR":"portugués del Brasil","pt-PT":"portugués européu",qu:"quechua",quc:"kʼicheʼ",qug:"quichua del altiplanu de Chimborazo",raj:"rajasthanín",rap:"rapanui",rar:"rarotonganu",rgn:"romañol",rif:"rifianu",rm:"romanche",rn:"rundi",ro:"rumanu","ro-MD":"moldavu",rof:"rombo",rom:"romaní",rtm:"rotumanu",ru:"rusu",rue:"rusyn",rug:"roviana",rup:"aromanianu",rw:"kinyarwanda",rwk:"rwa",sa:"sánscritu",sad:"sandavés",sah:"sakha",sam:"araméu samaritanu",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"sangu",sc:"sardu",scn:"sicilianu",sco:"scots",sd:"sindhi",sdc:"sardu sassarés",sdh:"kurdu del sur",se:"sami del norte",see:"séneca",seh:"sena",sei:"seri",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandés antiguu",sgs:"samogitianu",sh:"serbo-croata",shi:"tachelhit",shn:"shan",shu:"árabe chadianu",si:"cingalés",sid:"sidamo",sk:"eslovacu",sl:"eslovenu",sli:"baxu silesianu",sly:"selayarés",sm:"samoanu",sma:"sami del sur",smj:"lule sami",smn:"inari sami",sms:"skolt sami",sn:"shona",snk:"soninke",so:"somalín",sog:"sogdianu",sq:"albanu",sr:"serbiu",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sotho del sur",stq:"frisón de Saterland",su:"sondanés",suk:"sukuma",sus:"susu",sux:"sumeriu",sv:"suecu",sw:"suaḥili","sw-CD":"suaḥili del Congu",swb:"comorianu",syc:"siriacu clásicu",syr:"siriacu",szl:"silesianu",ta:"tamil",tcy:"tulu",te:"telugu",tem:"timne",teo:"teso",ter:"terena",tet:"tetum",tg:"taxiquistanín",th:"tailandés",ti:"tigrinya",tig:"tigre",tk:"turcomanu",tkl:"tokelau",tkr:"tsakhur",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"talixín",tmh:"tamashek",tn:"tswana",to:"tonganu",tog:"tonga nyasa",tpi:"tok pisin",tr:"turcu",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"tsakoniu",tsi:"tsimshian",tt:"tártaru",ttt:"tati musulmán",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitianu",tyv:"tuvinianu",tzm:"tamazight del Atles central",udm:"udmurt",ug:"uigur",uga:"ugaríticu",uk:"ucraín",umb:"umbundu",ur:"urdu",uz:"uzbequistanín",ve:"venda",vec:"venecianu",vep:"vepsiu",vi:"vietnamín",vls:"flamencu occidental",vmf:"franconianu del Main",vo:"volapük",vot:"vóticu",vro:"voro",vun:"vunjo",wa:"valón",wae:"walser",wal:"wolaytta",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"chinu wu",xal:"calmuco",xh:"xhosa",xmf:"mingrelianu",xog:"soga",yap:"yapés",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yrl:"nheengatu",yue:"cantonés",za:"zhuang",zap:"zapoteca",zbl:"simbólicu Bliss",zea:"zeelandés",zen:"zenaga",zgh:"tamazight estándar de Marruecos",zh:"chinu","zh-Hans":"chinu (simplificáu)","zh-Hant":"chinu (tradicional)",zu:"zulú",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirílicu",Latn:"llatín",Arab:"árabe",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificáu",Hant:"tradicional"}},be:{rtl:false,languageNames:{aa:"афарская",ab:"абхазская",ace:"ачэх",ada:"адангмэ",ady:"адыгейская",af:"афрыкаанс",agq:"агем",ain:"айнская",ak:"акан",akk:"акадская",ale:"алеуцкая",alt:"паўднёваалтайская",am:"амхарская",an:"арагонская",ang:"стараанглійская",anp:"ангіка",ar:"арабская","ar-001":"сучасная стандартная арабская",arc:"арамейская",arn:"мапудунгун",arp:"арапаха",as:"асамская",asa:"асу",ast:"астурыйская",av:"аварская",awa:"авадхі",ay:"аймара",az:"азербайджанская",ba:"башкірская",ban:"балійская",bas:"басаа",be:"беларуская",bem:"бемба",bez:"бена",bg:"балгарская",bgn:"заходняя белуджская",bho:"бхаджпуры",bi:"біслама",bin:"эда",bla:"блэкфут",bm:"бамбара",bn:"бенгальская",bo:"тыбецкая",br:"брэтонская",brx:"бода",bs:"баснійская",bua:"бурацкая",bug:"бугіс",byn:"білен",ca:"каталанская",ccp:"чакма",ce:"чачэнская",ceb:"себуана",cgg:"чыга",ch:"чамора",chb:"чыбча",chk:"чуук",chm:"мары",cho:"чокта",chr:"чэрокі",chy:"шэйен",ckb:"цэнтральнакурдская",co:"карсіканская",cop:"копцкая",crs:"сэсэльва",cs:"чэшская",cu:"царкоўнаславянская",cv:"чувашская",cy:"валійская",da:"дацкая",dak:"дакота",dar:"даргінская",dav:"таіта",de:"нямецкая","de-AT":"аўстрыйская нямецкая","de-CH":"швейцарская літаратурная нямецкая",dgr:"догрыб",dje:"зарма",dsb:"ніжнялужыцкая",dua:"дуала",dv:"мальдыўская",dyo:"джола-фоньі",dz:"дзонг-кэ",dzg:"дазага",ebu:"эмбу",ee:"эве",efi:"эфік",egy:"старажытнаегіпецкая",eka:"экаджук",el:"грэчаская",en:"англійская","en-AU":"аўстралійская англійская","en-CA":"канадская англійская","en-GB":"брытанская англійская","en-US":"амерыканская англійская",eo:"эсперанта",es:"іспанская","es-419":"лацінаамерыканская іспанская","es-ES":"еўрапейская іспанская","es-MX":"мексіканская іспанская",et:"эстонская",eu:"баскская",ewo:"эвонда",fa:"фарсі",ff:"фула",fi:"фінская",fil:"філіпінская",fj:"фіджыйская",fo:"фарэрская",fon:"фон",fr:"французская","fr-CA":"канадская французская","fr-CH":"швейцарская французская",fro:"старафранцузская",fur:"фрыульская",fy:"заходняя фрызская",ga:"ірландская",gaa:"га",gag:"гагаузская",gd:"шатландская гэльская",gez:"геэз",gil:"кірыбаці",gl:"галісійская",gn:"гуарані",gor:"гарантала",grc:"старажытнагрэчаская",gsw:"швейцарская нямецкая",gu:"гуджараці",guz:"гусіі",gv:"мэнская",gwi:"гуіч’ін",ha:"хауса",haw:"гавайская",he:"іўрыт",hi:"хіндзі",hil:"хілігайнон",hmn:"хмонг",hr:"харвацкая",hsb:"верхнялужыцкая",ht:"гаіцянская крэольская",hu:"венгерская",hup:"хупа",hy:"армянская",hz:"герэра",ia:"інтэрлінгва",iba:"ібан",ibb:"ібібія",id:"інданезійская",ie:"інтэрлінгвэ",ig:"ігба",ii:"сычуаньская йі",ilo:"ілакана",inh:"інгушская",io:"іда",is:"ісландская",it:"італьянская",iu:"інуктытут",ja:"японская",jbo:"ложбан",jgo:"нгомба",jmc:"мачамбэ",jv:"яванская",ka:"грузінская",kab:"кабільская",kac:"качынская",kaj:"дджу",kam:"камба",kbd:"кабардзінская",kcg:"т’яп",kde:"макондэ",kea:"кабувердыяну",kfo:"кора",kha:"кхасі",khq:"койра чыіні",ki:"кікуйю",kj:"куаньяма",kk:"казахская",kkj:"како",kl:"грэнландская",kln:"календжын",km:"кхмерская",kmb:"кімбунду",kn:"канада",ko:"карэйская",koi:"комі-пярмяцкая",kok:"канкані",kpe:"кпеле",kr:"кануры",krc:"карачай-балкарская",krl:"карэльская",kru:"курух",ks:"кашмірская",ksb:"шамбала",ksf:"бафія",ksh:"кёльнская",ku:"курдская",kum:"кумыцкая",kv:"комі",kw:"корнская",ky:"кіргізская",la:"лацінская",lad:"ладына",lag:"лангі",lb:"люксембургская",lez:"лезгінская",lg:"ганда",li:"лімбургская",lkt:"лакота",ln:"лінгала",lo:"лаоская",lol:"монга",loz:"лозі",lrc:"паўночная луры",lt:"літоўская",lu:"луба-катанга",lua:"луба-касаі",lun:"лунда",luo:"луо",lus:"мізо",luy:"луйя",lv:"латышская",mad:"мадурская",mag:"магахі",mai:"майтхілі",mak:"макасар",man:"мандынг",mas:"маасай",mdf:"макшанская",men:"мендэ",mer:"меру",mfe:"марысьен",mg:"малагасійская",mgh:"макуўа-меета",mgo:"мета",mh:"маршальская",mi:"маары",mic:"мікмак",min:"мінангкабау",mk:"македонская",ml:"малаялам",mn:"мангольская",mni:"мейтэй",moh:"мохак",mos:"мосі",mr:"маратхі",ms:"малайская",mt:"мальтыйская",mua:"мунданг",mus:"мускогі",mwl:"мірандыйская",my:"бірманская",myv:"эрзянская",mzn:"мазандэранская",na:"науру",nap:"неапалітанская",naq:"нама",nb:"нарвежская (букмол)",nd:"паўночная ндэбеле",nds:"ніжненямецкая","nds-NL":"ніжнесаксонская",ne:"непальская","new":"неўары",ng:"ндонга",nia:"ніас",niu:"ніўэ",nl:"нідэрландская","nl-BE":"фламандская",nmg:"нгумба",nn:"нарвежская (нюношк)",nnh:"нг’ембон",no:"нарвежская",nog:"нагайская",non:"старанарвежская",nqo:"нко",nr:"паўднёвая ндэбеле",nso:"паўночная сота",nus:"нуэр",nv:"наваха",ny:"ньянджа",nyn:"ньянколе",oc:"аксітанская",oj:"аджыбва",om:"арома",or:"орыя",os:"асецінская",pa:"панджабі",pag:"пангасінан",pam:"пампанга",pap:"пап’яменту",pau:"палау",pcm:"нігерыйскі піджын",peo:"стараперсідская",phn:"фінікійская",pl:"польская",prg:"пруская",pro:"стараправансальская",ps:"пушту",pt:"партугальская","pt-BR":"бразільская партугальская","pt-PT":"еўрапейская партугальская",qu:"кечуа",quc:"кічэ",raj:"раджастханская",rap:"рапануі",rar:"раратонг",rm:"рэтараманская",rn:"рундзі",ro:"румынская","ro-MD":"малдаўская",rof:"ромба",root:"корань",ru:"руская",rup:"арумунская",rw:"руанда",rwk:"руа",sa:"санскрыт",sad:"сандаўэ",sah:"якуцкая",saq:"самбуру",sat:"санталі",sba:"нгамбай",sbp:"сангу",sc:"сардзінская",scn:"сіцылійская",sco:"шатландская",sd:"сіндхі",sdh:"паўднёвакурдская",se:"паўночнасаамская",seh:"сена",ses:"кайрабора сэні",sg:"санга",sga:"стараірландская",sh:"сербскахарвацкая",shi:"ташэльхіт",shn:"шан",si:"сінгальская",sk:"славацкая",sl:"славенская",sm:"самоа",sma:"паўднёвасаамская",smj:"луле-саамская",smn:"інары-саамская",sms:"колта-саамская",sn:"шона",snk:"санінке",so:"самалі",sq:"албанская",sr:"сербская",srn:"сранан-тонга",ss:"суаці",ssy:"саха",st:"сесута",su:"сунда",suk:"сукума",sux:"шумерская",sv:"шведская",sw:"суахілі","sw-CD":"кангалезская суахілі",swb:"каморская",syr:"сірыйская",ta:"тамільская",te:"тэлугу",tem:"тэмнэ",teo:"тэсо",tet:"тэтум",tg:"таджыкская",th:"тайская",ti:"тыгрынья",tig:"тыгрэ",tk:"туркменская",tlh:"клінган",tn:"тсвана",to:"танганская",tpi:"ток-пісін",tr:"турэцкая",trv:"тарока",ts:"тсонга",tt:"татарская",tum:"тумбука",tvl:"тувалу",twq:"тасаўак",ty:"таіці",tyv:"тувінская",tzm:"сярэднеатлаская тамазігхт",udm:"удмурцкая",ug:"уйгурская",uk:"украінская",umb:"умбунду",ur:"урду",uz:"узбекская",vai:"ваі",ve:"венда",vi:"в’етнамская",vo:"валапюк",vun:"вунджо",wa:"валонская",wae:"вальшская",wal:"волайта",war:"варай",wbp:"варлпіры",wo:"валоф",xal:"калмыцкая",xh:"коса",xog:"сога",yav:"янгбэн",ybb:"йемба",yi:"ідыш",yo:"ёруба",yue:"кантонскі дыялект кітайскай",zap:"сапатэк",zgh:"стандартная мараканская тамазіхт",zh:"кітайская","zh-Hans":"паўночнакітайская (спрошчаныя іерогліфы)","zh-Hant":"паўночнакітайская (традыцыйныя іерогліфы)",zu:"зулу",zun:"зуні",zza:"зазакі"},scriptNames:{Cyrl:"кірыліца",Latn:"лацініца",Arab:"арабскае",Guru:"гурмукхі",Hans:"спрошчанае кітайскае",Hant:"традыцыйнае кітайскае"}},bg:{rtl:false,languageNames:{aa:"афарски",ab:"абхазки",ace:"ачешки",ach:"аколи",ada:"адангме",ady:"адигейски",ae:"авестски",af:"африканс",afh:"африхили",agq:"агем",ain:"айну",ak:"акан",akk:"акадски",ale:"алеутски",alt:"южноалтайски",am:"амхарски",an:"арагонски",ang:"староанглийски",anp:"ангика",ar:"арабски","ar-001":"съвременен стандартен арабски",arc:"арамейски",arn:"мапуче",arp:"арапахо",arw:"аравак",as:"асамски",asa:"асу",ast:"астурски",av:"аварски",awa:"авади",ay:"аймара",az:"азербайджански",ba:"башкирски",bal:"балучи",ban:"балийски",bas:"баса",be:"беларуски",bej:"бея",bem:"бемба",bez:"бена",bg:"български",bgn:"западен балочи",bho:"боджпури",bi:"бислама",bik:"биколски",bin:"бини",bla:"сиксика",bm:"бамбара",bn:"бенгалски",bo:"тибетски",br:"бретонски",bra:"брадж",brx:"бодо",bs:"босненски",bua:"бурятски",bug:"бугински",byn:"биленски",ca:"каталонски",cad:"каддо",car:"карибски",cch:"атсам",ce:"чеченски",ceb:"себуански",cgg:"чига",ch:"чаморо",chb:"чибча",chg:"чагатай",chk:"чуук",chm:"марийски",chn:"жаргон чинуук",cho:"чокто",chp:"чиипувски",chr:"черокски",chy:"шайенски",ckb:"кюрдски (централен)",co:"корсикански",cop:"коптски",cr:"крии",crh:"кримскотатарски",crs:"сеселва, креолски френски",cs:"чешки",csb:"кашубски",cu:"църковнославянски",cv:"чувашки",cy:"уелски",da:"датски",dak:"дакотски",dar:"даргински",dav:"таита",de:"немски","de-AT":"немски (Австрия)","de-CH":"немски (Швейцария)",del:"делауер",den:"слейви",dgr:"догриб",din:"динка",dje:"зарма",doi:"догри",dsb:"долнолужишки",dua:"дуала",dum:"средновековен холандски",dv:"дивехи",dyo:"диола-фони",dyu:"диула",dz:"дзонгкха",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефик",egy:"древноегипетски",eka:"екажук",el:"гръцки",elx:"еламитски",en:"английски","en-AU":"английски (Австралия)","en-CA":"английски (Канада)","en-GB":"английски (Обединено кралство)","en-US":"английски (САЩ)",enm:"средновековен английски",eo:"есперанто",es:"испански","es-419":"испански (Латинска Америка)","es-ES":"испански (Испания)","es-MX":"испански (Мексико)",et:"естонски",eu:"баски",ewo:"евондо",fa:"персийски",fan:"фанг",fat:"фанти",ff:"фула",fi:"фински",fil:"филипински",fj:"фиджийски",fo:"фарьорски",fon:"фон",fr:"френски","fr-CA":"френски (Канада)","fr-CH":"френски (Швейцария)",frm:"средновековен френски",fro:"старофренски",frr:"северен фризски",frs:"източнофризийски",fur:"фриулски",fy:"западнофризийски",ga:"ирландски",gaa:"га",gag:"гагаузки",gay:"гайо",gba:"гбая",gd:"шотландски келтски",gez:"гииз",gil:"гилбертски",gl:"галисийски",gmh:"средновисоконемски",gn:"гуарани",goh:"старовисоконемски",gon:"гонди",gor:"горонтало",got:"готически",grb:"гребо",grc:"древногръцки",gsw:"швейцарски немски",gu:"гуджарати",guz:"гусии",gv:"манкски",gwi:"гвичин",ha:"хауса",hai:"хайда",haw:"хавайски",he:"иврит",hi:"хинди",hil:"хилигайнон",hit:"хитски",hmn:"хмонг",ho:"хири моту",hr:"хърватски",hsb:"горнолужишки",ht:"хаитянски креолски",hu:"унгарски",hup:"хупа",hy:"арменски",hz:"хереро",ia:"интерлингва",iba:"ибан",ibb:"ибибио",id:"индонезийски",ie:"оксидентал",ig:"игбо",ii:"съчуански йи",ik:"инупиак",ilo:"илоко",inh:"ингушетски",io:"идо",is:"исландски",it:"италиански",iu:"инуктитут",ja:"японски",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"юдео-персийски",jrb:"юдео-арабски",jv:"явански",ka:"грузински",kaa:"каракалпашки",kab:"кабилски",kac:"качински",kaj:"жжу",kam:"камба",kaw:"кави",kbd:"кабардиан",kcg:"туап",kde:"маконде",kea:"кабовердиански",kfo:"коро",kg:"конгоански",kha:"кхаси",kho:"котски",khq:"койра чиини",ki:"кикую",kj:"кваняма",kk:"казахски",kkj:"како",kl:"гренландски",kln:"календжин",km:"кхмерски",kmb:"кимбунду",kn:"каннада",ko:"корейски",koi:"коми-пермякски",kok:"конкани",kos:"косраен",kpe:"кпеле",kr:"канури",krc:"карачай-балкарски",krl:"карелски",kru:"курук",ks:"кашмирски",ksb:"шамбала",ksf:"бафия",ksh:"кьолнски",ku:"кюрдски",kum:"кумикски",kut:"кутенай",kv:"коми",kw:"корнуолски",ky:"киргизки",la:"латински",lad:"ладино",lag:"ланги",lah:"лахнда",lam:"ламба",lb:"люксембургски",lez:"лезгински",lg:"ганда",li:"лимбургски",lkt:"лакота",ln:"лингала",lo:"лаоски",lol:"монго",loz:"лози",lrc:"северен лури",lt:"литовски",lu:"луба-катанга",lua:"луба-лулуа",lui:"луисеньо",lun:"лунда",luo:"луо",lus:"мизо",luy:"лухя",lv:"латвийски",mad:"мадурски",mag:"магахи",mai:"майтхили",mak:"макасар",man:"мандинго",mas:"масайски",mdf:"мокша",mdr:"мандар",men:"менде",mer:"меру",mfe:"морисиен",mg:"малгашки",mga:"средновековен ирландски",mgh:"макуа мето",mgo:"мета",mh:"маршалезе",mi:"маорски",mic:"микмак",min:"минангкабау",mk:"македонски",ml:"малаялам",mn:"монголски",mnc:"манджурски",mni:"манипурски",moh:"мохоук",mos:"моси",mr:"марати",ms:"малайски",mt:"малтийски",mua:"мунданг",mus:"мускогски",mwl:"мирандийски",mwr:"марвари",my:"бирмански",myv:"ерзиа",mzn:"мазандерански",na:"науру",nap:"неаполитански",naq:"нама",nb:"норвежки (букмол)",nd:"северен ндебеле",nds:"долнонемски","nds-NL":"долносаксонски",ne:"непалски","new":"неварски",ng:"ндонга",nia:"ниас",niu:"ниуеан",nl:"нидерландски","nl-BE":"фламандски",nmg:"квасио",nn:"норвежки (нюношк)",nnh:"нгиембун",no:"норвежки",nog:"ногаи",non:"старонорвежки",nqo:"нко",nr:"южен ндебеле",nso:"северен сото",nus:"нуер",nv:"навахо",nwc:"класически невари",ny:"нянджа",nym:"ниамвези",nyn:"нянколе",nyo:"нуоро",nzi:"нзима",oc:"окситански",oj:"оджибва",om:"оромо",or:"ория",os:"осетински",osa:"осейджи",ota:"отомански турски",pa:"пенджабски",pag:"пангасинан",pal:"пахлави",pam:"пампанга",pap:"папиаменто",pau:"палауан",pcm:"нигерийски пиджин",peo:"староперсийски",phn:"финикийски",pi:"пали",pl:"полски",pon:"понапеан",prg:"пруски",pro:"старопровансалски",ps:"пущу",pt:"португалски","pt-BR":"португалски (Бразилия)","pt-PT":"португалски (Португалия)",qu:"кечуа",quc:"киче",raj:"раджастански",rap:"рапа нуи",rar:"раротонга",rm:"реторомански",rn:"рунди",ro:"румънски","ro-MD":"молдовски",rof:"ромбо",rom:"ромски",root:"роот",ru:"руски",rup:"арумънски",rw:"киняруанда",rwk:"рва",sa:"санскрит",sad:"сандаве",sah:"сакха",sam:"самаритански арамейски",saq:"самбуру",sas:"сасак",sat:"сантали",sba:"нгамбай",sbp:"сангу",sc:"сардински",scn:"сицилиански",sco:"шотландски",sd:"синдхи",sdh:"южнокюрдски",se:"северносаамски",seh:"сена",sel:"селкуп",ses:"койраборо сени",sg:"санго",sga:"староирландски",sh:"сърбохърватски",shi:"ташелхит",shn:"шан",si:"синхалски",sid:"сидамо",sk:"словашки",sl:"словенски",sm:"самоански",sma:"южносаамски",smj:"луле-саамски",smn:"инари-саамски",sms:"сколт-саамски",sn:"шона",snk:"сонинке",so:"сомалийски",sog:"согдийски",sq:"албански",sr:"сръбски",srn:"сранан тонго",srr:"серер",ss:"свати",ssy:"сахо",st:"сото",su:"сундански",suk:"сукума",sus:"сусу",sux:"шумерски",sv:"шведски",sw:"суахили","sw-CD":"конгоански суахили",swb:"коморски",syc:"класически сирийски",syr:"сирийски",ta:"тамилски",te:"телугу",tem:"темне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таджикски",th:"тайски",ti:"тигриня",tig:"тигре",tiv:"тив",tk:"туркменски",tkl:"токелайски",tl:"тагалог",tlh:"клингонски",tli:"тлингит",tmh:"тамашек",tn:"тсвана",to:"тонгански",tog:"нианса тонга",tpi:"ток писин",tr:"турски",trv:"тароко",ts:"цонга",tsi:"цимшиански",tt:"татарски",tum:"тумбука",tvl:"тувалуански",tw:"туи",twq:"тасавак",ty:"таитянски",tyv:"тувински",tzm:"централноатласки тамазигт",udm:"удмуртски",ug:"уйгурски",uga:"угаритски",uk:"украински",umb:"умбунду",ur:"урду",uz:"узбекски",vai:"ваи",ve:"венда",vi:"виетнамски",vo:"волапюк",vot:"вотик",vun:"вунджо",wa:"валонски",wae:"валзерски немски",wal:"валамо",war:"варай",was:"уашо",wbp:"валпири",wo:"волоф",xal:"калмик",xh:"ксоса",xog:"сога",yao:"яо",yap:"япезе",yav:"янгбен",ybb:"йемба",yi:"идиш",yo:"йоруба",yue:"кантонски",za:"зуанг",zap:"запотек",zbl:"блис символи",zen:"зенага",zgh:"стандартен марокански тамазигт",zh:"китайски","zh-Hans":"китайски, мандарин (опростен)","zh-Hant":"китайски, мандарин (традиционен)",zu:"зулуски",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"кирилица",Latn:"латиница",Arab:"арабска",Guru:"гурмукхи",Vaii:"Вайска",Hans:"опростена",Hant:"традиционна"}},bn:{rtl:false,languageNames:{aa:"আফার",ab:"আবখাজিয়ান",ace:"অ্যাচাইনিজ",ach:"আকোলি",ada:"অদাগ্মে",ady:"আদেগে",ae:"আবেস্তীয়",af:"আফ্রিকান",afh:"আফ্রিহিলি",agq:"এঘেম",ain:"আইনু",ak:"আকান",akk:"আক্কাদিয়ান",ale:"আলেউত",alt:"দক্ষিন আলতাই",am:"আমহারিক",an:"আর্গোনিজ",ang:"প্রাচীন ইংরেজী",anp:"আঙ্গিকা",ar:"আরবী","ar-001":"আধুনিক আদর্শ আরবী",arc:"আরামাইক",arn:"মাপুচি",arp:"আরাপাহো",arw:"আরাওয়াক",as:"অসমীয়া",asa:"আসু",ast:"আস্তুরিয়",av:"আভেরিক",awa:"আওয়াধি",ay:"আয়মারা",az:"আজারবাইজানী",ba:"বাশকির",bal:"বেলুচী",ban:"বালিনীয়",bas:"বাসা",be:"বেলারুশিয়",bej:"বেজা",bem:"বেম্বা",bez:"বেনা",bg:"বুলগেরিয়",bgn:"পশ্চিম বালোচি",bho:"ভোজপুরি",bi:"বিসলামা",bik:"বিকোল",bin:"বিনি",bla:"সিকসিকা",bm:"বামবারা",bn:"বাংলা",bo:"তিব্বতি",br:"ব্রেটন",bra:"ব্রাজ",brx:"বোড়ো",bs:"বসনীয়ান",bua:"বুরিয়াত",bug:"বুগিনি",byn:"ব্লিন",ca:"কাতালান",cad:"ক্যাডো",car:"ক্যারিব",cch:"আত্সাম",ccp:"চাকমা",ce:"চেচেন",ceb:"চেবুয়ানো",cgg:"চিগা",ch:"চামোরো",chb:"চিবচা",chg:"চাগাতাই",chk:"চুকি",chm:"মারি",chn:"চিনুক জার্গন",cho:"চকটোও",chp:"চিপেওয়ান",chr:"চেরোকী",chy:"শাইয়েন",ckb:"মধ্য কুর্দিশ",co:"কর্সিকান",cop:"কপটিক",cr:"ক্রি",crh:"ক্রিমিয়ান তুর্কি",crs:"সেসেলওয়া ক্রেওল ফ্রেঞ্চ",cs:"চেক",csb:"কাশুবিয়ান",cu:"চার্চ স্লাভিক",cv:"চুবাস",cy:"ওয়েলশ",da:"ডেনিশ",dak:"ডাকোটা",dar:"দার্গওয়া",dav:"তাইতা",de:"জার্মান","de-AT":"অস্ট্রিয়ান জার্মান","de-CH":"সুইস হাই জার্মান",del:"ডেলাওয়ের",den:"স্ল্যাভ",dgr:"দোগ্রীব",din:"ডিংকা",dje:"জার্মা",doi:"ডোগরি",dsb:"নিম্নতর সোর্বিয়ান",dua:"দুয়ালা",dum:"মধ্য ডাচ",dv:"দিবেহি",dyo:"জোলা-ফনী",dyu:"ডিউলা",dz:"জোঙ্গা",dzg:"দাজাগা",ebu:"এম্বু",ee:"ইউয়ি",efi:"এফিক",egy:"প্রাচীন মিশরীয়",eka:"ইকাজুক",el:"গ্রিক",elx:"এলামাইট",en:"ইংরেজি","en-AU":"অস্ট্রেলীয় ইংরেজি","en-CA":"কানাডীয় ইংরেজি","en-GB":"ব্রিটিশ ইংরেজি","en-US":"আমেরিকার ইংরেজি",enm:"মধ্য ইংরেজি",eo:"এস্পেরান্তো",es:"স্প্যানিশ","es-419":"ল্যাটিন আমেরিকান স্প্যানিশ","es-ES":"ইউরোপীয় স্প্যানিশ","es-MX":"ম্যাক্সিকান স্প্যানিশ",et:"এস্তোনীয়",eu:"বাস্ক",ewo:"ইওন্ডো",fa:"ফার্সি",fan:"ফ্যাঙ্গ",fat:"ফান্তি",ff:"ফুলাহ্",fi:"ফিনিশ",fil:"ফিলিপিনো",fj:"ফিজিআন",fo:"ফারোস",fon:"ফন",fr:"ফরাসি","fr-CA":"কানাডীয় ফরাসি","fr-CH":"সুইস ফরাসি",frc:"কাজুন ফরাসি",frm:"মধ্য ফরাসি",fro:"প্রাচীন ফরাসি",frr:"উত্তরাঞ্চলীয় ফ্রিসিয়ান",frs:"পূর্ব ফ্রিসিয়",fur:"ফ্রিউলিয়ান",fy:"পশ্চিম ফ্রিসিয়ান",ga:"আইরিশ",gaa:"গা",gag:"গাগাউজ",gay:"গায়ো",gba:"বায়া",gd:"স্কটস-গ্যেলিক",gez:"গীজ",gil:"গিলবার্টিজ",gl:"গ্যালিশিয়",gmh:"মধ্য-উচ্চ জার্মানি",gn:"গুয়ারানি",goh:"প্রাচীন উচ্চ জার্মানি",gon:"গোন্ডি",gor:"গোরোন্তালো",got:"গথিক",grb:"গ্রেবো",grc:"প্রাচীন গ্রীক",gsw:"সুইস জার্মান",gu:"গুজরাটি",guz:"গুসী",gv:"ম্যাঙ্কস",gwi:"গওইচ্’ইন",ha:"হাউসা",hai:"হাইডা",haw:"হাওয়াইয়ান",he:"হিব্রু",hi:"হিন্দি",hil:"হিলিগ্যায়নোন",hit:"হিট্টিট",hmn:"হ্‌মোঙ",ho:"হিরি মোতু",hr:"ক্রোয়েশীয়",hsb:"উচ্চ সোর্বিয়ান",hsn:"Xiang চীনা",ht:"হাইতিয়ান ক্রেওল",hu:"হাঙ্গেরীয়",hup:"হুপা",hy:"আর্মেনিয়",hz:"হেরেরো",ia:"ইন্টারলিঙ্গুয়া",iba:"ইবান",ibb:"ইবিবিও",id:"ইন্দোনেশীয়",ie:"ইন্টারলিঙ্গ",ig:"ইগ্‌বো",ii:"সিচুয়ান য়ি",ik:"ইনুপিয়াক",ilo:"ইলোকো",inh:"ইঙ্গুশ",io:"ইডো",is:"আইসল্যান্ডীয়",it:"ইতালিয়",iu:"ইনুক্টিটুট",ja:"জাপানি",jbo:"লোজবান",jgo:"গোম্বা",jmc:"মাকামে",jpr:"জুদেও ফার্সি",jrb:"জুদেও আরবি",jv:"জাভানিজ",ka:"জর্জিয়ান",kaa:"কারা-কাল্পাক",kab:"কাবাইলে",kac:"কাচিন",kaj:"অজ্জু",kam:"কাম্বা",kaw:"কাউই",kbd:"কাবার্ডিয়ান",kcg:"টাইয়াপ",kde:"মাকোন্দে",kea:"কাবুভারদিয়ানু",kfo:"কোরো",kg:"কঙ্গো",kha:"খাশি",kho:"খোটানিজ",khq:"কোয়রা চীনি",ki:"কিকুয়ু",kj:"কোয়ানিয়ামা",kk:"কাজাখ",kkj:"কাকো",kl:"ক্যালাল্লিসুট",kln:"কালেনজিন",km:"খমের",kmb:"কিম্বুন্দু",kn:"কন্নড়",ko:"কোরিয়ান",koi:"কমি-পারমিআক",kok:"কোঙ্কানি",kos:"কোস্রাইন",kpe:"ক্‌পেল্লে",kr:"কানুরি",krc:"কারচে-বাল্কার",krl:"কারেলিয়ান",kru:"কুরুখ",ks:"কাশ্মীরি",ksb:"শাম্বালা",ksf:"বাফিয়া",ksh:"কলোনিয়ান",ku:"কুর্দিশ",kum:"কুমিক",kut:"কুটেনাই",kv:"কোমি",kw:"কর্ণিশ",ky:"কির্গিজ",la:"লাতিন",lad:"লাডিনো",lag:"লাঙ্গি",lah:"লান্ডা",lam:"লাম্বা",lb:"লুক্সেমবার্গীয়",lez:"লেজঘিয়ান",lg:"গান্ডা",li:"লিম্বুর্গিশ",lkt:"লাকোটা",ln:"লিঙ্গালা",lo:"লাও",lol:"মোঙ্গো",lou:"লুইসিয়ানা ক্রেওল",loz:"লোজি",lrc:"উত্তর লুরি",lt:"লিথুয়েনীয়",lu:"লুবা-কাটাঙ্গা",lua:"লুবা-লুলুয়া",lui:"লুইসেনো",lun:"লুন্ডা",luo:"লুয়ো",lus:"মিজো",luy:"লুইয়া",lv:"লাত্‌ভীয়",mad:"মাদুরেসে",mag:"মাগাহি",mai:"মৈথিলি",mak:"ম্যাকাসার",man:"ম্যান্ডিঙ্গো",mas:"মাসাই",mdf:"মোকশা",mdr:"ম্যাণ্ডার",men:"মেন্ডে",mer:"মেরু",mfe:"মরিসিয়ান",mg:"মালাগাসি",mga:"মধ্য আইরিশ",mgh:"মাখুয়া-মেত্তো",mgo:"মেটা",mh:"মার্শালিজ",mi:"মাওরি",mic:"মিকম্যাক",min:"মিনাংকাবাউ",mk:"ম্যাসিডোনীয়",ml:"মালায়ালাম",mn:"মঙ্গোলিয়",mnc:"মাঞ্চু",mni:"মণিপুরী",moh:"মোহাওক",mos:"মসি",mr:"মারাঠি",ms:"মালয়",mt:"মল্টিয়",mua:"মুদাঙ্গ",mus:"ক্রিক",mwl:"মিরান্ডিজ",mwr:"মারোয়ারি",my:"বর্মি",myv:"এরজিয়া",mzn:"মাজানদেরানি",na:"নাউরু",nap:"নেয়াপোলিটান",naq:"নামা",nb:"নরওয়েজিয়ান বোকমাল",nd:"উত্তর এন্দেবিলি",nds:"নিম্ন জার্মানি","nds-NL":"লো স্যাক্সন",ne:"নেপালী","new":"নেওয়ারি",ng:"এন্দোঙ্গা",nia:"নিয়াস",niu:"নিউয়ান",nl:"ওলন্দাজ","nl-BE":"ফ্লেমিশ",nmg:"কোয়াসিও",nn:"নরওয়েজীয়ান নিনর্স্ক",nnh:"নিঙ্গেম্বুন",no:"নরওয়েজীয়",nog:"নোগাই",non:"প্রাচীন নর্স",nqo:"এন’কো",nr:"দক্ষিণ এনডেবেলে",nso:"উত্তরাঞ্চলীয় সোথো",nus:"নুয়ার",nv:"নাভাজো",nwc:"প্রাচীন নেওয়ারী",ny:"নায়াঞ্জা",nym:"ন্যায়ামওয়েজি",nyn:"ন্যায়াঙ্কোলে",nyo:"ন্যোরো",nzi:"এনজিমা",oc:"অক্সিটান",oj:"ওজিবওয়া",om:"অরোমো",or:"ওড়িয়া",os:"ওসেটিক",osa:"ওসেজ",ota:"অটোমান তুর্কি",pa:"পাঞ্জাবী",pag:"পাঙ্গাসিনান",pal:"পাহ্লাভি",pam:"পাম্পাঙ্গা",pap:"পাপিয়ামেন্টো",pau:"পালায়ুয়ান",pcm:"নাইজেরিয় পিজিন",peo:"প্রাচীন ফার্সি",phn:"ফোনিশীয়ান",pi:"পালি",pl:"পোলিশ",pon:"পোহ্নপেইয়ান",prg:"প্রুশিয়ান",pro:"প্রাচীন প্রোভেনসাল",ps:"পুশতু",pt:"পর্তুগীজ","pt-BR":"ব্রাজিলের পর্তুগীজ","pt-PT":"ইউরোপের পর্তুগীজ",qu:"কেচুয়া",quc:"কি‘চে",raj:"রাজস্থানী",rap:"রাপানুই",rar:"রারোটোংগান",rm:"রোমান্স",rn:"রুন্দি",ro:"রোমানীয়","ro-MD":"মলদাভিয়",rof:"রম্বো",rom:"রোমানি",root:"মূল",ru:"রুশ",rup:"আরমেনিয়ান",rw:"কিনয়ারোয়ান্ডা",rwk:"রাওয়া",sa:"সংস্কৃত",sad:"স্যান্ডাওয়ে",sah:"শাখা",sam:"সামারিটান আরামিক",saq:"সামবুরু",sas:"সাসাক",sat:"সাঁওতালি",sba:"ন্যাগাম্বে",sbp:"সাঙ্গু",sc:"সার্ডিনিয়ান",scn:"সিসিলিয়ান",sco:"স্কটস",sd:"সিন্ধি",sdh:"দক্ষিণ কুর্দিশ",se:"উত্তরাঞ্চলীয় সামি",seh:"সেনা",sel:"সেল্কুপ",ses:"কোয়রাবেনো সেন্নী",sg:"সাঙ্গো",sga:"প্রাচীন আইরিশ",sh:"সার্বো-ক্রোয়েশিয়",shi:"তাচেলহিত",shn:"শান",si:"সিংহলী",sid:"সিডামো",sk:"স্লোভাক",sl:"স্লোভেনীয়",sm:"সামোয়ান",sma:"দক্ষিণাঞ্চলীয় সামি",smj:"লুলে সামি",smn:"ইনারি সামি",sms:"স্কোল্ট সামি",sn:"শোনা",snk:"সোনিঙ্কে",so:"সোমালি",sog:"সোগডিয়ান",sq:"আলবেনীয়",sr:"সার্বীয়",srn:"স্রানান টোঙ্গো",srr:"সেরের",ss:"সোয়াতি",ssy:"সাহো",st:"দক্ষিন সোথো",su:"সুদানী",suk:"সুকুমা",sus:"সুসু",sux:"সুমেরীয়",sv:"সুইডিশ",sw:"সোয়াহিলি","sw-CD":"কঙ্গো সোয়াহিলি",swb:"কমোরিয়ান",syc:"প্রাচীন সিরিও",syr:"সিরিয়াক",ta:"তামিল",te:"তেলুগু",tem:"টাইম্নে",teo:"তেসো",ter:"তেরেনো",tet:"তেতুম",tg:"তাজিক",th:"থাই",ti:"তিগরিনিয়া",tig:"টাইগ্রে",tiv:"টিভ",tk:"তুর্কমেনী",tkl:"টোকেলাউ",tl:"তাগালগ",tlh:"ক্লিঙ্গন",tli:"ত্লিঙ্গিট",tmh:"তামাশেক",tn:"সোয়ানা",to:"টোঙ্গান",tog:"নায়াসা টোঙ্গা",tpi:"টোক পিসিন",tr:"তুর্কী",trv:"তারোকো",ts:"সঙ্গা",tsi:"সিমশিয়ান",tt:"তাতার",tum:"তুম্বুকা",tvl:"টুভালু",tw:"টোয়াই",twq:"তাসাওয়াক",ty:"তাহিতিয়ান",tyv:"টুভিনিয়ান",tzm:"সেন্ট্রাল আটলাস তামাজিগাত",udm:"উডমুর্ট",ug:"উইঘুর",uga:"উগারিটিক",uk:"ইউক্রেনীয়",umb:"উম্বুন্দু",ur:"উর্দু",uz:"উজবেকীয়",vai:"ভাই",ve:"ভেন্ডা",vi:"ভিয়েতনামী",vo:"ভোলাপুক",vot:"ভোটিক",vun:"ভুঞ্জো",wa:"ওয়ালুন",wae:"ওয়ালসের",wal:"ওয়ালামো",war:"ওয়ারে",was:"ওয়াশো",wbp:"ওয়ার্লপিরি",wo:"উওলোফ",wuu:"Wu চীনা",xal:"কাল্মইক",xh:"জোসা",xog:"সোগা",yao:"ইয়াও",yap:"ইয়াপেসে",yav:"ইয়াঙ্গবেন",ybb:"ইয়েম্বা",yi:"ইয়েদ্দিশ",yo:"ইওরুবা",yue:"ক্যান্টোনিজ",za:"ঝু্য়াঙ",zap:"জাপোটেক",zbl:"চিত্র ভাষা",zen:"জেনাগা",zgh:"আদর্শ মরক্কোন তামাজিগাত",zh:"চীনা","zh-Hans":"চীনা ম্যান্ডারিন সরলীকৃত","zh-Hant":"ঐতিহ্যবাহী ম্যান্ডারিন চীনা",zu:"জুলু",zun:"জুনি",zza:"জাজা"},scriptNames:{Cyrl:"সিরিলিক",Latn:"ল্যাটিন",Arab:"আরবি",Guru:"গুরুমুখি",Tfng:"তিফিনাগ",Vaii:"ভাই",Hans:"সরলীকৃত",Hant:"ঐতিহ্যবাহী"}},bs:{rtl:false,languageNames:{aa:"afarski",ab:"abhaski",ace:"ačinski",ach:"akoli",ada:"adangmejski",ady:"adigejski",ae:"avestanski",af:"afrikans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akadijski",ale:"aleutski",alt:"južni altai",am:"amharski",an:"aragonski",ang:"staroengleski",anp:"angika",ar:"arapski","ar-001":"moderni standardni arapski",arc:"aramejski",arn:"mapuški",arp:"arapaho",arw:"aravak",as:"asamski",asa:"asu",ast:"asturijski",av:"avarski",awa:"avadhi",ay:"ajmara",az:"azerbejdžanski",ba:"baškirski",bal:"baluči",ban:"balinezijski",bas:"basa",bax:"bamunski",bbj:"gomala",be:"bjeloruski",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bugarski",bgn:"zapadni belučki",bho:"bojpuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalski",bo:"tibetanski",br:"bretonski",bra:"braj",brx:"bodo",bs:"bosanski",bss:"akoski",bua:"buriat",bug:"bugiški",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalonski",cad:"kado",car:"karipski",cay:"kajuga",cch:"atsam",ccp:"čakma",ce:"čečenski",ceb:"cebuano",cgg:"čiga",ch:"čamoro",chb:"čibča",chg:"čagatai",chk:"čukeski",chm:"mari",chn:"činukski žargon",cho:"čoktav",chp:"čipvijanski",chr:"čeroki",chy:"čejenski",ckb:"centralnokurdski",co:"korzikanski",cop:"koptski",cr:"kri",crh:"krimski turski",crs:"seselva kreolski francuski",cs:"češki",csb:"kašubijanski",cu:"staroslavenski",cv:"čuvaški",cy:"velški",da:"danski",dak:"dakota",dar:"dargva",dav:"taita",de:"njemački","de-AT":"njemački (Austrija)","de-CH":"njemački (Švicarska)",del:"delaver",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"donjolužičkosrpski",dua:"duala",dum:"srednjovjekovni holandski",dv:"divehi",dyo:"jola-foni",dyu:"diula",dz:"džonga",dzg:"dazaga",ebu:"embu",ee:"eve",efi:"efik",egy:"staroegipatski",eka:"ekajuk",el:"grčki",elx:"elamitski",en:"engleski","en-AU":"engleski (Australija)","en-CA":"engleski (Kanada)","en-GB":"engleski (Ujedinjeno Kraljevstvo)","en-US":"engleski (Sjedinjene Države)",enm:"srednjovjekovni engleski",eo:"esperanto",es:"španski","es-419":"španski (Latinska Amerika)","es-ES":"španski (Španija)","es-MX":"španski (Meksiko)",et:"estonski",eu:"baskijski",ewo:"evondo",fa:"perzijski",fan:"fang",fat:"fanti",ff:"fulah",fi:"finski",fil:"filipino",fj:"fidžijski",fo:"farski",fr:"francuski","fr-CA":"francuski (Kanada)","fr-CH":"francuski (Švicarska)",frm:"srednjovjekovni francuski",fro:"starofrancuski",frr:"sjeverni frizijski",frs:"istočnofrizijski",fur:"friulijski",fy:"zapadni frizijski",ga:"irski",gaa:"ga",gag:"gagauški",gay:"gajo",gba:"gbaja",gd:"škotski galski",gez:"staroetiopski",gil:"gilbertski",gl:"galicijski",gmh:"srednjovjekovni gornjonjemački",gn:"gvarani",goh:"staronjemački",gon:"gondi",gor:"gorontalo",got:"gotski",grb:"grebo",grc:"starogrčki",gsw:"njemački (Švicarska)",gu:"gudžarati",guz:"gusi",gv:"manks",gwi:"gvičin",ha:"hausa",hai:"haida",haw:"havajski",he:"hebrejski",hi:"hindi",hil:"hiligajnon",hit:"hitite",hmn:"hmong",ho:"hiri motu",hr:"hrvatski",hsb:"gornjolužičkosrpski",ht:"haićanski kreolski",hu:"mađarski",hup:"hupa",hy:"armenski",hz:"herero",ia:"interlingva",iba:"iban",ibb:"ibibio",id:"indonezijski",ie:"interlingve",ig:"igbo",ii:"sičuan ji",ik:"inupiak",ilo:"iloko",inh:"ingušetski",io:"ido",is:"islandski",it:"italijanski",iu:"inuktitut",ja:"japanski",jbo:"lojban",jgo:"ngomba",jmc:"makame",jpr:"judeo-perzijski",jrb:"judeo-arapski",jv:"javanski",ka:"gruzijski",kaa:"kara-kalpak",kab:"kabile",kac:"kačin",kaj:"kaju",kam:"kamba",kaw:"kavi",kbd:"kabardijski",kbl:"kanembu",kcg:"tjap",kde:"makonde",kea:"zelenortski",kfo:"koro",kg:"kongo",kha:"kasi",kho:"kotanizijski",khq:"kojra čini",ki:"kikuju",kj:"kuanjama",kk:"kazaški",kkj:"kako",kl:"kalalisutski",kln:"kalenjin",km:"kmerski",kmb:"kimbundu",kn:"kanada",ko:"korejski",koi:"komi-permski",kok:"konkani",kos:"kosrejski",kpe:"kpele",kr:"kanuri",krc:"karačaj-balkar",kri:"krio",krl:"karelijski",kru:"kuruški",ks:"kašmirski",ksb:"šambala",ksf:"bafia",ksh:"kelnski",ku:"kurdski",kum:"kumik",kut:"kutenai",kv:"komi",kw:"kornski",ky:"kirgiški",la:"latinski",lad:"ladino",lag:"langi",lah:"landa",lam:"lamba",lb:"luksemburški",lez:"lezgijski",lg:"ganda",li:"limburški",lkt:"lakota",ln:"lingala",lo:"laoski",lol:"mongo",loz:"lozi",lrc:"sjeverni luri",lt:"litvanski",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luhija",lv:"latvijski",mad:"madureški",maf:"mafa",mag:"magahi",mai:"maitili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"mokša",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricijski kreolski",mg:"malgaški",mga:"srednjovjekovni irski",mgh:"makuva-meto",mgo:"meta",mh:"maršalski",mi:"maorski",mic:"mikmak",min:"minangkabau",mk:"makedonski",ml:"malajalam",mn:"mongolski",mnc:"manču",mni:"manipuri",moh:"mohavk",mos:"mosi",mr:"marati",ms:"malajski",mt:"malteški",mua:"mundang",mus:"kriški",mwl:"mirandeški",mwr:"marvari",my:"burmanski",mye:"mjene",myv:"erzija",mzn:"mazanderanski",na:"nauru",nap:"napolitanski",naq:"nama",nb:"norveški (Bokmal)",nd:"sjeverni ndebele",nds:"donjonjemački","nds-NL":"donjosaksonski",ne:"nepalski","new":"nevari",ng:"ndonga",nia:"nias",niu:"niue",nl:"holandski","nl-BE":"flamanski",nmg:"kvasio",nn:"norveški (Nynorsk)",nnh:"ngiembon",no:"norveški",nog:"nogai",non:"staronordijski",nqo:"nko",nr:"južni ndebele",nso:"sjeverni soto",nus:"nuer",nv:"navaho",nwc:"klasični nevari",ny:"njanja",nym:"njamvezi",nyn:"njankole",nyo:"njoro",nzi:"nzima",oc:"oksitanski",oj:"ojibva",om:"oromo",or:"odija",os:"osetski",osa:"osage",ota:"osmanski turski",pa:"pandžapski",pag:"pangasinski",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauanski",pcm:"nigerijski pidžin",peo:"staroperzijski",phn:"feničanski",pi:"pali",pl:"poljski",pon:"ponpejski",prg:"pruski",pro:"staroprovansalski",ps:"paštu",pt:"portugalski","pt-BR":"portugalski (Brazil)","pt-PT":"portugalski (Portugal)",qu:"kečua",quc:"kiče",raj:"rajastani",rap:"rapanui",rar:"rarotongan",rm:"retoromanski",rn:"rundi",ro:"rumunski","ro-MD":"moldavski",rof:"rombo",rom:"romani",root:"korijenski",ru:"ruski",rup:"arumunski",rw:"kinjaruanda",rwk:"rua",sa:"sanskrit",sad:"sandave",sah:"jakutski",sam:"samaritanski aramejski",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambaj",sbp:"sangu",sc:"sardinijski",scn:"sicilijanski",sco:"škotski",sd:"sindi",sdh:"južni kurdski",se:"sjeverni sami",see:"seneka",seh:"sena",sel:"selkup",ses:"kojraboro seni",sg:"sango",sga:"staroirski",sh:"srpskohrvatski",shi:"tahelhit",shn:"šan",shu:"čadski arapski",si:"sinhaleški",sid:"sidamo",sk:"slovački",sl:"slovenski",sm:"samoanski",sma:"južni sami",smj:"lule sami",smn:"inari sami",sms:"skolt sami",sn:"šona",snk:"soninke",so:"somalski",sog:"sogdien",sq:"albanski",sr:"srpski",srn:"srananski tongo",srr:"serer",ss:"svati",ssy:"saho",st:"južni soto",su:"sundanski",suk:"sukuma",sus:"susu",sux:"sumerski",sv:"švedski",sw:"svahili","sw-CD":"svahili (Demokratska Republika Kongo)",swb:"komorski",syc:"klasični sirijski",syr:"sirijski",ta:"tamilski",te:"telugu",tem:"timne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadžički",th:"tajlandski",ti:"tigrinja",tig:"tigre",tk:"turkmenski",tkl:"tokelau",tl:"tagalog",tlh:"klingonski",tli:"tlingit",tmh:"tamašek",tn:"tsvana",to:"tonganski",tog:"njasa tonga",tpi:"tok pisin",tr:"turski",trv:"taroko",ts:"tsonga",tsi:"tsimšian",tt:"tatarski",tum:"tumbuka",tvl:"tuvalu",tw:"tvi",twq:"tasavak",ty:"tahićanski",tyv:"tuvinijski",tzm:"centralnoatlaski tamazigt",udm:"udmurt",ug:"ujgurski",uga:"ugaritski",uk:"ukrajinski",umb:"umbundu",ur:"urdu",uz:"uzbečki",ve:"venda",vi:"vijetnamski",vo:"volapuk",vot:"votski",vun:"vunjo",wa:"valun",wae:"valser",wal:"valamo",war:"varej",was:"vašo",wbp:"varlpiri",wo:"volof",xal:"kalmik",xh:"hosa",xog:"soga",yao:"jao",yap:"japeški",yav:"jangben",ybb:"jemba",yi:"jidiš",yo:"jorubanski",yue:"kantonski",za:"zuang",zap:"zapotečki",zbl:"blis simboli",zen:"zenaga",zgh:"standardni marokanski tamazigt",zh:"kineski","zh-Hans":"kineski (pojednostavljeni standardni)","zh-Hant":"kineski (tradicionalni standardni)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"ćirilica",Latn:"latinica",Arab:"arapsko pismo",Guru:"pismo gurmuki",Tfng:"tifinag pismo",Vaii:"vai pismo",Hans:"pojednostavljeno",Hant:"tradicionalno"}},ca:{rtl:false,languageNames:{aa:"àfar",ab:"abkhaz",ace:"atjeh",ach:"acoli",ada:"adangme",ady:"adigué",ae:"avèstic",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"àkan",akk:"accadi",akz:"alabama",ale:"aleuta",aln:"albanès geg",alt:"altaic meridional",am:"amhàric",an:"aragonès",ang:"anglès antic",anp:"angika",ar:"àrab","ar-001":"àrab estàndard modern",arc:"arameu",arn:"mapudungu",aro:"araona",arp:"arapaho",ars:"àrab najdi",arw:"arauac",arz:"àrab egipci",as:"assamès",asa:"pare",ase:"llengua de signes americana",ast:"asturià",av:"àvar",awa:"awadhi",ay:"aimara",az:"azerbaidjanès",ba:"baixkir",bal:"balutxi",ban:"balinès",bar:"bavarès",bas:"basa",bax:"bamum",bbj:"ghomala",be:"belarús",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"búlgar",bgn:"balutxi occidental",bho:"bhojpuri",bi:"bislama",bik:"bicol",bin:"edo",bkm:"kom",bla:"blackfoot",bm:"bambara",bn:"bengalí",bo:"tibetà",br:"bretó",bra:"braj",brh:"brahui",brx:"bodo",bs:"bosnià",bss:"akoose",bua:"buriat",bug:"bugui",bum:"bulu",byn:"bilin",byv:"medumba",ca:"català",cad:"caddo",car:"carib",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"txetxè",ceb:"cebuà",cgg:"chiga",ch:"chamorro",chb:"txibtxa",chg:"txagatai",chk:"chuuk",chm:"mari",chn:"pidgin chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"xeiene",ckb:"kurd central",co:"cors",cop:"copte",cr:"cree",crh:"tàtar de Crimea",crs:"francès crioll de les Seychelles",cs:"txec",csb:"caixubi",cu:"eslau eclesiàstic",cv:"txuvaix",cy:"gal·lès",da:"danès",dak:"dakota",dar:"darguà",dav:"taita",de:"alemany","de-AT":"alemany austríac","de-CH":"alemany estàndard suís",del:"delaware",den:"slavi",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baix sòrab",dua:"douala",dum:"neerlandès mitjà",dv:"divehi",dyo:"diola",dyu:"jula",dz:"dzongka",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emilià",egy:"egipci antic",eka:"ekajuk",el:"grec",elx:"elamita",en:"anglès","en-AU":"anglès australià","en-CA":"anglès canadenc","en-GB":"anglès britànic","en-US":"anglès americà",enm:"anglès mitjà",eo:"esperanto",es:"espanyol","es-419":"espanyol hispanoamericà","es-ES":"espanyol europeu","es-MX":"espanyol de Mèxic",et:"estonià",eu:"basc",ewo:"ewondo",ext:"extremeny",fa:"persa",fan:"fang",fat:"fanti",ff:"ful",fi:"finès",fil:"filipí",fj:"fijià",fo:"feroès",fr:"francès","fr-CA":"francès canadenc","fr-CH":"francès suís",frc:"francès cajun",frm:"francès mitjà",fro:"francès antic",frr:"frisó septentrional",frs:"frisó oriental",fur:"friülà",fy:"frisó occidental",ga:"irlandès",gaa:"ga",gag:"gagaús",gan:"xinès gan",gay:"gayo",gba:"gbaya",gd:"gaèlic escocès",gez:"gueez",gil:"gilbertès",gl:"gallec",glk:"gilaki",gmh:"alt alemany mitjà",gn:"guaraní",goh:"alt alemany antic",gom:"concani de Goa",gon:"gondi",gor:"gorontalo",got:"gòtic",grb:"grebo",grc:"grec antic",gsw:"alemany suís",gu:"gujarati",guc:"wayú",guz:"gusí",gv:"manx",gwi:"gwich’in",ha:"haussa",hai:"haida",hak:"xinès hakka",haw:"hawaià",he:"hebreu",hi:"hindi",hif:"hindi de Fiji",hil:"híligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croat",hsb:"alt sòrab",hsn:"xinès xiang",ht:"crioll d’Haití",hu:"hongarès",hup:"hupa",hy:"armeni",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesi",ie:"interlingue",ig:"igbo",ii:"yi sichuan",ik:"inupiak",ilo:"ilocano",inh:"ingúix",io:"ido",is:"islandès",it:"italià",iu:"inuktitut",ja:"japonès",jam:"crioll anglès de Jamaica",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"judeopersa",jrb:"judeoàrab",jv:"javanès",ka:"georgià",kaa:"karakalpak",kab:"cabilenc",kac:"katxin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardí",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"crioll capverdià",ken:"kenyang",kfo:"koro",kg:"kongo",kgp:"kaingà",kha:"khasi",kho:"khotanès",khq:"koyra chiini",ki:"kikuiu",kj:"kuanyama",kk:"kazakh",kkj:"kako",kl:"grenlandès",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"coreà",koi:"komi-permiac",kok:"concani",kos:"kosraeà",kpe:"kpelle",kr:"kanuri",krc:"karatxai-balkar",kri:"krio",krl:"carelià",kru:"kurukh",ks:"caixmiri",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurd",kum:"kúmik",kut:"kutenai",kv:"komi",kw:"còrnic",ky:"kirguís",la:"llatí",lad:"judeocastellà",lag:"langi",lah:"panjabi occidental",lam:"lamba",lb:"luxemburguès",lez:"lesguià",lg:"ganda",li:"limburguès",lij:"lígur",lkt:"lakota",lmo:"llombard",ln:"lingala",lo:"laosià",lol:"mongo",lou:"crioll francès de Louisiana",loz:"lozi",lrc:"luri septentrional",lt:"lituà",lu:"luba katanga",lua:"luba-lulua",lui:"luisenyo",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letó",lzh:"xinès clàssic",lzz:"laz",mad:"madurès",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassar",man:"mandinga",mas:"massai",mde:"maba",mdf:"mordovià moksa",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricià",mg:"malgaix",mga:"gaèlic irlandès mitjà",mgh:"makhuwa-metto",mgo:"meta’",mh:"marshallès",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedoni",ml:"malaiàlam",mn:"mongol",mnc:"manxú",mni:"manipurí",moh:"mohawk",mos:"moore",mr:"marathi",mrj:"mari occidental",ms:"malai",mt:"maltès",mua:"mundang",mus:"creek",mwl:"mirandès",mwr:"marwari",my:"birmà",mye:"myene",myv:"mordovià erza",mzn:"mazanderani",na:"nauruà",nan:"xinès min del sud",nap:"napolità",naq:"nama",nb:"noruec bokmål",nd:"ndebele septentrional",nds:"baix alemany","nds-NL":"baix saxó",ne:"nepalès","new":"newari",ng:"ndonga",nia:"nias",niu:"niueà",nl:"neerlandès","nl-BE":"flamenc",nmg:"bissio",nn:"noruec nynorsk",nnh:"ngiemboon",no:"noruec",nog:"nogai",non:"nòrdic antic",nov:"novial",nqo:"n’Ko",nr:"ndebele meridional",nso:"sotho septentrional",nus:"nuer",nv:"navaho",nwc:"newari clàssic",ny:"nyanja",nym:"nyamwesi",nyn:"nyankole",nyo:"nyoro",nzi:"nzema",oc:"occità",oj:"ojibwa",om:"oromo",or:"oriya",os:"osseta",osa:"osage",ota:"turc otomà",pa:"panjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiament",pau:"palauà",pcd:"picard",pcm:"pidgin de Nigèria",pdc:"alemany pennsilvanià",peo:"persa antic",pfl:"alemany palatí",phn:"fenici",pi:"pali",pl:"polonès",pms:"piemontès",pnt:"pòntic",pon:"ponapeà",prg:"prussià",pro:"provençal antic",ps:"paixtu",pt:"portuguès","pt-BR":"portuguès del Brasil","pt-PT":"portuguès de Portugal",qu:"quítxua",quc:"k’iche’",raj:"rajasthani",rap:"rapanui",rar:"rarotongà",rgn:"romanyès",rm:"retoromànic",rn:"rundi",ro:"romanès","ro-MD":"moldau",rof:"rombo",rom:"romaní",root:"arrel",ru:"rus",rup:"aromanès",rw:"ruandès",rwk:"rwo",sa:"sànscrit",sad:"sandawe",sah:"iacut",sam:"arameu samarità",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sard",scn:"sicilià",sco:"escocès",sd:"sindi",sdc:"sasserès",sdh:"kurd meridional",se:"sami septentrional",see:"seneca",seh:"sena",sel:"selkup",ses:"songhai oriental",sg:"sango",sga:"irlandès antic",sh:"serbocroat",shi:"taixelhit",shn:"xan",shu:"àrab txadià",si:"singalès",sid:"sidamo",sk:"eslovac",sl:"eslovè",sm:"samoà",sma:"sami meridional",smj:"sami lule",smn:"sami d’Inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somali",sog:"sogdià",sq:"albanès",sr:"serbi",srn:"sranan",srr:"serer",ss:"swazi",ssy:"saho",st:"sotho meridional",su:"sondanès",suk:"sukuma",sus:"susú",sux:"sumeri",sv:"suec",sw:"suahili","sw-CD":"suahili del Congo",swb:"comorià",syc:"siríac clàssic",syr:"siríac",szl:"silesià",ta:"tàmil",te:"telugu",tem:"temne",teo:"teso",ter:"terena",tet:"tètum",tg:"tadjik",th:"tai",ti:"tigrinya",tig:"tigre",tk:"turcman",tkl:"tokelauès",tkr:"tsakhur",tl:"tagal",tlh:"klingonià",tli:"tlingit",tly:"talix",tmh:"amazic",tn:"setswana",to:"tongalès",tog:"tonga",tpi:"tok pisin",tr:"turc",trv:"taroko",ts:"tsonga",tsi:"tsimshià",tt:"tàtar",ttt:"tat meridional",tum:"tumbuka",tvl:"tuvaluà",tw:"twi",twq:"tasawaq",ty:"tahitià",tyv:"tuvinià",tzm:"amazic del Marroc central",udm:"udmurt",ug:"uigur",uga:"ugarític",uk:"ucraïnès",umb:"umbundu",ur:"urdú",uz:"uzbek",ve:"venda",vec:"vènet",vep:"vepse",vi:"vietnamita",vls:"flamenc occidental",vo:"volapük",vot:"vòtic",vun:"vunjo",wa:"való",wae:"walser",wal:"wolaita",war:"waray",was:"washo",wbp:"warlpiri",wo:"wòlof",wuu:"xinès wu",xal:"calmuc",xh:"xosa",xmf:"mingrelià",xog:"soga",yap:"yapeà",yav:"yangben",ybb:"yemba",yi:"ídix",yo:"ioruba",yue:"cantonès",za:"zhuang",zap:"zapoteca",zbl:"símbols Bliss",zea:"zelandès",zen:"zenaga",zgh:"amazic estàndard marroquí",zh:"xinès","zh-Hans":"xinès mandarí (simplificat)","zh-Hant":"xinès mandarí (tradicional)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"ciríl·lic",Latn:"llatí",Arab:"àrab",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificat",Hant:"tradicional"}},ckb:{rtl:true,languageNames:{aa:"ئەفار",ab:"ئەبخازی",ace:"ئاچەیی",ada:"دانگمێ",ady:"ئادیگی",af:"ئەفریکانس",agq:"ئاگێم",ain:"ئاینوو",ak:"ئاکان",ale:"ئالیوت",alt:"ئاڵتایی باشوور",am:"ئەمھەری",an:"ئاراگۆنی",anp:"ئەنگیکا",ar:"عەرەبی","ar-001":"عەرەبیی ستاندارد",arn:"ماپووچە",arp:"ئاراپاهۆ",as:"ئاسامی",asa:"ئاسوو",ast:"ئاستۆری",av:"ئەڤاری",awa:"ئاوادهی",ay:"ئایمارا",az:"ئازەربایجانی","az-Arab":"ئازەربایجانی باشووری",ba:"باشکیەر",ban:"بالی",bas:"باسا",be:"بیلاڕووسی",bem:"بێمبا",bez:"بێنا",bg:"بۆلگاری",bho:"بوجپووری",bi:"بیسلاما",bin:"بینی",bla:"سیکسیکا",bm:"بامبارا",bn:"بەنگلادێشی",bo:"تەبەتی",br:"برێتونی",brx:"بۆدۆ",bs:"بۆسنی",bug:"بووگی",byn:"بلین",ca:"كاتالۆنی",ce:"چیچانی",ceb:"سێبوانۆ",cgg:"کیگا",ch:"چامۆرۆ",chk:"چووکی",chm:"ماری",cho:"چۆکتاو",chr:"چێرۆکی",chy:"شایان",ckb:"کوردیی ناوەندی",co:"کۆرسیکی",crs:"فەرەنسیی سیشێلی",cs:"چێکی",cu:"سلاویی کلیسەیی",cv:"چووڤاشی",cy:"وێلزی",da:"دانماركی",dak:"داکۆتایی",dar:"دارگینی",dav:"تایتا",de:"ئەڵمانی","de-AT":"ئەڵمانی (نەمسا)","de-CH":"ئەڵمانی (سویسڕا)",dgr:"دۆگریب",dje:"زارما",dsb:"سربیی خوارین",dua:"دووالا",dv:"دیڤێهی",dyo:"جۆلافۆنی",dz:"دزوونگخا",dzg:"دازا",ebu:"ئێمبوو",ee:"ئێوێیی",efi:"ئێفیک",eka:"ئێکاجووک",el:"یۆنانی",en:"ئینگلیزی","en-AU":"ئینگلیزیی ئۆسترالیایی","en-CA":"ئینگلیزیی کەنەدایی","en-GB":"ئینگلیزیی بریتانیایی","en-US":"ئینگلیزیی ئەمەریکایی",eo:"ئێسپیرانتۆ",es:"ئیسپانی","es-419":"ئیسپانی (ئەمەریکای لاتین)","es-ES":"ئیسپانی (ئیسپانیا)","es-MX":"ئیسپانی (مەکسیک)",et:"ئیستۆنی",eu:"باسکی",ewo:"ئێوۆندۆ",fa:"فارسی",ff:"فوولایی",fi:"فینلەندی",fil:"فیلیپینی",fj:"فیجی",fo:"فەرۆیی",fon:"فۆنی",fr:"فەرەنسی","fr-CA":"فەرەنسی (کەنەدا)","fr-CH":"فەرەنسی (سویسڕا)",fur:"فریئوولی",fy:"فریسیی ڕۆژاوا",ga:"ئیرلەندی",gaa:"گایی",gd:"گه‌لیكی سكۆتله‌ندی",gez:"گیزی",gil:"گیلبێرتی",gl:"گالیسی",gn:"گووارانی",gor:"گۆرۆنتالی",gsw:"ئەڵمانیی سویسڕا",gu:"گوجاراتی",guz:"گووسی",gv:"مانکی",gwi:"گویچین",ha:"هائووسا",haw:"هاوایی",he:"عیبری",hi:"هیندی",hil:"هیلیگاینۆن",hmn:"همۆنگ",hr:"كرواتی",hsb:"سربیی سەروو",ht:"کریولی هائیتی",hu:"هەنگاری",hup:"هووپا",hy:"ئەرمەنی",hz:"هێرێرۆ",ia:"ئینترلینگووا",iba:"ئیبان",ibb:"ئیبیبۆ",id:"ئیندۆنیزی",ig:"ئیگبۆ",ii:"سیچوان یی",ilo:"ئیلۆکۆ",inh:"ئینگووش",io:"ئیدۆ",is:"ئیسلەندی",it:"ئیتالی",iu:"ئینوکتیتوت",ja:"ژاپۆنی",jbo:"لۆژبان",jgo:"نگۆمبا",jmc:"ماچامێ",jv:"جاڤایی",ka:"گۆرجستانی",kab:"کبائیلی",kac:"کاچین",kaj:"کیجوو",kam:"کامبا",kbd:"کاباردی",kcg:"تیاپ",kde:"ماکۆندە",kea:"کابووڤێردیانۆ",kfo:"کۆرۆ",kha:"کهاسی",khq:"کۆیرا چینی",ki:"کیکوویوو",kj:"کوانیاما",kk:"کازاخی",kkj:"کاکۆ",kl:"کالالیسووت",kln:"کالێنجین",km:"خمێر",kmb:"کیمبووندوو",kn:"کاننادا",ko:"كۆری",kok:"کۆنکانی",kpe:"کپێلێ",kr:"کانووری",krc:"کاراچای بالکار",krl:"کارێلی",kru:"کوورووخ",ks:"کەشمیری",ksb:"شامابالا",ksf:"بافیا",ksh:"کۆلۆنی",ku:"کوردی",kum:"کوومیک",kv:"کۆمی",kw:"کۆڕنی",ky:"كرگیزی",la:"لاتینی",lad:"لادینۆ",lag:"لانگی",lb:"لوکسەمبورگی",lez:"لەزگی",lg:"گاندا",li:"لیمبورگی",lkt:"لاکۆتا",ln:"لينگالا",lo:"لائۆیی",loz:"لۆزی",lrc:"لوڕیی باکوور",lt:"لیتوانی",lu:"لووبا کاتانگا",lua:"لووبا لوولووا",lun:"لووندا",luo:"لووئۆ",lus:"میزۆ",luy:"لوویا",lv:"لێتۆنی",mad:"مادووری",mag:"ماگاهی",mai:"مائیتیلی",mak:"ماکاسار",mas:"ماسایی",mdf:"مۆکشا",men:"مێندێ",mer:"مێروو",mfe:"مۆریسی",mg:"مالاگاسی",mgh:"ماخوامیتۆ",mgo:"مێتە",mh:"مارشاڵی",mi:"مائۆری",mic:"میکماک",min:"مینانکاباو",mk:"ماكێدۆنی",ml:"مالایالام",mn:"مەنگۆلی",mni:"مانیپووری",moh:"مۆهاوک",mos:"مۆسی",mr:"ماراتی",ms:"مالیزی",mt:"ماڵتی",mua:"موندانگ",mus:"کریک",mwl:"میراندی",my:"میانماری",myv:"ئێرزیا",mzn:"مازەندەرانی",na:"نائوروو",nap:"ناپۆلی",naq:"ناما",nb:"نەرویژیی بۆکمال",nd:"ئندێبێلێی باکوور","nds-NL":"nds (ھۆڵەندا)",ne:"نیپالی","new":"نێواری",ng:"ندۆنگا",nia:"نیاس",niu:"نیئوویی",nl:"هۆڵەندی","nl-BE":"فلێمی",nmg:"کواسیۆ",nn:"نەرویژیی نینۆرسک",nnh:"نگیمبوون",no:"نۆروێژی",nog:"نۆگای",nqo:"نکۆ",nr:"ئندێبێلێی باشوور",nso:"سۆتۆی باکوور",nus:"نوێر",nv:"ناڤاجۆ",ny:"نیانجا",nyn:"نیانکۆلێ",oc:"ئۆکسیتانی",om:"ئۆرۆمۆ",or:"ئۆدیا",os:"ئۆسێتی",pa:"پەنجابی",pag:"پانگاسینان",pam:"پامپانگا",pap:"پاپیامێنتۆ",pau:"پالائوویی",pcm:"پیجینی نیجریا",pl:"پۆڵەندی",prg:"پڕووسی",ps:"پەشتوو",pt:"پورتوگالی","pt-BR":"پورتوگالی (برازیل)","pt-PT":"پورتوگالی (پورتوگال)",qu:"کێچوا",quc:"کیچەیی",rap:"ڕاپانوویی",rar:"ڕاڕۆتۆنگان",rm:"ڕۆمانش",rn:"ڕووندی",ro:"ڕۆمانی","ro-MD":"مۆڵداڤی",rof:"ڕۆمبۆ",root:"ڕووت",ru:"ڕووسی",rup:"ئارمۆمانی",rw:"کینیارواندا",rwk:"ڕوا",sa:"سانسکريت",sad:"سانداوێ",sah:"ساخا",saq:"سامبووروو",sat:"سانتالی",sba:"نگامبای",sbp:"سانگوو",sc:"ساردینی",scn:"سیسیلی",sco:"سکۆتس",sd:"سيندی",sdh:"کوردیی باشووری",se:"سامیی باکوور",seh:"سێنا",ses:"کۆیرابۆرۆ سێنی",sg:"سانگۆ",shi:"شیلها",shn:"شان",si:"سینهالی",sk:"سلۆڤاكی",sl:"سلۆڤێنی",sm:"سامۆیی",sma:"سامیی باشوور",smj:"لوولێ سامی",smn:"ئیناری سامی",sms:"سامیی سکۆڵت",sn:"شۆنا",snk:"سۆنینکێ",so:"سۆمالی",sq:"ئەڵبانی",sr:"سربی",srn:"سرانان تۆنگۆ",ss:"سواتی",ssy:"ساهۆ",st:"سۆتۆی باشوور",su:"سوندانی",suk:"سووکووما",sv:"سویدی",sw:"سواهیلی","sw-CD":"سواهیلیی کۆنگۆ",swb:"کۆمۆری",syr:"سریانی",ta:"تامیلی",te:"تێلووگوو",tem:"تیمنێ",teo:"تێسوو",tet:"تێتووم",tg:"تاجیکی",th:"تایلەندی",ti:"تیگرینیا",tig:"تیگرێ",tk:"تورکمانی",tlh:"كلینگۆن",tn:"تسوانا",to:"تۆنگان",tpi:"تۆکپیسین",tr:"تورکی",trv:"تارۆکۆ",ts:"تسۆنگا",tt:"تاتاری",tum:"تومبووکا",tvl:"تووڤالوو",twq:"تاساواک",ty:"تاهیتی",tyv:"تووڤینی",tzm:"ئەمازیغی ناوەڕاست",udm:"ئوودموورت",ug:"ئۆیخۆری",uk:"ئۆكراینی",umb:"ئومبووندوو",ur:"ئۆردوو",uz:"ئوزبەکی",vai:"ڤایی",ve:"ڤێندا",vi:"ڤیەتنامی",vo:"ڤۆلاپووک",vun:"ڤوونجوو",wa:"والوون",wae:"والسێر",wal:"وۆلایتا",war:"وارای",wo:"وۆلۆف",xal:"کالمیک",xh:"سسوسا",xog:"سۆگا",yav:"یانگبێن",ybb:"یێمبا",yi:"ییدیش",yo:"یۆرووبا",yue:"کانتۆنی",zgh:"ئەمازیغیی مەغریب",zh:"چینی","zh-Hans":"چینی (ئاسانکراو)","zh-Hant":"چینی (دێرین)",zu:"زوولوو",zun:"زوونی",zza:"زازا"},scriptNames:{Cyrl:"سریلیک",Latn:"لاتینی",Arab:"عەرەبی",Guru:"گورموکھی",Hans:"ئاسانکراو",Hant:"دێرین"}},cs:{rtl:false,languageNames:{aa:"afarština",ab:"abcházština",ace:"acehština",ach:"akolština",ada:"adangme",ady:"adygejština",ae:"avestánština",aeb:"arabština (tuniská)",af:"afrikánština",afh:"afrihili",agq:"aghem",ain:"ainština",ak:"akanština",akk:"akkadština",akz:"alabamština",ale:"aleutština",aln:"albánština (Gheg)",alt:"altajština (jižní)",am:"amharština",an:"aragonština",ang:"staroangličtina",anp:"angika",ar:"arabština","ar-001":"arabština (moderní standardní)",arc:"aramejština",arn:"mapudungun",aro:"araonština",arp:"arapažština",arq:"arabština (alžírská)",ars:"arabština (Nadžd)",arw:"arawacké jazyky",ary:"arabština (marocká)",arz:"arabština (egyptská)",as:"ásámština",asa:"asu",ase:"znaková řeč (americká)",ast:"asturština",av:"avarština",avk:"kotava",awa:"awadhština",ay:"ajmarština",az:"ázerbájdžánština",ba:"baškirština",bal:"balúčština",ban:"balijština",bar:"bavorština",bas:"basa",bax:"bamun",bbc:"batak toba",bbj:"ghomala",be:"běloruština",bej:"bedža",bem:"bembština",bew:"batavština",bez:"bena",bfd:"bafut",bfq:"badagština",bg:"bulharština",bgn:"balúčština (západní)",bho:"bhódžpurština",bi:"bislamština",bik:"bikolština",bin:"bini",bjn:"bandžarština",bkm:"kom",bla:"siksika",bm:"bambarština",bn:"bengálština",bo:"tibetština",bpy:"bišnuprijskomanipurština",bqi:"bachtijárština",br:"bretonština",bra:"bradžština",brh:"brahujština",brx:"bodoština",bs:"bosenština",bss:"akoose",bua:"burjatština",bug:"bugiština",bum:"bulu",byn:"blinština",byv:"medumba",ca:"katalánština",cad:"caddo",car:"karibština",cay:"kajugština",cch:"atsam",ccp:"čakma",ce:"čečenština",ceb:"cebuánština",cgg:"kiga",ch:"čamoro",chb:"čibča",chg:"čagatajština",chk:"čukština",chm:"marijština",chn:"činuk pidžin",cho:"čoktština",chp:"čipevajština",chr:"čerokézština",chy:"čejenština",ckb:"kurdština (sorání)",co:"korsičtina",cop:"koptština",cps:"kapiznonština",cr:"kríjština",crh:"turečtina (krymská)",crs:"kreolština (seychelská)",cs:"čeština",csb:"kašubština",cu:"staroslověnština",cv:"čuvaština",cy:"velština",da:"dánština",dak:"dakotština",dar:"dargština",dav:"taita",de:"němčina","de-AT":"němčina (Rakousko)","de-CH":"němčina standardní (Švýcarsko)",del:"delawarština",den:"slejvština (athabaský jazyk)",dgr:"dogrib",din:"dinkština",dje:"zarmština",doi:"dogarština",dsb:"dolnolužická srbština",dtp:"kadazandusunština",dua:"dualština",dum:"holandština (středověká)",dv:"maledivština",dyo:"jola-fonyi",dyu:"djula",dz:"dzongkä",dzg:"dazaga",ebu:"embu",ee:"eweština",efi:"efikština",egl:"emilijština",egy:"egyptština stará",eka:"ekajuk",el:"řečtina",elx:"elamitština",en:"angličtina","en-AU":"angličtina (Austrálie)","en-CA":"angličtina (Kanada)","en-GB":"angličtina (Velká Británie)","en-US":"angličtina (USA)",enm:"angličtina (středověká)",eo:"esperanto",es:"španělština","es-419":"španělština (Latinská Amerika)","es-ES":"španělština (Evropa)","es-MX":"španělština (Mexiko)",esu:"jupikština (středoaljašská)",et:"estonština",eu:"baskičtina",ewo:"ewondo",ext:"extremadurština",fa:"perština",fan:"fang",fat:"fantština",ff:"fulbština",fi:"finština",fil:"filipínština",fit:"finština (tornedalská)",fj:"fidžijština",fo:"faerština",fon:"fonština",fr:"francouzština","fr-CA":"francouzština (Kanada)","fr-CH":"francouzština (Švýcarsko)",frc:"francouzština (cajunská)",frm:"francouzština (středověká)",fro:"francouzština (stará)",frp:"franko-provensálština",frr:"fríština (severní)",frs:"fríština (východní)",fur:"furlanština",fy:"fríština (západní)",ga:"irština",gaa:"gaština",gag:"gagauzština",gan:"čínština (dialekty Gan)",gay:"gayo",gba:"gbaja",gbz:"daríjština (zoroastrijská)",gd:"skotská gaelština",gez:"geez",gil:"kiribatština",gl:"galicijština",glk:"gilačtina",gmh:"hornoněmčina (středověká)",gn:"guaranština",goh:"hornoněmčina (stará)",gom:"konkánština (Goa)",gon:"góndština",gor:"gorontalo",got:"gótština",grb:"grebo",grc:"starořečtina",gsw:"němčina (Švýcarsko)",gu:"gudžarátština",guc:"wayúuština",gur:"frafra",guz:"gusii",gv:"manština",gwi:"gwichʼin",ha:"hauština",hai:"haidština",hak:"čínština (dialekty Hakka)",haw:"havajština",he:"hebrejština",hi:"hindština",hif:"hindština (Fidži)",hil:"hiligajnonština",hit:"chetitština",hmn:"hmongština",ho:"hiri motu",hr:"chorvatština",hsb:"hornolužická srbština",hsn:"čínština (dialekty Xiang)",ht:"haitština",hu:"maďarština",hup:"hupa",hy:"arménština",hz:"hererština",ia:"interlingua",iba:"ibanština",ibb:"ibibio",id:"indonéština",ie:"interlingue",ig:"igboština",ii:"iština (sečuánská)",ik:"inupiakština",ilo:"ilokánština",inh:"inguština",io:"ido",is:"islandština",it:"italština",iu:"inuktitutština",izh:"ingrijština",ja:"japonština",jam:"jamajská kreolština",jbo:"lojban",jgo:"ngomba",jmc:"mašame",jpr:"judeoperština",jrb:"judeoarabština",jut:"jutština",jv:"javánština",ka:"gruzínština",kaa:"karakalpačtina",kab:"kabylština",kac:"kačijština",kaj:"jju",kam:"kambština",kaw:"kawi",kbd:"kabardinština",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdština",ken:"kenyang",kfo:"koro",kg:"konžština",kgp:"kaingang",kha:"khásí",kho:"chotánština",khq:"koyra chiini",khw:"chovarština",ki:"kikujština",kiu:"zazakština",kj:"kuaňamština",kk:"kazaština",kkj:"kako",kl:"grónština",kln:"kalendžin",km:"khmérština",kmb:"kimbundština",kn:"kannadština",ko:"korejština",koi:"komi-permjačtina",kok:"konkánština",kos:"kosrajština",kpe:"kpelle",kr:"kanuri",krc:"karačajevo-balkarština",kri:"krio",krj:"kinaraj-a",krl:"karelština",kru:"kuruchština",ks:"kašmírština",ksb:"šambala",ksf:"bafia",ksh:"kolínština",ku:"kurdština",kum:"kumyčtina",kut:"kutenajština",kv:"komijština",kw:"kornština",ky:"kyrgyzština",la:"latina",lad:"ladinština",lag:"langi",lah:"lahndština",lam:"lambština",lb:"lucemburština",lez:"lezginština",lfn:"lingua franca nova",lg:"gandština",li:"limburština",lij:"ligurština",liv:"livonština",lkt:"lakotština",lmo:"lombardština",ln:"lingalština",lo:"laoština",lol:"mongština",lou:"kreolština (Louisiana)",loz:"lozština",lrc:"lúrština (severní)",lt:"litevština",ltg:"latgalština",lu:"lubu-katanžština",lua:"luba-luluaština",lui:"luiseňo",lun:"lundština",luo:"luoština",lus:"mizoština",luy:"luhja",lv:"lotyština",lzh:"čínština (klasická)",lzz:"lazština",mad:"madurština",maf:"mafa",mag:"magahijština",mai:"maithiliština",mak:"makasarština",man:"mandingština",mas:"masajština",mde:"maba",mdf:"mokšanština",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricijská kreolština",mg:"malgaština",mga:"irština (středověká)",mgh:"makhuwa-meetto",mgo:"meta’",mh:"maršálština",mi:"maorština",mic:"micmac",min:"minangkabau",mk:"makedonština",ml:"malajálamština",mn:"mongolština",mnc:"mandžuština",mni:"manipurština",moh:"mohawkština",mos:"mosi",mr:"maráthština",mrj:"marijština (západní)",ms:"malajština",mt:"maltština",mua:"mundang",mus:"kríkština",mwl:"mirandština",mwr:"márvárština",mwv:"mentavajština",my:"barmština",mye:"myene",myv:"erzjanština",mzn:"mázandaránština",na:"naurština",nan:"čínština (dialekty Minnan)",nap:"neapolština",naq:"namaština",nb:"norština (bokmål)",nd:"ndebele (Zimbabwe)",nds:"dolnoněmčina","nds-NL":"dolnosaština",ne:"nepálština","new":"névárština",ng:"ndondština",nia:"nias",niu:"niueština",njo:"ao (jazyky Nágálandu)",nl:"nizozemština","nl-BE":"vlámština",nmg:"kwasio",nn:"norština (nynorsk)",nnh:"ngiemboon",no:"norština",nog:"nogajština",non:"norština historická",nov:"novial",nqo:"n’ko",nr:"ndebele (Jižní Afrika)",nso:"sotština (severní)",nus:"nuerština",nv:"navažština",nwc:"newarština (klasická)",ny:"ňandžština",nym:"ňamwežština",nyn:"ňankolština",nyo:"ňorština",nzi:"nzima",oc:"okcitánština",oj:"odžibvejština",om:"oromština",or:"urijština",os:"osetština",osa:"osage",ota:"turečtina (osmanská)",pa:"paňdžábština",pag:"pangasinanština",pal:"pahlavština",pam:"papangau",pap:"papiamento",pau:"palauština",pcd:"picardština",pcm:"nigerijský pidžin",pdc:"němčina (pensylvánská)",pdt:"němčina (plautdietsch)",peo:"staroperština",pfl:"falčtina",phn:"féničtina",pi:"pálí",pl:"polština",pms:"piemonština",pnt:"pontština",pon:"pohnpeiština",prg:"pruština",pro:"provensálština",ps:"paštština",pt:"portugalština","pt-BR":"portugalština (Brazílie)","pt-PT":"portugalština (Evropa)",qu:"kečuánština",quc:"kičé",qug:"kečuánština (chimborazo)",raj:"rádžastánština",rap:"rapanujština",rar:"rarotongánština",rgn:"romaňolština",rif:"rífština",rm:"rétorománština",rn:"kirundština",ro:"rumunština","ro-MD":"moldavština",rof:"rombo",rom:"romština",root:"kořen",rtm:"rotumanština",ru:"ruština",rue:"rusínština",rug:"rovianština",rup:"arumunština",rw:"kiňarwandština",rwk:"rwa",sa:"sanskrt",sad:"sandawština",sah:"jakutština",sam:"samarština",saq:"samburu",sas:"sasakština",sat:"santálština",saz:"saurášterština",sba:"ngambay",sbp:"sangoština",sc:"sardština",scn:"sicilština",sco:"skotština",sd:"sindhština",sdc:"sassarština",sdh:"kurdština (jižní)",se:"sámština (severní)",see:"seneca",seh:"sena",sei:"seriština",sel:"selkupština",ses:"koyraboro senni",sg:"sangština",sga:"irština (stará)",sgs:"žemaitština",sh:"srbochorvatština",shi:"tašelhit",shn:"šanština",shu:"arabština (čadská)",si:"sinhálština",sid:"sidamo",sk:"slovenština",sl:"slovinština",sli:"němčina (slezská)",sly:"selajarština",sm:"samojština",sma:"sámština (jižní)",smj:"sámština (lulejská)",smn:"sámština (inarijská)",sms:"sámština (skoltská)",sn:"šonština",snk:"sonikština",so:"somálština",sog:"sogdština",sq:"albánština",sr:"srbština",srn:"sranan tongo",srr:"sererština",ss:"siswatština",ssy:"saho",st:"sotština (jižní)",stq:"fríština (saterlandská)",su:"sundština",suk:"sukuma",sus:"susu",sux:"sumerština",sv:"švédština",sw:"svahilština","sw-CD":"svahilština (Kongo)",swb:"komorština",syc:"syrština (klasická)",syr:"syrština",szl:"slezština",ta:"tamilština",tcy:"tuluština",te:"telugština",tem:"temne",teo:"teso",ter:"tereno",tet:"tetumština",tg:"tádžičtina",th:"thajština",ti:"tigrinijština",tig:"tigrejština",tiv:"tivština",tk:"turkmenština",tkl:"tokelauština",tkr:"cachurština",tl:"tagalog",tlh:"klingonština",tli:"tlingit",tly:"talyština",tmh:"tamašek",tn:"setswanština",to:"tongánština",tog:"tonžština (nyasa)",tpi:"tok pisin",tr:"turečtina",tru:"turojština",trv:"taroko",ts:"tsonga",tsd:"tsakonština",tsi:"tsimšijské jazyky",tt:"tatarština",ttt:"tatština",tum:"tumbukština",tvl:"tuvalština",tw:"twi",twq:"tasawaq",ty:"tahitština",tyv:"tuvinština",tzm:"tamazight (střední Maroko)",udm:"udmurtština",ug:"ujgurština",uga:"ugaritština",uk:"ukrajinština",umb:"umbundu",ur:"urdština",uz:"uzbečtina",ve:"venda",vec:"benátština",vep:"vepština",vi:"vietnamština",vls:"vlámština (západní)",vmf:"němčina (mohansko-franské dialekty)",vo:"volapük",vot:"votština",vro:"võruština",vun:"vunjo",wa:"valonština",wae:"němčina (walser)",wal:"wolajtština",war:"warajština",was:"waština",wbp:"warlpiri",wo:"wolofština",wuu:"čínština (dialekty Wu)",xal:"kalmyčtina",xh:"xhoština",xmf:"mingrelština",xog:"sogština",yao:"jaoština",yap:"japština",yav:"jangbenština",ybb:"yemba",yi:"jidiš",yo:"jorubština",yrl:"nheengatu",yue:"kantonština",za:"čuangština",zap:"zapotéčtina",zbl:"bliss systém",zea:"zélandština",zen:"zenaga",zgh:"tamazight (standardní marocký)",zh:"čínština","zh-Hans":"standardní čínština (zjednodušená)","zh-Hant":"standardní čínština (tradiční)",zu:"zuluština",zun:"zunijština",zza:"zaza"},scriptNames:{Cyrl:"cyrilice",Latn:"latinka",Arab:"arabské",Guru:"gurmukhi",Tfng:"berberské",Vaii:"vai",Hans:"zjednodušené",Hant:"tradiční"}},cy:{rtl:false,languageNames:{aa:"Affareg",ab:"Abchaseg",ace:"Acehneg",ach:"Acoli",ada:"Adangmeg",ady:"Circaseg Gorllewinol",ae:"Afestaneg",aeb:"Arabeg Tunisia",af:"Affricâneg",afh:"Affrihili",agq:"Aghemeg",ain:"Ainŵeg",ak:"Acaneg",akk:"Acadeg",akz:"Alabamäeg",ale:"Alewteg",aln:"Ghegeg Albania",alt:"Altäeg Deheuol",am:"Amhareg",an:"Aragoneg",ang:"Hen Saesneg",anp:"Angika",ar:"Arabeg","ar-001":"Arabeg Modern Safonol",arc:"Aramaeg",arn:"Arawcaneg",aro:"Araonaeg",arp:"Arapaho",arq:"Arabeg Algeria",arw:"Arawaceg",ary:"Arabeg Moroco",arz:"Arabeg yr Aifft",as:"Asameg",asa:"Asw",ase:"Iaith Arwyddion America",ast:"Astwrianeg",av:"Afareg",awa:"Awadhi",ay:"Aymareg",az:"Aserbaijaneg","az-Arab":"Aserbaijaneg Deheuol",ba:"Bashcorteg",bal:"Balwtsi",ban:"Balïeg",bas:"Basâeg",bax:"Bamwmeg",be:"Belarwseg",bej:"Bejäeg",bem:"Bembeg",bez:"Bena",bfd:"Baffwteg",bfq:"Badaga",bg:"Bwlgareg",bgn:"Balochi Gorllewinol",bho:"Bhojpuri",bi:"Bislama",bin:"Bini",bkm:"Comeg",bla:"Siksika",bm:"Bambareg",bn:"Bengaleg",bo:"Tibeteg",br:"Llydaweg",brh:"Brahui",brx:"Bodo",bs:"Bosnieg",bss:"Acwseg",bua:"Bwriateg",bug:"Bwginaeg",bum:"Bwlw",byn:"Blin",ca:"Catalaneg",cad:"Cado",car:"Caribeg",cch:"Atsameg",ccp:"Tsiacma",ce:"Tsietsieneg",ceb:"Cebuano",cgg:"Tsiga",ch:"Tsiamorro",chk:"Chuukaeg",chm:"Marieg",cho:"Siocto",chr:"Tsierocî",chy:"Cheyenne",ckb:"Cwrdeg Sorani",co:"Corseg",cop:"Copteg",cr:"Cri",crh:"Tyrceg y Crimea",crs:"Ffrangeg Seselwa Creole",cs:"Tsieceg",cu:"Hen Slafoneg",cv:"Tshwfasheg",cy:"Cymraeg",da:"Daneg",dak:"Dacotaeg",dar:"Dargwa",dav:"Taita",de:"Almaeneg","de-AT":"Almaeneg Awstria","de-CH":"Almaeneg Safonol y Swistir",dgr:"Dogrib",din:"Dinca",dje:"Sarmaeg",doi:"Dogri",dsb:"Sorbeg Isaf",dua:"Diwaleg",dum:"Iseldireg Canol",dv:"Difehi",dyo:"Jola-Fonyi",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embw",ee:"Ewe",efi:"Efik",egy:"Hen Eiffteg",eka:"Ekajuk",el:"Groeg",elx:"Elameg",en:"Saesneg","en-AU":"Saesneg Awstralia","en-CA":"Saesneg Canada","en-GB":"Saesneg Prydain","en-US":"Saesneg America",enm:"Saesneg Canol",eo:"Esperanto",es:"Sbaeneg","es-419":"Sbaeneg America Ladin","es-ES":"Sbaeneg Ewrop","es-MX":"Sbaeneg Mecsico",et:"Estoneg",eu:"Basgeg",ewo:"Ewondo",ext:"Extremadureg",fa:"Perseg",fat:"Ffanti",ff:"Ffwla",fi:"Ffinneg",fil:"Ffilipineg",fit:"Ffinneg Tornedal",fj:"Ffijïeg",fo:"Ffaröeg",fon:"Fon",fr:"Ffrangeg","fr-CA":"Ffrangeg Canada","fr-CH":"Ffrangeg y Swistir",frc:"Ffrangeg Cajwn",frm:"Ffrangeg Canol",fro:"Hen Ffrangeg",frp:"Arpitaneg",frr:"Ffriseg Gogleddol",frs:"Ffriseg y Dwyrain",fur:"Ffriwleg",fy:"Ffriseg y Gorllewin",ga:"Gwyddeleg",gaa:"Ga",gag:"Gagauz",gay:"Gaio",gba:"Gbaia",gbz:"Dareg y Zoroastriaid",gd:"Gaeleg yr Alban",gez:"Geez",gil:"Gilberteg",gl:"Galisieg",gmh:"Almaeneg Uchel Canol",gn:"Guaraní",goh:"Hen Almaeneg Uchel",gor:"Gorontalo",got:"Gotheg",grc:"Hen Roeg",gsw:"Almaeneg y Swistir",gu:"Gwjarati",guz:"Gusii",gv:"Manaweg",gwi:"Gwichʼin",ha:"Hawsa",hai:"Haida",haw:"Hawäieg",he:"Hebraeg",hi:"Hindi",hil:"Hiligaynon",hit:"Hetheg",hmn:"Hmongeg",hr:"Croateg",hsb:"Sorbeg Uchaf",ht:"Creol Haiti",hu:"Hwngareg",hup:"Hupa",hy:"Armeneg",hz:"Herero",ia:"Interlingua",iba:"Ibaneg",ibb:"Ibibio",id:"Indoneseg",ie:"Interlingue",ig:"Igbo",ii:"Nwosw",ik:"Inwpiaceg",ilo:"Ilocaneg",inh:"Ingwsieg",io:"Ido",is:"Islandeg",it:"Eidaleg",iu:"Inwctitwt",ja:"Japaneeg",jbo:"Lojban",jgo:"Ngomba",jmc:"Matsiame",jpr:"Iddew-Bersieg",jrb:"Iddew-Arabeg",jv:"Jafanaeg",ka:"Georgeg",kaa:"Cara-Calpaceg",kab:"Cabileg",kac:"Kachin",kaj:"Jju",kam:"Camba",kbd:"Cabardieg",kcg:"Tyapeg",kde:"Macondeg",kea:"Caboferdianeg",kfo:"Koro",kg:"Congo",kha:"Càseg",khq:"Koyra Chiini",khw:"Chowareg",ki:"Kikuyu",kj:"Kuanyama",kk:"Casacheg",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Chmereg",kmb:"Kimbundu",kn:"Kannada",ko:"Coreeg",koi:"Komi-Permyak",kok:"Concani",kpe:"Kpelle",kr:"Canwri",krc:"Karachay-Balkar",krl:"Careleg",kru:"Kurukh",ks:"Cashmireg",ksb:"Shambala",ksf:"Baffia",ksh:"Cwleneg",ku:"Cwrdeg",kum:"Cwmiceg",kv:"Comi",kw:"Cernyweg",ky:"Cirgiseg",la:"Lladin",lad:"Iddew-Sbaeneg",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Lwcsembwrgeg",lez:"Lezgheg",lg:"Ganda",li:"Limbwrgeg",lkt:"Lakota",lmo:"Lombardeg",ln:"Lingala",lo:"Laoeg",lol:"Mongo",loz:"Lozi",lrc:"Luri Gogleddol",lt:"Lithwaneg",ltg:"Latgaleg",lu:"Luba-Katanga",lua:"Luba-Lulua",lun:"Lwnda",luo:"Lŵo",lus:"Lwshaieg",luy:"Lwyia",lv:"Latfieg",mad:"Madwreg",mag:"Magahi",mai:"Maithili",mak:"Macasareg",man:"Mandingo",mas:"Masai",mdf:"Mocsia",mdr:"Mandareg",men:"Mendeg",mer:"Mêrw",mfe:"Morisyen",mg:"Malagaseg",mga:"Gwyddeleg Canol",mgh:"Makhuwa-Meetto",mgo:"Meta",mh:"Marsialeg",mi:"Maori",mic:"Micmaceg",min:"Minangkabau",mk:"Macedoneg",ml:"Malayalam",mn:"Mongoleg",mnc:"Manshw",mni:"Manipwri",moh:"Mohoceg",mos:"Mosi",mr:"Marathi",mrj:"Mari Gorllewinol",ms:"Maleieg",mt:"Malteg",mua:"Mundang",mus:"Creek",mwl:"Mirandeg",mwr:"Marwari",my:"Byrmaneg",myv:"Erzya",mzn:"Masanderani",na:"Nawrŵeg",nap:"Naplieg",naq:"Nama",nb:"Norwyeg Bokmål",nd:"Ndebele Gogleddol",nds:"Almaeneg Isel","nds-NL":"Sacsoneg Isel",ne:"Nepaleg","new":"Newaeg",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Iseldireg","nl-BE":"Fflemeg",nmg:"Kwasio",nn:"Norwyeg Nynorsk",nnh:"Ngiemboon",no:"Norwyeg",nog:"Nogai",non:"Hen Norseg",nqo:"N’Ko",nr:"Ndebele Deheuol",nso:"Sotho Gogleddol",nus:"Nŵereg",nv:"Nafaho",nwc:"Hen Newari",ny:"Nianja",nym:"Niamwezi",nyn:"Niancole",nyo:"Nioro",nzi:"Nzimeg",oc:"Ocsitaneg",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Oseteg",osa:"Osageg",ota:"Tyrceg Otoman",pa:"Pwnjabeg",pag:"Pangasineg",pal:"Pahlafi",pam:"Pampanga",pap:"Papiamento",pau:"Palawan",pcd:"Picardeg",pcm:"Pidgin Nigeria",pdc:"Almaeneg Pensylfania",peo:"Hen Bersieg",pfl:"Almaeneg Palatin",phn:"Phoeniceg",pi:"Pali",pl:"Pwyleg",pms:"Piedmonteg",pnt:"Ponteg",pon:"Pohnpeianeg",prg:"Prwseg",pro:"Hen Brofensaleg",ps:"Pashto",pt:"Portiwgeeg","pt-BR":"Portiwgeeg Brasil","pt-PT":"Portiwgeeg Ewrop",qu:"Quechua",quc:"K’iche’",raj:"Rajasthaneg",rap:"Rapanŵi",rar:"Raratongeg",rm:"Románsh",rn:"Rwndi",ro:"Rwmaneg","ro-MD":"Moldofeg",rof:"Rombo",rom:"Romani",root:"Y Gwraidd",rtm:"Rotumaneg",ru:"Rwseg",rup:"Aromaneg",rw:"Ciniarŵandeg",rwk:"Rwa",sa:"Sansgrit",sad:"Sandäweg",sah:"Sakha",sam:"Aramaeg Samaria",saq:"Sambŵrw",sas:"Sasaceg",sat:"Santali",sba:"Ngambeieg",sbp:"Sangw",sc:"Sardeg",scn:"Sisileg",sco:"Sgoteg",sd:"Sindhi",sdc:"Sasareseg Sardinia",sdh:"Cwrdeg Deheuol",se:"Sami Gogleddol",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selcypeg",ses:"Koyraboro Senni",sg:"Sango",sga:"Hen Wyddeleg",sgs:"Samogiteg",sh:"Serbo-Croateg",shi:"Tachelhit",shn:"Shan",shu:"Arabeg Chad",si:"Sinhaleg",sid:"Sidamo",sk:"Slofaceg",sl:"Slofeneg",sli:"Is-silesieg",sm:"Samöeg",sma:"Sami Deheuol",smj:"Sami Lwle",smn:"Inari Sami",sms:"Sami Scolt",sn:"Shona",snk:"Soninceg",so:"Somaleg",sog:"Sogdeg",sq:"Albaneg",sr:"Serbeg",srn:"Sranan Tongo",srr:"Serereg",ss:"Swati",ssy:"Saho",st:"Sesotheg Deheuol",stq:"Ffriseg Saterland",su:"Swndaneg",suk:"Swcwma",sus:"Swsŵeg",sux:"Swmereg",sv:"Swedeg",sw:"Swahili","sw-CD":"Swahili’r Congo",swb:"Comoreg",syc:"Hen Syrieg",syr:"Syrieg",szl:"Silesieg",ta:"Tamileg",tcy:"Tulu",te:"Telugu",tem:"Timneg",teo:"Teso",ter:"Terena",tet:"Tetumeg",tg:"Tajiceg",th:"Thai",ti:"Tigrinya",tig:"Tigreg",tiv:"Tifeg",tk:"Tyrcmeneg",tkl:"Tocelaweg",tkr:"Tsakhureg",tl:"Tagalog",tlh:"Klingon",tli:"Llingit",tly:"Talysheg",tmh:"Tamasheceg",tn:"Tswana",to:"Tongeg",tpi:"Tok Pisin",tr:"Tyrceg",trv:"Taroko",ts:"Tsongaeg",tsd:"Tsaconeg",tt:"Tatareg",tum:"Twmbwca",tvl:"Twfalweg",tw:"Twi",twq:"Tasawaq",ty:"Tahitïeg",tyv:"Twfwnieg",tzm:"Tamazight Canol yr Atlas",udm:"Fotiaceg",ug:"Uighur",uga:"Wgariteg",uk:"Wcreineg",umb:"Umbundu",ur:"Wrdw",uz:"Wsbeceg",vai:"Faieg",ve:"Fendeg",vec:"Feniseg",vep:"Feps",vi:"Fietnameg",vls:"Fflemeg Gorllewinol",vo:"Folapük",vot:"Foteg",vun:"Funjo",wa:"Walwneg",wae:"Walsereg",wal:"Walamo",war:"Winarayeg",was:"Washo",wbp:"Warlpiri",wo:"Woloff",xal:"Calmyceg",xh:"Xhosa",xog:"Soga",yav:"Iangben",ybb:"Iembaeg",yi:"Iddew-Almaeneg",yo:"Iorwba",yue:"Cantoneeg",zap:"Zapoteceg",zbl:"Blisssymbols",zea:"Zêlandeg",zgh:"Tamaseit Safonol",zh:"Tsieinëeg","zh-Hans":"Tsieinëeg Mandarin Symledig","zh-Hant":"Tsieinëeg Mandarin Traddodiadol",zu:"Swlw",zun:"Swni",zza:"Sasäeg"},scriptNames:{Cyrl:"Cyrilig",Latn:"Lladin",Arab:"Arabaidd",Guru:"Gwrmwci",Hans:"Symledig",Hant:"Traddodiadol"}},da:{rtl:false,languageNames:{aa:"afar",ab:"abkhasisk",ace:"achinesisk",ach:"acoli",ada:"adangme",ady:"adyghe",ae:"avestan",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadisk",ale:"aleutisk",alt:"sydaltaisk",am:"amharisk",an:"aragonesisk",ang:"oldengelsk",anp:"angika",ar:"arabisk","ar-001":"moderne standardarabisk",arc:"aramæisk",arn:"mapudungun",arp:"arapaho",ars:"Najd-arabisk",arw:"arawak",as:"assamesisk",asa:"asu",ast:"asturisk",av:"avarisk",awa:"awadhi",ay:"aymara",az:"aserbajdsjansk",ba:"bashkir",bal:"baluchi",ban:"balinesisk",bas:"basaa",bax:"bamun",bbj:"ghomala",be:"hviderussisk",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bulgarsk",bgn:"vestbaluchi",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetansk",br:"bretonsk",bra:"braj",brx:"bodo",bs:"bosnisk",bss:"bakossi",bua:"buriatisk",bug:"buginesisk",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalansk",cad:"caddo",car:"caribisk",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"tjetjensk",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukese",chm:"mari",chn:"chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"korsikansk",cop:"koptisk",cr:"cree",crh:"krim-tyrkisk",crs:"seselwa (kreol-fransk)",cs:"tjekkisk",csb:"kasjubisk",cu:"kirkeslavisk",cv:"chuvash",cy:"walisisk",da:"dansk",dak:"dakota",dar:"dargwa",dav:"taita",de:"tysk","de-AT":"østrigsk tysk","de-CH":"schweizerhøjtysk",del:"delaware",den:"athapaskisk",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"nedersorbisk",dua:"duala",dum:"middelhollandsk",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"kiembu",ee:"ewe",efi:"efik",egy:"oldegyptisk",eka:"ekajuk",el:"græsk",elx:"elamitisk",en:"engelsk","en-AU":"australsk engelsk","en-CA":"canadisk engelsk","en-GB":"britisk engelsk","en-US":"amerikansk engelsk",enm:"middelengelsk",eo:"esperanto",es:"spansk","es-419":"latinamerikansk spansk","es-ES":"europæisk spansk","es-MX":"mexicansk spansk",et:"estisk",eu:"baskisk",ewo:"ewondo",fa:"persisk",fan:"fang",fat:"fanti",ff:"fulah",fi:"finsk",fil:"filippinsk",fj:"fijiansk",fo:"færøsk",fr:"fransk","fr-CA":"canadisk fransk","fr-CH":"schweizisk fransk",frc:"cajunfransk",frm:"middelfransk",fro:"oldfransk",frr:"nordfrisisk",frs:"østfrisisk",fur:"friulian",fy:"vestfrisisk",ga:"irsk",gaa:"ga",gag:"gagauzisk",gan:"gan-kinesisk",gay:"gayo",gba:"gbaya",gd:"skotsk gælisk",gez:"geez",gil:"gilbertesisk",gl:"galicisk",gmh:"middelhøjtysk",gn:"guarani",goh:"oldhøjtysk",gon:"gondi",gor:"gorontalo",got:"gotisk",grb:"grebo",grc:"oldgræsk",gsw:"schweizertysk",gu:"gujarati",guz:"gusii",gv:"manx",gwi:"gwichin",ha:"hausa",hai:"haida",hak:"hakka-kinesisk",haw:"hawaiiansk",he:"hebraisk",hi:"hindi",hil:"hiligaynon",hit:"hittitisk",hmn:"hmong",ho:"hirimotu",hr:"kroatisk",hsb:"øvresorbisk",hsn:"xiang-kinesisk",ht:"haitisk",hu:"ungarsk",hup:"hupa",hy:"armensk",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesisk",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiaq",ilo:"iloko",inh:"ingush",io:"ido",is:"islandsk",it:"italiensk",iu:"inuktitut",ja:"japansk",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"jødisk-persisk",jrb:"jødisk-arabisk",jv:"javanesisk",ka:"georgisk",kaa:"karakalpakisk",kab:"kabylisk",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardian",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdisk",kfo:"koro",kg:"kongo",kha:"khasi",kho:"khotanesisk",khq:"koyra-chiini",ki:"kikuyu",kj:"kuanyama",kk:"kasakhisk",kkj:"kako",kl:"grønlandsk",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"koreansk",koi:"komi-permjakisk",kok:"konkani",kos:"kosraean",kpe:"kpelle",kr:"kanuri",krc:"karatjai-balkar",krl:"karelsk",kru:"kurukh",ks:"kashmiri",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdisk",kum:"kymyk",kut:"kutenaj",kv:"komi",kw:"cornisk",ky:"kirgisisk",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxembourgsk",lez:"lezghian",lg:"ganda",li:"limburgsk",lkt:"lakota",ln:"lingala",lo:"lao",lol:"mongo",lou:"Louisiana-kreolsk",loz:"lozi",lrc:"nordluri",lt:"litauisk",lu:"luba-Katanga",lua:"luba-Lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyana",lv:"lettisk",mad:"madurese",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malagassisk",mga:"middelirsk",mgh:"makhuwa-meetto",mgo:"meta",mh:"marshallese",mi:"maori",mic:"micmac",min:"minangkabau",mk:"makedonsk",ml:"malayalam",mn:"mongolsk",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathisk",ms:"malajisk",mt:"maltesisk",mua:"mundang",mus:"creek",mwl:"mirandesisk",mwr:"marwari",my:"burmesisk",mye:"myene",myv:"erzya",mzn:"mazenisk",na:"nauru",nan:"min-kinesisk",nap:"napolitansk",naq:"nama",nb:"norsk bokmål",nd:"nordndebele",nds:"nedertysk","nds-NL":"nedertysk (Holland)",ne:"nepalesisk","new":"newari",ng:"ndonga",nia:"nias",niu:"niueansk",nl:"hollandsk","nl-BE":"flamsk",nmg:"kwasio",nn:"nynorsk",nnh:"ngiemboon",no:"norsk",nog:"nogai",non:"oldislandsk",nqo:"n-ko",nr:"sydndebele",nso:"nordsotho",nus:"nuer",nv:"navajo",nwc:"klassisk newarisk",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro-sprog",nzi:"nzima",oc:"occitansk",oj:"ojibwa",om:"oromo",or:"oriya",os:"ossetisk",osa:"osage",ota:"osmannisk tyrkisk",pa:"punjabisk",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauansk",pcm:"nigeriansk pidgin",peo:"oldpersisk",phn:"fønikisk",pi:"pali",pl:"polsk",pon:"ponape",prg:"preussisk",pro:"oldprovencalsk",ps:"pashto",pt:"portugisisk","pt-BR":"brasiliansk portugisisk","pt-PT":"europæisk portugisisk",qu:"quechua",quc:"quiché",raj:"rajasthani",rap:"rapanui",rar:"rarotonga",rm:"rætoromansk",rn:"rundi",ro:"rumænsk","ro-MD":"moldovisk",rof:"rombo",rom:"romani",root:"rod",ru:"russisk",rup:"arumænsk",rw:"kinyarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"yakut",sam:"samaritansk aramæisk",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardinsk",scn:"siciliansk",sco:"skotsk",sd:"sindhi",sdh:"sydkurdisk",se:"nordsamisk",see:"seneca",seh:"sena",sel:"selkupisk",ses:"koyraboro senni",sg:"sango",sga:"oldirsk",sh:"serbokroatisk",shi:"tachelhit",shn:"shan",shu:"tchadisk arabisk",si:"singalesisk",sid:"sidamo",sk:"slovakisk",sl:"slovensk",sm:"samoansk",sma:"sydsamisk",smj:"lulesamisk",smn:"enaresamisk",sms:"skoltesamisk",sn:"shona",snk:"soninke",so:"somali",sog:"sogdiansk",sq:"albansk",sr:"serbisk",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sydsotho",su:"sundanesisk",suk:"sukuma",sus:"susu",sux:"sumerisk",sv:"svensk",sw:"swahili","sw-CD":"congolesisk swahili",swb:"shimaore",syc:"klassisk syrisk",syr:"syrisk",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadsjikisk",th:"thai",ti:"tigrinya",tig:"tigre",tiv:"tivi",tk:"turkmensk",tkl:"tokelau",tl:"tagalog",tlh:"klingon",tli:"tlingit",tmh:"tamashek",tn:"tswana",to:"tongansk",tog:"nyasa tongansk",tpi:"tok pisin",tr:"tyrkisk",trv:"taroko",ts:"tsonga",tsi:"tsimshisk",tt:"tatarisk",tum:"tumbuka",tvl:"tuvaluansk",tw:"twi",twq:"tasawaq",ty:"tahitiansk",tyv:"tuvinian",tzm:"centralmarokkansk tamazight",udm:"udmurt",ug:"uygurisk",uga:"ugaristisk",uk:"ukrainsk",umb:"umbundu",ur:"urdu",uz:"usbekisk",ve:"venda",vi:"vietnamesisk",vo:"volapyk",vot:"votisk",vun:"vunjo",wa:"vallonsk",wae:"walsertysk",wal:"walamo",war:"waray",was:"washo",wbp:"walbiri",wo:"wolof",wuu:"wu-kinesisk",xal:"kalmyk",xh:"isiXhosa",xog:"soga",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"jiddisch",yo:"yoruba",yue:"kantonesisk",za:"zhuang",zap:"zapotec",zbl:"blissymboler",zen:"zenaga",zgh:"tamazight",zh:"kinesisk","zh-Hans":"kinesisk (forenklet)","zh-Hant":"kinesisk (traditionelt)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"kyrillisk",Latn:"latinsk",Arab:"arabisk",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"forenklet",Hant:"traditionelt"}},de:{rtl:false,languageNames:{aa:"Afar",ab:"Abchasisch",ace:"Aceh",ach:"Acholi",ada:"Adangme",ady:"Adygeisch",ae:"Avestisch",aeb:"Tunesisches Arabisch",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadisch",akz:"Alabama",ale:"Aleutisch",aln:"Gegisch",alt:"Süd-Altaisch",am:"Amharisch",an:"Aragonesisch",ang:"Altenglisch",anp:"Angika",ar:"Arabisch","ar-001":"Modernes Hocharabisch",arc:"Aramäisch",arn:"Mapudungun",aro:"Araona",arp:"Arapaho",arq:"Algerisches Arabisch",ars:"Arabisch (Nadschd)",arw:"Arawak",ary:"Marokkanisches Arabisch",arz:"Ägyptisches Arabisch",as:"Assamesisch",asa:"Asu",ase:"Amerikanische Gebärdensprache",ast:"Asturianisch",av:"Awarisch",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Aserbaidschanisch",ba:"Baschkirisch",bal:"Belutschisch",ban:"Balinesisch",bar:"Bairisch",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Weißrussisch",bej:"Bedauye",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarisch",bgn:"Westliches Belutschi",bho:"Bhodschpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjaresisch",bkm:"Kom",bla:"Blackfoot",bm:"Bambara",bn:"Bengalisch",bo:"Tibetisch",bpy:"Bishnupriya",bqi:"Bachtiarisch",br:"Bretonisch",bra:"Braj-Bhakha",brh:"Brahui",brx:"Bodo",bs:"Bosnisch",bss:"Akoose",bua:"Burjatisch",bug:"Buginesisch",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Katalanisch",cad:"Caddo",car:"Karibisch",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Tschetschenisch",ceb:"Cebuano",cgg:"Rukiga",ch:"Chamorro",chb:"Chibcha",chg:"Tschagataisch",chk:"Chuukesisch",chm:"Mari",chn:"Chinook",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",ckb:"Zentralkurdisch",co:"Korsisch",cop:"Koptisch",cps:"Capiznon",cr:"Cree",crh:"Krimtatarisch",crs:"Seychellenkreol",cs:"Tschechisch",csb:"Kaschubisch",cu:"Kirchenslawisch",cv:"Tschuwaschisch",cy:"Walisisch",da:"Dänisch",dak:"Dakota",dar:"Darginisch",dav:"Taita",de:"Deutsch","de-AT":"Österreichisches Deutsch","de-CH":"Schweizer Hochdeutsch",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Niedersorbisch",dtp:"Zentral-Dusun",dua:"Duala",dum:"Mittelniederländisch",dv:"Dhivehi",dyo:"Diola",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilianisch",egy:"Ägyptisch",eka:"Ekajuk",el:"Griechisch",elx:"Elamisch",en:"Englisch","en-AU":"Englisch (Australien)","en-CA":"Englisch (Kanada)","en-GB":"Englisch (Vereinigtes Königreich)","en-US":"Englisch (Vereinigte Staaten)",enm:"Mittelenglisch",eo:"Esperanto",es:"Spanisch","es-419":"Spanisch (Lateinamerika)","es-ES":"Spanisch (Spanien)","es-MX":"Spanisch (Mexiko)",esu:"Zentral-Alaska-Yupik",et:"Estnisch",eu:"Baskisch",ewo:"Ewondo",ext:"Extremadurisch",fa:"Persisch",fan:"Pangwe",fat:"Fanti",ff:"Ful",fi:"Finnisch",fil:"Filipino",fit:"Meänkieli",fj:"Fidschi",fo:"Färöisch",fon:"Fon",fr:"Französisch","fr-CA":"Französisch (Kanada)","fr-CH":"Französisch (Schweiz)",frc:"Cajun",frm:"Mittelfranzösisch",fro:"Altfranzösisch",frp:"Frankoprovenzalisch",frr:"Nordfriesisch",frs:"Ostfriesisch",fur:"Friaulisch",fy:"Westfriesisch",ga:"Irisch",gaa:"Ga",gag:"Gagausisch",gan:"Gan",gay:"Gayo",gba:"Gbaya",gbz:"Gabri",gd:"Schottisches Gälisch",gez:"Geez",gil:"Kiribatisch",gl:"Galicisch",glk:"Gilaki",gmh:"Mittelhochdeutsch",gn:"Guaraní",goh:"Althochdeutsch",gom:"Goa-Konkani",gon:"Gondi",gor:"Mongondou",got:"Gotisch",grb:"Grebo",grc:"Altgriechisch",gsw:"Schweizerdeutsch",gu:"Gujarati",guc:"Wayúu",gur:"Farefare",guz:"Gusii",gv:"Manx",gwi:"Kutchin",ha:"Haussa",hai:"Haida",hak:"Hakka",haw:"Hawaiisch",he:"Hebräisch",hi:"Hindi",hif:"Fidschi-Hindi",hil:"Hiligaynon",hit:"Hethitisch",hmn:"Miao",ho:"Hiri-Motu",hr:"Kroatisch",hsb:"Obersorbisch",hsn:"Xiang",ht:"Haiti-Kreolisch",hu:"Ungarisch",hup:"Hupa",hy:"Armenisch",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesisch",ie:"Interlingue",ig:"Igbo",ii:"Yi",ik:"Inupiak",ilo:"Ilokano",inh:"Inguschisch",io:"Ido",is:"Isländisch",it:"Italienisch",iu:"Inuktitut",izh:"Ischorisch",ja:"Japanisch",jam:"Jamaikanisch-Kreolisch",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Jüdisch-Persisch",jrb:"Jüdisch-Arabisch",jut:"Jütisch",jv:"Javanisch",ka:"Georgisch",kaa:"Karakalpakisch",kab:"Kabylisch",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardinisch",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongolesisch",kgp:"Kaingang",kha:"Khasi",kho:"Sakisch",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kwanyama",kk:"Kasachisch",kkj:"Kako",kl:"Grönländisch",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Koreanisch",koi:"Komi-Permjakisch",kok:"Konkani",kos:"Kosraeanisch",kpe:"Kpelle",kr:"Kanuri",krc:"Karatschaiisch-Balkarisch",kri:"Krio",krj:"Kinaray-a",krl:"Karelisch",kru:"Oraon",ks:"Kaschmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Kölsch",ku:"Kurdisch",kum:"Kumükisch",kut:"Kutenai",kv:"Komi",kw:"Kornisch",ky:"Kirgisisch",la:"Latein",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxemburgisch",lez:"Lesgisch",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgisch",lij:"Ligurisch",liv:"Livisch",lkt:"Lakota",lmo:"Lombardisch",ln:"Lingala",lo:"Laotisch",lol:"Mongo",lou:"Kreol (Louisiana)",loz:"Lozi",lrc:"Nördliches Luri",lt:"Litauisch",ltg:"Lettgallisch",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Lushai",luy:"Luhya",lv:"Lettisch",lzh:"Klassisches Chinesisch",lzz:"Lasisch",mad:"Maduresisch",maf:"Mafa",mag:"Khotta",mai:"Maithili",mak:"Makassarisch",man:"Malinke",mas:"Massai",mde:"Maba",mdf:"Mokschanisch",mdr:"Mandaresisch",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Madagassisch",mga:"Mittelirisch",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marschallesisch",mi:"Maori",mic:"Micmac",min:"Minangkabau",mk:"Mazedonisch",ml:"Malayalam",mn:"Mongolisch",mnc:"Mandschurisch",mni:"Meithei",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Bergmari",ms:"Malaiisch",mt:"Maltesisch",mua:"Mundang",mus:"Muskogee",mwl:"Mirandesisch",mwr:"Marwari",mwv:"Mentawai",my:"Birmanisch",mye:"Myene",myv:"Ersja-Mordwinisch",mzn:"Masanderanisch",na:"Nauruisch",nan:"Min Nan",nap:"Neapolitanisch",naq:"Nama",nb:"Norwegisch Bokmål",nd:"Nord-Ndebele",nds:"Niederdeutsch","nds-NL":"Niedersächsisch",ne:"Nepalesisch","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niue",njo:"Ao-Naga",nl:"Niederländisch","nl-BE":"Flämisch",nmg:"Kwasio",nn:"Norwegisch Nynorsk",nnh:"Ngiemboon",no:"Norwegisch",nog:"Nogai",non:"Altnordisch",nov:"Novial",nqo:"N’Ko",nr:"Süd-Ndebele",nso:"Nord-Sotho",nus:"Nuer",nv:"Navajo",nwc:"Alt-Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Okzitanisch",oj:"Ojibwa",om:"Oromo",or:"Oriya",os:"Ossetisch",osa:"Osage",ota:"Osmanisch",pa:"Punjabi",pag:"Pangasinan",pal:"Mittelpersisch",pam:"Pampanggan",pap:"Papiamento",pau:"Palau",pcd:"Picardisch",pcm:"Nigerianisches Pidgin",pdc:"Pennsylvaniadeutsch",pdt:"Plautdietsch",peo:"Altpersisch",pfl:"Pfälzisch",phn:"Phönizisch",pi:"Pali",pl:"Polnisch",pms:"Piemontesisch",pnt:"Pontisch",pon:"Ponapeanisch",prg:"Altpreußisch",pro:"Altprovenzalisch",ps:"Paschtu",pt:"Portugiesisch","pt-BR":"Portugiesisch (Brasilien)","pt-PT":"Portugiesisch (Portugal)",qu:"Quechua",quc:"K’iche’",qug:"Chimborazo Hochland-Quechua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotonganisch",rgn:"Romagnol",rif:"Tarifit",rm:"Rätoromanisch",rn:"Rundi",ro:"Rumänisch","ro-MD":"Moldauisch",rof:"Rombo",rom:"Romani",root:"Root",rtm:"Rotumanisch",ru:"Russisch",rue:"Russinisch",rug:"Roviana",rup:"Aromunisch",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Jakutisch",sam:"Samaritanisch",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardisch",scn:"Sizilianisch",sco:"Schottisch",sd:"Sindhi",sdc:"Sassarisch",sdh:"Südkurdisch",se:"Nordsamisch",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkupisch",ses:"Koyra Senni",sg:"Sango",sga:"Altirisch",sgs:"Samogitisch",sh:"Serbo-Kroatisch",shi:"Taschelhit",shn:"Schan",shu:"Tschadisch-Arabisch",si:"Singhalesisch",sid:"Sidamo",sk:"Slowakisch",sl:"Slowenisch",sli:"Schlesisch (Niederschlesisch)",sly:"Selayar",sm:"Samoanisch",sma:"Südsamisch",smj:"Lule-Samisch",smn:"Inari-Samisch",sms:"Skolt-Samisch",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdisch",sq:"Albanisch",sr:"Serbisch",srn:"Srananisch",srr:"Serer",ss:"Swazi",ssy:"Saho",st:"Süd-Sotho",stq:"Saterfriesisch",su:"Sundanesisch",suk:"Sukuma",sus:"Susu",sux:"Sumerisch",sv:"Schwedisch",sw:"Suaheli","sw-CD":"Kongo-Swahili",swb:"Komorisch",syc:"Altsyrisch",syr:"Syrisch",szl:"Schlesisch (Wasserpolnisch)",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Temne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tadschikisch",th:"Thailändisch",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmenisch",tkl:"Tokelauanisch",tkr:"Tsachurisch",tl:"Tagalog",tlh:"Klingonisch",tli:"Tlingit",tly:"Talisch",tmh:"Tamaseq",tn:"Tswana",to:"Tongaisch",tog:"Nyasa Tonga",tpi:"Neumelanesisch",tr:"Türkisch",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonisch",tsi:"Tsimshian",tt:"Tatarisch",ttt:"Tatisch",tum:"Tumbuka",tvl:"Tuvaluisch",tw:"Twi",twq:"Tasawaq",ty:"Tahitisch",tyv:"Tuwinisch",tzm:"Zentralatlas-Tamazight",udm:"Udmurtisch",ug:"Uigurisch",uga:"Ugaritisch",uk:"Ukrainisch",umb:"Umbundu",ur:"Urdu",uz:"Usbekisch",vai:"Vai",ve:"Venda",vec:"Venetisch",vep:"Wepsisch",vi:"Vietnamesisch",vls:"Westflämisch",vmf:"Mainfränkisch",vo:"Volapük",vot:"Wotisch",vro:"Võro",vun:"Vunjo",wa:"Wallonisch",wae:"Walliserdeutsch",wal:"Walamo",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu",xal:"Kalmückisch",xh:"Xhosa",xmf:"Mingrelisch",xog:"Soga",yao:"Yao",yap:"Yapesisch",yav:"Yangben",ybb:"Yemba",yi:"Jiddisch",yo:"Yoruba",yrl:"Nheengatu",yue:"Kantonesisch",za:"Zhuang",zap:"Zapotekisch",zbl:"Bliss-Symbole",zea:"Seeländisch",zen:"Zenaga",zgh:"Tamazight",zh:"Chinesisch","zh-Hans":"Mandarin (Vereinfacht)","zh-Hant":"Chinesisch (Traditionell)",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Kyrillisch",Latn:"Lateinisch",Arab:"Arabisch",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Vereinfacht",Hant:"Traditionell"}},dv:{rtl:true,languageNames:{},scriptNames:{}},el:{rtl:false,languageNames:{aa:"Αφάρ",ab:"Αμπχαζικά",ace:"Ατσινιζικά",ach:"Ακολί",ada:"Αντάνγκμε",ady:"Αντιγκέα",ae:"Αβεστάν",af:"Αφρικάανς",afh:"Αφριχίλι",agq:"Αγκέμ",ain:"Αϊνού",ak:"Ακάν",akk:"Ακάντιαν",ale:"Αλεούτ",alt:"Νότια Αλτάι",am:"Αμχαρικά",an:"Αραγονικά",ang:"Παλαιά Αγγλικά",anp:"Ανγκικά",ar:"Αραβικά","ar-001":"Σύγχρονα Τυπικά Αραβικά",arc:"Αραμαϊκά",arn:"Αραουκανικά",arp:"Αραπάχο",ars:"Αραβικά Νάτζντι",arw:"Αραγουάκ",as:"Ασαμικά",asa:"Άσου",ast:"Αστουριανά",av:"Αβαρικά",awa:"Αγουαντί",ay:"Αϊμάρα",az:"Αζερμπαϊτζανικά",ba:"Μπασκίρ",bal:"Μπαλούτσι",ban:"Μπαλινίζ",bas:"Μπάσα",bax:"Μπαμούν",bbj:"Γκομάλα",be:"Λευκορωσικά",bej:"Μπέζα",bem:"Μπέμπα",bez:"Μπένα",bfd:"Μπαφούτ",bg:"Βουλγαρικά",bgn:"Δυτικά Μπαλοχικά",bho:"Μπότζπουρι",bi:"Μπισλάμα",bik:"Μπικόλ",bin:"Μπίνι",bkm:"Κομ",bla:"Σικσίκα",bm:"Μπαμπάρα",bn:"Βεγγαλικά",bo:"Θιβετιανά",br:"Βρετονικά",bra:"Μπρατζ",brx:"Μπόντο",bs:"Βοσνιακά",bss:"Ακόσι",bua:"Μπουριάτ",bug:"Μπουγκίζ",bum:"Μπουλού",byn:"Μπλιν",byv:"Μεντούμπα",ca:"Καταλανικά",cad:"Κάντο",car:"Καρίμπ",cay:"Καγιούγκα",cch:"Ατσάμ",ccp:"Τσάκμα",ce:"Τσετσενικά",ceb:"Σεμπουάνο",cgg:"Τσίγκα",ch:"Τσαμόρο",chb:"Τσίμπτσα",chg:"Τσαγκατάι",chk:"Τσουκίζι",chm:"Μάρι",chn:"Ιδιωματικά Σινούκ",cho:"Τσόκτο",chp:"Τσίπιουαν",chr:"Τσερόκι",chy:"Τσεγιέν",ckb:"Κουρδικά Σοράνι",co:"Κορσικανικά",cop:"Κοπτικά",cr:"Κρι",crh:"Τουρκικά Κριμαίας",crs:"Κρεολικά Γαλλικά Σεϋχελλών",cs:"Τσεχικά",csb:"Κασούμπιαν",cu:"Εκκλησιαστικά Σλαβικά",cv:"Τσουβασικά",cy:"Ουαλικά",da:"Δανικά",dak:"Ντακότα",dar:"Ντάργκουα",dav:"Τάιτα",de:"Γερμανικά","de-AT":"Γερμανικά Αυστρίας","de-CH":"Υψηλά Γερμανικά Ελβετίας",del:"Ντέλαγουερ",den:"Σλαβικά",dgr:"Ντόγκριμπ",din:"Ντίνκα",dje:"Ζάρμα",doi:"Ντόγκρι",dsb:"Κάτω Σορβικά",dua:"Ντουάλα",dum:"Μέσα Ολλανδικά",dv:"Ντιβέχι",dyo:"Τζόλα-Φόνι",dyu:"Ντογιούλα",dz:"Ντζόνγκχα",dzg:"Νταζάγκα",ebu:"Έμπου",ee:"Έουε",efi:"Εφίκ",egy:"Αρχαία Αιγυπτιακά",eka:"Εκατζούκ",el:"Ελληνικά",elx:"Ελαμάιτ",en:"Αγγλικά","en-AU":"Αγγλικά Αυστραλίας","en-CA":"Αγγλικά Καναδά","en-GB":"Αγγλικά Βρετανίας","en-US":"Αγγλικά Αμερικής",enm:"Μέσα Αγγλικά",eo:"Εσπεράντο",es:"Ισπανικά","es-419":"Ισπανικά Λατινικής Αμερικής","es-ES":"Ισπανικά Ευρώπης","es-MX":"Ισπανικά Μεξικού",et:"Εσθονικά",eu:"Βασκικά",ewo:"Εγουόντο",fa:"Περσικά",fan:"Φανγκ",fat:"Φάντι",ff:"Φουλά",fi:"Φινλανδικά",fil:"Φιλιππινικά",fj:"Φίτζι",fo:"Φεροϊκά",fon:"Φον",fr:"Γαλλικά","fr-CA":"Γαλλικά Καναδά","fr-CH":"Γαλλικά Ελβετίας",frc:"Γαλλικά (Λουιζιάνα)",frm:"Μέσα Γαλλικά",fro:"Παλαιά Γαλλικά",frr:"Βόρεια Φριζιανά",frs:"Ανατολικά Φριζιανά",fur:"Φριουλανικά",fy:"Δυτικά Φριζικά",ga:"Ιρλανδικά",gaa:"Γκα",gag:"Γκαγκάουζ",gay:"Γκάγιο",gba:"Γκμπάγια",gd:"Σκωτικά Κελτικά",gez:"Γκιζ",gil:"Γκιλμπερτίζ",gl:"Γαλικιανά",gmh:"Μέσα Άνω Γερμανικά",gn:"Γκουαρανί",goh:"Παλαιά Άνω Γερμανικά",gon:"Γκόντι",gor:"Γκοροντάλο",got:"Γοτθικά",grb:"Γκρίμπο",grc:"Αρχαία Ελληνικά",gsw:"Γερμανικά Ελβετίας",gu:"Γκουγιαράτι",guz:"Γκούσι",gv:"Μανξ",gwi:"Γκουίτσιν",ha:"Χάουσα",hai:"Χάιντα",haw:"Χαβαϊκά",he:"Εβραϊκά",hi:"Χίντι",hil:"Χιλιγκαϊνόν",hit:"Χιτίτε",hmn:"Χμονγκ",ho:"Χίρι Μότου",hr:"Κροατικά",hsb:"Άνω Σορβικά",ht:"Αϊτιανά",hu:"Ουγγρικά",hup:"Χούπα",hy:"Αρμενικά",hz:"Χερέρο",ia:"Ιντερλίνγκουα",iba:"Ιμπάν",ibb:"Ιμπίμπιο",id:"Ινδονησιακά",ie:"Ιντερλίνγκουε",ig:"Ίγκμπο",ii:"Σίτσουαν Γι",ik:"Ινουπιάκ",ilo:"Ιλόκο",inh:"Ινγκούς",io:"Ίντο",is:"Ισλανδικά",it:"Ιταλικά",iu:"Ινούκτιτουτ",ja:"Ιαπωνικά",jbo:"Λόζμπαν",jgo:"Νγκόμπα",jmc:"Ματσάμε",jpr:"Ιουδαϊκά-Περσικά",jrb:"Ιουδαϊκά-Αραβικά",jv:"Ιαβανικά",ka:"Γεωργιανά",kaa:"Κάρα-Καλπάκ",kab:"Καμπίλε",kac:"Κατσίν",kaj:"Τζου",kam:"Κάμπα",kaw:"Κάουι",kbd:"Καμπαρντιανά",kbl:"Κανέμπου",kcg:"Τιάπ",kde:"Μακόντε",kea:"Γλώσσα του Πράσινου Ακρωτηρίου",kfo:"Κόρο",kg:"Κονγκό",kha:"Κάσι",kho:"Κοτανικά",khq:"Κόιρα Τσίνι",ki:"Κικούγιου",kj:"Κουανιάμα",kk:"Καζακικά",kkj:"Κάκο",kl:"Καλαάλισουτ",kln:"Καλεντζίν",km:"Χμερ",kmb:"Κιμπούντου",kn:"Κανάντα",ko:"Κορεατικά",koi:"Κόμι-Περμιάκ",kok:"Κονκανικά",kos:"Κοσραενικά",kpe:"Κπέλε",kr:"Κανούρι",krc:"Καρατσάι-Μπαλκάρ",krl:"Καρελικά",kru:"Κουρούχ",ks:"Κασμιρικά",ksb:"Σαμπάλα",ksf:"Μπάφια",ksh:"Κολωνικά",ku:"Κουρδικά",kum:"Κουμγιούκ",kut:"Κουτενάι",kv:"Κόμι",kw:"Κορνουαλικά",ky:"Κιργιζικά",la:"Λατινικά",lad:"Λαδίνο",lag:"Λάνγκι",lah:"Λάχδα",lam:"Λάμπα",lb:"Λουξεμβουργιανά",lez:"Λεζγκικά",lg:"Γκάντα",li:"Λιμβουργιανά",lkt:"Λακότα",ln:"Λινγκάλα",lo:"Λαοτινά",lol:"Μόνγκο",lou:"Κρεολικά (Λουιζιάνα)",loz:"Λόζι",lrc:"Βόρεια Λούρι",lt:"Λιθουανικά",lu:"Λούμπα-Κατάνγκα",lua:"Λούμπα-Λουλούα",lui:"Λουισένο",lun:"Λούντα",luo:"Λούο",lus:"Μίζο",luy:"Λούχια",lv:"Λετονικά",mad:"Μαντουρίζ",maf:"Μάφα",mag:"Μαγκάχι",mai:"Μαϊτχίλι",mak:"Μακασάρ",man:"Μαντίνγκο",mas:"Μασάι",mde:"Μάμπα",mdf:"Μόκσα",mdr:"Μανδάρ",men:"Μέντε",mer:"Μέρου",mfe:"Μορισιέν",mg:"Μαλγασικά",mga:"Μέσα Ιρλανδικά",mgh:"Μακούβα-Μέτο",mgo:"Μέτα",mh:"Μαρσαλέζικα",mi:"Μαορί",mic:"Μικμάκ",min:"Μινανγκαμπάου",mk:"Μακεδονικά",ml:"Μαλαγιαλαμικά",mn:"Μογγολικά",mnc:"Μαντσού",mni:"Μανιπούρι",moh:"Μοχόκ",mos:"Μόσι",mr:"Μαραθικά",ms:"Μαλαισιανά",mt:"Μαλτεζικά",mua:"Μουντάνγκ",mus:"Κρικ",mwl:"Μιραντεζικά",mwr:"Μαργουάρι",my:"Βιρμανικά",mye:"Μιένε",myv:"Έρζια",mzn:"Μαζαντεράνι",na:"Ναούρου",nap:"Ναπολιτανικά",naq:"Νάμα",nb:"Νορβηγικά Μποκμάλ",nd:"Βόρεια Ντεμπέλε",nds:"Κάτω Γερμανικά","nds-NL":"Κάτω Γερμανικά Ολλανδίας",ne:"Νεπαλικά","new":"Νεγουάρι",ng:"Ντόνγκα",nia:"Νίας",niu:"Νιούε",nl:"Ολλανδικά","nl-BE":"Φλαμανδικά",nmg:"Κβάσιο",nn:"Νορβηγικά Νινόρσκ",nnh:"Νγκιεμπούν",no:"Νορβηγικά",nog:"Νογκάι",non:"Παλαιά Νορβηγικά",nqo:"Ν’Κο",nr:"Νότια Ντεμπέλε",nso:"Βόρεια Σόθο",nus:"Νούερ",nv:"Νάβαχο",nwc:"Κλασικά Νεουάρι",ny:"Νιάντζα",nym:"Νιαμγουέζι",nyn:"Νιανκόλε",nyo:"Νιόρο",nzi:"Νζίμα",oc:"Οξιτανικά",oj:"Οζιβίγουα",om:"Ορόμο",or:"Όντια",os:"Οσετικά",osa:"Οσάζ",ota:"Οθωμανικά Τουρκικά",pa:"Παντζαπικά",pag:"Πανγκασινάν",pal:"Παχλάβι",pam:"Παμπάνγκα",pap:"Παπιαμέντο",pau:"Παλάουαν",pcm:"Πίτζιν Νιγηρίας",peo:"Αρχαία Περσικά",phn:"Φοινικικά",pi:"Πάλι",pl:"Πολωνικά",pon:"Πομπηικά",prg:"Πρωσικά",pro:"Παλαιά Προβανσάλ",ps:"Πάστο",pt:"Πορτογαλικά","pt-BR":"Πορτογαλικά Βραζιλίας","pt-PT":"Πορτογαλικά Ευρώπης",qu:"Κέτσουα",quc:"Κιτσέ",raj:"Ραζασθάνι",rap:"Ραπανούι",rar:"Ραροτονγκάν",rm:"Ρομανικά",rn:"Ρούντι",ro:"Ρουμανικά","ro-MD":"Μολδαβικά",rof:"Ρόμπο",rom:"Ρομανί",root:"Ρίζα",ru:"Ρωσικά",rup:"Αρομανικά",rw:"Κινιαρουάντα",rwk:"Ρουά",sa:"Σανσκριτικά",sad:"Σαντάγουε",sah:"Σαχά",sam:"Σαμαρίτικα Αραμαϊκά",saq:"Σαμπούρου",sas:"Σασάκ",sat:"Σαντάλι",sba:"Νγκαμπέι",sbp:"Σάνγκου",sc:"Σαρδηνιακά",scn:"Σικελικά",sco:"Σκωτικά",sd:"Σίντι",sdh:"Νότια Κουρδικά",se:"Βόρεια Σάμι",see:"Σένεκα",seh:"Σένα",sel:"Σελκούπ",ses:"Κοϊραμπόρο Σένι",sg:"Σάνγκο",sga:"Παλαιά Ιρλανδικά",sh:"Σερβοκροατικά",shi:"Τασελχίτ",shn:"Σαν",shu:"Αραβικά του Τσαντ",si:"Σινχαλεζικά",sid:"Σιντάμο",sk:"Σλοβακικά",sl:"Σλοβενικά",sm:"Σαμοανά",sma:"Νότια Σάμι",smj:"Λούλε Σάμι",smn:"Ινάρι Σάμι",sms:"Σκολτ Σάμι",sn:"Σόνα",snk:"Σονίνκε",so:"Σομαλικά",sog:"Σογκντιέν",sq:"Αλβανικά",sr:"Σερβικά",srn:"Σρανάν Τόνγκο",srr:"Σερέρ",ss:"Σουάτι",ssy:"Σάχο",st:"Νότια Σόθο",su:"Σουνδανικά",suk:"Σουκούμα",sus:"Σούσου",sux:"Σουμερικά",sv:"Σουηδικά",sw:"Σουαχίλι","sw-CD":"Κονγκό Σουαχίλι",swb:"Κομοριανά",syc:"Κλασικά Συριακά",syr:"Συριακά",ta:"Ταμιλικά",te:"Τελούγκου",tem:"Τίμνε",teo:"Τέσο",ter:"Τερένο",tet:"Τέτουμ",tg:"Τατζικικά",th:"Ταϊλανδικά",ti:"Τιγκρινικά",tig:"Τίγκρε",tiv:"Τιβ",tk:"Τουρκμενικά",tkl:"Τοκελάου",tl:"Τάγκαλογκ",tlh:"Κλίνγκον",tli:"Τλίνγκιτ",tmh:"Ταμασέκ",tn:"Τσουάνα",to:"Τονγκανικά",tog:"Νιάσα Τόνγκα",tpi:"Τοκ Πισίν",tr:"Τουρκικά",trv:"Ταρόκο",ts:"Τσόνγκα",tsi:"Τσίμσιαν",tt:"Ταταρικά",tum:"Τουμπούκα",tvl:"Τουβαλού",tw:"Τούι",twq:"Τασαβάκ",ty:"Ταϊτιανά",tyv:"Τουβινικά",tzm:"Ταμαζίτ Κεντρικού Μαρόκο",udm:"Ουντμούρτ",ug:"Ουιγκουρικά",uga:"Ουγκαριτικά",uk:"Ουκρανικά",umb:"Ουμπούντου",ur:"Ουρντού",uz:"Ουζμπεκικά",vai:"Βάι",ve:"Βέντα",vi:"Βιετναμικά",vo:"Βολαπιούκ",vot:"Βότικ",vun:"Βούντζο",wa:"Βαλλωνικά",wae:"Βάλσερ",wal:"Γουολάιτα",war:"Γουάραϊ",was:"Γουασό",wbp:"Γουαρλπίρι",wo:"Γουόλοφ",wuu:"Κινεζικά Γου",xal:"Καλμίκ",xh:"Κόσα",xog:"Σόγκα",yao:"Γιάο",yap:"Γιαπίζ",yav:"Γιανγκμπέν",ybb:"Γιέμπα",yi:"Γίντις",yo:"Γιορούμπα",yue:"Καντονέζικα",za:"Ζουάνγκ",zap:"Ζάποτεκ",zbl:"Σύμβολα Bliss",zen:"Ζενάγκα",zgh:"Τυπικά Ταμαζίτ Μαρόκου",zh:"Κινεζικά","zh-Hans":"Απλοποιημένα Μανδαρινικά Κινεζικά","zh-Hant":"Παραδοσιακά Μανδαρινικά Κινεζικά",zu:"Ζουλού",zun:"Ζούνι",zza:"Ζάζα"},scriptNames:{Cyrl:"Κυριλλικό",Latn:"Λατινικό",Arab:"Αραβικό",Guru:"Γκουρμουκχί",Tfng:"Τιφινάγκ",Vaii:"Βάι",Hans:"Απλοποιημένο",Hant:"Παραδοσιακό"}},en:{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazian",ace:"Achinese",ach:"Acoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Tunisian Arabic",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadian",akz:"Alabama",ale:"Aleut",aln:"Gheg Albanian",alt:"Southern Altai",am:"Amharic",an:"Aragonese",ang:"Old English",anp:"Angika",ar:"Arabic","ar-001":"Modern Standard Arabic",arc:"Aramaic",arn:"Mapuche",aro:"Araona",arp:"Arapaho",arq:"Algerian Arabic",ars:"Najdi Arabic",arw:"Arawak",ary:"Moroccan Arabic",arz:"Egyptian Arabic",as:"Assamese",asa:"Asu",ase:"American Sign Language",ast:"Asturian",av:"Avaric",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Balinese",bar:"Bavarian",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusian",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarian",bgn:"Western Balochi",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bangla",bo:"Tibetan",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Breton",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnian",bss:"Akoose",bua:"Buriat",bug:"Buginese",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalan",cad:"Caddo",car:"Carib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukese",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",cic:"Chickasaw",ckb:"Central Kurdish",co:"Corsican",cop:"Coptic",cps:"Capiznon",cr:"Cree",crh:"Crimean Turkish",crs:"Seselwa Creole French",cs:"Czech",csb:"Kashubian",cu:"Church Slavic",cv:"Chuvash",cy:"Welsh",da:"Danish",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"German","de-AT":"Austrian German","de-CH":"Swiss High German",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Lower Sorbian",dtp:"Central Dusun",dua:"Duala",dum:"Middle Dutch",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilian",egy:"Ancient Egyptian",eka:"Ekajuk",el:"Greek",elx:"Elamite",en:"English","en-AU":"Australian English","en-CA":"Canadian English","en-GB":"British English","en-US":"American English",enm:"Middle English",eo:"Esperanto",es:"Spanish","es-419":"Latin American Spanish","es-ES":"European Spanish","es-MX":"Mexican Spanish",esu:"Central Yupik",et:"Estonian",eu:"Basque",ewo:"Ewondo",ext:"Extremaduran",fa:"Persian","fa-AF":"Dari",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Finnish",fil:"Filipino",fit:"Tornedalen Finnish",fj:"Fijian",fo:"Faroese",fon:"Fon",fr:"French","fr-CA":"Canadian French","fr-CH":"Swiss French",frc:"Cajun French",frm:"Middle French",fro:"Old French",frp:"Arpitan",frr:"Northern Frisian",frs:"Eastern Frisian",fur:"Friulian",fy:"Western Frisian",ga:"Irish",gaa:"Ga",gag:"Gagauz",gan:"Gan Chinese",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scottish Gaelic",gez:"Geez",gil:"Gilbertese",gl:"Galician",glk:"Gilaki",gmh:"Middle High German",gn:"Guarani",goh:"Old High German",gom:"Goan Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothic",grb:"Grebo",grc:"Ancient Greek",gsw:"Swiss German",gu:"Gujarati",guc:"Wayuu",gur:"Frafra",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka Chinese",haw:"Hawaiian",he:"Hebrew",hi:"Hindi",hif:"Fiji Hindi",hil:"Hiligaynon",hit:"Hittite",hmn:"Hmong",ho:"Hiri Motu",hr:"Croatian",hsb:"Upper Sorbian",hsn:"Xiang Chinese",ht:"Haitian Creole",hu:"Hungarian",hup:"Hupa",hy:"Armenian",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesian",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Icelandic",it:"Italian",iu:"Inuktitut",izh:"Ingrian",ja:"Japanese",jam:"Jamaican Creole English",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Persian",jrb:"Judeo-Arabic",jut:"Jutish",jv:"Javanese",ka:"Georgian",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardian",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanese",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korean",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosraean",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",kri:"Krio",krj:"Kinaray-a",krl:"Karelian",kru:"Kurukh",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kyrgyz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxembourgish",lez:"Lezghian",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgish",lij:"Ligurian",liv:"Livonian",lkt:"Lakota",lmo:"Lombard",ln:"Lingala",lo:"Lao",lol:"Mongo",lou:"Louisiana Creole",loz:"Lozi",lrc:"Northern Luri",lt:"Lithuanian",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvian",lzh:"Literary Chinese",lzz:"Laz",mad:"Madurese",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mga:"Middle Irish",mgh:"Makhuwa-Meetto",mgo:"Metaʼ",mh:"Marshallese",mi:"Maori",mic:"Mi'kmaq",min:"Minangkabau",mk:"Macedonian",ml:"Malayalam",mn:"Mongolian",mnc:"Manchu",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Western Mari",ms:"Malay",mt:"Maltese",mua:"Mundang",mus:"Muscogee",mwl:"Mirandese",mwr:"Marwari",mwv:"Mentawai",my:"Burmese",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Min Nan Chinese",nap:"Neapolitan",naq:"Nama",nb:"Norwegian Bokmål",nd:"North Ndebele",nds:"Low German","nds-NL":"Low Saxon",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Dutch","nl-BE":"Flemish",nmg:"Kwasio",nn:"Norwegian Nynorsk",nnh:"Ngiemboon",no:"Norwegian",nog:"Nogai",non:"Old Norse",nov:"Novial",nqo:"N’Ko",nr:"South Ndebele",nso:"Northern Sotho",nus:"Nuer",nv:"Navajo",nwc:"Classical Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitan",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Ossetic",osa:"Osage",ota:"Ottoman Turkish",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcd:"Picard",pcm:"Nigerian Pidgin",pdc:"Pennsylvania German",pdt:"Plautdietsch",peo:"Old Persian",pfl:"Palatine German",phn:"Phoenician",pi:"Pali",pl:"Polish",pms:"Piedmontese",pnt:"Pontic",pon:"Pohnpeian",prg:"Prussian",pro:"Old Provençal",ps:"Pashto",pt:"Portuguese","pt-BR":"Brazilian Portuguese","pt-PT":"European Portuguese",qu:"Quechua",quc:"Kʼicheʼ",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffian",rm:"Romansh",rn:"Rundi",ro:"Romanian","ro-MD":"Moldavian",rof:"Rombo",rom:"Romany",root:"Root",rtm:"Rotuman",ru:"Russian",rue:"Rusyn",rug:"Roviana",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",sam:"Samaritan Aramaic",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardinian",scn:"Sicilian",sco:"Scots",sd:"Sindhi",sdc:"Sassarese Sardinian",sdh:"Southern Kurdish",se:"Northern Sami",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Old Irish",sgs:"Samogitian",sh:"Serbo-Croatian",shi:"Tachelhit",shn:"Shan",shu:"Chadian Arabic",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Slovenian",sli:"Lower Silesian",sly:"Selayar",sm:"Samoan",sma:"Southern Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdien",sq:"Albanian",sr:"Serbian","sr-ME":"Montenegrin",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Southern Sotho",stq:"Saterland Frisian",su:"Sundanese",suk:"Sukuma",sus:"Susu",sux:"Sumerian",sv:"Swedish",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comorian",syc:"Classical Syriac",syr:"Syriac",szl:"Silesian",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongan",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turkish",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonian",tsi:"Tsimshian",tt:"Tatar",ttt:"Muslim Tat",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahitian",tyv:"Tuvinian",tzm:"Central Atlas Tamazight",udm:"Udmurt",ug:"Uyghur",uga:"Ugaritic",uk:"Ukrainian",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venetian",vep:"Veps",vi:"Vietnamese",vls:"West Flemish",vmf:"Main-Franconian",vo:"Volapük",vot:"Votic",vro:"Võro",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu Chinese",xal:"Kalmyk",xh:"Xhosa",xmf:"Mingrelian",xog:"Soga",yao:"Yao",yap:"Yapese",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yrl:"Nheengatu",yue:"Cantonese",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbols",zea:"Zeelandic",zen:"Zenaga",zgh:"Standard Moroccan Tamazight",zh:"Mandarin Chinese","zh-Hans":"Simplified Mandarin Chinese","zh-Hant":"Traditional Mandarin Chinese",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillic",Latn:"Latin",Arab:"Arabic",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Simplified",Hant:"Traditional"}},"en-AU":{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazian",ace:"Achinese",ach:"Acoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Tunisian Arabic",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadian",akz:"Alabama",ale:"Aleut",aln:"Gheg Albanian",alt:"Southern Altai",am:"Amharic",an:"Aragonese",ang:"Old English",anp:"Angika",ar:"Arabic","ar-001":"Modern Standard Arabic",arc:"Aramaic",arn:"Mapuche",aro:"Araona",arp:"Arapaho",arq:"Algerian Arabic",ars:"Najdi Arabic",arw:"Arawak",ary:"Moroccan Arabic",arz:"Egyptian Arabic",as:"Assamese",asa:"Asu",ase:"American Sign Language",ast:"Asturian",av:"Avaric",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Balinese",bar:"Bavarian",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusian",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarian",bgn:"Western Balochi",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bengali",bo:"Tibetan",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Breton",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnian",bss:"Akoose",bua:"Buriat",bug:"Buginese",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalan",cad:"Caddo",car:"Carib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukese",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",cic:"Chickasaw",ckb:"Central Kurdish",co:"Corsican",cop:"Coptic",cps:"Capiznon",cr:"Cree",crh:"Crimean Turkish",crs:"Seselwa Creole French",cs:"Czech",csb:"Kashubian",cu:"Church Slavic",cv:"Chuvash",cy:"Welsh",da:"Danish",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"German","de-AT":"Austrian German","de-CH":"Swiss High German",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Lower Sorbian",dtp:"Central Dusun",dua:"Duala",dum:"Middle Dutch",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilian",egy:"Ancient Egyptian",eka:"Ekajuk",el:"Greek",elx:"Elamite",en:"English","en-AU":"Australian English","en-CA":"Canadian English","en-GB":"British English","en-US":"United States English",enm:"Middle English",eo:"Esperanto",es:"Spanish","es-419":"Latin American Spanish","es-ES":"European Spanish","es-MX":"Mexican Spanish",esu:"Central Yupik",et:"Estonian",eu:"Basque",ewo:"Ewondo",ext:"Extremaduran",fa:"Persian","fa-AF":"Dari",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Finnish",fil:"Filipino",fit:"Tornedalen Finnish",fj:"Fijian",fo:"Faroese",fon:"Fon",fr:"French","fr-CA":"Canadian French","fr-CH":"Swiss French",frm:"Middle French",fro:"Old French",frp:"Arpitan",frr:"Northern Frisian",frs:"Eastern Frisian",fur:"Friulian",fy:"Western Frisian",ga:"Irish",gaa:"Ga",gag:"Gagauz",gan:"Gan Chinese",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scottish Gaelic",gez:"Geez",gil:"Gilbertese",gl:"Galician",glk:"Gilaki",gmh:"Middle High German",gn:"Guarani",goh:"Old High German",gom:"Goan Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothic",grb:"Grebo",grc:"Ancient Greek",gsw:"Swiss German",gu:"Gujarati",guc:"Wayuu",gur:"Frafra",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka Chinese",haw:"Hawaiian",he:"Hebrew",hi:"Hindi",hif:"Fiji Hindi",hil:"Hiligaynon",hit:"Hittite",hmn:"Hmong",ho:"Hiri Motu",hr:"Croatian",hsb:"Upper Sorbian",hsn:"Xiang Chinese",ht:"Haitian Creole",hu:"Hungarian",hup:"Hupa",hy:"Armenian",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesian",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Icelandic",it:"Italian",iu:"Inuktitut",izh:"Ingrian",ja:"Japanese",jam:"Jamaican Creole English",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Persian",jrb:"Judeo-Arabic",jut:"Jutish",jv:"Javanese",ka:"Georgian",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardian",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanese",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korean",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosraean",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",kri:"Krio",krj:"Kinaray-a",krl:"Karelian",kru:"Kurukh",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kyrgyz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxembourgish",lez:"Lezghian",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgish",lij:"Ligurian",liv:"Livonian",lkt:"Lakota",lmo:"Lombard",ln:"Lingala",lo:"Lao",lol:"Mongo",loz:"Lozi",lrc:"Northern Luri",lt:"Lithuanian",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvian",lzh:"Literary Chinese",lzz:"Laz",mad:"Madurese",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mga:"Middle Irish",mgh:"Makhuwa-Meetto",mgo:"Metaʼ",mh:"Marshallese",mi:"Maori",mic:"Mi'kmaq",min:"Minangkabau",mk:"Macedonian",ml:"Malayalam",mn:"Mongolian",mnc:"Manchu",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Western Mari",ms:"Malay",mt:"Maltese",mua:"Mundang",mus:"Creek",mwl:"Mirandese",mwr:"Marwari",mwv:"Mentawai",my:"Burmese",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Min Nan Chinese",nap:"Neapolitan",naq:"Nama",nb:"Norwegian Bokmål",nd:"North Ndebele",nds:"Low German","nds-NL":"West Low German",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Dutch","nl-BE":"Flemish",nmg:"Kwasio",nn:"Norwegian Nynorsk",nnh:"Ngiemboon",no:"Norwegian",nog:"Nogai",non:"Old Norse",nov:"Novial",nqo:"N’Ko",nr:"South Ndebele",nso:"Northern Sotho",nus:"Nuer",nv:"Navajo",nwc:"Classical Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitan",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Ossetic",osa:"Osage",ota:"Ottoman Turkish",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcd:"Picard",pcm:"Nigerian Pidgin",pdc:"Pennsylvania German",pdt:"Plautdietsch",peo:"Old Persian",pfl:"Palatine German",phn:"Phoenician",pi:"Pali",pl:"Polish",pms:"Piedmontese",pnt:"Pontic",pon:"Pohnpeian",prg:"Prussian",pro:"Old Provençal",ps:"Pashto",pt:"Portuguese","pt-BR":"Brazilian Portuguese","pt-PT":"European Portuguese",qu:"Quechua",quc:"Kʼicheʼ",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffian",rm:"Romansh",rn:"Rundi",ro:"Romanian","ro-MD":"Moldovan",rof:"Rombo",rom:"Romany",root:"Root",rtm:"Rotuman",ru:"Russian",rue:"Rusyn",rug:"Roviana",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",sam:"Samaritan Aramaic",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardinian",scn:"Sicilian",sco:"Scots",sd:"Sindhi",sdc:"Sassarese Sardinian",sdh:"Southern Kurdish",se:"Northern Sami",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Old Irish",sgs:"Samogitian",sh:"Serbo-Croatian",shi:"Tachelhit",shn:"Shan",shu:"Chadian Arabic",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Slovenian",sli:"Lower Silesian",sly:"Selayar",sm:"Samoan",sma:"Southern Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdien",sq:"Albanian",sr:"Serbian","sr-ME":"Montenegrin",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Southern Sotho",stq:"Saterland Frisian",su:"Sundanese",suk:"Sukuma",sus:"Susu",sux:"Sumerian",sv:"Swedish",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comorian",syc:"Classical Syriac",syr:"Syriac",szl:"Silesian",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongan",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turkish",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonian",tsi:"Tsimshian",tt:"Tatar",ttt:"Muslim Tat",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahitian",tyv:"Tuvinian",tzm:"Central Atlas Tamazight",udm:"Udmurt",ug:"Uyghur",uga:"Ugaritic",uk:"Ukrainian",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venetian",vep:"Veps",vi:"Vietnamese",vls:"West Flemish",vmf:"Main-Franconian",vo:"Volapük",vot:"Votic",vro:"Võro",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu Chinese",xal:"Kalmyk",xh:"Xhosa",xmf:"Mingrelian",xog:"Soga",yao:"Yao",yap:"Yapese",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yrl:"Nheengatu",yue:"Cantonese",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbols",zea:"Zeelandic",zen:"Zenaga",zgh:"Standard Moroccan Tamazight",zh:"Mandarin Chinese","zh-Hans":"Simplified Mandarin Chinese","zh-Hant":"Traditional Mandarin Chinese",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillic",Latn:"Latin",Arab:"Arabic",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Simplified",Hant:"Traditional"}},"en-GB":{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazian",ace:"Achinese",ach:"Acoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Tunisian Arabic",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadian",akz:"Alabama",ale:"Aleut",aln:"Gheg Albanian",alt:"Southern Altai",am:"Amharic",an:"Aragonese",ang:"Old English",anp:"Angika",ar:"Arabic","ar-001":"Modern Standard Arabic",arc:"Aramaic",arn:"Mapuche",aro:"Araona",arp:"Arapaho",arq:"Algerian Arabic",ars:"Najdi Arabic",arw:"Arawak",ary:"Moroccan Arabic",arz:"Egyptian Arabic",as:"Assamese",asa:"Asu",ase:"American Sign Language",ast:"Asturian",av:"Avaric",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Balinese",bar:"Bavarian",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusian",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarian",bgn:"Western Balochi",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bangla",bo:"Tibetan",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Breton",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnian",bss:"Akoose",bua:"Buriat",bug:"Buginese",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalan",cad:"Caddo",car:"Carib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukese",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",cic:"Chickasaw",ckb:"Central Kurdish",co:"Corsican",cop:"Coptic",cps:"Capiznon",cr:"Cree",crh:"Crimean Turkish",crs:"Seselwa Creole French",cs:"Czech",csb:"Kashubian",cu:"Church Slavic",cv:"Chuvash",cy:"Welsh",da:"Danish",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"German","de-AT":"Austrian German","de-CH":"Swiss High German",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Lower Sorbian",dtp:"Central Dusun",dua:"Duala",dum:"Middle Dutch",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilian",egy:"Ancient Egyptian",eka:"Ekajuk",el:"Greek",elx:"Elamite",en:"English","en-AU":"Australian English","en-CA":"Canadian English","en-GB":"British English","en-US":"American English",enm:"Middle English",eo:"Esperanto",es:"Spanish","es-419":"Latin American Spanish","es-ES":"European Spanish","es-MX":"Mexican Spanish",esu:"Central Yupik",et:"Estonian",eu:"Basque",ewo:"Ewondo",ext:"Extremaduran",fa:"Persian","fa-AF":"Dari",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Finnish",fil:"Filipino",fit:"Tornedalen Finnish",fj:"Fijian",fo:"Faroese",fon:"Fon",fr:"French","fr-CA":"Canadian French","fr-CH":"Swiss French",frc:"Cajun French",frm:"Middle French",fro:"Old French",frp:"Arpitan",frr:"Northern Frisian",frs:"Eastern Frisian",fur:"Friulian",fy:"Western Frisian",ga:"Irish",gaa:"Ga",gag:"Gagauz",gan:"Gan Chinese",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scottish Gaelic",gez:"Geez",gil:"Gilbertese",gl:"Galician",glk:"Gilaki",gmh:"Middle High German",gn:"Guarani",goh:"Old High German",gom:"Goan Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothic",grb:"Grebo",grc:"Ancient Greek",gsw:"Swiss German",gu:"Gujarati",guc:"Wayuu",gur:"Frafra",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka Chinese",haw:"Hawaiian",he:"Hebrew",hi:"Hindi",hif:"Fiji Hindi",hil:"Hiligaynon",hit:"Hittite",hmn:"Hmong",ho:"Hiri Motu",hr:"Croatian",hsb:"Upper Sorbian",hsn:"Xiang Chinese",ht:"Haitian Creole",hu:"Hungarian",hup:"Hupa",hy:"Armenian",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesian",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Icelandic",it:"Italian",iu:"Inuktitut",izh:"Ingrian",ja:"Japanese",jam:"Jamaican Creole English",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Persian",jrb:"Judeo-Arabic",jut:"Jutish",jv:"Javanese",ka:"Georgian",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardian",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanese",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korean",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosraean",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",kri:"Krio",krj:"Kinaray-a",krl:"Karelian",kru:"Kurukh",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kyrgyz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxembourgish",lez:"Lezghian",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgish",lij:"Ligurian",liv:"Livonian",lkt:"Lakota",lmo:"Lombard",ln:"Lingala",lo:"Lao",lol:"Mongo",lou:"Louisiana Creole",loz:"Lozi",lrc:"Northern Luri",lt:"Lithuanian",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvian",lzh:"Literary Chinese",lzz:"Laz",mad:"Madurese",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mga:"Middle Irish",mgh:"Makhuwa-Meetto",mgo:"Metaʼ",mh:"Marshallese",mi:"Maori",mic:"Mi'kmaq",min:"Minangkabau",mk:"Macedonian",ml:"Malayalam",mn:"Mongolian",mnc:"Manchu",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Western Mari",ms:"Malay",mt:"Maltese",mua:"Mundang",mus:"Creek",mwl:"Mirandese",mwr:"Marwari",mwv:"Mentawai",my:"Burmese",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Min Nan Chinese",nap:"Neapolitan",naq:"Nama",nb:"Norwegian Bokmål",nd:"North Ndebele",nds:"Low German","nds-NL":"West Low German",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Dutch","nl-BE":"Flemish",nmg:"Kwasio",nn:"Norwegian Nynorsk",nnh:"Ngiemboon",no:"Norwegian",nog:"Nogai",non:"Old Norse",nov:"Novial",nqo:"N’Ko",nr:"South Ndebele",nso:"Northern Sotho",nus:"Nuer",nv:"Navajo",nwc:"Classical Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitan",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Ossetic",osa:"Osage",ota:"Ottoman Turkish",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcd:"Picard",pcm:"Nigerian Pidgin",pdc:"Pennsylvania German",pdt:"Plautdietsch",peo:"Old Persian",pfl:"Palatine German",phn:"Phoenician",pi:"Pali",pl:"Polish",pms:"Piedmontese",pnt:"Pontic",pon:"Pohnpeian",prg:"Prussian",pro:"Old Provençal",ps:"Pashto",pt:"Portuguese","pt-BR":"Brazilian Portuguese","pt-PT":"European Portuguese",qu:"Quechua",quc:"Kʼicheʼ",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffian",rm:"Romansh",rn:"Rundi",ro:"Romanian","ro-MD":"Moldavian",rof:"Rombo",rom:"Romany",root:"Root",rtm:"Rotuman",ru:"Russian",rue:"Rusyn",rug:"Roviana",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",sam:"Samaritan Aramaic",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardinian",scn:"Sicilian",sco:"Scots",sd:"Sindhi",sdc:"Sassarese Sardinian",sdh:"Southern Kurdish",se:"Northern Sami",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Old Irish",sgs:"Samogitian",sh:"Serbo-Croatian",shi:"Tachelhit",shn:"Shan",shu:"Chadian Arabic",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Slovenian",sli:"Lower Silesian",sly:"Selayar",sm:"Samoan",sma:"Southern Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdien",sq:"Albanian",sr:"Serbian","sr-ME":"Montenegrin",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Southern Sotho",stq:"Saterland Frisian",su:"Sundanese",suk:"Sukuma",sus:"Susu",sux:"Sumerian",sv:"Swedish",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comorian",syc:"Classical Syriac",syr:"Syriac",szl:"Silesian",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongan",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turkish",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonian",tsi:"Tsimshian",tt:"Tatar",ttt:"Muslim Tat",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahitian",tyv:"Tuvinian",tzm:"Central Atlas Tamazight",udm:"Udmurt",ug:"Uyghur",uga:"Ugaritic",uk:"Ukrainian",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venetian",vep:"Veps",vi:"Vietnamese",vls:"West Flemish",vmf:"Main-Franconian",vo:"Volapük",vot:"Votic",vro:"Võro",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu Chinese",xal:"Kalmyk",xh:"Xhosa",xmf:"Mingrelian",xog:"Soga",yao:"Yao",yap:"Yapese",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yrl:"Nheengatu",yue:"Cantonese",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbols",zea:"Zeelandic",zen:"Zenaga",zgh:"Standard Moroccan Tamazight",zh:"Mandarin Chinese","zh-Hans":"Simplified Mandarin Chinese","zh-Hant":"Traditional Mandarin Chinese",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillic",Latn:"Latin",Arab:"Arabic",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Simplified",Hant:"Traditional"}},eo:{rtl:false,languageNames:{aa:"afara",ab:"abĥaza",af:"afrikansa",am:"amhara",ar:"araba","ar-001":"araba (Mondo)",as:"asama",ay:"ajmara",az:"azerbajĝana",ba:"baŝkira",be:"belorusa",bg:"bulgara",bi:"bislamo",bn:"bengala",bo:"tibeta",br:"bretona",bs:"bosnia",ca:"kataluna",co:"korsika",cs:"ĉeĥa",cy:"kimra",da:"dana",de:"germana","de-AT":"germana (Aŭstrujo)","de-CH":"germana (Svisujo)",dv:"mahla",dz:"dzonko",efi:"ibibioefika",el:"greka",en:"angla","en-AU":"angla (Aŭstralio)","en-CA":"angla (Kanado)","en-GB":"angla (Unuiĝinta Reĝlando)","en-US":"angla (Usono)",eo:"esperanto",es:"hispana","es-419":"hispana (419)","es-ES":"hispana (Hispanujo)","es-MX":"hispana (Meksiko)",et:"estona",eu:"eŭska",fa:"persa",fi:"finna",fil:"filipina",fj:"fiĝia",fo:"feroa",fr:"franca","fr-CA":"franca (Kanado)","fr-CH":"franca (Svisujo)",fy:"frisa",ga:"irlanda",gd:"gaela",gl:"galega",gn:"gvarania",gu:"guĝarata",ha:"haŭsa",haw:"havaja",he:"hebrea",hi:"hinda",hr:"kroata",ht:"haitia kreola",hu:"hungara",hy:"armena",ia:"interlingvao",id:"indonezia",ie:"okcidentalo",ik:"eskima",is:"islanda",it:"itala",iu:"inuita",ja:"japana",jv:"java",ka:"kartvela",kk:"kazaĥa",kl:"gronlanda",km:"kmera",kn:"kanara",ko:"korea",ks:"kaŝmira",ku:"kurda",ky:"kirgiza",la:"latino",lb:"luksemburga",ln:"lingala",lo:"laŭa",lt:"litova",lv:"latva",mg:"malagasa",mi:"maoria",mk:"makedona",ml:"malajalama",mn:"mongola",mr:"marata",ms:"malaja",mt:"malta",my:"birma",na:"naura",nb:"dannorvega","nds-NL":"nds (Nederlando)",ne:"nepala",nl:"nederlanda","nl-BE":"nederlanda (Belgujo)",nn:"novnorvega",no:"norvega",oc:"okcitana",om:"oroma",or:"orijo",pa:"panĝaba",pl:"pola",ps:"paŝtoa",pt:"portugala","pt-BR":"brazilportugala","pt-PT":"eŭropportugala",qu:"keĉua",rm:"romanĉa",rn:"burunda",ro:"rumana","ro-MD":"rumana (Moldavujo)",ru:"rusa",rw:"ruanda",sa:"sanskrito",sd:"sinda",sg:"sangoa",sh:"serbo-Kroata",si:"sinhala",sk:"slovaka",sl:"slovena",sm:"samoa",sn:"ŝona",so:"somala",sq:"albana",sr:"serba",ss:"svazia",st:"sota",su:"sunda",sv:"sveda",sw:"svahila","sw-CD":"svahila (CD)",ta:"tamila",te:"telugua",tg:"taĝika",th:"taja",ti:"tigraja",tk:"turkmena",tl:"tagaloga",tlh:"klingona",tn:"cvana",to:"tongaa",tr:"turka",ts:"conga",tt:"tatara",ug:"ujgura",uk:"ukraina",ur:"urduo",uz:"uzbeka",vi:"vjetnama",vo:"volapuko",wo:"volofa",xh:"ksosa",yi:"jida",yo:"joruba",za:"ĝuanga",zh:"ĉina","zh-Hans":"ĉina (Hans)","zh-Hant":"ĉina (Hant)",zu:"zulua"},scriptNames:{}},es:{rtl:false,languageNames:{aa:"afar",ab:"abjasio",ace:"acehnés",ach:"acoli",ada:"adangme",ady:"adigué",ae:"avéstico",af:"afrikáans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadio",ale:"aleutiano",alt:"altái meridional",am:"amárico",an:"aragonés",ang:"inglés antiguo",anp:"angika",ar:"árabe","ar-001":"árabe estándar moderno",arc:"arameo",arn:"mapuche",arp:"arapaho",ars:"árabe najdí",arw:"arahuaco",as:"asamés",asa:"asu",ast:"asturiano",av:"avar",awa:"avadhi",ay:"aimara",az:"azerbaiyano",ba:"baskir",bal:"baluchi",ban:"balinés",bas:"basaa",bax:"bamún",bbj:"ghomala",be:"bielorruso",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"búlgaro",bgn:"baluchi occidental",bho:"bhoyapurí",bi:"bislama",bik:"bicol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalí",bo:"tibetano",br:"bretón",bra:"braj",brx:"bodo",bs:"bosnio",bss:"akoose",bua:"buriato",bug:"buginés",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalán",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatái",chk:"trukés",chm:"marí",chn:"jerga chinuk",cho:"choctaw",chp:"chipewyan",chr:"cheroqui",chy:"cheyene",ckb:"kurdo sorani",co:"corso",cop:"copto",cr:"cree",crh:"tártaro de Crimea",crs:"criollo seychelense",cs:"checo",csb:"casubio",cu:"eslavo eclesiástico",cv:"chuvasio",cy:"galés",da:"danés",dak:"dakota",dar:"dargva",dav:"taita",de:"alemán","de-AT":"alemán austríaco","de-CH":"alto alemán suizo",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"bajo sorbio",dua:"duala",dum:"neerlandés medio",dv:"divehi",dyo:"jola-fonyi",dyu:"diula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewé",efi:"efik",egy:"egipcio antiguo",eka:"ekajuk",el:"griego",elx:"elamita",en:"inglés","en-AU":"inglés australiano","en-CA":"inglés canadiense","en-GB":"inglés británico","en-US":"inglés estadounidense",enm:"inglés medio",eo:"esperanto",es:"español","es-419":"español latinoamericano","es-ES":"español de España","es-MX":"español de México",et:"estonio",eu:"euskera",ewo:"ewondo",fa:"persa",fan:"fang",fat:"fanti",ff:"fula",fi:"finés",fil:"filipino",fj:"fiyiano",fo:"feroés",fr:"francés","fr-CA":"francés canadiense","fr-CH":"francés suizo",frc:"francés cajún",frm:"francés medio",fro:"francés antiguo",frr:"frisón septentrional",frs:"frisón oriental",fur:"friulano",fy:"frisón occidental",ga:"irlandés",gaa:"ga",gag:"gagauzo",gan:"chino gan",gay:"gayo",gba:"gbaya",gd:"gaélico escocés",gez:"geez",gil:"gilbertés",gl:"gallego",gmh:"alto alemán medio",gn:"guaraní",goh:"alto alemán antiguo",gon:"gondi",gor:"gorontalo",got:"gótico",grb:"grebo",grc:"griego antiguo",gsw:"alemán suizo",gu:"guyaratí",guz:"gusii",gv:"manés",gwi:"kutchin",ha:"hausa",hai:"haida",hak:"chino hakka",haw:"hawaiano",he:"hebreo",hi:"hindi",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"alto sorbio",hsn:"chino xiang",ht:"criollo haitiano",hu:"húngaro",hup:"hupa",hy:"armenio",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesio",ie:"interlingue",ig:"igbo",ii:"yi de Sichuán",ik:"inupiaq",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandés",it:"italiano",iu:"inuktitut",ja:"japonés",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"judeo-persa",jrb:"judeo-árabe",jv:"javanés",ka:"georgiano",kaa:"karakalpako",kab:"cabila",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardiano",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"criollo caboverdiano",kfo:"koro",kg:"kongo",kha:"khasi",kho:"kotanés",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazajo",kkj:"kako",kl:"groenlandés",kln:"kalenjin",km:"jemer",kmb:"kimbundu",kn:"canarés",ko:"coreano",koi:"komi permio",kok:"konkaní",kos:"kosraeano",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"carelio",kru:"kurukh",ks:"cachemiro",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnico",ky:"kirguís",la:"latín",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgués",lez:"lezgiano",lg:"ganda",li:"limburgués",lkt:"lakota",ln:"lingala",lo:"lao",lol:"mongo",lou:"criollo de Luisiana",loz:"lozi",lrc:"lorí septentrional",lt:"lituano",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseño",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letón",mad:"madurés",maf:"mafa",mag:"magahi",mai:"maithili",mak:"macasar",man:"mandingo",mas:"masái",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"criollo mauriciano",mg:"malgache",mga:"irlandés medio",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalés",mi:"maorí",mic:"micmac",min:"minangkabau",mk:"macedonio",ml:"malayalam",mn:"mongol",mnc:"manchú",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"maratí",ms:"malayo",mt:"maltés",mua:"mundang",mus:"creek",mwl:"mirandés",mwr:"marwari",my:"birmano",mye:"myene",myv:"erzya",mzn:"mazandaraní",na:"nauruano",nan:"chino min nan",nap:"napolitano",naq:"nama",nb:"noruego bokmal",nd:"ndebele septentrional",nds:"bajo alemán","nds-NL":"bajo sajón",ne:"nepalí","new":"newari",ng:"ndonga",nia:"nias",niu:"niueano",nl:"neerlandés","nl-BE":"flamenco",nmg:"kwasio",nn:"noruego nynorsk",nnh:"ngiemboon",no:"noruego",nog:"nogai",non:"nórdico antiguo",nqo:"n’ko",nr:"ndebele meridional",nso:"sotho septentrional",nus:"nuer",nv:"navajo",nwc:"newari clásico",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitano",oj:"ojibwa",om:"oromo",or:"oriya",os:"osético",osa:"osage",ota:"turco otomano",pa:"punyabí",pag:"pangasinán",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin de Nigeria",peo:"persa antiguo",phn:"fenicio",pi:"pali",pl:"polaco",pon:"pohnpeiano",prg:"prusiano",pro:"provenzal antiguo",ps:"pastún",pt:"portugués","pt-BR":"portugués de Brasil","pt-PT":"portugués de Portugal",qu:"quechua",quc:"quiché",raj:"rajasthani",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"kirundi",ro:"rumano","ro-MD":"moldavo",rof:"rombo",rom:"romaní",root:"raíz",ru:"ruso",rup:"arrumano",rw:"kinyarwanda",rwk:"rwa",sa:"sánscrito",sad:"sandawe",sah:"sakha",sam:"arameo samaritano",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"escocés",sd:"sindhi",sdh:"kurdo meridional",se:"sami septentrional",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandés antiguo",sh:"serbocroata",shi:"tashelhit",shn:"shan",shu:"árabe chadiano",si:"cingalés",sid:"sidamo",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"sami meridional",smj:"sami lule",smn:"sami inari",sms:"sami skolt",sn:"shona",snk:"soninké",so:"somalí",sog:"sogdiano",sq:"albanés",sr:"serbio",srn:"sranan tongo",srr:"serer",ss:"suazi",ssy:"saho",st:"sotho meridional",su:"sundanés",suk:"sukuma",sus:"susu",sux:"sumerio",sv:"sueco",sw:"suajili","sw-CD":"suajili del Congo",swb:"comorense",syc:"siríaco clásico",syr:"siriaco",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetún",tg:"tayiko",th:"tailandés",ti:"tigriña",tig:"tigré",tk:"turcomano",tkl:"tokelauano",tl:"tagalo",tlh:"klingon",tli:"tlingit",tmh:"tamashek",tn:"setsuana",to:"tongano",tog:"tonga del Nyasa",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tsi:"tsimshiano",tt:"tártaro",tum:"tumbuka",tvl:"tuvaluano",tw:"twi",twq:"tasawaq",ty:"tahitiano",tyv:"tuviniano",tzm:"tamazight del Atlas Central",udm:"udmurt",ug:"uigur",uga:"ugarítico",uk:"ucraniano",umb:"umbundu",ur:"urdu",uz:"uzbeko",ve:"venda",vi:"vietnamita",vo:"volapük",vot:"vótico",vun:"vunjo",wa:"valón",wae:"walser",wal:"wolayta",war:"waray",was:"washo",wbp:"warlpiri",wo:"wólof",wuu:"chino wu",xal:"kalmyk",xh:"xhosa",xog:"soga",yap:"yapés",yav:"yangben",ybb:"yemba",yi:"yidis",yo:"yoruba",yue:"cantonés",za:"zhuang",zap:"zapoteco",zbl:"símbolos Bliss",zen:"zenaga",zgh:"tamazight estándar marroquí",zh:"chino","zh-Hans":"chino mandarín simplificado","zh-Hant":"chino mandarín tradicional",zu:"zulú",zun:"zuñi",zza:"zazaki"},scriptNames:{Cyrl:"cirílico",Latn:"latino",Arab:"árabe",Guru:"gurmuji",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificado",Hant:"tradicional"}},et:{rtl:false,languageNames:{aa:"afari",ab:"abhaasi",ace:"atšehi",ach:"atšoli",ada:"adangme",ady:"adõgee",ae:"avesta",aeb:"Tuneesia araabia",af:"afrikaani",afh:"afrihili",agq:"aghemi",ain:"ainu",ak:"akani",akk:"akadi",akz:"alabama",ale:"aleuudi",aln:"geegi",alt:"altai",am:"amhara",an:"aragoni",ang:"vanainglise",anp:"angika",ar:"araabia","ar-001":"araabia (tänapäevane)",arc:"aramea",arn:"mapudunguni",aro:"araona",arp:"arapaho",arq:"Alžeeria araabia",arw:"aravaki",ary:"Maroko araabia",arz:"Egiptuse araabia",as:"assami",asa:"asu",ase:"Ameerika viipekeel",ast:"astuuria",av:"avaari",awa:"avadhi",ay:"aimara",az:"aserbaidžaani",ba:"baškiiri",bal:"belutši",ban:"bali",bar:"baieri",bas:"basaa",bax:"bamuni",bbc:"bataki",bbj:"ghomala",be:"valgevene",bej:"bedža",bem:"bemba",bew:"betavi",bez:"bena",bfd:"bafuti",bfq:"badaga",bg:"bulgaaria",bgn:"läänebelutši",bho:"bhodžpuri",bi:"bislama",bik:"bikoli",bin:"edo",bjn:"bandžari",bkm:"komi (Aafrika)",bla:"mustjalaindiaani",bm:"bambara",bn:"bengali",bo:"tiibeti",bpy:"bišnuprija",bqi:"bahtiari",br:"bretooni",bra:"bradži",brh:"brahui",brx:"bodo",bs:"bosnia",bss:"akoose",bua:"burjaadi",bug:"bugi",bum:"bulu",byn:"bilini",byv:"medumba",ca:"katalaani",cad:"kado",car:"kariibi",cay:"kajuka",cch:"aitšami",ccp:"tšaakma",ce:"tšetšeeni",ceb:"sebu",cgg:"tšiga",ch:"tšamorro",chb:"tšibtša",chg:"tšagatai",chk:"tšuugi",chm:"mari",chn:"tšinuki žargoon",cho:"tšokto",chp:"tšipevai",chr:"tšerokii",chy:"šaieeni",ckb:"sorani",co:"korsika",cop:"kopti",cps:"kapisnoni",cr:"krii",crh:"krimmitatari",crs:"seišelli",cs:"tšehhi",csb:"kašuubi",cu:"kirikuslaavi",cv:"tšuvaši",cy:"kõmri",da:"taani",dak:"siuu",dar:"dargi",dav:"davida",de:"saksa","de-AT":"Austria saksa","de-CH":"Šveitsi ülemsaksa",del:"delavari",den:"sleivi",dgr:"dogribi",din:"dinka",dje:"zarma",doi:"dogri",dsb:"alamsorbi",dtp:"keskdusuni",dua:"duala",dum:"keskhollandi",dv:"maldiivi",dyo:"fonji",dyu:"djula",dz:"dzongkha",dzg:"daza",ebu:"embu",ee:"eve",efi:"efiki",egl:"emiilia",egy:"egiptuse",eka:"ekadžuki",el:"kreeka",elx:"eelami",en:"inglise","en-AU":"Austraalia inglise","en-CA":"Kanada inglise","en-GB":"Briti inglise","en-US":"Ameerika inglise",enm:"keskinglise",eo:"esperanto",es:"hispaania","es-419":"Ladina-Ameerika hispaania","es-ES":"Euroopa hispaania","es-MX":"Mehhiko hispaania",esu:"keskjupiki",et:"eesti",eu:"baski",ewo:"evondo",ext:"estremenju",fa:"pärsia",fan:"fangi",fat:"fanti",ff:"fula",fi:"soome",fil:"filipiini",fit:"meä",fj:"fidži",fo:"fääri",fon:"foni",fr:"prantsuse","fr-CA":"Kanada prantsuse","fr-CH":"Šveitsi prantsuse",frc:"cajun’i",frm:"keskprantsuse",fro:"vanaprantsuse",frp:"frankoprovansi",frr:"põhjafriisi",frs:"idafriisi",fur:"friuuli",fy:"läänefriisi",ga:"iiri",gag:"gagauusi",gan:"kani",gay:"gajo",gba:"gbaja",gd:"gaeli",gez:"etioopia",gil:"kiribati",gl:"galeegi",glk:"gilaki",gmh:"keskülemsaksa",gn:"guaranii",goh:"vanaülemsaksa",gon:"gondi",gor:"gorontalo",got:"gooti",grb:"grebo",grc:"vanakreeka",gsw:"šveitsisaksa",gu:"gudžarati",guc:"vajuu",gur:"farefare",guz:"gusii",gv:"mänksi",gwi:"gvitšini",ha:"hausa",hai:"haida",hak:"hakka",haw:"havai",he:"heebrea",hi:"hindi",hif:"Fidži hindi",hil:"hiligainoni",hit:"heti",hmn:"hmongi",ho:"hirimotu",hr:"horvaadi",hsb:"ülemsorbi",hsn:"sjangi",ht:"haiti",hu:"ungari",hup:"hupa",hy:"armeenia",hz:"herero",ia:"interlingua",iba:"ibani",ibb:"ibibio",id:"indoneesia",ie:"interlingue",ig:"ibo",ii:"nuosu",ik:"injupiaki",ilo:"iloko",inh:"inguši",io:"ido",is:"islandi",it:"itaalia",iu:"inuktituti",izh:"isuri",ja:"jaapani",jam:"Jamaica kreoolkeel",jbo:"ložban",jgo:"ngomba",jmc:"matšame",jpr:"juudipärsia",jrb:"juudiaraabia",jut:"jüüti",jv:"jaava",ka:"gruusia",kaa:"karakalpaki",kab:"kabiili",kac:"katšini",kaj:"jju",kam:"kamba",kaw:"kaavi",kbd:"kabardi-tšerkessi",kbl:"kanembu",kcg:"tjapi",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"kongo",kgp:"kaingangi",kha:"khasi",kho:"saka",khq:"koyra chiini",khw:"khovari",ki:"kikuju",kiu:"kõrmandžki",kj:"kvanjama",kk:"kasahhi",kkj:"kako",kl:"grööni",kln:"kalendžini",km:"khmeeri",kmb:"mbundu",kn:"kannada",ko:"korea",koi:"permikomi",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karatšai-balkaari",kri:"krio",krj:"kinaraia",krl:"karjala",kru:"kuruhhi",ks:"kašmiiri",ksb:"šambala",ksf:"bafia",ksh:"kölni",ku:"kurdi",kum:"kumõki",kut:"kutenai",kv:"komi",kw:"korni",ky:"kirgiisi",la:"ladina",lad:"ladiino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"letseburgi",lez:"lesgi",lg:"ganda",li:"limburgi",lij:"liguuri",liv:"liivi",lkt:"lakota",lmo:"lombardi",ln:"lingala",lo:"lao",lol:"mongo",lou:"Louisiana kreoolkeel",loz:"lozi",lrc:"põhjaluri",lt:"leedu",ltg:"latgali",lu:"Katanga luba",lua:"lulua",lui:"luisenjo",lun:"lunda",lus:"lušei",luy:"luhja",lv:"läti",lzh:"klassikaline hiina",lzz:"lazi",mad:"madura",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassari",man:"malinke",mas:"masai",mde:"maba",mdf:"mokša",mdr:"mandari",men:"mende",mer:"meru",mfe:"Mauritiuse kreoolkeel",mg:"malagassi",mga:"keskiiri",mgh:"makhuwa-meetto",mgo:"meta",mh:"maršalli",mi:"maoori",mic:"mikmaki",min:"minangkabau",mk:"makedoonia",ml:"malajalami",mn:"mongoli",mnc:"mandžu",mni:"manipuri",moh:"mohoogi",mos:"more",mr:"marathi",mrj:"mäemari",ms:"malai",mt:"malta",mua:"mundangi",mus:"maskogi",mwl:"miranda",mwr:"marvari",mwv:"mentavei",my:"birma",mye:"mjene",myv:"ersa",mzn:"mazandaraani",na:"nauru",nan:"lõunamini",nap:"napoli",naq:"nama",nb:"norra bokmål",nd:"põhjandebele",nds:"alamsaksa","nds-NL":"Hollandi alamsaksa",ne:"nepali","new":"nevari",ng:"ndonga",nia:"niasi",niu:"niue",njo:"ao",nl:"hollandi","nl-BE":"flaami",nmg:"kwasio",nn:"uusnorra",nnh:"ngiembooni",no:"norra",nog:"nogai",non:"vanapõhjala",nov:"noviaal",nqo:"nkoo",nr:"lõunandebele",nso:"põhjasotho",nus:"nueri",nv:"navaho",nwc:"vananevari",ny:"njandža",nym:"njamvesi",nyn:"njankole",nyo:"njoro",nzi:"nzima",oc:"oksitaani",oj:"odžibvei",om:"oromo",or:"oria",os:"osseedi",osa:"oseidži",ota:"osmanitürgi",pa:"pandžabi",pag:"pangasinani",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"belau",pcd:"pikardi",pcm:"Nigeeria pidžinkeel",pdc:"Pennsylvania saksa",pdt:"mennoniidisaksa",peo:"vanapärsia",pfl:"Pfalzi",phn:"foiniikia",pi:"paali",pl:"poola",pms:"piemonte",pnt:"pontose",pon:"poonpei",prg:"preisi",pro:"vanaprovansi",ps:"puštu",pt:"portugali","pt-BR":"Brasiilia portugali","pt-PT":"Euroopa portugali",qu:"ketšua",quc:"kitše",raj:"radžastani",rap:"rapanui",rar:"rarotonga",rgn:"romanja",rif:"riifi",rm:"romanši",rn:"rundi",ro:"rumeenia","ro-MD":"moldova",rof:"rombo",rom:"mustlaskeel",rtm:"rotuma",ru:"vene",rue:"russiini",rug:"roviana",rup:"aromuuni",rw:"ruanda",rwk:"rvaa",sa:"sanskriti",sad:"sandave",sah:"jakuudi",sam:"Samaaria aramea",saq:"samburu",sas:"sasaki",sat:"santali",saz:"sauraštra",sba:"ngambai",sbp:"sangu",sc:"sardi",scn:"sitsiilia",sco:"šoti",sd:"sindhi",sdh:"lõunakurdi",se:"põhjasaami",see:"seneka",seh:"sena",sei:"seri",sel:"sölkupi",ses:"koyraboro senni",sg:"sango",sga:"vanaiiri",sgs:"žemaidi",sh:"serbia-horvaadi",shi:"šilha",shn:"šani",shu:"Tšaadi araabia",si:"singali",sid:"sidamo",sk:"slovaki",sl:"sloveeni",sli:"alamsileesia",sly:"selajari",sm:"samoa",sma:"lõunasaami",smj:"Lule saami",smn:"Inari saami",sms:"koltasaami",sn:"šona",snk:"soninke",so:"somaali",sog:"sogdi",sq:"albaania",sr:"serbia",srn:"sranani",srr:"sereri",ss:"svaasi",ssy:"saho",st:"lõunasotho",stq:"saterfriisi",su:"sunda",suk:"sukuma",sus:"susu",sux:"sumeri",sv:"rootsi",sw:"suahiili","sw-CD":"Kongo suahiili",swb:"komoori",syc:"vanasüüria",syr:"süüria",szl:"sileesia",ta:"tamili",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetumi",tg:"tadžiki",th:"tai",ti:"tigrinja",tig:"tigree",tiv:"tivi",tk:"türkmeeni",tkl:"tokelau",tkr:"tsahhi",tl:"tagalogi",tlh:"klingoni",tli:"tlingiti",tly:"talõši",tmh:"tamašeki",tn:"tsvana",to:"tonga",tog:"tšitonga",tpi:"uusmelaneesia",tr:"türgi",tru:"turojo",trv:"taroko",ts:"tsonga",tsd:"tsakoonia",tsi:"tšimši",tt:"tatari",ttt:"lõunataadi",tum:"tumbuka",tvl:"tuvalu",tw:"tvii",twq:"taswaqi",ty:"tahiti",tyv:"tõva",tzm:"tamasikti",udm:"udmurdi",ug:"uiguuri",uga:"ugariti",uk:"ukraina",umb:"umbundu",ur:"urdu",uz:"usbeki",ve:"venda",vec:"veneti",vep:"vepsa",vi:"vietnami",vls:"lääneflaami",vmf:"Maini frangi",vo:"volapüki",vot:"vadja",vro:"võru",vun:"vundžo",wa:"vallooni",wae:"valsi",wal:"volaita",war:"varai",was:"vašo",wbp:"varlpiri",wo:"volofi",wuu:"uu",xal:"kalmõki",xh:"koosa",xmf:"megreli",xog:"soga",yao:"jao",yap:"japi",yav:"yangbeni",ybb:"jemba",yi:"jidiši",yo:"joruba",yrl:"njengatu",yue:"kantoni",za:"tšuangi",zap:"sapoteegi",zbl:"Blissi sümbolid",zea:"zeelandi",zen:"zenaga",zgh:"tamasikti (Maroko)",zh:"hiina","zh-Hans":"lihtsustatud mandariinihiina","zh-Hant":"traditsiooniline mandariinihiina",zu:"suulu",zun:"sunji",zza:"zaza"},scriptNames:{Cyrl:"kirillitsa",Latn:"ladina",Arab:"araabia",Guru:"gurmukhi",Tfng:"tifinagi",Vaii:"vai",Hans:"lihtsustatud",Hant:"traditsiooniline"}},eu:{rtl:false,languageNames:{aa:"afarera",ab:"abkhaziera",ace:"acehnera",ach:"acholiera",ada:"adangmera",ady:"adigera",af:"afrikaans",agq:"aghemera",ain:"ainuera",ak:"akanera",ale:"aleutera",alt:"hegoaldeko altaiera",am:"amharera",an:"aragoiera",anp:"angikera",ar:"arabiera","ar-001":"arabiera moderno estandarra",arn:"maputxe",arp:"arapaho",as:"assamera",asa:"asu",ast:"asturiera",av:"avarera",awa:"awadhiera",ay:"aimara",az:"azerbaijanera",ba:"baxkirera",ban:"baliera",bas:"basaa",be:"bielorrusiera",bem:"bembera",bez:"benera",bg:"bulgariera",bho:"bhojpurera",bi:"bislama",bin:"edoera",bla:"siksikera",bm:"bambarera",bn:"bengalera",bo:"tibetera",br:"bretoiera",brx:"bodoera",bs:"bosniera",bug:"buginera",byn:"bilena",ca:"katalan",ccp:"chakmera",ce:"txetxenera",ceb:"cebuera",cgg:"chigera",ch:"chamorrera",chk:"chuukera",chm:"mariera",cho:"choctaw",chr:"txerokiera",chy:"cheyennera",ckb:"erdialdeko kurduera",co:"korsikera",crs:"Seychelleetako kreolera",cs:"txekiera",cu:"elizako eslaviera",cv:"txuvaxera",cy:"gales",da:"daniera",dak:"dakotera",dar:"dargvera",dav:"taitera",de:"aleman","de-AT":"Austriako aleman","de-CH":"Suitzako aleman garai",dgr:"dogribera",dje:"zarma",dsb:"behe-sorabiera",dua:"dualera",dv:"divehiera",dyo:"fonyi jolera",dz:"dzongkha",dzg:"dazaga",ebu:"embua",ee:"eweera",efi:"efikera",eka:"akajuka",el:"greziera",en:"ingeles","en-AU":"Australiako ingeles","en-CA":"Kanadako ingeles","en-GB":"Britania Handiko ingeles","en-US":"AEBko ingeles",eo:"esperanto",es:"espainiera","es-419":"Latinoamerikako espainiera","es-ES":"espainiera (Europa)","es-MX":"Mexikoko espainiera",et:"estoniera",eu:"euskara",ewo:"ewondera",fa:"persiera",ff:"fula",fi:"finlandiera",fil:"filipinera",fj:"fijiera",fo:"faroera",fon:"fona",fr:"frantses","fr-CA":"Kanadako frantses","fr-CH":"Suitzako frantses",fur:"friuliera",fy:"frisiera",ga:"irlandera",gaa:"ga",gag:"gagauzera",gd:"Eskoziako gaeliko",gez:"ge’ez",gil:"gilbertera",gl:"galiziera",gn:"guaraniera",gor:"gorontaloa",gsw:"Suitzako aleman",gu:"gujaratera",guz:"gusiiera",gv:"manxera",gwi:"gwichʼin",ha:"hausa",haw:"hawaiiera",he:"hebreera",hi:"hindi",hil:"hiligainon",hmn:"hmong",hr:"kroaziera",hsb:"goi-sorabiera",ht:"Haitiko kreolera",hu:"hungariera",hup:"hupera",hy:"armeniera",hz:"hereroera",ia:"interlingua",iba:"ibanera",ibb:"ibibioera",id:"indonesiera",ie:"interlingue",ig:"igboera",ii:"Sichuango yiera",ilo:"ilokanera",inh:"ingushera",io:"ido",is:"islandiera",it:"italiera",iu:"inuktitut",ja:"japoniera",jbo:"lojbanera",jgo:"ngomba",jmc:"machame",jv:"javera",ka:"georgiera",kab:"kabilera",kac:"jingpoera",kaj:"kaiji",kam:"kambera",kbd:"kabardiera",kcg:"kataba",kde:"makondeera",kea:"Cabo Verdeko kreolera",kfo:"koroa",kg:"kikongoa",kha:"kashia",khq:"koyra chiini",ki:"kikuyuera",kj:"kuanyama",kk:"kazakhera",kkj:"kako",kl:"groenlandiera",kln:"kalenjinera",km:"khemerera",kmb:"kimbundua",kn:"kannada",ko:"koreera",koi:"komi-permyakera",kok:"konkanera",kpe:"kpellea",kr:"kanuriera",krc:"karachayera-balkarera",krl:"kareliera",kru:"kurukhera",ks:"kaxmirera",ksb:"shambalera",ksf:"bafiera",ksh:"koloniera",ku:"kurduera",kum:"kumykera",kv:"komiera",kw:"kornubiera",ky:"kirgizera",la:"latin",lad:"ladino",lag:"langiera",lb:"luxenburgera",lez:"lezgiera",lg:"gandera",li:"limburgera",lkt:"lakotera",ln:"lingala",lo:"laosera",loz:"loziera",lrc:"iparraldeko lurera",lt:"lituaniera",lu:"Katangako lubera",lua:"txilubera",lun:"lundera",luo:"luoera",lus:"mizoa",luy:"luhyera",lv:"letoniera",mad:"madurera",mag:"magahiera",mai:"maithilera",mak:"makasarera",mas:"masaiera",mdf:"mokxera",men:"mendeera",mer:"meruera",mfe:"Mauritaniako kreolera",mg:"malgaxe",mgh:"makhuwa-meettoera",mgo:"metaʼera",mh:"marshallera",mi:"maoriera",mic:"mikmakera",min:"minangkabauera",mk:"mazedoniera",ml:"malabarera",mn:"mongoliera",mni:"manipurera",moh:"mohawkera",mos:"moreera",mr:"marathera",ms:"malaysiera",mt:"maltera",mua:"mudangera",mus:"creera",mwl:"mirandera",my:"birmaniera",myv:"erziera",mzn:"mazandarandera",na:"nauruera",nap:"napoliera",naq:"namera",nb:"bokmål (norvegiera)",nd:"iparraldeko ndebeleera",nds:"behe-aleman","nds-NL":"behe-saxoiera",ne:"nepalera","new":"newarera",ng:"ndongera",nia:"niasera",niu:"niueera",nl:"nederlandera","nl-BE":"flandriera",nmg:"kwasiera",nn:"nynorsk (norvegiera)",nnh:"ngiemboonera",no:"norvegiera",nog:"nogaiera",nqo:"n’koera",nr:"hegoaldeko ndebelera",nso:"pediera",nus:"nuerera",nv:"navajoera",ny:"chewera",nyn:"ankolera",oc:"okzitaniera",om:"oromoera",or:"oriya",os:"osetiera",pa:"punjabera",pag:"pangasinanera",pam:"pampangera",pap:"papiamento",pau:"palauera",pcm:"Nigeriako pidgina",pl:"poloniera",prg:"prusiera",ps:"paxtuera",pt:"portuges","pt-BR":"Brasilgo portuges","pt-PT":"Europako portuges",qu:"kitxua",quc:"quicheera",rap:"rapa nui",rar:"rarotongera",rm:"erretorromaniera",rn:"rundiera",ro:"errumaniera","ro-MD":"moldaviera",rof:"rombo",root:"erroa",ru:"errusiera",rup:"aromaniera",rw:"kinyaruanda",rwk:"rwera",sa:"sanskrito",sad:"sandaweera",sah:"sakhera",saq:"samburuera",sat:"santalera",sba:"ngambayera",sbp:"sanguera",sc:"sardiniera",scn:"siziliera",sco:"eskoziera",sd:"sindhi",se:"iparraldeko samiera",seh:"senera",ses:"koyraboro senni",sg:"sango",sh:"serbokroaziera",shi:"tachelhit",shn:"shanera",si:"sinhala",sk:"eslovakiera",sl:"esloveniera",sm:"samoera",sma:"hegoaldeko samiera",smj:"Luleko samiera",smn:"Inariko samiera",sms:"skolten samiera",sn:"shonera",snk:"soninkera",so:"somaliera",sq:"albaniera",sr:"serbiera",srn:"srananera",ss:"swatiera",ssy:"sahoa",st:"hegoaldeko sothoera",su:"sundanera",suk:"sukumera",sv:"suediera",sw:"swahilia","sw-CD":"Kongoko swahilia",swb:"komoreera",syr:"asiriera",ta:"tamilera",te:"telugu",tem:"temnea",teo:"tesoera",tet:"tetum",tg:"tajikera",th:"thailandiera",ti:"tigrinyera",tig:"tigrea",tk:"turkmenera",tl:"tagalog",tlh:"klingonera",tn:"tswanera",to:"tongera",tpi:"tok pisin",tr:"turkiera",trv:"tarokoa",ts:"tsongera",tt:"tatarera",tum:"tumbukera",tvl:"tuvaluera",tw:"twia",twq:"tasawaq",ty:"tahitiera",tyv:"tuvera",tzm:"Erdialdeko Atlaseko amazigera",udm:"udmurtera",ug:"uigurrera",uk:"ukrainera",umb:"umbundu",ur:"urdu",uz:"uzbekera",vai:"vaiera",ve:"vendera",vi:"vietnamera",vo:"volapük",vun:"vunjo",wa:"waloiera",wae:"walserera",wal:"welayta",war:"samerera",wo:"wolofera",xal:"kalmykera",xh:"xhosera",xog:"sogera",yav:"yangbenera",ybb:"yemba",yi:"yiddish",yo:"jorubera",yue:"kantonera",zgh:"amazigera estandarra",zh:"txinera","zh-Hans":"mandarin sinplifikatu","zh-Hant":"mandarin tradizional",zu:"zuluera",zun:"zuñia",zza:"zazera"},scriptNames:{Cyrl:"zirilikoa",Latn:"latinoa",Arab:"arabiarra",Guru:"gurmukhia",Hans:"sinplifikatua",Hant:"tradizionala"}},fa:{rtl:true,languageNames:{aa:"آفاری",ab:"آبخازی",ace:"آچئی",ach:"آچولیایی",ada:"آدانگمه‌ای",ady:"آدیجیایی",ae:"اوستایی",aeb:"عربی تونسی",af:"آفریکانس",afh:"آفریهیلی",agq:"آگیم",ain:"آینویی",ak:"آکان",akk:"اکدی",akz:"آلابامایی",ale:"آلئوتی",alt:"آلتایی جنوبی",am:"امهری",an:"آراگونی",ang:"انگلیسی باستان",anp:"آنگیکا",ar:"عربی","ar-001":"عربی رسمی",arc:"آرامی",arn:"ماپوچه‌ای",arp:"آراپاهویی",arq:"عربی الجزایری",arw:"آراواکی",ary:"عربی مراکشی",arz:"عربی مصری",as:"آسامی",asa:"آسو",ast:"آستوری",av:"آواری",awa:"اودهی",ay:"آیمارایی",az:"ترکی آذربایجانی","az-Arab":"ترکی آذری جنوبی",ba:"باشقیری",bal:"بلوچی",ban:"بالیایی",bar:"باواریایی",bas:"باسایی",bax:"بمونی",be:"بلاروسی",bej:"بجایی",bem:"بمبایی",bez:"بنایی",bg:"بلغاری",bgn:"بلوچی غربی",bho:"بوجپوری",bi:"بیسلاما",bik:"بیکولی",bin:"بینی",bla:"سیکسیکا",bm:"بامبارایی",bn:"بنگالی",bo:"تبتی",bqi:"لری بختیاری",br:"برتون",bra:"براج",brh:"براهویی",brx:"بودویی",bs:"بوسنیایی",bua:"بوریاتی",bug:"بوگیایی",byn:"بلین",ca:"کاتالان",cad:"کادویی",car:"کاریبی",ccp:"چاکما",ce:"چچنی",ceb:"سبویی",cgg:"چیگا",ch:"چامورویی",chb:"چیبچا",chg:"جغتایی",chk:"چوکی",chm:"ماریایی",cho:"چوکتویی",chp:"چیپه‌ویه‌ای",chr:"چروکیایی",chy:"شایانی",ckb:"کردی مرکزی",co:"کورسی",cop:"قبطی",cr:"کریایی",crh:"ترکی کریمه",crs:"سیشل آمیختهٔ فرانسوی",cs:"چکی",csb:"کاشوبی",cu:"اسلاوی کلیسایی",cv:"چوواشی",cy:"ولزی",da:"دانمارکی",dak:"داکوتایی",dar:"دارقینی",dav:"تایتا",de:"آلمانی","de-AT":"آلمانی اتریش","de-CH":"آلمانی معیار سوئیس",del:"دلاواری",dgr:"دوگریب",din:"دینکایی",dje:"زرما",doi:"دوگری",dsb:"صُربی سفلی",dua:"دوآلایی",dum:"هلندی میانه",dv:"دیوهی",dyo:"دیولا فونی",dyu:"دایولایی",dz:"دزونگخا",dzg:"دازاگایی",ebu:"امبو",ee:"اوه‌ای",efi:"افیکی",egy:"مصری کهن",eka:"اکاجوک",el:"یونانی",elx:"عیلامی",en:"انگلیسی","en-AU":"انگلیسی استرالیا","en-CA":"انگلیسی کانادا","en-GB":"انگلیسی بریتانیا","en-US":"انگلیسی امریکا",enm:"انگلیسی میانه",eo:"اسپرانتو",es:"اسپانیایی","es-419":"اسپانیایی امریکای لاتین","es-ES":"اسپانیایی اروپا","es-MX":"اسپانیایی مکزیک",et:"استونیایی",eu:"باسکی",ewo:"اواندو",fa:"فارسی","fa-AF":"دری",fan:"فانگی",fat:"فانتیایی",ff:"فولانی",fi:"فنلاندی",fil:"فیلیپینی",fj:"فیجیایی",fo:"فارویی",fon:"فونی",fr:"فرانسوی","fr-CA":"فرانسوی کانادا","fr-CH":"فرانسوی سوئیس",frc:"فرانسوی کادین",frm:"فرانسوی میانه",fro:"فرانسوی باستان",frr:"فریزی شمالی",frs:"فریزی شرقی",fur:"فریولیایی",fy:"فریزی غربی",ga:"ایرلندی",gaa:"گایی",gag:"گاگائوزیایی",gay:"گایویی",gba:"گبایایی",gbz:"دری زرتشتی",gd:"گیلی اسکاتلندی",gez:"گی‌ئزی",gil:"گیلبرتی",gl:"گالیسیایی",glk:"گیلکی",gmh:"آلمانی معیار میانه",gn:"گوارانی",goh:"آلمانی علیای باستان",gon:"گوندی",gor:"گورونتالو",got:"گوتی",grb:"گریبویی",grc:"یونانی کهن",gsw:"آلمانی سوئیسی",gu:"گجراتی",guz:"گوسی",gv:"مانی",gwi:"گویچ این",ha:"هوسیایی",hai:"هایدایی",haw:"هاوائیایی",he:"عبری",hi:"هندی",hif:"هندی فیجیایی",hil:"هیلی‌گاینونی",hit:"هیتی",hmn:"همونگ",ho:"موتویی هیری",hr:"کروات",hsb:"صُربی علیا",ht:"هائیتیایی",hu:"مجاری",hup:"هوپا",hy:"ارمنی",hz:"هریرویی",ia:"میان‌زبان",iba:"ایبانی",ibb:"ایبیبیو",id:"اندونزیایی",ie:"اکسیدنتال",ig:"ایگبویی",ii:"یی سیچوان",ik:"اینوپیک",ilo:"ایلوکویی",inh:"اینگوشی",io:"ایدو",is:"ایسلندی",it:"ایتالیایی",iu:"اینوکتیتوت",ja:"ژاپنی",jbo:"لوجبان",jgo:"نگومبا",jmc:"ماچامه‌ای",jpr:"فارسی یهودی",jrb:"عربی یهودی",jv:"جاوه‌ای",ka:"گرجی",kaa:"قره‌قالپاقی",kab:"قبایلی",kac:"کاچینی",kaj:"جو",kam:"کامبایی",kaw:"کاویایی",kbd:"کاباردینی",kcg:"تیاپی",kde:"ماکونده",kea:"کابووردیانو",kfo:"کورو",kg:"کنگویی",kha:"خاسیایی",kho:"ختنی",khq:"کوجراچینی",khw:"کهوار",ki:"کیکویویی",kiu:"کرمانجی",kj:"کوانیاما",kk:"قزاقی",kkj:"کاکایی",kl:"گرینلندی",kln:"کالنجین",km:"خمری",kmb:"کیمبوندویی",kn:"کانارا",ko:"کره‌ای",koi:"کومی پرمیاک",kok:"کنکانی",kpe:"کپله‌ای",kr:"کانوریایی",krc:"قره‌چایی‐بالکاری",krl:"کاریلیانی",kru:"کوروخی",ks:"کشمیری",ksb:"شامبالا",ksf:"بافیایی",ksh:"ریپواری",ku:"کردی",kum:"کومیکی",kut:"کوتنی",kv:"کومیایی",kw:"کرنوالی",ky:"قرقیزی",la:"لاتین",lad:"لادینو",lag:"لانگی",lah:"لاهندا",lam:"لامبا",lb:"لوگزامبورگی",lez:"لزگی",lg:"گاندایی",li:"لیمبورگی",lkt:"لاکوتا",ln:"لینگالا",lo:"لائوسی",lol:"مونگویی",lou:"زبان آمیختهٔ مادری لوئیزیانا",loz:"لوزیایی",lrc:"لری شمالی",lt:"لیتوانیایی",lu:"لوبایی‐کاتانگا",lua:"لوبایی‐لولوا",lui:"لویسنو",lun:"لوندایی",luo:"لوئویی",lus:"لوشه‌ای",luy:"لویا",lv:"لتونیایی",lzh:"چینی ادبی",mad:"مادورایی",mag:"ماگاهیایی",mai:"مایدیلی",mak:"ماکاسار",man:"ماندینگویی",mas:"ماسایی",mdf:"مکشایی",mdr:"ماندار",men:"منده‌ای",mer:"مرویی",mfe:"موریسین",mg:"مالاگاسیایی",mga:"ایرلندی میانه",mgh:"ماکوا متو",mgo:"متایی",mh:"مارشالی",mi:"مائوریایی",mic:"میکماکی",min:"مینانگ‌کابویی",mk:"مقدونی",ml:"مالایالامی",mn:"مغولی",mnc:"مانچویی",mni:"میته‌ای",moh:"موهاکی",mos:"ماسیایی",mr:"مراتی",ms:"مالایی",mt:"مالتی",mua:"ماندانگی",mus:"کریکی",mwl:"میراندی",mwr:"مارواری",my:"برمه‌ای",myv:"ارزیایی",mzn:"مازندرانی",na:"نائورویی",nap:"ناپلی",naq:"نامایی",nb:"نروژی بوک‌مُل",nd:"انده‌بله‌ای شمالی",nds:"آلمانی سفلی","nds-NL":"ساکسونی سفلی",ne:"نپالی","new":"نواریایی",ng:"اندونگایی",nia:"نیاسی",niu:"نیویی",nl:"هلندی","nl-BE":"فلمنگی",nmg:"کوازیو",nn:"نروژی نی‌نُشک",nnh:"نیامبون",no:"نروژی",nog:"نغایی",non:"نرس باستان",nqo:"نکو",nr:"انده‌بله‌ای جنوبی",nso:"سوتویی شمالی",nus:"نویر",nv:"ناواهویی",nwc:"نواریایی کلاسیک",ny:"نیانجایی",nym:"نیام‌وزیایی",nyn:"نیانکوله‌ای",nyo:"نیورویی",nzi:"نزیمایی",oc:"اکسیتان",oj:"اوجیبوایی",om:"اورومویی",or:"اوریه‌ای",os:"آسی",osa:"اوسیجی",ota:"ترکی عثمانی",pa:"پنجابی",pag:"پانگاسینانی",pal:"پهلوی",pam:"پامپانگایی",pap:"پاپیامنتو",pau:"پالائویی",pcm:"نیم‌زبان نیجریه‌ای",pdc:"آلمانی پنسیلوانیایی",peo:"فارسی باستان",phn:"فنیقی",pi:"پالی",pl:"لهستانی",pon:"پانپیی",prg:"پروسی",pro:"پرووانسی باستان",ps:"پشتو",pt:"پرتغالی","pt-BR":"پرتغالی برزیل","pt-PT":"پرتغالی اروپا",qu:"کچوایی",quc:"کیچه‌",raj:"راجستانی",rap:"راپانویی",rar:"راروتونگایی",rm:"رومانش",rn:"روندیایی",ro:"رومانیایی","ro-MD":"مولداویایی",rof:"رومبویی",rom:"رومانویی",root:"ریشه",ru:"روسی",rup:"آرومانی",rw:"کینیارواندایی",rwk:"روایی",sa:"سانسکریت",sad:"سانداوه‌ای",sah:"یاقوتی",sam:"آرامی سامری",saq:"سامبورو",sas:"ساساکی",sat:"سانتالی",sba:"انگامبایی",sbp:"سانگویی",sc:"ساردینیایی",scn:"سیسیلی",sco:"اسکاتلندی",sd:"سندی",sdh:"کردی جنوبی",se:"سامی شمالی",seh:"سنا",sel:"سلکوپی",ses:"کویرابورا سنی",sg:"سانگو",sga:"ایرلندی باستان",sh:"صرب و کرواتی",shi:"تاچل‌هیت",shn:"شانی",shu:"عربی چادی",si:"سینهالی",sid:"سیدامویی",sk:"اسلواکی",sl:"اسلوونیایی",sli:"سیلزیایی سفلی",sm:"ساموآیی",sma:"سامی جنوبی",smj:"لوله سامی",smn:"ایناری سامی",sms:"اسکولت سامی",sn:"شونایی",snk:"سونینکه‌ای",so:"سومالیایی",sog:"سغدی",sq:"آلبانیایی",sr:"صربی",srn:"تاکی‌تاکی",srr:"سریری",ss:"سوازیایی",ssy:"ساهو",st:"سوتویی جنوبی",su:"سوندایی",suk:"سوکومایی",sus:"سوسویی",sux:"سومری",sv:"سوئدی",sw:"سواحیلی","sw-CD":"سواحیلی کنگو",swb:"کوموری",syc:"سریانی کلاسیک",syr:"سریانی",szl:"سیلزیایی",ta:"تامیلی",te:"تلوگویی",tem:"تمنه‌ای",teo:"تسویی",ter:"ترنو",tet:"تتومی",tg:"تاجیکی",th:"تایلندی",ti:"تیگرینیایی",tig:"تیگره‌ای",tiv:"تیوی",tk:"ترکمنی",tl:"تاگالوگی",tlh:"کلینگون",tli:"تلین‌گیتی",tmh:"تاماشقی",tn:"تسوانایی",to:"تونگایی",tog:"تونگایی نیاسا",tpi:"توک‌پیسینی",tr:"ترکی استانبولی",trv:"تاروکویی",ts:"تسونگایی",tsi:"تسیم‌شیانی",tt:"تاتاری",tum:"تومبوکایی",tvl:"تووالویی",tw:"توی‌یایی",twq:"تسواکی",ty:"تاهیتیایی",tyv:"تووایی",tzm:"آمازیغی اطلس مرکزی",udm:"اودمورتی",ug:"اویغوری",uga:"اوگاریتی",uk:"اوکراینی",umb:"امبوندویی",ur:"اردو",uz:"ازبکی",vai:"ویایی",ve:"وندایی",vi:"ویتنامی",vo:"ولاپوک",vot:"وتی",vun:"ونجو",wa:"والونی",wae:"والسر",wal:"والامو",war:"وارایی",was:"واشویی",wbp:"وارلپیری",wo:"ولوفی",xal:"قلموقی",xh:"خوسایی",xog:"سوگایی",yao:"یائویی",yap:"یاپی",yav:"یانگبنی",ybb:"یمبایی",yi:"یدی",yo:"یوروبایی",yue:"کانتونی",za:"چوانگی",zap:"زاپوتکی",zen:"زناگا",zgh:"آمازیغی معیار مراکش",zh:"چینی","zh-Hans":"چینی ماندارین ساده‌شده","zh-Hant":"چینی ماندارین سنتی",zu:"زولویی",zun:"زونیایی",zza:"زازایی"},scriptNames:{Cyrl:"سیریلی",Latn:"لاتینی",Arab:"عربی",Guru:"گورومخی",Tfng:"تیفیناغی",Vaii:"ویایی",Hans:"ساده‌شده",Hant:"سنتی"}},fi:{rtl:false,languageNames:{aa:"afar",ab:"abhaasi",ace:"atšeh",ach:"atšoli",ada:"adangme",ady:"adyge",ae:"avesta",aeb:"tunisianarabia",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadi",akz:"alabama",ale:"aleutti",aln:"gegi",alt:"altai",am:"amhara",an:"aragonia",ang:"muinaisenglanti",anp:"angika",ar:"arabia","ar-001":"yleisarabia",arc:"valtakunnanaramea",arn:"mapudungun",aro:"araona",arp:"arapaho",arq:"algerianarabia",ars:"arabia – najd",arw:"arawak",ary:"marokonarabia",arz:"egyptinarabia",as:"assami",asa:"asu",ase:"amerikkalainen viittomakieli",ast:"asturia",av:"avaari",avk:"kotava",awa:"awadhi",ay:"aimara",az:"azeri",ba:"baškiiri",bal:"belutši",ban:"bali",bar:"baijeri",bas:"basaa",bax:"bamum",bbc:"batak-toba",bbj:"ghomala",be:"valkovenäjä",bej:"bedža",bem:"bemba",bew:"betawi",bez:"bena",bfd:"fut",bfq:"badaga",bg:"bulgaria",bgn:"länsibelutši",bho:"bhodžpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tiibet",bpy:"bišnupria",bqi:"bahtiari",br:"bretoni",bra:"bradž",brh:"brahui",brx:"bodo",bs:"bosnia",bss:"koose",bua:"burjaatti",bug:"bugi",bum:"bulu",byn:"bilin",byv:"medumba",ca:"katalaani",cad:"caddo",car:"karibi",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"tšetšeeni",ceb:"cebuano",cgg:"kiga",ch:"tšamorro",chb:"tšibtša",chg:"tšagatai",chk:"chuuk",chm:"mari",chn:"chinook-jargon",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"korsika",cop:"kopti",cps:"capiznon",cr:"cree",crh:"krimintataari",crs:"seychellienkreoli",cs:"tšekki",csb:"kašubi",cu:"kirkkoslaavi",cv:"tšuvassi",cy:"kymri",da:"tanska",dak:"dakota",dar:"dargi",dav:"taita",de:"saksa","de-AT":"itävallansaksa","de-CH":"sveitsinyläsaksa",del:"delaware",den:"slevi",dgr:"dogrib",din:"dinka",dje:"djerma",doi:"dogri",dsb:"alasorbi",dtp:"dusun",dua:"duala",dum:"keskihollanti",dv:"divehi",dyo:"jola-fonyi",dyu:"djula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emilia",egy:"muinaisegypti",eka:"ekajuk",el:"kreikka",elx:"elami",en:"englanti","en-AU":"australianenglanti","en-CA":"kanadanenglanti","en-GB":"britannianenglanti","en-US":"amerikanenglanti",enm:"keskienglanti",eo:"esperanto",es:"espanja","es-419":"amerikanespanja","es-ES":"euroopanespanja","es-MX":"meksikonespanja",esu:"alaskanjupik",et:"viro",eu:"baski",ewo:"ewondo",ext:"extremadura",fa:"persia",fan:"fang",fat:"fanti",ff:"fulani",fi:"suomi",fil:"filipino",fit:"meänkieli",fj:"fidži",fo:"fääri",fr:"ranska","fr-CA":"kanadanranska","fr-CH":"sveitsinranska",frc:"cajunranska",frm:"keskiranska",fro:"muinaisranska",frp:"arpitaani",frr:"pohjoisfriisi",frs:"itäfriisi",fur:"friuli",fy:"länsifriisi",ga:"iiri",gaa:"ga",gag:"gagauzi",gan:"gan-kiina",gay:"gajo",gba:"gbaja",gbz:"zoroastrialaisdari",gd:"gaeli",gez:"ge’ez",gil:"kiribati",gl:"galicia",glk:"gilaki",gmh:"keskiyläsaksa",gn:"guarani",goh:"muinaisyläsaksa",gom:"goankonkani",gon:"gondi",gor:"gorontalo",got:"gootti",grb:"grebo",grc:"muinaiskreikka",gsw:"sveitsinsaksa",gu:"gudžarati",guc:"wayuu",gur:"frafra",guz:"gusii",gv:"manksi",gwi:"gwitšin",ha:"hausa",hai:"haida",hak:"hakka-kiina",haw:"havaiji",he:"heprea",hi:"hindi",hif:"fidžinhindi",hil:"hiligaino",hit:"heetti",hmn:"hmong",ho:"hiri-motu",hr:"kroatia",hsb:"yläsorbi",hsn:"xiang-kiina",ht:"haiti",hu:"unkari",hup:"hupa",hy:"armenia",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesia",ie:"interlingue",ig:"igbo",ii:"sichuanin-yi",ik:"inupiaq",ilo:"iloko",inh:"inguuši",io:"ido",is:"islanti",it:"italia",iu:"inuktitut",izh:"inkeroinen",ja:"japani",jam:"jamaikankreolienglanti",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"juutalaispersia",jrb:"juutalaisarabia",jut:"juutti",jv:"jaava",ka:"georgia",kaa:"karakalpakki",kab:"kabyyli",kac:"katšin",kaj:"jju",kam:"kamba",kaw:"kavi",kbd:"kabardi",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdenkreoli",ken:"kenyang",kfo:"norsunluurannikonkoro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"khotani",khq:"koyra chiini",khw:"khowar",ki:"kikuju",kiu:"kirmanjki",kj:"kuanjama",kk:"kazakki",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"korea",koi:"komipermjakki",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karatšai-balkaari",kri:"krio",krj:"kinaray-a",krl:"karjala",kru:"kurukh",ks:"kašmiri",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdi",kum:"kumykki",kut:"kutenai",kv:"komi",kw:"korni",ky:"kirgiisi",la:"latina",lad:"ladino",lag:"lango",lah:"lahnda",lam:"lamba",lb:"luxemburg",lez:"lezgi",lfn:"lingua franca nova",lg:"ganda",li:"limburg",lij:"liguuri",liv:"liivi",lkt:"lakota",lmo:"lombardi",ln:"lingala",lo:"lao",lol:"mongo",lou:"louisianankreoli",loz:"lozi",lrc:"pohjoisluri",lt:"liettua",ltg:"latgalli",lu:"katanganluba",lua:"luluanluba",lui:"luiseño",lun:"lunda",lus:"lusai",luy:"luhya",lv:"latvia",lzh:"klassinen kiina",lzz:"lazi",mad:"madura",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassar",man:"mandingo",mas:"maasai",mde:"maba",mdf:"mokša",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malagassi",mga:"keski-iiri",mgh:"makua-meetto",mgo:"meta’",mh:"marshall",mi:"maori",mic:"micmac",min:"minangkabau",mk:"makedonia",ml:"malajalam",mn:"mongoli",mnc:"mantšu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"vuorimari",ms:"malaiji",mt:"malta",mua:"mundang",mus:"creek",mwl:"mirandeesi",mwr:"marwari",mwv:"mentawai",my:"burma",mye:"myene",myv:"ersä",mzn:"mazandarani",na:"nauru",nan:"min nan -kiina",nap:"napoli",naq:"nama",nb:"norjan bokmål",nd:"pohjois-ndebele",nds:"alasaksa","nds-NL":"alankomaidenalasaksa",ne:"nepali","new":"newari",ng:"ndonga",nia:"nias",niu:"niue",njo:"ao naga",nl:"hollanti","nl-BE":"flaami",nmg:"kwasio",nn:"norjan nynorsk",nnh:"ngiemboon",no:"norja",nog:"nogai",non:"muinaisnorja",nov:"novial",nqo:"n’ko",nr:"etelä-ndebele",nso:"pohjoissotho",nus:"nuer",nv:"navajo",nwc:"klassinen newari",ny:"njandža",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"oksitaani",oj:"odžibwa",om:"oromo",or:"orija",os:"osseetti",osa:"osage",ota:"osmani",pa:"pandžabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamentu",pau:"palau",pcd:"picardi",pcm:"nigerianpidgin",pdc:"pennsylvaniansaksa",pdt:"plautdietsch",peo:"muinaispersia",pfl:"pfaltsi",phn:"foinikia",pi:"paali",pl:"puola",pms:"piemonte",pnt:"pontoksenkreikka",pon:"pohnpei",prg:"muinaispreussi",pro:"muinaisprovensaali",ps:"paštu",pt:"portugali","pt-BR":"brasilianportugali","pt-PT":"euroopanportugali",qu:"ketšua",quc:"kʼicheʼ",qug:"chimborazonylänköketšua",raj:"radžastani",rap:"rapanui",rar:"rarotonga",rgn:"romagnoli",rif:"tarifit",rm:"retoromaani",rn:"rundi",ro:"romania","ro-MD":"moldova",rof:"rombo",rom:"romani",root:"juuri",rtm:"rotuma",ru:"venäjä",rue:"ruteeni",rug:"roviana",rup:"aromania",rw:"ruanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"jakuutti",sam:"samarianaramea",saq:"samburu",sas:"sasak",sat:"santali",saz:"sauraštri",sba:"ngambay",sbp:"sangu",sc:"sardi",scn:"sisilia",sco:"skotti",sd:"sindhi",sdc:"sassarinsardi",sdh:"eteläkurdi",se:"pohjoissaame",see:"seneca",seh:"sena",sei:"seri",sel:"selkuppi",ses:"koyraboro senni",sg:"sango",sga:"muinaisiiri",sgs:"samogiitti",sh:"serbokroaatti",shi:"tašelhit",shn:"shan",shu:"tšadinarabia",si:"sinhala",sid:"sidamo",sk:"slovakki",sl:"sloveeni",sli:"sleesiansaksa",sly:"selayar",sm:"samoa",sma:"eteläsaame",smj:"luulajansaame",smn:"inarinsaame",sms:"koltansaame",sn:"šona",snk:"soninke",so:"somali",sog:"sogdi",sq:"albania",sr:"serbia",srn:"sranan",srr:"serer",ss:"swazi",ssy:"saho",st:"eteläsotho",stq:"saterlandinfriisi",su:"sunda",suk:"sukuma",sus:"susu",sux:"sumeri",sv:"ruotsi",sw:"swahili","sw-CD":"kingwana",swb:"komori",syc:"muinaissyyria",syr:"syyria",szl:"sleesia",ta:"tamili",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadžikki",th:"thai",ti:"tigrinja",tig:"tigre",tk:"turkmeeni",tkl:"tokelau",tkr:"tsahuri",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"tališi",tmh:"tamašek",tn:"tswana",to:"tonga",tog:"malawintonga",tpi:"tok-pisin",tr:"turkki",tru:"turojo",trv:"taroko",ts:"tsonga",tsd:"tsakonia",tsi:"tsimši",tt:"tataari",ttt:"tati",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahiti",tyv:"tuva",tzm:"keskiatlaksentamazight",udm:"udmurtti",ug:"uiguuri",uga:"ugarit",uk:"ukraina",umb:"mbundu",ur:"urdu",uz:"uzbekki",ve:"venda",vec:"venetsia",vep:"vepsä",vi:"vietnam",vls:"länsiflaami",vmf:"maininfrankki",vo:"volapük",vot:"vatja",vro:"võro",vun:"vunjo",wa:"valloni",wae:"walser",wal:"wolaitta",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu-kiina",xal:"kalmukki",xh:"xhosa",xmf:"mingreli",xog:"soga",yao:"jao",yap:"japi",yav:"yangben",ybb:"yemba",yi:"jiddiš",yo:"joruba",yrl:"ñeengatú",yue:"kantoninkiina",za:"zhuang",zap:"zapoteekki",zbl:"blisskieli",zea:"seelanti",zen:"zenaga",zgh:"vakioitu tamazight",zh:"kiina","zh-Hans":"kiina (yksinkertaistettu)","zh-Hant":"kiina (perinteinen)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"kyrillinen",Latn:"latinalainen",Arab:"arabialainen",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vailainen",Hans:"yksinkertaistettu",Hant:"perinteinen"}},fr:{rtl:false,languageNames:{aa:"afar",ab:"abkhaze",ace:"aceh",ach:"acoli",ada:"adangme",ady:"adyguéen",ae:"avestique",aeb:"arabe tunisien",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"aïnou",ak:"akan",akk:"akkadien",akz:"alabama",ale:"aléoute",aln:"guègue",alt:"altaï du Sud",am:"amharique",an:"aragonais",ang:"ancien anglais",anp:"angika",ar:"arabe","ar-001":"arabe standard moderne",arc:"araméen",arn:"mapuche",aro:"araona",arp:"arapaho",arq:"arabe algérien",ars:"arabe najdi",arw:"arawak",ary:"arabe marocain",arz:"arabe égyptien",as:"assamais",asa:"asu",ase:"langue des signes américaine",ast:"asturien",av:"avar",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azéri",ba:"bachkir",bal:"baloutchi",ban:"balinais",bar:"bavarois",bas:"bassa",bax:"bamoun",bbc:"batak toba",bbj:"ghomalaʼ",be:"biélorusse",bej:"bedja",bem:"bemba",bew:"betawi",bez:"béna",bfd:"bafut",bfq:"badaga",bg:"bulgare",bgn:"baloutchi occidental",bho:"bhodjpouri",bi:"bichelamar",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibétain",bpy:"bishnupriya",bqi:"bakhtiari",br:"breton",bra:"braj",brh:"brahoui",brx:"bodo",bs:"bosniaque",bss:"akoose",bua:"bouriate",bug:"bugi",bum:"boulou",byn:"blin",byv:"médumba",ca:"catalan",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"changma kodha",ce:"tchétchène",ceb:"cebuano",cgg:"kiga",ch:"chamorro",chb:"chibcha",chg:"tchaghataï",chk:"chuuk",chm:"mari",chn:"jargon chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"corse",cop:"copte",cps:"capiznon",cr:"cree",crh:"turc de Crimée",crs:"créole seychellois",cs:"tchèque",csb:"kachoube",cu:"slavon d’église",cv:"tchouvache",cy:"gallois",da:"danois",dak:"dakota",dar:"dargwa",dav:"taita",de:"allemand","de-AT":"allemand autrichien","de-CH":"allemand suisse",del:"delaware",den:"esclave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"bas-sorabe",dtp:"dusun central",dua:"douala",dum:"moyen néerlandais",dv:"maldivien",dyo:"diola-fogny",dyu:"dioula",dz:"dzongkha",dzg:"dazaga",ebu:"embou",ee:"éwé",efi:"éfik",egl:"émilien",egy:"égyptien ancien",eka:"ékadjouk",el:"grec",elx:"élamite",en:"anglais","en-AU":"anglais australien","en-CA":"anglais canadien","en-GB":"anglais britannique","en-US":"anglais américain",enm:"moyen anglais",eo:"espéranto",es:"espagnol","es-419":"espagnol d’Amérique latine","es-ES":"espagnol d’Espagne","es-MX":"espagnol du Mexique",esu:"youpik central",et:"estonien",eu:"basque",ewo:"éwondo",ext:"estrémègne",fa:"persan",fan:"fang",fat:"fanti",ff:"peul",fi:"finnois",fil:"filipino",fit:"finnois tornédalien",fj:"fidjien",fo:"féroïen",fr:"français","fr-CA":"français canadien","fr-CH":"français suisse",frc:"français cadien",frm:"moyen français",fro:"ancien français",frp:"francoprovençal",frr:"frison du Nord",frs:"frison oriental",fur:"frioulan",fy:"frison occidental",ga:"irlandais",gaa:"ga",gag:"gagaouze",gay:"gayo",gba:"gbaya",gbz:"dari zoroastrien",gd:"gaélique écossais",gez:"guèze",gil:"gilbertin",gl:"galicien",glk:"gilaki",gmh:"moyen haut-allemand",gn:"guarani",goh:"ancien haut allemand",gom:"konkani de Goa",gon:"gondi",gor:"gorontalo",got:"gotique",grb:"grebo",grc:"grec ancien",gsw:"suisse allemand",gu:"goudjerati",guc:"wayuu",gur:"gurenne",guz:"gusii",gv:"mannois",gwi:"gwichʼin",ha:"haoussa",hai:"haida",hak:"hakka",haw:"hawaïen",he:"hébreu",hi:"hindi",hif:"hindi fidjien",hil:"hiligaynon",hit:"hittite",hmn:"hmong",ho:"hiri motu",hr:"croate",hsb:"haut-sorabe",hsn:"xiang",ht:"créole haïtien",hu:"hongrois",hup:"hupa",hy:"arménien",hz:"héréro",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonésien",ie:"interlingue",ig:"igbo",ii:"yi du Sichuan",ik:"inupiaq",ilo:"ilocano",inh:"ingouche",io:"ido",is:"islandais",it:"italien",iu:"inuktitut",izh:"ingrien",ja:"japonais",jam:"créole jamaïcain",jbo:"lojban",jgo:"ngomba",jmc:"matchamé",jpr:"judéo-persan",jrb:"judéo-arabe",jut:"jute",jv:"javanais",ka:"géorgien",kaa:"karakalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabarde",kbl:"kanembou",kcg:"tyap",kde:"makondé",kea:"capverdien",ken:"kényang",kfo:"koro",kg:"kikongo",kgp:"caingangue",kha:"khasi",kho:"khotanais",khq:"koyra chiini",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazakh",kkj:"kako",kl:"groenlandais",kln:"kalendjin",km:"khmer",kmb:"kimboundou",kn:"kannada",ko:"coréen",koi:"komi-permiak",kok:"konkani",kos:"kosraéen",kpe:"kpellé",kr:"kanouri",krc:"karatchaï balkar",kri:"krio",krj:"kinaray-a",krl:"carélien",kru:"kouroukh",ks:"cachemiri",ksb:"shambala",ksf:"bafia",ksh:"francique ripuaire",ku:"kurde",kum:"koumyk",kut:"kutenai",kv:"komi",kw:"cornique",ky:"kirghize",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxembourgeois",lez:"lezghien",lfn:"lingua franca nova",lg:"ganda",li:"limbourgeois",lij:"ligure",liv:"livonien",lkt:"lakota",lmo:"lombard",ln:"lingala",lo:"lao",lol:"mongo",lou:"créole louisianais",loz:"lozi",lrc:"lori du Nord",lt:"lituanien",ltg:"latgalien",lu:"luba-katanga (kiluba)",lua:"luba-kasaï (ciluba)",lui:"luiseño",lun:"lunda",lus:"lushaï",luy:"luyia",lv:"letton",lzh:"chinois littéraire",lzz:"laze",mad:"madurais",maf:"mafa",mag:"magahi",mai:"maïthili",mak:"makassar",man:"mandingue",mas:"maasaï",mde:"maba",mdf:"mokcha",mdr:"mandar",men:"mendé",mer:"meru",mfe:"créole mauricien",mg:"malgache",mga:"moyen irlandais",mgh:"makua",mgo:"metaʼ",mh:"marshallais",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macédonien",ml:"malayalam",mn:"mongol",mnc:"mandchou",mni:"manipuri",moh:"mohawk",mos:"moré",mr:"marathi",mrj:"mari occidental",ms:"malais",mt:"maltais",mua:"moundang",mus:"creek",mwl:"mirandais",mwr:"marwarî",mwv:"mentawaï",my:"birman",mye:"myènè",myv:"erzya",mzn:"mazandérani",na:"nauruan",nan:"minnan",nap:"napolitain",naq:"nama",nb:"norvégien bokmål",nd:"ndébélé du Nord",nds:"bas-allemand","nds-NL":"bas-saxon néerlandais",ne:"népalais","new":"newari",ng:"ndonga",nia:"niha",niu:"niuéen",njo:"Ao",nl:"néerlandais","nl-BE":"flamand",nmg:"ngoumba",nn:"norvégien nynorsk",nnh:"ngiemboon",no:"norvégien",nog:"nogaï",non:"vieux norrois",nov:"novial",nqo:"n’ko",nr:"ndébélé du Sud",nso:"sotho du Nord",nus:"nuer",nv:"navajo",nwc:"newarî classique",ny:"chewa",nym:"nyamwezi",nyn:"nyankolé",nyo:"nyoro",nzi:"nzema",oc:"occitan",oj:"ojibwa",om:"oromo",or:"odia",os:"ossète",osa:"osage",ota:"turc ottoman",pa:"pendjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampangan",pap:"papiamento",pau:"palau",pcd:"picard",pcm:"pidgin nigérian",pdc:"pennsilfaanisch",pdt:"bas-prussien",peo:"persan ancien",pfl:"allemand palatin",phn:"phénicien",pi:"pali",pl:"polonais",pms:"piémontais",pnt:"pontique",pon:"pohnpei",prg:"prussien",pro:"provençal ancien",ps:"pachto",pt:"portugais","pt-BR":"portugais brésilien","pt-PT":"portugais européen",qu:"quechua",quc:"quiché",qug:"quichua du Haut-Chimborazo",raj:"rajasthani",rap:"rapanui",rar:"rarotongien",rgn:"romagnol",rif:"rifain",rm:"romanche",rn:"roundi",ro:"roumain","ro-MD":"moldave",rof:"rombo",rom:"romani",root:"racine",rtm:"rotuman",ru:"russe",rue:"ruthène",rug:"roviana",rup:"aroumain",rw:"kinyarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"iakoute",sam:"araméen samaritain",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"isangu",sc:"sarde",scn:"sicilien",sco:"écossais",sd:"sindhi",sdc:"sarde sassarais",sdh:"kurde du Sud",se:"same du Nord",see:"seneca",seh:"cisena",sei:"séri",sel:"selkoupe",ses:"koyraboro senni",sg:"sango",sga:"ancien irlandais",sgs:"samogitien",sh:"serbo-croate",shi:"chleuh",shn:"shan",shu:"arabe tchadien",si:"cingalais",sid:"sidamo",sk:"slovaque",sl:"slovène",sli:"bas-silésien",sly:"sélayar",sm:"samoan",sma:"same du Sud",smj:"same de Lule",smn:"same d’Inari",sms:"same skolt",sn:"shona",snk:"soninké",so:"somali",sog:"sogdien",sq:"albanais",sr:"serbe",srn:"sranan tongo",srr:"sérère",ss:"swati",ssy:"saho",st:"sotho du Sud",stq:"saterlandais",su:"soundanais",suk:"soukouma",sus:"soussou",sux:"sumérien",sv:"suédois",sw:"swahili","sw-CD":"swahili du Congo",swb:"comorien",syc:"syriaque classique",syr:"syriaque",szl:"silésien",ta:"tamoul",tcy:"toulou",te:"télougou",tem:"timné",teo:"teso",ter:"tereno",tet:"tétoum",tg:"tadjik",th:"thaï",ti:"tigrigna",tig:"tigré",tk:"turkmène",tkl:"tokelau",tkr:"tsakhour",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"talysh",tmh:"tamacheq",tn:"tswana",to:"tongien",tog:"tonga nyasa",tpi:"tok pisin",tr:"turc",tru:"touroyo",trv:"taroko",ts:"tsonga",tsd:"tsakonien",tsi:"tsimshian",tt:"tatar",ttt:"tati caucasien",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitien",tyv:"touvain",tzm:"amazighe de l’Atlas central",udm:"oudmourte",ug:"ouïghour",uga:"ougaritique",uk:"ukrainien",umb:"umbundu",ur:"ourdou",uz:"ouzbek",vai:"vaï",ve:"venda",vec:"vénitien",vep:"vepse",vi:"vietnamien",vls:"flamand occidental",vmf:"franconien du Main",vo:"volapük",vot:"vote",vro:"võro",vun:"vunjo",wa:"wallon",wae:"walser",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kalmouk",xh:"xhosa",xmf:"mingrélien",xog:"soga",yap:"yapois",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yrl:"nheengatou",yue:"cantonais",za:"zhuang",zap:"zapotèque",zbl:"symboles Bliss",zea:"zélandais",zen:"zenaga",zgh:"amazighe standard marocain",zh:"chinois","zh-Hans":"mandarin simplifié","zh-Hant":"mandarin traditionnel",zu:"zoulou",zun:"zuñi",zza:"zazaki"},scriptNames:{Cyrl:"cyrillique",Latn:"latin",Arab:"arabe",Guru:"gourmoukhî",Tfng:"tifinagh",Vaii:"vaï",Hans:"simplifié",Hant:"traditionnel"}},gan:{rtl:false,languageNames:{},scriptNames:{}},gl:{rtl:false,languageNames:{aa:"afar",ab:"abkhazo",ace:"achinés",ach:"acholí",ada:"adangme",ady:"adigueo",af:"afrikaans",agq:"aghem",ain:"ainu",ak:"akan",ale:"aleutiano",alt:"altai meridional",am:"amhárico",an:"aragonés",anp:"angika",ar:"árabe","ar-001":"árabe estándar moderno",arc:"arameo",arn:"mapuche",arp:"arapaho",as:"assamés",asa:"asu",ast:"asturiano",av:"avar",awa:"awadhi",ay:"aimará",az:"acerbaixano",ba:"baxkir",ban:"balinés",bas:"basaa",be:"belaruso",bem:"bemba",bez:"bena",bg:"búlgaro",bgn:"baluchi occidental",bho:"bhojpuri",bi:"bislama",bin:"bini",bla:"siksiká",bm:"bambara",bn:"bengalí",bo:"tibetano",br:"bretón",brx:"bodo",bs:"bosníaco",bug:"buginés",byn:"blin",ca:"catalán",ce:"checheno",ceb:"cebuano",cgg:"kiga",ch:"chamorro",chk:"chuuk",chm:"mari",cho:"choctaw",chr:"cherokee",chy:"cheyenne",ckb:"kurdo central",co:"corso",crs:"seselwa (crioulo das Seychelles)",cs:"checo",cu:"eslavo eclesiástico",cv:"chuvaxo",cy:"galés",da:"dinamarqués",dak:"dakota",dar:"dargwa",dav:"taita",de:"alemán","de-AT":"alemán austríaco","de-CH":"alto alemán suízo",dgr:"dogrib",dje:"zarma",dsb:"baixo sorbio",dua:"duala",dv:"divehi",dyo:"jola-fonyi",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"exipcio antigo",eka:"ekajuk",el:"grego",en:"inglés","en-AU":"inglés australiano","en-CA":"inglés canadense","en-GB":"inglés británico","en-US":"inglés estadounidense",eo:"esperanto",es:"español","es-419":"español de América","es-ES":"español de España","es-MX":"español de México",et:"estoniano",eu:"éuscaro",ewo:"ewondo",fa:"persa",ff:"fula",fi:"finés",fil:"filipino",fj:"fixiano",fo:"feroés",fr:"francés","fr-CA":"francés canadense","fr-CH":"francés suízo",fur:"friulano",fy:"frisón occidental",ga:"irlandés",gaa:"ga",gag:"gagauz",gd:"gaélico escocés",gez:"ge’ez",gil:"kiribatiano",gl:"galego",gn:"guaraní",gor:"gorontalo",grc:"grego antigo",gsw:"alemán suízo",gu:"guxarati",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hausa",haw:"hawaiano",he:"hebreo",hi:"hindi",hil:"hiligaynon",hmn:"hmong",hr:"croata",hsb:"alto sorbio",ht:"crioulo haitiano",hu:"húngaro",hup:"hupa",hy:"armenio",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesio",ig:"igbo",ii:"yi sichuanés",ilo:"ilocano",inh:"inguxo",io:"ido",is:"islandés",it:"italiano",iu:"inuktitut",ja:"xaponés",jbo:"lojban",jgo:"ngomba",jmc:"machame",jv:"xavanés",ka:"xeorxiano",kab:"cabila",kac:"kachin",kaj:"jju",kam:"kamba",kbd:"cabardiano",kcg:"tyap",kde:"makonde",kea:"caboverdiano",kfo:"koro",kg:"kongo",kha:"khasi",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazako",kkj:"kako",kl:"groenlandés",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannará",ko:"coreano",koi:"komi permio",kok:"konkani",kpe:"kpelle",kr:"kanuri",krc:"carachaio-bálcara",krl:"carelio",kru:"kurukh",ks:"caxemirés",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdo",kum:"kumyk",kv:"komi",kw:"córnico",ky:"kirguiz",la:"latín",lad:"ladino",lag:"langi",lb:"luxemburgués",lez:"lezguio",lg:"ganda",li:"limburgués",lkt:"lakota",ln:"lingala",lo:"laosiano",loz:"lozi",lrc:"luri setentrional",lt:"lituano",lu:"luba-katanga",lua:"luba-lulua",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letón",mad:"madurés",mag:"magahi",mai:"maithili",mak:"makasar",mas:"masai",mdf:"moksha",men:"mende",mer:"meru",mfe:"crioulo mauriciano",mg:"malgaxe",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalés",mi:"maorí",mic:"micmac",min:"minangkabau",mk:"macedonio",ml:"malabar",mn:"mongol",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malaio",mt:"maltés",mua:"mundang",mus:"creek",mwl:"mirandés",my:"birmano",myv:"erzya",mzn:"mazandaraní",na:"nauruano",nap:"napolitano",naq:"nama",nb:"noruegués bokmål",nd:"ndebele setentrional",nds:"baixo alemán","nds-NL":"baixo saxón",ne:"nepalí","new":"newari",ng:"ndonga",nia:"nias",niu:"niueano",nl:"neerlandés","nl-BE":"flamengo",nmg:"kwasio",nn:"noruegués nynorsk",nnh:"ngiemboon",no:"noruegués",nog:"nogai",nqo:"n’ko",nr:"ndebele meridional",nso:"sesotho do norte",nus:"nuer",nv:"navajo",ny:"chewa",nyn:"nyankole",oc:"occitano",om:"oromo",or:"odiá",os:"ossetio",pa:"panxabí",pag:"pangasinan",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin nixeriano",pl:"polaco",prg:"prusiano",ps:"paxto",pt:"portugués","pt-BR":"portugués do Brasil","pt-PT":"portugués de Portugal",qu:"quechua",quc:"quiché",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romanés","ro-MD":"moldavo",rof:"rombo",root:"raíz",ru:"ruso",rup:"aromanés",rw:"kiñaruanda",rwk:"rwa",sa:"sánscrito",sad:"sandawe",sah:"iacuto",saq:"samburu",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"escocés",sd:"sindhi",sdh:"kurdo meridional",se:"saami setentrional",seh:"sena",ses:"koyraboro senni",sg:"sango",sh:"serbocroata",shi:"tachelhit",shn:"shan",si:"cingalés",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"saami meridional",smj:"saami de Lule",smn:"saami de Inari",sms:"saami skolt",sn:"shona",snk:"soninke",so:"somalí",sq:"albanés",sr:"serbio",srn:"sranan tongo",ss:"suazi",ssy:"saho",st:"sesotho",su:"sundanés",suk:"sukuma",sv:"sueco",sw:"suahili","sw-CD":"suahili congolés",swb:"comoriano",syr:"siríaco",ta:"támil",te:"telugu",tem:"temne",teo:"teso",tet:"tetun",tg:"taxico",th:"tailandés",ti:"tigriña",tig:"tigré",tk:"turkmeno",tl:"tagalo",tlh:"klingon",tn:"tswana",to:"tongano",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tt:"tártaro",tum:"tumbuka",tvl:"tuvalés",tw:"twi",twq:"tasawaq",ty:"tahitiano",tyv:"tuvaniano",tzm:"tamazight de Marrocos central",udm:"udmurto",ug:"uigur",uk:"ucraíno",umb:"umbundu",ur:"urdú",uz:"uzbeko",ve:"venda",vi:"vietnamita",vo:"volapuk",vun:"vunjo",wa:"valón",wae:"walser",wal:"wolaytta",war:"waray-waray",wbp:"walrpiri",wo:"wólof",xal:"calmuco",xh:"xhosa",xog:"soga",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"ioruba",yue:"cantonés",zgh:"tamazight marroquí estándar",zh:"chinés","zh-Hans":"chinés mandarín simplificado","zh-Hant":"chinés mandarín tradicional",zu:"zulú",zun:"zuni",zza:"zazaki"},scriptNames:{Cyrl:"cirílico",Latn:"latino",Arab:"árabe",Guru:"gurmukhi",Hans:"simplificado",Hant:"tradicional"}},gu:{rtl:false,languageNames:{aa:"અફાર",ab:"અબખાજિયન",ace:"અચીની",ach:"એકોલી",ada:"અદાંગ્મી",ady:"અદિઘે",ae:"અવેસ્તન",af:"આફ્રિકન્સ",afh:"અફ્રિહિલી",agq:"અઘેમ",ain:"ઐનુ",ak:"અકાન",akk:"અક્કાદીયાન",ale:"અલેઉત",alt:"દક્ષિણ અલ્તાઇ",am:"એમ્હારિક",an:"અર્ગોનીઝ",ang:"જુની અંગ્રેજી",anp:"અંગીકા",ar:"અરબી","ar-001":"મોડર્ન સ્ટાન્ડર્ડ અરબી",arc:"એરમૈક",arn:"મેપુચે",arp:"અરાપાહો",arq:"આલ્જેરિયન અરબી",arw:"અરાવક",ary:"મોરોક્કન અરબી",arz:"ઈજિપ્શિયન અરબી",as:"આસામી",asa:"અસુ",ast:"અસ્તુરિયન",av:"અવેરિક",awa:"અવધી",ay:"આયમારા",az:"અઝરબૈજાની",ba:"બશ્કીર",bal:"બલૂચી",ban:"બાલિનીસ",bas:"બસા",bax:"બામન",be:"બેલારુશિયન",bej:"બેજા",bem:"બેમ્બા",bez:"બેના",bg:"બલ્ગેરિયન",bgn:"પશ્ચિમી બાલોચી",bho:"ભોજપુરી",bi:"બિસ્લામા",bik:"બિકોલ",bin:"બિની",bla:"સિક્સિકા",bm:"બામ્બારા",bn:"બાંગ્લા",bo:"તિબેટીયન",bpy:"બિષ્નુપ્રિયા",br:"બ્રેટોન",bra:"વ્રજ",brh:"બ્રાહુઈ",brx:"બોડો",bs:"બોસ્નિયન",bua:"બુરિયાત",bug:"બુગિનીસ",byn:"બ્લિન",ca:"કતલાન",cad:"કડ્ડો",car:"કરિબ",cch:"અત્સમ",ccp:"ચકમા",ce:"ચેચન",ceb:"સિબુઆનો",cgg:"ચિગા",ch:"કેમોરો",chb:"ચિબ્ચા",chg:"છગાતાઇ",chk:"ચૂકીસ",chm:"મારી",chn:"ચિનૂક જાર્ગન",cho:"ચોક્તૌ",chp:"શિપેવ્યાન",chr:"શેરોકી",chy:"શેયેન્ન",ckb:"સેન્ટ્રલ કુર્દિશ",co:"કોર્સિકન",cop:"કોપ્ટિક",cr:"ક્રી",crh:"ક્રિમિયન તુર્કી",crs:"સેસેલ્વા ક્રેઓલે ફ્રેન્ચ",cs:"ચેક",csb:"કાશુબિયન",cu:"ચર્ચ સ્લાવિક",cv:"ચૂવાશ",cy:"વેલ્શ",da:"ડેનિશ",dak:"દાકોતા",dar:"દાર્ગવા",dav:"તૈતા",de:"જર્મન","de-AT":"ઓસ્ટ્રિઅન જર્મન","de-CH":"સ્વિસ હાય જર્મન",del:"દેલવેર",den:"સ્લેવ",dgr:"ડોગ્રિબ",din:"દિન્કા",dje:"ઝર્મા",doi:"ડોગ્રી",dsb:"લોઅર સોર્બિયન",dua:"દુઆલા",dum:"મધ્ય ડચ",dv:"દિવેહી",dyo:"જોલા-ફોન્યી",dyu:"ડ્યુલા",dz:"ડ્ઝોંગ્ખા",dzg:"દાઝાગા",ebu:"ઍમ્બુ",ee:"ઈવ",efi:"એફિક",egy:"પ્રાચીન ઇજીપ્શિયન",eka:"એકાજુક",el:"ગ્રીક",elx:"એલામાઇટ",en:"અંગ્રેજી","en-AU":"ઓસ્ટ્રેલિયન અંગ્રેજી","en-CA":"કેનેડિયન અંગ્રેજી","en-GB":"બ્રિટિશ અંગ્રેજી","en-US":"અમેરિકન અંગ્રેજી",enm:"મિડિલ અંગ્રેજી",eo:"એસ્પેરાન્ટો",es:"સ્પેનિશ","es-419":"લેટિન અમેરિકન સ્પેનિશ","es-ES":"યુરોપિયન સ્પેનિશ","es-MX":"મેક્સિકન સ્પેનિશ",et:"એસ્ટોનિયન",eu:"બાસ્ક",ewo:"ઇવોન્ડો",fa:"ફારસી",fan:"ફેંગ",fat:"ફન્ટી",ff:"ફુલાહ",fi:"ફિનિશ",fil:"ફિલિપિનો",fj:"ફીજીયન",fo:"ફોરિસ્ત",fon:"ફોન",fr:"ફ્રેન્ચ","fr-CA":"કેનેડિયન ફ્રેંચ","fr-CH":"સ્વિસ ફ્રેંચ",frc:"કાજૂન ફ્રેન્ચ",frm:"મિડિલ ફ્રેંચ",fro:"જૂની ફ્રેંચ",frr:"ઉત્તરીય ફ્રિશિયન",frs:"પૂર્વ ફ્રિશિયન",fur:"ફ્રિયુલિયાન",fy:"પશ્ચિમી ફ્રિસિયન",ga:"આઇરિશ",gaa:"ગા",gag:"ગાગાઝ",gay:"ગાયો",gba:"બાયા",gbz:"ઝોરોસ્ટ્રિઅન દારી",gd:"સ્કોટીસ ગેલિક",gez:"ગીઝ",gil:"જિલ્બરટીઝ",gl:"ગેલિશિયન",gmh:"મધ્ય હાઇ જર્મન",gn:"ગુઆરાની",goh:"જૂની હાઇ જર્મન",gom:"ગોઅન કોંકણી",gon:"ગોંડી",gor:"ગોરોન્તાલો",got:"ગોથિક",grb:"ગ્રેબો",grc:"પ્રાચીન ગ્રીક",gsw:"સ્વિસ જર્મન",gu:"ગુજરાતી",guz:"ગુસી",gv:"માંક્સ",gwi:"ગ્વિચ’ઇન",ha:"હૌસા",hai:"હૈડા",haw:"હવાઇયન",he:"હીબ્રુ",hi:"હિન્દી",hif:"ફીજી હિંદી",hil:"હિલિગેનોન",hit:"હિટ્ટિતે",hmn:"હમોંગ",ho:"હિરી મોટૂ",hr:"ક્રોએશિયન",hsb:"અપર સોર્બિયન",ht:"હૈતિઅન ક્રેઓલે",hu:"હંગેરિયન",hup:"હૂપા",hy:"આર્મેનિયન",hz:"હેરેરો",ia:"ઇંટરલિંગુઆ",iba:"ઇબાન",ibb:"ઇબિબિઓ",id:"ઇન્ડોનેશિયન",ie:"ઇંટરલિંગ",ig:"ઇગ્બો",ii:"સિચુઆન યી",ik:"ઇનુપિયાક",ilo:"ઇલોકો",inh:"ઇંગુશ",io:"ઈડો",is:"આઇસલેન્ડિક",it:"ઇટાલિયન",iu:"ઇનુકિટૂટ",ja:"જાપાનીઝ",jbo:"લોજ્બાન",jgo:"નગોમ્બા",jmc:"મકામે",jpr:"જુદેઓ-પર્શિયન",jrb:"જુદેઓ-અરબી",jv:"જાવાનીસ",ka:"જ્યોર્જિયન",kaa:"કારા-કલ્પક",kab:"કબાઇલ",kac:"કાચિન",kaj:"જ્જુ",kam:"કમ્બા",kaw:"કાવી",kbd:"કબાર્ડિયન",kcg:"ત્યાપ",kde:"મકોન્ડે",kea:"કાબુવર્ડિઆનુ",kfo:"કોરો",kg:"કોંગો",kha:"ખાસી",kho:"ખોતાનીસ",khq:"કોયરા ચિનિ",ki:"કિકુયૂ",kj:"ક્વાન્યામા",kk:"કઝાખ",kkj:"કાકો",kl:"કલાલ્લિસુત",kln:"કલેજિન",km:"ખ્મેર",kmb:"કિમ્બન્દુ",kn:"કન્નડ",ko:"કોરિયન",koi:"કોમી-પર્મ્યાક",kok:"કોંકણી",kos:"કોસરિયન",kpe:"ક્પેલ્લે",kr:"કનુરી",krc:"કરાચય-બલ્કાર",krl:"કરેલિયન",kru:"કુરૂખ",ks:"કાશ્મીરી",ksb:"શમ્બાલા",ksf:"બફિયા",ksh:"કોલોગ્નિયન",ku:"કુર્દિશ",kum:"કુમીક",kut:"કુતેનાઇ",kv:"કોમી",kw:"કોર્નિશ",ky:"કિર્ગીઝ",la:"લેટિન",lad:"લાદીનો",lag:"લંગી",lah:"લાહન્ડા",lam:"લામ્બા",lb:"લક્ઝેમબર્ગિશ",lez:"લેઝધીયન",lfn:"લિંગ્વા ફેન્કા નોવા",lg:"ગાંડા",li:"લિંબૂર્ગિશ",lkt:"લાકોટા",ln:"લિંગાલા",lo:"લાઓ",lol:"મોંગો",lou:"લ્યુઇસિયાના ક્રેઓલ",loz:"લોઝી",lrc:"ઉત્તરી લુરી",lt:"લિથુઆનિયન",lu:"લૂબા-કટાંગા",lua:"લૂબા-લુલુઆ",lui:"લુઇસેનો",lun:"લુન્ડા",luo:"લ્યુઓ",lus:"મિઝો",luy:"લુઈયા",lv:"લાતવિયન",mad:"માદુરીસ",mag:"મગહી",mai:"મૈથિલી",mak:"મકાસર",man:"મન્ડિન્ગો",mas:"મસાઇ",mdf:"મોક્ષ",mdr:"મંદાર",men:"મેન્ડે",mer:"મેરુ",mfe:"મોરીસ્યેન",mg:"મલાગસી",mga:"મધ્ય આઈરિશ",mgh:"માખુવા-મીટ્ટુ",mgo:"મેતા",mh:"માર્શલીઝ",mi:"માઓરી",mic:"મિકમેક",min:"મિનાંગ્કાબાઉ",mk:"મેસેડોનિયન",ml:"મલયાલમ",mn:"મોંગોલિયન",mnc:"માન્ચુ",mni:"મણિપુરી",moh:"મોહૌક",mos:"મોસ્સી",mr:"મરાઠી",mrj:"પશ્ચિમી મારી",ms:"મલય",mt:"માલ્ટિઝ",mua:"મુનડાન્ગ",mus:"ક્રિક",mwl:"મિરાંડી",mwr:"મારવાડી",my:"બર્મીઝ",myv:"એર્ઝયા",mzn:"મઝાન્દેરાની",na:"નાઉરૂ",nap:"નેપોલિટાન",naq:"નમા",nb:"નોર્વેજિયન બોકમાલ",nd:"ઉત્તર દેબેલ",nds:"લો જર્મન","nds-NL":"લો સેક્સોન",ne:"નેપાળી","new":"નેવારી",ng:"ડોન્ગા",nia:"નિયાસ",niu:"નિયુઆન",nl:"ડચ","nl-BE":"ફ્લેમિશ",nmg:"ક્વાસિઓ",nn:"નોર્વેજિયન નાયનૉર્સ્ક",nnh:"નીએમબુન",no:"નૉર્વેજીયન",nog:"નોગાઇ",non:"જૂની નોર્સ",nqo:"એન’કો",nr:"દક્ષિણ દેબેલ",nso:"ઉત્તરી સોથો",nus:"નુએર",nv:"નાવાજો",nwc:"પરંપરાગત નેવારી",ny:"ન્યાન્જા",nym:"ન્યામવેઝી",nyn:"ન્યાનકોલ",nyo:"ન્યોરો",nzi:"ન્ઝિમા",oc:"ઓક્સિટન",oj:"ઓજિબ્વા",om:"ઓરોમો",or:"ઉડિયા",os:"ઓસ્સેટિક",osa:"ઓસેજ",ota:"ઓટોમાન તુર્કિશ",pa:"પંજાબી",pag:"પંગાસીનાન",pal:"પહલવી",pam:"પમ્પાન્ગા",pap:"પાપિયામેન્ટો",pau:"પલાઉઆન",pcm:"નાઇજેરિયન પીજીન",peo:"જૂની ફારસી",phn:"ફોનિશિયન",pi:"પાલી",pl:"પોલીશ",pon:"પોહપિએન",prg:"પ્રુસ્સીયન",pro:"જુની પ્રોવેન્સલ",ps:"પશ્તો",pt:"પોર્ટુગીઝ","pt-BR":"બ્રાઝિલીયન પોર્ટુગીઝ","pt-PT":"યુરોપિયન પોર્ટુગીઝ",qu:"ક્વેચુઆ",quc:"કિચે",raj:"રાજસ્થાની",rap:"રાપાનુઇ",rar:"રારોટોંગન",rm:"રોમાન્શ",rn:"રૂન્દી",ro:"રોમાનિયન","ro-MD":"મોલડાવિયન",rof:"રોમ્બો",rom:"રોમાની",root:"રૂટ",ru:"રશિયન",rup:"અરોમેનિયન",rw:"કિન્યારવાન્ડા",rwk:"રવા",sa:"સંસ્કૃત",sad:"સોંડવે",sah:"સખા",sam:"સામરિટાન અરેમિક",saq:"સમ્બુરુ",sas:"સાસાક",sat:"સંતાલી",sba:"ન્ગામ્બેય",sbp:"સાંગુ",sc:"સાર્દિનિયન",scn:"સિસિલિયાન",sco:"સ્કોટ્સ",sd:"સિંધી",sdh:"સર્ઘન કુર્દીશ",se:"ઉત્તરી સામી",seh:"સેના",sel:"સેલ્કપ",ses:"કોયરાબોરો સેન્ની",sg:"સાંગો",sga:"જૂની આયરિશ",sh:"સર્બો-ક્રોએશિયન",shi:"તેશીલહિટ",shn:"શેન",si:"સિંહાલી",sid:"સિદામો",sk:"સ્લોવૅક",sl:"સ્લોવેનિયન",sm:"સામોન",sma:"દક્ષિણી સામી",smj:"લુલે સામી",smn:"ઇનારી સામી",sms:"સ્કોલ્ટ સામી",sn:"શોના",snk:"સોનિન્કે",so:"સોમાલી",sog:"સોગ્ડિએન",sq:"અલ્બેનિયન",sr:"સર્બિયન",srn:"સ્રાનન ટોન્ગો",srr:"સેરેર",ss:"સ્વાતી",ssy:"સાહો",st:"દક્ષિણ સોથો",su:"સંડેનીઝ",suk:"સુકુમા",sus:"સુસુ",sux:"સુમેરિયન",sv:"સ્વીડિશ",sw:"સ્વાહિલી","sw-CD":"કોંગો સ્વાહિલી",swb:"કોમોરિયન",syc:"પરંપરાગત સિરિએક",syr:"સિરિએક",ta:"તમિલ",tcy:"તુલુ",te:"તેલુગુ",tem:"ટિમ્ને",teo:"તેસો",ter:"તેરેનો",tet:"તેતુમ",tg:"તાજીક",th:"થાઈ",ti:"ટાઇગ્રિનિયા",tig:"ટાઇગ્રે",tiv:"તિવ",tk:"તુર્કમેન",tkl:"તોકેલાઉ",tl:"ટાગાલોગ",tlh:"ક્લિન્ગોન",tli:"ક્લીન્ગકિટ",tmh:"તામાશેખ",tn:"ત્સ્વાના",to:"ટોંગાન",tog:"ન્યાસા ટોન્ગા",tpi:"ટોક પિસિન",tr:"ટર્કિશ",trv:"ટારોકો",ts:"સોંગા",tsi:"સિમ્શિયન",tt:"તતાર",ttt:"મુસ્લિમ તાટ",tum:"તુમ્બુકા",tvl:"તુવાલુ",tw:"ટ્વાઇ",twq:"તસાવાક",ty:"તાહિતિયન",tyv:"ટુવીનિયન",tzm:"સેન્ટ્રલ એટલાસ તામાઝિટ",udm:"ઉદમુર્ત",ug:"ઉઇગુર",uga:"યુગેરિટિક",uk:"યુક્રેનિયન",umb:"ઉમ્બુન્ડૂ",ur:"ઉર્દૂ",uz:"ઉઝ્બેક",vai:"વાઇ",ve:"વેન્દા",vi:"વિયેતનામીસ",vo:"વોલાપુક",vot:"વોટિક",vun:"વુન્જો",wa:"વાલૂન",wae:"વેલ્સેર",wal:"વોલાયટ્ટા",war:"વારેય",was:"વાશો",wbp:"વાર્લ્પીરી",wo:"વોલોફ",xal:"કાલ્મિક",xh:"ખોસા",xog:"સોગા",yao:"યાઓ",yap:"યાપીસ",yav:"યાન્ગબેન",ybb:"યેમ્બા",yi:"યિદ્દિશ",yo:"યોરૂબા",yue:"કેંટોનીઝ",za:"ઝુઆગ",zap:"ઝેપોટેક",zbl:"બ્લિસિમ્બોલ્સ",zen:"ઝેનાગા",zgh:"માનક મોરોક્કન તામાઝિટ",zh:"ચાઇનીઝ","zh-Hans":"સરળીકૃત મેન્ડેરિન ચાઇનીઝ","zh-Hant":"પરંપરાગત મેન્ડેરિન ચાઇનીઝ",zu:"ઝુલુ",zun:"ઝૂની",zza:"ઝાઝા"},scriptNames:{Cyrl:"સિરિલિક",Latn:"લેટિન",Arab:"અરબી",Guru:"ગુરૂમુખી",Tfng:"તિફિનાઘ",Vaii:"વાઇ",Hans:"સરળીકૃત",Hant:"પરંપરાગત"}},he:{rtl:true,languageNames:{aa:"אפארית",ab:"אבחזית",ace:"אכינזית",ach:"אקצ׳ולי",ada:"אדנמה",ady:"אדיגית",ae:"אבסטן",af:"אפריקאנס",afh:"אפריהילי",agq:"אע׳ם",ain:"אינו",ak:"אקאן",akk:"אכדית",ale:"אלאוט",alt:"אלטאי דרומית",am:"אמהרית",an:"אראגונית",ang:"אנגלית עתיקה",anp:"אנג׳יקה",ar:"ערבית","ar-001":"ערבית ספרותית",arc:"ארמית",arn:"אראוקנית",arp:"אראפהו",ars:"ערבית - נג׳ד",arw:"ארוואק",as:"אסאמית",asa:"אסו",ast:"אסטורית",av:"אווארית",awa:"אוואדית",ay:"איימארית",az:"אזרית",ba:"בשקירית",bal:"באלוצ׳י",ban:"באלינזית",bar:"בווארית",bas:"בסאא",bax:"במום",bbj:"גומאלה",be:"בלארוסית",bej:"בז׳ה",bem:"במבה",bez:"בנה",bfd:"באפוט",bg:"בולגרית",bgn:"באלוצ׳י מערבית",bho:"בוג׳פורי",bi:"ביסלמה",bik:"ביקול",bin:"ביני",bkm:"קום",bla:"סיקסיקה",bm:"במבארה",bn:"בנגלית",bo:"טיבטית",br:"ברטונית",bra:"בראג׳",brx:"בודו",bs:"בוסנית",bss:"אקוסה",bua:"בוריאט",bug:"בוגינזית",bum:"בולו",byn:"בלין",byv:"מדומבה",ca:"קטלאנית",cad:"קאדו",car:"קאריב",cay:"קאיוגה",cch:"אטסם",ccp:"צ׳אקמה",ce:"צ׳צ׳נית",ceb:"סבואנו",cgg:"צ׳יגה",ch:"צ׳מורו",chb:"צ׳יבצ׳ה",chg:"צ׳אגאטאי",chk:"צ׳וקסה",chm:"מארי",chn:"ניב צ׳ינוק",cho:"צ׳וקטאו",chp:"צ׳יפוויאן",chr:"צ׳רוקי",chy:"שאיין",ckb:"כורדית סוראנית",co:"קורסיקנית",cop:"קופטית",cr:"קרי",crh:"טטרית של קרים",crs:"קריאולית (סיישל)",cs:"צ׳כית",csb:"קשובית",cu:"סלאבית כנסייתית עתיקה",cv:"צ׳ובאש",cy:"וולשית",da:"דנית",dak:"דקוטה",dar:"דרגווה",dav:"טאיטה",de:"גרמנית","de-AT":"גרמנית (אוסטריה)","de-CH":"גרמנית (שוויץ)",del:"דלאוור",den:"סלאבית",dgr:"דוגריב",din:"דינקה",dje:"זארמה",doi:"דוגרי",dsb:"סורבית תחתית",dua:"דואלה",dum:"הולנדית תיכונה",dv:"דיבהי",dyo:"ג׳ולה פונית",dyu:"דיולה",dz:"דזונקה",dzg:"דזאנגה",ebu:"אמבו",ee:"אווה",efi:"אפיק",egy:"מצרית עתיקה",eka:"אקיוק",el:"יוונית",elx:"עילמית",en:"אנגלית","en-AU":"אנגלית (אוסטרליה)","en-CA":"אנגלית (קנדה)","en-GB":"אנגלית (בריטניה)","en-US":"אנגלית (ארצות הברית)",enm:"אנגלית תיכונה",eo:"אספרנטו",es:"ספרדית","es-419":"ספרדית (אמריקה הלטינית)","es-ES":"ספרדית (ספרד)","es-MX":"ספרדית (מקסיקו)",et:"אסטונית",eu:"בסקית",ewo:"אוונדו",fa:"פרסית",fan:"פנג",fat:"פאנטי",ff:"פולה",fi:"פינית",fil:"פיליפינית",fj:"פיג׳ית",fo:"פארואזית",fon:"פון",fr:"צרפתית","fr-CA":"צרפתית (קנדה)","fr-CH":"צרפתית (שוויץ)",frc:"צרפתית קייג׳ונית",frm:"צרפתית תיכונה",fro:"צרפתית עתיקה",frr:"פריזית צפונית",frs:"פריזית מזרחית",fur:"פריולית",fy:"פריזית מערבית",ga:"אירית",gaa:"גא",gag:"גגאוזית",gan:"סינית גאן",gay:"גאיו",gba:"גבאיה",gd:"גאלית סקוטית",gez:"געז",gil:"קיריבטית",gl:"גליציאנית",gmh:"גרמנית בינונית-גבוהה",gn:"גוארני",goh:"גרמנית עתיקה גבוהה",gon:"גונדי",gor:"גורונטאלו",got:"גותית",grb:"גרבו",grc:"יוונית עתיקה",gsw:"גרמנית (בשוויץ)",gu:"גוג׳ארטי",guz:"גוסי",gv:"מאנית",gwi:"גוויצ׳ן",ha:"האוסה",hai:"האידה",hak:"סינית האקה",haw:"הוואית",he:"עברית",hi:"הינדי",hil:"היליגאינון",hit:"חתית",hmn:"המונג",ho:"הירי מוטו",hr:"קרואטית",hsb:"סורבית עילית",hsn:"סינית שיאנג",ht:"קריאולית (האיטי)",hu:"הונגרית",hup:"הופה",hy:"ארמנית",hz:"הררו",ia:"‏אינטרלינגואה",iba:"איבאן",ibb:"איביביו",id:"אינדונזית",ie:"אינטרלינגה",ig:"איגבו",ii:"סצ׳ואן יי",ik:"אינופיאק",ilo:"אילוקו",inh:"אינגושית",io:"אידו",is:"איסלנדית",it:"איטלקית",iu:"אינוקטיטוט",ja:"יפנית",jbo:"לוז׳באן",jgo:"נגומבה",jmc:"מאקאמה",jpr:"פרסית יהודית",jrb:"ערבית יהודית",jv:"יאוואית",ka:"גאורגית",kaa:"קארא-קלפאק",kab:"קבילה",kac:"קצ׳ין",kaj:"ג׳ו",kam:"קמבה",kaw:"קאווי",kbd:"קברדית",kbl:"קנמבו",kcg:"טיאפ",kde:"מקונדה",kea:"קאבוורדיאנו",kfo:"קורו",kg:"קונגו",kha:"קהאסי",kho:"קוטאנזית",khq:"קוירה צ׳יני",ki:"קיקויו",kj:"קואניאמה",kk:"קזחית",kkj:"קאקו",kl:"גרינלנדית",kln:"קלנג׳ין",km:"חמרית",kmb:"קימבונדו",kn:"קנאדה",ko:"קוריאנית",koi:"קומי-פרמיאקית",kok:"קונקאני",kos:"קוסראיאן",kpe:"קפלה",kr:"קאנורי",krc:"קראצ׳י-בלקר",krl:"קארלית",kru:"קורוק",ks:"קשמירית",ksb:"שמבאלה",ksf:"באפיה",ksh:"קולוניאן",ku:"כורדית",kum:"קומיקית",kut:"קוטנאי",kv:"קומי",kw:"קורנית",ky:"קירגיזית",la:"לטינית",lad:"לדינו",lag:"לאנגי",lah:"לנדה",lam:"למבה",lb:"לוקסמבורגית",lez:"לזגית",lg:"גאנדה",li:"לימבורגית",lkt:"לקוטה",ln:"לינגלה",lo:"לאו",lol:"מונגו",lou:"קריאולית לואיזיאנית",loz:"לוזית",lrc:"לורית צפונית",lt:"ליטאית",lu:"לובה-קטנגה",lua:"לובה-לולואה",lui:"לויסנו",lun:"לונדה",luo:"לואו",lus:"מיזו",luy:"לויה",lv:"לטבית",mad:"מדורזית",maf:"מאפאה",mag:"מאגאהית",mai:"מאיטילית",mak:"מקסאר",man:"מנדינגו",mas:"מסאית",mde:"מאבא",mdf:"מוקשה",mdr:"מנדאר",men:"מנדה",mer:"מרו",mfe:"קריאולית מאוריציאנית",mg:"מלגשית",mga:"אירית תיכונה",mgh:"מאקוואה מטו",mgo:"מטא",mh:"מרשלית",mi:"מאורית",mic:"מיקמק",min:"מיננגקבאו",mk:"מקדונית",ml:"מליאלאם",mn:"מונגולית",mnc:"מנצ׳ו",mni:"מניפורית",moh:"מוהוק",mos:"מוסי",mr:"מראטהי",ms:"מלאית",mt:"מלטית",mua:"מונדאנג",mus:"קריק",mwl:"מירנדזית",mwr:"מרווארי",my:"בורמזית",mye:"מאיין",myv:"ארזיה",mzn:"מאזאנדראני",na:"נאורית",nan:"סינית מין נאן",nap:"נפוליטנית",naq:"נאמה",nb:"נורווגית ספרותית",nd:"נדבלה צפונית",nds:"גרמנית תחתית","nds-NL":"סקסונית תחתית",ne:"נפאלית","new":"נווארי",ng:"נדונגה",nia:"ניאס",niu:"ניואן",nl:"הולנדית","nl-BE":"פלמית",nmg:"קוואסיו",nn:"נורווגית חדשה",nnh:"נגיאמבון",no:"נורווגית",nog:"נוגאי",non:"‏נורדית עתיקה",nqo:"נ׳קו",nr:"נדבלה דרומית",nso:"סותו צפונית",nus:"נואר",nv:"נאוואחו",nwc:"נווארית קלאסית",ny:"ניאנג׳ה",nym:"ניאמווזי",nyn:"ניאנקולה",nyo:"ניורו",nzi:"נזימה",oc:"אוקסיטנית",oj:"אוג׳יבווה",om:"אורומו",or:"אורייה",os:"אוסטית",osa:"אוסג׳",ota:"טורקית עות׳מנית",pa:"פנג׳אבי",pag:"פנגסינאן",pal:"פלאבי",pam:"פמפאניה",pap:"פפיאמנטו",pau:"פלוואן",pcm:"ניגרית פידג׳ית",peo:"פרסית עתיקה",phn:"פיניקית",pi:"פאלי",pl:"פולנית",pon:"פונפיאן",prg:"פרוסית",pro:"פרובנסאל עתיקה",ps:"פאשטו",pt:"פורטוגזית","pt-BR":"פורטוגזית (ברזיל)","pt-PT":"פורטוגזית (פורטוגל)",qu:"קצ׳ואה",quc:"קיצ׳ה",raj:"ראג׳סטאני",rap:"רפאנוי",rar:"ררוטונגאן",rm:"רומאנש",rn:"קירונדי",ro:"רומנית","ro-MD":"מולדבית",rof:"רומבו",rom:"רומאני",root:"רוט",ru:"רוסית",rup:"ארומנית",rw:"קנירואנדית",rwk:"ראווה",sa:"סנסקריט",sad:"סנדאווה",sah:"סאחה",sam:"ארמית שומרונית",saq:"סמבורו",sas:"סאסק",sat:"סאנטאלי",sba:"נגמבאי",sbp:"סאנגו",sc:"סרדינית",scn:"סיציליאנית",sco:"סקוטית",sd:"סינדהית",sdh:"כורדית דרומית",se:"סמי צפונית",see:"סנקה",seh:"סנה",sel:"סלקופ",ses:"קויראבורו סני",sg:"סנגו",sga:"אירית עתיקה",sh:"סרבו-קרואטית",shi:"שילה",shn:"שאן",shu:"ערבית צ׳אדית",si:"סינהלה",sid:"סידאמו",sk:"סלובקית",sl:"סלובנית",sm:"סמואית",sma:"סאמי דרומית",smj:"לולה סאמי",smn:"אינארי סאמי",sms:"סקולט סאמי",sn:"שונה",snk:"סונינקה",so:"סומלית",sog:"סוגדיאן",sq:"אלבנית",sr:"סרבית",srn:"סרנאן טונגו",srr:"סרר",ss:"סאווזי",ssy:"סאהו",st:"סותו דרומית",su:"סונדנזית",suk:"סוקומה",sus:"סוסו",sux:"שומרית",sv:"שוודית",sw:"סווהילי","sw-CD":"סווהילי קונגו",swb:"קומורית",syc:"סירית קלאסית",syr:"סורית",ta:"טמילית",te:"טלוגו",tem:"טימנה",teo:"טסו",ter:"טרנו",tet:"טטום",tg:"טג׳יקית",th:"תאית",ti:"תיגרינית",tig:"טיגרית",tiv:"טיב",tk:"טורקמנית",tkl:"טוקלאו",tl:"טאגאלוג",tlh:"קלינגונית",tli:"טלינגיט",tmh:"טמאשק",tn:"סוואנה",to:"טונגאית",tog:"ניאסה טונגה",tpi:"טוק פיסין",tr:"טורקית",trv:"טרוקו",ts:"טסונגה",tsi:"טסימשיאן",tt:"טטרית",tum:"טומבוקה",tvl:"טובאלו",tw:"טווי",twq:"טסוואק",ty:"טהיטית",tyv:"טובינית",tzm:"תמאזיגת של מרכז מרוקו",udm:"אודמורט",ug:"אויגור",uga:"אוגריתית",uk:"אוקראינית",umb:"אומבונדו",ur:"אורדו",uz:"אוזבקית",vai:"וואי",ve:"וונדה",vi:"וייטנאמית",vo:"‏וולאפיק",vot:"ווטיק",vun:"וונג׳ו",wa:"ולונית",wae:"וואלסר",wal:"ווליאטה",war:"ווראי",was:"וואשו",wbp:"וורלפירי",wo:"וולוף",wuu:"סינית וו",xal:"קלמיקית",xh:"קוסה",xog:"סוגה",yao:"יאו",yap:"יאפזית",yav:"יאנגבן",ybb:"ימבה",yi:"יידיש",yo:"יורובה",yue:"קנטונזית",za:"זואנג",zap:"זאפוטק",zbl:"בליסימבולס",zen:"זנאגה",zgh:"תמזיע׳ת מרוקאית תקנית",zh:"סינית","zh-Hans":"סינית מנדרינית פשוטה","zh-Hant":"סינית מנדרינית מסורתית",zu:"זולו",zun:"זוני",zza:"זאזא"},scriptNames:{Cyrl:"קירילי",Latn:"לטיני",Arab:"ערבי",Guru:"גורמוקי",Hans:"פשוט",Hant:"מסורתי"}},hi:{rtl:false,languageNames:{aa:"अफ़ार",ab:"अब्ख़ाज़ियन",ace:"अचाइनीस",ach:"अकोली",ada:"अदान्गमे",ady:"अदिघे",ae:"अवस्ताई",af:"अफ़्रीकी",afh:"अफ्रिहिली",agq:"अग्हेम",ain:"ऐनू",ak:"अकन",akk:"अक्कादी",ale:"अलेउत",alt:"दक्षिणी अल्ताई",am:"अम्हेरी",an:"अर्गोनी",ang:"पुरानी अंग्रेज़ी",anp:"अंगिका",ar:"अरबी","ar-001":"आधुनिक मानक अरबी",arc:"ऐरेमेक",arn:"मापूचे",arp:"अरापाहो",ars:"नज्दी अरबी",arw:"अरावक",as:"असमिया",asa:"असु",ast:"अस्तुरियन",av:"अवेरिक",awa:"अवधी",ay:"आयमारा",az:"अज़रबैजानी",ba:"बशख़िर",bal:"बलूची",ban:"बालिनीस",bas:"बसा",be:"बेलारूसी",bej:"बेजा",bem:"बेम्बा",bez:"बेना",bg:"बुल्गारियाई",bgn:"पश्चिमी बलोची",bho:"भोजपुरी",bi:"बिस्लामा",bik:"बिकोल",bin:"बिनी",bla:"सिक्सिका",bm:"बाम्बारा",bn:"बंगाली",bo:"तिब्बती",br:"ब्रेटन",bra:"ब्रज",brx:"बोडो",bs:"बोस्नियाई",bua:"बुरियात",bug:"बगिनीस",byn:"ब्लिन",ca:"कातालान",cad:"कैड्डो",car:"कैरिब",cch:"अत्सम",ccp:"चकमा",ce:"चेचन",ceb:"सिबुआनो",cgg:"शिगा",ch:"कमोरो",chb:"चिब्चा",chg:"छगाताई",chk:"चूकीस",chm:"मारी",chn:"चिनूक जारगॉन",cho:"चोक्तौ",chp:"शिपेव्यान",chr:"चेरोकी",chy:"शेयेन्न",ckb:"सोरानी कुर्दिश",co:"कोर्सीकन",cop:"कॉप्टिक",cr:"क्री",crh:"क्रीमीन तुर्की",crs:"सेसेल्वा क्रिओल फ्रेंच",cs:"चेक",csb:"काशुबियन",cu:"चर्च साल्विक",cv:"चूवाश",cy:"वेल्श",da:"डेनिश",dak:"दाकोता",dar:"दार्गवा",dav:"तैता",de:"जर्मन","de-AT":"ऑस्ट्रियाई जर्मन","de-CH":"स्विस उच्च जर्मन",del:"डिलैवेयर",den:"स्लेव",dgr:"डोग्रिब",din:"दिन्का",dje:"झार्मा",doi:"डोग्री",dsb:"निचला सॉर्बियन",dua:"दुआला",dum:"मध्यकालीन पुर्तगाली",dv:"दिवेही",dyo:"जोला-फोंई",dyu:"ड्युला",dz:"ज़ोन्गखा",dzg:"दज़ागा",ebu:"एम्बु",ee:"ईवे",efi:"एफिक",egy:"प्राचीन मिस्री",eka:"एकाजुक",el:"यूनानी",elx:"एलामाइट",en:"अंग्रेज़ी","en-AU":"ऑस्ट्रेलियाई अंग्रेज़ी","en-CA":"कनाडाई अंग्रेज़ी","en-GB":"ब्रिटिश अंग्रेज़ी","en-US":"अमेरिकी अंग्रेज़ी",enm:"मध्यकालीन अंग्रेज़ी",eo:"एस्पेरेंतो",es:"स्पेनी","es-419":"लैटिन अमेरिकी स्पेनिश","es-ES":"यूरोपीय स्पेनिश","es-MX":"मैक्सिकन स्पेनिश",et:"एस्टोनियाई",eu:"बास्क",ewo:"इवोन्डो",fa:"फ़ारसी",fan:"फैन्ग",fat:"फन्टी",ff:"फुलाह",fi:"फ़िनिश",fil:"फ़िलिपीनो",fj:"फिजियन",fo:"फ़ैरोइज़",fon:"फॉन",fr:"फ़्रेंच","fr-CA":"कनाडाई फ़्रेंच","fr-CH":"स्विस फ़्रेंच",frc:"केजन फ़्रेंच",frm:"मध्यकालीन फ़्रांसीसी",fro:"पुरातन फ़्रांसीसी",frr:"उत्तरी फ़्रीसियाई",frs:"पूर्वी फ़्रीसियाई",fur:"फ्रीयुलीयान",fy:"पश्चिमी फ़्रिसियाई",ga:"आयरिश",gaa:"गा",gag:"गागौज़",gay:"गायो",gba:"ग्बाया",gd:"स्कॉटिश गाएलिक",gez:"गीज़",gil:"गिल्बरतीस",gl:"गैलिशियन",gmh:"मध्यकालीन हाइ जर्मन",gn:"गुआरानी",goh:"पुरातन हाइ जर्मन",gon:"गाँडी",gor:"गोरोन्तालो",got:"गॉथिक",grb:"ग्रेबो",grc:"प्राचीन यूनानी",gsw:"स्विस जर्मन",gu:"गुजराती",guz:"गुसी",gv:"मैंक्स",gwi:"ग्विचइन",ha:"हौसा",hai:"हैडा",haw:"हवाई",he:"हिब्रू",hi:"हिन्दी",hil:"हिलिगेनन",hit:"हिताइत",hmn:"ह्मॉंग",ho:"हिरी मोटू",hr:"क्रोएशियाई",hsb:"ऊपरी सॉर्बियन",ht:"हैतियाई",hu:"हंगेरियाई",hup:"हूपा",hy:"आर्मेनियाई",hz:"हरैरो",ia:"इंटरलिंगुआ",iba:"इबान",ibb:"इबिबियो",id:"इंडोनेशियाई",ie:"ईन्टरलिंगुइ",ig:"ईग्बो",ii:"सिचुआन यी",ik:"इनुपियाक्",ilo:"इलोको",inh:"इंगुश",io:"इडौ",is:"आइसलैंडिक",it:"इतालवी",iu:"इनूकीटूत्",ja:"जापानी",jbo:"लोज्बान",jgo:"नगोंबा",jmc:"मैकहैमे",jpr:"जुदेओ-पर्शियन",jrb:"जुदेओ-अरेबिक",jv:"जावानीज़",ka:"जॉर्जियाई",kaa:"कारा-कल्पक",kab:"कबाइल",kac:"काचिन",kaj:"ज्जु",kam:"कम्बा",kaw:"कावी",kbd:"कबार्डियन",kcg:"त्याप",kde:"मैकोंड",kea:"काबुवेर्दियानु",kfo:"कोरो",kg:"कोंगो",kha:"खासी",kho:"खोतानीस",khq:"कोयरा चीनी",ki:"किकुयू",kj:"क्वान्यामा",kk:"कज़ाख़",kkj:"काको",kl:"कलालीसुत",kln:"कलेंजिन",km:"खमेर",kmb:"किम्बन्दु",kn:"कन्नड़",ko:"कोरियाई",koi:"कोमी-पर्मयाक",kok:"कोंकणी",kos:"कोसरैन",kpe:"क्पेल",kr:"कनुरी",krc:"कराचय-बल्कार",krl:"करेलियन",kru:"कुरूख",ks:"कश्मीरी",ksb:"शम्बाला",ksf:"बफिआ",ksh:"कोलोनियाई",ku:"कुर्दिश",kum:"कुमीक",kut:"क्यूतनाई",kv:"कोमी",kw:"कोर्निश",ky:"किर्गीज़",la:"लैटिन",lad:"लादीनो",lag:"लांगि",lah:"लाह्न्डा",lam:"लाम्बा",lb:"लग्ज़मबर्गी",lez:"लेज़्घीयन",lg:"गांडा",li:"लिंबर्गिश",lkt:"लैकोटा",ln:"लिंगाला",lo:"लाओ",lol:"मोंगो",lou:"लुईज़ियाना क्रियोल",loz:"लोज़ी",lrc:"उत्तरी लूरी",lt:"लिथुआनियाई",lu:"ल्यूबा-कटांगा",lua:"ल्यूबा-लुलुआ",lui:"लुइसेनो",lun:"लुन्डा",luo:"ल्युओ",lus:"मिज़ो",luy:"ल्युईआ",lv:"लातवियाई",mad:"मादुरीस",mag:"मगही",mai:"मैथिली",mak:"मकासर",man:"मन्डिन्गो",mas:"मसाई",mdf:"मोक्ष",mdr:"मंदार",men:"मेन्डे",mer:"मेरु",mfe:"मोरीस्येन",mg:"मालागासी",mga:"मध्यकालीन आइरिश",mgh:"मैखुवा-मीट्टो",mgo:"मेटा",mh:"मार्शलीज़",mi:"माओरी",mic:"मिकमैक",min:"मिनांग्काबाउ",mk:"मकदूनियाई",ml:"मलयालम",mn:"मंगोलियाई",mnc:"मन्चु",mni:"मणिपुरी",moh:"मोहौक",mos:"मोस्सी",mr:"मराठी",ms:"मलय",mt:"माल्टीज़",mua:"मुंडैंग",mus:"क्रीक",mwl:"मिरांडी",mwr:"मारवाड़ी",my:"बर्मीज़",myv:"एर्ज़या",mzn:"माज़न्देरानी",na:"नाउरू",nap:"नीपोलिटन",naq:"नामा",nb:"नॉर्वेजियाई बोकमाल",nd:"उत्तरी देबेल",nds:"निचला जर्मन","nds-NL":"निचली सैक्सन",ne:"नेपाली","new":"नेवाड़ी",ng:"डोन्गा",nia:"नियास",niu:"नियुआन",nl:"डच","nl-BE":"फ़्लेमिश",nmg:"क्वासिओ",nn:"नॉर्वेजियाई नॉयनॉर्स्क",nnh:"गैम्बू",no:"नॉर्वेजियाई",nog:"नोगाई",non:"पुराना नॉर्स",nqo:"एन्को",nr:"दक्षिण देबेल",nso:"उत्तरी सोथो",nus:"नुएर",nv:"नावाजो",nwc:"पारम्परिक नेवारी",ny:"न्यानजा",nym:"न्यामवेज़ी",nyn:"न्यानकोल",nyo:"न्योरो",nzi:"न्ज़ीमा",oc:"ओसीटान",oj:"ओजिब्वा",om:"ओरोमो",or:"उड़िया",os:"ओस्सेटिक",osa:"ओसेज",ota:"ओटोमान तुर्किश",pa:"पंजाबी",pag:"पंगासीनान",pal:"पाह्लावी",pam:"पाम्पान्गा",pap:"पापियामेन्टो",pau:"पलोउआन",pcm:"नाइजीरियाई पिडगिन",peo:"पुरानी फारसी",phn:"फोएनिशियन",pi:"पाली",pl:"पोलिश",pon:"पोह्नपिएन",prg:"प्रुशियाई",pro:"पुरानी प्रोवेन्सल",ps:"पश्तो",pt:"पुर्तगाली","pt-BR":"ब्राज़ीली पुर्तगाली","pt-PT":"यूरोपीय पुर्तगाली",qu:"क्वेचुआ",quc:"किश",raj:"राजस्थानी",rap:"रापानुई",rar:"रारोतोंगन",rm:"रोमान्श",rn:"रुन्दी",ro:"रोमानियाई","ro-MD":"मोलडावियन",rof:"रोम्बो",rom:"रोमानी",root:"रूट",ru:"रूसी",rup:"अरोमानियन",rw:"किन्यारवांडा",rwk:"रवा",sa:"संस्कृत",sad:"सन्डावे",sah:"याकूत",sam:"सामैरिटन अरैमिक",saq:"सैम्बुरु",sas:"सासाक",sat:"संथाली",sba:"न्गाम्बे",sbp:"सैंगु",sc:"सार्दिनियन",scn:"सिसिलियन",sco:"स्कॉट्स",sd:"सिंधी",sdh:"दक्षिणी कार्डिश",se:"नॉर्दन सामी",seh:"सेना",sel:"सेल्कप",ses:"कोयराबोरो सेन्नी",sg:"सांगो",sga:"पुरानी आइरिश",sh:"सेर्बो-क्रोएशियाई",shi:"तैचेल्हित",shn:"शैन",si:"सिंहली",sid:"सिदामो",sk:"स्लोवाक",sl:"स्लोवेनियाई",sm:"सामोन",sma:"दक्षिणी सामी",smj:"ल्युल सामी",smn:"इनारी सामी",sms:"स्कोल्ट सामी",sn:"शोणा",snk:"सोनिन्के",so:"सोमाली",sog:"सोग्डिएन",sq:"अल्बानियाई",sr:"सर्बियाई",srn:"स्रानान टॉन्गो",srr:"सेरेर",ss:"स्वाती",ssy:"साहो",st:"दक्षिणी सेसेथो",su:"सुंडानी",suk:"सुकुमा",sus:"सुसु",sux:"सुमेरियन",sv:"स्वीडिश",sw:"स्वाहिली","sw-CD":"कांगो स्वाहिली",swb:"कोमोरियन",syc:"क्लासिकल सिरिएक",syr:"सिरिएक",ta:"तमिल",te:"तेलुगू",tem:"टिम्ने",teo:"टेसो",ter:"तेरेनो",tet:"तेतुम",tg:"ताजिक",th:"थाई",ti:"तिग्रीन्या",tig:"टाइग्रे",tiv:"तिव",tk:"तुर्कमेन",tkl:"तोकेलाऊ",tl:"टैगलॉग",tlh:"क्लिंगन",tli:"त्लिंगित",tmh:"तामाशेक",tn:"सेत्स्वाना",to:"टोंगन",tog:"न्यासा टोन्गा",tpi:"टोक पिसिन",tr:"तुर्की",trv:"तारोको",ts:"सोंगा",tsi:"त्सिमीशियन",tt:"तातार",tum:"तम्बूका",tvl:"तुवालु",tw:"ट्वी",twq:"टासवाक",ty:"ताहितियन",tyv:"तुवीनियन",tzm:"मध्य एटलस तमाज़ित",udm:"उदमुर्त",ug:"उइगर",uga:"युगैरिटिक",uk:"यूक्रेनियाई",umb:"उम्बुन्डु",ur:"उर्दू",uz:"उज़्बेक",vai:"वाई",ve:"वेन्दा",vi:"वियतनामी",vo:"वोलापुक",vot:"वॉटिक",vun:"वुंजो",wa:"वाल्लून",wae:"वाल्सर",wal:"वलामो",war:"वारै",was:"वाशो",wbp:"वॉल्पेरी",wo:"वोलोफ़",wuu:"वू चीनी",xal:"काल्मिक",xh:"ख़ोसा",xog:"सोगा",yao:"याओ",yap:"यापीस",yav:"यांगबेन",ybb:"येंबा",yi:"यहूदी",yo:"योरूबा",yue:"कैंटोनीज़",za:"ज़ुआंग",zap:"ज़ेपोटेक",zbl:"ब्लिसिम्बॉल्स",zen:"ज़ेनान्गा",zgh:"मानक मोरक्कन तामाज़ाइट",zh:"चीनी","zh-Hans":"सरलीकृत मैंडेरिन चीनी","zh-Hant":"पारंपरिक मैंडेरिन चीनी",zu:"ज़ुलू",zun:"ज़ूनी",zza:"ज़ाज़ा"},scriptNames:{Cyrl:"सिरिलिक",Latn:"लैटिन",Arab:"अरबी",Guru:"गुरमुखी",Tfng:"तिफिनाघ",Vaii:"वाई",Hans:"सरलीकृत",Hant:"पारंपरिक"}},hr:{rtl:false,languageNames:{aa:"afarski",ab:"abhaski",ace:"ačinski",ach:"ačoli",ada:"adangme",ady:"adigejski",ae:"avestički",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainuski",ak:"akanski",akk:"akadski",ale:"aleutski",alt:"južni altai",am:"amharski",an:"aragonski",ang:"staroengleski",anp:"angika",ar:"arapski","ar-001":"moderni standardni arapski",arc:"aramejski",arn:"mapuche",arp:"arapaho",ars:"najdi arapski",arw:"aravački",as:"asamski",asa:"asu",ast:"asturijski",av:"avarski",awa:"awadhi",ay:"ajmarski",az:"azerbajdžanski","az-Arab":"južnoazerbajdžanski",ba:"baškirski",bal:"belučki",ban:"balijski",bas:"basa",bax:"bamunski",bbj:"ghomala",be:"bjeloruski",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bugarski",bgn:"zapadnobaludžijski",bho:"bhojpuri",bi:"bislama",bik:"bikolski",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bangla",bo:"tibetski",br:"bretonski",bra:"braj",brx:"bodo",bs:"bosanski",bss:"akoose",bua:"burjatski",bug:"buginski",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalonski",cad:"caddo",car:"karipski",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"čečenski",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"čibča",chg:"čagatajski",chk:"chuukese",chm:"marijski",chn:"chinook žargon",cho:"choctaw",chp:"chipewyan",chr:"čerokijski",chy:"čejenski",ckb:"soranski kurdski",co:"korzički",cop:"koptski",cr:"cree",crh:"krimski turski",crs:"sejšelski kreolski",cs:"češki",csb:"kašupski",cu:"crkvenoslavenski",cv:"čuvaški",cy:"velški",da:"danski",dak:"dakota jezik",dar:"dargwa",dav:"taita",de:"njemački","de-AT":"austrijski njemački","de-CH":"gornjonjemački (švicarski)",del:"delavarski",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"donjolužički",dua:"duala",dum:"srednjonizozemski",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"staroegipatski",eka:"ekajuk",el:"grčki",elx:"elamitski",en:"engleski","en-AU":"australski engleski","en-CA":"kanadski engleski","en-GB":"britanski engleski","en-US":"američki engleski",enm:"srednjoengleski",eo:"esperanto",es:"španjolski","es-419":"latinoamerički španjolski","es-ES":"europski španjolski","es-MX":"meksički španjolski",et:"estonski",eu:"baskijski",ewo:"ewondo",fa:"perzijski",fan:"fang",fat:"fanti",ff:"fula",fi:"finski",fil:"filipinski",fj:"fidžijski",fo:"ferojski",fr:"francuski","fr-CA":"kanadski francuski","fr-CH":"švicarski francuski",frc:"kajunski francuski",frm:"srednjofrancuski",fro:"starofrancuski",frr:"sjevernofrizijski",frs:"istočnofrizijski",fur:"furlanski",fy:"zapadnofrizijski",ga:"irski",gaa:"ga",gag:"gagauski",gan:"gan kineski",gay:"gayo",gba:"gbaya",gd:"škotski gaelski",gez:"geez",gil:"gilbertski",gl:"galicijski",gmh:"srednjogornjonjemački",gn:"gvaranski",goh:"starovisokonjemački",gon:"gondi",gor:"gorontalo",got:"gotski",grb:"grebo",grc:"starogrčki",gsw:"švicarski njemački",gu:"gudžaratski",guz:"gusii",gv:"manski",gwi:"gwich’in",ha:"hausa",hai:"haidi",hak:"hakka kineski",haw:"havajski",he:"hebrejski",hi:"hindski",hil:"hiligaynonski",hit:"hetitski",hmn:"hmong",ho:"hiri motu",hr:"hrvatski",hsb:"gornjolužički",hsn:"xiang kineski",ht:"haićanski kreolski",hu:"mađarski",hup:"hupa",hy:"armenski",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonezijski",ie:"interligua",ig:"igbo",ii:"sichuan ji",ik:"inupiaq",ilo:"iloko",inh:"ingušetski",io:"ido",is:"islandski",it:"talijanski",iu:"inuktitut",ja:"japanski",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"judejsko-perzijski",jrb:"judejsko-arapski",jv:"javanski",ka:"gruzijski",kaa:"kara-kalpak",kab:"kabilski",kac:"kačinski",kaj:"kaje",kam:"kamba",kaw:"kawi",kbd:"kabardinski",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"zelenortski",kfo:"koro",kg:"kongo",kha:"khasi",kho:"khotanese",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazaški",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"kmerski",kmb:"kimbundu",kn:"karnatački",ko:"korejski",koi:"komi-permski",kok:"konkani",kos:"naurski",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"karelijski",kru:"kuruški",ks:"kašmirski",ksb:"shambala",ksf:"bafia",ksh:"kelnski",ku:"kurdski",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"kornski",ky:"kirgiski",la:"latinski",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luksemburški",lez:"lezgiški",lg:"ganda",li:"limburški",lkt:"lakota",ln:"lingala",lo:"laoski",lol:"mongo",lou:"lujzijanski kreolski",loz:"lozi",lrc:"sjevernolurski",lt:"litavski",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"latvijski",mad:"madurski",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masajski",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricijski kreolski",mg:"malgaški",mga:"srednjoirski",mgh:"makhuwa-meetto",mgo:"meta’",mh:"maršalski",mi:"maorski",mic:"micmac",min:"minangkabau",mk:"makedonski",ml:"malajalamski",mn:"mongolski",mnc:"mandžurski",mni:"manipurski",moh:"mohok",mos:"mossi",mr:"marathski",ms:"malajski",mt:"malteški",mua:"mundang",mus:"creek",mwl:"mirandski",mwr:"marwari",my:"burmanski",mye:"myene",myv:"mordvinski",mzn:"mazanderanski",na:"nauru",nan:"min nan kineski",nap:"napolitanski",naq:"nama",nb:"norveški bokmål",nd:"sjeverni ndebele",nds:"donjonjemački","nds-NL":"donjosaksonski",ne:"nepalski","new":"newari",ng:"ndonga",nia:"nias",niu:"niujski",nl:"nizozemski","nl-BE":"flamanski",nmg:"kwasio",nn:"norveški nynorsk",nnh:"ngiemboon",no:"norveški",nog:"nogajski",non:"staronorveški",nqo:"n’ko",nr:"južni ndebele",nso:"sjeverni sotski",nus:"nuerski",nv:"navajo",nwc:"klasični newari",ny:"njandža",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"okcitanski",oj:"ojibwa",om:"oromski",or:"orijski",os:"osetski",osa:"osage",ota:"turski - otomanski",pa:"pandžapski",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauanski",pcm:"nigerijski pidžin",peo:"staroperzijski",phn:"fenički",pi:"pali",pl:"poljski",pon:"pohnpeian",prg:"pruski",pro:"staroprovansalski",ps:"paštunski",pt:"portugalski","pt-BR":"brazilski portugalski","pt-PT":"europski portugalski",qu:"kečuanski",quc:"kiče",raj:"rajasthani",rap:"rapa nui",rar:"rarotonški",rm:"retoromanski",rn:"rundi",ro:"rumunjski","ro-MD":"moldavski",rof:"rombo",rom:"romski",root:"korijenski",ru:"ruski",rup:"aromunski",rw:"kinyarwanda",rwk:"rwa",sa:"sanskrtski",sad:"sandawe",sah:"jakutski",sam:"samarijanski aramejski",saq:"samburu",sas:"sasak",sat:"santalski",sba:"ngambay",sbp:"sangu",sc:"sardski",scn:"sicilijski",sco:"škotski",sd:"sindski",sdh:"južnokurdski",se:"sjeverni sami",see:"seneca",seh:"sena",sel:"selkupski",ses:"koyraboro senni",sg:"sango",sga:"staroirski",sh:"srpsko-hrvatski",shi:"tachelhit",shn:"shan",shu:"čadski arapski",si:"sinhaleški",sid:"sidamo",sk:"slovački",sl:"slovenski",sm:"samoanski",sma:"južni sami",smj:"lule sami",smn:"inari sami",sms:"skolt sami",sn:"shona",snk:"soninke",so:"somalski",sog:"sogdien",sq:"albanski",sr:"srpski",srn:"sranan tongo",srr:"serer",ss:"svati",ssy:"saho",st:"sesotski",su:"sundanski",suk:"sukuma",sus:"susu",sux:"sumerski",sv:"švedski",sw:"svahili","sw-CD":"kongoanski svahili",swb:"komorski",syc:"klasični sirski",syr:"sirijski",ta:"tamilski",te:"teluški",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadžički",th:"tajlandski",ti:"tigrinja",tig:"tigriški",tk:"turkmenski",tkl:"tokelaunski",tl:"tagalog",tlh:"klingonski",tli:"tlingit",tmh:"tamašečki",tn:"cvana",to:"tonganski",tog:"nyasa tonga",tpi:"tok pisin",tr:"turski",trv:"taroko",ts:"tsonga",tsi:"tsimshian",tt:"tatarski",tum:"tumbuka",tvl:"tuvaluanski",tw:"twi",twq:"tasawaq",ty:"tahićanski",tyv:"tuvinski",tzm:"tamašek (Srednji Atlas)",udm:"udmurtski",ug:"ujgurski",uga:"ugaritski",uk:"ukrajinski",umb:"umbundu",ur:"urdski",uz:"uzbečki",ve:"venda",vi:"vijetnamski",vo:"volapük",vot:"votski",vun:"vunjo",wa:"valonski",wae:"walserski",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"volof",wuu:"wu kineski",xal:"kalmyk",xh:"xhosa",xog:"soga",yap:"japski",yav:"yangben",ybb:"yemba",yi:"jidiš",yo:"jorupski",yue:"kantonski",za:"zhuang",zap:"zapotečki",zbl:"Blissovi simboli",zen:"zenaga",zgh:"standardni marokanski tamašek",zh:"kineski","zh-Hans":"mandarinski kineski (pojednostavljeni)","zh-Hant":"mandarinski kineski (tradicionalni)",zu:"zulu",zun:"zuni",zza:"zazaki"},scriptNames:{Cyrl:"ćirilica",Latn:"latinica",Arab:"arapsko pismo",Guru:"gurmukhi pismo",Tfng:"tifinar",Vaii:"vai pismo",Hans:"pojednostavljeno pismo",Hant:"tradicionalno pismo"}},hu:{rtl:false,languageNames:{aa:"afar",ab:"abház",ace:"achinéz",ach:"akoli",ada:"adangme",ady:"adyghe",ae:"avesztán",af:"afrikaans",afh:"afrihili",agq:"agem",ain:"ainu",ak:"akan",akk:"akkád",ale:"aleut",alt:"dél-altaji",am:"amhara",an:"aragonéz",ang:"óangol",anp:"angika",ar:"arab","ar-001":"modern szabányos arab",arc:"arámi",arn:"mapucse",arp:"arapaho",ars:"nedzsdi arab",arw:"aravak",as:"asszámi",asa:"asu",ast:"asztúr",av:"avar",awa:"awádi",ay:"ajmara",az:"azerbajdzsáni",ba:"baskír",bal:"balucsi",ban:"balinéz",bas:"basza",bax:"bamun",bbj:"gomala",be:"belarusz",bej:"bedzsa",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bolgár",bgn:"nyugati beludzs",bho:"bodzspuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bangla",bo:"tibeti",br:"breton",bra:"braj",brx:"bodo",bs:"bosnyák",bss:"koszi",bua:"burját",bug:"buginéz",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalán",cad:"caddo",car:"karib",cay:"kajuga",cch:"atszam",ccp:"csakma",ce:"csecsen",ceb:"szebuano",cgg:"kiga",ch:"csamoró",chb:"csibcsa",chg:"csagatáj",chk:"csukéz",chm:"mari",chn:"csinuk zsargon",cho:"csoktó",chp:"csipevé",chr:"cseroki",chy:"csejen",ckb:"közép-ázsiai kurd",co:"korzikai",cop:"kopt",cr:"krí",crh:"krími tatár",crs:"szeszelva kreol francia",cs:"cseh",csb:"kasub",cu:"egyházi szláv",cv:"csuvas",cy:"walesi",da:"dán",dak:"dakota",dar:"dargva",dav:"taita",de:"német","de-AT":"osztrák német","de-CH":"svájci felnémet",del:"delavár",den:"szlevi",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"alsó-szorb",dua:"duala",dum:"közép holland",dv:"divehi",dyo:"jola-fonyi",dyu:"diula",dz:"dzsonga",dzg:"dazaga",ebu:"embu",ee:"eve",efi:"efik",egy:"óegyiptomi",eka:"ekadzsuk",el:"görög",elx:"elamit",en:"angol","en-AU":"ausztrál angol","en-CA":"kanadai angol","en-GB":"brit angol","en-US":"amerikai angol",enm:"közép angol",eo:"eszperantó",es:"spanyol","es-419":"latin-amerikai spanyol","es-ES":"európai spanyol","es-MX":"spanyol (mexikói)",et:"észt",eu:"baszk",ewo:"evondo",fa:"perzsa",fan:"fang",fat:"fanti",ff:"fulani",fi:"finn",fil:"filippínó",fj:"fidzsi",fo:"feröeri",fr:"francia","fr-CA":"kanadai francia","fr-CH":"svájci francia",frc:"cajun francia",frm:"közép francia",fro:"ófrancia",frr:"északi fríz",frs:"keleti fríz",fur:"friuli",fy:"nyugati fríz",ga:"ír",gaa:"ga",gag:"gagauz",gan:"gan kínai",gay:"gajo",gba:"gbaja",gd:"skóciai kelta",gez:"geez",gil:"ikiribati",gl:"gallego",gmh:"közép felső német",gn:"guarani",goh:"ófelső német",gon:"gondi",gor:"gorontalo",got:"gót",grb:"grebó",grc:"ógörög",gsw:"svájci német",gu:"gudzsaráti",guz:"guszii",gv:"man-szigeti",gwi:"gvicsin",ha:"hausza",hai:"haida",hak:"hakka kínai",haw:"hawaii",he:"héber",hi:"hindi",hil:"ilokano",hit:"hittite",hmn:"hmong",ho:"hiri motu",hr:"horvát",hsb:"felső-szorb",hsn:"xiang kínai",ht:"haiti kreol",hu:"magyar",hup:"hupa",hy:"örmény",hz:"herero",ia:"interlingva",iba:"iban",ibb:"ibibio",id:"indonéz",ie:"interlingue",ig:"igbó",ii:"szecsuán ji",ik:"inupiak",ilo:"ilokó",inh:"ingus",io:"idó",is:"izlandi",it:"olasz",iu:"inuktitut",ja:"japán",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"zsidó-perzsa",jrb:"zsidó-arab",jv:"jávai",ka:"grúz",kaa:"kara-kalpak",kab:"kabije",kac:"kacsin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardi",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"kongo",kha:"kaszi",kho:"kotanéz",khq:"kojra-csíni",ki:"kikuju",kj:"kuanyama",kk:"kazah",kkj:"kakó",kl:"grönlandi",kln:"kalendzsin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"koreai",koi:"komi-permják",kok:"konkani",kos:"kosrei",kpe:"kpelle",kr:"kanuri",krc:"karacsáj-balkár",krl:"karelai",kru:"kuruh",ks:"kasmíri",ksb:"sambala",ksf:"bafia",ksh:"kölsch",ku:"kurd",kum:"kumük",kut:"kutenai",kv:"komi",kw:"korni",ky:"kirgiz",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgi",lez:"lezg",lg:"ganda",li:"limburgi",lkt:"lakota",ln:"lingala",lo:"lao",lol:"mongó",lou:"louisianai kreol",loz:"lozi",lrc:"északi luri",lt:"litván",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"lujia",lv:"lett",mad:"madurai",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makaszar",man:"mandingó",mas:"masai",mde:"maba",mdf:"moksán",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauritiusi kreol",mg:"malgas",mga:"közép ír",mgh:"makua-metó",mgo:"meta’",mh:"marshalli",mi:"maori",mic:"mikmak",min:"minangkabau",mk:"macedón",ml:"malajálam",mn:"mongol",mnc:"mandzsu",mni:"manipuri",moh:"mohawk",mos:"moszi",mr:"maráthi",ms:"maláj",mt:"máltai",mua:"mundang",mus:"krík",mwl:"mirandéz",mwr:"márvári",my:"burmai",mye:"myene",myv:"erzjány",mzn:"mázanderáni",na:"naurui",nan:"min nan kínai",nap:"nápolyi",naq:"nama",nb:"norvég (bokmål)",nd:"északi ndebele",nds:"alsónémet","nds-NL":"alsószász",ne:"nepáli","new":"nevari",ng:"ndonga",nia:"nias",niu:"niuei",nl:"holland","nl-BE":"flamand",nmg:"ngumba",nn:"norvég (nynorsk)",nnh:"ngiemboon",no:"norvég",nog:"nogaj",non:"óskandináv",nqo:"n’kó",nr:"déli ndebele",nso:"északi szeszotó",nus:"nuer",nv:"navahó",nwc:"klasszikus newari",ny:"nyandzsa",nym:"nyamvézi",nyn:"nyankole",nyo:"nyoró",nzi:"nzima",oc:"okszitán",oj:"ojibva",om:"oromo",or:"odia",os:"oszét",osa:"osage",ota:"ottomán török",pa:"pandzsábi",pag:"pangaszinan",pal:"pahlavi",pam:"pampangan",pap:"papiamento",pau:"palaui",pcm:"nigériai pidgin",peo:"óperzsa",phn:"főniciai",pi:"pali",pl:"lengyel",pon:"pohnpei",prg:"porosz",pro:"óprovánszi",ps:"pastu",pt:"portugál","pt-BR":"brazíliai portugál","pt-PT":"európai portugál",qu:"kecsua",quc:"kicse",raj:"radzsasztáni",rap:"rapanui",rar:"rarotongai",rm:"rétoromán",rn:"kirundi",ro:"román","ro-MD":"moldvai",rof:"rombo",rom:"roma",root:"ősi",ru:"orosz",rup:"aromán",rw:"kinyarvanda",rwk:"rwo",sa:"szanszkrit",sad:"szandave",sah:"szaha",sam:"szamaritánus arámi",saq:"szamburu",sas:"sasak",sat:"szantáli",sba:"ngambay",sbp:"szangu",sc:"szardíniai",scn:"szicíliai",sco:"skót",sd:"szindhi",sdh:"dél-kurd",se:"északi számi",see:"szeneka",seh:"szena",sel:"szölkup",ses:"kojra-szenni",sg:"szangó",sga:"óír",sh:"szerbhorvát",shi:"tachelhit",shn:"san",shu:"csádi arab",si:"szingaléz",sid:"szidamó",sk:"szlovák",sl:"szlovén",sm:"szamoai",sma:"déli számi",smj:"lulei számi",smn:"inari számi",sms:"kolta számi",sn:"sona",snk:"szoninke",so:"szomáli",sog:"sogdien",sq:"albán",sr:"szerb",srn:"szranai tongó",srr:"szerer",ss:"sziszuati",ssy:"szahó",st:"déli szeszotó",su:"szundanéz",suk:"szukuma",sus:"szuszu",sux:"sumér",sv:"svéd",sw:"szuahéli","sw-CD":"kongói szuahéli",swb:"comorei",syc:"klasszikus szír",syr:"szír",ta:"tamil",te:"telugu",tem:"temne",teo:"teszó",ter:"terenó",tet:"tetum",tg:"tadzsik",th:"thai",ti:"tigrinya",tig:"tigré",tk:"türkmén",tkl:"tokelaui",tl:"tagalog",tlh:"klingon",tli:"tlingit",tmh:"tamasek",tn:"szecsuáni",to:"tongai",tog:"nyugati nyasza",tpi:"tok pisin",tr:"török",trv:"tarokó",ts:"conga",tsi:"csimsiáni",tt:"tatár",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"szavák",ty:"tahiti",tyv:"tuvai",tzm:"közép-atlaszi tamazigt",udm:"udmurt",ug:"ujgur",uga:"ugariti",uk:"ukrán",umb:"umbundu",ur:"urdu",uz:"üzbég",ve:"venda",vi:"vietnámi",vo:"volapük",vot:"votják",vun:"vunjo",wa:"vallon",wae:"walser",wal:"valamo",war:"varaó",was:"vasó",wbp:"warlpiri",wo:"volof",wuu:"wu kínai",xal:"kalmük",xh:"xhosza",xog:"szoga",yao:"jaó",yap:"japi",yav:"jangben",ybb:"jemba",yi:"jiddis",yo:"joruba",yue:"kantoni",za:"zsuang",zap:"zapoték",zbl:"Bliss jelképrendszer",zen:"zenaga",zgh:"marokkói tamazight",zh:"kínai","zh-Hans":"kínai (egyszerűsített)","zh-Hant":"kínai (hagyományos)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"Cirill",Latn:"Latin",Guru:"Gurmuki",Tfng:"Berber",Vaii:"Vai",Hans:"Egyszerűsített",Hant:"Hagyományos"}},hy:{rtl:false,languageNames:{aa:"աֆարերեն",ab:"աբխազերեն",ace:"աչեհերեն",ach:"աչոլի",ada:"ադանգմերեն",ady:"ադիղերեն",aeb:"թունիսական արաբերեն",af:"աֆրիկաանս",agq:"աղեմ",ain:"այներեն",ak:"աքան",akk:"աքքադերեն",ale:"ալեութերեն",alt:"հարավային ալթայերեն",am:"ամհարերեն",an:"արագոներեն",ang:"հին անգլերեն",anp:"անգիկա",ar:"արաբերեն","ar-001":"արդի ընդհանուր արաբերեն",arc:"արամեերեն",arn:"մապուչի",arp:"արապահո",arq:"ալժիրական արաբերեն",arz:"եգիպտական արաբերեն",as:"ասամերեն",asa:"ասու",ase:"ամերիկյան ժեստերի լեզու",ast:"աստուրերեն",av:"ավարերեն",awa:"ավադհի",ay:"այմարա",az:"ադրբեջաներեն",ba:"բաշկիրերեն",ban:"բալիերեն",bas:"բասաա",be:"բելառուսերեն",bem:"բեմբա",bez:"բենա",bg:"բուլղարերեն",bgn:"արևմտաբելուջիերեն",bho:"բհոպուրի",bi:"բիսլամա",bin:"բինի",bla:"սիկսիկա",bm:"բամբարա",bn:"բենգալերեն",bo:"տիբեթերեն",br:"բրետոներեն",brx:"բոդո",bs:"բոսնիերեն",bss:"աքուզ",bug:"բուգիերեն",byn:"բիլին",ca:"կատալաներեն",ce:"չեչեներեն",ceb:"սեբուերեն",cgg:"չիգա",ch:"չամոռո",chk:"տրուկերեն",chm:"մարի",cho:"չոկտո",chr:"չերոկի",chy:"շայեն",ckb:"սորանի քրդերեն",co:"կորսիկերեն",cop:"ղպտերեն",crh:"ղրիմյան թուրքերեն",crs:"սեյշելյան խառնակերտ ֆրանսերեն",cs:"չեխերեն",cu:"սլավոներեն, եկեղեցական",cv:"չուվաշերեն",cy:"ուելսերեն",da:"դանիերեն",dak:"դակոտա",dar:"դարգիներեն",dav:"թաիթա",de:"գերմաներեն","de-AT":"ավստրիական գերմաներեն","de-CH":"շվեյցարական վերին գերմաներեն",dgr:"դոգրիբ",dje:"զարմա",dsb:"ստորին սորբերեն",dua:"դուալա",dv:"մալդիվերեն",dyo:"ջոլա-ֆոնյի",dz:"ջոնգքհա",dzg:"դազագա",ebu:"էմբու",ee:"էվե",efi:"էֆիկ",egy:"հին եգիպտերեն",eka:"էկաջուկ",el:"հունարեն",en:"անգլերեն","en-AU":"ավստրալիական անգլերեն","en-CA":"կանադական անգլերեն","en-GB":"բրիտանական անգլերեն","en-US":"ամերիկյան անգլերեն",eo:"էսպերանտո",es:"իսպաներեն","es-419":"լատինամերիկյան իսպաներեն","es-ES":"եվրոպական իսպաներեն","es-MX":"մեքսիկական իսպաներեն",et:"էստոներեն",eu:"բասկերեն",ewo:"էվոնդո",fa:"պարսկերեն",ff:"ֆուլահ",fi:"ֆիններեն",fil:"ֆիլիպիներեն",fit:"տորնադելեն ֆիններեն",fj:"ֆիջիերեն",fo:"ֆարյորերեն",fon:"ֆոն",fr:"ֆրանսերեն","fr-CA":"կանադական ֆրանսերեն","fr-CH":"շվեյցարական ֆրանսերեն",fro:"հին ֆրանսերեն",frs:"արևելաֆրիզերեն",fur:"ֆրիուլիերեն",fy:"արևմտաֆրիզերեն",ga:"իռլանդերեն",gaa:"գայերեն",gag:"գագաուզերեն",gbz:"զրադաշտական դարի",gd:"շոտլանդական գաելերեն",gez:"գեեզ",gil:"կիրիբատի",gl:"գալիսերեն",gn:"գուարանի",goh:"հին վերին գերմաներեն",gor:"գորոնտալո",got:"գոթերեն",grc:"հին հունարեն",gsw:"շվեյցարական գերմաներեն",gu:"գուջարաթի",guc:"վայուու",guz:"գուսի",gv:"մեներեն",gwi:"գվիչին",ha:"հաուսա",haw:"հավայիերեն",he:"եբրայերեն",hi:"հինդի",hil:"հիլիգայնոն",hmn:"հմոնգ",hr:"խորվաթերեն",hsb:"վերին սորբերեն",hsn:"սյան չինարեն",ht:"խառնակերտ հայիթերեն",hu:"հունգարերեն",hup:"հուպա",hy:"հայերեն",hz:"հերերո",ia:"ինտերլինգուա",iba:"իբաներեն",ibb:"իբիբիո",id:"ինդոնեզերեն",ie:"ինտերլինգուե",ig:"իգբո",ii:"սիչուան",ilo:"իլոկերեն",inh:"ինգուշերեն",io:"իդո",is:"իսլանդերեն",it:"իտալերեն",iu:"ինուկտիտուտ",ja:"ճապոներեն",jbo:"լոժբան",jgo:"նգոմբա",jmc:"մաշամե",jv:"ճավայերեն",ka:"վրացերեն",kab:"կաբիլերեն",kac:"կաչիներեն",kaj:"ջյու",kam:"կամբա",kbd:"կաբարդերեն",kcg:"տիապ",kde:"մակոնդե",kea:"կաբուվերդերեն",kfo:"կորո",kha:"քասիերեն",khq:"կոյրա չինի",ki:"կիկույու",kj:"կուանյամա",kk:"ղազախերեն",kkj:"կակո",kl:"կալաալիսուտ",kln:"կալենջին",km:"քմերերեն",kmb:"կիմբունդու",kn:"կաննադա",ko:"կորեերեն",koi:"պերմյակ կոմիերեն",kok:"կոնկանի",kpe:"կպելլեերեն",kr:"կանուրի",krc:"կարաչայ-բալկարերեն",krl:"կարելերեն",kru:"կուրուխ",ks:"քաշմիրերեն",ksb:"շամբալա",ksf:"բաֆիա",ksh:"քյոլներեն",ku:"քրդերեն",kum:"կումիկերեն",kv:"կոմիերեն",kw:"կոռներեն",ky:"ղրղզերեն",la:"լատիներեն",lad:"լադինո",lag:"լանգի",lb:"լյուքսեմբուրգերեն",lez:"լեզգիերեն",lg:"գանդա",li:"լիմբուրգերեն",lkt:"լակոտա",ln:"լինգալա",lo:"լաոսերեն",loz:"լոզի",lrc:"հյուսիսային լուրիերեն",lt:"լիտվերեն",lu:"լուբա-կատանգա",lua:"լուբա-լուլուա",lun:"լունդա",luo:"լուո",lus:"միզո",luy:"լույա",lv:"լատվիերեն",mad:"մադուրերեն",mag:"մագահի",mai:"մայթիլի",mak:"մակասարերեն",mas:"մասաի",mdf:"մոկշայերեն",men:"մենդե",mer:"մերու",mfe:"մորիսյեն",mg:"մալգաշերեն",mgh:"մաքուա-մետտո",mgo:"մետա",mh:"մարշալերեն",mi:"մաորի",mic:"միկմակ",min:"մինանգկաբաու",mk:"մակեդոներեն",ml:"մալայալամ",mn:"մոնղոլերեն",mni:"մանիպուրի",moh:"մոհավք",mos:"մոսսի",mr:"մարաթի",mrj:"արևմտամարիերեն",ms:"մալայերեն",mt:"մալթայերեն",mua:"մունդանգ",mus:"կրիկ",mwl:"միրանդերեն",my:"բիրմայերեն",myv:"էրզյա",mzn:"մազանդարաներեն",na:"նաուրու",nap:"նեապոլերեն",naq:"նամա",nb:"գրքային նորվեգերեն",nd:"հյուսիսային նդեբելե",nds:"ստորին գերմաներեն","nds-NL":"ստորին սաքսոներեն",ne:"նեպալերեն","new":"նեվարերեն",ng:"նդոնգա",nia:"նիասերեն",niu:"նիուերեն",nl:"հոլանդերեն","nl-BE":"ֆլամանդերեն",nmg:"կվասիո",nn:"նոր նորվեգերեն",nnh:"նգիեմբուն",no:"նորվեգերեն",nog:"նոգայերեն",non:"հին նորվեգերեն",nqo:"նկո",nr:"հարավային նդեբելե",nso:"հյուսիսային սոթո",nus:"նուեր",nv:"նավախո",ny:"նյանջա",nyn:"նյանկոլե",oc:"օքսիտաներեն",oj:"օջիբվա",om:"օրոմո",or:"օրիյա",os:"օսերեն",osa:"օսեյջ",ota:"օսմաներեն",pa:"փենջաբերեն",pag:"պանգասինաներեն",pal:"պահլավերեն",pam:"պամպանգաերեն",pap:"պապյամենտո",pau:"պալաուերեն",pcd:"պիկարդերեն",pcm:"նիգերյան կրեոլերեն",pdc:"փենսիլվանական գերմաներեն",pdt:"պլատագերմաներեն",peo:"հին պարսկերեն",pfl:"պալատինյան գերմաներեն",phn:"փյունիկերեն",pi:"պալի",pl:"լեհերեն",pms:"պիեմոնտերեն",pnt:"պոնտերեն",pon:"պոնպեերեն",prg:"պրուսերեն",pro:"հին պրովանսերեն",ps:"փուշթու",pt:"պորտուգալերեն","pt-BR":"բրազիլական պորտուգալերեն","pt-PT":"եվրոպական պորտուգալերեն",qu:"կեչուա",quc:"քիչե",raj:"ռաջաստաներեն",rap:"ռապանուի",rar:"ռարոտոնգաներեն",rgn:"ռոմանիոլերեն",rif:"ռիֆերեն",rm:"ռոմանշերեն",rn:"ռունդի",ro:"ռումիներեն","ro-MD":"մոլդովերեն",rof:"ռոմբո",rom:"ռոմաներեն",root:"ռուտերեն",rtm:"ռոտուման",ru:"ռուսերեն",rue:"ռուսիներեն",rug:"ռովիանա",rup:"արոմաներեն",rw:"կինյառուանդա",rwk:"ռվա",sa:"սանսկրիտ",sad:"սանդավե",sah:"յակուտերեն",saq:"սամբուրու",sat:"սանտալի",sba:"նգամբայ",sbp:"սանգու",sc:"սարդիներեն",scn:"սիցիլիերեն",sco:"շոտլանդերեն",sd:"սինդհի",sdh:"հարավային քրդերեն",se:"հյուսիսային սաամի",seh:"սենա",ses:"կոյրաբորո սեննի",sg:"սանգո",sga:"հին իռլանդերեն",sh:"սերբա-խորվաթերեն",shi:"տաշելհիթ",shn:"շաներեն",si:"սինհալերեն",sk:"սլովակերեն",sl:"սլովեներեն",sm:"սամոաերեն",sma:"հարավային սաամի",smj:"լուլե սաամի",smn:"ինարի սաամի",sms:"սկոլտ սաամի",sn:"շոնա",snk:"սոնինկե",so:"սոմալիերեն",sq:"ալբաներեն",sr:"սերբերեն",srn:"սրանան տոնգո",ss:"սվազերեն",ssy:"սահոերեն",st:"հարավային սոթո",su:"սունդաներեն",suk:"սուկումա",sv:"շվեդերեն",sw:"սուահիլի","sw-CD":"կոնգոյի սուահիլի",swb:"կոմորերեն",syr:"ասորերեն",ta:"թամիլերեն",tcy:"տուլու",te:"թելուգու",tem:"տեմնե",teo:"տեսո",ter:"տերենո",tet:"տետում",tg:"տաջիկերեն",th:"թայերեն",ti:"տիգրինյա",tig:"տիգրե",tiv:"տիվերեն",tk:"թուրքմեներեն",tkl:"տոկելաու",tkr:"ցախուր",tl:"տագալերեն",tlh:"կլինգոն",tli:"տլինգիտ",tly:"թալիշերեն",tmh:"տամաշեկ",tn:"ցվանա",to:"տոնգերեն",tpi:"տոկ փիսին",tr:"թուրքերեն",tru:"տուրոյո",trv:"տարոկո",ts:"ցոնգա",tsd:"ցակոներեն",tsi:"ցիմշյան",tt:"թաթարերեն",tum:"տումբուկա",tvl:"թուվալուերեն",tw:"տուի",twq:"տասավաք",ty:"թաիտերեն",tyv:"տուվերեն",tzm:"կենտրոնատլասյան թամազիղտ",udm:"ուդմուրտերեն",ug:"ույղուրերեն",uga:"ուգարիտերեն",uk:"ուկրաիներեն",umb:"ումբունդու",ur:"ուրդու",uz:"ուզբեկերեն",vai:"վաի",ve:"վենդա",vec:"վենետերեն",vep:"վեպսերեն",vi:"վիետնամերեն",vls:"արևմտաֆլամանդերեն",vo:"վոլապյուկ",vot:"վոդերեն",vro:"վորո",vun:"վունջո",wa:"վալոներեն",wae:"վալսերեն",wal:"վոլայտա",war:"վարայերեն",was:"վաշո",wbp:"վարլպիրի",wo:"վոլոֆ",wuu:"վու չինարեն",xal:"կալմիկերեն",xh:"քոսա",xog:"սոգա",yao:"յաո",yap:"յափերեն",yav:"յանգբեն",ybb:"եմբա",yi:"իդիշ",yo:"յորուբա",yue:"կանտոներեն",za:"ժուանգ",zap:"սապոտեկերեն",zea:"զեյլանդերեն",zen:"զենագա",zgh:"ընդհանուր մարոկյան թամազիղտ",zh:"չինարեն","zh-Hans":"չինարեն (պարզեցված չինական)","zh-Hant":"չինարեն (ավանդական չինական)",zu:"զուլուերեն",zun:"զունիերեն",zza:"զազաերեն"},scriptNames:{Cyrl:"կյուրեղագիր",Latn:"լատինական",Arab:"արաբական",Guru:"գուրմուխի",Hans:"պարզեցված չինական",Hant:"ավանդական չինական"}},ia:{rtl:false,languageNames:{aa:"afar",ab:"abkhazo",ace:"acehnese",ada:"adangme",ady:"adygeano",af:"afrikaans",agq:"aghem",ain:"ainu",ak:"akan",ale:"aleuto",alt:"altai del sud",am:"amharico",an:"aragonese",anp:"angika",ar:"arabe","ar-001":"arabe standard moderne",arn:"mapuche",arp:"arapaho",as:"assamese",asa:"asu",ast:"asturiano",av:"avaro",awa:"awadhi",ay:"aymara",az:"azerbaidzhano",ba:"bashkir",ban:"balinese",bas:"basaa",be:"bielorusso",bem:"bemba",bez:"bena",bg:"bulgaro",bho:"bhojpuri",bi:"bislama",bin:"bini",bla:"siksika",bm:"bambara",bn:"bengalese",bo:"tibetano",br:"breton",brx:"bodo",bs:"bosniaco",bug:"buginese",byn:"blin",ca:"catalano",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chk:"chuukese",chm:"mari",cho:"choctaw",chr:"cherokee",chy:"cheyenne",ckb:"kurdo central",co:"corso",crs:"creolo seychellese",cs:"checo",cu:"slavo ecclesiastic",cv:"chuvash",cy:"gallese",da:"danese",dak:"dakota",dar:"dargwa",dav:"taita",de:"germano","de-AT":"germano austriac","de-CH":"alte germano suisse",dgr:"dogrib",dje:"zarma",dsb:"basse sorabo",dua:"duala",dv:"divehi",dyo:"jola-fonyi",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",eka:"ekajuk",el:"greco",en:"anglese","en-AU":"anglese australian","en-CA":"anglese canadian","en-GB":"anglese britannic","en-US":"anglese american",eo:"esperanto",es:"espaniol","es-419":"espaniol latinoamerican","es-ES":"espaniol europee","es-MX":"espaniol mexican",et:"estoniano",eu:"basco",ewo:"ewondo",fa:"persa",ff:"fula",fi:"finnese",fil:"filipino",fj:"fijiano",fo:"feroese",fr:"francese","fr-CA":"francese canadian","fr-CH":"francese suisse",fur:"friulano",fy:"frison occidental",ga:"irlandese",gaa:"ga",gd:"gaelico scotese",gez:"ge’ez",gil:"gilbertese",gl:"galleco",gn:"guarani",gor:"gorontalo",gsw:"germano suisse",gu:"gujarati",guz:"gusii",gv:"mannese",gwi:"gwich’in",ha:"hausa",haw:"hawaiano",he:"hebreo",hi:"hindi",hil:"hiligaynon",hmn:"hmong",hr:"croato",hsb:"alte sorabo",ht:"creolo haitian",hu:"hungaro",hup:"hupa",hy:"armeniano",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesiano",ig:"igbo",ii:"yi de Sichuan",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandese",it:"italiano",iu:"inuktitut",ja:"japonese",jbo:"lojban",jgo:"ngomba",jmc:"machame",jv:"javanese",ka:"georgiano",kab:"kabylo",kac:"kachin",kaj:"jju",kam:"kamba",kbd:"cabardiano",kcg:"tyap",kde:"makonde",kea:"capoverdiano",kfo:"koro",kha:"khasi",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazakh",kkj:"kako",kl:"groenlandese",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"coreano",kok:"konkani",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkaro",krl:"careliano",kru:"kurukh",ks:"kashmiri",ksb:"shambala",ksf:"bafia",ksh:"coloniese",ku:"kurdo",kum:"kumyko",kv:"komi",kw:"cornico",ky:"kirghizo",la:"latino",lad:"ladino",lag:"langi",lb:"luxemburgese",lez:"lezghiano",lg:"luganda",li:"limburgese",lkt:"lakota",ln:"lingala",lo:"laotiano",loz:"lozi",lrc:"luri del nord",lt:"lithuano",lu:"luba-katanga",lua:"luba-lulua",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letton",mad:"madurese",mag:"magahi",mai:"maithili",mak:"macassarese",mas:"masai",mdf:"moksha",men:"mende",mer:"meri",mfe:"creolo mauritian",mg:"malgache",mgh:"makhuwa-meetto",mgo:"metaʼ",mh:"marshallese",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedone",ml:"malayalam",mn:"mongol",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malay",mt:"maltese",mua:"mundang",mus:"creek",mwl:"mirandese",my:"birmano",myv:"erzya",mzn:"mazanderani",na:"nauru",nap:"napolitano",naq:"nama",nb:"norvegiano bokmål",nd:"ndebele del nord","nds-NL":"nds (Nederlandia)",ne:"nepalese","new":"newari",ng:"ndonga",nia:"nias",niu:"nieuano",nl:"nederlandese","nl-BE":"flamingo",nmg:"kwasio",nn:"norvegiano nynorsk",nnh:"ngiemboon",nog:"nogai",nqo:"n’ko",nr:"ndebele del sud",nso:"sotho del nord",nus:"nuer",nv:"navajo",ny:"nyanja",nyn:"nyankole",oc:"occitano",om:"oromo",or:"oriya",os:"osseto",pa:"punjabi",pag:"pangasinan",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin nigerian",pl:"polonese",prg:"prussiano",ps:"pashto",pt:"portugese","pt-BR":"portugese de Brasil","pt-PT":"portugese de Portugal",qu:"quechua",quc:"kʼicheʼ",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romaniano","ro-MD":"moldavo",rof:"rombo",root:"radice",ru:"russo",rup:"aromaniano",rw:"kinyarwanda",rwk:"rwa",sa:"sanscrito",sad:"sandawe",sah:"yakuto",saq:"samburu",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scotese",sd:"sindhi",se:"sami del nord",seh:"sena",ses:"koyraboro senni",sg:"sango",shi:"tachelhit",shn:"shan",si:"cingalese",sk:"slovaco",sl:"sloveno",sm:"samoano",sma:"sami del sud",smj:"sami de Lule",smn:"sami de Inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somali",sq:"albanese",sr:"serbo",srn:"sranan tongo",ss:"swati",ssy:"saho",st:"sotho del sud",su:"sundanese",suk:"sukuma",sv:"svedese",sw:"swahili","sw-CD":"swahili del Congo",swb:"comoriano",syr:"syriaco",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",tet:"tetum",tg:"tajiko",th:"thai",ti:"tigrinya",tig:"tigre",tk:"turkmeno",tlh:"klingon",tn:"tswana",to:"tongano",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tt:"tataro",tum:"tumbuka",tvl:"tuvaluano",twq:"tasawaq",ty:"tahitiano",tyv:"tuvano",tzm:"tamazight del Atlas Central",udm:"udmurto",ug:"uighur",uk:"ukrainiano",umb:"umbundu",ur:"urdu",uz:"uzbeko",ve:"venda",vi:"vietnamese",vo:"volapük",vun:"vunjo",wa:"wallon",wae:"walser",wal:"wolaytta",war:"waray",wo:"wolof",xal:"calmuco",xh:"xhosa",xog:"soga",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yue:"cantonese",zgh:"tamazight marocchin standard",zh:"chinese","zh-Hans":"chinese (simplificate)","zh-Hant":"chinese (traditional)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cyrillic",Latn:"latin",Arab:"arabe",Guru:"gurmukhi",Hans:"simplificate",Hant:"traditional"}},id:{rtl:false,languageNames:{aa:"Afar",ab:"Abkhaz",ace:"Aceh",ach:"Acoli",ada:"Adangme",ady:"Adygei",ae:"Avesta",aeb:"Arab Tunisia",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadia",akz:"Alabama",ale:"Aleut",alt:"Altai Selatan",am:"Amharik",an:"Aragon",ang:"Inggris Kuno",anp:"Angika",ar:"Arab","ar-001":"Arab Standar Modern",arc:"Aram",arn:"Mapuche",arp:"Arapaho",arq:"Arab Aljazair",ars:"Arab Najdi",arw:"Arawak",ary:"Arab Maroko",arz:"Arab Mesir",as:"Assam",asa:"Asu",ase:"Bahasa Isyarat Amerika",ast:"Asturia",av:"Avar",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Bali",bar:"Bavaria",bas:"Basa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusia",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bg:"Bulgaria",bgn:"Balochi Barat",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bengali",bo:"Tibet",br:"Breton",bra:"Braj",brx:"Bodo",bs:"Bosnia",bss:"Akoose",bua:"Buriat",bug:"Bugis",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Katalan",cad:"Kado",car:"Karib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Kiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuuke",chm:"Mari",chn:"Jargon Chinook",cho:"Koktaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",ckb:"Kurdi Sorani",co:"Korsika",cop:"Koptik",cr:"Kree",crh:"Tatar Krimea",crs:"Seselwa Kreol Prancis",cs:"Cheska",csb:"Kashubia",cu:"Bahasa Gereja Slavonia",cv:"Chuvash",cy:"Welsh",da:"Dansk",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"Jerman","de-AT":"Jerman (Austria)","de-CH":"Jerman Tinggi (Swiss)",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Sorbia Hilir",dua:"Duala",dum:"Belanda Abad Pertengahan",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egy:"Mesir Kuno",eka:"Ekajuk",el:"Yunani",elx:"Elam",en:"Inggris","en-AU":"Inggris (Australia)","en-CA":"Inggris (Kanada)","en-GB":"Inggris (Inggris)","en-US":"Inggris (Amerika Serikat)",enm:"Inggris Abad Pertengahan",eo:"Esperanto",es:"Spanyol","es-419":"Spanyol (Amerika Latin)","es-ES":"Spanyol (Eropa)","es-MX":"Spanyol (Meksiko)",et:"Esti",eu:"Basque",ewo:"Ewondo",fa:"Persia",fan:"Fang",fat:"Fanti",ff:"Fula",fi:"Suomi",fil:"Filipino",fj:"Fiji",fo:"Faroe",fon:"Fon",fr:"Prancis","fr-CA":"Perancis (Kanada)","fr-CH":"Perancis (Swiss)",frc:"Prancis Cajun",frm:"Prancis Abad Pertengahan",fro:"Prancis Kuno",frp:"Arpitan",frr:"Frisia Utara",frs:"Frisia Timur",fur:"Friuli",fy:"Frisia Barat",ga:"Irlandia",gaa:"Ga",gag:"Gagauz",gay:"Gayo",gba:"Gbaya",gd:"Gaelik Skotlandia",gez:"Geez",gil:"Gilbert",gl:"Galisia",glk:"Gilaki",gmh:"Jerman Abad Pertengahan",gn:"Guarani",goh:"Jerman Kuno",gon:"Gondi",gor:"Gorontalo",got:"Gotik",grb:"Grebo",grc:"Yunani Kuno",gsw:"Jerman (Swiss)",gu:"Gujarat",guz:"Gusii",gv:"Manx",gwi:"Gwich’in",ha:"Hausa",hai:"Haida",haw:"Hawaii",he:"Ibrani",hi:"Hindi",hif:"Hindi Fiji",hil:"Hiligaynon",hit:"Hitit",hmn:"Hmong",ho:"Hiri Motu",hr:"Kroasia",hsb:"Sorbia Hulu",ht:"Kreol Haiti",hu:"Hungaria",hup:"Hupa",hy:"Armenia",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesia",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiak",ilo:"Iloko",inh:"Ingushetia",io:"Ido",is:"Islandia",it:"Italia",iu:"Inuktitut",ja:"Jepang",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Ibrani-Persia",jrb:"Ibrani-Arab",jv:"Jawa",ka:"Georgia",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardi",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kha:"Khasi",kho:"Khotan",khq:"Koyra Chiini",ki:"Kikuyu",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korea",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosre",kpe:"Kpelle",kr:"Kanuri",krc:"Karachai Balkar",kri:"Krio",krl:"Karelia",kru:"Kuruk",ks:"Kashmir",ksb:"Shambala",ksf:"Bafia",ksh:"Dialek Kolsch",ku:"Kurdi",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Kornish",ky:"Kirgiz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luksemburg",lez:"Lezghia",lg:"Ganda",li:"Limburgia",lij:"Liguria",lkt:"Lakota",ln:"Lingala",lo:"Lao",lol:"Mongo",lou:"Kreol Louisiana",loz:"Lozi",lrc:"Luri Utara",lt:"Lituavi",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvi",lzz:"Laz",mad:"Madura",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisien",mg:"Malagasi",mga:"Irlandia Abad Pertengahan",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshall",mi:"Maori",mic:"Mikmak",min:"Minangkabau",mk:"Makedonia",ml:"Malayalam",mn:"Mongolia",mnc:"Manchuria",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",ms:"Melayu",mt:"Malta",mua:"Mundang",mus:"Bahasa Muskogee",mwl:"Miranda",mwr:"Marwari",mwv:"Mentawai",my:"Burma",mye:"Myene",myv:"Eryza",mzn:"Mazanderani",na:"Nauru",nap:"Neapolitan",naq:"Nama",nb:"Bokmål Norwegia",nd:"Ndebele Utara",nds:"Jerman Rendah","nds-NL":"Jerman Rendah (Belanda)",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuea",nl:"Belanda","nl-BE":"Belanda (Belgia)",nmg:"Kwasio",nn:"Nynorsk Norwegia",nnh:"Ngiemboon",no:"Norwegia",nog:"Nogai",non:"Norse Kuno",nqo:"N’Ko",nr:"Ndebele Selatan",nso:"Sotho Utara",nus:"Nuer",nv:"Navajo",nwc:"Newari Klasik",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Ositania",oj:"Ojibwa",om:"Oromo",or:"Oriya",os:"Ossetia",osa:"Osage",ota:"Turki Osmani",pa:"Punjabi",pag:"Pangasina",pal:"Pahlevi",pam:"Pampanga",pap:"Papiamento",pau:"Palau",pcm:"Pidgin Nigeria",pdc:"Jerman Pennsylvania",peo:"Persia Kuno",phn:"Funisia",pi:"Pali",pl:"Polski",pon:"Pohnpeia",prg:"Prusia",pro:"Provencal Lama",ps:"Pashto",pt:"Portugis","pt-BR":"Portugis (Brasil)","pt-PT":"Portugis (Eropa)",qu:"Quechua",quc:"Kʼicheʼ",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotonga",rm:"Reto-Roman",rn:"Rundi",ro:"Rumania","ro-MD":"Moldavia",rof:"Rombo",rom:"Romani",root:"Root",rtm:"Rotuma",ru:"Rusia",rup:"Aromania",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskerta",sad:"Sandawe",sah:"Sakha",sam:"Aram Samaria",saq:"Samburu",sas:"Sasak",sat:"Santali",sba:"Ngambai",sbp:"Sangu",sc:"Sardinia",scn:"Sisilia",sco:"Skotlandia",sd:"Sindhi",sdh:"Kurdi Selatan",se:"Sami Utara",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Irlandia Kuno",sh:"Serbo-Kroasia",shi:"Tachelhit",shn:"Shan",shu:"Arab Suwa",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Sloven",sli:"Silesia Rendah",sly:"Selayar",sm:"Samoa",sma:"Sami Selatan",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somalia",sog:"Sogdien",sq:"Albania",sr:"Serbia",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Sotho Selatan",su:"Sunda",suk:"Sukuma",sus:"Susu",sux:"Sumeria",sv:"Swedia",sw:"Swahili","sw-CD":"Swahili (Kongo)",swb:"Komoria",syc:"Suriah Klasik",syr:"Suriah",szl:"Silesia",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetun",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tmh:"Tamashek",tn:"Tswana",to:"Tonga",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turki",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsi:"Tsimshia",tt:"Tatar",ttt:"Tat Muslim",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahiti",tyv:"Tuvinia",tzm:"Tamazight Maroko Tengah",udm:"Udmurt",ug:"Uyghur",uga:"Ugarit",uk:"Ukraina",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venesia",vi:"Vietnam",vo:"Volapuk",vot:"Votia",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Walamo",war:"Warai",was:"Washo",wbp:"Warlpiri",wo:"Wolof",xal:"Kalmuk",xh:"Xhosa",xog:"Soga",yao:"Yao",yap:"Yapois",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yue:"Kanton",za:"Zhuang",zap:"Zapotek",zbl:"Blissymbol",zen:"Zenaga",zgh:"Tamazight Maroko Standar",zh:"Tionghoa","zh-Hans":"Tionghoa (Sederhana)","zh-Hant":"Tionghoa (Tradisional)",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Sirilik",Latn:"Latin",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Sederhana",Hant:"Tradisional"}},is:{rtl:false,languageNames:{aa:"afár",ab:"abkasíska",ace:"akkíska",ach:"acoli",ada:"adangme",ady:"adýge",ae:"avestíska",af:"afríkanska",afh:"afríhílí",agq:"aghem",ain:"aínu (Japan)",ak:"akan",akk:"akkadíska",ale:"aleúska",alt:"suðuraltaíska",am:"amharíska",an:"aragonska",ang:"fornenska",anp:"angíka",ar:"arabíska","ar-001":"stöðluð nútímaarabíska",arc:"arameíska",arn:"mapuche",arp:"arapahó",arw:"aravakska",as:"assamska",asa:"asu",ast:"astúríska",av:"avaríska",awa:"avadí",ay:"aímara",az:"aserska",ba:"baskír",bal:"balúkí",ban:"balíska",bas:"basa",bax:"bamun",be:"hvítrússneska",bej:"beja",bem:"bemba",bez:"bena",bg:"búlgarska",bgn:"vesturbalotsí",bho:"bojpúrí",bi:"bíslama",bik:"bíkol",bin:"bíní",bla:"siksika",bm:"bambara",bn:"bengalska",bo:"tíbeska",br:"bretónska",bra:"braí",brx:"bódó",bs:"bosníska",bss:"bakossi",bua:"búríat",bug:"búgíska",byn:"blín",ca:"katalónska",cad:"kaddó",car:"karíbamál",cay:"kajúga",cch:"atsam",ccp:"tsjakma",ce:"tsjetsjenska",ceb:"kebúanó",cgg:"kíga",ch:"kamorró",chb:"síbsja",chg:"sjagataí",chk:"sjúkíska",chm:"marí",chn:"sínúk",cho:"sjoktá",chp:"sípevíska",chr:"Cherokee-mál",chy:"sjeyen",ckb:"sorani-kúrdíska",co:"korsíska",cop:"koptíska",cr:"krí",crh:"krímtyrkneska",crs:"seychelles-kreólska",cs:"tékkneska",csb:"kasúbíska",cu:"kirkjuslavneska",cv:"sjúvas",cy:"velska",da:"danska",dak:"dakóta",dar:"dargva",dav:"taíta",de:"þýska","de-AT":"austurrísk þýska","de-CH":"svissnesk háþýska",del:"delaver",den:"slavneska",dgr:"dogríb",din:"dinka",dje:"zarma",doi:"dogrí",dsb:"lágsorbneska",dua:"dúala",dum:"miðhollenska",dv:"dívehí",dyo:"jola-fonyi",dyu:"djúla",dz:"dsongka",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efík",egy:"fornegypska",eka:"ekajúk",el:"gríska",elx:"elamít",en:"enska","en-AU":"áströlsk enska","en-CA":"kanadísk enska","en-GB":"bresk enska","en-US":"bandarísk enska",enm:"miðenska",eo:"esperantó",es:"spænska","es-419":"rómönsk-amerísk spænska","es-ES":"evrópsk spænska","es-MX":"mexíkósk spænska",et:"eistneska",eu:"baskneska",ewo:"evondó",fa:"persneska",fan:"fang",fat:"fantí",ff:"fúla",fi:"finnska",fil:"filippseyska",fj:"fídjeyska",fo:"færeyska",fon:"fón",fr:"franska","fr-CA":"kanadísk franska","fr-CH":"svissnesk franska",frc:"cajun-franska",frm:"miðfranska",fro:"fornfranska",frr:"norðurfrísneska",frs:"austurfrísneska",fur:"fríúlska",fy:"vesturfrísneska",ga:"írska",gaa:"ga",gag:"gagás",gay:"gajó",gba:"gbaja",gd:"skosk gelíska",gez:"gís",gil:"gilberska",gl:"galíanska",gmh:"miðháþýska",gn:"gvaraní",goh:"fornháþýska",gon:"gondí",gor:"gorontaló",got:"gotneska",grb:"gerbó",grc:"forngríska",gsw:"svissnesk þýska",gu:"gújaratí",guz:"gusii",gv:"manska",gwi:"gvísín",ha:"hása",hai:"haída",haw:"havaíska",he:"hebreska",hi:"hindí",hil:"híligaínon",hit:"hettitíska",hmn:"hmong",ho:"hírímótú",hr:"króatíska",hsb:"hásorbneska",ht:"haítíska",hu:"ungverska",hup:"húpa",hy:"armenska",hz:"hereró",ia:"alþjóðatunga",iba:"íban",ibb:"ibibio",id:"indónesíska",ie:"interlingve",ig:"ígbó",ii:"sísúanjí",ik:"ínúpíak",ilo:"ílokó",inh:"ingús",io:"ídó",is:"íslenska",it:"ítalska",iu:"inúktitút",ja:"japanska",jbo:"lojban",jgo:"ngomba",jmc:"masjáme",jpr:"gyðingapersneska",jrb:"gyðingaarabíska",jv:"javanska",ka:"georgíska",kaa:"karakalpak",kab:"kabíle",kac:"kasín",kaj:"jju",kam:"kamba",kaw:"kaví",kbd:"kabardíska",kcg:"tyap",kde:"makonde",kea:"grænhöfðeyska",kfo:"koro",kg:"kongóska",kha:"kasí",kho:"kotaska",khq:"koyra chiini",ki:"kíkújú",kj:"kúanjama",kk:"kasakska",kkj:"kako",kl:"grænlenska",kln:"kalenjin",km:"kmer",kmb:"kimbúndú",kn:"kannada",ko:"kóreska",koi:"kómí-permyak",kok:"konkaní",kos:"kosraska",kpe:"kpelle",kr:"kanúrí",krc:"karasaíbalkar",krl:"karélska",kru:"kúrúk",ks:"kasmírska",ksb:"sjambala",ksf:"bafía",ksh:"kölníska",ku:"kúrdíska",kum:"kúmík",kut:"kútenaí",kv:"komíska",kw:"kornbreska",ky:"kirgiska",la:"latína",lad:"ladínska",lag:"langí",lah:"landa",lam:"lamba",lb:"lúxemborgíska",lez:"lesgíska",lg:"ganda",li:"limbúrgíska",lkt:"lakóta",ln:"lingala",lo:"laó",lol:"mongó",lou:"kreólska (Louisiana)",loz:"lozi",lrc:"norðurlúrí",lt:"litháíska",lu:"lúbakatanga",lua:"luba-lulua",lui:"lúisenó",lun:"lúnda",luo:"lúó",lus:"lúsaí",luy:"luyia",lv:"lettneska",mad:"madúrska",mag:"magahí",mai:"maítílí",mak:"makasar",man:"mandingó",mas:"masaí",mdf:"moksa",mdr:"mandar",men:"mende",mer:"merú",mfe:"máritíska",mg:"malagasíska",mga:"miðírska",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshallska",mi:"maorí",mic:"mikmak",min:"mínangkabá",mk:"makedónska",ml:"malajalam",mn:"mongólska",mnc:"mansjú",mni:"manípúrí",moh:"móhíska",mos:"mossí",mr:"maratí",ms:"malaíska",mt:"maltneska",mua:"mundang",mus:"krík",mwl:"mirandesíska",mwr:"marvarí",my:"burmneska",myv:"ersja",mzn:"masanderaní",na:"nárúska",nap:"napólíska",naq:"nama",nb:"norskt bókmál",nd:"norður-ndebele",nds:"lágþýska; lágsaxneska","nds-NL":"lágsaxneska",ne:"nepalska","new":"nevarí",ng:"ndonga",nia:"nías",niu:"níveska",nl:"hollenska","nl-BE":"flæmska",nmg:"kwasio",nn:"nýnorska",nnh:"ngiemboon",no:"norska",nog:"nógaí",non:"norræna",nqo:"n’ko",nr:"suðurndebele",nso:"norðursótó",nus:"núer",nv:"navahó",nwc:"klassísk nevaríska",ny:"nýanja",nym:"njamvesí",nyn:"nyankole",nyo:"njóró",nzi:"nsíma",oc:"oksítaníska",oj:"ojibva",om:"oromo",or:"óría",os:"ossetíska",osa:"ósage",ota:"tyrkneska, ottóman",pa:"púnjabí",pag:"pangasínmál",pal:"palaví",pam:"pampanga",pap:"papíamentó",pau:"paláska",pcm:"nígerískt pidgin",peo:"fornpersneska",phn:"fönikíska",pi:"palí",pl:"pólska",pon:"ponpeiska",prg:"prússneska",pro:"fornpróvensalska",ps:"pastú",pt:"portúgalska","pt-BR":"brasílísk portúgalska","pt-PT":"evrópsk portúgalska",qu:"kvesjúa",quc:"kiche",raj:"rajastaní",rap:"rapanúí",rar:"rarótongska",rm:"rómanska",rn:"rúndí",ro:"rúmenska","ro-MD":"moldóvska",rof:"rombó",rom:"romaní",root:"rót",ru:"rússneska",rup:"arúmenska",rw:"kínjarvanda",rwk:"rúa",sa:"sanskrít",sad:"sandave",sah:"jakút",sam:"samversk arameíska",saq:"sambúrú",sas:"sasak",sat:"santalí",sba:"ngambay",sbp:"sangú",sc:"sardínska",scn:"sikileyska",sco:"skoska",sd:"sindí",sdh:"suðurkúrdíska",se:"norðursamíska",seh:"sena",sel:"selkúp",ses:"koíraboró-senní",sg:"sangó",sga:"fornírska",sh:"serbókróatíska",shi:"tachelhit",shn:"sjan",si:"singalíska",sid:"sídamó",sk:"slóvakíska",sl:"slóvenska",sm:"samóska",sma:"suðursamíska",smj:"lúlesamíska",smn:"enaresamíska",sms:"skoltesamíska",sn:"shona",snk:"sóninke",so:"sómalska",sog:"sogdíen",sq:"albanska",sr:"serbneska",srn:"sranan tongo",srr:"serer",ss:"svatí",ssy:"saho",st:"suðursótó",su:"súndanska",suk:"súkúma",sus:"súsú",sux:"súmerska",sv:"sænska",sw:"svahílí","sw-CD":"kongósvahílí",swb:"shimaoríska",syc:"klassísk sýrlenska",syr:"sýrlenska",ta:"tamílska",te:"telúgú",tem:"tímne",teo:"tesó",ter:"terenó",tet:"tetúm",tg:"tadsjikska",th:"taílenska",ti:"tígrinja",tig:"tígre",tiv:"tív",tk:"túrkmenska",tkl:"tókeláska",tl:"tagalog",tlh:"klingonska",tli:"tlingit",tmh:"tamasjek",tn:"tsúana",to:"tongverska",tog:"tongverska (nyasa)",tpi:"tokpisin",tr:"tyrkneska",trv:"tarókó",ts:"tsonga",tsi:"tsimsíska",tt:"tatarska",tum:"túmbúka",tvl:"túvalúska",tw:"tví",twq:"tasawaq",ty:"tahítíska",tyv:"túvínska",tzm:"tamazight",udm:"údmúrt",ug:"úígúr",uga:"úgarítíska",uk:"úkraínska",umb:"úmbúndú",ur:"úrdú",uz:"úsbekska",vai:"vaí",ve:"venda",vi:"víetnamska",vo:"volapyk",vot:"votíska",vun:"vunjó",wa:"vallónska",wae:"valser",wal:"volayatta",war:"varaí",was:"vasjó",wbp:"varlpiri",wo:"volof",xal:"kalmúkska",xh:"sósa",xog:"sóga",yao:"jaó",yap:"japíska",yav:"yangben",ybb:"yemba",yi:"jiddíska",yo:"jórúba",yue:"kantónska",za:"súang",zap:"sapótek",zbl:"blisstákn",zen:"senaga",zgh:"staðlað marokkóskt tamazight",zh:"kínverska","zh-Hans":"mandarín (einfölduð)","zh-Hant":"mandarín (hefðbundin)",zu:"súlú",zun:"súní",zza:"zázáíska"},scriptNames:{Cyrl:"kyrillískt",Latn:"latneskt",Arab:"arabískt",Guru:"gurmukhi",Hans:"einfaldað",Hant:"hefðbundið"}},it:{rtl:false,languageNames:{aa:"afar",ab:"abcaso",ace:"accinese",ach:"acioli",ada:"adangme",ady:"adyghe",ae:"avestan",aeb:"arabo tunisino",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"accado",akz:"alabama",ale:"aleuto",aln:"albanese ghego",alt:"altai meridionale",am:"amarico",an:"aragonese",ang:"inglese antico",anp:"angika",ar:"arabo","ar-001":"arabo moderno standard",arc:"aramaico",arn:"mapudungun",aro:"araona",arp:"arapaho",arq:"arabo algerino",ars:"arabo najd",arw:"aruaco",ary:"arabo marocchino",arz:"arabo egiziano",as:"assamese",asa:"asu",ase:"lingua dei segni americana",ast:"asturiano",av:"avaro",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azerbaigiano",ba:"baschiro",bal:"beluci",ban:"balinese",bar:"bavarese",bas:"basa",bax:"bamun",bbc:"batak toba",bbj:"ghomala",be:"bielorusso",bej:"begia",bem:"wemba",bew:"betawi",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"bulgaro",bgn:"beluci occidentale",bho:"bhojpuri",bi:"bislama",bik:"bicol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalese",bo:"tibetano",bpy:"bishnupriya",bqi:"bakhtiari",br:"bretone",bra:"braj",brh:"brahui",brx:"bodo",bs:"bosniaco",bss:"akoose",bua:"buriat",bug:"bugi",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalano",cad:"caddo",car:"caribico",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"ceceno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"ciagataico",chk:"chuukese",chm:"mari",chn:"gergo chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"curdo sorani",co:"corso",cop:"copto",cps:"capiznon",cr:"cree",crh:"turco crimeo",crs:"creolo delle Seychelles",cs:"ceco",csb:"kashubian",cu:"slavo della Chiesa",cv:"ciuvascio",cy:"gallese",da:"danese",dak:"dakota",dar:"dargwa",dav:"taita",de:"tedesco","de-AT":"tedesco austriaco","de-CH":"alto tedesco svizzero",del:"delaware",den:"slave",dgr:"dogrib",din:"dinca",dje:"zarma",doi:"dogri",dsb:"basso sorabo",dtp:"dusun centrale",dua:"duala",dum:"olandese medio",dv:"divehi",dyo:"jola-fony",dyu:"diula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emiliano",egy:"egiziano antico",eka:"ekajuka",el:"greco",elx:"elamitico",en:"inglese","en-AU":"inglese australiano","en-CA":"inglese canadese","en-GB":"inglese britannico","en-US":"inglese americano",enm:"inglese medio",eo:"esperanto",es:"spagnolo","es-419":"spagnolo latinoamericano","es-ES":"spagnolo europeo","es-MX":"spagnolo messicano",esu:"yupik centrale",et:"estone",eu:"basco",ewo:"ewondo",ext:"estremegno",fa:"persiano",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandese",fil:"filippino",fit:"finlandese del Tornedalen",fj:"figiano",fo:"faroese",fr:"francese","fr-CA":"francese canadese","fr-CH":"francese svizzero",frc:"francese cajun",frm:"francese medio",fro:"francese antico",frp:"francoprovenzale",frr:"frisone settentrionale",frs:"frisone orientale",fur:"friulano",fy:"frisone occidentale",ga:"irlandese",gaa:"ga",gag:"gagauzo",gay:"gayo",gba:"gbaya",gbz:"dari zoroastriano",gd:"gaelico scozzese",gez:"geez",gil:"gilbertese",gl:"galiziano",glk:"gilaki",gmh:"tedesco medio alto",gn:"guaraní",goh:"tedesco antico alto",gom:"konkani goano",gon:"gondi",gor:"gorontalo",got:"gotico",grb:"grebo",grc:"greco antico",gsw:"tedesco svizzero",gu:"gujarati",guc:"wayuu",guz:"gusii",gv:"mannese",gwi:"gwichʼin",ha:"hausa",hai:"haida",hak:"hakka",haw:"hawaiano",he:"ebraico",hi:"hindi",hif:"hindi figiano",hil:"ilongo",hit:"hittite",hmn:"hmong",ho:"hiri motu",hr:"croato",hsb:"alto sorabo",hsn:"xiang",ht:"haitiano",hu:"ungherese",hup:"hupa",hy:"armeno",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesiano",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiak",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandese",it:"italiano",iu:"inuktitut",izh:"ingrico",ja:"giapponese",jam:"creolo giamaicano",jbo:"lojban",jgo:"ngamambo",jmc:"machame",jpr:"giudeo persiano",jrb:"giudeo arabo",jut:"jutlandico",jv:"giavanese",ka:"georgiano",kaa:"kara-kalpak",kab:"cabilo",kac:"kachin",kaj:"kai",kam:"kamba",kaw:"kawi",kbd:"cabardino",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"capoverdiano",kfo:"koro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"khotanese",khq:"koyra chiini",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazako",kkj:"kako",kl:"groenlandese",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"coreano",koi:"permiaco",kok:"konkani",kos:"kosraean",kpe:"kpelle",kr:"kanuri",krc:"karachay-Balkar",krl:"careliano",kru:"kurukh",ks:"kashmiri",ksb:"shambala",ksf:"bafia",ksh:"coloniese",ku:"curdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"cornico",ky:"kirghiso",la:"latino",lad:"giudeo-spagnolo",lag:"langi",lah:"lahnda",lam:"lamba",lb:"lussemburghese",lez:"lesgo",lfn:"Lingua Franca Nova",lg:"ganda",li:"limburghese",lij:"ligure",liv:"livone",lkt:"lakota",lmo:"lombardo",ln:"lingala",lo:"lao",lol:"lolo bantu",lou:"creolo della Louisiana",loz:"lozi",lrc:"luri settentrionale",lt:"lituano",ltg:"letgallo",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"lettone",lzh:"cinese classico",lzz:"laz",mad:"madurese",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"creolo mauriziano",mg:"malgascio",mga:"irlandese medio",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshallese",mi:"maori",mic:"micmac",min:"menangkabau",mk:"macedone",ml:"malayalam",mn:"mongolo",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"mari occidentale",ms:"malese",mt:"maltese",mua:"mundang",mus:"creek",mwl:"mirandese",mwr:"marwari",mwv:"mentawai",my:"birmano",mye:"myene",myv:"erzya",mzn:"mazandarani",na:"nauru",nan:"min nan",nap:"napoletano",naq:"nama",nb:"norvegese bokmål",nd:"ndebele del nord",nds:"basso tedesco","nds-NL":"basso tedesco olandese",ne:"nepalese","new":"newari",ng:"ndonga",nia:"nias",niu:"niue",njo:"ao",nl:"olandese","nl-BE":"fiammingo",nmg:"kwasio",nn:"norvegese nynorsk",nnh:"ngiemboon",no:"norvegese",nog:"nogai",non:"norse antico",nov:"novial",nqo:"n’ko",nr:"ndebele del sud",nso:"sotho del nord",nus:"nuer",nv:"navajo",nwc:"newari classico",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitano",oj:"ojibwa",om:"oromo",or:"odia",os:"ossetico",osa:"osage",ota:"turco ottomano",pa:"punjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palau",pcd:"piccardo",pcm:"pidgin nigeriano",pdc:"tedesco della Pennsylvania",peo:"persiano antico",pfl:"tedesco palatino",phn:"fenicio",pi:"pali",pl:"polacco",pms:"piemontese",pnt:"pontico",pon:"ponape",prg:"prussiano",pro:"provenzale antico",ps:"pashto",pt:"portoghese","pt-BR":"portoghese brasiliano","pt-PT":"portoghese europeo",qu:"quechua",quc:"k’iche’",qug:"quechua dell’altopiano del Chimborazo",raj:"rajasthani",rap:"rapanui",rar:"rarotonga",rgn:"romagnolo",rif:"tarifit",rm:"romancio",rn:"rundi",ro:"rumeno","ro-MD":"moldavo",rof:"rombo",rom:"romani",rtm:"rotumano",ru:"russo",rue:"ruteno",rug:"roviana",rup:"arumeno",rw:"kinyarwanda",rwk:"rwa",sa:"sanscrito",sad:"sandawe",sah:"yakut",sam:"aramaico samaritano",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scozzese",sd:"sindhi",sdc:"sassarese",sdh:"curdo meridionale",se:"sami del nord",see:"seneca",seh:"sena",sei:"seri",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandese antico",sgs:"samogitico",sh:"serbo-croato",shi:"tashelhit",shn:"shan",shu:"arabo ciadiano",si:"singalese",sid:"sidamo",sk:"slovacco",sl:"sloveno",sli:"tedesco slesiano",sly:"selayar",sm:"samoano",sma:"sami del sud",smj:"sami di Lule",smn:"sami di Inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somalo",sog:"sogdiano",sq:"albanese",sr:"serbo",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sotho del sud",stq:"saterfriesisch",su:"sundanese",suk:"sukuma",sus:"susu",sux:"sumero",sv:"svedese",sw:"swahili","sw-CD":"swahili del Congo",swb:"comoriano",syc:"siriaco classico",syr:"siriaco",szl:"slesiano",ta:"tamil",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tagico",th:"thai",ti:"tigrino",tig:"tigre",tk:"turcomanno",tkl:"tokelau",tkr:"tsakhur",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"taliscio",tmh:"tamashek",tn:"tswana",to:"tongano",tog:"nyasa del Tonga",tpi:"tok pisin",tr:"turco",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"zaconico",tsi:"tsimshian",tt:"tataro",ttt:"tat islamico",tum:"tumbuka",tvl:"tuvalu",tw:"ci",twq:"tasawaq",ty:"taitiano",tyv:"tuvinian",tzm:"tamazight",udm:"udmurt",ug:"uiguro",uga:"ugaritico",uk:"ucraino",umb:"mbundu",ur:"urdu",uz:"uzbeco",ve:"venda",vec:"veneto",vep:"vepso",vi:"vietnamita",vls:"fiammingo occidentale",vo:"volapük",vot:"voto",vro:"võro",vun:"vunjo",wa:"vallone",wae:"walser",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kalmyk",xh:"xhosa",xmf:"mengrelio",xog:"soga",yao:"yao (bantu)",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yrl:"nheengatu",yue:"cantonese",za:"zhuang",zap:"zapotec",zbl:"blissymbol",zea:"zelandese",zen:"zenaga",zgh:"tamazight del Marocco standard",zh:"cinese","zh-Hans":"cinese mandarino semplificato","zh-Hant":"cinese mandarino tradizionale",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirillico",Latn:"latino",Arab:"arabo",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vaii",Hans:"semplificato",Hant:"tradizionale"}},ja:{rtl:false,languageNames:{aa:"アファル語",ab:"アブハズ語",ace:"アチェ語",ach:"アチョリ語",ada:"アダングメ語",ady:"アディゲ語",ae:"アヴェスタ語",aeb:"チュニジア・アラビア語",af:"アフリカーンス語",afh:"アフリヒリ語",agq:"アゲム語",ain:"アイヌ語",ak:"アカン語",akk:"アッカド語",akz:"アラバマ語",ale:"アレウト語",aln:"ゲグ・アルバニア語",alt:"南アルタイ語",am:"アムハラ語",an:"アラゴン語",ang:"古英語",anp:"アンギカ語",ar:"アラビア語","ar-001":"現代標準アラビア語",arc:"アラム語",arn:"マプチェ語",aro:"アラオナ語",arp:"アラパホー語",arq:"アルジェリア・アラビア語",ars:"ナジュド地方・アラビア語",arw:"アラワク語",ary:"モロッコ・アラビア語",arz:"エジプト・アラビア語",as:"アッサム語",asa:"アス語",ase:"アメリカ手話",ast:"アストゥリアス語",av:"アヴァル語",avk:"コタヴァ",awa:"アワディー語",ay:"アイマラ語",az:"アゼルバイジャン語",ba:"バシキール語",bal:"バルーチー語",ban:"バリ語",bar:"バイエルン・オーストリア語",bas:"バサ語",bax:"バムン語",bbc:"トバ・バタク語",bbj:"ゴーマラ語",be:"ベラルーシ語",bej:"ベジャ語",bem:"ベンバ語",bew:"ベタウィ語",bez:"ベナ語",bfd:"バフット語",bfq:"バダガ語",bg:"ブルガリア語",bgn:"西バローチー語",bho:"ボージュプリー語",bi:"ビスラマ語",bik:"ビコル語",bin:"ビニ語",bjn:"バンジャル語",bkm:"コム語",bla:"シクシカ語",bm:"バンバラ語",bn:"ベンガル語",bo:"チベット語",bpy:"ビシュヌプリヤ・マニプリ語",bqi:"バフティヤーリー語",br:"ブルトン語",bra:"ブラジ語",brh:"ブラフイ語",brx:"ボド語",bs:"ボスニア語",bss:"アコース語",bua:"ブリヤート語",bug:"ブギ語",bum:"ブル語",byn:"ビリン語",byv:"メドゥンバ語",ca:"カタロニア語",cad:"カドー語",car:"カリブ語",cay:"カユーガ語",cch:"チャワイ語",ccp:"チャクマ語",ce:"チェチェン語",ceb:"セブアノ語",cgg:"チガ語",ch:"チャモロ語",chb:"チブチャ語",chg:"チャガタイ語",chk:"チューク語",chm:"マリ語",chn:"チヌーク混成語",cho:"チョクトー語",chp:"チペワイアン語",chr:"チェロキー語",chy:"シャイアン語",ckb:"中央クルド語",co:"コルシカ語",cop:"コプト語",cps:"カピス語",cr:"クリー語",crh:"クリミア・タタール語",crs:"セーシェル・クレオール語",cs:"チェコ語",csb:"カシューブ語",cu:"教会スラブ語",cv:"チュヴァシ語",cy:"ウェールズ語",da:"デンマーク語",dak:"ダコタ語",dar:"ダルグワ語",dav:"タイタ語",de:"ドイツ語","de-AT":"ドイツ語 (オーストリア)","de-CH":"標準ドイツ語 (スイス)",del:"デラウェア語",den:"スレイビー語",dgr:"ドグリブ語",din:"ディンカ語",dje:"ザルマ語",doi:"ドーグリー語",dsb:"低地ソルブ語",dtp:"中央ドゥスン語",dua:"ドゥアラ語",dum:"中世オランダ語",dv:"ディベヒ語",dyo:"ジョラ=フォニィ語",dyu:"ジュラ語",dz:"ゾンカ語",dzg:"ダザガ語",ebu:"エンブ語",ee:"エウェ語",efi:"エフィク語",egl:"エミリア語",egy:"古代エジプト語",eka:"エカジュク語",el:"ギリシャ語",elx:"エラム語",en:"英語","en-AU":"オーストラリア英語","en-CA":"カナダ英語","en-GB":"イギリス英語","en-US":"アメリカ英語",enm:"中英語",eo:"エスペラント語",es:"スペイン語","es-419":"スペイン語 (ラテンアメリカ)","es-ES":"スペイン語 (イベリア半島)","es-MX":"スペイン語 (メキシコ)",esu:"中央アラスカ・ユピック語",et:"エストニア語",eu:"バスク語",ewo:"エウォンド語",ext:"エストレマドゥーラ語",fa:"ペルシア語",fan:"ファング語",fat:"ファンティー語",ff:"フラ語",fi:"フィンランド語",fil:"フィリピノ語",fit:"トルネダール・フィンランド語",fj:"フィジー語",fo:"フェロー語",fon:"フォン語",fr:"フランス語","fr-CA":"フランス語 (カナダ)","fr-CH":"フランス語 (スイス)",frc:"ケイジャン・フランス語",frm:"中期フランス語",fro:"古フランス語",frp:"アルピタン語",frr:"北フリジア語",frs:"東フリジア語",fur:"フリウリ語",fy:"西フリジア語",ga:"アイルランド語",gaa:"ガ語",gag:"ガガウズ語",gan:"贛語",gay:"ガヨ語",gba:"バヤ語",gbz:"ダリー語(ゾロアスター教)",gd:"スコットランド・ゲール語",gez:"ゲエズ語",gil:"キリバス語",gl:"ガリシア語",glk:"ギラキ語",gmh:"中高ドイツ語",gn:"グアラニー語",goh:"古高ドイツ語",gom:"ゴア・コンカニ語",gon:"ゴーンディー語",gor:"ゴロンタロ語",got:"ゴート語",grb:"グレボ語",grc:"古代ギリシャ語",gsw:"スイスドイツ語",gu:"グジャラート語",guc:"ワユ語",gur:"フラフラ語",guz:"グシイ語",gv:"マン島語",gwi:"グウィッチン語",ha:"ハウサ語",hai:"ハイダ語",hak:"客家語",haw:"ハワイ語",he:"ヘブライ語",hi:"ヒンディー語",hif:"フィジー・ヒンディー語",hil:"ヒリガイノン語",hit:"ヒッタイト語",hmn:"フモン語",ho:"ヒリモツ語",hr:"クロアチア語",hsb:"高地ソルブ語",hsn:"湘語",ht:"ハイチ・クレオール語",hu:"ハンガリー語",hup:"フパ語",hy:"アルメニア語",hz:"ヘレロ語",ia:"インターリングア",iba:"イバン語",ibb:"イビビオ語",id:"インドネシア語",ie:"インターリング",ig:"イボ語",ii:"四川イ語",ik:"イヌピアック語",ilo:"イロカノ語",inh:"イングーシ語",io:"イド語",is:"アイスランド語",it:"イタリア語",iu:"イヌクティトット語",izh:"イングリア語",ja:"日本語",jam:"ジャマイカ・クレオール語",jbo:"ロジバン語",jgo:"ンゴンバ語",jmc:"マチャメ語",jpr:"ユダヤ・ペルシア語",jrb:"ユダヤ・アラビア語",jut:"ユトランド語",jv:"ジャワ語",ka:"ジョージア語",kaa:"カラカルパク語",kab:"カビル語",kac:"カチン語",kaj:"カジェ語",kam:"カンバ語",kaw:"カウィ語",kbd:"カバルド語",kbl:"カネンブ語",kcg:"カタブ語",kde:"マコンデ語",kea:"カーボベルデ・クレオール語",ken:"ニャン語",kfo:"コロ語",kg:"コンゴ語",kgp:"カインガング語",kha:"カシ語",kho:"コータン語",khq:"コイラ・チーニ語",khw:"コワール語",ki:"キクユ語",kiu:"キルマンジュキ語",kj:"クワニャマ語",kk:"カザフ語",kkj:"カコ語",kl:"グリーンランド語",kln:"カレンジン語",km:"クメール語",kmb:"キンブンド語",kn:"カンナダ語",ko:"韓国語",koi:"コミ・ペルミャク語",kok:"コンカニ語",kos:"コスラエ語",kpe:"クペレ語",kr:"カヌリ語",krc:"カラチャイ・バルカル語",kri:"クリオ語",krj:"キナライア語",krl:"カレリア語",kru:"クルク語",ks:"カシミール語",ksb:"サンバー語",ksf:"バフィア語",ksh:"ケルン語",ku:"クルド語",kum:"クムク語",kut:"クテナイ語",kv:"コミ語",kw:"コーンウォール語",ky:"キルギス語",la:"ラテン語",lad:"ラディノ語",lag:"ランギ語",lah:"ラフンダー語",lam:"ランバ語",lb:"ルクセンブルク語",lez:"レズギ語",lfn:"リングア・フランカ・ノバ",lg:"ガンダ語",li:"リンブルフ語",lij:"リグリア語",liv:"リヴォニア語",lkt:"ラコタ語",lmo:"ロンバルド語",ln:"リンガラ語",lo:"ラオ語",lol:"モンゴ語",lou:"ルイジアナ・クレオール語",loz:"ロジ語",lrc:"北ロル語",lt:"リトアニア語",ltg:"ラトガリア語",lu:"ルバ・カタンガ語",lua:"ルバ・ルルア語",lui:"ルイセーニョ語",lun:"ルンダ語",luo:"ルオ語",lus:"ミゾ語",luy:"ルヒヤ語",lv:"ラトビア語",lzh:"漢文",lzz:"ラズ語",mad:"マドゥラ語",maf:"マファ語",mag:"マガヒー語",mai:"マイティリー語",mak:"マカッサル語",man:"マンディンゴ語",mas:"マサイ語",mde:"マバ語",mdf:"モクシャ語",mdr:"マンダル語",men:"メンデ語",mer:"メル語",mfe:"モーリシャス・クレオール語",mg:"マダガスカル語",mga:"中期アイルランド語",mgh:"マクア・ミート語",mgo:"メタ語",mh:"マーシャル語",mi:"マオリ語",mic:"ミクマク語",min:"ミナンカバウ語",mk:"マケドニア語",ml:"マラヤーラム語",mn:"モンゴル語",mnc:"満州語",mni:"マニプリ語",moh:"モーホーク語",mos:"モシ語",mr:"マラーティー語",mrj:"山地マリ語",ms:"マレー語",mt:"マルタ語",mua:"ムンダン語",mus:"クリーク語",mwl:"ミランダ語",mwr:"マールワーリー語",mwv:"メンタワイ語",my:"ミャンマー語",mye:"ミエネ語",myv:"エルジャ語",mzn:"マーザンダラーン語",na:"ナウル語",nan:"閩南語",nap:"ナポリ語",naq:"ナマ語",nb:"ノルウェー語(ブークモール)",nd:"北ンデベレ語",nds:"低地ドイツ語","nds-NL":"低地ドイツ語 (オランダ)",ne:"ネパール語","new":"ネワール語",ng:"ンドンガ語",nia:"ニアス語",niu:"ニウーエイ語",njo:"アオ・ナガ語",nl:"オランダ語","nl-BE":"フレミッシュ語",nmg:"クワシオ語",nn:"ノルウェー語(ニーノシュク)",nnh:"ンジエムブーン語",no:"ノルウェー語",nog:"ノガイ語",non:"古ノルド語",nov:"ノヴィアル",nqo:"ンコ語",nr:"南ンデベレ語",nso:"北部ソト語",nus:"ヌエル語",nv:"ナバホ語",nwc:"古典ネワール語",ny:"ニャンジャ語",nym:"ニャムウェジ語",nyn:"ニャンコレ語",nyo:"ニョロ語",nzi:"ンゼマ語",oc:"オック語",oj:"オジブウェー語",om:"オロモ語",or:"オディア語",os:"オセット語",osa:"オセージ語",ota:"オスマントルコ語",pa:"パンジャブ語",pag:"パンガシナン語",pal:"パフラヴィー語",pam:"パンパンガ語",pap:"パピアメント語",pau:"パラオ語",pcd:"ピカルディ語",pcm:"ナイジェリア・ピジン語",pdc:"ペンシルベニア・ドイツ語",pdt:"メノナイト低地ドイツ語",peo:"古代ペルシア語",pfl:"プファルツ語",phn:"フェニキア語",pi:"パーリ語",pl:"ポーランド語",pms:"ピエモンテ語",pnt:"ポントス・ギリシャ語",pon:"ポンペイ語",prg:"プロシア語",pro:"古期プロバンス語",ps:"パシュトゥー語",pt:"ポルトガル語","pt-BR":"ポルトガル語 (ブラジル)","pt-PT":"ポルトガル語 (イベリア半島)",qu:"ケチュア語",quc:"キチェ語",qug:"チンボラソ高地ケチュア語",raj:"ラージャスターン語",rap:"ラパヌイ語",rar:"ラロトンガ語",rgn:"ロマーニャ語",rif:"リーフ語",rm:"ロマンシュ語",rn:"ルンディ語",ro:"ルーマニア語","ro-MD":"モルダビア語",rof:"ロンボ語",rom:"ロマーニー語",root:"ルート",rtm:"ロツマ語",ru:"ロシア語",rue:"ルシン語",rug:"ロヴィアナ語",rup:"アルーマニア語",rw:"キニアルワンダ語",rwk:"ルワ語",sa:"サンスクリット語",sad:"サンダウェ語",sah:"サハ語",sam:"サマリア・アラム語",saq:"サンブル語",sas:"ササク語",sat:"サンターリー語",saz:"サウラーシュトラ語",sba:"ンガムバイ語",sbp:"サング語",sc:"サルデーニャ語",scn:"シチリア語",sco:"スコットランド語",sd:"シンド語",sdc:"サッサリ・サルデーニャ語",sdh:"南部クルド語",se:"北サーミ語",see:"セネカ語",seh:"セナ語",sei:"セリ語",sel:"セリクプ語",ses:"コイラボロ・センニ語",sg:"サンゴ語",sga:"古アイルランド語",sgs:"サモギティア語",sh:"セルボ・クロアチア語",shi:"タシルハイト語",shn:"シャン語",shu:"チャド・アラビア語",si:"シンハラ語",sid:"シダモ語",sk:"スロバキア語",sl:"スロベニア語",sli:"低シレジア語",sly:"スラヤール語",sm:"サモア語",sma:"南サーミ語",smj:"ルレ・サーミ語",smn:"イナリ・サーミ語",sms:"スコルト・サーミ語",sn:"ショナ語",snk:"ソニンケ語",so:"ソマリ語",sog:"ソグド語",sq:"アルバニア語",sr:"セルビア語",srn:"スリナム語",srr:"セレル語",ss:"スワジ語",ssy:"サホ語",st:"南部ソト語",stq:"ザーターフリジア語",su:"スンダ語",suk:"スクマ語",sus:"スス語",sux:"シュメール語",sv:"スウェーデン語",sw:"スワヒリ語","sw-CD":"コンゴ・スワヒリ語",swb:"コモロ語",syc:"古典シリア語",syr:"シリア語",szl:"シレジア語",ta:"タミル語",tcy:"トゥル語",te:"テルグ語",tem:"テムネ語",teo:"テソ語",ter:"テレーノ語",tet:"テトゥン語",tg:"タジク語",th:"タイ語",ti:"ティグリニア語",tig:"ティグレ語",tiv:"ティブ語",tk:"トルクメン語",tkl:"トケラウ語",tkr:"ツァフル語",tl:"タガログ語",tlh:"クリンゴン語",tli:"トリンギット語",tly:"タリシュ語",tmh:"タマシェク語",tn:"ツワナ語",to:"トンガ語",tog:"トンガ語(ニアサ)",tpi:"トク・ピシン語",tr:"トルコ語",tru:"トゥロヨ語",trv:"タロコ語",ts:"ツォンガ語",tsd:"ツァコン語",tsi:"チムシュ語",tt:"タタール語",ttt:"ムスリム・タタール語",tum:"トゥンブカ語",tvl:"ツバル語",tw:"トウィ語",twq:"タサワク語",ty:"タヒチ語",tyv:"トゥヴァ語",tzm:"中央アトラス・タマジクト語",udm:"ウドムルト語",ug:"ウイグル語",uga:"ウガリト語",uk:"ウクライナ語",umb:"ムブンドゥ語",ur:"ウルドゥー語",uz:"ウズベク語",vai:"ヴァイ語",ve:"ベンダ語",vec:"ヴェネト語",vep:"ヴェプス語",vi:"ベトナム語",vls:"西フラマン語",vmf:"マインフランク語",vo:"ヴォラピュク語",vot:"ヴォート語",vro:"ヴォロ語",vun:"ヴンジョ語",wa:"ワロン語",wae:"ヴァリス語",wal:"ウォライタ語",war:"ワライ語",was:"ワショ語",wbp:"ワルピリ語",wo:"ウォロフ語",wuu:"呉語",xal:"カルムイク語",xh:"コサ語",xmf:"メグレル語",xog:"ソガ語",yao:"ヤオ語",yap:"ヤップ語",yav:"ヤンベン語",ybb:"イエンバ語",yi:"イディッシュ語",yo:"ヨルバ語",yrl:"ニェエンガトゥ語",yue:"広東語",za:"チワン語",zap:"サポテカ語",zbl:"ブリスシンボル",zea:"ゼーラント語",zen:"ゼナガ語",zgh:"標準モロッコ タマジクト語",zh:"中国語","zh-Hans":"標準中国語 (簡体字)","zh-Hant":"標準中国語 (繁体字)",zu:"ズールー語",zun:"ズニ語",zza:"ザザ語"},scriptNames:{Cyrl:"キリル文字",Latn:"ラテン文字",Arab:"アラビア文字",Guru:"グルムキー文字",Tfng:"ティフナグ文字",Vaii:"ヴァイ文字",Hans:"簡体字",Hant:"繁体字"}},jv:{rtl:false,languageNames:{agq:"Aghem",ak:"Akan",am:"Amharik",ar:"Arab","ar-001":"Arab Standar Anyar",as:"Assam",asa:"Asu",ast:"Asturia",az:"Azerbaijan",bas:"Basaa",bem:"Bemba",bez:"Bena",bg:"Bulgaria",bm:"Bambara",bn:"Bengali",bo:"Tibet",br:"Breton",brx:"Bodo",ca:"Katala",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",chr:"Cherokee",ckb:"Kurdi Tengah",co:"Korsika",cs:"Ceska",cu:"Slavia Gerejani",cy:"Welsh",da:"Dansk",dav:"Taita",de:"Jérman","de-AT":"Jérman (Ostenrik)","de-CH":"Jérman (Switserlan)",dje:"Zarma",dsb:"Sorbia Non Standar",dua:"Duala",dyo:"Jola-Fonyi",dz:"Dzongkha",ebu:"Embu",ee:"Ewe",el:"Yunani",en:"Inggris","en-AU":"Inggris (Ostrali)","en-CA":"Inggris (Kanada)","en-GB":"Inggris (Karajan Manunggal)","en-US":"Inggris (Amérika Sarékat)",eo:"Esperanto",es:"Spanyol","es-419":"Spanyol (Amerika Latin)","es-ES":"Spanyol (Eropah)","es-MX":"Spanyol (Meksiko)",et:"Estonia",eu:"Basque",ewo:"Ewondo",fa:"Persia",ff:"Fulah",fi:"Suomi",fil:"Tagalog",fo:"Faroe",fr:"Prancis","fr-CA":"Prancis (Kanada)","fr-CH":"Prancis (Switserlan)",fur:"Friulian",fy:"Frisia Sisih Kulon",ga:"Irlandia",gd:"Gaulia",gl:"Galisia",gsw:"Jerman Swiss",gu:"Gujarat",guz:"Gusii",gv:"Manx",ha:"Hausa",haw:"Hawaii",he:"Ibrani",hi:"India",hmn:"Hmong",hr:"Kroasia",hsb:"Sorbia Standar",ht:"Kreol Haiti",hu:"Hungaria",hy:"Armenia",ia:"Interlingua",id:"Indonesia",ig:"Iqbo",ii:"Sichuan Yi",is:"Islandia",it:"Italia",ja:"Jepang",jgo:"Ngomba",jmc:"Machame",jv:"Jawa",ka:"Georgia",kab:"Kabyle",kam:"Kamba",kde:"Makonde",kea:"Kabuverdianu",khq:"Koyra Chiini",ki:"Kikuyu",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kn:"Kannada",ko:"Korea",kok:"Konkani",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colonia",ku:"Kurdis",kw:"Kernowek",ky:"Kirgis",la:"Latin",lag:"Langi",lb:"Luksemburg",lg:"Ganda",lkt:"Lakota",ln:"Lingala",lo:"Laos",lrc:"Luri Sisih Lor",lt:"Lithuania",lu:"Luba-Katanga",luo:"Luo",luy:"Luyia",lv:"Latvia",mas:"Masai",mer:"Meru",mfe:"Morisyen",mg:"Malagasi",mgh:"Makhuwa-Meeto",mgo:"Meta’",mi:"Maori",mk:"Makedonia",ml:"Malayalam",mn:"Mongolia",mr:"Marathi",ms:"Melayu",mt:"Malta",mua:"Mundang",my:"Myanmar",mzn:"Mazanderani",naq:"Nama",nb:"Bokmål Norwegia",nd:"Ndebele Lor",nds:"Jerman Non Standar","nds-NL":"Jerman Non Standar (Walanda)",ne:"Nepal",nl:"Walanda","nl-BE":"Flemis",nmg:"Kwasio",nn:"Nynorsk Norwegia",nnh:"Ngiemboon",nus:"Nuer",ny:"Nyanja",nyn:"Nyankole",om:"Oromo",or:"Odia",os:"Ossetia",pa:"Punjab",pl:"Polandia",prg:"Prusia",ps:"Pashto",pt:"Portugis","pt-BR":"Portugis (Brasil)","pt-PT":"Portugis (Portugal)",qu:"Quechua",rm:"Roman",rn:"Rundi",ro:"Rumania","ro-MD":"Rumania (Moldova)",rof:"Rombo",ru:"Rusia",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskerta",sah:"Sakha",saq:"Samburu",sbp:"Sangu",sd:"Sindhi",se:"Sami Sisih Lor",seh:"Sena",ses:"Koyraboro Senni",sg:"Sango",shi:"Tachelhit",si:"Sinhala",sk:"Slowakia",sl:"Slovenia",sm:"Samoa",smn:"Inari Sami",sn:"Shona",so:"Somalia",sq:"Albania",sr:"Serbia",st:"Sotho Sisih Kidul",su:"Sunda",sv:"Swedia",sw:"Swahili","sw-CD":"Swahili (Kongo - Kinshasa)",ta:"Tamil",te:"Telugu",teo:"Teso",tg:"Tajik",th:"Thailand",ti:"Tigrinya",tk:"Turkmen",to:"Tonga",tr:"Turki",tt:"Tatar",twq:"Tasawaq",tzm:"Tamazight Atlas Tengah",ug:"Uighur",uk:"Ukraina",ur:"Urdu",uz:"Uzbek",vai:"Vai",vi:"Vietnam",vo:"Volapuk",vun:"Vunjo",wae:"Walser",wo:"Wolof",xh:"Xhosa",xog:"Soga",yav:"Yangben",yi:"Yiddish",yo:"Yoruba",yue:"Kanton",zgh:"Tamazight Moroko Standar",zh:"Tyonghwa","zh-Hans":"Tyonghwa Mandarin (Ringkes)","zh-Hant":"Tyonghwa Mandarin (Tradisional)",zu:"Zulu"},scriptNames:{Cyrl:"Sirilik",Latn:"Latin",Guru:"Gurmukhi",Hans:"Prasaja",Hant:"Tradhisional"}},km:{rtl:false,languageNames:{aa:"អាហ្វារ",ab:"អាប់ខាហ៊្សាន",ace:"អាកហ៊ីនឺស",ada:"អាដេងមី",ady:"អាឌីហ្គី",ae:"អាវេស្ថាន",af:"អាហ្វ្រិកាន",agq:"អាហ្គីម",ain:"អាយនូ",ak:"អាកាន",ale:"អាលូត",alt:"អាល់តៃខាងត្បូង",am:"អាំហារិក",an:"អារ៉ាហ្គោន",anp:"អាហ្គីកា",ar:"អារ៉ាប់","ar-001":"អារ៉ាប់ (ស្តង់ដារ)",arn:"ម៉ាពូឈី",arp:"អារ៉ាប៉ាហូ",as:"អាសាមីស",asa:"អាស៊ូ",ast:"អាស្ទូរី",av:"អាវ៉ារីក",awa:"អាវ៉ាឌី",ay:"អីម៉ារ៉ា",az:"អាស៊ែបៃហ្សង់",ba:"បាស្គៀ",ban:"បាលី",bas:"បាសា",be:"បេឡារុស",bem:"បេមបា",bez:"បេណា",bg:"ប៊ុលហ្គារី",bgn:"បាឡូជីខាងលិច",bho:"បូចពូរី",bi:"ប៊ីស្លាម៉ា",bin:"ប៊ីនី",bla:"ស៊ីកស៊ីកា",bm:"បាម្បារា",bn:"បង់ក្លាដែស",bo:"ទីបេ",br:"ប្រីស្តុន",brx:"បូដូ",bs:"បូស្នី",bug:"ប៊ុកហ្គី",byn:"ប្ល៊ីន",ca:"កាតាឡាន",ccp:"ចាក់ម៉ា",ce:"ឈីឆេន",ceb:"ស៊ីប៊ូអាណូ",cgg:"ឈីហ្គា",ch:"ឈីម៉ូរ៉ូ",chk:"ឈូគី",chm:"ម៉ារី",cho:"ឆុកតាវ",chr:"ឆេរូគី",chy:"ឈីយីនី",ckb:"ឃើដភាគកណ្តាល",co:"កូស៊ីខាន",crs:"សេសេលវ៉ាគ្រីអូល (បារាំង)",cs:"ឆែក",cu:"ឈឺជស្លាវិក",cv:"ឈូវ៉ាស",cy:"វេល",da:"ដាណឺម៉ាក",dak:"ដាកូតា",dar:"ដាចវ៉ា",dav:"តៃតា",de:"អាល្លឺម៉ង់","de-AT":"អាល្លឺម៉ង់ (អូទ្រីស)","de-CH":"អាល្លឺម៉ង់ (ស្វ៊ីស)",dgr:"ដូគ្រីប",dje:"ហ្សាម៉ា",dsb:"សូប៊ីក្រោម",dua:"ឌួលឡា",dv:"ទេវីហ៊ី",dyo:"ចូឡាហ៊្វុនយី",dz:"ដុងខា",dzg:"ដាហ្សាហ្គា",ebu:"អេមប៊ូ",ee:"អ៊ីវ",efi:"អ៊ីហ្វិក",eka:"អ៊ីកាជុក",el:"ក្រិក",en:"អង់គ្លេស","en-AU":"អង់គ្លេស (អូស្ត្រាលី)","en-CA":"អង់គ្លេស (កាណាដា)","en-GB":"អង់គ្លេស (ចក្រភព​អង់គ្លេស)","en-US":"អង់គ្លេស (សហរដ្ឋអាមេរិក)",eo:"អេស្ពេរ៉ាន់តូ",es:"អេស្ប៉ាញ","es-419":"អេស្ប៉ាញ (អាមេរិក​ឡាទីន)","es-ES":"អេស្ប៉ាញ (អ៊ឺរ៉ុប)","es-MX":"អេស្ប៉ាញ (ម៉ិកស៊ិក)",et:"អេស្តូនី",eu:"បាសខ៍",ewo:"អ៊ីវ៉ុនដូ",fa:"ភឺសៀន",ff:"ហ្វ៊ូឡា",fi:"ហ្វាំងឡង់",fil:"ហ្វីលីពីន",fj:"ហ៊្វីជី",fo:"ហ្វារូស",fon:"ហ្វ៊ុន",fr:"បារាំង","fr-CA":"បារាំង (កាណាដា)","fr-CH":"បារាំង (ស្វ៊ីស)",fur:"ហ៊្វ្រូលាន",fy:"ហ្វ្រីស៊ានខាងលិច",ga:"អៀរឡង់",gaa:"ហ្គា",gag:"កាគូស",gd:"ស្កុតហ្កែលិគ",gez:"ជីស",gil:"ហ្គីលបឺទ",gl:"ហ្គាលីស្យាន",gn:"ហ្គូរ៉ានី",gor:"ហ្គូរុនតាឡូ",gsw:"អាល្លឺម៉ង (ស្វីស)",gu:"ហ្កុយ៉ារាទី",guz:"ហ្គូស៊ី",gv:"មេន",gwi:"ហ្គីចឈីន",ha:"ហូសា",haw:"ហាវៃ",he:"ហេប្រឺ",hi:"ហិណ្ឌី",hil:"ហ៊ីលីហ្គេណុន",hmn:"ម៉ុង",hr:"ក្រូអាត",hsb:"សូប៊ីលើ",ht:"ហៃទី",hu:"ហុងគ្រី",hup:"ហ៊ូប៉ា",hy:"អាមេនី",hz:"ហឺរីរ៉ូ",ia:"អីនធើលីង",iba:"អ៊ីបាន",ibb:"អាយប៊ីប៊ីអូ",id:"ឥណ្ឌូណេស៊ី",ig:"អ៊ីកបូ",ii:"ស៊ីឈាន់យី",ilo:"អ៊ីឡូកូ",inh:"អ៊ិនហ្គូស",io:"អ៊ីដូ",is:"អ៊ីស្លង់",it:"អ៊ីតាលី",iu:"អ៊ីនុកទីទុត",ja:"ជប៉ុន",jbo:"លុចបាន",jgo:"ងុំបា",jmc:"ម៉ាឆាំ",jv:"ជ្វា",ka:"ហ្សក​ហ្ស៊ី",kab:"កាប៊ីឡេ",kac:"កាឈីន",kaj:"ជូ",kam:"កាំបា",kbd:"កាបាឌៀ",kcg:"យ៉ាប់",kde:"ម៉ាកូនដេ",kea:"កាប៊ូវឺឌៀនូ",kfo:"គូរូ",kha:"កាស៊ី",khq:"គុយរ៉ាឈីនី",ki:"គីគូយូ",kj:"គូនយ៉ាម៉ា",kk:"កាហ្សាក់",kkj:"កាកូ",kl:"កាឡាលលីស៊ុត",kln:"កាលែនជីន",km:"ខ្មែរ",kmb:"គីមប៊ុនឌូ",kn:"ខាណាដា",ko:"កូរ៉េ",koi:"គូមីភឹមយ៉ាគ",kok:"គុនកានី",kpe:"គ្លីប",kr:"កានូរី",krc:"ការ៉ាឆាយបាល់កា",krl:"ការីលា",kru:"គូរូក",ks:"កាស្មៀរ",ksb:"សាមបាឡា",ksf:"បាហ្វៀ",ksh:"កូឡូញ",ku:"ឃឺដ",kum:"គូមីគ",kv:"កូមី",kw:"កូនីស",ky:"​កៀហ្ស៊ីស",la:"ឡាតំាង",lad:"ឡាឌីណូ",lag:"ឡានហ្គី",lb:"លុចសំបួ",lez:"ឡេសហ្គី",lg:"ហ្គាន់ដា",li:"លីមប៊ូស",lkt:"ឡាកូតា",ln:"លីនកាឡា",lo:"ឡាវ",loz:"ឡូហ្ស៊ី",lrc:"លូរីខាងជើង",lt:"លីទុយអានី",lu:"លូបាកាតានហ្គា",lua:"លូបាលូឡា",lun:"លុនដា",luo:"លូអូ",lus:"មីហ្សូ",luy:"លូយ៉ា",lv:"ឡាតវី",mad:"ម៉ាឌូរីស",mag:"ម៉ាហ្គាហ៊ី",mai:"ម៉ៃធីលី",mak:"ម៉ាកាសា",mas:"ម៉ាសៃ",mdf:"មុខសា",men:"មេនឌី",mer:"មេរូ",mfe:"ម៉ូរីស៊ីន",mg:"ម៉ាឡាហ្គាស៊ី",mgh:"ម៉ាកគូវ៉ាមីតូ",mgo:"មេតា",mh:"ម៉ាស់សល",mi:"ម៉ោរី",mic:"មិកមេក",min:"មីណាងកាប៊ូ",mk:"ម៉ាសេដូនី",ml:"ម៉ាឡាយ៉ាឡាម",mn:"ម៉ុងហ្គោលី",mni:"ម៉ានីពូរី",moh:"ម៊ូហាគ",mos:"មូស៊ី",mr:"ម៉ារ៉ាធី",ms:"ម៉ាឡេ",mt:"ម៉ាល់តា",mua:"មុនដាង",mus:"គ្រីក",mwl:"មីរ៉ានដេស",my:"ភូមា",myv:"អឺហ្ស៊ីយ៉ា",mzn:"ម៉ាហ្សានដឺរេនី",na:"ណូរូ",nap:"នាប៉ូលីតាន",naq:"ណាម៉ា",nb:"ន័រវែស បុកម៉ាល់",nd:"នេបេលេខាងជើង",nds:"អាល្លឺម៉ង់ក្រោម","nds-NL":"ហ្សាក់ស្យុងក្រោម",ne:"នេប៉ាល់","new":"នេវ៉ាវី",ng:"នុនហ្គា",nia:"នីអាស",niu:"នូអៀន",nl:"ហូឡង់","nl-BE":"ផ្លាមីស",nmg:"ក្វាស្យូ",nn:"ន័រវែស នីនូស",nnh:"ងៀមប៊ូន",no:"ន័រវែស",nog:"ណូហ្គៃ",nqo:"នគោ",nr:"នេប៊េលខាងត្បូង",nso:"សូថូខាងជើង",nus:"នូអ័រ",nv:"ណាវ៉ាចូ",ny:"ណានចា",nyn:"ណានកូលេ",oc:"អូសីតាន់",om:"អូរ៉ូម៉ូ",or:"អូឌៀ",os:"អូស៊ីទិក",pa:"បឹនជាពិ",pag:"ភេនហ្គាស៊ីណាន",pam:"ផាមភេនហ្គា",pap:"ប៉ាប៉ៃមេនតូ",pau:"ប៉ាលូអាន",pcm:"ភាសាទំនាក់ទំនងនីហ្សេរីយ៉ា",pl:"ប៉ូឡូញ",prg:"ព្រូស៊ាន",ps:"បាស្តូ",pt:"ព័រទុយហ្គាល់","pt-BR":"ព័រទុយហ្គាល់ (ប្រេស៊ីល)","pt-PT":"ព័រទុយហ្គាល់ (អឺរ៉ុប)",qu:"ហ្គិកឈួ",quc:"គីចឈី",rap:"រ៉ាប៉ានូ",rar:"រ៉ារ៉ូតុងហ្គាន",rm:"រ៉ូម៉ង់",rn:"រុណ្ឌី",ro:"រូម៉ានី","ro-MD":"ម៉ុលដាវី",rof:"រុមបូ",root:"រូត",ru:"រុស្ស៊ី",rup:"អារ៉ូម៉ានី",rw:"គិនយ៉ាវ៉ាន់ដា",rwk:"រ៉្វា",sa:"សំស្ក្រឹត",sad:"សានដាវី",sah:"សាខា",saq:"សាមបូរូ",sat:"សាន់តាលី",sba:"ងាំបេយ",sbp:"សានហ្គូ",sc:"សាឌីនា",scn:"ស៊ីស៊ីលាន",sco:"ស្កុត",sd:"ស៊ីនឌី",sdh:"ឃើដភាគខាងត្បូង",se:"សាមីខាងជើង",seh:"ស៊ីណា",ses:"គុយរ៉ាបូរ៉ុស៊ីនី",sg:"សានហ្គោ",sh:"សឺបូក្រូអាត",shi:"តាឈីលហ៊ីត",shn:"សាន",si:"ស្រីលង្កា",sk:"ស្លូវ៉ាគី",sl:"ស្លូវ៉ានី",sm:"សាម័រ",sma:"សាមីខាងត្បូង",smj:"លូលីសាមី",smn:"អ៊ីណារីសាម៉ី",sms:"ស្កុលសាមី",sn:"សូណា",snk:"សូនីនគេ",so:"សូម៉ាលី",sq:"អាល់បានី",sr:"ស៊ែប",srn:"ស្រាណានតុងហ្គោ",ss:"ស្វាទី",ssy:"សាហូ",st:"សូថូខាងត្បូង",su:"ស៊ូដង់",suk:"ស៊ូគូម៉ា",sv:"ស៊ុយអែត",sw:"ស្វាហ៊ីលី","sw-CD":"កុងហ្គោស្វាហ៊ីលី",swb:"កូម៉ូរី",syr:"ស៊ីរី",ta:"តាមីល",te:"តេលុគុ",tem:"ធីមនី",teo:"តេសូ",tet:"ទីទុំ",tg:"តាហ្ស៊ីគ",th:"ថៃ",ti:"ទីហ្គ្រីញ៉ា",tig:"ធីហ្គ្រា",tk:"តួកម៉េន",tlh:"ឃ្លីនហ្គុន",tn:"ស្វាណា",to:"តុងហ្គា",tpi:"ថុកពីស៊ីន",tr:"ទួរគី",trv:"តារ៉ូកូ",ts:"សុងហ្គា",tt:"តាតា",tum:"ទុមប៊ូកា",tvl:"ទូវ៉ាលូ",tw:"ទ្វី",twq:"តាសាវ៉ាក់",ty:"តាហ៊ីទី",tyv:"ទូវីនៀ",tzm:"តាម៉ាសាយអាត្លាសកណ្តាល",udm:"អាត់មូដ",ug:"អ៊ុយហ្គឺរ",uk:"អ៊ុយក្រែន",umb:"អាម់ប៊ុនឌូ",ur:"អ៊ូរឌូ",uz:"អ៊ូសបេគ",vai:"វៃ",ve:"វេនដា",vi:"វៀតណាម",vo:"វូឡាពូក",vun:"វុនចូ",wa:"វ៉ាលូន",wae:"វេលសឺ",wal:"វ៉ូឡាយតា",war:"វ៉ារេយ",wbp:"វ៉ារីប៉ារី",wo:"វូឡុហ្វ",xal:"កាលមីគ",xh:"ឃសា",xog:"សូហ្គា",yav:"យ៉ាងបេន",ybb:"យេមបា",yi:"យ៉ីឌីស",yo:"យរូបា",yue:"កន្តាំង",za:"ហ្សួង",zgh:"តាម៉ាហ្សៃម៉ារ៉ុកស្តង់ដា",zh:"ចិន","zh-Hans":"ចិនកុកងឺ (អក្សរ​កាត់)","zh-Hant":"ចិនកុកងឺ (អក្សរ​ពុម្ព)",zu:"ហ្សូលូ",zun:"ហ្សូនី",zza:"ហ្សាហ្សា"},scriptNames:{Cyrl:"ស៊ីរីលីក",Latn:"ឡាតាំង",Arab:"អារ៉ាប់",Guru:"កុមុយឃី",Hans:"អក្សរ​ចិន​កាត់",Hant:"អក្សរ​ចិន​ពេញ"}},kn:{rtl:false,languageNames:{aa:"ಅಫಾರ್",ab:"ಅಬ್ಖಾಜಿಯನ್",ace:"ಅಛಿನೀಸ್",ach:"ಅಕೋಲಿ",ada:"ಅಡಂಗ್ಮೆ",ady:"ಅಡೈಘೆ",ae:"ಅವೆಸ್ಟನ್",af:"ಆಫ್ರಿಕಾನ್ಸ್",afh:"ಆಫ್ರಿಹಿಲಿ",agq:"ಅಘೆಮ್",ain:"ಐನು",ak:"ಅಕಾನ್",akk:"ಅಕ್ಕಾಡಿಯನ್",ale:"ಅಲೆಯುಟ್",alt:"ದಕ್ಷಿಣ ಅಲ್ಟಾಯ್",am:"ಅಂಹರಿಕ್",an:"ಅರಗೊನೀಸ್",ang:"ಪ್ರಾಚೀನ ಇಂಗ್ಲೀಷ್",anp:"ಆಂಗಿಕಾ",ar:"ಅರೇಬಿಕ್","ar-001":"ಆಧುನಿಕ ಪ್ರಮಾಣಿತ ಅರೇಬಿಕ್",arc:"ಅರಾಮಿಕ್",arn:"ಮಪುಚೆ",arp:"ಅರಪಾಹೋ",arw:"ಅರಾವಾಕ್",as:"ಅಸ್ಸಾಮೀಸ್",asa:"ಅಸು",ast:"ಆಸ್ಟುರಿಯನ್",av:"ಅವರಿಕ್",awa:"ಅವಧಿ",ay:"ಅಯ್ಮಾರಾ",az:"ಅಜೆರ್ಬೈಜಾನಿ",ba:"ಬಶ್ಕಿರ್",bal:"ಬಲೂಚಿ",ban:"ಬಲಿನೀಸ್",bas:"ಬಸಾ",be:"ಬೆಲರೂಸಿಯನ್",bej:"ಬೇಜಾ",bem:"ಬೆಂಬಾ",bez:"ಬೆನ",bg:"ಬಲ್ಗೇರಿಯನ್",bgn:"ಪಶ್ಚಿಮ ಬಲೊಚಿ",bho:"ಭೋಜಪುರಿ",bi:"ಬಿಸ್ಲಾಮಾ",bik:"ಬಿಕೊಲ್",bin:"ಬಿನಿ",bla:"ಸಿಕ್ಸಿಕಾ",bm:"ಬಂಬಾರಾ",bn:"ಬಾಂಗ್ಲಾ",bo:"ಟಿಬೇಟಿಯನ್",br:"ಬ್ರೆಟನ್",bra:"ಬ್ರಜ್",brx:"ಬೋಡೊ",bs:"ಬೋಸ್ನಿಯನ್",bua:"ಬುರಿಯಟ್",bug:"ಬುಗಿನೀಸ್",byn:"ಬ್ಲಿನ್",ca:"ಕೆಟಲಾನ್",cad:"ಕ್ಯಾಡ್ಡೋ",car:"ಕಾರಿಬ್",cch:"ಅಟ್ಸಮ್",ccp:"ಚಕ್ಮಾ",ce:"ಚೆಚನ್",ceb:"ಸೆಬುವಾನೊ",cgg:"ಚಿಗಾ",ch:"ಕಮೊರೊ",chb:"ಚಿಬ್ಚಾ",chg:"ಚಗಟಾಯ್",chk:"ಚೂಕಿಸೆ",chm:"ಮಾರಿ",chn:"ಚಿನೂಕ್ ಜಾರ್ಗೋನ್",cho:"ಚೋಕ್ಟಾವ್",chp:"ಚಿಪೆವ್ಯಾನ್",chr:"ಚೆರೋಕಿ",chy:"ಚೀಯೆನ್ನೇ",ckb:"ಮಧ್ಯ ಕುರ್ದಿಶ್",co:"ಕೋರ್ಸಿಕನ್",cop:"ಕೊಪ್ಟಿಕ್",cr:"ಕ್ರೀ",crh:"ಕ್ರಿಮೀಯನ್ ಟರ್ಕಿಷ್",crs:"ಸೆಸೆಲ್ವಾ ಕ್ರಯೋಲ್ ಫ್ರೆಂಚ್",cs:"ಜೆಕ್",csb:"ಕಶುಬಿಯನ್",cu:"ಚರ್ಚ್ ಸ್ಲಾವಿಕ್",cv:"ಚುವಾಶ್",cy:"ವೆಲ್ಶ್",da:"ಡ್ಯಾನಿಶ್",dak:"ಡಕೋಟಾ",dar:"ದರ್ಗ್ವಾ",dav:"ಟೈಟ",de:"ಜರ್ಮನ್","de-AT":"ಆಸ್ಟ್ರಿಯನ್ ಜರ್ಮನ್","de-CH":"ಸ್ವಿಸ್ ಹೈ ಜರ್ಮನ್",del:"ಡೆಲಾವೇರ್",den:"ಸ್ಲೇವ್",dgr:"ಡೋಗ್ರಿಬ್",din:"ಡಿಂಕಾ",dje:"ಜರ್ಮಾ",doi:"ಡೋಗ್ರಿ",dsb:"ಲೋವರ್ ಸರ್ಬಿಯನ್",dua:"ಡುವಾಲಾ",dum:"ಮಧ್ಯ ಡಚ್",dv:"ದಿವೆಹಿ",dyo:"ಜೊಲ-ಫೊನ್ಯಿ",dyu:"ಡ್ಯೂಲಾ",dz:"ಜೋಂಗ್‌ಖಾ",dzg:"ಡಜಾಗ",ebu:"ಎಂಬು",ee:"ಈವ್",efi:"ಎಫಿಕ್",egy:"ಪ್ರಾಚೀನ ಈಜಿಪ್ಟಿಯನ್",eka:"ಎಕಾಜುಕ್",el:"ಗ್ರೀಕ್",elx:"ಎಲಾಮೈಟ್",en:"ಇಂಗ್ಲಿಷ್","en-AU":"ಆಸ್ಟ್ರೇಲಿಯನ್ ಇಂಗ್ಲಿಷ್","en-CA":"ಕೆನೆಡಿಯನ್ ಇಂಗ್ಲಿಷ್","en-GB":"ಬ್ರಿಟಿಷ್ ಇಂಗ್ಲಿಷ್","en-US":"ಅಮೆರಿಕನ್ ಇಂಗ್ಲಿಷ್",enm:"ಮಧ್ಯ ಇಂಗ್ಲೀಷ್",eo:"ಎಸ್ಪೆರಾಂಟೊ",es:"ಸ್ಪ್ಯಾನಿಷ್","es-419":"ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್","es-ES":"ಯುರೋಪಿಯನ್ ಸ್ಪ್ಯಾನಿಷ್","es-MX":"ಮೆಕ್ಸಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್",et:"ಎಸ್ಟೊನಿಯನ್",eu:"ಬಾಸ್ಕ್",ewo:"ಇವಾಂಡೋ",fa:"ಪರ್ಶಿಯನ್",fan:"ಫಾಂಗ್",fat:"ಫಾಂಟಿ",ff:"ಫುಲಾ",fi:"ಫಿನ್ನಿಶ್",fil:"ಫಿಲಿಪಿನೊ",fj:"ಫಿಜಿಯನ್",fo:"ಫರೋಸಿ",fon:"ಫೋನ್",fr:"ಫ್ರೆಂಚ್","fr-CA":"ಕೆನೆಡಿಯನ್ ಫ್ರೆಂಚ್","fr-CH":"ಸ್ವಿಸ್ ಫ್ರೆಂಚ್",frc:"ಕಾಜುನ್ ಫ್ರೆಂಚ್",frm:"ಮಧ್ಯ ಫ್ರೆಂಚ್",fro:"ಪ್ರಾಚೀನ ಫ್ರೆಂಚ್",frr:"ಉತ್ತರ ಫ್ರಿಸಿಯನ್",frs:"ಪೂರ್ವ ಫ್ರಿಸಿಯನ್",fur:"ಫ್ರಿಯುಲಿಯನ್",fy:"ಪಶ್ಚಿಮ ಫ್ರಿಸಿಯನ್",ga:"ಐರಿಷ್",gaa:"ಗ",gag:"ಗಗೌಜ್",gan:"ಗಾನ್ ಚೀನೀಸ್",gay:"ಗಾಯೋ",gba:"ಗ್ಬಾಯಾ",gd:"ಸ್ಕಾಟಿಶ್ ಗೆಲಿಕ್",gez:"ಗೀಝ್",gil:"ಗಿಲ್ಬರ್ಟೀಸ್",gl:"ಗ್ಯಾಲಿಶಿಯನ್",gmh:"ಮಧ್ಯ ಹೈ ಜರ್ಮನ್",gn:"ಗೌರಾನಿ",goh:"ಪ್ರಾಚೀನ ಹೈ ಜರ್ಮನ್",gon:"ಗೊಂಡಿ",gor:"ಗೊರೊಂಟಾಲೋ",got:"ಗೋಥಿಕ್",grb:"ಗ್ರೇಬೋ",grc:"ಪ್ರಾಚೀನ ಗ್ರೀಕ್",gsw:"ಸ್ವಿಸ್ ಜರ್ಮನ್",gu:"ಗುಜರಾತಿ",guz:"ಗುಸಿ",gv:"ಮ್ಯಾಂಕ್ಸ್",gwi:"ಗ್ವಿಚ್‌ಇನ್",ha:"ಹೌಸಾ",hai:"ಹೈಡಾ",hak:"ಹಕ್",haw:"ಹವಾಯಿಯನ್",he:"ಹೀಬ್ರೂ",hi:"ಹಿಂದಿ",hil:"ಹಿಲಿಗೇನನ್",hit:"ಹಿಟ್ಟಿಟೆ",hmn:"ಮೋಂಗ್",ho:"ಹಿರಿ ಮೊಟು",hr:"ಕ್ರೊಯೇಶಿಯನ್",hsb:"ಅಪ್ಪರ್ ಸರ್ಬಿಯನ್",hsn:"ಶಯಾಂಗ್ ಚೀನೀಸೇ",ht:"ಹೈಟಿಯನ್ ಕ್ರಿಯೋಲಿ",hu:"ಹಂಗೇರಿಯನ್",hup:"ಹೂಪಾ",hy:"ಅರ್ಮೇನಿಯನ್",hz:"ಹೆರೆರೊ",ia:"ಇಂಟರ್‌ಲಿಂಗ್ವಾ",iba:"ಇಬಾನ್",ibb:"ಇಬಿಬಿಯೋ",id:"ಇಂಡೋನೇಶಿಯನ್",ie:"ಇಂಟರ್ಲಿಂಗ್",ig:"ಇಗ್ಬೊ",ii:"ಸಿಚುಅನ್ ಯಿ",ik:"ಇನುಪಿಯಾಕ್",ilo:"ಇಲ್ಲಿಕೋ",inh:"ಇಂಗುಷ್",io:"ಇಡೊ",is:"ಐಸ್‌ಲ್ಯಾಂಡಿಕ್",it:"ಇಟಾಲಿಯನ್",iu:"ಇನುಕ್ಟಿಟುಟ್",ja:"ಜಾಪನೀಸ್",jbo:"ಲೊಜ್ಬಾನ್",jgo:"ನೊಂಬಾ",jmc:"ಮ್ಯಕಮೆ",jpr:"ಜೂಡಿಯೋ-ಪರ್ಶಿಯನ್",jrb:"ಜೂಡಿಯೋ-ಅರೇಬಿಕ್",jv:"ಜಾವಾನೀಸ್",ka:"ಜಾರ್ಜಿಯನ್",kaa:"ಕಾರಾ-ಕಲ್ಪಾಕ್",kab:"ಕಬೈಲ್",kac:"ಕಚಿನ್",kaj:"ಜ್ಜು",kam:"ಕಂಬಾ",kaw:"ಕಾವಿ",kbd:"ಕಬರ್ಡಿಯನ್",kcg:"ಟ್ಯಾಪ್",kde:"ಮ್ಯಾಕೊಂಡ್",kea:"ಕಬುವೆರ್ಡಿಯನು",kfo:"ಕೋರೋ",kg:"ಕಾಂಗೋ",kha:"ಖಾಸಿ",kho:"ಖೋಟಾನೀಸ್",khq:"ಕೊಯ್ರ ಚೀನಿ",ki:"ಕಿಕುಯು",kj:"ಕ್ವಾನ್‌ಯಾಮಾ",kk:"ಕಝಕ್",kkj:"ಕಾಕೊ",kl:"ಕಲಾಲ್ಲಿಸುಟ್",kln:"ಕಲೆಂಜಿನ್",km:"ಖಮೇರ್",kmb:"ಕಿಂಬುಂಡು",kn:"ಕನ್ನಡ",ko:"ಕೊರಿಯನ್",koi:"ಕೋಮಿ-ಪರ್ಮ್ಯಕ್",kok:"ಕೊಂಕಣಿ",kos:"ಕೊಸರಿಯನ್",kpe:"ಕಪೆಲ್ಲೆ",kr:"ಕನುರಿ",krc:"ಕರಚಯ್-ಬಲ್ಕಾರ್",krl:"ಕರೇಲಿಯನ್",kru:"ಕುರುಖ್",ks:"ಕಾಶ್ಮೀರಿ",ksb:"ಶಂಬಲ",ksf:"ಬಫಿಯ",ksh:"ಕಲೊಗ್ನಿಯನ್",ku:"ಕುರ್ದಿಷ್",kum:"ಕುಮೈಕ್",kut:"ಕುಟೇನಾಯ್",kv:"ಕೋಮಿ",kw:"ಕಾರ್ನಿಷ್",ky:"ಕಿರ್ಗಿಜ್",la:"ಲ್ಯಾಟಿನ್",lad:"ಲ್ಯಾಡಿನೋ",lag:"ಲಾಂಗಿ",lah:"ಲಹಂಡಾ",lam:"ಲಂಬಾ",lb:"ಲಕ್ಸಂಬರ್ಗಿಷ್",lez:"ಲೆಜ್ಘಿಯನ್",lg:"ಗಾಂಡಾ",li:"ಲಿಂಬರ್ಗಿಶ್",lkt:"ಲಕೊಟ",ln:"ಲಿಂಗಾಲ",lo:"ಲಾವೋ",lol:"ಮೊಂಗೋ",lou:"ಲೂಯಿಸಿಯಾನ ಕ್ರಿಯೋಲ್",loz:"ಲೋಝಿ",lrc:"ಉತ್ತರ ಲೂರಿ",lt:"ಲಿಥುವೇನಿಯನ್",lu:"ಲೂಬಾ-ಕಟಾಂಗಾ",lua:"ಲುಬ-ಲುಲಾ",lui:"ಲೂಯಿಸೆನೋ",lun:"ಲುಂಡಾ",luo:"ಲುವೋ",lus:"ಮಿಝೋ",luy:"ಲುಯಿಯ",lv:"ಲಾಟ್ವಿಯನ್",mad:"ಮದುರೀಸ್",mag:"ಮಗಾಹಿ",mai:"ಮೈಥಿಲಿ",mak:"ಮಕಾಸರ್",man:"ಮಂಡಿಂಗೊ",mas:"ಮಸಾಯ್",mdf:"ಮೋಕ್ಷ",mdr:"ಮಂದಾರ್",men:"ಮೆಂಡೆ",mer:"ಮೆರು",mfe:"ಮೊರಿಸನ್",mg:"ಮಲಗಾಸಿ",mga:"ಮಧ್ಯ ಐರಿಷ್",mgh:"ಮ್ಯಖುವಾ- ಮೀಟ್ಟೊ",mgo:"ಮೆಟಾ",mh:"ಮಾರ್ಶಲ್ಲೀಸ್",mi:"ಮಾವೋರಿ",mic:"ಮಿಕ್‌ಮ್ಯಾಕ್",min:"ಮಿನಂಗ್‌ಕಬಾವು",mk:"ಮೆಸಿಡೋನಿಯನ್",ml:"ಮಲಯಾಳಂ",mn:"ಮಂಗೋಲಿಯನ್",mnc:"ಮಂಚು",mni:"ಮಣಿಪುರಿ",moh:"ಮೊಹಾವ್ಕ್",mos:"ಮೊಸ್ಸಿ",mr:"ಮರಾಠಿ",ms:"ಮಲಯ್",mt:"ಮಾಲ್ಟೀಸ್",mua:"ಮುಂಡಂಗ್",mus:"ಕ್ರೀಕ್",mwl:"ಮಿರಾಂಡೀಸ್",mwr:"ಮಾರ್ವಾಡಿ",my:"ಬರ್ಮೀಸ್",myv:"ಎರ್ಝ್ಯಾ",mzn:"ಮಜಂದೆರಾನಿ",na:"ನೌರು",nan:"ನಾನ್",nap:"ನಿಯಾಪೊಲಿಟನ್",naq:"ನಮ",nb:"ನಾರ್ವೆಜಿಯನ್ ಬೊಕ್ಮಲ್",nd:"ಉತ್ತರ ದೆಬೆಲೆ",nds:"ಲೋ ಜರ್ಮನ್","nds-NL":"ಲೋ ಸ್ಯಾಕ್ಸನ್",ne:"ನೇಪಾಳಿ","new":"ನೇವಾರೀ",ng:"ಡೋಂಗಾ",nia:"ನಿಯಾಸ್",niu:"ನಿಯುವನ್",nl:"ಡಚ್","nl-BE":"ಫ್ಲೆಮಿಷ್",nmg:"ಖ್ವಾಸಿಯೊ",nn:"ನಾರ್ವೇಜಿಯನ್ ನೈನಾರ್ಸ್ಕ್",nnh:"ನಿಂಬೂನ್",no:"ನಾರ್ವೇಜಿಯನ್",nog:"ನೊಗಾಯ್",non:"ಪ್ರಾಚೀನ ನೋರ್ಸ್",nqo:"ಎನ್‌ಕೋ",nr:"ದಕ್ಷಿಣ ದೆಬೆಲೆ",nso:"ಉತ್ತರ ಸೋಥೋ",nus:"ನೂಯರ್",nv:"ನವಾಜೊ",nwc:"ಶಾಸ್ತ್ರೀಯ ನೇವಾರಿ",ny:"ನ್ಯಾಂಜಾ",nym:"ನ್ಯಾಮ್‌ವೆಂಜಿ",nyn:"ನ್ಯಾನ್‌ಕೋಲೆ",nyo:"ನ್ಯೋರೋ",nzi:"ಜೀಮಾ",oc:"ಒಸಿಟನ್",oj:"ಒಜಿಬ್ವಾ",om:"ಒರೊಮೊ",or:"ಒಡಿಯ",os:"ಒಸ್ಸೆಟಿಕ್",osa:"ಓಸಾಜ್",ota:"ಒಟ್ಟೋಮನ್ ತುರ್ಕಿಷ್",pa:"ಪಂಜಾಬಿ",pag:"ಪಂಗಾಸಿನನ್",pal:"ಪಹ್ಲವಿ",pam:"ಪಂಪಾಂಗಾ",pap:"ಪಪಿಯಾಮೆಂಟೊ",pau:"ಪಲುಆನ್",pcm:"ನೈಜೀರಿಯನ್ ಪಿಡ್ಗಿನ್",peo:"ಪ್ರಾಚೀನ ಪರ್ಶಿಯನ್",phn:"ಫೀನಿಷಿಯನ್",pi:"ಪಾಲಿ",pl:"ಪೊಲಿಶ್",pon:"ಪೋನ್‌‌ಪಿಯನ್",prg:"ಪ್ರಶಿಯನ್",pro:"ಪ್ರಾಚೀನ ಪ್ರೊವೆನ್ಶಿಯಲ್",ps:"ಪಾಷ್ಟೋ",pt:"ಪೋರ್ಚುಗೀಸ್","pt-BR":"ಬ್ರೆಜಿಲಿಯನ್ ಪೋರ್ಚುಗೀಸ್","pt-PT":"ಯೂರೋಪಿಯನ್ ಪೋರ್ಚುಗೀಸ್",qu:"ಕ್ವೆಚುವಾ",quc:"ಕಿಷೆ",raj:"ರಾಜಸ್ಥಾನಿ",rap:"ರಾಪಾನುಯಿ",rar:"ರಾರೋಟೊಂಗನ್",rm:"ರೊಮಾನ್ಶ್",rn:"ರುಂಡಿ",ro:"ರೊಮೇನಿಯನ್","ro-MD":"ಮಾಲ್ಡೇವಿಯನ್",rof:"ರೊಂಬೊ",rom:"ರೋಮಾನಿ",root:"ರೂಟ್",ru:"ರಷ್ಯನ್",rup:"ಅರೋಮಾನಿಯನ್",rw:"ಕಿನ್ಯಾರ್‌ವಾಂಡಾ",rwk:"ರುವ",sa:"ಸಂಸ್ಕೃತ",sad:"ಸಂಡಾವೇ",sah:"ಸಖಾ",sam:"ಸಮರಿಟನ್ ಅರಾಮಿಕ್",saq:"ಸಂಬುರು",sas:"ಸಸಾಕ್",sat:"ಸಂತಾಲಿ",sba:"ನಂಬೇ",sbp:"ಸಂಗು",sc:"ಸರ್ಡೀನಿಯನ್",scn:"ಸಿಸಿಲಿಯನ್",sco:"ಸ್ಕೋಟ್ಸ್",sd:"ಸಿಂಧಿ",sdh:"ದಕ್ಷಿಣ ಕುರ್ದಿಶ್",se:"ಉತ್ತರ ಸಾಮಿ",seh:"ಸೆನ",sel:"ಸೆಲ್ಕಪ್",ses:"ಕೊಯ್ರಬೊರೊ ಸೆನ್ನಿ",sg:"ಸಾಂಗೋ",sga:"ಪ್ರಾಚೀನ ಐರಿಷ್",sh:"ಸರ್ಬೋ-ಕ್ರೊಯೇಶಿಯನ್",shi:"ಟಷೆಲ್‍ಹಿಟ್",shn:"ಶಾನ್",si:"ಸಿಂಹಳ",sid:"ಸಿಡಾಮೋ",sk:"ಸ್ಲೋವಾಕ್",sl:"ಸ್ಲೋವೇನಿಯನ್",sm:"ಸಮೋವನ್",sma:"ದಕ್ಷಿಣ ಸಾಮಿ",smj:"ಲೂಲ್ ಸಾಮಿ",smn:"ಇನಾರಿ ಸಮೀ",sms:"ಸ್ಕೋಟ್ ಸಾಮಿ",sn:"ಶೋನಾ",snk:"ಸೋನಿಂಕೆ",so:"ಸೊಮಾಲಿ",sog:"ಸೋಗ್ಡಿಯನ್",sq:"ಅಲ್ಬೇನಿಯನ್",sr:"ಸೆರ್ಬಿಯನ್",srn:"ಸ್ರಾನನ್ ಟೋಂಗೋ",srr:"ಸೇರೇರ್",ss:"ಸ್ವಾತಿ",ssy:"ಸಹೊ",st:"ದಕ್ಷಿಣ ಸೋಥೋ",su:"ಸುಂಡಾನೀಸ್",suk:"ಸುಕುಮಾ",sus:"ಸುಸು",sux:"ಸುಮೇರಿಯನ್",sv:"ಸ್ವೀಡಿಷ್",sw:"ಸ್ವಹಿಲಿ","sw-CD":"ಕಾಂಗೊ ಸ್ವಹಿಲಿ",swb:"ಕೊಮೊರಿಯನ್",syc:"ಶಾಸ್ತ್ರೀಯ ಸಿರಿಯಕ್",syr:"ಸಿರಿಯಾಕ್",ta:"ತಮಿಳು",te:"ತೆಲುಗು",tem:"ಟಿಮ್ನೆ",teo:"ಟೆಸೊ",ter:"ಟೆರೆನೋ",tet:"ಟೇಟಮ್",tg:"ತಾಜಿಕ್",th:"ಥಾಯ್",ti:"ಟಿಗ್ರಿನ್ಯಾ",tig:"ಟೈಗ್ರೆ",tiv:"ಟಿವ್",tk:"ಟರ್ಕ್‌ಮೆನ್",tkl:"ಟೊಕೆಲಾವ್",tl:"ಟ್ಯಾಗಲೋಗ್",tlh:"ಕ್ಲಿಂಗನ್",tli:"ಟ್ಲಿಂಗಿಟ್",tmh:"ಟಮಾಷೆಕ್",tn:"ಸ್ವಾನಾ",to:"ಟೋಂಗನ್",tog:"ನ್ಯಾಸಾ ಟೋಂಗಾ",tpi:"ಟೋಕ್ ಪಿಸಿನ್",tr:"ಟರ್ಕಿಶ್",trv:"ಟರೊಕೊ",ts:"ಸೋಂಗಾ",tsi:"ಸಿಂಶಿಯನ್",tt:"ಟಾಟರ್",tum:"ತುಂಬುಕಾ",tvl:"ಟುವಾಲು",tw:"ಟ್ವಿ",twq:"ಟಸವಕ್",ty:"ಟಹೀಟಿಯನ್",tyv:"ಟುವಿನಿಯನ್",tzm:"ಮಧ್ಯ ಅಟ್ಲಾಸ್ ಟಮಜೈಟ್",udm:"ಉಡ್‌ಮುರ್ಟ್",ug:"ಉಯಿಘರ್",uga:"ಉಗಾರಿಟಿಕ್",uk:"ಉಕ್ರೇನಿಯನ್",umb:"ಉಂಬುಂಡು",ur:"ಉರ್ದು",uz:"ಉಜ್ಬೇಕ್",vai:"ವಾಯಿ",ve:"ವೆಂಡಾ",vi:"ವಿಯೆಟ್ನಾಮೀಸ್",vo:"ವೋಲಾಪುಕ್",vot:"ವೋಟಿಕ್",vun:"ವುಂಜೊ",wa:"ವಾಲೂನ್",wae:"ವಾಲ್ಸರ್",wal:"ವಲಾಯ್ತಾ",war:"ವರಾಯ್",was:"ವಾಷೋ",wbp:"ವಾರ್ಲ್‌ಪಿರಿ",wo:"ವೋಲೋಫ್",wuu:"ವು",xal:"ಕಲ್ಮೈಕ್",xh:"ಕ್ಸೋಸ",xog:"ಸೊಗ",yao:"ಯಾವೊ",yap:"ಯಪೀಸೆ",yav:"ಯಾಂಗ್ಬೆನ್",ybb:"ಯೆಂಬಾ",yi:"ಯಿಡ್ಡಿಶ್",yo:"ಯೊರುಬಾ",yue:"ಕ್ಯಾಂಟನೀಸ್",za:"ಝೂವಾಂಗ್",zap:"ಝೋಪೊಟೆಕ್",zbl:"ಬ್ಲಿಸ್ಸಿಂಬಲ್ಸ್",zen:"ಝೆನಾಗಾ",zgh:"ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಮೊರೊಕ್ಕನ್ ಟಮಜೈಟ್",zh:"ಚೈನೀಸ್","zh-Hans":"ಚೈನೀಸ್ (ಸರಳೀಕೃತ)","zh-Hant":"ಸಾಂಪ್ರದಾಯಿಕ ಮ್ಯಾಂಡರಿನ್ ಚೈನೀಸ್",zu:"ಜುಲು",zun:"ಝೂನಿ",zza:"ಜಾಝಾ"},scriptNames:{Cyrl:"ಸಿರಿಲಿಕ್",Latn:"ಲ್ಯಾಟಿನ್",Arab:"ಅರೇಬಿಕ್",Guru:"ಗುರ್ಮುಖಿ",Tfng:"ಟಿಫಿನಾಘ್",Vaii:"ವಾಯ್",Hans:"ಸರಳೀಕೃತ",Hant:"ಸಾಂಪ್ರದಾಯಿಕ"}},ko:{rtl:false,languageNames:{aa:"아파르어",ab:"압카즈어",ace:"아체어",ach:"아콜리어",ada:"아당메어",ady:"아디게어",ae:"아베스타어",aeb:"튀니지 아랍어",af:"아프리칸스어",afh:"아프리힐리어",agq:"아그햄어",ain:"아이누어",ak:"아칸어",akk:"아카드어",ale:"알류트어",alt:"남부 알타이어",am:"암하라어",an:"아라곤어",ang:"고대 영어",anp:"앙가어",ar:"아랍어","ar-001":"현대 표준 아랍어",arc:"아람어",arn:"마푸둥군어",arp:"아라파호어",arq:"알제리 아랍어",ars:"아랍어(나즈디)",arw:"아라와크어",ary:"모로코 아랍어",arz:"이집트 아랍어",as:"아삼어",asa:"아수어",ast:"아스투리아어",av:"아바릭어",awa:"아와히어",ay:"아이마라어",az:"아제르바이잔어",ba:"바슈키르어",bal:"발루치어",ban:"발리어",bas:"바사어",bax:"바문어",bbj:"고말라어",be:"벨라루스어",bej:"베자어",bem:"벰바어",bez:"베나어",bfd:"바푸트어",bg:"불가리아어",bgn:"서부 발로치어",bho:"호즈푸리어",bi:"비슬라마어",bik:"비콜어",bin:"비니어",bkm:"콤어",bla:"식시카어",bm:"밤바라어",bn:"벵골어",bo:"티베트어",br:"브르타뉴어",bra:"브라지어",brh:"브라후이어",brx:"보도어",bs:"보스니아어",bss:"아쿠즈어",bua:"부리아타",bug:"부기어",bum:"불루어",byn:"브린어",byv:"메둠바어",ca:"카탈로니아어",cad:"카도어",car:"카리브어",cay:"카유가어",cch:"앗삼어",ccp:"차크마어",ce:"체첸어",ceb:"세부아노어",cgg:"치가어",ch:"차모로어",chb:"치브차어",chg:"차가타이어",chk:"추크어",chm:"마리어",chn:"치누크 자곤",cho:"촉토어",chp:"치페우얀",chr:"체로키어",chy:"샤이엔어",ckb:"소라니 쿠르드어",co:"코르시카어",cop:"콥트어",cr:"크리어",crh:"크리민 터키어; 크리민 타타르어",crs:"세이셸 크리올 프랑스어",cs:"체코어",csb:"카슈비아어",cu:"교회 슬라브어",cv:"추바시어",cy:"웨일스어",da:"덴마크어",dak:"다코타어",dar:"다르그와어",dav:"타이타어",de:"독일어","de-AT":"독일어(오스트리아)","de-CH":"고지 독일어(스위스)",del:"델라웨어어",den:"슬라브어",dgr:"도그리브어",din:"딩카어",dje:"자르마어",doi:"도그리어",dsb:"저지 소르비아어",dua:"두알라어",dum:"중세 네덜란드어",dv:"디베히어",dyo:"졸라 포니어",dyu:"드율라어",dz:"종카어",dzg:"다장가어",ebu:"엠부어",ee:"에웨어",efi:"이픽어",egy:"고대 이집트어",eka:"이카죽어",el:"그리스어",elx:"엘람어",en:"영어","en-AU":"영어(호주)","en-CA":"영어(캐나다)","en-GB":"영어(영국)","en-US":"영어(미국)",enm:"중세 영어",eo:"에스페란토어",es:"스페인어","es-419":"스페인어(라틴 아메리카)","es-ES":"스페인어(유럽)","es-MX":"스페인어(멕시코)",et:"에스토니아어",eu:"바스크어",ewo:"이원도어",fa:"페르시아어",fan:"팡그어",fat:"판티어",ff:"풀라어",fi:"핀란드어",fil:"필리핀어",fj:"피지어",fo:"페로어",fon:"폰어",fr:"프랑스어","fr-CA":"프랑스어(캐나다)","fr-CH":"프랑스어(스위스)",frc:"케이준 프랑스어",frm:"중세 프랑스어",fro:"고대 프랑스어",frr:"북부 프리지아어",frs:"동부 프리슬란드어",fur:"프리울리어",fy:"서부 프리지아어",ga:"아일랜드어",gaa:"가어",gag:"가가우스어",gan:"간어",gay:"가요어",gba:"그바야어",gbz:"조로아스터 다리어",gd:"스코틀랜드 게일어",gez:"게이즈어",gil:"키리바시어",gl:"갈리시아어",glk:"길라키어",gmh:"중세 고지 독일어",gn:"과라니어",goh:"고대 고지 독일어",gom:"고아 콘칸어",gon:"곤디어",gor:"고론탈로어",got:"고트어",grb:"게르보어",grc:"고대 그리스어",gsw:"독일어(스위스)",gu:"구자라트어",guz:"구시어",gv:"맹크스어",gwi:"그위친어",ha:"하우사어",hai:"하이다어",hak:"하카어",haw:"하와이어",he:"히브리어",hi:"힌디어",hif:"피지 힌디어",hil:"헤리가뇬어",hit:"하타이트어",hmn:"히몸어",ho:"히리 모투어",hr:"크로아티아어",hsb:"고지 소르비아어",hsn:"샹어",ht:"아이티어",hu:"헝가리어",hup:"후파어",hy:"아르메니아어",hz:"헤레로어",ia:"인터링구아",iba:"이반어",ibb:"이비비오어",id:"인도네시아어",ie:"인테르링구에",ig:"이그보어",ii:"쓰촨 이어",ik:"이누피아크어",ilo:"이로코어",inh:"인귀시어",io:"이도어",is:"아이슬란드어",it:"이탈리아어",iu:"이눅티투트어",ja:"일본어",jbo:"로반어",jgo:"응곰바어",jmc:"마차메어",jpr:"유대-페르시아어",jrb:"유대-아라비아어",jv:"자바어",ka:"조지아어",kaa:"카라칼파크어",kab:"커바일어",kac:"카친어",kaj:"까꼬토끄어",kam:"캄바어",kaw:"카위어",kbd:"카바르디어",kbl:"카넴부어",kcg:"티얍어",kde:"마콘데어",kea:"크리올어",kfo:"코로어",kg:"콩고어",kha:"카시어",kho:"호탄어",khq:"코이라 친니어",khw:"코와르어",ki:"키쿠유어",kj:"쿠안야마어",kk:"카자흐어",kkj:"카코어",kl:"그린란드어",kln:"칼렌진어",km:"크메르어",kmb:"킴분두어",kn:"칸나다어",ko:"한국어",koi:"코미페르먀크어",kok:"코카니어",kos:"코스라이엔어",kpe:"크펠레어",kr:"칸누리어",krc:"카라챠이-발카르어",krl:"카렐리야어",kru:"쿠르크어",ks:"카슈미르어",ksb:"샴발라어",ksf:"바피아어",ksh:"콜로그니안어",ku:"쿠르드어",kum:"쿠믹어",kut:"쿠테네어",kv:"코미어",kw:"콘월어",ky:"키르기스어",la:"라틴어",lad:"라디노어",lag:"랑기어",lah:"라한다어",lam:"람바어",lb:"룩셈부르크어",lez:"레즈기안어",lfn:"링구아 프랑카 노바",lg:"간다어",li:"림버거어",lkt:"라코타어",ln:"링갈라어",lo:"라오어",lol:"몽고어",lou:"루이지애나 크리올어",loz:"로지어",lrc:"북부 루리어",lt:"리투아니아어",lu:"루바-카탄가어",lua:"루바-룰루아어",lui:"루이세노어",lun:"룬다어",luo:"루오어",lus:"루샤이어",luy:"루야어",lv:"라트비아어",mad:"마두라어",maf:"마파어",mag:"마가히어",mai:"마이틸리어",mak:"마카사어",man:"만딩고어",mas:"마사이어",mde:"마바어",mdf:"모크샤어",mdr:"만다르어",men:"멘데어",mer:"메루어",mfe:"모리스얀어",mg:"말라가시어",mga:"중세 아일랜드어",mgh:"마크후와-메토어",mgo:"메타어",mh:"마셜어",mi:"마오리어",mic:"미크맥어",min:"미낭카바우어",mk:"마케도니아어",ml:"말라얄람어",mn:"몽골어",mnc:"만주어",mni:"마니푸리어",moh:"모호크어",mos:"모시어",mr:"마라티어",mrj:"서부 마리어",ms:"말레이어",mt:"몰타어",mua:"문당어",mus:"크리크어",mwl:"미란데어",mwr:"마르와리어",my:"버마어",mye:"미예네어",myv:"엘즈야어",mzn:"마잔데라니어",na:"나우루어",nan:"민난어",nap:"나폴리어",naq:"나마어",nb:"노르웨이어(보크말)",nd:"북부 은데벨레어",nds:"저지 독일어","nds-NL":"저지 색슨어",ne:"네팔어","new":"네와르어",ng:"느동가어",nia:"니아스어",niu:"니웨언어",nl:"네덜란드어","nl-BE":"플라망어",nmg:"크와시오어",nn:"노르웨이어(니노르스크)",nnh:"느기엠본어",no:"노르웨이어",nog:"노가이어",non:"고대 노르웨이어",nqo:"응코어",nr:"남부 은데벨레어",nso:"북부 소토어",nus:"누에르어",nv:"나바호어",nwc:"고전 네와르어",ny:"냔자어",nym:"니암웨지어",nyn:"니안콜어",nyo:"뉴로어",nzi:"느지마어",oc:"오크어",oj:"오지브와어",om:"오로모어",or:"오리야어",os:"오세트어",osa:"오세이지어",ota:"오스만 터키어",pa:"펀잡어",pag:"판가시난어",pal:"팔레비어",pam:"팜팡가어",pap:"파피아먼토어",pau:"팔라우어",pcm:"나이지리아 피진어",peo:"고대 페르시아어",phn:"페니키아어",pi:"팔리어",pl:"폴란드어",pnt:"폰틱어",pon:"폼페이어",prg:"프러시아어",pro:"고대 프로방스어",ps:"파슈토어",pt:"포르투갈어","pt-BR":"포르투갈어(브라질)","pt-PT":"포르투갈어(유럽)",qu:"케추아어",quc:"키체어",raj:"라자스탄어",rap:"라파뉴이",rar:"라로통가어",rm:"로만시어",rn:"룬디어",ro:"루마니아어","ro-MD":"몰도바어",rof:"롬보어",rom:"집시어",root:"어근",ru:"러시아어",rue:"루신어",rup:"아로마니아어",rw:"르완다어",rwk:"르와어",sa:"산스크리트어",sad:"산다웨어",sah:"야쿠트어",sam:"사마리아 아랍어",saq:"삼부루어",sas:"사사크어",sat:"산탈리어",sba:"느감바이어",sbp:"상구어",sc:"사르디니아어",scn:"시칠리아어",sco:"스코틀랜드어",sd:"신디어",sdh:"남부 쿠르드어",se:"북부 사미어",see:"세네카어",seh:"세나어",sel:"셀쿠프어",ses:"코이야보로 세니어",sg:"산고어",sga:"고대 아일랜드어",sh:"세르비아-크로아티아어",shi:"타셸히트어",shn:"샨어",shu:"차디언 아라비아어",si:"스리랑카어",sid:"시다모어",sk:"슬로바키아어",sl:"슬로베니아어",sm:"사모아어",sma:"남부 사미어",smj:"룰레 사미어",smn:"이나리 사미어",sms:"스콜트 사미어",sn:"쇼나어",snk:"소닌케어",so:"소말리아어",sog:"소그디엔어",sq:"알바니아어",sr:"세르비아어",srn:"스라난 통가어",srr:"세레르어",ss:"시스와티어",ssy:"사호어",st:"남부 소토어",su:"순다어",suk:"수쿠마어",sus:"수수어",sux:"수메르어",sv:"스웨덴어",sw:"스와힐리어","sw-CD":"콩고 스와힐리어",swb:"코모로어",syc:"고전 시리아어",syr:"시리아어",ta:"타밀어",te:"텔루구어",tem:"팀니어",teo:"테조어",ter:"테레노어",tet:"테툼어",tg:"타지크어",th:"태국어",ti:"티그리냐어",tig:"티그레어",tiv:"티브어",tk:"투르크멘어",tkl:"토켈라우제도어",tkr:"차후르어",tl:"타갈로그어",tlh:"클링온어",tli:"틀링깃족어",tly:"탈리쉬어",tmh:"타마섹어",tn:"츠와나어",to:"통가어",tog:"니아사 통가어",tpi:"토크 피신어",tr:"터키어",trv:"타로코어",ts:"총가어",tsi:"트심시안어",tt:"타타르어",tum:"툼부카어",tvl:"투발루어",tw:"트위어",twq:"타사와크어",ty:"타히티어",tyv:"투비니안어",tzm:"중앙 모로코 타마지트어",udm:"우드말트어",ug:"위구르어",uga:"유가리틱어",uk:"우크라이나어",umb:"움분두어",ur:"우르두어",uz:"우즈베크어",vai:"바이어",ve:"벤다어",vi:"베트남어",vo:"볼라퓌크어",vot:"보틱어",vun:"분조어",wa:"왈론어",wae:"월저어",wal:"월라이타어",war:"와라이어",was:"와쇼어",wbp:"왈피리어",wo:"월로프어",wuu:"우어",xal:"칼미크어",xh:"코사어",xog:"소가어",yao:"야오족어",yap:"얍페세어",yav:"양본어",ybb:"옘바어",yi:"이디시어",yo:"요루바어",yue:"광둥어",za:"주앙어",zap:"사포테크어",zbl:"블리스 심볼",zen:"제나가어",zgh:"표준 모로코 타마지트어",zh:"중국어","zh-Hans":"중국어(만다린, 간체)","zh-Hant":"중국어(만다린, 번체)",zu:"줄루어",zun:"주니어",zza:"자자어"},scriptNames:{Cyrl:"키릴 문자",Latn:"로마자",Arab:"아랍 문자",Guru:"구르무키 문자",Tfng:"티피나그 문자",Vaii:"바이 문자",Hans:"간체",Hant:"번체"}},ku:{rtl:false,languageNames:{aa:"afarî",ab:"abxazî",ace:"açehî",ady:"adîgeyî",af:"afrîkansî",ain:"aynuyî",ale:"alêwîtî",am:"amharî",an:"aragonî",ar:"erebî","ar-001":"erebiya standard",as:"asamî",ast:"astûrî",av:"avarî",ay:"aymarayî",az:"azerî",ba:"başkîrî",ban:"balînî",be:"belarusî",bem:"bembayî",bg:"bulgarî",bho:"bojpûrî",bi:"bîslamayî",bla:"blakfotî",bm:"bambarayî",bn:"bengalî",bo:"tîbetî",br:"bretonî",bs:"bosnî",bug:"bugî",ca:"katalanî",ce:"çeçenî",ceb:"sebwanoyî",ch:"çamoroyî",chk:"çûkî",chm:"marî",chr:"çerokî",chy:"çeyenî",ckb:"soranî",co:"korsîkayî",cs:"çekî",cv:"çuvaşî",cy:"weylsî",da:"danmarkî",de:"elmanî","de-AT":"elmanî (Awistirya)","de-CH":"elmanî (Swîsre)",dsb:"sorbiya jêrîn",dua:"diwalayî",dv:"divehî",dz:"conxayî",ee:"eweyî",el:"yewnanî",en:"îngilîzî","en-AU":"îngilîzî (Awistralya)","en-CA":"îngilîzî (Kanada)","en-GB":"îngilîzî (Keyaniya Yekbûyî)","en-US":"îngilîzî (Dewletên Yekbûyî yên Amerîkayê)",eo:"esperantoyî",es:"spanî","es-419":"spanî (Amerîkaya Latînî)","es-ES":"spanî (Spanya)","es-MX":"spanî (Meksîk)",et:"estonî",eu:"baskî",fa:"farisî",ff:"fulahî",fi:"fînî",fil:"fîlîpînoyî",fj:"fîjî",fo:"ferî",fr:"frensî","fr-CA":"frensî (Kanada)","fr-CH":"frensî (Swîsre)",fur:"friyolî",fy:"frîsî",ga:"îrî",gd:"gaelîka skotî",gil:"kîrîbatî",gl:"galîsî",gn:"guwaranî",gor:"gorontaloyî",gsw:"elmanîşî",gu:"gujaratî",gv:"manksî",ha:"hawsayî",haw:"hawayî",he:"îbranî",hi:"hindî",hil:"hîlîgaynonî",hr:"xirwatî",hsb:"sorbiya jorîn",ht:"haîtî",hu:"mecarî",hy:"ermenî",hz:"hereroyî",ia:"interlingua",id:"indonezî",ig:"îgboyî",ilo:"îlokanoyî",inh:"îngûşî",io:"îdoyî",is:"îzlendî",it:"îtalî",iu:"înuîtî",ja:"japonî",jbo:"lojbanî",jv:"javayî",ka:"gurcî",kab:"kabîlî",kea:"kapverdî",kk:"qazaxî",kl:"kalalîsûtî",km:"ximêrî",kn:"kannadayî",ko:"koreyî",kok:"konkanî",ks:"keşmîrî",ksh:"rîpwarî",ku:"kurdî",kv:"komî",kw:"kornî",ky:"kirgizî",lad:"ladînoyî",lb:"luksembûrgî",lez:"lezgînî",lg:"lugandayî",li:"lîmbûrgî",lkt:"lakotayî",ln:"lingalayî",lo:"lawsî",lrc:"luriya bakur",lt:"lîtwanî",lv:"latviyayî",mad:"madurayî",mas:"masayî",mdf:"mokşayî",mg:"malagasî",mh:"marşalî",mi:"maorî",mic:"mîkmakî",min:"mînangkabawî",mk:"makedonî",ml:"malayalamî",mn:"mongolî",moh:"mohawkî",mr:"maratî",ms:"malezî",mt:"maltayî",my:"burmayî",myv:"erzayî",mzn:"mazenderanî",na:"nawrûyî",nap:"napolîtanî",nb:"norwecî (bokmål)","nds-NL":"nds (Holenda)",ne:"nepalî",niu:"nîwî",nl:"holendî","nl-BE":"flamî",nn:"norwecî (nynorsk)",nso:"sotoyiya bakur",nv:"navajoyî",oc:"oksîtanî",om:"oromoyî",or:"oriyayî",os:"osetî",pa:"puncabî",pam:"kapampanganî",pap:"papyamentoyî",pau:"palawî",pl:"polonî",prg:"prûsyayî",ps:"peştûyî",pt:"portugalî","pt-BR":"portugalî (Brazîl)","pt-PT":"portugalî (Portûgal)",qu:"keçwayî",rap:"rapanuyî",rar:"rarotongî",rm:"romancî",ro:"romanî","ro-MD":"romanî (Moldova)",ru:"rusî",rup:"aromanî",rw:"kînyariwandayî",sa:"sanskrîtî",sc:"sardînî",scn:"sicîlî",sco:"skotî",sd:"sindhî",se:"samiya bakur",si:"kîngalî",sk:"slovakî",sl:"slovenî",sm:"samoayî",smn:"samiya înarî",sn:"şonayî",so:"somalî",sq:"elbanî",sr:"sirbî",srn:"sirananî",ss:"swazî",st:"sotoyiya başûr",su:"sundanî",sv:"swêdî",sw:"swahîlî","sw-CD":"swahîlî (Kongo - Kînşasa)",swb:"komorî",syr:"siryanî",ta:"tamîlî",te:"telûgûyî",tet:"tetûmî",tg:"tacikî",th:"tayî",ti:"tigrînî",tk:"tirkmenî",tlh:"klîngonî",tn:"tswanayî",to:"tongî",tpi:"tokpisinî",tr:"tirkî",trv:"tarokoyî",ts:"tsongayî",tt:"teterî",tum:"tumbukayî",tvl:"tuvalûyî",ty:"tahîtî",tzm:"temazîxtî",udm:"udmurtî",ug:"oygurî",uk:"ukraynî",ur:"urdûyî",uz:"ozbekî",vi:"viyetnamî",vo:"volapûkî",wa:"walonî",war:"warayî",wo:"wolofî",xh:"xosayî",yi:"yidîşî",yo:"yorubayî",yue:"kantonî","zh-Hans":"zh (Hans)","zh-Hant":"zh (Hant)",zu:"zuluyî",zza:"zazakî"},scriptNames:{Cyrl:"kirîlî",Latn:"latînî",Arab:"erebî"}},lij:{rtl:false,languageNames:{},scriptNames:{}},lt:{rtl:false,languageNames:{aa:"afarų",ab:"abchazų",ace:"ačinezų",ach:"akolių",ada:"adangmų",ady:"adygėjų",ae:"avestų",aeb:"Tuniso arabų",af:"afrikanų",afh:"afrihili",agq:"aghemų",ain:"ainų",ak:"akanų",akk:"akadianų",akz:"alabamiečių",ale:"aleutų",aln:"albanų kalbos gegų tarmė",alt:"pietų Altajaus",am:"amharų",an:"aragonesų",ang:"senoji anglų",anp:"angikų",ar:"arabų","ar-001":"šiuolaikinė standartinė arabų",arc:"aramaikų",arn:"mapudungunų",aro:"araonų",arp:"arapahų",arq:"Alžyro arabų",arw:"aravakų",ary:"Maroko arabų",arz:"Egipto arabų",as:"asamų",asa:"asu",ase:"Amerikos ženklų kalba",ast:"asturianų",av:"avarikų",avk:"kotava",awa:"avadhi",ay:"aimarų",az:"azerbaidžaniečių",ba:"baškirų",bal:"baluči",ban:"baliečių",bar:"bavarų",bas:"basų",bax:"bamunų",bbc:"batak toba",bbj:"ghomalų",be:"baltarusių",bej:"bėjų",bem:"bembų",bew:"betavi",bez:"benų",bfd:"bafutų",bfq:"badaga",bg:"bulgarų",bgn:"vakarų beludžių",bho:"baučpuri",bi:"bislama",bik:"bikolų",bin:"bini",bjn:"bandžarų",bkm:"komų",bla:"siksikų",bm:"bambarų",bn:"bengalų",bo:"tibetiečių",bpy:"bišnuprijos",bqi:"bakhtiari",br:"bretonų",bra:"brajų",brh:"brahujų",brx:"bodo",bs:"bosnių",bss:"akūsų",bua:"buriatų",bug:"buginezų",bum:"bulu",byn:"blin",byv:"medumbų",ca:"katalonų",cad:"kado",car:"karibų",cay:"kaijūgų",cch:"atsamų",ccp:"Čakma",ce:"čečėnų",ceb:"sebuanų",cgg:"čigų",ch:"čamorų",chb:"čibčų",chg:"čagatų",chk:"čukesų",chm:"marių",chn:"činuk žargonas",cho:"čoktau",chp:"čipvėjų",chr:"čerokių",chy:"čajenų",ckb:"soranių kurdų",co:"korsikiečių",cop:"koptų",cps:"capiznon",cr:"kry",crh:"Krymo turkų",crs:"Seišelių kreolų ir prancūzų",cs:"čekų",csb:"kašubų",cu:"bažnytinė slavų",cv:"čiuvašų",cy:"valų",da:"danų",dak:"dakotų",dar:"dargva",dav:"taitų",de:"vokiečių","de-AT":"Austrijos vokiečių","de-CH":"Šveicarijos aukštutinė vokiečių",del:"delavero",den:"slave",dgr:"dogribų",din:"dinkų",dje:"zarmų",doi:"dogri",dsb:"žemutinių sorbų",dtp:"centrinio Dusuno",dua:"dualų",dum:"Vidurio Vokietijos",dv:"divehų",dyo:"džiola-foni",dyu:"dyulų",dz:"botijų",dzg:"dazagų",ebu:"embu",ee:"evių",efi:"efik",egl:"italų kalbos Emilijos tarmė",egy:"senovės egiptiečių",eka:"ekajuk",el:"graikų",elx:"elamitų",en:"anglų","en-AU":"Australijos anglų","en-CA":"Kanados anglų","en-GB":"Didžiosios Britanijos anglų","en-US":"Jungtinių Valstijų anglų",enm:"Vidurio Anglijos",eo:"esperanto",es:"ispanų","es-419":"Lotynų Amerikos ispanų","es-ES":"Europos ispanų","es-MX":"Meksikos ispanų",esu:"centrinės Aliaskos jupikų",et:"estų",eu:"baskų",ewo:"evondo",ext:"ispanų kalbos Ekstremadūros tarmė",fa:"persų",fan:"fangų",fat:"fanti",ff:"fulahų",fi:"suomių",fil:"filipiniečių",fit:"suomių kalbos Tornedalio tarmė",fj:"fidžių",fo:"farerų",fr:"prancūzų","fr-CA":"Kanados prancūzų","fr-CH":"Šveicarijos prancūzų",frc:"kadžunų prancūzų",frm:"Vidurio Prancūzijos",fro:"senoji prancūzų",frp:"arpitano",frr:"šiaurinių fryzų",frs:"rytų fryzų",fur:"friulių",fy:"vakarų fryzų",ga:"airių",gaa:"ga",gag:"gagaūzų",gan:"kinų kalbos dziangsi tarmė",gay:"gajo",gba:"gbaja",gbz:"zoroastrų dari",gd:"škotų (gėlų)",gez:"gyz",gil:"kiribati",gl:"galisų",glk:"gilaki",gmh:"Vidurio Aukštosios Vokietijos",gn:"gvaranių",goh:"senoji Aukštosios Vokietijos",gom:"Goa konkanių",gon:"gondi",gor:"gorontalo",got:"gotų",grb:"grebo",grc:"senovės graikų",gsw:"Šveicarijos vokiečių",gu:"gudžaratų",guc:"vajų",gur:"frafra",guz:"gusi",gv:"meniečių",gwi:"gvičino",ha:"hausų",hai:"haido",hak:"kinų kalbos hakų tarmė",haw:"havajiečių",he:"hebrajų",hi:"hindi",hif:"Fidžio hindi",hil:"hiligainonų",hit:"hititų",hmn:"hmong",ho:"hiri motu",hr:"kroatų",hsb:"aukštutinių sorbų",hsn:"kinų kalbos hunano tarmė",ht:"Haičio",hu:"vengrų",hup:"hupa",hy:"armėnų",hz:"hererų",ia:"tarpinė",iba:"iban",ibb:"ibibijų",id:"indoneziečių",ie:"interkalba",ig:"igbų",ii:"sičuan ji",ik:"inupiakų",ilo:"ilokų",inh:"ingušų",io:"ido",is:"islandų",it:"italų",iu:"inukitut",izh:"ingrų",ja:"japonų",jam:"Jamaikos kreolų anglų",jbo:"loiban",jgo:"ngombų",jmc:"mačamų",jpr:"judėjų persų",jrb:"judėjų arabų",jut:"danų kalbos jutų tarmė",jv:"javiečių",ka:"gruzinų",kaa:"karakalpakų",kab:"kebailų",kac:"kačinų",kaj:"ju",kam:"kembų",kaw:"kavių",kbd:"kabardinų",kbl:"kanembų",kcg:"tyap",kde:"makondų",kea:"Žaliojo Kyšulio kreolų",ken:"kenyang",kfo:"koro",kg:"Kongo",kgp:"kaingang",kha:"kasi",kho:"kotanezų",khq:"kojra čini",khw:"khovarų",ki:"kikujų",kiu:"kirmanjki",kj:"kuaniama",kk:"kazachų",kkj:"kako",kl:"kalalisut",kln:"kalenjinų",km:"khmerų",kmb:"kimbundu",kn:"kanadų",ko:"korėjiečių",koi:"komių-permių",kok:"konkanių",kos:"kosreanų",kpe:"kpelių",kr:"kanurių",krc:"karačiajų balkarijos",kri:"krio",krj:"kinaray-a",krl:"karelų",kru:"kuruk",ks:"kašmyrų",ksb:"šambalų",ksf:"bafų",ksh:"kolognų",ku:"kurdų",kum:"kumikų",kut:"kutenai",kv:"komi",kw:"kornų",ky:"kirgizų",la:"lotynų",lad:"ladino",lag:"langi",lah:"landa",lam:"lamba",lb:"liuksemburgiečių",lez:"lezginų",lfn:"naujoji frankų kalba",lg:"ganda",li:"limburgiečių",lij:"ligūrų",liv:"lyvių",lkt:"lakotų",lmo:"lombardų",ln:"ngalų",lo:"laosiečių",lol:"mongų",lou:"Luizianos kreolų",loz:"lozių",lrc:"šiaurės luri",lt:"lietuvių",ltg:"latgalių",lu:"luba katanga",lua:"luba lulua",lui:"luiseno",lun:"Lundos",lus:"mizo",luy:"luja",lv:"latvių",lzh:"klasikinė kinų",lzz:"laz",mad:"madurezų",maf:"mafų",mag:"magahi",mai:"maithili",mak:"Makasaro",man:"mandingų",mas:"masajų",mde:"mabų",mdf:"mokša",mdr:"mandarų",men:"mende",mer:"merų",mfe:"morisijų",mg:"malagasų",mga:"Vidurio Airijos",mgh:"makua-maeto",mgo:"meta",mh:"Maršalo Salų",mi:"maorių",mic:"mikmakų",min:"minangkabau",mk:"makedonų",ml:"malajalių",mn:"mongolų",mnc:"manču",mni:"manipurių",moh:"mohok",mos:"mosi",mr:"maratų",mrj:"vakarų mari",ms:"malajiečių",mt:"maltiečių",mua:"mundangų",mus:"krykų",mwl:"mirandezų",mwr:"marvari",mwv:"mentavai",my:"birmiečių",mye:"mjenų",myv:"erzyjų",mzn:"mazenderanių",na:"naurų",nan:"kinų kalbos pietų minų tarmė",nap:"neapoliečių",naq:"nama",nb:"norvegų bukmolas",nd:"šiaurės ndebelų",nds:"Žemutinės Vokietijos","nds-NL":"Žemutinės Saksonijos (Nyderlandai)",ne:"nepaliečių","new":"nevari",ng:"ndongų",nia:"nias",niu:"niujiečių",njo:"ao naga",nl:"olandų","nl-BE":"flamandų",nmg:"kvasių",nn:"naujoji norvegų",nnh:"ngiembūnų",no:"norvegų",nog:"nogų",non:"senoji norsų",nov:"novial",nqo:"enko",nr:"pietų ndebele",nso:"šiaurės Soto",nus:"nuerų",nv:"navajų",nwc:"klasikinė nevari",ny:"nianjų",nym:"niamvezi",nyn:"niankolų",nyo:"niorų",nzi:"nzima",oc:"očitarų",oj:"ojibva",om:"oromų",or:"odijų",os:"osetinų",osa:"osage",ota:"osmanų turkų",pa:"pendžabų",pag:"pangasinanų",pal:"vidurinė persų kalba",pam:"pampangų",pap:"papiamento",pau:"palauliečių",pcd:"pikardų",pcm:"Nigerijos pidžinų",pdc:"Pensilvanijos vokiečių",pdt:"vokiečių kalbos žemaičių tarmė",peo:"senoji persų",pfl:"vokiečių kalbos Pfalco tarmė",phn:"finikiečių",pi:"pali",pl:"lenkų",pms:"italų kalbos Pjemonto tarmė",pnt:"Ponto",pon:"Ponapės",prg:"prūsų",pro:"senovės provansalų",ps:"puštūnų",pt:"portugalų","pt-BR":"Brazilijos portugalų","pt-PT":"Europos portugalų",qu:"kečujų",quc:"kičių",qug:"Čimboraso aukštumų kečujų",raj:"Radžastano",rap:"rapanui",rar:"rarotonganų",rgn:"italų kalbos Romanijos tarmė",rif:"rifų",rm:"retoromanų",rn:"rundi",ro:"rumunų","ro-MD":"moldavų",rof:"rombo",rom:"romų",root:"rūt",rtm:"rotumanų",ru:"rusų",rue:"rusinų",rug:"Rovianos",rup:"aromanių",rw:"kinjaruandų",rwk:"rua",sa:"sanskritas",sad:"sandavių",sah:"jakutų",sam:"samarėjų aramių",saq:"sambūrų",sas:"sasak",sat:"santalių",saz:"sauraštrų",sba:"ngambajų",sbp:"sangų",sc:"sardiniečių",scn:"siciliečių",sco:"škotų",sd:"sindų",sdc:"sasaresų sardinų",sdh:"pietų kurdų",se:"šiaurės samių",see:"senecų",seh:"senų",sei:"seri",sel:"selkup",ses:"kojraboro seni",sg:"sango",sga:"senoji airių",sgs:"žemaičių",sh:"serbų-kroatų",shi:"tachelhitų",shn:"šan",shu:"chadian arabų",si:"sinhalų",sid:"sidamų",sk:"slovakų",sl:"slovėnų",sli:"sileziečių žemaičių",sly:"selajarų",sm:"Samoa",sma:"pietų samių",smj:"Liuleo samių",smn:"Inario samių",sms:"Skolto samių",sn:"šonų",snk:"soninke",so:"somaliečių",sog:"sogdien",sq:"albanų",sr:"serbų",srn:"sranan tongo",srr:"sererų",ss:"svatų",ssy:"saho",st:"pietų Soto",stq:"Saterlendo fryzų",su:"sundų",suk:"sukuma",sus:"susu",sux:"šumerų",sv:"švedų",sw:"suahilių","sw-CD":"Kongo suahilių",swb:"Komorų",syc:"klasikinė sirų",syr:"sirų",szl:"sileziečių",ta:"tamilų",tcy:"tulų",te:"telugų",tem:"timne",teo:"teso",ter:"Tereno",tet:"tetum",tg:"tadžikų",th:"tajų",ti:"tigrajų",tig:"tigre",tk:"turkmėnų",tkl:"Tokelau",tkr:"tsakurų",tl:"tagalogų",tlh:"klingonų",tli:"tlingitų",tly:"talyšų",tmh:"tamašek",tn:"tsvanų",to:"tonganų",tog:"niasa tongų",tpi:"Papua pidžinų",tr:"turkų",tru:"turoyo",trv:"Taroko",ts:"tsongų",tsd:"tsakonų",tsi:"tsimšian",tt:"totorių",ttt:"musulmonų tatų",tum:"tumbukų",tvl:"Tuvalu",tw:"tvi",twq:"tasavakų",ty:"taitiečių",tyv:"tuvių",tzm:"Centrinio Maroko tamazitų",udm:"udmurtų",ug:"uigūrų",uga:"ugaritų",uk:"ukrainiečių",umb:"umbundu",ur:"urdų",uz:"uzbekų",ve:"vendų",vec:"venetų",vep:"vepsų",vi:"vietnamiečių",vls:"vakarų flamandų",vmf:"pagrindinė frankonų",vo:"volapiuko",vot:"Votik",vro:"veru",vun:"vunjo",wa:"valonų",wae:"valserų",wal:"valamo",war:"varai",was:"Vašo",wbp:"valrpiri",wo:"volofų",wuu:"kinų kalbos vu tarmė",xal:"kalmukų",xh:"kosų",xmf:"megrelų",xog:"sogų",yao:"jao",yap:"japezų",yav:"jangbenų",ybb:"jembų",yi:"jidiš",yo:"jorubų",yrl:"njengatu",yue:"kinų kalbos Kantono tarmė",za:"chuang",zap:"zapotekų",zbl:"BLISS simbolių",zea:"zelandų",zen:"zenaga",zgh:"standartinė Maroko tamazigtų",zh:"kinų","zh-Hans":"supaprastintoji mandarinų kinų","zh-Hant":"tradicinė mandarinų kinų",zu:"zulų",zun:"Zuni",zza:"zaza"},scriptNames:{Cyrl:"kirilica",Latn:"lotynų",Arab:"arabų",Guru:"gurmuki",Tfng:"tifinag",Vaii:"vai",Hans:"supaprastinti",Hant:"tradiciniai"}},lv:{rtl:false,languageNames:{aa:"afāru",ab:"abhāzu",ace:"ačinu",ach:"ačolu",ada:"adangmu",ady:"adigu",ae:"avesta",af:"afrikandu",afh:"afrihili",agq:"aghemu",ain:"ainu",ak:"akanu",akk:"akadiešu",ale:"aleutu",alt:"dienvidaltajiešu",am:"amharu",an:"aragoniešu",ang:"senangļu",anp:"angika",ar:"arābu","ar-001":"mūsdienu standarta arābu",arc:"aramiešu",arn:"araukāņu",arp:"arapahu",arw:"aravaku",as:"asamiešu",asa:"asu",ast:"astūriešu",av:"avāru",awa:"avadhu",ay:"aimaru",az:"azerbaidžāņu","az-Arab":"dienvidazerbaidžāņu",ba:"baškīru",bal:"beludžu",ban:"baliešu",bas:"basu",bax:"bamumu",bbj:"gomalu",be:"baltkrievu",bej:"bedžu",bem:"bembu",bez:"bena",bfd:"bafutu",bg:"bulgāru",bgn:"rietumbeludžu",bho:"bhodžpūru",bi:"bišlamā",bik:"bikolu",bin:"binu",bkm:"komu",bla:"siksiku",bm:"bambaru",bn:"bengāļu",bo:"tibetiešu",br:"bretoņu",bra:"bradžiešu",brx:"bodo",bs:"bosniešu",bss:"nkosi",bua:"burjatu",bug:"bugu",bum:"bulu",byn:"bilinu",byv:"medumbu",ca:"katalāņu",cad:"kadu",car:"karību",cay:"kajuga",cch:"atsamu",ccp:"čakmu",ce:"čečenu",ceb:"sebuāņu",cgg:"kiga",ch:"čamorru",chb:"čibču",chg:"džagatajs",chk:"čūku",chm:"mariešu",chn:"činuku žargons",cho:"čoktavu",chp:"čipevaianu",chr:"čiroku",chy:"šejenu",ckb:"centrālkurdu",co:"korsikāņu",cop:"koptu",cr:"krī",crh:"Krimas tatāru",crs:"franciskā kreoliskā valoda (Seišelu salas)",cs:"čehu",csb:"kašubu",cu:"baznīcslāvu",cv:"čuvašu",cy:"velsiešu",da:"dāņu",dak:"dakotu",dar:"dargu",dav:"taitu",de:"vācu","de-AT":"vācu (Austrija)","de-CH":"augšvācu (Šveice)",del:"delavēru",den:"sleivu",dgr:"dogribu",din:"dinku",dje:"zarmu",doi:"dogru",dsb:"lejassorbu",dua:"dualu",dum:"vidusholandiešu",dv:"maldīviešu",dyo:"diola-fonjī",dyu:"diūlu",dz:"dzongke",dzg:"dazu",ebu:"kjembu",ee:"evu",efi:"efiku",egy:"ēģiptiešu",eka:"ekadžuku",el:"grieķu",elx:"elamiešu",en:"angļu","en-AU":"angļu (Austrālija)","en-CA":"angļu (Kanāda)","en-GB":"angļu (Lielbritānija)","en-US":"angļu (Amerikas Savienotās Valstis)",enm:"vidusangļu",eo:"esperanto",es:"spāņu","es-419":"spāņu (Latīņamerika)","es-ES":"spāņu (Spānija)","es-MX":"spāņu (Meksika)",et:"igauņu",eu:"basku",ewo:"evondu",fa:"persiešu",fan:"fangu",fat:"fantu",ff:"fulu",fi:"somu",fil:"filipīniešu",fj:"fidžiešu",fo:"fēru",fon:"fonu",fr:"franču","fr-CA":"franču (Kanāda)","fr-CH":"franču (Šveice)",frc:"kadžūnu franču",frm:"vidusfranču",fro:"senfranču",frr:"ziemeļfrīzu",frs:"austrumfrīzu",fur:"friūlu",fy:"rietumfrīzu",ga:"īru",gaa:"ga",gag:"gagauzu",gay:"gajo",gba:"gbaju",gd:"skotu gēlu",gez:"gēzu",gil:"kiribatiešu",gl:"galisiešu",gmh:"vidusaugšvācu",gn:"gvaranu",goh:"senaugšvācu",gon:"gondu valodas",gor:"gorontalu",got:"gotu",grb:"grebo",grc:"sengrieķu",gsw:"Šveices vācu",gu:"gudžaratu",guz:"gusii",gv:"meniešu",gwi:"kučinu",ha:"hausu",hai:"haidu",haw:"havajiešu",he:"ivrits",hi:"hindi",hil:"hiligainonu",hit:"hetu",hmn:"hmongu",ho:"hirimotu",hr:"horvātu",hsb:"augšsorbu",ht:"haitiešu",hu:"ungāru",hup:"hupu",hy:"armēņu",hz:"hereru",ia:"interlingva",iba:"ibanu",ibb:"ibibio",id:"indonēziešu",ie:"interlingve",ig:"igbo",ii:"Sičuaņas ji",ik:"inupiaku",ilo:"iloku",inh:"ingušu",io:"ido",is:"islandiešu",it:"itāļu",iu:"inuītu",ja:"japāņu",jbo:"ložbans",jmc:"mačamu",jpr:"jūdpersiešu",jrb:"jūdarābu",jv:"javiešu",ka:"gruzīnu",kaa:"karakalpaku",kab:"kabilu",kac:"kačinu",kaj:"kadži",kam:"kambu",kaw:"kāvi",kbd:"kabardiešu",kbl:"kaņembu",kcg:"katabu",kde:"makonde",kea:"kaboverdiešu",kfo:"koru",kg:"kongu",kha:"khasu",kho:"hotaniešu",khq:"koiračiinī",ki:"kikuju",kj:"kvaņamu",kk:"kazahu",kkj:"kako",kl:"grenlandiešu",kln:"kalendžīnu",km:"khmeru",kmb:"kimbundu",kn:"kannadu",ko:"korejiešu",koi:"komiešu-permiešu",kok:"konkanu",kos:"kosrājiešu",kpe:"kpellu",kr:"kanuru",krc:"karačaju un balkāru",krl:"karēļu",kru:"kuruhu",ks:"kašmiriešu",ksb:"šambalu",ksf:"bafiju",ksh:"Ķelnes vācu",ku:"kurdu",kum:"kumiku",kut:"kutenaju",kv:"komiešu",kw:"korniešu",ky:"kirgīzu",la:"latīņu",lad:"ladino",lag:"langi",lah:"landu",lam:"lambu",lb:"luksemburgiešu",lez:"lezgīnu",lg:"gandu",li:"limburgiešu",lkt:"lakotu",ln:"lingala",lo:"laosiešu",lol:"mongu",lou:"Luiziānas kreolu",loz:"lozu",lrc:"ziemeļluru",lt:"lietuviešu",lu:"lubakatanga",lua:"lubalulva",lui:"luisenu",lun:"lundu",lus:"lušeju",luy:"luhju",lv:"latviešu",mad:"maduriešu",maf:"mafu",mag:"magahiešu",mai:"maithili",mak:"makasaru",man:"mandingu",mas:"masaju",mde:"mabu",mdf:"mokšu",mdr:"mandaru",men:"mendu",mer:"meru",mfe:"Maurīcijas kreolu",mg:"malagasu",mga:"vidusīru",mgh:"makua",mgo:"metu",mh:"māršaliešu",mi:"maoru",mic:"mikmaku",min:"minangkabavu",mk:"maķedoniešu",ml:"malajalu",mn:"mongoļu",mnc:"mandžūru",mni:"manipūru",moh:"mohauku",mos:"mosu",mr:"marathu",ms:"malajiešu",mt:"maltiešu",mua:"mundangu",mus:"krīku",mwl:"mirandiešu",mwr:"marvaru",my:"birmiešu",mye:"mjenu",myv:"erzju",mzn:"mazanderāņu",na:"nauruiešu",nap:"neapoliešu",naq:"nama",nb:"norvēģu bukmols",nd:"ziemeļndebelu",nds:"lejasvācu","nds-NL":"lejassakšu",ne:"nepāliešu","new":"nevaru",ng:"ndongu",nia:"njasu",niu:"niuāņu",nl:"holandiešu","nl-BE":"flāmu",nmg:"kvasio",nn:"jaunnorvēģu",nnh:"ngjembūnu",no:"norvēģu",nog:"nogaju",non:"sennorvēģu",nqo:"nko",nr:"dienvidndebelu",nso:"ziemeļsotu",nus:"nueru",nv:"navahu",nwc:"klasiskā nevaru",ny:"čičeva",nym:"ņamvezu",nyn:"ņankolu",nyo:"ņoru",nzi:"nzemu",oc:"oksitāņu",oj:"odžibvu",om:"oromu",or:"oriju",os:"osetīnu",osa:"važāžu",ota:"turku osmaņu",pa:"pandžabu",pag:"pangasinanu",pal:"pehlevi",pam:"pampanganu",pap:"papjamento",pau:"palaviešu",pcm:"Nigērijas pidžinvaloda",peo:"senpersu",phn:"feniķiešu",pi:"pāli",pl:"poļu",pon:"ponapiešu",prg:"prūšu",pro:"senprovansiešu",ps:"puštu",pt:"portugāļu","pt-BR":"portugāļu (Brazīlija)","pt-PT":"portugāļu (Portugāle)",qu:"kečvu",quc:"kiče",raj:"radžastāņu",rap:"rapanuju",rar:"rarotongiešu",rm:"retoromāņu",rn:"rundu",ro:"rumāņu","ro-MD":"moldāvu",rof:"rombo",rom:"čigānu",root:"sakne",ru:"krievu",rup:"aromūnu",rw:"kiņaruanda",rwk:"ruanda",sa:"sanskrits",sad:"sandavu",sah:"jakutu",sam:"Samārijas aramiešu",saq:"samburu",sas:"sasaku",sat:"santalu",sba:"ngambeju",sbp:"sangu",sc:"sardīniešu",scn:"sicīliešu",sco:"skotu",sd:"sindhu",sdh:"dienvidkurdu",se:"ziemeļsāmu",see:"seneku",seh:"senu",sel:"selkupu",ses:"koiraboro senni",sg:"sango",sga:"senīru",sh:"serbu–horvātu",shi:"šilhu",shn:"šanu",shu:"Čadas arābu",si:"singāļu",sid:"sidamu",sk:"slovāku",sl:"slovēņu",sm:"samoāņu",sma:"dienvidsāmu",smj:"Luleo sāmu",smn:"Inari sāmu",sms:"skoltsāmu",sn:"šonu",snk:"soninku",so:"somāļu",sog:"sogdiešu",sq:"albāņu",sr:"serbu",srn:"sranantogo",srr:"serēru",ss:"svatu",ssy:"saho",st:"dienvidsotu",su:"zundu",suk:"sukumu",sus:"susu",sux:"šumeru",sv:"zviedru",sw:"svahili","sw-CD":"svahili (Kongo)",swb:"komoru",syc:"klasiskā sīriešu",syr:"sīriešu",ta:"tamilu",te:"telugu",tem:"temnu",teo:"teso",ter:"tereno",tet:"tetumu",tg:"tadžiku",th:"taju",ti:"tigrinja",tig:"tigru",tiv:"tivu",tk:"turkmēņu",tkl:"tokelaviešu",tl:"tagalu",tlh:"klingoņu",tli:"tlinkitu",tmh:"tuaregu",tn:"cvanu",to:"tongiešu",tog:"Njasas tongu",tpi:"tokpisins",tr:"turku",trv:"taroko",ts:"congu",tsi:"cimšiāņu",tt:"tatāru",tum:"tumbuku",tvl:"tuvaliešu",tw:"tvī",twq:"tasavaku",ty:"taitiešu",tyv:"tuviešu",tzm:"Centrālmarokas tamazīts",udm:"udmurtu",ug:"uiguru",uga:"ugaritiešu",uk:"ukraiņu",umb:"umbundu",ur:"urdu",uz:"uzbeku",vai:"vaju",ve:"vendu",vi:"vjetnamiešu",vo:"volapiks",vot:"votu",vun:"vundžo",wa:"valoņu",wae:"Vallisas vācu",wal:"valamu",war:"varaju",was:"vašo",wbp:"varlpirī",wo:"volofu",xal:"kalmiku",xh:"khosu",xog:"sogu",yao:"jao",yap:"japiešu",yav:"janbaņu",ybb:"jembu",yi:"jidišs",yo:"jorubu",yue:"kantoniešu",za:"džuanu",zap:"sapoteku",zbl:"blissimbolika",zen:"zenagu",zgh:"standarta tamazigtu (Maroka)",zh:"ķīniešu","zh-Hans":"ķīniešu vienkāršotā (mandarīnu)","zh-Hant":"ķīniešu tradicionālā (mandarīnu)",zu:"zulu",zun:"zunju",zza:"zazaki"},scriptNames:{Cyrl:"kirilica",Latn:"latīņu",Arab:"arābu",Guru:"pandžabu",Hans:"vienkāršotā",Hant:"tradicionālā"}},mg:{rtl:false,languageNames:{ak:"Akan",am:"Amharika",ar:"Arabo","ar-001":"Arabo (001)",be:"Bielorosy",bg:"Biolgara",bn:"Bengali",cs:"Tseky",de:"Alemanina","de-AT":"Alemanina (Aotrisy)","de-CH":"Alemanina (Soisa)",el:"Grika",en:"Anglisy","en-AU":"Anglisy (Aostralia)","en-CA":"Anglisy (Kanada)","en-GB":"Anglisy (Angletera)","en-US":"Anglisy (Etazonia)",es:"Espaniola","es-419":"Espaniola (419)","es-ES":"Espaniola (Espaina)","es-MX":"Espaniola (Meksika)",fa:"Persa",fr:"Frantsay","fr-CA":"Frantsay (Kanada)","fr-CH":"Frantsay (Soisa)",ha:"haoussa",hi:"hindi",hu:"hongroà",id:"Indonezianina",ig:"igbo",it:"Italianina",ja:"Japoney",jv:"Javaney",km:"khmer",ko:"Koreanina",mg:"Malagasy",ms:"Malay",my:"Birmana","nds-NL":"nds (Holanda)",ne:"Nepale",nl:"Holandey","nl-BE":"Holandey (Belzika)",pa:"Penjabi",pl:"Poloney",pt:"Portiogey","pt-BR":"Portiogey (Brezila)","pt-PT":"Portiogey (Pôrtiogala)",ro:"Romanianina","ro-MD":"Romanianina (Môldavia)",ru:"Rosianina",rw:"Roande",so:"Somalianina",sv:"Soisa","sw-CD":"sw (Repoblikan’i Kongo)",ta:"Tamoila",th:"Taioaney",tr:"Tiorka",uk:"Okrainianina",ur:"Ordò",vi:"Vietnamianina",yo:"Yôrobà",zh:"Sinoa, Mandarin","zh-Hans":"Sinoa, Mandarin (Hans)","zh-Hant":"Sinoa, Mandarin (Hant)",zu:"Zolò"},scriptNames:{}},mi:{rtl:false,languageNames:{"ar-001":"ar (001)",de:"Tiamana","de-AT":"Tiamana Atiria","de-CH":"Tiamana Ōkawa Huiterangi",en:"Ingarihi","en-AU":"Ingarihi Ahitereiriana","en-CA":"Ingarihi Kānata","en-GB":"Ingarihi Piritene","en-US":"Ingarihi Amerikana",es:"Paniora","es-419":"Paniora Amerika ki te Tonga","es-ES":"Paniora Uropi","es-MX":"Paniora Mēhikana",fr:"Wīwī","fr-CA":"Wīwī Kānata","fr-CH":"Wīwī Huiterangi",it:"Ītariana",ja:"Hapanihi",mi:"Māori","nds-NL":"nds (NL)","nl-BE":"nl (BE)",pt:"Pōtikī","pt-BR":"Pōtikī Parahi","pt-PT":"Pōtikī Uropi","ro-MD":"ro (MD)",ru:"Ruhiana","sw-CD":"sw (CD)",zh:"Hainamana","zh-Hans":"Hainamana (Māmā)","zh-Hant":"Hainamana (Tukuiho)"},scriptNames:{Cyrl:"Hīririki",Latn:"Rātina",Arab:"Arapika",Hans:"Māmā",Hant:"Tukuiho"}},mk:{rtl:false,languageNames:{aa:"афарски",ab:"апхаски",ace:"ачешки",ach:"аколи",ada:"адангме",ady:"адигејски",ae:"авестански",aeb:"туниски арапски",af:"африканс",afh:"африхили",agq:"агемски",ain:"ајну",ak:"акански",akk:"акадски",akz:"алабамски",ale:"алеутски",aln:"гешки албански",alt:"јужноалтајски",am:"амхарски",an:"арагонски",ang:"староанглиски",anp:"ангика",ar:"арапски","ar-001":"литературен арапски",arc:"арамејски",arn:"мапучки",aro:"араона",arp:"арапахо",arq:"алжирски арапски",arw:"аравачки",ary:"марокански арапски",arz:"египетски арапски",as:"асамски",asa:"асу",ase:"американски знаковен јазик",ast:"астурски",av:"аварски",avk:"котава",awa:"авади",ay:"ајмарски",az:"азербејџански",ba:"башкирски",bal:"белуџиски",ban:"балиски",bar:"баварски",bas:"баса",bax:"бамунски",bbc:"тоба",bbj:"гомала",be:"белоруски",bej:"беџа",bem:"бемба",bew:"бетавски",bez:"бена",bfd:"бафут",bfq:"бадага",bg:"бугарски",bgn:"западен балочи",bho:"боџпури",bi:"бислама",bik:"биколски",bin:"бини",bjn:"банџарски",bkm:"ком",bla:"сиксика",bm:"бамбара",bn:"бенгалски",bo:"тибетски",bpy:"бишнуприја",bqi:"бахтијарски",br:"бретонски",bra:"брај",brh:"брахујски",brx:"бодо",bs:"босански",bss:"акосе",bua:"бурјатски",bug:"бугиски",bum:"булу",byn:"биленски",byv:"медумба",ca:"каталонски",cad:"кадо",car:"карипски",cay:"кајуга",cch:"ацам",ccp:"чакмански",ce:"чеченски",ceb:"себуански",cgg:"чига",ch:"чаморски",chb:"чибча",chg:"чагатајски",chk:"чучки",chm:"мариски",chn:"чинучки жаргон",cho:"чоктавски",chp:"чипевјански",chr:"черокиски",chy:"чејенски",ckb:"централнокурдски",co:"корзикански",cop:"коптски",cps:"капизнон",cr:"кри",crh:"кримскотурски",crs:"француски (Сеселва креоли)",cs:"чешки",csb:"кашупски",cu:"црковнословенски",cv:"чувашки",cy:"велшки",da:"дански",dak:"дакота",dar:"даргва",dav:"таита",de:"германски","de-AT":"австриски германски","de-CH":"швајцарски високо-германски",del:"делавер",den:"слејви",dgr:"догрипски",din:"динка",dje:"зарма",doi:"догри",dsb:"долнолужички",dtp:"дусунски",dua:"дуала",dum:"среднохоландски",dv:"дивехи",dyo:"јола-фоњи",dyu:"џула",dz:"ѕонгка",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефик",egl:"емилијански",egy:"староегипетски",eka:"екаџук",el:"грчки",elx:"еламски",en:"англиски","en-AU":"австралиски англиски","en-CA":"канадски англиски","en-GB":"британски англиски","en-US":"американски англиски",enm:"средноанглиски",eo:"есперанто",es:"шпански","es-419":"латиноамерикански шпански","es-ES":"шпански (во Европа)","es-MX":"мексикански шпански",esu:"централнојупички",et:"естонски",eu:"баскиски",ewo:"евондо",ext:"екстремадурски",fa:"персиски",fan:"фанг",fat:"фанти",ff:"фула",fi:"фински",fil:"филипински",fit:"турнедаленски фински",fj:"фиџиски",fo:"фарски",fon:"фон",fr:"француски","fr-CA":"канадски француски","fr-CH":"швајцарски француски",frc:"каџунски француски",frm:"среднофранцуски",fro:"старофранцуски",frp:"франкопровансалски",frr:"севернофризиски",frs:"источнофризиски",fur:"фурлански",fy:"западнофризиски",ga:"ирски",gaa:"га",gag:"гагауски",gan:"ган",gay:"гајо",gba:"гбаја",gbz:"зороастриски дари",gd:"шкотски гелски",gez:"гиз",gil:"гилбертански",gl:"галициски",glk:"гилански",gmh:"средногорногермански",gn:"гварански",goh:"старогорногермански",gom:"гоански конкани",gon:"гонди",gor:"горонтало",got:"готски",grb:"гребо",grc:"старогрчки",gsw:"швајцарски германски",gu:"гуџарати",guc:"гвахиро",gur:"фарефаре",guz:"гуси",gv:"манкс",gwi:"гвичински",ha:"хауса",hai:"хајда",hak:"хака",haw:"хавајски",he:"хебрејски",hi:"хинди",hif:"фиџиски хинди",hil:"хилигајнонски",hit:"хетитски",hmn:"хмонг",ho:"хири моту",hr:"хрватски",hsb:"горнолужички",hsn:"сјанг",ht:"хаитски",hu:"унгарски",hup:"хупа",hy:"ерменски",hz:"хереро",ia:"интерлингва",iba:"ибан",ibb:"ибибио",id:"индонезиски",ie:"окцидентал",ig:"игбо",ii:"сичуан ји",ik:"инупијачки",ilo:"илокански",inh:"ингушки",io:"идо",is:"исландски",it:"италијански",iu:"инуктитут",izh:"ижорски",ja:"јапонски",jam:"јамајски креолски",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"еврејскоперсиски",jrb:"еврејскоарапски",jut:"јитски",jv:"јавански",ka:"грузиски",kaa:"каракалпачки",kab:"кабилски",kac:"качински",kaj:"каџе",kam:"камба",kaw:"кави",kbd:"кабардински",kbl:"канембу",kcg:"тјап",kde:"маконде",kea:"кабувердиану",ken:"кењанг",kfo:"коро",kg:"конго",kgp:"каинганшки",kha:"каси",kho:"хотански",khq:"којра чиини",khw:"коварски",ki:"кикују",kiu:"зазаки",kj:"квањама",kk:"казашки",kkj:"како",kl:"калалисут",kln:"каленџин",km:"кмерски",kmb:"кимбунду",kn:"каннада",ko:"корејски",koi:"коми-пермјачки",kok:"конкани",kos:"козрејски",kpe:"кпеле",kr:"канури",krc:"карачаевско-балкарски",kri:"крио",krj:"кинарајски",krl:"карелски",kru:"курух",ks:"кашмирски",ksb:"шамбала",ksf:"бафија",ksh:"колоњски",ku:"курдски",kum:"кумички",kut:"кутенајски",kv:"коми",kw:"корнски",ky:"киргиски",la:"латински",lad:"ладино",lag:"ланги",lah:"ланда",lam:"ламба",lb:"луксембуршки",lez:"лезгински",lfn:"лингва франка нова",lg:"ганда",li:"лимбуршки",lij:"лигурски",liv:"ливонски",lkt:"лакотски",lmo:"ломбардиски",ln:"лингала",lo:"лаошки",lol:"монго",lou:"луизијански креолски",loz:"лози",lrc:"севернолуриски",lt:"литвански",ltg:"латгалски",lu:"луба-катанга",lua:"луба-лулуа",lui:"лујсењски",lun:"лунда",luo:"луо",lus:"мизо",luy:"луја",lv:"латвиски",lzh:"книжевен кинески",lzz:"ласки",mad:"мадурски",maf:"мафа",mag:"магахи",mai:"маитили",mak:"макасарски",man:"мандинго",mas:"масајски",mde:"маба",mdf:"мокшански",mdr:"мандарски",men:"менде",mer:"меру",mfe:"морисјен",mg:"малгашки",mga:"средноирски",mgh:"макува-мито",mgo:"мета",mh:"маршалски",mi:"маорски",mic:"микмак",min:"минангкабау",mk:"македонски",ml:"малајамски",mn:"монголски",mnc:"манџурски",mni:"манипурски",moh:"мохавски",mos:"моси",mr:"марати",mrj:"западномариски",ms:"малајски",mt:"малтешки",mua:"мунданг",mus:"крик",mwl:"мирандски",mwr:"марвари",my:"бурмански",mye:"мјене",myv:"ерзјански",mzn:"мазендерански",na:"науруански",nan:"јужномински",nap:"неаполски",naq:"нама",nb:"норвешки букмол",nd:"северен ндебеле",nds:"долногермански","nds-NL":"долносаксонски",ne:"непалски","new":"неварски",ng:"ндонга",nia:"нијас",niu:"ниујески",njo:"ао нага",nl:"холандски","nl-BE":"фламански",nmg:"квазио",nn:"норвешки нинорск",nnh:"нгиембун",no:"норвешки",nog:"ногајски",non:"старонордиски",nov:"новијал",nqo:"нко",nr:"јужен ндебеле",nso:"северносотски",nus:"нуер",nv:"навахо",nwc:"класичен неварски",ny:"њанџа",nym:"њамвези",nyn:"њанколе",nyo:"њоро",nzi:"нзима",oc:"окситански",oj:"оџибва",om:"оромо",or:"одија",os:"осетски",osa:"осашки",ota:"отомански турски",pa:"пенџапски",pag:"пангасинански",pal:"средноперсиски",pam:"пампанга",pap:"папијаменто",pau:"палауански",pcd:"пикардски",pcm:"нигериски пиџин",pdc:"пенсилваниски германски",pdt:"менонитски долногермански",peo:"староперсиски",pfl:"фалечкогермански",phn:"феникиски",pi:"пали",pl:"полски",pms:"пиемонтски",pnt:"понтски",pon:"понпејски",prg:"пруски",pro:"старопровансалски",ps:"паштунски",pt:"португалски","pt-BR":"бразилски португалски","pt-PT":"португалски (во Европа)",qu:"кечуански",quc:"киче",qug:"кичвански",raj:"раџастански",rap:"рапанујски",rar:"раротонгански",rgn:"ромањолски",rif:"рифски",rm:"реторомански",rn:"рунди",ro:"романски","ro-MD":"молдавски",rof:"ромбо",rom:"ромски",root:"корен",rtm:"ротумански",ru:"руски",rue:"русински",rug:"ровијански",rup:"влашки",rw:"руандски",rwk:"руа",sa:"санскрит",sad:"сандаве",sah:"јакутски",sam:"самарјански арамејски",saq:"самбуру",sas:"сасачки",sat:"сантали",saz:"саураштра",sba:"нгембеј",sbp:"сангу",sc:"сардински",scn:"сицилијански",sco:"шкотски германски",sd:"синди",sdc:"сасарски сардински",sdh:"јужнокурдски",se:"северен сами",see:"сенека",seh:"сена",sei:"сери",sel:"селкупски",ses:"којраборо сени",sg:"санго",sga:"староирски",sgs:"самогитски",sh:"српскохрватски",shi:"тачелхит",shn:"шан",shu:"чадски арапски",si:"синхалски",sid:"сидамо",sk:"словачки",sl:"словенечки",sli:"долношлезиски",sly:"селајарски",sm:"самоански",sma:"јужен сами",smj:"луле сами",smn:"инари сами",sms:"сколт сами",sn:"шона",snk:"сонинке",so:"сомалиски",sog:"зогдијански",sq:"албански",sr:"српски",srn:"срански тонго",srr:"серер",ss:"свати",ssy:"сахо",st:"сесото",stq:"затерландски фризиски",su:"сундски",suk:"сукума",sus:"сусу",sux:"сумерски",sv:"шведски",sw:"свахили","sw-CD":"конгоански свахили",swb:"коморијански",syc:"класичен сириски",syr:"сириски",szl:"шлезиски",ta:"тамилски",tcy:"тулу",te:"телугу",tem:"тимне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таџикистански",th:"тајландски",ti:"тигриња",tig:"тигре",tiv:"тив",tk:"туркменски",tkl:"токелауански",tkr:"цахурски",tl:"тагалог",tlh:"клингонски",tli:"тлингит",tly:"талишки",tmh:"тамашек",tn:"цвана",to:"тонгајски",tog:"њаса тонга",tpi:"ток писин",tr:"турски",tru:"туројо",trv:"тароко",ts:"цонга",tsd:"цаконски",tsi:"цимшијански",tt:"татарски",ttt:"татски",tum:"тумбука",tvl:"тувалуански",tw:"тви",twq:"тазавак",ty:"тахитски",tyv:"тувански",tzm:"централноатлански тамазитски",udm:"удмуртски",ug:"ујгурски",uga:"угаритски",uk:"украински",umb:"умбунду",ur:"урду",uz:"узбечки",vai:"вај",ve:"венда",vec:"венетски",vep:"вепшки",vi:"виетнамски",vls:"западнофламански",vmf:"мајнскофранконски",vo:"волапик",vot:"вотски",vro:"виру",vun:"вунџо",wa:"валонски",wae:"валсер",wal:"воламо",war:"варајски",was:"вашо",wbp:"варлпири",wo:"волофски",wuu:"ву",xal:"калмички",xh:"коса",xmf:"мегрелски",xog:"сога",yao:"јао",yap:"јапски",yav:"јенгбен",ybb:"јемба",yi:"јидиш",yo:"јорупски",yrl:"њенгату",yue:"кантонски",za:"џуаншки",zap:"запотечки",zbl:"блиссимболи",zea:"зеландски",zen:"зенага",zgh:"стандарден марокански тамазитски",zh:"кинески","zh-Hans":"поедноставен мандарински","zh-Hant":"традиционален мандарински",zu:"зулу",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"кирилско писмо",Latn:"латинично писмо",Arab:"арапско писмо",Guru:"гурмуки",Tfng:"тифинаг",Vaii:"вај",Hans:"поедноставено",Hant:"традиционално"}},ml:{rtl:false,languageNames:{aa:"അഫാർ",ab:"അബ്‌ഖാസിയൻ",ace:"അചിനീസ്",ach:"അകോലി",ada:"അഡാങ്‌മി",ady:"അഡൈഗേ",ae:"അവസ്റ്റാൻ",af:"ആഫ്രിക്കാൻസ്",afh:"ആഫ്രിഹിലി",agq:"ആഘേം",ain:"ഐനു",ak:"അകാൻ‌",akk:"അക്കാഡിയൻ",ale:"അലൂട്ട്",alt:"തെക്കൻ അൾത്തായി",am:"അംഹാരിക്",an:"അരഗോണീസ്",ang:"പഴയ ഇംഗ്ലീഷ്",anp:"ആൻഗിക",ar:"അറബിക്","ar-001":"ആധുനിക സ്റ്റാൻഡേർഡ് അറബിക്",arc:"അരമായ",arn:"മാപുചി",arp:"അറാപഹോ",arw:"അറാവക്",as:"ആസ്സാമീസ്",asa:"ആസു",ast:"ഓസ്‌ട്രിയൻ",av:"അവാരിക്",awa:"അവാധി",ay:"അയ്മാറ",az:"അസർബൈജാനി",ba:"ബഷ്ഖിർ",bal:"ബലൂചി",ban:"ബാലിനീസ്",bas:"ബസ",bax:"ബാമുൻ",bbj:"ഘോമാല",be:"ബെലാറുഷ്യൻ",bej:"ബേജ",bem:"ബേംബ",bez:"ബെനാ",bfd:"ബാഫട്ട്",bg:"ബൾഗേറിയൻ",bgn:"പശ്ചിമ ബലൂചി",bho:"ഭോജ്‌പുരി",bi:"ബിസ്‌ലാമ",bik:"ബികോൽ",bin:"ബിനി",bkm:"കോം",bla:"സിക്സിക",bm:"ബംബാറ",bn:"ബംഗാളി",bo:"ടിബറ്റൻ",br:"ബ്രെട്ടൺ",bra:"ബ്രജ്",brx:"ബോഡോ",bs:"ബോസ്നിയൻ",bss:"അക്കൂസ്",bua:"ബുറിയത്ത്",bug:"ബുഗിനീസ്",bum:"ബുളു",byn:"ബ്ലിൻ",byv:"മെഡുംബ",ca:"കറ്റാലാൻ",cad:"കാഡോ",car:"കാരിബ്",cay:"കയൂഗ",cch:"അറ്റ്സാം",ccp:"ചക്‌മ",ce:"ചെചൻ",ceb:"സെബുവാനോ",cgg:"ചിഗ",ch:"ചമോറോ",chb:"ചിബ്ച",chg:"ഷാഗതായ്",chk:"ചൂകീസ്",chm:"മാരി",chn:"ചിനൂഗ് ജാർഗൺ",cho:"ചോക്റ്റാവ്",chp:"ചിപേവ്യൻ",chr:"ഷെരോക്കി",chy:"ഷായാൻ",ckb:"സെൻട്രൽ കുർദിഷ്",co:"കോർസിക്കൻ",cop:"കോപ്റ്റിക്",cr:"ക്രീ",crh:"ക്രിമിയൻ ടർക്കിഷ്",crs:"സെഷൽവ ക്രിയോൾ ഫ്രഞ്ച്",cs:"ചെക്ക്",csb:"കാഷുബിയാൻ",cu:"ചർച്ച് സ്ലാവിക്",cv:"ചുവാഷ്",cy:"വെൽഷ്",da:"ഡാനിഷ്",dak:"ഡകോട്ട",dar:"ഡർഗ്വാ",dav:"തൈത",de:"ജർമ്മൻ","de-AT":"ഓസ്‌ട്രിയൻ ജർമൻ","de-CH":"സ്വിസ് ഹൈ ജർമൻ",del:"ദെലവേർ",den:"സ്ലേവ്",dgr:"ഡോഗ്രിബ്",din:"ദിൻക",dje:"സാർമ്മ",doi:"ഡോഗ്രി",dsb:"ലോവർ സോർബിയൻ",dua:"ദ്വാല",dum:"മദ്ധ്യ ഡച്ച്",dv:"ദിവെഹി",dyo:"യോല-ഫോന്യി",dyu:"ദ്വൈല",dz:"ദ്‌സോങ്ക",dzg:"ഡാസാഗ",ebu:"എംബു",ee:"യൂവ്",efi:"എഫിക്",egy:"പ്രാചീന ഈജിപ്ഷ്യൻ",eka:"എകാജുക്",el:"ഗ്രീക്ക്",elx:"എലാമൈറ്റ്",en:"ഇംഗ്ലീഷ്","en-AU":"ഓസ്‌ട്രേലിയൻ ഇംഗ്ലീഷ്","en-CA":"കനേഡിയൻ ഇംഗ്ലീഷ്","en-GB":"ബ്രിട്ടീഷ് ഇംഗ്ലീഷ്","en-US":"അമേരിക്കൻ ഇംഗ്ലീഷ്",enm:"മദ്ധ്യ ഇംഗ്ലീഷ്",eo:"എസ്‌പരാന്റോ",es:"സ്‌പാനിഷ്","es-419":"ലാറ്റിൻ അമേരിക്കൻ സ്‌പാനിഷ്","es-ES":"യൂറോപ്യൻ സ്‌പാനിഷ്","es-MX":"മെക്സിക്കൻ സ്പാനിഷ്",et:"എസ്റ്റോണിയൻ",eu:"ബാസ്‌ക്",ewo:"എവോൻഡോ",fa:"പേർഷ്യൻ",fan:"ഫങ്",fat:"ഫാന്റി",ff:"ഫുല",fi:"ഫിന്നിഷ്",fil:"ഫിലിപ്പിനോ",fj:"ഫിജിയൻ",fo:"ഫാറോസ്",fon:"ഫോൻ",fr:"ഫ്രഞ്ച്","fr-CA":"കനേഡിയൻ ഫ്രഞ്ച്","fr-CH":"സ്വിസ് ഫ്രഞ്ച്",frc:"കേജൺ ഫ്രഞ്ച്",frm:"മദ്ധ്യ ഫ്രഞ്ച്",fro:"പഴയ ഫ്രഞ്ച്",frr:"നോർത്തേൻ ഫ്രിഷ്യൻ",frs:"ഈസ്റ്റേൺ ഫ്രിഷ്യൻ",fur:"ഫ്രിയുലിയാൻ",fy:"പശ്ചിമ ഫ്രിഷിയൻ",ga:"ഐറിഷ്",gaa:"ഗാ",gag:"ഗാഗൂസ്",gan:"ഗാൻ ചൈനീസ്",gay:"ഗയൊ",gba:"ഗബ്യ",gd:"സ്കോട്ടിഷ് ഗൈലിക്",gez:"ഗീസ്",gil:"ഗിൽബർട്ടീസ്",gl:"ഗലീഷ്യൻ",gmh:"മദ്ധ്യ ഉച്ച ജർമൻ",gn:"ഗ്വരനീ",goh:"ഓൾഡ് ഹൈ ജർമൻ",gon:"ഗോണ്ഡി",gor:"ഗൊറോന്റാലോ",got:"ഗോഥിക്ക്",grb:"ഗ്രബൊ",grc:"പുരാതന ഗ്രീക്ക്",gsw:"സ്വിസ് ജർമ്മൻ",gu:"ഗുജറാത്തി",guz:"ഗുസീ",gv:"മാൻസ്",gwi:"ഗ്വിച്ചിൻ",ha:"ഹൗസ",hai:"ഹൈഡ",hak:"ഹാക്ക ചൈനീസ്",haw:"ഹവായിയൻ",he:"ഹീബ്രു",hi:"ഹിന്ദി",hil:"ഹിലിഗയ്നോൺ",hit:"ഹിറ്റൈറ്റ്",hmn:"മോങ്",ho:"ഹിരി മോതു",hr:"ക്രൊയേഷ്യൻ",hsb:"അപ്പർ സോർബിയൻ",hsn:"ഷ്യാങ് ചൈനീസ്",ht:"ഹെയ്‌തിയൻ ക്രിയോൾ",hu:"ഹംഗേറിയൻ",hup:"ഹൂപ",hy:"അർമേനിയൻ",hz:"ഹെരേരൊ",ia:"ഇന്റർലിംഗ്വ",iba:"ഇബാൻ",ibb:"ഇബീബിയോ",id:"ഇന്തോനേഷ്യൻ",ie:"ഇന്റർലിംഗ്വേ",ig:"ഇഗ്ബോ",ii:"ഷുവാൻയി",ik:"ഇനുപിയാക്",ilo:"ഇലോകോ",inh:"ഇംഗ്വിഷ്",io:"ഇഡോ",is:"ഐസ്‌ലാൻഡിക്",it:"ഇറ്റാലിയൻ",iu:"ഇനുക്റ്റിറ്റട്ട്",ja:"ജാപ്പനീസ്",jbo:"ലോജ്ബാൻ",jgo:"ഗോമ്പ",jmc:"മചേം",jpr:"ജൂഡിയോ-പേർഷ്യൻ",jrb:"ജൂഡിയോ-അറബിക്",jv:"ജാവാനീസ്",ka:"ജോർജിയൻ",kaa:"കര-കാൽപ്പക്",kab:"കബൈൽ",kac:"കാചിൻ",kaj:"ജ്ജു",kam:"കംബ",kaw:"കാവി",kbd:"കബർഡിയാൻ",kbl:"കനെംബു",kcg:"ട്യാപ്",kde:"മക്കോണ്ടെ",kea:"കബുവെർദിയാനു",kfo:"കോറോ",kg:"കോംഗോ",kha:"ഘാസി",kho:"ഘോറ്റാനേസേ",khq:"കൊയ്റ ചീനി",ki:"കികൂയു",kj:"ക്വാന്യമ",kk:"കസാഖ്",kkj:"കാകോ",kl:"കലാല്ലിസട്ട്",kln:"കലെഞ്ഞിൻ",km:"ഖമെർ",kmb:"കിംബുണ്ടു",kn:"കന്നഡ",ko:"കൊറിയൻ",koi:"കോമി-പെർമ്യാക്ക്",kok:"കൊങ്കണി",kos:"കൊസറേയൻ",kpe:"കപെല്ലേ",kr:"കനൂറി",krc:"കരചൈ-ബാൽകർ",krl:"കരീലിയൻ",kru:"കുരുഖ്",ks:"കാശ്‌മീരി",ksb:"ഷംഭാള",ksf:"ബാഫിയ",ksh:"കൊളോണിയൻ",ku:"കുർദ്ദിഷ്",kum:"കുമൈക്",kut:"കുതേനൈ",kv:"കോമി",kw:"കോർണിഷ്",ky:"കിർഗിസ്",la:"ലാറ്റിൻ",lad:"ലാഡിനോ",lag:"ലാംഗി",lah:"ലഹ്‌ൻഡ",lam:"ലംബ",lb:"ലക്‌സംബർഗിഷ്",lez:"ലഹ്ഗിയാൻ",lg:"ഗാണ്ട",li:"ലിംബർഗിഷ്",lkt:"ലഗോത്ത",ln:"ലിംഗാല",lo:"ലാവോ",lol:"മോങ്കോ",lou:"ലൂസിയാന ക്രിയോൾ",loz:"ലൊസി",lrc:"വടക്കൻ ലൂറി",lt:"ലിത്വാനിയൻ",lu:"ലുബ-കറ്റംഗ",lua:"ലൂബ-ലുലുവ",lui:"ലൂയിസെനോ",lun:"ലുൻഡ",luo:"ലുവോ",lus:"മിസോ",luy:"ലുയിയ",lv:"ലാറ്റ്വിയൻ",mad:"മദുരേസേ",maf:"മാഫ",mag:"മഗാഹി",mai:"മൈഥിലി",mak:"മകാസർ",man:"മണ്ഡിൻഗോ",mas:"മസായ്",mde:"മാബ",mdf:"മോക്ഷ",mdr:"മണ്ഡാർ",men:"മെൻഡെ",mer:"മേരു",mfe:"മൊറിസിൻ",mg:"മലഗാസി",mga:"മദ്ധ്യ ഐറിഷ്",mgh:"മാഖുവാ-മീത്തോ",mgo:"മേത്താ",mh:"മാർഷല്ലീസ്",mi:"മവോറി",mic:"മിക്മാക്",min:"മിനാങ്കബൗ",mk:"മാസിഡോണിയൻ",ml:"മലയാളം",mn:"മംഗോളിയൻ",mnc:"മാൻ‌ചു",mni:"മണിപ്പൂരി",moh:"മോഹാക്",mos:"മൊസ്സി",mr:"മറാത്തി",ms:"മലെയ്",mt:"മാൾട്ടീസ്",mua:"മുന്ദാംഗ്",mus:"ക്രീക്ക്",mwl:"മിരാൻറസേ",mwr:"മർവാരി",my:"ബർമീസ്",mye:"മയീൻ",myv:"ഏഴ്സ്യ",mzn:"മസന്ററാനി",na:"നൗറു",nan:"മിൻ നാൻ ചൈനീസ്",nap:"നെപ്പോളിറ്റാൻ",naq:"നാമ",nb:"നോർവീജിയൻ ബുക്‌മൽ",nd:"നോർത്ത് ഡെബിൾ",nds:"ലോ ജർമൻ","nds-NL":"ലോ സാക്സൺ",ne:"നേപ്പാളി","new":"നേവാരി",ng:"ഡോങ്ക",nia:"നിയാസ്",niu:"ന്യുവാൻ",nl:"ഡച്ച്","nl-BE":"ഫ്ലമിഷ്",nmg:"ക്വാസിയോ",nn:"നോർവീജിയൻ നൈനോർക്‌സ്",nnh:"ഗീംബൂൺ",no:"നോർവീജിയൻ",nog:"നോഗൈ",non:"പഴയ നോഴ്‌സ്",nqo:"ഇൻകോ",nr:"ദക്ഷിണ നെഡിബിൾ",nso:"നോർത്തേൻ സോതോ",nus:"നുവേർ",nv:"നവാജോ",nwc:"ക്ലാസിക്കൽ നേവാരി",ny:"ന്യൻജ",nym:"ന്യാംവേസി",nyn:"ന്യാൻകോൾ",nyo:"ന്യോറോ",nzi:"സിമ",oc:"ഓക്‌സിറ്റൻ",oj:"ഓജിബ്വാ",om:"ഒറോമോ",or:"ഒഡിയ",os:"ഒസ്സെറ്റിക്",osa:"ഒസേജ്",ota:"ഓട്ടോമൻ തുർക്കിഷ്",pa:"പഞ്ചാബി",pag:"പങ്കാസിനൻ",pal:"പാഹ്ലവി",pam:"പാംപൻഗ",pap:"പാപിയാമെന്റൊ",pau:"പലാവുൻ",pcm:"നൈജീരിയൻ പിഡ്‌ഗിൻ",peo:"പഴയ പേർഷ്യൻ",phn:"ഫീനിഷ്യൻ",pi:"പാലി",pl:"പോളിഷ്",pon:"പൊൻപിയൻ",prg:"പ്രഷ്യൻ",pro:"പഴയ പ്രൊവൻഷ്ൽ",ps:"പഷ്‌തോ",pt:"പോർച്ചുഗീസ്","pt-BR":"ബ്രസീലിയൻ പോർച്ചുഗീസ്","pt-PT":"യൂറോപ്യൻ പോർച്ചുഗീസ്",qu:"ക്വെച്ചുവ",quc:"ക്വിച്ചെ",raj:"രാജസ്ഥാനി",rap:"രാപനൂയി",rar:"രാരോടോങ്കൻ",rm:"റൊമാഞ്ച്",rn:"റുണ്ടി",ro:"റൊമാനിയൻ","ro-MD":"മോൾഡാവിയൻ",rof:"റോംബോ",rom:"റൊമാനി",root:"മൂലഭാഷ",ru:"റഷ്യൻ",rup:"ആരോമാനിയൻ",rw:"കിന്യാർവാണ്ട",rwk:"റുവാ",sa:"സംസ്‌കൃതം",sad:"സാൻഡവേ",sah:"സാഖ",sam:"സമരിയാക്കാരുടെ അരമായ",saq:"സംബുരു",sas:"സസാക്",sat:"സന്താലി",sba:"ഗംബായ്",sbp:"സംഗു",sc:"സർഡിനിയാൻ",scn:"സിസിലിയൻ",sco:"സ്കോട്സ്",sd:"സിന്ധി",sdh:"തെക്കൻ കുർദ്ദിഷ്",se:"വടക്കൻ സമി",see:"സെനേക",seh:"സേന",sel:"സെൽകപ്",ses:"കൊയ്റാബൊറോ സെന്നി",sg:"സാംഗോ",sga:"പഴയ ഐറിഷ്",sh:"സെർബോ-ക്രൊയേഷ്യൻ",shi:"താച്ചലിറ്റ്",shn:"ഷാൻ",shu:"ചാഡിയൻ അറബി",si:"സിംഹള",sid:"സിഡാമോ",sk:"സ്ലോവാക്",sl:"സ്ലോവേനിയൻ",sm:"സമോവൻ",sma:"തെക്കൻ സമി",smj:"ലൂലീ സമി",smn:"ഇനാരി സമി",sms:"സ്കോൾട്ട് സമി",sn:"ഷോണ",snk:"സോണിൻകെ",so:"സോമാലി",sog:"സോജിഡിയൻ",sq:"അൽബേനിയൻ",sr:"സെർബിയൻ",srn:"ശ്രാനൻ ഡോങ്കോ",srr:"സെറർ",ss:"സ്വാറ്റി",ssy:"സാഹോ",st:"തെക്കൻ സോതോ",su:"സുണ്ടാനീസ്",suk:"സുകുമ",sus:"സുസു",sux:"സുമേരിയൻ",sv:"സ്വീഡിഷ്",sw:"സ്വാഹിലി","sw-CD":"കോംഗോ സ്വാഹിലി",swb:"കൊമോറിയൻ",syc:"പുരാതന സുറിയാനിഭാഷ",syr:"സുറിയാനി",ta:"തമിഴ്",te:"തെലുങ്ക്",tem:"ടിംനേ",teo:"ടെസോ",ter:"ടെറേനോ",tet:"ടെറ്റും",tg:"താജിക്",th:"തായ്",ti:"ടൈഗ്രിന്യ",tig:"ടൈഗ്രി",tiv:"ടിവ്",tk:"തുർക്‌മെൻ",tkl:"ടൊക്കേലൗ",tl:"തഗാലോഗ്",tlh:"ക്ലിംഗോൺ",tli:"ലിംഗ്വിറ്റ്",tmh:"ടമഷേക്",tn:"സ്വാന",to:"ടോംഗൻ",tog:"ന്യാസാ ഡോങ്ക",tpi:"ടോക് പിസിൻ",tr:"ടർക്കിഷ്",trv:"തരോക്കോ",ts:"സോംഗ",tsi:"സിംഷ്യൻ",tt:"ടാട്ടർ",tum:"ടുംബുക",tvl:"ടുവാലു",tw:"ട്വി",twq:"ടസവാക്ക്",ty:"താഹിതിയൻ",tyv:"തുവിനിയൻ",tzm:"മധ്യ അറ്റ്‌ലസ് ടമാസൈറ്റ്",udm:"ഉഡ്മുർട്ട്",ug:"ഉയ്ഘുർ",uga:"ഉഗറിട്ടിക്",uk:"ഉക്രേനിയൻ",umb:"ഉംബുന്ദു",ur:"ഉറുദു",uz:"ഉസ്‌ബെക്ക്",vai:"വൈ",ve:"വെന്ദ",vi:"വിയറ്റ്നാമീസ്",vo:"വോളാപുക്",vot:"വോട്ടിക്",vun:"വുൻജോ",wa:"വല്ലൂൺ",wae:"വാൾസർ",wal:"വൊലൈറ്റ",war:"വാരേയ്",was:"വാഷൊ",wbp:"വൂൾപിരി",wo:"വൊളോഫ്",wuu:"വു ചൈനീസ്",xal:"കൽമൈക്",xh:"ഖോസ",xog:"സോഗോ",yao:"യാവോ",yap:"യെപ്പീസ്",yav:"യാംഗ്ബെൻ",ybb:"യംബ",yi:"യിദ്ദിഷ്",yo:"യൊറൂബാ",yue:"കാന്റണീസ്",za:"സ്വാംഗ്",zap:"സാപ്പോടെക്",zbl:"ബ്ലിസ്സിംബൽസ്",zen:"സെനഗ",zgh:"സ്റ്റാൻഡേർഡ് മൊറോക്കൻ റ്റാമസിയറ്റ്",zh:"ചൈനീസ്","zh-Hans":"ചൈനീസ് (ലളിതവൽക്കരിച്ചത്)","zh-Hant":"ചൈനീസ് (പരമ്പരാഗതം)",zu:"സുലു",zun:"സുനി",zza:"സാസാ"},scriptNames:{Cyrl:"സിറിലിക്",Latn:"ലാറ്റിൻ",Arab:"അറബിക്",Guru:"ഗുരുമുഖി",Tfng:"തിഫിനാഗ്",Vaii:"വൈ",Hans:"ലളിതവൽക്കരിച്ചത്",Hant:"പരമ്പരാഗതം"}},mn:{rtl:false,languageNames:{aa:"афар",ab:"абхаз",ace:"ачин",ada:"адангмэ",ady:"адигэ",af:"африкаанс",agq:"агем",ain:"айну",ak:"акан",ale:"алют",alt:"өмнөд алтай",am:"амхар",an:"арагон",anp:"ангик",ar:"араб","ar-001":"стандарт араб",arn:"мапүчи",arp:"арапаго",as:"ассам",asa:"асу",ast:"астури",av:"авар",awa:"авадхи",ay:"аймара",az:"азербайжан",ba:"башкир",ban:"бали",bas:"басаа",be:"беларусь",bem:"бемба",bez:"бена",bg:"болгар",bho:"божпури",bi:"бислам",bin:"бини",bla:"сиксика",bm:"бамбара",bn:"бенгал",bo:"төвд",br:"бретон",brx:"бодо",bs:"босни",bug:"буги",byn:"блин",ca:"каталан",ccp:"чакма",ce:"чечень",ceb:"себуано",cgg:"чига",ch:"чаморро",chk:"чуук",chm:"мари хэл",cho:"чоктау",chr:"чероки",chy:"чэенн",ckb:"төв курд",co:"корсик",crs:"сеселва креол франц",cs:"чех",cu:"сүмийн славян",cv:"чуваш",cy:"уэльс",da:"дани",dak:"дакота",dar:"даргва",dav:"тайта",de:"герман","de-AT":"австри-герман","de-CH":"швейцарь-герман",dgr:"догриб",dje:"зарма",dsb:"доод сорби",dua:"дуала",dv:"дивехи",dyo:"жола-фони",dz:"зонха",dzg:"дазага",ebu:"эмбу",ee:"эвэ",efi:"эфик",eka:"экажук",el:"грек",en:"англи","en-AU":"австрали-англи","en-CA":"канад-англи","en-GB":"британи-англи","en-US":"америк-англи",eo:"эсперанто",es:"испани","es-419":"испани хэл (Латин Америк)","es-ES":"испани хэл (Европ)","es-MX":"испани хэл (Мексик)",et:"эстони",eu:"баск",ewo:"эвондо",fa:"перс",ff:"фула",fi:"фин",fil:"филипино",fj:"фижи",fo:"фарер",fon:"фон",fr:"франц","fr-CA":"канад-франц","fr-CH":"швейцари-франц",fur:"фриулан",fy:"баруун фриз",ga:"ирланд",gaa:"га",gag:"гагуз",gd:"шотландын гел",gez:"гийз",gil:"гилберт",gl:"галего",gn:"гуарани",gor:"горонтало",gsw:"швейцари-герман",gu:"гужарати",guz:"гузы",gv:"манкс",gwi:"гвичин",ha:"хауса",haw:"хавай",he:"еврей",hi:"хинди",hil:"хилигайнон",hmn:"хмонг",hr:"хорват",hsb:"дээд сорби",ht:"Гаитийн креол",hu:"мажар",hup:"хупа",hy:"армен",hz:"хереро",ia:"интерлингво",iba:"ибан",ibb:"ибибио",id:"индонези",ie:"нэгдмэл хэл",ig:"игбо",ii:"сычуань и",ilo:"илоко",inh:"ингуш",io:"идо",is:"исланд",it:"итали",iu:"инуктитут",ja:"япон",jbo:"ложбан",jgo:"нгомба",jmc:"мачамэ",jv:"ява",ka:"гүрж",kab:"кабиле",kac:"качин",kaj:"жжу",kam:"камба",kbd:"кабардин",kcg:"тяп",kde:"маконде",kea:"кабүвердиану",kfo:"коро",kha:"каси",khq:"койра чини",ki:"кикуюү",kj:"куаньяма",kk:"казах",kkj:"како",kl:"калалисут",kln:"каленжин",km:"кхмер",kmb:"кимбунду",kn:"каннада",ko:"солонгос",koi:"коми-пермяк",kok:"конкани",kpe:"кпелле",kr:"канури",krc:"карачай-балкар",krl:"карель",kru:"курук",ks:"кашмир",ksb:"шамбал",ksf:"бафиа",ksh:"кёльш",ku:"курд",kum:"кумук",kv:"коми",kw:"корн",ky:"киргиз",la:"латин",lad:"ладин",lag:"ланги",lb:"люксембург",lez:"лезги",lg:"ганда",li:"лимбург",lkt:"лакота",ln:"лингала",lo:"лаос",loz:"лози",lrc:"хойд лури",lt:"литва",lu:"луба-катанга",lua:"луба-лулуа",lun:"лунда",luo:"луо",lus:"мизо",luy:"луяа",lv:"латви",mad:"мадури хэл",mag:"магахи",mai:"май",mak:"макасар",mas:"масай",mdf:"мокша",men:"менде",mer:"меру",mfe:"морисен",mg:"малагаси",mgh:"макува-мито",mgo:"мета",mh:"маршалл",mi:"маори",mic:"микмак",min:"минангкабау",mk:"македон",ml:"малаялам",mn:"монгол",mni:"манипури",moh:"мохаук",mos:"мосси",mr:"марати",ms:"малай",mt:"малта",mua:"мунданг",mus:"крик",mwl:"меранди",my:"бирм",myv:"эрзя",mzn:"мазандерани",na:"науру",nap:"неаполитан",naq:"нама",nb:"норвегийн букмол",nd:"хойд ндебеле",nds:"доод герман","nds-NL":"бага саксон",ne:"балба","new":"невари",ng:"ндонга",nia:"ниас хэл",niu:"ниуэ",nl:"нидерланд","nl-BE":"фламанд",nmg:"квазио",nn:"норвегийн нинорск",nnh:"нгиембүүн",no:"норвеги",nog:"ногаи",nqo:"нко",nr:"өмнөд ндебеле",nso:"хойд сото",nus:"нуер",nv:"навахо",ny:"нянжа",nyn:"нянколе",oc:"окситан",om:"оромо",or:"ория",os:"оссетин",pa:"панжаби",pag:"пангасин",pam:"пампанга",pap:"папьяменто",pau:"палау",pcm:"нигерийн пиджин",pl:"польш",prg:"прусс",ps:"пушту",pt:"португал","pt-BR":"португал хэл (Бразил)","pt-PT":"португал хэл (Европ)",qu:"кечуа",quc:"киче",rap:"рапануи",rar:"раротонг",rm:"романш",rn:"рунди",ro:"румын","ro-MD":"молдав",rof:"ромбо",root:"рут",ru:"орос",rup:"ароманы",rw:"киньяруанда",rwk:"рва",sa:"санскрит",sad:"сандавэ",sah:"саха",saq:"самбүрү",sat:"сантали",sba:"нгамбай",sbp:"сангү",sc:"сардин",scn:"сицил",sco:"шотланд",sd:"синдхи",se:"хойд сами",seh:"сена",ses:"кёраборо сени",sg:"санго",sh:"хорватын серб",shi:"тачелхит",shn:"шань",si:"синхала",sk:"словак",sl:"словени",sm:"самоа",sma:"өмнөд сами",smj:"люле сами",smn:"инари сами",sms:"сколт сами",sn:"шона",snk:"сонинке",so:"сомали",sq:"албани",sr:"серб",srn:"сранан тонго",ss:"свати",ssy:"сахо",st:"сесото",su:"сундан",suk:"сукума",sv:"швед",sw:"свахили","sw-CD":"конгогийн свахили",swb:"комори",syr:"сири",ta:"тамил",te:"тэлүгү",tem:"тимн",teo:"тэсо",tet:"тетум",tg:"тажик",th:"тай",ti:"тигринья",tig:"тигр",tk:"туркмен",tlh:"клингон",tn:"цвана",to:"тонга",tpi:"ток писин",tr:"турк",trv:"тароко",ts:"цонга",tt:"татар",tum:"тумбула",tvl:"тувалу",tw:"тви",twq:"тасавак",ty:"таити",tyv:"тува",tzm:"Төв Атласын тамазигхт",udm:"удмурт",ug:"уйгур",uk:"украин",umb:"умбунду",ur:"урду",uz:"узбек",vai:"вай",ve:"венда",vi:"вьетнам",vo:"волапюк",vun:"вунжо",wa:"уоллун",wae:"уолсэр",wal:"уоллайтта",war:"варай",wo:"волоф",xal:"халимаг",xh:"хоса",xog:"сога",yav:"янгбен",ybb:"емба",yi:"иддиш",yo:"ёруба",yue:"кантон",zgh:"стандарт тамазайт (Морокко)",zh:"хятад","zh-Hans":"хялбаршуулсан мандарин хятад","zh-Hant":"уламжлалт мандарин хятад",zu:"зулу",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"кирилл",Latn:"латин",Arab:"араб",Guru:"гүрмүх",Hans:"хялбаршуулсан",Hant:"уламжлалт"}},ms:{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazia",ace:"Aceh",ach:"Akoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Arab Tunisia",af:"Afrikaans",agq:"Aghem",ain:"Ainu",ak:"Akan",ale:"Aleut",alt:"Altai Selatan",am:"Amharic",an:"Aragon",anp:"Angika",ar:"Arab","ar-001":"Arab Standard Moden",arn:"Mapuche",arp:"Arapaho",arq:"Arab Algeria",ars:"Arab Najdi",ary:"Arab Maghribi",arz:"Arab Mesir",as:"Assam",asa:"Asu",ast:"Asturia",av:"Avaric",awa:"Awadhi",ay:"Aymara",az:"Azerbaijan",ba:"Bashkir",bal:"Baluchi",ban:"Bali",bas:"Basaa",bax:"Bamun",bbj:"Ghomala",be:"Belarus",bej:"Beja",bem:"Bemba",bez:"Bena",bfd:"Bafut",bg:"Bulgaria",bgn:"Balochi Barat",bho:"Bhojpuri",bi:"Bislama",bin:"Bini",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Benggala",bo:"Tibet",bpy:"Bishnupriya",br:"Breton",brh:"Brahui",brx:"Bodo",bs:"Bosnia",bss:"Akoose",bua:"Buriat",bug:"Bugis",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalonia",cay:"Cayuga",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chk:"Chukese",chm:"Mari",cho:"Choctaw",chr:"Cherokee",chy:"Cheyenne",ckb:"Kurdi Sorani",co:"Corsica",cop:"Coptic",crh:"Turki Krimea",crs:"Perancis Seselwa Creole",cs:"Czech",cu:"Slavik Gereja",cv:"Chuvash",cy:"Wales",da:"Denmark",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"Jerman","de-AT":"Jerman Austria","de-CH":"Jerman Halus Switzerland",dgr:"Dogrib",dje:"Zarma",doi:"Dogri",dsb:"Sorbian Rendah",dua:"Duala",dv:"Divehi",dyo:"Jola-Fonyi",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",eka:"Ekajuk",el:"Greek",en:"Inggeris","en-AU":"Inggeris Australia","en-CA":"Inggeris Kanada","en-GB":"Inggeris British","en-US":"Inggeris AS",eo:"Esperanto",es:"Sepanyol","es-419":"Sepanyol Amerika Latin","es-ES":"Sepanyol Eropah","es-MX":"Sepanyol Mexico",et:"Estonia",eu:"Basque",ewo:"Ewondo",fa:"Parsi",ff:"Fulah",fi:"Finland",fil:"Filipina",fj:"Fiji",fo:"Faroe",fon:"Fon",fr:"Perancis","fr-CA":"Perancis Kanada","fr-CH":"Perancis Switzerland",frc:"Perancis Cajun",fur:"Friulian",fy:"Frisian Barat",ga:"Ireland",gaa:"Ga",gag:"Gagauz",gan:"Cina Gan",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scots Gaelic",gez:"Geez",gil:"Kiribati",gl:"Galicia",glk:"Gilaki",gn:"Guarani",gor:"Gorontalo",grc:"Greek Purba",gsw:"Jerman Switzerland",gu:"Gujerat",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hak:"Cina Hakka",haw:"Hawaii",he:"Ibrani",hi:"Hindi",hil:"Hiligaynon",hmn:"Hmong",hr:"Croatia",hsb:"Sorbian Atas",hsn:"Cina Xiang",ht:"Haiti",hu:"Hungary",hup:"Hupa",hy:"Armenia",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesia",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Iceland",it:"Itali",iu:"Inuktitut",ja:"Jepun",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jv:"Jawa",ka:"Georgia",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kbd:"Kabardia",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",kfo:"Koro",kg:"Kongo",kha:"Khasi",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuya",kj:"Kuanyama",kk:"Kazakhstan",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korea",koi:"Komi-Permyak",kok:"Konkani",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",krl:"Karelian",kru:"Kurukh",ks:"Kashmir",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kv:"Komi",kw:"Cornish",ky:"Kirghiz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lb:"Luxembourg",lez:"Lezghian",lg:"Ganda",li:"Limburgish",lkt:"Lakota",ln:"Lingala",lo:"Laos",lou:"Kreol Louisiana",loz:"Lozi",lrc:"Luri Utara",lt:"Lithuania",lu:"Luba-Katanga",lua:"Luba-Lulua",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvia",mad:"Madura",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",mas:"Masai",mde:"Maba",mdf:"Moksha",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshall",mi:"Maori",mic:"Micmac",min:"Minangkabau",mk:"Macedonia",ml:"Malayalam",mn:"Mongolia",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",ms:"Melayu",mt:"Malta",mua:"Mundang",mus:"Creek",mwl:"Mirandese",my:"Burma",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Cina Min Nan",nap:"Neapolitan",naq:"Nama",nb:"Bokmål Norway",nd:"Ndebele Utara",nds:"Jerman Rendah","nds-NL":"Saxon Rendah",ne:"Nepal","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niu",nl:"Belanda","nl-BE":"Flemish",nmg:"Kwasio",nn:"Nynorsk Norway",nnh:"Ngiemboon",no:"Norway",nog:"Nogai",nqo:"N’ko",nr:"Ndebele Selatan",nso:"Sotho Utara",nus:"Nuer",nv:"Navajo",ny:"Nyanja",nyn:"Nyankole",oc:"Occitania",om:"Oromo",or:"Odia",os:"Ossete",pa:"Punjabi",pag:"Pangasinan",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcm:"Nigerian Pidgin",pl:"Poland",prg:"Prusia",ps:"Pashto",pt:"Portugis","pt-BR":"Portugis Brazil","pt-PT":"Portugis Eropah",qu:"Quechua",quc:"Kʼicheʼ",rap:"Rapanui",rar:"Rarotonga",rm:"Romansh",rn:"Rundi",ro:"Romania","ro-MD":"Moldavia",rof:"Rombo",root:"Root",ru:"Rusia",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",saq:"Samburu",sat:"Santali",sba:"Ngambay",sbp:"Sangu",sc:"Sardinia",scn:"Sicili",sco:"Scots",sd:"Sindhi",sdh:"Kurdish Selatan",se:"Sami Utara",see:"Seneca",seh:"Sena",ses:"Koyraboro Senni",sg:"Sango",sh:"SerboCroatia",shi:"Tachelhit",shn:"Shan",shu:"Arab Chadian",si:"Sinhala",sk:"Slovak",sl:"Slovenia",sm:"Samoa",sma:"Sami Selatan",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sq:"Albania",sr:"Serbia",srn:"Sranan Tongo",ss:"Swati",ssy:"Saho",st:"Sotho Selatan",su:"Sunda",suk:"Sukuma",sv:"Sweden",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comoria",syr:"Syriac",ta:"Tamil",te:"Telugu",tem:"Timne",teo:"Teso",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tk:"Turkmen",tlh:"Klingon",tly:"Talysh",tn:"Tswana",to:"Tonga",tpi:"Tok Pisin",tr:"Turki",trv:"Taroko",ts:"Tsonga",tt:"Tatar",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahiti",tyv:"Tuvinian",tzm:"Tamazight Atlas Tengah",udm:"Udmurt",ug:"Uyghur",uk:"Ukraine",umb:"Umbundu",ur:"Urdu",uz:"Uzbekistan",vai:"Vai",ve:"Venda",vi:"Vietnam",vo:"Volapük",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",wbp:"Warlpiri",wo:"Wolof",wuu:"Cina Wu",xal:"Kalmyk",xh:"Xhosa",xog:"Soga",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yue:"Kantonis",zgh:"Tamazight Maghribi Standard",zh:"Cina","zh-Hans":"Cina Mandarin Ringkas","zh-Hant":"Cina Mandarin Tradisional",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyril",Latn:"Latin",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Ringkas",Hant:"Tradisional"}},my:{rtl:false,languageNames:{aa:"အာဖာ",ab:"အဘ်ခါဇီရာ",ace:"အာချေး",ada:"ဒန်မဲ",ady:"အဒိုင်ဂီ",af:"တောင်အာဖရိက",agq:"အာဂ်ဟိန်း",ain:"အိန်နု",ak:"အာကန်",ale:"အာလီယု",alt:"တောင် အာလ်တိုင်း",am:"အမ်ဟာရစ်ခ်",an:"အာရာဂွန်",ang:"အင်ဂလို ဆက္ကစွန်",anp:"အန်ဂီကာ",ar:"အာရဗီ","ar-001":"ခေတ်သစ် ရှေ့ဆောင် အာရဗီ",arn:"မာပုချီ",arp:"အာရာပါဟို",as:"အာသံ",asa:"အာစု",ast:"အက်စတူရီယန်း",av:"အာဗာရစ်ခ်",awa:"အာဝါဒီ",ay:"အိုင်မာရ",az:"အဇာဘိုင်ဂျန်",ba:"ဘက်ရှ်ကာ",ban:"ဘာလီ",bas:"ဘာဆာ",be:"ဘီလာရုစ်",bem:"ဘိန်ဘာ",bez:"ဘီနာ",bg:"ဘူလ်ဂေးရီးယား",bgn:"အနောက် ဘဲလိုချီ",bho:"ဘို့ဂျ်ပူရီ",bi:"ဘစ်စ်လာမာ",bin:"ဘီနီ",bla:"စစ္စီကာ",bm:"ဘန်ဘာရာ",bn:"ဘင်္ဂါလီ",bo:"တိဘက်",br:"ဘရီတွန်",brx:"ဗိုဒို",bs:"ဘော့စ်နီးယား",bug:"ဘူဂစ်စ်",byn:"ဘလင်",ca:"ကတ်တလန်",ccp:"ချတ်ခ်မာ",ce:"ချက်ချန်း",ceb:"စီဗူအာနို",cgg:"ချီဂါ",ch:"ချမိုရို",chk:"ချူကီးစ်",chm:"မာရီ",cho:"ချော့တို",chr:"ချာရိုကီ",chy:"ချေယန်း",ckb:"ဆိုရာနီ",co:"ခိုစီကန်",cr:"ခရီး",crs:"ခရီအိုလီ",cs:"ချက်",cu:"ချပ်ချ် စလာဗစ်",cv:"ချူဗက်ရှ်",cy:"ဝေလ",da:"ဒိန်းမတ်",dak:"ဒါကိုတာ",dar:"ဒါဂ်ဝါ",dav:"တိုင်တာ",de:"ဂျာမန်","de-AT":"ဩစတြီးယား ဂျာမန်","de-CH":"အလီမဲန်နစ် ဂျာမန်",del:"ဒယ်လာဝဲလ်",dgr:"ဒေါ့ဂ်ရစ်ဘ်",dje:"ဇာမာ",dsb:"အနိမ့် ဆိုဘီယန်း",dua:"ဒူအလာ",dum:"အလယ်ပိုင်း ဒတ်ချ်",dv:"ဒီဗာဟီ",dyo:"ဂျိုလာ-ဖွန်ရီ",dz:"ဒဇွန်ကာ",dzg:"ဒဇာဂါ",ebu:"အမ်ဘူ",ee:"အီဝီ",efi:"အာဖိခ်",egy:"ရှေးဟောင်း အီဂျစ်",eka:"အီကာဂျုခ်",el:"ဂရိ",en:"အင်္ဂလိပ်","en-AU":"ဩစတြေးလျှ အင်္ဂလိပ်","en-CA":"ကနေဒါ အင်္ဂလိပ်","en-GB":"ဗြိတိသျှ အင်္ဂလိပ်","en-US":"အမေရိကန် အင်္ဂလိပ်",enm:"အလယ်ပိုင်း အင်္ဂလိပ်",eo:"အက်စ်ပရန်တို",es:"စပိန်","es-419":"စပိန် (လက်တင်အမေရိက)","es-ES":"စပိန် (ဥရောပ)","es-MX":"စပိန် (မက္ကဆီကို)",et:"အက်စ်တိုးနီးယား",eu:"ဘာစ်ခ်",ewo:"အီဝန်ဒို",fa:"ပါရှန်",ff:"ဖူလာ",fi:"ဖင်လန်",fil:"ဖိလစ်ပိုင်",fj:"ဖီဂျီ",fo:"ဖာရို",fon:"ဖော်န်",fr:"ပြင်သစ်","fr-CA":"ကနေဒါ ပြင်သစ်","fr-CH":"ဆွစ် ပြင်သစ်",frm:"အလယ်ပိုင်း ပြင်သစ်",fro:"ဖရန်စီစ်",frr:"မြောက် ဖရီစီရန်",frs:"အရှေ့ ဖရီစီရန်",fur:"ဖရူလီယန်း",fy:"အနောက် ဖရီစီရန်",ga:"အိုင်းရစ်ရှ်",gaa:"ဂါ",gag:"ဂါဂုဇ်",gd:"စကော့တစ်ရှ် ဂေးလစ်ခ်",gez:"ဂီးဇ်",gil:"ကာရီဗာတီ",gl:"ဂါလီစီယာ",gmh:"အလယ်ပိုင်း အမြင့် ဂျာမန်",gn:"ဂူအာရာနီ",gor:"ဂိုရိုတာလို",grc:"ရှေးဟောင်း ဂရိ",gsw:"ဆွစ် ဂျာမန်",gu:"ဂူဂျာရသီ",guz:"ဂူစီး",gv:"မန်းဇ်",gwi:"ဂွစ်ချင်",ha:"ဟာဥစာ",haw:"ဟာဝိုင်ယီ",he:"ဟီးဘရူး",hi:"ဟိန်ဒူ",hil:"ဟီလီဂေနွန်",hmn:"မုံ",hr:"ခရိုအေးရှား",hsb:"ဆက္ကဆိုနီ",ht:"ဟေတီ",hu:"ဟန်ဂေရီ",hup:"ဟူပါ",hy:"အာမေးနီးယား",hz:"ဟီရဲရို",ia:"အင်တာလင်ဂွါ",iba:"အီဗန်",ibb:"အီဘီဘီယို",id:"အင်ဒိုနီးရှား",ig:"အစ္ဂဘို",ii:"စီချွမ် ရီ",ilo:"အီလိုကို",inh:"အင်ဂုရှ်",io:"အီဒို",is:"အိုက်စ်လန်",it:"အီတလီ",iu:"အီနုခ်တီတု",ja:"ဂျပန်",jbo:"လိုဂျ်ဘန်",jgo:"ဂွမ်ဘာ",jmc:"မချာမီ",jpr:"ဂျူဒီယို-ပါရှန်",jrb:"ဂျူဒီယို-အာရဗီ",jv:"ဂျာဗား",ka:"ဂျော်ဂျီယာ",kab:"ကဘိုင်လ်",kac:"ကချင်",kaj:"ဂျူအူ",kam:"ကမ်ဘာ",kbd:"ကဘာဒင်",kcg:"တိုင်အပ်",kde:"မာခွန်ဒီ",kea:"ကဘူဗာဒီအာနူ",kfo:"ကိုရို",kg:"ကွန်ဂို",kha:"ခါစီ",khq:"ကိုရာ ချီအီနီ",ki:"ကီကူယူ",kj:"ကွန်းယာမာ",kk:"ကာဇာချ",kkj:"ကကို",kl:"ကလာအ်လီဆပ်",kln:"ကလန်ဂျင်",km:"ခမာ",kmb:"ကင်ဘွန်ဒူ",kn:"ကန်နာဒါ",ko:"ကိုရီးယား",koi:"ကိုမီ-ပါမြက်",kok:"ကွန်ကနီ",kpe:"ကပ်ပဲလ်",kr:"ကနူရီ",krc:"ကရာချေး-ဘာကာ",krl:"ကာရီလီယန်",kru:"ကူရုပ်ခ်",ks:"ကက်ရှ်မီးယား",ksb:"ရှန်ဘာလာ",ksf:"ဘာဖီအာ",ksh:"ကိုလိုနီယန်း",ku:"ကဒ်",kum:"ကွမ်မိုက်",kv:"ကိုမီ",kw:"ခိုနီရှ်",ky:"ကာဂျစ်",la:"လက်တင်",lad:"လာဒီနို",lag:"လန်ဂီ",lb:"လူဇင်ဘတ်",lez:"လက်ဇ်ဂီးယား",lg:"ဂန်ဒါ",li:"လင်ဘာဂစ်ရှ်",lkt:"လာကိုတာ",ln:"လင်ဂါလာ",lo:"လာအို",loz:"လိုဇီ",lrc:"မြောက်လူရီ",lt:"လစ်သူဝေးနီးယား",lu:"လူဘာ-ကတန်ဂါ",lua:"လူဘာ-လူလူအာ",lun:"လွန်ဒါ",luo:"လူအို",lus:"မီဇို",luy:"လူရီအာ",lv:"လတ်ဗီးယား",mad:"မဒူရာ",mag:"မဂါဟီ",mai:"မိုင်သီလီ",mak:"မကာဆာ",mas:"မာဆိုင်",mdf:"မို့ခ်ရှာ",men:"မန်ဒဲ",mer:"မီရု",mfe:"မောရစ်ရှ",mg:"မာလဂက်စီ",mga:"အလယ်ပိုင်း အိုင်းရစ်ရှ်",mgh:"မာခူဝါ-မီအီတို",mgo:"မီတာ",mh:"မာရှယ်လိဇ်",mi:"မာအိုရီ",mic:"မစ်ခ်မက်ခ်",min:"စူကူမီနန်",mk:"မက်ဆီဒိုးနီးယား",ml:"မလေယာလမ်",mn:"မွန်ဂိုလီးယား",mnc:"မန်ချူး",mni:"မနိပူရ",moh:"မိုဟော့ခ်",mos:"မိုစီ",mr:"မာရသီ",ms:"မလေး",mt:"မော်လ်တာ",mua:"မွန်ဒန်း",mus:"ခရိချ",mwl:"မီရန်ဒီးဇ်",my:"မြန်မာ",myv:"အီဇယာ",mzn:"မာဇန်ဒါရန်နီ",na:"နော်ရူး",nap:"နပိုလီတန်",naq:"နာမာ",nb:"နော်ဝေ ဘွတ်ခ်မော်လ်",nd:"မြောက် အွန်န်ဒီဘီလီ",nds:"အနိမ့် ဂျာမန်","nds-NL":"ဂျာမန် (နယ်သာလန်)",ne:"နီပေါ","new":"နီဝါရီ",ng:"အွန်ဒွန်ဂါ",nia:"နီးရပ်စ်",niu:"နူအဲယန်း",nl:"ဒတ်ခ်ျ","nl-BE":"ဖလီမစ်ရှ်",nmg:"ကွာစီအို",nn:"နော်ဝေ နီးနောစ်",nnh:"အွန်ရဲဘွန်း",no:"နော်ဝေး",nog:"နိုဂိုင်",nqo:"အွန်ကို",nr:"တောင် အွန်န်ဘီလီ",nso:"မြောက် ဆိုသို",nus:"နူအာ",nv:"နာဗာဟို",ny:"နရန်ဂျာ",nyn:"နရန်ကိုလီ",oc:"အိုစီတန်",om:"အိုရိုမို",or:"အိုရီရာ",os:"အိုဆဲတစ်ခ်",pa:"ပန်ချာပီ",pag:"ပန်ဂါစီနန်",pam:"ပမ်ပန်ညာ",pap:"ပါပီမင်တို",pau:"ပလာအို",pcm:"နိုင်ဂျီးရီးယား ပစ်ဂျင်",peo:"ပါရှန် အဟောင်း",pi:"ပါဠိ",pl:"ပိုလန်",prg:"ပရူရှန်",ps:"ပက်ရှ်တွန်း",pt:"ပေါ်တူဂီ","pt-BR":"ဘရာဇီး ပေါ်တူဂီ","pt-PT":"ဥရောပ ပေါ်တူဂီ",qu:"ခီချူဝါအိုဝါ",quc:"ကီခ်အီချီ",rap:"ရပန်နူအီ",rar:"ရရိုတွန်ဂန်",rm:"ရောမ",rn:"ရွန်ဒီ",ro:"ရိုမေနီယား","ro-MD":"မော်လဒိုဗာ",rof:"ရွမ်ဘို",root:"မူလရင်းမြစ်",ru:"ရုရှ",rup:"အာရိုမန်းနီးယန်း",rw:"ကင်ရာဝန်ဒါ",rwk:"ရူဝမ်",sa:"သင်္သကရိုက်",sad:"ဆန်ဒါဝီ",sah:"ဆခါ",saq:"ဆမ်ဘူရူ",sat:"ဆန်တာလီ",sba:"အွန်ဂမ်းဘေး",sbp:"ဆန်ဂု",sc:"ဆာဒီနီးယား",scn:"စစ္စလီ",sco:"စကော့တ်",sd:"စင်ဒီ",se:"မြောက် ဆာမိ",seh:"စီနာ",ses:"ကိုရာဘိုရို ဆမ်နီ",sg:"ဆန်ဂို",sga:"အိုင်းရစ် ဟောင်း",shi:"တာချယ်လ်ဟစ်",shn:"ရှမ်း",si:"စင်ဟာလာ",sk:"ဆလိုဗက်",sl:"ဆလိုဗေးနီးယား",sm:"ဆမိုအာ",sma:"တောင် ဆာမိ",smj:"လူလီ ဆာမိ",smn:"အီနာရီ ဆာမိ",sms:"စခိုးလ် ဆာမိ",sn:"ရှိုနာ",snk:"ဆိုနင်ကေး",so:"ဆိုမာလီ",sq:"အယ်လ်ဘေးနီးယား",sr:"ဆားဘီးယား",srn:"ဆရာနန် တွန်ဂို",ss:"ဆွာဇီလန်",ssy:"ဆာဟို",st:"တောင်ပိုင်း ဆိုသို",su:"ဆူဒန်",suk:"ဆူကူမာ",sv:"ဆွီဒင်",sw:"ဆွာဟီလီ","sw-CD":"ကွန်ဂို ဆွာဟီလီ",swb:"ကိုမိုရီးယန်း",syr:"ဆီးရီးယား",ta:"တမီးလ်",te:"တီလီဂူ",tem:"တင်မ်နဲ",teo:"တီဆို",tet:"တီတွမ်",tg:"တာဂျစ်",th:"ထိုင်း",ti:"တီဂ်ရင်ယာ",tig:"တီဂရီ",tk:"တာ့ခ်မင်နစ္စတန်",tlh:"ကလင်ဂွန်",tn:"တီဆဝါနာ",to:"တွန်ဂါ",tpi:"တော့ခ် ပိစင်",tr:"တူရကီ",trv:"တရိုကို",ts:"ဆွန်ဂါ",tt:"တာတာ",tum:"တမ်ဘူကာ",tvl:"တူဗာလူ",twq:"တာဆာဝါချ",ty:"တဟီတီ",tyv:"တူဗန်",tzm:"အလယ်အာ့တလာစ် တာမာဇိုက်",udm:"အူမူရတ်",ug:"ဝီဂါ",uk:"ယူကရိန်း",umb:"အူဘန်ဒူ",ur:"အူရ်ဒူ",uz:"ဥဇဘတ်",vai:"ဗိုင်",ve:"ဗင်န်ဒါ",vi:"ဗီယက်နမ်",vo:"ဗိုလာပိုက်",vun:"ဗွန်ဂျို",wa:"ဝါလူးန်",wae:"ဝေါလ်ဆာ",wal:"ဝိုလက်တာ",war:"ဝါရေး",wbp:"ဝေါလ်ပီရီ",wo:"ဝူလိုဖ်",xal:"ကာလ်မိုက်",xh:"ဇိုစာ",xog:"ဆိုဂါ",yav:"ရန်ဘဲန်",ybb:"ရမ်ဘာ",yi:"ဂျူး",yo:"ယိုရူဘာ",yue:"ကွမ်တုံ",zgh:"မိုရိုကို တမဇိုက်",zh:"တရုတ်","zh-Hans":"ပြည်ကြီးတရုတ် (ရိုးရှင်း)","zh-Hant":"ပြည်ကြီးတရုတ် (ရိုးရာ)",zu:"ဇူးလူး",zun:"ဇူနီ",zza:"ဇာဇာ"},scriptNames:{Cyrl:"စစ်ရိလစ်",Latn:"လက်တင်",Arab:"အာရေဗျ",Guru:"ဂူရူ",Hans:"ရိုးရှင်း",Hant:"ရိုးရာ"}},ne:{rtl:false,languageNames:{aa:"अफार",ab:"अब्खाजियाली",ace:"अचाइनिज",ach:"अकोली",ada:"अदाङमे",ady:"अदिघे",ae:"अवेस्तान",af:"अफ्रिकान्स",afh:"अफ्रिहिली",agq:"आघेम",ain:"अइनु",ak:"आकान",akk:"अक्कादियाली",akz:"अलाबामा",ale:"अलेउट",aln:"घेग अल्बानियाली",alt:"दक्षिणी आल्टाइ",am:"अम्हारिक",an:"अरागोनी",ang:"पुरातन अङ्ग्रेजी",anp:"अङ्गिका",ar:"अरबी","ar-001":"आधुनिक मानक अरबी",arc:"अरामाइक",arn:"मापुचे",aro:"अराओना",arp:"अरापाहो",arq:"अल्जेरियाली अरबी",arw:"अरावाक",ary:"मोरोक्कोली अरबी",arz:"इजिप्ट अरबी",as:"आसामी",asa:"आसु",ase:"अमेरिकी साङ्केतिक भाषा",ast:"अस्टुरियाली",av:"अवारिक",avk:"कोटावा",awa:"अवधी",ay:"ऐमारा",az:"अजरबैजानी",ba:"बास्किर",bal:"बालुची",ban:"बाली",bar:"बाभारियाली",bas:"बासा",bax:"बामुन",bbc:"बाताक तोबा",bbj:"घोमाला",be:"बेलारुसी",bej:"बेजा",bem:"बेम्बा",bew:"बेटावी",bez:"बेना",bfd:"बाफुट",bfq:"बडागा",bg:"बुल्गेरियाली",bgn:"पश्चिम बालोची",bho:"भोजपुरी",bi:"बिस्लाम",bik:"बिकोल",bin:"बिनी",bjn:"बन्जार",bkm:"कोम",bla:"सिक्सिका",bm:"बाम्बारा",bn:"बंगाली",bo:"तिब्बती",bpy:"विष्णुप्रिया",bqi:"बाख्तिआरी",br:"ब्रेटन",bra:"ब्रज",brh:"ब्राहुइ",brx:"बोडो",bs:"बोस्नियाली",bss:"अकुज",bua:"बुरिआत",bug:"बुगिनियाली",bum:"बुलु",byn:"ब्लिन",byv:"मेडुम्बा",ca:"क्याटालन",cad:"काड्डो",car:"क्यारिब",cay:"कायुगा",cch:"अट्साम",ccp:"चाक्मा",ce:"चेचेन",ceb:"सेबुआनो",cgg:"चिगा",ch:"चामोर्रो",chb:"चिब्चा",chg:"चागाटाई",chk:"चुकेसे",chm:"मारी",chn:"चिनुक जार्गन",cho:"चोक्टाव",chp:"चिपेव्यान",chr:"चेरोकी",chy:"चेयेन्ने",ckb:"मध्यवर्ती कुर्दिस",co:"कोर्सिकन",cop:"कोप्टिक",cps:"कापिज्नोन",cr:"क्री",crh:"क्रिमियाली तुर्क",crs:"सेसेल्वा क्रिओल फ्रान्सेली",cs:"चेक",csb:"कासुवियन",cu:"चर्च स्लाभिक",cv:"चुभास",cy:"वेल्श",da:"डेनिस",dak:"डाकोटा",dar:"दार्ग्वा",dav:"ताइता",de:"जर्मन","de-AT":"अस्ट्रिएन जर्मन","de-CH":"स्वीस हाई जर्मन",del:"देलावर",dgr:"दोग्रिब",din:"दिन्का",dje:"जर्मा",doi:"डोगरी",dsb:"तल्लो सोर्बियन",dtp:"केन्द्रीय दुसुन",dua:"दुवाला",dum:"मध्य डच",dv:"दिबेही",dyo:"जोला-फोनिल",dyu:"द्युला",dz:"जोङ्खा",dzg:"दाजागा",ebu:"एम्बु",ee:"इवी",efi:"एफिक",egl:"एमिलियाली",egy:"पुरातन इजिप्टी",eka:"एकाजुक",el:"ग्रीक",elx:"एलामाइट",en:"अङ्ग्रेजी","en-AU":"अस्ट्रेलियाली अङ्ग्रेजी","en-CA":"क्यानाडेली अङ्ग्रेजी","en-GB":"बेलायती अङ्ग्रेजी","en-US":"अमेरिकी अङ्ग्रेजी",enm:"मध्य अङ्ग्रेजी",eo:"एस्पेरान्तो",es:"स्पेनी","es-419":"ल्याटिन अमेरिकी स्पेनी","es-ES":"युरोपेली स्पेनी","es-MX":"मेक्सिकन स्पेनी",esu:"केन्द्रीय युपिक",et:"इस्टोनियन",eu:"बास्क",ewo:"इवोन्डो",ext:"एक्सट्रेमादुराली",fa:"फारसी",fan:"फाङ",fat:"फान्टी",ff:"फुलाह",fi:"फिनिस",fil:"फिलिपिनी",fj:"फिजियन",fo:"फारोज",fon:"फोन",fr:"फ्रान्सेली","fr-CA":"क्यानेडाली फ्रान्सेली","fr-CH":"स्विस फ्रेन्च",frc:"काहुन फ्रान्सेली",frm:"मध्य फ्रान्सेली",fro:"पुरातन फ्रान्सेली",frp:"अर्पितान",frr:"उत्तरी फ्रिजी",frs:"पूर्वी फ्रिसियाली",fur:"फ्रिउलियाली",fy:"पश्चिमी फ्रिसियन",ga:"आइरिस",gaa:"गा",gag:"गगाउज",gan:"गान चिनियाँ",gay:"गायो",gba:"ग्बाया",gd:"स्कटिस गाएलिक",gez:"गिज",gil:"गिल्बर्टी",gl:"गलिसियाली",glk:"गिलाकी",gmh:"मध्य उच्च जर्मन",gn:"गुवारानी",goh:"पुरातन उच्च जर्मन",gom:"गोवा कोन्कानी",gon:"गोन्डी",gor:"गोरोन्टालो",got:"गोथिक",grb:"ग्रेबो",grc:"पुरातन ग्रिक",gsw:"स्वीस जर्मन",gu:"गुजराती",gur:"फ्राफ्रा",guz:"गुसी",gv:"मान्क्स",gwi:"गुइचिन",ha:"हाउसा",hai:"हाइदा",hak:"हक्का चिनियाँ",haw:"हवाइयन",he:"हिब्रु",hi:"हिन्दी",hif:"फिजी हिन्दी",hil:"हिलिगायनोन",hit:"हिट्टिटे",hmn:"हमोङ",ho:"हिरी मोटु",hr:"क्रोयसियाली",hsb:"माथिल्लो सोर्बियन",hsn:"जियाङ चिनियाँ",ht:"हैटियाली क्रियोल",hu:"हङ्गेरियाली",hup:"हुपा",hy:"आर्मेनियाली",hz:"हेरेरो",ia:"इन्टर्लिङ्गुआ",iba:"इबान",ibb:"इबिबियो",id:"इन्डोनेसियाली",ie:"इन्टरलिङ्ग्वे",ig:"इग्बो",ii:"सिचुआन यि",ik:"इनुपिआक्",ilo:"इयोको",inh:"इन्गस",io:"इडो",is:"आइसल्यान्डियाली",it:"इटालेली",iu:"इनुक्टिटुट",izh:"इन्ग्रियाली",ja:"जापानी",jam:"जमैकाली क्रेओले अङ्ग्रेजी",jbo:"लोज्बान",jgo:"न्गोम्बा",jmc:"माचामे",jpr:"जुडियो-फारसी",jrb:"जुडियो-अरबी",jut:"जुटिस",jv:"जाभानी",ka:"जर्जियाली",kaa:"कारा-काल्पाक",kab:"काबिल",kac:"काचिन",kaj:"ज्जु",kam:"काम्बा",kaw:"कावी",kbd:"काबार्दियाली",kbl:"कानेम्बु",kcg:"टुआप",kde:"माकोन्डे",kea:"काबुभेर्डियानु",ken:"केनयाङ",kfo:"कोरो",kg:"कोङ्गो",kgp:"काइनगाङ",kha:"खासी",kho:"खोटानी",khq:"कोयरा चिनी",khw:"खोवार",ki:"किकुयु",kiu:"किर्मान्जकी",kj:"कुआन्यामा",kk:"काजाख",kkj:"काको",kl:"कालालिसुट",kln:"कालेन्जिन",km:"खमेर",kmb:"किम्बुन्डु",kn:"कन्नाडा",ko:"कोरियाली",koi:"कोमी-पर्म्याक",kok:"कोन्कानी",kos:"कोस्राली",kpe:"क्पेल्ले",kr:"कानुरी",krc:"काराचाय-बाल्कर",kri:"क्रिओ",krj:"किनाराय-ए",krl:"करेलियन",kru:"कुरुख",ks:"कास्मिरी",ksb:"शाम्बाला",ksf:"बाफिया",ksh:"कोलोग्नियाली",ku:"कुर्दी",kum:"कुमिक",kut:"कुतेनाइ",kv:"कोमी",kw:"कोर्निस",ky:"किर्गिज",la:"ल्याटिन",lad:"लाडिनो",lag:"लाङ्गी",lah:"लाहन्डा",lam:"लाम्बा",lb:"लक्जेम्बर्गी",lez:"लाज्घियाली",lfn:"लिङ्गुवा फ्राङ्का नोभा",lg:"गान्डा",li:"लिम्बुर्गी",lij:"लिगुरियाली",liv:"लिभोनियाली",lkt:"लाकोता",lmo:"लोम्बार्ड",ln:"लिङ्गाला",lo:"लाओ",lol:"मोङ्गो",loz:"लोजी",lrc:"उत्तरी लुरी",lt:"लिथुआनियाली",ltg:"लाट्गाली",lu:"लुबा-काताङ्गा",lua:"लुबा-लुलुआ",lui:"लुइसेनो",lun:"लुन्डा",luo:"लुओ",lus:"मिजो",luy:"लुइया",lv:"लात्भियाली",lzh:"साहित्यिक चिनियाँ",lzz:"लाज",mad:"मादुरेसे",maf:"माफा",mag:"मगधी",mai:"मैथिली",mak:"माकासार",man:"मान्दिङो",mas:"मसाई",mde:"माबा",mdf:"मोक्ष",mdr:"मन्दर",men:"मेन्डे",mer:"मेरू",mfe:"मोरिसेन",mg:"मलागासी",mga:"मध्य आयरिस",mgh:"माखुवा-मिट्टो",mgo:"मेटा",mh:"मार्साली",mi:"माओरी",mic:"मिकमाक",min:"मिनाङकाबाउ",mk:"म्यासेडोनियन",ml:"मलयालम",mn:"मङ्गोलियाली",mnc:"मान्चु",mni:"मनिपुरी",moh:"मोहक",mos:"मोस्सी",mr:"मराठी",ms:"मलाय",mt:"माल्टिज",mua:"मुन्डाङ",mus:"क्रिक",mwl:"मिरान्डी",mwr:"माडवारी",mwv:"मेन्टावाई",my:"बर्मेली",mye:"म्येने",myv:"इर्ज्या",mzn:"मजानडेरानी",na:"नाउरू",nan:"मिन नान चिनियाँ",nap:"नेपोलिटान",naq:"नामा",nb:"नर्वेली बोकमाल",nd:"उत्तरी न्डेबेले",nds:"तल्लो जर्मन","nds-NL":"तल्लो साक्सन",ne:"नेपाली","new":"नेवारी",ng:"न्दोन्गा",nia:"नियास",niu:"निउएन",njo:"अओ नागा",nl:"डच","nl-BE":"फ्लेमिस",nmg:"क्वासियो",nn:"नर्वेली नाइनोर्स्क",nnh:"न्गिएम्बुन",no:"नर्वेली",nog:"नोगाइ",non:"पुरानो नोर्से",nov:"नोभियल",nqo:"नको",nr:"दक्षिण न्देबेले",nso:"उत्तरी सोथो",nus:"नुएर",nv:"नाभाजो",nwc:"परम्परागत नेवारी",ny:"न्यान्जा",nym:"न्यामवेजी",nyn:"न्यान्कोल",nyo:"न्योरो",nzi:"नजिमा",oc:"अक्सिटन",oj:"ओजिब्वा",om:"ओरोमो",or:"उडिया",os:"अोस्सेटिक",osa:"ओसागे",ota:"अटोमन तुर्की",pa:"पंजाबी",pag:"पाङ्गासिनान",pal:"पाहलावी",pam:"पामपाङ्गा",pap:"पापियामेन्तो",pau:"पालाउवाली",pcd:"पिकार्ड",pcm:"नाइजेरियाली पिड्जिन",pdc:"पेन्सिलभानियाली जर्मन",peo:"पुरातन फारसी",pfl:"पालाटिन जर्मन",phn:"फोनिसियाली",pi:"पाली",pl:"पोलिस",pms:"पिएडमोन्तेसे",pnt:"पोन्टिक",prg:"प्रसियाली",pro:"पुरातन प्रोभेन्काल",ps:"पास्तो",pt:"पोर्तुगी","pt-BR":"ब्राजिली पोर्तुगी","pt-PT":"युरोपेली पोर्तुगी",qu:"क्वेचुवा",quc:"किचे",qug:"चिम्बोराजो उच्चस्थान किचुआ",raj:"राजस्थानी",rap:"रापानुई",rar:"रारोटोङ्गान",rm:"रोमानिस",rn:"रुन्डी",ro:"रोमानियाली","ro-MD":"मोल्डाभियाली",rof:"रोम्बो",root:"रुट",ru:"रसियाली",rup:"अरोमानीयाली",rw:"किन्यारवान्डा",rwk:"र्‌वा",sa:"संस्कृत",sad:"सान्डेअ",sah:"साखा",saq:"साम्बुरू",sat:"सान्ताली",sba:"न्गामबाय",sbp:"साङ्गु",sc:"सार्डिनियाली",scn:"सिसिलियाली",sco:"स्कट्स",sd:"सिन्धी",sdh:"दक्षिणी कुर्दिश",se:"उत्तरी सामी",seh:"सेना",ses:"कोयराबोरो सेन्नी",sg:"साङ्गो",sga:"पुरातन आयरीस",shi:"टाचेल्हिट",shn:"शान",shu:"चाड अरबी",si:"सिन्हाली",sk:"स्लोभाकियाली",sl:"स्लोभेनियाली",sli:"तल्लो सिलेसियाली",sm:"सामोआ",sma:"दक्षिणी सामी",smj:"लुले सामी",smn:"इनारी सामी",sms:"स्कोइट सामी",sn:"शोना",snk:"सोनिन्के",so:"सोमाली",sq:"अल्बानियाली",sr:"सर्बियाली",srn:"स्रानान टोङ्गो",ss:"स्वाती",ssy:"साहो",st:"दक्षिणी सोथो",su:"सुडानी",suk:"सुकुमा",sus:"सुसू",sux:"सुमेरियाली",sv:"स्विडिस",sw:"स्वाहिली","sw-CD":"कङ्गो स्वाहिली",swb:"कोमोरी",syc:"परम्परागत सिरियाक",syr:"सिरियाक",ta:"तामिल",te:"तेलुगु",tem:"टिम्ने",teo:"टेसो",tet:"टेटुम",tg:"ताजिक",th:"थाई",ti:"टिग्रिन्या",tig:"टिग्रे",tk:"टर्कमेन",tlh:"क्लिङ्गन",tn:"ट्स्वाना",to:"टोङ्गन",tog:"न्यास टोङ्गा",tpi:"टोक पिसिन",tr:"टर्किश",trv:"टारोको",ts:"ट्सोङ्गा",tt:"तातार",ttt:"मुस्लिम टाट",tum:"टुम्बुका",tvl:"टुभालु",twq:"तासावाक",ty:"टाहिटियन",tyv:"टुभिनियाली",tzm:"केन्द्रीय एट्लास टामाजिघट",udm:"उड्मुर्ट",ug:"उइघुर",uk:"युक्रेनी",umb:"उम्बुन्डी",ur:"उर्दु",uz:"उज्बेकी",vai:"भाइ",ve:"भेन्डा",vi:"भियतनामी",vmf:"मुख्य-फ्राङ्कोनियाली",vo:"भोलापिक",vun:"भुन्जो",wa:"वाल्लुन",wae:"वाल्सर",wal:"वोलेट्टा",war:"वारे",wbp:"वार्ल्पिरी",wo:"वुलुफ",xal:"काल्मिक",xh:"खोसा",xmf:"मिनग्रेलियाली",xog:"सोगा",yav:"याङ्बेन",ybb:"येम्बा",yi:"यिद्दिस",yo:"योरूवा",yrl:"न्हिनगातु",yue:"क्यान्टोनिज",zbl:"ब्लिससिम्बोल्स",zgh:"मानक मोरोक्कोन तामाजिघट",zh:"चिनियाँ","zh-Hans":"सरलिकृत म्यान्डरिन चिनियाँ","zh-Hant":"परम्परागत म्यान्डरिन चिनियाँ",zu:"जुलु",zun:"जुनी",zza:"जाजा"},scriptNames:{Cyrl:"सिरिलिक",Latn:"ल्याटिन",Arab:"अरबी",Guru:"गुरूमुखी",Tfng:"टिफिनाघ",Vaii:"भाइ",Hans:"सरलिकृत चिनियाँ",Hant:"परम्परागत चिनियाँ"}},nl:{rtl:false,languageNames:{aa:"Afar",ab:"Abchazisch",ace:"Atjehs",ach:"Akoli",ada:"Adangme",ady:"Adygees",ae:"Avestisch",aeb:"Tunesisch Arabisch",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Aino",ak:"Akan",akk:"Akkadisch",akz:"Alabama",ale:"Aleoetisch",aln:"Gegisch",alt:"Zuid-Altaïsch",am:"Amhaars",an:"Aragonees",ang:"Oudengels",anp:"Angika",ar:"Arabisch","ar-001":"Arabisch (wereld)",arc:"Aramees",arn:"Mapudungun",aro:"Araona",arp:"Arapaho",arq:"Algerijns Arabisch",ars:"Nadjdi-Arabisch",arw:"Arawak",ary:"Marokkaans Arabisch",arz:"Egyptisch Arabisch",as:"Assamees",asa:"Asu",ase:"Amerikaanse Gebarentaal",ast:"Asturisch",av:"Avarisch",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbeidzjaans",ba:"Basjkiers",bal:"Beloetsji",ban:"Balinees",bar:"Beiers",bas:"Basa",bax:"Bamoun",bbc:"Batak Toba",bbj:"Ghomala’",be:"Wit-Russisch",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgaars",bgn:"Westers Beloetsji",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bengaals",bo:"Tibetaans",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Bretons",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnisch",bss:"Akoose",bua:"Boerjatisch",bug:"Buginees",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalaans",cad:"Caddo",car:"Caribisch",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Tsjetsjeens",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukees",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",ckb:"Soranî",co:"Corsicaans",cop:"Koptisch",cps:"Capiznon",cr:"Cree",crh:"Krim-Tataars",crs:"Seychellencreools",cs:"Tsjechisch",csb:"Kasjoebisch",cu:"Kerkslavisch",cv:"Tsjoevasjisch",cy:"Welsh",da:"Deens",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"Duits","de-AT":"Duits (Oostenrijk)","de-CH":"Duits (Zwitserland)",del:"Delaware",den:"Slavey",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Nedersorbisch",dtp:"Dusun",dua:"Duala",dum:"Middelnederlands",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emiliano",egy:"Oudegyptisch",eka:"Ekajuk",el:"Grieks",elx:"Elamitisch",en:"Engels","en-AU":"Engels (Australië)","en-CA":"Engels (Canada)","en-GB":"Engels (Verenigd Koninkrijk)","en-US":"Engels (Verenigde Staten)",enm:"Middelengels",eo:"Esperanto",es:"Spaans","es-419":"Spaans (Latijns-Amerika)","es-ES":"Spaans (Spanje)","es-MX":"Spaans (Mexico)",esu:"Yupik",et:"Estisch",eu:"Baskisch",ewo:"Ewondo",ext:"Extremeens",fa:"Perzisch",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Fins",fil:"Filipijns",fit:"Tornedal-Fins",fj:"Fijisch",fo:"Faeröers",fon:"Fon",fr:"Frans","fr-CA":"Frans (Canada)","fr-CH":"Frans (Zwitserland)",frc:"Cajun-Frans",frm:"Middelfrans",fro:"Oudfrans",frp:"Arpitaans",frr:"Noord-Fries",frs:"Oost-Fries",fur:"Friulisch",fy:"Fries",ga:"Iers",gaa:"Ga",gag:"Gagaoezisch",gan:"Ganyu",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrisch Dari",gd:"Schots-Gaelisch",gez:"Ge’ez",gil:"Gilbertees",gl:"Galicisch",glk:"Gilaki",gmh:"Middelhoogduits",gn:"Guaraní",goh:"Oudhoogduits",gom:"Goa Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothisch",grb:"Grebo",grc:"Oudgrieks",gsw:"Zwitserduits",gu:"Gujarati",guc:"Wayuu",gur:"Gurune",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka",haw:"Hawaïaans",he:"Hebreeuws",hi:"Hindi",hif:"Fijisch Hindi",hil:"Hiligaynon",hit:"Hettitisch",hmn:"Hmong",ho:"Hiri Motu",hr:"Kroatisch",hsb:"Oppersorbisch",hsn:"Xiangyu",ht:"Haïtiaans Creools",hu:"Hongaars",hup:"Hupa",hy:"Armeens",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesisch",ie:"Interlingue",ig:"Igbo",ii:"Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingoesjetisch",io:"Ido",is:"IJslands",it:"Italiaans",iu:"Inuktitut",izh:"Ingrisch",ja:"Japans",jam:"Jamaicaans Creools",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Perzisch",jrb:"Judeo-Arabisch",jut:"Jutlands",jv:"Javaans",ka:"Georgisch",kaa:"Karakalpaks",kab:"Kabylisch",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardisch",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kaapverdisch Creools",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanees",khq:"Koyra Chiini",khw:"Khowar",ki:"Gikuyu",kiu:"Kirmanckî",kj:"Kuanyama",kk:"Kazachs",kkj:"Kako",kl:"Groenlands",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Koreaans",koi:"Komi-Permjaaks",kok:"Konkani",kos:"Kosraeaans",kpe:"Kpelle",kr:"Kanuri",krc:"Karatsjaj-Balkarisch",kri:"Krio",krj:"Kinaray-a",krl:"Karelisch",kru:"Kurukh",ks:"Kasjmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Kölsch",ku:"Koerdisch",kum:"Koemuks",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kirgizisch",la:"Latijn",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxemburgs",lez:"Lezgisch",lfn:"Lingua Franca Nova",lg:"Luganda",li:"Limburgs",lij:"Ligurisch",liv:"Lijfs",lkt:"Lakota",lmo:"Lombardisch",ln:"Lingala",lo:"Laotiaans",lol:"Mongo",lou:"Louisiana-Creools",loz:"Lozi",lrc:"Noordelijk Luri",lt:"Litouws",ltg:"Letgaals",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Lets",lzh:"Klassiek Chinees",lzz:"Lazisch",mad:"Madoerees",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makassaars",man:"Mandingo",mas:"Maa",mde:"Maba",mdf:"Moksja",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagassisch",mga:"Middeliers",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshallees",mi:"Maori",mic:"Mi’kmaq",min:"Minangkabau",mk:"Macedonisch",ml:"Malayalam",mn:"Mongools",mnc:"Mantsjoe",mni:"Meitei",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"West-Mari",ms:"Maleis",mt:"Maltees",mua:"Mundang",mus:"Creek",mwl:"Mirandees",mwr:"Marwari",mwv:"Mentawai",my:"Birmaans",mye:"Myene",myv:"Erzja",mzn:"Mazanderani",na:"Nauruaans",nan:"Minnanyu",nap:"Napolitaans",naq:"Nama",nb:"Noors - Bokmål",nd:"Noord-Ndebele",nds:"Nedersaksisch","nds-NL":"Nederduits",ne:"Nepalees","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niueaans",njo:"Ao Naga",nl:"Nederlands","nl-BE":"Nederlands (België)",nmg:"Ngumba",nn:"Noors - Nynorsk",nnh:"Ngiemboon",no:"Noors",nog:"Nogai",non:"Oudnoors",nov:"Novial",nqo:"N’Ko",nr:"Zuid-Ndbele",nso:"Noord-Sotho",nus:"Nuer",nv:"Navajo",nwc:"Klassiek Nepalbhasa",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitaans",oj:"Ojibwa",om:"Afaan Oromo",or:"Odia",os:"Ossetisch",osa:"Osage",ota:"Ottomaans-Turks",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiaments",pau:"Palaus",pcd:"Picardisch",pcm:"Nigeriaans Pidgin",pdc:"Pennsylvania-Duits",pdt:"Plautdietsch",peo:"Oudperzisch",pfl:"Paltsisch",phn:"Foenicisch",pi:"Pali",pl:"Pools",pms:"Piëmontees",pnt:"Pontisch",pon:"Pohnpeiaans",prg:"Oudpruisisch",pro:"Oudprovençaals",ps:"Pasjtoe",pt:"Portugees","pt-BR":"Portugees (Brazilië)","pt-PT":"Portugees (Portugal)",qu:"Quechua",quc:"K’iche’",qug:"Kichwa",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffijns",rm:"Reto-Romaans",rn:"Kirundi",ro:"Roemeens","ro-MD":"Roemeens (Moldavië)",rof:"Rombo",rom:"Romani",root:"Root",rtm:"Rotumaans",ru:"Russisch",rue:"Roetheens",rug:"Roviana",rup:"Aroemeens",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskriet",sad:"Sandawe",sah:"Jakoets",sam:"Samaritaans-Aramees",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardijns",scn:"Siciliaans",sco:"Schots",sd:"Sindhi",sdc:"Sassarees",sdh:"Pahlavani",se:"Noord-Samisch",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkoeps",ses:"Koyraboro Senni",sg:"Sango",sga:"Oudiers",sgs:"Samogitisch",sh:"Servo-Kroatisch",shi:"Tashelhiyt",shn:"Shan",shu:"Tsjadisch Arabisch",si:"Singalees",sid:"Sidamo",sk:"Slowaaks",sl:"Sloveens",sli:"Silezisch Duits",sly:"Selayar",sm:"Samoaans",sma:"Zuid-Samisch",smj:"Lule-Samisch",smn:"Inari-Samisch",sms:"Skolt-Samisch",sn:"Shona",snk:"Soninke",so:"Somalisch",sog:"Sogdisch",sq:"Albanees",sr:"Servisch",srn:"Sranantongo",srr:"Serer",ss:"Swazi",ssy:"Saho",st:"Zuid-Sotho",stq:"Saterfries",su:"Soendanees",suk:"Sukuma",sus:"Soesoe",sux:"Soemerisch",sv:"Zweeds",sw:"Swahili","sw-CD":"Swahili (Congo-Kinshasa)",swb:"Shimaore",syc:"Klassiek Syrisch",syr:"Syrisch",szl:"Silezisch",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetun",tg:"Tadzjieks",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmeens",tkl:"Tokelaus",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongaans",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turks",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonisch",tsi:"Tsimshian",tt:"Tataars",ttt:"Moslim Tat",tum:"Toemboeka",tvl:"Tuvaluaans",tw:"Twi",twq:"Tasawaq",ty:"Tahitiaans",tyv:"Toevaans",tzm:"Tamazight (Centraal-Marokko)",udm:"Oedmoerts",ug:"Oeigoers",uga:"Oegaritisch",uk:"Oekraïens",umb:"Umbundu",ur:"Urdu",uz:"Oezbeeks",vai:"Vai",ve:"Venda",vec:"Venetiaans",vep:"Wepsisch",vi:"Vietnamees",vls:"West-Vlaams",vmf:"Opperfrankisch",vo:"Volapük",vot:"Votisch",vro:"Võro",vun:"Vunjo",wa:"Waals",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wuyu",xal:"Kalmuks",xh:"Xhosa",xmf:"Mingreels",xog:"Soga",yao:"Yao",yap:"Yapees",yav:"Yangben",ybb:"Yemba",yi:"Jiddisch",yo:"Yoruba",yrl:"Nheengatu",yue:"Kantonees",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbolen",zea:"Zeeuws",zen:"Zenaga",zgh:"Standaard Marokkaanse Tamazight",zh:"Chinees","zh-Hans":"Mandarijn (vereenvoudigd)","zh-Hant":"Mandarijn (traditioneel)",zu:"Zoeloe",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillisch",Latn:"Latijns",Arab:"Arabisch",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"vereenvoudigd",Hant:"traditioneel"}},nn:{rtl:false,languageNames:{aa:"afar",ab:"abkhasisk",ace:"achinesisk",ach:"acoli",ada:"adangme",ady:"adygeisk",ae:"avestisk",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadisk",ale:"aleutisk",alt:"sør-altaj",am:"amharisk",an:"aragonsk",ang:"gammalengelsk",anp:"angika",ar:"arabisk","ar-001":"moderne standardarabisk",arc:"arameisk",arn:"mapudungun",arp:"arapaho",arw:"arawak",as:"assamesisk",asa:"asu (Tanzania)",ast:"asturisk",av:"avarisk",awa:"avadhi",ay:"aymara",az:"aserbajdsjansk",ba:"basjkirsk",bal:"baluchi",ban:"balinesisk",bas:"basa",bax:"bamun",be:"kviterussisk",bej:"beja",bem:"bemba",bez:"bena (Tanzania)",bg:"bulgarsk",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetansk",br:"bretonsk",bra:"braj",brx:"bodo",bs:"bosnisk",bss:"bakossi",bua:"burjatisk",bug:"buginesisk",byn:"blin",ca:"katalansk",cad:"caddo",car:"carib",cch:"atsam",ce:"tsjetsjensk",ceb:"cebuano",cgg:"kiga",ch:"chamorro",chb:"chibcha",chg:"tsjagataisk",chk:"chuukesisk",chm:"mari",chn:"chinook",cho:"choctaw",chp:"chipewiansk",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"korsikansk",cop:"koptisk",cr:"cree",crh:"krimtatarisk",crs:"seselwa (fransk-kreolsk)",cs:"tsjekkisk",csb:"kasjubisk",cu:"kyrkjeslavisk",cv:"tsjuvansk",cy:"walisisk",da:"dansk",dak:"dakota",dar:"dargwa",dav:"taita",de:"tysk","de-AT":"tysk (Austerrike)","de-CH":"tysk (Sveits)",del:"delaware",den:"slavej",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"lågsorbisk",dua:"duala",dum:"mellomnederlandsk",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"gammalegyptisk",eka:"ekajuk",el:"gresk",elx:"elamite",en:"engelsk","en-AU":"engelsk (Australia)","en-CA":"engelsk (Canada)","en-GB":"britisk engelsk","en-US":"engelsk (USA)",enm:"mellomengelsk",eo:"esperanto",es:"spansk","es-419":"spansk (Latin-Amerika)","es-ES":"spansk (Spania)","es-MX":"spansk (Mexico)",et:"estisk",eu:"baskisk",ewo:"ewondo",fa:"persisk",fan:"fang",fat:"fanti",ff:"fulfulde",fi:"finsk",fil:"filippinsk",fj:"fijiansk",fo:"færøysk",fr:"fransk","fr-CA":"fransk (Canada)","fr-CH":"fransk (Sveits)",frm:"mellomfransk",fro:"gammalfransk",frr:"nordfrisisk",frs:"austfrisisk",fur:"friulisk",fy:"vestfrisisk",ga:"irsk",gaa:"ga",gay:"gayo",gba:"gbaya",gd:"skotsk-gælisk",gez:"geez",gil:"gilbertese",gl:"galicisk",gmh:"mellomhøgtysk",gn:"guarani",goh:"gammalhøgtysk",gon:"gondi",gor:"gorontalo",got:"gotisk",grb:"grebo",grc:"gammalgresk",gsw:"sveitsertysk",gu:"gujarati",guz:"gusii",gv:"manx",gwi:"gwichin",ha:"hausa",hai:"haida",haw:"hawaiisk",he:"hebraisk",hi:"hindi",hil:"hiligaynon",hit:"hettittisk",hmn:"hmong",ho:"hiri motu",hr:"kroatisk",hsb:"høgsorbisk",ht:"haitisk",hu:"ungarsk",hup:"hupa",hy:"armensk",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesisk",ie:"interlingue",ig:"ibo",ii:"sichuan-yi",ik:"inupiak",ilo:"iloko",inh:"ingusjisk",io:"ido",is:"islandsk",it:"italiensk",iu:"inuktitut",ja:"japansk",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"jødepersisk",jrb:"jødearabisk",jv:"javanesisk",ka:"georgisk",kaa:"karakalpakisk",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardisk",kcg:"tyap",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"kikongo",kha:"khasi",kho:"khotanesisk",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kasakhisk",kkj:"kako",kl:"grønlandsk (kalaallisut)",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"koreansk",kok:"konkani",kos:"kosraeansk",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"karelsk",kru:"kurukh",ks:"kasjmiri",ksb:"shambala",ksf:"bafia",ksh:"kølnsk",ku:"kurdisk",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"kornisk",ky:"kirgisisk",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgsk",lez:"lezghian",lg:"ganda",li:"limburgisk",lkt:"lakota",ln:"lingala",lo:"laotisk",lol:"mongo",loz:"lozi",lrc:"nord-lurisk",lt:"litauisk",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"olulujia",lv:"latvisk",mad:"maduresisk",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"madagassisk",mga:"mellomirsk",mgh:"Makhuwa-Meetto",mgo:"meta’",mh:"marshallesisk",mi:"maori",mic:"micmac",min:"minangkabau",mk:"makedonsk",ml:"malayalam",mn:"mongolsk",mnc:"mandsju",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malayisk",mt:"maltesisk",mua:"mundang",mus:"creek",mwl:"mirandesisk",mwr:"marwari",my:"burmesisk",myv:"erzia",mzn:"mazanderani",na:"nauru",nap:"napolitansk",naq:"nama",nb:"bokmål",nd:"nord-ndebele",nds:"lågtysk","nds-NL":"lågsaksisk",ne:"nepalsk","new":"newari",ng:"ndonga",nia:"nias",niu:"niuisk",nl:"nederlandsk","nl-BE":"flamsk",nmg:"kwasio",nn:"nynorsk",nnh:"ngiemboon",no:"norsk",nog:"nogai",non:"gammalnorsk",nqo:"n’ko",nr:"sør-ndebele",nso:"nordsotho",nus:"nuer",nv:"navajo",nwc:"klassisk newarisk",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"oksitansk",oj:"ojibwa",om:"oromo",or:"odia",os:"ossetisk",osa:"osage",ota:"ottomansk tyrkisk",pa:"panjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauisk",pcm:"nigeriansk pidgin",peo:"gammalpersisk",phn:"fønikisk",pi:"pali",pl:"polsk",pon:"ponapisk",prg:"prøyssisk",pro:"gammalprovençalsk",ps:"pashto",pt:"portugisisk","pt-BR":"portugisisk (Brasil)","pt-PT":"portugisisk (Portugal)",qu:"quechua",quc:"k’iche",raj:"rajasthani",rap:"rapanui",rar:"rarotongansk",rm:"retoromansk",rn:"rundi",ro:"rumensk","ro-MD":"moldavisk",rof:"rombo",rom:"romani",root:"rot",ru:"russisk",rup:"arumensk",rw:"kinjarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"sakha",sam:"samaritansk arameisk",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardinsk",scn:"siciliansk",sco:"skotsk",sd:"sindhi",se:"nordsamisk",seh:"sena",sel:"selkupisk",ses:"Koyraboro Senni",sg:"sango",sga:"gammalirsk",sh:"serbokroatisk",shi:"tachelhit",shn:"shan",si:"singalesisk",sid:"sidamo",sk:"slovakisk",sl:"slovensk",sm:"samoansk",sma:"sørsamisk",smj:"lulesamisk",smn:"enaresamisk",sms:"skoltesamisk",sn:"shona",snk:"soninke",so:"somali",sog:"sogdisk",sq:"albansk",sr:"serbisk",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sørsotho",su:"sundanesisk",suk:"sukuma",sus:"susu",sux:"sumerisk",sv:"svensk",sw:"swahili","sw-CD":"swahili (Kongo-Kinshasa)",swb:"shimaore",syc:"klassisk syrisk",syr:"syrisk",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadsjikisk",th:"thai",ti:"tigrinja",tig:"tigré",tiv:"tivi",tk:"turkmensk",tkl:"tokelau",tl:"tagalog",tlh:"klingon",tli:"tlingit",tmh:"tamasjek",tn:"tswana",to:"tongansk",tog:"tonga (Nyasa)",tpi:"tok pisin",tr:"tyrkisk",trv:"taroko",ts:"tsonga",tsi:"tsimshian",tt:"tatarisk",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitisk",tyv:"tuvinisk",tzm:"sentral-tamazight",udm:"udmurt",ug:"uigurisk",uga:"ugaritisk",uk:"ukrainsk",umb:"umbundu",ur:"urdu",uz:"usbekisk",ve:"venda",vi:"vietnamesisk",vo:"volapyk",vot:"votisk",vun:"vunjo",wa:"vallonsk",wae:"walsertysk",wal:"wolaytta",war:"waray",was:"washo",wo:"wolof",xal:"kalmykisk",xh:"xhosa",xog:"soga",yap:"yapesisk",yav:"yangben",ybb:"yemba",yi:"jiddisk",yo:"joruba",yue:"kantonesisk",za:"zhuang",zap:"zapotec",zbl:"blissymbol",zen:"zenaga",zgh:"standard marokkansk tamazight",zh:"kinesisk","zh-Hans":"kinesisk (forenkla)","zh-Hant":"kinesisk (tradisjonell)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"kyrillisk",Latn:"latinsk",Arab:"arabisk",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"forenkla",Hant:"tradisjonell"}},no:{rtl:false,languageNames:{},scriptNames:{}},nv:{rtl:false,languageNames:{},scriptNames:{}},pap:{rtl:false,languageNames:{},scriptNames:{}},pl:{rtl:false,languageNames:{aa:"afar",ab:"abchaski",ace:"aceh",ach:"aczoli",ada:"adangme",ady:"adygejski",ae:"awestyjski",aeb:"tunezyjski arabski",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ajnu",ak:"akan",akk:"akadyjski",akz:"alabama",ale:"aleucki",aln:"albański gegijski",alt:"południowoałtajski",am:"amharski",an:"aragoński",ang:"staroangielski",anp:"angika",ar:"arabski","ar-001":"współczesny arabski",arc:"aramejski",arn:"mapudungun",aro:"araona",arp:"arapaho",arq:"algierski arabski",ars:"arabski nadżdyjski",arw:"arawak",ary:"marokański arabski",arz:"egipski arabski",as:"asamski",asa:"asu",ase:"amerykański język migowy",ast:"asturyjski",av:"awarski",avk:"kotava",awa:"awadhi",ay:"ajmara",az:"azerbejdżański",ba:"baszkirski",bal:"beludżi",ban:"balijski",bar:"bawarski",bas:"basaa",bax:"bamum",bbc:"batak toba",bbj:"ghomala",be:"białoruski",bej:"bedża",bem:"bemba",bew:"betawi",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"bułgarski",bgn:"beludżi północny",bho:"bhodżpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalski",bo:"tybetański",bpy:"bisznuprija-manipuri",bqi:"bachtiarski",br:"bretoński",bra:"bradź",brh:"brahui",brx:"bodo",bs:"bośniacki",bss:"akoose",bua:"buriacki",bug:"bugijski",bum:"bulu",byn:"blin",byv:"medumba",ca:"kataloński",cad:"kaddo",car:"karaibski",cay:"kajuga",cch:"atsam",ccp:"czakma",ce:"czeczeński",ceb:"cebuano",cgg:"chiga",ch:"czamorro",chb:"czibcza",chg:"czagatajski",chk:"chuuk",chm:"maryjski",chn:"żargon czinucki",cho:"czoktawski",chp:"czipewiański",chr:"czirokeski",chy:"czejeński",ckb:"sorani",co:"korsykański",cop:"koptyjski",cps:"capiznon",cr:"kri",crh:"krymskotatarski",crs:"kreolski seszelski",cs:"czeski",csb:"kaszubski",cu:"cerkiewnosłowiański",cv:"czuwaski",cy:"walijski",da:"duński",dak:"dakota",dar:"dargwijski",dav:"taita",de:"niemiecki","de-AT":"austriacki niemiecki","de-CH":"szwajcarski wysokoniemiecki",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"dżerma",doi:"dogri",dsb:"dolnołużycki",dtp:"dusun centralny",dua:"duala",dum:"średniowieczny niderlandzki",dv:"malediwski",dyo:"diola",dyu:"diula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emilijski",egy:"staroegipski",eka:"ekajuk",el:"grecki",elx:"elamicki",en:"angielski","en-AU":"australijski angielski","en-CA":"kanadyjski angielski","en-GB":"brytyjski angielski","en-US":"amerykański angielski",enm:"średnioangielski",eo:"esperanto",es:"hiszpański","es-419":"amerykański hiszpański","es-ES":"europejski hiszpański","es-MX":"meksykański hiszpański",esu:"yupik środkowosyberyjski",et:"estoński",eu:"baskijski",ewo:"ewondo",ext:"estremadurski",fa:"perski",fan:"fang",fat:"fanti",ff:"fulani",fi:"fiński",fil:"filipino",fit:"meänkieli",fj:"fidżijski",fo:"farerski",fr:"francuski","fr-CA":"kanadyjski francuski","fr-CH":"szwajcarski francuski",frc:"cajuński",frm:"średniofrancuski",fro:"starofrancuski",frp:"franko-prowansalski",frr:"północnofryzyjski",frs:"wschodniofryzyjski",fur:"friulski",fy:"zachodniofryzyjski",ga:"irlandzki",gaa:"ga",gag:"gagauski",gay:"gayo",gba:"gbaya",gbz:"zaratusztriański dari",gd:"szkocki gaelicki",gez:"gyyz",gil:"gilbertański",gl:"galicyjski",glk:"giliański",gmh:"średnio-wysoko-niemiecki",gn:"guarani",goh:"staro-wysoko-niemiecki",gom:"konkani (Goa)",gon:"gondi",gor:"gorontalo",got:"gocki",grb:"grebo",grc:"starogrecki",gsw:"szwajcarski niemiecki",gu:"gudżarati",guc:"wayúu",gur:"frafra",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hausa",hai:"haida",hak:"hakka",haw:"hawajski",he:"hebrajski",hi:"hindi",hif:"hindi fidżyjskie",hil:"hiligaynon",hit:"hetycki",hmn:"hmong",ho:"hiri motu",hr:"chorwacki",hsb:"górnołużycki",hsn:"xiang",ht:"kreolski haitański",hu:"węgierski",hup:"hupa",hy:"ormiański",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonezyjski",ie:"interlingue",ig:"igbo",ii:"syczuański",ik:"inupiak",ilo:"ilokano",inh:"inguski",io:"ido",is:"islandzki",it:"włoski",iu:"inuktitut",izh:"ingryjski",ja:"japoński",jam:"jamajski",jbo:"lojban",jgo:"ngombe",jmc:"machame",jpr:"judeo-perski",jrb:"judeoarabski",jut:"jutlandzki",jv:"jawajski",ka:"gruziński",kaa:"karakałpacki",kab:"kabylski",kac:"kaczin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardyjski",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kreolski Wysp Zielonego Przylądka",ken:"kenyang",kfo:"koro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"chotański",khq:"koyra chiini",khw:"khowar",ki:"kikuju",kiu:"kirmandżki",kj:"kwanyama",kk:"kazachski",kkj:"kako",kl:"grenlandzki",kln:"kalenjin",km:"khmerski",kmb:"kimbundu",kn:"kannada",ko:"koreański",koi:"komi-permiacki",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karaczajsko-bałkarski",kri:"krio",krj:"kinaraya",krl:"karelski",kru:"kurukh",ks:"kaszmirski",ksb:"sambala",ksf:"bafia",ksh:"gwara kolońska",ku:"kurdyjski",kum:"kumycki",kut:"kutenai",kv:"komi",kw:"kornijski",ky:"kirgiski",la:"łaciński",lad:"ladyński",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luksemburski",lez:"lezgijski",lfn:"Lingua Franca Nova",lg:"ganda",li:"limburski",lij:"liguryjski",liv:"liwski",lkt:"lakota",lmo:"lombardzki",ln:"lingala",lo:"laotański",lol:"mongo",lou:"kreolski luizjański",loz:"lozi",lrc:"luryjski północny",lt:"litewski",ltg:"łatgalski",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luhya",lv:"łotewski",lzh:"chiński klasyczny",lzz:"lazyjski",mad:"madurski",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masajski",mde:"maba",mdf:"moksza",mdr:"mandar",men:"mende",mer:"meru",mfe:"kreolski Mauritiusa",mg:"malgaski",mga:"średnioirlandzki",mgh:"makua",mgo:"meta",mh:"marszalski",mi:"maoryjski",mic:"mikmak",min:"minangkabu",mk:"macedoński",ml:"malajalam",mn:"mongolski",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"zachodniomaryjski",ms:"malajski",mt:"maltański",mua:"mundang",mus:"krik",mwl:"mirandyjski",mwr:"marwari",mwv:"mentawai",my:"birmański",mye:"myene",myv:"erzja",mzn:"mazanderański",na:"nauruański",nan:"minnański",nap:"neapolitański",naq:"nama",nb:"norweski (bokmål)",nd:"ndebele północny",nds:"dolnoniemiecki","nds-NL":"dolnosaksoński",ne:"nepalski","new":"newarski",ng:"ndonga",nia:"nias",niu:"niue",njo:"ao",nl:"niderlandzki","nl-BE":"flamandzki",nmg:"ngumba",nn:"norweski (nynorsk)",nnh:"ngiemboon",no:"norweski",nog:"nogajski",non:"staronordyjski",nov:"novial",nqo:"n’ko",nr:"ndebele południowy",nso:"sotho północny",nus:"nuer",nv:"nawaho",nwc:"newarski klasyczny",ny:"njandża",nym:"niamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzema",oc:"oksytański",oj:"odżibwa",om:"oromo",or:"orija",os:"osetyjski",osa:"osage",ota:"osmańsko-turecki",pa:"pendżabski",pag:"pangasinan",pal:"pahlavi",pam:"pampango",pap:"papiamento",pau:"palau",pcd:"pikardyjski",pcm:"pidżyn nigeryjski",pdc:"pensylwański",pdt:"plautdietsch",peo:"staroperski",pfl:"palatynacki",phn:"fenicki",pi:"palijski",pl:"polski",pms:"piemoncki",pnt:"pontyjski",pon:"ponpejski",prg:"pruski",pro:"staroprowansalski",ps:"paszto",pt:"portugalski","pt-BR":"brazylijski portugalski","pt-PT":"europejski portugalski",qu:"keczua",quc:"kicze",qug:"keczua górski (Chimborazo)",raj:"radźasthani",rap:"rapanui",rar:"rarotonga",rgn:"romagnol",rif:"tarifit",rm:"retoromański",rn:"rundi",ro:"rumuński","ro-MD":"mołdawski",rof:"rombo",rom:"cygański",root:"język rdzenny",rtm:"rotumański",ru:"rosyjski",rue:"rusiński",rug:"roviana",rup:"arumuński",rw:"kinya-ruanda",rwk:"rwa",sa:"sanskryt",sad:"sandawe",sah:"jakucki",sam:"samarytański aramejski",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurasztryjski",sba:"ngambay",sbp:"sangu",sc:"sardyński",scn:"sycylijski",sco:"scots",sd:"sindhi",sdc:"sassarski",sdh:"południowokurdyjski",se:"północnolapoński",see:"seneka",seh:"sena",sei:"seri",sel:"selkupski",ses:"koyraboro senni",sg:"sango",sga:"staroirlandzki",sgs:"żmudzki",sh:"serbsko-chorwacki",shi:"tashelhiyt",shn:"szan",shu:"arabski (Czad)",si:"syngaleski",sid:"sidamo",sk:"słowacki",sl:"słoweński",sli:"dolnośląski",sly:"selayar",sm:"samoański",sma:"południowolapoński",smj:"lule",smn:"inari",sms:"skolt",sn:"shona",snk:"soninke",so:"somalijski",sog:"sogdyjski",sq:"albański",sr:"serbski",srn:"sranan tongo",srr:"serer",ss:"suazi",ssy:"saho",st:"sotho południowy",stq:"fryzyjski saterlandzki",su:"sundajski",suk:"sukuma",sus:"susu",sux:"sumeryjski",sv:"szwedzki",sw:"suahili","sw-CD":"kongijski suahili",swb:"komoryjski",syc:"syriacki",syr:"syryjski",szl:"śląski",ta:"tamilski",tcy:"tulu",te:"telugu",tem:"temne",teo:"ateso",ter:"tereno",tet:"tetum",tg:"tadżycki",th:"tajski",ti:"tigrinia",tig:"tigre",tiv:"tiw",tk:"turkmeński",tkl:"tokelau",tkr:"cachurski",tl:"tagalski",tlh:"klingoński",tli:"tlingit",tly:"tałyski",tmh:"tamaszek",tn:"setswana",to:"tonga",tog:"tonga (Niasa)",tpi:"tok pisin",tr:"turecki",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"cakoński",tsi:"tsimshian",tt:"tatarski",ttt:"tacki",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitański",tyv:"tuwiński",tzm:"tamazight (Atlas Środkowy)",udm:"udmurcki",ug:"ujgurski",uga:"ugarycki",uk:"ukraiński",umb:"umbundu",ur:"urdu",uz:"uzbecki",vai:"wai",ve:"venda",vec:"wenecki",vep:"wepski",vi:"wietnamski",vls:"zachodnioflamandzki",vmf:"meński frankoński",vo:"wolapik",vot:"wotiacki",vro:"võro",vun:"vunjo",wa:"waloński",wae:"walser",wal:"wolayta",war:"waraj",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kałmucki",xh:"khosa",xmf:"megrelski",xog:"soga",yap:"japski",yav:"yangben",ybb:"yemba",yi:"jidysz",yo:"joruba",yrl:"nheengatu",yue:"kantoński",za:"czuang",zap:"zapotecki",zbl:"bliss",zea:"zelandzki",zen:"zenaga",zgh:"standardowy marokański tamazight",zh:"chiński","zh-Hans":"standardowy chiński uproszczony","zh-Hant":"standardowy chiński tradycyjny",zu:"zulu",zun:"zuni",zza:"zazaki"},scriptNames:{Cyrl:"cyrylica",Latn:"łacińskie",Arab:"arabskie",Guru:"gurmukhi",Tfng:"tifinagh (berberski)",Vaii:"vai",Hans:"uproszczone",Hant:"tradycyjne"}},pt:{rtl:false,languageNames:{aa:"afar",ab:"abcázio",ace:"achém",ach:"acoli",ada:"adangme",ady:"adigue",ae:"avéstico",af:"africanês",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadiano",ale:"aleúte",alt:"altai do sul",am:"amárico",an:"aragonês",ang:"inglês antigo",anp:"angika",ar:"árabe","ar-001":"árabe moderno padrão",arc:"aramaico",arn:"mapuche",arp:"arapaho",ars:"árabe do Négede",arw:"arauaqui",as:"assamês",asa:"asu",ast:"asturiano",av:"avaric",awa:"awadhi",ay:"aimará",az:"azerbaijano","az-Arab":"azeri sul",ba:"bashkir",bal:"balúchi",ban:"balinês",bas:"basa",bax:"bamun",bbj:"ghomala",be:"bielorrusso",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"búlgaro",bgn:"balúchi ocidental",bho:"bhojpuri",bi:"bislamá",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalês",bo:"tibetano",br:"bretão",bra:"braj",brx:"bodo",bs:"bósnio",bss:"akoose",bua:"buriat",bug:"buginês",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalão",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"changma",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuquês",chm:"mari",chn:"jargão chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani curdo",co:"córsico",cop:"copta",cr:"cree",crh:"turco da Crimeia",crs:"francês crioulo seselwa",cs:"checo",csb:"kashubian",cu:"eslavo eclesiástico",cv:"chuvash",cy:"galês",da:"dinamarquês",dak:"dacota",dar:"dargwa",dav:"taita",de:"alemão","de-AT":"alemão austríaco","de-CH":"alto alemão suíço",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baixo sorábio",dua:"duala",dum:"holandês médio",dv:"divehi",dyo:"jola-fonyi",dyu:"diúla",dz:"dzonga",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"egípcio clássico",eka:"ekajuk",el:"grego",elx:"elamite",en:"inglês","en-AU":"inglês australiano","en-CA":"inglês canadiano","en-GB":"inglês britânico","en-US":"inglês americano",enm:"inglês médio",eo:"esperanto",es:"espanhol","es-419":"espanhol latino-americano","es-ES":"espanhol europeu","es-MX":"espanhol mexicano",et:"estónio",eu:"basco",ewo:"ewondo",fa:"persa",fan:"fangue",fat:"fanti",ff:"fula",fi:"finlandês",fil:"filipino",fj:"fijiano",fo:"feroês",fr:"francês","fr-CA":"francês canadiano","fr-CH":"francês suíço",frc:"francês cajun",frm:"francês médio",fro:"francês antigo",frr:"frísio setentrional",frs:"frísio oriental",fur:"friulano",fy:"frísico ocidental",ga:"irlandês",gaa:"ga",gag:"gagauz",gay:"gayo",gba:"gbaia",gd:"gaélico escocês",gez:"geʼez",gil:"gilbertês",gl:"galego",gmh:"alto alemão médio",gn:"guarani",goh:"alemão alto antigo",gon:"gondi",gor:"gorontalo",got:"gótico",grb:"grebo",grc:"grego clássico",gsw:"alemão suíço",gu:"guzerate",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"haúça",hai:"haida",hak:"hacá",haw:"havaiano",he:"hebraico",hi:"hindi",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"alto sorábio",hsn:"xiang",ht:"haitiano",hu:"húngaro",hup:"hupa",hy:"arménio",hz:"herero",ia:"interlíngua",iba:"iban",ibb:"ibibio",id:"indonésio",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiaque",ilo:"ilocano",inh:"inguche",io:"ido",is:"islandês",it:"italiano",iu:"inuktitut",ja:"japonês",jbo:"lojban",jgo:"nguemba",jmc:"machame",jpr:"judaico-persa",jrb:"judaico-arábico",jv:"javanês",ka:"georgiano",kaa:"kara-kalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"cabardiano",kbl:"kanembu",kcg:"tyap",kde:"maconde",kea:"crioulo cabo-verdiano",kfo:"koro",kg:"congolês",kha:"khasi",kho:"khotanês",khq:"koyra chiini",ki:"quicuio",kj:"cuanhama",kk:"cazaque",kkj:"kako",kl:"gronelandês",kln:"kalenjin",km:"khmer",kmb:"quimbundo",kn:"canarim",ko:"coreano",koi:"komi-permyak",kok:"concani",kos:"kosraean",kpe:"kpelle",kr:"canúri",krc:"carachaio-bálcaro",krl:"carélio",kru:"kurukh",ks:"caxemira",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"curdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnico",ky:"quirguiz",la:"latim",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburguês",lez:"lezghiano",lg:"ganda",li:"limburguês",lkt:"lacota",ln:"lingala",lo:"laosiano",lol:"mongo",lou:"crioulo de Louisiana",loz:"lozi",lrc:"luri do norte",lt:"lituano",lu:"luba-catanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"letão",mad:"madurês",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassarês",man:"mandinga",mas:"massai",mde:"maba",mdf:"mocsa",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgaxe",mga:"irlandês médio",mgh:"macua",mgo:"meta’",mh:"marshalês",mi:"maori",mic:"miquemaque",min:"minangkabau",mk:"macedónio",ml:"malaiala",mn:"mongol",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marata",ms:"malaio",mt:"maltês",mua:"mundang",mus:"creek",mwl:"mirandês",mwr:"marwari",my:"birmanês",mye:"myene",myv:"erzya",mzn:"mazandarani",na:"nauruano",nan:"min nan",nap:"napolitano",naq:"nama",nb:"norueguês bokmål",nd:"ndebele do norte",nds:"baixo-alemão","nds-NL":"baixo-saxão",ne:"nepalês","new":"newari",ng:"dongo",nia:"nias",niu:"niueano",nl:"neerlandês","nl-BE":"flamengo",nmg:"kwasio",nn:"norueguês nynorsk",nnh:"ngiemboon",no:"norueguês",nog:"nogai",non:"nórdico antigo",nqo:"n’ko",nr:"ndebele do sul",nso:"soto setentrional",nus:"nuer",nv:"navajo",nwc:"newari clássico",ny:"nianja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitano",oj:"ojibwa",om:"oromo",or:"oriya",os:"ossético",osa:"osage",ota:"turco otomano",pa:"panjabi",pag:"língua pangasinesa",pal:"pálavi",pam:"pampango",pap:"papiamento",pau:"palauano",pcm:"pidgin nigeriano",peo:"persa antigo",phn:"fenício",pi:"páli",pl:"polaco",pon:"língua pohnpeica",prg:"prussiano",pro:"provençal antigo",ps:"pastó",pt:"português","pt-BR":"português do Brasil","pt-PT":"português europeu",qu:"quíchua",quc:"quiché",raj:"rajastanês",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romeno","ro-MD":"moldávio",rof:"rombo",rom:"romani",ru:"russo",rup:"aromeno",rw:"quiniaruanda",rwk:"rwa",sa:"sânscrito",sad:"sandawe",sah:"sakha",sam:"aramaico samaritano",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scots",sd:"sindi",sdh:"curdo meridional",se:"sami do norte",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandês antigo",sh:"servo-croata",shi:"tachelhit",shn:"shan",shu:"árabe do Chade",si:"cingalês",sid:"sidamo",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"sami do sul",smj:"sami de Lule",smn:"inari sami",sms:"sami de Skolt",sn:"shona",snk:"soninquê",so:"somali",sog:"sogdiano",sq:"albanês",sr:"sérvio",srn:"surinamês",srr:"serere",ss:"suázi",ssy:"saho",st:"soto do sul",su:"sundanês",suk:"sukuma",sus:"susu",sux:"sumério",sv:"sueco",sw:"suaíli","sw-CD":"suaíli do Congo",swb:"comoriano",syc:"siríaco clássico",syr:"siríaco",ta:"tâmil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tétum",tg:"tajique",th:"tailandês",ti:"tigrínia",tig:"tigré",tk:"turcomano",tkl:"toquelauano",tl:"tagalo",tlh:"klingon",tli:"tlinguite",tmh:"tamaxeque",tn:"tswana",to:"tonga",tog:"tonganês de Nyasa",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tsi:"tsimshiano",tt:"tatar",tum:"tumbuka",tvl:"tuvaluano",tw:"twi",twq:"tasawaq",ty:"taitiano",tyv:"tuviniano",tzm:"tamazight do Atlas Central",udm:"udmurte",ug:"uigur",uga:"ugarítico",uk:"ucraniano",umb:"umbundu",ur:"urdu",uz:"usbeque",ve:"venda",vi:"vietnamita",vo:"volapuque",vot:"vótico",vun:"vunjo",wa:"valão",wae:"walser",wal:"wolaytta",war:"waray",was:"washo",wbp:"warlpiri",wo:"uólofe",wuu:"wu",xal:"kalmyk",xh:"xosa",xog:"soga",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"iídiche",yo:"ioruba",yue:"cantonês",za:"zhuang",zap:"zapoteco",zbl:"símbolos blis",zen:"zenaga",zgh:"tamazight marroquino padrão",zh:"chinês","zh-Hans":"chinês mandarim simplificado","zh-Hant":"chinês mandarim tradicional",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirílico",Latn:"latim",Arab:"árabe",Guru:"gurmuqui",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificado",Hant:"tradicional"}},"pt-BR":{rtl:false,languageNames:{aa:"afar",ab:"abcázio",ace:"achém",ach:"acoli",ada:"adangme",ady:"adigue",ae:"avéstico",af:"africâner",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadiano",ale:"aleúte",alt:"altai meridional",am:"amárico",an:"aragonês",ang:"inglês arcaico",anp:"angika",ar:"árabe","ar-001":"árabe moderno",arc:"aramaico",arn:"mapudungun",arp:"arapaho",ars:"árabe négede",arw:"arauaqui",as:"assamês",asa:"asu",ast:"asturiano",av:"avárico",awa:"awadhi",ay:"aimará",az:"azerbaijano","az-Arab":"azeri sul",ba:"bashkir",bal:"balúchi",ban:"balinês",bas:"basa",bax:"bamum",bbj:"ghomala’",be:"bielorrusso",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"búlgaro",bgn:"balúchi ocidental",bho:"bhojpuri",bi:"bislamá",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetano",br:"bretão",bra:"braj",brx:"bodo",bs:"bósnio",bss:"akoose",bua:"buriato",bug:"buginês",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalão",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukese",chm:"mari",chn:"jargão Chinook",cho:"choctaw",chp:"chipewyan",chr:"cheroqui",chy:"cheiene",ckb:"curdo central",co:"corso",cop:"copta",cr:"cree",crh:"turco da Crimeia",crs:"crioulo francês seichelense",cs:"tcheco",csb:"kashubian",cu:"eslavo eclesiástico",cv:"tchuvache",cy:"galês",da:"dinamarquês",dak:"dacota",dar:"dargwa",dav:"taita",de:"alemão","de-AT":"alemão (Áustria)","de-CH":"alto alemão (Suíça)",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baixo sorábio",dua:"duala",dum:"holandês médio",dv:"divehi",dyo:"jola-fonyi",dyu:"diúla",dz:"dzonga",dzg:"dazaga",ebu:"embu",ee:"eve",efi:"efique",egy:"egípcio arcaico",eka:"ekajuk",el:"grego",elx:"elamite",en:"inglês","en-AU":"inglês (Austrália)","en-CA":"inglês (Canadá)","en-GB":"inglês (Reino Unido)","en-US":"inglês (Estados Unidos)",enm:"inglês médio",eo:"esperanto",es:"espanhol","es-419":"espanhol (América Latina)","es-ES":"espanhol (Espanha)","es-MX":"espanhol (México)",et:"estoniano",eu:"basco",ewo:"ewondo",fa:"persa",fan:"fangue",fat:"fanti",ff:"fula",fi:"finlandês",fil:"filipino",fj:"fijiano",fo:"feroês",fon:"fom",fr:"francês","fr-CA":"francês (Canadá)","fr-CH":"francês (Suíça)",frc:"francês cajun",frm:"francês médio",fro:"francês arcaico",frr:"frísio setentrional",frs:"frisão oriental",fur:"friulano",fy:"frísio ocidental",ga:"irlandês",gaa:"ga",gag:"gagauz",gay:"gayo",gba:"gbaia",gd:"gaélico escocês",gez:"geez",gil:"gilbertês",gl:"galego",gmh:"alto alemão médio",gn:"guarani",goh:"alemão arcaico alto",gon:"gondi",gor:"gorontalo",got:"gótico",grb:"grebo",grc:"grego arcaico",gsw:"alemão (Suíça)",gu:"guzerate",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hauçá",hai:"haida",hak:"hacá",haw:"havaiano",he:"hebraico",hi:"híndi",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"alto sorábio",hsn:"xiang",ht:"haitiano",hu:"húngaro",hup:"hupa",hy:"armênio",hz:"herero",ia:"interlíngua",iba:"iban",ibb:"ibibio",id:"indonésio",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiaque",ilo:"ilocano",inh:"inguche",io:"ido",is:"islandês",it:"italiano",iu:"inuktitut",ja:"japonês",jbo:"lojban",jgo:"nguemba",jmc:"machame",jpr:"judaico-persa",jrb:"judaico-arábico",jv:"javanês",ka:"georgiano",kaa:"kara-kalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardiano",kbl:"kanembu",kcg:"tyap",kde:"maconde",kea:"crioulo cabo-verdiano",kfo:"koro",kg:"congolês",kha:"khasi",kho:"khotanês",khq:"koyra chiini",ki:"quicuio",kj:"cuanhama",kk:"cazaque",kkj:"kako",kl:"groenlandês",kln:"kalenjin",km:"khmer",kmb:"quimbundo",kn:"canarim",ko:"coreano",koi:"komi-permyak",kok:"concani",kos:"kosraean",kpe:"kpelle",kr:"canúri",krc:"karachay-balkar",krl:"carélio",kru:"kurukh",ks:"caxemira",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"curdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnico",ky:"quirguiz",la:"latim",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburguês",lez:"lezgui",lg:"luganda",li:"limburguês",lkt:"lacota",ln:"lingala",lo:"laosiano",lol:"mongo",lou:"crioulo da Louisiana",loz:"lozi",lrc:"luri setentrional",lt:"lituano",lu:"luba-catanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"letão",mad:"madurês",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandinga",mas:"massai",mde:"maba",mdf:"mocsa",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgaxe",mga:"irlandês médio",mgh:"macua",mgo:"meta’",mh:"marshalês",mi:"maori",mic:"miquemaque",min:"minangkabau",mk:"macedônio",ml:"malaiala",mn:"mongol",mnc:"manchu",mni:"manipuri",moh:"moicano",mos:"mossi",mr:"marati",ms:"malaio",mt:"maltês",mua:"mundang",mus:"creek",mwl:"mirandês",mwr:"marwari",my:"birmanês",mye:"myene",myv:"erzya",mzn:"mazandarani",na:"nauruano",nan:"min nan",nap:"napolitano",naq:"nama",nb:"bokmål norueguês",nd:"ndebele do norte",nds:"baixo alemão","nds-NL":"baixo saxão",ne:"nepalês","new":"newari",ng:"dongo",nia:"nias",niu:"niueano",nl:"holandês","nl-BE":"flamengo",nmg:"kwasio",nn:"nynorsk norueguês",nnh:"ngiemboon",no:"norueguês",nog:"nogai",non:"nórdico arcaico",nqo:"n’ko",nr:"ndebele do sul",nso:"soto setentrional",nus:"nuer",nv:"navajo",nwc:"newari clássico",ny:"nianja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitânico",oj:"ojibwa",om:"oromo",or:"oriá",os:"osseto",osa:"osage",ota:"turco otomano",pa:"panjabi",pag:"pangasinã",pal:"pálavi",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin nigeriano",peo:"persa arcaico",phn:"fenício",pi:"páli",pl:"polonês",pon:"pohnpeiano",prg:"prussiano",pro:"provençal arcaico",ps:"pashto",pt:"português","pt-BR":"português (Brasil)","pt-PT":"português (Portugal)",qu:"quíchua",quc:"quiché",raj:"rajastani",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romeno","ro-MD":"moldávio",rof:"rombo",rom:"romani",root:"raiz",ru:"russo",rup:"aromeno",rw:"quiniaruanda",rwk:"rwa",sa:"sânscrito",sad:"sandawe",sah:"sakha",sam:"aramaico samaritano",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scots",sd:"sindi",sdh:"curdo meridional",se:"sami setentrional",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandês arcaico",sh:"servo-croata",shi:"tachelhit",shn:"shan",shu:"árabe chadiano",si:"cingalês",sid:"sidamo",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"sami meridional",smj:"sami de Lule",smn:"sami de Inari",sms:"sami de Skolt",sn:"xona",snk:"soninquê",so:"somali",sog:"sogdiano",sq:"albanês",sr:"sérvio",srn:"surinamês",srr:"serere",ss:"suázi",ssy:"saho",st:"soto do sul",su:"sundanês",suk:"sukuma",sus:"susu",sux:"sumério",sv:"sueco",sw:"suaíli","sw-CD":"suaíli do Congo",swb:"comoriano",syc:"siríaco clássico",syr:"siríaco",ta:"tâmil",te:"télugo",tem:"timne",teo:"teso",ter:"tereno",tet:"tétum",tg:"tadjique",th:"tailandês",ti:"tigrínia",tig:"tigré",tk:"turcomeno",tkl:"toquelauano",tl:"tagalo",tlh:"klingon",tli:"tlinguite",tmh:"tamaxeque",tn:"tswana",to:"tonganês",tog:"tonganês de Nyasa",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tsi:"tsimshiano",tt:"tártaro",tum:"tumbuka",tvl:"tuvaluano",tw:"twi",twq:"tasawaq",ty:"taitiano",tyv:"tuviniano",tzm:"tamazirte do Atlas Central",udm:"udmurte",ug:"uigur",uga:"ugarítico",uk:"ucraniano",umb:"umbundu",ur:"urdu",uz:"uzbeque",ve:"venda",vi:"vietnamita",vo:"volapuque",vot:"vótico",vun:"vunjo",wa:"valão",wae:"walser",wal:"wolaytta",war:"waray",was:"washo",wbp:"warlpiri",wo:"uolofe",wuu:"wu",xal:"kalmyk",xh:"xhosa",xog:"lusoga",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"iídiche",yo:"iorubá",yue:"cantonês",za:"zhuang",zap:"zapoteco",zbl:"símbolos blis",zen:"zenaga",zgh:"tamazirte marroqino padrão",zh:"chinês","zh-Hans":"chinês mandarim (simplificado)","zh-Hant":"chinês mandarim (tradicional)",zu:"zulu",zun:"zunhi",zza:"zazaki"},scriptNames:{Cyrl:"cirílico",Latn:"latim",Arab:"árabe",Guru:"gurmuqui",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificado",Hant:"tradicional"}},rm:{rtl:false,languageNames:{aa:"afar",ab:"abchasian",ace:"aceh",ach:"acoli",ada:"andangme",ady:"adygai",ae:"avestic",af:"afrikaans",afh:"afrihili",ain:"ainu",ak:"akan",akk:"accadic",ale:"aleutic",alt:"altaic dal sid",am:"amaric",an:"aragonais",ang:"englais vegl",anp:"angika",ar:"arab","ar-001":"arab (mund)",arc:"arameic",arn:"araucanic",arp:"arapaho",arw:"arawak",as:"assami",ast:"asturian",av:"avaric",awa:"awadhi",ay:"aymara",az:"aserbeidschanic",ba:"baschkir",bal:"belutschi",ban:"balinais",bas:"basaa",be:"bieloruss",bej:"bedscha",bem:"bemba",bg:"bulgar",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bla:"siksika",bm:"bambara",bn:"bengal",bo:"tibetan",br:"breton",bra:"braj",bs:"bosniac",bua:"buriat",bug:"bugi",byn:"blin",ca:"catalan",cad:"caddo",car:"caribic",cch:"atsam",ce:"tschetschen",ceb:"cebuano",ch:"chamorro",chb:"chibcha",chg:"tschagataic",chk:"chuukais",chm:"mari",chn:"patuà chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",co:"cors",cop:"coptic",cr:"cree",crh:"tirc crimean",cs:"tschec",csb:"kaschubic",cu:"slav da baselgia",cv:"tschuvasch",cy:"kimric",da:"danais",dak:"dakota",dar:"dargwa",de:"tudestg","de-AT":"tudestg austriac","de-CH":"tudestg (Svizra)",del:"delaware",den:"slavey",dgr:"dogrib",din:"dinka",doi:"dogri",dsb:"bass sorb",dua:"duala",dum:"ollandais mesaun",dv:"maledivic",dyu:"diula",dz:"dzongkha",ee:"ewe",efi:"efik",egy:"egipzian vegl",eka:"ekajuk",el:"grec",elx:"elamitic",en:"englais","en-AU":"englais australian","en-CA":"englais canadais","en-GB":"englais britannic","en-US":"englais american",enm:"englais mesaun",eo:"esperanto",es:"spagnol","es-419":"spagnol latinamerican","es-ES":"spagnol iberic","es-MX":"spagnol (Mexico)",et:"eston",eu:"basc",ewo:"ewondo",fa:"persian",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandais",fil:"filippino",fj:"fidschian",fo:"ferrais",fr:"franzos","fr-CA":"franzos canadais","fr-CH":"franzos svizzer",frm:"franzos mesaun",fro:"franzos vegl",frr:"fris dal nord",frs:"fris da l’ost",fur:"friulan",fy:"fris",ga:"irlandais",gaa:"ga",gay:"gayo",gba:"gbaya",gd:"gaelic scot",gez:"geez",gil:"gilbertais",gl:"galician",gmh:"tudestg mesaun",gn:"guarani",goh:"vegl tudestg da scrittira",gon:"gondi",gor:"gorontalo",got:"gotic",grb:"grebo",grc:"grec vegl",gsw:"tudestg svizzer",gu:"gujarati",gv:"manx",gwi:"gwichʼin",ha:"haussa",hai:"haida",haw:"hawaian",he:"ebraic",hi:"hindi",hil:"hiligaynon",hit:"ettitic",hmn:"hmong",ho:"hiri motu",hr:"croat",hsb:"aut sorb",ht:"haitian",hu:"ungarais",hup:"hupa",hy:"armen",hz:"herero",ia:"interlingua",iba:"iban",id:"indonais",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiak",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandais",it:"talian",iu:"inuktitut",ja:"giapunais",jbo:"lojban",jpr:"giudaic-persian",jrb:"giudaic-arab",jv:"javanais",ka:"georgian",kaa:"karakalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardic",kcg:"tyap",kfo:"koro",kg:"kongo",kha:"khasi",kho:"khotanais",ki:"kikuyu",kj:"kuanyama",kk:"casac",kl:"grönlandais",km:"cambodschan",kmb:"kimbundu",kn:"kannada",ko:"corean",kok:"konkani",kos:"kosraean",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"carelian",kru:"kurukh",ks:"kashmiri",ku:"curd",kum:"kumuk",kut:"kutenai",kv:"komi",kw:"cornic",ky:"kirghis",la:"latin",lad:"ladino",lah:"lahnda",lam:"lamba",lb:"luxemburgais",lez:"lezghian",lg:"ganda",li:"limburgais",ln:"lingala",lo:"laot",lol:"lomongo",loz:"lozi",lt:"lituan",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",lv:"letton",mad:"madurais",mag:"magahi",mai:"maithili",mak:"makassar",man:"mandingo",mas:"masai",mdf:"moksha",mdr:"mandar",men:"mende",mg:"malagassi",mga:"irlandais mesaun",mh:"marschallais",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedon",ml:"malayalam",mn:"mongolic",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malaic",mt:"maltais",mus:"creek",mwl:"mirandais",mwr:"marwari",my:"birman",myv:"erzya",na:"nauru",nap:"neapolitan",nb:"norvegais bokmål",nd:"ndebele dal nord",nds:"bass tudestg","nds-NL":"bass tudestg (Pajais Bass)",ne:"nepalais","new":"newari",ng:"ndonga",nia:"nias",niu:"niue",nl:"ollandais","nl-BE":"flam",nn:"norvegiais nynorsk",no:"norvegiais",nog:"nogai",non:"nordic vegl",nqo:"n’ko",nr:"ndebele dal sid",nso:"sotho dal nord",nv:"navajo",nwc:"newari classic",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitan",oj:"ojibwa",om:"oromo",or:"oriya",os:"ossetic",osa:"osage",ota:"tirc ottoman",pa:"punjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palau",peo:"persian vegl",phn:"fenizian",pi:"pali",pl:"polac",pon:"ponapean",pro:"provenzal vegl",ps:"paschto",pt:"portugais","pt-BR":"portugais brasilian","pt-PT":"portugais iberian",qu:"quechua",raj:"rajasthani",rap:"rapanui",rar:"rarotonga",rm:"rumantsch",rn:"rundi",ro:"rumen","ro-MD":"moldav",rom:"romani",ru:"russ",rup:"aromunic",rw:"kinyarwanda",sa:"sanscrit",sad:"sandawe",sah:"jakut",sam:"arameic samaritan",sas:"sasak",sat:"santali",sc:"sard",scn:"sicilian",sco:"scot",sd:"sindhi",se:"sami dal nord",sel:"selkup",sg:"sango",sga:"irlandais vegl",sh:"serbo-croat",shn:"shan",si:"singalais",sid:"sidamo",sk:"slovac",sl:"sloven",sm:"samoan",sma:"sami dal sid",smj:"sami lule",smn:"sami inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somali",sog:"sogdian",sq:"albanais",sr:"serb",srn:"sranan tongo",srr:"serer",ss:"swazi",st:"sotho dal sid",su:"sundanais",suk:"sukuma",sus:"susu",sux:"sumeric",sv:"svedais",sw:"suahili","sw-CD":"suahili (Republica Democratica dal Congo)",syc:"siric classic",syr:"siric",ta:"tamil",te:"telugu",tem:"temne",ter:"tereno",tet:"tetum",tg:"tadjik",th:"tailandais",ti:"tigrinya",tig:"tigre",tk:"turkmen",tkl:"tokelau",tl:"tagalog",tlh:"klingonic",tli:"tlingit",tmh:"tamasheq",tn:"tswana",to:"tonga",tog:"lingua tsonga",tpi:"tok pisin",tr:"tirc",ts:"tsonga",tsi:"tsimshian",tt:"tatar",tum:"tumbuka",tvl:"tuvalu",tw:"twi",ty:"tahitian",tyv:"tuvinian",udm:"udmurt",ug:"uiguric",uga:"ugaritic",uk:"ucranais",umb:"mbundu",ur:"urdu",uz:"usbec",ve:"venda",vi:"vietnamais",vo:"volapuk",vot:"votic",wa:"vallon",wal:"walamo",war:"waray",was:"washo",wo:"wolof",xal:"kalmuk",xh:"xhosa",yap:"yapais",yi:"jiddic",yo:"yoruba",za:"zhuang",zap:"zapotec",zbl:"simbols da Bliss",zen:"zenaga",zh:"chinais","zh-Hans":"chinais (scrittira chinaisa simplifitgada)","zh-Hant":"chinais (scrittira chinaisa tradiziunala)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirillic",Latn:"latin",Arab:"arab",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vaii",Hans:"scrittira chinaisa simplifitgada",Hant:"scrittira chinaisa tradiziunala"}},ro:{rtl:false,languageNames:{aa:"afar",ab:"abhază",ace:"aceh",ach:"acoli",ada:"adangme",ady:"adyghe",ae:"avestană",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadiană",ale:"aleută",alt:"altaică meridională",am:"amharică",an:"aragoneză",ang:"engleză veche",anp:"angika",ar:"arabă","ar-001":"arabă standard modernă",arc:"aramaică",arn:"mapuche",arp:"arapaho",ars:"arabă najdi",arw:"arawak",as:"asameză",asa:"asu",ast:"asturiană",av:"avară",awa:"awadhi",ay:"aymara",az:"azeră",ba:"bașkiră",bal:"baluchi",ban:"balineză",bas:"basaa",bax:"bamun",bbj:"ghomala",be:"belarusă",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bulgară",bgn:"baluchi occidentală",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengaleză",bo:"tibetană",br:"bretonă",bra:"braj",brx:"bodo",bs:"bosniacă",bss:"akoose",bua:"buriat",bug:"bugineză",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalană",cad:"caddo",car:"carib",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"cecenă",ceb:"cebuană",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukese",chm:"mari",chn:"jargon chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"kurdă centrală",co:"corsicană",cop:"coptă",cr:"cree",crh:"turcă crimeeană",crs:"creolă franceză seselwa",cs:"cehă",csb:"cașubiană",cu:"slavonă",cv:"ciuvașă",cy:"galeză",da:"daneză",dak:"dakota",dar:"dargwa",dav:"taita",de:"germană","de-AT":"germană (Austria)","de-CH":"germană standard (Elveția)",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"sorabă de jos",dua:"duala",dum:"neerlandeză medie",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"egipteană veche",eka:"ekajuk",el:"greacă",elx:"elamită",en:"engleză","en-AU":"engleză (Australia)","en-CA":"engleză (Canada)","en-GB":"engleză (Regatul Unit)","en-US":"engleză (Statele Unite ale Americii)",enm:"engleză medie",eo:"esperanto",es:"spaniolă","es-419":"spaniolă (America Latină)","es-ES":"spaniolă (Europa)","es-MX":"spaniolă (Mexic)",et:"estonă",eu:"bască",ewo:"ewondo",fa:"persană",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandeză",fil:"filipineză",fj:"fijiană",fo:"faroeză",fr:"franceză","fr-CA":"franceză (Canada)","fr-CH":"franceză (Elveția)",frc:"franceză cajun",frm:"franceză medie",fro:"franceză veche",frr:"frizonă nordică",frs:"frizonă orientală",fur:"friulană",fy:"frizonă occidentală",ga:"irlandeză",gaa:"ga",gag:"găgăuză",gan:"chineză gan",gay:"gayo",gba:"gbaya",gd:"gaelică scoțiană",gez:"geez",gil:"gilbertină",gl:"galiciană",gmh:"germană înaltă medie",gn:"guarani",goh:"germană înaltă veche",gon:"gondi",gor:"gorontalo",got:"gotică",grb:"grebo",grc:"greacă veche",gsw:"germană (Elveția)",gu:"gujarati",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hausa",hai:"haida",hak:"chineză hakka",haw:"hawaiiană",he:"ebraică",hi:"hindi",hil:"hiligaynon",hit:"hitită",hmn:"hmong",ho:"hiri motu",hr:"croată",hsb:"sorabă de sus",hsn:"chineză xiang",ht:"haitiană",hu:"maghiară",hup:"hupa",hy:"armeană",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indoneziană",ie:"interlingue",ig:"igbo",ii:"yi din Sichuan",ik:"inupiak",ilo:"iloko",inh:"ingușă",io:"ido",is:"islandeză",it:"italiană",iu:"inuktitut",ja:"japoneză",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"iudeo-persană",jrb:"iudeo-arabă",jv:"javaneză",ka:"georgiană",kaa:"karakalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardian",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"congoleză",kha:"khasi",kho:"khotaneză",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazahă",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"khmeră",kmb:"kimbundu",kn:"kannada",ko:"coreeană",koi:"komi-permiak",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karaceai-balkar",krl:"kareliană",kru:"kurukh",ks:"cașmiră",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdă",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"cornică",ky:"kârgâză",la:"latină",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgheză",lez:"lezghian",lg:"ganda",li:"limburgheză",lkt:"lakota",ln:"lingala",lo:"laoțiană",lol:"mongo",lou:"creolă (Louisiana)",loz:"lozi",lrc:"luri de nord",lt:"lituaniană",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letonă",mad:"madureză",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgașă",mga:"irlandeză medie",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalleză",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedoneană",ml:"malayalam",mn:"mongolă",mnc:"manciuriană",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malaeză",mt:"malteză",mua:"mundang",mus:"creek",mwl:"mirandeză",mwr:"marwari",my:"birmană",mye:"myene",myv:"erzya",mzn:"mazanderani",na:"nauru",nan:"chineză min nan",nap:"napolitană",naq:"nama",nb:"norvegiană bokmål",nd:"ndebele de nord",nds:"germana de jos","nds-NL":"saxona de jos",ne:"nepaleză","new":"newari",ng:"ndonga",nia:"nias",niu:"niueană",nl:"neerlandeză","nl-BE":"flamandă",nmg:"kwasio",nn:"norvegiană nynorsk",nnh:"ngiemboon",no:"norvegiană",nog:"nogai",non:"nordică veche",nqo:"n’ko",nr:"ndebele de sud",nso:"sotho de nord",nus:"nuer",nv:"navajo",nwc:"newari clasică",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitană",oj:"ojibwa",om:"oromo",or:"odia",os:"osetă",osa:"osage",ota:"turcă otomană",pa:"punjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauană",pcm:"pidgin nigerian",peo:"persană veche",phn:"feniciană",pi:"pali",pl:"poloneză",pon:"pohnpeiană",prg:"prusacă",pro:"provensală veche",ps:"paștună",pt:"portugheză","pt-BR":"portugheză (Brazilia)","pt-PT":"portugheză (Europa)",qu:"quechua",quc:"quiché",raj:"rajasthani",rap:"rapanui",rar:"rarotongan",rm:"romanșă",rn:"kirundi",ro:"română","ro-MD":"română (Republica Moldova)",rof:"rombo",rom:"romani",ru:"rusă",rup:"aromână",rw:"kinyarwanda",rwk:"rwa",sa:"sanscrită",sad:"sandawe",sah:"sakha",sam:"aramaică samariteană",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardiniană",scn:"siciliană",sco:"scots",sd:"sindhi",sdh:"kurdă de sud",se:"sami de nord",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro Senni",sg:"sango",sga:"irlandeză veche",sh:"sârbo-croată",shi:"tachelhit",shn:"shan",shu:"arabă ciadiană",si:"singhaleză",sid:"sidamo",sk:"slovacă",sl:"slovenă",sm:"samoană",sma:"sami de sud",smj:"sami lule",smn:"sami inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somaleză",sog:"sogdien",sq:"albaneză",sr:"sârbă",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sesotho",su:"sundaneză",suk:"sukuma",sus:"susu",sux:"sumeriană",sv:"suedeză",sw:"swahili","sw-CD":"swahili (R.D. Congo)",swb:"comoreză",syc:"siriacă clasică",syr:"siriacă",ta:"tamilă",te:"telugu",tem:"timne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadjică",th:"thailandeză",ti:"tigrină",tig:"tigre",tk:"turkmenă",tkl:"tokelau",tl:"tagalog",tlh:"klingoniană",tli:"tlingit",tmh:"tamashek",tn:"setswana",to:"tongană",tog:"nyasa tonga",tpi:"tok pisin",tr:"turcă",trv:"taroko",ts:"tsonga",tsi:"tsimshian",tt:"tătară",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitiană",tyv:"tuvană",tzm:"tamazight din Altasul Central",udm:"udmurt",ug:"uigură",uga:"ugaritică",uk:"ucraineană",umb:"umbundu",ur:"urdu",uz:"uzbecă",ve:"venda",vi:"vietnameză",vo:"volapuk",vot:"votică",vun:"vunjo",wa:"valonă",wae:"walser",wal:"wolaita",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"chineză wu",xal:"calmucă",xh:"xhosa",xog:"soga",yap:"yapeză",yav:"yangben",ybb:"yemba",yi:"idiș",yo:"yoruba",yue:"cantoneză",za:"zhuang",zap:"zapotecă",zbl:"simboluri Bilss",zen:"zenaga",zgh:"tamazight standard marocană",zh:"chineză","zh-Hans":"chineză mandarină simplificată","zh-Hant":"chineză mandarină tradițională",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"chirilică",Latn:"latină",Arab:"arabă",Guru:"gurmukhi",Tfng:"berberă",Hans:"simplificată",Hant:"tradițională"}},ru:{rtl:false,languageNames:{aa:"афарский",ab:"абхазский",ace:"ачехский",ach:"ачоли",ada:"адангме",ady:"адыгейский",ae:"авестийский",af:"африкаанс",afh:"африхили",agq:"агем",ain:"айнский",ak:"акан",akk:"аккадский",ale:"алеутский",alt:"южноалтайский",am:"амхарский",an:"арагонский",ang:"староанглийский",anp:"ангика",ar:"арабский","ar-001":"арабский литературный",arc:"арамейский",arn:"мапуче",arp:"арапахо",ars:"недждийский арабский",arw:"аравакский",as:"ассамский",asa:"асу",ast:"астурийский",av:"аварский",awa:"авадхи",ay:"аймара",az:"азербайджанский",ba:"башкирский",bal:"белуджский",ban:"балийский",bas:"баса",bax:"бамум",bbj:"гомала",be:"белорусский",bej:"беджа",bem:"бемба",bez:"бена",bfd:"бафут",bg:"болгарский",bgn:"западный белуджский",bho:"бходжпури",bi:"бислама",bik:"бикольский",bin:"бини",bkm:"ком",bla:"сиксика",bm:"бамбара",bn:"бенгальский",bo:"тибетский",br:"бретонский",bra:"брауи",brx:"бодо",bs:"боснийский",bss:"акоосе",bua:"бурятский",bug:"бугийский",bum:"булу",byn:"билин",byv:"медумба",ca:"каталанский",cad:"каддо",car:"кариб",cay:"кайюга",cch:"атсам",ccp:"чакма",ce:"чеченский",ceb:"себуано",cgg:"кига",ch:"чаморро",chb:"чибча",chg:"чагатайский",chk:"чукотский",chm:"марийский",chn:"чинук жаргон",cho:"чоктавский",chp:"чипевьян",chr:"чероки",chy:"шайенский",ckb:"сорани",co:"корсиканский",cop:"коптский",cr:"кри",crh:"крымско-татарский",crs:"сейшельский креольский",cs:"чешский",csb:"кашубский",cu:"церковнославянский",cv:"чувашский",cy:"валлийский",da:"датский",dak:"дакота",dar:"даргинский",dav:"таита",de:"немецкий","de-AT":"австрийский немецкий","de-CH":"литературный швейцарский немецкий",del:"делаварский",den:"слейви",dgr:"догриб",din:"динка",dje:"джерма",doi:"догри",dsb:"нижнелужицкий",dua:"дуала",dum:"средненидерландский",dv:"мальдивский",dyo:"диола-фоньи",dyu:"диула",dz:"дзонг-кэ",dzg:"даза",ebu:"эмбу",ee:"эве",efi:"эфик",egy:"древнеегипетский",eka:"экаджук",el:"греческий",elx:"эламский",en:"английский","en-AU":"австралийский английский","en-CA":"канадский английский","en-GB":"британский английский","en-US":"американский английский",enm:"среднеанглийский",eo:"эсперанто",es:"испанский","es-419":"латиноамериканский испанский","es-ES":"европейский испанский","es-MX":"мексиканский испанский",et:"эстонский",eu:"баскский",ewo:"эвондо",fa:"персидский",fan:"фанг",fat:"фанти",ff:"фулах",fi:"финский",fil:"филиппинский",fj:"фиджи",fo:"фарерский",fon:"фон",fr:"французский","fr-CA":"канадский французский","fr-CH":"швейцарский французский",frc:"каджунский французский",frm:"среднефранцузский",fro:"старофранцузский",frr:"северный фризский",frs:"восточный фризский",fur:"фриульский",fy:"западнофризский",ga:"ирландский",gaa:"га",gag:"гагаузский",gan:"гань",gay:"гайо",gba:"гбая",gd:"гэльский",gez:"геэз",gil:"гилбертский",gl:"галисийский",gmh:"средневерхненемецкий",gn:"гуарани",goh:"древневерхненемецкий",gon:"гонди",gor:"горонтало",got:"готский",grb:"гребо",grc:"древнегреческий",gsw:"швейцарский немецкий",gu:"гуджарати",guz:"гусии",gv:"мэнский",gwi:"гвичин",ha:"хауса",hai:"хайда",hak:"хакка",haw:"гавайский",he:"иврит",hi:"хинди",hil:"хилигайнон",hit:"хеттский",hmn:"хмонг",ho:"хиримоту",hr:"хорватский",hsb:"верхнелужицкий",hsn:"сян",ht:"гаитянский",hu:"венгерский",hup:"хупа",hy:"армянский",hz:"гереро",ia:"интерлингва",iba:"ибанский",ibb:"ибибио",id:"индонезийский",ie:"интерлингве",ig:"игбо",ii:"носу",ik:"инупиак",ilo:"илоко",inh:"ингушский",io:"идо",is:"исландский",it:"итальянский",iu:"инуктитут",ja:"японский",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"еврейско-персидский",jrb:"еврейско-арабский",jv:"яванский",ka:"грузинский",kaa:"каракалпакский",kab:"кабильский",kac:"качинский",kaj:"каджи",kam:"камба",kaw:"кави",kbd:"кабардинский",kbl:"канембу",kcg:"тьяп",kde:"маконде",kea:"кабувердьяну",kfo:"коро",kg:"конго",kha:"кхаси",kho:"хотанский",khq:"койра чиини",ki:"кикуйю",kj:"кунама",kk:"казахский",kkj:"како",kl:"гренландский",kln:"календжин",km:"кхмерский",kmb:"кимбунду",kn:"каннада",ko:"корейский",koi:"коми-пермяцкий",kok:"конкани",kos:"косраенский",kpe:"кпелле",kr:"канури",krc:"карачаево-балкарский",krl:"карельский",kru:"курух",ks:"кашмири",ksb:"шамбала",ksf:"бафия",ksh:"кёльнский",ku:"курдский",kum:"кумыкский",kut:"кутенаи",kv:"коми",kw:"корнский",ky:"киргизский",la:"латинский",lad:"ладино",lag:"ланго",lah:"лахнда",lam:"ламба",lb:"люксембургский",lez:"лезгинский",lg:"ганда",li:"лимбургский",lkt:"лакота",ln:"лингала",lo:"лаосский",lol:"монго",lou:"луизианский креольский",loz:"лози",lrc:"севернолурский",lt:"литовский",lu:"луба-катанга",lua:"луба-лулуа",lui:"луисеньо",lun:"лунда",luo:"луо",lus:"мизо",luy:"лухья",lv:"латышский",mad:"мадурский",maf:"мафа",mag:"магахи",mai:"майтхили",mak:"макассарский",man:"мандинго",mas:"масаи",mde:"маба",mdf:"мокшанский",mdr:"мандарский",men:"менде",mer:"меру",mfe:"маврикийский креольский",mg:"малагасийский",mga:"среднеирландский",mgh:"макуа-меетто",mgo:"мета",mh:"маршалльский",mi:"маори",mic:"микмак",min:"минангкабау",mk:"македонский",ml:"малаялам",mn:"монгольский",mnc:"маньчжурский",mni:"манипурский",moh:"мохаук",mos:"моси",mr:"маратхи",ms:"малайский",mt:"мальтийский",mua:"мунданг",mus:"крик",mwl:"мирандский",mwr:"марвари",my:"бирманский",mye:"миене",myv:"эрзянский",mzn:"мазандеранский",na:"науру",nan:"миньнань",nap:"неаполитанский",naq:"нама",nb:"норвежский букмол",nd:"северный ндебеле",nds:"нижненемецкий","nds-NL":"нижнесаксонский",ne:"непальский","new":"неварский",ng:"ндонга",nia:"ниас",niu:"ниуэ",nl:"нидерландский","nl-BE":"фламандский",nmg:"квасио",nn:"нюнорск",nnh:"нгиембунд",no:"норвежский",nog:"ногайский",non:"старонорвежский",nqo:"нко",nr:"южный ндебеле",nso:"северный сото",nus:"нуэр",nv:"навахо",nwc:"классический невари",ny:"ньянджа",nym:"ньямвези",nyn:"ньянколе",nyo:"ньоро",nzi:"нзима",oc:"окситанский",oj:"оджибва",om:"оромо",or:"ория",os:"осетинский",osa:"оседжи",ota:"старотурецкий",pa:"панджаби",pag:"пангасинан",pal:"пехлевийский",pam:"пампанга",pap:"папьяменто",pau:"палау",pcm:"нигерийско-креольский",peo:"староперсидский",phn:"финикийский",pi:"пали",pl:"польский",pon:"понапе",prg:"прусский",pro:"старопровансальский",ps:"пушту",pt:"португальский","pt-BR":"бразильский португальский","pt-PT":"европейский португальский",qu:"кечуа",quc:"киче",raj:"раджастхани",rap:"рапануйский",rar:"раротонга",rm:"романшский",rn:"рунди",ro:"румынский","ro-MD":"молдавский",rof:"ромбо",rom:"цыганский",root:"праязык",ru:"русский",rup:"арумынский",rw:"киньяруанда",rwk:"руанда",sa:"санскрит",sad:"сандаве",sah:"саха",sam:"самаритянский арамейский",saq:"самбуру",sas:"сасакский",sat:"сантали",sba:"нгамбайский",sbp:"сангу",sc:"сардинский",scn:"сицилийский",sco:"шотландский",sd:"синдхи",sdh:"южнокурдский",se:"северносаамский",see:"сенека",seh:"сена",sel:"селькупский",ses:"койраборо сенни",sg:"санго",sga:"староирландский",sh:"сербскохорватский",shi:"ташельхит",shn:"шанский",shu:"чадский арабский",si:"сингальский",sid:"сидама",sk:"словацкий",sl:"словенский",sm:"самоанский",sma:"южносаамский",smj:"луле-саамский",smn:"инари-саамский",sms:"колтта-саамский",sn:"шона",snk:"сонинке",so:"сомали",sog:"согдийский",sq:"албанский",sr:"сербский",srn:"сранан-тонго",srr:"серер",ss:"свази",ssy:"сахо",st:"южный сото",su:"сунданский",suk:"сукума",sus:"сусу",sux:"шумерский",sv:"шведский",sw:"суахили","sw-CD":"конголезский суахили",swb:"коморский",syc:"классический сирийский",syr:"сирийский",ta:"тамильский",te:"телугу",tem:"темне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таджикский",th:"тайский",ti:"тигринья",tig:"тигре",tiv:"тиви",tk:"туркменский",tkl:"токелайский",tl:"тагалог",tlh:"клингонский",tli:"тлингит",tmh:"тамашек",tn:"тсвана",to:"тонганский",tog:"тонга",tpi:"ток-писин",tr:"турецкий",tru:"туройо",trv:"седекский",ts:"тсонга",tsi:"цимшиан",tt:"татарский",tum:"тумбука",tvl:"тувалу",tw:"тви",twq:"тасавак",ty:"таитянский",tyv:"тувинский",tzm:"среднеатласский тамазигхтский",udm:"удмуртский",ug:"уйгурский",uga:"угаритский",uk:"украинский",umb:"умбунду",ur:"урду",uz:"узбекский",vai:"ваи",ve:"венда",vi:"вьетнамский",vo:"волапюк",vot:"водский",vun:"вунджо",wa:"валлонский",wae:"валлисский",wal:"воламо",war:"варай",was:"вашо",wbp:"вальбири",wo:"волоф",wuu:"ву",xal:"калмыцкий",xh:"коса",xog:"сога",yao:"яо",yap:"яп",yav:"янгбен",ybb:"йемба",yi:"идиш",yo:"йоруба",yue:"кантонский",za:"чжуань",zap:"сапотекский",zbl:"блиссимволика",zen:"зенагский",zgh:"тамазигхтский",zh:"китайский","zh-Hans":"севернокитайский, упрощенное письмо","zh-Hant":"севернокитайский, традиционное письмо",zu:"зулу",zun:"зуньи",zza:"заза"},scriptNames:{Cyrl:"кириллица",Latn:"латиница",Arab:"арабица",Guru:"гурмукхи",Tfng:"древнеливийская",Vaii:"вайская",Hans:"упрощенная китайская",Hant:"традиционная китайская"}},sc:{rtl:false,languageNames:{},scriptNames:{}},si:{rtl:false,languageNames:{aa:"අෆාර්",ab:"ඇබ්කාසියානු",ace:"අචයිනිස්",ada:"අඩන්ග්මෙ",ady:"අඩිඝෙ",aeb:"ටියුනිසියනු අරාබි",af:"අෆ්රිකාන්ස්",agq:"ඇගම්",ain:"අයිනු",ak:"අකාන්",ale:"ඇලුඑට්",alt:"සතර්න් අල්ටය්",am:"ඇම්හාරික්",an:"ඇරගොනීස්",anp:"අන්ගික",ar:"අරාබි","ar-001":"නූතන සම්මත අරාබි",arn:"මපුචෙ",arp:"ඇරපහො",as:"ඇසෑම්",asa:"අසු",ast:"ඇස්ටියුරියන්",av:"ඇවරික්",awa:"අවදි",ay:"අයිමරා",az:"අසර්බයිජාන්",ba:"බාෂ්කිර්",ban:"බැලිනීස්",bas:"බසා",be:"බෙලරුසියානු",bem:"බෙම්බා",bez:"බෙනා",bg:"බල්ගේරියානු",bgn:"බටහිර බලොචි",bho:"බොජ්පුරි",bi:"බිස්ලමා",bin:"බිනි",bla:"සික්සිකා",bm:"බම්බරා",bn:"බෙංගාලි",bo:"ටිබෙට්",br:"බ්‍රේටොන්",brx:"බොඩො",bs:"බොස්නියානු",bug:"බුගිනීස්",byn:"බ්ලින්",ca:"කැටලන්",ccp:"චක්මා",ce:"චෙච්නියානු",ceb:"සෙබුඅනො",cgg:"චිගා",ch:"චමොරො",chk:"චූකීස්",chm:"මරි",cho:"චොක්ටොව්",chr:"චෙරොකී",chy:"චෙයෙන්නෙ",ckb:"සොරානි කුර්දිෂ්",co:"කෝසිකානු",crs:"සෙසෙල්ව ක්‍රොල් ෆ්‍රෙන්ච්",cs:"චෙක්",cu:"චර්ච් ස්ලැවික්",cv:"චවේෂ්",cy:"වෙල්ෂ්",da:"ඩැනිශ්",dak:"ඩකොටා",dar:"ඩාර්ග්වා",dav:"ටයිටා",de:"ජර්මන්","de-AT":"ඔස්ට්‍රියානු ජර්මන්","de-CH":"ස්විස් උසස් ජර්මන්",dgr:"ඩොග්‍රිබ්",dje:"සර්මා",dsb:"පහළ සෝබියානු",dua:"ඩුආලා",dv:"ඩිවෙහි",dyo:"ජොල-ෆෝනියි",dz:"ඩිසොන්කා",dzg:"ඩසාගා",ebu:"එම්බු",ee:"ඉව්",efi:"එෆික්",eka:"එකජුක්",el:"ග්‍රීක",en:"ඉංග්‍රීසි","en-AU":"ඕස්ට්‍රේලියානු ඉංග්‍රීසි","en-CA":"කැනේඩියානු ඉංග්‍රීසි","en-GB":"බ්‍රිතාන්‍ය ඉංග්‍රීසි","en-US":"ඇමෙරිකානු ඉංග්‍රීසි",eo:"එස්පැරන්ටෝ",es:"ස්පාඤ්ඤ","es-419":"ලතින් ඇමරිකානු ස්පාඤ්ඤ","es-ES":"යුරෝපීය ස්පාඤ්ඤ","es-MX":"මෙක්සිකානු ස්පාඤ්ඤ",et:"එස්තෝනියානු",eu:"බාස්ක්",ewo:"එවොන්ඩො",fa:"පර්සියානු",ff:"ෆුලාහ්",fi:"ෆින්ලන්ත",fil:"පිලිපීන",fj:"ෆීජි",fo:"ෆාරෝස්",fon:"ෆොන්",fr:"ප්‍රංශ","fr-CA":"කැනේඩියානු ප්‍රංශ","fr-CH":"ස්විස් ප්‍රංශ",fur:"ෆ්‍රියුලියන්",fy:"බටහිර ෆ්‍රිසියානු",ga:"අයර්ලන්ත",gaa:"ගා",gag:"ගගාස්",gan:"ගැන් චයිනිස්",gd:"ස්කොට්ටිශ් ගෙලික්",gez:"ගීස්",gil:"ගිල්බර්ටීස්",gl:"ගැලීසියානු",gn:"ගුවාරනි",gor:"ගොරොන්ටාලො",gsw:"ස්විස් ජර්මානු",gu:"ගුජරාටි",guz:"ගුසී",gv:"මැන්ක්ස්",gwi:"ග්විචින්",ha:"හෝසා",hak:"හකා චයිනිස්",haw:"හවායි",he:"හීබෲ",hi:"හින්දි",hil:"හිලිගෙනන්",hmn:"මොන්ග්",hr:"කෝඒෂියානු",hsb:"ඉහළ සෝබියානු",hsn:"සියැන් චීන",ht:"හයිටි",hu:"හන්ගේරියානු",hup:"හුපා",hy:"ආර්මේනියානු",hz:"හෙරෙරො",ia:"ඉන්ටලින්ගුආ",iba:"ඉබන්",ibb:"ඉබිබියො",id:"ඉන්දුනීසියානු",ig:"ඉග්බෝ",ii:"සිචුආන් යී",ilo:"ඉලොකො",inh:"ඉන්ගුෂ්",io:"ඉඩො",is:"අයිස්ලන්ත",it:"ඉතාලි",iu:"ඉනුක්ටිටුට්",ja:"ජපන්",jbo:"ලොජ්බන්",jgo:"නොම්බා",jmc:"මැකාමී",jv:"ජාවා",ka:"ජෝර්ජියානු",kab:"කාබිල්",kac:"කචින්",kaj:"ජ්ජු",kam:"කැම්බා",kbd:"කබාර්ඩියන්",kcg:"ට්යප්",kde:"මැකොන්ඩ්",kea:"කබුවෙර්ඩියානු",kfo:"කොරො",kha:"ඛසි",khq:"කොයිරා චිනි",ki:"කිකුයු",kj:"කුයන්යමා",kk:"කසාඛ්",kkj:"කකො",kl:"කලාලිසට්",kln:"කලෙන්ජන්",km:"කමර්",kmb:"කිම්බුන්ඩු",kn:"කණ්ණඩ",ko:"කොරියානු",koi:"කොමි-පර්මියාක්",kok:"කොන්කනි",kpe:"ක්පෙලෙ",kr:"කනුරි",krc:"කරන්චි-බාකර්",krl:"කැරෙලියන්",kru:"කුරුඛ්",ks:"කාෂ්මීර්",ksb:"ශාම්බලා",ksf:"බාෆියා",ksh:"කොලොග්නියන්",ku:"කුර්දි",kum:"කුමික්",kv:"කොමි",kw:"කෝනීසියානු",ky:"කිර්ගිස්",la:"ලතින්",lad:"ලඩිනො",lag:"ලංගි",lb:"ලක්සැම්බර්ග්",lez:"ලෙස්ගියන්",lg:"ගන්ඩා",li:"ලිම්බර්ගිශ්",lkt:"ලකොට",ln:"ලින්ගලා",lo:"ලාඕ",loz:"ලොසි",lrc:"උතුරු ලුරි",lt:"ලිතුවේනියානු",lu:"ලුබා-කටන්ගා",lua:"ලුබ-ලුලුඅ",lun:"ලුන්ඩ",luo:"ලුඔ",lus:"මිසො",luy:"ලුයියා",lv:"ලැට්වියානු",mad:"මදුරීස්",mag:"මඝහි",mai:"මයිතිලි",mak:"මකාසාර්",mas:"මසායි",mdf:"මොක්ශා",men:"මෙන්ඩෙ",mer:"මෙරු",mfe:"මොරිස්යෙම්",mg:"මලගාසි",mgh:"මඛුවා-මීටෝ",mgo:"මෙටා",mh:"මාශලීස්",mi:"මාවොරි",mic:"මික්මැක්",min:"මිනන්ග්කබාවු",mk:"මැසිඩෝනියානු",ml:"මලයාලම්",mn:"මොංගෝලියානු",mni:"මනිපුරි",moh:"මොහොව්ක්",mos:"මොස්සි",mr:"මරාති",ms:"මැලේ",mt:"මොල්ටිස්",mua:"මුන්ඩන්",mus:"ක්‍රීක්",mwl:"මිරන්ඩීස්",my:"බුරුම",myv:"එර්ස්යා",mzn:"මැසන්ඩරනි",na:"නෞරු",nan:"මින් නන් චයිනිස්",nap:"නියාපොලිටන්",naq:"නාමා",nb:"නෝර්වීජියානු බොක්මල්",nd:"උතුරු එන්ඩිබෙලෙ",nds:"පහළ ජර්මන්","nds-NL":"පහළ සැක්සන්",ne:"නේපාල","new":"නෙවාරි",ng:"න්ඩොන්ගා",nia:"නියාස්",niu:"නියුඑන්",nl:"ලන්දේසි","nl-BE":"ෆ්ලෙමිශ්",nmg:"කුවාසිඔ",nn:"නෝර්වීජියානු නයිනෝර්ස්ක්",nnh:"න්ගියාම්බූන්",nog:"නොගායි",nqo:"එන්‘කෝ",nr:"සෞත් ඩ්බේල්",nso:"නොදර්න් සොතො",nus:"නොයර්",nv:"නවාජො",ny:"න්යන්ජා",nyn:"නයන්කෝලෙ",oc:"ඔසිටාන්",om:"ඔරොමෝ",or:"ඔඩියා",os:"ඔසිටෙක්",pa:"පන්ජාබි",pag:"පන්ගසීනන්",pam:"පන්පන්ග",pap:"පපියමෙන්ටො",pau:"පලවුවන්",pcm:"නෛජීරියන් පෙන්ගින්",pl:"පෝලන්ත",prg:"පෘශියන්",ps:"පෂ්ටො",pt:"පෘතුගීසි","pt-BR":"බ්‍රසීල පෘතුගීසි","pt-PT":"යුරෝපීය පෘතුගීසි",qu:"ක්වීචුවා",quc:"කියිචේ",rap:"රපනුයි",rar:"රරොටොන්ගන්",rm:"රොමෑන්ශ්",rn:"රුන්ඩි",ro:"රොමේනියානු","ro-MD":"මොල්ඩවිආනු",rof:"රෝම්බෝ",root:"රූට්",ru:"රුසියානු",rup:"ඇරොමානියානු",rw:"කින්යර්වන්ඩා",rwk:"ර්වා",sa:"සංස්කෘත",sad:"සන්ඩවෙ",sah:"සඛා",saq:"සම්බුරු",sat:"සෑන්ටලි",sba:"න්ගම්බෙ",sbp:"සංගු",sc:"සාර්ඩිනිඅන්",scn:"සිසිලියන්",sco:"ස්කොට්ස්",sd:"සින්ධි",sdh:"දකුණු කුර්දි",se:"උතුරු සාමි",seh:"සෙනා",ses:"කෝයිරාබොරො සෙන්නි",sg:"සන්ග්‍රෝ",shi:"ටචේල්හිට්",shn:"ශාන්",si:"සිංහල",sk:"ස්ලෝවැක්",sl:"ස්ලෝවේනියානු",sm:"සෑමොඅන්",sma:"දකුණු සාමි",smj:"ලුලේ සාමි",smn:"ඉනාරි සාමි",sms:"ස්කොල්ට් සාමි",sn:"ශෝනා",snk:"සොනින්කෙ",so:"සෝමාලි",sq:"ඇල්බේනියානු",sr:"සර්බියානු",srn:"ස්‍රන් ටොන්ගො",ss:"ස්වති",ssy:"සහො",st:"සතර්න් සොතො",su:"සන්ඩනීසියානු",suk:"සුකුමා",sv:"ස්වීඩන්",sw:"ස්වාහිලි","sw-CD":"කොංගෝ ස්වාහිලි",swb:"කොමොරියන්",syr:"ස්‍රයෑක්",ta:"දෙමළ",te:"තෙළිඟු",tem:"ටිම්නෙ",teo:"ටෙසෝ",tet:"ටේටම්",tg:"ටජික්",th:"තායි",ti:"ටිග්‍රින්යා",tig:"ටීග්‍රෙ",tk:"ටර්ක්මෙන්",tlh:"ක්ලින්ගොන්",tn:"ස්වනා",to:"ටොංගා",tpi:"ටොක් පිසින්",tr:"තුර්කි",trv:"ටරොකො",ts:"සොන්ග",tt:"ටාටර්",tum:"ටුම්බුකා",tvl:"ටුවාලු",twq:"ටසවාක්",ty:"ටහිටියන්",tyv:"ටුවිනියන්",tzm:"මධ්‍යම ඇට්ලස් ටමසිට්",udm:"අඩ්මර්ට්",ug:"උයිගර්",uk:"යුක්රේනියානු",umb:"උබුන්ඩු",ur:"උර්දු",uz:"උස්බෙක්",vai:"වයි",ve:"වෙන්ඩා",vi:"වියට්නාම්",vo:"වොලපූක්",vun:"වුන්ජෝ",wa:"වෑලූන්",wae:"වොල්සර්",wal:"වොලෙට්ට",war:"වොරෙය්",wbp:"වොපිරි",wo:"වොලොෆ්",wuu:"වූ චයිනිස්",xal:"කල්මික්",xh:"ශෝසා",xog:"සොගා",yav:"යන්ග්බෙන්",ybb:"යෙම්බා",yi:"යිඩිශ්",yo:"යොරූබා",yue:"කැන්ටොනීස්",zgh:"සම්මත මොරොක්කෝ ටමසිග්ත්",zh:"චීන","zh-Hans":"සරල මැන්ඩරීන් චීන","zh-Hant":"සාම්ප්‍රදායික මැන්ඩරීන් චීන",zu:"සුලු",zun:"සුනි",zza:"සාසා"},scriptNames:{Cyrl:"සිරිලික්",Latn:"ලතින්",Arab:"අරාබි",Guru:"ගුර්මුඛි",Hans:"සුළුකළ",Hant:"සාම්ප්‍රදායික"}},sk:{rtl:false,languageNames:{aa:"afarčina",ab:"abcházčina",ace:"acehčina",ach:"ačoli",ada:"adangme",ady:"adygejčina",ae:"avestčina",af:"afrikánčina",afh:"afrihili",agq:"aghem",ain:"ainčina",ak:"akančina",akk:"akkadčina",ale:"aleutčina",alt:"južná altajčina",am:"amharčina",an:"aragónčina",ang:"stará angličtina",anp:"angika",ar:"arabčina","ar-001":"arabčina (moderná štandardná)",arc:"aramejčina",arn:"mapudungun",arp:"arapažština",ars:"arabčina (nadždská)",arw:"arawačtina",as:"ásamčina",asa:"asu",ast:"astúrčina",av:"avarčina",awa:"awadhi",ay:"aymarčina",az:"azerbajdžančina",ba:"baškirčina",bal:"balúčtina",ban:"balijčina",bas:"basa",bax:"bamun",bbj:"ghomala",be:"bieloruština",bej:"bedža",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bulharčina",bgn:"západná balúčtina",bho:"bhódžpurčina",bi:"bislama",bik:"bikolčina",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambarčina",bn:"bengálčina",bo:"tibetčina",br:"bretónčina",bra:"bradžčina",brx:"bodo",bs:"bosniačtina",bss:"akoose",bua:"buriatčina",bug:"bugiština",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalánčina",cad:"kaddo",car:"karibčina",cay:"kajugčina",cch:"atsam",ccp:"čakma",ce:"čečenčina",ceb:"cebuánčina",cgg:"kiga",ch:"čamorčina",chb:"čibča",chg:"čagatajčina",chk:"chuuk",chm:"marijčina",chn:"činucký žargón",cho:"čoktčina",chp:"čipevajčina",chr:"čerokí",chy:"čejenčina",ckb:"kurdčina (sorání)",co:"korzičtina",cop:"koptčina",cr:"krí",crh:"krymská tatárčina",crs:"seychelská kreolčina",cs:"čeština",csb:"kašubčina",cu:"cirkevná slovančina",cv:"čuvaština",cy:"waleština",da:"dánčina",dak:"dakotčina",dar:"darginčina",dav:"taita",de:"nemčina","de-AT":"nemčina (rakúska)","de-CH":"nemčina (švajčiarska spisovná)",del:"delawarčina",den:"slavé",dgr:"dogribčina",din:"dinkčina",dje:"zarma",doi:"dógrí",dsb:"dolnolužická srbčina",dua:"duala",dum:"stredná holandčina",dv:"maldivčina",dyo:"jola-fonyi",dyu:"ďula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"eweština",efi:"efik",egy:"staroegyptčina",eka:"ekadžuk",el:"gréčtina",elx:"elamčina",en:"angličtina","en-AU":"angličtina (austrálska)","en-CA":"angličtina (kanadská)","en-GB":"angličtina (britská)","en-US":"angličtina (americká)",enm:"stredná angličtina",eo:"esperanto",es:"španielčina","es-419":"španielčina (latinskoamerická)","es-ES":"španielčina (európska)","es-MX":"španielčina (mexická)",et:"estónčina",eu:"baskičtina",ewo:"ewondo",fa:"perzština",fan:"fangčina",fat:"fanti",ff:"fulbčina",fi:"fínčina",fil:"filipínčina",fj:"fidžijčina",fo:"faerčina",fon:"fončina",fr:"francúzština","fr-CA":"francúzština (kanadská)","fr-CH":"francúzština (švajčiarska)",frc:"francúzština (Cajun)",frm:"stredná francúzština",fro:"stará francúzština",frr:"severná frízština",frs:"východofrízština",fur:"friulčina",fy:"západná frízština",ga:"írčina",gaa:"ga",gag:"gagauzština",gay:"gayo",gba:"gbaja",gd:"škótska gaelčina",gez:"etiópčina",gil:"kiribatčina",gl:"galícijčina",gmh:"stredná horná nemčina",gn:"guaraníjčina",goh:"stará horná nemčina",gon:"góndčina",gor:"gorontalo",got:"gótčina",grb:"grebo",grc:"starogréčtina",gsw:"nemčina (švajčiarska)",gu:"gudžarátčina",guz:"gusii",gv:"mančina",gwi:"kučinčina",ha:"hauština",hai:"haida",haw:"havajčina",he:"hebrejčina",hi:"hindčina",hil:"hiligajnončina",hit:"chetitčina",hmn:"hmongčina",ho:"hiri motu",hr:"chorvátčina",hsb:"hornolužická srbčina",ht:"haitská kreolčina",hu:"maďarčina",hup:"hupčina",hy:"arménčina",hz:"herero",ia:"interlingua",iba:"ibančina",ibb:"ibibio",id:"indonézština",ie:"interlingue",ig:"igboština",ii:"s’čchuanská iovčina",ik:"inupik",ilo:"ilokánčina",inh:"inguština",io:"ido",is:"islandčina",it:"taliančina",iu:"inuktitut",ja:"japončina",jbo:"lojban",jgo:"ngomba",jmc:"mašame",jpr:"židovská perzština",jrb:"židovská arabčina",jv:"jávčina",ka:"gruzínčina",kaa:"karakalpačtina",kab:"kabylčina",kac:"kačjinčina",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardčina",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdčina",kfo:"koro",kg:"kongčina",kha:"khasijčina",kho:"chotančina",khq:"západná songhajčina",ki:"kikujčina",kj:"kuaňama",kk:"kazaština",kkj:"kako",kl:"grónčina",kln:"kalendžin",km:"khmérčina",kmb:"kimbundu",kn:"kannadčina",ko:"kórejčina",koi:"komi-permiačtina",kok:"konkánčina",kos:"kusaie",kpe:"kpelle",kr:"kanurijčina",krc:"karačajevsko-balkarčina",krl:"karelčina",kru:"kuruchčina",ks:"kašmírčina",ksb:"šambala",ksf:"bafia",ksh:"kolínčina",ku:"kurdčina",kum:"kumyčtina",kut:"kutenajčina",kv:"komijčina",kw:"kornčina",ky:"kirgizština",la:"latinčina",lad:"židovská španielčina",lag:"langi",lah:"lahandčina",lam:"lamba",lb:"luxemburčina",lez:"lezginčina",lg:"gandčina",li:"limburčina",lkt:"lakotčina",ln:"lingalčina",lo:"laoština",lol:"mongo",lou:"kreolčina (Louisiana)",loz:"lozi",lrc:"severné luri",lt:"litovčina",lu:"lubčina (katanžská)",lua:"lubčina (luluánska)",lui:"luiseňo",lun:"lunda",lus:"mizorámčina",luy:"luhja",lv:"lotyština",mad:"madurčina",maf:"mafa",mag:"magadhčina",mai:"maithilčina",mak:"makasarčina",man:"mandingo",mas:"masajčina",mde:"maba",mdf:"mokšiančina",mdr:"mandarčina",men:"mendejčina",mer:"meru",mfe:"maurícijská kreolčina",mg:"malgaština",mga:"stredná írčina",mgh:"makua-meetto",mgo:"meta’",mh:"marshallčina",mi:"maorijčina",mic:"mikmakčina",min:"minangkabaučina",mk:"macedónčina",ml:"malajálamčina",mn:"mongolčina",mnc:"mandžuština",mni:"manípurčina",moh:"mohawkčina",mos:"mossi",mr:"maráthčina",ms:"malajčina",mt:"maltčina",mua:"mundang",mus:"kríkčina",mwl:"mirandčina",mwr:"marwari",my:"barmčina",mye:"myene",myv:"erzjančina",mzn:"mázandaránčina",na:"nauruština",nap:"neapolčina",naq:"nama",nb:"nórčina (bokmal)",nd:"ndebelčina (severná)",nds:"dolná nemčina","nds-NL":"dolná saština",ne:"nepálčina","new":"nevárčina",ng:"ndonga",nia:"niasánčina",niu:"niueština",nl:"holandčina","nl-BE":"flámčina",nmg:"kwasio",nn:"nórčina (nynorsk)",nnh:"ngiemboon",no:"nórčina",nog:"nogajčina",non:"stará nórčina",nqo:"n’ko",nr:"ndebelčina (južná)",nso:"sothčina (severná)",nus:"nuer",nv:"navaho",nwc:"klasická nevárčina",ny:"ňandža",nym:"ňamwezi",nyn:"ňankole",nyo:"ňoro",nzi:"nzima",oc:"okcitánčina",oj:"odžibva",om:"oromčina",or:"uríjčina",os:"osetčina",osa:"osedžština",ota:"osmanská turečtina",pa:"pandžábčina",pag:"pangasinančina",pal:"pahlaví",pam:"kapampangančina",pap:"papiamento",pau:"palaučina",pcm:"nigerijský pidžin",peo:"stará perzština",phn:"feničtina",pi:"pálí",pl:"poľština",pon:"pohnpeiština",prg:"pruština",pro:"stará okcitánčina",ps:"paštčina",pt:"portugalčina","pt-BR":"portugalčina (brazílska)","pt-PT":"portugalčina (európska)",qu:"kečuánčina",quc:"quiché",raj:"radžastančina",rap:"rapanujčina",rar:"rarotongská maorijčina",rm:"rétorománčina",rn:"rundčina",ro:"rumunčina","ro-MD":"moldavčina",rof:"rombo",rom:"rómčina",root:"koreň",ru:"ruština",rup:"arumunčina",rw:"rwandčina",rwk:"rwa",sa:"sanskrit",sad:"sandaweština",sah:"jakutčina",sam:"samaritánska aramejčina",saq:"samburu",sas:"sasačtina",sat:"santalčina",sba:"ngambay",sbp:"sangu",sc:"sardínčina",scn:"sicílčina",sco:"škótčina",sd:"sindhčina",sdh:"južná kurdčina",se:"saamčina (severná)",see:"senekčina",seh:"sena",sel:"selkupčina",ses:"koyraboro senni",sg:"sango",sga:"stará írčina",sh:"srbochorvátčina",shi:"tachelhit",shn:"šančina",shu:"čadská arabčina",si:"sinhalčina",sid:"sidamo",sk:"slovenčina",sl:"slovinčina",sm:"samojčina",sma:"saamčina (južná)",smj:"saamčina (lulská)",smn:"saamčina (inarijská)",sms:"saamčina (skoltská)",sn:"šončina",snk:"soninke",so:"somálčina",sog:"sogdijčina",sq:"albánčina",sr:"srbčina",srn:"surinamčina",srr:"sererčina",ss:"svazijčina",ssy:"saho",st:"sothčina (južná)",su:"sundčina",suk:"sukuma",sus:"susu",sux:"sumerčina",sv:"švédčina",sw:"swahilčina","sw-CD":"svahilčina (konžská)",swb:"komorčina",syc:"sýrčina (klasická)",syr:"sýrčina",ta:"tamilčina",te:"telugčina",tem:"temne",teo:"teso",ter:"terêna",tet:"tetumčina",tg:"tadžičtina",th:"thajčina",ti:"tigriňa",tig:"tigrejčina",tk:"turkménčina",tkl:"tokelauština",tl:"tagalčina",tlh:"klingónčina",tli:"tlingitčina",tmh:"tuaregčina",tn:"tswančina",to:"tongčina",tog:"ňasa tonga",tpi:"novoguinejský pidžin",tr:"turečtina",trv:"taroko",ts:"tsongčina",tsi:"cimšjančina",tt:"tatárčina",tum:"tumbuka",tvl:"tuvalčina",tw:"twi",twq:"tasawaq",ty:"tahitčina",tyv:"tuviančina",tzm:"tuaregčina (stredomarocká)",udm:"udmurtčina",ug:"ujgurčina",uga:"ugaritčina",uk:"ukrajinčina",umb:"umbundu",ur:"urdčina",uz:"uzbečtina",ve:"vendčina",vi:"vietnamčina",vo:"volapük",vot:"vodčina",vun:"vunjo",wa:"valónčina",wae:"walserčina",wal:"walamčina",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolofčina",xal:"kalmyčtina",xh:"xhoština",xog:"soga",yao:"jao",yap:"japčina",yav:"jangben",ybb:"yemba",yi:"jidiš",yo:"jorubčina",yue:"kantončina",za:"čuangčina",zap:"zapotéčtina",zbl:"systém Bliss",zen:"zenaga",zgh:"tuaregčina (marocká štandardná)",zh:"čínština","zh-Hans":"čínština (mandarínska zjednodušená)","zh-Hant":"čínština (mandarínska tradičná)",zu:"zuluština",zun:"zuniština",zza:"zaza"},scriptNames:{Cyrl:"cyrilika",Latn:"latinka",Arab:"arabské",Guru:"gurmukhi",Hans:"zjednodušené",Hant:"tradičné"}},sl:{rtl:false,languageNames:{aa:"afarščina",ab:"abhaščina",ace:"ačejščina",ach:"ačolijščina",ada:"adangmejščina",ady:"adigejščina",ae:"avestijščina",af:"afrikanščina",afh:"afrihili",agq:"aghemščina",ain:"ainujščina",ak:"akanščina",akk:"akadščina",ale:"aleutščina",alt:"južna altajščina",am:"amharščina",an:"aragonščina",ang:"stara angleščina",anp:"angikaščina",ar:"arabščina","ar-001":"sodobna standardna arabščina",arc:"aramejščina",arn:"mapudungunščina",arp:"arapaščina",arw:"aravaščina",as:"asamščina",asa:"asujščina",ast:"asturijščina",av:"avarščina",awa:"avadščina",ay:"ajmarščina",az:"azerbajdžanščina",ba:"baškirščina",bal:"beludžijščina",ban:"balijščina",bas:"basa",be:"beloruščina",bej:"bedža",bem:"bemba",bez:"benajščina",bg:"bolgarščina",bgn:"zahodnobalučijščina",bho:"bodžpuri",bi:"bislamščina",bik:"bikolski jezik",bin:"edo",bla:"siksika",bm:"bambarščina",bn:"bengalščina",bo:"tibetanščina",br:"bretonščina",bra:"bradžbakanščina",brx:"bodojščina",bs:"bosanščina",bua:"burjatščina",bug:"buginščina",byn:"blinščina",ca:"katalonščina",cad:"kadoščina",car:"karibski jezik",ccp:"chakma",ce:"čečenščina",ceb:"sebuanščina",cgg:"čigajščina",ch:"čamorščina",chb:"čibčevščina",chg:"čagatajščina",chk:"trukeščina",chm:"marijščina",chn:"činuški žargon",cho:"čoktavščina",chp:"čipevščina",chr:"čerokeščina",chy:"čejenščina",ckb:"soranska kurdščina",co:"korziščina",cop:"koptščina",cr:"krijščina",crh:"krimska tatarščina",crs:"sejšelska francoska kreolščina",cs:"češčina",csb:"kašubščina",cu:"stara cerkvena slovanščina",cv:"čuvaščina",cy:"valižanščina",da:"danščina",dak:"dakotščina",dar:"darginščina",dav:"taitajščina",de:"nemščina","de-AT":"avstrijska nemščina","de-CH":"visoka nemščina (Švica)",del:"delavarščina",den:"slavejščina",dgr:"dogrib",din:"dinka",dje:"zarmajščina",doi:"dogri",dsb:"dolnja lužiška srbščina",dua:"duala",dum:"srednja nizozemščina",dv:"diveščina",dyo:"jola-fonjiščina",dyu:"diula",dz:"dzonka",dzg:"dazaga",ebu:"embujščina",ee:"evenščina",efi:"efiščina",egy:"stara egipčanščina",eka:"ekajuk",el:"grščina",elx:"elamščina",en:"angleščina","en-AU":"avstralska angleščina","en-CA":"kanadska angleščina","en-GB":"angleščina (VB)","en-US":"angleščina (ZDA)",enm:"srednja angleščina",eo:"esperanto",es:"španščina","es-419":"španščina (Latinska Amerika)","es-ES":"evropska španščina","es-MX":"mehiška španščina",et:"estonščina",eu:"baskovščina",ewo:"evondovščina",fa:"perzijščina",fan:"fangijščina",fat:"fantijščina",ff:"fulščina",fi:"finščina",fil:"filipinščina",fj:"fidžijščina",fo:"ferščina",fon:"fonščina",fr:"francoščina","fr-CA":"kanadska francoščina","fr-CH":"švicarska francoščina",frc:"cajunska francoščina",frm:"srednja francoščina",fro:"stara francoščina",frr:"severna frizijščina",frs:"vzhodna frizijščina",fur:"furlanščina",fy:"zahodna frizijščina",ga:"irščina",gaa:"ga",gag:"gagavščina",gay:"gajščina",gba:"gbajščina",gd:"škotska gelščina",gez:"etiopščina",gil:"kiribatščina",gl:"galicijščina",gmh:"srednja visoka nemščina",gn:"gvaranijščina",goh:"stara visoka nemščina",gon:"gondi",gor:"gorontalščina",got:"gotščina",grb:"grebščina",grc:"stara grščina",gsw:"nemščina (Švica)",gu:"gudžaratščina",guz:"gusijščina",gv:"manščina",gwi:"gvičin",ha:"havščina",hai:"haidščina",haw:"havajščina",he:"hebrejščina",hi:"hindujščina",hil:"hiligajnonščina",hit:"hetitščina",hmn:"hmonščina",ho:"hiri motu",hr:"hrvaščina",hsb:"gornja lužiška srbščina",ht:"haitijska kreolščina",hu:"madžarščina",hup:"hupa",hy:"armenščina",hz:"herero",ia:"interlingva",iba:"ibanščina",ibb:"ibibijščina",id:"indonezijščina",ie:"interlingve",ig:"igboščina",ii:"sečuanska jiščina",ik:"inupiaščina",ilo:"ilokanščina",inh:"inguščina",io:"ido",is:"islandščina",it:"italijanščina",iu:"inuktitutščina",ja:"japonščina",jbo:"lojban",jgo:"ngomba",jmc:"mačamejščina",jpr:"judovska perzijščina",jrb:"judovska arabščina",jv:"javanščina",ka:"gruzijščina",kaa:"karakalpaščina",kab:"kabilščina",kac:"kačinščina",kaj:"jju",kam:"kambaščina",kaw:"kavi",kbd:"kabardinščina",kcg:"tjapska nigerijščina",kde:"makondščina",kea:"zelenortskootoška kreolščina",kfo:"koro",kg:"kongovščina",kha:"kasi",kho:"kotanščina",khq:"koyra chiini",ki:"kikujščina",kj:"kvanjama",kk:"kazaščina",kkj:"kako",kl:"grenlandščina",kln:"kalenjinščina",km:"kmerščina",kmb:"kimbundu",kn:"kanareščina",ko:"korejščina",koi:"komi-permjaščina",kok:"konkanščina",kos:"kosrajščina",kpe:"kpelejščina",kr:"kanurščina",krc:"karačaj-balkarščina",krl:"karelščina",kru:"kuruk",ks:"kašmirščina",ksb:"šambala",ksf:"bafia",ksh:"kölnsko narečje",ku:"kurdščina",kum:"kumiščina",kut:"kutenajščina",kv:"komijščina",kw:"kornijščina",ky:"kirgiščina",la:"latinščina",lad:"ladinščina",lag:"langijščina",lah:"landa",lam:"lamba",lb:"luksemburščina",lez:"lezginščina",lg:"ganda",li:"limburščina",lkt:"lakotščina",ln:"lingala",lo:"laoščina",lol:"mongo",lou:"louisianska kreolščina",loz:"lozi",lrc:"severna lurijščina",lt:"litovščina",lu:"luba-katanga",lua:"luba-lulua",lui:"luisenščina",lun:"lunda",lus:"mizojščina",luy:"luhijščina",lv:"latvijščina",mad:"madurščina",mag:"magadščina",mai:"maitili",mak:"makasarščina",man:"mandingo",mas:"masajščina",mdf:"mokšavščina",mdr:"mandarščina",men:"mende",mer:"meru",mfe:"morisjenščina",mg:"malagaščina",mga:"srednja irščina",mgh:"makuva-meto",mgo:"meta",mh:"marshallovščina",mi:"maorščina",mic:"mikmaščina",min:"minangkabau",mk:"makedonščina",ml:"malajalamščina",mn:"mongolščina",mnc:"mandžurščina",mni:"manipurščina",moh:"mohoščina",mos:"mosijščina",mr:"maratščina",ms:"malajščina",mt:"malteščina",mua:"mundang",mus:"creekovščina",mwl:"mirandeščina",mwr:"marvarščina",my:"burmanščina",myv:"erzjanščina",mzn:"mazanderanščina",na:"naurujščina",nan:"min nan kitajščina",nap:"napolitanščina",naq:"khoekhoe",nb:"knjižna norveščina",nd:"severna ndebelščina",nds:"nizka nemščina","nds-NL":"nizka saščina",ne:"nepalščina","new":"nevarščina",ng:"ndonga",nia:"niaščina",niu:"niuejščina",nl:"nizozemščina","nl-BE":"flamščina",nmg:"kwasio",nn:"novonorveščina",nnh:"ngiemboonščina",no:"norveščina",nog:"nogajščina",non:"stara nordijščina",nqo:"n’ko",nr:"južna ndebelščina",nso:"severna sotščina",nus:"nuerščina",nv:"navajščina",nwc:"klasična nevarščina",ny:"njanščina",nym:"njamveščina",nyn:"njankole",nyo:"njoro",nzi:"nzima",oc:"okcitanščina",oj:"anašinabščina",om:"oromo",or:"odijščina",os:"osetinščina",osa:"osage",ota:"otomanska turščina",pa:"pandžabščina",pag:"pangasinanščina",pam:"pampanščina",pap:"papiamentu",pau:"palavanščina",pcm:"nigerijski pidžin",peo:"stara perzijščina",phn:"feničanščina",pi:"palijščina",pl:"poljščina",pon:"ponpejščina",prg:"stara pruščina",pro:"stara provansalščina",ps:"paštunščina",pt:"portugalščina","pt-BR":"brazilska portugalščina","pt-PT":"evropska portugalščina",qu:"kečuanščina",quc:"quiche",raj:"radžastanščina",rap:"rapanujščina",rar:"rarotongščina",rm:"retoromanščina",rn:"rundščina",ro:"romunščina","ro-MD":"moldavščina",rof:"rombo",rom:"romščina",root:"rootščina",ru:"ruščina",rup:"aromunščina",rw:"ruandščina",rwk:"rwa",sa:"sanskrt",sad:"sandavščina",sah:"jakutščina",sam:"samaritanska aramejščina",saq:"samburščina",sas:"sasaščina",sat:"santalščina",sba:"ngambajščina",sbp:"sangujščina",sc:"sardinščina",scn:"sicilijanščina",sco:"škotščina",sd:"sindščina",sdh:"južna kurdščina",se:"severna samijščina",seh:"sena",sel:"selkupščina",ses:"koyraboro senni",sg:"sango",sga:"stara irščina",sh:"srbohrvaščina",shi:"tahelitska berberščina",shn:"šanščina",si:"sinhalščina",sid:"sidamščina",sk:"slovaščina",sl:"slovenščina",sm:"samoanščina",sma:"južna samijščina",smj:"luleška samijščina",smn:"inarska samijščina",sms:"skoltska samijščina",sn:"šonščina",snk:"soninke",so:"somalščina",sq:"albanščina",sr:"srbščina",srn:"surinamska kreolščina",srr:"sererščina",ss:"svazijščina",ssy:"saho",st:"sesoto",su:"sundanščina",suk:"sukuma",sus:"susujščina",sux:"sumerščina",sv:"švedščina",sw:"svahili","sw-CD":"kongoški svahili",swb:"šikomor",syc:"klasična sirščina",syr:"sirščina",ta:"tamilščina",te:"telugijščina",tem:"temnejščina",teo:"teso",tet:"tetumščina",tg:"tadžiščina",th:"tajščina",ti:"tigrajščina",tig:"tigrejščina",tiv:"tivščina",tk:"turkmenščina",tkl:"tokelavščina",tl:"tagalogščina",tlh:"klingonščina",tli:"tlingitščina",tmh:"tamajaščina",tn:"cvanščina",to:"tongščina",tog:"malavijska tongščina",tpi:"tok pisin",tr:"turščina",trv:"taroko",ts:"congščina",tsi:"tsimščina",tt:"tatarščina",tum:"tumbukščina",tvl:"tuvalujščina",tw:"tvi",twq:"tasawaq",ty:"tahitščina",tyv:"tuvinščina",tzm:"tamašek (Srednji Atlas)",udm:"udmurtščina",ug:"ujgurščina",uga:"ugaritski jezik",uk:"ukrajinščina",umb:"umbundščina",ur:"urdujščina",uz:"uzbeščina",vai:"vajščina",ve:"venda",vi:"vietnamščina",vo:"volapuk",vot:"votjaščina",vun:"vunjo",wa:"valonščina",wae:"walser",wal:"valamščina",war:"varajščina",was:"vašajščina",wbp:"varlpirščina",wo:"volofščina",xal:"kalmiščina",xh:"koščina",xog:"sogščina",yao:"jaojščina",yap:"japščina",yav:"jangben",ybb:"jembajščina",yi:"jidiš",yo:"jorubščina",yue:"kantonščina",zap:"zapoteščina",zbl:"znakovni jezik Bliss",zen:"zenaščina",zgh:"standardni maroški tamazig",zh:"kitajščina","zh-Hans":"kitajščina (poenostavljena pisava han)","zh-Hant":"kitajščina (tradicionalna pisava han)",zu:"zulujščina",zun:"zunijščina",zza:"zazajščina"},scriptNames:{Cyrl:"cirilica",Latn:"latinica",Arab:"arabski",Guru:"gurmuki",Tfng:"tifinajski",Vaii:"zlogovna pisava vai",Hans:"poenostavljena pisava han",Hant:"tradicionalna pisava han"}},so:{rtl:false,languageNames:{af:"Afrikaanka",agq:"Ageem",ak:"Akan",am:"Axmaari",ar:"Carabi","ar-001":"Carabiga rasmiga ah",as:"Asaamiis",asa:"Asu",ast:"Astuuriyaan",az:"Asarbayjan",bas:"Basaa",be:"Beleruusiyaan",bem:"Bemba",bez:"Bena",bg:"Bulgeeriyaan",bm:"Bambaara",bn:"Bangladesh",bo:"Tibeetaan",br:"Biriton",brx:"Bodo",bs:"Bosniyaan",ca:"Katalaan",ccp:"Jakma",ce:"Jejen",ceb:"Sebuano",cgg:"Jiga",chr:"Jerookee",ckb:"Bartamaha Kurdish",co:"Korsikan",cs:"Jeeg",cu:"Kaniisadda Islaafik",cy:"Welsh",da:"Dhaanish",dav:"Taiita",de:"Jarmal","de-AT":"Jarmal (Awsteriya)","de-CH":"Jarmal (Iswiiserlaand)",dje:"Sarma",dsb:"Soorbiyaanka Hoose",dua:"Duaala",dyo:"Joola-Foonyi",dz:"D’zongqa",ebu:"Embuu",ee:"Eewe",el:"Giriik",en:"Ingiriisi","en-AU":"Ingiriis Austaraaliyaan","en-CA":"Ingiriis Kanadiyaan","en-GB":"Ingiriis Biritish","en-US":"Ingiriis Maraykan",eo:"Isberaanto",es:"Isbaanish","es-419":"Isbaanishka Laatiin Ameerika","es-ES":"Isbaanish (Isbayn)","es-MX":"Isbaanish (Meksiko)",et:"Istooniyaan",eu:"Basquu",ewo:"Eewondho",fa:"Faarisi",ff:"Fuulah",fi:"Finishka",fil:"Tagalog",fo:"Farowsi",fr:"Faransiis","fr-CA":"Faransiiska Kanada","fr-CH":"Faransiis (Iswiiserlaand)",fur:"Firiyuuliyaan",fy:"Firiisiyan Galbeed",ga:"Ayrish",gd:"Iskot Giilik",gl:"Galiisiyaan",gsw:"Jarmal Iswiis",gu:"Gujaraati",guz:"Guusii",gv:"Mankis",ha:"Hawsa",haw:"Hawaay",he:"Cibraani",hi:"Hindi",hmn:"Hamong",hr:"Koro’eeshiyaan",hsb:"Sorobiyaanka Sare",ht:"Heeytiyaan Karawle",hu:"Hangariyaan",hy:"Armeeniyaan",ia:"Interlinguwa",id:"Indunusiyaan",ig:"Igbo",ii:"Sijuwan Yi",is:"Ayslandays",it:"Talyaani",ja:"Jabaaniis",jgo:"Ingoomba",jmc:"Chaga",jv:"Jafaaniis",ka:"Joorijiyaan",kab:"Kabayle",kam:"Kaamba",kde:"Kimakonde",kea:"Kabuferdiyanu",khq:"Koyra Jiini",ki:"Kikuuyu",kk:"Kasaaq",kkj:"Kaako",kl:"Kalaallisuut",kln:"Kalenjiin",km:"Kamboodhian",kn:"Kannadays",ko:"Kuuriyaan",kok:"Konkani",ks:"Kaashmiir",ksb:"Shambaala",ksf:"Bafiya",ksh:"Kologniyaan",ku:"Kurdishka",kw:"Kornish",ky:"Kirgiis",la:"Laatiin",lag:"Laangi",lb:"Luksaamboorgish",lg:"Gandha",lkt:"Laakoota",ln:"Lingala",lo:"Lao",lrc:"Koonfurta Luuri",lt:"Lituwaanays",lu:"Luuba-kataanga",luo:"Luwada",luy:"Luhya",lv:"Laatfiyaan",mas:"Masaay",mer:"Meeru",mfe:"Moorisayn",mg:"Malagaasi",mgh:"Makhuwa",mgo:"Meetaa",mi:"Maaoori",mk:"Masadooniyaan",ml:"Malayalam",mn:"Mangooli",mr:"Maarati",ms:"Malaay",mt:"Maltiis",mua:"Miyundhaang",my:"Burmese",mzn:"Masanderaani",naq:"Nama",nb:"Noorwijiyaan Bokma",nd:"Indhebeele",nds:"Jarmal Hooseeya","nds-NL":"Jarmal Hooseeya (Nederlaands)",ne:"Nebaali",nl:"Holandays","nl-BE":"Af faleemi",nmg:"Kuwaasiyo",nn:"Nowrwejiyan (naynoroski)",nnh:"Ingiyembuun",nus:"Nuweer",ny:"Inyaanja",nyn:"Inyankoole",om:"Oromo",or:"Oodhiya",os:"Oseetic",pa:"Bunjaabi",pl:"Boolish",prg:"Brashiyaanki Hore",ps:"Bashtuu",pt:"Boortaqiis","pt-BR":"Boortaqiiska Baraasiil","pt-PT":"Boortaqiis (Boortuqaal)",qu:"Quwejuwa",rm:"Romaanis",rn:"Rundhi",ro:"Romanka","ro-MD":"Romanka (Moldofa)",rof:"Rombo",ru:"Ruush",rw:"Ruwaandha",rwk:"Raawa",sa:"Sanskrit",sah:"Saaqa",saq:"Sambuuru",sbp:"Sangu",sd:"Siindhi",se:"Koonfurta Saami",seh:"Seena",ses:"Koyraboro Seenni",sg:"Sango",shi:"Shilha",si:"Sinhaleys",sk:"Isloofaak",sl:"Islofeeniyaan",sm:"Samowan",smn:"Inaari Saami",sn:"Shoona",so:"Soomaali",sq:"Albeeniyaan",sr:"Seerbiyaan",st:"Sesooto",su:"Suudaaniis",sv:"Swiidhis",sw:"Sawaaxili","sw-CD":"Sawaaxili (Jamhuuriyadda Dimuquraadiga Kongo)",ta:"Tamiil",te:"Teluugu",teo:"Teeso",tg:"Taajik",th:"Taaylandays",ti:"Tigrinya",tk:"Turkumaanish",to:"Toongan",tr:"Turkish",tt:"Taatar",twq:"Tasaawaq",tzm:"Bartamaha Atlaas Tamasayt",ug:"Uighur",uk:"Yukreeniyaan",ur:"Urduu",uz:"Usbakis",vai:"Faayi",vi:"Fiitnaamays",vo:"Folabuuk",vun:"Fuunjo",wae:"Walseer",wo:"Woolof",xh:"Hoosta",xog:"Sooga",yav:"Yaangbeen",yi:"Yadhish",yo:"Yoruuba",yue:"Kantoneese",zgh:"Morokaanka Tamasayt Rasmiga",zh:"Shiinaha Mandarin","zh-Hans":"Shiinaha Mandarin (La fududeeyay)","zh-Hant":"Shiinaha Mandarin (Hore)",zu:"Zuulu"},scriptNames:{Cyrl:"Siriylik",Latn:"Laatiin",Arab:"Carabi",Hans:"La fududeeyay",Hant:"Hore"}},sq:{rtl:false,languageNames:{aa:"afarisht",ab:"abkazisht",ace:"akinezisht",ada:"andangmeisht",ady:"adigisht",af:"afrikanisht",agq:"agemisht",ain:"ajnuisht",ak:"akanisht",ale:"aleutisht",alt:"altaishte jugore",am:"amarisht",an:"aragonezisht",anp:"angikisht",ar:"arabisht","ar-001":"arabishte standarde moderne",arn:"mapuçisht",arp:"arapahoisht",as:"asamezisht",asa:"asuisht",ast:"asturisht",av:"avarikisht",awa:"auadhisht",ay:"ajmarisht",az:"azerbajxhanisht",ba:"bashkirisht",ban:"balinezisht",bas:"basaisht",be:"bjellorusisht",bem:"bembaisht",bez:"benaisht",bg:"bullgarisht",bgn:"balokishte perëndimore",bho:"boxhpurisht",bi:"bislamisht",bin:"binisht",bla:"siksikaisht",bm:"bambarisht",bn:"bengalisht",bo:"tibetisht",br:"bretonisht",brx:"bodoisht",bs:"boshnjakisht",bug:"buginezisht",byn:"blinisht",ca:"katalonisht",ccp:"çakmaisht",ce:"çeçenisht",ceb:"sebuanisht",cgg:"çigisht",ch:"kamoroisht",chk:"çukezisht",chm:"marisht",cho:"çoktauisht",chr:"çerokisht",chy:"çejenisht",ckb:"kurdishte qendrore",co:"korsikisht",crs:"frëngjishte kreole seselve",cs:"çekisht",cu:"sllavishte kishtare",cv:"çuvashisht",cy:"uellsisht",da:"danisht",dak:"dakotisht",dar:"darguaisht",dav:"tajtaisht",de:"gjermanisht","de-AT":"gjermanishte austriake","de-CH":"gjermanishte zvicerane (dialekti i Alpeve)",dgr:"dogribisht",dje:"zarmaisht",dsb:"sorbishte e poshtme",dua:"dualaisht",dv:"divehisht",dyo:"xhulafonjisht",dz:"xhongaisht",dzg:"dazagauisht",ebu:"embuisht",ee:"eveisht",efi:"efikisht",eka:"ekajukisht",el:"greqisht",en:"anglisht","en-AU":"anglishte australiane","en-CA":"anglishte kanadeze","en-GB":"anglishte britanike","en-US":"anglishte amerikane",eo:"esperanto",es:"spanjisht","es-419":"spanjishte amerikano-latine","es-ES":"spanjishte evropiane","es-MX":"spanjishte meksikane",et:"estonisht",eu:"baskisht",ewo:"euondoisht",fa:"persisht",ff:"fulaisht",fi:"finlandisht",fil:"filipinisht",fj:"fixhianisht",fo:"faroisht",fon:"fonisht",fr:"frëngjisht","fr-CA":"frëngjishte kanadeze","fr-CH":"frëngjishte zvicerane",fur:"friulianisht",fy:"frizianishte perëndimore",ga:"irlandisht",gaa:"gaisht",gag:"gagauzisht",gd:"galishte skoceze",gez:"gizisht",gil:"gilbertazisht",gl:"galicisht",gn:"guaranisht",gor:"gorontaloisht",gsw:"gjermanishte zvicerane",gu:"guxharatisht",guz:"gusisht",gv:"manksisht",gwi:"guiçinisht",ha:"hausisht",haw:"havaisht",he:"hebraisht",hi:"indisht",hil:"hiligajnonisht",hmn:"hmongisht",hr:"kroatisht",hsb:"sorbishte e sipërme",ht:"haitisht",hu:"hungarisht",hup:"hupaisht",hy:"armenisht",hz:"hereroisht",ia:"interlingua",iba:"ibanisht",ibb:"ibibioisht",id:"indonezisht",ie:"gjuha oksidentale",ig:"igboisht",ii:"sishuanisht",ilo:"ilokoisht",inh:"ingushisht",io:"idoisht",is:"islandisht",it:"italisht",iu:"inuktitutisht",ja:"japonisht",jbo:"lojbanisht",jgo:"ngombisht",jmc:"maçamisht",jv:"javanisht",ka:"gjeorgjisht",kab:"kabilisht",kac:"kaçinisht",kaj:"kajeisht",kam:"kambaisht",kbd:"kabardianisht",kcg:"tjapisht",kde:"makondisht",kea:"kreolishte e Kepit të Gjelbër",kfo:"koroisht",kha:"kasisht",khq:"kojraçinisht",ki:"kikujuisht",kj:"kuanjamaisht",kk:"kazakisht",kkj:"kakoisht",kl:"kalalisutisht",kln:"kalenxhinisht",km:"kmerisht",kmb:"kimbunduisht",kn:"kanadisht",ko:"koreanisht",koi:"komi-parmjakisht",kok:"konkanisht",kpe:"kpeleisht",kr:"kanurisht",krc:"karaçaj-balkarisht",krl:"karelianisht",kru:"kurukisht",ks:"kashmirisht",ksb:"shambalisht",ksf:"bafianisht",ksh:"këlnisht",ku:"kurdisht",kum:"kumikisht",kv:"komisht",kw:"kornisht",ky:"kirgizisht",la:"latinisht",lad:"ladinoisht",lag:"langisht",lb:"luksemburgisht",lez:"lezgianisht",lg:"gandaisht",li:"limburgisht",lkt:"lakotisht",ln:"lingalisht",lo:"laosisht",loz:"lozisht",lrc:"lurishte veriore",lt:"lituanisht",lu:"luba-katangaisht",lua:"luba-luluaisht",lun:"lundaisht",luo:"luoisht",lus:"mizoisht",luy:"lujaisht",lv:"letonisht",mad:"madurezisht",mag:"magaisht",mai:"maitilisht",mak:"makasarisht",mas:"masaisht",mdf:"mokshaisht",men:"mendisht",mer:"meruisht",mfe:"morisjenisht",mg:"madagaskarisht",mgh:"makua-mitoisht",mgo:"metaisht",mh:"marshallisht",mi:"maorisht",mic:"mikmakisht",min:"minangkabauisht",mk:"maqedonisht",ml:"malajalamisht",mn:"mongolisht",mni:"manipurisht",moh:"mohokisht",mos:"mosisht",mr:"maratisht",ms:"malajisht",mt:"maltisht",mua:"mundangisht",mus:"krikisht",mwl:"mirandisht",my:"birmanisht",myv:"erzjaisht",mzn:"mazanderanisht",na:"nauruisht",nap:"napoletanisht",naq:"namaisht",nb:"norvegjishte letrare",nd:"ndebelishte veriore",nds:"gjermanishte e vendeve të ulëta","nds-NL":"gjermanishte saksone e vendeve të ulëta",ne:"nepalisht","new":"neuarisht",ng:"ndongaisht",nia:"niasisht",niu:"niueanisht",nl:"holandisht","nl-BE":"flamandisht",nmg:"kuasisht",nn:"norvegjishte nynorsk",nnh:"ngiembunisht",no:"norvegjisht",nog:"nogajisht",nqo:"nkoisht",nr:"ndebelishte jugore",nso:"sotoishte veriore",nus:"nuerisht",nv:"navahoisht",ny:"nianjisht",nyn:"niankolisht",oc:"oksitanisht",om:"oromoisht",or:"odisht",os:"osetisht",pa:"punxhabisht",pag:"pangasinanisht",pam:"pampangaisht",pap:"papiamentisht",pau:"paluanisht",pcm:"pixhinishte nigeriane",pl:"polonisht",prg:"prusisht",ps:"pashtoisht",pt:"portugalisht","pt-BR":"portugalishte braziliane","pt-PT":"portugalishte evropiane",qu:"keçuaisht",quc:"kiçeisht",rap:"rapanuisht",rar:"rarontonganisht",rm:"retoromanisht",rn:"rundisht",ro:"rumanisht","ro-MD":"moldavisht",rof:"romboisht",root:"rutisht",ru:"rusisht",rup:"vllahisht",rw:"kiniaruandisht",rwk:"ruaisht",sa:"sanskritisht",sad:"sandauisht",sah:"sakaisht",saq:"samburisht",sat:"santalisht",sba:"ngambajisht",sbp:"sanguisht",sc:"sardenjisht",scn:"siçilianisht",sco:"skotisht",sd:"sindisht",sdh:"kurdishte jugore",se:"samishte veriore",seh:"senaisht",ses:"senishte kojrabore",sg:"sangoisht",sh:"serbo-kroatisht",shi:"taçelitisht",shn:"shanisht",si:"sinhalisht",sk:"sllovakisht",sl:"sllovenisht",sm:"samoanisht",sma:"samishte jugore",smj:"samishte lule",smn:"samishte inari",sms:"samishte skolti",sn:"shonisht",snk:"soninkisht",so:"somalisht",sq:"shqip",sr:"serbisht",srn:"srananisht (sranantongoisht)",ss:"suatisht",ssy:"sahoisht",st:"sotoishte jugore",su:"sundanisht",suk:"sukumaisht",sv:"suedisht",sw:"suahilisht","sw-CD":"suahilishte kongoleze",swb:"kamorianisht",syr:"siriakisht",ta:"tamilisht",te:"teluguisht",tem:"timneisht",teo:"tesoisht",tet:"tetumisht",tg:"taxhikisht",th:"tajlandisht",ti:"tigrinjaisht",tig:"tigreisht",tk:"turkmenisht",tlh:"klingonisht",tn:"cuanaisht",to:"tonganisht",tpi:"pisinishte toku",tr:"turqisht",trv:"torokoisht",ts:"congaisht",tt:"tatarisht",tum:"tumbukaisht",tvl:"tuvaluisht",tw:"tuisht",twq:"tasavakisht",ty:"tahitisht",tyv:"tuvinianisht",tzm:"tamazajtisht e Atlasit Qendror",udm:"udmurtisht",ug:"ujgurisht",uk:"ukrainisht",umb:"umbunduisht",ur:"urduisht",uz:"uzbekisht",vai:"vaisht",ve:"vendaisht",vi:"vietnamisht",vo:"volapykisht",vun:"vunxhoisht",wa:"ualunisht",wae:"ualserisht",wal:"ulajtaisht",war:"uarajisht",wbp:"uarlpirisht",wo:"uolofisht",xal:"kalmikisht",xh:"xhosaisht",xog:"sogisht",yav:"jangbenisht",ybb:"jembaisht",yi:"jidisht",yo:"jorubaisht",yue:"kantonezisht",zgh:"tamaziatishte standarde marokene",zh:"kinezisht","zh-Hans":"kinezisht (i thjeshtuar)","zh-Hant":"kinezisht (tradicional)",zu:"zuluisht",zun:"zunisht",zza:"zazaisht"},scriptNames:{Cyrl:"cirilik",Latn:"latin",Arab:"arabik",Guru:"gurmuk",Hans:"i thjeshtuar",Hant:"tradicional"}},sr:{rtl:false,languageNames:{aa:"афарски",ab:"абхаски",ace:"ацешки",ach:"аколи",ada:"адангме",ady:"адигејски",ae:"авестански",af:"африканс",afh:"африхили",agq:"агем",ain:"аину",ak:"акански",akk:"акадијски",ale:"алеутски",alt:"јужноалтајски",am:"амхарски",an:"арагонски",ang:"староенглески",anp:"ангика",ar:"арапски","ar-001":"савремени стандардни арапски",arc:"арамејски",arn:"мапуче",arp:"арапахо",arw:"аравачки",as:"асамски",asa:"асу",ast:"астуријски",av:"аварски",awa:"авади",ay:"ајмара",az:"азербејџански",ba:"башкирски",bal:"белучки",ban:"балијски",bas:"баса",be:"белоруски",bej:"беџа",bem:"бемба",bez:"бена",bg:"бугарски",bgn:"западни белучки",bho:"боџпури",bi:"бислама",bik:"бикол",bin:"бини",bla:"сисика",bm:"бамбара",bn:"бенгалски",bo:"тибетански",br:"бретонски",bra:"брај",brx:"бодо",bs:"босански",bua:"бурјатски",bug:"бугијски",byn:"блински",ca:"каталонски",cad:"кадо",car:"карипски",cch:"атсам",ce:"чеченски",ceb:"себуански",cgg:"чига",ch:"чаморо",chb:"чипча",chg:"чагатај",chk:"чучки",chm:"мари",chn:"чинучки",cho:"чоктавски",chp:"чипевјански",chr:"чероки",chy:"чејенски",ckb:"централни курдски",co:"корзикански",cop:"коптски",cr:"кри",crh:"кримскотатарски",crs:"сејшелски креолски француски",cs:"чешки",csb:"кашупски",cu:"црквенословенски",cv:"чувашки",cy:"велшки",da:"дански",dak:"дакота",dar:"даргински",dav:"таита",de:"немачки","de-AT":"немачки (Аустрија)","de-CH":"швајцарски високи немачки",del:"делаверски",den:"слејви",dgr:"догрипски",din:"динка",dje:"зарма",doi:"догри",dsb:"доњолужичкосрпски",dua:"дуала",dum:"средњехоландски",dv:"малдивски",dyo:"џола фоњи",dyu:"ђула",dz:"џонга",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефички",egy:"староегипатски",eka:"екаџук",el:"грчки",elx:"еламитски",en:"енглески","en-AU":"енглески (Аустралија)","en-CA":"енглески (Канада)","en-GB":"енглески (Велика Британија)","en-US":"енглески (Сједињене Америчке Државе)",enm:"средњеенглески",eo:"есперанто",es:"шпански","es-419":"шпански (Латинска Америка)","es-ES":"шпански (Европа)","es-MX":"шпански (Мексико)",et:"естонски",eu:"баскијски",ewo:"евондо",fa:"персијски",fan:"фанг",fat:"фанти",ff:"фула",fi:"фински",fil:"филипински",fj:"фиџијски",fo:"фарски",fon:"фон",fr:"француски","fr-CA":"француски (Канада)","fr-CH":"француски (Швајцарска)",frc:"кајунски француски",frm:"средњефранцуски",fro:"старофранцуски",frr:"севернофризијски",frs:"источнофризијски",fur:"фриулски",fy:"западни фризијски",ga:"ирски",gaa:"га",gag:"гагауз",gay:"гајо",gba:"гбаја",gd:"шкотски гелски",gez:"геез",gil:"гилбертски",gl:"галицијски",gmh:"средњи високонемачки",gn:"гварани",goh:"старонемачки",gon:"гонди",gor:"горонтало",got:"готски",grb:"гребо",grc:"старогрчки",gsw:"немачки (Швајцарска)",gu:"гуџарати",guz:"гуси",gv:"манкс",gwi:"гвичински",ha:"хауса",hai:"хаида",haw:"хавајски",he:"хебрејски",hi:"хинди",hil:"хилигајнонски",hit:"хетитски",hmn:"хмоншки",ho:"хири моту",hr:"хрватски",hsb:"горњолужичкосрпски",ht:"хаићански",hu:"мађарски",hup:"хупа",hy:"јерменски",hz:"хереро",ia:"интерлингва",iba:"ибански",ibb:"ибибио",id:"индонежански",ie:"интерлингве",ig:"игбо",ii:"сечуански ји",ik:"инупик",ilo:"илоко",inh:"ингушки",io:"идо",is:"исландски",it:"италијански",iu:"инуктитутски",ja:"јапански",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"јудео-персијски",jrb:"јудео-арапски",jv:"јавански",ka:"грузијски",kaa:"кара-калпашки",kab:"кабиле",kac:"качински",kaj:"џу",kam:"камба",kaw:"кави",kbd:"кабардијски",kcg:"тјап",kde:"маконде",kea:"зеленортски",kfo:"коро",kg:"конго",kha:"каси",kho:"котанешки",khq:"којра чиини",ki:"кикују",kj:"квањама",kk:"казашки",kkj:"како",kl:"гренландски",kln:"каленџински",km:"кмерски",kmb:"кимбунду",kn:"канада",ko:"корејски",koi:"коми-пермски",kok:"конкани",kos:"косренски",kpe:"кпеле",kr:"канури",krc:"карачајско-балкарски",kri:"крио",krl:"карелски",kru:"курук",ks:"кашмирски",ksb:"шамбала",ksf:"бафија",ksh:"келнски",ku:"курдски",kum:"кумички",kut:"кутенај",kv:"коми",kw:"корнволски",ky:"киргиски",la:"латински",lad:"ладино",lag:"ланги",lah:"ланда",lam:"ламба",lb:"луксембуршки",lez:"лезгински",lg:"ганда",li:"лимбуршки",lkt:"лакота",ln:"лингала",lo:"лаоски",lol:"монго",lou:"луизијански креолски",loz:"лози",lrc:"северни лури",lt:"литвански",lu:"луба-катанга",lua:"луба-лулуа",lui:"луисењо",lun:"лунда",luo:"луо",lus:"мизо",luy:"лујиа",lv:"летонски",mad:"мадурски",mag:"магахи",mai:"маитили",mak:"макасарски",man:"мандинго",mas:"масајски",mdf:"мокша",mdr:"мандар",men:"менде",mer:"меру",mfe:"морисјен",mg:"малгашки",mga:"средњеирски",mgh:"макува-мито",mgo:"мета",mh:"маршалски",mi:"маорски",mic:"микмак",min:"минангкабау",mk:"македонски",ml:"малајалам",mn:"монголски",mnc:"манџурски",mni:"манипурски",moh:"мохочки",mos:"моси",mr:"марати",ms:"малајски",mt:"малтешки",mua:"мунданг",mus:"кришки",mwl:"мирандски",mwr:"марвари",my:"бурмански",myv:"ерзја",mzn:"мазандерански",na:"науруски",nap:"напуљски",naq:"нама",nb:"норвешки букмол",nd:"северни ндебеле",nds:"нисконемачки","nds-NL":"нискосаксонски",ne:"непалски","new":"невари",ng:"ндонга",nia:"ниас",niu:"ниуејски",nl:"холандски","nl-BE":"фламански",nmg:"квасио",nn:"норвешки нинорск",nnh:"нгиембун",no:"норвешки",nog:"ногајски",non:"старонордијски",nqo:"нко",nr:"јужни ндебеле",nso:"северни сото",nus:"нуер",nv:"навахо",nwc:"класични неварски",ny:"њанџа",nym:"њамвези",nyn:"њанколе",nyo:"њоро",nzi:"нзима",oc:"окситански",oj:"оџибве",om:"оромо",or:"одија",os:"осетински",osa:"осаге",ota:"османски турски",pa:"пенџапски",pag:"пангасинански",pal:"пахлави",pam:"пампанга",pap:"папијаменто",pau:"палауски",pcm:"нигеријски пиџин",peo:"староперсијски",phn:"феничански",pi:"пали",pl:"пољски",pon:"понпејски",prg:"пруски",pro:"староокситански",ps:"паштунски",pt:"португалски","pt-BR":"португалски (Бразил)","pt-PT":"португалски (Португал)",qu:"кечуа",quc:"киче",raj:"раџастански",rap:"рапануи",rar:"раротонгански",rm:"романш",rn:"кирунди",ro:"румунски","ro-MD":"молдавски",rof:"ромбо",rom:"ромски",root:"рут",ru:"руски",rup:"цинцарски",rw:"кињаруанда",rwk:"руа",sa:"санскрит",sad:"сандаве",sah:"саха",sam:"самаријански арамејски",saq:"самбуру",sas:"сасак",sat:"сантали",sba:"нгамбај",sbp:"сангу",sc:"сардински",scn:"сицилијански",sco:"шкотски",sd:"синди",sdh:"јужнокурдски",se:"северни сами",seh:"сена",sel:"селкупски",ses:"којраборо сени",sg:"санго",sga:"староирски",sh:"српскохрватски",shi:"ташелхит",shn:"шански",si:"синхалешки",sid:"сидамо",sk:"словачки",sl:"словеначки",sm:"самоански",sma:"јужни сами",smj:"луле сами",smn:"инари сами",sms:"сколт сами",sn:"шона",snk:"сонинке",so:"сомалски",sog:"согдијски",sq:"албански",sr:"српски",srn:"сранан тонго",srr:"серерски",ss:"свази",ssy:"сахо",st:"сесото",su:"сундански",suk:"сукума",sus:"сусу",sux:"сумерски",sv:"шведски",sw:"свахили","sw-CD":"кисвахили",swb:"коморски",syc:"сиријачки",syr:"сиријски",ta:"тамилски",te:"телугу",tem:"тимне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таџички",th:"тајски",ti:"тигриња",tig:"тигре",tiv:"тив",tk:"туркменски",tkl:"токелау",tl:"тагалог",tlh:"клингонски",tli:"тлингит",tmh:"тамашек",tn:"цвана",to:"тонгански",tog:"њаса тонга",tpi:"ток писин",tr:"турски",trv:"тароко",ts:"цонга",tsi:"цимшиан",tt:"татарски",tum:"тумбука",tvl:"тувалу",tw:"тви",twq:"тасавак",ty:"тахићански",tyv:"тувински",tzm:"централноатласки тамазигт",udm:"удмуртски",ug:"ујгурски",uga:"угаритски",uk:"украјински",umb:"умбунду",ur:"урду",uz:"узбечки",vai:"ваи",ve:"венда",vi:"вијетнамски",vo:"волапик",vot:"водски",vun:"вунџо",wa:"валонски",wae:"валсерски",wal:"волајта",war:"варајски",was:"вашо",wbp:"варлпири",wo:"волоф",xal:"калмички",xh:"коса",xog:"сога",yao:"јао",yap:"јапски",yav:"јангбен",ybb:"јемба",yi:"јидиш",yo:"јоруба",yue:"кантонски",za:"џуаншки",zap:"запотечки",zbl:"блисимболи",zen:"зенага",zgh:"стандардни марокански тамазигт",zh:"кинески","zh-Hans":"кинески (поједностављено кинеско писмо)","zh-Hant":"кинески (традиционално кинеско писмо)",zu:"зулу",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"ћирилица",Latn:"латиница",Arab:"арапско писмо",Guru:"гурмуки писмо",Tfng:"тифинаг писмо",Vaii:"ваи писмо",Hans:"поједностављено кинеско писмо",Hant:"традиционално кинеско писмо"}},sv:{rtl:false,languageNames:{aa:"afar",ab:"abchaziska",ace:"acehnesiska",ach:"acholi",ada:"adangme",ady:"adygeiska",ae:"avestiska",aeb:"tunisisk arabiska",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadiska",akz:"Alabama-muskogee",ale:"aleutiska",aln:"gegiska",alt:"sydaltaiska",am:"amhariska",an:"aragonesiska",ang:"fornengelska",anp:"angika",ar:"arabiska","ar-001":"modern standardarabiska",arc:"arameiska",arn:"mapudungun",aro:"araoniska",arp:"arapaho",arq:"algerisk arabiska",ars:"najdiarabiska",arw:"arawakiska",ary:"marockansk arabiska",arz:"egyptisk arabiska",as:"assamesiska",asa:"asu",ase:"amerikanskt teckenspråk",ast:"asturiska",av:"avariska",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azerbajdzjanska",ba:"basjkiriska",bal:"baluchiska",ban:"balinesiska",bar:"bayerska",bas:"basa",bax:"bamunska",bbc:"batak-toba",bbj:"ghomala",be:"vitryska",bej:"beja",bem:"bemba",bew:"betawiska",bez:"bena",bfd:"bafut",bfq:"bagada",bg:"bulgariska",bgn:"västbaluchiska",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjariska",bkm:"bamekon",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetanska",bpy:"bishnupriya",bqi:"bakhtiari",br:"bretonska",bra:"braj",brh:"brahuiska",brx:"bodo",bs:"bosniska",bss:"bakossi",bua:"burjätiska",bug:"buginesiska",bum:"boulou",byn:"blin",byv:"bagangte",ca:"katalanska",cad:"caddo",car:"karibiska",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"tjetjenska",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukesiska",chm:"mariska",chn:"chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokesiska",chy:"cheyenne",ckb:"soranisk kurdiska",co:"korsikanska",cop:"koptiska",cps:"kapisnon",cr:"cree",crh:"krimtatariska",crs:"seychellisk kreol",cs:"tjeckiska",csb:"kasjubiska",cu:"kyrkslaviska",cv:"tjuvasjiska",cy:"walesiska",da:"danska",dak:"dakota",dar:"darginska",dav:"taita",de:"tyska","de-AT":"österrikisk tyska","de-CH":"schweizisk högtyska",del:"delaware",den:"slavej",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"lågsorbiska",dtp:"centraldusun",dua:"duala",dum:"medelnederländska",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emiliska",egy:"fornegyptiska",eka:"ekajuk",el:"grekiska",elx:"elamitiska",en:"engelska","en-AU":"australisk engelska","en-CA":"kanadensisk engelska","en-GB":"brittisk engelska","en-US":"amerikansk engelska",enm:"medelengelska",eo:"esperanto",es:"spanska","es-419":"latinamerikansk spanska","es-ES":"europeisk spanska","es-MX":"mexikansk spanska",esu:"centralalaskisk jupiska",et:"estniska",eu:"baskiska",ewo:"ewondo",ext:"extremaduriska",fa:"persiska",fan:"fang",fat:"fanti",ff:"fulani",fi:"finska",fil:"filippinska",fit:"meänkieli",fj:"fijianska",fo:"färöiska",fon:"fonspråket",fr:"franska","fr-CA":"kanadensisk franska","fr-CH":"schweizisk franska",frc:"cajun-franska",frm:"medelfranska",fro:"fornfranska",frp:"frankoprovensalska",frr:"nordfrisiska",frs:"östfrisiska",fur:"friulianska",fy:"västfrisiska",ga:"iriska",gaa:"gã",gag:"gagauziska",gay:"gayo",gba:"gbaya",gbz:"zoroastrisk dari",gd:"skotsk gäliska",gez:"etiopiska",gil:"gilbertiska",gl:"galiciska",glk:"gilaki",gmh:"medelhögtyska",gn:"guaraní",goh:"fornhögtyska",gom:"Goa-konkani",gon:"gondi",gor:"gorontalo",got:"gotiska",grb:"grebo",grc:"forngrekiska",gsw:"schweizertyska",gu:"gujarati",guc:"wayuu",gur:"farefare",guz:"gusii",gv:"manx",gwi:"gwichin",ha:"hausa",hai:"haida",hak:"hakka",haw:"hawaiiska",he:"hebreiska",hi:"hindi",hif:"Fiji-hindi",hil:"hiligaynon",hit:"hettitiska",hmn:"hmongspråk",ho:"hirimotu",hr:"kroatiska",hsb:"högsorbiska",hsn:"xiang",ht:"haitiska",hu:"ungerska",hup:"hupa",hy:"armeniska",hz:"herero",ia:"interlingua",iba:"ibanska",ibb:"ibibio",id:"indonesiska",ie:"interlingue",ig:"igbo",ii:"szezuan i",ik:"inupiak",ilo:"iloko",inh:"ingusjiska",io:"ido",is:"isländska",it:"italienska",iu:"inuktitut",izh:"ingriska",ja:"japanska",jam:"jamaikansk engelsk kreol",jbo:"lojban",jgo:"ngomba",jmc:"kimashami",jpr:"judisk persiska",jrb:"judisk arabiska",jut:"jylländska",jv:"javanesiska",ka:"georgiska",kaa:"karakalpakiska",kab:"kabyliska",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardinska",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdiska",ken:"kenjang",kfo:"koro",kg:"kikongo",kgp:"kaingang",kha:"khasi",kho:"khotanesiska",khq:"Timbuktu-songhai",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazakiska",kkj:"mkako",kl:"grönländska",kln:"kalenjin",km:"kambodjanska",kmb:"kimbundu",kn:"kannada",ko:"koreanska",koi:"komi-permjakiska",kok:"konkani",kos:"kosreanska",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",kri:"krio",krj:"kinaray-a",krl:"karelska",kru:"kurukh",ks:"kashmiriska",ksb:"kisambaa",ksf:"bafia",ksh:"kölniska",ku:"kurdiska",kum:"kumykiska",kut:"kutenaj",kv:"kome",kw:"korniska",ky:"kirgiziska",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgiska",lez:"lezghien",lfn:"lingua franca nova",lg:"luganda",li:"limburgiska",lij:"liguriska",liv:"livoniska",lkt:"lakota",lmo:"lombardiska",ln:"lingala",lo:"laotiska",lol:"mongo",lou:"louisiana-kreol",loz:"lozi",lrc:"nordluri",lt:"litauiska",ltg:"lettgalliska",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseño",lun:"lunda",lus:"lushai",luy:"luhya",lv:"lettiska",lzh:"litterär kineiska",lzz:"laziska",mad:"maduresiska",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mande",mas:"massajiska",mde:"maba",mdf:"moksja",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauritansk kreol",mg:"malagassiska",mga:"medeliriska",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalliska",mi:"maori",mic:"mi’kmaq",min:"minangkabau",mk:"makedonska",ml:"malayalam",mn:"mongoliska",mnc:"manchuriska",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"västmariska",ms:"malajiska",mt:"maltesiska",mua:"mundang",mus:"muskogee",mwl:"mirandesiska",mwr:"marwari",mwv:"mentawai",my:"burmesiska",mye:"myene",myv:"erjya",mzn:"mazanderani",na:"nauruanska",nan:"min nan",nap:"napolitanska",naq:"nama",nb:"norskt bokmål",nd:"nordndebele",nds:"lågtyska","nds-NL":"lågsaxiska",ne:"nepalesiska","new":"newariska",ng:"ndonga",nia:"nias",niu:"niueanska",njo:"ao-naga",nl:"nederländska","nl-BE":"flamländska",nmg:"kwasio",nn:"nynorska",nnh:"bamileké-ngiemboon",no:"norska",nog:"nogai",non:"fornnordiska",nov:"novial",nqo:"n-kå",nr:"sydndebele",nso:"nordsotho",nus:"nuer",nv:"navaho",nwc:"klassisk newariska",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitanska",oj:"odjibwa",om:"oromo",or:"oriya",os:"ossetiska",osa:"osage",ota:"ottomanska",pa:"punjabi",pag:"pangasinan",pal:"medelpersiska",pam:"pampanga",pap:"papiamento",pau:"palau",pcd:"pikardiska",pcm:"Nigeria-pidgin",pdc:"Pennsylvaniatyska",pdt:"mennonitisk lågtyska",peo:"fornpersiska",pfl:"Pfalz-tyska",phn:"feniciska",pi:"pali",pl:"polska",pms:"piemontesiska",pnt:"pontiska",pon:"pohnpeiska",prg:"fornpreussiska",pro:"fornprovensalska",ps:"afghanska",pt:"portugisiska","pt-BR":"brasiliansk portugisiska","pt-PT":"europeisk portugisiska",qu:"quechua",quc:"quiché",qug:"Chimborazo-höglandskichwa",raj:"rajasthani",rap:"rapanui",rar:"rarotonganska",rgn:"romagnol",rif:"riffianska",rm:"rätoromanska",rn:"rundi",ro:"rumänska","ro-MD":"moldaviska",rof:"rombo",rom:"romani",root:"rot",rtm:"rotumänska",ru:"ryska",rue:"rusyn",rug:"rovianska",rup:"arumänska",rw:"kinjarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"jakutiska",sam:"samaritanska",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"sangu",sc:"sardinska",scn:"sicilianska",sco:"skotska",sd:"sindhi",sdc:"sassaresisk sardiska",sdh:"sydkurdiska",se:"nordsamiska",see:"seneca",seh:"sena",sei:"seri",sel:"selkup",ses:"Gao-songhai",sg:"sango",sga:"forniriska",sgs:"samogitiska",sh:"serbokroatiska",shi:"tachelhit",shn:"shan",shu:"Tchad-arabiska",si:"singalesiska",sid:"sidamo",sk:"slovakiska",sl:"slovenska",sli:"lågsilesiska",sly:"selayar",sm:"samoanska",sma:"sydsamiska",smj:"lulesamiska",smn:"enaresamiska",sms:"skoltsamiska",sn:"shona",snk:"soninke",so:"somaliska",sog:"sogdiska",sq:"albanska",sr:"serbiska",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sydsotho",stq:"saterfrisiska",su:"sundanesiska",suk:"sukuma",sus:"susu",sux:"sumeriska",sv:"svenska",sw:"swahili","sw-CD":"Kongo-swahili",swb:"shimaoré",syc:"klassisk syriska",syr:"syriska",szl:"silesiska",ta:"tamil",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadzjikiska",th:"thailändska",ti:"tigrinja",tig:"tigré",tiv:"tivi",tk:"turkmeniska",tkl:"tokelauiska",tkr:"tsakhur",tl:"tagalog",tlh:"klingonska",tli:"tlingit",tly:"talysh",tmh:"tamashek",tn:"tswana",to:"tonganska",tog:"nyasatonganska",tpi:"tok pisin",tr:"turkiska",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"tsakodiska",tsi:"tsimshian",tt:"tatariska",ttt:"muslimsk tatariska",tum:"tumbuka",tvl:"tuvaluanska",tw:"twi",twq:"tasawaq",ty:"tahitiska",tyv:"tuviniska",tzm:"centralmarockansk tamazight",udm:"udmurtiska",ug:"uiguriska",uga:"ugaritiska",uk:"ukrainska",umb:"umbundu",ur:"urdu",uz:"uzbekiska",vai:"vaj",ve:"venda",vec:"venetianska",vep:"veps",vi:"vietnamesiska",vls:"västflamländska",vmf:"Main-frankiska",vo:"volapük",vot:"votiska",vro:"võru",vun:"vunjo",wa:"vallonska",wae:"walsertyska",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kalmuckiska",xh:"xhosa",xmf:"mingrelianska",xog:"lusoga",yao:"kiyao",yap:"japetiska",yav:"yangben",ybb:"bamileké-jemba",yi:"jiddisch",yo:"yoruba",yrl:"nheengatu",yue:"kantonesiska",za:"zhuang",zap:"zapotek",zbl:"blissymboler",zea:"zeeländska",zen:"zenaga",zgh:"marockansk standard-tamazight",zh:"kinesiska","zh-Hans":"förenklad kinesiska","zh-Hant":"traditionell kinesiska",zu:"zulu",zun:"zuni",zza:"zazaiska"},scriptNames:{Cyrl:"kyrilliska",Latn:"latinska",Arab:"arabiska",Guru:"gurmukhiska",Tfng:"tifinaghiska",Vaii:"vaj",Hans:"förenklade",Hant:"traditionella"}},ta:{rtl:false,languageNames:{aa:"அஃபார்",ab:"அப்காஜியான்",ace:"ஆச்சினீஸ்",ach:"அகோலி",ada:"அதாங்மே",ady:"அதகே",ae:"அவெஸ்தான்",aeb:"துனிசிய அரபு",af:"ஆஃப்ரிகான்ஸ்",afh:"அஃப்ரிஹிலி",agq:"அகெம்",ain:"ஐனு",ak:"அகான்",akk:"அக்கேதியன்",ale:"அலூட்",alt:"தெற்கு அல்தை",am:"அம்ஹாரிக்",an:"ஆர்கோனீஸ்",ang:"பழைய ஆங்கிலம்",anp:"அங்கிகா",ar:"அரபிக்","ar-001":"நவீன நிலையான அரபிக்",arc:"அராமைக்",arn:"மபுச்சே",arp:"அரபஹோ",arw:"அராவாக்",as:"அஸ்ஸாமீஸ்",asa:"அசு",ast:"அஸ்துரியன்",av:"அவேரிக்",awa:"அவதி",ay:"அய்மரா",az:"அசர்பைஜானி",ba:"பஷ்கிர்",bal:"பலூச்சி",ban:"பலினீஸ்",bas:"பாஸா",be:"பெலாருஷியன்",bej:"பேஜா",bem:"பெம்பா",bez:"பெனா",bfq:"படகா",bg:"பல்கேரியன்",bgn:"மேற்கு பலோச்சி",bho:"போஜ்பூரி",bi:"பிஸ்லாமா",bik:"பிகோல்",bin:"பினி",bla:"சிக்சிகா",bm:"பம்பாரா",bn:"வங்காளம்",bo:"திபெத்தியன்",bpy:"பிஷ்ணுப்பிரியா",br:"பிரெட்டன்",bra:"ப்ராஜ்",brx:"போடோ",bs:"போஸ்னியன்",bua:"புரியாத்",bug:"புகினீஸ்",byn:"ப்லின்",ca:"கேட்டலான்",cad:"கேடோ",car:"கரீப்",cch:"ஆட்சம்",ccp:"சக்மா",ce:"செச்சென்",ceb:"செபுவானோ",cgg:"சிகா",ch:"சாமோரோ",chb:"சிப்சா",chg:"ஷகதை",chk:"சூகிசே",chm:"மாரி",chn:"சினூக் ஜார்கான்",cho:"சோக்தௌ",chp:"சிபெவ்யான்",chr:"செரோகீ",chy:"செயேனி",ckb:"மத்திய குர்திஷ்",co:"கார்சிகன்",cop:"காப்டிக்",cr:"க்ரீ",crh:"கிரிமியன் துர்க்கி",crs:"செசெல்வா க்ரெயோல் பிரெஞ்சு",cs:"செக்",csb:"கஷுபியன்",cu:"சர்ச் ஸ்லாவிக்",cv:"சுவாஷ்",cy:"வேல்ஷ்",da:"டேனிஷ்",dak:"டகோடா",dar:"தார்குவா",dav:"டைடா",de:"ஜெர்மன்","de-AT":"ஆஸ்திரிய ஜெர்மன்","de-CH":"ஸ்விஸ் ஹை ஜெர்மன்",del:"டெலாவர்",den:"ஸ்லாவ்",dgr:"டோக்ரிப்",din:"டின்கா",dje:"ஸார்மா",doi:"டோக்ரி",dsb:"லோயர் சோர்பியன்",dua:"டுவாலா",dum:"மிடில் டச்சு",dv:"திவேஹி",dyo:"ஜோலா-ஃபோன்யி",dyu:"ட்யூலா",dz:"பூடானி",dzg:"டசாகா",ebu:"எம்பு",ee:"ஈவ்",efi:"எஃபிக்",egy:"பண்டைய எகிப்தியன்",eka:"ஈகாஜுக்",el:"கிரேக்கம்",elx:"எலமைட்",en:"ஆங்கிலம்","en-AU":"ஆஸ்திரேலிய ஆங்கிலம்","en-CA":"கனடிய ஆங்கிலம்","en-GB":"பிரிட்டிஷ் ஆங்கிலம்","en-US":"அமெரிக்க ஆங்கிலம்",enm:"மிடில் ஆங்கிலம்",eo:"எஸ்பரேன்டோ",es:"ஸ்பானிஷ்","es-419":"லத்தின் அமெரிக்க ஸ்பானிஷ்","es-ES":"ஐரோப்பிய ஸ்பானிஷ்","es-MX":"மெக்ஸிகன் ஸ்பானிஷ்",et:"எஸ்டோனியன்",eu:"பாஸ்க்",ewo:"எவோன்டோ",fa:"பெர்ஷியன்",fan:"ஃபேங்க்",fat:"ஃபான்டி",ff:"ஃபுலா",fi:"ஃபின்னிஷ்",fil:"ஃபிலிபினோ",fj:"ஃபிஜியன்",fo:"ஃபரோயிஸ்",fon:"ஃபான்",fr:"பிரெஞ்சு","fr-CA":"கனடிய பிரெஞ்சு","fr-CH":"ஸ்விஸ் பிரஞ்சு",frc:"கஜுன் பிரெஞ்சு",frm:"மிடில் பிரெஞ்சு",fro:"பழைய பிரெஞ்சு",frr:"வடக்கு ஃப்ரிஸியான்",frs:"கிழக்கு ஃப்ரிஸியான்",fur:"ஃப்ரியூலியன்",fy:"மேற்கு ஃப்ரிஷியன்",ga:"ஐரிஷ்",gaa:"கா",gag:"காகௌஸ்",gan:"கன் சீனம்",gay:"கயோ",gba:"பயா",gd:"ஸ்காட்ஸ் கேலிக்",gez:"கீஜ்",gil:"கில்பெர்டீஸ்",gl:"காலிஸியன்",gmh:"மிடில் ஹை ஜெர்மன்",gn:"க்வாரனி",goh:"பழைய ஹை ஜெர்மன்",gon:"கோன்டி",gor:"கோரோன்டலோ",got:"கோதிக்",grb:"க்ரேபோ",grc:"பண்டைய கிரேக்கம்",gsw:"ஸ்விஸ் ஜெர்மன்",gu:"குஜராத்தி",guz:"குஸி",gv:"மேங்க்ஸ்",gwi:"குவிசின்",ha:"ஹௌஸா",hai:"ஹைடா",hak:"ஹக்கா சீனம்",haw:"ஹவாயியன்",he:"ஹீப்ரூ",hi:"இந்தி",hif:"ஃபிஜி இந்தி",hil:"ஹிலிகாய்னான்",hit:"ஹிட்டைட்",hmn:"மாங்க்",ho:"ஹிரி மோட்டு",hr:"குரோஷியன்",hsb:"அப்பர் சோர்பியான்",hsn:"சியாங்க் சீனம்",ht:"ஹைத்தியன் க்ரியோலி",hu:"ஹங்கேரியன்",hup:"ஹுபா",hy:"ஆர்மேனியன்",hz:"ஹெரேரோ",ia:"இன்டர்லிங்வா",iba:"இபான்",ibb:"இபிபியோ",id:"இந்தோனேஷியன்",ie:"இன்டர்லிங்",ig:"இக்போ",ii:"சிசுவான் ஈ",ik:"இனுபியாக்",ilo:"இலோகோ",inh:"இங்குஷ்",io:"இடோ",is:"ஐஸ்லேண்டிக்",it:"இத்தாலியன்",iu:"இனுகிடூட்",ja:"ஜப்பானியம்",jbo:"லோஜ்பன்",jgo:"நகொம்பா",jmc:"மாசெம்",jpr:"ஜூதேயோ-பெர்ஷியன்",jrb:"ஜூதேயோ-அராபிக்",jv:"ஜாவனீஸ்",ka:"ஜார்ஜியன்",kaa:"காரா-கல்பாக்",kab:"கபாய்ல்",kac:"காசின்",kaj:"ஜ்ஜூ",kam:"கம்பா",kaw:"காவி",kbd:"கபார்டியன்",kcg:"தையாப்",kde:"மகொண்டே",kea:"கபுவெர்தியானு",kfo:"கோரோ",kg:"காங்கோ",kha:"காஸி",kho:"கோதானீஸ்",khq:"கொய்ரா சீனீ",ki:"கிகுயூ",kj:"குவான்யாமா",kk:"கசாக்",kkj:"ககோ",kl:"கலாலிசூட்",kln:"கலின்ஜின்",km:"கெமெர்",kmb:"கிம்புன்து",kn:"கன்னடம்",ko:"கொரியன்",koi:"கொமி-பெர்ம்யாக்",kok:"கொங்கணி",kos:"கோஸ்ரைன்",kpe:"க்பெல்லே",kr:"கனுரி",krc:"கராசே-பல்கார்",krl:"கரேலியன்",kru:"குருக்",ks:"காஷ்மிரி",ksb:"ஷம்பாலா",ksf:"பாஃபியா",ksh:"கொலோக்னியன்",ku:"குர்திஷ்",kum:"கும்இக்",kut:"குடேனை",kv:"கொமி",kw:"கார்னிஷ்",ky:"கிர்கிஸ்",la:"லத்தின்",lad:"லடினோ",lag:"லங்கி",lah:"லஹன்டா",lam:"லம்பா",lb:"லக்ஸம்போர்கிஷ்",lez:"லெஜ்ஜியன்",lg:"கான்டா",li:"லிம்பர்கிஷ்",lkt:"லகோடா",ln:"லிங்காலா",lo:"லாவோ",lol:"மோங்கோ",lou:"லூசியானா க்ரயோல்",loz:"லோசி",lrc:"வடக்கு லுரி",lt:"லிதுவேனியன்",lu:"லுபா-கடாங்கா",lua:"லுபா-லுலுலா",lui:"லுய்சேனோ",lun:"லூன்டா",luo:"லுயோ",lus:"மிஸோ",luy:"லுயியா",lv:"லாட்வியன்",mad:"மதுரீஸ்",mag:"மகாஹி",mai:"மைதிலி",mak:"மகாசார்",man:"மான்டிங்கோ",mas:"மாசாய்",mdf:"மோக்க்ஷா",mdr:"மான்டார்",men:"மென்டீ",mer:"மெரு",mfe:"மொரிசியன்",mg:"மலகாஸி",mga:"மிடில் ஐரிஷ்",mgh:"மகுவா-மீட்டோ",mgo:"மேடா",mh:"மார்ஷெலீஸ்",mi:"மௌரி",mic:"மிக்மாக்",min:"மின்னாங்கபௌ",mk:"மாஸிடோனியன்",ml:"மலையாளம்",mn:"மங்கோலியன்",mnc:"மன்சூ",mni:"மணிப்புரி",moh:"மொஹாக்",mos:"மோஸ்ஸி",mr:"மராத்தி",ms:"மலாய்",mt:"மால்டிஸ்",mua:"முன்டாங்",mus:"க்ரீக்",mwl:"மிரான்டீஸ்",mwr:"மார்வாரி",my:"பர்மீஸ்",myv:"ஏர்ஜியா",mzn:"மசந்தேரனி",na:"நவ்ரூ",nan:"மின் நான் சீனம்",nap:"நியோபோலிடன்",naq:"நாமா",nb:"நார்வேஜியன் பொக்மால்",nd:"வடக்கு தெபெலே",nds:"லோ ஜெர்மன்","nds-NL":"லோ சாக்ஸன்",ne:"நேபாளி","new":"நெவாரி",ng:"தோங்கா",nia:"நியாஸ்",niu:"நியூவான்",nl:"டச்சு","nl-BE":"ஃப்லெமிஷ்",nmg:"க்வாசியோ",nn:"நார்வேஜியன் நியூநார்ஸ்க்",nnh:"நெகெய்ம்பூன்",no:"நார்வேஜியன்",nog:"நோகை",non:"பழைய நோர்ஸ்",nqo:"என்‘கோ",nr:"தெற்கு தெபெலே",nso:"வடக்கு சோதோ",nus:"நியூர்",nv:"நவாஜோ",nwc:"பாரம்பரிய நேவாரி",ny:"நயன்ஜா",nym:"நியாம்வேஜி",nyn:"நியான்கோலே",nyo:"நியோரோ",nzi:"நிஜ்மா",oc:"ஒக்கிடன்",oj:"ஒஜிப்வா",om:"ஒரோமோ",or:"ஒடியா",os:"ஒசெட்டிக்",osa:"ஓசேஜ்",ota:"ஓட்டோமான் துருக்கிஷ்",pa:"பஞ்சாபி",pag:"பன்காசினன்",pal:"பாஹ்லவி",pam:"பம்பாங்கா",pap:"பபியாமென்டோ",pau:"பலௌவன்",pcm:"நைஜீரியன் பிட்கின்",pdc:"பென்சில்வேனிய ஜெர்மன்",peo:"பழைய பெர்ஷியன்",phn:"ஃபொனிஷியன்",pi:"பாலி",pl:"போலிஷ்",pon:"ஃபோன்பெயென்",prg:"பிரஷ்யன்",pro:"பழைய ப்ரோவென்சால்",ps:"பஷ்தோ",pt:"போர்ச்சுக்கீஸ்","pt-BR":"பிரேசிலிய போர்ச்சுகீஸ்","pt-PT":"ஐரோப்பிய போர்ச்சுகீஸ்",qu:"க்வெச்சுவா",quc:"கீசீ",raj:"ராஜஸ்தானி",rap:"ரபனுய்",rar:"ரரோடோங்கன்",rm:"ரோமான்ஷ்",rn:"ருண்டி",ro:"ரோமேனியன்","ro-MD":"மோல்டாவியன்",rof:"ரோம்போ",rom:"ரோமானி",root:"ரூட்",ru:"ரஷியன்",rup:"அரோமானியன்",rw:"கின்யாருவான்டா",rwk:"ருவா",sa:"சமஸ்கிருதம்",sad:"சான்டாவே",sah:"சக்கா",sam:"சமாரிடன் அராமைக்",saq:"சம்புரு",sas:"சாசாக்",sat:"சான்டாலி",saz:"சௌராஷ்டிரம்",sba:"நெகாம்பே",sbp:"சங்கு",sc:"சார்தீனியன்",scn:"சிசிலியன்",sco:"ஸ்காட்ஸ்",sd:"சிந்தி",sdh:"தெற்கு குர்திஷ்",se:"வடக்கு சமி",seh:"செனா",sel:"செல்குப்",ses:"கொய்ராபோரோ சென்னி",sg:"சாங்கோ",sga:"பழைய ஐரிஷ்",sh:"செர்போ-குரோஷியன்",shi:"தசேஹித்",shn:"ஷான்",si:"சிங்களம்",sid:"சிடாமோ",sk:"ஸ்லோவாக்",sl:"ஸ்லோவேனியன்",sm:"சமோவான்",sma:"தெற்கு சமி",smj:"லுலே சமி",smn:"இனாரி சமி",sms:"ஸ்கோல்ட் சமி",sn:"ஷோனா",snk:"சோனின்கே",so:"சோமாலி",sog:"சோக்தியன்",sq:"அல்பேனியன்",sr:"செர்பியன்",srn:"ஸ்ரானன் டோங்கோ",srr:"செரெர்",ss:"ஸ்வாடீ",ssy:"சஹோ",st:"தெற்கு ஸோதோ",su:"சுண்டானீஸ்",suk:"சுகுமா",sus:"சுசு",sux:"சுமேரியன்",sv:"ஸ்வீடிஷ்",sw:"ஸ்வாஹிலி","sw-CD":"காங்கோ ஸ்வாஹிலி",swb:"கொமோரியன்",syc:"பாரம்பரிய சிரியாக்",syr:"சிரியாக்",ta:"தமிழ்",te:"தெலுங்கு",tem:"டிம்னே",teo:"டெசோ",ter:"டெரெனோ",tet:"டெடும்",tg:"தஜிக்",th:"தாய்",ti:"டிக்ரின்யா",tig:"டைக்ரே",tiv:"டிவ்",tk:"துருக்மென்",tkl:"டோகேலௌ",tl:"டாகாலோக்",tlh:"க்ளிங்கோன்",tli:"லிங்கிட்",tmh:"தமஷேக்",tn:"ஸ்வானா",to:"டோங்கான்",tog:"நயாசா டோங்கா",tpi:"டோக் பிஸின்",tr:"துருக்கிஷ்",trv:"தரோகோ",ts:"ஸோங்கா",tsi:"ட்ஸிம்ஷியன்",tt:"டாடர்",tum:"தும்புகா",tvl:"டுவாலு",tw:"ட்வி",twq:"டசவாக்",ty:"தஹிதியன்",tyv:"டுவினியன்",tzm:"மத்திய அட்லஸ் டமசைட்",udm:"உட்முர்ட்",ug:"உய்குர்",uga:"உகாரிடிக்",uk:"உக்ரைனியன்",umb:"அம்பொண்டு",ur:"உருது",uz:"உஸ்பெக்",vai:"வை",ve:"வென்டா",vi:"வியட்நாமீஸ்",vo:"ஒலாபூக்",vot:"வோட்க்",vun:"வுன்ஜோ",wa:"ஒவாலூன்",wae:"வால்சேர்",wal:"வோலாய்ட்டா",war:"வாரே",was:"வாஷோ",wbp:"வல்பிரி",wo:"ஓலோஃப்",wuu:"வூ சீனம்",xal:"கல்மிக்",xh:"ஹோசா",xog:"சோகா",yao:"யாவ்",yap:"யாபேசே",yav:"யாங்பென்",ybb:"யெம்பா",yi:"யெட்டிஷ்",yo:"யோருபா",yue:"காண்டோனீஸ்",za:"ஜுவாங்",zap:"ஜாபோடெக்",zbl:"ப்லிஸ்ஸிம்பால்ஸ்",zen:"ஜெனகா",zgh:"ஸ்டாண்டர்ட் மொராக்கன் தமாசைட்",zh:"சீனம்","zh-Hans":"எளிதாக்கப்பட்ட சீன மாண்டரின்","zh-Hant":"பாரம்பரிய சீன மாண்டரின்",zu:"ஜுலு",zun:"ஜூனி",zza:"ஜாஜா"},scriptNames:{Cyrl:"சிரிலிக்",Latn:"லத்தின்",Arab:"அரபிக்",Guru:"குர்முகி",Tfng:"டிஃபினாக்",Vaii:"வை",Hans:"எளிதாக்கப்பட்டது",Hant:"பாரம்பரியம்"}},te:{rtl:false,languageNames:{aa:"అఫార్",ab:"అబ్ఖాజియన్",ace:"ఆఖినీస్",ach:"అకోలి",ada:"అడాంగ్మే",ady:"అడిగాబ్జే",ae:"అవేస్టాన్",aeb:"టునీషియా అరబిక్",af:"ఆఫ్రికాన్స్",afh:"అఫ్రిహిలి",agq:"అగేమ్",ain:"ఐను",ak:"అకాన్",akk:"అక్కాడియాన్",ale:"అలియుట్",alt:"దక్షిణ ఆల్టై",am:"అమ్హారిక్",an:"అరగోనిస్",ang:"ప్రాచీన ఆంగ్లం",anp:"ఆంగిక",ar:"అరబిక్","ar-001":"ఆధునిక ప్రామాణిక అరబిక్",arc:"అరామైక్",arn:"మపుచే",arp:"అరాపాహో",arw:"అరావాక్",arz:"ఈజిప్షియన్ అరబిక్",as:"అస్సామీస్",asa:"అసు",ast:"ఆస్టూరియన్",av:"అవారిక్",awa:"అవధి",ay:"ఐమారా",az:"అజర్బైజాని",ba:"బాష్కిర్",bal:"బాలుచి",ban:"బాలినీస్",bas:"బసా",be:"బెలారుషియన్",bej:"బేజా",bem:"బెంబా",bez:"బెనా",bg:"బల్గేరియన్",bgn:"పశ్చిమ బలూచీ",bho:"భోజ్‌పురి",bi:"బిస్లామా",bik:"బికోల్",bin:"బిని",bla:"సిక్సికా",bm:"బంబారా",bn:"బంగ్లా",bo:"టిబెటన్",bpy:"బిష్ణుప్రియ",br:"బ్రెటన్",bra:"బ్రాజ్",brx:"బోడో",bs:"బోస్నియన్",bua:"బురియట్",bug:"బుగినీస్",byn:"బ్లిన్",ca:"కాటలాన్",cad:"కేడ్డో",car:"కేరిబ్",cch:"అట్సామ్",ccp:"చక్మా",ce:"చెచెన్",ceb:"సెబువానో",cgg:"ఛిగా",ch:"చమర్రో",chb:"చిబ్చా",chg:"చాగటై",chk:"చూకీస్",chm:"మారి",chn:"చినూక్ జార్గన్",cho:"చక్టా",chp:"చిపెవ్యాన్",chr:"చెరోకీ",chy:"చేయేన్",ckb:"సెంట్రల్ కర్డిష్",co:"కోర్సికన్",cop:"కోప్టిక్",cr:"క్రి",crh:"క్రిమియన్ టర్కిష్",crs:"సెసేల్వా క్రియోల్ ఫ్రెంచ్",cs:"చెక్",csb:"కషుబియన్",cu:"చర్చ్ స్లావిక్",cv:"చువాష్",cy:"వెల్ష్",da:"డానిష్",dak:"డకోటా",dar:"డార్గ్వా",dav:"టైటా",de:"జర్మన్","de-AT":"ఆస్ట్రియన్ జర్మన్","de-CH":"స్విస్ హై జర్మన్",del:"డెలావేర్",den:"స్లేవ్",dgr:"డోగ్రిబ్",din:"డింకా",dje:"జార్మా",doi:"డోగ్రి",dsb:"లోయర్ సోర్బియన్",dua:"డ్యూలా",dum:"మధ్యమ డచ్",dv:"దివేహి",dyo:"జోలా-ఫోనయి",dyu:"డ్యులా",dz:"జోంఖా",dzg:"డాజాగా",ebu:"ఇంబు",ee:"యూ",efi:"ఎఫిక్",egy:"ప్రాచీన ఈజిప్షియన్",eka:"ఏకాజక్",el:"గ్రీక్",elx:"ఎలామైట్",en:"ఆంగ్లం","en-AU":"ఆస్ట్రేలియన్ ఇంగ్లీష్","en-CA":"కెనడియన్ ఇంగ్లీష్","en-GB":"బ్రిటిష్ ఇంగ్లీష్","en-US":"అమెరికన్ ఇంగ్లీష్",enm:"మధ్యమ ఆంగ్లం",eo:"ఎస్పెరాంటో",es:"స్పానిష్","es-419":"లాటిన్ అమెరికన్ స్పానిష్","es-ES":"యూరోపియన్ స్పానిష్","es-MX":"మెక్సికన్ స్పానిష్",et:"ఎస్టోనియన్",eu:"బాస్క్యూ",ewo:"ఎవోండొ",fa:"పర్షియన్",fan:"ఫాంగ్",fat:"ఫాంటి",ff:"ఫ్యుల",fi:"ఫిన్నిష్",fil:"ఫిలిపినో",fj:"ఫిజియన్",fo:"ఫారోస్",fon:"ఫాన్",fr:"ఫ్రెంచ్","fr-CA":"కెనడియెన్ ఫ్రెంచ్","fr-CH":"స్విస్ ఫ్రెంచ్",frc:"కాజున్ ఫ్రెంచ్",frm:"మధ్యమ ప్రెంచ్",fro:"ప్రాచీన ఫ్రెంచ్",frr:"ఉత్తర ఫ్రిసియన్",frs:"తూర్పు ఫ్రిసియన్",fur:"ఫ్రియులియన్",fy:"పశ్చిమ ఫ్రిసియన్",ga:"ఐరిష్",gaa:"గా",gag:"గాగౌజ్",gan:"గాన్ చైనీస్",gay:"గాయో",gba:"గ్బాయా",gd:"స్కాటిష్ గేలిక్",gez:"జీజ్",gil:"గిల్బర్టీస్",gl:"గాలిషియన్",gmh:"మధ్యమ హై జర్మన్",gn:"గ్వారనీ",goh:"ప్రాచీన హై జర్మన్",gon:"గోండి",gor:"గోరోంటలా",got:"గోథిక్",grb:"గ్రేబో",grc:"ప్రాచీన గ్రీక్",gsw:"స్విస్ జర్మన్",gu:"గుజరాతి",guz:"గుస్సీ",gv:"మాంక్స్",gwi:"గ్విచిన్",ha:"హౌసా",hai:"హైడా",hak:"హక్కా చైనీస్",haw:"హవాయియన్",he:"హిబ్రూ",hi:"హిందీ",hil:"హిలిగెనాన్",hit:"హిట్టిటే",hmn:"మోంగ్",ho:"హిరి మోటు",hr:"క్రొయేషియన్",hsb:"అప్పర్ సోర్బియన్",hsn:"జియాంగ్ చైనీస్",ht:"హైటియన్ క్రియోల్",hu:"హంగేరియన్",hup:"హుపా",hy:"ఆర్మేనియన్",hz:"హెరెరో",ia:"ఇంటర్లింగ్వా",iba:"ఐబాన్",ibb:"ఇబిబియో",id:"ఇండోనేషియన్",ie:"ఇంటర్లింగ్",ig:"ఇగ్బో",ii:"శిషువన్ ఈ",ik:"ఇనుపైయాక్",ilo:"ఐలోకో",inh:"ఇంగుష్",io:"ఈడో",is:"ఐస్లాండిక్",it:"ఇటాలియన్",iu:"ఇనుక్టిటుట్",ja:"జపనీస్",jbo:"లోజ్బాన్",jgo:"గోంబా",jmc:"మకొమ్",jpr:"జ్యుడియో-పర్షియన్",jrb:"జ్యుడియో-అరబిక్",jv:"జావనీస్",ka:"జార్జియన్",kaa:"కారా-కల్పాక్",kab:"కాబిల్",kac:"కాచిన్",kaj:"జ్యూ",kam:"కంబా",kaw:"కావి",kbd:"కబార్డియన్",kcg:"ట్యాప్",kde:"మకొండే",kea:"కాబువేర్దియను",kfo:"కోరో",kg:"కోంగో",kha:"ఖాసి",kho:"ఖోటనీస్",khq:"కొయరా చీన్నీ",ki:"కికుయు",kj:"క్వాన్యామ",kk:"కజఖ్",kkj:"కాకో",kl:"కలాల్లిసూట్",kln:"కలెంజిన్",km:"ఖ్మేర్",kmb:"కిమ్బుండు",kn:"కన్నడ",ko:"కొరియన్",koi:"కోమి-పర్మాక్",kok:"కొంకణి",kos:"కోస్రేయన్",kpe:"పెల్లే",kr:"కానురి",krc:"కరచే-బల్కార్",krl:"కరేలియన్",kru:"కూరుఖ్",ks:"కాశ్మీరి",ksb:"శంబాలా",ksf:"బాఫియ",ksh:"కొలోనియన్",ku:"కుర్దిష్",kum:"కుమ్యిక్",kut:"కుటేనై",kv:"కోమి",kw:"కోర్నిష్",ky:"కిర్గిజ్",la:"లాటిన్",lad:"లాడినో",lag:"లాంగీ",lah:"లాహండా",lam:"లాంబా",lb:"లక్సెంబర్గిష్",lez:"లేజ్ఘియన్",lg:"గాండా",li:"లిమ్బర్గిష్",lkt:"లకొటా",ln:"లింగాల",lo:"లావో",lol:"మొంగో",lou:"లూసియానా క్రియోల్",loz:"లోజి",lrc:"ఉత్తర లూరీ",lt:"లిథువేనియన్",lu:"లూబ-కటాంగ",lua:"లుబా-లులువ",lui:"లుయిసెనో",lun:"లుండా",luo:"లువో",lus:"మిజో",luy:"లుయియ",lv:"లాట్వియన్",mad:"మాదురీస్",mag:"మగాహి",mai:"మైథిలి",mak:"మకాసార్",man:"మండింగో",mas:"మాసై",mdf:"మోక్ష",mdr:"మండార్",men:"మెండే",mer:"మెరు",mfe:"మొరిస్యేన్",mg:"మలగాసి",mga:"మధ్యమ ఐరిష్",mgh:"మక్వా-మిట్టో",mgo:"మెటా",mh:"మార్షలీస్",mi:"మావొరీ",mic:"మికమాక్",min:"మినాంగ్‌కాబో",mk:"మాసిడోనియన్",ml:"మలయాళం",mn:"మంగోలియన్",mnc:"మంచు",mni:"మణిపురి",moh:"మోహాక్",mos:"మోస్సి",mr:"మరాఠీ",ms:"మలయ్",mt:"మాల్టీస్",mua:"మండాంగ్",mus:"క్రీక్",mwl:"మిరాండిస్",mwr:"మార్వాడి",my:"బర్మీస్",myv:"ఎర్జియా",mzn:"మాసన్‌దెరాని",na:"నౌరు",nan:"మిన్ నాన్ చైనీస్",nap:"నియాపోలిటన్",naq:"నమ",nb:"నార్వేజియన్ బొక్మాల్",nd:"ఉత్తర దెబెలె",nds:"లో జర్మన్","nds-NL":"లో సాక్సన్",ne:"నేపాలి","new":"నెవారి",ng:"డోంగా",nia:"నియాస్",niu:"నియాన్",nl:"డచ్","nl-BE":"ఫ్లెమిష్",nmg:"క్వాసియె",nn:"నార్వేజియాన్ న్యోర్స్క్",nnh:"గింబూన్",no:"నార్వేజియన్",nog:"నోగై",non:"ప్రాచిన నోర్స్",nqo:"న్కో",nr:"దక్షిణ దెబెలె",nso:"ఉత్తర సోతో",nus:"న్యుర్",nv:"నవాజొ",nwc:"సాంప్రదాయ న్యూయారీ",ny:"న్యాన్జా",nym:"న్యంవేజి",nyn:"న్యాన్కోలె",nyo:"నేయోరో",nzi:"జీమా",oc:"ఆక్సిటన్",oj:"చేవా",om:"ఒరోమో",or:"ఒడియా",os:"ఒసేటిక్",osa:"ఒసాజ్",ota:"ఒట్టోమన్ టర్కిష్",pa:"పంజాబీ",pag:"పంగాసినాన్",pal:"పహ్లావి",pam:"పంపన్గా",pap:"పపియమేంటో",pau:"పలావెన్",pcm:"నైజీరియా పిడ్గిన్",peo:"ప్రాచీన పర్షియన్",phn:"ఫోనికన్",pi:"పాలీ",pl:"పోలిష్",pon:"పోహ్న్పెయన్",prg:"ప్రష్యన్",pro:"ప్రాచీన ప్రోవెంసాల్",ps:"పాష్టో",pt:"పోర్చుగీస్","pt-BR":"బ్రెజీలియన్ పోర్చుగీస్","pt-PT":"యూరోపియన్ పోర్చుగీస్",qu:"కెచువా",quc:"కిచే",raj:"రాజస్తానీ",rap:"రాపన్యుయి",rar:"రారోటొంగాన్",rm:"రోమన్ష్",rn:"రుండి",ro:"రోమేనియన్","ro-MD":"మొల్డావియన్",rof:"రోంబో",rom:"రోమానీ",root:"రూట్",ru:"రష్యన్",rup:"ఆరోమేనియన్",rw:"కిన్యర్వాండా",rwk:"ర్వా",sa:"సంస్కృతం",sad:"సండావి",sah:"సాఖా",sam:"సమారిటన్ అరామైక్",saq:"సంబురు",sas:"ససక్",sat:"సంతాలి",sba:"గాంబే",sbp:"సాంగు",sc:"సార్డీనియన్",scn:"సిసిలియన్",sco:"స్కాట్స్",sd:"సింధీ",sdh:"దక్షిణ కుర్డిష్",se:"ఉత్తర సామి",seh:"సెనా",sel:"సేల్కప్",ses:"కోయోరాబోరో సెన్నీ",sg:"సాంగో",sga:"ప్రాచీన ఐరిష్",sh:"సేర్బో-క్రొయేషియన్",shi:"టాచెల్‌హిట్",shn:"షాన్",si:"సింహళం",sid:"సిడామో",sk:"స్లోవక్",sl:"స్లోవేనియన్",sm:"సమోవన్",sma:"దక్షిణ సామి",smj:"లులే సామి",smn:"ఇనారి సామి",sms:"స్కోల్ట్ సామి",sn:"షోన",snk:"సోనింకి",so:"సోమాలి",sog:"సోగ్డియన్",sq:"అల్బేనియన్",sr:"సెర్బియన్",srn:"స్రానన్ టోంగో",srr:"సెరేర్",ss:"స్వాతి",ssy:"సాహో",st:"దక్షిణ సోతో",su:"సండానీస్",suk:"సుకుమా",sus:"సుసు",sux:"సుమేరియాన్",sv:"స్వీడిష్",sw:"స్వాహిలి","sw-CD":"కాంగో స్వాహిలి",swb:"కొమొరియన్",syc:"సాంప్రదాయ సిరియాక్",syr:"సిరియాక్",ta:"తమిళము",tcy:"తుళు",te:"తెలుగు",tem:"టిమ్నే",teo:"టెసో",ter:"టెరెనో",tet:"టేటం",tg:"తజిక్",th:"థాయ్",ti:"టిగ్రిన్యా",tig:"టీగ్రె",tiv:"టివ్",tk:"తుర్క్‌మెన్",tkl:"టోకెలావ్",tl:"టగలాగ్",tlh:"క్లింగాన్",tli:"ట్లింగిట్",tmh:"టామషేక్",tn:"స్వానా",to:"టాంగాన్",tog:"న్యాసా టోన్గా",tpi:"టోక్ పిసిన్",tr:"టర్కిష్",trv:"తరోకో",ts:"సోంగా",tsi:"శింషీయన్",tt:"టాటర్",tum:"టుంబుకా",tvl:"టువాలు",tw:"ట్వి",twq:"టసావాఖ్",ty:"తహితియన్",tyv:"టువినియన్",tzm:"సెంట్రల్ అట్లాస్ టామాజైట్",udm:"ఉడ్ముర్ట్",ug:"ఉయ్‌ఘర్",uga:"ఉగారిటిక్",uk:"ఉక్రెయినియన్",umb:"ఉమ్బుండు",ur:"ఉర్దూ",uz:"ఉజ్బెక్",vai:"వాయి",ve:"వెండా",vi:"వియత్నామీస్",vo:"వోలాపుక్",vot:"వోటిక్",vun:"వుంజొ",wa:"వాలూన్",wae:"వాల్సర్",wal:"వాలేట్టా",war:"వారే",was:"వాషో",wbp:"వార్లపిరి",wo:"ఉలూఫ్",wuu:"వు చైనీస్",xal:"కల్మిక్",xh:"షోసా",xog:"సొగా",yao:"యాయే",yap:"యాపిస్",yav:"యాంగ్‌బెన్",ybb:"యెంబా",yi:"ఇడ్డిష్",yo:"యోరుబా",yue:"కాంటనీస్",za:"జువాన్",zap:"జపోటెక్",zbl:"బ్లిసింబల్స్",zen:"జెనాగా",zgh:"ప్రామాణిక మొరొకన్ టామజైట్",zh:"చైనీస్","zh-Hans":"సరళీకృత మాండరిన్ చైనీస్","zh-Hant":"సాంప్రదాయక మాండరిన్ చైనీస్",zu:"జూలూ",zun:"జుని",zza:"జాజా"},scriptNames:{Cyrl:"సిరిలిక్",Latn:"లాటిన్",Arab:"అరబిక్",Guru:"గుర్ముఖి",Tfng:"టిఫీనాఘ్",Vaii:"వాయి",Hans:"సరళీకృతం",Hant:"సాంప్రదాయక"}},th:{rtl:false,languageNames:{aa:"อะฟาร์",ab:"อับฮาเซีย",ace:"อาเจะห์",ach:"อาโคลิ",ada:"อาแดงมี",ady:"อะดืยเก",ae:"อเวสตะ",aeb:"อาหรับตูนิเซีย",af:"แอฟริกานส์",afh:"แอฟริฮีลี",agq:"อักเฮม",ain:"ไอนุ",ak:"อาคาน",akk:"อักกาด",akz:"แอละแบมา",ale:"อาลิวต์",aln:"เกกแอลเบเนีย",alt:"อัลไตใต้",am:"อัมฮารา",an:"อารากอน",ang:"อังกฤษโบราณ",anp:"อังคิกา",ar:"อาหรับ","ar-001":"อาหรับมาตรฐานสมัยใหม่",arc:"อราเมอิก",arn:"มาปูเช",aro:"อาเรานา",arp:"อาราปาโฮ",arq:"อาหรับแอลจีเรีย",ars:"อาหรับนัจญ์ดี",arw:"อาราวัก",ary:"อาหรับโมร็อกโก",arz:"อาหรับพื้นเมืองอียิปต์",as:"อัสสัม",asa:"อาซู",ase:"ภาษามืออเมริกัน",ast:"อัสตูเรียส",av:"อาวาร์",avk:"โคตาวา",awa:"อวธี",ay:"ไอย์มารา",az:"อาเซอร์ไบจาน",ba:"บัชคีร์",bal:"บาลูชิ",ban:"บาหลี",bar:"บาวาเรีย",bas:"บาสา",bax:"บามัน",bbc:"บาตักโทบา",bbj:"โคมาลา",be:"เบลารุส",bej:"เบจา",bem:"เบมบา",bew:"เบตาวี",bez:"เบนา",bfd:"บาฟัต",bfq:"พทคะ",bg:"บัลแกเรีย",bgn:"บาลูจิตะวันตก",bho:"โภชปุรี",bi:"บิสลามา",bik:"บิกอล",bin:"บินี",bjn:"บันจาร์",bkm:"กม",bla:"สิกสิกา",bm:"บัมบารา",bn:"บังกลา",bo:"ทิเบต",bpy:"พิศนุปริยะ",bqi:"บักติยารี",br:"เบรตัน",bra:"พัรช",brh:"บราฮุย",brx:"โพโฑ",bs:"บอสเนีย",bss:"อาโคซี",bua:"บูเรียต",bug:"บูกิส",bum:"บูลู",byn:"บลิน",byv:"เมดุมบา",ca:"คาตาลัน",cad:"คัดโด",car:"คาริบ",cay:"คายูกา",cch:"แอตแซม",ccp:"จักม่า",ce:"เชเชน",ceb:"เซบู",cgg:"คีกา",ch:"ชามอร์โร",chb:"ชิบชา",chg:"ชะกะไต",chk:"ชูก",chm:"มารี",chn:"ชินุกจาร์กอน",cho:"ช็อกทอว์",chp:"ชิพิวยัน",chr:"เชอโรกี",chy:"เชเยนเน",ckb:"เคิร์ดตอนกลาง",co:"คอร์ซิกา",cop:"คอปติก",cps:"กาปิซนอน",cr:"ครี",crh:"ตุรกีไครเมีย",crs:"ครีโอลเซเซลส์ฝรั่งเศส",cs:"เช็ก",csb:"คาซูเบียน",cu:"เชอร์ชสลาวิก",cv:"ชูวัช",cy:"เวลส์",da:"เดนมาร์ก",dak:"ดาโกทา",dar:"ดาร์กิน",dav:"ไททา",de:"เยอรมัน","de-AT":"เยอรมัน - ออสเตรีย","de-CH":"เยอรมันสูง (สวิส)",del:"เดลาแวร์",den:"สเลวี",dgr:"โดกริบ",din:"ดิงกา",dje:"ซาร์มา",doi:"โฑครี",dsb:"ซอร์เบียตอนล่าง",dtp:"ดูซุนกลาง",dua:"ดัวลา",dum:"ดัตช์กลาง",dv:"ธิเวหิ",dyo:"โจลา-ฟอนยี",dyu:"ดิวลา",dz:"ซองคา",dzg:"ดาซากา",ebu:"เอ็มบู",ee:"เอเว",efi:"อีฟิก",egl:"เอมีเลีย",egy:"อียิปต์โบราณ",eka:"อีกาจุก",el:"กรีก",elx:"อีลาไมต์",en:"อังกฤษ","en-AU":"อังกฤษ - ออสเตรเลีย","en-CA":"อังกฤษ - แคนาดา","en-GB":"อังกฤษ - สหราชอาณาจักร","en-US":"อังกฤษ - อเมริกัน",enm:"อังกฤษกลาง",eo:"เอสเปรันโต",es:"สเปน","es-419":"สเปน - ละตินอเมริกา","es-ES":"สเปน - ยุโรป","es-MX":"สเปน - เม็กซิโก",esu:"ยูพิกกลาง",et:"เอสโตเนีย",eu:"บาสก์",ewo:"อีวันโด",ext:"เอกซ์เตรมาดูรา",fa:"เปอร์เซีย",fan:"ฟอง",fat:"ฟันติ",ff:"ฟูลาห์",fi:"ฟินแลนด์",fil:"ฟิลิปปินส์",fit:"ฟินแลนด์ทอร์เนดาเล็น",fj:"ฟิจิ",fo:"แฟโร",fon:"ฟอน",fr:"ฝรั่งเศส","fr-CA":"ฝรั่งเศส - แคนาดา","fr-CH":"ฝรั่งเศส (สวิส)",frc:"ฝรั่งเศสกาฌ็อง",frm:"ฝรั่งเศสกลาง",fro:"ฝรั่งเศสโบราณ",frp:"อาร์พิตา",frr:"ฟริเซียนเหนือ",frs:"ฟริเซียนตะวันออก",fur:"ฟรูลี",fy:"ฟริเซียนตะวันตก",ga:"ไอริช",gaa:"กา",gag:"กากาอุซ",gan:"จีนกั้น",gay:"กาโย",gba:"กบายา",gbz:"ดารีโซโรอัสเตอร์",gd:"เกลิกสกอต",gez:"กีซ",gil:"กิลเบอร์ต",gl:"กาลิเซีย",glk:"กิลากี",gmh:"เยอรมันสูงกลาง",gn:"กัวรานี",goh:"เยอรมันสูงโบราณ",gom:"กอนกานีของกัว",gon:"กอนดิ",gor:"กอรอนทาโล",got:"โกธิก",grb:"เกรโบ",grc:"กรีกโบราณ",gsw:"เยอรมันสวิส",gu:"คุชราต",guc:"วายู",gur:"ฟราฟรา",guz:"กุซซี",gv:"มานซ์",gwi:"กวิชอิน",ha:"เฮาซา",hai:"ไฮดา",hak:"จีนแคะ",haw:"ฮาวาย",he:"ฮิบรู",hi:"ฮินดี",hif:"ฮินดีฟิจิ",hil:"ฮีลีกัยนน",hit:"ฮิตไตต์",hmn:"ม้ง",ho:"ฮีรีโมตู",hr:"โครเอเชีย",hsb:"ซอร์เบียตอนบน",hsn:"จีนเซียง",ht:"เฮติครีโอล",hu:"ฮังการี",hup:"ฮูปา",hy:"อาร์เมเนีย",hz:"เฮเรโร",ia:"อินเตอร์ลิงกัว",iba:"อิบาน",ibb:"อิบิบิโอ",id:"อินโดนีเซีย",ie:"อินเตอร์ลิงกิว",ig:"อิกโบ",ii:"เสฉวนยี่",ik:"อีนูเปียก",ilo:"อีโลโก",inh:"อินกุช",io:"อีโด",is:"ไอซ์แลนด์",it:"อิตาลี",iu:"อินุกติตุต",izh:"อินเกรียน",ja:"ญี่ปุ่น",jam:"อังกฤษคลีโอลจาเมกา",jbo:"โลชบัน",jgo:"อึนกอมบา",jmc:"มาชาเม",jpr:"ยิว-เปอร์เซีย",jrb:"ยิว-อาหรับ",jut:"จัท",jv:"ชวา",ka:"จอร์เจีย",kaa:"การา-กาลพาก",kab:"กาไบล",kac:"กะฉิ่น",kaj:"คจู",kam:"คัมบา",kaw:"กวี",kbd:"คาร์บาเดีย",kbl:"คาเนมบู",kcg:"ทีแยป",kde:"มาคอนเด",kea:"คาบูเวอร์เดียนู",ken:"เกินยาง",kfo:"โคโร",kg:"คองโก",kgp:"เคนก่าง",kha:"กาสี",kho:"โคตัน",khq:"โคย์ราชีนี",khw:"โควาร์",ki:"กีกูยู",kiu:"เคอร์มานิกิ",kj:"กวนยามา",kk:"คาซัค",kkj:"คาโก",kl:"กรีนแลนด์",kln:"คาเลนจิน",km:"เขมร",kmb:"คิมบุนดู",kn:"กันนาดา",ko:"เกาหลี",koi:"โคมิ-เปียร์เมียค",kok:"กอนกานี",kos:"คูสไร",kpe:"กาแปล",kr:"คานูรี",krc:"คาราไช-บัลคาร์",kri:"คริโอ",krj:"กินารายอา",krl:"แกรเลียน",kru:"กุรุข",ks:"แคชเมียร์",ksb:"ชัมบาลา",ksf:"บาเฟีย",ksh:"โคโลญ",ku:"เคิร์ด",kum:"คูมืยค์",kut:"คูเทไน",kv:"โกมิ",kw:"คอร์นิช",ky:"คีร์กีซ",la:"ละติน",lad:"ลาดิโน",lag:"แลนจี",lah:"ลาฮ์นดา",lam:"แลมบา",lb:"ลักเซมเบิร์ก",lez:"เลซเกียน",lfn:"ลิงกัวฟรังกาโนวา",lg:"ยูกันดา",li:"ลิมเบิร์ก",lij:"ลิกูเรีย",liv:"ลิโวเนีย",lkt:"ลาโกตา",lmo:"ลอมบาร์ด",ln:"ลิงกาลา",lo:"ลาว",lol:"มองโก",lou:"ภาษาครีโอลุยเซียนา",loz:"โลซิ",lrc:"ลูรีเหนือ",lt:"ลิทัวเนีย",ltg:"ลัตเกล",lu:"ลูบา-กาตองกา",lua:"ลูบา-ลูลัว",lui:"ลุยเซโน",lun:"ลันดา",luo:"ลัว",lus:"มิโซ",luy:"ลูเยีย",lv:"ลัตเวีย",lzh:"จีนคลาสสิก",lzz:"แลซ",mad:"มาดูรา",maf:"มาฟา",mag:"มคหี",mai:"ไมถิลี",mak:"มากาซาร์",man:"มันดิงกา",mas:"มาไซ",mde:"มาบา",mdf:"มอคชา",mdr:"มานดาร์",men:"เมนเด",mer:"เมรู",mfe:"มอริสเยน",mg:"มาลากาซี",mga:"ไอริชกลาง",mgh:"มากัววา-มีทโท",mgo:"เมตา",mh:"มาร์แชลลิส",mi:"เมารี",mic:"มิกแมก",min:"มีนังกาเบา",mk:"มาซิโดเนีย",ml:"มาลายาลัม",mn:"มองโกเลีย",mnc:"แมนจู",mni:"มณีปุระ",moh:"โมฮอว์ก",mos:"โมซี",mr:"มราฐี",mrj:"มารีตะวันตก",ms:"มาเลย์",mt:"มอลตา",mua:"มันดัง",mus:"ครีก",mwl:"มีรันดา",mwr:"มารวาฑี",mwv:"เม็นตาไว",my:"พม่า",mye:"มยีน",myv:"เอียร์ซยา",mzn:"มาซันดารานี",na:"นาอูรู",nan:"จีนมินหนาน",nap:"นาโปลี",naq:"นามา",nb:"นอร์เวย์บุคมอล",nd:"เอ็นเดเบเลเหนือ",nds:"เยอรมันต่ำ","nds-NL":"แซกซอนใต้",ne:"เนปาล","new":"เนวาร์",ng:"ดองกา",nia:"นีอัส",niu:"นีวเว",njo:"อ๋าวนากา",nl:"ดัตช์","nl-BE":"เฟลมิช",nmg:"กวาซิโอ",nn:"นอร์เวย์นีนอสก์",nnh:"จีมบูน",no:"นอร์เวย์",nog:"โนไก",non:"นอร์สโบราณ",nov:"โนเวียล",nqo:"เอ็นโก",nr:"เอ็นเดเบเลใต้",nso:"โซโทเหนือ",nus:"เนือร์",nv:"นาวาโฮ",nwc:"เนวาร์ดั้งเดิม",ny:"เนียนจา",nym:"เนียมเวซี",nyn:"เนียนโกเล",nyo:"นิโอโร",nzi:"นซิมา",oc:"อ็อกซิตัน",oj:"โอจิบวา",om:"โอโรโม",or:"โอดิยา",os:"ออสเซเตีย",osa:"โอซากี",ota:"ตุรกีออตโตมัน",pa:"ปัญจาบ",pag:"ปางาซีนัน",pal:"ปะห์ลาวี",pam:"ปัมปางา",pap:"ปาเปียเมนโต",pau:"ปาเลา",pcd:"ปิการ์",pcm:"พิดจิน",pdc:"เยอรมันเพนซิลเวเนีย",pdt:"เพลาท์ดิช",peo:"เปอร์เซียโบราณ",pfl:"เยอรมันพาลาทิเนต",phn:"ฟินิเชีย",pi:"บาลี",pl:"โปแลนด์",pms:"พีดมอนต์",pnt:"พอนติก",pon:"พอห์นเพ",prg:"ปรัสเซีย",pro:"โปรวองซาลโบราณ",ps:"พัชโต",pt:"โปรตุเกส","pt-BR":"โปรตุเกส - บราซิล","pt-PT":"โปรตุเกส - ยุโรป",qu:"เคชวา",quc:"กีเช",qug:"ควิชัวไฮแลนด์ชิมโบราโซ",raj:"ราชสถาน",rap:"ราปานู",rar:"ราโรทองกา",rgn:"โรมัณโญ",rif:"ริฟฟิอัน",rm:"โรแมนซ์",rn:"บุรุนดี",ro:"โรมาเนีย","ro-MD":"มอลโดวา",rof:"รอมโบ",rom:"โรมานี",root:"รูท",rtm:"โรทูมัน",ru:"รัสเซีย",rue:"รูซิน",rug:"โรเวียนา",rup:"อาโรมาเนียน",rw:"รวันดา",rwk:"รวา",sa:"สันสกฤต",sad:"ซันดาเว",sah:"ซาคา",sam:"อราเมอิกซามาเรีย",saq:"แซมบูรู",sas:"ซาซัก",sat:"สันตาลี",saz:"เสาราษฏร์",sba:"กัมเบ",sbp:"แซงกู",sc:"ซาร์เดญา",scn:"ซิซิลี",sco:"สกอตส์",sd:"สินธิ",sdc:"ซาร์ดิเนียซาสซารี",sdh:"เคอร์ดิชใต้",se:"ซามิเหนือ",see:"เซนิกา",seh:"เซนา",sei:"เซรี",sel:"เซลคุป",ses:"โคย์ราโบโรเซนนี",sg:"ซันโก",sga:"ไอริชโบราณ",sgs:"ซาโมจิเตียน",sh:"เซอร์โบ-โครเอเชีย",shi:"ทาเชลีห์ท",shn:"ไทใหญ่",shu:"อาหรับ-ชาด",si:"สิงหล",sid:"ซิดาโม",sk:"สโลวัก",sl:"สโลวีเนีย",sli:"ไซลีเซียตอนล่าง",sly:"เซลายาร์",sm:"ซามัว",sma:"ซามิใต้",smj:"ซามิลูเล",smn:"ซามิอีนารี",sms:"ซามิสคอลต์",sn:"โชนา",snk:"โซนีนเก",so:"โซมาลี",sog:"ซอกดีน",sq:"แอลเบเนีย",sr:"เซอร์เบีย",srn:"ซูรินาเม",srr:"เซแรร์",ss:"สวาติ",ssy:"ซาโฮ",st:"โซโทใต้",stq:"ฟรีเซียนซัทเธอร์แลนด์",su:"ซุนดา",suk:"ซูคูมา",sus:"ซูซู",sux:"ซูเมอ",sv:"สวีเดน",sw:"สวาฮีลี","sw-CD":"สวาฮีลี - คองโก",swb:"โคเมอเรียน",syc:"ซีเรียแบบดั้งเดิม",syr:"ซีเรีย",szl:"ไซลีเซีย",ta:"ทมิฬ",tcy:"ตูลู",te:"เตลูกู",tem:"ทิมเน",teo:"เตโซ",ter:"เทเรโน",tet:"เตตุม",tg:"ทาจิก",th:"ไทย",ti:"ติกริญญา",tig:"ตีเกร",tiv:"ทิฟ",tk:"เติร์กเมน",tkl:"โตเกเลา",tkr:"แซคเซอร์",tl:"ตากาล็อก",tlh:"คลิงงอน",tli:"ทลิงกิต",tly:"ทาลิช",tmh:"ทามาเชก",tn:"บอตสวานา",to:"ตองกา",tog:"ไนอะซาตองกา",tpi:"ท็อกพิซิน",tr:"ตุรกี",tru:"ตูโรโย",trv:"ทาโรโก",ts:"ซิตซองกา",tsd:"ซาโคเนีย",tsi:"ซิมชีแอน",tt:"ตาตาร์",ttt:"ตัตมุสลิม",tum:"ทุมบูกา",tvl:"ตูวาลู",tw:"ทวิ",twq:"ตัสซาวัค",ty:"ตาฮิตี",tyv:"ตูวา",tzm:"ทามาไซต์แอตลาสกลาง",udm:"อุดมูร์ต",ug:"อุยกูร์",uga:"ยูการิต",uk:"ยูเครน",umb:"อุมบุนดู",ur:"อูรดู",uz:"อุซเบก",vai:"ไว",ve:"เวนดา",vec:"เวเนโต้",vep:"เวปส์",vi:"เวียดนาม",vls:"เฟลมิชตะวันตก",vmf:"เมน-ฟรานโกเนีย",vo:"โวลาพึค",vot:"โวทิก",vro:"โวโร",vun:"วุนจู",wa:"วาโลนี",wae:"วัลเซอร์",wal:"วาลาโม",war:"วาเรย์",was:"วาโช",wbp:"วอล์เพอร์รี",wo:"โวลอฟ",wuu:"จีนอู๋",xal:"คัลมืยค์",xh:"คะห์โอซา",xmf:"เมเกรเลีย",xog:"โซกา",yao:"เย้า",yap:"ยัป",yav:"แยงเบน",ybb:"เยมบา",yi:"ยิดดิช",yo:"โยรูบา",yrl:"เหงงกาตุ",yue:"กวางตุ้ง",za:"จ้วง",zap:"ซาโปเตก",zbl:"บลิสซิมโบลส์",zea:"เซแลนด์",zen:"เซนากา",zgh:"ทามาไซต์โมร็อกโกมาตรฐาน",zh:"จีน","zh-Hans":"จีน (ตัวย่อ)","zh-Hant":"จีน (ตัวเต็ม)",zu:"ซูลู",zun:"ซูนิ",zza:"ซาซา"},scriptNames:{Cyrl:"ซีริลลิก",Latn:"ละติน",Arab:"อาหรับ",Guru:"กูร์มูคี",Tfng:"ทิฟินาก",Vaii:"ไว",Hans:"ตัวย่อ",Hant:"ตัวเต็ม"}},tl:{rtl:false,languageNames:{},scriptNames:{}},tr:{rtl:false,languageNames:{aa:"Afar",ab:"Abhazca",ace:"Açece",ach:"Acoli",ada:"Adangme",ady:"Adigece",ae:"Avestçe",aeb:"Tunus Arapçası",af:"Afrikaanca",afh:"Afrihili",agq:"Aghem",ain:"Ayni Dili",ak:"Akan",akk:"Akad Dili",akz:"Alabamaca",ale:"Aleut dili",aln:"Gheg Arnavutçası",alt:"Güney Altayca",am:"Amharca",an:"Aragonca",ang:"Eski İngilizce",anp:"Angika",ar:"Arapça","ar-001":"Modern Standart Arapça",arc:"Aramice",arn:"Mapuçe dili",aro:"Araona",arp:"Arapaho Dili",arq:"Cezayir Arapçası",ars:"Necd Arapçası",arw:"Arawak Dili",ary:"Fas Arapçası",arz:"Mısır Arapçası",as:"Assamca",asa:"Asu",ase:"Amerikan İşaret Dili",ast:"Asturyasça",av:"Avar Dili",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaycan dili","az-Arab":"Güney Azerice",ba:"Başkırtça",bal:"Beluçça",ban:"Bali dili",bar:"Bavyera dili",bas:"Basa Dili",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusça",bej:"Beja dili",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarca",bgn:"Batı Balochi",bho:"Arayanice",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar Dili",bkm:"Kom",bla:"Karaayak dili",bm:"Bambara",bn:"Bengalce",bo:"Tibetçe",bpy:"Bishnupriya",bqi:"Bahtiyari",br:"Bretonca",bra:"Braj",brh:"Brohice",brx:"Bodo",bs:"Boşnakça",bss:"Akoose",bua:"Buryatça",bug:"Bugis",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Katalanca",cad:"Kado dili",car:"Carib",cay:"Kayuga dili",cch:"Atsam",ccp:"Chakma",ce:"Çeçence",ceb:"Sebuano dili",cgg:"Kiga",ch:"Çamorro dili",chb:"Çibça dili",chg:"Çağatayca",chk:"Chuukese",chm:"Mari dili",chn:"Çinuk dili",cho:"Çoktav dili",chp:"Çipevya dili",chr:"Çerokice",chy:"Şayence",ckb:"Orta Kürtçe",co:"Korsikaca",cop:"Kıptice",cps:"Capiznon",cr:"Krice",crh:"Kırım Türkçesi",crs:"Seselwa Kreole Fransızcası",cs:"Çekçe",csb:"Kashubian",cu:"Kilise Slavcası",cv:"Çuvaşça",cy:"Galce",da:"Danca",dak:"Dakotaca",dar:"Dargince",dav:"Taita",de:"Almanca","de-AT":"Avusturya Almancası","de-CH":"İsviçre Yüksek Almancası",del:"Delaware",den:"Slavey dili",dgr:"Dogrib",din:"Dinka dili",dje:"Zarma",doi:"Dogri",dsb:"Aşağı Sorbça",dtp:"Orta Kadazan",dua:"Duala",dum:"Ortaçağ Felemenkçesi",dv:"Divehi dili",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilia Dili",egy:"Eski Mısır Dili",eka:"Ekajuk",el:"Yunanca",elx:"Elam",en:"İngilizce","en-AU":"Avustralya İngilizcesi","en-CA":"Kanada İngilizcesi","en-GB":"İngiliz İngilizcesi","en-US":"Amerikan İngilizcesi",enm:"Ortaçağ İngilizcesi",eo:"Esperanto",es:"İspanyolca","es-419":"Latin Amerika İspanyolcası","es-ES":"Avrupa İspanyolcası","es-MX":"Meksika İspanyolcası",esu:"Merkezi Yupikçe",et:"Estonca",eu:"Baskça",ewo:"Ewondo",ext:"Ekstremadura Dili",fa:"Farsça",fan:"Fang",fat:"Fanti",ff:"Fula dili",fi:"Fince",fil:"Filipince",fit:"Tornedalin Fincesi",fj:"Fiji dili",fo:"Faroe dili",fon:"Fon",fr:"Fransızca","fr-CA":"Kanada Fransızcası","fr-CH":"İsviçre Fransızcası",frc:"Cajun Fransızcası",frm:"Ortaçağ Fransızcası",fro:"Eski Fransızca",frp:"Arpitanca",frr:"Kuzey Frizce",frs:"Doğu Frizcesi",fur:"Friuli dili",fy:"Batı Frizcesi",ga:"İrlandaca",gaa:"Ga dili",gag:"Gagavuzca",gan:"Gan Çincesi",gay:"Gayo dili",gba:"Gbaya",gbz:"Zerdüşt Daricesi",gd:"İskoç Gaelcesi",gez:"Geez",gil:"Kiribatice",gl:"Galiçyaca",glk:"Gilanice",gmh:"Ortaçağ Yüksek Almancası",gn:"Guarani dili",goh:"Eski Yüksek Almanca",gom:"Goa Konkanicesi",gon:"Gondi dili",gor:"Gorontalo dili",got:"Gotça",grb:"Grebo dili",grc:"Antik Yunanca",gsw:"İsviçre Almancası",gu:"Güceratça",guc:"Wayuu dili",gur:"Frafra",guz:"Gusii",gv:"Man dili",gwi:"Guçince",ha:"Hausa dili",hai:"Haydaca",hak:"Hakka Çincesi",haw:"Hawaii dili",he:"İbranice",hi:"Hintçe",hif:"Fiji Hintçesi",hil:"Hiligaynon dili",hit:"Hititçe",hmn:"Hmong",ho:"Hiri Motu",hr:"Hırvatça",hsb:"Yukarı Sorbça",hsn:"Xiang Çincesi",ht:"Haiti Kreyolu",hu:"Macarca",hup:"Hupaca",hy:"Ermenice",hz:"Herero dili",ia:"İnterlingua",iba:"Iban",ibb:"İbibio dili",id:"Endonezce",ie:"Interlingue",ig:"İbo dili",ii:"Sichuan Yi",ik:"İnyupikçe",ilo:"Iloko",inh:"İnguşça",io:"Ido",is:"İzlandaca",it:"İtalyanca",iu:"İnuktitut dili",izh:"İngriya Dili",ja:"Japonca",jam:"Jamaika Patois Dili",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Yahudi Farsçası",jrb:"Yahudi Arapçası",jut:"Yutland Dili",jv:"Cava dili",ka:"Gürcüce",kaa:"Karakalpakça",kab:"Kabiliyece",kac:"Kaçin dili",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardeyce",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo dili",kgp:"Kaingang",kha:"Khasi dili",kho:"Hotanca",khq:"Koyra Chiini",khw:"Çitral Dili",ki:"Kikuyu",kiu:"Kırmançça",kj:"Kuanyama",kk:"Kazakça",kkj:"Kako",kl:"Grönland dili",kln:"Kalenjin",km:"Khmer dili",kmb:"Kimbundu",kn:"Kannada dili",ko:"Korece",koi:"Komi-Permyak",kok:"Konkani dili",kos:"Kosraean",kpe:"Kpelle dili",kr:"Kanuri dili",krc:"Karaçay-Balkarca",kri:"Krio",krj:"Kinaray-a",krl:"Karelyaca",kru:"Kurukh dili",ks:"Keşmir dili",ksb:"Şambala",ksf:"Bafia",ksh:"Köln lehçesi",ku:"Kürtçe",kum:"Kumukça",kut:"Kutenai dili",kv:"Komi",kw:"Kernevekçe",ky:"Kırgızca",la:"Latince",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba dili",lb:"Lüksemburgca",lez:"Lezgice",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgca",lij:"Ligurca",liv:"Livonca",lkt:"Lakotaca",lmo:"Lombardça",ln:"Lingala",lo:"Lao dili",lol:"Mongo",lou:"Louisiana Kreolcesi",loz:"Lozi",lrc:"Kuzey Luri",lt:"Litvanca",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Lushai",luy:"Luyia",lv:"Letonca",lzh:"Edebi Çince",lzz:"Lazca",mad:"Madura Dili",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Mokşa dili",mdr:"Mandar",men:"Mende dili",mer:"Meru",mfe:"Morisyen",mg:"Malgaşça",mga:"Ortaçağ İrlandacası",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshall Adaları dili",mi:"Maori dili",mic:"Micmac",min:"Minangkabau",mk:"Makedonca",ml:"Malayalam dili",mn:"Moğolca",mnc:"Mançurya dili",mni:"Manipuri dili",moh:"Mohavk dili",mos:"Mossi",mr:"Marathi dili",mrj:"Ova Çirmişçesi",ms:"Malayca",mt:"Maltaca",mua:"Mundang",mus:"Krikçe",mwl:"Miranda dili",mwr:"Marvari",mwv:"Mentawai",my:"Birman dili",mye:"Myene",myv:"Erzya",mzn:"Mazenderanca",na:"Nauru dili",nan:"Min Nan Çincesi",nap:"Napolice",naq:"Nama",nb:"Norveççe Bokmål",nd:"Kuzey Ndebele",nds:"Aşağı Almanca","nds-NL":"Aşağı Saksonca",ne:"Nepalce","new":"Nevari",ng:"Ndonga",nia:"Nias",niu:"Niue dili",njo:"Ao Naga",nl:"Felemenkçe","nl-BE":"Flamanca",nmg:"Kwasio",nn:"Norveççe Nynorsk",nnh:"Ngiemboon",no:"Norveççe",nog:"Nogayca",non:"Eski Nors dili",nov:"Novial",nqo:"N’Ko",nr:"Güney Ndebele",nso:"Kuzey Sotho dili",nus:"Nuer",nv:"Navaho dili",nwc:"Klasik Nevari",ny:"Nyanja",nym:"Nyamvezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima dili",oc:"Oksitan dili",oj:"Ojibva dili",om:"Oromo dili",or:"Oriya Dili",os:"Osetçe",osa:"Osage",ota:"Osmanlı Türkçesi",pa:"Pencapça",pag:"Pangasinan dili",pal:"Pehlevi Dili",pam:"Pampanga",pap:"Papiamento",pau:"Palau dili",pcd:"Picard Dili",pcm:"Nijerya Pidgin dili",pdc:"Pensilvanya Almancası",pdt:"Plautdietsch",peo:"Eski Farsça",pfl:"Palatin Almancası",phn:"Fenike dili",pi:"Pali",pl:"Lehçe",pms:"Piyemontece",pnt:"Kuzeybatı Kafkasya",pon:"Pohnpeian",prg:"Prusyaca",pro:"Eski Provensal",ps:"Peştuca",pt:"Portekizce","pt-BR":"Brezilya Portekizcesi","pt-PT":"Avrupa Portekizcesi",qu:"Keçuva dili",quc:"Kiçece",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui dili",rar:"Rarotongan",rgn:"Romanyolca",rif:"Rif Berbericesi",rm:"Romanşça",rn:"Kirundi",ro:"Rumence","ro-MD":"Moldovaca",rof:"Rombo",rom:"Romanca",root:"Köken",rtm:"Rotuman",ru:"Rusça",rue:"Rusince",rug:"Roviana",rup:"Ulahça",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandave",sah:"Yakutça",sam:"Samarit Aramcası",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardunya dili",scn:"Sicilyaca",sco:"İskoçça",sd:"Sindhi dili",sdc:"Sassari Sarduca",sdh:"Güney Kürtçesi",se:"Kuzey Laponcası",see:"Seneca dili",seh:"Sena",sei:"Seri",sel:"Selkup dili",ses:"Koyraboro Senni",sg:"Sango",sga:"Eski İrlandaca",sgs:"Samogitçe",sh:"Sırp-Hırvat Dili",shi:"Taşelit",shn:"Shan dili",shu:"Çad Arapçası",si:"Sinhali dili",sid:"Sidamo dili",sk:"Slovakça",sl:"Slovence",sli:"Aşağı Silezyaca",sly:"Selayar",sm:"Samoa dili",sma:"Güney Laponcası",smj:"Lule Laponcası",smn:"İnari Laponcası",sms:"Skolt Laponcası",sn:"Şona dili",snk:"Soninke",so:"Somalice",sog:"Sogdiana Dili",sq:"Arnavutça",sr:"Sırpça",srn:"Sranan Tongo",srr:"Serer dili",ss:"Sisvati",ssy:"Saho",st:"Güney Sotho dili",stq:"Saterland Frizcesi",su:"Sunda dili",suk:"Sukuma dili",sus:"Susu",sux:"Sümerce",sv:"İsveççe",sw:"Svahili dili","sw-CD":"Kongo Svahili",swb:"Komorca",syc:"Klasik Süryanice",syr:"Süryanice",szl:"Silezyaca",ta:"Tamilce",tcy:"Tuluca",te:"Telugu dili",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tacikçe",th:"Tayca",ti:"Tigrinya dili",tig:"Tigre",tiv:"Tiv",tk:"Türkmence",tkl:"Tokelau dili",tkr:"Sahurca",tl:"Tagalogca",tlh:"Klingonca",tli:"Tlingit",tly:"Talışça",tmh:"Tamaşek",tn:"Setsvana",to:"Tonga dili",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Türkçe",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonca",tsi:"Tsimshian",tt:"Tatarca",ttt:"Tatça",tum:"Tumbuka",tvl:"Tuvalyanca",tw:"Tvi",twq:"Tasawaq",ty:"Tahiti dili",tyv:"Tuvaca",tzm:"Orta Atlas Tamazigti",udm:"Udmurtça",ug:"Uygurca",uga:"Ugarit dili",uk:"Ukraynaca",umb:"Umbundu",ur:"Urduca",uz:"Özbekçe",vai:"Vai",ve:"Venda dili",vec:"Venedikçe",vep:"Veps dili",vi:"Vietnamca",vls:"Batı Flamanca",vmf:"Main Frankonya Dili",vo:"Volapük",vot:"Votça",vro:"Võro",vun:"Vunjo",wa:"Valonca",wae:"Walser",wal:"Valamo",war:"Varay",was:"Vaşo",wbp:"Warlpiri",wo:"Volofça",wuu:"Wu Çincesi",xal:"Kalmıkça",xh:"Zosa dili",xmf:"Megrelce",xog:"Soga",yao:"Yao",yap:"Yapça",yav:"Yangben",ybb:"Yemba",yi:"Yidiş",yo:"Yorubaca",yrl:"Nheengatu",yue:"Kantonca",za:"Zhuangca",zap:"Zapotek dili",zbl:"Blis Sembolleri",zea:"Zelandaca",zen:"Zenaga dili",zgh:"Standart Fas Tamazigti",zh:"Çince","zh-Hans":"Basitleştirilmiş Çince (Mandarin)","zh-Hant":"Geleneksel Çince (Mandarin)",zu:"Zuluca",zun:"Zunice",zza:"Zazaca"},scriptNames:{Cyrl:"Kiril",Latn:"Latin",Arab:"Arap",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Basitleştirilmiş",Hant:"Geleneksel"}},uk:{rtl:false,languageNames:{aa:"афарська",ab:"абхазька",ace:"ачехська",ach:"ачолі",ada:"адангме",ady:"адигейська",ae:"авестійська",af:"африкаанс",afh:"африхілі",agq:"агем",ain:"айнська",ak:"акан",akk:"аккадська",akz:"алабама",ale:"алеутська",alt:"південноалтайська",am:"амхарська",an:"арагонська",ang:"давньоанглійська",anp:"ангіка",ar:"арабська","ar-001":"сучасна стандартна арабська",arc:"арамейська",arn:"арауканська",aro:"араона",arp:"арапахо",arq:"алжирська арабська",ars:"надждійська арабська",arw:"аравакська",as:"асамська",asa:"асу",ase:"американська мова рухів",ast:"астурська",av:"аварська",awa:"авадхі",ay:"аймара",az:"азербайджанська","az-Arab":"південноазербайджанська",ba:"башкирська",bal:"балучі",ban:"балійська",bar:"баеріш",bas:"баса",bax:"бамум",bbc:"батак тоба",bbj:"гомала",be:"білоруська",bej:"беджа",bem:"бемба",bew:"бетаві",bez:"бена",bfd:"бафут",bfq:"бадага",bg:"болгарська",bgn:"східнобелуджійська",bho:"бходжпурі",bi:"біслама",bik:"бікольська",bin:"біні",bjn:"банджарська",bkm:"ком",bla:"сіксіка",bm:"бамбара",bn:"банґла",bo:"тибетська",bqi:"бахтіарі",br:"бретонська",bra:"брадж",brx:"бодо",bs:"боснійська",bss:"акус",bua:"бурятська",bug:"бугійська",bum:"булу",byn:"блін",byv:"медумба",ca:"каталонська",cad:"каддо",car:"карібська",cay:"кайюга",cch:"атсам",ccp:"чакма",ce:"чеченська",ceb:"себуанська",cgg:"кіга",ch:"чаморро",chb:"чібча",chg:"чагатайська",chk:"чуукська",chm:"марійська",chn:"чинук жаргон",cho:"чокто",chp:"чіпевʼян",chr:"черокі",chy:"чейєнн",ckb:"центральнокурдська",co:"корсиканська",cop:"коптська",cr:"крі",crh:"кримськотатарська",crs:"сейшельська креольська",cs:"чеська",csb:"кашубська",cu:"церковнословʼянська",cv:"чуваська",cy:"валлійська",da:"данська",dak:"дакота",dar:"даргінська",dav:"таіта",de:"німецька","de-AT":"австрійська німецька","de-CH":"верхньонімецька (Швейцарія)",del:"делаварська",den:"слейв",dgr:"догрибська",din:"дінка",dje:"джерма",doi:"догрі",dsb:"нижньолужицька",dua:"дуала",dum:"середньонідерландська",dv:"дівехі",dyo:"дьола-фоні",dyu:"діула",dz:"дзонг-ке",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефік",egy:"давньоєгипетська",eka:"екаджук",el:"грецька",elx:"еламська",en:"англійська","en-AU":"австралійська англійська","en-CA":"канадська англійська","en-GB":"британська англійська","en-US":"англійська (США)",enm:"середньоанглійська",eo:"есперанто",es:"іспанська","es-419":"латиноамериканська іспанська","es-ES":"іспанська (Європа)","es-MX":"мексиканська іспанська",et:"естонська",eu:"баскська",ewo:"евондо",fa:"перська",fan:"фанг",fat:"фанті",ff:"фула",fi:"фінська",fil:"філіппінська",fj:"фіджі",fo:"фарерська",fon:"фон",fr:"французька","fr-CA":"канадська французька","fr-CH":"швейцарська французька",frc:"кажунська французька",frm:"середньофранцузька",fro:"давньофранцузька",frp:"арпітанська",frr:"фризька північна",frs:"фризька східна",fur:"фріульська",fy:"західнофризька",ga:"ірландська",gaa:"га",gag:"гагаузька",gan:"ґань",gay:"гайо",gba:"гбайя",gd:"гаельська",gez:"гєез",gil:"гільбертська",gl:"галісійська",gmh:"середньоверхньонімецька",gn:"гуарані",goh:"давньоверхньонімецька",gon:"гонді",gor:"горонтало",got:"готська",grb:"гребо",grc:"давньогрецька",gsw:"німецька (Швейцарія)",gu:"гуджараті",guz:"гусії",gv:"менкська",gwi:"кучін",ha:"хауса",hai:"хайда",hak:"хаккаська",haw:"гавайська",he:"іврит",hi:"гінді",hil:"хілігайнон",hit:"хітіті",hmn:"хмонг",ho:"хірі-моту",hr:"хорватська",hsb:"верхньолужицька",hsn:"сянська китайська",ht:"гаїтянська",hu:"угорська",hup:"хупа",hy:"вірменська",hz:"гереро",ia:"інтерлінгва",iba:"ібанська",ibb:"ібібіо",id:"індонезійська",ie:"інтерлінгве",ig:"ігбо",ii:"сичуань",ik:"інупіак",ilo:"ілоканська",inh:"інгуська",io:"ідо",is:"ісландська",it:"італійська",iu:"інуктітут",ja:"японська",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"юдео-перська",jrb:"юдео-арабська",jv:"яванська",ka:"грузинська",kaa:"каракалпацька",kab:"кабільська",kac:"качін",kaj:"йю",kam:"камба",kaw:"каві",kbd:"кабардинська",kbl:"канембу",kcg:"тіап",kde:"маконде",kea:"кабувердіану",kfo:"коро",kg:"конґолезька",kha:"кхасі",kho:"хотаносакська",khq:"койра чіїні",ki:"кікуйю",kj:"кунама",kk:"казахська",kkj:"како",kl:"калааллісут",kln:"календжин",km:"кхмерська",kmb:"кімбунду",kn:"каннада",ko:"корейська",koi:"комі-перм’яцька",kok:"конкані",kos:"косрае",kpe:"кпеллє",kr:"канурі",krc:"карачаєво-балкарська",krl:"карельська",kru:"курукх",ks:"кашмірська",ksb:"шамбала",ksf:"бафіа",ksh:"колоніан",ku:"курдська",kum:"кумицька",kut:"кутенаї",kv:"комі",kw:"корнійська",ky:"киргизька",la:"латинська",lad:"ладіно",lag:"лангі",lah:"ланда",lam:"ламба",lb:"люксембурзька",lez:"лезгінська",lg:"ганда",li:"лімбургійська",lkt:"лакота",ln:"лінгала",lo:"лаоська",lol:"монго",lou:"луїзіанська креольська",loz:"лозі",lrc:"північнолурська",lt:"литовська",lu:"луба-катанга",lua:"луба-лулуа",lui:"луїсеньо",lun:"лунда",luo:"луо",lus:"мізо",luy:"луйя",lv:"латвійська",mad:"мадурська",maf:"мафа",mag:"магадхі",mai:"майтхілі",mak:"макасарська",man:"мандінго",mas:"масаї",mde:"маба",mdf:"мокша",mdr:"мандарська",men:"менде",mer:"меру",mfe:"маврикійська креольська",mg:"малагасійська",mga:"середньоірландська",mgh:"макува-меето",mgo:"мета",mh:"маршалльська",mi:"маорі",mic:"мікмак",min:"мінангкабау",mk:"македонська",ml:"малаялам",mn:"монгольська",mnc:"манчжурська",mni:"маніпурі",moh:"магавк",mos:"моссі",mr:"маратхі",ms:"малайська",mt:"мальтійська",mua:"мунданг",mus:"крік",mwl:"мірандська",mwr:"марварі",my:"бірманська",mye:"миін",myv:"ерзя",mzn:"мазандеранська",na:"науру",nan:"південноміньська",nap:"неаполітанська",naq:"нама",nb:"норвезька (букмол)",nd:"північна ндебеле",nds:"нижньонімецька","nds-NL":"нижньосаксонська",ne:"непальська","new":"неварі",ng:"ндонга",nia:"ніаська",niu:"ніуе",njo:"ао нага",nl:"нідерландська","nl-BE":"фламандська",nmg:"квазіо",nn:"норвезька (нюношк)",nnh:"нгємбун",no:"норвезька",nog:"ногайська",non:"давньонорвезька",nqo:"нко",nr:"ндебелє південна",nso:"північна сото",nus:"нуер",nv:"навахо",nwc:"неварі класична",ny:"ньянджа",nym:"ньямвезі",nyn:"ньянколе",nyo:"ньоро",nzi:"нзіма",oc:"окситанська",oj:"оджібва",om:"оромо",or:"одія",os:"осетинська",osa:"осейдж",ota:"османська",pa:"панджабі",pag:"пангасінанська",pal:"пехлеві",pam:"пампанга",pap:"папʼяменто",pau:"палауанська",pcm:"нігерійсько-креольська",peo:"давньоперська",phn:"фінікійсько-пунічна",pi:"палі",pl:"польська",pon:"понапе",prg:"пруська",pro:"давньопровансальська",ps:"пушту",pt:"портуґальська","pt-BR":"португальська (Бразилія)","pt-PT":"європейська портуґальська",qu:"кечуа",quc:"кіче",raj:"раджастхані",rap:"рапануї",rar:"раротонга",rm:"ретороманська",rn:"рунді",ro:"румунська","ro-MD":"молдавська",rof:"ромбо",rom:"циганська",root:"коренева",ru:"російська",rup:"арумунська",rw:"кіньяруанда",rwk:"рва",sa:"санскрит",sad:"сандаве",sah:"якутська",sam:"самаритянська арамейська",saq:"самбуру",sas:"сасакська",sat:"сантальська",sba:"нгамбай",sbp:"сангу",sc:"сардинська",scn:"сицилійська",sco:"шотландська",sd:"сіндхі",sdh:"південнокурдська",se:"північносаамська",see:"сенека",seh:"сена",sel:"селькупська",ses:"койраборо сені",sg:"санго",sga:"давньоірландська",sh:"сербсько-хорватська",shi:"тачеліт",shn:"шанська",shu:"чадійська арабська",si:"сингальська",sid:"сідамо",sk:"словацька",sl:"словенська",sm:"самоанська",sma:"південносаамська",smj:"саамська луле",smn:"саамська інарі",sms:"скольт-саамська",sn:"шона",snk:"сонінке",so:"сомалі",sog:"согдійська",sq:"албанська",sr:"сербська",srn:"сранан тонго",srr:"серер",ss:"сісваті",ssy:"сахо",st:"сото південна",su:"сунданська",suk:"сукума",sus:"сусу",sux:"шумерська",sv:"шведська",sw:"суахілі","sw-CD":"суахілі (Конго)",swb:"коморська",syc:"сирійська класична",syr:"сирійська",ta:"тамільська",te:"телугу",tem:"темне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таджицька",th:"тайська",ti:"тигринья",tig:"тигре",tiv:"тів",tk:"туркменська",tkl:"токелау",tl:"тагальська",tlh:"клінгонська",tli:"тлінгіт",tmh:"тамашек",tn:"тсвана",to:"тонґанська",tog:"ньяса тонга",tpi:"ток-пісін",tr:"турецька",trv:"тароко",ts:"тсонга",tsi:"цимшиан",tt:"татарська",tum:"тумбука",tvl:"тувалу",tw:"тві",twq:"тасавак",ty:"таїтянська",tyv:"тувинська",tzm:"центральноатласька тамазігт",udm:"удмуртська",ug:"уйгурська",uga:"угаритська",uk:"українська",umb:"умбунду",ur:"урду",uz:"узбецька",vai:"ваї",ve:"венда",vi:"вʼєтнамська",vo:"волапʼюк",vot:"водська",vun:"вуньо",wa:"валлонська",wae:"валзерська",wal:"волайтта",war:"варай",was:"вашо",wbp:"валпірі",wo:"волоф",wuu:"уська китайська",xal:"калмицька",xh:"кхоса",xog:"сога",yao:"яо",yap:"яп",yav:"янгбен",ybb:"ємба",yi:"їдиш",yo:"йоруба",yue:"кантонська",za:"чжуан",zap:"сапотекська",zbl:"блісса мова",zen:"зенага",zgh:"стандартна марокканська берберська",zh:"китайська","zh-Hans":"китайська мандаринська (спрощене письмо)","zh-Hant":"китайська мандаринська (традиційне письмо)",zu:"зулуська",zun:"зуньї",zza:"зазакі"},scriptNames:{Cyrl:"кирилиця",Latn:"латиниця",Arab:"арабиця",Guru:"гурмухі",Tfng:"тифінаг",Vaii:"ваї",Hans:"спрощена",Hant:"традиційна"}},ur:{rtl:true,languageNames:{aa:"افار",ab:"ابقازیان",ace:"اچائینیز",ach:"اکولی",ada:"ادانگمے",ady:"ادیگھے",af:"افریقی",agq:"اغم",ain:"اینو",ak:"اکان",ale:"الیوت",alt:"جنوبی الٹائی",am:"امہاری",an:"اراگونیز",anp:"انگیکا",ar:"عربی","ar-001":"ماڈرن اسٹینڈرڈ عربی",arn:"ماپوچے",arp:"اراپاہو",as:"آسامی",asa:"آسو",ast:"اسٹوریائی",av:"اواری",awa:"اوادھی",ay:"ایمارا",az:"آذربائیجانی","az-Arab":"آزربائیجانی (عربی)",ba:"باشکیر",ban:"بالینیز",bas:"باسا",be:"بیلاروسی",bem:"بیمبا",bez:"بینا",bg:"بلغاری",bgn:"مغربی بلوچی",bho:"بھوجپوری",bi:"بسلاما",bin:"بینی",bla:"سکسیکا",bm:"بمبارا",bn:"بنگلہ",bo:"تبتی",br:"بریٹن",brx:"بوڈو",bs:"بوسنیائی",bug:"بگینیز",byn:"بلین",ca:"کیٹالان",ccp:"چکمہ",ce:"چیچن",ceb:"سیبوآنو",cgg:"چیگا",ch:"چیمارو",chk:"چوکیز",chm:"ماری",cho:"چاکٹاؤ",chr:"چیروکی",chy:"چینّے",ckb:"سینٹرل کردش",co:"کوراسیکن",crs:"سیسلوا کریولے فرانسیسی",cs:"چیک",cu:"چرچ سلاوک",cv:"چوواش",cy:"ویلش",da:"ڈینش",dak:"ڈاکوٹا",dar:"درگوا",dav:"تائتا",de:"جرمن","de-AT":"آسٹریائی جرمن","de-CH":"سوئس ہائی جرمن",dgr:"دوگریب",dje:"زرما",dsb:"ذیلی سربیائی",dua:"دوالا",dv:"ڈیویہی",dyo:"جولا فونيا",dz:"ژونگکھا",dzg:"دزاگا",ebu:"امبو",ee:"ایو",efi:"ایفِک",eka:"ایکاجوی",el:"یونانی",en:"انگریزی","en-AU":"آسٹریلیائی انگریزی","en-CA":"کینیڈین انگریزی","en-GB":"برطانوی انگریزی","en-US":"امریکی انگریزی",eo:"ایسپرانٹو",es:"ہسپانوی","es-419":"لاطینی امریکی ہسپانوی","es-ES":"یورپی ہسپانوی","es-MX":"میکسیکن ہسپانوی",et:"اسٹونین",eu:"باسکی",ewo:"ایوانڈو",fa:"فارسی",ff:"فولہ",fi:"فینیش",fil:"فلیپینو",fj:"فجی",fo:"فیروئیز",fon:"فون",fr:"فرانسیسی","fr-CA":"کینیڈین فرانسیسی","fr-CH":"سوئس فرینچ",frc:"کاجن فرانسیسی",fur:"فریولیائی",fy:"مغربی فریسیئن",ga:"آئیرِش",gaa:"گا",gag:"غاغاوز",gd:"سکاٹش گیلک",gez:"گیز",gil:"گلبرتیز",gl:"گالیشیائی",gn:"گُارانی",gor:"گورانٹالو",gsw:"سوئس جرمن",gu:"گجراتی",guz:"گسی",gv:"مینکس",gwi:"گوئچ ان",ha:"ہؤسا",haw:"ہوائی",he:"عبرانی",hi:"ہندی",hil:"ہالیگینون",hmn:"ہمانگ",hr:"کراتی",hsb:"اپر سربیائی",ht:"ہیتی",hu:"ہنگیرین",hup:"ہیوپا",hy:"آرمینیائی",hz:"ہریرو",ia:"بین لسانیات",iba:"ایبان",ibb:"ابی بیو",id:"انڈونیثیائی",ig:"اِگبو",ii:"سچوان ای",ilo:"ایلوکو",inh:"انگوش",io:"ایڈو",is:"آئس لینڈک",it:"اطالوی",iu:"اینُکٹیٹٹ",ja:"جاپانی",jbo:"لوجبان",jgo:"نگومبا",jmc:"ماشیم",jv:"جاوی",ka:"جارجیائی",kab:"قبائلی",kac:"کاچن",kaj:"جے جو",kam:"کامبا",kbd:"کبارڈین",kcg:"تیاپ",kde:"ماکونده",kea:"کابويرديانو",kfo:"کورو",kg:"کانگو",kha:"کھاسی",khq:"کويرا شيني",ki:"کیکویو",kj:"کونیاما",kk:"قزاخ",kkj:"کاکو",kl:"کالاليست",kln:"کالينجين",km:"خمیر",kmb:"کیمبونڈو",kn:"کنّاڈا",ko:"کوریائی",koi:"کومی پرمیاک",kok:"کونکنی",kpe:"کیپیلّے",kr:"کنوری",krc:"کراچے بالکر",krl:"کیرلین",kru:"کوروکھ",ks:"کشمیری",ksb:"شامبالا",ksf:"بافيا",ksh:"کولوگنیائی",ku:"کردش",kum:"کومیک",kv:"کومی",kw:"کورنش",ky:"کرغیزی",la:"لاطینی",lad:"لیڈینو",lag:"لانگی",lb:"لکسمبرگیش",lez:"لیزگیان",lg:"گینڈا",li:"لیمبرگش",lkt:"لاکوٹا",ln:"لِنگَلا",lo:"لاؤ",lou:"لوزیانا کریول",loz:"لوزی",lrc:"شمالی لری",lt:"لیتھوینین",lu:"لبا-کاتانجا",lua:"لیوبا لولوآ",lun:"لونڈا",luo:"لو",lus:"میزو",luy:"لویا",lv:"لیٹوین",mad:"مدورسی",mag:"مگاہی",mai:"میتھیلی",mak:"مکاسر",mas:"مسائی",mdf:"موکشا",men:"میندے",mer:"میرو",mfe:"موریسیین",mg:"ملاگاسی",mgh:"ماخاوا-ميتو",mgo:"میٹا",mh:"مارشلیز",mi:"ماؤری",mic:"مکمیک",min:"منانگکباؤ",mk:"مقدونیائی",ml:"مالایالم",mn:"منگولین",mni:"منی پوری",moh:"موہاک",mos:"موسی",mr:"مراٹهی",ms:"مالے",mt:"مالٹی",mua:"منڈانگ",mus:"کریک",mwl:"میرانڈیز",my:"برمی",myv:"ارزیا",mzn:"مزندرانی",na:"ناؤرو",nap:"نیاپولیٹن",naq:"ناما",nb:"نارویجین بوکمل",nd:"شمالی دبیل",nds:"ادنی جرمن","nds-NL":"ادنی سیکسن",ne:"نیپالی","new":"نیواری",ng:"نڈونگا",nia:"نیاس",niu:"نیویائی",nl:"ڈچ","nl-BE":"فلیمِش",nmg:"کوايسو",nn:"نارویجین نینورسک",nnh:"نگیمبون",no:"نارویجین",nog:"نوگائی",nqo:"اینکو",nr:"جنوبی نڈیبیلی",nso:"شمالی سوتھو",nus:"نویر",nv:"نواجو",ny:"نیانجا",nyn:"نینکول",oc:"آکسیٹان",om:"اورومو",or:"اڑیہ",os:"اوسیٹک",pa:"پنجابی",pag:"پنگاسنان",pam:"پامپنگا",pap:"پاپیامینٹو",pau:"پالاون",pcm:"نائجیریائی پڈگن",pl:"پولش",prg:"پارسی",ps:"پشتو",pt:"پُرتگالی","pt-BR":"برازیلی پرتگالی","pt-PT":"یورپی پرتگالی",qu:"کویچوآ",quc:"کيشی",rap:"رپانوی",rar:"راروتونگان",rm:"رومانش",rn:"رونڈی",ro:"رومینین","ro-MD":"مالدووا",rof:"رومبو",root:"روٹ",ru:"روسی",rup:"ارومانی",rw:"کینیاروانڈا",rwk:"روا",sa:"سنسکرت",sad:"سنڈاوے",sah:"ساکھا",saq:"سامبورو",sat:"سنتالی",sba:"نگامبے",sbp:"سانگو",sc:"سردینین",scn:"سیسیلین",sco:"سکاٹ",sd:"سندھی",sdh:"جنوبی کرد",se:"شمالی سامی",seh:"سینا",ses:"کويرابورو سينی",sg:"ساںغو",sh:"سربو-کروئیشین",shi:"تشلحيت",shn:"شان",si:"سنہالا",sk:"سلوواک",sl:"سلووینیائی",sm:"ساموآن",sma:"جنوبی سامی",smj:"لول سامی",smn:"اناری سامی",sms:"سکولٹ سامی",sn:"شونا",snk:"سوننکے",so:"صومالی",sq:"البانی",sr:"سربین",srn:"سرانن ٹونگو",ss:"سواتی",ssy:"ساہو",st:"جنوبی سوتھو",su:"سنڈانیز",suk:"سکوما",sv:"سویڈش",sw:"سواحلی","sw-CD":"کانگو سواحلی",swb:"کوموریائی",syr:"سریانی",ta:"تمل",te:"تیلگو",tem:"ٹمنے",teo:"تیسو",tet:"ٹیٹم",tg:"تاجک",th:"تھائی",ti:"ٹگرینیا",tig:"ٹگرے",tk:"ترکمان",tl:"ٹیگا لوگ",tlh:"کلنگن",tn:"سوانا",to:"ٹونگن",tpi:"ٹوک پِسِن",tr:"ترکی",trv:"ٹوروکو",ts:"زونگا",tt:"تاتار",tum:"ٹمبوکا",tvl:"تووالو",tw:"توی",twq:"تاساواق",ty:"تاہیتی",tyv:"تووینین",tzm:"سینٹرل ایٹلس ٹمازائٹ",udm:"ادمورت",ug:"یوئگہر",uk:"یوکرینیائی",umb:"اومبوندو",ur:"اردو",uz:"ازبیک",vai:"وائی",ve:"وینڈا",vi:"ویتنامی",vo:"وولاپوک",vun:"ونجو",wa:"والون",wae:"والسر",wal:"وولایتا",war:"وارے",wbp:"وارلپیری",wo:"وولوف",xal:"کالمیک",xh:"ژوسا",xog:"سوگا",yav:"یانگبین",ybb:"یمبا",yi:"یدش",yo:"یوروبا",yue:"کینٹونیز",zgh:"اسٹینڈرڈ مراقشی تمازیقی",zh:"چینی","zh-Hans":"سادہ مندارن چینی","zh-Hant":"روایتی مندارن چینی",zu:"زولو",zun:"زونی",zza:"زازا"},scriptNames:{Cyrl:"سیریلک",Latn:"لاطینی",Arab:"عربی",Guru:"گرمکھی",Hans:"آسان",Hant:"روایتی"}},vi:{rtl:false,languageNames:{aa:"Tiếng Afar",ab:"Tiếng Abkhazia",ace:"Tiếng Achinese",ach:"Tiếng Acoli",ada:"Tiếng Adangme",ady:"Tiếng Adyghe",ae:"Tiếng Avestan",af:"Tiếng Afrikaans",afh:"Tiếng Afrihili",agq:"Tiếng Aghem",ain:"Tiếng Ainu",ak:"Tiếng Akan",akk:"Tiếng Akkadia",akz:"Tiếng Alabama",ale:"Tiếng Aleut",aln:"Tiếng Gheg Albani",alt:"Tiếng Altai Miền Nam",am:"Tiếng Amharic",an:"Tiếng Aragon",ang:"Tiếng Anh cổ",anp:"Tiếng Angika",ar:"Tiếng Ả Rập","ar-001":"Tiếng Ả Rập Hiện đại",arc:"Tiếng Aramaic",arn:"Tiếng Mapuche",aro:"Tiếng Araona",arp:"Tiếng Arapaho",arq:"Tiếng Ả Rập Algeria",ars:"Tiếng Ả Rập Najdi",arw:"Tiếng Arawak",arz:"Tiếng Ả Rập Ai Cập",as:"Tiếng Assam",asa:"Tiếng Asu",ase:"Ngôn ngữ Ký hiệu Mỹ",ast:"Tiếng Asturias",av:"Tiếng Avaric",awa:"Tiếng Awadhi",ay:"Tiếng Aymara",az:"Tiếng Azerbaijan",ba:"Tiếng Bashkir",bal:"Tiếng Baluchi",ban:"Tiếng Bali",bar:"Tiếng Bavaria",bas:"Tiếng Basaa",bax:"Tiếng Bamun",bbc:"Tiếng Batak Toba",bbj:"Tiếng Ghomala",be:"Tiếng Belarus",bej:"Tiếng Beja",bem:"Tiếng Bemba",bew:"Tiếng Betawi",bez:"Tiếng Bena",bfd:"Tiếng Bafut",bfq:"Tiếng Badaga",bg:"Tiếng Bulgaria",bgn:"Tiếng Tây Balochi",bho:"Tiếng Bhojpuri",bi:"Tiếng Bislama",bik:"Tiếng Bikol",bin:"Tiếng Bini",bjn:"Tiếng Banjar",bkm:"Tiếng Kom",bla:"Tiếng Siksika",bm:"Tiếng Bambara",bn:"Tiếng Bangla",bo:"Tiếng Tây Tạng",bpy:"Tiếng Bishnupriya",bqi:"Tiếng Bakhtiari",br:"Tiếng Breton",bra:"Tiếng Braj",brh:"Tiếng Brahui",brx:"Tiếng Bodo",bs:"Tiếng Bosnia",bss:"Tiếng Akoose",bua:"Tiếng Buriat",bug:"Tiếng Bugin",bum:"Tiếng Bulu",byn:"Tiếng Blin",byv:"Tiếng Medumba",ca:"Tiếng Catalan",cad:"Tiếng Caddo",car:"Tiếng Carib",cay:"Tiếng Cayuga",cch:"Tiếng Atsam",ccp:"Tiếng Chakma",ce:"Tiếng Chechen",ceb:"Tiếng Cebuano",cgg:"Tiếng Chiga",ch:"Tiếng Chamorro",chb:"Tiếng Chibcha",chg:"Tiếng Chagatai",chk:"Tiếng Chuuk",chm:"Tiếng Mari",chn:"Biệt ngữ Chinook",cho:"Tiếng Choctaw",chp:"Tiếng Chipewyan",chr:"Tiếng Cherokee",chy:"Tiếng Cheyenne",ckb:"Tiếng Kurd Miền Trung",co:"Tiếng Corsica",cop:"Tiếng Coptic",cps:"Tiếng Capiznon",cr:"Tiếng Cree",crh:"Tiếng Thổ Nhĩ Kỳ Crimean",crs:"Tiếng Pháp Seselwa Creole",cs:"Tiếng Séc",csb:"Tiếng Kashubia",cu:"Tiếng Slavơ Nhà thờ",cv:"Tiếng Chuvash",cy:"Tiếng Wales",da:"Tiếng Đan Mạch",dak:"Tiếng Dakota",dar:"Tiếng Dargwa",dav:"Tiếng Taita",de:"Tiếng Đức","de-AT":"Tiếng Đức (Áo)","de-CH":"Tiếng Thượng Giéc-man (Thụy Sĩ)",del:"Tiếng Delaware",den:"Tiếng Slave",dgr:"Tiếng Dogrib",din:"Tiếng Dinka",dje:"Tiếng Zarma",doi:"Tiếng Dogri",dsb:"Tiếng Hạ Sorbia",dtp:"Tiếng Dusun Miền Trung",dua:"Tiếng Duala",dum:"Tiếng Hà Lan Trung cổ",dv:"Tiếng Divehi",dyo:"Tiếng Jola-Fonyi",dyu:"Tiếng Dyula",dz:"Tiếng Dzongkha",dzg:"Tiếng Dazaga",ebu:"Tiếng Embu",ee:"Tiếng Ewe",efi:"Tiếng Efik",egl:"Tiếng Emilia",egy:"Tiếng Ai Cập cổ",eka:"Tiếng Ekajuk",el:"Tiếng Hy Lạp",elx:"Tiếng Elamite",en:"Tiếng Anh","en-AU":"Tiếng Anh (Australia)","en-CA":"Tiếng Anh (Canada)","en-GB":"Tiếng Anh (Anh)","en-US":"Tiếng Anh (Mỹ)",enm:"Tiếng Anh Trung cổ",eo:"Tiếng Quốc Tế Ngữ",es:"Tiếng Tây Ban Nha","es-419":"Tiếng Tây Ban Nha (Mỹ La tinh)","es-ES":"Tiếng Tây Ban Nha (Châu Âu)","es-MX":"Tiếng Tây Ban Nha (Mexico)",esu:"Tiếng Yupik Miền Trung",et:"Tiếng Estonia",eu:"Tiếng Basque",ewo:"Tiếng Ewondo",ext:"Tiếng Extremadura",fa:"Tiếng Ba Tư",fan:"Tiếng Fang",fat:"Tiếng Fanti",ff:"Tiếng Fulah",fi:"Tiếng Phần Lan",fil:"Tiếng Philippines",fj:"Tiếng Fiji",fo:"Tiếng Faroe",fon:"Tiếng Fon",fr:"Tiếng Pháp","fr-CA":"Tiếng Pháp (Canada)","fr-CH":"Tiếng Pháp (Thụy Sĩ)",frc:"Tiếng Pháp Cajun",frm:"Tiếng Pháp Trung cổ",fro:"Tiếng Pháp cổ",frp:"Tiếng Arpitan",frr:"Tiếng Frisia Miền Bắc",frs:"Tiếng Frisian Miền Đông",fur:"Tiếng Friulian",fy:"Tiếng Frisia",ga:"Tiếng Ireland",gaa:"Tiếng Ga",gag:"Tiếng Gagauz",gan:"Tiếng Cám",gay:"Tiếng Gayo",gba:"Tiếng Gbaya",gd:"Tiếng Gael Scotland",gez:"Tiếng Geez",gil:"Tiếng Gilbert",gl:"Tiếng Galician",glk:"Tiếng Gilaki",gmh:"Tiếng Thượng Giéc-man Trung cổ",gn:"Tiếng Guarani",goh:"Tiếng Thượng Giéc-man cổ",gom:"Tiếng Goan Konkani",gon:"Tiếng Gondi",gor:"Tiếng Gorontalo",got:"Tiếng Gô-tích",grb:"Tiếng Grebo",grc:"Tiếng Hy Lạp cổ",gsw:"Tiếng Đức (Thụy Sĩ)",gu:"Tiếng Gujarati",gur:"Tiếng Frafra",guz:"Tiếng Gusii",gv:"Tiếng Manx",gwi:"Tiếng Gwichʼin",ha:"Tiếng Hausa",hai:"Tiếng Haida",hak:"Tiếng Khách Gia",haw:"Tiếng Hawaii",he:"Tiếng Do Thái",hi:"Tiếng Hindi",hif:"Tiếng Fiji Hindi",hil:"Tiếng Hiligaynon",hit:"Tiếng Hittite",hmn:"Tiếng Hmông",ho:"Tiếng Hiri Motu",hr:"Tiếng Croatia",hsb:"Tiếng Thượng Sorbia",hsn:"Tiếng Tương",ht:"Tiếng Haiti",hu:"Tiếng Hungary",hup:"Tiếng Hupa",hy:"Tiếng Armenia",hz:"Tiếng Herero",ia:"Tiếng Khoa Học Quốc Tế",iba:"Tiếng Iban",ibb:"Tiếng Ibibio",id:"Tiếng Indonesia",ie:"Tiếng Interlingue",ig:"Tiếng Igbo",ii:"Tiếng Di Tứ Xuyên",ik:"Tiếng Inupiaq",ilo:"Tiếng Iloko",inh:"Tiếng Ingush",io:"Tiếng Ido",is:"Tiếng Iceland",it:"Tiếng Italy",iu:"Tiếng Inuktitut",izh:"Tiếng Ingria",ja:"Tiếng Nhật",jam:"Tiếng Anh Jamaica Creole",jbo:"Tiếng Lojban",jgo:"Tiếng Ngomba",jmc:"Tiếng Machame",jpr:"Tiếng Judeo-Ba Tư",jrb:"Tiếng Judeo-Ả Rập",jut:"Tiếng Jutish",jv:"Tiếng Java",ka:"Tiếng Georgia",kaa:"Tiếng Kara-Kalpak",kab:"Tiếng Kabyle",kac:"Tiếng Kachin",kaj:"Tiếng Jju",kam:"Tiếng Kamba",kaw:"Tiếng Kawi",kbd:"Tiếng Kabardian",kbl:"Tiếng Kanembu",kcg:"Tiếng Tyap",kde:"Tiếng Makonde",kea:"Tiếng Kabuverdianu",kfo:"Tiếng Koro",kg:"Tiếng Kongo",kha:"Tiếng Khasi",kho:"Tiếng Khotan",khq:"Tiếng Koyra Chiini",ki:"Tiếng Kikuyu",kj:"Tiếng Kuanyama",kk:"Tiếng Kazakh",kkj:"Tiếng Kako",kl:"Tiếng Kalaallisut",kln:"Tiếng Kalenjin",km:"Tiếng Khmer",kmb:"Tiếng Kimbundu",kn:"Tiếng Kannada",ko:"Tiếng Hàn",koi:"Tiếng Komi-Permyak",kok:"Tiếng Konkani",kos:"Tiếng Kosrae",kpe:"Tiếng Kpelle",kr:"Tiếng Kanuri",krc:"Tiếng Karachay-Balkar",krl:"Tiếng Karelian",kru:"Tiếng Kurukh",ks:"Tiếng Kashmir",ksb:"Tiếng Shambala",ksf:"Tiếng Bafia",ksh:"Tiếng Cologne",ku:"Tiếng Kurd",kum:"Tiếng Kumyk",kut:"Tiếng Kutenai",kv:"Tiếng Komi",kw:"Tiếng Cornwall",ky:"Tiếng Kyrgyz",la:"Tiếng La-tinh",lad:"Tiếng Ladino",lag:"Tiếng Langi",lah:"Tiếng Lahnda",lam:"Tiếng Lamba",lb:"Tiếng Luxembourg",lez:"Tiếng Lezghian",lg:"Tiếng Ganda",li:"Tiếng Limburg",lkt:"Tiếng Lakota",ln:"Tiếng Lingala",lo:"Tiếng Lào",lol:"Tiếng Mongo",lou:"Tiếng Creole Louisiana",loz:"Tiếng Lozi",lrc:"Tiếng Bắc Luri",lt:"Tiếng Litva",lu:"Tiếng Luba-Katanga",lua:"Tiếng Luba-Lulua",lui:"Tiếng Luiseno",lun:"Tiếng Lunda",luo:"Tiếng Luo",lus:"Tiếng Lushai",luy:"Tiếng Luyia",lv:"Tiếng Latvia",mad:"Tiếng Madura",maf:"Tiếng Mafa",mag:"Tiếng Magahi",mai:"Tiếng Maithili",mak:"Tiếng Makasar",man:"Tiếng Mandingo",mas:"Tiếng Masai",mde:"Tiếng Maba",mdf:"Tiếng Moksha",mdr:"Tiếng Mandar",men:"Tiếng Mende",mer:"Tiếng Meru",mfe:"Tiếng Morisyen",mg:"Tiếng Malagasy",mga:"Tiếng Ai-len Trung cổ",mgh:"Tiếng Makhuwa-Meetto",mgo:"Tiếng Meta’",mh:"Tiếng Marshall",mi:"Tiếng Maori",mic:"Tiếng Micmac",min:"Tiếng Minangkabau",mk:"Tiếng Macedonia",ml:"Tiếng Malayalam",mn:"Tiếng Mông Cổ",mnc:"Tiếng Mãn Châu",mni:"Tiếng Manipuri",moh:"Tiếng Mohawk",mos:"Tiếng Mossi",mr:"Tiếng Marathi",ms:"Tiếng Mã Lai",mt:"Tiếng Malta",mua:"Tiếng Mundang",mus:"Tiếng Creek",mwl:"Tiếng Miranda",mwr:"Tiếng Marwari",my:"Tiếng Miến Điện",mye:"Tiếng Myene",myv:"Tiếng Erzya",mzn:"Tiếng Mazanderani",na:"Tiếng Nauru",nan:"Tiếng Mân Nam",nap:"Tiếng Napoli",naq:"Tiếng Nama",nb:"Tiếng Na Uy (Bokmål)",nd:"Tiếng Ndebele Miền Bắc",nds:"Tiếng Hạ Giéc-man","nds-NL":"Tiếng Hạ Saxon",ne:"Tiếng Nepal","new":"Tiếng Newari",ng:"Tiếng Ndonga",nia:"Tiếng Nias",niu:"Tiếng Niuean",njo:"Tiếng Ao Naga",nl:"Tiếng Hà Lan","nl-BE":"Tiếng Flemish",nmg:"Tiếng Kwasio",nn:"Tiếng Na Uy (Nynorsk)",nnh:"Tiếng Ngiemboon",no:"Tiếng Na Uy",nog:"Tiếng Nogai",non:"Tiếng Na Uy cổ",nqo:"Tiếng N’Ko",nr:"Tiếng Ndebele Miền Nam",nso:"Tiếng Sotho Miền Bắc",nus:"Tiếng Nuer",nv:"Tiếng Navajo",nwc:"Tiếng Newari cổ",ny:"Tiếng Nyanja",nym:"Tiếng Nyamwezi",nyn:"Tiếng Nyankole",nyo:"Tiếng Nyoro",nzi:"Tiếng Nzima",oc:"Tiếng Occitan",oj:"Tiếng Ojibwa",om:"Tiếng Oromo",or:"Tiếng Odia",os:"Tiếng Ossetic",osa:"Tiếng Osage",ota:"Tiếng Thổ Nhĩ Kỳ Ottoman",pa:"Tiếng Punjab",pag:"Tiếng Pangasinan",pal:"Tiếng Pahlavi",pam:"Tiếng Pampanga",pap:"Tiếng Papiamento",pau:"Tiếng Palauan",pcm:"Tiếng Nigeria Pidgin",peo:"Tiếng Ba Tư cổ",phn:"Tiếng Phoenicia",pi:"Tiếng Pali",pl:"Tiếng Ba Lan",pon:"Tiếng Pohnpeian",prg:"Tiếng Prussia",pro:"Tiếng Provençal cổ",ps:"Tiếng Pashto",pt:"Tiếng Bồ Đào Nha","pt-BR":"Tiếng Bồ Đào Nha (Brazil)","pt-PT":"Tiếng Bồ Đào Nha (Châu Âu)",qu:"Tiếng Quechua",quc:"Tiếng Kʼicheʼ",qug:"Tiếng Quechua ở Cao nguyên Chimborazo",raj:"Tiếng Rajasthani",rap:"Tiếng Rapanui",rar:"Tiếng Rarotongan",rm:"Tiếng Romansh",rn:"Tiếng Rundi",ro:"Tiếng Romania","ro-MD":"Tiếng Moldova",rof:"Tiếng Rombo",rom:"Tiếng Romany",root:"Tiếng Root",ru:"Tiếng Nga",rup:"Tiếng Aromania",rw:"Tiếng Kinyarwanda",rwk:"Tiếng Rwa",sa:"Tiếng Phạn",sad:"Tiếng Sandawe",sah:"Tiếng Sakha",sam:"Tiếng Samaritan Aramaic",saq:"Tiếng Samburu",sas:"Tiếng Sasak",sat:"Tiếng Santali",sba:"Tiếng Ngambay",sbp:"Tiếng Sangu",sc:"Tiếng Sardinia",scn:"Tiếng Sicilia",sco:"Tiếng Scots",sd:"Tiếng Sindhi",sdh:"Tiếng Kurd Miền Nam",se:"Tiếng Sami Miền Bắc",see:"Tiếng Seneca",seh:"Tiếng Sena",sel:"Tiếng Selkup",ses:"Tiếng Koyraboro Senni",sg:"Tiếng Sango",sga:"Tiếng Ai-len cổ",sh:"Tiếng Serbo-Croatia",shi:"Tiếng Tachelhit",shn:"Tiếng Shan",shu:"Tiếng Ả-Rập Chad",si:"Tiếng Sinhala",sid:"Tiếng Sidamo",sk:"Tiếng Slovak",sl:"Tiếng Slovenia",sm:"Tiếng Samoa",sma:"Tiếng Sami Miền Nam",smj:"Tiếng Lule Sami",smn:"Tiếng Inari Sami",sms:"Tiếng Skolt Sami",sn:"Tiếng Shona",snk:"Tiếng Soninke",so:"Tiếng Somali",sog:"Tiếng Sogdien",sq:"Tiếng Albania",sr:"Tiếng Serbia",srn:"Tiếng Sranan Tongo",srr:"Tiếng Serer",ss:"Tiếng Swati",ssy:"Tiếng Saho",st:"Tiếng Sotho Miền Nam",su:"Tiếng Sunda",suk:"Tiếng Sukuma",sus:"Tiếng Susu",sux:"Tiếng Sumeria",sv:"Tiếng Thụy Điển",sw:"Tiếng Swahili","sw-CD":"Tiếng Swahili Congo",swb:"Tiếng Cômo",syc:"Tiếng Syriac cổ",syr:"Tiếng Syriac",ta:"Tiếng Tamil",te:"Tiếng Telugu",tem:"Tiếng Timne",teo:"Tiếng Teso",ter:"Tiếng Tereno",tet:"Tiếng Tetum",tg:"Tiếng Tajik",th:"Tiếng Thái",ti:"Tiếng Tigrinya",tig:"Tiếng Tigre",tiv:"Tiếng Tiv",tk:"Tiếng Turkmen",tkl:"Tiếng Tokelau",tl:"Tiếng Tagalog",tlh:"Tiếng Klingon",tli:"Tiếng Tlingit",tmh:"Tiếng Tamashek",tn:"Tiếng Tswana",to:"Tiếng Tonga",tog:"Tiếng Nyasa Tonga",tpi:"Tiếng Tok Pisin",tr:"Tiếng Thổ Nhĩ Kỳ",trv:"Tiếng Taroko",ts:"Tiếng Tsonga",tsi:"Tiếng Tsimshian",tt:"Tiếng Tatar",tum:"Tiếng Tumbuka",tvl:"Tiếng Tuvalu",tw:"Tiếng Twi",twq:"Tiếng Tasawaq",ty:"Tiếng Tahiti",tyv:"Tiếng Tuvinian",tzm:"Tiếng Tamazight Miền Trung Ma-rốc",udm:"Tiếng Udmurt",ug:"Tiếng Uyghur",uga:"Tiếng Ugaritic",uk:"Tiếng Ukraina",umb:"Tiếng Umbundu",ur:"Tiếng Urdu",uz:"Tiếng Uzbek",vai:"Tiếng Vai",ve:"Tiếng Venda",vi:"Tiếng Việt",vo:"Tiếng Volapük",vot:"Tiếng Votic",vun:"Tiếng Vunjo",wa:"Tiếng Walloon",wae:"Tiếng Walser",wal:"Tiếng Walamo",war:"Tiếng Waray",was:"Tiếng Washo",wbp:"Tiếng Warlpiri",wo:"Tiếng Wolof",wuu:"Tiếng Ngô",xal:"Tiếng Kalmyk",xh:"Tiếng Xhosa",xog:"Tiếng Soga",yao:"Tiếng Yao",yap:"Tiếng Yap",yav:"Tiếng Yangben",ybb:"Tiếng Yemba",yi:"Tiếng Yiddish",yo:"Tiếng Yoruba",yue:"Tiếng Quảng Đông",za:"Tiếng Choang",zap:"Tiếng Zapotec",zbl:"Ký hiệu Blissymbols",zen:"Tiếng Zenaga",zgh:"Tiếng Tamazight Chuẩn của Ma-rốc",zh:"Tiếng Trung","zh-Hans":"Tiếng Trung Phổ thông (Giản thể)","zh-Hant":"Tiếng Trung Phổ thông (Phồn thể)",zu:"Tiếng Zulu",zun:"Tiếng Zuni",zza:"Tiếng Zaza"},scriptNames:{Cyrl:"Chữ Kirin",Latn:"Chữ La tinh",Arab:"Chữ Ả Rập",Guru:"Chữ Gurmukhi",Tfng:"Chữ Tifinagh",Vaii:"Chữ Vai",Hans:"Giản thể",Hant:"Phồn thể"}},yue:{rtl:false,languageNames:{aa:"阿法文",ab:"阿布哈茲文",ace:"亞齊文",ach:"阿僑利文",ada:"阿當莫文",ady:"阿迪各文",ae:"阿緯斯陀文",aeb:"突尼斯阿拉伯文",af:"南非荷蘭文",afh:"阿弗里希利文",agq:"亞罕文",ain:"阿伊努文",ak:"阿坎文",akk:"阿卡德文",akz:"阿拉巴馬文",ale:"阿留申文",aln:"蓋格阿爾巴尼亞文",alt:"南阿爾泰文",am:"阿姆哈拉文",an:"阿拉貢文",ang:"古英文",anp:"昂加文",ar:"阿拉伯文","ar-001":"現代標準阿拉伯文",arc:"阿拉米文",arn:"馬普切文",aro:"阿拉奧納文",arp:"阿拉帕霍文",arq:"阿爾及利亞阿拉伯文",arw:"阿拉瓦克文",ary:"摩洛哥阿拉伯文",arz:"埃及阿拉伯文",as:"阿薩姆文",asa:"阿蘇文",ase:"美國手語",ast:"阿斯圖里亞文",av:"阿瓦爾文",avk:"科塔瓦文",awa:"阿瓦文",ay:"艾馬拉文",az:"亞塞拜然文",ba:"巴什客爾文",bal:"俾路支文",ban:"峇里文",bar:"巴伐利亞文",bas:"巴薩文",bax:"巴姆穆文",bbc:"巴塔克托巴文",bbj:"戈馬拉文",be:"白俄羅斯文",bej:"貝扎文",bem:"別姆巴文",bew:"貝塔維文",bez:"貝納文",bfd:"富特文",bfq:"巴達加文",bg:"保加利亞文",bgn:"西俾路支文",bho:"博傑普爾文",bi:"比斯拉馬文",bik:"比科爾文",bin:"比尼文",bjn:"班亞爾文",bkm:"康姆文",bla:"錫克錫卡文",bm:"班巴拉文",bn:"孟加拉文",bo:"藏文",bpy:"比什奴普萊利亞文",bqi:"巴赫蒂亞里文",br:"布列塔尼文",bra:"布拉杰文",brh:"布拉維文",brx:"博多文",bs:"波士尼亞文",bss:"阿庫色文",bua:"布里阿特文",bug:"布吉斯文",bum:"布魯文",byn:"比林文",byv:"梅敦巴文",ca:"加泰羅尼亞文",cad:"卡多文",car:"加勒比文",cay:"卡尤加文",cch:"阿燦文",ccp:"查克馬文",ce:"車臣文",ceb:"宿霧文",cgg:"奇加文",ch:"查莫洛文",chb:"奇布查文",chg:"查加文",chk:"處奇斯文",chm:"馬里文",chn:"契奴克文",cho:"喬克托文",chp:"奇佩瓦揚文",chr:"柴羅基文",chy:"沙伊安文",ckb:"索拉尼庫爾德文",co:"科西嘉文",cop:"科普特文",cps:"卡皮茲文",cr:"克裡文",crh:"克里米亞半島的土耳其文;克里米亞半島的塔塔爾文",crs:"法語克里奧爾混合語",cs:"捷克文",csb:"卡舒布文",cu:"宗教斯拉夫文",cv:"楚瓦什文",cy:"威爾斯文",da:"丹麥文",dak:"達科他文",dar:"達爾格瓦文",dav:"台塔文",de:"德文","de-AT":"德文 (奧地利)","de-CH":"高地德文(瑞士)",del:"德拉瓦文",den:"斯拉夫",dgr:"多格里布文",din:"丁卡文",dje:"扎爾馬文",doi:"多格來文",dsb:"下索布文",dtp:"中部杜順文",dua:"杜亞拉文",dum:"中古荷蘭文",dv:"迪維西文",dyo:"朱拉文",dyu:"迪尤拉文",dz:"宗卡文",dzg:"達薩文",ebu:"恩布文",ee:"埃維文",efi:"埃菲克文",egl:"埃米利安文",egy:"古埃及文",eka:"艾卡朱克文",el:"希臘文",elx:"埃蘭文",en:"英文","en-AU":"英文 (澳洲)","en-CA":"英文 (加拿大)","en-GB":"英文 (英國)","en-US":"英文 (美國)",enm:"中古英文",eo:"世界文",es:"西班牙文","es-419":"西班牙文 (拉丁美洲)","es-ES":"西班牙文 (西班牙)","es-MX":"西班牙文 (墨西哥)",esu:"中尤皮克文",et:"愛沙尼亞文",eu:"巴斯克文",ewo:"依汪都文",ext:"埃斯特雷馬杜拉文",fa:"波斯文",fan:"芳族文",fat:"芳蒂文",ff:"富拉文",fi:"芬蘭文",fil:"菲律賓文",fit:"托爾訥芬蘭文",fj:"斐濟文",fo:"法羅文",fon:"豐文",fr:"法文","fr-CA":"法文 (加拿大)","fr-CH":"法文 (瑞士)",frc:"卡真法文",frm:"中古法文",fro:"古法文",frp:"法蘭克-普羅旺斯文",frr:"北弗里西亞文",frs:"東弗里西亞文",fur:"弗留利文",fy:"西弗里西亞文",ga:"愛爾蘭文",gaa:"加族文",gag:"加告茲文",gan:"贛語",gay:"加約文",gba:"葛巴亞文",gbz:"索羅亞斯德教達里文",gd:"蘇格蘭蓋爾文",gez:"吉茲文",gil:"吉爾伯特群島文",gl:"加利西亞文",glk:"吉拉基文",gmh:"中古高地德文",gn:"瓜拉尼文",goh:"古高地日耳曼文",gom:"孔卡尼文",gon:"岡德文",gor:"科隆達羅文",got:"哥德文",grb:"格列博文",grc:"古希臘文",gsw:"德文(瑞士)",gu:"古吉拉特文",guc:"瓦尤文",gur:"弗拉弗拉文",guz:"古西文",gv:"曼島文",gwi:"圭契文",ha:"豪撒文",hai:"海達文",hak:"客家話",haw:"夏威夷文",he:"希伯來文",hi:"北印度文",hif:"斐濟印地文",hil:"希利蓋農文",hit:"赫梯文",hmn:"孟文",ho:"西里莫圖土文",hr:"克羅埃西亞文",hsb:"上索布文",hsn:"湘語",ht:"海地文",hu:"匈牙利文",hup:"胡帕文",hy:"亞美尼亞文",hz:"赫雷羅文",ia:"國際文",iba:"伊班文",ibb:"伊比比奧文",id:"印尼文",ie:"國際文(E)",ig:"伊布文",ii:"四川彝文",ik:"依奴皮維克文",ilo:"伊洛闊文",inh:"印古什文",io:"伊多文",is:"冰島文",it:"義大利文",iu:"因紐特文",izh:"英格裏亞文",ja:"日文",jam:"牙買加克裏奧爾英文",jbo:"邏輯文",jgo:"恩格姆巴文",jmc:"馬恰美文",jpr:"猶太教-波斯文",jrb:"猶太阿拉伯文",jut:"日德蘭文",jv:"爪哇文",ka:"喬治亞文",kaa:"卡拉卡爾帕克文",kab:"卡比爾文",kac:"卡琴文",kaj:"卡捷文",kam:"卡姆巴文",kaw:"卡威文",kbd:"卡巴爾達文",kbl:"卡念布文",kcg:"卡塔布文",kde:"馬孔德文",kea:"卡布威爾第文",ken:"肯揚文",kfo:"科羅文",kg:"剛果文",kgp:"坎剛文",kha:"卡西文",kho:"和闐文",khq:"西桑海文",khw:"科瓦文",ki:"吉庫尤文",kiu:"北紮紮其文",kj:"廣亞馬文",kk:"哈薩克文",kkj:"卡庫文",kl:"格陵蘭文",kln:"卡倫金文",km:"高棉文",kmb:"金邦杜文",kn:"坎那達文",ko:"韓文",koi:"科米-彼爾米亞克文",kok:"貢根文",kos:"科斯雷恩文",kpe:"克佩列文",kr:"卡努裡文",krc:"卡拉柴-包爾卡爾文",kri:"塞拉利昂克裏奧爾文",krj:"基那來阿文",krl:"卡累利阿文",kru:"庫魯科文",ks:"喀什米爾文",ksb:"尚巴拉文",ksf:"巴菲亞文",ksh:"科隆文",ku:"庫爾德文",kum:"庫密克文",kut:"庫特奈文",kv:"科米文",kw:"康瓦耳文",ky:"吉爾吉斯文",la:"拉丁文",lad:"拉迪諾文",lag:"朗吉文",lah:"拉亨達文",lam:"蘭巴文",lb:"盧森堡文",lez:"列茲干文",lfn:"新共同語言",lg:"干達文",li:"林堡文",lij:"利古里亞文",liv:"利伏尼亞文",lkt:"拉科塔文",lmo:"倫巴底文",ln:"林加拉文",lo:"寮文",lol:"芒戈文",loz:"洛齊文",lrc:"北盧爾文",lt:"立陶宛文",ltg:"拉特加萊文",lu:"魯巴加丹加文",lua:"魯巴魯魯亞文",lui:"路易塞諾文",lun:"盧恩達文",luo:"盧奧文",lus:"盧晒文",luy:"盧雅文",lv:"拉脫維亞文",lzh:"文言文",lzz:"拉茲文",mad:"馬都拉文",maf:"馬法文",mag:"馬加伊文",mai:"邁蒂利文",mak:"望加錫文",man:"曼丁哥文",mas:"馬賽文",mde:"馬巴文",mdf:"莫克沙文",mdr:"曼達文",men:"門德文",mer:"梅魯文",mfe:"克里奧文(模里西斯)",mg:"馬拉加什文",mga:"中古愛爾蘭文",mgh:"馬夸文",mgo:"美塔文",mh:"馬紹爾文",mi:"毛利文",mic:"米克馬克文",min:"米南卡堡文",mk:"馬其頓文",ml:"馬來亞拉姆文",mn:"蒙古文",mnc:"滿族文",mni:"曼尼普裡文",moh:"莫霍克文",mos:"莫西文",mr:"馬拉地文",mrj:"西馬裏文",ms:"馬來文",mt:"馬爾他文",mua:"蒙當文",mus:"克里克文",mwl:"米蘭德斯文",mwr:"馬爾尼裡文",mwv:"明打威文",my:"緬甸文",mye:"姆耶內文",myv:"厄爾茲亞文",mzn:"馬贊德蘭文",na:"諾魯文",nan:"閩南語",nap:"拿波里文",naq:"納馬文",nb:"巴克摩挪威文",nd:"北地畢列文",nds:"低地德文","nds-NL":"低地薩克遜文",ne:"尼泊爾文","new":"尼瓦爾文",ng:"恩東加文",nia:"尼亞斯文",niu:"紐埃文",njo:"阿沃那加文",nl:"荷蘭文","nl-BE":"佛蘭芒文",nmg:"夸西奧文",nn:"耐諾斯克挪威文",nnh:"恩甘澎文",no:"挪威文",nog:"諾蓋文",non:"古諾爾斯文",nov:"諾維亞文",nqo:"曼德文字 (N’Ko)",nr:"南地畢列文",nso:"北索托文",nus:"努埃爾文",nv:"納瓦霍文",nwc:"古尼瓦爾文",ny:"尼揚賈文",nym:"尼揚韋齊文",nyn:"尼揚科萊文",nyo:"尼奧囉文",nzi:"尼茲馬文",oc:"奧克西坦文",oj:"奧杰布瓦文",om:"奧羅莫文",or:"歐利亞文",os:"奧塞提文",osa:"歐塞奇文",ota:"鄂圖曼土耳其文",pa:"旁遮普文",pag:"潘加辛文",pal:"巴列維文",pam:"潘帕嘉文",pap:"帕皮阿門托文",pau:"帛琉文",pcd:"庇卡底文",pcm:"尼日利亞皮欽語",pdc:"賓夕法尼亞德文",pdt:"門諾低地德文",peo:"古波斯文",pfl:"普法爾茨德文",phn:"腓尼基文",pi:"巴利文",pl:"波蘭文",pms:"皮埃蒙特文",pnt:"旁狄希臘文",pon:"波那貝文",prg:"普魯士文",pro:"古普羅旺斯文",ps:"普什圖文",pt:"葡萄牙文","pt-BR":"葡萄牙文 (巴西)","pt-PT":"葡萄牙文 (葡萄牙)",qu:"蓋楚瓦文",quc:"基切文",qug:"欽博拉索海蘭蓋丘亞文",raj:"拉賈斯坦諸文",rap:"復活島文",rar:"拉羅通加文",rgn:"羅馬格諾里文",rif:"里菲亞諾文",rm:"羅曼斯文",rn:"隆迪文",ro:"羅馬尼亞文","ro-MD":"摩爾多瓦文",rof:"蘭博文",rom:"吉普賽文",root:"根語言",rtm:"羅圖馬島文",ru:"俄文",rue:"盧森尼亞文",rug:"羅維阿納文",rup:"羅馬尼亞語系",rw:"盧安達文",rwk:"羅瓦文",sa:"梵文",sad:"桑達韋文",sah:"雅庫特文",sam:"薩瑪利亞阿拉姆文",saq:"薩布魯文",sas:"撒撒克文",sat:"散塔利文",saz:"索拉什特拉文",sba:"甘拜文",sbp:"桑古文",sc:"撒丁文",scn:"西西里文",sco:"蘇格蘭文",sd:"信德文",sdc:"薩丁尼亞-薩薩里文",sdh:"南庫爾德文",se:"北方薩米文",see:"塞訥卡文",seh:"賽納文",sei:"瑟里文",sel:"瑟爾卡普文",ses:"東桑海文",sg:"桑戈文",sga:"古愛爾蘭文",sgs:"薩莫吉希亞文",sh:"塞爾維亞克羅埃西亞文",shi:"希爾哈文",shn:"撣文",shu:"阿拉伯文(查德)",si:"僧伽羅文",sid:"希達摩文",sk:"斯洛伐克文",sl:"斯洛維尼亞文",sli:"下西利西亞文",sly:"塞拉亞文",sm:"薩摩亞文",sma:"南薩米文",smj:"魯勒薩米文",smn:"伊納裡薩米文",sms:"斯科特薩米文",sn:"塞內加爾文",snk:"索尼基文",so:"索馬利文",sog:"索格底亞納文",sq:"阿爾巴尼亞文",sr:"塞爾維亞文",srn:"蘇拉南東墎文",srr:"塞雷爾文",ss:"斯瓦特文",ssy:"薩霍文",st:"塞索托文",stq:"沙特菲士蘭文",su:"巽他文",suk:"蘇庫馬文",sus:"蘇蘇文",sux:"蘇美文",sv:"瑞典文",sw:"史瓦希里文","sw-CD":"史瓦希里文(剛果)",swb:"葛摩文",syc:"古敘利亞文",syr:"敘利亞文",szl:"西利西亞文",ta:"坦米爾文",tcy:"圖盧文",te:"泰盧固文",tem:"提姆文",teo:"特索文",ter:"泰雷諾文",tet:"泰頓文",tg:"塔吉克文",th:"泰文",ti:"提格利尼亞文",tig:"蒂格雷文",tiv:"提夫文",tk:"土庫曼文",tkl:"托克勞文",tkr:"查庫爾文",tl:"塔加路族文",tlh:"克林貢文",tli:"特林基特文",tly:"塔里什文",tmh:"塔馬奇克文",tn:"突尼西亞文",to:"東加文",tog:"東加文(尼亞薩)",tpi:"托比辛文",tr:"土耳其文",tru:"圖羅尤文",trv:"太魯閣文",ts:"特松加文",tsd:"特薩克尼恩文",tsi:"欽西安文",tt:"韃靼文",ttt:"穆斯林塔特文",tum:"圖姆布卡文",tvl:"吐瓦魯文",tw:"特威文",twq:"北桑海文",ty:"大溪地文",tyv:"土凡文",tzm:"塔馬齊格特文",udm:"沃蒂艾克文",ug:"維吾爾文",uga:"烏加列文",uk:"烏克蘭文",umb:"姆本杜文",ur:"烏都文",uz:"烏茲別克文",vai:"瓦伊文",ve:"溫達文",vec:"威尼斯文",vep:"維普森文",vi:"越南文",vls:"西佛蘭德文",vmf:"美茵-法蘭克尼亞文",vo:"沃拉普克文",vot:"沃提克文",vro:"佛羅文",vun:"溫舊文",wa:"瓦隆文",wae:"瓦瑟文",wal:"瓦拉莫文",war:"瓦瑞文",was:"瓦紹文",wbp:"沃皮瑞文",wo:"沃洛夫文",wuu:"吳語",xal:"卡爾梅克文",xh:"科薩文",xmf:"明格列爾文",xog:"索加文",yao:"瑤文",yap:"雅浦文",yav:"洋卞文",ybb:"耶姆巴文",yi:"意第緒文",yo:"約魯巴文",yrl:"奈恩加圖文",yue:"粵語",za:"壯文",zap:"薩波特克文",zbl:"布列斯符號",zea:"西蘭文",zen:"澤納加文",zgh:"標準摩洛哥塔馬塞特文",zh:"中文","zh-Hans":"簡體中文 (普通話)","zh-Hant":"繁體中文 (普通話)",zu:"祖魯文",zun:"祖尼文",zza:"扎扎文"},scriptNames:{Cyrl:"斯拉夫文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"古魯穆奇文",Tfng:"提非納文",Vaii:"瓦依文",Hans:"簡體",Hant:"繁體"}},zh:{rtl:false,languageNames:{aa:"阿法尔语",ab:"阿布哈西亚语",ace:"亚齐语",ach:"阿乔利语",ada:"阿当梅语",ady:"阿迪格语",ae:"阿维斯塔语",af:"南非荷兰语",afh:"阿弗里希利语",agq:"亚罕语",ain:"阿伊努语",ak:"阿肯语",akk:"阿卡德语",ale:"阿留申语",alt:"南阿尔泰语",am:"阿姆哈拉语",an:"阿拉贡语",ang:"古英语",anp:"昂加语",ar:"阿拉伯语","ar-001":"现代标准阿拉伯语",arc:"阿拉米语",arn:"马普切语",arp:"阿拉帕霍语",ars:"纳吉迪阿拉伯语",arw:"阿拉瓦克语",as:"阿萨姆语",asa:"帕雷语",ast:"阿斯图里亚斯语",av:"阿瓦尔语",awa:"阿瓦德语",ay:"艾马拉语",az:"阿塞拜疆语","az-Arab":"南阿塞拜疆语",ba:"巴什基尔语",bal:"俾路支语",ban:"巴厘语",bas:"巴萨语",bax:"巴姆穆语",bbj:"戈马拉语",be:"白俄罗斯语",bej:"贝沙语",bem:"本巴语",bez:"贝纳语",bfd:"巴非特语",bg:"保加利亚语",bgn:"西俾路支语",bho:"博杰普尔语",bi:"比斯拉马语",bik:"比科尔语",bin:"比尼语",bkm:"科姆语",bla:"西克西卡语",bm:"班巴拉语",bn:"孟加拉语",bo:"藏语",br:"布列塔尼语",bra:"布拉杰语",brx:"博多语",bs:"波斯尼亚语",bss:"阿库色语",bua:"布里亚特语",bug:"布吉语",bum:"布鲁语",byn:"比林语",byv:"梅敦巴语",ca:"加泰罗尼亚语",cad:"卡多语",car:"加勒比语",cay:"卡尤加语",cch:"阿灿语",ccp:"查克玛语",ce:"车臣语",ceb:"宿务语",cgg:"奇加语",ch:"查莫罗语",chb:"奇布查语",chg:"察合台语",chk:"楚克语",chm:"马里语",chn:"奇努克混合语",cho:"乔克托语",chp:"奇佩维安语",chr:"切罗基语",chy:"夏延语",ckb:"中库尔德语",co:"科西嘉语",cop:"科普特语",cr:"克里族语",crh:"克里米亚土耳其语",crs:"塞舌尔克里奥尔语",cs:"捷克语",csb:"卡舒比语",cu:"教会斯拉夫语",cv:"楚瓦什语",cy:"威尔士语",da:"丹麦语",dak:"达科他语",dar:"达尔格瓦语",dav:"台塔语",de:"德语","de-AT":"奥地利德语","de-CH":"瑞士高地德语",del:"特拉华语",den:"史拉维语",dgr:"多格里布语",din:"丁卡语",dje:"哲尔马语",doi:"多格拉语",dsb:"下索布语",dua:"都阿拉语",dum:"中古荷兰语",dv:"迪维希语",dyo:"朱拉语",dyu:"迪尤拉语",dz:"宗卡语",dzg:"达扎葛语",ebu:"恩布语",ee:"埃维语",efi:"埃菲克语",egy:"古埃及语",eka:"艾卡朱克语",el:"希腊语",elx:"埃兰语",en:"英语","en-AU":"澳大利亚英语","en-CA":"加拿大英语","en-GB":"英国英语","en-US":"美国英语",enm:"中古英语",eo:"世界语",es:"西班牙语","es-419":"拉丁美洲西班牙语","es-ES":"欧洲西班牙语","es-MX":"墨西哥西班牙语",et:"爱沙尼亚语",eu:"巴斯克语",ewo:"旺杜语",fa:"波斯语",fan:"芳格语",fat:"芳蒂语",ff:"富拉语",fi:"芬兰语",fil:"菲律宾语",fj:"斐济语",fo:"法罗语",fon:"丰语",fr:"法语","fr-CA":"加拿大法语","fr-CH":"瑞士法语",frc:"卡真法语",frm:"中古法语",fro:"古法语",frr:"北弗里西亚语",frs:"东弗里西亚语",fur:"弗留利语",fy:"西弗里西亚语",ga:"爱尔兰语",gaa:"加族语",gag:"加告兹语",gan:"赣语",gay:"迦约语",gba:"格巴亚语",gd:"苏格兰盖尔语",gez:"吉兹语",gil:"吉尔伯特语",gl:"加利西亚语",gmh:"中古高地德语",gn:"瓜拉尼语",goh:"古高地德语",gon:"冈德语",gor:"哥伦打洛语",got:"哥特语",grb:"格列博语",grc:"古希腊语",gsw:"瑞士德语",gu:"古吉拉特语",guz:"古西语",gv:"马恩语",gwi:"哥威迅语",ha:"豪萨语",hai:"海达语",hak:"客家语",haw:"夏威夷语",he:"希伯来语",hi:"印地语",hil:"希利盖农语",hit:"赫梯语",hmn:"苗语",ho:"希里莫图语",hr:"克罗地亚语",hsb:"上索布语",hsn:"湘语",ht:"海地克里奥尔语",hu:"匈牙利语",hup:"胡帕语",hy:"亚美尼亚语",hz:"赫雷罗语",ia:"国际语",iba:"伊班语",ibb:"伊比比奥语",id:"印度尼西亚语",ie:"国际文字(E)",ig:"伊博语",ii:"四川彝语",ik:"伊努皮克语",ilo:"伊洛卡诺语",inh:"印古什语",io:"伊多语",is:"冰岛语",it:"意大利语",iu:"因纽特语",ja:"日语",jbo:"逻辑语",jgo:"恩艮巴语",jmc:"马切姆语",jpr:"犹太波斯语",jrb:"犹太阿拉伯语",jv:"爪哇语",ka:"格鲁吉亚语",kaa:"卡拉卡尔帕克语",kab:"卡拜尔语",kac:"克钦语",kaj:"卡捷语",kam:"卡姆巴语",kaw:"卡威语",kbd:"卡巴尔德语",kbl:"加涅姆布语",kcg:"卡塔布语",kde:"马孔德语",kea:"卡布佛得鲁语",kfo:"克罗语",kg:"刚果语",kha:"卡西语",kho:"和田语",khq:"西桑海语",ki:"吉库尤语",kj:"宽亚玛语",kk:"哈萨克语",kkj:"卡库语",kl:"格陵兰语",kln:"卡伦金语",km:"高棉语",kmb:"金邦杜语",kn:"卡纳达语",ko:"韩语",koi:"科米-彼尔米亚克语",kok:"孔卡尼语",kos:"科斯拉伊语",kpe:"克佩列语",kr:"卡努里语",krc:"卡拉恰伊巴尔卡尔语",krl:"卡累利阿语",kru:"库鲁克语",ks:"克什米尔语",ksb:"香巴拉语",ksf:"巴菲亚语",ksh:"科隆语",ku:"库尔德语",kum:"库梅克语",kut:"库特奈语",kv:"科米语",kw:"康沃尔语",ky:"柯尔克孜语",la:"拉丁语",lad:"拉迪诺语",lag:"朗吉语",lah:"印度-雅利安语",lam:"兰巴语",lb:"卢森堡语",lez:"列兹金语",lg:"卢干达语",li:"林堡语",lkt:"拉科塔语",ln:"林加拉语",lo:"老挝语",lol:"蒙戈语",lou:"路易斯安那克里奥尔语",loz:"洛齐语",lrc:"北卢尔语",lt:"立陶宛语",lu:"鲁巴加丹加语",lua:"卢巴-卢拉语",lui:"卢伊塞诺语",lun:"隆达语",luo:"卢奥语",lus:"米佐语",luy:"卢雅语",lv:"拉脱维亚语",mad:"马都拉语",maf:"马法语",mag:"摩揭陀语",mai:"迈蒂利语",mak:"望加锡语",man:"曼丁哥语",mas:"马赛语",mde:"马坝语",mdf:"莫克沙语",mdr:"曼达尔语",men:"门德语",mer:"梅鲁语",mfe:"毛里求斯克里奥尔语",mg:"马拉加斯语",mga:"中古爱尔兰语",mgh:"马库阿语",mgo:"梅塔语",mh:"马绍尔语",mi:"毛利语",mic:"密克马克语",min:"米南佳保语",mk:"马其顿语",ml:"马拉雅拉姆语",mn:"蒙古语",mnc:"满语",mni:"曼尼普尔语",moh:"摩霍克语",mos:"莫西语",mr:"马拉地语",ms:"马来语",mt:"马耳他语",mua:"蒙当语",mus:"克里克语",mwl:"米兰德斯语",mwr:"马尔瓦里语",my:"缅甸语",mye:"姆耶内语",myv:"厄尔兹亚语",mzn:"马赞德兰语",na:"瑙鲁语",nan:"闽南语",nap:"那不勒斯语",naq:"纳马语",nb:"书面挪威语",nd:"北恩德贝勒语",nds:"低地德语","nds-NL":"低萨克森语",ne:"尼泊尔语","new":"尼瓦尔语",ng:"恩东加语",nia:"尼亚斯语",niu:"纽埃语",nl:"荷兰语","nl-BE":"弗拉芒语",nmg:"夸西奥语",nn:"挪威尼诺斯克语",nnh:"恩甘澎语",no:"挪威语",nog:"诺盖语",non:"古诺尔斯语",nqo:"西非书面文字",nr:"南恩德贝勒语",nso:"北索托语",nus:"努埃尔语",nv:"纳瓦霍语",nwc:"古典尼瓦尔语",ny:"齐切瓦语",nym:"尼扬韦齐语",nyn:"尼昂科勒语",nyo:"尼奥罗语",nzi:"恩济马语",oc:"奥克语",oj:"奥吉布瓦语",om:"奥罗莫语",or:"奥里亚语",os:"奥塞梯语",osa:"奥塞治语",ota:"奥斯曼土耳其语",pa:"旁遮普语",pag:"邦阿西南语",pal:"巴拉维语",pam:"邦板牙语",pap:"帕皮阿门托语",pau:"帕劳语",pcm:"尼日利亚皮钦语",peo:"古波斯语",phn:"腓尼基语",pi:"巴利语",pl:"波兰语",pon:"波纳佩语",prg:"普鲁士语",pro:"古普罗文斯语",ps:"普什图语",pt:"葡萄牙语","pt-BR":"巴西葡萄牙语","pt-PT":"欧洲葡萄牙语",qu:"克丘亚语",quc:"基切语",raj:"拉贾斯坦语",rap:"拉帕努伊语",rar:"拉罗汤加语",rm:"罗曼什语",rn:"隆迪语",ro:"罗马尼亚语","ro-MD":"摩尔多瓦语",rof:"兰博语",rom:"吉普赛语",root:"根语言",ru:"俄语",rup:"阿罗马尼亚语",rw:"卢旺达语",rwk:"罗瓦语",sa:"梵语",sad:"桑达韦语",sah:"萨哈语",sam:"萨马利亚阿拉姆语",saq:"桑布鲁语",sas:"萨萨克文",sat:"桑塔利语",sba:"甘拜语",sbp:"桑古语",sc:"萨丁语",scn:"西西里语",sco:"苏格兰语",sd:"信德语",sdh:"南库尔德语",se:"北方萨米语",see:"塞内卡语",seh:"塞纳语",sel:"塞尔库普语",ses:"东桑海语",sg:"桑戈语",sga:"古爱尔兰语",sh:"塞尔维亚-克罗地亚语",shi:"希尔哈语",shn:"掸语",shu:"乍得阿拉伯语",si:"僧伽罗语",sid:"悉达摩语",sk:"斯洛伐克语",sl:"斯洛文尼亚语",sm:"萨摩亚语",sma:"南萨米语",smj:"吕勒萨米语",smn:"伊纳里萨米语",sms:"斯科特萨米语",sn:"绍纳语",snk:"索宁克语",so:"索马里语",sog:"粟特语",sq:"阿尔巴尼亚语",sr:"塞尔维亚语",srn:"苏里南汤加语",srr:"塞雷尔语",ss:"斯瓦蒂语",ssy:"萨霍语",st:"南索托语",su:"巽他语",suk:"苏库马语",sus:"苏苏语",sux:"苏美尔语",sv:"瑞典语",sw:"斯瓦希里语","sw-CD":"刚果斯瓦希里语",swb:"科摩罗语",syc:"古典叙利亚语",syr:"叙利亚语",ta:"泰米尔语",te:"泰卢固语",tem:"泰姆奈语",teo:"特索语",ter:"特伦诺语",tet:"德顿语",tg:"塔吉克语",th:"泰语",ti:"提格利尼亚语",tig:"提格雷语",tiv:"蒂夫语",tk:"土库曼语",tkl:"托克劳语",tl:"他加禄语",tlh:"克林贡语",tli:"特林吉特语",tmh:"塔马奇克语",tn:"茨瓦纳语",to:"汤加语",tog:"尼亚萨汤加语",tpi:"托克皮辛语",tr:"土耳其语",trv:"赛德克语",ts:"聪加语",tsi:"钦西安语",tt:"鞑靼语",tum:"通布卡语",tvl:"图瓦卢语",tw:"契维语",twq:"北桑海语",ty:"塔希提语",tyv:"图瓦语",tzm:"塔马齐格特语",udm:"乌德穆尔特语",ug:"维吾尔语",uga:"乌加里特语",uk:"乌克兰语",umb:"翁本杜语",ur:"乌尔都语",uz:"乌兹别克语",vai:"瓦伊语",ve:"文达语",vep:"维普森语",vi:"越南语",vo:"沃拉普克语",vot:"沃提克语",vun:"温旧语",wa:"瓦隆语",wae:"瓦尔瑟语",wal:"瓦拉莫语",war:"瓦瑞语",was:"瓦绍语",wbp:"瓦尔皮瑞语",wo:"沃洛夫语",wuu:"吴语",xal:"卡尔梅克语",xh:"科萨语",xog:"索加语",yao:"瑶族语",yap:"雅浦语",yav:"洋卞语",ybb:"耶姆巴语",yi:"意第绪语",yo:"约鲁巴语",yue:"粤语",za:"壮语",zap:"萨波蒂克语",zbl:"布里斯符号",zen:"泽纳加语",zgh:"标准摩洛哥塔马塞特语",zh:"中文","zh-Hans":"现代标准汉语","zh-Hant":"台湾国语",zu:"祖鲁语",zun:"祖尼语",zza:"扎扎语"},scriptNames:{Cyrl:"西里尔文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"果鲁穆奇文",Tfng:"提非纳文",Vaii:"瓦依文",Hans:"简体",Hant:"繁体"}},"zh-CN":{rtl:false,languageNames:{aa:"阿法尔语",ab:"阿布哈西亚语",ace:"亚齐语",ach:"阿乔利语",ada:"阿当梅语",ady:"阿迪格语",ae:"阿维斯塔语",af:"南非荷兰语",afh:"阿弗里希利语",agq:"亚罕语",ain:"阿伊努语",ak:"阿肯语",akk:"阿卡德语",ale:"阿留申语",alt:"南阿尔泰语",am:"阿姆哈拉语",an:"阿拉贡语",ang:"古英语",anp:"昂加语",ar:"阿拉伯语","ar-001":"现代标准阿拉伯语",arc:"阿拉米语",arn:"马普切语",arp:"阿拉帕霍语",ars:"纳吉迪阿拉伯语",arw:"阿拉瓦克语",as:"阿萨姆语",asa:"帕雷语",ast:"阿斯图里亚斯语",av:"阿瓦尔语",awa:"阿瓦德语",ay:"艾马拉语",az:"阿塞拜疆语","az-Arab":"南阿塞拜疆语",ba:"巴什基尔语",bal:"俾路支语",ban:"巴厘语",bas:"巴萨语",bax:"巴姆穆语",bbj:"戈马拉语",be:"白俄罗斯语",bej:"贝沙语",bem:"本巴语",bez:"贝纳语",bfd:"巴非特语",bg:"保加利亚语",bgn:"西俾路支语",bho:"博杰普尔语",bi:"比斯拉马语",bik:"比科尔语",bin:"比尼语",bkm:"科姆语",bla:"西克西卡语",bm:"班巴拉语",bn:"孟加拉语",bo:"藏语",br:"布列塔尼语",bra:"布拉杰语",brx:"博多语",bs:"波斯尼亚语",bss:"阿库色语",bua:"布里亚特语",bug:"布吉语",bum:"布鲁语",byn:"比林语",byv:"梅敦巴语",ca:"加泰罗尼亚语",cad:"卡多语",car:"加勒比语",cay:"卡尤加语",cch:"阿灿语",ccp:"查克玛语",ce:"车臣语",ceb:"宿务语",cgg:"奇加语",ch:"查莫罗语",chb:"奇布查语",chg:"察合台语",chk:"楚克语",chm:"马里语",chn:"奇努克混合语",cho:"乔克托语",chp:"奇佩维安语",chr:"切罗基语",chy:"夏延语",ckb:"中库尔德语",co:"科西嘉语",cop:"科普特语",cr:"克里族语",crh:"克里米亚土耳其语",crs:"塞舌尔克里奥尔语",cs:"捷克语",csb:"卡舒比语",cu:"教会斯拉夫语",cv:"楚瓦什语",cy:"威尔士语",da:"丹麦语",dak:"达科他语",dar:"达尔格瓦语",dav:"台塔语",de:"德语","de-AT":"奥地利德语","de-CH":"瑞士高地德语",del:"特拉华语",den:"史拉维语",dgr:"多格里布语",din:"丁卡语",dje:"哲尔马语",doi:"多格拉语",dsb:"下索布语",dua:"都阿拉语",dum:"中古荷兰语",dv:"迪维希语",dyo:"朱拉语",dyu:"迪尤拉语",dz:"宗卡语",dzg:"达扎葛语",ebu:"恩布语",ee:"埃维语",efi:"埃菲克语",egy:"古埃及语",eka:"艾卡朱克语",el:"希腊语",elx:"埃兰语",en:"英语","en-AU":"澳大利亚英语","en-CA":"加拿大英语","en-GB":"英国英语","en-US":"美国英语",enm:"中古英语",eo:"世界语",es:"西班牙语","es-419":"拉丁美洲西班牙语","es-ES":"欧洲西班牙语","es-MX":"墨西哥西班牙语",et:"爱沙尼亚语",eu:"巴斯克语",ewo:"旺杜语",fa:"波斯语",fan:"芳格语",fat:"芳蒂语",ff:"富拉语",fi:"芬兰语",fil:"菲律宾语",fj:"斐济语",fo:"法罗语",fon:"丰语",fr:"法语","fr-CA":"加拿大法语","fr-CH":"瑞士法语",frc:"卡真法语",frm:"中古法语",fro:"古法语",frr:"北弗里西亚语",frs:"东弗里西亚语",fur:"弗留利语",fy:"西弗里西亚语",ga:"爱尔兰语",gaa:"加族语",gag:"加告兹语",gan:"赣语",gay:"迦约语",gba:"格巴亚语",gd:"苏格兰盖尔语",gez:"吉兹语",gil:"吉尔伯特语",gl:"加利西亚语",gmh:"中古高地德语",gn:"瓜拉尼语",goh:"古高地德语",gon:"冈德语",gor:"哥伦打洛语",got:"哥特语",grb:"格列博语",grc:"古希腊语",gsw:"瑞士德语",gu:"古吉拉特语",guz:"古西语",gv:"马恩语",gwi:"哥威迅语",ha:"豪萨语",hai:"海达语",hak:"客家语",haw:"夏威夷语",he:"希伯来语",hi:"印地语",hil:"希利盖农语",hit:"赫梯语",hmn:"苗语",ho:"希里莫图语",hr:"克罗地亚语",hsb:"上索布语",hsn:"湘语",ht:"海地克里奥尔语",hu:"匈牙利语",hup:"胡帕语",hy:"亚美尼亚语",hz:"赫雷罗语",ia:"国际语",iba:"伊班语",ibb:"伊比比奥语",id:"印度尼西亚语",ie:"国际文字(E)",ig:"伊博语",ii:"四川彝语",ik:"伊努皮克语",ilo:"伊洛卡诺语",inh:"印古什语",io:"伊多语",is:"冰岛语",it:"意大利语",iu:"因纽特语",ja:"日语",jbo:"逻辑语",jgo:"恩艮巴语",jmc:"马切姆语",jpr:"犹太波斯语",jrb:"犹太阿拉伯语",jv:"爪哇语",ka:"格鲁吉亚语",kaa:"卡拉卡尔帕克语",kab:"卡拜尔语",kac:"克钦语",kaj:"卡捷语",kam:"卡姆巴语",kaw:"卡威语",kbd:"卡巴尔德语",kbl:"加涅姆布语",kcg:"卡塔布语",kde:"马孔德语",kea:"卡布佛得鲁语",kfo:"克罗语",kg:"刚果语",kha:"卡西语",kho:"和田语",khq:"西桑海语",ki:"吉库尤语",kj:"宽亚玛语",kk:"哈萨克语",kkj:"卡库语",kl:"格陵兰语",kln:"卡伦金语",km:"高棉语",kmb:"金邦杜语",kn:"卡纳达语",ko:"韩语",koi:"科米-彼尔米亚克语",kok:"孔卡尼语",kos:"科斯拉伊语",kpe:"克佩列语",kr:"卡努里语",krc:"卡拉恰伊巴尔卡尔语",krl:"卡累利阿语",kru:"库鲁克语",ks:"克什米尔语",ksb:"香巴拉语",ksf:"巴菲亚语",ksh:"科隆语",ku:"库尔德语",kum:"库梅克语",kut:"库特奈语",kv:"科米语",kw:"康沃尔语",ky:"柯尔克孜语",la:"拉丁语",lad:"拉迪诺语",lag:"朗吉语",lah:"印度-雅利安语",lam:"兰巴语",lb:"卢森堡语",lez:"列兹金语",lg:"卢干达语",li:"林堡语",lkt:"拉科塔语",ln:"林加拉语",lo:"老挝语",lol:"蒙戈语",lou:"路易斯安那克里奥尔语",loz:"洛齐语",lrc:"北卢尔语",lt:"立陶宛语",lu:"鲁巴加丹加语",lua:"卢巴-卢拉语",lui:"卢伊塞诺语",lun:"隆达语",luo:"卢奥语",lus:"米佐语",luy:"卢雅语",lv:"拉脱维亚语",mad:"马都拉语",maf:"马法语",mag:"摩揭陀语",mai:"迈蒂利语",mak:"望加锡语",man:"曼丁哥语",mas:"马赛语",mde:"马坝语",mdf:"莫克沙语",mdr:"曼达尔语",men:"门德语",mer:"梅鲁语",mfe:"毛里求斯克里奥尔语",mg:"马拉加斯语",mga:"中古爱尔兰语",mgh:"马库阿语",mgo:"梅塔语",mh:"马绍尔语",mi:"毛利语",mic:"密克马克语",min:"米南佳保语",mk:"马其顿语",ml:"马拉雅拉姆语",mn:"蒙古语",mnc:"满语",mni:"曼尼普尔语",moh:"摩霍克语",mos:"莫西语",mr:"马拉地语",ms:"马来语",mt:"马耳他语",mua:"蒙当语",mus:"克里克语",mwl:"米兰德斯语",mwr:"马尔瓦里语",my:"缅甸语",mye:"姆耶内语",myv:"厄尔兹亚语",mzn:"马赞德兰语",na:"瑙鲁语",nan:"闽南语",nap:"那不勒斯语",naq:"纳马语",nb:"书面挪威语",nd:"北恩德贝勒语",nds:"低地德语","nds-NL":"低萨克森语",ne:"尼泊尔语","new":"尼瓦尔语",ng:"恩东加语",nia:"尼亚斯语",niu:"纽埃语",nl:"荷兰语","nl-BE":"弗拉芒语",nmg:"夸西奥语",nn:"挪威尼诺斯克语",nnh:"恩甘澎语",no:"挪威语",nog:"诺盖语",non:"古诺尔斯语",nqo:"西非书面文字",nr:"南恩德贝勒语",nso:"北索托语",nus:"努埃尔语",nv:"纳瓦霍语",nwc:"古典尼瓦尔语",ny:"齐切瓦语",nym:"尼扬韦齐语",nyn:"尼昂科勒语",nyo:"尼奥罗语",nzi:"恩济马语",oc:"奥克语",oj:"奥吉布瓦语",om:"奥罗莫语",or:"奥里亚语",os:"奥塞梯语",osa:"奥塞治语",ota:"奥斯曼土耳其语",pa:"旁遮普语",pag:"邦阿西南语",pal:"巴拉维语",pam:"邦板牙语",pap:"帕皮阿门托语",pau:"帕劳语",pcm:"尼日利亚皮钦语",peo:"古波斯语",phn:"腓尼基语",pi:"巴利语",pl:"波兰语",pon:"波纳佩语",prg:"普鲁士语",pro:"古普罗文斯语",ps:"普什图语",pt:"葡萄牙语","pt-BR":"巴西葡萄牙语","pt-PT":"欧洲葡萄牙语",qu:"克丘亚语",quc:"基切语",raj:"拉贾斯坦语",rap:"拉帕努伊语",rar:"拉罗汤加语",rm:"罗曼什语",rn:"隆迪语",ro:"罗马尼亚语","ro-MD":"摩尔多瓦语",rof:"兰博语",rom:"吉普赛语",root:"根语言",ru:"俄语",rup:"阿罗马尼亚语",rw:"卢旺达语",rwk:"罗瓦语",sa:"梵语",sad:"桑达韦语",sah:"萨哈语",sam:"萨马利亚阿拉姆语",saq:"桑布鲁语",sas:"萨萨克文",sat:"桑塔利语",sba:"甘拜语",sbp:"桑古语",sc:"萨丁语",scn:"西西里语",sco:"苏格兰语",sd:"信德语",sdh:"南库尔德语",se:"北方萨米语",see:"塞内卡语",seh:"塞纳语",sel:"塞尔库普语",ses:"东桑海语",sg:"桑戈语",sga:"古爱尔兰语",sh:"塞尔维亚-克罗地亚语",shi:"希尔哈语",shn:"掸语",shu:"乍得阿拉伯语",si:"僧伽罗语",sid:"悉达摩语",sk:"斯洛伐克语",sl:"斯洛文尼亚语",sm:"萨摩亚语",sma:"南萨米语",smj:"吕勒萨米语",smn:"伊纳里萨米语",sms:"斯科特萨米语",sn:"绍纳语",snk:"索宁克语",so:"索马里语",sog:"粟特语",sq:"阿尔巴尼亚语",sr:"塞尔维亚语",srn:"苏里南汤加语",srr:"塞雷尔语",ss:"斯瓦蒂语",ssy:"萨霍语",st:"南索托语",su:"巽他语",suk:"苏库马语",sus:"苏苏语",sux:"苏美尔语",sv:"瑞典语",sw:"斯瓦希里语","sw-CD":"刚果斯瓦希里语",swb:"科摩罗语",syc:"古典叙利亚语",syr:"叙利亚语",ta:"泰米尔语",te:"泰卢固语",tem:"泰姆奈语",teo:"特索语",ter:"特伦诺语",tet:"德顿语",tg:"塔吉克语",th:"泰语",ti:"提格利尼亚语",tig:"提格雷语",tiv:"蒂夫语",tk:"土库曼语",tkl:"托克劳语",tl:"他加禄语",tlh:"克林贡语",tli:"特林吉特语",tmh:"塔马奇克语",tn:"茨瓦纳语",to:"汤加语",tog:"尼亚萨汤加语",tpi:"托克皮辛语",tr:"土耳其语",trv:"赛德克语",ts:"聪加语",tsi:"钦西安语",tt:"鞑靼语",tum:"通布卡语",tvl:"图瓦卢语",tw:"契维语",twq:"北桑海语",ty:"塔希提语",tyv:"图瓦语",tzm:"塔马齐格特语",udm:"乌德穆尔特语",ug:"维吾尔语",uga:"乌加里特语",uk:"乌克兰语",umb:"翁本杜语",ur:"乌尔都语",uz:"乌兹别克语",vai:"瓦伊语",ve:"文达语",vep:"维普森语",vi:"越南语",vo:"沃拉普克语",vot:"沃提克语",vun:"温旧语",wa:"瓦隆语",wae:"瓦尔瑟语",wal:"瓦拉莫语",war:"瓦瑞语",was:"瓦绍语",wbp:"瓦尔皮瑞语",wo:"沃洛夫语",wuu:"吴语",xal:"卡尔梅克语",xh:"科萨语",xog:"索加语",yao:"瑶族语",yap:"雅浦语",yav:"洋卞语",ybb:"耶姆巴语",yi:"意第绪语",yo:"约鲁巴语",yue:"粤语",za:"壮语",zap:"萨波蒂克语",zbl:"布里斯符号",zen:"泽纳加语",zgh:"标准摩洛哥塔马塞特语",zh:"中文","zh-Hans":"现代标准汉语","zh-Hant":"台湾国语",zu:"祖鲁语",zun:"祖尼语",zza:"扎扎语"},scriptNames:{Cyrl:"西里尔文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"果鲁穆奇文",Tfng:"提非纳文",Vaii:"瓦依文",Hans:"简体",Hant:"繁体"}},"zh-HK":{rtl:false,languageNames:{aa:"阿法爾文",ab:"阿布哈茲文",ace:"亞齊文",ach:"阿僑利文",ada:"阿當莫文",ady:"阿迪各文",ae:"阿維斯塔文",aeb:"突尼斯阿拉伯文",af:"南非荷蘭文",afh:"阿弗里希利文",agq:"亞罕文",ain:"阿伊努文",ak:"阿坎文",akk:"阿卡德文",akz:"阿拉巴馬文",ale:"阿留申文",aln:"蓋格阿爾巴尼亞文",alt:"南阿爾泰文",am:"阿姆哈拉文",an:"阿拉貢文",ang:"古英文",anp:"昂加文",ar:"阿拉伯文","ar-001":"現代標準阿拉伯文",arc:"阿拉米文",arn:"馬普切文",aro:"阿拉奧納文",arp:"阿拉帕霍文",arq:"阿爾及利亞阿拉伯文",ars:"納吉迪阿拉伯文",arw:"阿拉瓦克文",ary:"摩洛哥阿拉伯文",arz:"埃及阿拉伯文",as:"阿薩姆文",asa:"阿蘇文",ase:"美國手語",ast:"阿斯圖里亞文",av:"阿瓦爾文",avk:"科塔瓦文",awa:"阿瓦文",ay:"艾馬拉文",az:"阿塞拜疆文","az-Arab":"南阿塞拜疆文",ba:"巴什基爾文",bal:"俾路支文",ban:"峇里文",bar:"巴伐利亞文",bas:"巴薩文",bax:"巴姆穆文",bbc:"巴塔克托巴文",bbj:"戈馬拉文",be:"白俄羅斯文",bej:"貝扎文",bem:"別姆巴文",bew:"貝塔維文",bez:"貝納文",bfd:"富特文",bfq:"巴達加文",bg:"保加利亞文",bgn:"西俾路支文",bho:"博傑普爾文",bi:"比斯拉馬文",bik:"比科爾文",bin:"比尼文",bjn:"班亞爾文",bkm:"康姆文",bla:"錫克錫卡文",bm:"班巴拉文",bn:"孟加拉文",bo:"藏文",bpy:"比什奴普萊利亞文",bqi:"巴赫蒂亞里文",br:"布里多尼文",bra:"布拉杰文",brh:"布拉維文",brx:"博多文",bs:"波斯尼亞文",bss:"阿庫色文",bua:"布里阿特文",bug:"布吉斯文",bum:"布魯文",byn:"比林文",byv:"梅敦巴文",ca:"加泰隆尼亞文",cad:"卡多文",car:"加勒比文",cay:"卡尤加文",cch:"阿燦文",ccp:"查克馬文",ce:"車臣文",ceb:"宿霧文",cgg:"奇加文",ch:"查莫洛文",chb:"奇布查文",chg:"查加文",chk:"處奇斯文",chm:"馬里文",chn:"契奴克文",cho:"喬克托文",chp:"奇佩瓦揚文",chr:"柴羅基文",chy:"沙伊安文",ckb:"中庫德文",co:"科西嘉文",cop:"科普特文",cps:"卡皮茲文",cr:"克里文",crh:"克里米亞韃靼文",crs:"塞舌爾克里奧爾法文",cs:"捷克文",csb:"卡舒布文",cu:"宗教斯拉夫文",cv:"楚瓦什文",cy:"威爾斯文",da:"丹麥文",dak:"達科他文",dar:"達爾格瓦文",dav:"台塔文",de:"德文","de-AT":"奧地利德文","de-CH":"瑞士德語",del:"德拉瓦文",den:"斯拉夫文",dgr:"多格里布文",din:"丁卡文",dje:"扎爾馬文",doi:"多格來文",dsb:"下索布文",dtp:"中部杜順文",dua:"杜亞拉文",dum:"中古荷蘭文",dv:"迪維西文",dyo:"朱拉文",dyu:"迪尤拉文",dz:"宗卡文",dzg:"達薩文",ebu:"恩布文",ee:"埃維文",efi:"埃菲克文",egl:"埃米利安文",egy:"古埃及文",eka:"艾卡朱克文",el:"希臘文",elx:"埃蘭文",en:"英文","en-AU":"澳洲英文","en-CA":"加拿大英文","en-GB":"英國英文","en-US":"美國英文",enm:"中古英文",eo:"世界語",es:"西班牙文","es-419":"拉丁美洲西班牙文","es-ES":"歐洲西班牙文","es-MX":"墨西哥西班牙文",esu:"中尤皮克文",et:"愛沙尼亞文",eu:"巴斯克文",ewo:"依汪都文",ext:"埃斯特雷馬杜拉文",fa:"波斯文",fan:"芳族文",fat:"芳蒂文",ff:"富拉文",fi:"芬蘭文",fil:"菲律賓文",fit:"托爾訥芬蘭文",fj:"斐濟文",fo:"法羅文",fon:"豐文",fr:"法文","fr-CA":"加拿大法文","fr-CH":"瑞士法文",frc:"卡真法文",frm:"中古法文",fro:"古法文",frp:"法蘭克-普羅旺斯文",frr:"北弗里西亞文",frs:"東弗里西亞文",fur:"弗留利文",fy:"西弗里西亞文",ga:"愛爾蘭文",gaa:"加族文",gag:"加告茲文",gan:"贛語",gay:"加約文",gba:"葛巴亞文",gbz:"索羅亞斯德教達里文",gd:"蘇格蘭蓋爾文",gez:"吉茲文",gil:"吉爾伯特文",gl:"加里西亞文",glk:"吉拉基文",gmh:"中古高地德文",gn:"瓜拉尼文",goh:"古高地德文",gom:"孔卡尼文",gon:"岡德文",gor:"科隆達羅文",got:"哥德文",grb:"格列博文",grc:"古希臘文",gsw:"瑞士德文",gu:"古吉拉特文",guc:"瓦尤文",gur:"弗拉弗拉文",guz:"古西文",gv:"曼島文",gwi:"圭契文",ha:"豪撒文",hai:"海達文",hak:"客家話",haw:"夏威夷文",he:"希伯來文",hi:"印地文",hif:"斐濟印地文",hil:"希利蓋農文",hit:"赫梯文",hmn:"苗語",ho:"西里莫圖土文",hr:"克羅地亞文",hsb:"上索布文",hsn:"湘語",ht:"海地文",hu:"匈牙利文",hup:"胡帕文",hy:"亞美尼亞文",hz:"赫雷羅文",ia:"國際文",iba:"伊班文",ibb:"伊比比奧文",id:"印尼文",ie:"國際文(E)",ig:"伊布文",ii:"四川彝文",ik:"依奴皮維克文",ilo:"伊洛闊文",inh:"印古什文",io:"伊多文",is:"冰島文",it:"意大利文",iu:"因紐特文",izh:"英格里亞文",ja:"日文",jam:"牙買加克里奧爾英文",jbo:"邏輯文",jgo:"恩格姆巴文",jmc:"馬恰美文",jpr:"猶太波斯文",jrb:"猶太阿拉伯文",jut:"日德蘭文",jv:"爪哇文",ka:"格魯吉亞文",kaa:"卡拉卡爾帕克文",kab:"卡比爾文",kac:"卡琴文",kaj:"卡捷文",kam:"卡姆巴文",kaw:"卡威文",kbd:"卡巴爾達文",kbl:"卡念布文",kcg:"卡塔布文",kde:"馬孔德文",kea:"卡布威爾第文",ken:"肯揚文",kfo:"科羅文",kg:"剛果文",kgp:"坎剛文",kha:"卡西文",kho:"和闐文",khq:"西桑海文",khw:"科瓦文",ki:"吉庫尤文",kiu:"扎扎其文",kj:"廣亞馬文",kk:"哈薩克文",kkj:"卡庫文",kl:"格陵蘭文",kln:"卡倫金文",km:"高棉文",kmb:"金邦杜文",kn:"坎納達文",ko:"韓文",koi:"科米-彼爾米亞克文",kok:"貢根文",kos:"科斯雷恩文",kpe:"克佩列文",kr:"卡努里文",krc:"卡拉柴-包爾卡爾文",kri:"克裡奧爾文",krj:"基那來阿文",krl:"卡累利阿文",kru:"庫魯科文",ks:"喀什米爾文",ksb:"尚巴拉文",ksf:"巴菲亞文",ksh:"科隆文",ku:"庫德文",kum:"庫密克文",kut:"庫特奈文",kv:"科米文",kw:"康瓦耳文",ky:"吉爾吉斯文",la:"拉丁文",lad:"拉迪諾文",lag:"朗吉文",lah:"拉亨達文",lam:"蘭巴文",lb:"盧森堡文",lez:"列茲干文",lfn:"新共同語言",lg:"干達文",li:"林堡文",lij:"利古里亞文",liv:"利伏尼亞文",lkt:"拉科塔文",lmo:"倫巴底文",ln:"林加拉文",lo:"老撾文",lol:"芒戈文",lou:"路易斯安那克里奧爾文",loz:"洛齊文",lrc:"北盧爾文",lt:"立陶宛文",ltg:"拉特加萊文",lu:"魯巴加丹加文",lua:"魯巴魯魯亞文",lui:"路易塞諾文",lun:"盧恩達文",luo:"盧歐文",lus:"米佐文",luy:"盧雅文",lv:"拉脫維亞文",lzh:"文言文",lzz:"拉茲文",mad:"馬都拉文",maf:"馬法文",mag:"馬加伊文",mai:"邁蒂利文",mak:"望加錫文",man:"曼丁哥文",mas:"馬賽文",mde:"馬巴文",mdf:"莫克沙文",mdr:"曼達文",men:"門德文",mer:"梅魯文",mfe:"毛里裘斯克里奧爾文",mg:"馬拉加斯文",mga:"中古愛爾蘭文",mgh:"馬夸文",mgo:"美塔文",mh:"馬紹爾文",mi:"毛利文",mic:"米克馬克文",min:"米南卡堡文",mk:"馬其頓文",ml:"馬拉雅拉姆文",mn:"蒙古文",mnc:"滿族文",mni:"曼尼普爾文",moh:"莫霍克文",mos:"莫西文",mr:"馬拉地文",mrj:"西馬里文",ms:"馬來文",mt:"馬耳他文",mua:"蒙當文",mus:"克里克文",mwl:"米蘭德斯文",mwr:"馬瓦里文",mwv:"明打威文",my:"緬甸文",mye:"姆耶內文",myv:"厄爾茲亞文",mzn:"馬贊德蘭文",na:"諾魯文",nan:"閩南語",nap:"拿波里文",naq:"納馬文",nb:"巴克摩挪威文",nd:"北地畢列文",nds:"低地德文","nds-NL":"低地薩克遜文",ne:"尼泊爾文","new":"尼瓦爾文",ng:"恩東加文",nia:"尼亞斯文",niu:"紐埃文",njo:"阿沃那加文",nl:"荷蘭文","nl-BE":"比利時荷蘭文",nmg:"夸西奧文",nn:"耐諾斯克挪威文",nnh:"恩甘澎文",no:"挪威文",nog:"諾蓋文",non:"古諾爾斯文",nov:"諾維亞文",nqo:"西非書面語言(N’ko)",nr:"南地畢列文",nso:"北索托文",nus:"努埃爾文",nv:"納瓦霍文",nwc:"古尼瓦爾文",ny:"尼揚賈文",nym:"尼揚韋齊文",nyn:"尼揚科萊文",nyo:"尼奧囉文",nzi:"尼茲馬文",oc:"奧克西坦文",oj:"奧杰布瓦文",om:"奧羅莫文",or:"奧里雅文",os:"奧塞提文",osa:"歐塞奇文",ota:"鄂圖曼土耳其文",pa:"旁遮普文",pag:"潘加辛文",pal:"巴列維文",pam:"潘帕嘉文",pap:"帕皮阿門托文",pau:"帛琉文",pcd:"庇卡底文",pcm:"尼日利亞皮欽文",pdc:"賓夕法尼亞德文",pdt:"門諾低地德文",peo:"古波斯文",pfl:"普法爾茨德文",phn:"腓尼基文",pi:"巴利文",pl:"波蘭文",pms:"皮埃蒙特文",pnt:"旁狄希臘文",pon:"波那貝文",prg:"普魯士文",pro:"古普羅旺斯文",ps:"普什圖文",pt:"葡萄牙文","pt-BR":"巴西葡萄牙文","pt-PT":"歐洲葡萄牙文",qu:"蓋楚瓦文",quc:"基切文",qug:"欽博拉索海蘭蓋丘亞文",raj:"拉賈斯坦諸文",rap:"復活島文",rar:"拉羅通加文",rgn:"羅馬格諾里文",rif:"里菲亞諾文",rm:"羅曼斯文",rn:"隆迪文",ro:"羅馬尼亞文","ro-MD":"摩爾多瓦羅馬尼亞文",rof:"蘭博文",rom:"吉普賽文",root:"根語言",rtm:"羅圖馬島文",ru:"俄文",rue:"盧森尼亞文",rug:"羅維阿納文",rup:"阿羅馬尼亞語",rw:"盧旺達文",rwk:"羅瓦文",sa:"梵文",sad:"桑達韋文",sah:"雅庫特文",sam:"薩瑪利亞阿拉姆文",saq:"薩布魯文",sas:"撒撒克文",sat:"桑塔利文",saz:"索拉什特拉文",sba:"甘拜文",sbp:"桑古文",sc:"撒丁文",scn:"西西里文",sco:"蘇格蘭文",sd:"信德文",sdc:"薩丁尼亞-薩薩里文",sdh:"南庫德文",se:"北薩米文",see:"塞訥卡文",seh:"賽納文",sei:"瑟里文",sel:"塞爾庫普文",ses:"東桑海文",sg:"桑戈文",sga:"古愛爾蘭文",sgs:"薩莫吉希亞文",sh:"塞爾維亞克羅埃西亞文",shi:"希爾哈文",shn:"撣文",shu:"阿拉伯文(查德)",si:"僧伽羅文",sid:"希達摩文",sk:"斯洛伐克文",sl:"斯洛文尼亞文",sli:"下西利西亞文",sly:"塞拉亞文",sm:"薩摩亞文",sma:"南薩米文",smj:"魯勒薩米文",smn:"伊納里薩米文",sms:"斯科特薩米文",sn:"修納文",snk:"索尼基文",so:"索馬里文",sog:"索格底亞納文",sq:"阿爾巴尼亞文",sr:"塞爾維亞文",srn:"蘇拉南東墎文",srr:"塞雷爾文",ss:"斯瓦特文",ssy:"薩霍文",st:"塞索托文",stq:"沙特菲士蘭文",su:"巽他文",suk:"蘇庫馬文",sus:"蘇蘇文",sux:"蘇美文",sv:"瑞典文",sw:"史瓦希里文","sw-CD":"剛果史瓦希里文",swb:"葛摩文",syc:"古敘利亞文",syr:"敍利亞文",szl:"西利西亞文",ta:"泰米爾文",tcy:"圖盧文",te:"泰盧固文",tem:"提姆文",teo:"特索文",ter:"泰雷諾文",tet:"泰頓文",tg:"塔吉克文",th:"泰文",ti:"提格利尼亞文",tig:"蒂格雷文",tiv:"提夫文",tk:"土庫曼文",tkl:"托克勞文",tkr:"查庫爾文",tl:"塔加路族文",tlh:"克林貢文",tli:"特林基特文",tly:"塔里什文",tmh:"塔馬奇克文",tn:"突尼西亞文",to:"湯加文",tog:"東加文(尼亞薩)",tpi:"托比辛文",tr:"土耳其文",tru:"圖羅尤文",trv:"太魯閣文",ts:"特松加文",tsd:"特薩克尼恩文",tsi:"欽西安文",tt:"韃靼文",ttt:"穆斯林塔特文",tum:"圖姆布卡文",tvl:"吐瓦魯文",tw:"特威文",twq:"北桑海文",ty:"大溪地文",tyv:"圖瓦文",tzm:"中阿特拉斯塔馬塞特文",udm:"烏德穆爾特文",ug:"維吾爾文",uga:"烏加列文",uk:"烏克蘭文",umb:"姆本杜文",ur:"烏爾都文",uz:"烏茲別克文",vai:"瓦伊文",ve:"溫達文",vec:"威尼斯文",vep:"維普森文",vi:"越南文",vls:"西佛蘭德文",vmf:"美茵-法蘭克尼亞文",vo:"沃拉普克文",vot:"沃提克文",vro:"佛羅文",vun:"溫舊文",wa:"瓦隆文",wae:"瓦爾瑟文",wal:"瓦拉莫文",war:"瓦瑞文",was:"瓦紹文",wbp:"瓦爾皮里文",wo:"沃洛夫文",wuu:"吳語",xal:"卡爾梅克文",xh:"科薩文",xmf:"明格列爾文",xog:"索加文",yao:"瑤文",yap:"雅浦文",yav:"洋卞文",ybb:"耶姆巴文",yi:"意第緒文",yo:"約魯巴文",yrl:"奈恩加圖文",yue:"廣東話",za:"壯文",zap:"薩波特克文",zbl:"布列斯符號",zea:"西蘭文",zen:"澤納加文",zgh:"摩洛哥標準塔馬齊格特文",zh:"中文","zh-Hans":"中文(簡體字)","zh-Hant":"中文(繁體字)",zu:"祖魯文",zun:"祖尼文",zza:"扎扎文"},scriptNames:{Cyrl:"西里爾文",Latn:"拉丁字母",Arab:"阿拉伯文",Guru:"古木基文",Tfng:"提非納文",Vaii:"瓦依文",Hans:"簡體字",Hant:"繁體字"}},"zh-TW":{rtl:false,languageNames:{aa:"阿法文",ab:"阿布哈茲文",ace:"亞齊文",ach:"阿僑利文",ada:"阿當莫文",ady:"阿迪各文",ae:"阿維斯塔文",aeb:"突尼斯阿拉伯文",af:"南非荷蘭文",afh:"阿弗里希利文",agq:"亞罕文",ain:"阿伊努文",ak:"阿坎文",akk:"阿卡德文",akz:"阿拉巴馬文",ale:"阿留申文",aln:"蓋格阿爾巴尼亞文",alt:"南阿爾泰文",am:"阿姆哈拉文",an:"阿拉貢文",ang:"古英文",anp:"昂加文",ar:"阿拉伯文","ar-001":"現代標準阿拉伯文",arc:"阿拉米文",arn:"馬普切文",aro:"阿拉奧納文",arp:"阿拉帕霍文",arq:"阿爾及利亞阿拉伯文",ars:"納吉迪阿拉伯文",arw:"阿拉瓦克文",ary:"摩洛哥阿拉伯文",arz:"埃及阿拉伯文",as:"阿薩姆文",asa:"阿蘇文",ase:"美國手語",ast:"阿斯圖里亞文",av:"阿瓦爾文",avk:"科塔瓦文",awa:"阿瓦文",ay:"艾馬拉文",az:"亞塞拜然文",ba:"巴什喀爾文",bal:"俾路支文",ban:"峇里文",bar:"巴伐利亞文",bas:"巴薩文",bax:"巴姆穆文",bbc:"巴塔克托巴文",bbj:"戈馬拉文",be:"白俄羅斯文",bej:"貝扎文",bem:"別姆巴文",bew:"貝塔維文",bez:"貝納文",bfd:"富特文",bfq:"巴達加文",bg:"保加利亞文",bgn:"西俾路支文",bho:"博傑普爾文",bi:"比斯拉馬文",bik:"比科爾文",bin:"比尼文",bjn:"班亞爾文",bkm:"康姆文",bla:"錫克錫卡文",bm:"班巴拉文",bn:"孟加拉文",bo:"藏文",bpy:"比什奴普萊利亞文",bqi:"巴赫蒂亞里文",br:"布列塔尼文",bra:"布拉杰文",brh:"布拉維文",brx:"博多文",bs:"波士尼亞文",bss:"阿庫色文",bua:"布里阿特文",bug:"布吉斯文",bum:"布魯文",byn:"比林文",byv:"梅敦巴文",ca:"加泰蘭文",cad:"卡多文",car:"加勒比文",cay:"卡尤加文",cch:"阿燦文",ccp:"查克馬文",ce:"車臣文",ceb:"宿霧文",cgg:"奇加文",ch:"查莫洛文",chb:"奇布查文",chg:"查加文",chk:"處奇斯文",chm:"馬里文",chn:"契奴克文",cho:"喬克托文",chp:"奇佩瓦揚文",chr:"柴羅基文",chy:"沙伊安文",ckb:"中庫德文",co:"科西嘉文",cop:"科普特文",cps:"卡皮茲文",cr:"克里文",crh:"土耳其文(克里米亞半島)",crs:"塞席爾克里奧爾法文",cs:"捷克文",csb:"卡舒布文",cu:"宗教斯拉夫文",cv:"楚瓦什文",cy:"威爾斯文",da:"丹麥文",dak:"達科他文",dar:"達爾格瓦文",dav:"台塔文",de:"德文","de-AT":"德文(奧地利)","de-CH":"高地德文(瑞士)",del:"德拉瓦文",den:"斯拉夫",dgr:"多格里布文",din:"丁卡文",dje:"扎爾馬文",doi:"多格來文",dsb:"下索布文",dtp:"中部杜順文",dua:"杜亞拉文",dum:"中古荷蘭文",dv:"迪維西文",dyo:"朱拉文",dyu:"迪尤拉文",dz:"宗卡文",dzg:"達薩文",ebu:"恩布文",ee:"埃維文",efi:"埃菲克文",egl:"埃米利安文",egy:"古埃及文",eka:"艾卡朱克文",el:"希臘文",elx:"埃蘭文",en:"英文","en-AU":"英文(澳洲)","en-CA":"英文(加拿大)","en-GB":"英文(英國)","en-US":"英文(美國)",enm:"中古英文",eo:"世界文",es:"西班牙文","es-419":"西班牙文(拉丁美洲)","es-ES":"西班牙文(西班牙)","es-MX":"西班牙文(墨西哥)",esu:"中尤皮克文",et:"愛沙尼亞文",eu:"巴斯克文",ewo:"依汪都文",ext:"埃斯特雷馬杜拉文",fa:"波斯文",fan:"芳族文",fat:"芳蒂文",ff:"富拉文",fi:"芬蘭文",fil:"菲律賓文",fit:"托爾訥芬蘭文",fj:"斐濟文",fo:"法羅文",fon:"豐文",fr:"法文","fr-CA":"法文(加拿大)","fr-CH":"法文(瑞士)",frc:"卡真法文",frm:"中古法文",fro:"古法文",frp:"法蘭克-普羅旺斯文",frr:"北弗里西亞文",frs:"東弗里西亞文",fur:"弗留利文",fy:"西弗里西亞文",ga:"愛爾蘭文",gaa:"加族文",gag:"加告茲文",gan:"贛語",gay:"加約文",gba:"葛巴亞文",gbz:"索羅亞斯德教達里文",gd:"蘇格蘭蓋爾文",gez:"吉茲文",gil:"吉爾伯特群島文",gl:"加利西亞文",glk:"吉拉基文",gmh:"中古高地德文",gn:"瓜拉尼文",goh:"古高地德文",gom:"孔卡尼文",gon:"岡德文",gor:"科隆達羅文",got:"哥德文",grb:"格列博文",grc:"古希臘文",gsw:"德文(瑞士)",gu:"古吉拉特文",guc:"瓦尤文",gur:"弗拉弗拉文",guz:"古西文",gv:"曼島文",gwi:"圭契文",ha:"豪撒文",hai:"海達文",hak:"客家話",haw:"夏威夷文",he:"希伯來文",hi:"印地文",hif:"斐濟印地文",hil:"希利蓋農文",hit:"赫梯文",hmn:"孟文",ho:"西里莫圖土文",hr:"克羅埃西亞文",hsb:"上索布文",hsn:"湘語",ht:"海地文",hu:"匈牙利文",hup:"胡帕文",hy:"亞美尼亞文",hz:"赫雷羅文",ia:"國際文",iba:"伊班文",ibb:"伊比比奧文",id:"印尼文",ie:"國際文(E)",ig:"伊布文",ii:"四川彝文",ik:"依奴皮維克文",ilo:"伊洛闊文",inh:"印古什文",io:"伊多文",is:"冰島文",it:"義大利文",iu:"因紐特文",izh:"英格里亞文",ja:"日文",jam:"牙買加克里奧爾英文",jbo:"邏輯文",jgo:"恩格姆巴文",jmc:"馬恰美文",jpr:"猶太教-波斯文",jrb:"猶太阿拉伯文",jut:"日德蘭文",jv:"爪哇文",ka:"喬治亞文",kaa:"卡拉卡爾帕克文",kab:"卡比爾文",kac:"卡琴文",kaj:"卡捷文",kam:"卡姆巴文",kaw:"卡威文",kbd:"卡巴爾達文",kbl:"卡念布文",kcg:"卡塔布文",kde:"馬孔德文",kea:"卡布威爾第文",ken:"肯揚文",kfo:"科羅文",kg:"剛果文",kgp:"坎剛文",kha:"卡西文",kho:"和闐文",khq:"西桑海文",khw:"科瓦文",ki:"吉庫尤文",kiu:"北紮紮其文",kj:"廣亞馬文",kk:"哈薩克文",kkj:"卡庫文",kl:"格陵蘭文",kln:"卡倫金文",km:"高棉文",kmb:"金邦杜文",kn:"坎那達文",ko:"韓文",koi:"科米-彼爾米亞克文",kok:"貢根文",kos:"科斯雷恩文",kpe:"克佩列文",kr:"卡努里文",krc:"卡拉柴-包爾卡爾文",kri:"塞拉利昂克裏奧爾文",krj:"基那來阿文",krl:"卡累利阿文",kru:"庫魯科文",ks:"喀什米爾文",ksb:"尚巴拉文",ksf:"巴菲亞文",ksh:"科隆文",ku:"庫德文",kum:"庫密克文",kut:"庫特奈文",kv:"科米文",kw:"康瓦耳文",ky:"吉爾吉斯文",la:"拉丁文",lad:"拉迪諾文",lag:"朗吉文",lah:"拉亨達文",lam:"蘭巴文",lb:"盧森堡文",lez:"列茲干文",lfn:"新共同語言",lg:"干達文",li:"林堡文",lij:"利古里亞文",liv:"利伏尼亞文",lkt:"拉科塔文",lmo:"倫巴底文",ln:"林加拉文",lo:"寮文",lol:"芒戈文",lou:"路易斯安那克里奧爾文",loz:"洛齊文",lrc:"北盧爾文",lt:"立陶宛文",ltg:"拉特加萊文",lu:"魯巴加丹加文",lua:"魯巴魯魯亞文",lui:"路易塞諾文",lun:"盧恩達文",luo:"盧奧文",lus:"米佐文",luy:"盧雅文",lv:"拉脫維亞文",lzh:"文言文",lzz:"拉茲文",mad:"馬都拉文",maf:"馬法文",mag:"馬加伊文",mai:"邁蒂利文",mak:"望加錫文",man:"曼丁哥文",mas:"馬賽文",mde:"馬巴文",mdf:"莫克沙文",mdr:"曼達文",men:"門德文",mer:"梅魯文",mfe:"克里奧文(模里西斯)",mg:"馬達加斯加文",mga:"中古愛爾蘭文",mgh:"馬夸文",mgo:"美塔文",mh:"馬紹爾文",mi:"毛利文",mic:"米克馬克文",min:"米南卡堡文",mk:"馬其頓文",ml:"馬來亞拉姆文",mn:"蒙古文",mnc:"滿族文",mni:"曼尼普爾文",moh:"莫霍克文",mos:"莫西文",mr:"馬拉地文",mrj:"西馬里文",ms:"馬來文",mt:"馬爾他文",mua:"蒙當文",mus:"克里克文",mwl:"米蘭德斯文",mwr:"馬瓦里文",mwv:"明打威文",my:"緬甸文",mye:"姆耶內文",myv:"厄爾茲亞文",mzn:"馬贊德蘭文",na:"諾魯文",nan:"閩南語",nap:"拿波里文",naq:"納馬文",nb:"巴克摩挪威文",nd:"北地畢列文",nds:"低地德文","nds-NL":"低地薩克遜文",ne:"尼泊爾文","new":"尼瓦爾文",ng:"恩東加文",nia:"尼亞斯文",niu:"紐埃文",njo:"阿沃那加文",nl:"荷蘭文","nl-BE":"佛蘭芒文",nmg:"夸西奧文",nn:"耐諾斯克挪威文",nnh:"恩甘澎文",no:"挪威文",nog:"諾蓋文",non:"古諾爾斯文",nov:"諾維亞文",nqo:"曼德文字 (N’Ko)",nr:"南地畢列文",nso:"北索托文",nus:"努埃爾文",nv:"納瓦霍文",nwc:"古尼瓦爾文",ny:"尼揚賈文",nym:"尼揚韋齊文",nyn:"尼揚科萊文",nyo:"尼奧囉文",nzi:"尼茲馬文",oc:"奧克西坦文",oj:"奧杰布瓦文",om:"奧羅莫文",or:"歐迪亞文",os:"奧塞提文",osa:"歐塞奇文",ota:"鄂圖曼土耳其文",pa:"旁遮普文",pag:"潘加辛文",pal:"巴列維文",pam:"潘帕嘉文",pap:"帕皮阿門托文",pau:"帛琉文",pcd:"庇卡底文",pcm:"奈及利亞皮欽文",pdc:"賓夕法尼亞德文",pdt:"門諾低地德文",peo:"古波斯文",pfl:"普法爾茨德文",phn:"腓尼基文",pi:"巴利文",pl:"波蘭文",pms:"皮埃蒙特文",pnt:"旁狄希臘文",pon:"波那貝文",prg:"普魯士文",pro:"古普羅旺斯文",ps:"普什圖文",pt:"葡萄牙文","pt-BR":"葡萄牙文(巴西)","pt-PT":"葡萄牙文(葡萄牙)",qu:"蓋楚瓦文",quc:"基切文",qug:"欽博拉索海蘭蓋丘亞文",raj:"拉賈斯坦諸文",rap:"復活島文",rar:"拉羅通加文",rgn:"羅馬格諾里文",rif:"里菲亞諾文",rm:"羅曼斯文",rn:"隆迪文",ro:"羅馬尼亞文","ro-MD":"摩爾多瓦文",rof:"蘭博文",rom:"吉普賽文",root:"根語言",rtm:"羅圖馬島文",ru:"俄文",rue:"盧森尼亞文",rug:"羅維阿納文",rup:"羅馬尼亞語系",rw:"盧安達文",rwk:"羅瓦文",sa:"梵文",sad:"桑達韋文",sah:"雅庫特文",sam:"薩瑪利亞阿拉姆文",saq:"薩布魯文",sas:"撒撒克文",sat:"桑塔利文",saz:"索拉什特拉文",sba:"甘拜文",sbp:"桑古文",sc:"撒丁文",scn:"西西里文",sco:"蘇格蘭文",sd:"信德文",sdc:"薩丁尼亞-薩薩里文",sdh:"南庫德文",se:"北薩米文",see:"塞訥卡文",seh:"賽納文",sei:"瑟里文",sel:"塞爾庫普文",ses:"東桑海文",sg:"桑戈文",sga:"古愛爾蘭文",sgs:"薩莫吉希亞文",sh:"塞爾維亞克羅埃西亞文",shi:"希爾哈文",shn:"撣文",shu:"阿拉伯文(查德)",si:"僧伽羅文",sid:"希達摩文",sk:"斯洛伐克文",sl:"斯洛維尼亞文",sli:"下西利西亞文",sly:"塞拉亞文",sm:"薩摩亞文",sma:"南薩米文",smj:"魯勒薩米文",smn:"伊納里薩米文",sms:"斯科特薩米文",sn:"紹納文",snk:"索尼基文",so:"索馬利文",sog:"索格底亞納文",sq:"阿爾巴尼亞文",sr:"塞爾維亞文",srn:"蘇拉南東墎文",srr:"塞雷爾文",ss:"斯瓦特文",ssy:"薩霍文",st:"塞索托文",stq:"沙特菲士蘭文",su:"巽他文",suk:"蘇庫馬文",sus:"蘇蘇文",sux:"蘇美文",sv:"瑞典文",sw:"史瓦希里文","sw-CD":"史瓦希里文(剛果)",swb:"葛摩文",syc:"古敘利亞文",syr:"敘利亞文",szl:"西利西亞文",ta:"坦米爾文",tcy:"圖盧文",te:"泰盧固文",tem:"提姆文",teo:"特索文",ter:"泰雷諾文",tet:"泰頓文",tg:"塔吉克文",th:"泰文",ti:"提格利尼亞文",tig:"蒂格雷文",tiv:"提夫文",tk:"土庫曼文",tkl:"托克勞文",tkr:"查庫爾文",tl:"塔加路族文",tlh:"克林貢文",tli:"特林基特文",tly:"塔里什文",tmh:"塔馬奇克文",tn:"塞茲瓦納文",to:"東加文",tog:"東加文(尼亞薩)",tpi:"托比辛文",tr:"土耳其文",tru:"圖羅尤文",trv:"太魯閣文",ts:"特松加文",tsd:"特薩克尼恩文",tsi:"欽西安文",tt:"韃靼文",ttt:"穆斯林塔特文",tum:"圖姆布卡文",tvl:"吐瓦魯文",tw:"特威文",twq:"北桑海文",ty:"大溪地文",tyv:"圖瓦文",tzm:"中阿特拉斯塔馬塞特文",udm:"烏德穆爾特文",ug:"維吾爾文",uga:"烏加列文",uk:"烏克蘭文",umb:"姆本杜文",ur:"烏都文",uz:"烏茲別克文",vai:"瓦伊文",ve:"溫達文",vec:"威尼斯文",vep:"維普森文",vi:"越南文",vls:"西佛蘭德文",vmf:"美茵-法蘭克尼亞文",vo:"沃拉普克文",vot:"沃提克文",vro:"佛羅文",vun:"溫舊文",wa:"瓦隆文",wae:"瓦爾瑟文",wal:"瓦拉莫文",war:"瓦瑞文",was:"瓦紹文",wbp:"沃皮瑞文",wo:"沃洛夫文",wuu:"吳語",xal:"卡爾梅克文",xh:"科薩文",xmf:"明格列爾文",xog:"索加文",yao:"瑤文",yap:"雅浦文",yav:"洋卞文",ybb:"耶姆巴文",yi:"意第緒文",yo:"約魯巴文",yrl:"奈恩加圖文",yue:"粵語",za:"壯文",zap:"薩波特克文",zbl:"布列斯符號",zea:"西蘭文",zen:"澤納加文",zgh:"標準摩洛哥塔馬塞特文",zh:"中文","zh-Hans":"中文(簡體)","zh-Hant":"中文(繁體)",zu:"祖魯文",zun:"祖尼文",zza:"扎扎文"},scriptNames:{Cyrl:"斯拉夫文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"古魯穆奇文",Tfng:"提非納文",Vaii:"瓦依文",Hans:"簡體",Hant:"繁體"}}};
26828
26829         var dataPhoneFormats = {ag:"+1-268-555-1234",ai:"+1-264-555-1234",as:"+1-684-555-1234",at:"+43 1 123 45 67",au:"+61 1 2345 6789",bb:"+1-246-555-1234",bj:"+229 20 12 34 56",bm:"+1-441-555-1234",bo:"+591 1 2345678",br:"+55 11 0982 1098",bs:"+1-242-555-1234",ca:"+1-226-555-1234",ci:"+225 20 12 34 56",cn:"+86 10 12345678",de:"+49 89 1234567",dm:"+1-767-555-1234","do":"+1-809-555-1234",es:"+34 989 12 34 56",fi:"+358 40 123 4567",fr:"+33 1 23 45 67 89",gb:"+44 1632 961234",gd:"+1-473-555-1234",gg:"+44 1632 961234",gu:"+1-671-555-1234",hk:"+852 1234 5678",hr:"+385 01 123 4567",hu:"+36 1 123 45 67",ie:"+353 20 912 3456",im:"+44 1632 961234",it:"+39 01 123 456",je:"+44 1632 961234",jm:"+1-876-555-1234",kn:"+1-869-555-1234",ky:"+1-345-555-1234",kz:"+7 495 1234567",lc:"+1-758-555-1234",mp:"+1-670-555-1234",ms:"+1-664-555-1234",nl:"+31 42 123 4567",no:"+47 22 12 34 56",pe:"+51 1 1234567",pl:"+48 42 123 4567",pr:"+1-787-555-1234",pt:"+351 211 123456",ru:"+7 495 1234567",se:"+46 31 123 4567",si:"+386 31 123 4567",sj:"+47 22 12 34 56",sx:"+1-721-555-1234",tc:"+1-649-555-1234",tr:"+90 312 123 4567",tt:"+1-868-555-1234",tw:"+886 1 2345 6789",ua:"+380 44 123 4567",us:"+1-202-555-1234",va:"+39 01 123 456",vc:"+1-784-555-1234",vg:"+1-284-555-1234",vi:"+1-340-555-1234",vn:"+84 1 234 5678",za:"+27 11 907 1111"};
26830
26831         var dataShortcuts = [{tab:"browsing",text:"shortcuts.browsing.title",columns:[{rows:[{section:"navigation",text:"shortcuts.browsing.navigation.title"},{shortcuts:["↓","↑","←","→"],text:"shortcuts.browsing.navigation.pan",separator:","},{modifiers:["⌘"],shortcuts:["↓","↑","←","→"],text:"shortcuts.browsing.navigation.pan_more",separator:","},{shortcuts:["+","-"],text:"shortcuts.browsing.navigation.zoom",separator:","},{modifiers:["⌘"],shortcuts:["+","-"],text:"shortcuts.browsing.navigation.zoom_more",separator:","},{section:"display_options",text:"shortcuts.browsing.display_options.title"},{shortcuts:["background.key"],text:"shortcuts.browsing.display_options.background"},{modifiers:["⌘"],shortcuts:["background.key"],text:"shortcuts.browsing.display_options.background_switch"},{shortcuts:["map_data.key"],text:"shortcuts.browsing.display_options.map_data"},{shortcuts:["issues.key"],text:"shortcuts.browsing.display_options.issues"},{shortcuts:["preferences.key"],text:"shortcuts.browsing.display_options.preferences"},{modifiers:["⌃","⌘"],shortcuts:["F","F11"],text:"shortcuts.browsing.display_options.fullscreen"},{shortcuts:["sidebar.key","`","²"],text:"shortcuts.browsing.display_options.sidebar"},{shortcuts:["area_fill.wireframe.key"],text:"shortcuts.browsing.display_options.wireframe"},{modifiers:["⌥"],shortcuts:["area_fill.wireframe.key"],text:"shortcuts.browsing.display_options.osm_data"},{shortcuts:["background.minimap.key"],text:"shortcuts.browsing.display_options.minimap"},{shortcuts:["map_data.highlight_edits.key"],text:"shortcuts.browsing.display_options.highlight_edits"}]},{rows:[{section:"help",text:"shortcuts.browsing.help.title"},{shortcuts:["help.key"],text:"shortcuts.browsing.help.help"},{shortcuts:["shortcuts.toggle.key","?"],text:"shortcuts.browsing.help.keyboard"},{section:"selecting",text:"shortcuts.browsing.selecting.title"},{shortcuts:["Left-click"],text:"shortcuts.browsing.selecting.select_one"},{modifiers:["⇧"],shortcuts:["Left-click"],text:"shortcuts.browsing.selecting.select_multi"},{modifiers:["⇧"],shortcuts:["Left-click"],gesture:"shortcuts.gesture.drag",text:"shortcuts.browsing.selecting.lasso"},{modifiers:["⌘"],shortcuts:["F"],text:"shortcuts.browsing.selecting.search"},{section:"with_selected",text:"shortcuts.browsing.with_selected.title"},{shortcuts:["Right-click","shortcuts.key.space"],text:"shortcuts.browsing.with_selected.edit_menu"},{shortcuts:["inspector.zoom_to.key"],text:"shortcuts.browsing.with_selected.zoom_to"},{section:"vertex_selected",text:"shortcuts.browsing.vertex_selected.title"},{shortcuts:["[","↖"],text:"shortcuts.browsing.vertex_selected.previous"},{shortcuts:["]","↘"],text:"shortcuts.browsing.vertex_selected.next"},{shortcuts:["{","⇞"],text:"shortcuts.browsing.vertex_selected.first"},{shortcuts:["}","⇟"],text:"shortcuts.browsing.vertex_selected.last"},{shortcuts:["\\","shortcuts.key.pause"],text:"shortcuts.browsing.vertex_selected.change_parent"}]}]},{tab:"editing",text:"shortcuts.editing.title",columns:[{rows:[{section:"drawing",text:"shortcuts.editing.drawing.title"},{shortcuts:["1"],text:"shortcuts.editing.drawing.add_point"},{shortcuts:["2"],text:"shortcuts.editing.drawing.add_line"},{shortcuts:["3"],text:"shortcuts.editing.drawing.add_area"},{shortcuts:["modes.add_note.key"],text:"shortcuts.editing.drawing.add_note"},{shortcuts:["Left-click","shortcuts.key.space"],text:"shortcuts.editing.drawing.place_point"},{shortcuts:["⌥"],text:"shortcuts.editing.drawing.disable_snap"},{shortcuts:["↵","⎋"],text:"shortcuts.editing.drawing.stop_line"},{section:"commands",text:"shortcuts.editing.commands.title"},{modifiers:["⌘"],shortcuts:["C"],text:"shortcuts.editing.commands.copy"},{modifiers:["⌘"],shortcuts:["V"],text:"shortcuts.editing.commands.paste"},{modifiers:["⌘"],shortcuts:["Z"],text:"shortcuts.editing.commands.undo"},{modifiers:["⌘","⇧"],shortcuts:["Z"],text:"shortcuts.editing.commands.redo"},{modifiers:["⌘"],shortcuts:["S"],text:"shortcuts.editing.commands.save"}]},{rows:[{section:"operations",text:"shortcuts.editing.operations.title"},{shortcuts:["operations.continue.key"],text:"shortcuts.editing.operations.continue_line"},{shortcuts:["operations.merge.key"],text:"shortcuts.editing.operations.merge"},{shortcuts:["operations.disconnect.key"],text:"shortcuts.editing.operations.disconnect"},{shortcuts:["operations.extract.key"],text:"shortcuts.editing.operations.extract"},{shortcuts:["operations.split.key"],text:"shortcuts.editing.operations.split"},{shortcuts:["operations.reverse.key"],text:"shortcuts.editing.operations.reverse"},{shortcuts:["operations.move.key"],text:"shortcuts.editing.operations.move"},{shortcuts:["operations.rotate.key"],text:"shortcuts.editing.operations.rotate"},{shortcuts:["operations.orthogonalize.key"],text:"shortcuts.editing.operations.orthogonalize"},{shortcuts:["operations.straighten.key"],text:"shortcuts.editing.operations.straighten"},{shortcuts:["operations.circularize.key"],text:"shortcuts.editing.operations.circularize"},{shortcuts:["operations.reflect.key.long"],text:"shortcuts.editing.operations.reflect_long"},{shortcuts:["operations.reflect.key.short"],text:"shortcuts.editing.operations.reflect_short"},{modifiers:["⌘"],shortcuts:["⌫"],text:"shortcuts.editing.operations.delete"}]}]},{tab:"tools",text:"shortcuts.tools.title",columns:[{rows:[{section:"info",text:"shortcuts.tools.info.title"},{modifiers:["⌘"],shortcuts:["info_panels.key"],text:"shortcuts.tools.info.all"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.background.key"],text:"shortcuts.tools.info.background"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.history.key"],text:"shortcuts.tools.info.history"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.location.key"],text:"shortcuts.tools.info.location"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.measurement.key"],text:"shortcuts.tools.info.measurement"}]}]}];
26832
26833         var dataTerritoryLanguages = {ac:["en"],ad:["ca","es","fr"],ae:["ar","en","ml","ps","bal","fa"],af:["fa","ps","haz","uz-Arab","tk","prd","bal","bgn","ug","kk-Arab"],ag:["en","pt"],ai:["en"],al:["sq","el","mk"],am:["hy","ku","az"],ao:["pt","umb","kmb","ln"],aq:["und"],ar:["es","en","cy","gn"],as:["sm","en"],at:["de","bar","en","fr","it","hr","sl","hu"],au:["en","zh-Hant","it","wbp"],aw:["nl","pap","en"],ax:["sv"],az:["az","az-Cyrl","tly","ku","ttt","tkr"],ba:["bs","bs-Cyrl","en","hr","sr","sr-Latn"],bb:["en"],bd:["bn","en","rkt","syl","ccp","my","grt","mro","mni"],be:["en","nl","fr","de","vls","wa"],bf:["mos","dyu","fr","ff","ff-Adlm"],bg:["bg","en","ru","tr","de"],bh:["ar","ml"],bi:["rn","fr","sw","en"],bj:["fr","fon","yo"],bl:["fr"],bm:["en"],bn:["ms","zh-Hant","ms-Arab","en"],bo:["es","qu","ay","gn","aro"],bq:["pap","nl"],br:["pt","en","de","it","ja","es","ko","kgp","gub","yrl","xav"],bs:["en"],bt:["dz","ne","tsj","en","lep"],bv:["und"],bw:["en","tn","af"],by:["be","ru"],bz:["en","es"],ca:["en","fr","it","de","pdt","cr","crk","yi","iu","iu-Latn","moe","crj","atj","crl","csw","crm","ikt","moh","dgr","den","scs","nsk","chp","gwi"],cc:["ms-Arab","en"],cd:["sw","lua","fr","ln","lu","kg","lol","rw"],cf:["fr","sg","ln"],cg:["fr","ln"],ch:["de","gsw","en","fr","it","lmo","pt","rm","rmo","wae"],ci:["fr","bci","sef","dnj","kfo","bqv"],ck:["en"],cl:["es","en","arn"],cm:["fr","en","bum","ff","ewo","ybb","bbj","nnh","bkm","bas","bax","byv","mua","maf","bfd","bss","kkj","dua","mgo","ar","jgo","ksf","agq","ha-Arab","nmg","yav","ff-Adlm"],cn:["zh","wuu","yue-Hans","hsn","hak","nan","gan","ii","ug","za","mn-Mong","bo","ko","kk-Arab","lis","ky-Arab","nxq","khb","tdd","lcp","en","ru","vi","uz-Cyrl","lzh"],co:["es","guc"],cp:["und"],cr:["es"],cu:["es"],cv:["kea","pt"],cw:["pap","nl","es"],cx:["en"],cy:["el","en","tr","fr","hy","ar"],cz:["cs","en","sk","de","pl"],de:["de","en","fr","bar","nds","nl","it","es","ru","vmf","tr","gsw","da","swg","hr","ku","el","ksh","pl","hsb","frr","dsb","frs","stq","pfl"],dg:["en"],dj:["aa","so","ar","fr"],dk:["da","en","de","sv","fo","kl","jut"],dm:["en"],"do":["es","en"],dz:["arq","ar","fr","kab","en"],ea:["es"],ec:["es","qu","qug"],ee:["et","ru","en","fi","vro"],eg:["ar","arz","en","el"],eh:["ar"],er:["ti","en","tig","ar","aa","ssy","byn"],es:["es","en","ca","gl","eu","ast","ext","an"],et:["en","am","om","so","ti","sid","wal","aa"],fi:["fi","en","sv","de","ru","et","rmf","se","smn","sms"],fj:["en","hi","hif","fj","rtm"],fk:["en"],fm:["en","chk","pon","kos","yap","uli"],fo:["fo"],fr:["fr","en","es","de","oc","it","pt","pcd","gsw","br","co","ca","eu","nl","frp","ia"],ga:["fr","puu"],gb:["en","fr","de","sco","pa","cy","bn","zh-Hant","syl","el","it","ks","gd","yi","ml","ga","kw"],gd:["en"],ge:["ka","xmf","ru","hy","ab","os","ku"],gf:["fr","gcr","zh-Hant"],gg:["en"],gh:["ak","en","ee","abr","gur","ada","gaa","nzi","ha","saf","ff","ff-Adlm"],gi:["en","es"],gl:["kl","da"],gm:["en","man","ff","ff-Adlm"],gn:["fr","ff","man-Nkoo","sus","nqo","kpe","ff-Adlm"],gp:["fr"],gq:["es","fan","fr","bvb","pt"],gr:["el","en","fr","de","pnt","mk","tr","bg","sq","tsd"],gs:["und"],gt:["es","quc"],gu:["en","ch"],gw:["pt","knf","ff","ff-Adlm"],gy:["en"],hk:["zh-Hant","yue","en","zh"],hm:["und"],hn:["es","en"],hr:["hr","en","it"],ht:["ht","fr"],hu:["hu","en","de","fr","ro","hr","sk","sl"],ic:["es"],id:["id","jv","su","mad","ms-Arab","min","bew","ban","bug","bjn","ace","sas","bbc","zh-Hant","mak","ljp","rej","gor","nij","kge","aoz","kvr","lbw","gay","rob","mdr","sxn","sly","mwv"],ie:["en","ga","fr"],il:["he","en","ar","ru","ro","yi","pl","lad","hu","am","ti","ml"],im:["en","gv"],"in":["hi","en","bn","te","mr","ta","ur","gu","kn","ml","or","pa","bho","awa","as","bgc","mag","mai","mwr","hne","dcc","bjj","ne","sat","wtm","rkt","ks","kok","gom","swv","gbm","lmn","sd","gon","kfy","doi","kru","sck","wbq","xnr","khn","tcy","wbr","brx","noe","bhb","mni","raj","hoc","mtr","unr","bhi","hoj","kha","kfr","grt","unx","bfy","srx","saz","ccp","sd-Deva","bfq","njo","ria","bo","bpy","bft","bra","lep","btv","lif","lah","sa","kht","dv","dz"],io:["en"],iq:["ar","en","ckb","az-Arab","fa","lrc","syr"],ir:["fa","az-Arab","mzn","glk","ckb","sdh","tk","lrc","ar","bal","rmt","bqi","luz","lki","bgn","prd","hy","ps","ka","gbz","kk-Arab"],is:["is","da"],it:["it","en","fr","sc","de","vec","nap","lij","scn","sdc","sl","fur","egl","ca","el","lmo","pms","hr","rgn"],je:["en"],jm:["en","jam"],jo:["ar","en"],jp:["ja","ryu","ko"],ke:["sw","en","ki","luy","luo","kam","kln","guz","mer","mas","ebu","so","dav","teo","pko","om","saq","ar","pa","gu"],kg:["ky","ru"],kh:["km","cja","kdt"],ki:["en","gil"],km:["ar","fr","zdj","wni"],kn:["en"],kp:["ko"],kr:["ko"],kw:["ar"],ky:["en"],kz:["ru","kk","en","de","ug-Cyrl"],la:["lo","kjg","kdt"],lb:["ar","en","hy","ku-Arab","fr"],lc:["en"],li:["de","gsw","wae"],lk:["si","ta","en"],lr:["en","kpe","vai","men","ff","ff-Adlm","vai-Latn"],ls:["st","en","zu","ss","xh"],lt:["lt","ru","en","de","sgs"],lu:["fr","lb","de","en","pt"],lv:["lv","en","ru","ltg"],ly:["ar"],ma:["ary","ar","zgh","fr","en","tzm","shi","shi-Latn","rif","rif-Latn","es"],mc:["fr"],md:["ro","uk","bg","gag","ru"],me:["sr-Latn","sq","sr"],mf:["fr"],mg:["mg","fr","en"],mh:["en","mh"],mk:["mk","sq","tr"],ml:["bm","fr","ffm","snk","mwk","ses","tmh","bm-Nkoo","khq","dtm","kao","ar","bmq","bze"],mm:["my","shn","kac","mnw","kht"],mn:["mn","kk-Arab","zh","ru","ug-Cyrl"],mo:["zh-Hant","pt","zh","en"],mp:["en","ch"],mq:["fr"],mr:["ar","fr","ff","wo","ff-Adlm"],ms:["en"],mt:["mt","en","it","fr"],mu:["mfe","en","bho","ur","fr","ta"],mv:["dv"],mw:["en","ny","tum","tog","zu"],mx:["es","en","yua","nhe","nhw","maz","nch","sei"],my:["ms","en","zh-Hant","ta","iba","jv","zmi","dtp","ml","bug","bjn"],mz:["pt","vmw","ndc","ts","ngl","seh","mgh","rng","ny","yao","sw","zu"],na:["af","kj","ng","naq","hz","en","de","tn"],nc:["fr"],ne:["ha","fr","dje","fuq","tmh","ar","twq","ff","ff-Adlm"],nf:["en"],ng:["en","pcm","ha","ig","yo","fuv","tiv","efi","ibb","ha-Arab","bin","kaj","kcg","ar","cch","amo","ff","ff-Adlm"],ni:["es"],nl:["nl","en","de","fr","nds","li","fy","gos","id","zea","rif-Latn","tr"],no:["nb","nn","se"],np:["ne","mai","bho","new","jml","en","dty","awa","thl","bap","tdg","thr","lif","mgp","thq","mrd","bfy","xsr","rjs","taj","hi","gvr","bo","tkt","tdh","bn","unr-Deva","lep"],nr:["en","na"],nu:["en","niu"],nz:["en","mi"],om:["ar","bal","fa"],pa:["es","en","zh-Hant"],pe:["es","qu","ay"],pf:["fr","ty","zh-Hant"],pg:["tpi","en","ho"],ph:["en","fil","es","ceb","ilo","hil","bik","war","bhk","pam","pag","mdh","tsg","zh-Hant","cps","krj","bto","hnn","tbw","bku"],pk:["ur","pa-Arab","en","lah","ps","sd","skr","bal","brh","hno","fa","bgn","hnd","tg-Arab","gju","bft","kvx","khw","mvy","gjk","kxp","ks","btv"],pl:["pl","en","de","ru","szl","be","uk","csb","sli","lt"],pm:["fr","en"],pn:["en"],pr:["es","en"],ps:["ar"],pt:["pt","en","fr","es","gl"],pw:["pau","en"],py:["gn","es","de"],qa:["ar","fa","ml"],re:["fr","rcf","ta"],ro:["ro","en","fr","es","hu","de","tr","sr-Latn","bg","el","pl"],rs:["sr","sr-Latn","sq","hu","ro","hr","sk","uk"],ru:["ru","tt","ba","cv","hy","ce","av","udm","chm","os","sah","kbd","myv","dar","bua","mdf","kum","kv","lez","krc","inh","tyv","az-Cyrl","ady","krl","lbe","koi","mrj","alt","fi","sr-Latn","vep","mn","izh","cu","vot"],rw:["rw","en","fr"],sa:["ar","ars"],sb:["en","rug"],sc:["crs","fr","en"],sd:["ar","en","bej","fvr","ha-Arab","mls","fia","zag"],se:["sv","en","fi","fit","se","rmu","yi","smj","sma","ia"],sg:["en","zh","ms","ta","ml","pa"],sh:["en"],si:["sl","hr","en","de","hu","it"],sj:["nb","ru"],sk:["sk","cs","en","de","hu","uk","pl"],sl:["kri","en","men","tem","ff","ff-Adlm"],sm:["it","eo"],sn:["wo","fr","ff","srr","dyo","sav","mfv","bjt","snf","knf","bsc","mey","tnr","ff-Adlm"],so:["so","ar","sw","om"],sr:["nl","srn","zh-Hant"],ss:["ar","en","nus"],st:["pt"],sv:["es"],sx:["en","es","vic","nl"],sy:["ar","ku","fr","hy","syr"],sz:["en","ss","zu","ts"],ta:["en"],tc:["en"],td:["fr","ar"],tf:["fr"],tg:["fr","ee","ife"],th:["th","en","tts","nod","sou","mfa","zh-Hant","kxm","kdt","mnw","shn","lcp","lwl"],tj:["tg","ru","fa","ar"],tk:["en","tkl"],tl:["pt","tet"],tm:["tk","ru","uz","ku"],tn:["aeb","ar","fr"],to:["to","en"],tr:["tr","en","ku","zza","kbd","az","az-Arab","ar","bgx","bg","ady","kiu","hy","ka","lzz","sr-Latn","sq","ab","el","tru","uz","ky-Latn","kk"],tt:["en","es"],tv:["tvl","en"],tw:["zh-Hant","trv"],tz:["sw","en","suk","nym","kde","bez","ksb","mas","mgy","asa","lag","jmc","rof","vun","rwk","sbp"],ua:["uk","ru","pl","yi","rue","be","crh","ro","bg","tr","hu","el"],ug:["sw","lg","nyn","cgg","xog","en","teo","laj","ach","myx","rw","ttj","hi"],um:["en"],us:["en","es","zh-Hant","fr","de","fil","it","vi","ko","ru","nv","yi","pdc","haw","frc","chr","esu","dak","cho","lkt","ik","mus","cic","osa"],uy:["es"],uz:["uz","uz-Cyrl","ru","kaa","tr"],va:["it","la"],vc:["en"],ve:["es"],vg:["en"],vi:["en"],vn:["vi","zh-Hant","cjm"],vu:["bi","en","fr"],wf:["wls","fr","fud"],ws:["sm","en"],xk:["sq","aln","sr","sr-Latn"],ye:["ar","en"],yt:["swb","fr","buc","sw"],za:["en","zu","xh","af","nso","tn","st","ts","ss","ve","hi","nr","sw"],zm:["bem","en","ny","loz"],zw:["sn","en","nd","mxc","ndc","kck","ny","ve","tn"]};
26834
26835         var en = {icons:{download:"download",information:"info",remove:"remove",undo:"undo",zoom_to:"zoom to",copy:"copy",view_on:"view on {domain}",favorite:"favorite"},toolbar:{inspect:"Inspect",undo_redo:"Undo / Redo",recent:"Recent",favorites:"Favorites",add_feature:"Add Feature"},modes:{add_feature:{title:"Add a feature",description:"Search for features to add to the map.",key:"Tab",result:"{count} result",results:"{count} results"},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.",filter_tooltip:"areas"},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.",filter_tooltip:"lines"},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.",filter_tooltip:"points"},add_note:{title:"Note",label:"Add Note",description:"Spotted an issue? Let other mappers know.",tail:"Click on the map to add a note.",key:"N"},add_preset:{title:"Add {feature}",point:{title:"Add {feature} as a point"},line:{title:"Add {feature} as a line"},area:{title:"Add {feature} as an area"},building:{title:"Add {feature} as a building"}},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.",not_downloaded:"This can't be made circular because parts of it have not yet been downloaded.",already_circular:"This can't be made circular because it's already circular."},orthogonalize:{title:"Square",description:{corner:{single:"Square this corner.",multiple:"Square these corners."},feature:{single:"Square the corners of this feature.",multiple:"Square the corners of these features."}},key:"Q",annotation:{corner:{single:"Squared a corner.",multiple:"Squared several corners."},feature:{single:"Squared the corners of a feature.",multiple:"Squared the corners of several features."}},multiple_blockers:{multiple:"These can't be squared for multiple reasons."},end_vertex:{single:"This can't be squared because it is an endpoint.",multiple:"These can't be squared because they are endpoints."},square_enough:{single:"This can't be made more square than it already is.",multiple:"These can't be made more square than they already are."},not_squarish:{single:"This can't be made square because it is not squarish.",multiple:"These can't be made square because they are not squarish."},too_large:{single:"This can't be made square because not enough of it is currently visible.",multiple:"These can't be made square because not enough of them are currently visible."},connected_to_hidden:{single:"This can't be made square because it is connected to a hidden feature.",multiple:"These can't be made square because some are connected to hidden features."},not_downloaded:{single:"This can't be made square because parts of it have not yet been downloaded.",multiple:"These can't be made square because parts of them have not yet been downloaded."}},straighten:{title:"Straighten",description:{points:"Straighten these points.",line:"Straighten this line."},key:"S",annotation:{points:"Straightened several points.",line:"Straightened a line."},too_bendy:"This can't be straightened because it bends too much.",connected_to_hidden:"This can't be straightened because it is connected to a hidden feature.",not_downloaded:"This can't be straightened because parts of it have not yet been downloaded."},"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."},not_downloaded:{single:"This feature can't be deleted because parts of it have not yet been downloaded.",multiple:"These features can't be deleted because parts of them have not yet been downloaded."},has_wikidata_tag:{single:"This feature can't be deleted because it has a Wikidata tag.",multiple:"These features can't be deleted because some have Wikidata tags."}},downgrade:{title:"Downgrade",description:{building_address:"Remove all non-address and non-building tags.",building:"Remove all non-building tags.",address:"Remove all non-address tags."},annotation:{building:{single:"Downgraded a feature to a basic building.",multiple:"Downgraded {n} features to basic buildings."},address:{single:"Downgraded a feature to an address.",multiple:"Downgraded {n} features to addresses."},multiple:"Downgraded {n} features."},has_wikidata_tag:{single:"This feature can't be downgraded because it has a Wikidata tag.",multiple:"These features can't be downgraded because some have Wikidata tags."}},add_member:{annotation:"Added a member to a relation."},delete_member:{annotation:"Removed a member from a relation."},reorder_members:{annotation:"Reordered a relation's members."},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.",line:{description:"Disconnect this line from other features."},area:{description:"Disconnect this area from other features."},key:"D",annotation:"Disconnected lines/areas.",too_large:{single:"This can't be disconnected because not enough of it is currently visible."},not_connected:"There aren't enough lines/areas here to disconnect.",not_downloaded:"This can't be disconnected because parts of it have not yet been downloaded.",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."},not_downloaded:{single:"This feature can't be moved because parts of it have not yet been downloaded.",multiple:"These features can't be moved because parts of them have not yet been downloaded."}},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."},not_downloaded:{single:"This feature can't be reflected because parts of it have not yet been downloaded.",multiple:"These features can't be reflected because parts of them have not yet been downloaded."}},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."},not_downloaded:{single:"This feature can't be rotated because parts of it have not yet been downloaded.",multiple:"These features can't be rotated because parts of them have not yet been downloaded."}},reverse:{title:"Reverse",description:{point:"Flip the direction of this point.",points:"Flip the direction of these points.",line:"Make this line go in the opposite direction.",lines:"Make these lines go in the opposite direction.",features:"Flip the directions of these features."},key:"V",annotation:{point:"Reversed a point.",points:"Reversed multiple points.",line:"Reversed a line.",lines:"Reversed multiple lines.",features:"Reversed multiple features."}},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"}},extract:{title:"Extract",key:"E",description:{vertex:{single:"Extract this point from its parent lines/areas."},area:{single:"Extract a point from this area."}},annotation:{single:"Extracted a point."},too_large:{area:{single:"A point can't be extracted from this area because not enough of it is currently visible."}},restriction:{vertex:{single:"This point can't be extracted because it would damage a \"{relation}\" relation."}},connected_to_hidden:{vertex:{single:"This point can't be extracted 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",language_and_code:"{language} ({code})"},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}"},osm_api_status:{message:{error:"Unable to reach the OpenStreetMap API. Your edits are safe locally. Check your network connection.",offline:"The OpenStreetMap API is offline. Your edits are safe locally. Please come back later.",readonly:"The OpenStreetMap API is currently read-only. You can continue editing, but must wait to save your changes.",rateLimit:"The OpenStreetMap API is limiting anonymous connections. You can fix this by logging in."},retry:"Retry"},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_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",add_to_relation:"Add to a relation",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_problem_faq:"Report an Imagery Problem",reset:"reset",reset_all:"Reset All",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:"/"},panel:{description:"Show Detail Panel",tooltip:"Show advanced background information."},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"}},style_options:"Style Options",highlight_edits:{key:"G"},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."},visual_diff:{highlight_edits:{description:"Highlight Changes",tooltip:"Outline edited features"}},photo_overlays:{title:"Photo Overlays",traffic_signs:{title:"Traffic Signs"},photo_type:{flat:{title:"Flat Photos",tooltip:"Traditional photos"},panoramic:{title:"Panoramic Photos",tooltip:"360° photos"}}},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."},building_parts:{description:"Building Parts",tooltip:"3D Building and Roof Components"},indoor:{description:"Indoor Features",tooltip:"Rooms, Corridors, Stairwells, 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"},pistes:{description:"Pistes",tooltip:"Ski Slopes, Sled Runs, Ice Skating Trails, etc."},aerialways:{description:"Aerial Features",tooltip:"Chair Lifts, Gondolas, Zip Lines, etc."},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"}}},preferences:{title:"Preferences",description:"Preferences",key:"P",privacy:{title:"Privacy",privacy_link:"View the iD privacy policy",third_party_icons:{description:"Show Third Party Icons",tooltip:"Uncheck this box to avoid loading icons from third party sites such as Wikimedia Commons, Facebook, or Twitter."}}},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}.",thank_you_where:{format:"{place}{separator}{region}",separator:", "},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}.",privacy_update:"Our privacy policy has recently been updated.",privacy_policy:"iD privacy policy",privacy:"{updateMessage} By using this software, you agree to do so in accordance with the {privacyLink}.",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:"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"},mapillary_map_features:{title:"Map Features",tooltip:"Map features from Mapillary",request_data:"Request Data",construction:{flat:{crosswalk_plain:"plain crosswalk"}},marking:{discrete:{crosswalk_zebra:"zebra crosswalk"}},object:{banner:"banner",bench:"bench",bike_rack:"bike rack",billboard:"billboard",catch_basin:"catch basin",cctv_camera:"CCTV camera",fire_hydrant:"fire hydrant",mailbox:"mailbox",manhole:"manhole",phone_booth:"phone booth",sign:{advertisement:"advertisement",information:"information sign",store:"shop sign"},street_light:"street light",support:{utility_pole:"utility pole"},traffic_cone:"traffic cone",traffic_light:{cyclists:"cyclist traffic light",general_horizontal:"horizontal traffic light",general_single:"single traffic light",general_upright:"vertical traffic light",other:"traffic light",pedestrians:"pedestrian traffic light"},trash_can:"trash can"}},mapillary:{title:"Mapillary",signs:{tooltip:"Traffic signs from Mapillary"},view_on_mapillary:"View this image on Mapillary"},openstreetcam_images:{tooltip:"Street-level photos from OpenStreetCam"},openstreetcam:{title:"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})"},rules:{title:"Rules"},user_resolved_issues:"Issues resolved by your edits",warnings_and_errors:"Warnings and errors",no_issues:{message:{everything:"Everything looks fine",everything_in_view:"Everything in view looks fine",edits:"Your edits look fine",edits_in_view:"Your edits in view look fine",no_edits:"You have no edits yet"},hidden_issues:{none:"Detected issues will appear here",elsewhere:"Issues elsewhere: {count}",everything_else:"Issues with everything else: {count}",everything_else_elsewhere:"Issues elsewhere with everything else: {count}",disabled_rules:"Issues with disabled rules: {count}",disabled_rules_elsewhere:"Issues elsewhere with disabled rules: {count}",ignored_issues:"Ignored issues: {count}",ignored_issues_elsewhere:"Ignored issues elsewhere: {count}"}},options:{what:{title:"Check:",edited:"My Edits",all:"Everything"},where:{title:"Where:",visible:"In View",all:"Everywhere"}},suggested:"Suggested updates:",enable_all:"Enable All",disable_all:"Disable All",reset_ignored:"Reset Ignored ({count})",fix_one:{title:"fix"},fix_all:{title:"Fix All",annotation:"Fixed several validation issues."},almost_junction:{title:"Almost Junctions",message:"{feature} is very close but not connected to {feature2}",tip:"Find features that should possibly be connected to other nearby features",self:{message:"{feature} ends very close to itself but does not reconnect"},"highway-highway":{reference:"Intersecting highways should share a junction vertex."}},close_nodes:{title:"Very Close Points",tip:"Find redundant and crowded points",message:"Two points in {way} are very close together",reference:"Redundant points in a way should be merged or moved apart.",detached:{message:"{feature} is too close to {feature2}",reference:"Separate points should not share a location."}},crossing_ways:{title:"Crossings Ways",message:"{feature} crosses {feature2}",tip:"Find features that incorrectly cross over one another","building-building":{reference:"Buildings should not intersect except on different layers."},"building-highway":{reference:"Highways crossing buildings should use bridges, tunnels, or different layers."},"building-railway":{reference:"Railways crossing buildings should use bridges, tunnels, or different layers."},"building-waterway":{reference:"Waterways crossing buildings should use tunnels or different layers."},"highway-highway":{reference:"Crossing highways should use bridges, tunnels, or intersections."},"highway-railway":{reference:"Highways crossing railways should use bridges, tunnels, or level crossings."},"highway-waterway":{reference:"Highways crossing waterways should use bridges, tunnels, or fords."},"railway-railway":{reference:"Crossing railways should be connected or use bridges or tunnels."},"railway-waterway":{reference:"Railways crossing waterways should use bridges or tunnels."},"waterway-waterway":{reference:"Crossing waterways should be connected or use tunnels."},"tunnel-tunnel":{reference:"Crossing tunnels should use different layers."},"tunnel-tunnel_connectable":{reference:"Crossing tunnels should be connected or use different layers."},"bridge-bridge":{reference:"Crossing bridges should use different layers."},"bridge-bridge_connectable":{reference:"Crossing bridges should be connected or use different layers."},"indoor-indoor":{reference:"Crossing indoor features should use different levels."},"indoor-indoor_connectable":{reference:"Crossing indoor features should be connected or use different levels."}},disconnected_way:{title:"Disconnected Ways",tip:"Find unroutable roads, paths, and ferry routes",routable:{message:{multiple:"{count} routable features are connected only to each other."},reference:"All roads, paths, and ferry routes should connect to form a single routing network."},highway:{message:"{highway} is disconnected from other roads and paths"}},fixme_tag:{message:"{feature} has a \"Fix Me\" request",reference:"A \"fixme\" tag indicates that a mapper has requested help with a feature."},generic_name:{message:"{feature} has the suspicious name \"{name}\"",message_language:"{feature} has the suspicious name \"{name}\" in {language}",reference:"Names should be the actual, on-the-ground names of features."},help_request:{title:"Help Requests",tip:"Find features where others requested assistance"},incompatible_source:{title:"Suspicious Sources",tip:"Find features with suspicious source tags",google:{feature:{message:"{feature} lists Google as a data source"},reference:"Google products are proprietary and must not be used as references."}},incorrect_name:{message:"{feature} has the mistaken name \"{name}\"",message_language:"{feature} has the mistaken name \"{name}\" in {language}"},invalid_format:{title:"Invalid Formatting",tip:"Find tags with unexpected formats",email:{message:"{feature} has an invalid email address",message_multi:"{feature} has multiple invalid email addresses",reference:"Email addresses must look like \"user@example.com\"."}},mismatched_geometry:{title:"Mismatched Geometry",tip:"Find features with conflicting tags and geometry"},missing_role:{title:"Missing Roles",message:"{member} has no role within {relation}",tip:"Find relations with missing or incorrect member roles",multipolygon:{reference:"Multipolygon members must have an inner or outer role."}},missing_tag:{title:"Missing Tags",tip:"Find features that are missing descriptive tags",reference:"Features must have tags that define what they are.",any:{message:"{feature} has no tags"},descriptive:{message:"{feature} has no descriptive tags"},relation_type:{message:"{feature} is a relation without a type"}},old_multipolygon:{message:"{multipolygon} has misplaced tags",reference:"Multipolygons should be tagged on their relation, not their outer way."},outdated_tags:{title:"Outdated Tags",message:"{feature} has outdated tags",tip:"Find features with deprecated tags that can be updated",reference:"Some tags change over time and should be updated.",incomplete:{message:"{feature} has incomplete tags",reference:"Some features should have additional tags."},noncanonical_brand:{message:"{feature} looks like a brand with nonstandard tags",message_incomplete:"{feature} looks like a brand with incomplete tags",reference:"All features of the same brand should be tagged the same way."}},point_as_vertex:{message:"{feature} should be a standalone point based on its tags",reference:"Some features shouldn't be part of lines or areas."},private_data:{title:"Private Information",tip:"Find features that may contain private information",reference:"Sensitive data like personal phone numbers should not be tagged.",contact:{message:"{feature} might be tagged with private contact information"}},suspicious_name:{title:"Suspicious Names",tip:"Find features with generic or suspicious names"},tag_suggests_area:{message:"{feature} should be a closed area based on the tag \"{tag}\"",reference:"Areas must have connected endpoints."},unknown_road:{message:"{feature} has no classification",reference:"Roads without a specific type may not appear in maps or routing."},impossible_oneway:{title:"Impossible One-Ways",tip:"Find route issues with one-way features",waterway:{connected:{start:{message:"{feature} flows away from a connected waterway"},end:{message:"{feature} flows against a connected waterway"},reference:"Waterway segments should all flow in the same direction."}},highway:{start:{message:"{feature} is unreachable",reference:"One-way roads must be accessible via other roads."},end:{message:"{feature} has no outlet",reference:"One-way roads must lead to other roads."}}},unclosed_multipolygon_part:{message:"{feature} has an unclosed part",reference:"All inner and outer parts of multipolygons should have connected endpoints."},unsquare_way:{title:"Unsquare Corners (up to {val}°)",message:"{feature} has unsquare corners",tip:"Find features with unsquare corners that can be drawn better",buildings:{reference:"Buildings with unsquare corners can often be drawn more accurately."}},vertex_as_point:{message:"{feature} should be part of a line or area based on its tags",reference:"Some features shouldn't be standalone points."},fix:{add_a_bridge:{title:"Add a bridge",annotation:"Added a bridge."},add_a_tunnel:{title:"Add a tunnel",annotation:"Added a tunnel."},address_the_concern:{title:"Address the concern"},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_feature:{title:"Connect this feature"},connect_features:{title:"Connect the features"},connect_using_ford:{title:"Connect using a ford"},continue_from_start:{title:"Continue drawing from start"},continue_from_end:{title:"Continue drawing from end"},delete_feature:{title:"Delete this feature"},extract_point:{title:"Extract this point"},ignore_issue:{title:"Ignore this issue"},merge_close_vertices:{annotation:"Merged very close points in a way."},merge_points:{title:"Merge these points"},move_points_apart:{title:"Move these points apart"},move_tags:{title:"Move the tags",annotation:"Moved tags."},remove_from_relation:{title:"Remove from relation"},remove_generic_name:{annotation:"Removed a generic name."},remove_mistaken_name:{annotation:"Removed a mistaken name."},remove_private_info:{annotation:"Removed private information."},remove_proprietary_data:{title:"Remove any proprietary data"},remove_tag:{title:"Remove the tag",annotation:"Removed tag."},remove_tags:{title:"Remove the tags"},remove_the_name:{title:"Remove the name"},reposition_features:{title:"Reposition the features"},reverse_feature:{title:"Reverse this feature"},select_preset:{title:"Select a feature type"},select_road_type:{title:"Select a road type"},set_as_inner:{title:"Set as inner"},set_as_outer:{title:"Set as outer"},square_feature:{title:"Square this feature"},tag_as_disconnected:{title:"Tag as disconnected",annotation:"Tagged very close features as disconnected."},tag_as_unsquare:{title:"Tag as physically unsquare",annotation:"Tagged a way as having unsquare corners."},tag_this_as_higher:{title:"Tag this as higher"},tag_this_as_lower:{title:"Tag this as lower"},upgrade_tags:{title:"Upgrade the tags",annotation:"Upgraded old tags."},use_different_layers:{title:"Use different layers"},use_different_layers_or_levels:{title:"Use different layers or levels"},use_different_levels:{title:"Use different levels"}}},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:"Toggle background imagery pane",background_switch:"Switch back to last background",map_data:"Toggle map data pane",issues:"Toggle validation issues pane",preferences:"Toggle user preferences pane",fullscreen:"Enter full screen mode",sidebar:"Toggle sidebar",wireframe:"Toggle wireframe mode",osm_data:"Toggle OpenStreetMap data",minimap:"Toggle minimap",highlight_edits:"Highlight unsaved edits"},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 features selected",edit_menu:"Toggle edit menu",zoom_to:"Zoom to selected features"},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",extract:"Extract a point from a feature",split:"Split a line into two at the selected node",reverse:"Reverse selected features",move:"Move selected features",rotate:"Rotate selected features",orthogonalize:"Square corners of a line or area",straighten:"Straighten a line or points",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":{name:"Natural Features"},"category-path":{name:"Paths"},"category-rail":{name:"Rails"},"category-restriction":{name:"Restriction Features"},"category-road_major":{name:"Major Roads"},"category-road_minor":{name:"Minor Roads"},"category-road_service":{name:"Service Roads"},"category-route":{name:"Route Features"},"category-utility":{name:"Utility Features"},"category-water":{name:"Water Bodies"},"category-waterway":{name:"Waterways"}},fields:{access_aisle:{label:"Type"},access_simple:{label:"Allowed Access",terms:"permitted,private,public"},access:{label:"Allowed Access",terms:"",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"}}},"addr/interpolation":{label:"Type",options:{all:"All",even:"Even",odd:"Odd",alphabetic:"Alphabetic"}},address:{label:"Address",terms:"location",placeholders:{block_number:"Block Number","block_number!jp":"Block No.",city:"City","city!cn":"City/Prefecture/League","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town",conscriptionnumber:"123",country:"Country",county:"County","county!jp":"District",district:"District","district!cn":"District/County/Banner","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!cn":"Province/Municipality/AR/SAR","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"},air_conditioning:{label:"Air Conditioning",terms:"cooling system,refrigeration"},amenity:{label:"Type"},animal_boarding:{label:"For Animals"},animal_breeding:{label:"For Animals"},animal_shelter:{label:"For Animals"},architect:{label:"Architect",terms:"building designer"},"area/highway":{label:"Type"},artist:{label:"Artist"},artwork_type:{label:"Type"},atm:{label:"ATM"},attraction:{label:"Type"},baby_feeding:{label:"Baby Nursing Area",terms:"baby feeding,breastfeeding,lactation,mothers,nursing",options:{room:"Dedicated Room",yes:"Marked Space",no:"None"}},baby_seat:{label:"Baby Seat"},backcountry:{label:"Backcountry",terms:""},backrest:{label:"Backrest"},bar:{label:"Bar",terms:""},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",terms:"seating"},bicycle_parking:{label:"Type"},bin:{label:"Waste Bin",terms:"garbage can,trash can"},blind:{label:"Blind Person Access",terms:"sight impairment,vision impairment",options:{yes:"Yes",limited:"Limited",no:"No"}},blood_components:{label:"Blood Components",options:{whole:"whole blood",plasma:"plasma",platelets:"platelets",stemcells:"stem cell samples"}},board_type:{label:"Type"},bollard:{label:"Type"},booth:{label:"Booth"},bottle:{label:"Bottle Filling"},boules:{label:"Type"},boundary:{label:"Type"},brand:{label:"Brand",terms:""},brewery:{label:"Draft Beers",terms:"on tap"},bridge:{label:"Type",placeholder:"Default"},"bridge/support":{label:"Type"},building_area:{label:"Building",terms:""},building:{label:"Building",terms:"structure"},"building/levels_building":{label:"Building Levels",terms:"",placeholder:"2, 4, 6..."},"building/levels":{label:"Levels",terms:"",placeholder:"2, 4, 6..."},"building/levels/underground":{label:"Underground Levels",terms:"basement levels",placeholder:"2, 4, 6..."},"building/material":{label:"Material",terms:""},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",terms:"",placeholder:"50, 100, 200..."},cash_in:{label:"Cash In"},castle_type:{label:"Type"},changing_table:{label:"Diaper Changing Table"},charge_fee:{label:"Fee Amount",terms:"",placeholder:"1 EUR, 5 USD, 10 JPY…"},charge_toll:{label:"Toll Amount",terms:"",placeholder:"1 EUR, 5 USD, 10 JPY…"},check_date:{label:"Last Checked Date"},clothes:{label:"Clothes"},club:{label:"Type"},collection_times:{label:"Collection Times"},colour:{label:"Color",terms:""},comment:{label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},communication_multi:{label:"Communication Types",terms:""},connectivity:{label:"Connectivity"},construction:{label:"Type"},consulate:{label:"Type"},consulting:{label:"Expertise"},"contact/webcam":{label:"Webcam URL",placeholder:"http://example.com/"},content:{label:"Content"},conveying_escalator:{label:"Escalator"},conveying:{label:"Movement Direction",options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}},country_flag:{label:"Flag Country"},country:{label:"Country"},couplings:{label:"Couplings",placeholder:"1, 2, 3..."},covered:{label:"Covered",terms:""},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"},"crossing/island":{label:"Refuge Island"},cuisine:{label:"Cuisines",terms:"fare,food types"},currency_multi:{label:"Currency Types",terms:"bills,cash,coins,money"},cutting:{label:"Type",placeholder:"Default"},cycle_network:{label:"Network"},cycleway:{label:"Bike Lanes",terms:"",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",terms:""},denomination:{label:"Denomination",terms:""},denotation:{label:"Denotation"},departures_board:{label:"Departures Board",options:{yes:"Yes",timetable:"Timetable",realtime:"Realtime",no:"None"}},description:{label:"Description",terms:"summary"},design:{label:"Design"},destination_oneway:{label:"Destinations"},"destination/ref_oneway":{label:"Destination Road Numbers"},"destination/symbol_oneway":{label:"Destination Symbols",terms:""},devices:{label:"Devices",placeholder:"1, 2, 3..."},diameter:{label:"Diameter",placeholder:"5 mm, 10 cm, 15 in…"},diet_multi:{label:"Diet Types",terms:"gluten free,fruitarian,halal,kosher,lactose free,meat,pescatarian,raw,vegan,vegetarian"},diplomatic:{label:"Type"},"diplomatic/services":{label:"Services"},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 Affected",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"},"disused/railway":{label:"Type"},dock:{label:"Type"},dog:{label:"Dogs",terms:"animals,pets",options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}},door_type:{label:"Type"},door:{label:"Door"},drink_multi:{label:"Drinks"},drinking_water:{label:"Drinkable",terms:"drinkworthy,potable"},drive_through:{label:"Drive-Through",terms:""},duration:{label:"Duration",terms:"",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",terms:"altitude"},email:{label:"Email",terms:"",placeholder:"example@example.com"},embankment:{label:"Type",placeholder:"Default"},embassy:{label:"Type"},emergency_combo:{label:"Type"},emergency:{label:"Emergency"},enforcement:{label:"Type"},entrance:{label:"Type"},except:{label:"Exceptions"},expected_rcn_route_relations:{label:"Adjacent Cycling Nodes"},expected_rwn_route_relations:{label:"Adjacent Walking Nodes"},faces:{label:"Faces"},fax:{label:"Fax",terms:"",placeholder:"+31 42 123 4567"},fee:{label:"Fee",terms:""},fence_type:{label:"Type"},"fire_hydrant/diameter":{label:"Diameter (mm, in, or letters)",terms:""},"fire_hydrant/pressure":{label:"Pressure (bar)",terms:""},"fire_hydrant/type":{label:"Shape",options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}},fireplace:{label:"Fireplace"},fishing:{label:"Fishing",terms:""},fitness_station:{label:"Equipment Type"},fixme:{label:"Fix Me",terms:"help request"},"flag/type":{label:"Flag Type"},floating:{label:"Floating"},flood_prone:{label:"Flood Prone",terms:""},ford:{label:"Type",placeholder:"Default"},fountain:{label:"Type"},frequency_electrified:{label:"Operating Frequency",terms:""},frequency:{label:"Operating Frequency",terms:""},from:{label:"From"},fuel_multi:{label:"Fuel Types"},fuel:{label:"Fuel"},gambling:{label:"Games"},gauge:{label:"Gauge"},gender:{label:"Gender",terms:"access,female,male,unisex",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"},"geyser/height":{label:"Eruption Height"},"gnis/feature_id":{label:"GNIS Feature ID",terms:"Federal Geographic Names Information Service,United States Board on Geographic Names,USA"},government:{label:"Type"},grape_variety:{label:"Grape Varieties"},group_only:{label:"Groups Only",terms:""},guest_house:{label:"Type"},handicap:{label:"Handicap",placeholder:"1-18"},handrail:{label:"Handrail",terms:""},hashtags:{label:"Hashtags",placeholder:"#example"},healthcare:{label:"Type"},"healthcare/speciality":{label:"Specialties"},height_building:{label:"Building Height (Meters)",terms:""},height:{label:"Height (Meters)",terms:""},highspeed:{label:"High-Speed",terms:""},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",terms:"",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"}},hot_water:{label:"Hot Water"},iata:{label:"IATA Airport Code"},icao:{label:"ICAO Airport Code"},incline_steps:{label:"Incline",options:{up:"Up",down:"Down"}},incline:{label:"Incline",terms:""},indoor_type:{label:"Type"},indoor:{label:"Indoor",terms:""},industrial:{label:"Type"},informal:{label:"Informal",terms:""},information:{label:"Type"},inscription:{label:"Inscription",terms:""},intermittent_yes:{label:"Intermittent"},intermittent:{label:"Intermittent",terms:""},internet_access:{label:"Internet Access",terms:"wifi,wlan",options:{yes:"Yes",no:"No",wlan:"Wifi",wired:"Wired",terminal:"Terminal"}},"internet_access/fee":{label:"Internet Access Fee",terms:"wifi fee"},"internet_access/ssid":{label:"Wifi Network Name",terms:"ssid"},interval:{label:"Interval",terms:""},junction_line:{label:"Junction",terms:"",options:{roundabout:"Roundabout",circular:"Traffic Circle",jughandle:"Jughandle"}},"junction/ref_oneway":{label:"Junction Number",terms:""},kerb:{label:"Curb"},"kerb/height":{label:"Height"},label:{label:"Label"},lamp_type:{label:"Type"},landuse:{label:"Type"},lanes:{label:"Lanes",terms:"",placeholder:"1, 2, 3..."},language_multi:{label:"Languages"},layer:{label:"Layer",terms:"",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_semi:{label:"Levels",terms:"building floors,decks,stories,storeys,storys"},level:{label:"Level",terms:"building floor,deck,storey,story"},liaison:{label:"Type"},line_attachment:{label:"Line Attachment"},lit:{label:"Lit",terms:"lamp,lighting"},location_pool:{label:"Location",options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}},location:{label:"Location",terms:""},lock:{label:"Lock"},lockable:{label:"Lockable",terms:""},man_made:{label:"Type"},manhole:{label:"Type"},manufacturer:{label:"Manufacturer",terms:""},map_size:{label:"Coverage"},map_type:{label:"Type"},mapillary:{label:"Mapillary Image ID",terms:""},marker:{label:"Type"},material:{label:"Material",terms:""},max_age:{label:"Maximum Age",terms:"upper age limit"},maxheight:{label:"Max Height",terms:"",placeholder:"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},maxspeed:{label:"Speed Limit",terms:"",placeholder:"40, 50, 60..."},"maxspeed/advisory":{label:"Advisory Speed Limit",terms:"",placeholder:"40, 50, 60..."},maxstay:{label:"Max Stay",terms:""},maxweight_bridge:{label:"Max Weight",terms:""},maxweight:{label:"Max Weight",terms:""},memorial:{label:"Type"},microbrewery:{label:"Microbrewery",terms:"brewpub,craft beer"},min_age:{label:"Minimum Age",terms:"lower age limit"},minspeed:{label:"Minimum Speed Limit",terms:"",placeholder:"20, 30, 40..."},monitoring_multi:{label:"Monitoring"},"mtb/scale":{label:"Mountain Biking Difficulty",terms:"",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",terms:"",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",terms:"",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"}},museum:{label:"Type"},name:{label:"Name",terms:"label,title",placeholder:"Common name (if any)"},natural:{label:"Natural"},network_bicycle:{label:"Network Class",placeholder:"Local, Regional, National, International",options:{lcn:"Local",rcn:"Regional",ncn:"National",icn:"International"}},network_foot:{label:"Network Class",placeholder:"Local, Regional, National, International",options:{lwn:"Local",rwn:"Regional",nwn:"National",iwn:"International"}},network_horse:{label:"Network Class",placeholder:"Local, Regional, National, International",options:{lhn:"Local",rhn:"Regional",nhn:"National",ihn:"International"}},network_road:{label:"Network"},network:{label:"Network",terms:""},"network/type":{label:"Network Type",terms:""},"not/name":{label:"Incorrect Names",terms:"common mistake names,wrong names"},note:{label:"Note",terms:"comment"},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)",terms:""},openfire:{label:"Open Fires Allowed",terms:""},opening_date:{label:"Expected Opening Date"},opening_hours:{label:"Hours",terms:"",placeholder:"Unknown"},operator:{label:"Operator",terms:""},"operator/type":{label:"Operator Type"},outdoor_seating:{label:"Outdoor Seating",terms:""},par:{label:"Par",placeholder:"3, 4, 5..."},park_ride:{label:"Park and Ride",terms:""},parking:{label:"Type",options:{surface:"Surface","multi-storey":"Multilevel",underground:"Underground",sheds:"Sheds",carports:"Carports",garage_boxes:"Garage Boxes",lane:"Roadside Lane"}},payment_multi_fee:{label:"Payment Types",terms:""},payment_multi:{label:"Payment Types",terms:""},phases:{label:"Phases",placeholder:"1, 2, 3..."},phone:{label:"Telephone",terms:"phone number",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/method":{label:"Generation Method"},"plant/output/electricity":{label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},"plant/source":{label:"Energy Source"},playground:{label:"Type"},"playground/theme":{label:"Theme"},polling_station:{label:"Polling Place",terms:"voting place"},population:{label:"Population"},post:{label:"Delivery Address"},power_supply:{label:"Power Supply",terms:""},power:{label:"Type"},preschool:{label:"Preschool"},produce:{label:"Produce"},product:{label:"Products",terms:""},"public_bookcase/type":{label:"Type"},pump:{label:"Pump",options:{yes:"Yes",manual:"Manual Hand Pump",powered:"Machine-Powered Pump",no:"None"}},railway:{label:"Type"},"railway/position":{label:"Milestone Position",placeholder:"Distance to one decimal (123.4)"},"railway/signal/direction":{label:"Direction Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},rating:{label:"Power Rating"},rcn_ref:{label:"Cycling Code"},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",terms:""},ref_room_number:{label:"Room Number"},ref_route:{label:"Route Number",terms:""},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",terms:""},"ref/isil":{label:"ISIL Code"},"ref/vatin":{label:"VAT ID Number",terms:"value added tax identification number,vatin"},relation:{label:"Type"},religion:{label:"Religion",terms:""},reservation:{label:"Reservations",terms:"",options:{yes:"Accepted",no:"Not Accepted",required:"Required",recommended:"Recommended"}},residential:{label:"Type"},resort:{label:"Type"},resource:{label:"Resources"},restriction:{label:"Type"},restrictions:{label:"Turn Restrictions"},"roof/colour":{label:"Roof Color",terms:""},room:{label:"Type"},rooms:{label:"Rooms"},route_master:{label:"Type"},route:{label:"Type"},rwn_ref:{label:"Walking Code"},sac_scale:{label:"Hiking Difficulty",terms:"",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",terms:"saline,salinated"},sanitary_dump_station:{label:"Toilet Disposal",terms:""},screen:{label:"Screens",placeholder:"1, 4, 8…"},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",terms:"marine"},"seamark/wreck/category":{label:"Category"},seasonal:{label:"Seasonal"},seats:{label:"Seats",placeholder:"2, 4, 6..."},second_hand:{label:"Sells Used",terms:"",placeholder:"Yes, No, Only",options:{yes:"Yes",no:"No",only:"Only"}},segregated:{label:"Bicycle-Pedestrian Separation"},self_service:{label:"Self-Service"},service_rail:{label:"Service Type",terms:"",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"},shower:{label:"Showers",terms:""},"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",terms:"",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",terms:"",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"}},sms:{label:"SMS",terms:""},social_facility_for:{label:"People Served"},social_facility:{label:"Type"},source:{label:"Sources",terms:"reference"},"species/wikidata":{label:"Species Wikidata",terms:""},sport_ice:{label:"Sports"},sport_racing_motor:{label:"Sports"},sport_racing_nonmotor:{label:"Sports"},sport:{label:"Sports"},stars:{label:"Stars",terms:"rating"},start_date:{label:"Start Date",terms:"inception"},step_count:{label:"Number of Steps",terms:""},stile:{label:"Type"},stop:{label:"Stop Type",options:{all:"All Ways",minor:"Minor Road"}},street_cabinet:{label:"Type"},stroller:{label:"Stroller Access",terms:"baby carriage,perambulator,pram,pushchair",options:{yes:"Yes",limited:"Limited",no:"No"}},structure_waterway:{label:"Structure",placeholder:"Unknown",options:{tunnel:"Tunnel"}},structure:{label:"Structure",terms:"",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",terms:"guarded,manned"},support:{label:"Support"},surface:{label:"Surface",terms:""},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",terms:""},swimming_pool:{label:"Type"},"switch":{label:"Type",options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}},tactile_paving:{label:"Tactile Paving",terms:""},takeaway:{label:"Takeaway",terms:"take out,takeout",placeholder:"Yes, No, Takeaway Only...",options:{yes:"Yes",no:"No",only:"Takeaway Only"}},target:{label:"Target"},tidal:{label:"Tidal",terms:""},to:{label:"To"},toilets:{label:"Toilets",terms:""},"toilets/disposal":{label:"Disposal",options:{flush:"Flush",pitlatrine:"Pit Latrine",chemical:"Chemical",bucket:"Bucket"}},"toilets/handwashing":{label:"Handwashing",terms:""},"toilets/position":{label:"Positions",terms:""},toll:{label:"Toll",terms:""},tomb:{label:"Type"},tourism:{label:"Type"},"tower/construction":{label:"Construction",placeholder:"Guyed, Lattice, Concealed, ..."},"tower/type":{label:"Type"},"townhall/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 Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},traffic_signals:{label:"Type"},"traffic_signals/direction":{label:"Direction Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},trail_visibility:{label:"Trail Visibility",terms:"",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"},trench:{label:"Type"},trolley_wire:{label:"Overhead Trolley Wires",terms:""},tunnel:{label:"Type",placeholder:"Default"},usage_rail:{label:"Usage Type",terms:"",options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}},utility_semi:{label:"Utilities"},utility:{label:"Utility"},valve:{label:"Type"},vending:{label:"Types of Goods"},video_calls:{label:"Video Calls",terms:""},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",terms:""},voltage:{label:"Voltage"},"voltage/primary":{label:"Primary Voltage",terms:""},"voltage/secondary":{label:"Secondary Voltage",terms:""},"voltage/tertiary":{label:"Tertiary Voltage",terms:""},wall:{label:"Type"},waste:{label:"Waste"},water_point:{label:"Water Point"},water_source:{label:"Water Source"},water_volume:{label:"Water Reserve Volume (m³)",terms:""},water:{label:"Type"},waterway:{label:"Type"},website:{label:"Website",terms:"internet presence,uri,url,webpage",placeholder:"https://example.com"},wetland:{label:"Type"},wheelchair:{label:"Wheelchair Access",terms:"handicap access",options:{yes:"Yes",limited:"Limited",no:"No"}},wholesale:{label:"Wholesale"},width:{label:"Width (Meters)",terms:""},wikidata:{label:"Wikidata",terms:""},wikimedia_commons:{label:"Wikimedia Commons Page",terms:"",placeholder:"File:Example.jpg"},wikipedia:{label:"Wikipedia",terms:""},windings:{label:"Windings",terms:"",placeholder:"1, 2, 3..."},"windings/configuration":{label:"Windings Configuration",terms:"",options:{star:"Star / Wye",delta:"Delta","open-delta":"Open Delta",zigzag:"Zig Zag",open:"Open",scott:"Scott",leblanc:"Leblanc"}}},presets:{aerialway:{name:"Aerialway"},aeroway:{name:"Aeroway"},amenity:{name:"Amenity"},attraction:{name:"Attraction"},boundary:{name:"Boundary"},building_point:{name:"Building"},embankment:{name:"Embankment"},emergency:{name:"Emergency Feature"},ford_line:{name:"Ford"},highway:{name:"Highway Feature"},indoor:{name:"Indoor Feature"},landuse:{name:"Land Use Feature"},leisure:{name:"Leisure Feature"},man_made:{name:"Man Made Feature"},natural:{name:"Natural Feature"},place:{name:"Place"},playground:{name:"Playground Equipment"},power:{name:"Power Feature"},railway:{name:"Railway Feature"},seamark:{name:"Seamark"},tourism:{name:"Tourism Feature"},waterway:{name:"Waterway Feature"},"addr/interpolation":{name:"Address Interpolation"},address:{name:"Address",terms:""},"advertising/billboard":{name:"Billboard",terms:""},"advertising/board":{name:"Notice Board",terms:""},"advertising/column":{name:"Advertising Column",terms:""},"advertising/poster_box":{name:"Poster Box",terms:""},"advertising/totem":{name:"Advertising Totem",terms:""},"aerialway/cable_car":{name:"Cable Car",terms:"aerial cable,lift,ropeway,skiing,snowboarding,tramway"},"aerialway/chair_lift":{name:"Chair Lift",terms:"aerial cable,skiing,snowboarding"},"aerialway/drag_lift":{name:"Drag Lift",terms:"skiing,snowboarding,surface cable"},"aerialway/gondola":{name:"Gondola",terms:"aerial cable,lift,skiing,snowboarding"},"aerialway/goods":{name:"Goods Aerialway",terms:"aerial cable"},"aerialway/j-bar":{name:"J-Bar Lift",terms:"drag lift,skiing,snowboarding,surface cable,jaybar,jbar"},"aerialway/magic_carpet":{name:"Magic Carpet Lift",terms:"conveyor belt,skiing,snowboarding,surface lift"},"aerialway/mixed_lift":{name:"Mixed Lift",terms:"aerial cable,skiing,snowboarding"},"aerialway/platter":{name:"Platter Lift",terms:"button lift,disc lift,drag lift,poma lift,skiing,snowboarding,surface cable"},"aerialway/pylon":{name:"Aerialway Pylon",terms:"chair lift pole,skiing,snowboarding,lift tower"},"aerialway/rope_tow":{name:"Rope Tow Lift",terms:"bugel lift,drag lift,handle tow,skiing,snowboarding,surface cable"},"aerialway/t-bar":{name:"T-Bar Lift",terms:"drag lift,skiing,surface cable,tbar"},"aerialway/zip_line":{name:"Zip Line",terms:"aerial runway,canopy,flying fox,foefie slide,gravity propelled aerial ropeslide,Tyrolean traverse,zip wire,zip-line,zipline,zipwire"},"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/holding_position":{name:"Aircraft Holding Position",terms:""},"aeroway/jet_bridge":{name:"Jet Bridge",terms:"aerobridge,air jetty,airbridge,finger,gangway,jet way,jetway,passenger boarding bridge,PBB,portal,skybridge,terminal gate connector"},"aeroway/parking_position":{name:"Aircraft Parking Position",terms:""},"aeroway/runway":{name:"Runway",terms:"landing strip"},"aeroway/spaceport":{name:"Spaceport",terms:"cosmodrome,rocket launch center,rocket launch complex,rocket launch site,rocket range,space port"},"aeroway/taxiway":{name:"Taxiway",terms:""},"aeroway/terminal":{name:"Airport Terminal",terms:"airport,aerodrome"},"aeroway/windsock":{name:"Windsock",terms:""},"allotments/plot":{name:"Community Garden Plot",terms:""},"amenity/bus_station":{name:"Bus Station / Terminal"},"amenity/coworking_space":{name:"Coworking Space"},"amenity/embassy":{name:"Embassy"},"amenity/ferry_terminal":{name:"Ferry Station / Terminal"},"amenity/nursing_home":{name:"Nursing Home"},"amenity/recycling":{name:"Recycling"},"amenity/register_office":{name:"Register Office"},"amenity/scrapyard":{name:"Scrap Yard"},"amenity/swimming_pool":{name:"Swimming Pool"},"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,pound"},"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/bar/lgbtq":{name:"LGBTQ+ Bar",terms:"gay bar,lesbian bar,lgbtq bar,lgbt bar,lgb bar"},"amenity/bbq":{name:"Barbecue/Grill",terms:"bbq,grill"},"amenity/bench":{name:"Bench",terms:"seat,chair"},"amenity/bicycle_parking":{name:"Bicycle Parking",terms:"bike,cycle parking,cycling"},"amenity/bicycle_parking/building":{name:"Bicycle Parking Garage",terms:"Bike Parking Station,cycle parking,cycling,Multi-Storey Bicycle Park,Multi-Storey Bike Park"},"amenity/bicycle_parking/lockers":{name:"Bicycle Lockers",terms:"cycle locker,cycling,Bike Lockers"},"amenity/bicycle_parking/shed":{name:"Bicycle Shed",terms:"cycle shed,cycling,Bike Shed"},"amenity/bicycle_rental":{name:"Bicycle Rental",terms:"bike,bicycle,bikeshare,bike share,bicycle share,cycle dock,cycle hub,cycleshare,cycling"},"amenity/bicycle_repair_station":{name:"Bicycle Repair Tool Stand",terms:"bike chain,bike multitool,bike repair,bike tools,cycle pump,cycle repair,cycling"},"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 Station",terms:"car sharing,carpooling,lift sharing,ride sharing"},"amenity/car_rental":{name:"Car Rental",terms:""},"amenity/car_sharing":{name:"Car Sharing Station",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:"time"},"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/community_centre/lgbtq":{name:"LGBTQ+ Community Center",terms:"lgbtq event,lgbtq hall,lgbt event,lgbt hall,lgb event,lgb hall"},"amenity/compressed_air":{name:"Compressed Air",terms:""},"amenity/conference_centre":{name:"Convention Center",terms:"auditorium,conference,exhibition,exposition,lecture"},"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/dressing_room":{name:"Changing Room",terms:"changeroom,dressing room,fitting room,locker room"},"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/events_venue":{name:"Events Venue",terms:"banquet hall,baptism,Bar Mitzvah,Bat Mitzvah,birthdays,celebrations,conferences,confirmation,meetings,parties,party,quinceañera,reunions,weddings"},"amenity/fast_food":{name:"Fast Food",terms:"restaurant,takeaway"},"amenity/fast_food/ice_cream":{name:"Ice Cream Fast Food"},"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/donut":{name:"Donut Fast Food",terms:"breakfast,brunch,cafe,canteen,coffee,dine,diner,donut,doughnut,dining,eat,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/hot_dog":{name:"Hot Dog Fast Food",terms:"ballpark,frankfurter,frank,hotdog stand,sandwich,sausage,wiener"},"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:"basin,water"},"amenity/fuel":{name:"Gas Station",terms:"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/gambling":{name:"Gambling Hall",terms:"betting,bingo,blackjack,casino,craps,gamble,gambling,keno,lottery,pachinko,poker,roulette,slot machines,slots"},"amenity/grave_yard":{name:"Graveyard",terms:"burial ground,cemetary,cemetery,churchyard,columbarium,grave yard,graveyard,mausoleum,tomb"},"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/karaoke_box":{name:"Karaoke Box",terms:"karaoke club,karaoke room,karaoke television,KTV"},"amenity/kindergarten":{name:"Preschool / Kindergarten Grounds",terms:"kindergarden,pre-school"},"amenity/language_school":{name:"Language School",terms:"esl"},"amenity/lavoir":{name:"Lavoir",terms:"clothing,laundry,washing"},"amenity/letter_box":{name:"Letter Box",terms:"curbside delivery box,home delivery box,direct-to-door delivery box,letter hole,letter plate,letter slot,letterbox,letterhole,letterplate,letterslot,mail box,mail hole,mail slot,mailbox,mailhole,mailslot,through-door delivery box"},"amenity/library":{name:"Library",terms:"book"},"amenity/loading_dock":{name:"Loading Dock",terms:"door,loading bay,shipping,unloading,warehouse"},"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/nightclub/lgbtq":{name:"LGBTQ+ Nightclub",terms:"gay nightclub,lesbian nightclub,lgbtq nightclub,lgbt nightclub,lgb nightclub"},"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/parking/park_ride":{name:"Park & Ride Lot",terms:"commuter parking lot,incentive parking lot,metro parking lot,park and pool lot,park and ride lot,P+R,public transport parking lot,public transit parking lot,train parking lot"},"amenity/parking/underground":{name:"Underground Parking",terms:"automobile parking,car lot,car parking,rv parking,subsurface parking,truck parking,vehicle parking"},"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/christian/jehovahs_witness":{name:"Kingdom Hall of Jehovah's Witnesses",terms:"christian,church,house of God,house of prayer,house of worship"},"amenity/place_of_worship/christian/la_luz_del_mundo":{name:"La Luz del Mundo Temple",terms:"christian,church,house of God,house of prayer,house of worship,the light of the world church"},"amenity/place_of_worship/christian/quaker":{name:"Quaker Friends Meeting House",terms:"christian,church,house of God,house of prayer,house of worship"},"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:"islam,islamic center,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/polling_station":{name:"Permanent Polling Place",terms:"ballot box,ballot drop,democracy,elections,polling place,vote,voting booth,voting machine"},"amenity/post_box":{name:"Mail Drop Box",terms:"drop box,dropbox,letter drop,mail box,mail collection box,mail drop,mail dropoff,mailbox,package drop,pillar box,pillarbox,post box,postal box,postbox"},"amenity/post_depot":{name:"Post Sorting Office",terms:"mail processing and distribution center,post depot"},"amenity/post_office":{name:"Post Office",terms:"letter,mail"},"amenity/prep_school":{name:"Test Prep / Tutoring School",terms:"academic,ACT,SAT,homework,math,reading,test prep,tutoring,writing"},"amenity/prison":{name:"Prison Grounds",terms:"cell,jail,correction"},"amenity/pub":{name:"Pub",terms:"alcohol,drink,dive,beer,bier,booze"},"amenity/pub/lgbtq":{name:"LGBTQ+ Pub",terms:"gay pub,lesbian pub,lgbtq pub,lgbt pub,lgb pub"},"amenity/pub/microbrewery":{name:"Brewpub",terms:"alcohol,drink,dive,beer,bier,booze,craft brewery,microbrewery,small batch brewery"},"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/recycling/container/electrical_items":{name:"E-Waste Container",terms:"computers,electronic waste,electronics recycling,ewaste bin,phones,tablets"},"amenity/recycling/container/green_waste":{name:"Green Waste Container",terms:"biodegradable,biological,compost,decomposable,garbage bin,garden waste,organic,rubbish,food scrap"},"amenity/research_institute":{name:"Research Institute Grounds",terms:"applied research,experimentation,r&d,r & d,r and d,research and development,research institution,research laboratory,research labs"},"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:"alpine hut,cabin,leanto,lodging,overnight accommodations,sleeping shelter,wilderness hut"},"amenity/shelter/picnic_shelter":{name:"Picnic Shelter",terms:"pavilion"},"amenity/shelter/public_transport":{name:"Transit Shelter",terms:"bus stop,metro stop,public transit shelter,public transport shelter,tram stop shelter,waiting"},"amenity/shower":{name:"Shower",terms:"rain closet"},"amenity/smoking_area":{name:"Smoking Area",terms:""},"amenity/social_centre":{name:"Social Center",terms:"event,fraternal,fraternity,hall,organization,professional,society,sorority,union,vetern"},"amenity/social_facility":{name:"Social Facility",terms:""},"amenity/social_facility/ambulatory_care":{name:"Ambulatory Care",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/studio/audio":{name:"Recording Studio",terms:"audio mixing,audio production,audio recording,audio studio"},"amenity/studio/radio":{name:"Radio Station",terms:"am radio,fm radio,radio broadcast,radio studio"},"amenity/studio/television":{name:"Television Station",terms:"television broadcast,television studio,tv broadcast,tv station,tv studio"},"amenity/studio/video":{name:"Film Studio",terms:"movie production,movie studio,video production,video recording,video studio"},"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/toilets/disposal/flush":{name:"Flush Toilets",terms:"bathroom,head,lavatory,privy,restroom,water closet,WC,W.C."},"amenity/toilets/disposal/pitlatrine":{name:"Pit Latrine",terms:"head,lavatory,long drop,outhouse,pit toilet,privy"},"amenity/townhall":{name:"Town Hall",terms:"village,city,government,courthouse,municipal"},"amenity/townhall/city":{name:"City Hall",terms:"council,courthouse,government,mayor,municipality"},"amenity/toy_library":{name:"Toy Library",terms:"game,toy"},"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/bottle_return":{name:"Bottle Return Machine",terms:"bottle return"},"amenity/vending_machine/bread":{name:"Bread Vending Machine",terms:"baguette,bread"},"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/eggs":{name:"Egg Vending Machine",terms:"egg"},"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 Dispenser",terms:"excrement bags,poop,waste,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/ice_cubes":{name:"Ice Vending Machine",terms:"cubes,ice"},"amenity/vending_machine/newspapers":{name:"Newspaper Vending Machine",terms:"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{name:"Parcel Pickup/Dropoff Locker",terms:"mail,packstation,parcel,pickup"},"amenity/vending_machine/parcel_pickup":{name:"Parcel Pickup Locker",terms:"amazon,locker,mail,packstation,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:"water faucet,water point,water tap,water source,water spigot"},"amenity/watering_place":{name:"Animal Watering Place",terms:""},"amenity/weighbridge":{name:"Truck Scale",terms:"weigh station,weighbridge"},area:{name:"Area",terms:"polygon"},"area/highway":{name:"Road Area",terms:"area:highway,edge of pavement,highway area,highway shape,pavement,road shape,street area"},"attraction/amusement_ride":{name:"Amusement Ride",terms:"theme park,carnival ride"},"attraction/animal":{name:"Animal Enclosure",terms:"amphibian,animal park,aquarium,bear,bird,fish,insect,lion,mammal,monkey,penguin,reptile,safari,theme park,tiger,zoo"},"attraction/big_wheel":{name:"Big Wheel",terms:"ferris wheel,theme park,amusement ride"},"attraction/bumper_car":{name:"Bumper Cars",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 Ride",terms:"theme park,amusement ride,gondola,tower,big drop"},"attraction/kiddie_ride":{name:"Kiddie Ride",terms:""},"attraction/log_flume":{name:"Log Flume",terms:"theme park,amusement ride,flume"},"attraction/maze":{name:"Maze",terms:"theme park,amusement ride,labyrinth"},"attraction/pirate_ship":{name:"Pirate Ship Ride",terms:"theme park,carnival ride,amusement ride"},"attraction/river_rafting":{name:"River Rapids Ride",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/swing_carousel":{name:"Swing Carousel",terms:"theme park,amusement ride,carousel,tower,carousel tower"},"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"},"barrier/block":{name:"Block",terms:""},"barrier/bollard_line":{name:"Bollard Row",terms:""},"barrier/bollard":{name:"Bollard",terms:""},"barrier/border_control":{name:"Border Control",terms:""},"barrier/cattle_grid":{name:"Cattle Grid",terms:"cattle guard,cattle stop,livestock grid,stock gate,stock grid,stock stop,Texas gate,vehicle pass"},"barrier/chain":{name:"Chain",terms:""},"barrier/city_wall":{name:"City Wall",terms:""},"barrier/cycle_barrier":{name:"Cycle Barrier",terms:"bicycle barrier,bicycling barrier,bike gates,cycling barrier"},"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/height_restrictor":{name:"Height Restrictor",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/kerb/raised":{name:"Raised Curb",terms:""},"barrier/kerb/rolled":{name:"Rolled Curb",terms:"gutter"},"barrier/kissing_gate":{name:"Kissing Gate",terms:""},"barrier/lift_gate":{name:"Lift Gate",terms:""},"barrier/retaining_wall":{name:"Retaining Wall",terms:""},"barrier/sally_port":{name:"Sally Port",terms:"Postern,castle side gate"},"barrier/stile":{name:"Stile",terms:""},"barrier/swing_gate":{name:"Swing Gate",terms:""},"barrier/toll_booth":{name:"Toll Booth",terms:""},"barrier/turnstile":{name:"Turnstile",terms:"baffle gate,turnstyle"},"barrier/wall":{name:"Wall",terms:""},"barrier/wall/noise_barrier":{name:"Noise Barrier",terms:"acoustical barrier,noise wall,noisewall,sound barrier,sound berm,sound wall,soundberm,soundwall"},"boundary/administrative":{name:"Administrative Boundary",terms:""},"bridge/support":{name:"Bridge Support",terms:""},"bridge/support/pier":{name:"Bridge Pier",terms:""},building_part:{name:"Building Part",terms:"roof,simple 3D buildings"},building:{name:"Building",terms:""},"building/bunker":{name:"Bunker"},"building/entrance":{name:"Entrance/Exit"},"building/train_station":{name:"Train Station Building"},"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/hangar":{name:"Hangar Building",terms:""},"building/hospital":{name:"Hospital Building",terms:""},"building/hotel":{name:"Hotel Building",terms:""},"building/house":{name:"House",terms:"home,family,residence,dwelling"},"building/houseboat":{name:"Houseboat",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:"horse shelter"},"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:""},club:{name:"Club",terms:"social"},"club/sport":{name:"Sports Club",terms:"athletics club,sporting club,sports association,sports society"},craft:{name:"Craft",terms:""},"craft/locksmith":{name:"Locksmith"},"craft/tailor":{name:"Tailor"},"craft/agricultural_engines":{name:"Argricultural Engines Mechanic",terms:""},"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/cleaning":{name:"Cleaning Service",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/floorer":{name:"Floorer",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/joiner":{name:"Joiner",terms:"furniture"},"craft/key_cutter":{name:"Key Cutter",terms:""},"craft/metal_construction":{name:"Metal Construction",terms:""},"craft/painter":{name:"Painter",terms:""},"craft/parquet_layer":{name:"Parquet Layer",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 Maker",terms:"ceramic,kiln,pot,vase"},"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/signmaker":{name:"Signmaker",terms:""},"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:""},"cycleway/asl":{name:"Advanced Stop Line",terms:"advanced stop box,asl,bicycle box,bike box,bikebox,cycle box,cycle stop marking"},"demolished/building":{name:"Recently Demolished Building"},"disused/railway":{name:"Disused Railway Feature"},"emergency/designated":{name:"Emergency Access Designated"},"emergency/destination":{name:"Emergency Access Destination"},"emergency/no":{name:"Emergency Access No"},"emergency/official":{name:"Emergency Access Official"},"emergency/private":{name:"Emergency Access Private"},"emergency/yes":{name:"Emergency Access Yes"},"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_hose":{name:"Fire Hose",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/landing_site":{name:"Emergency Landing Site",terms:"helicopter,helipad,heliport"},"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"},"entrance/emergency":{name:"Emergency Exit",terms:"fire exit,door"},ford:{name:"Ford",terms:""},"golf/bunker":{name:"Sand Trap",terms:"hazard,bunker"},"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/counselling":{name:"Counselling Center",terms:""},"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"},"highway/crossing":{name:"Crossing"},"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)"},"highway/crossing/zebra":{name:"Marked 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:"bicyle path,bike path,cycling path"},"highway/cycleway/crossing":{name:"Cycle Crossing"},"highway/cycleway/bicycle_foot":{name:"Cycle & Foot Path",terms:"bicycle and foot path,bike and pedestrian path,green way,greenway,mixed-use trail,multi-use trail,segregated trail,rail trail"},"highway/cycleway/crossing/marked":{name:"Marked Cycle Crossing",terms:"cycle crosswalk,cycle path crossing,cycleway crossing,bicycle crossing,bike crossing"},"highway/cycleway/crossing/unmarked":{name:"Unmarked Cycle Crossing",terms:"cycle path crossing,cycleway crossing,bicycle crossing,bike crossing"},"highway/elevator":{name:"Elevator",terms:"lift"},"highway/emergency_bay":{name:"Emergency Stopping Place",terms:"Highway Emergency Bay"},"highway/footway":{name:"Foot Path",terms:"hike,hiking,promenade,trackway,trail,walk"},"highway/footway/crossing":{name:"Pedestrian Crossing"},"highway/footway/zebra-raised":{name:"Marked Crosswalk (Raised)"},"highway/footway/zebra":{name:"Marked Crosswalk"},"highway/footway/access_aisle":{name:"Access Aisle",terms:"accessible van loading zone,disabled parking access zone,handicap parking access zone,parking lot aisle,striped zone,tow zone,tow-away zone,towaway zone,wheelchair aisle"},"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:"marked foot path crossing,marked crossing,marked pedestrian crosswalk,zebra crossing"},"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:"unmarked foot path crossing,unmarked crosswalk,unmarked pedestrian crossing"},"highway/give_way":{name:"Yield Sign",terms:"give way,yield,sign"},"highway/living_street":{name:"Living Street",terms:""},"highway/milestone":{name:"Highway Milestone",terms:"mile marker,mile post,mile stone,mileage marker,milemarker,milepost"},"highway/mini_roundabout":{name:"Mini-Roundabout",terms:"traffic circle"},"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/path/informal":{name:"Informal Path",terms:"bootleg trail,cow path,desire line,desire path,desireline,desirepath,elephant path,game trail,goat track,herd path,pig trail,shortcut,social trail,use trail"},"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:"Motorsport Racetrack",terms:"auto*,formula one,kart,motocross,nascar,race*,track"},"highway/raceway/karting":{name:"Karting Racetrack",terms:"carting,go carts,go karts,go-karts,gokarts,kart racing,karting track,motorsports,shifter karts,superkarts"},"highway/raceway/motocross":{name:"Motocross Racetrack",terms:"off-road racing,offroad moto racing,motocross circuit,motorcycle track,motorsports"},"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,stairway"},"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/trailhead":{name:"Trailhead",terms:"hiking,mile zero,mountain biking,mountaineering,trail endpoint,trail start,staging area,trekking"},"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/building":{name:"Historic Building",terms:""},"historic/castle":{name:"Castle",terms:""},"historic/castle/fortress":{name:"Historic Fortress",terms:"citadel,military"},"historic/castle/palace":{name:"Palace",terms:"Royal Residence,royal,king,queen"},"historic/castle/stately":{name:"Château",terms:"Historic Country House,Stately Home,nobility,gentry,representative"},"historic/city_gate":{name:"City Gate",terms:"Town Gate"},"historic/fort":{name:"Historic Fort",terms:"military"},"historic/manor":{name:"Manor House",terms:"Mansion,gentry,nobility,estate"},"historic/memorial":{name:"Memorial",terms:"dedicatory,epitaph,remember,remembrance,memory,monument,stolperstein"},"historic/memorial/plaque":{name:"Commemorative Plaque",terms:"dedicatory,epitaph,historical marker,remember,remembrance,memory"},"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"},"indoor/corridor_line":{name:"Indoor Corridor"},"indoor/area":{name:"Indoor Area",terms:"indoor space"},"indoor/corridor":{name:"Indoor Corridor",terms:"concourse,foyer,hallway,passageway"},"indoor/door":{name:"Indoor Door",terms:"doorframe,doorway,portal,room access,threshold"},"indoor/elevator":{name:"Indoor Elevator Shaft",terms:"elevator,lift"},"indoor/room":{name:"Room",terms:"antechamber,anteroom,atrium,cell,chamber,concourse,foyer,indoor room,lobby,vestibule"},"indoor/stairs":{name:"Indoor Stairwell",terms:"stair,stairs,staircase,stairway,stairwell,steps"},"indoor/wall":{name:"Indoor Wall",terms:"indoor barrier,room divider,room partition"},"internet_access/wlan":{name:"Wi-Fi Hotspot",terms:"wi-fi,wifi,hotspot"},junction:{name:"Junction",terms:""},"landuse/basin":{name:"Basin"},"landuse/churchyard":{name:"Churchyard"},"landuse/farm":{name:"Farmland"},"landuse/pond":{name:"Pond"},"landuse/reservoir":{name:"Reservoir"},"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:"burial ground,cemetary,cemetery,churchyard,columbarium,grave yard,graveyard,mausoleum,tomb"},"landuse/commercial":{name:"Commercial Area",terms:""},"landuse/construction":{name:"Construction Area",terms:"building,bulldozer,construction site,construction zone,crane,demolition,development,infrastructure"},"landuse/farmland":{name:"Farmland",terms:"crop,grow,plant"},"landuse/farmyard":{name:"Farmyard",terms:"crop,grow,plant"},"landuse/flowerbed":{name:"Flowerbed",terms:"floral garden,flower garden"},"landuse/forest":{name:"Managed Forest",terms:"boreal,cut,forest,forestry,forrest,lumber,silviculture,taiga,tree,trees,woodlands,woods"},"landuse/garages":{name:"Garage Landuse",terms:""},"landuse/grass":{name:"Grass",terms:"field,green,lawn,managed grass,mown grass,turf"},"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:"grazing,hay field,pasture"},"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/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/obstacle_course":{name:"Obstacle Course",terms:"army,base,force,guard,marine,navy,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:"christian,churchyard,hindu,jewish,mosque,muslim,place of worship,shinto,sikh,taoist,temple,shrine,synagogue"},"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"},"landuse/winter_sports":{name:"Winter Sports Area",terms:"piste area,ski area,ski hill,ski mountain,ski resort,snow board area,snowboard area"},"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/disc_golf_course":{name:"Disc Golf Course",terms:"disk golf,frisbee golf,flying disc golf,frolf,ultimate"},"leisure/dog_park":{name:"Dog Park",terms:""},"leisure/escape_game":{name:"Escape Room",terms:"escape game,escape the room,puzzle room,quest room"},"leisure/firepit":{name:"Fire Pit",terms:"bonfire,campfire,fire circle,fire hole,fire place,fire ring,firepit,fireplace,firering"},"leisure/fishing":{name:"Fishing Spot",terms:"angler"},"leisure/fitness_centre":{name:"Gym / Fitness Center",terms:"health,gym,leisure,pilates,studio"},"leisure/fitness_centre/yoga":{name:"Yoga Studio",terms:"asanas,meditation,modern yoga,studio"},"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/chess":{name:"Giant Chess Board",terms:"chessboard,checkerboard,checkers,chequerboard,garden chess,large chess,oversize chess"},"leisure/pitch/cricket":{name:"Cricket Field",terms:""},"leisure/pitch/equestrian":{name:"Riding Arena",terms:"dressage,equestrian,horse,horseback,riding"},"leisure/pitch/field_hockey":{name:"Field Hockey Pitch",terms:"landhockey"},"leisure/pitch/horseshoes":{name:"Horseshoes Pit",terms:"horse shoes"},"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/shuffleboard":{name:"Shuffleboard Court",terms:"deck shuffleboard,floor shuffleboard"},"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:"recreation center,sanatorium,ski and snowboard resort,vacation resort,winter sports resort"},"leisure/sauna":{name:"Sauna",terms:""},"leisure/slipway_point":{name:"Slipway",terms:"boat launch,boat ramp,boat landing"},"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_area":{name:"Natural Swimming Area",terms:"dive,water,aquatics"},"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/cycling_point":{name:"Cycling Track",terms:"bicycle track,bicycling track,cycle racetrack,velodrome"},"leisure/track/cycling":{name:"Cycling Track",terms:"bicycle track,bicycling track,cycle racetrack,velodrome"},"leisure/track/horse_racing_point":{name:"Horse Racing Track",terms:"equestrian race track,horse race betting,horseracing,horsetrack,horse racetrack"},"leisure/track/horse_racing":{name:"Horse Racing Track",terms:"equestrian race track,horse race betting,horseracing,horsetrack,horse racetrack"},"leisure/track/running_point":{name:"Running Track",terms:"athletics track,decathlon,foot race,long distance running,marathon,middle distance running,racetrack,running,sprint,track,walking"},"leisure/track/running":{name:"Running Track",terms:"athletics track,decathlon,foot race,long distance running,marathon,middle distance running,racetrack,running,sprint,track,walking"},"leisure/water_park":{name:"Water Park",terms:"swim,pool,dive"},line:{name:"Line",terms:"polyline"},"man_made/adit":{name:"Adit",terms:"cave,horizontal mine entrance,tunnel,underground"},"man_made/antenna":{name:"Antenna",terms:"broadcast,cell phone,cell,communication,mobile phone,radio,television,transmission,tv"},"man_made/beacon":{name:"Beacon",terms:""},"man_made/beehive":{name:"Beehive",terms:"apiary,beekeeper,farm,honey,pollination"},"man_made/breakwater":{name:"Breakwater",terms:""},"man_made/bridge":{name:"Bridge Area",terms:""},"man_made/bunker_silo":{name:"Bunker Silo",terms:"Silage,Storage"},"man_made/cairn":{name:"Cairn",terms:"rock pile,stone stack,stone pile,càrn"},"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/cross":{name:"Summit Cross",terms:""},"man_made/cutline":{name:"Cut line",terms:""},"man_made/dyke":{name:"Levee",terms:"Dike,Dyke,Floodbank,Stopbank"},"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/manhole":{name:"Manhole",terms:"cover,hole,sewer,sewage,telecom"},"man_made/manhole/drain":{name:"Storm Drain",terms:"cover,drain,hole,rain,sewer,sewage,storm"},"man_made/manhole/gas":{name:"Gas Utility Manhole",terms:"cover,gas,heat,hole,utility"},"man_made/manhole/power":{name:"Power Utility Manhole",terms:"cover,hole,electric,hole,power,utility"},"man_made/manhole/sewer":{name:"Sewer Utility Manhole",terms:"cover,drain,hole,sewer,sewage,utility"},"man_made/manhole/telecom":{name:"Telecom Utility Manhole",terms:"bt,cable,cover,phone,hole,telecom,telephone,utility"},"man_made/manhole/water":{name:"Water Utility Manhole",terms:"cover,drinking,hole,utility,water"},"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/mineshaft":{name:"Mineshaft",terms:"cave,mine shaft,tunnel,underground,vertical mine entrance"},"man_made/monitoring_station":{name:"Monitoring Station",terms:"weather,earthquake,seismology,air,gps"},"man_made/obelisk":{name:"Obelisk",terms:""},"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:"berth,dock,jetty,landing,promenade,wharf"},"man_made/pier/floating":{name:"Floating Pier",terms:"berth,dock,jetty,landing,promenade,wharf"},"man_made/pipeline":{name:"Pipeline",terms:"oil,natural gas,water,sewer,sewage"},"man_made/pipeline/underground":{name:"Underground Pipeline",terms:"oil,natural gas,water,sewer,sewage"},"man_made/pipeline/valve":{name:"Pipeline Valve",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/storage_tank/water":{name:"Water Tank",terms:"cistern,water tower"},"man_made/street_cabinet":{name:"Street Cabinet",terms:"cable tv,monitoring box,technical box,telecommunications,traffic signal controls"},"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/torii":{name:"Torii",terms:"Japanese gate,Shinto shrine"},"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/defensive":{name:"Fortified Tower",terms:"Defensive Tower,Castle 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/tunnel":{name:"Tunnel Area",terms:"bore,dig,shaft,underground passage,underpass"},"man_made/utility_pole":{name:"Utility Pole",terms:""},"man_made/wastewater_plant":{name:"Wastewater Plant",terms:"sewage*,water treatment plant,reclamation plant"},"man_made/water_tap":{name:"Water Tap",terms:"drinking water,water faucet,water point,water source,water spigot"},"man_made/water_tower":{name:"Water Tower",terms:""},"man_made/water_well":{name:"Water Well",terms:"aquifer,drinking water,water pump,water point,water source"},"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"},marker:{name:"Marker",terms:"identifier,marking,plate,pole,post,sign"},"marker/utility":{name:"Utility Marker",terms:"gas line marker,identifier,marking,oil marker,pipline marker,plate,pole,post,sign"},"marker/utility/power":{name:"Power Marker",terms:"electric line,identifier,marking,plate,pole,post,power cable,power line,sign"},"military/bunker":{name:"Military Bunker",terms:"air force,army,base,fight,force,guard,marine,navy,troop,war"},"military/checkpoint":{name:"Checkpoint",terms:"air force,army,base,force,guard,marine,navy,troop,war"},"military/nuclear_explosion_site":{name:"Nuclear Explosion Site",terms:"atom,blast,bomb,detonat*,nuke,site,test"},"military/office":{name:"Military Office",terms:"air force,army,base,enlist,fight,force,guard,marine,navy,recruit,troop,war"},"military/trench":{name:"Military Trench",terms:"dugout,firestep,fox hole,infantry trench,war trench"},"natural/bare_rock":{name:"Bare Rock",terms:"rock"},"natural/bay":{name:"Bay",terms:""},"natural/beach":{name:"Beach",terms:"shore"},"natural/cape":{name:"Cape",terms:"bay,coastline,erosion,headland,promontory"},"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/geyser":{name:"Geyser",terms:"erupting spring,geiser,gieser,guyser,hot water,hydrogeology,hydrothermal explosion,steam"},"natural/glacier":{name:"Glacier",terms:"ice,snow"},"natural/grassland":{name:"Grassland",terms:"field,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/rock":{name:"Attached Rock / Boulder",terms:"boulder,stone,rock"},"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/shingle":{name:"Shingle",terms:"beach,gravel,pebbles,riverbed,rounded rock fragments"},"natural/spring":{name:"Spring",terms:"aquifer,hydro,seep,water source"},"natural/stone":{name:"Unattached Stone / Boulder",terms:"boulder,stone,rock"},"natural/tree_row":{name:"Tree Row",terms:""},"natural/tree":{name:"Tree",terms:""},"natural/valley":{name:"Valley",terms:"canyon,dale,dell,dene,depression,glen,gorge,gully,gulley,gultch,hollow,ravine,rift,vale"},"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 Area",terms:""},"natural/water/lake":{name:"Lake",terms:"lakelet,loch,mere"},"natural/water/moat":{name:"Moat",terms:""},"natural/water/pond":{name:"Pond",terms:"lakelet,millpond,tarn,pool,mere"},"natural/water/reservoir":{name:"Reservoir",terms:""},"natural/water/river":{name:"River Area",terms:"beck,branch,brook,course,creek,estuary,rill,riverbank,rivulet,run,runnel,stream,tributary,watercourse"},"natural/water/stream":{name:"Stream Area",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/water/wastewater":{name:"Wastewater Basin",terms:"excrement,shit,sewage,wastewater,Settling Basin,Clarifier Basin"},"natural/wetland":{name:"Wetland",terms:"bog,fen,marsh,mire,moor,muskeg,peatland,quagmire,reedbed,saltmarsh,swamp,tidalflat,wet meadow"},"natural/wood":{name:"Natural Wood",terms:"boreal,forest,forrest,taiga,tree,trees,woodlands,woods"},"network/type/node_network":{name:"Recreational Network Node",terms:"node network,rcn,rwn"},"noexit/yes":{name:"No Exit",terms:"no exit,road end,dead end"},office:{name:"Office",terms:""},"office/administrative":{name:"Administrative Office"},"office/physician":{name:"Physician"},"office/travel_agent":{name:"Travel Agency"},"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/bail_bond_agent":{name:"Bail Bond Agent",terms:"bail bond dealer,bail bond man,bail bondsman,bail bondsperson"},"office/charity":{name:"Charity Office",terms:"charitable organization"},"office/company":{name:"Corporate Office",terms:""},"office/consulting":{name:"Consultancy Office",terms:"consulting firm office"},"office/coworking":{name:"Coworking Space",terms:"coworking,office"},"office/diplomatic":{name:"Diplomatic Office",terms:""},"office/diplomatic/consulate":{name:"Consulate",terms:""},"office/diplomatic/embassy":{name:"Embassy",terms:""},"office/diplomatic/liaison":{name:"Liaison Office",terms:""},"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_advisor":{name:"Financial Advisor",terms:"401k,inheritance,savings,stocks,retirement,wealth management"},"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/prosecutor":{name:"Public Prosecutor's Office",terms:"attorney general,district attorney,prosecution"},"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:"advocate,attorney,barrister,counsellor,counselor,defender,lawyer,legal,prosecutor"},"office/lawyer/notary":{name:"Notary Office"},"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 Office",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:"R and D,research and development,research lab"},"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 service provider,isp,network,telephone,voice"},"office/therapist":{name:"Therapist Office",terms:"therapy"},"office/water_utility":{name:"Water Utility Office",terms:"water board,utility"},"piste/downhill":{name:"Downhill Ski Run",terms:"alpine skiing,piste,ski hill,skiing,snowboarding"},"piste/downhill/halfpipe":{name:"Snowsports Half-Pipe",terms:"ski,alpine,halfpipe,half pipe,snowboard,downhill,piste"},"piste/hike":{name:"Snowshoeing / Winter Hiking Trail",terms:"hike,nordic walking,piste,show shoeing,snowshoe,snowshoeing"},"piste/ice_skate":{name:"Ice Skating Trail",terms:"ice rink,ice track,iceskating,piste,skates"},"piste/nordic":{name:"Cross-Country Ski Trail",terms:"crosscountry,nordic skiing,piste,skate skiing,skiing,xc"},"piste/piste":{name:"Snowsports Trail / Piste",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 Run",terms:"bobsled,luge,piste,skeleton,sledge,sleigh,toboggan"},"piste/sleigh":{name:"Sleigh Trail",terms:"dogsledding,husky,horse,piste,sled,sledge,ski-joring,skijoring"},"place/farm":{name:"Farm"},"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:"chin-up bar,high bar,pull-up 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:"sandbox"},"playground/seesaw":{name:"Seesaw",terms:""},"playground/slide":{name:"Slide",terms:""},"playground/structure":{name:"Play Structure",terms:"jungle gym"},"playground/swing":{name:"Swing",terms:""},"playground/zipwire":{name:"Zip Wire",terms:""},point:{name:"Point",terms:"node,other,vertex,vertices"},polling_station:{name:"Temporary Polling Place",terms:"ballot box,ballot drop,democracy,elections,polling place,vote,voting booth,voting machine"},"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/hydro":{name:"Water Turbine",terms:"dam,generator,francis turbine,hydroelectricity,kaplan turbine,pelton turbine"},"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:"electric power transmission line,high voltage line,high tension line"},"power/minor_line":{name:"Minor Power Line",terms:""},"power/plant":{name:"Power Station Grounds",terms:"coal,gas,generat*,hydro,nuclear,power,station"},"power/plant/source/coal":{name:"Coal-Fired Power Plant",terms:"carbon,combustion,fossil fuel,coalfired,power station"},"power/plant/source/gas":{name:"Gas-Fired Power Plant",terms:"carbon,combustion,fossil fuel,gasfired,power station,natural gas"},"power/plant/source/hydro":{name:"Hydroelectric Power Station",terms:"dam,power plant,run-of-the-river,tidal,water turbine"},"power/plant/source/nuclear":{name:"Nuclear Power Plant",terms:"atomic,fission,power station,nuclear reactor"},"power/plant/source/solar":{name:"Solar Farm",terms:"photovoltaic power station,solar panels,solar park,utility-scale solar"},"power/plant/source/wind":{name:"Wind Farm",terms:"offshore wind,wind park,wind power plant,wind power station,wind turbines,windmills"},"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_point":{name:"Transit Stop / Platform",terms:"platform,public transit,public transportation,transit,transportation"},"public_transport/platform":{name:"Transit Platform",terms:"platform,public transit,public transportation,transit,transportation"},"public_transport/platform/aerialway_point":{name:"Aerialway Stop / Platform"},"public_transport/platform/ferry_point":{name:"Ferry Stop / Platform"},"public_transport/platform/light_rail_point":{name:"Light Rail Stop / Platform"},"public_transport/platform/monorail_point":{name:"Monorail Stop / Platform"},"public_transport/platform/subway_point":{name:"Subway Stop / Platform"},"public_transport/platform/train_point":{name:"Train Stop / Platform"},"public_transport/platform/aerialway":{name:"Aerialway Platform",terms:"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/bus_point":{name:"Bus Stop",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/bus":{name:"Bus Platform",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/ferry":{name:"Ferry Platform",terms:"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/light_rail":{name:"Light Rail Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/platform/monorail":{name:"Monorail Platform",terms:"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/platform/subway":{name:"Subway Platform",terms:"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/platform/train":{name:"Train Platform",terms:"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/platform/tram_point":{name:"Tram Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform/tram":{name:"Tram Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform/trolleybus_point":{name:"Trolleybus Stop",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/platform/trolleybus":{name:"Trolleybus Platform",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,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)"},"railway/platform":{name:"Train Platform"},"railway/station":{name:"Train Station"},"railway/tram_stop":{name:"Tram Stopping Position"},"railway/abandoned":{name:"Abandoned Railway",terms:""},"railway/buffer_stop":{name:"Buffer Stop",terms:"stop,halt,buffer"},"railway/construction":{name:"Railway Under Construction",terms:""},"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:"rail line,railroad track,train track"},"railway/rail/highspeed":{name:"High-Speed Rail",terms:"bullet train,fast rail,high speed rail,highspeed rail,HSR"},"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"},"railway/yard":{name:"Rail Yard",terms:"freight car stop,freight train station,rail freight station,railroad yard,railway yard"},relation:{name:"Relation",terms:""},"route/ferry":{name:"Ferry Route",terms:"boat,merchant vessel,ship,water bus,water shuttle,water taxi"},"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/boutique":{name:"Boutique"},"shop/fashion":{name:"Fashion Store"},"shop/fishmonger":{name:"Fishmonger"},"shop/furnace":{name:"Furnace Store"},"shop/vacant":{name:"Vacant Shop"},"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 / Manga 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/boat":{name:"Boat Store",terms:"fishing boat,jetski,motorboat,rowboat,sailboat,vessel,watercraft"},"shop/bookmaker":{name:"Bookmaker",terms:"betting,bookie,gamble,gambling,turf accountant"},"shop/books":{name:"Book Store",terms:""},"shop/brewing_supplies":{name:"Brewing Supply Store",terms:"brew shop,homebrew supply store"},"shop/butcher":{name:"Butcher",terms:"chicken,beef,lamb,meat,pork"},"shop/camera":{name:"Camera Equipment Store",terms:"camera,film,lens,photo"},"shop/candles":{name:"Candle Shop",terms:"wax"},"shop/cannabis":{name:"Cannabis Shop",terms:"420,marijuana,pot,reefer,weed"},"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/car/second_hand":{name:"Used 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:"blouses,boutique,bras,clothes,dresses,fashion,pants,shirts,shorts,skirts,slacks,socks,suits,underwear"},"shop/clothes/second_hand":{name:"Secondhand Clothing Store",terms:"blouses,clothes,consignment,dresses,pants,second hand,shirts,shorts,skirts,slacks,suits,used"},"shop/clothes/underwear":{name:"Underwear Store",terms:"boutique,bras,brassieres,briefs,boxers,fashion,lingerie,panties,slips,socks,stockings,underclothes,undergarments,underpants,undies"},"shop/clothes/wedding":{name:"Wedding Clothes Store",terms:"boutique,bridal,bride,bridegroom,bridesmaid,groom,groomsman,tuxedo,wedding dress,wedding gown"},"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 & 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/doors":{name:"Door Shop",terms:""},"shop/dry_cleaning":{name:"Dry Cleaner",terms:""},"shop/e-cigarette":{name:"E-Cigarette Shop",terms:"electronic,vape,vaping,vapor"},"shop/electrical":{name:"Electrical Equipment Store",terms:"cable,electric,fan,LED,lighting,power,wire"},"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/erotic/lgbtq":{name:"LGBTQ+ Erotic Store",terms:"sex,porn"},"shop/fabric":{name:"Fabric Store",terms:"sew"},"shop/farm":{name:"Produce Stand",terms:"baked goods,farm shop,farm stand,fresh food,fruits,greengrocer,organics,vegetables"},"shop/fashion_accessories":{name:"Fashion Accessories Store",terms:"bag,cologne,fragrance,hat,jewellery,purfume,purse,scarf,sunglasses,umbrella,wallet,watch"},"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/flooring":{name:"Flooring Supply Shop",terms:"tile"},"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/games":{name:"Tabletop Game Store",terms:"board game,card game,dice game,game shop,live action role-playing game,miniatures wargame,strategy game"},"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/general":{name:"General Store",terms:"village shop"},"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/hobby":{name:"Hobby Shop",terms:"manga,figurine,model"},"shop/houseware":{name:"Houseware Store",terms:"home,household,kitchenware"},"shop/hunting":{name:"Hunting Shop",terms:"arrows,bows,bullets,crossbows,rifles,traps"},"shop/interior_decoration":{name:"Interior Decoration Store",terms:""},"shop/jewelry":{name:"Jewelry Store",terms:"bracelet,diamond,earrings,gem,gold,jeweler,jewellery,jeweller,necklace,pins,ring,silver"},"shop/kiosk":{name:"Kiosk",terms:""},"shop/kitchen":{name:"Kitchen Design Store",terms:"cabinets,countertops,sinks"},"shop/laundry":{name:"Laundry",terms:""},"shop/laundry/self_service":{name:"Self-Service Laundry",terms:"Coin Laundry,Laundromat,Coin Wash,Launderette,Washateria"},"shop/leather":{name:"Leather Store",terms:""},"shop/lighting":{name:"Lighting Store",terms:"fluorescent lighting,lamps,LEDs,light fixtures,lightbulbs"},"shop/locksmith":{name:"Locksmith",terms:"key,lockpick"},"shop/lottery":{name:"Lottery Shop",terms:"lotto tickets,gamble,gambling,scratch-offs"},"shop/mall":{name:"Mall",terms:"shopping"},"shop/massage":{name:"Massage Shop",terms:""},"shop/medical_supply":{name:"Medical Supply Store",terms:""},"shop/military_surplus":{name:"Military Surplus Store",terms:"armor,army-navy store,army surplus,navy surplus,tactical gear,war surplus shop,weapons"},"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:"health,supplement,vitamin"},"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/outpost":{name:"Online Retailer Outpost",terms:"online,pick up,pickup"},"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:"cologne,fragrance,purfume"},"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,lens,photo"},"shop/pottery":{name:"Pottery Store",terms:"ceramic,pot,vase"},"shop/printer_ink":{name:"Printer Ink Store",terms:"copier ink,fax ink,ink cartridges,toner"},"shop/psychic":{name:"Psychic",terms:"astrology,crystal ball,divination,fortune teller,seer,spirit"},"shop/pyrotechnics":{name:"Fireworks Store",terms:"fireworks"},"shop/radiotechnics":{name:"Radio/Electronic Component Store",terms:"antenna,transistor"},"shop/religion":{name:"Religious Store",terms:""},"shop/rental":{name:"Rental Shop",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/spices":{name:"Spice Shop",terms:"chili,cinnamon,curry,ginger,herbs,pepper,saffron,salt,spice store,spices,turmeric,wasabi"},"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/swimming_pool":{name:"Pool Supply Store",terms:"hot tub equipment store,hot tub maintenance store,hot tub supply store,pool shop,pool store,swimming pool equipment store,swimming pool installation store,swimming pool maintenance store,swimming pool supply shop"},"shop/tailor":{name:"Tailor",terms:"clothes,suit"},"shop/tattoo":{name:"Tattoo Parlor",terms:"ink"},"shop/tea":{name:"Tea Store",terms:""},"shop/telecommunication":{name:"Telecom Retail Store",terms:"communication,internet service provider,isp,network,telephone,voice"},"shop/ticket":{name:"Ticket Seller",terms:"box office"},"shop/tiles":{name:"Tile Shop",terms:""},"shop/tobacco":{name:"Tobacco Shop",terms:"cigarettes,cigars"},"shop/tool_hire":{name:"Tool Rental",terms:""},"shop/toys":{name:"Toy Store",terms:"games"},"shop/trade":{name:"Trade Shop",terms:""},"shop/travel_agency":{name:"Travel Agency",terms:"cruises,flights,hotels,tickets,travel packages"},"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:""},"telecom/data_center":{name:"Data Center",terms:"computer systems storage,information technology,server farm,the cloud,telecommunications"},"tourism/alpine_hut":{name:"Alpine Hut",terms:"cabin,climbing hut,lodge,lodging,overnight accommodations,wilderness hut"},"tourism/apartment":{name:"Guest Apartment / Condo",terms:"bnb,holiday rental,lodging,overnight accommodations,vacation rental"},"tourism/aquarium":{name:"Aquarium",terms:"fish,sea,water"},"tourism/artwork":{name:"Artwork",terms:"mural,sculpture,statue"},"tourism/artwork/bust":{name:"Bust",terms:"figure"},"tourism/artwork/graffiti":{name:"Graffiti",terms:"Street Artwork,Guerilla Artwork,Graffiti Artwork"},"tourism/artwork/installation":{name:"Art Installation",terms:"interactive art,intervention art,modern art"},"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_pitch":{name:"Camp Pitch",terms:"tent,rv"},"tourism/camp_site":{name:"Campground",terms:"caravans,camp ground,camp pitch,camp site,campers,campground,campsite,mobile homes,recreational vehicles,rv,tenting"},"tourism/camp_site/backcountry":{name:"Backcountry Camping Area",terms:"alpine camping,backpacking site,backwoods camping,camp ground,camp pitch,camp site,campground,campsite,informal camping,primitive camping"},"tourism/camp_site/group_only":{name:"Group Camping Area",terms:"camp ground,camp pitch,camp site,campground,campsite,scout camping,youth camping"},"tourism/caravan_site":{name:"RV Park",terms:"Motor Home,Camper"},"tourism/chalet":{name:"Holiday Cottage",terms:"chalet,holiday cabin,holiday cottage,holiday home,lodge,lodging,overnight accommodations,vacation cabin,vacation home"},"tourism/gallery":{name:"Art Gallery",terms:"art*,exhibit*,paint*,photo*,sculpt*"},"tourism/guest_house":{name:"Guest House",terms:"b & b,b and b,B&B,Bed and Breakfast,bnb,lodging,overnight accommodations"},"tourism/hostel":{name:"Hostel",terms:"bunk beds,dormitories,dorms,lodging,overnight accommodations"},"tourism/hotel":{name:"Hotel",terms:"concierge,lodge,lodging,overnight accommodations"},"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/information/route_marker":{name:"Trail Marker",terms:"cairn,painted blaze,route flag,route marker,stone pile,trail blaze,trail post,way marker"},"tourism/information/terminal":{name:"Information Terminal",terms:""},"tourism/motel":{name:"Motel",terms:"lodging,motor hotel,overnight accommodations"},"tourism/museum":{name:"Museum",terms:"art*,exhibit*,gallery,foundation,hall,institution,paint*,photo*,sculpt*"},"tourism/museum/history":{name:"History Museum",terms:"artifacts,dioramas,exhibits,exhibitions,foundation,hall,institution"},"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:"alpine hut,cabin,backcountry hut,bothy,lodge,lodging,overnight accommodations,sleeping shelter,wilderness hut"},"tourism/zoo":{name:"Zoo",terms:"animal"},"tourism/zoo/petting":{name:"Petting Zoo",terms:"Children's Zoo,Children's Farm,Petting Farm,farm animals"},"tourism/zoo/safari":{name:"Safari Park",terms:"Drive-Through Zoo,Drive-In Zoo"},"tourism/zoo/wildlife":{name:"Wildlife Park",terms:"indigenous animals"},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"},"type/boundary":{name:"Boundary",terms:""},"type/boundary/administrative":{name:"Administrative Boundary",terms:""},"type/connectivity":{name:"Lane Connectivity",terms:""},"type/enforcement":{name:"Enforcement",terms:""},"type/enforcement/maxspeed":{name:"Speed Limit Enforcement",terms:"maxspeed,radar,speed camera"},"type/public_transport/stop_area_group":{name:"Transit Stop Area Group",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/monorail":{name:"Monorail 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:""},"waterway/riverbank":{name:"Riverbank"},"waterway/boatyard":{name:"Boatyard",terms:""},"waterway/canal":{name:"Canal",terms:""},"waterway/canal/lock":{name:"Canal Lock",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/fish_pass":{name:"Fish Pass",terms:"eel ladder,eel pass,fish ladder,fish migration,fish passage,fish siphon,fish steps,fish way,fishladder,fishpass,fishsteps,fishway"},"waterway/fuel":{name:"Marine Fuel Station",terms:"petrol,gas,diesel,boat"},"waterway/lock_gate":{name:"Lock Gate",terms:"canal"},"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/tidal_channel":{name:"Tidal Channel",terms:"coastal,pill,intertidal,mangroves,marine,salt marsh,tidal creek,tidal flat,tidal inlet,waterway"},"waterway/water_point":{name:"Marine Drinking Water",terms:"water faucet,water point,water tap,water source,water spigot"},"waterway/waterfall":{name:"Waterfall",terms:"fall"},"waterway/weir":{name:"Weir",terms:"low-head dam,low-rise dam,wier"}}},imagery:{AGIV:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Flanders most recent aerial imagery"},AGIV10cm:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Flanders 2013-2015 aerial imagery 10cm"},AGIVFlandersGRB:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Flanders GRB"},AIV_DHMV_II_HILL_25cm:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Digitaal Hoogtemodel Vlaanderen II, multidirectionale hillshade 0,25 m"},AIV_DHMV_II_SVF_25cm:{attribution:{text:"© agentschap Informatie Vlaanderen"},name:"AIV Digitaal Hoogtemodel Vlaanderen II, Skyview factor 0,25 m"},Bing:{description:"Satellite and aerial imagery.",name:"Bing aerial imagery"},EOXAT2018CLOUDLESS:{attribution:{text:"Sentinel-2 cloudless - https://s2maps.eu by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2017 & 2018)"},description:"Post-processed Sentinel Satellite imagery.",name:"eox.at 2018 cloudless"},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 2.0"},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-TIGER-Roads-2019":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2019"},"USDA-NAIP":{description:"The most recent year of DOQQs from the National Agriculture Imagery Program (NAIP) for each state in the contiguous United States.",name:"National Agriculture Imagery Program"},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"},UrbISOrtho2019:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2019"},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"},"basemap.at-overlay":{attribution:{text:"basemap.at"},description:"Annotation overlay provided by basemap.at.",name:"basemap.at Overlay"},"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"},"gothenburg-citymap":{attribution:{text:"© Gothenburg municipality, CC0"},description:"The city map is an overview map that describes Gothenburg. It contains general information about land, communications, hydrography, buildings, address numbers and street names, administrative division and other orientation text.",name:"Gothenburg City map"},"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_seamlessphoto":{attribution:{text:"GSI Japan seamless photo"},description:"Japan GSI seamlessphoto Imagery. The collection of latest imageries of GSI ortho, airphoto, post disaster and others.",name:"Japan GSI seamlessphoto 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 2016, 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:{"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!"},"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."},"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!"},"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."},"Galicia-Telegram":{name:"OpenStreetMap Galicia Telegram",description:"OpenStreetMap Telegram for Galicia"},"Galicia-Twitter":{name:"OpenStreetMap Galicia Twitter",description:"Follow us on Twitter at {url}"},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!"},"MapColabora-mailinglist":{name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Mailing list"},"MapColabora-meetup":{name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Meetup page"},"MapColabora-twitter":{name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Twitter Account"},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."},MappingWR:{name:"MappingWR",description:"Making low carbon routes around Waterloo Region easy to find."},"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."},"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."},"Maptime-Oceania-Slack":{name:"Maptime Oceania Slack",description:"Sign up at {signupUrl}"},"MaptimeHRVA-twitter":{name:"MaptimeHRVA Twitter",description:"Follow us on Twitter at {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."},"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-Asia-mailinglist":{name:"OpenStreetMap Asia Mailinglist",description:"Talk-asia is the official Mailinglist for Asian Community"},"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!",events:{sotmasia2019:{name:"State of the Map Asia 2019",description:"Join the 2019 OpenStreetMap region-wide event at State of the Map Asia in Dhaka",where:"Krishibid Institution Bangladesh (KIB), Dhaka, Bangladesh"}}},"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!"},"OSM-BiH-telegram":{name:"OpenStreetMap BiH Telegram",description:"A Telegram group for the OSM Bosnia and Herzegovina community: {url}"},"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-CA-Slack":{name:"OSM-CA Slack",description:"All are welcome! Sign up at {signupUrl}."},"OSM-CA-mailinglist":{name:"OSM-CA mailing list",description:"A mailing list to discuss OpenStreetMap in Canada."},"OSM-CA-telegram":{name:"@osmca on Telegram",description:"OpenStreetMap Canada Telegram chat"},"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}"},"OSM-CN-telegram":{name:"OpenStreetMap China Telegram",description:"A Telegram group for the OSM Chinese community: {url}"},"OSM-CO":{name:"OpenStreetMap Colombia",description:"News of the OpenStreetMap Colombia community and the OSMCo Foundation"},"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-CU-telegram":{name:"OSM Cuba on Telegram",description:"OpenStreetMap Cuba Telegram chat"},"OSM-CZ-telegram":{name:"OpenStreetMap CZ Telegram",description:"A Telegram group for the OSM Czech community: {url}"},"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-Discord":{name:"OpenStreetMap Discord",description:"Get in touch with other mappers via Discord"},"OSM-EC-telegram":{name:"OSM Ecuador on Telegram",description:"OpenStreetMap Ecuador Telegram chat"},"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-Facebook":{name:"OpenStreetMap on Facebook",description:"Like us on Facebook for news and updates about OpenStreetMap."},"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-IRC":{name:"OpenStreetMap IRC",description:"Join #osm on irc.oftc.net (port 6667)"},"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-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-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!"},"OSM-Japan-telegram":{name:"OpenStreetMap Japan Telegram",description:"A Telegram group for the OSM Japan community: {url}"},"OSM-Kerala-facebook":{name:"OpenStreetMap Kerala - Participatory neighborhood mapping",description:"Improve OpenStreetMap in Kerala",extendedDescription:"Mapping in Kerala ? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"OSM-Korea-mailinglist":{name:"OpenStreetMap Korea Mailinglist",description:"Talk-ko is an Official Mailinglist for the Communities to dicuss matters about Korea"},"OSM-Korea-telegram":{name:"OSM Korea Telegram",description:"Unofficial Group for OpenStreetMap contributors, communities, and users in Korea to share and discuss."},"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-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-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-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-Ottawa-meetup":{name:"OpenStreetMap Ottawa",description:"Mappers and OpenStreetMap users in the Ottawa area"},"OSM-PE":{name:"OpenStreetMap Peru",description:"News and resources for the OpenStreetMap Peru community"},"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-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-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"},"OSM-PY-telegram":{name:"OSM Paraguay on Telegram",description:"OpenStreetMap Paraguay Telegram chat"},"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-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-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-RU-forum":{name:"OpenStreetMap RU forum",description:"OpenStreetMap Russia web forum"},"OSM-RU-telegram":{name:"OpenStreetMap RU telegram",description:"OpenStreetMap Russia telegram chat"},"OSM-Reddit":{name:"OpenStreetMap on Reddit",description:"/r/openstreetmap/ is a great place to learn more about OpenStreetMap.  Ask us anything!"},"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."},"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-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"},"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-TW-telegram":{name:"OpenStreetMap Taiwan Telegram",description:"A Telegram group for the OSM Taiwan community: {url}"},"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-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}"},"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}"},"OSM-US-Slack":{name:"OpenStreetMap US Slack",description:"All are welcome! Sign up at {signupUrl}"},"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-Vancouver-meetup":{name:"OpenStreetMap Vancouver",description:"Mappers and OpenStreetMap users in the Vancouver, BC area"},"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."},"OSM-br-discord":{name:"OpenStreetMap Brasil Discord",description:"Join the OpenStreetMap Brasil community on Discord"},"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}"},"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-india-mailinglist":{name:"OpenStreetMap India Mailinglist",description:"Talk-in is the official Mailinglist for Indian Community"},"OSM-india-twitter":{name:"OpenStreetMap India Twitter",description:"We are just a tweet away: {url}"},"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-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!"},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:{sotm2020:{name:"State of the Map 2020",description:"Join us for 3 days in Cape Town, South Africa for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.",where:"Cape Town, South Africa"}}},"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 =)"},"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}"},"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!"},"South-Tyrol-Mailing-List":{name:"OpenStreetMap mailing list for South Tyrol",description:"OpenStreetMap Italy regional talk list for South Tyrol"},"Trentino-Mailing-List":{name:"OpenStreetMap mailing list for Trentino",description:"OpenStreetMap Italy regional talk list for Trentino"},"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!"},"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"},"al-twitter":{name:"OpenStreetMap Albania Twitter",description:"Follow us on Twitter at {url}"},"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}"},"be-chapter":{name:"OpenStreetMap Belgium Local Chapter",description:"We help grow and improve OpenStreetMap in Belgium.",extendedDescription:"If you want to help to improve and grow the mapping community in Belgium, to make even more people crazy about mapping, OpenStreetMap Belgium is the right place for you!"},"be-facebook":{name:"OpenStreetMap BE Facebook 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"},"bg-forum":{name:"OpenStreetMap Bulgaria Forum",description:"Forum of OpenStreetMap community in Bulgaria"},"bg-wiki":{name:"OpenStreetMap Wikiproject Bulgaria",description:"Wikiproject page for Bulgaria"},"bi-vc-cvl_wiki":{name:"OSMers BI-VC-CVL",description:"Mappers of northern Piedmont",extendedDescription:"In addition to the monthly meetings, we also have a WhatsApp group."},"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"},byosm:{name:"OpenStreetMap Belarus",description:"OpenStreetMap Belarus telegram chat"},"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."},"ch-irc":{name:"OpenStreetMap Switzerland IRC",description:"Join #osm-ch on irc.oftc.net (port 6667)"},"ch-mailinglist":{name:"Openstreetmap Schweiz/Suisse/Svizzera/Svizra Mailing List",description:"Mailing list for Switzerland"},"ch-twitter":{name:"OpenStreetMap Switzerland Twitter",description:"Follow us on Twitter: {url}"},"cuneo-telegram":{name:"OpenStreetMap Cuneo Mappers",description:"OpenStreetMap Cuneo Telegram chat"},"czech-community":{name:"Czech OSM community",description:"Map portal, website and contacts on OSM members in Czechia"},"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-hamburg-telegram":{name:"OSM Hamburg on Telegram",description:"OpenStreetMap Hamburg Telegram chat: {url}"},"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-matrix":{name:"OpenStreetMap Germany Matrix",description:"Join #osm-de:matrix.org at https://riot.im/app/#/room/%23osm-de:matrix.org"},"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}"},"de-viersen-meetup":{name:"OpenStreetMap Viersen Meetup",description:"OSM community and users meetup Kreis Viersen and Mönchengladbach"},"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"},"es-twitter":{name:"OpenStreetMap España Twitter",description:"Follow us on Twitter at {url}"},"et-telegram":{name:"@OpenStreetMapEthiopia on Telegram",description:"OpenStreetMap Ethiopia Telegram chat"},"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-chapter":{name:"OpenStreetMap France Local Chapter",description:"We help grow and improve OpenStreetMap in France."},"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-telegram":{name:"OpenStreetMap France on Telegram",description:"A Telegram group for the OSM France community: {url}"},"fr-twitter":{name:"OpenStreetMap France on Twitter",description:"OpenStreetMap France on Twitter: {url}"},"galicia-wiki":{name:"OpenStreetMap Wikiproject Galicia",description:"Everything you need to know about mapping in Galicia: {url}"},"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"},"gb-mailinglist":{name:"Talk-gb Mailing List",description:"Talk-gb is the main communication forum list for the UK (including Northern Ireland) OSM community"},geogeeks_perth_meetup:{name:"GeoGeeks Perth Meetup",description:"Perth-based meetup group for people interested in mapping, geospatial data, and open source. We'll be working on anything that involves a sense of place."},"guatemala-telegram":{name:"OSM Guatemala on Telegram",description:"OpenStreetMap Guatemala Telegram chat"},"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"},"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-matrix":{name:"OpenStreetMap HU matrix room",description:"OpenStreetMap Hungary matrix chat",extendedDescription:"OpenStreetMap chat on map topics. One of the OSM community support forums."},"hu-meetup":{name:"OpenStreetMap Hungary Meetup",description:"The platform for organizing meetups in Hungary"},"il-telegram":{name:"OSM Israel on Telegram",description:"A Telegram group for the OpenStreetMap community in Israel: {url}"},"ireland-chapter":{name:"OpenStreetMap Ireland Local Chapter",description:"We help grow and improve OpenStreetMap in Ireland.",extendedDescription:"OpenStreetMap Ireland provides an advocate voice for the OpenStreetMap project on the island of Ireland, in addition to interacting with other open initiatives."},"ireland-facebook":{name:"OpenStreetMap Ireland Facebook group",description:"OpenStreetMap Ireland Facebook page"},"ireland-irc":{name:"OpenStreetMap Ireland IRC",description:"Join #osm-ie on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-ie on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question"},"ireland-mailinglist":{name:"Talk-ie Mailing List",description:"Talk-ie is the mailing list for the Irish OSM community"},"ireland-telegram":{name:"OSM Ireland on Telegram",description:"OpenStreetMap Ireland Telegram chat"},"ireland-twitter":{name:"OpenStreetMap IE on Twitter",description:"OpenStreetMap IE on Twitter: {url}"},"is-chapter":{name:"OpenStreetMap Iceland Local Chapter",description:"We help grow and improve OpenStreetMap in Iceland."},"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 Twitter",description:"Twitter of OpenStreetMap in Iceland"},"it-chapter":{name:"OpenStreetMap Italy Local Chapter",description:"We help grow and improve OpenStreetMap in Italy."},"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}"},"kazakhstan-telegram":{name:"OSM Kazakhstan on Telegram",description:"OpenStreetMap Kazakhstan Telegram chat"},"kosovo-matrix":{name:"OpenStreetMap Kosovo on Matrix (bridged with the one in Telegram)",description:"Semi-official all-Kosovo public group. We welcome all mappers from anywhere in any language."},"kosovo-telegram":{name:"OpenStreetMap Kosovo on Telegram",description:"Semi-official all-Kosovo Telegram public group. We welcome all mappers from anywhere in any language."},"latam-facebook":{name:"OpenStreetMap Latin America Facebook",description:"Mappers and OpenStreetMap on Facebook in Latin America"},"latam-irc":{name:"OpenStreetMap Latin America IRC",description:"Join #osm-latam on irc.oftc.net (port 6667)"},"latam-mailinglist":{name:"Talk-latam Mailing List",description:"Talk-latam is the official mailing list for the Latinamerican OpenStreetMap community"},"latam-matrix":{name:"OpenStreetMap Latin America Matrix",description:"Chat with other members of the Latinamerican OSM community, it is bridged with the Telegram chat"},"latam-telegram":{name:"OpenStreetMap Latin America Telegram",description:"Chat with other members of the Latinamerican OSM community, it is bridged with the Matrix chat"},"latam-twitter":{name:"OpenStreetMap Latin America Twitter",description:"OpenStreetMap Latin America on Twitter: {url}"},"latam-wiki":{name:"OpenStreetMap Wikiproject Latin America",description:"Everything you need to know about mapping in Latin America"},"lu-mailinglist":{name:"Talk-lu Mailing List",description:"Official mailing list for the Luxembourgish OSM community"},"mailinglist-sk-googlegroups":{name:"Slovak mailing list on google groups",description:"Official mailing list for Slovak community"},"map-kibera":{name:"Map Kibera Trust",description:"Map Kibera is a registered organization working in Kenya",extendedDescription:"Map Kibera Trust’s mission is to increase influence and representation of marginalized communities through the creative use of digital tools for action."},"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."},"md-googlegroup":{name:"OSM Moldova Google Group",description:"OpenStreetMap Moldova Google Group"},"md-telegram":{name:"@OSMMoldova on Telegram",description:"OpenStreetMap Moldova Telegram chat"},"ni-facebook":{name:"OpenStreetMap NI Community",description:"Mappers and OpenStreetMap on Facebook in Nicaragua"},"ni-mailinglist":{name:"Talk-ni Mailing List",description:"Talk-ni is the official mailing list for the Nicaraguan OSM community"},"ni-telegram":{name:"OSM Nicaragua on Telegram",description:"OpenStreetMap Nicaragua Telegram chat"},"ni-twitter":{name:"OpenStreetMap Nicaragua Twitter",description:"OSM Nicaragua on Twitter: @osm_ni"},"nl-forum":{name:"Netherlands OpenStreetMap forum",description:"OpenStreetMap Netherlands web forum"},"nl-telegram":{name:"Netherlands OpenStreetMap Telegram",description:"A Telegram group for the OSM Netherlands community: {url}"},"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-afghanistan-facebook":{name:"OpenStreetMap Afghanistan",description:"Improve OpenStreetMap in Afghanistan"},"osm-africa-telegram":{name:"OpenStreetMap Africa Telegram",description:"OpenStreetMap Telegram for Africa"},"osm-asia-telegram":{name:"OpenStreetMap Asia Telegram",description:"Join our family: {url}"},"osm-at":{name:"OpenStreetMap Austria",description:"The platform for information on OpenStreetMap in Austria"},"osm-ch":{name:"OpenStreetMap Switzerland",description:"The platform for information on OpenStreetMap in Switzerland"},"osm-de":{name:"OpenStreetMap Germany",description:"The platform for information on OpenStreetMap in Germany"},"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-telegram":{name:"OpenStreetMap Ghana Telegram",description:"OpenStreetMap Ghana community on Telegram"},"osm-gh-twitter":{name:"OpenStreetMap Ghana on Twitter",description:"Follow us on Twitter: {url}"},"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-telegram":{name:"OpenStreetMap India Telegram",description:"Join our family: {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-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-kenya":{name:"OSM Kenya",description:"OSM Kenya is a community of OSM contributors and users",extendedDescription:"OSM is a local community for individuals interested in OpenStreetMap including organizations, developers, and YouthMappers chapters in the country."},"osm-kerala-telegram":{name:"OpenStreetMap Kerala Telegram",description:"We map Kerala together. Join our telegram group. {url}"},"osm-kerala-wiki":{name:"OpenStreetMap Kerala",description:"Want to know more about Kerala Mapping: {url}"},"osm-mg-facebook":{name:"OpenStreetMap Madagascar Facebook Group",description:"Malagasy Facebook group for people interested in OpenStreetMap."},"osm-ni":{name:"MapaNica.net",description:"Provide OSM services and information for the local community in Nicaragua"},"osm-se":{name:"OpenStreetMap.se",description:"Provide OSM services and information for the local community in Sweden"},"osm-za-twitter":{name:"OpenStreetMap South Africa on Twitter",description:"Follow us on Twitter: {url}"},"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!"},"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"},"panama-telegram":{name:"OSM Panama on Telegram",description:"OpenStreetMap Panama Telegram chat"},"pt-mailinglist":{name:"Talk-pt Mailing List",description:"Talk-pt is the official mailing list for the Portuguese OSM community"},"pt-telegram":{name:"OpenStreetMap Portugal on Telegram",description:"Telegram Group of the Portuguese OpenStreetMap community {url}"},"romania-facebook":{name:"OpenStreetMap Romania Facebook group",description:"Group for mappers and users of OpenStreetMap in Romania"},"romania-telegram":{name:"@OSMRomania on Telegram",description:"OpenStreetMap Romania Telegram chat"},"sa-telegram":{name:"OSM Saudi Arabia on Telegram",description:"A Telegram group for the OpenStreetMap community in Saudi Arabia: {url}"},"scotland-twitter":{name:"OpenStreetMap Alba on Twitter",description:"OpenStreetMap Alba on Twitter: {url}"},"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-telegram":{name:"OSM Sweden on Telegram",description:"OpenStreetMap Sweden Telegram chat"},"se-twitter":{name:"OpenStreetMap Sweden on Twitter",description:"Follow us on Twitter: {url}"},"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"},"si-twitter":{name:"OpenStreetMap Slovenia Twitter",description:"Follow OpenStreetMap Slovenia On Twitter: {url}"},"sk-facebook":{name:"Freemap.sk Slovakia community Facebook page",description:"Freemap.sk Slovakia community Facebook page"},"sk-freemap":{name:"OpenStreetMap Website Freemap Slovakia",description:"OpenStreetMap map website with tools in Slovakia and surrounding regions"},"sk-freemap-wiki":{name:"OpenStreetMap Freemap Slovakia Wiki",description:"OpenStreetMap wiki for Slovak mappers and community"},"sk-twitter":{name:"OpenStreetMap Freemap Slovensko on Twitter",description:"OpenStreetMap Freemap Slovensko on Twitter: {url}"},"talk-au":{name:"Talk-au Mailing List",description:"Place for Aussie mappers to chat"},"talk-cz-mailinglist":{name:"Czech mailing list (talk-cz)",description:"Talk-cz is the official mailing list for Czech community"},"talk-gh":{name:"Talk-gh Mailing List",description:"Talk-gh is the official mailing list for Ghana OSM community."},"talk-it-lazio":{name:"OpenStreetMap IT Lazio",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Rome and Lazio area."},"talk-it-piemonte_mailinglist":{name:"OSM Italy regional talk list for Piemonte",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Piemonte region."},"talk-mg":{name:"Talk-mg Mailing List",description:"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss."},"talk-nz":{name:"Talk-nz Mailing List",description:"New Zealand's OSM community talk"},"talk-za":{name:"Talk-za Mailing List",description:"Talk-za is the official mailing list for South African OSM community."},"ua-facebook":{name:"OpenStreetMap Ukraine Facebook group",description:"Join the OpenStreetMap Ukraine community on Facebook"},"ua-forum":{name:"OpenStreetMap Ukraine Forum",description:"Forum of OpenStreetMap community in Ukraine"},"ua-github":{name:"OpenStreetMap Ukraine on GitHub",description:"OpenStreetMap Ukraine GitHub"},"ua-osm":{name:"OpenStreetMap Website Ukraine",description:"OpenStreetMap website in Ukraine"},"ua-slack":{name:"OpenStreetMap Ukraine Slack",description:"Join the OpenStreetMap Ukraine community on Slack"},"ua-telegram":{name:"@osmUA on Telegram",description:"OpenStreetMap Ukraine Telegram chat"},"ua-twitter":{name:"OpenStreetMap UA Twitter",description:"OpenStreetMap Ukraine on Twitter: {url}"},"uk-localchapter":{name:"OpenStreetMap UK",description:"The official Local Chapter for the UK (including Northern Ireland).",extendedDescription:"We support OpenStreetMap by holding events, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap UK here: {signupUrl}"},"uk-london-twitter":{name:"OpenStreetMap London on Twitter",description:"OpenStreetMap London on Twitter: {url}"},"uk-twitter":{name:"OpenStreetMap UK on Twitter",description:"OpenStreetMap UK on Twitter: {url}"},"us-ma-mailinglist":{name:"Talk-us-massachusetts Mailing List",description:"Email mailing list for the Massachusetts OSM community"},"uy-forum":{name:"OpenStreetMap UY forum",description:"OpenStreetMap Uruguay web forum"},"uy-irc":{name:"OpenStreetMap Uruguay on IRC",description:"Join #osmuruguay on irc.freenode.org (port 6667)",extendedDescription:"Join #osmuruguay on irc.freenode.org"},"uy-mailinglist":{name:"Talk-uy Mailing List",description:"Talk-uy is the official mailing list for the Uruguayan OSM community"},"uzbekistan-telegram":{name:"OSM Uzbekistan on Telegram",description:"OpenStreetMap Uzbekistan Telegram chat"},"ve-forum":{name:"OpenStreetMap VE Forum",description:"OpenStreetMap Venezuela web forum"},"ve-mailinglist":{name:"Talk-ve Mailing List",description:"Talk-ve is the official mailing list for the Venezuelan OSM community"},"ve-telegram":{name:"OpenStreetMap Venezuela Telegram",description:"Join the OpenStreetMap Venezuela community on Telegram"},"ym-AASTU":{name:"AASTU Youth Mappers",description:"YouthMappers chapter at Addis Ababa Science and Technology University",extendedDescription:"The Association of Geomatics Engineering Students (AGES), aims at promoting GIS products and services as well as training students on the use of the same. It not only promotes socialization between the students and practicing professionals, but also provides a platform for exchanging new ideas for holding new GIS and surveying events and training at the university."},"ym-Abia-State-University":{name:"AbsuMappersTeam",description:"YouthMappers chapter at Abia State University",extendedDescription:"AbsuMappersTeam is  voluntary team of map enthusiast ,using openstreetmap,GIS and other open source geospatial techno;ogy to solve problems.It is a dedicated for disaster response using OpenStreetMap.It is a  professional mentoring  and empowerment platform for  those with passion for GIS and Mapping.It is a community of  volunteers for geospatial data creation,field data collection and mapping.The team was co-founded by Victor N.Sunday(the Team mentor) and Professor J.U.Ogbonna ,the team coordinator and faculty Advisor. AbsuMapperTeam is an affiliate of UniiqueMappersTeam-Port Harcourt.The team stands to support sustainable development using geospatial  technology"},"ym-African-Methodist-Episcopal-University":{name:"YouthMappers-AMEU",description:"YouthMappers chapter at African Methodist Episcopal University"},"ym-Ahmadu-Bello-University":{name:"ABU Geomappers",description:"YouthMappers chapter at Ahmadu Bello University",extendedDescription:"We are a group of Data driven Humanitarian mappers, who are dedicated to rendering humanitarian service in response to disaster and mitigation. We are glad to contribute our expertise and knowledge through mapping, and helping to spread #OpenEvangelism through Training, and collaboration."},"ym-Ardhi-University":{name:"ARU Mapper",description:"YouthMappers chapter at Ardhi University",extendedDescription:"As upcoming geospatial data consultants we seek to educate and provide advice to the society on how they can use spatial data not only as a form of location but a tool of decision making and predict different hazardous and climatical changes which may harm them or future genarations."},"ym-Asian-University-for-Women":{name:"YouthMappers at AUW",description:"YouthMappers chapter at Asian University for Women",extendedDescription:"The Asian University for Women seeks to graduate women who will be skilled and innovative professionals, service-oriented leaders in the businesses and communities in which they will work and live, and promoters of intercultural understanding and sustainable human and economic development in Asia and throughout the world."},"ym-Ball-State-University":{name:"Gamma Theta Upsilon- Iota Omega Chapter",description:"YouthMappers chapter at Ball State University",extendedDescription:"Our chapter is a very active one. We primarily focus on community events, fundraising, and field trips. We are currently looking to develop more mapping-related activities to draw in other students from campus who may be interested in contributing."},"ym-Busitema-University":{name:"Good Mappers",description:"YouthMappers chapter at Busitema University",extendedDescription:"Good mappers is a team of students in Busitema University. Its main objective is to create a community of experienced mappers who can contribute to the world map."},"ym-California-University-of-Pennsylvania":{name:"CalU PA GIS Club",description:"YouthMappers chapter at California University of Pennsylvania",extendedDescription:"GIS Students at Cal U learn to apply spatial theory to the real world. The university degree program focuses on geography as well as utilizing GIS in emergency management."},"ym-Central-Washington-University":{name:"Geography Club",description:"YouthMappers chapter at Central Washington University",extendedDescription:"Our goal teaming up with Youthmappers is to bring relief to areas that are in need of humanitarian mapping. By doing so, we are serving our fellow brothers and sisters around the world as well as furthering our own cartography skills."},"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny":{name:"YouthMappers CURAT",description:"YouthMappers chapter at Centre Universitaire de Recherche et d'Application en Télédétection (CURAT) de l'Université Felix Houphouet Boigny",extendedDescription:"Our chapter aim is to promote the use of collaborative free mapping and the use of openstreetmap data in the field of research and their application in the implementation of tools for decision-making. Help students produce their own data of their research."},"ym-Clemson-University":{name:"Clemson Mappers",description:"YouthMappers chapter at Clemson University",extendedDescription:"Students in Clemson are supported by the Center for Geospatial Technologies, a community of interdisciplinary geospatial science practitioners supporting research, teaching, and outreach activities using technologies that enable the collection, analysis, and application of geospatial data. Students integrate geospatial technologies within their scholarly activities across all disciplines and build connections throughout the world."},"ym-College-of-William-and-Mary":{name:"All over the map!",description:"YouthMappers chapter at College of William and Mary",extendedDescription:"The students who are all over the map are supported by the Center for Geospatial Analysis, a group integrating GIS across the curriculum and providing student and faculty with hardware, software, and expertise.  Students of all backgrounds utilize GIS across campus, including environmental science and policy, geology, history, business, sociology, biology, anthropology, public policy, and marine sciences."},"ym-Cornell-University":{name:"Mapping Society",description:"YouthMappers chapter at Cornell University",extendedDescription:"Cornell students and faculty use open data and open source software to address challenges at local, national, and global scales. In doing so, we advance our academic and personal goals of developing our own skills around GIS and spatial literacy."},"ym-Cuttington-University":{name:"Cuttington University YouthMappers",description:"YouthMappers chapter at Cuttington University",extendedDescription:"The YouthMappers at Cuttington University, Suakoko, and Bong County comprised of Students from three different departments; namely, the Department of Natural Resources Management “DONRM”, Department of Environmental Sciences, and the Department of Natural Sciences. Since the establishment of the Chapter in February 2017, the overall membership is  20 students, with each department containing 5 students."},"ym-Dedan-Kimathi-University-of-Technology":{name:"GDEV",description:"YouthMappers chapter at Dedan Kimathi University of Technology",extendedDescription:"GDEV is a group of enthusiastic GIS group at DeKUT that aims at helping students share, engage and learn from each other in matters geospatial"},"ym-Dhaka-College":{name:"YouthMappers Daka College",description:"YouthMappers chapter at Dhaka College",extendedDescription:"YouthMappers DhakaCollege is an approach by students to help mapping vulnerable areas of the world as a part of Humanitarian Action. YouthMappers  gives the opportunity to the students for helping people and using mapping for humanitarian purposes. This open geographic data can be used for educational, navigational and other humanitarian purposes. Happy mapping."},"ym-Dhaka-University":{name:"Openstreetmap YouthMappers",description:"YouthMappers chapter at Dhaka University",extendedDescription:"It's a great privilege for the students of University of Dhaka to map for humanitarian purposes. Our chapter gives the opportunity to the students for helping people and use mapping for humanitarian purposes."},"ym-Eastern-University":{name:"YouthMappers at Eastern University",description:"YouthMappers chapter at Eastern University",extendedDescription:"YouthMappers at Eastern University, Bangladesh has been formed with a view to assisting people during humanitarian crisis. The students, likewise other mappers of the world, are promised to assist people in using the map for educational, navigational and other humanitarian purposes."},"ym-Far-Eastern-University-Institute-of-Technology":{name:"Junior Philippines Computer Society",description:"YouthMappers chapter at Far Eastern University -Institute of Technology",extendedDescription:"FEU has been recognized as one of the leading universities in the Philippines. Its mission centers on producing graduates who have contributed to the advancement of the country. The university continuously challenges itself to raise the bar of excellence to achieve a top-tier status not only in the Philippines but also in the South East Asian region"},"ym-Federal-School-of-Surveys":{name:"OyoMappersTeam (OMT) Oyo",description:"YouthMappers chapter at Federal School of Surveys"},"ym-Federal-University-of-Technology-Akure":{name:"YouthMappers Futa Space Club",description:"YouthMappers chapter at Federal University of Technology, Akure",extendedDescription:"Our mission is to raise the next generation of Space Leaders. Activities include research and capacity building in Remote Sensing, GIS, Climate Change, Astronomy, Cosmology, Space Engineering, Global Navigation, Robotics and Space Education."},"ym-Fourah-Bay-College":{name:"Student's Geographical Association",description:"YouthMappers chapter at Fourah Bay College",extendedDescription:"The Student's Geographical Association- YouthMappers is an association of Fourah Bay College Students with the common goals of mapping out vulnerable places in Sierra Leone and the world at large for relief and other beneficial purposes,carry out Research and other educative endeavors. The chapter consists of young people with great ideas, development oriented with the capacity to relate with each other, comprehend and implement sustainable developmental projects as a team."},"ym-General-Lansana-Conte-University":{name:"YouthMappers General Lansana Conte University",description:"YouthMappers chapter at General Lansana Conte University",extendedDescription:"The YouthMappers of the University General Lansana Conté is a non profit community willing to contribute to Map Guinea and others part of the world. We are promoting the use of GIS and Open data to build decision support tools. We also work to build capacities among the students and local communities."},"ym-George-Mason-University":{name:"Mason Mappers",description:"YouthMappers chapter at George Mason University",extendedDescription:"Mason Mappers Student Society is a humanitarian mapping student organization in the George Mason University GGS Department, and its goal is to promote education and knowledge in geo-technologies, geo-info science, to foster good global stewardship and engage in professional development while building a positive, interactive geo-community, as well as shaping students into leaders of tomorrow."},"ym-Grand-Gedeh-County-Community-College":{name:"YouthMappers at Grand Gedeh County Community College",description:"YouthMappers chapter at Grand Gedeh County Community College",extendedDescription:"The Youth Mappers of GGCCC sole intent is to put  places in and around Liberia  that are not on the map. We gather youths from the college within the Grand Gedeh Community College to make it their duties to unite and bring these places to the spot light geographically."},"ym-Gujarat-University":{name:"CCIM at Ahmedabad",description:"YouthMappers chapter at Gujarat University"},"ym-Gulu-University":{name:"CSGU Mappers",description:"YouthMappers chapter at Gulu University",extendedDescription:"The CSGU Mappers are the Computing Society at Gulu University. This chapter is creative, passionate, innovative and ready to map Uganda and the world at large, beyond other people's imagination."},"ym-Heidelberg-University":{name:"disastermappers heidelberg",description:"YouthMappers chapter at Heidelberg University",extendedDescription:"Disastermappers Heidelberg was founded in 2014 as a student initiative to build a platform for exchange between students, researchers and humanitarian actors. Disastermappers are a member of Missing Maps and are organizing mapathons, workshops and webinars in Heidelberg and beyond and support HOT and Missing Maps through research and applications."},"ym-Ignatius-Ajuru-University-of-Education":{name:"IgnatiusMappersTeam (IMT)",description:"YouthMappers chapter at Ignatius Ajuru University of Education",extendedDescription:"We are a YouthMappers Chapter of Ignatius Ajuru University of Education involved in crowdsourced mapping of our environment and remote mapping of resilient communities.We are a team of volunteers using openstreetmap and other open Geospatial source for mapping."},"ym-Indiana-University-of-Pennsylvania":{name:"Geospatial Science Club",description:"YouthMappers chapter at Indiana University of Pennsylvania"},"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri":{name:"YouthMappers at INES Ruhengeri",description:"YouthMappers chapter at Insititue d' Enseignement Superieur de Ruhengeri",extendedDescription:"We are students from Land Administration and Management and Land survey Departments from INES-Ruhengeri. We are engaged in mapping activities that create the changes toward sustainable development in our community."},"ym-Institut-Suprieur-de-Management-Kolda":{name:"Les Femmes Leaders de ISM/Kolda",description:"YouthMappers chapter at Institut Supérieur de Management Kolda",extendedDescription:"Les Femmes Leaders de ISM/Kolda is an all-female mapping group in southern Senegal looking to put Kolda and surrounding villages on the map and better understand how to use OSM."},"ym-Institute-of-Crisis-Management-Studies":{name:"Institute of Crisis Management Studies YouthMappers",description:"YouthMappers chapter at Institute of Crisis Management Studies",extendedDescription:"To develop Crisis Mappers to assist during disaster situations."},"ym-Institute-of-Finance-Management":{name:"IFM mappers",description:"YouthMappers chapter at Institute of Finance Management",extendedDescription:"This is a new  chapter at out institute and we are looking forward to use our financial education that we are receiving here at the campus  and link ig with the environment in order to develop our sustainable environment towards helping the community  with the effects of our environment in a financial ways by converting them into numbers. this is widely explained in ecosystem accounting and environmental accounts"},"ym-Institute-of-Rural-Development-Planning":{name:"Mipango YouthMappers Chapter",description:"YouthMappers chapter at Institute of Rural Development Planning",extendedDescription:"Mipango YouthMappers Chapter was introduced at IRDP on 3rd July, 2017 by Dr.Domitilla Bashemera. The founding members were  300 (190 males and 110 female) Bachelor Degree students, who were registered as members of the Chapter. Gerald Zacharia is the president of the chapter and Juster Lugira is Vice President."},"ym-Institute-of-Rural-Development-Planning-Mwanza":{name:"Youth Mappers Chapter at Institute of Rural Development Planning - Lake Zone Centre",description:"YouthMappers chapter at Institute of Rural Development Planning Mwanza"},"ym-Institute-of-Science-and-Veterinary-Medicine":{name:"YouthMappers ISSMV Dalaba",description:"YouthMappers chapter at Institute of Science and Veterinary Medicine",extendedDescription:"YouthMappers ISSMV Dabala is a non profit organisation working to promote humanitarian mapping and the use of open sources and open data to build decision making tools in Guinea."},"ym-Istanbul-Technical-University":{name:"YouthMappers ITU",description:"YouthMappers chapter at Istanbul Technical University",extendedDescription:"YouthMappers ITU is an interdisciplinary and collaborative student community to promote humanitarian mapping for vulnerable settlements and aims to develop and share strategic and innovative spatial information for the future cities by using geographical information systems and open data."},"ym-Jacksonville-State-University":{name:"JSU Disaster Mapping Team",description:"YouthMappers chapter at Jacksonville State University",extendedDescription:"The JSU Disaster Mapping Team is a program at Jacksonville State University dedicated to assisting disaster response in times of emergencies. This includes tornadoes, severe thunderstorms, floods, etc. The team is intended to be a valuable asset to surrounding counties and a conduit for the JSU Geoscience Department students to apply what they have learned in an academic setting to support emergency services. Our goal is to streamline disaster response and recovery operations while utilizing student skill sets"},"ym-Jahangirnagar-University":{name:"YouthMappers at IRS, Jahangirnagar University",description:"YouthMappers chapter at Jahangirnagar University"},"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology":{name:"Association of Geomatics Engineering Students",description:"YouthMappers chapter at Jomo Kenyatta University of Agriculture and Technology",extendedDescription:"The Association of Geomatics Engineering Students (AGES), aims at promoting GIS products and services as well as training students on the use of the same. It not only promotes socialization between the students and practicing professionals, but also provides a platform for exchanging new ideas for holding new GIS and surveying events and training at the university."},"ym-Kansas-State-University":{name:"Gamma Theta Upsilon: Beta Psi Chapter",description:"YouthMappers chapter at Kansas State University",extendedDescription:"We are the Kansas State University Chapter of Gamma Theta Upsilon, an international geography honor society with affiliation to YouthMappers. We have been active with mapping for OSM and conducted a mapathon called \"Map for Nepal,\" in which we used OpenStreetMap to digitize unmapped areas of Nepal after the earthquake in 2015."},"ym-Karatina-University":{name:"Nature Club Karatina University",description:"YouthMappers chapter at Karatina University",extendedDescription:"This chapter aims to bring together all GIS enthusiasts.They include environment experts, wildlife experts, aquatic and tourism officers, just to mention a few. Its main aim is to provide a platform where students can learn from each other and, in the process, understand how to integrate the GIS skills in their various career paths as well as provide solutions to various environmental related challenges."},"ym-Kathmandu-University":{name:"Geomatics Engineering Society,GES",description:"YouthMappers chapter at Kathmandu University",extendedDescription:"Geomatics Engineering Society (GES) established in 2008 A.D is a departmental club under Department of Civil and Geomatics Engineering (DCGE) at Kathmandu University. GES acts as a platform to develop the skills of students apart from their educational activities by focusing on activities like technical trainings, seminars, talk programs and interaction with experts from related field, sports activities etc."},"ym-Kenyatta-University":{name:"Kenyatta University GIS Club",description:"YouthMappers chapter at Kenyatta University",extendedDescription:"Kenyatta University GIS Club (KUGISC) was founded on 28th October 2016, with more than 200 students and staff from all faculty within campus as members. We are committed to empower members with spatial knowledge, skills and expertise required in understanding the Earth. We help in mapping resources within the university by incorporating geospatial data in their projects as well as fieldwork data collection."},"ym-Khulna-University":{name:"Khulna University YouthMappers",description:"YouthMappers chapter at Khulna University",extendedDescription:"KU students and faculty from multiple disciplines are experienced at creating open data for OSM to address local challenges of development, including food security and other topics."},"ym-Kumi-University":{name:"Ever Last YouthMappers",description:"YouthMappers chapter at Kumi University",extendedDescription:"This energetic group of students organizes within the faculty of Science and Information Technology."},"ym-Kwame-Nkrumah-University-of-Science-and-Technology":{name:"Kwame Nkrumah University of Science and Technology YouthMappers",description:"YouthMappers chapter at Kwame Nkrumah University of Science and Technology"},"ym-Makerere-University":{name:"Geo YouthMappers",description:"YouthMappers chapter at Makerere University",extendedDescription:"Geo YouthMappers is a Makerere University based mapping chapter esteemed to apply the spatial conception to the real world.We have collaborated on various mapping events with OSM. Our main aim is the desire to simplify data and make it readily available mostly for disaster preparedness.\"We map the world and change lives."},"ym-Mbarara-University-of-Science-and-Technology":{name:"MUST Street Mappers",description:"YouthMappers chapter at Mbarara University of Science and Technology",extendedDescription:"MUST Street Mappers is a Youth Mappers chapter at the Mbarara University of Science and Technology that is based on making our country and the world at large a better place through mapping. We base on collected information to notice patterns and data mine to present relevant and beneficial information to society."},"ym-McGill-University":{name:"Open Mapping Group McGill: A Member of the McGill Undergraduate Geography Society",description:"YouthMappers chapter at McGill University",extendedDescription:"The Open Mapping Group McGill: A Member of McGill Undergraduate Geography Society (OMG McGill) aims to connect students with open geospatial data and technologies to enhance resilience, community-building, and learning through mapping–on campus, in Montreal, in Canada, and abroad."},"ym-Miami-University":{name:"Geography and Planning Society",description:"YouthMappers chapter at Miami University",extendedDescription:"GPS at Miami University aims to create a close-knit community of planners and geographers who want to have fun, learn more about careers and higher education in their field, network, and work alongside professionals for real experience."},"ym-Moi-University":{name:"Geography Students Association",description:"YouthMappers chapter at Moi University",extendedDescription:"The Geography Students Association at Moi University (GEOSAMU) explores, discovers and aims at developing the entire world through the young Geo-Spatial analysts.  GEOSAMU is part of the Department of Geography."},"ym-Monroe-Community-College":{name:"MCC Mapping Corps",description:"YouthMappers chapter at Monroe Community College"},"ym-Montgomery-College":{name:"GeoMC",description:"YouthMappers chapter at Montgomery College",extendedDescription:"GeoMC’s mission is to provide students with hands-on experience in applying geospatial tools, collecting data, and project management. Most of our students come with a background in GIS and are geography majors. Our chapter’s members come from diverse backgrounds and we all work together to make a positive impact in the world live in."},"ym-Namibia-University-of-Science-and-Technology":{name:"Geoinformation Technology Student Society",description:"YouthMappers chapter at Namibia University of Science and Technology"},"ym-New-York-University":{name:"NYU mHealth Initiative Mapping Corps",description:"YouthMappers chapter at New York University",extendedDescription:"The NYU mobile health or “mHealth” research initiative focuses on development of systems that link people - usually via their phones - to the places that they live and traverse, and thus supports novel research on the way phones and maps can be leveraged to understand behavioral decision making and ultimately health outcomes."},"ym-Nimba-County-Community-College":{name:"Nimba County Community College Youth Mappers",description:"YouthMappers chapter at Nimba County Community College"},"ym-Njala-University-Freetown-Campus":{name:"Njala Freetown YouthMappers",description:"YouthMappers chapter at Njala University, Freetown Campus",extendedDescription:"We are students of Njala University Freetown Campus, studying Information Technology under the department of Physics and Computer Science. and we are located at Henry Street Freetown, Sierra Leone."},"ym-Njala-University-Njala-Campus":{name:"YouthMappers Njala University, Njala Campus",description:"YouthMappers chapter at Njala University, Njala Campus"},"ym-Ohio-Wesleyan-University":{name:"Environment and Wildlife Club",description:"YouthMappers chapter at Ohio Wesleyan University",extendedDescription:"Environment and Wildlife Club looks at environmental issues on campus, in Delaware, and even nationally! We create campus and community projects, explore and enjoy the outdoors, volunteer, and try to promote environmentalism in every aspect of our lives."},"ym-Oklahoma-State-University":{name:"Geography Club",description:"YouthMappers chapter at Oklahoma State University"},"ym-Open-University-of-Tanzania":{name:"Youth Mappers at Open University of Tanzania",description:"YouthMappers chapter at Open University of Tanzania",extendedDescription:"Youth Mappers at Open University of Tanzania\n\nHad been founded by members and students of Open University of Tanzania in Department of Geography who are mainly need to improve their career and help young community through joint and partnership projects with local community groups such as Mikoko Scout Group (www.msg.or.tz) and start cooperation with international colleges and universities for exchange programs in relation to Geography Studies as some programs prepared by Mikoko Scout Group which will link local university and other universities of the same interest through International Nature & Environmental Youth Camp 2019 (www.campsite.msg.or.tz/nature.html )\n\nOur chapter will soon be recognized as youth network program that will open opportunity for students to study and conduct research studies at a local levels."},"ym-Politecnico-di-Milano":{name:"PoliMappers",description:"YouthMappers chapter at Politecnico di Milano",extendedDescription:"PoliMappers is a volunteer students’ association based at Politecnico di Milano. The mission of the group is to train and motivate the next generation of volunteer mappers and to do mapping using free and open source software within the university as well as primary and secondary schools."},"ym-Queen-Mary-University-of-London":{name:"Queen Mary YouthMappers",description:"YouthMappers chapter at Queen Mary University of London",extendedDescription:"This chapter will be part of the activities of the Queen Mary Geography Society."},"ym-Rajshahi-University-of-Engineering-Technology":{name:"YouthMappers at RUET",description:"YouthMappers chapter at Rajshahi University of Engineering & Technology",extendedDescription:"The \"YouthMappers at RUET\" is a humanitarian mapping group of students of Rajshahi University of Engineering & Technology (RUET) to share, develop and practice the knowledge of GIS.  This group encourages using open source geospatial data and platform to make solution to reach the most vulnerable group of the world."},"ym-SUNY-at-Fredonia":{name:"Geoventurers",description:"YouthMappers chapter at SUNY at Fredonia",extendedDescription:"GeoVenturers is a group of students joining together across a number of majors on our campus that see geospatial technologies as a tool to serve others and to bring people together. Mentoring for the group brings in science education from the department of curriculum and instruction. We hope that we can bring our skills to play in helping make people's lives better."},"ym-Sacred-Heart-Junior-College":{name:"Youth Mappers at Sacred Heart Junior College",description:"YouthMappers chapter at Sacred Heart Junior College"},"ym-Sherubtse-College":{name:"Geographical Society",description:"YouthMappers chapter at Sherubtse College",extendedDescription:"The Geographical Society, in the Department of Geography & Planning, Sherubtse College, Royal University of Bhutan, with support from the Center for Climate Change and Spatial Information, has made several efforts to create awareness and address important issues at the local and national level. We now join hands with the international student-centered YouthMappers network on \"Mapping for Resilience\" and contributing to a global 'Happiness'!"},"ym-Sokoine-University-of-Agriculture":{name:"SMCoSE YouthMappers",description:"YouthMappers chapter at Sokoine University of Agriculture",extendedDescription:"A Chapter comprising of Environmental sciences and management students and Geography studies under the dept. of Geography and  we will be using mapping techniques, based on systems concepts and theories, can be used to facilitate, explore, and capture the different understandings of the relationships, perspectives, and boundaries involved in environmental sustainability to obtain a more complete comprehension of the concept and develop plans for action."},"ym-St.-Augustine-International-University":{name:"YouthMappers at St Augustine International University",description:"YouthMappers chapter at St. Augustine International University"},"ym-St.-Mawaggali-Trades-Training-Institute":{name:"MawaggaliMappers",description:"YouthMappers chapter at St. Mawaggali Trades Training Institute",extendedDescription:"We are the youthappers chapter at St. Mawaggali trades in choma who are want to contribute the different humantarian tasks to serve lives through mapping."},"ym-State-University-of-New-York-Geneseo":{name:"SUNY Geneseo GIS Association",description:"YouthMappers chapter at State University of New York Geneseo",extendedDescription:"We spread awareness, support, education, volunteerism, and career advancement opportunities in geographic information systems, across disciplines and departments, in the context of SUNY Geneseo, the local community, and global community."},"ym-Stella-Maris-Polytechnic":{name:"YouthMappers-SMP",description:"YouthMappers chapter at Stella Maris Polytechnic"},"ym-Technical-University-of-Kenya":{name:"Geospatial Science Student Association",description:"YouthMappers chapter at Technical University of Kenya",extendedDescription:"It's a geographical information based group with very passionate students in the relevant fields of study. We do training to members on emerging trends in the market and keep up with technological advancements"},"ym-Texas-Tech-University":{name:"YouthMappers at TTU",description:"YouthMappers chapter at Texas Tech University",extendedDescription:"As one of the co-founding chapters of the network, the TTU YouthMappers are enthusiastic to serve as interdisciplinary leaders to help create open geographic data and analyses that address locally defined development challenges worldwide. The chapter strives to exchange and collaborate with other chapters around the globe while also offering themselves as a local resource and service to Texas Tech student organizations in ways that add value to their respecitive campus activities through mapping."},"ym-The-Citadel":{name:"YouthMappers at The Citadel",description:"YouthMappers chapter at The Citadel",extendedDescription:"This chapter is also a Rotaract Club, which is an affiliate of Rotary International. Multiple members, as well as leadership have expressed an interest in YouthMappers and we would like to affiliate our Citadel Rotaract Club with YouthMappers."},"ym-The-Gambia-YMCA-University-of-the-Gambia":{name:"Connected YouthMappers",description:"YouthMappers chapter at The Gambia YMCA / University of the Gambia",extendedDescription:"Connected YouthMappers is comprised of dedicated young Gambians who aspire to change and aid national development."},"ym-The-George-Washington-University":{name:"Humanitarian Mapping Society",description:"YouthMappers chapter at The George Washington University",extendedDescription:"Models of leadership and engagement, HMS seeks to render aid and better the world through humanitarian Geographic Information Systems (GIS) projects. This co-founding affiliated chapter on the campus of GWU has a plethora of experience to share, and frequently partners directly with USAID, the American Red Cross, and the US Department of State in their DC area to expand student-led efforts and serve the global community."},"ym-The-Johns-Hopkins-University-SAIS":{name:"SAIS YouthMappers",description:"YouthMappers chapter at The Johns Hopkins University, SAIS",extendedDescription:"The mission of SAIS Youth Mappers is to provide students at the Johns Hopkins University SAIS with the opportunity to become highly skilled humanitarian mappers. As a group within the South Asia Club, its primary focus is on supporting humanitarian mapping projects in the Indo-Pacific Region."},"ym-The-Pennsylvania-State-University":{name:"Penn State GIS Coalition",description:"YouthMappers chapter at The Pennsylvania State University",extendedDescription:"The Penn State Geospatial Information Science (GIS) Coalition is an organization that offers students majoring, minoring, or sharing an interest in GIS opportunities to develop supplementary knowledge and skills necessary to succeed in the professional GIS industry."},"ym-The-University-of-Zambia":{name:"YouthMappers Unza",description:"YouthMappers chapter at The University of Zambia"},"ym-Tribhuvan-University":{name:"Geomatics Engineering Students Association",description:"YouthMappers chapter at Tribhuvan University",extendedDescription:"This organization is the student forum of Geomatics Engineering students of Tribhuvan University , Institute of Engineering on the Pashchimanchal campus. Established since the beginning of the degree program, students have been active in mapping and leadership and are thrilled to be a part of the YouthMappers network."},"ym-UW-Madison":{name:"BadgerMaps",description:"YouthMappers chapter at UW-Madison",extendedDescription:"BadgerMaps is the UW campus chapter of Youthmappers, an organization dedicated to humanitarian and community mapping services. We connect our volunteer network with opportunities to create GIS data for projects that need it."},"ym-Uganda-Christian-University-Mbale-Campus":{name:"Mappers for Life",description:"YouthMappers chapter at Uganda Christian University Mbale Campus",extendedDescription:"We are Team Mappers for life! Please come and join us as we map together!\" This group works from the Department of Information Technology at the UCU."},"ym-Uganda-Pentecostal-University":{name:"HiTech Youth Mappers",description:"YouthMappers chapter at Uganda Pentecostal University",extendedDescription:"A new Youthmappers Chapter in Western Uganda. Ready to map and provide open data with OpenStreetMap for development purposes."},"ym-Universidad-Autonoma-de-Madrid":{name:"YouthMappers at UAM",description:"YouthMappers chapter at Universidad Autonoma de Madrid"},"ym-Universidad-Distrital-Francisco-Jose-de-Caldas":{name:"YouthMappers at Bogota",description:"YouthMappers chapter at Universidad Distrital Francisco Jose de Caldas",extendedDescription:"The Universidad Distrital Francisco José de Caldas is a public, coeducational, research university based in Bogotá, Colombia with a population of 26,140 students."},"ym-Universidad-Nacional-Autnoma-de-Honduras":{name:"PumaGis Hn",description:"YouthMappers chapter at Universidad Nacional Autónoma de Honduras"},"ym-Universidad-Nacional-de-Colombia":{name:"Grupo UN",description:"YouthMappers chapter at Universidad Nacional de Colombia",extendedDescription:"Students are uniting to map and network with university students across the country of Colombia and across the globe.  Geographic specialties include affiliation with microbiology and health disciplines."},"ym-Universidad-Nacional-de-Ingenieria":{name:"Yeka Street MGA",description:"YouthMappers chapter at Universidad Nacional de Ingenieria",extendedDescription:"YEKA STREET is a work team constituted by students from Universidad Nacional de Ingenieria at Managua, Nicaragua. With the principal purpose of apply our knowledge and skills using many tools and apps to map areas in our cities and contribute to the development community projects and disasters relieve plans. We want to lead the way adding more students from all careers and universities in our country to join us at this cause, increasing in this way the life level and reducing the population vulnerability."},"ym-Universidad-Politcnica-de-Madrid":{name:"Mapeo Humanitario",description:"YouthMappers chapter at Universidad Politécnica de Madrid",extendedDescription:"Geo-volunteering group formed at Moncloa Campus on November 2017. Around 20 members from three Universities (Complutense, CEU and UPM). Undergraduate students, MSc and PhD students collaborate together with organizations (MSF, Acción contra el Hambre,...) supported by trainers from Geoinquietos. Official recognition by UPM as Educative Innovation Project (Code  IE1718.0411)"},"ym-Universidad-de-Antioquia":{name:"Geomatica UDEA",description:"YouthMappers chapter at Universidad de Antioquia",extendedDescription:"We are a group interested in geospatial data, voluntary cartography, and participating in mapping with others in our country and within the YouthMappers network."},"ym-Universidad-de-Costa-Rica":{name:"YouthMappers de Universidad de Costa Rica",description:"YouthMappers chapter at Universidad de Costa Rica",extendedDescription:"YouthMappers de Universidad de Costa Rica nace en función de acción social para y por miembros de comunidades distintas según temáticas de involucramiento, interacción y representación de variables dentro de un espacio geográfico definido (un territorio) Gracias a las herramientas de OpenStreetMaps tenemos la viabilidad de poder obtener, validar y compartir la información generada para comprobación y uso destinadas a las comunidades o el interesado en tales temáticas objetivas."},"ym-Universidad-de-La-Guajira":{name:"Grupo Mesh",description:"YouthMappers chapter at Universidad de La Guajira",extendedDescription:"Grupo Mesh is a student organization at the Universidad de la Guajira in Colombia, including students from the program of Environmental Engineering who learn cartography and open mapping."},"ym-Universidad-de-Los-Andes":{name:"Cartografos Uniandes",description:"YouthMappers chapter at Universidad de Los Andes",extendedDescription:"We are a circle of student participation that seeks to use mapping and spatial reasoning as a means to create bonds of cooperation and integration between the university and society by addressing different spatial, social, political , economic and cultural dynamics."},"ym-Universidad-de-Puerto-Rico-Rio-Piedras":{name:"UPR YouthMappers",description:"YouthMappers chapter at Universidad de Puerto Rico - Rio Piedras"},"ym-Universidad-de-San-Buenaventura":{name:"YouthMappers San Buenaventura",description:"YouthMappers chapter at Universidad de San Buenaventura",extendedDescription:"We are pleased to join YouthMappers mapping for a better world and community."},"ym-Universidade-Eduardo-Mondlane":{name:"Comunidade YouthMappers Moçambique",description:"YouthMappers chapter at Universidade Eduardo Mondlane",extendedDescription:"We are a student group that intends to join Mozambican society to create a resilient community of humanitarian mapping. The community intend to map the physical occupation of our Country and create open geographic data, accessible to the public and able to be used in several areas without associated costs."},"ym-Universit-Gaston-Berger":{name:"YouthMappers at UGB",description:"YouthMappers chapter at Université Gaston Berger",extendedDescription:"YouthMappers UGB is made up of young students and researchers who are passionate about mapping. Our aim is to improve students' skills in the field of cartography and to participate in the creation of open geographic data that responds to development challenges around the world and particularly in Africa."},"ym-Universit-Mohammed-V-Rabat":{name:"Brahmapoutre at Rabat",description:"YouthMappers chapter at Université Mohammed V Rabat",extendedDescription:"This chapter sees participation in the YouthMappers program as an oppourtunity to share our knowlege create new working relationships with other chapters in different countries"},"ym-Universit-de-NZrkor":{name:"Youthmappers à N'Zérékoré",description:"YouthMappers chapter at Université de N'Zérékoré",extendedDescription:"YouthMappers est un groupe qui permet de faire la cartographie des communautés enclavées et à la prise des décisions en cas de catastrophes ou épidémies. Elle permet aussi la production et l'utilisation des données en accès gratuit."},"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako":{name:"Etudiant au Laboratoire HoPE",description:"YouthMappers chapter at Université des Sciences Sociale et de Gestion de Bamako"},"ym-Universitas-Negeri-Makassar":{name:"Kontur Geografi",description:"YouthMappers chapter at Universitas Negeri Makassar"},"ym-University-Muhammadiyah-Surakarta":{name:"SpaceTime",description:"YouthMappers chapter at University Muhammadiyah Surakarta",extendedDescription:"SpaceTime is a community mapping in the Faculty of Geography of Muhammadiyah University of Surakarta. SpaceTime was founded by Bruce Maldy Pratama, Mukhlis Akbar and Irfandi Fauzi. They are active students in the Faculty of Geography University Muhammadiyah Surakarta."},"ym-University-of-California-Davis":{name:"Mapping Club",description:"YouthMappers chapter at University of California, Davis"},"ym-University-of-Cape-Coast":{name:"UCC Geographical Society",description:"YouthMappers chapter at University of Cape Coast",extendedDescription:"We are a society that encompasses all students who are reading and read geography in the Department of Geography and Regional Planning at the University of Cape Coast. Our main aim is to promote interest in the discipline inside and outside of the classroom. Our motto is “We comprehend the Earth and its inhabitants.”"},"ym-University-of-Central-Florida":{name:"Geospatial Information Society",description:"YouthMappers chapter at University of Central Florida",extendedDescription:"Our mission is to foster a social and educational environment for all majors who are interested in the discussion and application of GIS. Group and community events throughout the academic year organize students to volunteer to help local and regional communities by using community-based GIS projects and educating local middle and high school students on the use and application of GIS."},"ym-University-of-Chicago":{name:"Tobler Society",description:"YouthMappers chapter at University of Chicago"},"ym-University-of-Dar-es-Salaam":{name:"YouthMappers at University of Dar es Salaam",description:"YouthMappers chapter at University of Dar es Salaam",extendedDescription:"The purpose of the University of Dar es Salaam YouthMappers  is to use and promote open source data and GIS technologies to map potential disaster areas, provide resources for emergency management, connect its members with open source and GIS organizations in the city of Dar es Salaam, and serve any upcoming needs of our project partners ."},"ym-University-of-Energy-and-Natural-Resources":{name:"Eco-Club",description:"YouthMappers chapter at University of Energy and Natural Resources",extendedDescription:"To provide a sound education to all citizens about the deteriorating environment and provide utmost use of recreation of the environment for human survival."},"ym-University-of-Exeter":{name:"University of Exeter British Red Cross Missing Maps",description:"YouthMappers chapter at University of Exeter",extendedDescription:"We are a team of enthusiastic Geographers with comprehensive knowledge of GIS. We are passionate about supporting the British Red Cross Society with various humanitarian aid efforts. We are also important teachers of the significance of mapping remotely sensed data and how this helps on the ground. Our mapathons have themed academic focuses that highlight the different GIS research in our geography department, while also functioning as employability awareness events which we use to invite speakers in to talk about their GIS/British Red Cross careers."},"ym-University-of-Ghana":{name:"University of Ghana YouthMappers",description:"YouthMappers chapter at University of Ghana",extendedDescription:"UG YouthMappers consists of both graduate and undergraduate students possessing knowledge and skills in GIS and Remote Sensing. The club is composed of an energetic team that is poised to address social issues and mitigate environmental problems through mapping. Our fundamental principles are capacity building, empowerment and teamwork."},"ym-University-of-Liberia-YouthMappers":{name:"University of Liberia YouthMappers",description:"YouthMappers chapter at University of Liberia YouthMappers",extendedDescription:"The University of Liberia YouthMappers is a chapter organization of the Global YouthMappers. We are a nonprofit student mapping organization focus on mapping for Liberia’s development and the World at large. The purpose of this organization shall be to utilize technology and geospatial knowledge as means of creating and developing maps; collecting and analyzing data that will address local and worldwide challenges. Our aim is to support and create opportunity for students to develop interest and skills in the fields of mapping. We envision a united student community that are collaborative, active and are willing to work with the University of Liberia YouthMappers in order to better the lives of others."},"ym-University-of-Malawi":{name:"Chanco Malawi YouthMappers",description:"YouthMappers chapter at University of Malawi",extendedDescription:"Chanco Malawi YouthMappers is the student mapping organization for the University of Malawi's Chancellor College. The students in this chapter focus on mapping for Malawi's development and science needs."},"ym-University-of-Maryland-College-Park":{name:"Geography Club",description:"YouthMappers chapter at University of Maryland - College Park",extendedDescription:"The mission of the Geography Club at the University of Maryland College Park is to engage and encourage students to explore geographic interests within the campus and the community."},"ym-University-of-Mines-and-Technology":{name:"UMaT YouthMappers",description:"YouthMappers chapter at University of Mines and Technology",extendedDescription:"UMaT YouthMappers is a group of volunteer students who seek to grant students the opportunity to improve skills in the field of mapping & creating open geographic data and analyses that address locally defined development challenges worldwide."},"ym-University-of-Nairobi":{name:"Geospatial Engineering Students Association",description:"YouthMappers chapter at University of Nairobi",extendedDescription:"UN students are working with the local OSM community, Map Kibera, and GrouthTruth to learn about open mapping and contribute data for needs in their urban communities."},"ym-University-of-Nigeria-Enugu-Campus":{name:"LionMappersTeam (LMT) Enugu",description:"YouthMappers chapter at University of Nigeria, Enugu Campus",extendedDescription:"The LionMappersTeam(LMT)Enugu Campus is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of Geoinformatics and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for Crowdsourced Mapping and Geographic Information provision using Openstreetmap, Citizen Science and other Geospatial Technology for research, training and response to resilient community challenges. We are involved in Web-Cartography, GIS and Remote Sensing Applications and ResearchWe are passionate about Volunteered Geographic Information.Paticipatory GIS and Citizen Science.Our major activities include online crowdsourced-Cartography, Field Mapping ,Training workshops and outreaches to High School as well as Humanitarian/Disaster Response Mapping."},"ym-University-of-Nigeria-Nsukka":{name:"LionMappersTeam (LMT) Nsukka",description:"YouthMappers chapter at University of Nigeria, Nsukka",extendedDescription:"The LionMappersTeam is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of mapping science and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for crowdsourced mapping and geographic information provision using Openstreetmap, citizen science  and other geospatial  technology for research, training and response to resilient community challenges. We are involved in GIS and Remote Sensing Applications and Research.Paticipatory GIS and Citizen Science,field mapping ,training workshops and outreaches to High Schools."},"ym-University-of-North-Texas":{name:"UNT Geography Club",description:"YouthMappers chapter at University of North Texas",extendedDescription:"The Geography Club is a student organization at University of North Texas that welcomes all students who are interested in geography. The objective of the Geography Club is to promote interest in Geography, the Major and the Geography Department along with fellowship among students and faculty. The club also seeks to represent student needs and wants in regard to the study of geography and to provide a forum for the presentation of innovative ideas to the benefit of the University community."},"ym-University-of-Northern-Colorado":{name:"UNCO Geography and GIS Club",description:"YouthMappers chapter at University of Northern Colorado",extendedDescription:"Official Geography and GIS Club chapter affiliated with the University of Northern Colorado where our aim is to learn, share and connect with those around us. #MakingSenseOfTheWorld"},"ym-University-of-Oregon":{name:"Map by Northwest",description:"YouthMappers chapter at University of Oregon",extendedDescription:"Map By Northwest aims to engage undergraduate students at the University of Oregon in mapping projects to assist in humanitarian causes and for conducting geographic research. We welcome students from all disciplines to join us in our mapping adventures."},"ym-University-of-Panama":{name:"YouthMappers UP",description:"YouthMappers chapter at University of Panama",extendedDescription:"Student mappers in Panama work with open spatial data to help identify, define, address, and create meaning about locally defined development challenges. They collaborate with students from other countries on community mapping topics from ecotourism to food security, from biodiversity to indigenous issues, promoting a humanistic vision through scientific perspectives."},"ym-University-of-Port-Harcourt":{name:"UniqueMappersTeam (UMT) Port Harcourt",description:"YouthMappers chapter at University of Port Harcourt",extendedDescription:"UniqueMappersTeam(UMT)Port Harcourt  is an action group and a team of volunteers for a collaborative online mapping targeted at training and empowering members with trending mapping skills  to create open geospatial data and analysis that addresses locally defined challenges for geoinformation and to provide humanitarian mapping  services to resilient communities in Niger Delta,Nigeria and elsewhere.We promote Crowdsoucred Mapping and Geographic information volunteering using OpenStreetMap(OSM) platform and other accessible platforms for Rapid Response Mapping,Disaster Mapping,Geo-intelligence Mapping,Map updates and training.Its an affiliate Campus chapter of Humanitarian OpenStreetMap Team(HOT).It is a project-task team of YouthMappers that provide opportunity for members to learn and improve their skills in Geoinformatics so as to explore global opportunities in the field of Mapping and Geoinformation."},"ym-University-of-Pretoria":{name:"Centre for Geoinformation Science",description:"YouthMappers chapter at University of Pretoria",extendedDescription:"The students who map Pretoria are supported by the University of Pretoria's Centre for Geoinformation Science, a platform from where the excellence of UP individuals and teams involved in geographic information science (GISc) research, education and training, professional development and community engagement is encouraged and strengthened through collaborations, education and training and  alliances within South Africa and abroad."},"ym-University-of-Redlands":{name:"URSpatial Geo-Thinkers",description:"YouthMappers chapter at University of Redlands",extendedDescription:"To build upon the members' GIS skills and knowledge of the tools and methods through applied social engagement as well as to educate the campus community about the power of mapping and spatial analysis through community service events."},"ym-University-of-Rwanda-Huye-Campus":{name:"Rwanda YouthMappers",description:"YouthMappers chapter at University of Rwanda - Huye Campus",extendedDescription:"Based on the commitment and the purpose of promoting mapping, and the information from YouthMappers public talks, we have organized as students in Geography department who are committed in mapping to found a chapter of our Campus. We have supported by our Facilitator Dr. Gaspard Rwanyiziri (Director of CGIS-Rwanda) and various lecturer mentors."},"ym-University-of-South-Carolina":{name:"Geography Graduate Student Association",description:"YouthMappers chapter at University of South Carolina",extendedDescription:"The GGSA is a fully student-run organization, designed to serve as an advocate and resource for all geography graduate students by filling the role of liaison between the department and students. Our goal is to further professional, academic, and personal development of graduate students interested in the field of geography and its sub disciplines."},"ym-University-of-Southern-California":{name:"SC Mappers",description:"YouthMappers chapter at University of Southern California",extendedDescription:"We see the world differently: we view it through a spatial lens. With the power of spatial thinking, we connect place and space to help address global challenges. Collaborate with us!"},"ym-University-of-Vermont":{name:"University of Vermont Humanitarian Mapping Club",description:"YouthMappers chapter at University of Vermont"},"ym-University-of-Victoria":{name:"Society of Geography Students",description:"YouthMappers chapter at University of Victoria",extendedDescription:"SOGS seeks to promote and represent social and academic interests within the Department of Geography. This is expressed by four key goals: To provide a forum for the discussion of matters concerning the quality and accessibility of education within geography; to provide a means of expressing a consensus of student opinion to deparhnental faculty through representation at deparkrnental meetings and on departrnental committees; to undertake anangements for such activities as are for the benefit of students and are seen to be within the field of interest of students in geography; to act as a liaison through the UVSS and the Course Union Council with other student groups on campus"},"ym-University-of-Warwick":{name:"University of Warwick Resilience Mapping Society",description:"YouthMappers chapter at University of Warwick",extendedDescription:"We are a group of enthusiastic mappers based at Warwick University. Our aim is to get people excited about humanitarian mapping and help them understand the impact this activity has on the field. We are closely aligned with Missing Maps and Doctors Without Borders UK and focus on HOT tasks in our mapping activities and workshops. Our mapathons are listed on the Missing Maps page whenever they are scheduled."},"ym-University-of-Wyoming":{name:"Gamma Theta Upsilon/Geography Club",description:"YouthMappers chapter at University of Wyoming"},"ym-University-of-Zimbabwe":{name:"UZMappers",description:"YouthMappers chapter at University of Zimbabwe",extendedDescription:"UzMappersTeam Zimbabwe is a team of Volunteers using OpenStreetMap for Open Data Mapping and Humanitarian Disaster response mapping .The team empowers its members with open source geospatial technology skills."},"ym-University-of-the-Philippines-Resilience-Institute":{name:"YouthMappers UP Resilience Institute",description:"YouthMappers chapter at University of the Philippines Resilience Institute",extendedDescription:"The UP Resilience Institute was established in 2016 with a mission statement to empower local communities through multidisciplinary research and actions toward resilience. Through UP NOAH Center, and the help of different organizations, we have provided building exposure maps for 17 provinces out of the 82 and uploaded more than 4 million footprints to Open Street Maps."},"ym-University-of-the-West-Indies-Mona-Campus":{name:"Libraries Outreach - ODL",description:"YouthMappers chapter at University of the West Indies, Mona Campus",extendedDescription:"The UWI, Mona Campus Library engages in public, outreach and special projects. This will allow our library the means to be a catalyst for spatial literacy and advocate for spatial data sharing and access to Jamaican and Caribbean interests. We have disaster relief and communication needs and   extensive earth science and geo-hazards needs to better serve our campus and community. Specifically, we hace a Science Library to showcase such to all faculty and students."},"ym-Vassar-College":{name:"Hudson Valley Mappers",description:"YouthMappers chapter at Vassar College",extendedDescription:"Our mission is to provide a multi-disciplinary platform for peers, educators, and community organizations to engage in local mapping projects with a focus on strengthening our local ecosystems, our built environment, and the health of our community. We also seek to contribute geospatial support for global humanitarian aid and development efforts."},"ym-Villanova-University":{name:"The Villanova Globeplotters",description:"YouthMappers chapter at Villanova University",extendedDescription:"The Villanova Globeplotters is built on Villanova’s Augustinian principle of selfless-service to the global community. Mixed with relaxed social interaction, we strive to provide geospatial outreach to those in need regardless of participating students’ race, academic major, student group association, or college career level."},"ym-West-Virginia-University":{name:"Maptime Morgantown",description:"YouthMappers chapter at West Virginia University",extendedDescription:"Working as a collaborative team, this co-founding chapter focuses on providing an open learning environment for those interested in working on projects that intersect international development, emergency response, and geographic information science.\nThey connect beginners and experts by providing technical training and experience in building meaningful and useful geographic infrastructure data, while connecting to sister cities around the world."},"ym-Western-Michigan-University":{name:"Geography Club",description:"YouthMappers chapter at Western Michigan University"},"ym-Yarmouk-University":{name:"YouthMappers at YU",description:"YouthMappers chapter at Yarmouk University",extendedDescription:"YouthMappers chapter at YU is the first mapping group in the Middle East and North Africa region where refugees, drought, and poverty are rising crises and in urgent need for humanitarian mapping  activities to mitigate the consequences of such crises. YU Mappers are encouraged to use open data to address challenges in MENA region to bring relief and development to target areas within the region."}}};
26836
26837         var features = [{type:"Feature",id:"cape_coast_gh.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.6,5],[-1.6,5.4],[-1,5.4],[-1,5],[-1.6,5]]]}},{type:"Feature",id:"india_andhrapradesh.geojson",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],[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]]]}},{type:"Feature",id:"india_karnataka.geojson",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]]]}},{type:"Feature",id:"india_kerala.geojson",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]]]}},{type:"Feature",id:"india_maharashtra.geojson",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]]]}},{type:"Feature",id:"india_tamilnadu.geojson",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]]]}},{type:"Feature",id:"india_telengana.geojson",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]]]}},{type:"Feature",id:"thailand_cnx.geojson",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]]]}},{type:"Feature",id:"flanders.geojson",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]]]}},{type:"Feature",id:"wallonia.geojson",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]]]}},{type:"Feature",id:"de-berlin-brandenburg.geojson",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]]]}},{type:"Feature",id:"de-hamburg.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[9.6,53.8],[10.4,53.8],[10.4,53.3],[9.6,53.3],[9.6,53.8]]]}},{type:"Feature",id:"de-ostwestfalen-lippe.geojson",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]]]}},{type:"Feature",id:"bi-vc-cvl.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[7.36633,45.32125],[7.89917,45.57752],[8.91541,45.58521],[9.01154,45.24202],[7.65472,45.07352],[7.36633,45.32125]]]}},{type:"Feature",id:"cuneo.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[7.66022,45.06382],[7.90741,44.93953],[8.04474,44.35921],[7.14661,44.2865],[7.1521,44.91036],[7.66022,45.06382]]]}},{type:"Feature",id:"lazio.geojson",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]]]}},{type:"Feature",id:"piemonte.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[8.45947,46.46057],[8.47046,46.44164],[8.47046,46.26724],[8.70117,46.09609],[8.58032,45.77135],[8.84949,45.38302],[8.90442,45.04636],[9.36584,44.67647],[9.29443,44.59047],[8.94287,44.64521],[8.66272,44.54742],[8.25623,44.42201],[7.75085,44.13097],[7.36633,44.13491],[6.98181,44.24913],[6.85547,44.52001],[7.08069,44.67647],[6.84448,44.85976],[6.68518,45.09291],[7.05322,45.22461],[7.17407,45.41002],[7.04773,45.46398],[6.97083,45.63709],[6.89392,45.67548],[6.80054,45.84793],[7.08069,45.87471],[7.58057,45.97024],[7.84973,45.92441],[8.15735,46.157],[8.15186,46.28622],[8.45947,46.46057]]]}},{type:"Feature",id:"roma-capitale.geojson",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]]]}},{type:"Feature",id:"south-tyrol.geojson",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]]]}},{type:"Feature",id:"trentino.geojson",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]]]}},{type:"Feature",id:"galicia.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-7.17133,43.43198],[-7.17545,43.38808],[-7.13837,43.3811],[-7.12807,43.33567],[-7.09511,43.3017],[-7.06627,43.30519],[-7.06764,43.2457],[-6.96808,43.18966],[-6.98181,43.16512],[-6.95297,43.13507],[-6.86096,43.17564],[-6.81908,43.13657],[-6.91315,43.07441],[-6.94405,43.07842],[-6.97083,43.03678],[-6.83556,42.95894],[-6.83281,42.91772],[-6.86783,42.87345],[-6.84174,42.82462],[-7.04224,42.69758],[-7.00584,42.64457],[-7.04361,42.63547],[-7.03949,42.58797],[-7.07726,42.50956],[-6.82182,42.49438],[-6.80603,42.46602],[-6.84105,42.40318],[-6.73325,42.35854],[-6.77307,42.25648],[-6.93649,42.16646],[-7.04361,42.06],[-6.96877,42.05082],[-6.96465,42.02583],[-6.99623,41.96664],[-7.07382,41.94979],[-7.14729,41.99063],[-7.18781,41.9697],[-7.19055,41.88439],[-7.42264,41.81124],[-7.70142,41.90125],[-8.16833,41.81943],[-8.22739,41.91045],[-8.09143,42.01869],[-8.19855,42.14508],[-8.23168,42.13248],[-8.24232,42.13884],[-8.25657,42.13349],[-8.25932,42.12191],[-8.27391,42.12356],[-8.30154,42.10535],[-8.32266,42.10064],[-8.32558,42.09045],[-8.33347,42.08434],[-8.3606,42.09032],[-8.37055,42.08752],[-8.38188,42.07631],[-8.39081,42.07593],[-8.39167,42.07924],[-8.41158,42.0772],[-8.43063,42.07211],[-8.44265,42.08294],[-8.47801,42.0809],[-8.48419,42.08204],[-8.5017,42.07797],[-8.52608,42.07771],[-8.52591,42.06331],[-8.55251,42.05337],[-8.58667,42.05222],[-8.59594,42.05592],[-8.64023,42.04713],[-8.64607,42.03667],[-8.65791,42.03081],[-8.65826,42.0155],[-8.66392,42.00109],[-8.67268,41.99637],[-8.70632,41.98208],[-8.74718,41.96409],[-8.74838,41.94302],[-8.76,41.9311],[-8.9,41.85],[-9.6,43.2],[-7.5,44],[-7.02885,43.55178],[-7.04807,43.50698],[-7.04807,43.47684],[-7.06181,43.47335],[-7.09099,43.45242],[-7.08858,43.4437],[-7.11983,43.42525],[-7.17133,43.43198]]]}},{type:"Feature",id:"east_midlands.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-0.37,53.85],[0.2,53.5],[0.55,53.1],[-1.1222,52.36367],[-1.95817,53.27605],[-1.88,53.86],[-0.96,54.06]]]}},{type:"Feature",id:"england-west-midlands.geojson",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]]]}},{type:"Feature",id:"london.geojson",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]]]}},{type:"Feature",id:"scotland.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.05969,54.98352],[-3.12904,54.95199],[-3.21625,54.96579],[-5,54.4],[-6.1,55.5],[-14.78497,57.60709],[-0.3751,61.32236],[0,56.6],[-2.08637,55.79086],[-2.08569,55.7619],[-2.10251,55.76132],[-2.24258,55.64505],[-2.32979,55.64079],[-2.16019,55.46095],[-2.56805,55.31274],[-2.70401,55.1773],[-2.96082,55.05084],[-3.04939,55.05517],[-3.03017,55.03314],[-3.05969,54.98352]]]}},{type:"Feature",id:"ottawa_gatineau.geojson",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]]]}},{type:"Feature",id:"vancouver_metro.geojson",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]]]}},{type:"Feature",id:"boston_metro.geojson",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]]]}},{type:"Feature",id:"central_pa.geojson",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]]]}},{type:"Feature",id:"chattanooga.geojson",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]]]}},{type:"Feature",id:"cleveland.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-82.5,41.5],[-80.95,42],[-80.95,41],[-82.5,41],[-82.5,41.5]]]}},{type:"Feature",id:"colorado.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-109.05,37],[-109.05,41],[-102.05,41],[-102.05,37],[-109.05,37]]]}},{type:"Feature",id:"dc_metro.geojson",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]]]}},{type:"Feature",id:"dfw_metro.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-97.75,32.25],[-97.75,33.4],[-96,33.4],[-96,32.25],[-97.75,32.25]]]}},{type:"Feature",id:"grand_junction_co.geojson",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]]]}},{type:"Feature",id:"hrva.geojson",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]]]}},{type:"Feature",id:"la_metro.geojson",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]]]}},{type:"Feature",id:"massachusetts.geojson",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]]]}},{type:"Feature",id:"minneapolis_st_paul_metro.geojson",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]]]}},{type:"Feature",id:"mt_vernon_wa.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.3,49],[-122,49],[-122,48],[-123.2,48.4],[-123.3,49]]]}},{type:"Feature",id:"nyc_metro.geojson",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]]]}},{type:"Feature",id:"philly_metro.geojson",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]]]}},{type:"Feature",id:"phoenix.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-113,32.7],[-113,34],[-111.1,34],[-111.1,32.7],[-113,32.7]]]}},{type:"Feature",id:"portland_me.geojson",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]]]}},{type:"Feature",id:"portland_or.geojson",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]]]}},{type:"Feature",id:"salt_lake_city.geojson",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]]]}},{type:"Feature",id:"seattle.geojson",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]]]}},{type:"Feature",id:"sf_bay_area.geojson",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]]]}},{type:"Feature",id:"south_sf_bay_area.geojson",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]]]}},{type:"Feature",id:"st_louis.geojson",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]]]}},{type:"Feature",id:"tampa_bay.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-83,28.2],[-82.2,28.2],[-82.2,27.55],[-83,27.55],[-83,28.2]]]}},{type:"Feature",id:"wyoming.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-111.05,41],[-111.05,45],[-104.05,45],[-104.05,41],[-111.05,41]]]}},{type:"Feature",id:"western_australia.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[129.1402,-11.59709],[129.09732,-32.56637],[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.1402,-11.59709]]]}},{type:"Feature",id:"bahia.geojson",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]]]}},{type:"Feature",id:"brasilia_df.geojson",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]]]}},{type:"Feature",id:"riograndedosul.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-53.8,-26.3],[-48.6,-28.9],[-53.1,-34],[-57.7,-30.2]]]}},{type:"Feature",id:"bogota.geojson",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]]]}}];
26838
26839         var resources = {"Bahia-telegram":{id:"Bahia-telegram",type:"telegram",locationSet:{include:["bahia.geojson"]},languageCodes:["pt"],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!",url:"https://t.me/OSMBA",contacts:[{name:"Wille Marcel",email:"wille@wille.blog.br"}]},"Bay-Area-OpenStreetMappers":{id:"Bay-Area-OpenStreetMappers",type:"meetup",locationSet:{include:["sf_bay_area.geojson"]},languageCodes:["en"],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.",url:"https://www.meetup.com/Bay-Area-OpenStreetMappers/",contacts:[{name:"Ben Discoe",email:"bdiscoe@gmail.com"}],order:5},"Central-Pennsylvania-OSM":{id:"Central-Pennsylvania-OSM",type:"facebook",locationSet:{include:["central_pa.geojson"]},languageCodes:["en"],name:"Central Pennsylvania OSM",description:"Online mapping community based out of State College, PA",url:"https://www.facebook.com/CentralPennsylvaniaOSM",contacts:[{name:"Sterling Quinn",email:"sdq107@psu.edu"}],order:3},"Code-for-San-Jose-Slack":{id:"Code-for-San-Jose-Slack",type:"slack",locationSet:{include:["south_sf_bay_area.geojson"]},languageCodes:["en"],name:"Code for San Jose Slack",description:"All are welcome! Sign up at {signupUrl}, then join the #osm channel.",url:"https://codeforsanjose.slack.com/",signupUrl:"https://slackin-c4sj.herokuapp.com/",contacts:[{name:"OSM Bay Area mailing list",email:"talk-us-sfbay@openstreetmap.org"}],order:4},"DF-telegram":{id:"DF-telegram",type:"telegram",locationSet:{include:["brasilia_df.geojson"]},languageCodes:["pt"],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!",url:"https://t.me/osmbsb",contacts:[{name:"Wille Marcel",email:"wille@wille.blog.br"}]},"Dallas-Fort-Worth-OSM":{id:"Dallas-Fort-Worth-OSM",type:"osm",locationSet:{include:["dfw_metro.geojson"]},languageCodes:["en"],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.",url:"http://dfwosm.org/",contacts:[{name:"Andrew Matheny",email:"andrewdmatheny@gmail.com"}]},"Galicia-Telegram":{id:"Galicia-Telegram",type:"telegram",locationSet:{include:["galicia.geojson"]},languageCodes:["es","gl"],name:"OpenStreetMap Galicia Telegram",description:"OpenStreetMap Telegram for Galicia",url:"https://t.me/joinchat/AAHZsRBs-mY3hrquk2kpig"},"Galicia-Twitter":{id:"Galicia-Twitter",type:"twitter",locationSet:{include:["galicia.geojson"]},languageCodes:["es","gl"],name:"OpenStreetMap Galicia Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmgalicia"},GeoPhilly:{id:"GeoPhilly",type:"meetup",locationSet:{include:["philly_metro.geojson"]},languageCodes:["en"],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!",url:"https://www.meetup.com/GeoPhilly/",contacts:[{name:"Dan Ford",email:"dford@azavea.com"}],order:5},"MapColabora-mailinglist":{id:"MapColabora-mailinglist",type:"mailinglist",locationSet:{include:[[-0.8860231,41.6568048]]},name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Mailing list",url:"https://groups.google.com/forum/#%21forum/mapeado-colaborativo",contacts:[{name:"Organizer",email:"mapeadocolaborativo@gmail.com"}],order:1},"MapColabora-meetup":{id:"MapColabora-meetup",type:"meetup",locationSet:{include:[[-0.8860231,41.6568048]]},name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Meetup page",url:"https://www.meetup.com/mapcolabora/",contacts:[{name:"Organizer",email:"mapeadocolaborativo@gmail.com"}],order:5},"MapColabora-twitter":{id:"MapColabora-twitter",type:"twitter",locationSet:{include:[[-0.8860231,41.6568048]]},name:"Mapeado Colaborativo / Geoinquietos Zaragoza",description:"Mapeado Colaborativo / Geoinquietos Zaragoza Twitter Account",url:"https://www.twitter.com/MapColabora",contacts:[{name:"Organizer",email:"mapeadocolaborativo@gmail.com"}],order:4},MapMinnesota:{id:"MapMinnesota",type:"meetup",locationSet:{include:["minneapolis_st_paul_metro.geojson"]},languageCodes:["en"],name:"MapMinnesota",description:"Mappers and OpenStreetMap enthusiasts in the Twin Cities area",extendedDescription:"Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!",url:"https://www.meetup.com/Map-Minnesota/",contacts:[{name:"Ian Dees",email:"ian.dees@gmail.com"}],order:5},"Mapping-DC-meetup":{id:"Mapping-DC-meetup",type:"meetup",locationSet:{include:["dc_metro.geojson"]},languageCodes:["en"],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.",url:"https://mappingdc.org/",contacts:[{name:"Brian DeRocher",email:"brian@derocher.org"}],order:5},MappingWR:{id:"MappingWR",type:"slack",locationSet:{include:[[-80.4925,43.4518]]},name:"MappingWR",description:"Making low carbon routes around Waterloo Region easy to find.",url:"https://mappingwr.slack.com/",signupUrl:"https://docs.google.com/forms/d/e/1FAIpQLSeUswpQfyzwQugdLugtYh4WTMTce0EEjrnOS6xhQ416V4BFHg/viewform",contacts:[{name:"David Trueman",email:"dwtrueman@gmail.com"}]},"Maptime-Bogota":{id:"Maptime-Bogota",type:"meetup",locationSet:{include:["bogota.geojson"]},languageCodes:["es"],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.",url:"https://www.meetup.com/Maptime-Colombia-OSM/",contacts:[{name:"Andrés Gómez Casanova",email:"angoca@gmail.com"}],order:5},"Maptime-ME-meetup":{id:"Maptime-ME-meetup",type:"meetup",locationSet:{include:["portland_me.geojson"]},languageCodes:["en"],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.",url:"https://www.meetup.com/MaptimeME/",contacts:[{name:"Malcolm Toon",email:"malcolm@foreflight.com"}],order:5},"Maptime-Oceania-Slack":{id:"Maptime-Oceania-Slack",type:"slack",locationSet:{include:["009"]},languageCodes:["en"],name:"Maptime Oceania Slack",description:"Sign up at {signupUrl}",url:"https://maptimeoceania.slack.com",signupUrl:"https://bit.ly/maptimeau",contacts:[{name:"David Dean",email:"ddean@ieee.org"},{name:"Philip Mallis",email:"philip.mallis@unimelb.edu.au"},{name:"Edoardo Neerhut",email:"ed@mapillary.com"}],order:3},"MaptimeHRVA-twitter":{id:"MaptimeHRVA-twitter",type:"twitter",locationSet:{include:["hrva.geojson"]},languageCodes:["en"],name:"MaptimeHRVA Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/maptimehrva",contacts:[{name:"Jonah Adkins",email:"jonahadkins@gmail.com"}]},"Nottingham-OSM-pub-meetup":{id:"Nottingham-OSM-pub-meetup",type:"group",locationSet:{include:["east_midlands.geojson"]},languageCodes:["en"],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.",url:"https://wiki.openstreetmap.org/wiki/Nottingham/Pub_Meetup",contacts:[{name:"Jerry Clough",email:"SK53.osm@gmail.com"}],order:5},"OSM-AR-facebook":{id:"OSM-AR-facebook",type:"facebook",locationSet:{include:["ar"]},languageCodes:["es"],name:"OpenStreetMap Argentina Facebook",description:"Join the OpenStreetMap Argentina community on Facebook",extendedDescription:"News from the local community",url:"https://www.facebook.com/OpenStreetMapArgentina/",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}],order:3},"OSM-AR-forum":{id:"OSM-AR-forum",type:"forum",locationSet:{include:["ar"]},languageCodes:["es"],name:"OpenStreetMap Argentina web forum",description:"Join the OpenStreetMap Argentina web forum",extendedDescription:"Ideal for long or important discussions. Slow response time.",url:"https://forum.openstreetmap.org/viewforum.php?id=49",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}],order:-2},"OSM-AR-irc":{id:"OSM-AR-irc",type:"irc",locationSet:{include:["ar"]},languageCodes:["es"],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.",url:"https://webchat.oftc.net/?channels=osm-ar",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}],order:-4},"OSM-AR-mailinglist":{id:"OSM-AR-mailinglist",type:"mailinglist",locationSet:{include:["ar"]},languageCodes:["es"],name:"Talk-ar Mailing List",description:"Historic mailing list. Almost unused today.",url:"https://lists.openstreetmap.org/pipermail/talk-ar/",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}],order:-3},"OSM-AR-telegram":{id:"OSM-AR-telegram",type:"telegram",locationSet:{include:["ar"]},languageCodes:["es"],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!",url:"https://telegram.me/osm_ar",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-twitter":{id:"OSM-AR-twitter",type:"twitter",locationSet:{include:["ar"]},languageCodes:["es"],name:"OpenStreetMap Argentina Twitter",description:"Follow us on Twitter at {url}",extendedDescription:"News from the local community and OpenStreetMap in general.",url:"https://twitter.com/OpenStreetMapAr",contacts:[{name:"OpenStreetMap Argentina",email:"openstreetmap.org.ar@gmail.com"}]},"OSM-Asia-mailinglist":{id:"OSM-Asia-mailinglist",type:"mailinglist",locationSet:{include:["142"]},name:"OpenStreetMap Asia Mailinglist",description:"Talk-asia is the official Mailinglist for Asian Community",url:"https://lists.openstreetmap.org/listinfo/talk-asia",contacts:[{name:"Erwin Olario",email:"govvin@gmail.com"}],order:-3},"OSM-BGD-facebook":{id:"OSM-BGD-facebook",type:"facebook",locationSet:{include:["bd"]},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!",url:"https://www.facebook.com/groups/osmbd/",contacts:[{name:"Ahasanul Hoque",email:"hoque.ahasan@gmail.com"}],order:3,events:[{id:"sotmasia2019",i18n:true,name:"State of the Map Asia 2019",description:"Join the 2019 OpenStreetMap region-wide event at State of the Map Asia in Dhaka",where:"Krishibid Institution Bangladesh (KIB), Dhaka, Bangladesh",when:"2019-11-01",url:"http://stateofthemap.asia/"}]},"OSM-BO-mailinglist":{id:"OSM-BO-mailinglist",type:"mailinglist",locationSet:{include:["bo"]},languageCodes:["es"],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!",url:"https://lists.openstreetmap.org/pipermail/talk-bo/",contacts:[{name:"Marco Antonio",email:"marcoantoniofrias@gmail.com"}],order:-3},"OSM-BiH-telegram":{id:"OSM-BiH-telegram",type:"telegram",locationSet:{include:["ba"]},name:"OpenStreetMap BiH Telegram",description:"A Telegram group for the OSM Bosnia and Herzegovina community: {url}",url:"https://t.me/osmbih",order:5},"OSM-Boston":{id:"OSM-Boston",type:"meetup",locationSet:{include:["boston_metro.geojson"]},languageCodes:["en"],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!",url:"https://www.meetup.com/OpenStreetMap-Boston/",contacts:[{name:"Lars Ahlzen",email:"lars@ahlzen.com"}],order:5},"OSM-CA-Slack":{id:"OSM-CA-Slack",type:"slack",locationSet:{include:["ca"]},languageCodes:["en","fr"],name:"OSM-CA Slack",description:"All are welcome! Sign up at {signupUrl}.",url:"https://osm-ca.slack.com/",signupUrl:"https://slackinviteosmcanada.herokuapp.com/",contacts:[{name:"Denis Carriere",email:"carriere.denis@gmail.com"}],order:4},"OSM-CA-mailinglist":{id:"OSM-CA-mailinglist",type:"mailinglist",locationSet:{include:["ca"]},languageCodes:["en","fr"],name:"OSM-CA mailing list",description:"A mailing list to discuss OpenStreetMap in Canada.",url:"https://lists.openstreetmap.org/listinfo/talk-ca"},"OSM-CA-telegram":{id:"OSM-CA-telegram",type:"telegram",locationSet:{include:["ca"]},languageCodes:["en","fr"],name:"@osmca on Telegram",description:"OpenStreetMap Canada Telegram chat",url:"https://t.me/osmca"},"OSM-CL-facebook":{id:"OSM-CL-facebook",type:"facebook",locationSet:{include:["cl"]},languageCodes:["es"],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!",url:"https://www.facebook.com/OpenStreetMap-Chile-145127198882915/",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}],order:3},"OSM-CL-mailinglist":{id:"OSM-CL-mailinglist",type:"mailinglist",locationSet:{include:["cl"]},languageCodes:["es"],name:"Talk-cl Mailing List",description:"A mailing list to discuss OpenStreetMap in Chile",url:"https://lists.openstreetmap.org/pipermail/talk-cl/",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}],order:-3},"OSM-CL-telegram":{id:"OSM-CL-telegram",type:"telegram",locationSet:{include:["cl"]},languageCodes:["es"],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!",url:"https://t.me/OSMcl",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}]},"OSM-CL-twitter":{id:"OSM-CL-twitter",type:"twitter",locationSet:{include:["cl"]},languageCodes:["es"],name:"OpenStreetMap Chile Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmCL",contacts:[{name:"Julio Costa",email:"julio.costa@openstreetmap.cl"}]},"OSM-CN-telegram":{id:"OSM-CN-telegram",type:"telegram",locationSet:{include:["cn"]},languageCodes:["zh"],name:"OpenStreetMap China Telegram",description:"A Telegram group for the OSM Chinese community: {url}",url:"https://t.me/osmchina",order:5},"OSM-CO":{id:"OSM-CO",type:"group",locationSet:{include:["co"]},languageCodes:["es"],name:"OpenStreetMap Colombia",description:"News of the OpenStreetMap Colombia community and the OSMCo Foundation",url:"https://blog.openstreetmap.co/s657",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CO-facebook":{id:"OSM-CO-facebook",type:"facebook",locationSet:{include:["co"]},languageCodes:["es"],name:"OpenStreetMap Colombia Facebook",description:"Join the OpenStreetMap Colombia community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap. Everyone is welcome!",url:"https://www.facebook.com/groups/OsmCol/",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}],order:3},"OSM-CO-mailinglist":{id:"OSM-CO-mailinglist",type:"mailinglist",locationSet:{include:["co"]},languageCodes:["es"],name:"Talk-co Mailing List",description:"A mailing list to discuss OpenStreetMap in Colombia",url:"https://lists.openstreetmap.org/pipermail/talk-co/",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}],order:-3},"OSM-CO-telegram":{id:"OSM-CO-telegram",type:"telegram",locationSet:{include:["co"]},languageCodes:["es"],name:"OSM Colombia on Telegram",description:"OpenStreetMap Colombia Telegram chat",url:"https://telegram.me/osmco",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CO-twitter":{id:"OSM-CO-twitter",type:"twitter",locationSet:{include:["co"]},languageCodes:["es"],name:"OpenStreetMap Colombia Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapCo",contacts:[{name:"Fredy Rivera",email:"fredyrivera@gmail.com"}]},"OSM-CU-telegram":{id:"OSM-CU-telegram",type:"telegram",locationSet:{include:["cu"]},languageCodes:["es"],name:"OSM Cuba on Telegram",description:"OpenStreetMap Cuba Telegram chat",url:"https://telegram.me/OSM_Cuba",contacts:[{name:"Talk-cu Owner",email:"talk-cu-owner@openstreetmap.org"}]},"OSM-CZ-telegram":{id:"OSM-CZ-telegram",type:"telegram",locationSet:{include:["cz"]},languageCodes:["cs","en","sk"],name:"OpenStreetMap CZ Telegram",description:"A Telegram group for the OSM Czech community: {url}",url:"https://t.me/OSM_cz",order:5},"OSM-Central-Salish-Sea":{id:"OSM-Central-Salish-Sea",type:"meetup",locationSet:{include:["mt_vernon_wa.geojson"]},languageCodes:["en"],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!",url:"https://www.meetup.com/OpenStreetMap-Central-Salish-Sea/",contacts:[{name:"Clifford Snow",email:"clifford@snowandsnow.us"}],order:5},"OSM-Chattanooga":{id:"OSM-Chattanooga",type:"facebook",locationSet:{include:["chattanooga.geojson"]},languageCodes:["en"],name:"OSM Chattanooga",description:"The OpenStreetMap user group for Chattanooga",url:"https://www.facebook.com/groups/123483951073256",contacts:[{name:"Jenny Park",email:"tennessee@tpl.org"},{name:"Randal Hale",email:"rjhale@northrivergeographic.com"}],order:3},"OSM-Colorado":{id:"OSM-Colorado",type:"meetup",locationSet:{include:["colorado.geojson"]},languageCodes:["en"],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.",url:"https://www.meetup.com/OSM-Colorado/",contacts:[{name:"Russell Deffner",email:"russdeffner@gmail.com"}],order:5},"OSM-Discord":{id:"OSM-Discord",type:"discord",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap Discord",description:"Get in touch with other mappers via Discord",url:"https://discord.gg/SRZUYUz",contacts:[{name:"Austin Harrison",email:"jaustinharrison@gmail.com"}]},"OSM-EC-telegram":{id:"OSM-EC-telegram",type:"telegram",locationSet:{include:["ec"]},languageCodes:["es"],name:"OSM Ecuador on Telegram",description:"OpenStreetMap Ecuador Telegram chat",url:"https://telegram.me/MappingEcuador",contacts:[{name:"Talk-ec Owner",email:"talk-ec-owner@openstreetmap.org"}]},"OSM-ES-mailinglist":{id:"OSM-ES-mailinglist",type:"mailinglist",locationSet:{include:["es"]},languageCodes:["es"],name:"Talk-es mailing list",description:"A mailing list to discuss OpenStreetMap in Spain",url:"https://lists.openstreetmap.org/listinfo/talk-es",contacts:[{name:"Iván Sánchez",email:"ivansanchez@escomposlinux.org"}],order:-3},"OSM-ES-telegram":{id:"OSM-ES-telegram",type:"telegram",locationSet:{include:["es"]},languageCodes:["es"],name:"@OSMes on Telegram",description:"OpenStreetMap Spain Telegram chat",url:"https://t.me/OSMes",contacts:[{name:"Jorge Sanz",email:"sanchi2@gmail.com"}]},"OSM-Facebook":{id:"OSM-Facebook",type:"facebook",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap on Facebook",description:"Like us on Facebook for news and updates about OpenStreetMap.",url:"https://www.facebook.com/OpenStreetMap",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}],order:3},"OSM-IDN-facebook":{id:"OSM-IDN-facebook",type:"facebook",locationSet:{include:["id"]},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!",url:"https://www.facebook.com/groups/osm.id/",contacts:[{name:"Yantisa Akhadi",email:"yantisa.akhadi@hotosm.org"}],order:3},"OSM-IRC":{id:"OSM-IRC",type:"irc",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap IRC",description:"Join #osm on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}],order:-4},"OSM-India-Puducherry-Facebook":{id:"OSM-India-Puducherry-Facebook",type:"facebook",locationSet:{include:[[79.7324,11.9142]]},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.",url:"https://www.facebook.com/FSHMP",contacts:[{name:"Kamalavelan",email:"sskamalavelan@gmail.com",osm:"demonshreder"},{name:"Prasanna",email:"prasmailme@gmail.com",osm:"Prashere"}],order:3},"OSM-India-Puducherry-Matrix":{id:"OSM-India-Puducherry-Matrix",type:"matrix",locationSet:{include:[[79.7324,11.9142]]},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.",url:"https://riot.im/app/#/room/#fshm:matrix.org",contacts:[{name:"Kamalavelan",email:"sskamalavelan@gmail.com",osm:"demonshreder"},{name:"Prasanna",email:"prasmailme@gmail.com",osm:"Prashere"}]},"OSM-India-facebook":{id:"OSM-India-facebook",type:"facebook",locationSet:{include:["in"]},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!",url:"https://www.facebook.com/groups/mappingindia/",contacts:[{name:"Jinal Foflia",email:"fofliajinal@gmail.com"},{name:"Arun Ganesh",email:"arun.planemad@gmail.com"}],order:3},"OSM-Japan-telegram":{id:"OSM-Japan-telegram",type:"telegram",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan Telegram",description:"A Telegram group for the OSM Japan community: {url}",url:"https://t.me/osmjapan",contacts:[{name:"OSMF Japan",email:"info@osmf.jp"}],order:5},"OSM-Kerala-facebook":{id:"OSM-Kerala-facebook",type:"facebook",locationSet:{include:["india_kerala.geojson"]},name:"OpenStreetMap Kerala - Participatory neighborhood mapping",description:"Improve OpenStreetMap in Kerala",extendedDescription:"Mapping in Kerala ? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",url:"https://facebook.com/osmkerala/",contacts:[{name:"Manoj Karingamadathil",email:"dartermanoj@gmail.com"},{name:"Jaisen Nedumpala",email:"jaisuvyas@gmail.com"}]},"OSM-Korea-mailinglist":{id:"OSM-Korea-mailinglist",type:"mailinglist",locationSet:{include:["kp","kr"]},languageCodes:["en","ko"],name:"OpenStreetMap Korea Mailinglist",description:"Talk-ko is an Official Mailinglist for the Communities to dicuss matters about Korea",url:"https://lists.openstreetmap.org/listinfo/talk-ko",contacts:[{name:"Talk-ko-owner",email:"talk-ko-owner@openstreetmap.org"}],order:-3},"OSM-Korea-telegram":{id:"OSM-Korea-telegram",type:"telegram",locationSet:{include:["kp","kr"]},languageCodes:["en","ko"],name:"OSM Korea Telegram",description:"Unofficial Group for OpenStreetMap contributors, communities, and users in Korea to share and discuss.",url:"https://t.me/osmKorea",contacts:[{name:"Yongmin Hong",email:"revi@pobox.com"},{name:"Max N",email:"abonnements@revolwear.com"}]},"OSM-MMR-facebook":{id:"OSM-MMR-facebook",type:"facebook",locationSet:{include:["mm"]},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!",url:"https://www.facebook.com/groups/osmmm/",contacts:[{name:"Yan Naung Oak",email:"yan@phandeeyar.org"},{name:"Patrick Oswald",email:"patrickoswald.omm@gmail.com"},{name:"Set Khaing Oo",email:"setkhaing@phandeeyar.org"}],order:3},"OSM-MNG-facebook":{id:"OSM-MNG-facebook",type:"facebook",locationSet:{include:["mn"]},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!",url:"https://www.facebook.com/groups/OSM.Mongolia/",contacts:[{name:" ",email:"talk-mn@openstreetmap.org"}],order:3},"OSM-MY-facebook":{id:"OSM-MY-facebook",type:"facebook",locationSet:{include:["my"]},languageCodes:["en","ms"],name:"OpenStreetMap Malaysia on Facebook",description:"For chat about anything related to OpenStreetMap!",url:"https://www.facebook.com/groups/openstreetmapMY/",contacts:[{name:"Mohd Saidin",email:"projekopenstreetmap@hotmail.com"}],order:3},"OSM-MY-forum":{id:"OSM-MY-forum",type:"forum",locationSet:{include:["my"]},languageCodes:["en","ms"],name:"OpenStreetMap Malaysia Forum",description:"Official OpenStreetMap Malaysia Forum",url:"https://forum.openstreetmap.org/viewforum.php?id=60",contacts:[{name:"Mohd Saidin",email:"projekopenstreetmap@hotmail.com"}],order:-2},"OSM-MY-matrix":{id:"OSM-MY-matrix",type:"matrix",locationSet:{include:["my"]},languageCodes:["en","ms"],name:"OpenStreetMap Malaysia Riot channel",description:"All mappers are welcome! Sign up at {signupUrl}",url:"https://riot.im/app/#/room/#OpenstreetmapMalaysia:matrix.org",signupUrl:"https://riot.im/app/#/register",contacts:[{name:"Ahmad Amsyar",email:"OfficiallyAhmad@protonmail.ch"}]},"OSM-Nepal-facebook":{id:"OSM-Nepal-facebook",type:"facebook",locationSet:{include:["np"]},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!",url:"https://www.facebook.com/groups/mapkathmandu/",contacts:[{name:"Kshitiz Khanal",email:"khanal1990@gmail.com"}],order:3},"OSM-Ottawa-meetup":{id:"OSM-Ottawa-meetup",type:"meetup",locationSet:{include:["ottawa_gatineau.geojson"]},languageCodes:["en","fr"],name:"OpenStreetMap Ottawa",description:"Mappers and OpenStreetMap users in the Ottawa area",url:"https://www.meetup.com/openstreetmap-ottawa/",contacts:[{name:"Denis Carriere",email:"carriere.denis@gmail.com"},{name:"John Marshall",email:"rps333@gmail.com"}]},"OSM-PE":{id:"OSM-PE",type:"osm",locationSet:{include:["pe"]},languageCodes:["es"],name:"OpenStreetMap Peru",description:"News and resources for the OpenStreetMap Peru community",url:"http://osmpe.ourproject.org/",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE-facebook":{id:"OSM-PE-facebook",type:"facebook",locationSet:{include:["pe"]},languageCodes:["es"],name:"OpenStreetMap Peru Facebook",description:"Join the OpenStreetMap Peru community on Facebook",url:"https://www.facebook.com/Osmpe",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}],order:3},"OSM-PE-mailinglist":{id:"OSM-PE-mailinglist",type:"mailinglist",locationSet:{include:["pe"]},languageCodes:["es"],name:"Talk-pe Mailing List",description:"The official mailing list for the OpenStreetMap Peru community",url:"https://lists.openstreetmap.org/pipermail/talk-pe/",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}],order:-3},"OSM-PE-matrix":{id:"OSM-PE-matrix",type:"matrix",locationSet:{include:["pe"]},languageCodes:["es"],name:"OpenStreetMap Peru Matrix Chat",description:"Chat with other members of the OpenStreetMap Peru community in Matrix.",url:"https://matrix.to/#/#osmpe:matrix.org",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE-telegram":{id:"OSM-PE-telegram",type:"telegram",locationSet:{include:["pe"]},languageCodes:["es"],name:"OpenStreetMap Peru Telegram",description:"Join the OpenStreetMap Peru community on Telegram",url:"https://telegram.me/osmPe",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PE-twitter":{id:"OSM-PE-twitter",type:"twitter",locationSet:{include:["pe"]},languageCodes:["es"],name:"OpenStreetMap Peru Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmpe",contacts:[{name:"Diego Sangunietti",email:"diego.sanguinetti@hotmail.com"},{name:"Ruben Lopez M.",email:"rub2106@gmail.com"}]},"OSM-PH-facebook":{id:"OSM-PH-facebook",type:"facebook",locationSet:{include:["ph"]},name:"OpenStreetMap PH Facebook",description:"Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project.",url:"https://www.facebook.com/OSMPH/",contacts:[{name:"Maning Sambale",email:"emmanuel.sambale@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}],order:3},"OSM-PH-mailinglist":{id:"OSM-PH-mailinglist",type:"mailinglist",locationSet:{include:["ph"]},name:"Talk-ph Mailing List",description:"A mailing list to discuss OpenStreetMap in the Philippines",url:"https://lists.openstreetmap.org/pipermail/talk-ph/",contacts:[{name:"Maning Sambale",email:"emmanuel.sambale@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}],order:-3},"OSM-PH-slack":{id:"OSM-PH-slack",type:"slack",locationSet:{include:["ph"]},name:"OpenStreetMap PH Slack",description:"All are welcome! Sign up at {signupUrl}",url:"https://osmph.slack.com",signupUrl:"https://osmph-chat.herokuapp.com/",contacts:[{name:"Maning Sambale",email:"emmanuel.sambale@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}],order:4},"OSM-PH-telegram":{id:"OSM-PH-telegram",type:"telegram",locationSet:{include:["ph"]},languageCodes:["en","tl"],name:"OpenStreetMap PH Telegram",description:"Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines",url:"https://t.me/osmph",contacts:[{name:"Erwin Olario",email:"govvin@gmail.com"},{name:"OSM PH Group",email:"osm.pilipinas@gmail.com"}]},"OSM-PL-facebook-group":{id:"OSM-PL-facebook-group",type:"facebook",locationSet:{include:["pl"]},languageCodes:["pl"],name:"OpenStreetMap Poland Facebook group",description:"Group for mappers and users of OpenStreetMap in Poland",url:"https://www.facebook.com/groups/500589303317858/",contacts:[{name:"Michał Brzozowski",email:"www.haxor@gmail.com"}],order:3},"OSM-PL-forum":{id:"OSM-PL-forum",type:"forum",locationSet:{include:["pl"]},languageCodes:["en","pl"],name:"OpenStreetMap Poland Forum",description:"Forum of Polish OpenStreetMap community",url:"https://forum.openstreetmap.org/viewforum.php?id=23",contacts:[{name:"Daniel Koć",email:"daniel@xn--ko-wla.pl"},{name:"Ryszard Mikke",email:"ryszard.mikke@gmail.com"}],order:10},"OSM-PY-telegram":{id:"OSM-PY-telegram",type:"telegram",locationSet:{include:["py"]},languageCodes:["es"],name:"OSM Paraguay on Telegram",description:"OpenStreetMap Paraguay Telegram chat",url:"https://telegram.me/osm_py",contacts:[{name:"Talk-py Owner",email:"talk-py-owner@openstreetmap.org"}]},"OSM-Portland":{id:"OSM-Portland",type:"meetup",locationSet:{include:["portland_or.geojson"]},languageCodes:["en"],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!",url:"https://www.meetup.com/OpenStreetMap-Portland/",contacts:[{name:"Madeline Steele",email:"madeline.steele@gmail.com"}],order:5},"OSM-Portland-forum":{id:"OSM-Portland-forum",type:"forum",locationSet:{include:["portland_or.geojson"]},languageCodes:["en"],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.",url:"https://groups.google.com/group/osm-pdx",contacts:[{name:"Madeline Steele",email:"madeline.steele@gmail.com"}],order:-2},"OSM-Puducherry-Mailing-List":{id:"OSM-Puducherry-Mailing-List",type:"mailinglist",locationSet:{include:[[79.7324,11.9142]]},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.",url:"https://www.freelists.org/archive/puduvailug/",signupUrl:"https://www.freelists.org/list/puduvailug",contacts:[{name:"Kamalavelan",email:"sskamalavelan@gmail.com",osm:"demonshreder"},{name:"Prasanna",email:"prasmailme@gmail.com",osm:"Prashere"}],order:-3},"OSM-RU-forum":{id:"OSM-RU-forum",type:"forum",locationSet:{include:["ru"]},languageCodes:["ru"],name:"OpenStreetMap RU forum",description:"OpenStreetMap Russia web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=21",contacts:[{name:"Ilya Zverev",email:"ilya@zverev.info"}],order:-2},"OSM-RU-telegram":{id:"OSM-RU-telegram",type:"telegram",locationSet:{include:["ru"]},languageCodes:["ru"],name:"OpenStreetMap RU telegram",description:"OpenStreetMap Russia telegram chat",url:"https://t.me/ruosm",contacts:[{name:"Ilya Zverev",email:"ilya@zverev.info"}]},"OSM-Reddit":{id:"OSM-Reddit",type:"reddit",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap on Reddit",description:"/r/openstreetmap/ is a great place to learn more about OpenStreetMap.  Ask us anything!",url:"https://www.reddit.com/r/openstreetmap/",contacts:[{name:"Serge Wroclawski",email:"emacsen@gmail.com"}],order:2},"OSM-Rome-meetup":{id:"OSM-Rome-meetup",type:"group",locationSet:{include:["roma-capitale.geojson"]},languageCodes:["it"],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.",url:"https://wiki.openstreetmap.org/wiki/Rome/Incontro",contacts:[{name:"Martin Koppenhoefer",email:"dieterdreist@gmail.com"}]},"OSM-Seattle":{id:"OSM-Seattle",type:"meetup",locationSet:{include:["seattle.geojson"]},languageCodes:["en"],name:"OpenStreetMap Seattle",description:"Mappers and OpenStreetMap users in the Seattle area",url:"https://www.meetup.com/OpenStreetMap-Seattle/",contacts:[{name:"Clifford Snow",email:"clifford@snowandsnow.us"},{name:"Chase Stephens",email:"seattlefyi@gmail.com"},{name:"Paul McCombs",email:"pablo@imperium.org"}],order:5},"OSM-SoCal":{id:"OSM-SoCal",type:"meetup",locationSet:{include:["la_metro.geojson"]},languageCodes:["en"],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!",url:"https://www.meetup.com/OSM-Southern-California/",contacts:[{name:"Charlotte Wolter",email:"techlady@techlady.com"}],order:5},"OSM-South-Bay":{id:"OSM-South-Bay",type:"meetup",locationSet:{include:["south_sf_bay_area.geojson"]},languageCodes:["en"],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.",url:"https://www.meetup.com/Code-for-San-Jose/",contacts:[{name:"OSM Bay Area mailing list",email:"talk-us-sfbay@openstreetmap.org"}],order:5},"OSM-TH-CNX-meetup":{id:"OSM-TH-CNX-meetup",type:"meetup",locationSet:{include:["thailand_cnx.geojson"]},languageCodes:["en"],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",url:"https://forum.openstreetmap.org/viewforum.php?id=46",contacts:[{name:"Team Chiang Mai",email:"meetup-cnx@openstreetmap.in.th"}],order:5},"OSM-TH-facebook":{id:"OSM-TH-facebook",type:"facebook",locationSet:{include:["th"]},languageCodes:["en","th"],name:"OpenStreetMap TH Facebook group",description:"Facebook group for OpenStreetMappers in Thailand",url:"https://www.facebook.com/groups/thaiosm/",contacts:[{name:"Theppitak Karoonboonyanan",email:"theppitak@gmail.com"}],order:3},"OSM-TH-forum":{id:"OSM-TH-forum",type:"forum",locationSet:{include:["th"]},languageCodes:["en","th"],name:"OpenStreetMap TH forum",description:"OpenStreetMap Thailand web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=46",contacts:[{name:"Stephan Knauss",email:"osm@stephans-server.de"}],order:-2},"OSM-TW-facebook":{id:"OSM-TW-facebook",type:"facebook",locationSet:{include:["tw"]},languageCodes:["zh-tw"],name:"OpenStreetMap Taiwan Community",description:"Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan.",url:"https://www.facebook.com/groups/OpenStreetMap.TW/",contacts:[{name:"Nobody 沒有人 (Public mail)",email:"hiboard@openstreetmap.tw"}],order:3},"OSM-TW-mailinglist":{id:"OSM-TW-mailinglist",type:"mailinglist",locationSet:{include:["tw"]},languageCodes:["en","zh-tw"],name:"OpenStreetMap Taiwan Mailinglist",description:"Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan",url:"https://lists.openstreetmap.org/listinfo/talk-tw",contacts:[{name:"Nobody 沒有人 (Public email)",email:"hiboard@openstreetmap.tw"}],order:-3},"OSM-TW-telegram":{id:"OSM-TW-telegram",type:"telegram",locationSet:{include:["tw"]},languageCodes:["zh-tw"],name:"OpenStreetMap Taiwan Telegram",description:"A Telegram group for the OSM Taiwan community: {url}",url:"https://t.me/OSMTaiwan",contacts:[{name:"Nobody 沒有人 (Public mail)",email:"hiboard@openstreetmap.tw"}],order:5},"OSM-Tampa-Bay":{id:"OSM-Tampa-Bay",type:"meetup",locationSet:{include:["tampa_bay.geojson"]},languageCodes:["en"],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.",url:"https://www.meetup.com/osmtampabay/",contacts:[{name:"Coleman McCormick",email:"cmccormick@gmail.com"}],order:5},"OSM-Telegram":{id:"OSM-Telegram",type:"telegram",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap Telegram",description:"Join the OpenStreetMap Telegram global supergroup at {url}",url:"https://t.me/OpenStreetMapOrg",contacts:[{name:"Max N",email:"abonnements@revolwear.com"}]},"OSM-Twitter":{id:"OSM-Twitter",type:"twitter",locationSet:{include:["001"]},languageCodes:["en"],name:"OpenStreetMap Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/openstreetmap",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}]},"OSM-US":{id:"OSM-US",type:"group",locationSet:{include:["us"]},languageCodes:["en"],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}",url:"https://www.openstreetmap.us/",signupUrl:"https://www.openstreetmap.us/join",contacts:[{name:"Ian Dees",email:"ian@openstreetmap.us"},{name:"Bryan Housel",email:"bryan@openstreetmap.us"}]},"OSM-US-Slack":{id:"OSM-US-Slack",type:"slack",locationSet:{include:["us"]},languageCodes:["en"],name:"OpenStreetMap US Slack",description:"All are welcome! Sign up at {signupUrl}",url:"https://osmus.slack.com",signupUrl:"https://slack.openstreetmap.us/",contacts:[{name:"Ian Dees",email:"ian@openstreetmap.us"},{name:"Clifford Snow",email:"clifford@snowandsnow.us"}],order:4},"OSM-Utah":{id:"OSM-Utah",type:"meetup",locationSet:{include:["salt_lake_city.geojson"]},languageCodes:["en"],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!",url:"https://www.meetup.com/OpenStreetMap-Utah/",contacts:[{name:"Martijn van Exel",email:"m@rtijn.org"}],order:5},"OSM-Vancouver-meetup":{id:"OSM-Vancouver-meetup",type:"meetup",locationSet:{include:["vancouver_metro.geojson"]},languageCodes:["en"],name:"OpenStreetMap Vancouver",description:"Mappers and OpenStreetMap users in the Vancouver, BC area",url:"https://www.meetup.com/OpenStreetMap-Vancouver/",contacts:[{name:"Paul Norman",email:"penorman@mac.com"},{name:"Peter Chin",email:"bpchin@gmail.com"}],order:5},"OSM-Wyoming":{id:"OSM-Wyoming",type:"meetup",locationSet:{include:["wyoming.geojson"]},languageCodes:["en"],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.",url:"https://www.meetup.com/OSM-Wyoming/",contacts:[{name:"Russell Deffner",email:"russdeffner@gmail.com"}],order:5},"OSM-br-discord":{id:"OSM-br-discord",type:"discord",locationSet:{include:["br"]},languageCodes:["pt"],name:"OpenStreetMap Brasil Discord",description:"Join the OpenStreetMap Brasil community on Discord",url:"https://discord.gg/bQn4aCm",contacts:[{name:"Eduardo Addad de Oliveira",email:"duduaddad@gmail.com"}]},"OSM-br-mailinglist":{id:"OSM-br-mailinglist",type:"mailinglist",locationSet:{include:["br"]},languageCodes:["pt"],name:"Talk-br Mailing List",description:"A mailing list to discuss OpenStreetMap in Brazil",url:"https://lists.openstreetmap.org/pipermail/talk-br/",contacts:[{name:"Arlindo Pereira",email:"nighto@gmail.com"}],order:-3},"OSM-br-telegram":{id:"OSM-br-telegram",type:"telegram",locationSet:{include:["br"]},languageCodes:["pt"],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!",url:"https://t.me/OSMBrasil_Comunidade",contacts:[{name:"Vitor George",email:"vitor.george@gmail.com"}]},"OSM-br-twitter":{id:"OSM-br-twitter",type:"twitter",locationSet:{include:["br"]},languageCodes:["pt"],name:"OpenStreetMap Brasil Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapBR",contacts:[{name:"Wille Marcel",email:"wille@wille.blog.br"}]},"OSM-help":{id:"OSM-help",type:"forum",locationSet:{include:["001"]},languageCodes:["en"],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!",url:"https://help.openstreetmap.org/",contacts:[{name:"OSMF Operations",email:"operations@osmfoundation.org"}],order:-2},"OSM-india-mailinglist":{id:"OSM-india-mailinglist",type:"mailinglist",locationSet:{include:["in"]},name:"OpenStreetMap India Mailinglist",description:"Talk-in is the official Mailinglist for Indian Community",url:"https://lists.openstreetmap.org/listinfo/talk-in",contacts:[{name:"Arun Ganesh",email:"arun.planemad@gmail.com"}],order:-3},"OSM-india-twitter":{id:"OSM-india-twitter",type:"twitter",locationSet:{include:["in"]},name:"OpenStreetMap India Twitter",description:"We are just a tweet away: {url}",url:"https://twitter.com/osm_in",contacts:[{name:"Jinal Foflia",email:"fofliajinal@gmail.com"}]},"OSM-japan-facebook":{id:"OSM-japan-facebook",type:"facebook",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan Community",description:"Mappers and OpenStreetMap users in Japan",url:"https://www.facebook.com/groups/osmjapan/",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}],order:3},"OSM-japan-mailinglist":{id:"OSM-japan-mailinglist",type:"mailinglist",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan Mailinglist",description:"Talk-ja is an Official Mailinglist for Japanese Community",url:"https://lists.openstreetmap.org/listinfo/talk-ja",contacts:[{name:"OSMF Japan",email:"info@osmf.jp"}],order:-3},"OSM-japan-twitter":{id:"OSM-japan-twitter",type:"twitter",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan Twitter",description:"Hashtag on Twitter: {url}",url:"https://twitter.com/hashtag/osmjp",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}]},"OSM-japan-website":{id:"OSM-japan-website",type:"osm",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan",description:"Mappers and OpenStreetMap users in Japan",url:"https://openstreetmap.jp/",contacts:[{name:"Satoshi IIDA",email:"nyampire@gmail.com"}]},"OSM-sri-lanka-facebook":{id:"OSM-sri-lanka-facebook",type:"facebook",locationSet:{include:["lk"]},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!",url:"https://www.facebook.com/groups/142058222659672/",contacts:[{name:"Karan Suthakaran",email:"karansuthakaran@yahoo.com"}],order:3},OSMF:{id:"OSMF",type:"osm",locationSet:{include:["001"]},languageCodes:["en","fr","it","ja","nl","ru"],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}",url:"https://wiki.osmfoundation.org/wiki/Main_Page",signupUrl:"https://join.osmfoundation.org/",contacts:[{name:"OSMF Board",email:"board@osmfoundation.org"}],events:[{id:"sotm2020",i18n:true,name:"State of the Map 2020",description:"Join us for 3 days in Cape Town, South Africa for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.",where:"Cape Town, South Africa",when:"2020-jul-03",url:"https://2020.stateofthemap.org/"}]},"OpenCleveland-meetup":{id:"OpenCleveland-meetup",type:"meetup",locationSet:{include:["cleveland.geojson"]},languageCodes:["en"],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 =)",url:"https://www.meetup.com/open-cleveland/",contacts:[{name:"Will Skora",email:"skorasaurus@gmail.com"},{name:"Anastasia Diamond-Ortiz",email:"anastasia.diamond@gmail.com"}],order:5},"PHXGeo-meetup":{id:"PHXGeo-meetup",type:"meetup",locationSet:{include:["phoenix.geojson"]},languageCodes:["en"],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.",url:"https://www.meetup.com/PHXGeo/",contacts:[{name:"Ryan Arp",email:"ryan@arpconsultinggroup.com"}],order:5},"PHXGeo-twitter":{id:"PHXGeo-twitter",type:"twitter",locationSet:{include:["phoenix.geojson"]},languageCodes:["en"],name:"PHXGeo Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/phxgeo",contacts:[{name:"Ryan Arp",email:"ryan@arpconsultinggroup.com"}]},"RS-telegram":{id:"RS-telegram",type:"telegram",locationSet:{include:["riograndedosul.geojson"]},languageCodes:["pt"],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!",url:"https://t.me/osmrs"},"South-Tyrol-Mailing-List":{id:"South-Tyrol-Mailing-List",type:"mailinglist",locationSet:{include:["south-tyrol.geojson"]},languageCodes:["de","en","it","lld"],name:"OpenStreetMap mailing list for South Tyrol",description:"OpenStreetMap Italy regional talk list for South Tyrol",url:"https://lists.openstreetmap.org/listinfo/talk-it-southtyrol",contacts:[{name:"Martin Raifer",email:"tyr.asd@gmail.com"}],order:-3},"Trentino-Mailing-List":{id:"Trentino-Mailing-List",type:"mailinglist",locationSet:{include:["trentino.geojson"]},languageCodes:["it"],name:"OpenStreetMap mailing list for Trentino",description:"OpenStreetMap Italy regional talk list for Trentino",url:"https://lists.openstreetmap.org/listinfo/talk-it-trentino",contacts:[{name:"Luca Delucchi",email:"lucadeluge@gmail.com"}],order:-3},"Western-Slope-facebook":{id:"Western-Slope-facebook",type:"facebook",locationSet:{include:["grand_junction_co.geojson"]},languageCodes:["en"],name:"Western Slope OSM Facebook",description:"Mappers and OpenStreetMap users around Grand Junction, CO",url:"https://www.facebook.com/wsosm/",contacts:[{name:"Aaron Young",email:"aaron@kaartgroup.com"}],order:3},"Western-Slope-meetup":{id:"Western-Slope-meetup",type:"meetup",locationSet:{include:["grand_junction_co.geojson"]},languageCodes:["en"],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!",url:"https://www.meetup.com/Western-Slope-OpenStreetMap/",contacts:[{name:"Aaron Young",email:"aaron@kaartgroup.com"}],order:5},"al-forum":{id:"al-forum",type:"forum",locationSet:{include:["al"]},languageCodes:["en","sq"],name:"OSM Albania Forum",description:"OpenStreetMap Albania Forum",url:"https://forum.openstreetmap.org/viewforum.php?id=91",contacts:[{name:"Jonathan Beliën",email:"dev@jbelien.be"},{name:"Amanti Lulo",email:"amanti.lulo@gmail.com"}],order:-2},"al-maptime-tirana":{id:"al-maptime-tirana",type:"group",locationSet:{include:[[19.8156,41.3305]]},languageCodes:["en","sq"],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.",url:"http://maptime.io/tirana/",contacts:[{name:"Jonathan Beliën",email:"dev@jbelien.be"},{name:"Amanti Lulo",email:"amanti.lulo@gmail.com"}]},"al-telegram":{id:"al-telegram",type:"telegram",locationSet:{include:["al"]},languageCodes:["en","sq"],name:"OSM Albania Telegram channel",description:"OpenStreetMap Albania Telegram channel",url:"https://telegram.me/OpenStreetMapAL",contacts:[{name:"Jonathan Beliën",email:"dev@jbelien.be"},{name:"Amanti Lulo",email:"amanti.lulo@gmail.com"}]},"al-twitter":{id:"al-twitter",type:"twitter",locationSet:{include:["al"]},languageCodes:["en","sq"],name:"OpenStreetMap Albania Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/Osm_Albania"},"at-forum":{id:"at-forum",type:"forum",locationSet:{include:["at"]},languageCodes:["de","en"],name:"OpenStreetMap Austria Forum",description:"The official forum for OpenStreetMap questions in and around Austria",url:"https://forum.openstreetmap.org/viewforum.php?id=89",contacts:[{name:"emga",email:"emgaosm@gmail.com"}],order:-2},"at-mailinglist":{id:"at-mailinglist",type:"mailinglist",locationSet:{include:["at"]},languageCodes:["de"],name:"Talk-at Mailing List",description:"Talk-at is the official mailing list for the Austrian OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-at",contacts:[{name:"AT community",email:"info@openstreetmap.at"}],order:-3},"at-twitter":{id:"at-twitter",type:"twitter",locationSet:{include:["at"]},languageCodes:["de"],name:"OpenStreetMap Austria Twitter",description:"OpenStreetMap Austria On Twitter: {url}",url:"https://twitter.com/osm_at",contacts:[{name:"AT Community",email:"info@openstreetmap.at"}]},"be-chapter":{id:"be-chapter",type:"osm-lc",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap Belgium Local Chapter",description:"We help grow and improve OpenStreetMap in Belgium.",extendedDescription:"If you want to help to improve and grow the mapping community in Belgium, to make even more people crazy about mapping, OpenStreetMap Belgium is the right place for you!",url:"https://openstreetmap.be/",contacts:[{name:"BE community",email:"community@osm.be"}],order:1},"be-facebook":{id:"be-facebook",type:"facebook",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap BE Facebook Community",description:"Mappers and OpenStreetMap on Facebook in Belgium",url:"https://www.facebook.com/groups/1419016881706058/",contacts:[{name:"BE community",email:"community@osm.be"}]},"be-forum":{id:"be-forum",type:"forum",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap BE forum",description:"OpenStreetMap Belgium web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=29",contacts:[{name:"BE community",email:"community@osm.be"}],order:3},"be-irc":{id:"be-irc",type:"irc",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],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",url:"https://webchat.oftc.net/?channels=osmbe",contacts:[{name:"BE community",email:"community@osm.be"}],order:2},"be-mailinglist":{id:"be-mailinglist",type:"mailinglist",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"Talk-be Mailing List",description:"Talk-be is the official mailing list for the Belgian OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-be",contacts:[{name:"BE community",email:"community@osm.be"}],order:4},"be-matrix":{id:"be-matrix",type:"matrix",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],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.",url:"https://riot.im/app/#/group/+osmbe:matrix.org",contacts:[{name:"BE community",email:"community@osm.be"}],order:6},"be-meetup":{id:"be-meetup",type:"meetup",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],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!",url:"https://meetup.com/OpenStreetMap-Belgium/",contacts:[{name:"BE community",email:"community@osm.be"}],order:5},"be-twitter":{id:"be-twitter",type:"twitter",locationSet:{include:["be"]},languageCodes:["de","en","fr","nl"],name:"OpenStreetMap Belgium Twitter",description:"OSM Belgium on Twitter: @osm_be",url:"https://twitter.com/osm_be",contacts:[{name:"BE community",email:"community@osm.be"}],order:4},"bg-forum":{id:"bg-forum",type:"forum",locationSet:{include:["bg"]},languageCodes:["bg","en"],name:"OpenStreetMap Bulgaria Forum",description:"Forum of OpenStreetMap community in Bulgaria",url:"https://forum.openstreetmap.org/viewforum.php?id=57"},"bg-wiki":{id:"bg-wiki",type:"wiki",locationSet:{include:["bg"]},languageCodes:["bg","en"],name:"OpenStreetMap Wikiproject Bulgaria",description:"Wikiproject page for Bulgaria",url:"https://wiki.openstreetmap.org/wiki/WikiProject_Bulgaria",order:10},"bi-vc-cvl_wiki":{id:"bi-vc-cvl_wiki",type:"osm",locationSet:{include:["bi-vc-cvl.geojson"]},languageCodes:["it"],name:"OSMers BI-VC-CVL",description:"Mappers of northern Piedmont",extendedDescription:"In addition to the monthly meetings, we also have a WhatsApp group.",url:"https://wiki.openstreetmap.org/wiki/OSMers_BI-VC-CVL",contacts:[{name:"Andrea Musuruane",email:"musuruan@gmail.com"},{name:"Marco Brancolini",email:"mbranco2@gmail.com"}],order:3},"bw-facebook":{id:"bw-facebook",type:"facebook",locationSet:{include:["bw"]},languageCodes:["en","tn"],name:"Mapping Botswana on Facebook",description:"Page of OpenStreetMap in Botswana",url:"https://www.facebook.com/MappingBotswana/",contacts:[{name:"info@openstreetmap.org.bw",email:"info@openstreetmap.org.bw"}],order:3},"bw-twitter":{id:"bw-twitter",type:"twitter",locationSet:{include:["bw"]},languageCodes:["en","tn"],name:"Mapping Botswana on Twitter",description:"Twitter of OpenStreetMap in Botswana",url:"https://twitter.com/mappingbotswana",contacts:[{name:"info@openstreetmap.org.bw",email:"info@openstreetmap.org.bw"}]},byosm:{id:"byosm",type:"telegram",locationSet:{include:["by"]},languageCodes:["be","en","ru"],name:"OpenStreetMap Belarus",description:"OpenStreetMap Belarus telegram chat",url:"https://t.me/byosm",contacts:[{name:"Darafei Praliaskouski",email:"me@komzpa.net"}]},"cape-coast-youthmappers":{id:"cape-coast-youthmappers",type:"twitter",locationSet:{include:["cape_coast_gh.geojson"]},languageCodes:["en"],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.",url:"https://twitter.com/YouthmappersUCC",contacts:[{name:"Enock Seth Nyamador",email:"kwadzo459@gmail.com"}]},"ch-irc":{id:"ch-irc",type:"irc",locationSet:{include:["ch"]},languageCodes:["de","en","fr","it"],name:"OpenStreetMap Switzerland IRC",description:"Join #osm-ch on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-ch",contacts:[{name:"Swiss OpenStreetMap Association",email:"board@sosm.ch"}],order:-2},"ch-mailinglist":{id:"ch-mailinglist",type:"mailinglist",locationSet:{include:["ch"]},name:"Openstreetmap Schweiz/Suisse/Svizzera/Svizra Mailing List",description:"Mailing list for Switzerland",url:"http://lists.openstreetmap.ch/mailman/listinfo/talk-ch",order:1},"ch-twitter":{id:"ch-twitter",type:"twitter",locationSet:{include:["ch"]},languageCodes:["de","en","fr","it"],name:"OpenStreetMap Switzerland Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/SwissOSM",contacts:[{name:"Swiss OpenStreetMap Association",email:"board@sosm.ch"}]},"cuneo-telegram":{id:"cuneo-telegram",type:"telegram",locationSet:{include:["cuneo.geojson"]},languageCodes:["it"],name:"OpenStreetMap Cuneo Mappers",description:"OpenStreetMap Cuneo Telegram chat",url:"https://t.me/OSMCuneo",contacts:[{name:"Francesco Ansanelli",email:"francians@gmail.com"},{name:"Marco Brancolini",email:"mbranco2@gmail.com"}],order:3},"czech-community":{id:"czech-community",type:"osm",locationSet:{include:["cz"]},languageCodes:["cs","en","sk"],name:"Czech OSM community",description:"Map portal, website and contacts on OSM members in Czechia",url:"https://openstreetmap.cz/komunita",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"de-berlin-mailinglist":{id:"de-berlin-mailinglist",type:"mailinglist",locationSet:{include:["de-berlin-brandenburg.geojson"]},languageCodes:["de"],name:"Berlin Mailing List",description:"This is the mailing list for the Berlin OSM community",url:"https://lists.openstreetmap.de/listinfo/berlin",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}],order:-3},"de-berlin-meetup":{id:"de-berlin-meetup",type:"meetup",locationSet:{include:["de-berlin-brandenburg.geojson"]},languageCodes:["de"],name:"OpenStreetMap Berlin-Brandenburg Meetup",description:"Mappers and OpenStreetMap users in the Berlin area",url:"https://www.meetup.com/OSM-Berlin-Brandenburg/",contacts:[{name:"Christopher Lorenz",email:"osm@lorenz.lu"}],order:5},"de-berlin-telegram":{id:"de-berlin-telegram",type:"telegram",locationSet:{include:["de-berlin-brandenburg.geojson"]},languageCodes:["de"],name:"@osmberlin on Telegram",description:"OpenStreetMap Berlin Telegram chat",url:"https://t.me/osmberlin",contacts:[{name:"Christopher Lorenz",email:"osm@lorenz.lu"}]},"de-berlin-twitter":{id:"de-berlin-twitter",type:"twitter",locationSet:{include:["de-berlin-brandenburg.geojson"]},languageCodes:["de"],name:"OpenStreetMap Berlin Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/osmberlin",contacts:[{name:"Christopher Lorenz",email:"osm@lorenz.lu"}]},"de-forum":{id:"de-forum",type:"forum",locationSet:{include:["de"]},languageCodes:["de"],name:"OpenStreetMap DE forum",description:"OpenStreetMap Germany web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=14",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}],order:-2},"de-hamburg-telegram":{id:"de-hamburg-telegram",type:"telegram",locationSet:{include:["de-hamburg.geojson"]},languageCodes:["de"],name:"OSM Hamburg on Telegram",description:"OpenStreetMap Hamburg Telegram chat: {url}",url:"https://t.me/osm_de_hh"},"de-irc":{id:"de-irc",type:"irc",locationSet:{include:["de"]},languageCodes:["de"],name:"OpenStreetMap Germany IRC",description:"Join #osm-de on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-de",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}],order:-4},"de-mailinglist":{id:"de-mailinglist",type:"mailinglist",locationSet:{include:["de"]},languageCodes:["de"],name:"Talk-de Mailing List",description:"Talk-de is the official mailing list for the German OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-de",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}],order:-3},"de-matrix":{id:"de-matrix",type:"matrix",locationSet:{include:["de"]},languageCodes:["de"],name:"OpenStreetMap Germany Matrix",description:"Join #osm-de:matrix.org at https://riot.im/app/#/room/%23osm-de:matrix.org",url:"https://riot.im/app/#/room/%23osm-de:matrix.org",contacts:[{name:"Christopher Rossbach",email:"public.cr@protonmail.ch"}],order:4},"de-ostwestfalen-lippe-mailinglist":{id:"de-ostwestfalen-lippe-mailinglist",type:"mailinglist",locationSet:{include:["de-ostwestfalen-lippe.geojson"]},languageCodes:["de"],name:"OWL Mailing List",description:"This is the mailing list for the Ostwestfalen-Lippe OSM community",url:"https://gt.owl.de/mailman/listinfo/osm",contacts:[{name:"Florian Lohoff",email:"osm-owner@gt.owl.de"}],order:-3},"de-telegram":{id:"de-telegram",type:"telegram",locationSet:{include:["de"]},languageCodes:["de"],name:"OpenStreetMap Germany Telegram",description:"Join the OpenStreetMap Germany Telegram supergroup at {url}",url:"https://t.me/OSM_de",contacts:[{name:"Max N",email:"abonnements@revolwear.com"}]},"de-viersen-meetup":{id:"de-viersen-meetup",type:"osm",locationSet:{include:[[6.354282,51.264137]]},languageCodes:["de"],name:"OpenStreetMap Viersen Meetup",description:"OSM community and users meetup Kreis Viersen and Mönchengladbach",url:"https://wiki.openstreetmap.org/wiki/Niederrhein/Viersen/Stammtisch",order:5},"dk-forum":{id:"dk-forum",type:"forum",locationSet:{include:["dk"]},languageCodes:["da"],name:"OpenStreetMap Denmark Web Forum",description:"OpenStreetMap Denmark web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=48",contacts:[{name:"Talk-dk-owner",email:"talk-dk-owner@openstreetmap.org"}],order:-2},"dk-irc":{id:"dk-irc",type:"irc",locationSet:{include:["dk"]},languageCodes:["da"],name:"OpenStreetMap Denmark IRC",description:"Join #osm-dk on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-dk",contacts:[{name:"Talk-dk-owner",email:"talk-dk-owner@openstreetmap.org"}],order:-4},"dk-mailinglist":{id:"dk-mailinglist",type:"mailinglist",locationSet:{include:["dk"]},languageCodes:["da"],name:"Talk-dk Mailing List",description:"A mailing list to discuss OpenStreetMap in Denmark",url:"https://lists.openstreetmap.org/listinfo/talk-dk",contacts:[{name:"Talk-dk-owner",email:"talk-dk-owner@openstreetmap.org"}],order:-3},"es-twitter":{id:"es-twitter",type:"twitter",locationSet:{include:["es"]},languageCodes:["es"],name:"OpenStreetMap España Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/openstreetmapes"},"et-telegram":{id:"et-telegram",type:"telegram",locationSet:{include:["et"]},name:"@OpenStreetMapEthiopia on Telegram",description:"OpenStreetMap Ethiopia Telegram chat",url:"https://t.me/openstreetmapethiopia",contacts:[{name:"Ben Jamin",email:"benjazben10@gmail.com"}]},"fi-forum":{id:"fi-forum",type:"forum",locationSet:{include:["fi"]},languageCodes:["fi"],name:"OpenStreetMap FI forum",description:"OpenStreetMap Finland web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=15",contacts:[{name:"Talk-fi administrator",email:"talk-fi-owner@openstreetmap.org"}],order:-2},"fi-irc":{id:"fi-irc",type:"irc",locationSet:{include:["fi"]},languageCodes:["fi"],name:"OpenStreetMap Finland IRC",description:"Join #osm-fi on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-fi",contacts:[{name:"Talk-fi administrator",email:"talk-fi-owner@openstreetmap.org"}],order:-4},"fi-mailinglist":{id:"fi-mailinglist",type:"mailinglist",locationSet:{include:["fi"]},languageCodes:["fi"],name:"Talk-fi Mailing List",description:"Talk-fi is the official mailing list for the Finnish OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-fi",contacts:[{name:"Talk-fi administrator",email:"talk-fi-owner@openstreetmap.org"}],order:-3},"fr-chapter":{id:"fr-chapter",type:"osm-lc",locationSet:{include:["fr"]},languageCodes:["fr"],name:"OpenStreetMap France Local Chapter",description:"We help grow and improve OpenStreetMap in France.",url:"https://www.openstreetmap.fr/",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:1},"fr-facebook":{id:"fr-facebook",type:"facebook",locationSet:{include:["fr"]},languageCodes:["fr"],name:"OpenStreetMap France Facebook page",description:"OpenStreetMap France Facebook page",url:"https://www.facebook.com/osmfr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:3},"fr-forum":{id:"fr-forum",type:"forum",locationSet:{include:["fr"]},languageCodes:["fr"],name:"OpenStreetMap France web forum",description:"OpenStreetMap France web forum",url:"https://forum.openstreetmap.fr/",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:-2},"fr-irc":{id:"fr-irc",type:"irc",locationSet:{include:["fr"]},languageCodes:["fr"],name:"OpenStreetMap France on IRC",description:"Join #osm-fr on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:-4},"fr-mailinglist":{id:"fr-mailinglist",type:"mailinglist",locationSet:{include:["fr"]},languageCodes:["fr"],name:"Talk-fr Mailing List",description:"Talk-fr mailing list",url:"https://lists.openstreetmap.org/listinfo/talk-fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:-3},"fr-telegram":{id:"fr-telegram",type:"telegram",locationSet:{include:["fr"]},name:"OpenStreetMap France on Telegram",description:"A Telegram group for the OSM France community: {url}",url:"https://t.me/osmfr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:5},"fr-twitter":{id:"fr-twitter",type:"twitter",locationSet:{include:["fr"]},languageCodes:["fr"],name:"OpenStreetMap France on Twitter",description:"OpenStreetMap France on Twitter: {url}",url:"https://twitter.com/osm_fr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}]},"galicia-wiki":{id:"galicia-wiki",type:"wiki",locationSet:{include:["galicia.geojson"]},name:"OpenStreetMap Wikiproject Galicia",description:"Everything you need to know about mapping in Galicia: {url}",url:"https://wiki.openstreetmap.org/wiki/Gl:P%C3%A1xina_principal"},"gb-irc":{id:"gb-irc",type:"irc",locationSet:{include:["gb"]},languageCodes:["cy","en"],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",url:"https://webchat.oftc.net/?channels=osm-gb",contacts:[{name:"UK mailing list",email:"talk-gb-owner@lists.openstreetmap.org"}],order:2},"gb-mailinglist":{id:"gb-mailinglist",type:"mailinglist",locationSet:{include:["gb"]},languageCodes:["en"],name:"Talk-gb Mailing List",description:"Talk-gb is the main communication forum list for the UK (including Northern Ireland) OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-gb",contacts:[{name:"UK mailing list",email:"talk-gb-owner@lists.openstreetmap.org"}],order:4},geogeeks_perth_meetup:{id:"geogeeks_perth_meetup",type:"group",locationSet:{include:["western_australia.geojson"]},languageCodes:["en"],name:"GeoGeeks Perth Meetup",description:"Perth-based meetup group for people interested in mapping, geospatial data, and open source. We'll be working on anything that involves a sense of place.",url:"https://geogeeks.org",contacts:[{name:"GeoGeeks Perth",email:"geogeeks.perth@gmail.com"}]},"guatemala-telegram":{id:"guatemala-telegram",type:"telegram",locationSet:{include:["gt"]},languageCodes:["es"],name:"OSM Guatemala on Telegram",description:"OpenStreetMap Guatemala Telegram chat",url:"https://telegram.me/openstreetmapGT"},"hr-facebook":{id:"hr-facebook",type:"facebook",locationSet:{include:["hr"]},languageCodes:["hr"],name:"OpenStreetMap Croatia Facebook group",description:"OpenStreetMap Croatia Facebook group",url:"https://www.facebook.com/groups/541098862671461",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}],order:3},"hr-irc":{id:"hr-irc",type:"irc",locationSet:{include:["hr"]},languageCodes:["hr"],name:"OpenStreetMap Croatia on IRC",description:"Join #osm-hr on irc.freenode.org (port 6667)",url:"https://webchat.freenode.net/?url=irc://irc.freenode.net/osm-hr",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}],order:-4},"hr-mailinglist":{id:"hr-mailinglist",type:"mailinglist",locationSet:{include:["hr"]},languageCodes:["hr"],name:"Talk-hr Mailing List",description:"Talk-hr mailing list",url:"https://lists.openstreetmap.org/listinfo/talk-hr",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}],order:-3},"hu-facebook":{id:"hu-facebook",type:"facebook",locationSet:{include:["hu"]},languageCodes:["hu"],name:"OpenStreetMap HU on Facebook",description:"Mappers and OpenStreetMap Facebook in Hungary",url:"https://www.facebook.com/groups/osm.hu/",contacts:[{name:"Ferenc Veres",email:"info@openstreetmap.hu"}],order:3},"hu-forum":{id:"hu-forum",type:"forum",locationSet:{include:["hu"]},languageCodes:["hu"],name:"OpenStreetMap HU forum",description:"OpenStreetMap Hungary web forum",url:"https://groups.google.com/forum/#!forum/openstreetmap-hungary",contacts:[{name:"Ferenc Veres",email:"info@openstreetmap.hu"}],order:-2},"hu-matrix":{id:"hu-matrix",type:"matrix",locationSet:{include:["hu"]},languageCodes:["en","hu"],name:"OpenStreetMap HU matrix room",description:"OpenStreetMap Hungary matrix chat",extendedDescription:"OpenStreetMap chat on map topics. One of the OSM community support forums.",url:"https://riot.grin.hu/#/room/#osm:grin.hu",contacts:[{name:"Peter 'grin' Gervai",email:"grin@grin.hu"}]},"hu-meetup":{id:"hu-meetup",type:"meetup",locationSet:{include:["hu"]},languageCodes:["hu"],name:"OpenStreetMap Hungary Meetup",description:"The platform for organizing meetups in Hungary",url:"https://www.meetup.com/OpenStreetMap-Hungary",contacts:[{name:"Ferenc Veres",email:"info@openstreetmap.hu"}],order:5},"il-telegram":{id:"il-telegram",type:"telegram",locationSet:{include:["il"]},name:"OSM Israel on Telegram",description:"A Telegram group for the OpenStreetMap community in Israel: {url}",url:"https://t.me/OSM_Israel",order:5},"ireland-chapter":{id:"ireland-chapter",type:"osm-lc",locationSet:{include:["ie"]},languageCodes:["en"],name:"OpenStreetMap Ireland Local Chapter",description:"We help grow and improve OpenStreetMap in Ireland.",extendedDescription:"OpenStreetMap Ireland provides an advocate voice for the OpenStreetMap project on the island of Ireland, in addition to interacting with other open initiatives.",url:"https://www.openstreetmap.ie/",order:1},"ireland-facebook":{id:"ireland-facebook",type:"facebook",locationSet:{include:["ie"]},languageCodes:["en"],name:"OpenStreetMap Ireland Facebook group",description:"OpenStreetMap Ireland Facebook page",url:"https://www.facebook.com/groups/OpenStreetMapIreland",order:3},"ireland-irc":{id:"ireland-irc",type:"irc",locationSet:{include:["ie"]},languageCodes:["en"],name:"OpenStreetMap Ireland IRC",description:"Join #osm-ie on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-ie on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question",url:"https://webchat.oftc.net/?channels=osm-ie",order:-1},"ireland-mailinglist":{id:"ireland-mailinglist",type:"mailinglist",locationSet:{include:["ie"]},languageCodes:["en"],name:"Talk-ie Mailing List",description:"Talk-ie is the mailing list for the Irish OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-ie",order:2},"ireland-telegram":{id:"ireland-telegram",type:"telegram",locationSet:{include:["ie"]},languageCodes:["en"],name:"OSM Ireland on Telegram",description:"OpenStreetMap Ireland Telegram chat",url:"https://t.me/joinchat/BDLI7w9jCWm7Bwm2T06jwQ?fbclid=IwAR1ltY85Y7_4_CZhhwLOsLLppzis1MOVRRy897epT99JuZ9ZHZF8wpDRIfk",order:4},"ireland-twitter":{id:"ireland-twitter",type:"twitter",locationSet:{include:["ie"]},languageCodes:["en"],name:"OpenStreetMap IE on Twitter",description:"OpenStreetMap IE on Twitter: {url}",url:"https://twitter.com/osm_ie",order:5},"is-chapter":{id:"is-chapter",type:"osm-lc",locationSet:{include:["is"]},languageCodes:["en","is"],name:"OpenStreetMap Iceland Local Chapter",description:"We help grow and improve OpenStreetMap in Iceland.",url:"https://www.hlidskjalf.is/",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}],order:1},"is-facebook":{id:"is-facebook",type:"facebook",locationSet:{include:["is"]},languageCodes:["en","is"],name:"OSM Iceland on Facebook",description:"Page of OpenStreetMap in Iceland",url:"https://www.facebook.com/osmiceland/",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}],order:3},"is-mailinglist":{id:"is-mailinglist",type:"mailinglist",locationSet:{include:["is"]},languageCodes:["en","is"],name:"Talk-is Mailing List",description:"Talk-is is the official mailing list for the Icelandic OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-is",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}],order:-3},"is-twitter":{id:"is-twitter",type:"twitter",locationSet:{include:["is"]},languageCodes:["en","is"],name:"OSM Iceland on Twitter",description:"Twitter of OpenStreetMap in Iceland",url:"https://twitter.com/openstreetmapis",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}]},"it-chapter":{id:"it-chapter",type:"osm-lc",locationSet:{include:["it"]},languageCodes:["it"],name:"OpenStreetMap Italy Local Chapter",description:"We help grow and improve OpenStreetMap in Italy.",url:"https://www.wikimedia.it/",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:1},"it-facebook":{id:"it-facebook",type:"facebook",locationSet:{include:["it"]},languageCodes:["it"],name:"OpenStreetMap Italy Facebook",description:"Join the OpenStreetMap Italy community on Facebook",url:"https://www.facebook.com/OpenStreetMap.Italia/",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:3},"it-irc":{id:"it-irc",type:"irc",locationSet:{include:["it"]},languageCodes:["it"],name:"OpenStreetMap Italy IRC",description:"Join #osm-it on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-it",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:-4},"it-mailinglist":{id:"it-mailinglist",type:"mailinglist",locationSet:{include:["it"]},languageCodes:["it"],name:"Talk-it Mailing List",description:"Talk-it is the official mailing list for the Italian OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-it",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:-3},"it-telegram":{id:"it-telegram",type:"telegram",locationSet:{include:["it"]},languageCodes:["it"],name:"@OpenStreetMapItalia on Telegram",description:"OpenStreetMap Italy Telegram chat",url:"https://t.me/OpenStreetMapItalia",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:4},"it-twitter":{id:"it-twitter",type:"twitter",locationSet:{include:["it"]},languageCodes:["it"],name:"OpenStreetMap Italy Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/OpenStreetMapIt",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:2},"kazakhstan-telegram":{id:"kazakhstan-telegram",type:"telegram",locationSet:{include:["kz"]},name:"OSM Kazakhstan on Telegram",description:"OpenStreetMap Kazakhstan Telegram chat",url:"https://t.me/osm_kz"},"kosovo-matrix":{id:"kosovo-matrix",type:"matrix",locationSet:{include:["xk"]},languageCodes:["en","sq","sr"],name:"OpenStreetMap Kosovo on Matrix (bridged with the one in Telegram)",description:"Semi-official all-Kosovo public group. We welcome all mappers from anywhere in any language.",url:"https://riot.im/app/#/room/#osmkosovo:matrix.org"},"kosovo-telegram":{id:"kosovo-telegram",type:"telegram",locationSet:{include:["xk"]},languageCodes:["en","sq","sr"],name:"OpenStreetMap Kosovo on Telegram",description:"Semi-official all-Kosovo Telegram public group. We welcome all mappers from anywhere in any language.",url:"https://t.me/osmkosovo",contacts:[{name:"Guillaume Rischard",email:"guillaumenospam@openstreetmapnospam.lu"}],order:1},"latam-facebook":{id:"latam-facebook",type:"facebook",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Latin America Facebook",description:"Mappers and OpenStreetMap on Facebook in Latin America",url:"https://www.facebook.com/osmlatam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:1},"latam-irc":{id:"latam-irc",type:"irc",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Latin America IRC",description:"Join #osm-latam on irc.oftc.net (port 6667)",url:"http://webchat.oftc.net/?channels=osm-latam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:3},"latam-mailinglist":{id:"latam-mailinglist",type:"mailinglist",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"Talk-latam Mailing List",description:"Talk-latam is the official mailing list for the Latinamerican OpenStreetMap community",url:"https://lists.openstreetmap.org/listinfo/talk-latam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:2},"latam-matrix":{id:"latam-matrix",type:"matrix",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Latin America Matrix",description:"Chat with other members of the Latinamerican OSM community, it is bridged with the Telegram chat",url:"https://matrix.to/#/#osm-latam:matrix.org",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:3},"latam-telegram":{id:"latam-telegram",type:"telegram",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Latin America Telegram",description:"Chat with other members of the Latinamerican OSM community, it is bridged with the Matrix chat",url:"https://t.me/osmlatam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:3},"latam-twitter":{id:"latam-twitter",type:"twitter",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Latin America Twitter",description:"OpenStreetMap Latin America on Twitter: {url}",url:"https://twitter.com/osmlatam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:3},"latam-wiki":{id:"latam-wiki",type:"wiki",locationSet:{include:["419"]},languageCodes:["en","es","pt"],name:"OpenStreetMap Wikiproject Latin America",description:"Everything you need to know about mapping in Latin America",url:"https://wiki.openstreetmap.org/wiki/ES:OSM_Latam",contacts:[{name:"OSM LATAM Community",email:"info@osmlatam.org"}],order:2},"lu-mailinglist":{id:"lu-mailinglist",type:"mailinglist",locationSet:{include:["lu"]},languageCodes:["de","en","fr","lb"],name:"Talk-lu Mailing List",description:"Official mailing list for the Luxembourgish OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-lu",contacts:[{name:"David Morais Ferreira",email:"contact@openstreetmap.lu"}],order:-3},"mailinglist-sk-googlegroups":{id:"mailinglist-sk-googlegroups",type:"mailinglist",locationSet:{include:["sk"]},languageCodes:["cz","en","sk"],name:"Slovak mailing list on google groups",description:"Official mailing list for Slovak community",url:"https://groups.google.com/forum/#!forum/osm_sk",contacts:[{name:"OpenStreetMap Slovakia",email:"osm_sk@googlegroups.com"}],order:-3},"map-kibera":{id:"map-kibera",type:"group",locationSet:{include:[[36.8196,-1.2904]]},languageCodes:["en"],name:"Map Kibera Trust",description:"Map Kibera is a registered organization working in Kenya",extendedDescription:"Map Kibera Trust’s mission is to increase influence and representation of marginalized communities through the creative use of digital tools for action.",url:"https://mapkibera.org/",contacts:[{name:"Map Kibera",email:"contact@mapkibera.org"}],order:4},"mappa-mercia-group":{id:"mappa-mercia-group",type:"group",locationSet:{include:["england-west-midlands.geojson"]},languageCodes:["en"],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.",url:"http://www.mappa-mercia.org/",contacts:[{name:"Brian Prangle",email:"community@mappa-mercia.org"}],order:5},"md-googlegroup":{id:"md-googlegroup",type:"forum",locationSet:{include:["md"]},languageCodes:["mo","ro","ru"],name:"OSM Moldova Google Group",description:"OpenStreetMap Moldova Google Group",url:"https://groups.google.com/forum/#!forum/openstreetmap-moldova",contacts:[{name:"Ion Moldovan",email:"6yhxhs7t7huf@inbox.ru"}],order:1},"md-telegram":{id:"md-telegram",type:"telegram",locationSet:{include:["md"]},languageCodes:["mo","ro","ru"],name:"@OSMMoldova on Telegram",description:"OpenStreetMap Moldova Telegram chat",url:"https://t.me/OSMMoldova",contacts:[{name:"Ion Moldovan",email:"6yhxhs7t7huf@inbox.ru"}],order:2},"ni-facebook":{id:"ni-facebook",type:"facebook",locationSet:{include:["ni"]},languageCodes:["es"],name:"OpenStreetMap NI Community",description:"Mappers and OpenStreetMap on Facebook in Nicaragua",url:"https://www.facebook.com/mapanica/",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}],order:3},"ni-mailinglist":{id:"ni-mailinglist",type:"mailinglist",locationSet:{include:["ni"]},languageCodes:["es"],name:"Talk-ni Mailing List",description:"Talk-ni is the official mailing list for the Nicaraguan OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-ni",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}],order:-3},"ni-telegram":{id:"ni-telegram",type:"telegram",locationSet:{include:["ni"]},languageCodes:["es"],name:"OSM Nicaragua on Telegram",description:"OpenStreetMap Nicaragua Telegram chat",url:"https://telegram.me/mapanica",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}]},"ni-twitter":{id:"ni-twitter",type:"twitter",locationSet:{include:["ni"]},languageCodes:["es"],name:"OpenStreetMap Nicaragua Twitter",description:"OSM Nicaragua on Twitter: @osm_ni",url:"https://twitter.com/osm_ni",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}]},"nl-forum":{id:"nl-forum",type:"forum",locationSet:{include:["nl"]},languageCodes:["nl"],name:"Netherlands OpenStreetMap forum",description:"OpenStreetMap Netherlands web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=12",contacts:[{name:"Peter Elderson",email:"pelderson@gmail.com"}],order:3},"nl-telegram":{id:"nl-telegram",type:"telegram",locationSet:{include:["nl"]},languageCodes:["nl"],name:"Netherlands OpenStreetMap Telegram",description:"A Telegram group for the OSM Netherlands community: {url}",url:"https://t.me/osm_nl",contacts:[{name:"Peter Elderson",email:"pelderson@gmail.com"}],order:5},"no-forum":{id:"no-forum",type:"forum",locationSet:{include:["no"]},languageCodes:["no"],name:"OpenStreetMap Norway Web Forum",description:"OpenStreetMap Norway web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=68",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}],order:-2},"no-irc":{id:"no-irc",type:"irc",locationSet:{include:["no"]},languageCodes:["no"],name:"OpenStreetMap Norway on IRC",description:"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway",url:"https://webchat.oftc.net/?channels=osm-no",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}],order:-4},"no-mailinglist":{id:"no-mailinglist",type:"mailinglist",locationSet:{include:["no"]},languageCodes:["no"],name:"OpenStreetMap Norway mailing list",description:"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway",url:"https://lists.nuug.no/mailman/listinfo/kart",contacts:[{name:"OpenStreetMap Norway",email:"kart@nuug.no"}],order:-3},"no-telegram":{id:"no-telegram",type:"telegram",locationSet:{include:["no"]},languageCodes:["no"],name:"@OSM_no on Telegram",description:"OpenStreetMap Norway Telegram chat",url:"https://t.me/OSM_no",contacts:[{name:"Syver Stensholt",email:"sssandum@gmail.com"}]},"osm-afghanistan-facebook":{id:"osm-afghanistan-facebook",type:"facebook",locationSet:{include:["af"]},languageCodes:["en","fa","ps"],name:"OpenStreetMap Afghanistan",description:"Improve OpenStreetMap in Afghanistan",url:"https://www.facebook.com/groups/321292812113316/",contacts:[{name:"Walker Kosmidou-Bradley",email:"walker.t.bradley@gmail.com"}],order:3},"osm-africa-telegram":{id:"osm-africa-telegram",type:"telegram",locationSet:{include:["002"]},name:"OpenStreetMap Africa Telegram",description:"OpenStreetMap Telegram for Africa",url:"https://t.me/OSMAfrica",contacts:[{name:"OSM Africa",email:"info@openstreetmap.africa"}]},"osm-asia-telegram":{id:"osm-asia-telegram",type:"telegram",locationSet:{include:["142"]},name:"OpenStreetMap Asia Telegram",description:"Join our family: {url}",url:"https://t.me/OpenStreetMapAsia",contacts:[{name:"Erwin Olario",email:"govvin@gmail.com"}]},"osm-at":{id:"osm-at",type:"osm",locationSet:{include:["at"]},languageCodes:["de"],name:"OpenStreetMap Austria",description:"The platform for information on OpenStreetMap in Austria",url:"https://www.openstreetmap.at/",contacts:[{name:"AT community",email:"info@openstreetmap.at"}]},"osm-ch":{id:"osm-ch",type:"osm-lc",locationSet:{include:["ch"]},languageCodes:["de","en","fr","it"],name:"OpenStreetMap Switzerland",description:"The platform for information on OpenStreetMap in Switzerland",url:"https://osm.ch/",contacts:[{name:"Swiss OpenStreetMap Association",email:"board@sosm.ch"}]},"osm-de":{id:"osm-de",type:"osm-lc",locationSet:{include:["de"]},languageCodes:["de"],name:"OpenStreetMap Germany",description:"The platform for information on OpenStreetMap in Germany",url:"https://www.openstreetmap.de/",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}]},"osm-gh-facebook":{id:"osm-gh-facebook",type:"facebook",locationSet:{include:["gh"]},languageCodes:["en"],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.",url:"https://www.facebook.com/OSMGhana/",contacts:[{name:"Enock Seth Nyamador",email:"enock@osmghana.org"}],order:3},"osm-gh-telegram":{id:"osm-gh-telegram",type:"telegram",locationSet:{include:["gh"]},languageCodes:["en"],name:"OpenStreetMap Ghana Telegram",description:"OpenStreetMap Ghana community on Telegram",url:"https://t.me/osmghana",contacts:[{name:"Enock Seth Nyamador",email:"enock@osmghana.org"}]},"osm-gh-twitter":{id:"osm-gh-twitter",type:"twitter",locationSet:{include:["gh"]},languageCodes:["en"],name:"OpenStreetMap Ghana on Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/osmghana",contacts:[{name:"Enock Seth Nyamador",email:"enock@osmghana.org"}]},"osm-india-forum":{id:"osm-india-forum",type:"forum",locationSet:{include:["in"]},name:"OpenStreetMap India forum",description:"OpenStreetMap India web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=65",contacts:[{name:"OpenStreetMap India",email:"openstreetmapindia@gmail.com"}],order:-2},"osm-india-github":{id:"osm-india-github",type:"github",locationSet:{include:["in"]},name:"OpenStreetMap India GitHub",description:"Code with us: {url}",url:"https://github.com/osm-in",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-india-telegram":{id:"osm-india-telegram",type:"telegram",locationSet:{include:["in"]},name:"OpenStreetMap India Telegram",description:"Join our family: {url}",url:"https://t.me/OSMIndia",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-india-website":{id:"osm-india-website",type:"osm",locationSet:{include:["in"]},name:"OpenStreetMap India",description:"Mappers and OpenStreetMap users in India",url:"https://openstreetmap.in/",contacts:[{name:" OpenStreetMap India",email:"openstreetmapindia@gmail.com"}]},"osm-india-wiki":{id:"osm-india-wiki",type:"wiki",locationSet:{include:["in"]},name:"OpenStreetMap Wikiproject India",description:"Everything you need to know about mapping in India: {url}",url:"https://wiki.openstreetmap.org/wiki/WikiProject_India",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-india-youtube":{id:"osm-india-youtube",type:"youtube",locationSet:{include:["in"]},name:"OpenStreetMap India Youtube",description:"Subscribe to our channel: {url}",url:"https://www.youtube.com/channel/UCu5sKaPU04x0RJkgGkoFORw",contacts:[{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-iran-aparat":{id:"osm-iran-aparat",type:"aparat",locationSet:{include:["ir"]},languageCodes:["fa"],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.",url:"https://www.aparat.com/osm_iran",contacts:[{name:"Iman",email:"iriman@chmail.ir"}]},"osm-iran-forum":{id:"osm-iran-forum",type:"forum",locationSet:{include:["ir"]},languageCodes:["fa"],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!",url:"https://forum.openstreetmap.org/viewforum.php?id=103",contacts:[{name:"Iman",email:"iriman@chmail.ir"}],order:-2},"osm-iran-telegram":{id:"osm-iran-telegram",type:"telegram",locationSet:{include:["ir"]},languageCodes:["fa"],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.",url:"https://t.me/openstreetmapir",contacts:[{name:"Iman",email:"iriman@chmail.ir"}]},"osm-kenya":{id:"osm-kenya",type:"twitter",locationSet:{include:["ke"]},languageCodes:["en"],name:"OSM Kenya",description:"OSM Kenya is a community of OSM contributors and users",extendedDescription:"OSM is a local community for individuals interested in OpenStreetMap including organizations, developers, and YouthMappers chapters in the country.",url:"https://twitter.com/OSMKenya",contacts:[{name:"OSM Kenya",email:"osmkenya@gmail.com"}],order:4},"osm-kerala-telegram":{id:"osm-kerala-telegram",type:"telegram",locationSet:{include:["india_kerala.geojson"]},name:"OpenStreetMap Kerala Telegram",description:"We map Kerala together. Join our telegram group. {url}",url:"https://t.me/osmkerala",contacts:[{name:"Jaisen Nedumpala",email:"jaisuvyas@gmail.com"},{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-kerala-wiki":{id:"osm-kerala-wiki",type:"wiki",locationSet:{include:["india_kerala.geojson"]},name:"OpenStreetMap Kerala",description:"Want to know more about Kerala Mapping: {url}",url:"https://wiki.openstreetmap.org/wiki/Kerala",contacts:[{name:"Kevin",email:"muzirian@gmail.com"},{name:"Naveen Francis",email:"naveenpf@gmail.com"}]},"osm-mg-facebook":{id:"osm-mg-facebook",type:"facebook",locationSet:{include:["mg"]},languageCodes:["fr","mg"],name:"OpenStreetMap Madagascar Facebook Group",description:"Malagasy Facebook group for people interested in OpenStreetMap.",url:"https://www.facebook.com/groups/1601381123461284/",contacts:[{name:"Brice Ramamonjy",email:"rafaby21@gmail.com"},{name:"Dolly Andriatsiferana",email:"privatemajory@gmail.com"}],order:3},"osm-ni":{id:"osm-ni",type:"group",locationSet:{include:["ni"]},languageCodes:["es"],name:"MapaNica.net",description:"Provide OSM services and information for the local community in Nicaragua",url:"https://www.mapanica.net/",contacts:[{name:"NI Community",email:"talk-ni-owner@openstreetmap.org"}]},"osm-se":{id:"osm-se",type:"osm",locationSet:{include:["se"]},languageCodes:["sv"],name:"OpenStreetMap.se",description:"Provide OSM services and information for the local community in Sweden",url:"http://openstreetmap.se/",order:1},"osm-za-twitter":{id:"osm-za-twitter",type:"twitter",locationSet:{include:["za"]},languageCodes:["en"],name:"OpenStreetMap South Africa on Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/OpenStreetMapZA",contacts:[{name:"Grant Slater",email:"osm@firefishy.com"}]},"osmcz-facebook":{id:"osmcz-facebook",type:"facebook",locationSet:{include:["cz"]},languageCodes:["cs","en","sk"],name:"OpenStreetMap CZ on Facebook",description:"Follow Czech community on Facebook - including translated WeeklyOSM!",url:"https://www.facebook.com/osmcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}],order:3},"osmcz-twitter":{id:"osmcz-twitter",type:"twitter",locationSet:{include:["cz"]},languageCodes:["cs","en","sk"],name:"Czech twitter @osmcz",description:"Follow czech community on Twitter - including translated WeeklyOSM!",url:"https://twitter.com/osmcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}]},"osmgraz-meetup":{id:"osmgraz-meetup",type:"meetup",locationSet:{include:[[15.4461,47.0556]]},languageCodes:["de","en"],name:"OSM community meetup Graz",description:"Monthly meetup of the OpenStreetMap community in Graz",url:"https://wiki.openstreetmap.org/wiki/Graz/Stammtisch",contacts:[{name:"Michael Maier",email:"michael.maier@secure.mailbox.org"}],order:5},"osmgraz-twitter":{id:"osmgraz-twitter",type:"twitter",locationSet:{include:[[15.4461,47.0556]]},languageCodes:["de","en"],name:"OSM community Graz on twitter",description:"OpenStreetMap community in Graz on twitter",url:"https://twitter.com/osmgraz",contacts:[{name:"Michael Maier",email:"michael.maier@secure.mailbox.org"}]},"panama-telegram":{id:"panama-telegram",type:"telegram",locationSet:{include:["pa"]},languageCodes:["es"],name:"OSM Panama on Telegram",description:"OpenStreetMap Panama Telegram chat",url:"https://telegram.me/Comunidad_OSM_Panama"},"pt-mailinglist":{id:"pt-mailinglist",type:"mailinglist",locationSet:{include:["pt"]},languageCodes:["pt"],name:"Talk-pt Mailing List",description:"Talk-pt is the official mailing list for the Portuguese OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-pt",contacts:[{name:"Nuno Caldeira",email:"hello@iamnunocaldeira.com"}],order:-3},"pt-telegram":{id:"pt-telegram",type:"telegram",locationSet:{include:["pt"]},languageCodes:["pt"],name:"OpenStreetMap Portugal on Telegram",description:"Telegram Group of the Portuguese OpenStreetMap community {url}",url:"https://t.me/OSMPortugal",contacts:[{name:"Nuno Caldeira",email:"hello@iamnunocaldeira.com"}]},"romania-facebook":{id:"romania-facebook",type:"facebook",locationSet:{include:["ro"]},name:"OpenStreetMap Romania Facebook group",description:"Group for mappers and users of OpenStreetMap in Romania",url:"https://www.facebook.com/groups/1487443198159793/",order:1},"romania-telegram":{id:"romania-telegram",type:"telegram",locationSet:{include:["ro"]},name:"@OSMRomania on Telegram",description:"OpenStreetMap Romania Telegram chat",url:"https://t.me/OSMRomania",order:2},"sa-telegram":{id:"sa-telegram",type:"telegram",locationSet:{include:["sa"]},name:"OSM Saudi Arabia on Telegram",description:"A Telegram group for the OpenStreetMap community in Saudi Arabia: {url}",url:"https://t.me/OSMSaudi",order:5},"scotland-twitter":{id:"scotland-twitter",type:"twitter",locationSet:{include:["scotland.geojson"]},languageCodes:["en"],name:"OpenStreetMap Alba on Twitter",description:"OpenStreetMap Alba on Twitter: {url}",url:"https://twitter.com/OSMScotland",order:4},"se-facebook":{id:"se-facebook",type:"facebook",locationSet:{include:["se"]},languageCodes:["sv"],name:"OpenStreetMap Sweden Facebook",description:"OpenStreetMap Sweden on Facebook",url:"https://www.facebook.com/groups/osmsweden/",order:3},"se-forum":{id:"se-forum",type:"forum",locationSet:{include:["se"]},languageCodes:["sv"],name:"OpenStreetMap Sweden Web Forum",description:"OpenStreetMap Sweden web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=4",order:-2},"se-irc":{id:"se-irc",type:"irc",locationSet:{include:["se"]},languageCodes:["sv"],name:"OpenStreetMap Sweden IRC",description:"Join #osm.se on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm.se",order:-4},"se-mailinglist":{id:"se-mailinglist",type:"mailinglist",locationSet:{include:["se"]},languageCodes:["sv"],name:"Talk-se Mailing List",description:"A mailing list to discuss OpenStreetMap in Sweden",url:"https://lists.openstreetmap.org/listinfo/talk-se",contacts:[{name:"Talk-se-owner",email:"talk-se-owner@openstreetmap.org"}],order:-3},"se-telegram":{id:"se-telegram",type:"telegram",locationSet:{include:["se"]},languageCodes:["sv"],name:"OSM Sweden on Telegram",description:"OpenStreetMap Sweden Telegram chat",url:"https://t.me/osmSE",order:4},"se-twitter":{id:"se-twitter",type:"twitter",locationSet:{include:["se"]},languageCodes:["sv"],name:"OpenStreetMap Sweden on Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/openstreetmapse",order:2},"si-forum":{id:"si-forum",type:"forum",locationSet:{include:["si"]},languageCodes:["en","sl"],name:"OpenStreetMap Slovenia Forum",description:"Forum of OpenStreetMap community in Slovenia",url:"https://forum.openstreetmap.org/viewforum.php?id=58",contacts:[{name:"OpenStreetMap Slovenia",email:"talk-si@openstreetmap.org"}],order:-2},"si-mailinglist":{id:"si-mailinglist",type:"mailinglist",locationSet:{include:["si"]},languageCodes:["en","sl"],name:"OpenStreetMap Slovenia mailing list",description:"Mailing list of OpenStreetMap community in Slovenia",url:"https://lists.openstreetmap.org/listinfo/talk-si",contacts:[{name:"OpenStreetMap Slovenia",email:"talk-si@openstreetmap.org"}],order:-3},"si-twitter":{id:"si-twitter",type:"twitter",locationSet:{include:["si"]},languageCodes:["en","sl"],name:"OpenStreetMap Slovenia Twitter",description:"Follow OpenStreetMap Slovenia On Twitter: {url}",url:"https://twitter.com/OpenStreetMapSi",contacts:[{name:"OpenStreetMap Slovenia",email:"talk-si@openstreetmap.org"}]},"sk-facebook":{id:"sk-facebook",type:"facebook",locationSet:{include:["sk"]},languageCodes:["sk"],name:"Freemap.sk Slovakia community Facebook page",description:"Freemap.sk Slovakia community Facebook page",url:"https://www.facebook.com/FreemapSlovakia",contacts:[{name:"OpenStreetMap Freemap Slovakia",email:"podpora@freemap.sk"}],order:3},"sk-freemap":{id:"sk-freemap",type:"osm",locationSet:{include:["sk"]},languageCodes:["cz","hu","sk"],name:"OpenStreetMap Website Freemap Slovakia",description:"OpenStreetMap map website with tools in Slovakia and surrounding regions",url:"https://www.freemap.sk",contacts:[{name:"osm_sk",email:"osm_sk@googlegroups.com"}]},"sk-freemap-wiki":{id:"sk-freemap-wiki",type:"wiki",locationSet:{include:["sk"]},languageCodes:["sk"],name:"OpenStreetMap Freemap Slovakia Wiki",description:"OpenStreetMap wiki for Slovak mappers and community",url:"http://wiki.freemap.sk",contacts:[{name:"osm_sk",email:"osm_sk@googlegroups.com"}]},"sk-twitter":{id:"sk-twitter",type:"twitter",locationSet:{include:["sk"]},languageCodes:["sk"],name:"OpenStreetMap Freemap Slovensko on Twitter",description:"OpenStreetMap Freemap Slovensko on Twitter: {url}",url:"https://twitter.com/FreemapSlovakia",contacts:[{name:"OpenStreetMap Freemap Slovensko",email:"podpora@freemap.sk"}]},"talk-au":{id:"talk-au",type:"mailinglist",locationSet:{include:["au"]},languageCodes:["en"],name:"Talk-au Mailing List",description:"Place for Aussie mappers to chat",url:"https://lists.openstreetmap.org/listinfo/talk-au",contacts:[{name:"Ben Kelley",email:"ben.kelley@gmail.com"},{name:"Steve Bennett",email:"stevagewp@gmail.com"},{name:"Ian Sergeant",email:"inas66+osm@gmail.com"}],order:4},"talk-cz-mailinglist":{id:"talk-cz-mailinglist",type:"mailinglist",locationSet:{include:["cz"]},languageCodes:["cs","en","sk"],name:"Czech mailing list (talk-cz)",description:"Talk-cz is the official mailing list for Czech community",url:"https://openstreetmap.cz/talkcz",contacts:[{name:"osmcz",email:"dev@openstreetmap.cz"}],order:-3},"talk-gh":{id:"talk-gh",type:"mailinglist",locationSet:{include:["gh"]},languageCodes:["en"],name:"Talk-gh Mailing List",description:"Talk-gh is the official mailing list for Ghana OSM community.",url:"https://lists.openstreetmap.org/listinfo/talk-gh",contacts:[{name:"Enock Seth Nyamador",email:"kwadzo459@gmail.com"}],order:-3},"talk-it-lazio":{id:"talk-it-lazio",type:"mailinglist",locationSet:{include:["lazio.geojson"]},languageCodes:["it"],name:"OpenStreetMap IT Lazio",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Rome and Lazio area.",url:"https://lists.openstreetmap.org/listinfo/talk-it-lazio",signupUrl:"https://lists.openstreetmap.org/listinfo/talk-it-lazio",contacts:[{name:"Martin Koppenhoefer",email:"dieterdreist@gmail.com"}],order:-3},"talk-it-piemonte_mailinglist":{id:"talk-it-piemonte_mailinglist",type:"mailinglist",locationSet:{include:["piemonte.geojson"]},languageCodes:["it"],name:"OSM Italy regional talk list for Piemonte",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Piemonte region.",url:"https://lists.openstreetmap.org/listinfo/talk-it-piemonte",signupUrl:"https://lists.openstreetmap.org/listinfo/talk-it-piemonte",contacts:[{name:"Marco Brancolini",email:"mbranco2@gmail.com"},{name:"Andrea Musuruane",email:"musuruan@gmail.com"}],order:2},"talk-mg":{id:"talk-mg",type:"mailinglist",locationSet:{include:["mg"]},languageCodes:["fr","mg"],name:"Talk-mg Mailing List",description:"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss.",url:"https://lists.openstreetmap.org/listinfo/talk-mg",contacts:[{name:"Brice Ramamonjy",email:"rafaby21@gmail.com"},{name:"Dolly Andriatsiferana",email:"privatemajory@gmail.com"}],order:-3},"talk-nz":{id:"talk-nz",type:"mailinglist",locationSet:{include:["nz"]},languageCodes:["en"],name:"Talk-nz Mailing List",description:"New Zealand's OSM community talk",url:"https://lists.openstreetmap.org/listinfo/talk-nz",contacts:[{name:"Talk NZ Owner",email:"talk-nz-owner@openstreetmap.org"}],order:-3},"talk-za":{id:"talk-za",type:"mailinglist",locationSet:{include:["za"]},languageCodes:["en"],name:"Talk-za Mailing List",description:"Talk-za is the official mailing list for South African OSM community.",url:"https://lists.openstreetmap.org/listinfo/talk-za",contacts:[{name:"Grant Slater",email:"osm@firefishy.com"}]},"ua-facebook":{id:"ua-facebook",type:"facebook",locationSet:{include:["ua"]},languageCodes:["uk"],name:"OpenStreetMap Ukraine Facebook group",description:"Join the OpenStreetMap Ukraine community on Facebook",url:"https://www.facebook.com/openstreetmapua/",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:3},"ua-forum":{id:"ua-forum",type:"forum",locationSet:{include:["ua"]},languageCodes:["en","ru","uk"],name:"OpenStreetMap Ukraine Forum",description:"Forum of OpenStreetMap community in Ukraine",url:"https://forum.openstreetmap.org/viewforum.php?id=40",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:2},"ua-github":{id:"ua-github",type:"github",locationSet:{include:["ua"]},languageCodes:["en","uk"],name:"OpenStreetMap Ukraine on GitHub",description:"OpenStreetMap Ukraine GitHub",url:"https://github.com/osm-ua/",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}]},"ua-osm":{id:"ua-osm",type:"osm",locationSet:{include:["ua"]},languageCodes:["uk"],name:"OpenStreetMap Website Ukraine",description:"OpenStreetMap website in Ukraine",url:"https://openstreetmap.org.ua/",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:4},"ua-slack":{id:"ua-slack",type:"slack",locationSet:{include:["ua"]},languageCodes:["en","ru","uk"],name:"OpenStreetMap Ukraine Slack",description:"Join the OpenStreetMap Ukraine community on Slack",url:"https://osmukraine.slack.com/",signupUrl:"http://bit.ly/SlackOsmUa",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:5},"ua-telegram":{id:"ua-telegram",type:"telegram",locationSet:{include:["ua"]},languageCodes:["en","ru","uk"],name:"@osmUA on Telegram",description:"OpenStreetMap Ukraine Telegram chat",url:"https://t.me/osmUA",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}]},"ua-twitter":{id:"ua-twitter",type:"twitter",locationSet:{include:["ua"]},languageCodes:["uk"],name:"OpenStreetMap UA Twitter",description:"OpenStreetMap Ukraine on Twitter: {url}",url:"https://twitter.com/osm_ua",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:1},"uk-localchapter":{id:"uk-localchapter",type:"osm-lc",locationSet:{include:["gb"]},languageCodes:["en"],name:"OpenStreetMap UK",description:"The official Local Chapter for the UK (including Northern Ireland).",extendedDescription:"We support OpenStreetMap by holding events, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap UK here: {signupUrl}",url:"https://osmuk.org/",signupUrl:"https://osmuk.org/become-member/",contacts:[{name:"OpenStreetMap UK",email:"board@osmuk.org"}],order:3},"uk-london-twitter":{id:"uk-london-twitter",type:"twitter",locationSet:{include:["london.geojson"]},languageCodes:["en"],name:"OpenStreetMap London on Twitter",description:"OpenStreetMap London on Twitter: {url}",url:"https://twitter.com/OSMLondon",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}],order:4},"uk-twitter":{id:"uk-twitter",type:"twitter",locationSet:{include:["gb"]},languageCodes:["en"],name:"OpenStreetMap UK on Twitter",description:"OpenStreetMap UK on Twitter: {url}",url:"https://twitter.com/osmuk",contacts:[{name:"OpenStreetMap UK",email:"board@osmuk.org"}],order:2},"us-ma-mailinglist":{id:"us-ma-mailinglist",type:"mailinglist",locationSet:{include:["massachusetts.geojson"]},languageCodes:["en"],name:"Talk-us-massachusetts Mailing List",description:"Email mailing list for the Massachusetts OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-us-massachusetts",contacts:[{name:"Alan Bragg",email:"alan.ruth.bragg@gmail.com"}],order:-3},"uy-forum":{id:"uy-forum",type:"forum",locationSet:{include:["uy"]},languageCodes:["es"],name:"OpenStreetMap UY forum",description:"OpenStreetMap Uruguay web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=78",contacts:[{name:"UY community",email:"talk-uy-owner@openstreetmap.org"}],order:-2},"uy-irc":{id:"uy-irc",type:"irc",locationSet:{include:["uy"]},languageCodes:["es"],name:"OpenStreetMap Uruguay on IRC",description:"Join #osmuruguay on irc.freenode.org (port 6667)",extendedDescription:"Join #osmuruguay on irc.freenode.org",url:"https://webchat.freenode.net/?url=irc://irc.freenode.net/osmuruguay",contacts:[{name:"UY community",email:"talk-uy-owner@openstreetmap.org"}],order:-4},"uy-mailinglist":{id:"uy-mailinglist",type:"mailinglist",locationSet:{include:["uy"]},languageCodes:["es"],name:"Talk-uy Mailing List",description:"Talk-uy is the official mailing list for the Uruguayan OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-uy",contacts:[{name:"UY community",email:"talk-uy-owner@openstreetmap.org"}],order:-3},"uzbekistan-telegram":{id:"uzbekistan-telegram",type:"telegram",locationSet:{include:["uz"]},name:"OSM Uzbekistan on Telegram",description:"OpenStreetMap Uzbekistan Telegram chat",url:"https://t.me/osm_uz"},"ve-forum":{id:"ve-forum",type:"forum",locationSet:{include:["ve"]},languageCodes:["es"],name:"OpenStreetMap VE Forum",description:"OpenStreetMap Venezuela web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=50",contacts:[{name:"VE Community",email:"talk-ve-owner@openstreetmap.org"}],order:-2},"ve-mailinglist":{id:"ve-mailinglist",type:"mailinglist",locationSet:{include:["ve"]},languageCodes:["es"],name:"Talk-ve Mailing List",description:"Talk-ve is the official mailing list for the Venezuelan OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-ve",contacts:[{name:"VE Community",email:"talk-ve-owner@openstreetmap.org"}],order:-3},"ve-telegram":{id:"ve-telegram",type:"telegram",locationSet:{include:["ve"]},languageCodes:["es"],name:"OpenStreetMap Venezuela Telegram",description:"Join the OpenStreetMap Venezuela community on Telegram",url:"https://telegram.me/OSMve",contacts:[{name:"VE Community",email:"talk-ve-owner@openstreetmap.org"}]},"ym-AASTU":{id:"ym-AASTU",type:"youthmappers",locationSet:{include:[[38.8092,8.889]]},name:"AASTU Youth Mappers",description:"YouthMappers chapter at Addis Ababa Science and Technology University",extendedDescription:"The Association of Geomatics Engineering Students (AGES), aims at promoting GIS products and services as well as training students on the use of the same. It not only promotes socialization between the students and practicing professionals, but also provides a platform for exchanging new ideas for holding new GIS and surveying events and training at the university.",url:"https://t.me/aastumappers",contacts:[{name:"Ben Jamin",email:"benjazben10@gmail.com"}]},"ym-Abia-State-University":{id:"ym-Abia-State-University",type:"youthmappers",locationSet:{include:[[7.41909,5.8308]]},name:"AbsuMappersTeam",description:"YouthMappers chapter at Abia State University",extendedDescription:"AbsuMappersTeam is  voluntary team of map enthusiast ,using openstreetmap,GIS and other open source geospatial techno;ogy to solve problems.It is a dedicated for disaster response using OpenStreetMap.It is a  professional mentoring  and empowerment platform for  those with passion for GIS and Mapping.It is a community of  volunteers for geospatial data creation,field data collection and mapping.The team was co-founded by Victor N.Sunday(the Team mentor) and Professor J.U.Ogbonna ,the team coordinator and faculty Advisor. AbsuMapperTeam is an affiliate of UniiqueMappersTeam-Port Harcourt.The team stands to support sustainable development using geospatial  technology",url:"https://www.facebook.com/Absumappersteam-1709186109157466",contacts:[{name:"Organizer",email:"absumappersteam@gmail.com"}]},"ym-African-Methodist-Episcopal-University":{id:"ym-African-Methodist-Episcopal-University",type:"youthmappers",locationSet:{include:[[-10.80063,6.31073]]},name:"YouthMappers-AMEU",description:"YouthMappers chapter at African Methodist Episcopal University",url:"mailto:youthmapper.ameu@gmail.com",contacts:[{name:"Organizer",email:"youthmapper.ameu@gmail.com"}]},"ym-Ahmadu-Bello-University":{id:"ym-Ahmadu-Bello-University",type:"youthmappers",locationSet:{include:[[7.64648,11.17836]]},name:"ABU Geomappers",description:"YouthMappers chapter at Ahmadu Bello University",extendedDescription:"We are a group of Data driven Humanitarian mappers, who are dedicated to rendering humanitarian service in response to disaster and mitigation. We are glad to contribute our expertise and knowledge through mapping, and helping to spread #OpenEvangelism through Training, and collaboration.",url:"https://web.facebook.com/abugeomappers/",contacts:[{name:"Organizer",email:"abugeomappers@gmail.com"}]},"ym-Ardhi-University":{id:"ym-Ardhi-University",type:"youthmappers",locationSet:{include:[[39.21541,-6.76613]]},name:"ARU Mapper",description:"YouthMappers chapter at Ardhi University",extendedDescription:"As upcoming geospatial data consultants we seek to educate and provide advice to the society on how they can use spatial data not only as a form of location but a tool of decision making and predict different hazardous and climatical changes which may harm them or future genarations.",url:"mailto:bayonakennedy@gmail.com",contacts:[{name:"Organizer",email:"bayonakennedy@gmail.com"}]},"ym-Asian-University-for-Women":{id:"ym-Asian-University-for-Women",type:"youthmappers",locationSet:{include:[[91.8457,22.34998]]},name:"YouthMappers at AUW",description:"YouthMappers chapter at Asian University for Women",extendedDescription:"The Asian University for Women seeks to graduate women who will be skilled and innovative professionals, service-oriented leaders in the businesses and communities in which they will work and live, and promoters of intercultural understanding and sustainable human and economic development in Asia and throughout the world.",url:"http://www.auw.edu.bd/",contacts:[{name:"Organizer",email:"harunur.rashid@auw.edu.bd"}]},"ym-Ball-State-University":{id:"ym-Ball-State-University",type:"youthmappers",locationSet:{include:[[-85.40688,40.20588]]},name:"Gamma Theta Upsilon- Iota Omega Chapter",description:"YouthMappers chapter at Ball State University",extendedDescription:"Our chapter is a very active one. We primarily focus on community events, fundraising, and field trips. We are currently looking to develop more mapping-related activities to draw in other students from campus who may be interested in contributing.",url:"https://www.facebook.com/BallState.GammaThetaUpsilon/",contacts:[{name:"Organizer",email:"gtu@bsu.edu"}]},"ym-Busitema-University":{id:"ym-Busitema-University",type:"youthmappers",locationSet:{include:[[34.01367,0.52733]]},name:"Good Mappers",description:"YouthMappers chapter at Busitema University",extendedDescription:"Good mappers is a team of students in Busitema University. Its main objective is to create a community of experienced mappers who can contribute to the world map.",url:"https://m.facebook.com/HOTBusitemaUniv/",contacts:[{name:"Organizer",email:"mulindwasteven82@gmail.com"}]},"ym-California-University-of-Pennsylvania":{id:"ym-California-University-of-Pennsylvania",type:"youthmappers",locationSet:{include:[[-79.89258,40.04425]]},name:"CalU PA GIS Club",description:"YouthMappers chapter at California University of Pennsylvania",extendedDescription:"GIS Students at Cal U learn to apply spatial theory to the real world. The university degree program focuses on geography as well as utilizing GIS in emergency management.",url:"https://www.facebook.com/CalUGisClub/",contacts:[{name:"Organizer",email:"mueller@calu.edu"}]},"ym-Central-Washington-University":{id:"ym-Central-Washington-University",type:"youthmappers",locationSet:{include:[[-120.49805,46.98002]]},name:"Geography Club",description:"YouthMappers chapter at Central Washington University",extendedDescription:"Our goal teaming up with Youthmappers is to bring relief to areas that are in need of humanitarian mapping. By doing so, we are serving our fellow brothers and sisters around the world as well as furthering our own cartography skills.",url:"https://www.cwu.edu/geography/geography-club",contacts:[{name:"Organizer",email:"valkoc@cwu.edu"}]},"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny":{id:"ym-Centre-Universitaire-de-Recherche-et-dApplication-en-Tldtection-CURAT-de-lUniversit-Felix-Houphouet-Boigny",type:"youthmappers",locationSet:{include:[[-3.98799,5.344]]},name:"YouthMappers CURAT",description:"YouthMappers chapter at Centre Universitaire de Recherche et d'Application en Télédétection (CURAT) de l'Université Felix Houphouet Boigny",extendedDescription:"Our chapter aim is to promote the use of collaborative free mapping and the use of openstreetmap data in the field of research and their application in the implementation of tools for decision-making. Help students produce their own data of their research.",url:"mailto:gpcome@gmail.com",contacts:[{name:"Organizer",email:"gpcome@gmail.com"}]},"ym-Clemson-University":{id:"ym-Clemson-University",type:"youthmappers",locationSet:{include:[[-82.79297,34.66921]]},name:"Clemson Mappers",description:"YouthMappers chapter at Clemson University",extendedDescription:"Students in Clemson are supported by the Center for Geospatial Technologies, a community of interdisciplinary geospatial science practitioners supporting research, teaching, and outreach activities using technologies that enable the collection, analysis, and application of geospatial data. Students integrate geospatial technologies within their scholarly activities across all disciplines and build connections throughout the world.",url:"http://www.clemsongis.org/#!clemson-mappers/i9w6t",contacts:[{name:"Organizer",email:"clemsonmappers@gmail.com"}]},"ym-College-of-William-and-Mary":{id:"ym-College-of-William-and-Mary",type:"youthmappers",locationSet:{include:[[-76.72852,37.30011]]},name:"All over the map!",description:"YouthMappers chapter at College of William and Mary",extendedDescription:"The students who are all over the map are supported by the Center for Geospatial Analysis, a group integrating GIS across the curriculum and providing student and faculty with hardware, software, and expertise.  Students of all backgrounds utilize GIS across campus, including environmental science and policy, geology, history, business, sociology, biology, anthropology, public policy, and marine sciences.",url:"mailto:lnseitz@email.wm.edu",contacts:[{name:"Organizer",email:"lnseitz@email.wm.edu"}]},"ym-Cornell-University":{id:"ym-Cornell-University",type:"youthmappers",locationSet:{include:[[-76.4735,42.4532]]},name:"Mapping Society",description:"YouthMappers chapter at Cornell University",extendedDescription:"Cornell students and faculty use open data and open source software to address challenges at local, national, and global scales. In doing so, we advance our academic and personal goals of developing our own skills around GIS and spatial literacy.",url:"mailto:mappingsocietycornell@gmail.com?subject=Youth%20Mappers%20and%20Mapping%20Society%20at%20Cornell%20University",contacts:[{name:"Organizer",email:"mappingsocietycornell@gmail.com"}]},"ym-Cuttington-University":{id:"ym-Cuttington-University",type:"youthmappers",locationSet:{include:[[-9.5539,7.04037]]},name:"Cuttington University YouthMappers",description:"YouthMappers chapter at Cuttington University",extendedDescription:"The YouthMappers at Cuttington University, Suakoko, and Bong County comprised of Students from three different departments; namely, the Department of Natural Resources Management “DONRM”, Department of Environmental Sciences, and the Department of Natural Sciences. Since the establishment of the Chapter in February 2017, the overall membership is  20 students, with each department containing 5 students.",url:"mailto:youthmappers.cu@gmail.com",contacts:[{name:"Organizer",email:"youthmappers.cu@gmail.com"}]},"ym-Dedan-Kimathi-University-of-Technology":{id:"ym-Dedan-Kimathi-University-of-Technology",type:"youthmappers",locationSet:{include:[[37.00195,-0.43945]]},name:"GDEV",description:"YouthMappers chapter at Dedan Kimathi University of Technology",extendedDescription:"GDEV is a group of enthusiastic GIS group at DeKUT that aims at helping students share, engage and learn from each other in matters geospatial",url:"https://plus.google.com/u/0/communities/102367719061492681269/stream/e376a295-1246-4e19-9f66-fa6077719f32",contacts:[{name:"Organizer",email:"gdevkenya@gmail.com"}]},"ym-Dhaka-College":{id:"ym-Dhaka-College",type:"youthmappers",locationSet:{include:[[90.35156,23.72492]]},name:"YouthMappers Daka College",description:"YouthMappers chapter at Dhaka College",extendedDescription:"YouthMappers DhakaCollege is an approach by students to help mapping vulnerable areas of the world as a part of Humanitarian Action. YouthMappers  gives the opportunity to the students for helping people and using mapping for humanitarian purposes. This open geographic data can be used for educational, navigational and other humanitarian purposes. Happy mapping.",url:"https://www.facebook.com/groups/321220498214124/",contacts:[{name:"Organizer",email:"youthmappersdc@gmail.com"}]},"ym-Dhaka-University":{id:"ym-Dhaka-University",type:"youthmappers",locationSet:{include:[[90.35156,23.72492]]},name:"Openstreetmap YouthMappers",description:"YouthMappers chapter at Dhaka University",extendedDescription:"It's a great privilege for the students of University of Dhaka to map for humanitarian purposes. Our chapter gives the opportunity to the students for helping people and use mapping for humanitarian purposes.",url:"https://www.facebook.com/groups/osmDU/1773150346233538/?notif_t=group_activity&notif_id=1472953820177890",contacts:[{name:"Organizer",email:"hoque.ahasan@gmail.com"}]},"ym-Eastern-University":{id:"ym-Eastern-University",type:"youthmappers",locationSet:{include:[[90.38063,23.74236]]},name:"YouthMappers at Eastern University",description:"YouthMappers chapter at Eastern University",extendedDescription:"YouthMappers at Eastern University, Bangladesh has been formed with a view to assisting people during humanitarian crisis. The students, likewise other mappers of the world, are promised to assist people in using the map for educational, navigational and other humanitarian purposes.",url:"mailto:infolimon@gmail.com",contacts:[{name:"Organizer",email:"infolimon@gmail.com"}]},"ym-Far-Eastern-University-Institute-of-Technology":{id:"ym-Far-Eastern-University-Institute-of-Technology",type:"youthmappers",locationSet:{include:[[120.98854,14.60403]]},name:"Junior Philippines Computer Society",description:"YouthMappers chapter at Far Eastern University -Institute of Technology",extendedDescription:"FEU has been recognized as one of the leading universities in the Philippines. Its mission centers on producing graduates who have contributed to the advancement of the country. The university continuously challenges itself to raise the bar of excellence to achieve a top-tier status not only in the Philippines but also in the South East Asian region",url:"mailto:jpcsfeutech@outlook.com?subject=YouthMappers%20and%20Junior%20Philippines%20Computer%20Society",contacts:[{name:"Organizer",email:"jpcsfeutech@outlook.com"}]},"ym-Federal-School-of-Surveys":{id:"ym-Federal-School-of-Surveys",type:"youthmappers",locationSet:{include:[[3.95129,7.84218]]},name:"OyoMappersTeam (OMT) Oyo",description:"YouthMappers chapter at Federal School of Surveys",url:"https://web.facebook.com/Oyomappersteam-omt-oyo-1432864713415765/",contacts:[{name:"Organizer",email:"oyomappersteam@gmail.com"}]},"ym-Federal-University-of-Technology-Akure":{id:"ym-Federal-University-of-Technology-Akure",type:"youthmappers",locationSet:{include:[[5.18555,7.27527]]},name:"YouthMappers Futa Space Club",description:"YouthMappers chapter at Federal University of Technology, Akure",extendedDescription:"Our mission is to raise the next generation of Space Leaders. Activities include research and capacity building in Remote Sensing, GIS, Climate Change, Astronomy, Cosmology, Space Engineering, Global Navigation, Robotics and Space Education.",url:"http://spaceclubfuta.com.ng/",contacts:[{name:"Organizer",email:"denironyx@gmail.com"}]},"ym-Fourah-Bay-College":{id:"ym-Fourah-Bay-College",type:"youthmappers",locationSet:{include:[[-13.18359,8.49407]]},name:"Student's Geographical Association",description:"YouthMappers chapter at Fourah Bay College",extendedDescription:"The Student's Geographical Association- YouthMappers is an association of Fourah Bay College Students with the common goals of mapping out vulnerable places in Sierra Leone and the world at large for relief and other beneficial purposes,carry out Research and other educative endeavors. The chapter consists of young people with great ideas, development oriented with the capacity to relate with each other, comprehend and implement sustainable developmental projects as a team.",url:"mailto:sgayouthmappers@gmail.com?subject=YouthMappers%20at%20Fourah%20Bay%20College",contacts:[{name:"Organizer",email:"sgayouthmappers@gmail.com"}]},"ym-General-Lansana-Conte-University":{id:"ym-General-Lansana-Conte-University",type:"youthmappers",locationSet:{include:[[-13.62305,9.70902]]},name:"YouthMappers General Lansana Conte University",description:"YouthMappers chapter at General Lansana Conte University",extendedDescription:"The YouthMappers of the University General Lansana Conté is a non profit community willing to contribute to Map Guinea and others part of the world. We are promoting the use of GIS and Open data to build decision support tools. We also work to build capacities among the students and local communities.",url:"www.uglc.org",contacts:[{name:"Organizer",email:"condefa3@gmail.com"}]},"ym-George-Mason-University":{id:"ym-George-Mason-University",type:"youthmappers",locationSet:{include:[[-77.34375,38.82241]]},name:"Mason Mappers",description:"YouthMappers chapter at George Mason University",extendedDescription:"Mason Mappers Student Society is a humanitarian mapping student organization in the George Mason University GGS Department, and its goal is to promote education and knowledge in geo-technologies, geo-info science, to foster good global stewardship and engage in professional development while building a positive, interactive geo-community, as well as shaping students into leaders of tomorrow.",url:"Facebook.com/MasonMappers",contacts:[{name:"Organizer",email:"masonmappers@gmail.com"}]},"ym-Grand-Gedeh-County-Community-College":{id:"ym-Grand-Gedeh-County-Community-College",type:"youthmappers",locationSet:{include:[[-8.11817,6.06392]]},name:"YouthMappers at Grand Gedeh County Community College",description:"YouthMappers chapter at Grand Gedeh County Community College",extendedDescription:"The Youth Mappers of GGCCC sole intent is to put  places in and around Liberia  that are not on the map. We gather youths from the college within the Grand Gedeh Community College to make it their duties to unite and bring these places to the spot light geographically.",url:"mailto:yimodaxzibitallison@gmail.com",contacts:[{name:"Organizer",email:"yimodaxzibitallison@gmail.com"}]},"ym-Gujarat-University":{id:"ym-Gujarat-University",type:"youthmappers",locationSet:{include:[[72.50977,22.99876]]},name:"CCIM at Ahmedabad",description:"YouthMappers chapter at Gujarat University",url:"mailto:Coolmulls@gmail.com",contacts:[{name:"Organizer",email:"coolmulls@gmail.com"}]},"ym-Gulu-University":{id:"ym-Gulu-University",type:"youthmappers",locationSet:{include:[[32.34375,2.81136]]},name:"CSGU Mappers",description:"YouthMappers chapter at Gulu University",extendedDescription:"The CSGU Mappers are the Computing Society at Gulu University. This chapter is creative, passionate, innovative and ready to map Uganda and the world at large, beyond other people's imagination.",url:"mailto:git445@gmail.com?subject=YouthMappers%20at%20Gulu%20University",contacts:[{name:"Organizer",email:"git445@gmail.com"}]},"ym-Heidelberg-University":{id:"ym-Heidelberg-University",type:"youthmappers",locationSet:{include:[[8.67039,49.41882]]},name:"disastermappers heidelberg",description:"YouthMappers chapter at Heidelberg University",extendedDescription:"Disastermappers Heidelberg was founded in 2014 as a student initiative to build a platform for exchange between students, researchers and humanitarian actors. Disastermappers are a member of Missing Maps and are organizing mapathons, workshops and webinars in Heidelberg and beyond and support HOT and Missing Maps through research and applications.",url:"https://disastermappers.wordpress.com/",contacts:[{name:"Organizer",email:"disastermappers@posteo.de"}]},"ym-Ignatius-Ajuru-University-of-Education":{id:"ym-Ignatius-Ajuru-University-of-Education",type:"youthmappers",locationSet:{include:[[6.93364,4.80651]]},name:"IgnatiusMappersTeam (IMT)",description:"YouthMappers chapter at Ignatius Ajuru University of Education",extendedDescription:"We are a YouthMappers Chapter of Ignatius Ajuru University of Education involved in crowdsourced mapping of our environment and remote mapping of resilient communities.We are a team of volunteers using openstreetmap and other open Geospatial source for mapping.",url:"https://fb.me/ignatiusmappersteam",contacts:[{name:"Organizer",email:"ignatiusmappersteam@gmail.com"}]},"ym-Indiana-University-of-Pennsylvania":{id:"ym-Indiana-University-of-Pennsylvania",type:"youthmappers",locationSet:{include:[[-79.16139,40.61395]]},name:"Geospatial Science Club",description:"YouthMappers chapter at Indiana University of Pennsylvania",url:"mailto:rhoch@iup.edu",contacts:[{name:"Organizer",email:"rhoch@iup.edu"}]},"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri":{id:"ym-Insititue-d-Enseignement-Superieur-de-Ruhengeri",type:"youthmappers",locationSet:{include:[[29.6112,-1.50091]]},name:"YouthMappers at INES Ruhengeri",description:"YouthMappers chapter at Insititue d' Enseignement Superieur de Ruhengeri",extendedDescription:"We are students from Land Administration and Management and Land survey Departments from INES-Ruhengeri. We are engaged in mapping activities that create the changes toward sustainable development in our community.",url:"www.ines.ac.rw",contacts:[{name:"Organizer",email:"dufitesaie91@yahoo.com"}]},"ym-Institut-Suprieur-de-Management-Kolda":{id:"ym-Institut-Suprieur-de-Management-Kolda",type:"youthmappers",locationSet:{include:[[-14.94108,12.88982]]},name:"Les Femmes Leaders de ISM/Kolda",description:"YouthMappers chapter at Institut Supérieur de Management Kolda",extendedDescription:"Les Femmes Leaders de ISM/Kolda is an all-female mapping group in southern Senegal looking to put Kolda and surrounding villages on the map and better understand how to use OSM.",url:"mailto:koldaym@gmail.com",contacts:[{name:"Organizer",email:"koldaym@gmail.com"}]},"ym-Institute-of-Crisis-Management-Studies":{id:"ym-Institute-of-Crisis-Management-Studies",type:"youthmappers",locationSet:{include:[[85.34173,27.72759]]},name:"Institute of Crisis Management Studies YouthMappers",description:"YouthMappers chapter at Institute of Crisis Management Studies",extendedDescription:"To develop Crisis Mappers to assist during disaster situations.",url:"mailto:deepakadhikari@tuicms.edu.np",contacts:[{name:"Organizer",email:"deepakadhikari@tuicms.edu.np"}]},"ym-Institute-of-Finance-Management":{id:"ym-Institute-of-Finance-Management",type:"youthmappers",locationSet:{include:[[39.2935,-6.13779]]},name:"IFM mappers",description:"YouthMappers chapter at Institute of Finance Management",extendedDescription:"This is a new  chapter at out institute and we are looking forward to use our financial education that we are receiving here at the campus  and link ig with the environment in order to develop our sustainable environment towards helping the community  with the effects of our environment in a financial ways by converting them into numbers. this is widely explained in ecosystem accounting and environmental accounts",url:"mailto:supermalik95@gmail.com",contacts:[{name:"Organizer",email:"supermalik95@gmail.com"}]},"ym-Institute-of-Rural-Development-Planning":{id:"ym-Institute-of-Rural-Development-Planning",type:"youthmappers",locationSet:{include:[[35.74578,-6.12215]]},name:"Mipango YouthMappers Chapter",description:"YouthMappers chapter at Institute of Rural Development Planning",extendedDescription:"Mipango YouthMappers Chapter was introduced at IRDP on 3rd July, 2017 by Dr.Domitilla Bashemera. The founding members were  300 (190 males and 110 female) Bachelor Degree students, who were registered as members of the Chapter. Gerald Zacharia is the president of the chapter and Juster Lugira is Vice President.",url:"mailto:msmapperschapter@gmail.com",contacts:[{name:"Organizer",email:"msmapperschapter@gmail.com"}]},"ym-Institute-of-Rural-Development-Planning-Mwanza":{id:"ym-Institute-of-Rural-Development-Planning-Mwanza",type:"youthmappers",locationSet:{include:[[32.89851,-2.51658]]},name:"Youth Mappers Chapter at Institute of Rural Development Planning - Lake Zone Centre",description:"YouthMappers chapter at Institute of Rural Development Planning Mwanza",url:"www.facebook.com/IYMLZC/",contacts:[{name:"Organizer",email:"shabanimagawila@gmail.com"}]},"ym-Institute-of-Science-and-Veterinary-Medicine":{id:"ym-Institute-of-Science-and-Veterinary-Medicine",type:"youthmappers",locationSet:{include:[[-12.1175,10.68652]]},name:"YouthMappers ISSMV Dalaba",description:"YouthMappers chapter at Institute of Science and Veterinary Medicine",extendedDescription:"YouthMappers ISSMV Dabala is a non profit organisation working to promote humanitarian mapping and the use of open sources and open data to build decision making tools in Guinea.",url:"mailto:bvloua45@gmail.com",contacts:[{name:"Organizer",email:"bvloua45@gmail.com"}]},"ym-Istanbul-Technical-University":{id:"ym-Istanbul-Technical-University",type:"youthmappers",locationSet:{include:[[29.02465,41.10542]]},name:"YouthMappers ITU",description:"YouthMappers chapter at Istanbul Technical University",extendedDescription:"YouthMappers ITU is an interdisciplinary and collaborative student community to promote humanitarian mapping for vulnerable settlements and aims to develop and share strategic and innovative spatial information for the future cities by using geographical information systems and open data.",url:"https://www.facebook.com/YouthMappers-ITU-226489641442744/?modal=admin_todo_tour",contacts:[{name:"Organizer",email:"youthmappersitu@gmail.com"}]},"ym-Jacksonville-State-University":{id:"ym-Jacksonville-State-University",type:"youthmappers",locationSet:{include:[[-85.76795,33.82283]]},name:"JSU Disaster Mapping Team",description:"YouthMappers chapter at Jacksonville State University",extendedDescription:"The JSU Disaster Mapping Team is a program at Jacksonville State University dedicated to assisting disaster response in times of emergencies. This includes tornadoes, severe thunderstorms, floods, etc. The team is intended to be a valuable asset to surrounding counties and a conduit for the JSU Geoscience Department students to apply what they have learned in an academic setting to support emergency services. Our goal is to streamline disaster response and recovery operations while utilizing student skill sets",url:"mailto:ltatum@stu.jsu.edu",contacts:[{name:"Organizer",email:"ltatum@stu.jsu.edu"}]},"ym-Jahangirnagar-University":{id:"ym-Jahangirnagar-University",type:"youthmappers",locationSet:{include:[[90.26753,23.88222]]},name:"YouthMappers at IRS, Jahangirnagar University",description:"YouthMappers chapter at Jahangirnagar University",url:"mailto:s.t.islam@juniv.edu",contacts:[{name:"Organizer",email:"s.t.islam@juniv.edu"}]},"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology":{id:"ym-Jomo-Kenyatta-University-of-Agriculture-and-Technology",type:"youthmappers",locationSet:{include:[[37.0105,-1.08909]]},name:"Association of Geomatics Engineering Students",description:"YouthMappers chapter at Jomo Kenyatta University of Agriculture and Technology",extendedDescription:"The Association of Geomatics Engineering Students (AGES), aims at promoting GIS products and services as well as training students on the use of the same. It not only promotes socialization between the students and practicing professionals, but also provides a platform for exchanging new ideas for holding new GIS and surveying events and training at the university.",url:"mailto:laurahmugeha36@gmail.com",contacts:[{name:"Organizer",email:"laurahmugeha36@gmail.com"}]},"ym-Kansas-State-University":{id:"ym-Kansas-State-University",type:"youthmappers",locationSet:{include:[[-96.5918,39.16396]]},name:"Gamma Theta Upsilon: Beta Psi Chapter",description:"YouthMappers chapter at Kansas State University",extendedDescription:"We are the Kansas State University Chapter of Gamma Theta Upsilon, an international geography honor society with affiliation to YouthMappers. We have been active with mapping for OSM and conducted a mapathon called \"Map for Nepal,\" in which we used OpenStreetMap to digitize unmapped areas of Nepal after the earthquake in 2015.",url:"https://www.facebook.com/kstate.gtu?fref=ts",contacts:[{name:"Organizer",email:"tblarsen@ksu.edu"}]},"ym-Karatina-University":{id:"ym-Karatina-University",type:"youthmappers",locationSet:{include:[[37.12789,-0.48134]]},name:"Nature Club Karatina University",description:"YouthMappers chapter at Karatina University",extendedDescription:"This chapter aims to bring together all GIS enthusiasts.They include environment experts, wildlife experts, aquatic and tourism officers, just to mention a few. Its main aim is to provide a platform where students can learn from each other and, in the process, understand how to integrate the GIS skills in their various career paths as well as provide solutions to various environmental related challenges.",url:"https://twitter.com/karunature",contacts:[{name:"Organizer",email:"karunatureclub@gmail.com"}]},"ym-Kathmandu-University":{id:"ym-Kathmandu-University",type:"youthmappers",locationSet:{include:[[85.53873,27.62025]]},name:"Geomatics Engineering Society,GES",description:"YouthMappers chapter at Kathmandu University",extendedDescription:"Geomatics Engineering Society (GES) established in 2008 A.D is a departmental club under Department of Civil and Geomatics Engineering (DCGE) at Kathmandu University. GES acts as a platform to develop the skills of students apart from their educational activities by focusing on activities like technical trainings, seminars, talk programs and interaction with experts from related field, sports activities etc.",url:"ku.edu.np/ges",contacts:[{name:"Organizer",email:"ges@ku.edu.np"}]},"ym-Kenyatta-University":{id:"ym-Kenyatta-University",type:"youthmappers",locationSet:{include:[[36.93493,-1.17996]]},name:"Kenyatta University GIS Club",description:"YouthMappers chapter at Kenyatta University",extendedDescription:"Kenyatta University GIS Club (KUGISC) was founded on 28th October 2016, with more than 200 students and staff from all faculty within campus as members. We are committed to empower members with spatial knowledge, skills and expertise required in understanding the Earth. We help in mapping resources within the university by incorporating geospatial data in their projects as well as fieldwork data collection.",url:"mailto:jamesmagige24@gmail.com",contacts:[{name:"Organizer",email:"jamesmagige24@gmail.com"}]},"ym-Khulna-University":{id:"ym-Khulna-University",type:"youthmappers",locationSet:{include:[[89.56055,22.83685]]},name:"Khulna University YouthMappers",description:"YouthMappers chapter at Khulna University",extendedDescription:"KU students and faculty from multiple disciplines are experienced at creating open data for OSM to address local challenges of development, including food security and other topics.",url:"https://www.facebook.com/groups/osmku/",contacts:[{name:"Organizer",email:"hoque.ahasan@gmail.com"}]},"ym-Kumi-University":{id:"ym-Kumi-University",type:"youthmappers",locationSet:{include:[[33.83789,1.49396]]},name:"Ever Last YouthMappers",description:"YouthMappers chapter at Kumi University",extendedDescription:"This energetic group of students organizes within the faculty of Science and Information Technology.",url:"mailto:kumiuniversityeverlastyouthmap@gmail.com?subject=YouthMappers%20at%20Kumi%20University",contacts:[{name:"Organizer",email:"kumiuniversityeverlastyouthmap@gmail.com"}]},"ym-Kwame-Nkrumah-University-of-Science-and-Technology":{id:"ym-Kwame-Nkrumah-University-of-Science-and-Technology",type:"youthmappers",locationSet:{include:[[-1.56831,6.67234]]},name:"Kwame Nkrumah University of Science and Technology YouthMappers",description:"YouthMappers chapter at Kwame Nkrumah University of Science and Technology",url:"https://www.facebook.com/KNUSTMappers/",contacts:[{name:"Organizer",email:"knustyouthmappers@outlook.com"}]},"ym-Makerere-University":{id:"ym-Makerere-University",type:"youthmappers",locationSet:{include:[[32.60742,0.35156]]},name:"Geo YouthMappers",description:"YouthMappers chapter at Makerere University",extendedDescription:"Geo YouthMappers is a Makerere University based mapping chapter esteemed to apply the spatial conception to the real world.We have collaborated on various mapping events with OSM. Our main aim is the desire to simplify data and make it readily available mostly for disaster preparedness.\"We map the world and change lives.",url:"https://www.facebook.com/groups/1742657446017065/",contacts:[{name:"Organizer",email:"geo-youthmappers@googlegroups.com"}]},"ym-Mbarara-University-of-Science-and-Technology":{id:"ym-Mbarara-University-of-Science-and-Technology",type:"youthmappers",locationSet:{include:[[30.65679,-0.61644]]},name:"MUST Street Mappers",description:"YouthMappers chapter at Mbarara University of Science and Technology",extendedDescription:"MUST Street Mappers is a Youth Mappers chapter at the Mbarara University of Science and Technology that is based on making our country and the world at large a better place through mapping. We base on collected information to notice patterns and data mine to present relevant and beneficial information to society.",url:"https://web.facebook.com/muststreetmappers/",contacts:[{name:"Organizer",email:"muststreetmappers@gmail.com"}]},"ym-McGill-University":{id:"ym-McGill-University",type:"youthmappers",locationSet:{include:[[-73.5787,45.50608]]},name:"Open Mapping Group McGill: A Member of the McGill Undergraduate Geography Society",description:"YouthMappers chapter at McGill University",extendedDescription:"The Open Mapping Group McGill: A Member of McGill Undergraduate Geography Society (OMG McGill) aims to connect students with open geospatial data and technologies to enhance resilience, community-building, and learning through mapping–on campus, in Montreal, in Canada, and abroad.",url:"mailto:omg.mcgill@gmail.com",contacts:[{name:"Organizer",email:"omg.mcgill@gmail.com"}]},"ym-Miami-University":{id:"ym-Miami-University",type:"youthmappers",locationSet:{include:[[-84.73174,39.5109]]},name:"Geography and Planning Society",description:"YouthMappers chapter at Miami University",extendedDescription:"GPS at Miami University aims to create a close-knit community of planners and geographers who want to have fun, learn more about careers and higher education in their field, network, and work alongside professionals for real experience.",url:"mailto:GPSMiamiOH@gmail.com",contacts:[{name:"Organizer",email:"gpsmiamioh@gmail.com"}]},"ym-Moi-University":{id:"ym-Moi-University",type:"youthmappers",locationSet:{include:[[35.50781,-0.35156]]},name:"Geography Students Association",description:"YouthMappers chapter at Moi University",extendedDescription:"The Geography Students Association at Moi University (GEOSAMU) explores, discovers and aims at developing the entire world through the young Geo-Spatial analysts.  GEOSAMU is part of the Department of Geography.",url:"mailto:geosamu44@gmail.com?subject=YouthMappers%20at%20Moi%20University",contacts:[{name:"Organizer",email:"geosamu44@gmail.com"}]},"ym-Monroe-Community-College":{id:"ym-Monroe-Community-College",type:"youthmappers",locationSet:{include:[[-77.61025,43.10138]]},name:"MCC Mapping Corps",description:"YouthMappers chapter at Monroe Community College",url:"mailto:GIST@monroecc.edu",contacts:[{name:"Organizer",email:"gist@monroecc.edu"}]},"ym-Montgomery-College":{id:"ym-Montgomery-College",type:"youthmappers",locationSet:{include:[[-77.15782,39.09718]]},name:"GeoMC",description:"YouthMappers chapter at Montgomery College",extendedDescription:"GeoMC’s mission is to provide students with hands-on experience in applying geospatial tools, collecting data, and project management. Most of our students come with a background in GIS and are geography majors. Our chapter’s members come from diverse backgrounds and we all work together to make a positive impact in the world live in.",url:"mailto:stephanie.calderon@montgomerycollege.edu",contacts:[{name:"Organizer",email:"stephanie.calderon@montgomerycollege.edu"}]},"ym-Namibia-University-of-Science-and-Technology":{id:"ym-Namibia-University-of-Science-and-Technology",type:"youthmappers",locationSet:{include:[[17.07709,-22.56572]]},name:"Geoinformation Technology Student Society",description:"YouthMappers chapter at Namibia University of Science and Technology",url:"mailto:patriciasem87@gmail.com",contacts:[{name:"Organizer",email:"patriciasem87@gmail.com"}]},"ym-New-York-University":{id:"ym-New-York-University",type:"youthmappers",locationSet:{include:[[-74.00391,40.71377]]},name:"NYU mHealth Initiative Mapping Corps",description:"YouthMappers chapter at New York University",extendedDescription:"The NYU mobile health or “mHealth” research initiative focuses on development of systems that link people - usually via their phones - to the places that they live and traverse, and thus supports novel research on the way phones and maps can be leveraged to understand behavioral decision making and ultimately health outcomes.",url:"http://www.nyumhealth.org/",contacts:[{name:"Organizer",email:"mhealth@nyu.edu"}]},"ym-Nimba-County-Community-College":{id:"ym-Nimba-County-Community-College",type:"youthmappers",locationSet:{include:[[-8.71645,7.35208]]},name:"Nimba County Community College Youth Mappers",description:"YouthMappers chapter at Nimba County Community College",url:"mailto:ncccyouthmappers@yahoo.com",contacts:[{name:"Organizer",email:"ncccyouthmappers@yahoo.com"}]},"ym-Njala-University-Freetown-Campus":{id:"ym-Njala-University-Freetown-Campus",type:"youthmappers",locationSet:{include:[[-13.23673,8.47959]]},name:"Njala Freetown YouthMappers",description:"YouthMappers chapter at Njala University, Freetown Campus",extendedDescription:"We are students of Njala University Freetown Campus, studying Information Technology under the department of Physics and Computer Science. and we are located at Henry Street Freetown, Sierra Leone.",url:"mailto:Njalafreetownmappers@gmail.com",contacts:[{name:"Organizer",email:"njalafreetownmappers@gmail.com"}]},"ym-Njala-University-Njala-Campus":{id:"ym-Njala-University-Njala-Campus",type:"youthmappers",locationSet:{include:[[-11.76548,7.93596]]},name:"YouthMappers Njala University, Njala Campus",description:"YouthMappers chapter at Njala University, Njala Campus",url:"mailto:youthmappersnu2017@gmail.com",contacts:[{name:"Organizer",email:"youthmappersnu2017@gmail.com"}]},"ym-Ohio-Wesleyan-University":{id:"ym-Ohio-Wesleyan-University",type:"youthmappers",locationSet:{include:[[-83.06823,40.29605]]},name:"Environment and Wildlife Club",description:"YouthMappers chapter at Ohio Wesleyan University",extendedDescription:"Environment and Wildlife Club looks at environmental issues on campus, in Delaware, and even nationally! We create campus and community projects, explore and enjoy the outdoors, volunteer, and try to promote environmentalism in every aspect of our lives.",url:"mailto:envirowild@owu.edu",contacts:[{name:"Organizer",email:"envirowild@owu.edu"}]},"ym-Oklahoma-State-University":{id:"ym-Oklahoma-State-University",type:"youthmappers",locationSet:{include:[[-97.07253,36.12077]]},name:"Geography Club",description:"YouthMappers chapter at Oklahoma State University",url:"mailto:hhayden@okstate.edu",contacts:[{name:"Organizer",email:"hhayden@okstate.edu"}]},"ym-Open-University-of-Tanzania":{id:"ym-Open-University-of-Tanzania",type:"youthmappers",locationSet:{include:[[39.26466,-6.7835]]},name:"Youth Mappers at Open University of Tanzania",description:"YouthMappers chapter at Open University of Tanzania",extendedDescription:"Youth Mappers at Open University of Tanzania\n\nHad been founded by members and students of Open University of Tanzania in Department of Geography who are mainly need to improve their career and help young community through joint and partnership projects with local community groups such as Mikoko Scout Group (www.msg.or.tz) and start cooperation with international colleges and universities for exchange programs in relation to Geography Studies as some programs prepared by Mikoko Scout Group which will link local university and other universities of the same interest through International Nature & Environmental Youth Camp 2019 (www.campsite.msg.or.tz/nature.html )\n\nOur chapter will soon be recognized as youth network program that will open opportunity for students to study and conduct research studies at a local levels.",url:"mailto:youthmapout@gmail.com",contacts:[{name:"Organizer",email:"youthmapout@gmail.com"}]},"ym-Politecnico-di-Milano":{id:"ym-Politecnico-di-Milano",type:"youthmappers",locationSet:{include:[[9.22852,45.45991]]},name:"PoliMappers",description:"YouthMappers chapter at Politecnico di Milano",extendedDescription:"PoliMappers is a volunteer students’ association based at Politecnico di Milano. The mission of the group is to train and motivate the next generation of volunteer mappers and to do mapping using free and open source software within the university as well as primary and secondary schools.",url:"https://polimappers.github.io/",contacts:[{name:"Organizer",email:"polimappers@gmail.com"}]},"ym-Queen-Mary-University-of-London":{id:"ym-Queen-Mary-University-of-London",type:"youthmappers",locationSet:{include:[[-0.04049,51.52382]]},name:"Queen Mary YouthMappers",description:"YouthMappers chapter at Queen Mary University of London",extendedDescription:"This chapter will be part of the activities of the Queen Mary Geography Society.",url:"https://www.facebook.com/groups/qmulgeographysociety/",contacts:[{name:"Organizer",email:"youthmappers@qmul.ac.uk"}]},"ym-Rajshahi-University-of-Engineering-Technology":{id:"ym-Rajshahi-University-of-Engineering-Technology",type:"youthmappers",locationSet:{include:[[88.62839,24.36373]]},name:"YouthMappers at RUET",description:"YouthMappers chapter at Rajshahi University of Engineering & Technology",extendedDescription:"The \"YouthMappers at RUET\" is a humanitarian mapping group of students of Rajshahi University of Engineering & Technology (RUET) to share, develop and practice the knowledge of GIS.  This group encourages using open source geospatial data and platform to make solution to reach the most vulnerable group of the world.",url:"mailto:ruetmappers@gmail.com",contacts:[{name:"Organizer",email:"ruetmappers@gmail.com"}]},"ym-SUNY-at-Fredonia":{id:"ym-SUNY-at-Fredonia",type:"youthmappers",locationSet:{include:[[-79.36523,42.42325]]},name:"Geoventurers",description:"YouthMappers chapter at SUNY at Fredonia",extendedDescription:"GeoVenturers is a group of students joining together across a number of majors on our campus that see geospatial technologies as a tool to serve others and to bring people together. Mentoring for the group brings in science education from the department of curriculum and instruction. We hope that we can bring our skills to play in helping make people's lives better.",url:"mailto:amw30@geneseo.edu?subject=GeoVenturers%20and%20the%20YouthMappers%20network",contacts:[{name:"Organizer",email:"amw30@geneseo.edu"}]},"ym-Sacred-Heart-Junior-College":{id:"ym-Sacred-Heart-Junior-College",type:"youthmappers",locationSet:{include:[[-89.07411,17.161]]},name:"Youth Mappers at Sacred Heart Junior College",description:"YouthMappers chapter at Sacred Heart Junior College",url:"mailto:jtzib18@gmail.com",contacts:[{name:"Organizer",email:"jtzib18@gmail.com"}]},"ym-Sherubtse-College":{id:"ym-Sherubtse-College",type:"youthmappers",locationSet:{include:[[91.52369,27.2866]]},name:"Geographical Society",description:"YouthMappers chapter at Sherubtse College",extendedDescription:"The Geographical Society, in the Department of Geography & Planning, Sherubtse College, Royal University of Bhutan, with support from the Center for Climate Change and Spatial Information, has made several efforts to create awareness and address important issues at the local and national level. We now join hands with the international student-centered YouthMappers network on \"Mapping for Resilience\" and contributing to a global 'Happiness'!",url:"mailto:gsscbhutan@gmail.com?subject=About%20the%20Royal%20University%20of%20Bhutan%20Geographical%20Society%20and%20Youth%20Mappers",contacts:[{name:"Organizer",email:"gsscbhutan@gmail.com"}]},"ym-Sokoine-University-of-Agriculture":{id:"ym-Sokoine-University-of-Agriculture",type:"youthmappers",locationSet:{include:[[37.65636,-6.85251]]},name:"SMCoSE YouthMappers",description:"YouthMappers chapter at Sokoine University of Agriculture",extendedDescription:"A Chapter comprising of Environmental sciences and management students and Geography studies under the dept. of Geography and  we will be using mapping techniques, based on systems concepts and theories, can be used to facilitate, explore, and capture the different understandings of the relationships, perspectives, and boundaries involved in environmental sustainability to obtain a more complete comprehension of the concept and develop plans for action.",url:"mailto:SMCoSEyouthmappers@gmail.com",contacts:[{name:"Organizer",email:"smcoseyouthmappers@gmail.com"}]},"ym-St.-Augustine-International-University":{id:"ym-St.-Augustine-International-University",type:"youthmappers",locationSet:{include:[[32.62161,0.27237]]},name:"YouthMappers at St Augustine International University",description:"YouthMappers chapter at St. Augustine International University",url:"mailto:youthmapperssaiu@gmail.com",contacts:[{name:"Organizer",email:"youthmapperssaiu@gmail.com"}]},"ym-St.-Mawaggali-Trades-Training-Institute":{id:"ym-St.-Mawaggali-Trades-Training-Institute",type:"youthmappers",locationSet:{include:[[26.9671,-16.81484]]},name:"MawaggaliMappers",description:"YouthMappers chapter at St. Mawaggali Trades Training Institute",extendedDescription:"We are the youthappers chapter at St. Mawaggali trades in choma who are want to contribute the different humantarian tasks to serve lives through mapping.",url:"mailto:mawaggalimappers@gmail.com",contacts:[{name:"Organizer",email:"mawaggalimappers@gmail.com"}]},"ym-State-University-of-New-York-Geneseo":{id:"ym-State-University-of-New-York-Geneseo",type:"youthmappers",locationSet:{include:[[-77.7832,42.81132]]},name:"SUNY Geneseo GIS Association",description:"YouthMappers chapter at State University of New York Geneseo",extendedDescription:"We spread awareness, support, education, volunteerism, and career advancement opportunities in geographic information systems, across disciplines and departments, in the context of SUNY Geneseo, the local community, and global community.",url:"http://www.facebook.com/GeneseoGIS",contacts:[{name:"Organizer",email:"bb18@geneseo.edu"}]},"ym-Stella-Maris-Polytechnic":{id:"ym-Stella-Maris-Polytechnic",type:"youthmappers",locationSet:{include:[[-10.7944,6.28997]]},name:"YouthMappers-SMP",description:"YouthMappers chapter at Stella Maris Polytechnic",url:"mailto:youthmappers.smp@gmail.com",contacts:[{name:"Organizer",email:"youthmappers.smp@gmail.com"}]},"ym-Technical-University-of-Kenya":{id:"ym-Technical-University-of-Kenya",type:"youthmappers",locationSet:{include:[[36.82449,-1.2916]]},name:"Geospatial Science Student Association",description:"YouthMappers chapter at Technical University of Kenya",extendedDescription:"It's a geographical information based group with very passionate students in the relevant fields of study. We do training to members on emerging trends in the market and keep up with technological advancements",url:"mailto:youthmappers.tuk@gmail.com",contacts:[{name:"Organizer",email:"youthmappers.tuk@gmail.com"}]},"ym-Texas-Tech-University":{id:"ym-Texas-Tech-University",type:"youthmappers",locationSet:{include:[[-101.86523,33.57787]]},name:"YouthMappers at TTU",description:"YouthMappers chapter at Texas Tech University",extendedDescription:"As one of the co-founding chapters of the network, the TTU YouthMappers are enthusiastic to serve as interdisciplinary leaders to help create open geographic data and analyses that address locally defined development challenges worldwide. The chapter strives to exchange and collaborate with other chapters around the globe while also offering themselves as a local resource and service to Texas Tech student organizations in ways that add value to their respecitive campus activities through mapping.",url:"https://www.facebook.com/youthmapperstexastech/",contacts:[{name:"Organizer",email:"emily.glaeser@ttu.edu"}]},"ym-The-Citadel":{id:"ym-The-Citadel",type:"youthmappers",locationSet:{include:[[-79.96064,32.79693]]},name:"YouthMappers at The Citadel",description:"YouthMappers chapter at The Citadel",extendedDescription:"This chapter is also a Rotaract Club, which is an affiliate of Rotary International. Multiple members, as well as leadership have expressed an interest in YouthMappers and we would like to affiliate our Citadel Rotaract Club with YouthMappers.",url:"Mailto:cstokes5@citadel.edu",contacts:[{name:"Organizer",email:"cstokes5@citadel.edu"}]},"ym-The-Gambia-YMCA-University-of-the-Gambia":{id:"ym-The-Gambia-YMCA-University-of-the-Gambia",type:"youthmappers",locationSet:{include:[[-16.6763,13.4579]]},name:"Connected YouthMappers",description:"YouthMappers chapter at The Gambia YMCA / University of the Gambia",extendedDescription:"Connected YouthMappers is comprised of dedicated young Gambians who aspire to change and aid national development.",url:"mailto:connectedyouthmappers@gmail.com",contacts:[{name:"Organizer",email:"connectedyouthmappers@gmail.com"}]},"ym-The-George-Washington-University":{id:"ym-The-George-Washington-University",type:"youthmappers",locationSet:{include:[[-77.04812,38.89966]]},name:"Humanitarian Mapping Society",description:"YouthMappers chapter at The George Washington University",extendedDescription:"Models of leadership and engagement, HMS seeks to render aid and better the world through humanitarian Geographic Information Systems (GIS) projects. This co-founding affiliated chapter on the campus of GWU has a plethora of experience to share, and frequently partners directly with USAID, the American Red Cross, and the US Department of State in their DC area to expand student-led efforts and serve the global community.",url:"https://www.facebook.com/GWHMS/",contacts:[{name:"Organizer",email:"hms.gwu@gmail.com"}]},"ym-The-Johns-Hopkins-University-SAIS":{id:"ym-The-Johns-Hopkins-University-SAIS",type:"youthmappers",locationSet:{include:[[-77.04027,38.90797]]},name:"SAIS YouthMappers",description:"YouthMappers chapter at The Johns Hopkins University, SAIS",extendedDescription:"The mission of SAIS Youth Mappers is to provide students at the Johns Hopkins University SAIS with the opportunity to become highly skilled humanitarian mappers. As a group within the South Asia Club, its primary focus is on supporting humanitarian mapping projects in the Indo-Pacific Region.",url:"mailto:saisyouthmappers@gmail.com",contacts:[{name:"Organizer",email:"saisyouthmappers@gmail.com"}]},"ym-The-Pennsylvania-State-University":{id:"ym-The-Pennsylvania-State-University",type:"youthmappers",locationSet:{include:[[-77.85976,40.798]]},name:"Penn State GIS Coalition",description:"YouthMappers chapter at The Pennsylvania State University",extendedDescription:"The Penn State Geospatial Information Science (GIS) Coalition is an organization that offers students majoring, minoring, or sharing an interest in GIS opportunities to develop supplementary knowledge and skills necessary to succeed in the professional GIS industry.",url:"mailto:advising@geog.psu.edu",contacts:[{name:"Organizer",email:"advising@geog.psu.edu"}]},"ym-The-University-of-Zambia":{id:"ym-The-University-of-Zambia",type:"youthmappers",locationSet:{include:[[28.33027,-15.39189]]},name:"YouthMappers Unza",description:"YouthMappers chapter at The University of Zambia",url:"https://www.facebook.com/search/posts/?q=youth%20mappers%20unza",contacts:[{name:"Organizer",email:"chombachishala13@gmail.com"}]},"ym-Tribhuvan-University":{id:"ym-Tribhuvan-University",type:"youthmappers",locationSet:{include:[[83.97645,28.2538]]},name:"Geomatics Engineering Students Association",description:"YouthMappers chapter at Tribhuvan University",extendedDescription:"This organization is the student forum of Geomatics Engineering students of Tribhuvan University , Institute of Engineering on the Pashchimanchal campus. Established since the beginning of the degree program, students have been active in mapping and leadership and are thrilled to be a part of the YouthMappers network.",url:"http://gesanwrc.wordpress.com/",contacts:[{name:"Organizer",email:"gesan.nepal@gmail.com"}]},"ym-UW-Madison":{id:"ym-UW-Madison",type:"youthmappers",locationSet:{include:[[-89.41268,43.07645]]},name:"BadgerMaps",description:"YouthMappers chapter at UW-Madison",extendedDescription:"BadgerMaps is the UW campus chapter of Youthmappers, an organization dedicated to humanitarian and community mapping services. We connect our volunteer network with opportunities to create GIS data for projects that need it.",url:"https://www.facebook.com/UW-BadgerMaps-197746270811951/",contacts:[{name:"Organizer",email:"uwbadgermaps@gmail.com"}]},"ym-Uganda-Christian-University-Mbale-Campus":{id:"ym-Uganda-Christian-University-Mbale-Campus",type:"youthmappers",locationSet:{include:[[34.17487,1.07587]]},name:"Mappers for Life",description:"YouthMappers chapter at Uganda Christian University Mbale Campus",extendedDescription:"We are Team Mappers for life! Please come and join us as we map together!\" This group works from the Department of Information Technology at the UCU.",url:"mailto:munhilll@gmail.com?subject=YouthMappers%20and%20the%20Uganda%20Christian%20University%20Mappers%20for%20Life",contacts:[{name:"Organizer",email:"munhilll@gmail.com"}]},"ym-Uganda-Pentecostal-University":{id:"ym-Uganda-Pentecostal-University",type:"youthmappers",locationSet:{include:[[30.26621,0.66206]]},name:"HiTech Youth Mappers",description:"YouthMappers chapter at Uganda Pentecostal University",extendedDescription:"A new Youthmappers Chapter in Western Uganda. Ready to map and provide open data with OpenStreetMap for development purposes.",url:"mailto:hitechyouthmappers@gmail.com",contacts:[{name:"Organizer",email:"hitechyouthmappers@gmail.com"}]},"ym-Universidad-Autonoma-de-Madrid":{id:"ym-Universidad-Autonoma-de-Madrid",type:"youthmappers",locationSet:{include:[[-3.69437,40.54647]]},name:"YouthMappers at UAM",description:"YouthMappers chapter at Universidad Autonoma de Madrid",url:"mailto:youthmappersatuam@gmail.com",contacts:[{name:"Organizer",email:"youthmappersatuam@gmail.com"}]},"ym-Universidad-Distrital-Francisco-Jose-de-Caldas":{id:"ym-Universidad-Distrital-Francisco-Jose-de-Caldas",type:"youthmappers",locationSet:{include:[[-74.0918,4.65306]]},name:"YouthMappers at Bogota",description:"YouthMappers chapter at Universidad Distrital Francisco Jose de Caldas",extendedDescription:"The Universidad Distrital Francisco José de Caldas is a public, coeducational, research university based in Bogotá, Colombia with a population of 26,140 students.",url:"mailto:lrocha@selper.org.co",contacts:[{name:"Organizer",email:"lrocha@selper.org.co"}]},"ym-Universidad-Nacional-Autnoma-de-Honduras":{id:"ym-Universidad-Nacional-Autnoma-de-Honduras",type:"youthmappers",locationSet:{include:[[-87.16598,14.08505]]},name:"PumaGis Hn",description:"YouthMappers chapter at Universidad Nacional Autónoma de Honduras",url:"mailto:pumagishn@gmail.com",contacts:[{name:"Organizer",email:"pumagishn@gmail.com"}]},"ym-Universidad-Nacional-de-Colombia":{id:"ym-Universidad-Nacional-de-Colombia",type:"youthmappers",locationSet:{include:[[-74.0918,4.65306]]},name:"Grupo UN",description:"YouthMappers chapter at Universidad Nacional de Colombia",extendedDescription:"Students are uniting to map and network with university students across the country of Colombia and across the globe.  Geographic specialties include affiliation with microbiology and health disciplines.",url:"mailto:raknudsono@unal.edu.co?subject=Youth%20Mappers%20y%20Grupo%20UN%20Colombia",contacts:[{name:"Organizer",email:"raknudsono@unal.edu.co"}]},"ym-Universidad-Nacional-de-Ingenieria":{id:"ym-Universidad-Nacional-de-Ingenieria",type:"youthmappers",locationSet:{include:[[-86.27051,12.1316]]},name:"Yeka Street MGA",description:"YouthMappers chapter at Universidad Nacional de Ingenieria",extendedDescription:"YEKA STREET is a work team constituted by students from Universidad Nacional de Ingenieria at Managua, Nicaragua. With the principal purpose of apply our knowledge and skills using many tools and apps to map areas in our cities and contribute to the development community projects and disasters relieve plans. We want to lead the way adding more students from all careers and universities in our country to join us at this cause, increasing in this way the life level and reducing the population vulnerability.",url:"https://www.facebook.com/yekastreetmga/",contacts:[{name:"Organizer",email:"yeka.street.mga@gmail.com"}]},"ym-Universidad-Politcnica-de-Madrid":{id:"ym-Universidad-Politcnica-de-Madrid",type:"youthmappers",locationSet:{include:[[-3.7173,40.44782]]},name:"Mapeo Humanitario",description:"YouthMappers chapter at Universidad Politécnica de Madrid",extendedDescription:"Geo-volunteering group formed at Moncloa Campus on November 2017. Around 20 members from three Universities (Complutense, CEU and UPM). Undergraduate students, MSc and PhD students collaborate together with organizations (MSF, Acción contra el Hambre,...) supported by trainers from Geoinquietos. Official recognition by UPM as Educative Innovation Project (Code  IE1718.0411)",url:"https://blogs.upm.es/mapeo-humanitario/",contacts:[{name:"Organizer",email:"lab.topografia@gmail.com"}]},"ym-Universidad-de-Antioquia":{id:"ym-Universidad-de-Antioquia",type:"youthmappers",locationSet:{include:[[-75.58594,6.22791]]},name:"Geomatica UDEA",description:"YouthMappers chapter at Universidad de Antioquia",extendedDescription:"We are a group interested in geospatial data, voluntary cartography, and participating in mapping with others in our country and within the YouthMappers network.",url:"mailto:geomatica.ing.udea@gmail.com?subject=YouthMappers%20y%20Universidad%20de%20Antioquia",contacts:[{name:"Organizer",email:"geomatica.ing.udea@gmail.com"}]},"ym-Universidad-de-Costa-Rica":{id:"ym-Universidad-de-Costa-Rica",type:"youthmappers",locationSet:{include:[[-84.05105,9.93721]]},name:"YouthMappers de Universidad de Costa Rica",description:"YouthMappers chapter at Universidad de Costa Rica",extendedDescription:"YouthMappers de Universidad de Costa Rica nace en función de acción social para y por miembros de comunidades distintas según temáticas de involucramiento, interacción y representación de variables dentro de un espacio geográfico definido (un territorio) Gracias a las herramientas de OpenStreetMaps tenemos la viabilidad de poder obtener, validar y compartir la información generada para comprobación y uso destinadas a las comunidades o el interesado en tales temáticas objetivas.",url:"https://www.facebook.com/ucr.asege/",contacts:[{name:"Organizer",email:"youthmappersucr@gmail.com"}]},"ym-Universidad-de-La-Guajira":{id:"ym-Universidad-de-La-Guajira",type:"youthmappers",locationSet:{include:[[-72.86133,11.52304]]},name:"Grupo Mesh",description:"YouthMappers chapter at Universidad de La Guajira",extendedDescription:"Grupo Mesh is a student organization at the Universidad de la Guajira in Colombia, including students from the program of Environmental Engineering who learn cartography and open mapping.",url:"mailto:zoviedo@uniguajira.edu.co?subject=Grupo%20Mesh%20y%20YouthMappers",contacts:[{name:"Organizer",email:"zoviedo@uniguajira.edu.co"}]},"ym-Universidad-de-Los-Andes":{id:"ym-Universidad-de-Los-Andes",type:"youthmappers",locationSet:{include:[[-74.0918,4.56545]]},name:"Cartografos Uniandes",description:"YouthMappers chapter at Universidad de Los Andes",extendedDescription:"We are a circle of student participation that seeks to use mapping and spatial reasoning as a means to create bonds of cooperation and integration between the university and society by addressing different spatial, social, political , economic and cultural dynamics.",url:"mailto:geografia@uniandes.edu.co?subject=Youth%20Mappers%20Chapter%20y%20la%20Universidad%20de%20los%20Andes",contacts:[{name:"Organizer",email:"geografia@uniandes.edu.co"}]},"ym-Universidad-de-Puerto-Rico-Rio-Piedras":{id:"ym-Universidad-de-Puerto-Rico-Rio-Piedras",type:"youthmappers",locationSet:{include:[[-66.04978,18.40277]]},name:"UPR YouthMappers",description:"YouthMappers chapter at Universidad de Puerto Rico - Rio Piedras",url:"mailto:carlosguilbe@gmail.com",contacts:[{name:"Organizer",email:"carlosguilbe@gmail.com"}]},"ym-Universidad-de-San-Buenaventura":{id:"ym-Universidad-de-San-Buenaventura",type:"youthmappers",locationSet:{include:[[-75.58594,6.22791]]},name:"YouthMappers San Buenaventura",description:"YouthMappers chapter at Universidad de San Buenaventura",extendedDescription:"We are pleased to join YouthMappers mapping for a better world and community.",url:"https://www.facebook.com/groups/1742657446017065/",contacts:[{name:"Organizer",email:"ingenieria.sistemas@usbmed.edu.co"}]},"ym-Universidade-Eduardo-Mondlane":{id:"ym-Universidade-Eduardo-Mondlane",type:"youthmappers",locationSet:{include:[[32.60357,-25.95208]]},name:"Comunidade YouthMappers Moçambique",description:"YouthMappers chapter at Universidade Eduardo Mondlane",extendedDescription:"We are a student group that intends to join Mozambican society to create a resilient community of humanitarian mapping. The community intend to map the physical occupation of our Country and create open geographic data, accessible to the public and able to be used in several areas without associated costs.",url:"www.facebook.com/Moz-YouthMappers",contacts:[{name:"Organizer",email:"moz.youthmappers1@hotmail.com"}]},"ym-Universit-Gaston-Berger":{id:"ym-Universit-Gaston-Berger",type:"youthmappers",locationSet:{include:[[-16.42556,16.06284]]},name:"YouthMappers at UGB",description:"YouthMappers chapter at Université Gaston Berger",extendedDescription:"YouthMappers UGB is made up of young students and researchers who are passionate about mapping. Our aim is to improve students' skills in the field of cartography and to participate in the creation of open geographic data that responds to development challenges around the world and particularly in Africa.",url:"https://web.facebook.com/youthmappersugb/",contacts:[{name:"Organizer",email:"youthmappers.ugb@gmail.com"}]},"ym-Universit-Mohammed-V-Rabat":{id:"ym-Universit-Mohammed-V-Rabat",type:"youthmappers",locationSet:{include:[[-6.84395,33.99862]]},name:"Brahmapoutre at Rabat",description:"YouthMappers chapter at Université Mohammed V Rabat",extendedDescription:"This chapter sees participation in the YouthMappers program as an oppourtunity to share our knowlege create new working relationships with other chapters in different countries",url:"mailto:khmichasma@gmail.com",contacts:[{name:"Organizer",email:"khmichasma@gmail.com"}]},"ym-Universit-de-NZrkor":{id:"ym-Universit-de-NZrkor",type:"youthmappers",locationSet:{include:[[-8.83716,7.7324]]},name:"Youthmappers à N'Zérékoré",description:"YouthMappers chapter at Université de N'Zérékoré",extendedDescription:"YouthMappers est un groupe qui permet de faire la cartographie des communautés enclavées et à la prise des décisions en cas de catastrophes ou épidémies. Elle permet aussi la production et l'utilisation des données en accès gratuit.",url:"mailto:donpaul1974@gmail.com",contacts:[{name:"Organizer",email:"donpaul1974@gmail.com"}]},"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako":{id:"ym-Universit-des-Sciences-Sociale-et-de-Gestion-de-Bamako",type:"youthmappers",locationSet:{include:[[-7.98832,12.61531]]},name:"Etudiant au Laboratoire HoPE",description:"YouthMappers chapter at Université des Sciences Sociale et de Gestion de Bamako",url:"mailto:youthmappersfhg@gmail.com",contacts:[{name:"Organizer",email:"youthmappersfhg@gmail.com"}]},"ym-Universitas-Negeri-Makassar":{id:"ym-Universitas-Negeri-Makassar",type:"youthmappers",locationSet:{include:[[119.4292,-5.18613]]},name:"Kontur Geografi",description:"YouthMappers chapter at Universitas Negeri Makassar",url:"https://tentangkontur.blogspot.co.id",contacts:[{name:"Organizer",email:"konturgeografi@gmail.com"}]},"ym-University-Muhammadiyah-Surakarta":{id:"ym-University-Muhammadiyah-Surakarta",type:"youthmappers",locationSet:{include:[[110.76899,-7.55758]]},name:"SpaceTime",description:"YouthMappers chapter at University Muhammadiyah Surakarta",extendedDescription:"SpaceTime is a community mapping in the Faculty of Geography of Muhammadiyah University of Surakarta. SpaceTime was founded by Bruce Maldy Pratama, Mukhlis Akbar and Irfandi Fauzi. They are active students in the Faculty of Geography University Muhammadiyah Surakarta.",url:"mailto:spacetime1717@gmail.com",contacts:[{name:"Organizer",email:"spacetime1717@gmail.com"}]},"ym-University-of-California-Davis":{id:"ym-University-of-California-Davis",type:"youthmappers",locationSet:{include:[[-121.72852,38.54799]]},name:"Mapping Club",description:"YouthMappers chapter at University of California, Davis",url:"mailto:ucdmappingclub@ucdavis.edu?subject=YouthMappers%20and%20UC%20Davis%20Mapping%20Club",contacts:[{name:"Organizer",email:"ucdmappingclub@ucdavis.edu"}]},"ym-University-of-Cape-Coast":{id:"ym-University-of-Cape-Coast",type:"youthmappers",locationSet:{include:[[-1.23047,5.09092]]},name:"UCC Geographical Society",description:"YouthMappers chapter at University of Cape Coast",extendedDescription:"We are a society that encompasses all students who are reading and read geography in the Department of Geography and Regional Planning at the University of Cape Coast. Our main aim is to promote interest in the discipline inside and outside of the classroom. Our motto is “We comprehend the Earth and its inhabitants.”",url:"https://www.facebook.com/Geographical-Society-Ucc-105157196204838/info/?tab=page_info",contacts:[{name:"Organizer",email:"geosoc_ucc@yahoo.com"}]},"ym-University-of-Central-Florida":{id:"ym-University-of-Central-Florida",type:"youthmappers",locationSet:{include:[[-81.38672,28.45891]]},name:"Geospatial Information Society",description:"YouthMappers chapter at University of Central Florida",extendedDescription:"Our mission is to foster a social and educational environment for all majors who are interested in the discussion and application of GIS. Group and community events throughout the academic year organize students to volunteer to help local and regional communities by using community-based GIS projects and educating local middle and high school students on the use and application of GIS.",url:"mailto:rsouth@knights.ucf.edu",contacts:[{name:"Organizer",email:"rsouth@knights.ucf.edu"}]},"ym-University-of-Chicago":{id:"ym-University-of-Chicago",type:"youthmappers",locationSet:{include:[[-87.59878,41.78872]]},name:"Tobler Society",description:"YouthMappers chapter at University of Chicago",url:"mailto:toblersociety@uchicago.edu",contacts:[{name:"Organizer",email:"toblersociety@uchicago.edu"}]},"ym-University-of-Dar-es-Salaam":{id:"ym-University-of-Dar-es-Salaam",type:"youthmappers",locationSet:{include:[[39.20531,-6.78035]]},name:"YouthMappers at University of Dar es Salaam",description:"YouthMappers chapter at University of Dar es Salaam",extendedDescription:"The purpose of the University of Dar es Salaam YouthMappers  is to use and promote open source data and GIS technologies to map potential disaster areas, provide resources for emergency management, connect its members with open source and GIS organizations in the city of Dar es Salaam, and serve any upcoming needs of our project partners .",url:"https://www.facebook.com/UDSMYouthMappers/",contacts:[{name:"Organizer",email:"godluckur@gmail.com"}]},"ym-University-of-Energy-and-Natural-Resources":{id:"ym-University-of-Energy-and-Natural-Resources",type:"youthmappers",locationSet:{include:[[-2.343,7.35021]]},name:"Eco-Club",description:"YouthMappers chapter at University of Energy and Natural Resources",extendedDescription:"To provide a sound education to all citizens about the deteriorating environment and provide utmost use of recreation of the environment for human survival.",url:"mailto:james.agyei-ohemeng@uenr.edu.gh",contacts:[{name:"Organizer",email:"james.agyei-ohemeng@uenr.edu.gh"}]},"ym-University-of-Exeter":{id:"ym-University-of-Exeter",type:"youthmappers",locationSet:{include:[[-3.53515,50.73664]]},name:"University of Exeter British Red Cross Missing Maps",description:"YouthMappers chapter at University of Exeter",extendedDescription:"We are a team of enthusiastic Geographers with comprehensive knowledge of GIS. We are passionate about supporting the British Red Cross Society with various humanitarian aid efforts. We are also important teachers of the significance of mapping remotely sensed data and how this helps on the ground. Our mapathons have themed academic focuses that highlight the different GIS research in our geography department, while also functioning as employability awareness events which we use to invite speakers in to talk about their GIS/British Red Cross careers.",url:"https://www.facebook.com/EUMissingMaps/",contacts:[{name:"Organizer",email:"uniofexemissingmaps@gmail.com"}]},"ym-University-of-Ghana":{id:"ym-University-of-Ghana",type:"youthmappers",locationSet:{include:[[-0.19624,5.65113]]},name:"University of Ghana YouthMappers",description:"YouthMappers chapter at University of Ghana",extendedDescription:"UG YouthMappers consists of both graduate and undergraduate students possessing knowledge and skills in GIS and Remote Sensing. The club is composed of an energetic team that is poised to address social issues and mitigate environmental problems through mapping. Our fundamental principles are capacity building, empowerment and teamwork.",url:"https://twitter.com/UGYouthMappers",contacts:[{name:"Organizer",email:"mawulikaf@gmail.com"}]},"ym-University-of-Liberia-YouthMappers":{id:"ym-University-of-Liberia-YouthMappers",type:"youthmappers",locationSet:{include:[[-10.61986,6.37704]]},name:"University of Liberia YouthMappers",description:"YouthMappers chapter at University of Liberia YouthMappers",extendedDescription:"The University of Liberia YouthMappers is a chapter organization of the Global YouthMappers. We are a nonprofit student mapping organization focus on mapping for Liberia’s development and the World at large. The purpose of this organization shall be to utilize technology and geospatial knowledge as means of creating and developing maps; collecting and analyzing data that will address local and worldwide challenges. Our aim is to support and create opportunity for students to develop interest and skills in the fields of mapping. We envision a united student community that are collaborative, active and are willing to work with the University of Liberia YouthMappers in order to better the lives of others.",url:"mailto:ulym2017@gmail.com",contacts:[{name:"Organizer",email:"ulym2017@gmail.com"}]},"ym-University-of-Malawi":{id:"ym-University-of-Malawi",type:"youthmappers",locationSet:{include:[[35.33203,-15.36889]]},name:"Chanco Malawi YouthMappers",description:"YouthMappers chapter at University of Malawi",extendedDescription:"Chanco Malawi YouthMappers is the student mapping organization for the University of Malawi's Chancellor College. The students in this chapter focus on mapping for Malawi's development and science needs.",url:"mailto:zolamanyungwa@gmail.com",contacts:[{name:"Organizer",email:"zolamanyungwa@gmail.com"}]},"ym-University-of-Maryland-College-Park":{id:"ym-University-of-Maryland-College-Park",type:"youthmappers",locationSet:{include:[[-76.94332,38.98672]]},name:"Geography Club",description:"YouthMappers chapter at University of Maryland - College Park",extendedDescription:"The mission of the Geography Club at the University of Maryland College Park is to engage and encourage students to explore geographic interests within the campus and the community.",url:"https://www.facebook.com/UMDGeographyClub/?fref=ts",contacts:[{name:"Organizer",email:"geogclubumd@gmail.com"}]},"ym-University-of-Mines-and-Technology":{id:"ym-University-of-Mines-and-Technology",type:"youthmappers",locationSet:{include:[[-2.00125,5.29878]]},name:"UMaT YouthMappers",description:"YouthMappers chapter at University of Mines and Technology",extendedDescription:"UMaT YouthMappers is a group of volunteer students who seek to grant students the opportunity to improve skills in the field of mapping & creating open geographic data and analyses that address locally defined development challenges worldwide.",url:"http://umatyouthmappers.wordpress.com/",contacts:[{name:"Organizer",email:"kwadzo459@gmail.com"}]},"ym-University-of-Nairobi":{id:"ym-University-of-Nairobi",type:"youthmappers",locationSet:{include:[[36.82617,-1.31824]]},name:"Geospatial Engineering Students Association",description:"YouthMappers chapter at University of Nairobi",extendedDescription:"UN students are working with the local OSM community, Map Kibera, and GrouthTruth to learn about open mapping and contribute data for needs in their urban communities.",url:"www.geospatial.uonbi.ac.ke",contacts:[{name:"Organizer",email:"contact@mapkibera.org"}]},"ym-University-of-Nigeria-Enugu-Campus":{id:"ym-University-of-Nigeria-Enugu-Campus",type:"youthmappers",locationSet:{include:[[7.50373,6.42639]]},name:"LionMappersTeam (LMT) Enugu",description:"YouthMappers chapter at University of Nigeria, Enugu Campus",extendedDescription:"The LionMappersTeam(LMT)Enugu Campus is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of Geoinformatics and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for Crowdsourced Mapping and Geographic Information provision using Openstreetmap, Citizen Science and other Geospatial Technology for research, training and response to resilient community challenges. We are involved in Web-Cartography, GIS and Remote Sensing Applications and ResearchWe are passionate about Volunteered Geographic Information.Paticipatory GIS and Citizen Science.Our major activities include online crowdsourced-Cartography, Field Mapping ,Training workshops and outreaches to High School as well as Humanitarian/Disaster Response Mapping.",url:"https://web.facebook.com/Lionmappersteam-enugu-Campus-361221567667528/",contacts:[{name:"Organizer",email:"lmtenugucampus@gmail.com"}]},"ym-University-of-Nigeria-Nsukka":{id:"ym-University-of-Nigeria-Nsukka",type:"youthmappers",locationSet:{include:[[7.40821,6.86461]]},name:"LionMappersTeam (LMT) Nsukka",description:"YouthMappers chapter at University of Nigeria, Nsukka",extendedDescription:"The LionMappersTeam is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of mapping science and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for crowdsourced mapping and geographic information provision using Openstreetmap, citizen science  and other geospatial  technology for research, training and response to resilient community challenges. We are involved in GIS and Remote Sensing Applications and Research.Paticipatory GIS and Citizen Science,field mapping ,training workshops and outreaches to High Schools.",url:"http://fb.me/LionMappersTeamNsukka;and send messages to our Page at m.me/LionMappersTeamNsukka",contacts:[{name:"Organizer",email:"lionmappersteam@gmail.com"}]},"ym-University-of-North-Texas":{id:"ym-University-of-North-Texas",type:"youthmappers",locationSet:{include:[[-97.15255,33.20735]]},name:"UNT Geography Club",description:"YouthMappers chapter at University of North Texas",extendedDescription:"The Geography Club is a student organization at University of North Texas that welcomes all students who are interested in geography. The objective of the Geography Club is to promote interest in Geography, the Major and the Geography Department along with fellowship among students and faculty. The club also seeks to represent student needs and wants in regard to the study of geography and to provide a forum for the presentation of innovative ideas to the benefit of the University community.",url:"Mailto:reeseramsey@my.unt.edu",contacts:[{name:"Organizer",email:"reeseramsey@my.unt.edu"}]},"ym-University-of-Northern-Colorado":{id:"ym-University-of-Northern-Colorado",type:"youthmappers",locationSet:{include:[[-104.69563,40.40395]]},name:"UNCO Geography and GIS Club",description:"YouthMappers chapter at University of Northern Colorado",extendedDescription:"Official Geography and GIS Club chapter affiliated with the University of Northern Colorado where our aim is to learn, share and connect with those around us. #MakingSenseOfTheWorld",url:"www.facebook.com/groups/476365076071166/",contacts:[{name:"Organizer",email:"uncogeoggisclub@gmail.com"}]},"ym-University-of-Oregon":{id:"ym-University-of-Oregon",type:"youthmappers",locationSet:{include:[[-123.04688,44.02421]]},name:"Map by Northwest",description:"YouthMappers chapter at University of Oregon",extendedDescription:"Map By Northwest aims to engage undergraduate students at the University of Oregon in mapping projects to assist in humanitarian causes and for conducting geographic research. We welcome students from all disciplines to join us in our mapping adventures.",url:"http://blogs.uoregon.edu/mxnw/",contacts:[{name:"Organizer",email:"cbone@uoregon.edu"}]},"ym-University-of-Panama":{id:"ym-University-of-Panama",type:"youthmappers",locationSet:{include:[[-79.54102,9.01527]]},name:"YouthMappers UP",description:"YouthMappers chapter at University of Panama",extendedDescription:"Student mappers in Panama work with open spatial data to help identify, define, address, and create meaning about locally defined development challenges. They collaborate with students from other countries on community mapping topics from ecotourism to food security, from biodiversity to indigenous issues, promoting a humanistic vision through scientific perspectives.",url:"mailto:Youthmappers.up@gmail.com",contacts:[{name:"Organizer",email:"youthmappers.up@gmail.com"}]},"ym-University-of-Port-Harcourt":{id:"ym-University-of-Port-Harcourt",type:"youthmappers",locationSet:{include:[[6.92037,4.90173]]},name:"UniqueMappersTeam (UMT) Port Harcourt",description:"YouthMappers chapter at University of Port Harcourt",extendedDescription:"UniqueMappersTeam(UMT)Port Harcourt  is an action group and a team of volunteers for a collaborative online mapping targeted at training and empowering members with trending mapping skills  to create open geospatial data and analysis that addresses locally defined challenges for geoinformation and to provide humanitarian mapping  services to resilient communities in Niger Delta,Nigeria and elsewhere.We promote Crowdsoucred Mapping and Geographic information volunteering using OpenStreetMap(OSM) platform and other accessible platforms for Rapid Response Mapping,Disaster Mapping,Geo-intelligence Mapping,Map updates and training.Its an affiliate Campus chapter of Humanitarian OpenStreetMap Team(HOT).It is a project-task team of YouthMappers that provide opportunity for members to learn and improve their skills in Geoinformatics so as to explore global opportunities in the field of Mapping and Geoinformation.",url:"https://web.facebook.com/uniquemappersteamportharcourt/",contacts:[{name:"Organizer",email:"victor.sunday@uniport.edu.ng"}]},"ym-University-of-Pretoria":{id:"ym-University-of-Pretoria",type:"youthmappers",locationSet:{include:[[28.21289,-25.72063]]},name:"Centre for Geoinformation Science",description:"YouthMappers chapter at University of Pretoria",extendedDescription:"The students who map Pretoria are supported by the University of Pretoria's Centre for Geoinformation Science, a platform from where the excellence of UP individuals and teams involved in geographic information science (GISc) research, education and training, professional development and community engagement is encouraged and strengthened through collaborations, education and training and  alliances within South Africa and abroad.",url:"http://www.up.ac.za/cgis",contacts:[{name:"Organizer",email:"cgis-info@kendy.up.ac.za"}]},"ym-University-of-Redlands":{id:"ym-University-of-Redlands",type:"youthmappers",locationSet:{include:[[-117.16339,34.06295]]},name:"URSpatial Geo-Thinkers",description:"YouthMappers chapter at University of Redlands",extendedDescription:"To build upon the members' GIS skills and knowledge of the tools and methods through applied social engagement as well as to educate the campus community about the power of mapping and spatial analysis through community service events.",url:"mailto:nathan_strout@redlands.edu",contacts:[{name:"Organizer",email:"nathan_strout@redlands.edu"}]},"ym-University-of-Rwanda-Huye-Campus":{id:"ym-University-of-Rwanda-Huye-Campus",type:"youthmappers",locationSet:{include:[[29.7397,-2.61509]]},name:"Rwanda YouthMappers",description:"YouthMappers chapter at University of Rwanda - Huye Campus",extendedDescription:"Based on the commitment and the purpose of promoting mapping, and the information from YouthMappers public talks, we have organized as students in Geography department who are committed in mapping to found a chapter of our Campus. We have supported by our Facilitator Dr. Gaspard Rwanyiziri (Director of CGIS-Rwanda) and various lecturer mentors.",url:"https://www.facebook.com/Rwanda-YouthMappers",contacts:[{name:"Organizer",email:"erneruz@gmail.com"}]},"ym-University-of-South-Carolina":{id:"ym-University-of-South-Carolina",type:"youthmappers",locationSet:{include:[[-81.03516,34.01609]]},name:"Geography Graduate Student Association",description:"YouthMappers chapter at University of South Carolina",extendedDescription:"The GGSA is a fully student-run organization, designed to serve as an advocate and resource for all geography graduate students by filling the role of liaison between the department and students. Our goal is to further professional, academic, and personal development of graduate students interested in the field of geography and its sub disciplines.",url:"https://carolinaggsa.wordpress.com/",contacts:[{name:"Organizer",email:"carolina_ggsa@gmail.com"}]},"ym-University-of-Southern-California":{id:"ym-University-of-Southern-California",type:"youthmappers",locationSet:{include:[[-118.30078,34.01609]]},name:"SC Mappers",description:"YouthMappers chapter at University of Southern California",extendedDescription:"We see the world differently: we view it through a spatial lens. With the power of spatial thinking, we connect place and space to help address global challenges. Collaborate with us!",url:"mailto:scmappers@gmail.com?subject=YouthMappers%20at%20USC",contacts:[{name:"Organizer",email:"scmappers@gmail.com"}]},"ym-University-of-Vermont":{id:"ym-University-of-Vermont",type:"youthmappers",locationSet:{include:[[-73.21289,44.46493]]},name:"University of Vermont Humanitarian Mapping Club",description:"YouthMappers chapter at University of Vermont",url:"https://www.facebook.com/UVMHMC",contacts:[{name:"Organizer",email:"uvm.hmc@gmail.com"}]},"ym-University-of-Victoria":{id:"ym-University-of-Victoria",type:"youthmappers",locationSet:{include:[[-123.31186,48.46321]]},name:"Society of Geography Students",description:"YouthMappers chapter at University of Victoria",extendedDescription:"SOGS seeks to promote and represent social and academic interests within the Department of Geography. This is expressed by four key goals: To provide a forum for the discussion of matters concerning the quality and accessibility of education within geography; to provide a means of expressing a consensus of student opinion to deparhnental faculty through representation at deparkrnental meetings and on departrnental committees; to undertake anangements for such activities as are for the benefit of students and are seen to be within the field of interest of students in geography; to act as a liaison through the UVSS and the Course Union Council with other student groups on campus",url:"https://www.facebook.com/SOGSUVic/",contacts:[{name:"Organizer",email:"sogsmappers@gmail.com"}]},"ym-University-of-Warwick":{id:"ym-University-of-Warwick",type:"youthmappers",locationSet:{include:[[-1.56119,52.37905]]},name:"University of Warwick Resilience Mapping Society",description:"YouthMappers chapter at University of Warwick",extendedDescription:"We are a group of enthusiastic mappers based at Warwick University. Our aim is to get people excited about humanitarian mapping and help them understand the impact this activity has on the field. We are closely aligned with Missing Maps and Doctors Without Borders UK and focus on HOT tasks in our mapping activities and workshops. Our mapathons are listed on the Missing Maps page whenever they are scheduled.",url:"mailto:p.ulbrich@warwick.ac.uk",contacts:[{name:"Organizer",email:"p.ulbrich@warwick.ac.uk"}]},"ym-University-of-Wyoming":{id:"ym-University-of-Wyoming",type:"youthmappers",locationSet:{include:[[-105.56651,41.31476]]},name:"Gamma Theta Upsilon/Geography Club",description:"YouthMappers chapter at University of Wyoming",url:"http://www.uwyo.edu/geography/geographyclub/",contacts:[{name:"Organizer",email:"gtu-geography@uwyo.edu"}]},"ym-University-of-Zimbabwe":{id:"ym-University-of-Zimbabwe",type:"youthmappers",locationSet:{include:[[31.05466,-17.78467]]},name:"UZMappers",description:"YouthMappers chapter at University of Zimbabwe",extendedDescription:"UzMappersTeam Zimbabwe is a team of Volunteers using OpenStreetMap for Open Data Mapping and Humanitarian Disaster response mapping .The team empowers its members with open source geospatial technology skills.",url:"https://www.facebook.com/Uzmappersteam-Zimbabwe-246038666256392/",contacts:[{name:"Organizer",email:"uzmappersteam@gmail.com"}]},"ym-University-of-the-Philippines-Resilience-Institute":{id:"ym-University-of-the-Philippines-Resilience-Institute",type:"youthmappers",locationSet:{include:[[121.06,14.65]]},name:"YouthMappers UP Resilience Institute",description:"YouthMappers chapter at University of the Philippines Resilience Institute",extendedDescription:"The UP Resilience Institute was established in 2016 with a mission statement to empower local communities through multidisciplinary research and actions toward resilience. Through UP NOAH Center, and the help of different organizations, we have provided building exposure maps for 17 provinces out of the 82 and uploaded more than 4 million footprints to Open Street Maps.",url:"https://www.facebook.com/UP-Resillience-Institute-Youth-Mappers-123477508533225",contacts:[{name:"Organizer",email:"llnguyen@up.edu.ph"}]},"ym-University-of-the-West-Indies-Mona-Campus":{id:"ym-University-of-the-West-Indies-Mona-Campus",type:"youthmappers",locationSet:{include:[[-76.74601,18.00629]]},name:"Libraries Outreach - ODL",description:"YouthMappers chapter at University of the West Indies, Mona Campus",extendedDescription:"The UWI, Mona Campus Library engages in public, outreach and special projects. This will allow our library the means to be a catalyst for spatial literacy and advocate for spatial data sharing and access to Jamaican and Caribbean interests. We have disaster relief and communication needs and   extensive earth science and geo-hazards needs to better serve our campus and community. Specifically, we hace a Science Library to showcase such to all faculty and students.",url:"mailto:benjamin.branch@uwimona.edu.jm",contacts:[{name:"Organizer",email:"benjamin.branch@uwimona.edu.jm"}]},"ym-Vassar-College":{id:"ym-Vassar-College",type:"youthmappers",locationSet:{include:[[-73.89515,41.68658]]},name:"Hudson Valley Mappers",description:"YouthMappers chapter at Vassar College",extendedDescription:"Our mission is to provide a multi-disciplinary platform for peers, educators, and community organizations to engage in local mapping projects with a focus on strengthening our local ecosystems, our built environment, and the health of our community. We also seek to contribute geospatial support for global humanitarian aid and development efforts.",url:"http://pages.vassar.edu/gis/vassar-youthmappers/",contacts:[{name:"Organizer",email:"geo@vassar.edu"}]},"ym-Villanova-University":{id:"ym-Villanova-University",type:"youthmappers",locationSet:{include:[[-75.34361,40.03714]]},name:"The Villanova Globeplotters",description:"YouthMappers chapter at Villanova University",extendedDescription:"The Villanova Globeplotters is built on Villanova’s Augustinian principle of selfless-service to the global community. Mixed with relaxed social interaction, we strive to provide geospatial outreach to those in need regardless of participating students’ race, academic major, student group association, or college career level.",url:"mailto:villanova.globeplotters@gmail.com",contacts:[{name:"Organizer",email:"villanova.globeplotters@gmail.com"}]},"ym-West-Virginia-University":{id:"ym-West-Virginia-University",type:"youthmappers",locationSet:{include:[[-79.98047,39.63936]]},name:"Maptime Morgantown",description:"YouthMappers chapter at West Virginia University",extendedDescription:"Working as a collaborative team, this co-founding chapter focuses on providing an open learning environment for those interested in working on projects that intersect international development, emergency response, and geographic information science.\nThey connect beginners and experts by providing technical training and experience in building meaningful and useful geographic infrastructure data, while connecting to sister cities around the world.",url:"mailto:MaptimeMorgantown@gmail.com?subject=Maptime%20Morgantown%20from%20YouthMappers%20website",contacts:[{name:"Organizer",email:"maptimemorgantown@gmail.com"}]},"ym-Western-Michigan-University":{id:"ym-Western-Michigan-University",type:"youthmappers",locationSet:{include:[[-85.61042,42.28342]]},name:"Geography Club",description:"YouthMappers chapter at Western Michigan University",url:"http://www.facebook.com/groups/WMUGeographyClub/",contacts:[{name:"Organizer",email:"wmu.geog.club@gmail.com"}]},"ym-Yarmouk-University":{id:"ym-Yarmouk-University",type:"youthmappers",locationSet:{include:[[35.85811,32.53652]]},name:"YouthMappers at YU",description:"YouthMappers chapter at Yarmouk University",extendedDescription:"YouthMappers chapter at YU is the first mapping group in the Middle East and North Africa region where refugees, drought, and poverty are rising crises and in urgent need for humanitarian mapping  activities to mitigate the consequences of such crises. YU Mappers are encouraged to use open data to address challenges in MENA region to bring relief and development to target areas within the region.",url:"mailto:rnjawarneh@yu.edu.jo",contacts:[{name:"Organizer",email:"rnjawarneh@yu.edu.jo"}]}};
26840
26841         var dataImagery = [{id:"ACT2017",name:"ACTmapi Imagery 2017",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery2017mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",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",icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"ACT2018",name:"ACTmapi Imagery 2018",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery2018mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",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",icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"ACT2019",name:"ACTmapi Imagery Feb 2019",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery2019mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",endDate:"2019-02-01T00:00:00.000Z",startDate:"2019-02-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[149.04053,-35.09056],[149.20498,-35.08747],[149.20618,-35.1237],[149.24944,-35.12314],[149.2515,-35.19499],[149.29596,-35.19429],[149.29716,-35.23861],[149.34111,-35.23847],[149.34196,-35.27435],[149.42986,-35.27253],[149.43226,-35.36288],[149.42127,-35.36316],[149.42179,-35.37239],[149.3224,-35.37435],[149.3224,-35.36498],[149.30042,-35.36512],[149.30094,-35.37435],[149.28995,-35.37449],[149.29201,-35.4376],[149.15932,-35.44039],[149.16121,-35.51197],[149.03984,-35.51448],[149.03984,-35.47829],[148.99504,-35.4794],[148.99315,-35.37995],[149.00396,-35.37981],[149.0007,-35.26272],[148.95641,-35.26286],[148.95435,-35.16399],[148.99864,-35.16342],[148.99796,-35.12721],[149.04156,-35.12665],[149.04053,-35.09056]]],terms_url:"http://actmapi.act.gov.au/terms.html",terms_text:"Aerial Imagery from ACTMapi ©ACT Government",icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"ACT201906",name:"ACTmapi Imagery Jun 2019",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery201906mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",endDate:"2019-06-01T00:00:00.000Z",startDate:"2019-06-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[148.97478,-35.10074],[149.22712,-35.09632],[149.22811,-35.13237],[149.24983,-35.13198],[149.25025,-35.14107],[149.27223,-35.14062],[149.27416,-35.21263],[149.31806,-35.21184],[149.31905,-35.248],[149.40694,-35.24632],[149.40805,-35.28227],[149.45191,-35.28129],[149.45509,-35.38044],[149.41089,-35.38135],[149.41166,-35.39927],[149.40042,-35.39955],[149.40093,-35.41752],[149.31287,-35.41934],[149.3139,-35.44634],[149.2697,-35.44718],[149.2709,-35.48325],[149.22678,-35.48402],[149.22772,-35.52007],[149.18378,-35.52084],[149.18464,-35.55709],[149.01855,-35.55974],[149.01701,-35.48807],[148.97324,-35.48863],[148.97203,-35.44333],[148.98319,-35.44333],[148.9807,-35.34419],[148.93676,-35.34461],[148.93187,-35.13753],[148.97581,-35.1369],[148.97478,-35.10074]]],terms_url:"http://actmapi.act.gov.au/terms.html",terms_text:"Aerial Imagery from ACTMapi ©ACT Government and Spookfish Australia Pty Ltd",best:true,icon:"http://actmapi.act.gov.au/img/apple-touch-icon.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:"AIV_DHMV_II_HILL_25cm",name:"AIV Digitaal Hoogtemodel Vlaanderen II, multidirectionale hillshade 0,25 m",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/dhmv/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DHMV_II_HILL_25cm&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:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/AIV.png"},{id:"AIV_DHMV_II_SVF_25cm",name:"AIV Digitaal Hoogtemodel Vlaanderen II, Skyview factor 0,25 m",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/dhmv/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DHMV_II_SVF_25cm&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:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/AIV.png"},{id:"AGIV10cm",name:"AIV 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:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/AIV.png"},{id:"AGIVFlandersGRB",name:"AIV 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:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/AIV.png"},{id:"AGIV",name:"AIV 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:"© agentschap Informatie Vlaanderen",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/AIV.png"},{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:"ARA_Bushfires_2020",name:"ARA Bushfires 2020",type:"tms",template:"https://cogeoxyz.b-cdn.net/{zoom}/{x}/{y}.jpg?url=https%3A%2F%2Fwww.alantgeo.com.au%2Fshare%2Fara.json.gz",endDate:"2020-01-28T00:00:00.000Z",startDate:"2020-01-08T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[138.87801,-34.94052],[138.87835,-34.94068],[138.87831,-34.94269],[138.87205,-34.95774],[138.86315,-34.95569],[138.86336,-34.95433],[138.86311,-34.95417],[138.86389,-34.95199],[138.86391,-34.95165],[138.86408,-34.95119],[138.86416,-34.95119],[138.86445,-34.95075],[138.86452,-34.95032],[138.86438,-34.95019],[138.86968,-34.93831],[138.87801,-34.94052]],[[136.78813,-35.79021],[136.80204,-35.83806],[136.83592,-35.8317],[136.8506,-35.82891],[136.8716,-35.82312],[136.86707,-35.81324],[136.86682,-35.80963],[136.85375,-35.77688],[136.78813,-35.79021]],[[138.86807,-34.93828],[138.86826,-34.93821],[138.86735,-34.93686],[138.86723,-34.93691],[138.86533,-34.93436],[138.86559,-34.93416],[138.86484,-34.93295],[138.86417,-34.93301],[138.86359,-34.93172],[138.86314,-34.93124],[138.86278,-34.92998],[138.86287,-34.92993],[138.86283,-34.92969],[138.86208,-34.92949],[138.86231,-34.92617],[138.86292,-34.92438],[138.8631,-34.92245],[138.86314,-34.92103],[138.8629,-34.91965],[138.86297,-34.91663],[138.86322,-34.91657],[138.86316,-34.91025],[138.86305,-34.90727],[138.86284,-34.90528],[138.86309,-34.90418],[138.86604,-34.90359],[138.86635,-34.90106],[138.863,-34.90083],[138.86276,-34.89931],[138.86286,-34.89857],[138.86329,-34.89855],[138.86341,-34.8979],[138.86321,-34.89565],[138.86341,-34.89554],[138.86304,-34.89471],[138.86262,-34.89483],[138.86179,-34.89319],[138.86153,-34.89226],[138.86152,-34.89137],[138.86103,-34.89139],[138.86034,-34.88996],[138.85996,-34.88978],[138.85991,-34.88912],[138.86018,-34.88765],[138.85973,-34.88754],[138.8598,-34.88391],[138.86084,-34.88195],[138.86139,-34.88078],[138.86095,-34.88054],[138.86134,-34.8791],[138.86243,-34.8769],[138.86267,-34.8766],[138.87236,-34.87677],[138.87143,-34.87825],[138.87138,-34.87853],[138.87135,-34.87861],[138.87038,-34.87976],[138.86999,-34.87966],[138.86926,-34.88081],[138.8694,-34.88087],[138.86915,-34.88156],[138.869,-34.88228],[138.86883,-34.88303],[138.86876,-34.88322],[138.86873,-34.88344],[138.86906,-34.88358],[138.86857,-34.88607],[138.86809,-34.886],[138.86823,-34.88711],[138.86833,-34.88711],[138.86861,-34.88837],[138.86869,-34.88835],[138.86908,-34.88958],[138.8696,-34.88952],[138.87023,-34.8908],[138.87031,-34.89078],[138.87145,-34.89338],[138.87169,-34.89335],[138.87328,-34.89636],[138.87319,-34.89643],[138.87338,-34.89707],[138.87353,-34.8972],[138.87313,-34.9137],[138.87206,-34.91747],[138.87232,-34.9188],[138.87188,-34.92355],[138.87224,-34.92772],[138.87275,-34.92764],[138.87246,-34.93834],[138.86807,-34.93828]],[[136.95888,-35.74871],[136.95748,-35.74715],[136.9575,-35.7195],[137.00215,-35.71913],[137.00181,-35.74856],[136.95888,-35.74871]],[[138.8973,-34.96183],[138.89707,-34.97142],[138.89738,-34.97167],[138.89964,-34.97145],[138.90168,-34.97103],[138.90187,-34.97144],[138.90549,-34.97111],[138.90853,-34.97042],[138.90863,-34.97063],[138.91298,-34.96985],[138.91305,-34.97011],[138.91438,-34.97007],[138.91448,-34.97041],[138.91894,-34.97082],[138.91909,-34.97103],[138.92087,-34.97114],[138.92347,-34.97104],[138.9235,-34.97115],[138.92477,-34.9712],[138.92483,-34.9715],[138.92636,-34.97164],[138.92641,-34.97179],[138.92928,-34.97199],[138.92915,-34.97247],[138.93021,-34.97292],[138.93003,-34.9733],[138.93261,-34.97481],[138.93228,-34.97523],[138.9335,-34.97625],[138.93336,-34.97648],[138.93594,-34.97866],[138.93624,-34.97842],[138.93691,-34.97899],[138.93639,-34.97934],[138.93728,-34.98066],[138.93717,-34.9807],[138.93771,-34.98185],[138.93691,-34.98207],[138.93784,-34.98488],[138.93807,-34.98486],[138.93835,-34.98608],[138.93809,-34.98614],[138.93801,-34.98675],[138.93754,-34.98709],[138.93758,-34.98717],[138.93649,-34.98797],[138.93657,-34.98816],[138.93564,-34.98883],[138.93567,-34.98892],[138.93471,-34.98951],[138.93477,-34.98968],[138.93394,-34.99018],[138.93326,-34.9905],[138.93199,-34.99029],[138.92691,-34.98966],[138.92523,-34.98985],[138.92407,-34.99293],[138.92531,-34.99356],[138.93157,-34.99617],[138.93278,-34.99551],[138.93538,-34.99644],[138.93605,-34.99658],[138.93563,-34.99732],[138.9355,-34.99729],[138.93529,-34.99774],[138.94749,-35.00282],[138.94672,-35.00115],[138.9469,-35.00106],[138.94656,-35.00011],[138.94682,-34.99994],[138.94632,-34.9987],[138.94748,-34.9981],[138.94651,-34.99647],[138.94621,-34.99564],[138.94647,-34.9952],[138.94484,-34.99378],[138.94441,-34.99298],[138.94486,-34.99145],[138.9443,-34.99124],[138.94449,-34.99086],[138.94519,-34.99138],[138.94624,-34.99004],[138.94741,-34.98938],[138.94765,-34.98934],[138.94864,-34.98773],[138.94845,-34.98752],[138.94836,-34.98707],[138.94872,-34.98623],[138.94842,-34.98506],[138.94823,-34.98499],[138.9483,-34.98472],[138.94893,-34.98461],[138.94886,-34.98327],[138.94928,-34.9823],[138.94923,-34.98104],[138.94804,-34.97867],[138.94776,-34.97864],[138.94636,-34.97576],[138.94663,-34.97554],[138.94425,-34.97245],[138.94278,-34.97129],[138.94309,-34.97077],[138.93948,-34.96835],[138.93955,-34.96809],[138.9379,-34.96724],[138.93827,-34.96648],[138.93337,-34.96412],[138.93051,-34.96352],[138.91532,-34.96137],[138.90088,-34.96109],[138.8973,-34.96183]],[[137.49796,-35.71525],[137.4631,-35.72999],[137.46169,-35.71908],[137.46344,-35.71793],[137.46392,-35.71402],[137.46475,-35.71145],[137.47012,-35.70906],[137.47956,-35.70784],[137.4925,-35.70344],[137.49246,-35.70536],[137.49283,-35.70687],[137.4922,-35.70704],[137.49247,-35.70835],[137.49287,-35.70835],[137.49599,-35.70739],[137.49796,-35.71525]],[[138.90663,-34.86848],[138.90687,-34.86785],[138.90865,-34.86776],[138.90924,-34.86401],[138.90898,-34.86392],[138.909,-34.86335],[138.90912,-34.86334],[138.90927,-34.86183],[138.90989,-34.86],[138.91025,-34.85997],[138.9109,-34.85825],[138.91106,-34.85834],[138.91136,-34.85758],[138.91216,-34.85349],[138.91623,-34.85342],[138.92178,-34.8528],[138.92231,-34.84986],[138.92259,-34.84588],[138.92269,-34.84071],[138.92213,-34.83547],[138.92306,-34.83048],[138.92268,-34.82766],[138.91144,-34.82613],[138.90624,-34.82888],[138.90544,-34.83152],[138.90562,-34.84559],[138.90563,-34.85201],[138.90736,-34.85243],[138.9068,-34.85393],[138.90376,-34.85335],[138.90043,-34.86077],[138.90384,-34.86159],[138.90337,-34.86243],[138.90231,-34.86227],[138.90144,-34.8642],[138.90306,-34.86467],[138.90259,-34.86745],[138.90663,-34.86848]],[[138.89524,-34.87881],[138.89429,-34.87709],[138.8944,-34.87571],[138.89496,-34.87562],[138.89511,-34.87533],[138.89543,-34.87529],[138.89717,-34.8713],[138.89766,-34.87135],[138.89871,-34.8697],[138.90109,-34.87036],[138.90098,-34.8707],[138.90279,-34.87129],[138.90244,-34.87257],[138.90578,-34.8733],[138.90581,-34.87362],[138.9087,-34.87421],[138.90636,-34.88072],[138.90588,-34.8811],[138.90522,-34.88113],[138.90305,-34.87875],[138.89847,-34.87856],[138.89853,-34.87811],[138.89524,-34.87881]]],terms_url:"https://www.airborneresearch.org.au/",terms_text:"ARA - Airborne Research Australia",best:true,icon:"https://static.wixstatic.com/media/a40742_9e0c1ee9ed0743a8bbf73b2fe6613802.gif"},{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:[5,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-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:"basemap.at-overlay",name:"basemap.at Overlay",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:"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:"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",zoomExtent:[0,18],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",zoomExtent:[0,18],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",zoomExtent:[0,18],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",zoomExtent:[0,18],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",zoomExtent:[0,18],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",zoomExtent:[0,18],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"},{id:"Berlin-2019",name:"Berlin aerial photography 2019",type:"tms",template:"https://tiles.codefor.de/berlin-2019/{zoom}/{x}/{y}.png",endDate:"2019-04-06T00:00:00.000Z",startDate:"2019-04-01T00:00:00.000Z",zoomExtent:[0,18],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 2019 (DOP20RGB)",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:"https://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:"https://osmdata.asitvd.ch/",terms_text:"Bonvillars - Orthophoto technique 2013"},{id:"Bordeaux_2012",name:"Bordeaux - 2012",type:"tms",template:"https://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:"Budapest_XI_2015",name:"Budapest district XI orthophoto 2015",type:"wms",template:"https://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:"https://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:"https://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:"https://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 : 2020",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:[5,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'",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{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:"BDGEx_ctm_multi",name:"Cartas Topográficas do Exército Brasileiro",type:"wms",template:"https://bdgex.eb.mil.br/mapcache?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ctmmultiescalas_mercator&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[1,22],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]]],terms_text:"BDGEx",icon:"https://osmlab.github.io/editor-layer-index/sources/south-america/br/Exercito.png"},{id:"Cartoriviera-2012",name:"Cartoriviera - Orthophoto 2012",type:"tms",template:"https://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:"https://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",description:"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 8cm ground sample distance"},{id:"City_of_Melbourne_Feb_2019",name:"City of Melbourne Feb 2019",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/openstreetmapau.melbourne190203/{zoom}/{x}/{y}.jpg?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcGF1IiwiYSI6ImNqbWl3bXZ6aDA0MTkzd21xdnV1d2k0azEifQ.HYkMOqH_E2fYd1b0oXRe6w",endDate:"2019-02-03T00:00:00.000Z",startDate:"2019-02-02T00:00:00.000Z",zoomExtent:[10,22],polygon:[[[144.9146,-37.7993],[144.9139,-37.7989],[144.9128,-37.7986],[144.9114,-37.7988],[144.9098,-37.7998],[144.906,-37.8064],[144.9043,-37.8126],[144.9042,-37.8142],[144.9056,-37.8209],[144.9043,-37.8224],[144.899,-37.8273],[144.8969,-37.8301],[144.896,-37.8335],[144.896,-37.8387],[144.897,-37.8419],[144.9011,-37.8469],[144.9052,-37.8502],[144.9068,-37.8506],[144.908,-37.8502],[144.9084,-37.8495],[144.907,-37.8477],[144.9076,-37.8469],[144.9045,-37.8416],[144.9053,-37.8414],[144.9081,-37.8458],[144.9118,-37.8502],[144.9127,-37.8504],[144.9155,-37.8489],[144.9155,-37.8481],[144.914,-37.8459],[144.9162,-37.8445],[144.914,-37.8413],[144.9163,-37.8399],[144.9165,-37.8384],[144.9151,-37.8344],[144.9183,-37.8331],[144.9195,-37.8326],[144.921,-37.8309],[144.9219,-37.83],[144.923,-37.8295],[144.9294,-37.8282],[144.9353,-37.827],[144.9411,-37.8269],[144.9418,-37.8268],[144.9458,-37.8275],[144.9471,-37.8279],[144.9478,-37.8278],[144.9579,-37.8295],[144.9592,-37.8294],[144.9613,-37.829],[144.9625,-37.8297],[144.9648,-37.8318],[144.9657,-37.8323],[144.9662,-37.8323],[144.9703,-37.8312],[144.9705,-37.8323],[144.9711,-37.8331],[144.9735,-37.8351],[144.9743,-37.836],[144.9794,-37.85],[144.9797,-37.8508],[144.9806,-37.8512],[144.9843,-37.8515],[144.9848,-37.8514],[144.9854,-37.8508],[144.9892,-37.8311],[144.9889,-37.8304],[144.9923,-37.8104],[144.9924,-37.8098],[144.9919,-37.809],[144.9745,-37.8071],[144.9768,-37.7933],[144.9767,-37.7928],[144.9764,-37.7923],[144.9759,-37.7922],[144.9698,-37.7915],[144.9708,-37.7857],[144.9704,-37.785],[144.9699,-37.7848],[144.9649,-37.7842],[144.9651,-37.7825],[144.9651,-37.782],[144.9642,-37.7814],[144.964,-37.7808],[144.9639,-37.7796],[144.9635,-37.7785],[144.9627,-37.7778],[144.9614,-37.7772],[144.9392,-37.7746],[144.9384,-37.7746],[144.938,-37.7749],[144.9373,-37.776],[144.9366,-37.7769],[144.9361,-37.7773],[144.936,-37.7779],[144.9378,-37.7814],[144.9383,-37.7842],[144.9391,-37.7865],[144.9389,-37.7867],[144.9388,-37.7873],[144.9377,-37.788],[144.9322,-37.7874],[144.9312,-37.7878],[144.9308,-37.7879],[144.93,-37.7874],[144.9218,-37.7864],[144.9149,-37.7794],[144.9143,-37.7787],[144.9137,-37.7785],[144.9129,-37.7786],[144.9082,-37.7813],[144.9072,-37.7821],[144.9057,-37.7845],[144.9053,-37.7864],[144.9043,-37.7866],[144.9037,-37.7872],[144.9032,-37.7883],[144.902,-37.7888],[144.9014,-37.7896],[144.9019,-37.791],[144.9026,-37.792],[144.9042,-37.7929],[144.9064,-37.7938],[144.9081,-37.7946],[144.9105,-37.7952],[144.9127,-37.796],[144.9143,-37.797],[144.9153,-37.7978],[144.9154,-37.7981],[144.9153,-37.7985],[144.9152,-37.7987],[144.9148,-37.7991],[144.9146,-37.7993]]],terms_url:"https://data.melbourne.vic.gov.au/Environment/2019-Aerial-Imagery/cwpe-ugri",terms_text:"City of Melbourne",best:true,icon:"https://www.melbourne.vic.gov.au/_catalogs/masterpage/android-icon.png"},{id:"City_of_Melbourne_May_2018",name:"City of Melbourne May 2018",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.7993],[144.9139,-37.7989],[144.9128,-37.7986],[144.9114,-37.7988],[144.9098,-37.7998],[144.906,-37.8064],[144.9043,-37.8126],[144.9042,-37.8142],[144.9056,-37.8209],[144.9043,-37.8224],[144.899,-37.8273],[144.8969,-37.8301],[144.896,-37.8335],[144.896,-37.8387],[144.897,-37.8419],[144.9011,-37.8469],[144.9052,-37.8502],[144.9068,-37.8506],[144.908,-37.8502],[144.9084,-37.8495],[144.907,-37.8477],[144.9076,-37.8469],[144.9045,-37.8416],[144.9053,-37.8414],[144.9081,-37.8458],[144.9118,-37.8502],[144.9127,-37.8504],[144.9155,-37.8489],[144.9155,-37.8481],[144.914,-37.8459],[144.9162,-37.8445],[144.914,-37.8413],[144.9163,-37.8399],[144.9165,-37.8384],[144.9151,-37.8344],[144.9183,-37.8331],[144.9195,-37.8326],[144.921,-37.8309],[144.9219,-37.83],[144.923,-37.8295],[144.9294,-37.8282],[144.9353,-37.827],[144.9411,-37.8269],[144.9418,-37.8268],[144.9458,-37.8275],[144.9471,-37.8279],[144.9478,-37.8278],[144.9579,-37.8295],[144.9592,-37.8294],[144.9613,-37.829],[144.9625,-37.8297],[144.9648,-37.8318],[144.9657,-37.8323],[144.9662,-37.8323],[144.9703,-37.8312],[144.9705,-37.8323],[144.9711,-37.8331],[144.9735,-37.8351],[144.9743,-37.836],[144.9794,-37.85],[144.9797,-37.8508],[144.9806,-37.8512],[144.9843,-37.8515],[144.9848,-37.8514],[144.9854,-37.8508],[144.9892,-37.8311],[144.9889,-37.8304],[144.9923,-37.8104],[144.9924,-37.8098],[144.9919,-37.809],[144.9745,-37.8071],[144.9768,-37.7933],[144.9767,-37.7928],[144.9764,-37.7923],[144.9759,-37.7922],[144.9698,-37.7915],[144.9708,-37.7857],[144.9704,-37.785],[144.9699,-37.7848],[144.9649,-37.7842],[144.9651,-37.7825],[144.9651,-37.782],[144.9642,-37.7814],[144.964,-37.7808],[144.9639,-37.7796],[144.9635,-37.7785],[144.9627,-37.7778],[144.9614,-37.7772],[144.9392,-37.7746],[144.9384,-37.7746],[144.938,-37.7749],[144.9373,-37.776],[144.9366,-37.7769],[144.9361,-37.7773],[144.936,-37.7779],[144.9378,-37.7814],[144.9383,-37.7842],[144.9391,-37.7865],[144.9389,-37.7867],[144.9388,-37.7873],[144.9377,-37.788],[144.9322,-37.7874],[144.9312,-37.7878],[144.9308,-37.7879],[144.93,-37.7874],[144.9218,-37.7864],[144.9149,-37.7794],[144.9143,-37.7787],[144.9137,-37.7785],[144.9129,-37.7786],[144.9082,-37.7813],[144.9072,-37.7821],[144.9057,-37.7845],[144.9053,-37.7864],[144.9043,-37.7866],[144.9037,-37.7872],[144.9032,-37.7883],[144.902,-37.7888],[144.9014,-37.7896],[144.9019,-37.791],[144.9026,-37.792],[144.9042,-37.7929],[144.9064,-37.7938],[144.9081,-37.7946],[144.9105,-37.7952],[144.9127,-37.796],[144.9143,-37.797],[144.9153,-37.7978],[144.9154,-37.7981],[144.9153,-37.7985],[144.9152,-37.7987],[144.9148,-37.7991],[144.9146,-37.7993]]],terms_url:"https://data.melbourne.vic.gov.au/Property-Planning/2018-Aerial-Imagery-True-Ortho-/qa5h-sfgh",terms_text:"City of Melbourne",icon:"https://www.melbourne.vic.gov.au/_catalogs/masterpage/android-icon.png"},{id:"turku-orto",name:"City of Turku ortophoto",type:"wms",template:"https://opaskartta.turku.fi/TeklaOGCWeb/WMS.ashx?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Ilmakuva&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[4,20],polygon:[[[21.48608,60.90844],[21.49956,60.48377],[21.08957,60.5096],[21.0486,60.22035],[21.00189,60.21285],[21.00908,60.09411],[21.09531,60.03889],[21.10682,59.94328],[21.26923,59.88167],[21.18227,59.70233],[22.11364,59.70921],[22.05903,59.8557],[22.46075,60.18535],[23.15785,60.18892],[23.14815,60.91835],[22.31595,60.91512],[21.48608,60.90844]]],terms_url:"https://www.turku.fi/turku-tieto/kartat-ja-paikkatieto",terms_text:"© Turun kaupunki",best:true,description:"Ortophotos from the city of Turku",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Turku.vaakuna.svg/200px-Turku.vaakuna.svg.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:"DCGIS-County-Imagery-2017-Fall-Leaf-Off-6-Inch",name:"Dakota County GIS 2017 Fall Leaf-Off 6-Inch",type:"wms",template:"https://gisimg.co.dakota.mn.us/arcgis/services/AerialPhotography/2017AirPhotoLeafOff6Inch/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=2017AirPhotoLeafOff6Inch:None&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:[5,20],polygon:[[[-93.32967,44.79107],[-93.32964,44.63037],[-93.28189,44.63074],[-93.28169,44.47194],[-93.28176,44.47137],[-93.0395,44.47103],[-93.03924,44.51125],[-92.91932,44.51049],[-92.91899,44.54325],[-92.79268,44.54324],[-92.7926,44.62971],[-92.73207,44.62948],[-92.73122,44.71411],[-92.80342,44.74652],[-92.82767,44.75056],[-92.85209,44.74695],[-92.85959,44.75359],[-92.87724,44.77283],[-92.88149,44.77492],[-92.9049,44.77408],[-92.92808,44.78111],[-92.93969,44.77563],[-92.94843,44.76786],[-92.95859,44.76724],[-92.98604,44.77501],[-92.99291,44.77517],[-93.00306,44.77206],[-93.01685,44.77635],[-93.02153,44.79431],[-93.00523,44.81541],[-93.0119,44.83657],[-93.00859,44.85652],[-93.01041,44.86586],[-93.02074,44.89279],[-93.0309,44.8967],[-93.04083,44.90391],[-93.04445,44.91514],[-93.04725,44.9195],[-93.04724,44.92318],[-93.12863,44.92335],[-93.12882,44.91965],[-93.13257,44.91243],[-93.1641,44.89048],[-93.18289,44.8872],[-93.20075,44.86486],[-93.20325,44.85263],[-93.22179,44.83825],[-93.25188,44.81146],[-93.28177,44.80611],[-93.30453,44.7945],[-93.32645,44.79245],[-93.32961,44.79107],[-93.32967,44.79107]]],terms_url:"https://dakotacounty.us",terms_text:"Dakota County GIS",icon:"https://www.co.dakota.mn.us//SiteAssets/DakotaCountyLogo_W.png"},{id:"DCGIS-County-Imagery-2019-Spring-Leaf-Off-6-Inch",name:"Dakota County GIS 2019 Spring Leaf-Off 6-Inch",type:"wms",template:"https://gisimg.co.dakota.mn.us/arcgis/services/AerialPhotography/2019AirPhotoLeafOff6Inch_Spring/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=2019AirPhotoLeafOff6Inch_Spring:default&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-01-01T00:00:00.000Z",zoomExtent:[5,20],polygon:[[[-93.32967,44.79107],[-93.32964,44.63037],[-93.28189,44.63074],[-93.28169,44.47194],[-93.28176,44.47137],[-93.0395,44.47103],[-93.03924,44.51125],[-92.91932,44.51049],[-92.91899,44.54325],[-92.79268,44.54324],[-92.7926,44.62971],[-92.73207,44.62948],[-92.73122,44.71411],[-92.80342,44.74652],[-92.82767,44.75056],[-92.85209,44.74695],[-92.85959,44.75359],[-92.87724,44.77283],[-92.88149,44.77492],[-92.9049,44.77408],[-92.92808,44.78111],[-92.93969,44.77563],[-92.94843,44.76786],[-92.95859,44.76724],[-92.98604,44.77501],[-92.99291,44.77517],[-93.00306,44.77206],[-93.01685,44.77635],[-93.02153,44.79431],[-93.00523,44.81541],[-93.0119,44.83657],[-93.00859,44.85652],[-93.01041,44.86586],[-93.02074,44.89279],[-93.0309,44.8967],[-93.04083,44.90391],[-93.04445,44.91514],[-93.04725,44.9195],[-93.04724,44.92318],[-93.12863,44.92335],[-93.12882,44.91965],[-93.13257,44.91243],[-93.1641,44.89048],[-93.18289,44.8872],[-93.20075,44.86486],[-93.20325,44.85263],[-93.22179,44.83825],[-93.25188,44.81146],[-93.28177,44.80611],[-93.30453,44.7945],[-93.32645,44.79245],[-93.32961,44.79107],[-93.32967,44.79107]]],terms_url:"https://dakotacounty.us",terms_text:"Dakota County GIS",icon:"https://www.co.dakota.mn.us//SiteAssets/DakotaCountyLogo_W.png"},{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:"dgu-dof-2011",name:"dgu.hr: Croatia 2011 Aerial imagery",type:"wms",template:"https://geoportal.dgu.hr/services/dof/ows?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DOF5_2011&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:[[[16.2996,46.38154],[16.30063,46.38565],[16.2985,46.38985],[16.30063,46.39146],[16.30008,46.39566],[16.30213,46.39712],[16.29686,46.4008],[16.29515,46.40392],[16.28591,46.40689],[16.28208,46.41095],[16.27215,46.41194],[16.26825,46.41454],[16.26852,46.41869],[16.27003,46.42067],[16.26921,46.42699],[16.26236,46.437],[16.25839,46.44992],[16.2599,46.45275],[16.25469,46.46077],[16.25538,46.46746],[16.251,46.47227],[16.24648,46.47896],[16.23649,46.48339],[16.2369,46.4883],[16.2369,46.4981],[16.23881,46.50083],[16.24484,46.50262],[16.25825,46.50441],[16.26264,46.50799],[16.26168,46.5177],[16.26743,46.51911],[16.27112,46.52081],[16.27646,46.52109],[16.27783,46.51902],[16.28865,46.51939],[16.29672,46.51788],[16.30028,46.51581],[16.30288,46.51647],[16.30863,46.52307],[16.30918,46.52608],[16.32027,46.53154],[16.33232,46.53343],[16.33697,46.53192],[16.33684,46.53522],[16.3382,46.53795],[16.34094,46.53917],[16.33478,46.53974],[16.33163,46.54303],[16.33423,46.54689],[16.34546,46.54849],[16.34957,46.55094],[16.35326,46.55245],[16.35915,46.55009],[16.36203,46.54972],[16.36134,46.55452],[16.36449,46.55763],[16.3701,46.55838],[16.37394,46.5565],[16.37804,46.55602],[16.38434,46.55405],[16.38612,46.55141],[16.38667,46.54868],[16.38407,46.54557],[16.38804,46.54397],[16.38968,46.542],[16.39132,46.53917],[16.40022,46.54228],[16.40734,46.54162],[16.40844,46.5387],[16.40844,46.53691],[16.41268,46.53701],[16.41993,46.53333],[16.42568,46.53597],[16.43157,46.53569],[16.43527,46.53305],[16.44129,46.53107],[16.44554,46.52561],[16.44293,46.52099],[16.44334,46.51854],[16.45142,46.52156],[16.4569,46.52118],[16.45895,46.52297],[16.46251,46.52448],[16.46552,46.52467],[16.46958,46.52183],[16.47551,46.51842],[16.47648,46.51592],[16.48072,46.515],[16.48532,46.51267],[16.48544,46.51158],[16.49056,46.51044],[16.49337,46.50812],[16.49222,46.50562],[16.4921,46.50358],[16.49646,46.50012],[16.51184,46.49754],[16.51305,46.49516],[16.51662,46.49508],[16.52249,46.49112],[16.52327,46.48769],[16.52243,46.48295],[16.53499,46.48387],[16.54437,46.48076],[16.55592,46.4841],[16.57032,46.47695],[16.58004,46.47638],[16.59578,46.47995],[16.60968,46.47961],[16.61939,46.47165],[16.62559,46.47188],[16.63262,46.46934],[16.64719,46.46773],[16.66846,46.46184],[16.69994,46.42007],[16.70966,46.40541],[16.7192,46.40206],[16.73511,46.4046],[16.74231,46.40217],[16.74466,46.39848],[16.74466,46.38981],[16.75052,46.39224],[16.75789,46.39097],[16.7609,46.38566],[16.76509,46.38843],[16.77296,46.38877],[16.77899,46.38473],[16.78502,46.38947],[16.79624,46.39028],[16.80444,46.38739],[16.80896,46.3808],[16.81231,46.38011],[16.82069,46.37688],[16.82873,46.37768],[16.83743,46.37895],[16.84329,46.37399],[16.84329,46.36786],[16.85234,46.36451],[16.86172,46.35873],[16.86808,46.35769],[16.87361,46.35365],[16.86959,46.34775],[16.87277,46.34868],[16.88148,46.3407],[16.88583,46.33434],[16.87897,46.32544],[16.88198,46.32093],[16.88047,46.31364],[16.88365,46.306],[16.89019,46.30253],[16.89119,46.28633],[16.89119,46.28228],[16.90509,46.27789],[16.91263,46.26816],[16.91732,46.26434],[16.92519,46.26365],[16.93858,46.25774],[16.94344,46.25161],[16.95399,46.24442],[16.96287,46.24338],[16.96638,46.24547],[16.97559,46.24616],[16.98012,46.24049],[16.97777,46.2311],[16.97844,46.22821],[16.98983,46.22821],[16.99569,46.22612],[17.00641,46.22635],[17.05363,46.20631],[17.05748,46.20631],[17.06921,46.20492],[17.0749,46.19564],[17.07808,46.19286],[17.08327,46.19135],[17.08646,46.19344],[17.09902,46.1917],[17.10705,46.18857],[17.10722,46.18428],[17.11208,46.18185],[17.1238,46.18266],[17.13017,46.17918],[17.12866,46.17304],[17.13084,46.17234],[17.1377,46.17547],[17.15294,46.17617],[17.16198,46.17292],[17.16366,46.16167],[17.17153,46.16028],[17.18375,46.15227],[17.19179,46.13522],[17.19062,46.13092],[17.18342,46.12698],[17.18643,46.1199],[17.18392,46.11177],[17.21005,46.11699],[17.21624,46.11734],[17.22194,46.11398],[17.2231,46.10833],[17.21815,46.10213],[17.23366,46.10329],[17.23885,46.09946],[17.23751,46.09447],[17.22566,46.09251],[17.22386,46.08914],[17.22804,46.08377],[17.23785,46.08181],[17.24396,46.07774],[17.25602,46.07008],[17.26277,46.06307],[17.26908,46.06142],[17.27561,46.05758],[17.27594,46.05276],[17.26276,46.04585],[17.26464,46.04381],[17.26713,46.04103],[17.26673,46.03672],[17.28817,46.03556],[17.29813,46.03422],[17.30173,46.02643],[17.29629,46.02004],[17.27795,46.01771],[17.2762,46.01533],[17.26272,46.01265],[17.27092,46.01207],[17.2767,46.00759],[17.28356,46.00457],[17.29612,46.00643],[17.30182,46.00707],[17.30902,46.00335],[17.31011,45.99834],[17.30843,45.99154],[17.3153,45.99404],[17.32267,45.99439],[17.32912,45.99828],[17.33816,45.99951],[17.34377,45.99631],[17.34829,45.9863],[17.35231,45.97944],[17.35532,45.97792],[17.35591,45.98624],[17.35825,45.9927],[17.36194,45.99514],[17.36794,45.99616],[17.37366,45.99398],[17.37936,45.99119],[17.38053,45.9838],[17.37308,45.97583],[17.38162,45.97146],[17.38748,45.96867],[17.39694,45.9643],[17.39635,45.96093],[17.39317,45.95522],[17.39373,45.95228],[17.40598,45.94033],[17.41117,45.94306],[17.41445,45.93808],[17.42032,45.9457],[17.42507,45.95051],[17.43638,45.95377],[17.44835,45.95377],[17.4594,45.94905],[17.46778,45.94725],[17.49198,45.94556],[17.51517,45.94276],[17.53301,45.93793],[17.55947,45.9423],[17.57404,45.93991],[17.59313,45.92582],[17.61306,45.91586],[17.62863,45.90607],[17.6401,45.88701],[17.65249,45.86655],[17.65316,45.85507],[17.66053,45.84521],[17.67025,45.83833],[17.68565,45.84148],[17.70081,45.84072],[17.7106,45.83547],[17.72744,45.83477],[17.74937,45.83074],[17.75473,45.82438],[17.76394,45.81849],[17.77374,45.82],[17.78756,45.81971],[17.79585,45.81283],[17.8043,45.80833],[17.81075,45.80734],[17.8146,45.81172],[17.82339,45.81359],[17.83202,45.81131],[17.83629,45.80483],[17.83713,45.79339],[17.84341,45.78866],[17.85262,45.78702],[17.85655,45.78381],[17.85831,45.77762],[17.85957,45.77324],[17.86526,45.77067],[17.86811,45.77862],[17.88276,45.78755],[17.89457,45.79321],[17.90763,45.79537],[17.9196,45.7914],[17.92873,45.78948],[17.93518,45.79181],[17.94556,45.79485],[17.95352,45.7959],[17.9598,45.79461],[17.96901,45.79251],[17.97369,45.79269],[17.98282,45.79707],[18.00359,45.7973],[18.00719,45.79485],[18.01983,45.78422],[18.03465,45.77908],[18.04763,45.77762],[18.06028,45.77447],[18.08054,45.76834],[18.09335,45.76904],[18.10507,45.77435],[18.10951,45.78241],[18.1168,45.79],[18.12374,45.79257],[18.13538,45.79123],[18.14501,45.79175],[18.15757,45.78837],[18.1631,45.78183],[18.17055,45.77914],[18.17826,45.78767],[18.18763,45.79041],[18.19576,45.78977],[18.2048,45.78551],[18.21652,45.7837],[18.22933,45.78305],[18.2362,45.7792],[18.24633,45.76507],[18.24993,45.76547],[18.25906,45.76425],[18.27706,45.75852],[18.29054,45.76325],[18.29531,45.76372],[18.3,45.76296],[18.30871,45.75998],[18.31491,45.75952],[18.33249,45.75771],[18.34028,45.75291],[18.35033,45.76682],[18.35987,45.77511],[18.36506,45.77628],[18.3803,45.76781],[18.38533,45.76764],[18.39521,45.76466],[18.39864,45.75887],[18.40057,45.75952],[18.40475,45.75595],[18.403,45.74766],[18.41036,45.74222],[18.41849,45.74392],[18.42728,45.74479],[18.43599,45.7417],[18.44336,45.74187],[18.44344,45.75677],[18.44051,45.76033],[18.44922,45.77132],[18.45742,45.77248],[18.46504,45.76915],[18.47743,45.77003],[18.48028,45.78638],[18.48413,45.79491],[18.49401,45.79858],[18.50314,45.79736],[18.50858,45.7931],[18.5095,45.78854],[18.51612,45.78784],[18.52893,45.79561],[18.53278,45.79619],[18.53756,45.79567],[18.54308,45.79806],[18.54861,45.79683],[18.55212,45.79695],[18.55539,45.80442],[18.55757,45.80646],[18.57021,45.80425],[18.56829,45.8151],[18.58704,45.82129],[18.59885,45.82852],[18.59617,45.83576],[18.61719,45.84118],[18.61392,45.84696],[18.60906,45.85372],[18.62229,45.85938],[18.62334,45.87402],[18.62736,45.8792],[18.6333,45.87929],[18.63904,45.87186],[18.64775,45.87539],[18.63829,45.88288],[18.6372,45.88652],[18.63628,45.88972],[18.64402,45.89465],[18.6521,45.89812],[18.65708,45.89829],[18.65801,45.89963],[18.65587,45.90351],[18.6552,45.91536],[18.65566,45.91755],[18.65729,45.91935],[18.66462,45.91938],[18.67027,45.9149],[18.67299,45.91696],[18.68869,45.91895],[18.69954,45.92049],[18.70502,45.92093],[18.70703,45.92066],[18.70883,45.9183],[18.71365,45.91391],[18.72265,45.90788],[18.73852,45.90371],[18.74852,45.90272],[18.75137,45.90292],[18.75422,45.90211],[18.75438,45.89972],[18.75765,45.89951],[18.75962,45.89855],[18.76439,45.89447],[18.76393,45.89197],[18.77427,45.89136],[18.78034,45.88905],[18.78557,45.88378],[18.79064,45.88142],[18.79801,45.88151],[18.80609,45.88171],[18.80831,45.89101],[18.80814,45.89579],[18.80374,45.90144],[18.80274,45.90365],[18.81521,45.91536],[18.82036,45.91772],[18.82623,45.91743],[18.83033,45.90791],[18.86248,45.91303],[18.85984,45.91793],[18.86001,45.92116],[18.86257,45.92299],[18.86617,45.92296],[18.86918,45.9216],[18.87161,45.92017],[18.87237,45.91897],[18.87535,45.91744],[18.87849,45.91784],[18.88401,45.92121],[18.90217,45.92088],[18.90522,45.9185],[18.90664,45.91579],[18.90702,45.91314],[18.90512,45.91023],[18.90122,45.90712],[18.89675,45.90573],[18.87764,45.90004],[18.87412,45.89779],[18.87259,45.89554],[18.87288,45.89382],[18.87773,45.88687],[18.88039,45.88448],[18.88648,45.8821],[18.89742,45.87859],[18.90084,45.87634],[18.90322,45.87396],[18.90512,45.86959],[18.90522,45.86687],[18.90284,45.86356],[18.89846,45.86197],[18.89466,45.85912],[18.88543,45.85733],[18.87735,45.85753],[18.86812,45.85806],[18.86071,45.85998],[18.86128,45.85773],[18.86165,45.84448],[18.86005,45.83211],[18.85784,45.82581],[18.85291,45.81718],[18.85158,45.81307],[18.85272,45.80956],[18.8569,45.80969],[18.86337,45.8077],[18.87478,45.80936],[18.87887,45.81658],[18.87859,45.81996],[18.88172,45.82374],[18.88734,45.82593],[18.89314,45.82798],[18.89999,45.82732],[18.90807,45.82487],[18.91482,45.82209],[18.92176,45.81977],[18.92338,45.81566],[18.92576,45.80465],[18.92224,45.79663],[18.92214,45.78927],[18.92062,45.78781],[18.91682,45.78264],[18.90645,45.77892],[18.89475,45.77886],[18.89352,45.7772],[18.87764,45.78323],[18.87288,45.78264],[18.86527,45.77972],[18.85405,45.77335],[18.85747,45.76665],[18.86556,45.76247],[18.87792,45.75929],[18.89542,45.75351],[18.90769,45.74721],[18.91634,45.74661],[18.92376,45.74827],[18.93004,45.75225],[18.9366,45.75703],[18.94459,45.76114],[18.94687,45.76406],[18.9561,45.7691],[18.96085,45.7691],[18.96932,45.76765],[18.97265,45.76493],[18.97455,45.76008],[18.97293,45.75278],[18.97892,45.74966],[18.98168,45.74674],[18.98301,45.74223],[18.97968,45.73586],[18.97341,45.73061],[18.96313,45.72404],[18.96951,45.72318],[18.9755,45.72185],[18.97968,45.71594],[18.97987,45.70923],[18.9774,45.69881],[18.9716,45.69436],[18.95866,45.69243],[18.95049,45.69595],[18.94906,45.69847],[18.94459,45.70113],[18.9327,45.70233],[18.9289,45.70392],[18.92081,45.7012],[18.92719,45.69475],[18.93308,45.69083],[18.94059,45.6901],[18.94278,45.68897],[18.96447,45.6826],[18.96447,45.6713],[18.97131,45.67117],[18.97103,45.66904],[18.97284,45.66632],[18.97788,45.6594],[18.97826,45.65389],[18.97483,45.64983],[18.9676,45.64644],[18.95847,45.64558],[18.94944,45.64252],[18.94373,45.64192],[18.93841,45.63387],[18.94659,45.63593],[18.95106,45.63228],[18.95496,45.62755],[18.95419,45.6241],[18.94687,45.62064],[18.94735,45.61964],[18.94525,45.61432],[18.94782,45.60793],[18.94763,45.60321],[18.94193,45.59868],[18.92814,45.59562],[18.9249,45.59629],[18.91844,45.59728],[18.91748,45.59376],[18.91273,45.59056],[18.89979,45.57892],[18.90122,45.57133],[18.90731,45.56953],[18.91054,45.56893],[18.91406,45.57066],[18.9171,45.57046],[18.93127,45.56667],[18.93632,45.56114],[18.93527,45.55521],[18.93061,45.55062],[18.93185,45.54722],[18.93736,45.54336],[18.94487,45.54089],[18.94963,45.53863],[18.95733,45.53856],[18.97322,45.53996],[18.98187,45.54169],[18.99091,45.54516],[18.99946,45.55481],[19.00412,45.55987],[19.01059,45.56047],[19.02191,45.55954],[19.03247,45.55361],[19.03313,45.54649],[19.0377,45.53843],[19.04055,45.53663],[19.05624,45.53636],[19.07022,45.53543],[19.08106,45.53157],[19.09676,45.52424],[19.10208,45.52097],[19.10503,45.51651],[19.10712,45.51124],[19.10665,45.50338],[19.10284,45.49598],[19.08962,45.48478],[19.08297,45.48304],[19.06861,45.48231],[19.04892,45.48078],[19.03161,45.48278],[19.01925,45.48838],[19.00907,45.49311],[19.00346,45.49158],[19.00073,45.48768],[18.9988,45.48091],[18.99756,45.47438],[18.99775,45.47277],[18.99366,45.47284],[18.99271,45.4547],[18.99595,45.44796],[18.99965,45.44316],[19.00707,45.43828],[19.01287,45.43582],[19.01944,45.43375],[19.0259,45.43028],[19.03018,45.42547],[19.02952,45.41779],[19.03418,45.41766],[19.03342,45.40972],[19.02828,45.40397],[19.02258,45.40017],[19.01506,45.39843],[19.0007,45.3983],[18.98748,45.39496],[18.97873,45.39129],[18.97331,45.38815],[18.97303,45.38127],[18.97736,45.37577],[18.9832,45.37145],[18.99129,45.36797],[19.01335,45.35942],[19.02258,45.35507],[19.03037,45.35227],[19.05016,45.34993],[19.05577,45.34766],[19.06994,45.34679],[19.08915,45.34237],[19.09695,45.33749],[19.10227,45.33021],[19.10094,45.30821],[19.10513,45.30834],[19.1095,45.30091],[19.11661,45.29513],[19.12358,45.29175],[19.13147,45.28914],[19.15753,45.28104],[19.16818,45.27944],[19.17693,45.27529],[19.17636,45.27054],[19.19129,45.27027],[19.22001,45.26619],[19.22638,45.26746],[19.2378,45.27094],[19.24303,45.27388],[19.24683,45.27904],[19.25492,45.28185],[19.26129,45.28305],[19.26699,45.28238],[19.27384,45.2793],[19.27679,45.27542],[19.27717,45.27127],[19.27536,45.26672],[19.26747,45.26009],[19.26509,45.25675],[19.26176,45.25126],[19.26243,45.24597],[19.28383,45.24182],[19.32177,45.23753],[19.35934,45.23586],[19.42202,45.23666],[19.42439,45.22695],[19.42905,45.21924],[19.43799,45.20899],[19.44988,45.19546],[19.44284,45.19217],[19.43685,45.19177],[19.43666,45.18902],[19.434,45.18708],[19.43057,45.18654],[19.43771,45.1726],[19.43162,45.16858],[19.41821,45.16415],[19.41412,45.16542],[19.4048,45.16797],[19.40204,45.16831],[19.38749,45.17159],[19.38492,45.17039],[19.37484,45.17025],[19.37256,45.16878],[19.364,45.172],[19.36181,45.17153],[19.362,45.16878],[19.35658,45.16797],[19.35639,45.16308],[19.34736,45.16341],[19.34555,45.17099],[19.32748,45.17649],[19.32986,45.18138],[19.32682,45.18393],[19.31883,45.19975],[19.31769,45.20625],[19.29857,45.20397],[19.28602,45.20377],[19.28735,45.19881],[19.29125,45.19573],[19.2882,45.19217],[19.2844,45.19211],[19.29619,45.17964],[19.2961,45.17642],[19.298,45.1728],[19.298,45.16998],[19.29362,45.16965],[19.29144,45.17079],[19.28915,45.16938],[19.28459,45.16925],[19.27384,45.17045],[19.27137,45.17394],[19.24769,45.17099],[19.24626,45.17568],[19.23675,45.17374],[19.23,45.17991],[19.22619,45.18339],[19.21992,45.18453],[19.21364,45.18587],[19.20955,45.18922],[19.20365,45.19137],[19.18948,45.19955],[19.1852,45.20022],[19.17893,45.19854],[19.1756,45.20035],[19.17237,45.19807],[19.16837,45.19043],[19.17741,45.18788],[19.18749,45.18487],[19.19709,45.17897],[19.19034,45.1667],[19.16495,45.14537],[19.14222,45.12726],[19.13879,45.12894],[19.11835,45.13263],[19.10988,45.13719],[19.08905,45.14323],[19.09,45.13772],[19.08363,45.13356],[19.08401,45.13122],[19.08011,45.12732],[19.07888,45.11464],[19.08767,45.11224],[19.0881,45.11083],[19.0876,45.11014],[19.08715,45.10956],[19.08898,45.10956],[19.09046,45.10885],[19.09671,45.10227],[19.09659,45.10033],[19.09766,45.09888],[19.09785,45.09754],[19.09699,45.09516],[19.09533,45.09269],[19.09797,45.09007],[19.10142,45.08705],[19.10287,45.08504],[19.10727,45.08324],[19.10838,45.08193],[19.10857,45.08104],[19.10967,45.07943],[19.10929,45.07809],[19.10631,45.07087],[19.09961,45.06035],[19.10408,45.05765],[19.10513,45.05629],[19.1076,45.05431],[19.10929,45.05206],[19.10952,45.05083],[19.10869,45.04876],[19.10612,45.04467],[19.10256,45.04021],[19.0979,45.03685],[19.09856,45.03544],[19.10073,45.0349],[19.1017,45.03432],[19.10237,45.03334],[19.10237,45.03242],[19.10158,45.0303],[19.10275,45.0283],[19.10275,45.02754],[19.10194,45.02595],[19.1008,45.02523],[19.10075,45.02354],[19.10173,45.0218],[19.10303,45.01546],[19.1042,45.01444],[19.10496,45.01316],[19.10532,45.01217],[19.10586,45.01163],[19.10612,45.01045],[19.10555,45.00926],[19.09928,45.00411],[19.09583,44.99369],[19.09483,44.99266],[19.09407,44.99246],[19.08882,44.99147],[19.08822,44.99038],[19.08202,44.98463],[19.07413,44.9833],[19.06536,44.98083],[19.06192,44.98015],[19.05936,44.97872],[19.05765,44.97822],[19.05879,44.97795],[19.06143,44.97743],[19.06582,44.97561],[19.07001,44.9756],[19.07517,44.9743],[19.08218,44.97666],[19.08708,44.97669],[19.09003,44.97608],[19.0944,44.97351],[19.09925,44.974],[19.10253,44.9737],[19.10708,44.97282],[19.11347,44.97662],[19.11768,44.97884],[19.12353,44.97955],[19.13071,44.98231],[19.13375,44.98345],[19.14008,44.98338],[19.14369,44.98234],[19.14854,44.97985],[19.15235,44.97706],[19.15149,44.96067],[19.15491,44.96078],[19.15682,44.96014],[19.15858,44.9566],[19.16024,44.95324],[19.15929,44.95108],[19.15605,44.94954],[19.15092,44.94745],[19.14778,44.94361],[19.14726,44.94015],[19.14459,44.93755],[19.13789,44.93624],[19.12648,44.93587],[19.11749,44.93099],[19.10831,44.9287],[19.10089,44.9256],[19.09172,44.92308],[19.08877,44.92119],[19.09129,44.91981],[19.09204,44.9164],[19.09072,44.91415],[19.08767,44.91358],[19.0901,44.9122],[19.0911,44.91042],[19.08649,44.90499],[19.08368,44.90361],[19.07698,44.90281],[19.07384,44.90065],[19.07103,44.89893],[19.06566,44.89843],[19.05781,44.90176],[19.04935,44.90678],[19.04193,44.91021],[19.03711,44.9148],[19.03284,44.91841],[19.02513,44.91871],[19.00562,44.91331],[18.99675,44.90679],[18.99708,44.89801],[19.01031,44.88508],[19.02756,44.85927],[19.02647,44.85137],[18.996,44.84823],[18.96225,44.84597],[18.92499,44.8468],[18.87835,44.84817],[18.85055,44.849],[18.83925,44.8547],[18.81915,44.87339],[18.78942,44.88449],[18.7633,44.8992],[18.75635,44.90792],[18.76338,44.91978],[18.74655,44.9263],[18.74471,44.93786],[18.74764,44.9455],[18.76271,44.94894],[18.78398,44.93857],[18.79579,44.93987],[18.79813,44.94485],[18.78214,44.95469],[18.7782,44.97596],[18.78901,44.99224],[18.78214,44.99165],[18.77251,44.99485],[18.76163,44.99591],[18.74613,44.98987],[18.73659,44.98934],[18.72679,44.99017],[18.72026,44.99728],[18.72621,45.00622],[18.73282,45.01545],[18.71892,45.02054],[18.71155,45.03475],[18.70109,45.03439],[18.68861,45.03764],[18.66466,45.05817],[18.6588,45.05326],[18.64725,45.05421],[18.64063,45.05776],[18.60864,45.05805],[18.59935,45.06409],[18.59843,45.06971],[18.60856,45.07627],[18.60211,45.07645],[18.58771,45.08384],[18.58704,45.06846],[18.57691,45.06154],[18.56703,45.06551],[18.56401,45.07432],[18.55598,45.07065],[18.54434,45.06137],[18.54467,45.05539],[18.54057,45.0409],[18.53161,45.03995],[18.52474,45.04303],[18.526,45.05155],[18.52299,45.05634],[18.51419,45.05344],[18.48983,45.05516],[18.46814,45.05995],[18.44804,45.07639],[18.43749,45.08265],[18.43088,45.0985],[18.41924,45.10518],[18.40015,45.10547],[18.36875,45.10269],[18.33676,45.09808],[18.32169,45.09696],[18.3098,45.10376],[18.3021,45.11191],[18.28929,45.10996],[18.27631,45.11174],[18.2722,45.12781],[18.26718,45.13318],[18.25755,45.13614],[18.23561,45.13194],[18.21493,45.12202],[18.21309,45.11705],[18.2161,45.10919],[18.22473,45.10287],[18.22699,45.09856],[18.22046,45.08827],[18.21192,45.08177],[18.19994,45.07562],[18.18286,45.07343],[18.16695,45.07396],[18.15062,45.08153],[18.1394,45.08183],[18.12115,45.07621],[18.1106,45.07863],[18.10139,45.08484],[18.08967,45.09714],[18.07652,45.10057],[18.06856,45.10352],[18.06664,45.10772],[18.06856,45.1115],[18.08054,45.119],[18.07242,45.13182],[18.06597,45.13909],[18.05709,45.13962],[18.04822,45.13631],[18.04462,45.12385],[18.03733,45.12196],[18.02862,45.12432],[18.02126,45.13868],[18.01732,45.14618],[18.0097,45.14872],[17.9948,45.14488],[17.9824,45.13543],[17.98106,45.12414],[17.97202,45.11292],[17.96105,45.10843],[17.94146,45.10813],[17.93576,45.1037],[17.9366,45.09483],[17.94221,45.08626],[17.94171,45.08141],[17.93024,45.07438],[17.90654,45.05882],[17.88418,45.04794],[17.86593,45.04114],[17.85061,45.04019],[17.83545,45.04327],[17.80824,45.05663],[17.78848,45.07308],[17.78504,45.0768],[17.77709,45.08124],[17.76905,45.08112],[17.76528,45.0807],[17.75616,45.08254],[17.73238,45.09584],[17.71747,45.10394],[17.7091,45.11032],[17.70047,45.11138],[17.68808,45.11357],[17.6777,45.12426],[17.67225,45.12934],[17.66363,45.13094],[17.65341,45.1281],[17.63483,45.11971],[17.62989,45.1151],[17.62629,45.1102],[17.61599,45.10967],[17.61063,45.106],[17.6005,45.10181],[17.59045,45.10281],[17.58358,45.10843],[17.57839,45.11256],[17.57445,45.11286],[17.5696,45.10654],[17.55729,45.10417],[17.54992,45.10701],[17.55059,45.11321],[17.55277,45.12184],[17.5495,45.12663],[17.54414,45.12544],[17.54582,45.11835],[17.54372,45.11292],[17.53594,45.10665],[17.52187,45.10488],[17.51283,45.10494],[17.50362,45.11109],[17.49801,45.10837],[17.48821,45.10589],[17.47757,45.10795],[17.47347,45.11239],[17.47699,45.11894],[17.48746,45.12515],[17.48821,45.13283],[17.47456,45.12267],[17.4589,45.12249],[17.44768,45.12456],[17.44408,45.1281],[17.44425,45.13265],[17.45086,45.14399],[17.44827,45.15627],[17.44509,45.15769],[17.44098,45.15639],[17.43814,45.14582],[17.4275,45.13655],[17.41754,45.13253],[17.40607,45.13141],[17.38312,45.13407],[17.35968,45.13608],[17.3426,45.13809],[17.32644,45.14895],[17.32225,45.15604],[17.32752,45.16295],[17.30927,45.16159],[17.30525,45.16619],[17.30659,45.17375],[17.29554,45.17233],[17.28264,45.17186],[17.27318,45.18585],[17.26824,45.17404],[17.26422,45.17257],[17.26389,45.16619],[17.25903,45.15332],[17.25141,45.1444],[17.2463,45.14263],[17.23492,45.14376],[17.22244,45.14257],[17.2144,45.14381],[17.2031,45.14659],[17.19096,45.14328],[17.17932,45.14352],[17.16542,45.14694],[17.14055,45.16047],[17.13125,45.16295],[17.10957,45.17334],[17.10262,45.17475],[17.06619,45.18904],[17.0605,45.196],[17.0507,45.19736],[17.04065,45.20414],[17.03437,45.21983],[17.02382,45.21087],[17.01771,45.20951],[17.00992,45.21081],[17.00415,45.21399],[17.00314,45.21889],[17.00004,45.21783],[16.99201,45.21889],[16.9864,45.22066],[16.97911,45.22573],[16.97559,45.22443],[16.96923,45.22384],[16.96362,45.22644],[16.95943,45.22844],[16.95583,45.22886],[16.95031,45.22514],[16.94361,45.22431],[16.93875,45.22426],[16.93264,45.22703],[16.93088,45.23682],[16.93054,45.24206],[16.9344,45.24878],[16.94637,45.25321],[16.94897,45.25468],[16.94913,45.25668],[16.93699,45.26158],[16.93465,45.26965],[16.93331,45.27307],[16.9282,45.27307],[16.92351,45.27142],[16.92259,45.26723],[16.91782,45.26275],[16.91874,45.25975],[16.91681,45.25509],[16.91237,45.25061],[16.90442,45.24749],[16.89814,45.24713],[16.89429,45.24401],[16.88658,45.24295],[16.88809,45.24136],[16.88525,45.23428],[16.88742,45.23062],[16.88684,45.22644],[16.88432,45.22296],[16.88508,45.22137],[16.88181,45.21647],[16.87737,45.216],[16.8721,45.21718],[16.86833,45.21635],[16.86724,45.21193],[16.86322,45.20821],[16.85778,45.20225],[16.85292,45.20115],[16.84775,45.20171],[16.84623,45.1975],[16.84723,45.19526],[16.84706,45.19367],[16.84438,45.19148],[16.84116,45.18842],[16.83484,45.18547],[16.8286,45.18402],[16.82178,45.1824],[16.81516,45.18187],[16.80691,45.18254],[16.80273,45.18299],[16.79109,45.18603],[16.77706,45.18948],[16.77124,45.19119],[16.76329,45.1957],[16.75965,45.19703],[16.75328,45.19665],[16.74889,45.1975],[16.73972,45.20143],[16.7326,45.20461],[16.73051,45.20467],[16.72611,45.20258],[16.72063,45.20205],[16.71615,45.20184],[16.71121,45.19951],[16.70409,45.1947],[16.69911,45.1934],[16.69429,45.1934],[16.68939,45.19491],[16.68349,45.19727],[16.67809,45.19871],[16.67051,45.19857],[16.66649,45.19945],[16.66168,45.20208],[16.65628,45.20452],[16.65125,45.20441],[16.64543,45.20517],[16.6343,45.21163],[16.63015,45.21113],[16.62802,45.21116],[16.62509,45.2124],[16.62278,45.21467],[16.62107,45.21718],[16.61941,45.21939],[16.61709,45.22137],[16.61451,45.22243],[16.60744,45.22516],[16.60455,45.22697],[16.60028,45.22828],[16.59808,45.22881],[16.59699,45.22877],[16.59356,45.22654],[16.59218,45.22426],[16.58755,45.22213],[16.58255,45.22004],[16.5792,45.21948],[16.57514,45.21974],[16.57133,45.2196],[16.56785,45.21976],[16.56528,45.21976],[16.56237,45.21855],[16.55883,45.21705],[16.55559,45.21654],[16.55249,45.21641],[16.54954,45.21688],[16.54772,45.21712],[16.54445,45.21777],[16.54198,45.21876],[16.53884,45.22048],[16.53725,45.22206],[16.5366,45.22433],[16.53589,45.22452],[16.53308,45.22445],[16.53074,45.22431],[16.52186,45.22151],[16.51946,45.21977],[16.5151,45.21845],[16.51263,45.21647],[16.50999,45.21581],[16.50512,45.21274],[16.50163,45.21198],[16.49998,45.21198],[16.49992,45.20987],[16.49689,45.20907],[16.49491,45.20698],[16.49417,45.20094],[16.49086,45.19326],[16.48662,45.1876],[16.47863,45.18198],[16.47765,45.18004],[16.4782,45.17638],[16.48211,45.1696],[16.4831,45.16561],[16.48159,45.15965],[16.47876,45.15632],[16.47142,45.14842],[16.46679,45.14146],[16.46448,45.13997],[16.46184,45.13997],[16.46186,45.13855],[16.45391,45.13501],[16.45031,45.13174],[16.44722,45.13101],[16.44499,45.12871],[16.44087,45.12514],[16.43486,45.12272],[16.42988,45.12175],[16.42383,45.1219],[16.4237,45.12057],[16.41417,45.11902],[16.40499,45.11581],[16.39821,45.11157],[16.39752,45.10909],[16.39675,45.1063],[16.39744,45.10509],[16.40636,45.0997],[16.40645,45.09831],[16.40585,45.09661],[16.40233,45.09449],[16.39958,45.09255],[16.39915,45.08807],[16.39641,45.08485],[16.39057,45.08037],[16.3898,45.0771],[16.39152,45.07207],[16.39134,45.06613],[16.38817,45.06067],[16.38757,45.05236],[16.38165,45.04794],[16.37718,45.04842],[16.37315,45.0426],[16.3686,45.03969],[16.36362,45.03508],[16.3613,45.03023],[16.36311,45.02392],[16.36122,45.01706],[16.36268,45.01172],[16.35984,45.00693],[16.3583,45.00232],[16.35504,44.99959],[16.34706,44.99704],[16.33056,44.99762],[16.32583,44.99875],[16.32279,44.99882],[16.31546,44.99583],[16.3062,44.9957],[16.30148,44.99502],[16.29511,44.99478],[16.29188,44.99293],[16.28569,44.9923],[16.28427,44.99441],[16.28042,45.00406],[16.27552,45.00208],[16.26948,45.00393],[16.26777,45.01237],[16.26682,45.01324],[16.26468,45.01328],[16.26292,45.00958],[16.25802,45.00776],[16.25426,45.00796],[16.25155,45.01032],[16.24628,45.01139],[16.24152,45.01012],[16.22578,45.01489],[16.22497,45.02141],[16.22131,45.02161],[16.20971,45.02578],[16.20619,45.02924],[16.19625,45.02733],[16.19069,45.02823],[16.18707,45.03149],[16.18141,45.04477],[16.174,45.04836],[16.17124,45.05115],[16.17176,45.05656],[16.16962,45.06136],[16.16515,45.06626],[16.16715,45.07026],[16.16192,45.07231],[16.15322,45.07946],[16.14489,45.08081],[16.13857,45.0851],[16.13643,45.08524],[16.13472,45.08359],[16.13025,45.08332],[16.12573,45.08527],[16.12159,45.0893],[16.10628,45.08964],[16.09853,45.09705],[16.09282,45.10024],[16.08617,45.10185],[16.08065,45.10994],[16.08021,45.12308],[16.07989,45.13195],[16.07442,45.1393],[16.06672,45.14359],[16.05821,45.15315],[16.05136,45.15731],[16.0467,45.16804],[16.04199,45.17042],[16.04152,45.17619],[16.02321,45.17733],[16.01612,45.17582],[16.01137,45.178],[16.00914,45.18458],[16.02074,45.19412],[16.0224,45.19757],[16.01731,45.20001],[16.01122,45.21415],[16.00666,45.21352],[16.00209,45.21414],[15.99729,45.21784],[15.99299,45.21741],[15.98569,45.22062],[15.97876,45.2257],[15.97485,45.22537],[15.96924,45.219],[15.9602,45.21757],[15.9561,45.21445],[15.94777,45.21067],[15.91799,45.21049],[15.91602,45.21084],[15.91676,45.21425],[15.92107,45.22075],[15.92048,45.22437],[15.91837,45.22313],[15.91641,45.22182],[15.91103,45.22092],[15.90497,45.22186],[15.90076,45.22427],[15.89795,45.22354],[15.89976,45.21924],[15.89843,45.21553],[15.89596,45.21355],[15.88727,45.21269],[15.88478,45.21492],[15.87527,45.21472],[15.87009,45.21666],[15.8601,45.21395],[15.85538,45.21374],[15.84351,45.22157],[15.83464,45.21608],[15.83649,45.21177],[15.82967,45.20474],[15.82342,45.20258],[15.81405,45.20607],[15.81303,45.20303],[15.80651,45.20025],[15.80658,45.1968],[15.8047,45.19499],[15.79767,45.19164],[15.79069,45.19066],[15.78682,45.18517],[15.78216,45.18249],[15.78188,45.17495],[15.78039,45.17366],[15.77476,45.17354],[15.77487,45.16994],[15.77289,45.16881],[15.77021,45.16383],[15.77392,45.15274],[15.78071,45.14703],[15.78012,45.14014],[15.78483,45.1394],[15.7871,45.13525],[15.78302,45.1302],[15.78911,45.12464],[15.79444,45.12179],[15.79588,45.11433],[15.78558,45.10442],[15.78341,45.09297],[15.77534,45.09164],[15.77927,45.08366],[15.77597,45.08369],[15.776,45.08188],[15.77587,45.07994],[15.77589,45.07704],[15.77534,45.07382],[15.7611,45.06754],[15.75772,45.06344],[15.75122,45.06121],[15.75929,45.05309],[15.76032,45.04691],[15.77165,45.02161],[15.77654,45.01075],[15.78186,45.0096],[15.78701,45.00456],[15.79001,44.99352],[15.78572,44.98271],[15.78847,44.97482],[15.7871,44.96984],[15.781,44.96504],[15.77371,44.96583],[15.77182,44.96765],[15.75336,44.96619],[15.75113,44.95836],[15.75371,44.95083],[15.75113,44.94488],[15.74281,44.93655],[15.76487,44.88762],[15.76401,44.87071],[15.79834,44.84699],[15.79628,44.84419],[15.76143,44.82617],[15.73551,44.82288],[15.7477,44.80863],[15.74547,44.80121],[15.75972,44.78829],[15.76744,44.77794],[15.77465,44.77196],[15.77568,44.76758],[15.78289,44.75844],[15.7877,44.75051],[15.81242,44.74332],[15.81911,44.73686],[15.82615,44.72649],[15.8325,44.72393],[15.84726,44.7393],[15.85894,44.74003],[15.87147,44.73613],[15.87696,44.73564],[15.88005,44.74698],[15.89481,44.75271],[15.90631,44.74978],[15.90685,44.74324],[15.9156,44.73624],[15.92568,44.72287],[15.93043,44.71939],[15.93329,44.71273],[15.93666,44.71455],[15.95526,44.71499],[15.95896,44.71307],[15.96058,44.70783],[15.96139,44.70394],[15.95825,44.70009],[15.9622,44.69583],[15.96662,44.69482],[15.96914,44.69282],[15.97323,44.68336],[15.97256,44.67954],[15.97946,44.67328],[15.98431,44.67325],[15.9894,44.67156],[15.9932,44.66878],[15.9971,44.66608],[15.99957,44.66286],[16.01389,44.6586],[16.02287,44.66019],[16.03025,44.65833],[16.03586,44.65529],[16.03705,44.64872],[16.04423,44.64061],[16.04603,44.63739],[16.0476,44.63045],[16.04912,44.6293],[16.05274,44.62978],[16.05823,44.62811],[16.0592,44.627],[16.05963,44.61248],[16.06263,44.60805],[16.05868,44.60361],[16.05298,44.60341],[16.05084,44.60046],[16.05531,44.59799],[16.05564,44.59508],[16.04751,44.58986],[16.04499,44.58634],[16.03595,44.58438],[16.02497,44.58563],[16.02135,44.58329],[16.02316,44.5732],[16.02416,44.56754],[16.02335,44.56378],[16.04917,44.54877],[16.05778,44.54162],[16.08056,44.53881],[16.09458,44.53528],[16.11056,44.52942],[16.12673,44.51464],[16.12792,44.50341],[16.13543,44.49378],[16.13662,44.48788],[16.141,44.48581],[16.1458,44.48018],[16.14413,44.47424],[16.14033,44.47047],[16.14223,44.46243],[16.13748,44.45873],[16.13767,44.45734],[16.141,44.45727],[16.14423,44.45544],[16.14818,44.44916],[16.14713,44.4423],[16.14375,44.43918],[16.14594,44.42719],[16.14879,44.42542],[16.15559,44.42542],[16.16491,44.41802],[16.16858,44.41462],[16.17072,44.4098],[16.17599,44.4063],[16.17742,44.40236],[16.17571,44.39968],[16.16991,44.39747],[16.16092,44.39176],[16.15412,44.39111],[16.15108,44.39173],[16.14019,44.3886],[16.13367,44.39142],[16.134,44.3868],[16.13524,44.38112],[16.14608,44.3799],[16.14993,44.38085],[16.1536,44.3834],[16.15797,44.3834],[16.17276,44.37701],[16.17856,44.37018],[16.19915,44.3659],[16.20998,44.36191],[16.22406,44.3489],[16.22307,44.34118],[16.20923,44.33349],[16.20405,44.32822],[16.19963,44.31988],[16.19953,44.3143],[16.19368,44.30784],[16.1923,44.29936],[16.1923,44.29548],[16.19511,44.29218],[16.1972,44.28398],[16.19606,44.27162],[16.20077,44.26219],[16.20538,44.2582],[16.20495,44.25425],[16.209,44.25459],[16.21427,44.25177],[16.22269,44.24131],[16.22559,44.23409],[16.22412,44.22213],[16.22179,44.22032],[16.21908,44.21974],[16.21765,44.21695],[16.22307,44.21388],[16.22973,44.21207],[16.23192,44.20696],[16.23429,44.20488],[16.23722,44.20476],[16.23721,44.20365],[16.24017,44.20368],[16.24314,44.20014],[16.24685,44.19823],[16.24761,44.19602],[16.25488,44.19141],[16.25992,44.18586],[16.26577,44.18173],[16.26744,44.17852],[16.27395,44.17634],[16.27638,44.17307],[16.2934,44.16444],[16.29892,44.15594],[16.30916,44.14974],[16.31098,44.1463],[16.31266,44.14387],[16.31276,44.14256],[16.31157,44.12793],[16.31525,44.12639],[16.31598,44.125],[16.3168,44.12172],[16.32072,44.11655],[16.33606,44.11467],[16.3383,44.11357],[16.35283,44.10791],[16.36216,44.10334],[16.36388,44.10159],[16.36616,44.09926],[16.36664,44.09827],[16.36668,44.09748],[16.36514,44.09516],[16.37192,44.08445],[16.37753,44.08405],[16.37814,44.08379],[16.38276,44.08597],[16.38391,44.08599],[16.38536,44.08569],[16.38659,44.08507],[16.38961,44.08289],[16.39672,44.08247],[16.39834,44.08239],[16.40072,44.08215],[16.40256,44.08211],[16.42785,44.0856],[16.42923,44.08519],[16.4303,44.08448],[16.44441,44.0688],[16.44508,44.06805],[16.44565,44.06696],[16.44472,44.06462],[16.44389,44.06191],[16.43893,44.05434],[16.4396,44.049],[16.44177,44.04244],[16.44204,44.03718],[16.44144,44.03546],[16.43997,44.03188],[16.44156,44.03107],[16.44345,44.0311],[16.44897,44.03042],[16.45525,44.03049],[16.45923,44.03076],[16.46266,44.03126],[16.46731,44.03221],[16.46936,44.03212],[16.48295,44.0317],[16.50428,44.02631],[16.50539,44.02518],[16.5187,44.00519],[16.53769,43.98917],[16.53995,43.98722],[16.54742,43.97499],[16.54784,43.97359],[16.55289,43.9553],[16.58975,43.94507],[16.59094,43.94383],[16.59163,43.94198],[16.59304,43.93928],[16.60141,43.93673],[16.60252,43.93566],[16.6029,43.93479],[16.60614,43.9266],[16.61033,43.92476],[16.61114,43.92396],[16.61148,43.92265],[16.61232,43.92],[16.6123,43.91601],[16.61539,43.91597],[16.62603,43.90769],[16.62867,43.90324],[16.64786,43.88983],[16.64922,43.88855],[16.65117,43.88764],[16.65797,43.88589],[16.66067,43.88414],[16.66243,43.88224],[16.66266,43.88149],[16.66505,43.87972],[16.66869,43.87984],[16.67011,43.87971],[16.67173,43.87885],[16.67495,43.87646],[16.6753,43.87581],[16.68634,43.86798],[16.70704,43.86016],[16.70857,43.85933],[16.71315,43.85609],[16.7138,43.85502],[16.71809,43.84742],[16.71824,43.8464],[16.71843,43.8444],[16.72107,43.84185],[16.72161,43.84086],[16.72136,43.83616],[16.7236,43.83248],[16.72362,43.83172],[16.72335,43.83075],[16.72144,43.8294],[16.72347,43.82627],[16.72351,43.82517],[16.72268,43.82325],[16.72213,43.82148],[16.72148,43.81899],[16.72136,43.81635],[16.72215,43.80778],[16.72601,43.8053],[16.72799,43.80221],[16.72956,43.80045],[16.72977,43.7994],[16.72915,43.79709],[16.72868,43.79633],[16.7304,43.79518],[16.73067,43.79396],[16.7331,43.79121],[16.73685,43.78775],[16.74221,43.78312],[16.74761,43.77845],[16.7541,43.77221],[16.75707,43.77269],[16.76105,43.77219],[16.76113,43.77177],[16.76613,43.7717],[16.77987,43.77006],[16.80222,43.76488],[16.80474,43.7634],[16.81478,43.75664],[16.81822,43.75048],[16.81828,43.74988],[16.82743,43.73415],[16.83352,43.73241],[16.83664,43.7307],[16.85083,43.72098],[16.86975,43.71255],[16.87562,43.70733],[16.87926,43.70099],[16.87915,43.69905],[16.88031,43.69583],[16.88522,43.69357],[16.88617,43.6923],[16.88811,43.68718],[16.9022,43.68081],[16.91083,43.67631],[16.91177,43.67521],[16.91319,43.67263],[16.9151,43.67026],[16.91964,43.66446],[16.91987,43.66365],[16.9224,43.66007],[16.93025,43.65648],[16.93092,43.65531],[16.93161,43.65321],[16.9349,43.64722],[16.93502,43.6448],[16.96136,43.6273],[16.96701,43.62375],[16.97371,43.61948],[16.97438,43.61853],[16.98089,43.60728],[16.98424,43.6034],[16.98573,43.60235],[16.98596,43.6015],[16.98907,43.59903],[16.99,43.59768],[16.99288,43.59344],[16.99533,43.59303],[16.99672,43.59205],[16.99824,43.59048],[16.99849,43.58974],[17.00863,43.58314],[17.00982,43.58233],[17.01034,43.58107],[17.0107,43.58011],[17.01059,43.5779],[17.0165,43.5733],[17.02349,43.56986],[17.02745,43.56859],[17.0318,43.5659],[17.03477,43.56426],[17.03862,43.56096],[17.04442,43.55911],[17.05219,43.5578],[17.05378,43.55721],[17.05702,43.55681],[17.05702,43.55466],[17.06636,43.55462],[17.06808,43.55331],[17.06879,43.55202],[17.06852,43.55117],[17.07149,43.54991],[17.07346,43.54927],[17.07452,43.54838],[17.08097,43.54524],[17.08189,43.54413],[17.08518,43.54105],[17.08683,43.53952],[17.08861,43.53847],[17.09226,43.5361],[17.09602,43.53387],[17.09682,43.53308],[17.10538,43.53055],[17.10685,43.52958],[17.10814,43.52757],[17.10963,43.5258],[17.1252,43.52018],[17.12726,43.51848],[17.13247,43.5127],[17.13458,43.51098],[17.13502,43.51009],[17.13737,43.50974],[17.13969,43.50972],[17.14176,43.50901],[17.14208,43.5086],[17.14415,43.50792],[17.14524,43.50711],[17.14576,43.5059],[17.14771,43.50368],[17.15204,43.49746],[17.15583,43.49647],[17.16031,43.49604],[17.17436,43.49275],[17.17884,43.4963],[17.18005,43.49774],[17.18154,43.4982],[17.18405,43.49902],[17.18771,43.49984],[17.19003,43.49967],[17.19537,43.49993],[17.20701,43.49982],[17.2122,43.49881],[17.21509,43.49966],[17.21637,43.49946],[17.22093,43.49976],[17.22801,43.49976],[17.23196,43.49837],[17.23435,43.4967],[17.23701,43.49603],[17.23822,43.49496],[17.2404,43.49427],[17.24187,43.49351],[17.24561,43.49263],[17.24785,43.49156],[17.25275,43.48933],[17.25855,43.4861],[17.26052,43.48547],[17.26225,43.48455],[17.26728,43.48271],[17.26958,43.48124],[17.27243,43.47973],[17.27276,43.47849],[17.27632,43.47642],[17.27731,43.47519],[17.28139,43.47296],[17.28264,43.47171],[17.28532,43.46933],[17.28624,43.46797],[17.2866,43.46536],[17.28913,43.46188],[17.28899,43.45998],[17.28991,43.45711],[17.28926,43.4541],[17.28804,43.45238],[17.28972,43.44916],[17.28959,43.44726],[17.28865,43.4458],[17.28878,43.44351],[17.28788,43.44156],[17.28842,43.43857],[17.28733,43.43422],[17.28549,43.43054],[17.28216,43.42595],[17.27814,43.42043],[17.2745,43.41634],[17.27216,43.413],[17.26918,43.41219],[17.26382,43.40792],[17.26217,43.40486],[17.26075,43.40301],[17.25664,43.40208],[17.26104,43.3989],[17.26414,43.39479],[17.26516,43.39138],[17.26632,43.386],[17.26791,43.37838],[17.26885,43.3732],[17.27251,43.36888],[17.27391,43.36757],[17.27446,43.3659],[17.27438,43.36444],[17.27699,43.36022],[17.27712,43.35861],[17.27762,43.35677],[17.27756,43.35555],[17.27873,43.35526],[17.28313,43.34764],[17.29342,43.33131],[17.30111,43.31927],[17.30266,43.31749],[17.30441,43.31584],[17.30598,43.31389],[17.3095,43.30684],[17.31084,43.30487],[17.31178,43.30308],[17.31337,43.30084],[17.31383,43.29974],[17.31784,43.296],[17.32055,43.29333],[17.32438,43.28912],[17.32627,43.28879],[17.32901,43.28795],[17.33012,43.2867],[17.33138,43.28491],[17.33266,43.28267],[17.33254,43.28088],[17.3335,43.27866],[17.33408,43.27704],[17.33412,43.2747],[17.33478,43.27417],[17.33552,43.27283],[17.33602,43.2714],[17.33582,43.27005],[17.33559,43.26978],[17.33641,43.26898],[17.33653,43.26762],[17.33611,43.26646],[17.33564,43.26588],[17.3389,43.26232],[17.3407,43.25991],[17.341,43.25936],[17.34344,43.25777],[17.34447,43.25629],[17.34462,43.25537],[17.34752,43.25508],[17.35451,43.25395],[17.36082,43.25189],[17.36824,43.25169],[17.37011,43.25216],[17.37294,43.25218],[17.37646,43.252],[17.379,43.25122],[17.3817,43.25009],[17.38471,43.25012],[17.39222,43.24854],[17.39827,43.24763],[17.40078,43.24631],[17.40786,43.24182],[17.41663,43.23641],[17.42366,43.23203],[17.4234,43.22816],[17.42638,43.22814],[17.43036,43.22016],[17.43233,43.21821],[17.4327,43.21716],[17.43304,43.21537],[17.43274,43.21455],[17.43303,43.21187],[17.43455,43.21052],[17.43485,43.20942],[17.43455,43.20771],[17.43571,43.20556],[17.43552,43.20439],[17.43515,43.20269],[17.4345,43.19824],[17.43352,43.19711],[17.43303,43.19456],[17.43217,43.19342],[17.43154,43.19119],[17.43043,43.18933],[17.43053,43.18794],[17.43172,43.18519],[17.43346,43.18123],[17.43591,43.18263],[17.438,43.18288],[17.44028,43.18232],[17.44367,43.18111],[17.44761,43.18015],[17.45085,43.17971],[17.45279,43.17889],[17.4534,43.17815],[17.45524,43.17755],[17.45715,43.17643],[17.45855,43.1755],[17.45945,43.17458],[17.46034,43.17377],[17.46214,43.17318],[17.46327,43.17248],[17.46514,43.17164],[17.46668,43.17045],[17.46946,43.16877],[17.47561,43.16536],[17.47604,43.16418],[17.47869,43.1628],[17.48447,43.16096],[17.48814,43.16012],[17.49152,43.15872],[17.49323,43.15725],[17.49458,43.15644],[17.49585,43.15634],[17.49633,43.15603],[17.50096,43.15453],[17.50323,43.15328],[17.5041,43.15307],[17.5075,43.15153],[17.50916,43.1501],[17.51062,43.14917],[17.51568,43.14763],[17.52138,43.1462],[17.528,43.14377],[17.53268,43.14149],[17.53599,43.1394],[17.54105,43.13789],[17.54608,43.13624],[17.54735,43.1356],[17.54932,43.13385],[17.5514,43.13349],[17.55324,43.13339],[17.55662,43.1323],[17.55868,43.13126],[17.56014,43.13017],[17.56376,43.12737],[17.56486,43.12661],[17.5672,43.12577],[17.56843,43.12491],[17.5703,43.12428],[17.57361,43.12358],[17.57736,43.12229],[17.5818,43.12095],[17.58489,43.11943],[17.58694,43.11874],[17.58996,43.11716],[17.59436,43.11478],[17.59802,43.1129],[17.60069,43.11105],[17.60222,43.11094],[17.60363,43.11035],[17.60494,43.10942],[17.60589,43.1083],[17.61323,43.1047],[17.62194,43.10018],[17.62776,43.09777],[17.629,43.09757],[17.63049,43.09706],[17.63221,43.09613],[17.63334,43.09557],[17.63715,43.09477],[17.63904,43.09354],[17.64095,43.09229],[17.64304,43.09121],[17.64429,43.09027],[17.64522,43.08805],[17.65012,43.07925],[17.65267,43.07481],[17.65291,43.07368],[17.65295,43.07287],[17.65387,43.07064],[17.65413,43.07026],[17.65533,43.06911],[17.65625,43.06685],[17.65718,43.06482],[17.65969,43.06062],[17.66288,43.05543],[17.66398,43.05285],[17.66521,43.05078],[17.66695,43.04723],[17.669,43.04299],[17.67219,43.0381],[17.67612,43.03219],[17.67831,43.02874],[17.67986,43.0277],[17.68069,43.02618],[17.68167,43.0252],[17.68268,43.02425],[17.68431,43.02197],[17.68636,43.02069],[17.68689,43.01954],[17.68763,43.01635],[17.68846,43.01132],[17.69535,43.00363],[17.69763,43.00099],[17.69817,42.99964],[17.70499,42.98764],[17.70556,42.98527],[17.70669,42.98351],[17.7085,42.98023],[17.71408,42.97496],[17.71384,42.9707],[17.70105,42.96614],[17.68885,42.9633],[17.68698,42.96293],[17.68241,42.96273],[17.67891,42.96188],[17.67431,42.96167],[17.67178,42.96069],[17.67,42.95984],[17.66802,42.95943],[17.66662,42.95952],[17.66291,42.9585],[17.66149,42.95834],[17.66003,42.95843],[17.65517,42.95706],[17.65359,42.95674],[17.65131,42.95563],[17.64944,42.95519],[17.64297,42.95113],[17.64175,42.95083],[17.63991,42.95074],[17.63492,42.94772],[17.63317,42.94633],[17.63199,42.9452],[17.62938,42.94451],[17.62762,42.94357],[17.62611,42.9432],[17.62282,42.94183],[17.62121,42.94083],[17.61881,42.94012],[17.61537,42.93951],[17.60937,42.93868],[17.60543,42.93831],[17.6032,42.93825],[17.60213,42.93792],[17.59293,42.93768],[17.58964,42.93703],[17.58596,42.93632],[17.58424,42.93625],[17.58165,42.93547],[17.58002,42.93553],[17.57584,42.93452],[17.5649,42.93716],[17.56195,42.93632],[17.55758,42.9348],[17.55283,42.93751],[17.55068,42.9375],[17.54079,42.92978],[17.55227,42.92245],[17.57828,42.91352],[17.60211,42.9037],[17.61379,42.90241],[17.61921,42.89785],[17.62797,42.89436],[17.63398,42.88891],[17.64304,42.88436],[17.64799,42.88926],[17.66215,42.90753],[17.6643,42.91162],[17.67305,42.92048],[17.67683,42.92325],[17.68764,42.92563],[17.70404,42.92431],[17.72558,42.92174],[17.75631,42.91476],[17.76858,42.90992],[17.7879,42.89439],[17.80041,42.9114],[17.80532,42.91742],[17.80747,42.91947],[17.80994,42.91968],[17.81313,42.91834],[17.8145,42.91781],[17.81646,42.91693],[17.82294,42.9144],[17.83115,42.91166],[17.84137,42.90642],[17.84605,42.90453],[17.84684,42.90398],[17.84753,42.90304],[17.85276,42.89772],[17.85497,42.89507],[17.85905,42.88991],[17.86051,42.88881],[17.8618,42.88642],[17.86216,42.88405],[17.86074,42.88175],[17.8592,42.87944],[17.85757,42.8779],[17.8578,42.87662],[17.85961,42.86939],[17.86077,42.86793],[17.86188,42.8654],[17.86257,42.86362],[17.86613,42.85892],[17.86645,42.85802],[17.86733,42.85673],[17.87057,42.85152],[17.87315,42.84772],[17.87643,42.84496],[17.878,42.84334],[17.88046,42.83977],[17.88551,42.8398],[17.88933,42.83823],[17.89355,42.83672],[17.90126,42.83463],[17.90231,42.83418],[17.90334,42.8331],[17.90351,42.8322],[17.90241,42.82987],[17.90113,42.82794],[17.90003,42.82717],[17.8989,42.82512],[17.89754,42.82419],[17.89478,42.82156],[17.8933,42.82071],[17.89081,42.815],[17.89327,42.81196],[17.90171,42.81198],[17.90911,42.8131],[17.91046,42.81308],[17.91166,42.81273],[17.91362,42.81155],[17.91613,42.81011],[17.94119,42.80308],[17.95164,42.8011],[17.95338,42.79982],[17.96005,42.7946],[17.962,42.79191],[17.96683,42.78819],[17.96825,42.78757],[17.96921,42.78682],[17.96966,42.78627],[17.97529,42.78378],[17.97704,42.78202],[17.98146,42.78038],[17.98501,42.78065],[17.99464,42.77921],[17.99837,42.77783],[17.99975,42.77641],[17.99979,42.77518],[17.99975,42.7739],[18.00007,42.77231],[18.00018,42.76573],[18.00168,42.76442],[18.00219,42.76363],[18.00515,42.75962],[18.00663,42.75855],[18.01058,42.75648],[18.01161,42.75539],[18.0123,42.75465],[18.02601,42.75448],[18.02882,42.75358],[18.03268,42.75248],[18.03451,42.75242],[18.03698,42.7518],[18.04343,42.75042],[18.04496,42.74908],[18.05144,42.74422],[18.05339,42.74396],[18.05616,42.74279],[18.0588,42.74176],[18.06393,42.73857],[18.06562,42.73715],[18.06755,42.7354],[18.07105,42.73316],[18.07609,42.7296],[18.07667,42.7287],[18.07663,42.72749],[18.07691,42.7266],[18.07903,42.72698],[18.08019,42.72679],[18.08159,42.72632],[18.08416,42.72504],[18.0927,42.72184],[18.10032,42.71919],[18.10392,42.71713],[18.10843,42.71355],[18.10933,42.71193],[18.11045,42.70962],[18.11141,42.70663],[18.11131,42.7027],[18.11036,42.70155],[18.1107,42.69967],[18.11049,42.69906],[18.10873,42.69663],[18.10813,42.69359],[18.10592,42.68963],[18.1059,42.68878],[18.10976,42.68843],[18.1115,42.68857],[18.11246,42.68857],[18.11442,42.68876],[18.11626,42.68833],[18.11746,42.68747],[18.11948,42.68633],[18.12422,42.68545],[18.12667,42.68494],[18.12851,42.68472],[18.13373,42.68444],[18.13527,42.68384],[18.13813,42.68226],[18.14085,42.68261],[18.14253,42.68248],[18.14596,42.68086],[18.14686,42.67969],[18.14772,42.67676],[18.14931,42.67204],[18.15328,42.66798],[18.15613,42.66443],[18.15772,42.66199],[18.15828,42.65994],[18.15819,42.65896],[18.16598,42.66117],[18.17158,42.66197],[18.17261,42.66182],[18.17396,42.66295],[18.17501,42.66333],[18.17606,42.66339],[18.17913,42.66322],[18.18087,42.66254],[18.18338,42.66011],[18.18589,42.65781],[18.18772,42.65804],[18.19093,42.65757],[18.19327,42.65669],[18.1948,42.65524],[18.19497,42.65473],[18.19673,42.65381],[18.19782,42.65206],[18.19862,42.6508],[18.20424,42.64569],[18.20761,42.64051],[18.21389,42.63647],[18.21563,42.63405],[18.21844,42.63086],[18.22147,42.62796],[18.22422,42.62502],[18.22887,42.62202],[18.23381,42.62163],[18.23632,42.62041],[18.23728,42.61894],[18.23733,42.61801],[18.23911,42.6185],[18.24241,42.61822],[18.24368,42.61763],[18.24522,42.61563],[18.24619,42.61395],[18.2466,42.61106],[18.24679,42.60541],[18.24911,42.60547],[18.25844,42.60781],[18.26273,42.60892],[18.26477,42.61117],[18.27044,42.61342],[18.27312,42.61307],[18.2744,42.61517],[18.28073,42.61969],[18.28168,42.61995],[18.28503,42.61967],[18.28861,42.61945],[18.29249,42.61817],[18.31086,42.61733],[18.3235,42.61934],[18.33193,42.62142],[18.34811,42.6216],[18.36845,42.61827],[18.37062,42.61669],[18.37631,42.60993],[18.3824,42.60094],[18.38596,42.59811],[18.39259,42.59094],[18.40075,42.58794],[18.40066,42.586],[18.40545,42.58592],[18.41875,42.57781],[18.43351,42.56805],[18.43729,42.56658],[18.43954,42.56497],[18.44008,42.5637],[18.44096,42.5567],[18.44343,42.55112],[18.44341,42.54918],[18.44244,42.53503],[18.44201,42.52551],[18.44072,42.52124],[18.44021,42.52064],[18.446,42.5169],[18.45055,42.51001],[18.44931,42.50814],[18.44407,42.50121],[18.44394,42.49871],[18.44321,42.49754],[18.4433,42.4959],[18.44223,42.49397],[18.44171,42.49318],[18.44115,42.49026],[18.44175,42.48786],[18.44102,42.48631],[18.43987,42.48498],[18.44613,42.48264],[18.45077,42.47909],[18.45274,42.4765],[18.456,42.47482],[18.45815,42.47529],[18.46102,42.47444],[18.46634,42.47203],[18.47647,42.46665],[18.4787,42.46409],[18.48239,42.45883],[18.48673,42.45316],[18.49119,42.45006],[18.49437,42.4474],[18.49621,42.44357],[18.5069,42.43435],[18.50944,42.43283],[18.51866,42.42855],[18.52484,42.4237],[18.52851,42.42188],[18.52998,42.42174],[18.53683,42.39958],[18.53816,42.39319],[18.53787,42.39042],[18.53516,42.38933],[18.52931,42.3893],[18.52232,42.39066],[18.51919,42.39242],[18.51662,42.39288],[18.51248,42.39541],[18.50758,42.39839],[18.50435,42.40095],[18.50335,42.4065],[18.48793,42.4169],[18.48287,42.41931],[18.47862,42.42371],[18.47561,42.42659],[18.47261,42.42935],[18.47124,42.43261],[18.46591,42.43701],[18.46385,42.43961],[18.45969,42.4424],[18.44974,42.44683],[18.44562,42.44309],[18.4306,42.43708],[18.42236,42.44081],[18.42253,42.44582],[18.40219,42.45741],[18.40716,42.46456],[18.37051,42.48292],[18.35026,42.49159],[18.30503,42.5133],[18.26941,42.52582],[18.26348,42.53474],[18.24091,42.54979],[18.22254,42.56181],[18.21945,42.56775],[18.19851,42.56648],[18.18718,42.57255],[18.18443,42.57887],[18.16795,42.58532],[18.16915,42.5905],[18.19868,42.59998],[18.21327,42.59833],[18.21568,42.60453],[18.2016,42.61501],[18.18237,42.60983],[18.16401,42.61476],[18.14461,42.62524],[18.13379,42.62676],[18.1307,42.61792],[18.12178,42.61678],[18.10822,42.62171],[18.10444,42.6351],[18.03989,42.64873],[17.94891,42.64128],[17.06039,42.69152],[16.35138,42.37123],[16.23677,42.38453],[16.39023,42.73995],[15.43075,43.08152],[15.42676,43.10342],[15.63066,43.43802],[14.62071,44.3094],[14.29287,44.49332],[14.00808,44.80011],[13.9892,44.78854],[13.97152,44.78829],[13.95882,44.78768],[13.95367,44.7794],[13.95401,44.76916],[13.93564,44.75905],[13.88603,44.75271],[13.88535,44.76331],[13.89307,44.78049],[13.89153,44.8023],[13.86715,44.80388],[13.82578,44.82532],[13.81273,44.84467],[13.80363,44.85648],[13.78447,44.85757],[13.78601,44.88862],[13.77793,44.89044],[13.76604,44.88889],[13.7571,44.8829],[13.74901,44.88263],[13.7396,44.88856],[13.72724,44.90183],[13.72647,44.90823],[13.71639,44.90809],[13.70853,44.9134],[13.70926,44.91746],[13.71972,44.92473],[13.71925,44.92803],[13.71107,44.9351],[13.7123,44.94594],[13.72398,44.94888],[13.72443,44.94412],[13.74003,44.94462],[13.74596,44.94366],[13.77423,44.9216],[13.79362,44.92123],[13.7959,44.92877],[13.78487,44.93867],[13.77079,44.95919],[13.76178,44.96316],[13.76116,44.98088],[13.73532,44.98052],[13.72261,44.98289],[13.69926,44.98714],[13.69017,44.99661],[13.68347,45.00984],[13.68334,45.01524],[13.6745,45.01506],[13.64605,45.03605],[13.60777,45.03763],[13.60451,45.08431],[13.60193,45.12296],[13.57035,45.13967],[13.57754,45.15724],[13.56139,45.19789],[13.57374,45.22722],[13.58211,45.24115],[13.56651,45.25347],[13.56571,45.27271],[13.55416,45.30856],[13.55372,45.31784],[13.54537,45.31771],[13.52898,45.32753],[13.53379,45.36116],[13.52818,45.37418],[13.52383,45.39419],[13.51034,45.4124],[13.51013,45.42486],[13.50659,45.4248],[13.50447,45.44261],[13.50872,45.44279],[13.5076,45.46073],[13.50549,45.46079],[13.48227,45.48675],[13.48555,45.496],[13.49894,45.50731],[13.50564,45.50971],[13.5136,45.5099],[13.5443,45.4977],[13.56091,45.49377],[13.58344,45.48213],[13.58341,45.48066],[13.58734,45.48071],[13.62264,45.46586],[13.62274,45.46366],[13.63102,45.46387],[13.64511,45.46236],[13.65952,45.45616],[13.66785,45.45194],[13.67463,45.44773],[13.68073,45.44797],[13.68596,45.4511],[13.69643,45.45802],[13.70399,45.46013],[13.71042,45.46013],[13.71317,45.45688],[13.71969,45.45869],[13.72184,45.46133],[13.72699,45.46278],[13.74175,45.46453],[13.75248,45.46362],[13.76432,45.47054],[13.77308,45.46934],[13.77602,45.46747],[13.78933,45.46771],[13.80501,45.46386],[13.81119,45.4586],[13.81187,45.45483],[13.80913,45.45047],[13.80969,45.44577],[13.81865,45.4421],[13.819,45.43779],[13.83243,45.43803],[13.84217,45.43677],[13.85427,45.43439],[13.85827,45.42999],[13.86286,45.4305],[13.88238,45.429],[13.8859,45.43439],[13.89204,45.44297],[13.90762,45.45432],[13.91371,45.45664],[13.94096,45.45718],[13.94573,45.45938],[13.9595,45.45844],[13.9701,45.45233],[13.98027,45.45832],[13.98186,45.47094],[13.98663,45.47319],[13.99019,45.47328],[13.98087,45.48255],[13.98281,45.48451],[13.97113,45.49161],[13.96633,45.49335],[13.96186,45.49444],[13.95822,45.5071],[13.96337,45.5105],[13.96688,45.51465],[13.97414,45.51768],[13.97804,45.51738],[13.9816,45.51654],[13.98396,45.51432],[13.98937,45.51185],[13.99542,45.51104],[13.99336,45.51483],[13.99435,45.51756],[13.99804,45.52147],[14.00195,45.52298],[14.01465,45.52213],[14.03173,45.51173],[14.04495,45.50078],[14.04941,45.50117],[14.05375,45.50006],[14.07602,45.48728],[14.09147,45.48502],[14.10915,45.48586],[14.1267,45.48135],[14.14189,45.47795],[14.14872,45.48306],[14.15481,45.48385],[14.17172,45.48258],[14.18854,45.47864],[14.20335,45.47325],[14.20288,45.483],[14.21043,45.49459],[14.217,45.49654],[14.22047,45.50397],[14.23137,45.50845],[14.24884,45.50803],[14.26656,45.48715],[14.27695,45.49305],[14.28914,45.49296],[14.29467,45.48676],[14.30622,45.48345],[14.31733,45.48607],[14.31982,45.4846],[14.32179,45.4827],[14.32381,45.47413],[14.33656,45.48195],[14.34862,45.48791],[14.35282,45.48857],[14.36578,45.48821],[14.3869,45.49693],[14.39243,45.4975],[14.39462,45.50553],[14.41007,45.5099],[14.4138,45.51251],[14.42913,45.51215],[14.43346,45.51353],[14.43998,45.51931],[14.45299,45.52283],[14.47341,45.53756],[14.48749,45.54141],[14.49376,45.54991],[14.49238,45.56596],[14.49577,45.58008],[14.50058,45.58455],[14.50178,45.58852],[14.49311,45.59638],[14.49324,45.60041],[14.4953,45.60824],[14.49998,45.6084],[14.49993,45.61037],[14.50305,45.61087],[14.5112,45.61024],[14.51311,45.6103],[14.51569,45.61242],[14.52614,45.61357],[14.53247,45.61654],[14.54144,45.62448],[14.54242,45.62709],[14.54453,45.62895],[14.54779,45.63655],[14.56186,45.65401],[14.56487,45.6756],[14.56821,45.67686],[14.57954,45.67464],[14.58418,45.66912],[14.59748,45.67254],[14.61164,45.66673],[14.61345,45.65737],[14.61027,45.65065],[14.60522,45.62774],[14.62551,45.61817],[14.63212,45.61512],[14.63507,45.60761],[14.64061,45.60736],[14.6471,45.60249],[14.65359,45.59515],[14.6544,45.59372],[14.65441,45.59304],[14.66074,45.59309],[14.67618,45.59236],[14.68164,45.59083],[14.68697,45.58689],[14.6881,45.5847],[14.69134,45.58365],[14.69391,45.58134],[14.69629,45.57799],[14.70107,45.56974],[14.70367,45.56282],[14.70119,45.55836],[14.69821,45.55431],[14.6947,45.55291],[14.69452,45.54617],[14.69276,45.54485],[14.69175,45.54122],[14.69211,45.53837],[14.68957,45.53456],[14.69169,45.53064],[14.69859,45.52874],[14.69724,45.53345],[14.69989,45.53651],[14.70526,45.53816],[14.72508,45.53642],[14.73145,45.53258],[14.73729,45.53237],[14.74024,45.5301],[14.74343,45.52568],[14.75239,45.52068],[14.76183,45.51444],[14.76891,45.51502],[14.77298,45.51369],[14.77363,45.51026],[14.7882,45.50911],[14.79239,45.50555],[14.79516,45.50609],[14.79864,45.50514],[14.80766,45.49592],[14.80725,45.49385],[14.80389,45.4912],[14.80796,45.48889],[14.80949,45.48475],[14.80996,45.47995],[14.82011,45.47205],[14.82058,45.46316],[14.83309,45.46353],[14.84553,45.46519],[14.86034,45.46974],[14.86689,45.46895],[14.87249,45.47437],[14.87904,45.4752],[14.88895,45.47917],[14.90252,45.47822],[14.90782,45.4814],[14.90776,45.48314],[14.90664,45.48736],[14.90735,45.4922],[14.91083,45.49401],[14.90718,45.49848],[14.90859,45.50377],[14.91184,45.50514],[14.90894,45.51097],[14.9093,45.51593],[14.91001,45.52055],[14.9162,45.52444],[14.91667,45.52845],[14.92157,45.53097],[14.93136,45.53217],[14.93561,45.53072],[14.94953,45.52378],[14.97395,45.51006],[14.98516,45.50063],[14.99253,45.49927],[15.00798,45.50055],[15.0143,45.5003],[15.01872,45.49811],[15.03046,45.48897],[15.04119,45.49067],[15.04639,45.49654],[15.057,45.49707],[15.06078,45.49352],[15.06255,45.49033],[15.07258,45.49062],[15.0793,45.48541],[15.08738,45.48583],[15.09116,45.48368],[15.09181,45.47995],[15.08809,45.47689],[15.0888,45.46924],[15.09558,45.46622],[15.10443,45.46618],[15.11499,45.45819],[15.12679,45.44959],[15.14018,45.44719],[15.14525,45.44164],[15.15085,45.43249],[15.15846,45.42765],[15.16778,45.42529],[15.17427,45.42633],[15.17775,45.42479],[15.18566,45.42951],[15.18453,45.43552],[15.18772,45.43759],[15.19142,45.43844],[15.19617,45.4385],[15.19971,45.43634],[15.2043,45.4303],[15.2073,45.42827],[15.22158,45.42864],[15.22412,45.43067],[15.22417,45.43742],[15.22972,45.44363],[15.23562,45.45042],[15.24152,45.45633],[15.25385,45.46101],[15.26429,45.46469],[15.26912,45.46833],[15.2749,45.46903],[15.27968,45.46845],[15.29767,45.46241],[15.32298,45.45819],[15.32782,45.45555],[15.33832,45.46006],[15.3438,45.45993],[15.34575,45.46585],[15.34976,45.46949],[15.35548,45.47822],[15.36156,45.48157],[15.37766,45.48781],[15.37459,45.48996],[15.36881,45.49261],[15.36144,45.49186],[15.35707,45.49472],[15.34622,45.50154],[15.33082,45.50724],[15.32298,45.51402],[15.32227,45.51824],[15.31484,45.51915],[15.31177,45.52105],[15.30941,45.52576],[15.30938,45.52971],[15.30487,45.52969],[15.29879,45.53386],[15.29661,45.53841],[15.29691,45.5425],[15.29431,45.54807],[15.29372,45.56947],[15.29396,45.58243],[15.27414,45.59903],[15.27225,45.6053],[15.28122,45.61198],[15.29372,45.61578],[15.30233,45.61603],[15.29738,45.62139],[15.2975,45.63162],[15.30363,45.63575],[15.33112,45.63806],[15.34044,45.63682],[15.34669,45.63806],[15.34103,45.63888],[15.33702,45.64309],[15.33702,45.6468],[15.34292,45.64903],[15.3553,45.6501],[15.37335,45.64845],[15.37831,45.64408],[15.38657,45.64292],[15.38916,45.64086],[15.39836,45.64787],[15.39176,45.65183],[15.38904,45.65604],[15.3881,45.659],[15.38338,45.66667],[15.37276,45.67566],[15.37005,45.67912],[15.36734,45.68233],[15.36639,45.67516],[15.352,45.66585],[15.34575,45.66692],[15.34327,45.67129],[15.34598,45.6858],[15.35778,45.69124],[15.35896,45.69321],[15.35212,45.69791],[15.35424,45.7101],[15.34315,45.7087],[15.33808,45.70195],[15.329,45.69445],[15.32392,45.69404],[15.33136,45.67368],[15.32451,45.67005],[15.31413,45.67211],[15.31071,45.67714],[15.30387,45.6844],[15.29938,45.6825],[15.28287,45.69041],[15.28263,45.70409],[15.28004,45.70483],[15.27296,45.70112],[15.27308,45.69297],[15.26859,45.69132],[15.26437,45.69142],[15.25461,45.69799],[15.25213,45.70458],[15.25042,45.70792],[15.24647,45.71076],[15.24724,45.71377],[15.24541,45.71525],[15.24087,45.71579],[15.2401,45.71772],[15.23532,45.719],[15.23367,45.72238],[15.23656,45.72608],[15.25379,45.73028],[15.25904,45.72921],[15.2703,45.73807],[15.27042,45.74132],[15.27933,45.74696],[15.29059,45.74963],[15.29278,45.75428],[15.29903,45.7577],[15.30723,45.7584],[15.31643,45.76297],[15.3228,45.76309],[15.32982,45.76597],[15.3533,45.77655],[15.36197,45.77959],[15.36775,45.77963],[15.3725,45.78229],[15.37772,45.78234],[15.3804,45.78186],[15.38204,45.78291],[15.38291,45.7856],[15.39323,45.79224],[15.39851,45.79415],[15.40482,45.79528],[15.41276,45.79759],[15.4168,45.7975],[15.42025,45.79874],[15.44906,45.79833],[15.46384,45.79761],[15.47062,45.79902],[15.46703,45.80238],[15.4662,45.81097],[15.4626,45.81716],[15.46272,45.82041],[15.4662,45.82215],[15.47278,45.82067],[15.47455,45.82141],[15.47387,45.82458],[15.47602,45.82937],[15.48071,45.83111],[15.49316,45.83504],[15.49738,45.83374],[15.49897,45.83202],[15.50569,45.83101],[15.50729,45.8291],[15.50661,45.82499],[15.51015,45.82458],[15.5131,45.82577],[15.51914,45.82501],[15.52513,45.82641],[15.53144,45.83115],[15.5315,45.83329],[15.53536,45.83666],[15.53445,45.84085],[15.53438,45.84594],[15.53477,45.8477],[15.5364,45.85015],[15.53989,45.85055],[15.54429,45.84863],[15.55131,45.84846],[15.55369,45.84675],[15.55563,45.84103],[15.55871,45.83936],[15.55824,45.84189],[15.5599,45.8459],[15.56453,45.8489],[15.56666,45.85054],[15.56722,45.85191],[15.56902,45.85535],[15.57099,45.85595],[15.57316,45.85585],[15.57674,45.85445],[15.58208,45.8507],[15.58645,45.84938],[15.59155,45.84904],[15.5936,45.84878],[15.59706,45.84726],[15.60159,45.84556],[15.6061,45.84455],[15.61125,45.84251],[15.61172,45.84169],[15.61175,45.8384],[15.61794,45.83844],[15.62135,45.83665],[15.62662,45.83504],[15.6301,45.83508],[15.6328,45.8345],[15.63617,45.83193],[15.63715,45.8304],[15.63749,45.82716],[15.63986,45.82649],[15.64191,45.82462],[15.64389,45.82588],[15.64679,45.83072],[15.64819,45.83258],[15.65461,45.83693],[15.65905,45.83958],[15.66213,45.84285],[15.66478,45.84397],[15.66841,45.84418],[15.67124,45.84315],[15.67615,45.84369],[15.67829,45.84494],[15.68003,45.84534],[15.68771,45.84555],[15.69097,45.84555],[15.69081,45.84835],[15.69212,45.84996],[15.69403,45.85136],[15.69633,45.85186],[15.69817,45.85137],[15.69404,45.8549],[15.68885,45.85909],[15.68248,45.86067],[15.67953,45.86276],[15.67553,45.86715],[15.67431,45.86884],[15.67484,45.87033],[15.67659,45.87161],[15.67733,45.87335],[15.67618,45.87521],[15.67599,45.87739],[15.6773,45.87991],[15.67782,45.88346],[15.67984,45.88498],[15.68217,45.88501],[15.67997,45.8865],[15.67935,45.88766],[15.6767,45.88933],[15.67639,45.89149],[15.67723,45.89276],[15.67885,45.89367],[15.67887,45.8942],[15.67718,45.89569],[15.67698,45.89707],[15.67789,45.89907],[15.67649,45.90062],[15.67639,45.90182],[15.67547,45.90472],[15.6763,45.90599],[15.67991,45.90833],[15.68067,45.9085],[15.68251,45.91063],[15.68561,45.91093],[15.68793,45.91095],[15.68787,45.91501],[15.68927,45.91582],[15.69103,45.9161],[15.69245,45.91687],[15.69442,45.9174],[15.69554,45.91715],[15.69563,45.91873],[15.69681,45.92187],[15.7023,45.92368],[15.70256,45.92448],[15.70003,45.92579],[15.69988,45.92749],[15.70156,45.92934],[15.70171,45.93176],[15.7041,45.93322],[15.70463,45.93664],[15.70401,45.93896],[15.70548,45.94101],[15.70531,45.94214],[15.70501,45.94349],[15.70525,45.94534],[15.70404,45.94866],[15.70534,45.95092],[15.70563,45.95752],[15.70575,45.96322],[15.69991,45.98064],[15.69625,45.98753],[15.69643,45.99138],[15.69779,45.99196],[15.69619,45.994],[15.69584,45.99749],[15.6982,46.00261],[15.70327,46.00413],[15.70817,46.00667],[15.7074,46.00974],[15.70663,46.01093],[15.70374,46.01162],[15.70233,46.01339],[15.70209,46.01601],[15.70292,46.01818],[15.70793,46.02027],[15.70947,46.02232],[15.70947,46.02498],[15.71247,46.03038],[15.71194,46.03599],[15.71584,46.04017],[15.71902,46.04083],[15.71991,46.04345],[15.72315,46.04492],[15.72545,46.04492],[15.72026,46.04635],[15.7189,46.04844],[15.7189,46.04992],[15.71265,46.05536],[15.70274,46.05675],[15.68923,46.06003],[15.68103,46.06428],[15.67354,46.06772],[15.66812,46.06903],[15.66015,46.06719],[15.65596,46.06903],[15.65343,46.07112],[15.65213,46.07496],[15.65408,46.07852],[15.64594,46.08053],[15.64417,46.08213],[15.63726,46.07996],[15.63054,46.08057],[15.62323,46.08368],[15.61497,46.08994],[15.61432,46.09235],[15.61556,46.09423],[15.61886,46.09522],[15.61951,46.09677],[15.61373,46.09653],[15.6106,46.09845],[15.60748,46.10508],[15.60743,46.10826],[15.60466,46.10824],[15.6009,46.1108],[15.60143,46.11691],[15.60352,46.12515],[15.60677,46.13378],[15.60069,46.13729],[15.5922,46.14346],[15.59179,46.14731],[15.5945,46.15025],[15.60181,46.15303],[15.60789,46.15495],[15.6073,46.15666],[15.59928,46.15907],[15.59963,46.1632],[15.60317,46.1659],[15.60411,46.1688],[15.61432,46.1746],[15.62305,46.17615],[15.62671,46.17872],[15.63284,46.18252],[15.63178,46.18599],[15.63349,46.18791],[15.64192,46.19008],[15.6444,46.19281],[15.64251,46.19967],[15.64263,46.20351],[15.63833,46.20478],[15.63709,46.20743],[15.63844,46.21388],[15.64198,46.2158],[15.64329,46.21654],[15.64456,46.21655],[15.64451,46.21888],[15.64602,46.21958],[15.64847,46.21976],[15.65007,46.22006],[15.65216,46.22133],[15.65511,46.22198],[15.65664,46.22198],[15.66065,46.22327],[15.66505,46.22522],[15.66756,46.22561],[15.67045,46.22835],[15.67652,46.22955],[15.68242,46.22937],[15.68587,46.22845],[15.68917,46.22678],[15.69602,46.22614],[15.70286,46.225],[15.70846,46.22578],[15.71359,46.22578],[15.71787,46.22496],[15.72642,46.2259],[15.73032,46.22504],[15.73229,46.2238],[15.73321,46.222],[15.74094,46.22431],[15.74742,46.2238],[15.75185,46.22261],[15.75592,46.2221],[15.75798,46.22027],[15.75916,46.21765],[15.75792,46.21445],[15.75497,46.21186],[15.75601,46.21035],[15.75778,46.2098],[15.76893,46.21269],[15.77774,46.21586],[15.7832,46.21908],[15.78556,46.22143],[15.78491,46.22365],[15.78957,46.22906],[15.78925,46.23608],[15.79181,46.23891],[15.79529,46.24004],[15.79694,46.24269],[15.79223,46.25019],[15.78916,46.25376],[15.78742,46.2588],[15.78813,46.26088],[15.79102,46.2621],[15.79715,46.26272],[15.80205,46.263],[15.81013,46.26465],[15.81974,46.26461],[15.82313,46.26416],[15.82974,46.26549],[15.83874,46.26855],[15.84753,46.26877],[15.85219,46.26902],[15.86154,46.27034],[15.86384,46.27207],[15.86392,46.27348],[15.86221,46.27554],[15.86336,46.27735],[15.86652,46.27874],[15.8703,46.2811],[15.87487,46.28251],[15.87755,46.2832],[15.88327,46.28261],[15.89486,46.28614],[15.89537,46.28936],[15.89668,46.29014],[15.91594,46.29024],[15.91596,46.29077],[15.91918,46.28974],[15.92608,46.29051],[15.92855,46.29127],[15.93006,46.29121],[15.93211,46.29242],[15.93459,46.29274],[15.93863,46.2925],[15.94279,46.29335],[15.94636,46.29647],[15.95326,46.29747],[15.95595,46.29896],[15.96043,46.29937],[15.96264,46.3004],[15.96668,46.30778],[15.9727,46.31224],[15.97386,46.31387],[15.97615,46.31511],[15.97807,46.31491],[15.9847,46.31391],[15.98618,46.31693],[15.98913,46.31725],[15.99284,46.31713],[16.00352,46.31114],[16.01013,46.3131],[16.01284,46.3133],[16.0165,46.31522],[16.01709,46.31636],[16.01614,46.31852],[16.01361,46.32063],[16.01408,46.32292],[16.02222,46.3285],[16.02405,46.33265],[16.02812,46.33546],[16.03525,46.33998],[16.03962,46.34051],[16.04546,46.34006],[16.04758,46.33868],[16.05189,46.33795],[16.05484,46.34104],[16.05879,46.3441],[16.06357,46.34499],[16.07131,46.3449],[16.0713,46.34703],[16.07116,46.36293],[16.0691,46.3629],[16.06271,46.36942],[16.05136,46.37687],[16.04534,46.38216],[16.0467,46.38488],[16.05625,46.39644],[16.08799,46.39139],[16.13842,46.40811],[16.1501,46.40762],[16.15883,46.40457],[16.17045,46.3957],[16.17765,46.392],[16.17818,46.38838],[16.17989,46.38822],[16.18679,46.39066],[16.19181,46.38907],[16.1947,46.38728],[16.19405,46.38224],[16.20266,46.38378],[16.20827,46.38732],[16.21788,46.38793],[16.22042,46.38598],[16.22484,46.39005],[16.23204,46.3905],[16.23888,46.38769],[16.24106,46.38236],[16.24985,46.38289],[16.26507,46.37886],[16.27191,46.3813],[16.29863,46.38102],[16.2996,46.38154]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-dof-2014-2016",name:"dgu.hr: Croatia 2014-2016 Aerial imagery",type:"wms",template:"https://geoportal.dgu.hr/services/inspire/orthophoto_2014-2016/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.OrthoImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2016-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[16.52249,46.49112],[16.52243,46.48295],[16.53499,46.48387],[16.54437,46.48076],[16.55592,46.4841],[16.57032,46.47695],[16.58004,46.47638],[16.59578,46.47995],[16.60968,46.47961],[16.61939,46.47165],[16.62559,46.47188],[16.63262,46.46934],[16.64719,46.46773],[16.66846,46.46184],[16.69994,46.42007],[16.70966,46.40541],[16.7192,46.40206],[16.73511,46.4046],[16.74231,46.40217],[16.74466,46.39848],[16.74466,46.38981],[16.75052,46.39224],[16.75789,46.39097],[16.7609,46.38566],[16.76509,46.38843],[16.77296,46.38877],[16.77899,46.38473],[16.78502,46.38947],[16.79624,46.39028],[16.80444,46.38739],[16.80896,46.3808],[16.81231,46.38011],[16.82069,46.37688],[16.82873,46.37768],[16.83743,46.37895],[16.84329,46.37399],[16.84329,46.36786],[16.85234,46.36451],[16.86172,46.35873],[16.86808,46.35769],[16.87361,46.35365],[16.86959,46.34775],[16.87277,46.34868],[16.88148,46.3407],[16.88583,46.33434],[16.87897,46.32544],[16.88198,46.32093],[16.88047,46.31364],[16.88365,46.306],[16.89019,46.30253],[16.89119,46.28633],[16.89119,46.28228],[16.90509,46.27789],[16.91263,46.26816],[16.91732,46.26434],[16.92519,46.26365],[16.93858,46.25774],[16.94344,46.25161],[16.95399,46.24442],[16.96287,46.24338],[16.96638,46.24547],[16.97559,46.24616],[16.98012,46.24049],[16.97777,46.2311],[16.97844,46.22821],[16.98983,46.22821],[16.99569,46.22612],[17.00641,46.22635],[17.05363,46.20631],[17.05748,46.20631],[17.06921,46.20492],[17.0749,46.19564],[17.07808,46.19286],[17.08327,46.19135],[17.08646,46.19344],[17.09902,46.1917],[17.10705,46.18857],[17.10722,46.18428],[17.11208,46.18185],[17.1238,46.18266],[17.13017,46.17918],[17.12866,46.17304],[17.13084,46.17234],[17.1377,46.17547],[17.15294,46.17617],[17.16198,46.17292],[17.16366,46.16167],[17.17153,46.16028],[17.18375,46.15227],[17.19179,46.13522],[17.19062,46.13092],[17.18342,46.12698],[17.18643,46.1199],[17.18392,46.11177],[17.21005,46.11699],[17.21624,46.11734],[17.22194,46.11398],[17.2231,46.10833],[17.21815,46.10213],[17.23366,46.10329],[17.23885,46.09946],[17.23751,46.09447],[17.22813,46.0904],[17.22529,46.08436],[17.23785,46.08181],[17.24396,46.07774],[17.24429,46.07071],[17.24488,46.06758],[17.25526,46.06764],[17.25669,46.06485],[17.25434,46.06183],[17.26908,46.06142],[17.27561,46.05758],[17.27594,46.05276],[17.26255,46.04282],[17.26673,46.03672],[17.28817,46.03556],[17.29813,46.03422],[17.30173,46.02643],[17.29629,46.02004],[17.27795,46.01771],[17.2762,46.01533],[17.26272,46.01265],[17.27092,46.01207],[17.2767,46.00759],[17.28356,46.00457],[17.29612,46.00643],[17.30182,46.00707],[17.30902,46.00335],[17.31011,45.99834],[17.30843,45.99154],[17.3153,45.99404],[17.32267,45.99439],[17.32912,45.99828],[17.33816,45.99951],[17.34377,45.99631],[17.34829,45.9863],[17.35231,45.97944],[17.35532,45.97792],[17.35591,45.98624],[17.35825,45.9927],[17.36194,45.99514],[17.37366,45.99398],[17.37936,45.99119],[17.38053,45.9838],[17.37308,45.97583],[17.38162,45.97146],[17.38748,45.96867],[17.39694,45.9643],[17.39635,45.96093],[17.39317,45.95522],[17.39049,45.9501],[17.39351,45.94428],[17.39024,45.93723],[17.39426,45.93514],[17.40657,45.94236],[17.41117,45.94306],[17.41511,45.9409],[17.41704,45.93403],[17.42566,45.93158],[17.43219,45.9324],[17.42474,45.93729],[17.42156,45.94498],[17.42507,45.95051],[17.43638,45.95377],[17.44835,45.95377],[17.4594,45.94905],[17.46778,45.94725],[17.49198,45.94556],[17.51517,45.94276],[17.53301,45.93793],[17.55947,45.9423],[17.57404,45.93991],[17.59313,45.92582],[17.61306,45.91586],[17.62863,45.90607],[17.6401,45.88701],[17.65249,45.86655],[17.65316,45.85507],[17.66053,45.84521],[17.67025,45.83833],[17.68565,45.84148],[17.70081,45.84072],[17.7106,45.83547],[17.72744,45.83477],[17.74937,45.83074],[17.75473,45.82438],[17.76394,45.81849],[17.77374,45.82],[17.78756,45.81971],[17.79585,45.81283],[17.8043,45.80833],[17.81075,45.80734],[17.8146,45.81172],[17.82339,45.81359],[17.83202,45.81131],[17.83629,45.80483],[17.83713,45.79339],[17.84341,45.78866],[17.85262,45.78702],[17.85655,45.78381],[17.85831,45.77762],[17.85957,45.77324],[17.86526,45.77067],[17.86811,45.77862],[17.88276,45.78755],[17.89457,45.79321],[17.90763,45.79537],[17.9196,45.7914],[17.92873,45.78948],[17.93518,45.79181],[17.94556,45.79485],[17.95352,45.7959],[17.9598,45.79461],[17.96901,45.79251],[17.97369,45.79269],[17.98282,45.79707],[18.00359,45.7973],[18.00719,45.79485],[18.01983,45.78422],[18.03465,45.77908],[18.04763,45.77762],[18.06028,45.77447],[18.08054,45.76834],[18.09335,45.76904],[18.10507,45.77435],[18.10951,45.78241],[18.1168,45.79],[18.12374,45.79257],[18.13538,45.79123],[18.14501,45.79175],[18.15757,45.78837],[18.1631,45.78183],[18.17055,45.77914],[18.17826,45.78767],[18.18763,45.79041],[18.19576,45.78977],[18.2048,45.78551],[18.21652,45.7837],[18.22933,45.78305],[18.2362,45.7792],[18.24633,45.76507],[18.24993,45.76547],[18.25906,45.76425],[18.27706,45.75852],[18.29054,45.76325],[18.29531,45.76372],[18.3,45.76296],[18.30871,45.75998],[18.31491,45.75952],[18.33249,45.75771],[18.34028,45.75291],[18.35033,45.76682],[18.35987,45.77511],[18.36506,45.77628],[18.3803,45.76781],[18.38533,45.76764],[18.39521,45.76466],[18.39864,45.75887],[18.40057,45.75952],[18.40475,45.75595],[18.403,45.74766],[18.41036,45.74222],[18.41849,45.74392],[18.42728,45.74479],[18.43599,45.7417],[18.44336,45.74187],[18.44344,45.75677],[18.44051,45.76033],[18.44922,45.77132],[18.45742,45.77248],[18.46504,45.76915],[18.47743,45.77003],[18.48028,45.78638],[18.48413,45.79491],[18.49401,45.79858],[18.50314,45.79736],[18.50858,45.7931],[18.5095,45.78854],[18.51612,45.78784],[18.52893,45.79561],[18.53278,45.79619],[18.53756,45.79567],[18.54308,45.79806],[18.54861,45.79683],[18.55212,45.79695],[18.55539,45.80442],[18.55757,45.80646],[18.57021,45.80425],[18.56829,45.8151],[18.58704,45.82129],[18.59885,45.82852],[18.59617,45.83576],[18.61719,45.84118],[18.61392,45.84696],[18.60906,45.85372],[18.62229,45.85938],[18.62334,45.87402],[18.62736,45.8792],[18.6333,45.87929],[18.63904,45.87186],[18.64775,45.87539],[18.63829,45.88288],[18.6372,45.88652],[18.63628,45.88972],[18.64402,45.89465],[18.6521,45.89812],[18.65708,45.89829],[18.65801,45.89963],[18.65587,45.90351],[18.6552,45.91536],[18.65566,45.91755],[18.65729,45.91935],[18.66462,45.91938],[18.67027,45.9149],[18.67299,45.91696],[18.68869,45.91895],[18.69954,45.92049],[18.70502,45.92093],[18.70703,45.92066],[18.70883,45.9183],[18.71365,45.91391],[18.72265,45.90788],[18.73852,45.90371],[18.74852,45.90272],[18.75137,45.90292],[18.75422,45.90211],[18.75438,45.89972],[18.75765,45.89951],[18.75962,45.89855],[18.76439,45.89447],[18.76393,45.89197],[18.77427,45.89136],[18.78034,45.88905],[18.78557,45.88378],[18.79064,45.88142],[18.79801,45.88151],[18.80609,45.88171],[18.80831,45.89101],[18.80814,45.89579],[18.80374,45.90144],[18.80274,45.90365],[18.81521,45.91536],[18.82036,45.91772],[18.82623,45.91743],[18.83033,45.90791],[18.86248,45.91303],[18.85984,45.91793],[18.86001,45.92116],[18.86257,45.92299],[18.86617,45.92296],[18.86918,45.9216],[18.87161,45.92017],[18.87237,45.91897],[18.87639,45.85638],[18.86651,45.85714],[18.86021,45.85912],[18.8592,45.85713],[18.86165,45.84448],[18.86005,45.83211],[18.85784,45.82581],[18.85114,45.81691],[18.85289,45.81577],[18.85373,45.81102],[18.8565,45.8114],[18.86248,45.80877],[18.87307,45.81026],[18.87617,45.8189],[18.87925,45.81794],[18.8774,45.78247],[18.87328,45.78159],[18.866,45.77791],[18.85574,45.7726],[18.85943,45.76673],[18.86592,45.76337],[18.87687,45.76008],[18.87611,45.74542],[18.90636,45.74482],[18.92405,45.74455],[18.92186,45.67243],[18.92709,45.66572],[18.92899,45.63999],[18.92814,45.59562],[18.92507,45.595],[18.91427,45.59755],[18.90833,45.59295],[18.90117,45.57833],[18.90242,45.57188],[18.90808,45.57012],[18.91084,45.56998],[18.91282,45.57206],[18.9171,45.57046],[18.92994,45.5682],[18.92709,45.55168],[18.9269,45.5301],[19.00355,45.53163],[19.00764,45.49465],[19.00317,45.49238],[19.00073,45.48768],[18.99591,45.48099],[18.99537,45.47391],[18.99524,45.47183],[18.99585,45.46597],[18.99509,45.46117],[18.99385,45.45303],[18.98625,45.4531],[18.98482,45.41993],[18.9852,45.4196],[18.9852,45.41719],[18.98758,45.41312],[18.98678,45.39609],[18.97879,45.39221],[18.97435,45.38718],[18.9741,45.38142],[18.97736,45.37577],[18.9832,45.37145],[18.98063,45.36516],[18.97769,45.36062],[18.97816,45.35728],[18.98187,45.3534],[18.97987,45.34745],[19.05577,45.34766],[19.05662,45.34565],[19.06927,45.34532],[19.06823,45.33161],[19.1036,45.33061],[19.10227,45.31021],[19.1079,45.30137],[19.11661,45.29513],[19.11739,45.28847],[19.13147,45.28914],[19.15525,45.27971],[19.1543,45.27328],[19.15905,45.22822],[19.15886,45.19398],[19.16038,45.18822],[19.15972,45.1844],[19.16324,45.18111],[19.16362,45.16268],[19.11207,45.16375],[19.11205,45.14601],[19.09091,45.14651],[19.07065,45.14698],[19.07503,45.14063],[19.09072,45.14058],[19.09117,45.1372],[19.0848,45.13299],[19.08456,45.13096],[19.08109,45.12669],[19.08045,45.11535],[19.08608,45.1136],[19.08767,45.11224],[19.0881,45.11083],[19.0876,45.11014],[19.08715,45.10956],[19.08898,45.10956],[19.09046,45.10885],[19.09671,45.10227],[19.09659,45.10033],[19.09766,45.09888],[19.09785,45.09754],[19.09699,45.09516],[19.09533,45.09269],[19.09797,45.09007],[19.10142,45.08705],[19.10287,45.08504],[19.10727,45.08324],[19.10838,45.08193],[19.10857,45.08104],[19.10967,45.07943],[19.10929,45.07809],[19.10631,45.07087],[19.09961,45.06035],[19.10408,45.05765],[19.10513,45.05629],[19.1076,45.05431],[19.10929,45.05206],[19.10952,45.05083],[19.10869,45.04876],[19.10612,45.04467],[19.10256,45.04021],[19.0979,45.03685],[19.09856,45.03544],[19.10073,45.0349],[19.1017,45.03432],[19.10237,45.03334],[19.10237,45.03242],[19.10158,45.0303],[19.10275,45.0283],[19.10275,45.02754],[19.10194,45.02595],[19.1008,45.02523],[19.10075,45.02354],[19.10173,45.0218],[19.10303,45.01546],[19.1042,45.01444],[19.10496,45.01316],[19.10532,45.01217],[19.10586,45.01163],[19.10612,45.01045],[19.10555,45.00926],[19.09928,45.00411],[19.09583,44.99369],[19.09483,44.99266],[19.09407,44.99246],[19.08882,44.99147],[19.08822,44.99038],[19.08202,44.98463],[19.07413,44.9833],[19.06536,44.98083],[19.06192,44.98015],[19.05936,44.97872],[19.05765,44.97822],[19.05879,44.97795],[19.06143,44.97743],[19.06582,44.97561],[19.07001,44.9756],[19.07517,44.9743],[19.08218,44.97666],[19.08708,44.97669],[19.09003,44.97608],[19.0944,44.97351],[19.09925,44.974],[19.10253,44.9737],[19.10708,44.97282],[19.11347,44.97662],[19.11768,44.97884],[19.12353,44.97955],[19.13071,44.98231],[19.13375,44.98345],[19.14008,44.98338],[19.14369,44.98234],[19.14854,44.97985],[19.15235,44.97706],[19.15149,44.96067],[19.15491,44.96078],[19.15682,44.96014],[19.15858,44.9566],[19.16024,44.95324],[19.15929,44.95108],[19.15605,44.94954],[19.15092,44.94745],[19.14778,44.94361],[19.14726,44.94015],[19.14459,44.93755],[19.13789,44.93624],[19.12648,44.93587],[19.11749,44.93099],[19.10831,44.9287],[19.10089,44.9256],[19.09172,44.92308],[19.08877,44.92119],[19.09129,44.91981],[19.09204,44.9164],[19.09072,44.91415],[19.08767,44.91358],[19.0901,44.9122],[19.0911,44.91042],[19.08649,44.90499],[19.08368,44.90361],[19.07698,44.90281],[19.07384,44.90065],[19.07103,44.89893],[19.06566,44.89843],[19.05781,44.90176],[19.04935,44.90678],[19.04193,44.91021],[19.03711,44.9148],[19.03284,44.91841],[19.02513,44.91871],[19.00562,44.91331],[18.99675,44.90679],[18.99708,44.89801],[19.01031,44.88508],[19.02756,44.85927],[19.02647,44.85137],[18.996,44.84823],[18.96225,44.84597],[18.92499,44.8468],[18.87835,44.84817],[18.85055,44.849],[18.83925,44.8547],[18.81915,44.87339],[18.78942,44.88449],[18.7633,44.8992],[18.75635,44.90792],[18.76338,44.91978],[18.74655,44.9263],[18.74471,44.93786],[18.74764,44.9455],[18.76271,44.94894],[18.78398,44.93857],[18.79579,44.93987],[18.79813,44.94485],[18.78214,44.95469],[18.7782,44.97596],[18.78901,44.99224],[18.78214,44.99165],[18.77251,44.99485],[18.76163,44.99591],[18.74613,44.98987],[18.73659,44.98934],[18.72679,44.99017],[18.72026,44.99728],[18.72621,45.00622],[18.73282,45.01545],[18.71892,45.02054],[18.71155,45.03475],[18.70109,45.03439],[18.68861,45.03764],[18.66466,45.05817],[18.6588,45.05326],[18.64725,45.05421],[18.64063,45.05776],[18.60864,45.05805],[18.59935,45.06409],[18.59843,45.06971],[18.60856,45.07627],[18.60211,45.07645],[18.58771,45.08384],[18.58704,45.06846],[18.57691,45.06154],[18.56703,45.06551],[18.56401,45.07432],[18.55598,45.07065],[18.54434,45.06137],[18.54467,45.05539],[18.54057,45.0409],[18.53161,45.03995],[18.52474,45.04303],[18.526,45.05155],[18.52299,45.05634],[18.51419,45.05344],[18.48983,45.05516],[18.46814,45.05995],[18.44804,45.07639],[18.43749,45.08265],[18.43088,45.0985],[18.41924,45.10518],[18.40015,45.10547],[18.36875,45.10269],[18.33676,45.09808],[18.32169,45.09696],[18.3098,45.10376],[18.3021,45.11191],[18.28929,45.10996],[18.27631,45.11174],[18.2722,45.12781],[18.26718,45.13318],[18.25755,45.13614],[18.23561,45.13194],[18.21493,45.12202],[18.21309,45.11705],[18.2161,45.10919],[18.22473,45.10287],[18.22699,45.09856],[18.22046,45.08827],[18.21192,45.08177],[18.19994,45.07562],[18.18286,45.07343],[18.16695,45.07396],[18.15062,45.08153],[18.1394,45.08183],[18.12115,45.07621],[18.1106,45.07863],[18.10139,45.08484],[18.08967,45.09714],[18.07652,45.10057],[18.06856,45.10352],[18.06664,45.10772],[18.06856,45.1115],[18.08054,45.119],[18.07242,45.13182],[18.06597,45.13909],[18.05709,45.13962],[18.04822,45.13631],[18.04462,45.12385],[18.03733,45.12196],[18.02862,45.12432],[18.02126,45.13868],[18.01732,45.14618],[18.0097,45.14872],[17.9948,45.14488],[17.9824,45.13543],[17.98106,45.12414],[17.97202,45.11292],[17.96105,45.10843],[17.94146,45.10813],[17.93576,45.1037],[17.9366,45.09483],[17.94221,45.08626],[17.94171,45.08141],[17.93024,45.07438],[17.90654,45.05882],[17.88418,45.04794],[17.86593,45.04114],[17.85061,45.04019],[17.83545,45.04327],[17.80824,45.05663],[17.78848,45.07308],[17.78504,45.0768],[17.77709,45.08124],[17.76905,45.08112],[17.76528,45.0807],[17.75616,45.08254],[17.73238,45.09584],[17.71747,45.10394],[17.7091,45.11032],[17.70047,45.11138],[17.68808,45.11357],[17.6777,45.12426],[17.67225,45.12934],[17.66363,45.13094],[17.65341,45.1281],[17.63483,45.11971],[17.62989,45.1151],[17.62629,45.1102],[17.61599,45.10967],[17.61063,45.106],[17.6005,45.10181],[17.59045,45.10281],[17.58358,45.10843],[17.57839,45.11256],[17.57445,45.11286],[17.5696,45.10654],[17.55729,45.10417],[17.54992,45.10701],[17.55059,45.11321],[17.55277,45.12184],[17.5495,45.12663],[17.54414,45.12544],[17.54582,45.11835],[17.54372,45.11292],[17.53594,45.10665],[17.52187,45.10488],[17.51283,45.10494],[17.50362,45.11109],[17.49801,45.10837],[17.48821,45.10589],[17.47757,45.10795],[17.47347,45.11239],[17.47699,45.11894],[17.48746,45.12515],[17.48821,45.13283],[17.47456,45.12267],[17.4589,45.12249],[17.44768,45.12456],[17.44408,45.1281],[17.44425,45.13265],[17.45086,45.14399],[17.44827,45.15627],[17.44509,45.15769],[17.44098,45.15639],[17.43814,45.14582],[17.4275,45.13655],[17.41754,45.13253],[17.40607,45.13141],[17.38312,45.13407],[17.35968,45.13608],[17.3426,45.13809],[17.32644,45.14895],[17.32225,45.15604],[17.32752,45.16295],[17.30927,45.16159],[17.30525,45.16619],[17.30659,45.17375],[17.29554,45.17233],[17.28264,45.17186],[17.27318,45.18585],[17.26824,45.17404],[17.26422,45.17257],[17.26389,45.16619],[17.25903,45.15332],[17.25141,45.1444],[17.2463,45.14263],[17.23492,45.14376],[17.22244,45.14257],[17.2144,45.14381],[17.2031,45.14659],[17.19096,45.14328],[17.17932,45.14352],[17.16542,45.14694],[17.14055,45.16047],[17.13125,45.16295],[17.10957,45.17334],[17.10262,45.17475],[17.06619,45.18904],[17.0605,45.196],[17.0507,45.19736],[17.04065,45.20414],[17.03437,45.21983],[17.02382,45.21087],[17.01771,45.20951],[17.00992,45.21081],[17.00415,45.21399],[17.00314,45.21889],[17.00004,45.21783],[16.99201,45.21889],[16.9864,45.22066],[16.97911,45.22573],[16.97559,45.22443],[16.96923,45.22384],[16.96362,45.22644],[16.95943,45.22844],[16.95583,45.22886],[16.95031,45.22514],[16.94361,45.22431],[16.93875,45.22426],[16.93264,45.22703],[16.93088,45.23682],[16.93054,45.24206],[16.9344,45.24878],[16.94637,45.25321],[16.94897,45.25468],[16.94913,45.25668],[16.93699,45.26158],[16.93465,45.26965],[16.93331,45.27307],[16.9282,45.27307],[16.92351,45.27142],[16.92259,45.26723],[16.91782,45.26275],[16.91874,45.25975],[16.91681,45.25509],[16.91237,45.25061],[16.90442,45.24749],[16.89814,45.24713],[16.89429,45.24401],[16.88658,45.24295],[16.88809,45.24136],[16.88525,45.23428],[16.88742,45.23062],[16.88684,45.22644],[16.88432,45.22296],[16.88508,45.22137],[16.88181,45.21647],[16.87737,45.216],[16.8721,45.21718],[16.86833,45.21635],[16.86724,45.21193],[16.86322,45.20821],[16.85778,45.20225],[16.85292,45.20115],[16.84775,45.20171],[16.84623,45.1975],[16.84723,45.19526],[16.84706,45.19367],[16.84438,45.19148],[16.84116,45.18842],[16.83484,45.18547],[16.8286,45.18402],[16.82178,45.1824],[16.81516,45.18187],[16.80691,45.18254],[16.80273,45.18299],[16.79109,45.18603],[16.77706,45.18948],[16.77124,45.19119],[16.76329,45.1957],[16.75965,45.19703],[16.75328,45.19665],[16.74889,45.1975],[16.73972,45.20143],[16.7326,45.20461],[16.73051,45.20467],[16.72611,45.20258],[16.72063,45.20205],[16.71615,45.20184],[16.71121,45.19951],[16.70409,45.1947],[16.69911,45.1934],[16.69429,45.1934],[16.68939,45.19491],[16.68349,45.19727],[16.67809,45.19871],[16.67051,45.19857],[16.66649,45.19945],[16.66168,45.20208],[16.65628,45.20452],[16.65125,45.20441],[16.64543,45.20517],[16.6343,45.21163],[16.63015,45.21113],[16.62802,45.21116],[16.62509,45.2124],[16.62278,45.21467],[16.62107,45.21718],[16.61941,45.21939],[16.61709,45.22137],[16.61451,45.22243],[16.60744,45.22516],[16.60455,45.22697],[16.60028,45.22828],[16.59808,45.22881],[16.59699,45.22877],[16.59356,45.22654],[16.59218,45.22426],[16.58755,45.22213],[16.58255,45.22004],[16.5792,45.21948],[16.57514,45.21974],[16.57133,45.2196],[16.56785,45.21976],[16.56528,45.21976],[16.56237,45.21855],[16.55883,45.21705],[16.55559,45.21654],[16.55249,45.21641],[16.54954,45.21688],[16.54772,45.21712],[16.54445,45.21777],[16.54198,45.21876],[16.53884,45.22048],[16.53725,45.22206],[16.5366,45.22433],[16.53589,45.22452],[16.53308,45.22445],[16.53074,45.22431],[16.52186,45.22151],[16.51946,45.21977],[16.5151,45.21845],[16.51263,45.21647],[16.50999,45.21581],[16.50512,45.21274],[16.50382,45.21198],[16.50337,45.2111],[16.50043,45.20883],[16.49773,45.2078],[16.49602,45.20668],[16.49455,45.20057],[16.49331,45.19698],[16.49086,45.19326],[16.48932,45.18999],[16.48662,45.1876],[16.47885,45.18086],[16.48026,45.17359],[16.48235,45.16972],[16.48439,45.16663],[16.48354,45.16026],[16.48149,45.15775],[16.47655,45.15548],[16.47612,45.15302],[16.47225,45.14839],[16.46768,45.13997],[16.46448,45.13997],[16.46184,45.13997],[16.46178,45.13692],[16.45031,45.13174],[16.44718,45.13001],[16.44457,45.12618],[16.43825,45.1231],[16.43392,45.12189],[16.42988,45.12175],[16.42383,45.1219],[16.42379,45.11924],[16.41105,45.11716],[16.3992,45.11095],[16.39792,45.10632],[16.40686,45.10061],[16.40786,45.09796],[16.40233,45.09449],[16.40087,45.09219],[16.4002,45.08792],[16.39641,45.08485],[16.39117,45.08037],[16.3924,45.07244],[16.39179,45.06563],[16.38817,45.06067],[16.38757,45.05236],[16.38594,45.04977],[16.38165,45.04794],[16.37718,45.04842],[16.37419,45.04278],[16.3686,45.03969],[16.36511,45.03522],[16.36345,45.03153],[16.3613,45.03023],[16.36354,45.02531],[16.36122,45.01706],[16.36268,45.01172],[16.36268,45.00928],[16.35984,45.00693],[16.3583,45.00232],[16.35817,45.00121],[16.35504,44.99959],[16.34706,44.99704],[16.3304,44.99691],[16.32583,44.99875],[16.32279,44.99882],[16.31546,44.99583],[16.3062,44.9957],[16.30148,44.99502],[16.29511,44.99478],[16.29188,44.99293],[16.28569,44.9923],[16.28427,44.99441],[16.28042,45.00406],[16.27552,45.00208],[16.26948,45.00393],[16.26777,45.01237],[16.26682,45.01324],[16.26468,45.01328],[16.26292,45.00958],[16.25802,45.00776],[16.25426,45.00796],[16.25155,45.01032],[16.24628,45.01139],[16.24152,45.01012],[16.22578,45.01489],[16.22497,45.02141],[16.22131,45.02161],[16.20971,45.02578],[16.20619,45.02924],[16.19625,45.02733],[16.19069,45.02823],[16.18707,45.03149],[16.18141,45.04477],[16.174,45.04836],[16.17124,45.05115],[16.17176,45.05656],[16.16962,45.06136],[16.16515,45.06626],[16.16715,45.07026],[16.16192,45.07231],[16.15322,45.07946],[16.14489,45.08081],[16.13857,45.0851],[16.13643,45.08524],[16.13472,45.08359],[16.13025,45.08332],[16.12573,45.08527],[16.12159,45.0893],[16.10628,45.08964],[16.09853,45.09705],[16.09282,45.10024],[16.08617,45.10185],[16.08065,45.10994],[16.08021,45.12308],[16.07989,45.13195],[16.07442,45.1393],[16.06672,45.14359],[16.05821,45.15315],[16.05136,45.15731],[16.0467,45.16804],[16.04199,45.17042],[16.04152,45.17619],[16.02321,45.17733],[16.01612,45.17582],[16.01137,45.178],[16.00914,45.18458],[16.02074,45.19412],[16.0224,45.19757],[16.01731,45.20001],[16.01122,45.21415],[16.00666,45.21352],[16.00209,45.21414],[15.99729,45.21784],[15.99299,45.21741],[15.98569,45.22062],[15.97876,45.2257],[15.97485,45.22537],[15.96924,45.219],[15.9602,45.21757],[15.9561,45.21445],[15.94777,45.21067],[15.91799,45.21049],[15.91602,45.21084],[15.91676,45.21425],[15.92107,45.22075],[15.92048,45.22437],[15.91837,45.22313],[15.91641,45.22182],[15.91103,45.22092],[15.90497,45.22186],[15.90076,45.22427],[15.89795,45.22354],[15.89976,45.21924],[15.89843,45.21553],[15.89596,45.21355],[15.88727,45.21269],[15.88478,45.21492],[15.87527,45.21472],[15.87009,45.21666],[15.8601,45.21395],[15.85538,45.21374],[15.84351,45.22157],[15.83464,45.21608],[15.83649,45.21177],[15.82967,45.20474],[15.82342,45.20258],[15.81405,45.20607],[15.81303,45.20303],[15.80651,45.20025],[15.80658,45.1968],[15.8047,45.19499],[15.79767,45.19164],[15.79069,45.19066],[15.78682,45.18517],[15.78216,45.18249],[15.78188,45.17495],[15.78039,45.17366],[15.77476,45.17354],[15.77487,45.16994],[15.77289,45.16881],[15.77021,45.16383],[15.77392,45.15274],[15.78071,45.14703],[15.78012,45.14014],[15.78483,45.1394],[15.7871,45.13525],[15.78302,45.1302],[15.78911,45.12464],[15.79444,45.12179],[15.79588,45.11433],[15.78558,45.10442],[15.78341,45.09297],[15.77534,45.09164],[15.77927,45.08366],[15.77597,45.08369],[15.776,45.08188],[15.77587,45.07994],[15.77589,45.07704],[15.77534,45.07382],[15.7611,45.06754],[15.75772,45.06344],[15.75122,45.06121],[15.75929,45.05309],[15.76032,45.04691],[15.77165,45.02161],[15.77654,45.01075],[15.78186,45.0096],[15.78701,45.00456],[15.79001,44.99352],[15.78572,44.98271],[15.78847,44.97482],[15.7871,44.96984],[15.781,44.96504],[15.77371,44.96583],[15.77182,44.96765],[15.75336,44.96619],[15.75113,44.95836],[15.75371,44.95083],[15.75113,44.94488],[15.74281,44.93655],[15.76487,44.88762],[15.76401,44.87071],[15.79834,44.84699],[15.79628,44.84419],[15.76143,44.82617],[15.73551,44.82288],[15.7477,44.80863],[15.74547,44.80121],[15.75972,44.78829],[15.76744,44.77794],[15.77465,44.77196],[15.77568,44.76758],[15.78289,44.75844],[15.7877,44.75051],[15.81242,44.74332],[15.81911,44.73686],[15.82615,44.72649],[15.8325,44.72393],[15.84726,44.7393],[15.85894,44.74003],[15.87147,44.73613],[15.87696,44.73564],[15.88005,44.74698],[15.89481,44.75271],[15.90631,44.74978],[15.90685,44.74324],[15.9156,44.73624],[15.92568,44.72287],[15.93043,44.71939],[15.93329,44.71273],[15.93666,44.71455],[15.95526,44.71499],[15.95896,44.71307],[15.96058,44.70783],[15.96139,44.70394],[15.95825,44.70009],[15.9622,44.69583],[15.96662,44.69482],[15.96914,44.69282],[15.97323,44.68336],[15.97256,44.67954],[15.97946,44.67328],[15.98431,44.67325],[15.9894,44.67156],[15.9932,44.66878],[15.9971,44.66608],[15.99957,44.66286],[16.01389,44.6586],[16.02287,44.66019],[16.03025,44.65833],[16.03586,44.65529],[16.03705,44.64872],[16.04423,44.64061],[16.04603,44.63739],[16.0476,44.63045],[16.04912,44.6293],[16.05274,44.62978],[16.05823,44.62811],[16.0592,44.627],[16.05963,44.61248],[16.06263,44.60805],[16.05868,44.60361],[16.05298,44.60341],[16.05084,44.60046],[16.05531,44.59799],[16.05564,44.59508],[16.04751,44.58986],[16.04499,44.58634],[16.03595,44.58438],[16.02497,44.58563],[16.02135,44.58329],[16.02316,44.5732],[16.02416,44.56754],[16.02335,44.56378],[16.04917,44.54877],[16.05778,44.54162],[16.08056,44.53881],[16.09458,44.53528],[16.11056,44.52942],[16.12673,44.51464],[16.12792,44.50341],[16.13543,44.49378],[16.13662,44.48788],[16.141,44.48581],[16.1458,44.48018],[16.14413,44.47424],[16.14033,44.47047],[16.14223,44.46243],[16.13748,44.45873],[16.13767,44.45734],[16.141,44.45727],[16.14423,44.45544],[16.14818,44.44916],[16.14713,44.4423],[16.14375,44.43918],[16.14594,44.42719],[16.14879,44.42542],[16.15559,44.42542],[16.16491,44.41802],[16.16858,44.41462],[16.17072,44.4098],[16.17599,44.4063],[16.17742,44.40236],[16.17571,44.39968],[16.16991,44.39747],[16.16092,44.39176],[16.15412,44.39111],[16.15108,44.39173],[16.14019,44.3886],[16.13367,44.39142],[16.134,44.3868],[16.13524,44.38112],[16.14608,44.3799],[16.14993,44.38085],[16.1536,44.3834],[16.15797,44.3834],[16.17276,44.37701],[16.17856,44.37018],[16.19915,44.3659],[16.20998,44.36191],[16.22406,44.3489],[16.22307,44.34118],[16.20923,44.33349],[16.20405,44.32822],[16.19963,44.31988],[16.19953,44.3143],[16.19368,44.30784],[16.1923,44.29936],[16.1923,44.29548],[16.19511,44.29218],[16.1972,44.28398],[16.19606,44.27162],[16.20077,44.26219],[16.20538,44.2582],[16.20495,44.25425],[16.209,44.25459],[16.21427,44.25177],[16.22269,44.24131],[16.22559,44.23409],[16.22412,44.22213],[16.22179,44.22032],[16.21908,44.21974],[16.21765,44.21695],[16.22307,44.21388],[16.22973,44.21207],[16.23192,44.20696],[16.23429,44.20488],[16.23722,44.20476],[16.23721,44.20365],[16.24017,44.20368],[16.24314,44.20014],[16.24685,44.19823],[16.24761,44.19602],[16.25488,44.19141],[16.25992,44.18586],[16.26577,44.18173],[16.26744,44.17852],[16.27395,44.17634],[16.27638,44.17307],[16.2934,44.16444],[16.29892,44.15594],[16.30915,44.14985],[16.31098,44.1463],[16.31266,44.14387],[16.31276,44.14256],[16.31157,44.12793],[16.31525,44.12639],[16.31598,44.125],[16.3168,44.12172],[16.32072,44.11655],[16.33606,44.11467],[16.3383,44.11357],[16.35283,44.10791],[16.36216,44.10334],[16.36388,44.10159],[16.36616,44.09926],[16.36664,44.09827],[16.36668,44.09748],[16.36514,44.09516],[16.37192,44.08445],[16.37753,44.08405],[16.37814,44.08379],[16.38276,44.08597],[16.38391,44.08599],[16.38536,44.08569],[16.38659,44.08507],[16.38961,44.08289],[16.39672,44.08247],[16.39834,44.08239],[16.40072,44.08215],[16.40256,44.08211],[16.42785,44.0856],[16.42923,44.08519],[16.4303,44.08448],[16.44441,44.0688],[16.44508,44.06805],[16.44565,44.06696],[16.44472,44.06462],[16.44389,44.06191],[16.43893,44.05434],[16.4396,44.049],[16.44177,44.04244],[16.44204,44.03718],[16.44144,44.03546],[16.43997,44.03188],[16.44156,44.03107],[16.44345,44.0311],[16.44897,44.03042],[16.45525,44.03049],[16.45923,44.03076],[16.46266,44.03126],[16.46731,44.03221],[16.46936,44.03212],[16.48295,44.0317],[16.50428,44.02631],[16.50539,44.02518],[16.5187,44.00519],[16.53769,43.98917],[16.53995,43.98722],[16.54742,43.97499],[16.54784,43.97359],[16.55289,43.9553],[16.58975,43.94507],[16.59094,43.94383],[16.59163,43.94198],[16.59304,43.93928],[16.60141,43.93673],[16.60252,43.93566],[16.6029,43.93479],[16.60614,43.9266],[16.61033,43.92476],[16.61114,43.92396],[16.61148,43.92265],[16.61203,43.92134],[16.60461,43.91569],[16.60504,43.91517],[16.60009,43.91158],[16.6014,43.91125],[16.60432,43.91125],[16.60489,43.91087],[16.60658,43.91063],[16.60727,43.91029],[16.60958,43.90902],[16.61027,43.90854],[16.61198,43.90866],[16.61426,43.90794],[16.62066,43.90334],[16.6217,43.90179],[16.62437,43.89994],[16.62781,43.89753],[16.65,43.88009],[16.65,43.87782],[16.65228,43.8744],[16.65913,43.86939],[16.67073,43.87631],[16.6752,43.87433],[16.71695,43.84072],[16.72161,43.84086],[16.72136,43.83616],[16.7236,43.83248],[16.72362,43.83172],[16.72335,43.83075],[16.72144,43.8294],[16.72347,43.82627],[16.72351,43.82517],[16.72268,43.82325],[16.72213,43.82148],[16.72148,43.81899],[16.72136,43.81635],[16.72215,43.80778],[16.72601,43.8053],[16.72799,43.80221],[16.72956,43.80045],[16.72977,43.7994],[16.72915,43.79709],[16.72868,43.79633],[16.7304,43.79518],[16.73067,43.79396],[16.7331,43.79121],[16.73685,43.78775],[16.74221,43.78312],[16.74761,43.77845],[16.7541,43.77221],[16.75707,43.77269],[16.76105,43.77219],[16.76113,43.77177],[16.76613,43.7717],[16.77987,43.77006],[16.80222,43.76488],[16.80474,43.7634],[16.81478,43.75664],[16.81822,43.75048],[16.81828,43.74988],[16.82743,43.73415],[16.83352,43.73241],[16.83664,43.7307],[16.85083,43.72098],[16.86975,43.71255],[16.87562,43.70733],[16.87926,43.70099],[16.87915,43.69905],[16.88031,43.69583],[16.88522,43.69357],[16.88617,43.6923],[16.88811,43.68718],[16.9022,43.68081],[16.91083,43.67631],[16.91177,43.67521],[16.91319,43.67263],[16.9151,43.67026],[16.91964,43.66446],[16.91987,43.66365],[16.9224,43.66007],[16.93025,43.65648],[16.93092,43.65531],[16.93161,43.65321],[16.9349,43.64722],[16.93502,43.6448],[16.96136,43.6273],[16.96701,43.62375],[16.97371,43.61948],[16.97438,43.61853],[16.98089,43.60728],[16.98424,43.6034],[16.98573,43.60235],[16.98596,43.6015],[16.98907,43.59903],[16.99,43.59768],[16.99288,43.59344],[16.99533,43.59303],[16.99672,43.59205],[16.99824,43.59048],[16.99849,43.58974],[17.00863,43.58314],[17.00982,43.58233],[17.01034,43.58107],[17.0107,43.58011],[17.01059,43.5779],[17.0165,43.5733],[17.02349,43.56986],[17.02745,43.56859],[17.0318,43.5659],[17.03477,43.56426],[17.03862,43.56096],[17.04442,43.55911],[17.05219,43.5578],[17.05378,43.55721],[17.05702,43.55681],[17.05702,43.55466],[17.06636,43.55462],[17.06808,43.55331],[17.06879,43.55202],[17.06852,43.55117],[17.07149,43.54991],[17.07346,43.54927],[17.07452,43.54838],[17.08097,43.54524],[17.08189,43.54413],[17.08518,43.54105],[17.08683,43.53952],[17.08861,43.53847],[17.09226,43.5361],[17.09602,43.53387],[17.09682,43.53308],[17.10538,43.53055],[17.10685,43.52958],[17.10814,43.52757],[17.10963,43.5258],[17.1252,43.52018],[17.12726,43.51848],[17.13247,43.5127],[17.13458,43.51098],[17.13502,43.51009],[17.13737,43.50974],[17.13969,43.50972],[17.14176,43.50901],[17.14208,43.5086],[17.14415,43.50792],[17.14524,43.50711],[17.14576,43.5059],[17.14771,43.50368],[17.15204,43.49746],[17.15583,43.49647],[17.16031,43.49604],[17.17436,43.49275],[17.17884,43.4963],[17.18005,43.49774],[17.18154,43.4982],[17.18405,43.49902],[17.18771,43.49984],[17.19003,43.49967],[17.19537,43.49993],[17.20701,43.49982],[17.2122,43.49881],[17.21509,43.49966],[17.21637,43.49946],[17.22093,43.49976],[17.22801,43.49976],[17.23196,43.49837],[17.23435,43.4967],[17.23701,43.49603],[17.23822,43.49496],[17.2404,43.49427],[17.24187,43.49351],[17.24561,43.49263],[17.24785,43.49156],[17.25275,43.48933],[17.25855,43.4861],[17.26052,43.48547],[17.26225,43.48455],[17.26728,43.48271],[17.26958,43.48124],[17.27243,43.47973],[17.27276,43.47849],[17.27632,43.47642],[17.27731,43.47519],[17.28139,43.47296],[17.28264,43.47171],[17.28532,43.46933],[17.28624,43.46797],[17.2866,43.46536],[17.28913,43.46188],[17.28899,43.45998],[17.28991,43.45711],[17.28926,43.4541],[17.28804,43.45238],[17.28972,43.44916],[17.28959,43.44726],[17.28865,43.4458],[17.28878,43.44351],[17.28788,43.44156],[17.28842,43.43857],[17.28733,43.43422],[17.28549,43.43054],[17.28216,43.42595],[17.27814,43.42043],[17.2745,43.41634],[17.27216,43.413],[17.26918,43.41219],[17.26382,43.40792],[17.26217,43.40486],[17.26075,43.40301],[17.25664,43.40208],[17.26104,43.3989],[17.26414,43.39479],[17.26516,43.39138],[17.26632,43.386],[17.26791,43.37838],[17.26885,43.3732],[17.27251,43.36888],[17.27391,43.36757],[17.27446,43.3659],[17.27438,43.36444],[17.27699,43.36022],[17.27712,43.35861],[17.27762,43.35677],[17.27756,43.35555],[17.27873,43.35526],[17.28313,43.34764],[17.29342,43.33131],[17.30111,43.31927],[17.30266,43.31749],[17.30441,43.31584],[17.30598,43.31389],[17.3095,43.30684],[17.31084,43.30487],[17.31178,43.30308],[17.31337,43.30084],[17.31383,43.29974],[17.31784,43.296],[17.32055,43.29333],[17.32438,43.28912],[17.32627,43.28879],[17.32901,43.28795],[17.33012,43.2867],[17.33138,43.28491],[17.33266,43.28267],[17.33254,43.28088],[17.3335,43.27866],[17.33408,43.27704],[17.33412,43.2747],[17.33478,43.27417],[17.33552,43.27283],[17.33602,43.2714],[17.33582,43.27005],[17.33559,43.26978],[17.33641,43.26898],[17.33653,43.26762],[17.33611,43.26646],[17.33564,43.26588],[17.3389,43.26232],[17.3407,43.25991],[17.341,43.25936],[17.34344,43.25777],[17.34447,43.25629],[17.34462,43.25537],[17.34752,43.25508],[17.35451,43.25395],[17.36082,43.25189],[17.36824,43.25169],[17.37011,43.25216],[17.37294,43.25218],[17.37646,43.252],[17.379,43.25122],[17.3817,43.25009],[17.38471,43.25012],[17.39222,43.24854],[17.39827,43.24763],[17.40078,43.24631],[17.40786,43.24182],[17.41663,43.23641],[17.42366,43.23203],[17.4234,43.22816],[17.42638,43.22814],[17.43036,43.22016],[17.43233,43.21821],[17.4327,43.21716],[17.43304,43.21537],[17.43274,43.21455],[17.43303,43.21187],[17.43455,43.21052],[17.43485,43.20942],[17.43455,43.20771],[17.43571,43.20556],[17.43552,43.20439],[17.43515,43.20269],[17.4345,43.19824],[17.43352,43.19711],[17.43303,43.19456],[17.43217,43.19342],[17.43154,43.19119],[17.43043,43.18933],[17.43053,43.18794],[17.43172,43.18519],[17.43346,43.18123],[17.43591,43.18263],[17.438,43.18288],[17.44028,43.18232],[17.44367,43.18111],[17.44761,43.18015],[17.45085,43.17971],[17.45279,43.17889],[17.4534,43.17815],[17.45524,43.17755],[17.45715,43.17643],[17.45855,43.1755],[17.45945,43.17458],[17.46034,43.17377],[17.46214,43.17318],[17.46327,43.17248],[17.46514,43.17164],[17.46668,43.17045],[17.46946,43.16877],[17.47561,43.16536],[17.47604,43.16418],[17.47869,43.1628],[17.48447,43.16096],[17.48814,43.16012],[17.49152,43.15872],[17.49323,43.15725],[17.49458,43.15644],[17.49585,43.15634],[17.49633,43.15603],[17.50096,43.15453],[17.50323,43.15328],[17.5041,43.15307],[17.5075,43.15153],[17.50916,43.1501],[17.51062,43.14917],[17.51568,43.14763],[17.52138,43.1462],[17.528,43.14377],[17.53268,43.14149],[17.53599,43.1394],[17.54105,43.13789],[17.54608,43.13624],[17.54735,43.1356],[17.54932,43.13385],[17.5514,43.13349],[17.55324,43.13339],[17.55662,43.1323],[17.55868,43.13126],[17.56014,43.13017],[17.56376,43.12737],[17.56486,43.12661],[17.5672,43.12577],[17.56843,43.12491],[17.5703,43.12428],[17.57361,43.12358],[17.57736,43.12229],[17.5818,43.12095],[17.58489,43.11943],[17.58694,43.11874],[17.58996,43.11716],[17.59436,43.11478],[17.59802,43.1129],[17.60069,43.11105],[17.60222,43.11094],[17.60363,43.11035],[17.60494,43.10942],[17.60589,43.1083],[17.61323,43.1047],[17.62194,43.10018],[17.62776,43.09777],[17.629,43.09757],[17.63049,43.09706],[17.63221,43.09613],[17.63334,43.09557],[17.63715,43.09477],[17.63904,43.09354],[17.64095,43.09229],[17.64304,43.09121],[17.64429,43.09027],[17.64522,43.08805],[17.65012,43.07925],[17.65267,43.07481],[17.65291,43.07368],[17.65295,43.07287],[17.65387,43.07064],[17.65413,43.07026],[17.65533,43.06911],[17.65625,43.06685],[17.65718,43.06482],[17.65969,43.06062],[17.66288,43.05543],[17.66398,43.05285],[17.66521,43.05078],[17.66695,43.04723],[17.669,43.04299],[17.67219,43.0381],[17.67612,43.03219],[17.67831,43.02874],[17.67986,43.0277],[17.68069,43.02618],[17.68167,43.0252],[17.68268,43.02425],[17.68431,43.02197],[17.68636,43.02069],[17.68689,43.01954],[17.68763,43.01635],[17.68846,43.01132],[17.69535,43.00363],[17.69763,43.00099],[17.69817,42.99964],[17.70499,42.98764],[17.70556,42.98527],[17.70669,42.98351],[17.7085,42.98023],[17.71408,42.97496],[17.71384,42.9707],[17.70105,42.96614],[17.68885,42.9633],[17.68698,42.96293],[17.68241,42.96273],[17.67891,42.96188],[17.67431,42.96167],[17.67178,42.96069],[17.67,42.95984],[17.66802,42.95943],[17.66662,42.95952],[17.66291,42.9585],[17.66149,42.95834],[17.66003,42.95843],[17.65517,42.95706],[17.65359,42.95674],[17.65131,42.95563],[17.64944,42.95519],[17.64297,42.95113],[17.64175,42.95083],[17.63991,42.95074],[17.63492,42.94772],[17.63317,42.94633],[17.63199,42.9452],[17.62938,42.94451],[17.62762,42.94357],[17.62611,42.9432],[17.62282,42.94183],[17.62121,42.94083],[17.61881,42.94012],[17.61537,42.93951],[17.60937,42.93868],[17.60543,42.93831],[17.6032,42.93825],[17.60213,42.93792],[17.59293,42.93768],[17.58964,42.93703],[17.58596,42.93632],[17.58424,42.93625],[17.58165,42.93547],[17.58002,42.93553],[17.57649,42.93745],[17.57444,42.9389],[17.56664,42.93852],[17.56426,42.93879],[17.54924,42.93892],[17.53481,42.93894],[17.52978,42.9424],[17.52028,42.92815],[17.52748,42.92702],[17.53375,42.92469],[17.54671,42.91709],[17.548,42.91583],[17.55298,42.91602],[17.56242,42.91338],[17.56697,42.91111],[17.57452,42.90822],[17.58096,42.90634],[17.58714,42.90407],[17.59512,42.90112],[17.60087,42.89785],[17.60774,42.89873],[17.61263,42.89772],[17.62113,42.89213],[17.62671,42.8871],[17.63263,42.88269],[17.63752,42.88137],[17.64361,42.88081],[17.6487,42.88431],[17.64423,42.88859],[17.66215,42.90753],[17.6643,42.91162],[17.67305,42.92048],[17.67683,42.92325],[17.68764,42.92563],[17.70404,42.92431],[17.72558,42.92174],[17.75631,42.91476],[17.76858,42.90992],[17.7879,42.89439],[17.80041,42.9114],[17.80532,42.91742],[17.80747,42.91947],[17.80994,42.91968],[17.81313,42.91834],[17.8145,42.91781],[17.81646,42.91693],[17.82294,42.9144],[17.83115,42.91166],[17.84137,42.90642],[17.84605,42.90453],[17.84684,42.90398],[17.84753,42.90304],[17.85276,42.89772],[17.85497,42.89507],[17.85905,42.88991],[17.86051,42.88881],[17.8618,42.88642],[17.86216,42.88405],[17.86074,42.88175],[17.8592,42.87944],[17.85757,42.8779],[17.8578,42.87662],[17.85961,42.86939],[17.86077,42.86793],[17.86188,42.8654],[17.86257,42.86362],[17.86613,42.85892],[17.86645,42.85802],[17.86733,42.85673],[17.87057,42.85152],[17.87315,42.84772],[17.87643,42.84496],[17.878,42.84334],[17.88046,42.83977],[17.88551,42.8398],[17.88933,42.83823],[17.89355,42.83672],[17.90126,42.83463],[17.90231,42.83418],[17.90334,42.8331],[17.90351,42.8322],[17.90241,42.82987],[17.90113,42.82794],[17.90003,42.82717],[17.8989,42.82512],[17.89754,42.82419],[17.89478,42.82156],[17.8933,42.82071],[17.89081,42.815],[17.89327,42.81196],[17.90171,42.81198],[17.90911,42.8131],[17.91046,42.81308],[17.91166,42.81273],[17.91362,42.81155],[17.91613,42.81011],[17.94119,42.80308],[17.95164,42.8011],[17.95338,42.79982],[17.96005,42.7946],[17.962,42.79191],[17.96683,42.78819],[17.96825,42.78757],[17.96921,42.78682],[17.96966,42.78627],[17.97529,42.78378],[17.97704,42.78202],[17.98146,42.78038],[17.98501,42.78065],[17.99464,42.77921],[17.99837,42.77783],[17.99975,42.77641],[17.99979,42.77518],[17.99975,42.7739],[18.00007,42.77231],[18.00018,42.76573],[18.00168,42.76442],[18.00219,42.76363],[18.00515,42.75962],[18.00663,42.75855],[18.01058,42.75648],[18.01161,42.75539],[18.0123,42.75465],[18.02601,42.75448],[18.02882,42.75358],[18.03268,42.75248],[18.03451,42.75242],[18.03698,42.7518],[18.04343,42.75042],[18.04496,42.74908],[18.05144,42.74422],[18.05339,42.74396],[18.05616,42.74279],[18.0588,42.74176],[18.06393,42.73857],[18.06562,42.73715],[18.06755,42.7354],[18.07105,42.73316],[18.07609,42.7296],[18.07667,42.7287],[18.07663,42.72749],[18.07691,42.7266],[18.07903,42.72698],[18.08019,42.72679],[18.08159,42.72632],[18.08416,42.72504],[18.0927,42.72184],[18.10032,42.71919],[18.10392,42.71713],[18.10843,42.71355],[18.10933,42.71193],[18.11045,42.70962],[18.11141,42.70663],[18.11131,42.7027],[18.11036,42.70155],[18.1107,42.69967],[18.11049,42.69906],[18.10873,42.69663],[18.10813,42.69359],[18.10592,42.68963],[18.1059,42.68878],[18.10976,42.68843],[18.1115,42.68857],[18.11246,42.68857],[18.11442,42.68876],[18.11626,42.68833],[18.11746,42.68747],[18.11948,42.68633],[18.12422,42.68545],[18.12667,42.68494],[18.12851,42.68472],[18.13373,42.68444],[18.13527,42.68384],[18.13813,42.68226],[18.14085,42.68261],[18.14253,42.68248],[18.14596,42.68086],[18.14686,42.67969],[18.14772,42.67676],[18.14931,42.67204],[18.15328,42.66798],[18.15613,42.66443],[18.15772,42.66199],[18.15828,42.65994],[18.15819,42.65896],[18.16598,42.66117],[18.17158,42.66197],[18.17261,42.66182],[18.17396,42.66295],[18.17501,42.66333],[18.17606,42.66339],[18.17913,42.66322],[18.18087,42.66254],[18.18338,42.66011],[18.18589,42.65781],[18.18772,42.65804],[18.19093,42.65757],[18.19327,42.65669],[18.1948,42.65524],[18.19497,42.65473],[18.19673,42.65381],[18.19782,42.65206],[18.19862,42.6508],[18.20424,42.64569],[18.20761,42.64051],[18.21389,42.63647],[18.21563,42.63405],[18.21844,42.63086],[18.22147,42.62796],[18.22422,42.62502],[18.22887,42.62202],[18.23381,42.62163],[18.23632,42.62041],[18.23728,42.61894],[18.23733,42.61801],[18.23911,42.6185],[18.24241,42.61822],[18.24368,42.61763],[18.24522,42.61563],[18.24619,42.61395],[18.2466,42.61106],[18.24679,42.60541],[18.24911,42.60547],[18.25844,42.60781],[18.26273,42.60892],[18.26477,42.61117],[18.27044,42.61342],[18.27312,42.61307],[18.2744,42.61517],[18.28073,42.61969],[18.28168,42.61995],[18.28503,42.61967],[18.28861,42.61945],[18.29249,42.61817],[18.31086,42.61733],[18.3235,42.61934],[18.33193,42.62142],[18.34811,42.6216],[18.36845,42.61827],[18.37062,42.61669],[18.37631,42.60993],[18.3824,42.60094],[18.38596,42.59811],[18.39259,42.59094],[18.40075,42.58794],[18.40066,42.586],[18.40545,42.58592],[18.41875,42.57781],[18.43351,42.56805],[18.43729,42.56658],[18.43954,42.56497],[18.44008,42.5637],[18.44096,42.5567],[18.44343,42.55112],[18.44341,42.54918],[18.44244,42.53503],[18.44201,42.52551],[18.44072,42.52124],[18.44021,42.52064],[18.446,42.5169],[18.45055,42.51001],[18.44931,42.50814],[18.44407,42.50121],[18.44394,42.49871],[18.44321,42.49754],[18.4433,42.4959],[18.44223,42.49397],[18.44171,42.49318],[18.44115,42.49026],[18.44175,42.48786],[18.44102,42.48631],[18.43987,42.48498],[18.44613,42.48264],[18.45077,42.47909],[18.45274,42.4765],[18.456,42.47482],[18.45815,42.47529],[18.46102,42.47444],[18.46634,42.47203],[18.47647,42.46665],[18.4787,42.46409],[18.48239,42.45883],[18.48673,42.45316],[18.49119,42.45006],[18.49437,42.4474],[18.49621,42.44357],[18.5069,42.43435],[18.50944,42.43283],[18.51866,42.42855],[18.52484,42.4237],[18.52851,42.42188],[18.52998,42.42174],[18.52979,42.41742],[18.52518,42.41753],[18.52247,42.41689],[18.5179,42.41746],[18.51614,42.41412],[18.51443,42.413],[18.51529,42.40784],[18.51976,42.40447],[18.52746,42.40018],[18.53293,42.3979],[18.53635,42.39597],[18.53816,42.39319],[18.53787,42.39042],[18.53516,42.38933],[18.52931,42.3893],[18.52232,42.39066],[18.51919,42.39242],[18.51662,42.39288],[18.51248,42.39541],[18.50758,42.39839],[18.50435,42.40095],[18.50335,42.4065],[18.48793,42.4169],[18.48287,42.41931],[18.47862,42.42371],[18.47561,42.42659],[18.47261,42.42935],[18.47124,42.43261],[18.46591,42.43701],[18.46385,42.43961],[18.45969,42.4424],[18.44974,42.44683],[18.44562,42.44309],[18.4306,42.43708],[18.42236,42.44081],[18.42253,42.44582],[18.40219,42.45741],[18.40716,42.46456],[18.37051,42.48292],[18.35026,42.49159],[18.30503,42.5133],[18.26941,42.52582],[18.26348,42.53474],[18.24091,42.54979],[18.22254,42.56181],[18.21945,42.56775],[18.19851,42.56648],[18.18718,42.57255],[18.18443,42.57887],[18.16795,42.58532],[18.16915,42.5905],[18.19868,42.59998],[18.21327,42.59833],[18.21568,42.60453],[18.2016,42.61501],[18.18237,42.60983],[18.16401,42.61476],[18.14461,42.62524],[18.13379,42.62676],[18.1307,42.61792],[18.12178,42.61678],[18.10822,42.62171],[18.10444,42.6351],[18.03989,42.64873],[17.94891,42.64128],[17.06039,42.69152],[16.35138,42.37123],[16.23677,42.38453],[16.39023,42.73995],[15.43075,43.08152],[15.42676,43.10342],[15.63066,43.43802],[14.62071,44.3094],[14.29287,44.49332],[13.99641,44.82337],[14.00894,44.80997],[14.00808,44.80011],[13.9892,44.78854],[13.97152,44.78829],[13.95882,44.78768],[13.95367,44.7794],[13.95401,44.76916],[13.93564,44.75905],[13.88603,44.75271],[13.88535,44.76331],[13.89307,44.78049],[13.89153,44.8023],[13.86715,44.80388],[13.82578,44.82532],[13.81273,44.84467],[13.80363,44.85648],[13.78447,44.85757],[13.78601,44.88862],[13.77793,44.89044],[13.76604,44.88889],[13.7571,44.8829],[13.74901,44.88263],[13.7396,44.88856],[13.72724,44.90183],[13.72647,44.90823],[13.71639,44.90809],[13.70853,44.9134],[13.70926,44.91746],[13.71972,44.92473],[13.71925,44.92803],[13.70279,44.94304],[13.70336,44.94822],[13.70945,44.95038],[13.72398,44.94888],[13.74596,44.94366],[13.76862,44.94342],[13.76178,44.96316],[13.76116,44.98088],[13.73532,44.98052],[13.72261,44.98289],[13.69926,44.98714],[13.69017,44.99661],[13.68347,45.00984],[13.68334,45.01524],[13.6745,45.01506],[13.64605,45.03605],[13.60777,45.03763],[13.60451,45.08431],[13.60193,45.12296],[13.57035,45.13967],[13.57754,45.15724],[13.56139,45.19789],[13.57374,45.22722],[13.58211,45.24115],[13.56651,45.25347],[13.56571,45.27271],[13.55416,45.30856],[13.55372,45.31784],[13.54537,45.31771],[13.52898,45.32753],[13.53379,45.36116],[13.52818,45.37418],[13.52383,45.39419],[13.51034,45.4124],[13.51013,45.42486],[13.50659,45.4248],[13.50167,45.44254],[13.50872,45.44279],[13.5076,45.46073],[13.50045,45.46072],[13.48227,45.48675],[13.48555,45.496],[13.49894,45.50731],[13.50564,45.50971],[13.50899,45.50995],[13.62167,45.43361],[13.8722,45.40671],[13.88661,45.40668],[13.91067,45.41026],[13.92956,45.41151],[13.96571,45.41603],[14.0013,45.41872],[14.03128,45.42045],[14.0718,45.42525],[14.14737,45.43227],[14.19625,45.43889],[14.21856,45.44014],[14.27031,45.44792],[14.36464,45.45647],[14.435,45.46377],[14.46156,45.46406],[14.49866,45.46924],[14.51701,45.47116],[14.54973,45.47174],[14.55,45.47356],[14.58984,45.47778],[14.59052,45.463],[14.60996,45.46146],[14.6253,45.4726],[14.64679,45.45762],[14.66828,45.4558],[14.68457,45.46713],[14.70662,45.45196],[14.72044,45.45119],[14.75097,45.44773],[14.77808,45.44341],[14.81121,45.44158],[14.84023,45.44072],[14.85324,45.43947],[14.88264,45.43426],[14.88818,45.43488],[14.89232,45.43383],[14.89691,45.43308],[14.89941,45.43219],[14.91881,45.42948],[14.95886,45.42631],[14.96303,45.42496],[14.97741,45.4229],[14.98843,45.42304],[15.00205,45.42223],[15.00917,45.42088],[15.02142,45.42011],[15.06324,45.41444],[15.07166,45.42021],[15.08289,45.41228],[15.10267,45.40997],[15.11068,45.41041],[15.12985,45.40723],[15.16346,45.40526],[15.19316,45.40185],[15.23197,45.41199],[15.26572,45.41867],[15.30337,45.42919],[15.3636,45.44264],[15.40276,45.47625],[15.42028,45.58175],[15.42959,45.65356],[15.43753,45.70368],[15.50187,45.69852],[15.50119,45.68934],[15.53001,45.68943],[15.51454,45.70727],[15.54445,45.72027],[15.52357,45.74392],[15.54959,45.75486],[15.57286,45.76708],[15.59189,45.77472],[15.60873,45.7837],[15.66048,45.80775],[15.68703,45.82082],[15.72324,45.8379],[15.72749,45.88175],[15.73036,45.90157],[15.73166,45.91977],[15.73372,45.92915],[15.73399,45.93605],[15.73577,45.95142],[15.73618,45.95547],[15.74104,45.98073],[15.74111,45.98506],[15.7459,46.01834],[15.75028,46.04942],[15.7522,46.05527],[15.75357,46.07778],[15.75679,46.09691],[15.76007,46.11836],[15.82209,46.11376],[15.82565,46.11362],[15.82339,46.10066],[15.83092,46.10071],[15.83126,46.11988],[15.82524,46.11793],[15.79957,46.15536],[15.81723,46.16076],[15.80066,46.18612],[15.83468,46.19773],[15.85864,46.20512],[15.903,46.22],[15.88479,46.24679],[15.93969,46.26445],[15.97199,46.27457],[16.1297,46.32763],[16.17091,46.34181],[16.18926,46.3143],[16.30466,46.35117],[16.30501,46.38145],[16.2996,46.38154],[16.30063,46.38565],[16.2985,46.38985],[16.30063,46.39146],[16.30008,46.39566],[16.30213,46.39712],[16.29686,46.4008],[16.29515,46.40392],[16.28591,46.40689],[16.28208,46.41095],[16.27215,46.41194],[16.26825,46.41454],[16.26852,46.41869],[16.27003,46.42067],[16.26921,46.42699],[16.26236,46.437],[16.25839,46.44992],[16.2599,46.45275],[16.25469,46.46077],[16.25538,46.46746],[16.251,46.47227],[16.24648,46.47896],[16.23649,46.48339],[16.2369,46.4883],[16.2369,46.4981],[16.23881,46.50083],[16.24484,46.50262],[16.25825,46.50441],[16.26264,46.50799],[16.26168,46.5177],[16.26743,46.51911],[16.27112,46.52081],[16.27646,46.52109],[16.27783,46.51902],[16.28865,46.51939],[16.29672,46.51788],[16.30028,46.51581],[16.30288,46.51647],[16.30863,46.52307],[16.30918,46.52608],[16.32027,46.53154],[16.33232,46.53343],[16.33697,46.53192],[16.33684,46.53522],[16.3382,46.53795],[16.34094,46.53917],[16.33478,46.53974],[16.33163,46.54303],[16.33423,46.54689],[16.34546,46.54849],[16.34957,46.55094],[16.35326,46.55245],[16.35915,46.55009],[16.36203,46.54972],[16.36134,46.55452],[16.36449,46.55763],[16.3701,46.55838],[16.37394,46.5565],[16.37804,46.55602],[16.38434,46.55405],[16.38612,46.55141],[16.38667,46.54868],[16.38407,46.54557],[16.38804,46.54397],[16.38968,46.542],[16.39132,46.53917],[16.40022,46.54228],[16.40734,46.54162],[16.40844,46.5387],[16.40844,46.53691],[16.41268,46.53701],[16.41993,46.53333],[16.42568,46.53597],[16.43157,46.53569],[16.43527,46.53305],[16.44129,46.53107],[16.44554,46.52561],[16.44293,46.52099],[16.44334,46.51854],[16.45142,46.52156],[16.4569,46.52118],[16.45895,46.52297],[16.46251,46.52448],[16.46552,46.52467],[16.46958,46.52183],[16.47551,46.51842],[16.47648,46.51592],[16.48072,46.515],[16.48532,46.51267],[16.48544,46.51158],[16.49056,46.51044],[16.49337,46.50812],[16.49222,46.50562],[16.4921,46.50358],[16.49646,46.50012],[16.51184,46.49754],[16.51305,46.49516],[16.51662,46.49508],[16.52249,46.49112]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-dof-2017",name:"dgu.hr: Croatia 2017 Aerial imagery",type:"wms",template:"https://geoportal.dgu.hr/services/inspire/orthophoto_2017/ows?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.OrthoImagery&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",polygon:[[[16.30898,45.22981],[16.5,45.22997],[16.50001,45.21197],[16.50382,45.21198],[16.50512,45.21274],[16.50999,45.21581],[16.51263,45.21647],[16.5151,45.21845],[16.51946,45.21977],[16.52186,45.22151],[16.53074,45.22431],[16.53308,45.22445],[16.53589,45.22452],[16.5366,45.22433],[16.53725,45.22206],[16.53884,45.22048],[16.54198,45.21876],[16.54445,45.21777],[16.54772,45.21712],[16.54954,45.21688],[16.55249,45.21641],[16.55559,45.21654],[16.55883,45.21705],[16.56237,45.21855],[16.56528,45.21976],[16.56785,45.21976],[16.57133,45.2196],[16.57514,45.21974],[16.5792,45.21948],[16.58255,45.22004],[16.58755,45.22213],[16.59218,45.22426],[16.59356,45.22654],[16.59699,45.22877],[16.59808,45.22881],[16.60028,45.22828],[16.60455,45.22697],[16.60744,45.22516],[16.61451,45.22243],[16.61709,45.22137],[16.61941,45.21939],[16.62107,45.21718],[16.62278,45.21467],[16.62509,45.2124],[16.62802,45.21116],[16.63015,45.21113],[16.6343,45.21163],[16.64543,45.20517],[16.65125,45.20441],[16.65628,45.20452],[16.66168,45.20208],[16.66649,45.19945],[16.67051,45.19857],[16.67809,45.19871],[16.68349,45.19727],[16.68939,45.19491],[16.69429,45.1934],[16.69911,45.1934],[16.70409,45.1947],[16.71121,45.19951],[16.71615,45.20184],[16.72063,45.20205],[16.72611,45.20258],[16.73051,45.20467],[16.7326,45.20461],[16.73972,45.20143],[16.74889,45.1975],[16.75328,45.19665],[16.75965,45.19703],[16.76329,45.1957],[16.77124,45.19119],[16.77706,45.18948],[16.79109,45.18603],[16.80273,45.18299],[16.80691,45.18254],[16.81516,45.18187],[16.82178,45.1824],[16.8286,45.18402],[16.83484,45.18547],[16.84116,45.18842],[16.84438,45.19148],[16.84706,45.19367],[16.84723,45.19526],[16.84623,45.1975],[16.84775,45.20171],[16.85292,45.20115],[16.85778,45.20225],[16.86322,45.20821],[16.86724,45.21193],[16.86833,45.21635],[16.8721,45.21718],[16.87737,45.216],[16.88181,45.21647],[16.88508,45.22137],[16.88432,45.22296],[16.88684,45.22644],[16.88742,45.23062],[16.88525,45.23428],[16.88809,45.24136],[16.88658,45.24295],[16.89429,45.24401],[16.89814,45.24713],[16.90442,45.24749],[16.91237,45.25061],[16.91681,45.25509],[16.91874,45.25975],[16.91782,45.26275],[16.92259,45.26723],[16.92351,45.27142],[16.9282,45.27307],[16.93331,45.27307],[16.93465,45.26965],[16.93699,45.26158],[16.94913,45.25668],[16.94897,45.25468],[16.94637,45.25321],[16.9344,45.24878],[16.93054,45.24206],[16.93088,45.23682],[16.93264,45.22703],[16.93875,45.22426],[16.94361,45.22431],[16.95031,45.22514],[16.95583,45.22886],[16.95943,45.22844],[16.96362,45.22644],[16.96923,45.22384],[16.97559,45.22443],[16.97911,45.22573],[16.9864,45.22066],[16.99201,45.21889],[17.00004,45.21783],[17.00314,45.21889],[17.00415,45.21399],[17.00992,45.21081],[17.01771,45.20951],[17.02382,45.21087],[17.03437,45.21983],[17.04065,45.20414],[17.0507,45.19736],[17.0605,45.196],[17.06619,45.18904],[17.10262,45.17475],[17.10957,45.17334],[17.13125,45.16295],[17.14055,45.16047],[17.16542,45.14694],[17.17932,45.14352],[17.19096,45.14328],[17.2031,45.14659],[17.2144,45.14381],[17.22244,45.14257],[17.23492,45.14376],[17.2463,45.14263],[17.25141,45.1444],[17.25903,45.15332],[17.26389,45.16619],[17.26422,45.17257],[17.26824,45.17404],[17.27318,45.18585],[17.28264,45.17186],[17.29554,45.17233],[17.30659,45.17375],[17.30525,45.16619],[17.30927,45.16159],[17.32752,45.16295],[17.32225,45.15604],[17.32644,45.14895],[17.3426,45.13809],[17.35968,45.13608],[17.38312,45.13407],[17.40607,45.13141],[17.41754,45.13253],[17.4275,45.13655],[17.43814,45.14582],[17.44098,45.15639],[17.44509,45.15769],[17.44827,45.15627],[17.45086,45.14399],[17.44425,45.13265],[17.44408,45.1281],[17.44768,45.12456],[17.4589,45.12249],[17.47456,45.12267],[17.48821,45.13283],[17.48746,45.12515],[17.47699,45.11894],[17.47347,45.11239],[17.47757,45.10795],[17.48821,45.10589],[17.49801,45.10837],[17.50362,45.11109],[17.51283,45.10494],[17.52187,45.10488],[17.53594,45.10665],[17.54372,45.11292],[17.54582,45.11835],[17.54414,45.12544],[17.5495,45.12663],[17.55277,45.12184],[17.55059,45.11321],[17.54992,45.10701],[17.55729,45.10417],[17.5696,45.10654],[17.57445,45.11286],[17.57839,45.11256],[17.58358,45.10843],[17.59045,45.10281],[17.6005,45.10181],[17.61063,45.106],[17.61599,45.10967],[17.62629,45.1102],[17.62989,45.1151],[17.63483,45.11971],[17.65341,45.1281],[17.66363,45.13094],[17.67225,45.12934],[17.6777,45.12426],[17.68808,45.11357],[17.70047,45.11138],[17.7091,45.11032],[17.71747,45.10394],[17.73238,45.09584],[17.75616,45.08254],[17.76528,45.0807],[17.76905,45.08112],[17.77709,45.08124],[17.78504,45.0768],[17.78848,45.07308],[17.80824,45.05663],[17.83545,45.04327],[17.85061,45.04019],[17.86593,45.04114],[17.88418,45.04794],[17.90654,45.05882],[17.93024,45.07438],[17.94171,45.08141],[17.94221,45.08626],[17.9366,45.09483],[17.93576,45.1037],[17.94146,45.10813],[17.96105,45.10843],[17.97202,45.11292],[17.98106,45.12414],[17.9824,45.13543],[17.9948,45.14488],[18.0097,45.14872],[18.01732,45.14618],[18.02126,45.13868],[18.02862,45.12432],[18.03733,45.12196],[18.04462,45.12385],[18.04822,45.13631],[18.05709,45.13962],[18.06597,45.13909],[18.07242,45.13182],[18.08054,45.119],[18.06856,45.1115],[18.06664,45.10772],[18.06856,45.10352],[18.07652,45.10057],[18.08967,45.09714],[18.10139,45.08484],[18.1106,45.07863],[18.12115,45.07621],[18.1394,45.08183],[18.15062,45.08153],[18.16695,45.07396],[18.18286,45.07343],[18.19994,45.07562],[18.21192,45.08177],[18.22046,45.08827],[18.22699,45.09856],[18.22473,45.10287],[18.2161,45.10919],[18.21309,45.11705],[18.21493,45.12202],[18.23561,45.13194],[18.25755,45.13614],[18.26718,45.13318],[18.2722,45.12781],[18.27631,45.11174],[18.28929,45.10996],[18.3021,45.11191],[18.3098,45.10376],[18.32169,45.09696],[18.33676,45.09808],[18.36875,45.10269],[18.40015,45.10547],[18.41924,45.10518],[18.43088,45.0985],[18.43749,45.08265],[18.44804,45.07639],[18.46814,45.05995],[18.48983,45.05516],[18.51419,45.05344],[18.52299,45.05634],[18.526,45.05155],[18.52474,45.04303],[18.53161,45.03995],[18.54057,45.0409],[18.54467,45.05539],[18.54434,45.06137],[18.55598,45.07065],[18.56401,45.07432],[18.56703,45.06551],[18.57691,45.06154],[18.58704,45.06846],[18.58771,45.08384],[18.60211,45.07645],[18.60856,45.07627],[18.59843,45.06971],[18.59935,45.06409],[18.60864,45.05805],[18.64063,45.05776],[18.64725,45.05421],[18.6588,45.05326],[18.66466,45.05817],[18.68861,45.03764],[18.70109,45.03439],[18.71155,45.03475],[18.71892,45.02054],[18.73282,45.01545],[18.72621,45.00622],[18.72026,44.99728],[18.72679,44.99017],[18.74613,44.98987],[18.76163,44.99591],[18.77251,44.99485],[18.78214,44.99165],[18.78901,44.99224],[18.7782,44.97596],[18.78214,44.95469],[18.79813,44.94485],[18.79579,44.93987],[18.78398,44.93857],[18.76271,44.94894],[18.74764,44.9455],[18.74471,44.93786],[18.74655,44.9263],[18.76338,44.91978],[18.75635,44.90792],[18.7633,44.8992],[18.78942,44.88449],[18.81915,44.87339],[18.83925,44.8547],[18.85055,44.849],[18.87835,44.84817],[18.92499,44.8468],[18.96225,44.84597],[18.996,44.84823],[19.02647,44.85137],[19.02756,44.85927],[19.01031,44.88508],[18.99708,44.89801],[18.99675,44.90679],[19.00562,44.91331],[19.02513,44.91871],[19.03284,44.91841],[19.03711,44.9148],[19.04021,44.91764],[19.09204,44.9164],[19.09514,44.97513],[19.08643,44.97779],[19.06357,44.97797],[19.08634,44.98608],[19.09656,44.99355],[19.09714,45.10453],[19.08325,45.11717],[19.08333,45.12745],[19.09354,45.1395],[19.11297,45.1343],[19.11908,45.12993],[19.13491,45.12692],[19.20164,45.17959],[19.21077,45.1852],[19.22609,45.18077],[19.23564,45.17127],[19.24803,45.17269],[19.27726,45.19446],[19.29434,45.19458],[19.29316,45.20196],[19.31561,45.20349],[19.31988,45.19252],[19.40162,45.19073],[19.40389,45.23548],[19.40191,45.23573],[19.3658,45.23519],[19.32988,45.23561],[19.2979,45.23909],[19.26369,45.24472],[19.26415,45.25153],[19.26478,45.25374],[19.25226,45.25438],[19.22676,45.2685],[19.20077,45.26891],[19.18444,45.27],[19.18113,45.27092],[19.17598,45.27395],[19.16773,45.27704],[19.1532,45.28096],[19.11661,45.29513],[19.1079,45.30137],[19.10133,45.31368],[19.102,45.32446],[19.10003,45.33149],[19.09426,45.33823],[19.07738,45.34462],[19.06097,45.34512],[19.05687,45.34571],[19.05377,45.34953],[19.04665,45.35233],[19.02472,45.35418],[19.01739,45.36021],[19.00923,45.36165],[19.00579,45.36083],[18.98825,45.36939],[18.97736,45.37577],[18.9741,45.38142],[18.97435,45.38718],[18.97879,45.39221],[18.98678,45.39609],[19.01345,45.39829],[19.01538,45.40732],[19.01597,45.42892],[19.0145,45.43459],[19.00508,45.43879],[18.997,45.44384],[18.99336,45.44854],[18.99248,45.45494],[18.99419,45.45823],[18.99524,45.47183],[18.99537,45.47391],[18.99591,45.48099],[19.00073,45.48768],[19.00596,45.49408],[19.01404,45.49226],[19.01957,45.48941],[19.03141,45.48422],[19.04184,45.48213],[19.05088,45.48204],[19.05766,45.48369],[19.07831,45.51814],[18.99206,45.54491],[18.98431,45.54081],[18.97196,45.5389],[18.94705,45.53685],[18.9306,45.54503],[18.92825,45.5489],[18.93474,45.55245],[18.93692,45.5567],[18.93642,45.56271],[18.93056,45.56409],[18.93144,45.56828],[18.91385,45.57112],[18.91084,45.56998],[18.90808,45.57012],[18.90242,45.57188],[18.90117,45.57833],[18.90833,45.59295],[18.91427,45.59755],[18.92507,45.595],[18.93152,45.59544],[18.93139,45.60889],[18.94923,45.60886],[18.94676,45.6141],[18.94957,45.62072],[18.95593,45.62403],[18.95626,45.62628],[18.95191,45.63325],[18.94643,45.6367],[18.94404,45.63679],[18.93981,45.63515],[18.93684,45.63869],[18.93751,45.64185],[18.94709,45.64071],[18.95451,45.64294],[18.95936,45.6454],[18.96012,45.68346],[18.9507,45.68846],[18.93391,45.69069],[18.92968,45.69402],[18.92583,45.69829],[18.92202,45.7023],[18.92805,45.70203],[18.92985,45.70311],[18.93424,45.70077],[18.94391,45.70162],[18.94709,45.70004],[18.9494,45.69604],[18.95241,45.69352],[18.95919,45.69186],[18.96062,45.70975],[18.96016,45.73185],[18.93328,45.73234],[18.93345,45.74777],[18.91691,45.74771],[18.90561,45.74766],[18.87927,45.74733],[18.87902,45.75969],[18.86592,45.76337],[18.85943,45.76673],[18.85574,45.7726],[18.866,45.77791],[18.87328,45.78159],[18.88061,45.78276],[18.88115,45.78419],[18.88203,45.82447],[18.88007,45.82348],[18.87617,45.8189],[18.87307,45.81026],[18.86248,45.80877],[18.8565,45.8114],[18.85373,45.81102],[18.85289,45.81577],[18.85114,45.81691],[18.85784,45.82581],[18.86005,45.83211],[18.86165,45.84448],[18.86056,45.85702],[18.87458,45.85609],[18.88233,45.85635],[18.88266,45.88468],[18.87902,45.88873],[18.87429,45.89488],[18.87793,45.89844],[18.88354,45.90118],[18.8835,45.92227],[18.87998,45.92087],[18.8758,45.91924],[18.87161,45.92017],[18.86918,45.9216],[18.86617,45.92296],[18.86257,45.92299],[18.86001,45.92116],[18.85984,45.91793],[18.86248,45.91303],[18.83033,45.90791],[18.82623,45.91743],[18.82036,45.91772],[18.81521,45.91536],[18.80274,45.90365],[18.80374,45.90144],[18.80814,45.89579],[18.80831,45.89101],[18.80609,45.88171],[18.79801,45.88151],[18.79064,45.88142],[18.78557,45.88378],[18.78034,45.88905],[18.77427,45.89136],[18.76393,45.89197],[18.76439,45.89447],[18.75962,45.89855],[18.75765,45.89951],[18.75438,45.89972],[18.75422,45.90211],[18.75137,45.90292],[18.74852,45.90272],[18.73852,45.90371],[18.72265,45.90788],[18.71365,45.91391],[18.70883,45.9183],[18.70703,45.92066],[18.70502,45.92093],[18.69954,45.92049],[18.68869,45.91895],[18.67299,45.91696],[18.67027,45.9149],[18.66462,45.91938],[18.65729,45.91935],[18.65566,45.91755],[18.6552,45.91536],[18.65587,45.90351],[18.65801,45.89963],[18.65708,45.89829],[18.6521,45.89812],[18.64402,45.89465],[18.63628,45.88972],[18.6372,45.88652],[18.63829,45.88288],[18.64775,45.87539],[18.63904,45.87186],[18.6333,45.87929],[18.62736,45.8792],[18.62334,45.87402],[18.62229,45.85938],[18.60906,45.85372],[18.61392,45.84696],[18.61719,45.84118],[18.59617,45.83576],[18.59885,45.82852],[18.58704,45.82129],[18.56829,45.8151],[18.57021,45.80425],[18.55757,45.80646],[18.55539,45.80442],[18.55212,45.79695],[18.54861,45.79683],[18.54308,45.79806],[18.53756,45.79567],[18.53278,45.79619],[18.52893,45.79561],[18.51612,45.78784],[18.5095,45.78854],[18.50858,45.7931],[18.50314,45.79736],[18.49401,45.79858],[18.48413,45.79491],[18.48028,45.78638],[18.47743,45.77003],[18.46504,45.76915],[18.45742,45.77248],[18.44922,45.77132],[18.44051,45.76033],[18.44344,45.75677],[18.44336,45.74187],[18.43599,45.7417],[18.42728,45.74479],[18.41849,45.74392],[18.41036,45.74222],[18.403,45.74766],[18.40475,45.75595],[18.40057,45.75952],[18.39864,45.75887],[18.39521,45.76466],[18.38533,45.76764],[18.3803,45.76781],[18.36506,45.77628],[18.35987,45.77511],[18.35033,45.76682],[18.34028,45.75291],[18.33249,45.75771],[18.31491,45.75952],[18.30871,45.75998],[18.3,45.76296],[18.29531,45.76372],[18.29054,45.76325],[18.27706,45.75852],[18.25906,45.76425],[18.24993,45.76547],[18.24633,45.76507],[18.2362,45.7792],[18.22933,45.78305],[18.21652,45.7837],[18.2048,45.78551],[18.19576,45.78977],[18.18763,45.79041],[18.17826,45.78767],[18.17055,45.77914],[18.1631,45.78183],[18.15757,45.78837],[18.14501,45.79175],[18.13538,45.79123],[18.12374,45.79257],[18.1168,45.79],[18.10951,45.78241],[18.10507,45.77435],[18.09335,45.76904],[18.08054,45.76834],[18.06028,45.77447],[18.04763,45.77762],[18.03465,45.77908],[18.01983,45.78422],[18.00719,45.79485],[18.00359,45.7973],[17.98282,45.79707],[17.97369,45.79269],[17.96901,45.79251],[17.9598,45.79461],[17.95352,45.7959],[17.94556,45.79485],[17.93518,45.79181],[17.92873,45.78948],[17.9196,45.7914],[17.90763,45.79537],[17.89457,45.79321],[17.88276,45.78755],[17.86811,45.77862],[17.86526,45.77067],[17.85957,45.77324],[17.85831,45.77762],[17.85655,45.78381],[17.85262,45.78702],[17.84341,45.78866],[17.83713,45.79339],[17.83629,45.80483],[17.83202,45.81131],[17.82339,45.81359],[17.8146,45.81172],[17.81075,45.80734],[17.8043,45.80833],[17.79585,45.81283],[17.78756,45.81971],[17.77374,45.82],[17.76394,45.81849],[17.75473,45.82438],[17.74937,45.83074],[17.72744,45.83477],[17.7106,45.83547],[17.70081,45.84072],[17.68565,45.84148],[17.67025,45.83833],[17.66053,45.84521],[17.65316,45.85507],[17.65249,45.86655],[17.6401,45.88701],[17.62863,45.90607],[17.61306,45.91586],[17.59313,45.92582],[17.57404,45.93991],[17.55947,45.9423],[17.53301,45.93793],[17.51517,45.94276],[17.49198,45.94556],[17.46778,45.94725],[17.4594,45.94905],[17.44835,45.95377],[17.43638,45.95377],[17.42507,45.95051],[17.42156,45.94498],[17.42474,45.93729],[17.43219,45.9324],[17.42566,45.93158],[17.41704,45.93403],[17.41511,45.9409],[17.41117,45.94306],[17.40657,45.94236],[17.39426,45.93514],[17.39024,45.93723],[17.39351,45.94428],[17.39049,45.9501],[17.39317,45.95522],[17.39635,45.96093],[17.39694,45.9643],[17.38748,45.96867],[17.38162,45.97146],[17.37308,45.97583],[17.38053,45.9838],[17.37936,45.99119],[17.37366,45.99398],[17.36194,45.99514],[17.35825,45.9927],[17.35591,45.98624],[17.35532,45.97792],[17.35231,45.97944],[17.34829,45.9863],[17.34377,45.99631],[17.33816,45.99951],[17.32912,45.99828],[17.32267,45.99439],[17.3153,45.99404],[17.30843,45.99154],[17.31011,45.99834],[17.30902,46.00335],[17.30182,46.00707],[17.29612,46.00643],[17.28356,46.00457],[17.2767,46.00759],[17.27092,46.01207],[17.26272,46.01265],[17.2762,46.01533],[17.27795,46.01771],[17.29629,46.02004],[17.30173,46.02643],[17.29813,46.03422],[17.28817,46.03556],[17.26673,46.03672],[17.26255,46.04282],[17.27594,46.05276],[17.27561,46.05758],[17.26908,46.06142],[17.25434,46.06183],[17.25669,46.06485],[17.25526,46.06764],[17.24488,46.06758],[17.24429,46.07071],[17.24396,46.07774],[17.23785,46.08181],[17.22529,46.08436],[17.22813,46.0904],[17.23751,46.09447],[17.23885,46.09946],[17.23366,46.10329],[17.22194,46.11398],[17.21624,46.11734],[17.21005,46.11699],[17.18392,46.11177],[17.18643,46.1199],[17.18342,46.12698],[17.19062,46.13092],[17.19179,46.13522],[17.18375,46.15227],[17.17153,46.16028],[17.16366,46.16167],[17.16198,46.17292],[17.15294,46.17617],[17.1377,46.17547],[17.13084,46.17234],[17.12866,46.17304],[17.13017,46.17918],[17.1238,46.18266],[17.11208,46.18185],[17.10722,46.18428],[17.10705,46.18857],[17.09902,46.1917],[17.08646,46.19344],[17.08327,46.19135],[17.07808,46.19286],[17.0749,46.19564],[17.06921,46.20492],[17.05748,46.20631],[17.05363,46.20631],[17.00641,46.22635],[16.99569,46.22612],[16.98983,46.22821],[16.97844,46.22821],[16.97777,46.2311],[16.98012,46.24049],[16.97559,46.24616],[16.96638,46.24547],[16.96287,46.24338],[16.95399,46.24442],[16.94344,46.25161],[16.93858,46.25774],[16.92519,46.26365],[16.91732,46.26434],[16.91263,46.26816],[16.90509,46.27789],[16.89119,46.28228],[16.89119,46.28633],[16.89019,46.30253],[16.88365,46.306],[16.88047,46.31364],[16.88198,46.32093],[16.87897,46.32544],[16.88583,46.33434],[16.88148,46.3407],[16.87277,46.34868],[16.86959,46.34775],[16.87361,46.35365],[16.86808,46.35769],[16.86172,46.35873],[16.85234,46.36451],[16.84329,46.36786],[16.84329,46.37399],[16.83743,46.37895],[16.82873,46.37768],[16.82069,46.37688],[16.81231,46.38011],[16.80896,46.3808],[16.80444,46.38739],[16.79624,46.39028],[16.78502,46.38947],[16.77899,46.38473],[16.77296,46.38877],[16.76509,46.38843],[16.7609,46.38566],[16.75789,46.39097],[16.75052,46.39224],[16.74466,46.38981],[16.74466,46.39848],[16.74231,46.40217],[16.73511,46.4046],[16.7192,46.40206],[16.70966,46.40541],[16.69994,46.42007],[16.66846,46.46184],[16.64719,46.46773],[16.63262,46.46934],[16.62559,46.47188],[16.61939,46.47165],[16.60968,46.47961],[16.59578,46.47995],[16.58004,46.47638],[16.57032,46.47695],[16.55592,46.4841],[16.54437,46.48076],[16.53499,46.48387],[16.52243,46.48295],[16.52377,46.49045],[16.51992,46.49517],[16.50987,46.49875],[16.49815,46.50001],[16.49295,46.5037],[16.49228,46.50981],[16.48592,46.51408],[16.46867,46.52237],[16.46532,46.52468],[16.45929,46.52422],[16.45561,46.52122],[16.44338,46.52018],[16.4459,46.52641],[16.43786,46.53274],[16.43032,46.53643],[16.41826,46.53597],[16.41073,46.53827],[16.40353,46.543],[16.39817,46.543],[16.3913,46.54012],[16.38695,46.5453],[16.38092,46.54461],[16.37137,46.53366],[16.35161,46.55198],[16.34609,46.55025],[16.33369,46.54622],[16.33219,46.54277],[16.33604,46.53297],[16.32432,46.5324],[16.31393,46.52952],[16.3074,46.52422],[16.30204,46.51661],[16.29467,46.51799],[16.28965,46.51938],[16.28144,46.51915],[16.27558,46.52122],[16.26972,46.52064],[16.26553,46.51707],[16.27391,46.51016],[16.25917,46.50428],[16.26319,46.49448],[16.24326,46.48837],[16.2374,46.48583],[16.2364,46.48318],[16.24544,46.47961],[16.25197,46.47026],[16.25465,46.46023],[16.25917,46.45377],[16.25934,46.44558],[16.26336,46.43415],[16.26721,46.42896],[16.26955,46.42122],[16.26738,46.41522],[16.26989,46.41129],[16.28044,46.41002],[16.29132,46.40425],[16.30054,46.39697],[16.29869,46.38762],[16.29869,46.38311],[16.2997,46.37942],[16.30489,46.3793],[16.30898,45.22981]],[[15.45776,43.0729],[15.43991,43.09697],[15.45639,43.10499],[16.30096,43.2312],[15.91713,43.51022],[15.8828,43.53461],[15.87353,43.56225],[15.86867,43.56547],[15.86851,43.58153],[15.87264,43.58117],[15.89619,43.57691],[15.91202,43.57501],[15.91561,43.58212],[15.90552,43.59036],[15.90545,43.59499],[15.91558,43.60086],[15.91328,43.60843],[16.12836,43.60933],[16.12499,44.14937],[16.3091,44.14984],[16.30916,44.14974],[16.31098,44.1463],[16.31266,44.14387],[16.31276,44.14256],[16.31157,44.12793],[16.31525,44.12639],[16.31598,44.125],[16.3168,44.12172],[16.32072,44.11655],[16.33606,44.11467],[16.3383,44.11357],[16.35283,44.10791],[16.36216,44.10334],[16.36388,44.10159],[16.36616,44.09926],[16.36664,44.09827],[16.36668,44.09748],[16.36514,44.09516],[16.37192,44.08445],[16.37753,44.08405],[16.37814,44.08379],[16.38276,44.08597],[16.38391,44.08599],[16.38536,44.08569],[16.38659,44.08507],[16.38961,44.08289],[16.39672,44.08247],[16.39834,44.08239],[16.40072,44.08215],[16.40256,44.08211],[16.42785,44.0856],[16.42923,44.08519],[16.4303,44.08448],[16.44441,44.0688],[16.44508,44.06805],[16.44565,44.06696],[16.44472,44.06462],[16.44389,44.06191],[16.43893,44.05434],[16.4396,44.049],[16.44177,44.04244],[16.44204,44.03718],[16.44144,44.03546],[16.43997,44.03188],[16.44156,44.03107],[16.44345,44.0311],[16.44897,44.03042],[16.45525,44.03049],[16.45923,44.03076],[16.46266,44.03126],[16.46731,44.03221],[16.46936,44.03212],[16.48295,44.0317],[16.50428,44.02631],[16.50539,44.02518],[16.5187,44.00519],[16.53769,43.98917],[16.53995,43.98722],[16.54742,43.97499],[16.54784,43.97359],[16.55289,43.9553],[16.58975,43.94507],[16.59094,43.94383],[16.59163,43.94198],[16.59304,43.93928],[16.60141,43.93673],[16.60252,43.93566],[16.6029,43.93479],[16.60614,43.9266],[16.61033,43.92476],[16.61114,43.92396],[16.61148,43.92265],[16.61232,43.92],[16.6123,43.91601],[16.61539,43.91597],[16.62603,43.90769],[16.62867,43.90324],[16.64786,43.88983],[16.64922,43.88855],[16.65117,43.88764],[16.65797,43.88589],[16.66067,43.88414],[16.66243,43.88224],[16.66266,43.88149],[16.66505,43.87972],[16.66869,43.87984],[16.67011,43.87971],[16.67173,43.87885],[16.67495,43.87646],[16.6753,43.87581],[16.68634,43.86798],[16.70704,43.86016],[16.70857,43.85933],[16.71315,43.85609],[16.7138,43.85502],[16.71809,43.84742],[16.71824,43.8464],[16.71843,43.8444],[16.72107,43.84185],[16.72161,43.84086],[16.72136,43.83616],[16.7236,43.83248],[16.72362,43.83172],[16.72335,43.83075],[16.72144,43.8294],[16.72347,43.82627],[16.72351,43.82517],[16.72268,43.82325],[16.72213,43.82148],[16.72148,43.81899],[16.72136,43.81635],[16.72215,43.80778],[16.72601,43.8053],[16.72799,43.80221],[16.72956,43.80045],[16.72977,43.7994],[16.72915,43.79709],[16.72868,43.79633],[16.7304,43.79518],[16.73067,43.79396],[16.7331,43.79121],[16.73685,43.78775],[16.74221,43.78312],[16.74761,43.77845],[16.7541,43.77221],[16.75707,43.77269],[16.76105,43.77219],[16.76113,43.77177],[16.76613,43.7717],[16.77987,43.77006],[16.80222,43.76488],[16.80474,43.7634],[16.81478,43.75664],[16.81822,43.75048],[16.81828,43.74988],[16.82743,43.73415],[16.83352,43.73241],[16.83664,43.7307],[16.85083,43.72098],[16.86975,43.71255],[16.87562,43.70733],[16.87926,43.70099],[16.87915,43.69905],[16.88031,43.69583],[16.88522,43.69357],[16.88617,43.6923],[16.88811,43.68718],[16.9022,43.68081],[16.91083,43.67631],[16.91177,43.67521],[16.91319,43.67263],[16.9151,43.67026],[16.91964,43.66446],[16.91987,43.66365],[16.9224,43.66007],[16.93025,43.65648],[16.93092,43.65531],[16.93161,43.65321],[16.9349,43.64722],[16.93502,43.6448],[16.96136,43.6273],[16.96701,43.62375],[16.97371,43.61948],[16.97438,43.61853],[16.98089,43.60728],[16.98424,43.6034],[16.98573,43.60235],[16.98596,43.6015],[16.98907,43.59903],[16.99,43.59768],[16.99288,43.59344],[16.99533,43.59303],[16.99672,43.59205],[16.99824,43.59048],[16.99849,43.58974],[17.00863,43.58314],[17.00982,43.58233],[17.01034,43.58107],[17.0107,43.58011],[17.01059,43.5779],[17.0165,43.5733],[17.02349,43.56986],[17.02745,43.56859],[17.0318,43.5659],[17.03477,43.56426],[17.03862,43.56096],[17.04442,43.55911],[17.05219,43.5578],[17.05378,43.55721],[17.05702,43.55681],[17.05702,43.55466],[17.06636,43.55462],[17.06808,43.55331],[17.06879,43.55202],[17.06852,43.55117],[17.07149,43.54991],[17.07346,43.54927],[17.07452,43.54838],[17.08097,43.54524],[17.08189,43.54413],[17.08518,43.54105],[17.08683,43.53952],[17.08861,43.53847],[17.09226,43.5361],[17.09602,43.53387],[17.09682,43.53308],[17.10538,43.53055],[17.10685,43.52958],[17.10814,43.52757],[17.10963,43.5258],[17.1252,43.52018],[17.12726,43.51848],[17.13247,43.5127],[17.13458,43.51098],[17.13502,43.51009],[17.13737,43.50974],[17.13969,43.50972],[17.14176,43.50901],[17.14208,43.5086],[17.14415,43.50792],[17.14524,43.50711],[17.14576,43.5059],[17.14771,43.50368],[17.15204,43.49746],[17.15583,43.49647],[17.16031,43.49604],[17.17436,43.49275],[17.17884,43.4963],[17.18005,43.49774],[17.18154,43.4982],[17.18405,43.49902],[17.18771,43.49984],[17.19003,43.49967],[17.19537,43.49993],[17.20701,43.49982],[17.2122,43.49881],[17.21509,43.49966],[17.21637,43.49946],[17.22093,43.49976],[17.22801,43.49976],[17.23196,43.49837],[17.23435,43.4967],[17.23701,43.49603],[17.23822,43.49496],[17.2404,43.49427],[17.24187,43.49351],[17.24561,43.49263],[17.24785,43.49156],[17.25275,43.48933],[17.25855,43.4861],[17.26052,43.48547],[17.26225,43.48455],[17.26728,43.48271],[17.26958,43.48124],[17.27243,43.47973],[17.27276,43.47849],[17.27632,43.47642],[17.27731,43.47519],[17.28139,43.47296],[17.28264,43.47171],[17.28532,43.46933],[17.28624,43.46797],[17.2866,43.46536],[17.28913,43.46188],[17.28899,43.45998],[17.28991,43.45711],[17.28926,43.4541],[17.28804,43.45238],[17.28972,43.44916],[17.28959,43.44726],[17.28865,43.4458],[17.28878,43.44351],[17.28788,43.44156],[17.28842,43.43857],[17.28733,43.43422],[17.28549,43.43054],[17.28216,43.42595],[17.27814,43.42043],[17.2745,43.41634],[17.27216,43.413],[17.26918,43.41219],[17.26382,43.40792],[17.26217,43.40486],[17.26075,43.40301],[17.25664,43.40208],[17.26104,43.3989],[17.26414,43.39479],[17.26516,43.39138],[17.26632,43.386],[17.26791,43.37838],[17.26885,43.3732],[17.27251,43.36888],[17.27391,43.36757],[17.27446,43.3659],[17.27438,43.36444],[17.27699,43.36022],[17.27712,43.35861],[17.27762,43.35677],[17.27756,43.35555],[17.27873,43.35526],[17.28313,43.34764],[17.29342,43.33131],[17.30111,43.31927],[17.30266,43.31749],[17.30441,43.31584],[17.30598,43.31389],[17.3095,43.30684],[17.31084,43.30487],[17.31178,43.30308],[17.31337,43.30084],[17.31383,43.29974],[17.31784,43.296],[17.32055,43.29333],[17.32438,43.28912],[17.32627,43.28879],[17.32901,43.28795],[17.33012,43.2867],[17.33138,43.28491],[17.33266,43.28267],[17.33254,43.28088],[17.3335,43.27866],[17.33408,43.27704],[17.33412,43.2747],[17.33478,43.27417],[17.33552,43.27283],[17.33602,43.2714],[17.33582,43.27005],[17.33559,43.26978],[17.33641,43.26898],[17.33653,43.26762],[17.33611,43.26646],[17.33564,43.26588],[17.3389,43.26232],[17.3407,43.25991],[17.341,43.25936],[17.34344,43.25777],[17.34447,43.25629],[17.34462,43.25537],[17.34752,43.25508],[17.35451,43.25395],[17.36082,43.25189],[17.36824,43.25169],[17.37011,43.25216],[17.37294,43.25218],[17.37646,43.252],[17.379,43.25122],[17.3817,43.25009],[17.38471,43.25012],[17.39222,43.24854],[17.39827,43.24763],[17.40078,43.24631],[17.40786,43.24182],[17.41663,43.23641],[17.42366,43.23203],[17.4234,43.22816],[17.42638,43.22814],[17.43036,43.22016],[17.43233,43.21821],[17.4327,43.21716],[17.43304,43.21537],[17.43274,43.21455],[17.43303,43.21187],[17.43455,43.21052],[17.43485,43.20942],[17.43455,43.20771],[17.43571,43.20556],[17.43552,43.20439],[17.43515,43.20269],[17.4345,43.19824],[17.43352,43.19711],[17.43303,43.19456],[17.43217,43.19342],[17.43154,43.19119],[17.43043,43.18933],[17.43053,43.18794],[17.43172,43.18519],[17.43346,43.18123],[17.43591,43.18263],[17.438,43.18288],[17.44028,43.18232],[17.44367,43.18111],[17.44761,43.18015],[17.45085,43.17971],[17.45279,43.17889],[17.4534,43.17815],[17.45524,43.17755],[17.45715,43.17643],[17.45855,43.1755],[17.45945,43.17458],[17.46034,43.17377],[17.46214,43.17318],[17.46327,43.17248],[17.46514,43.17164],[17.46668,43.17045],[17.46946,43.16877],[17.47561,43.16536],[17.47604,43.16418],[17.47869,43.1628],[17.48447,43.16096],[17.48814,43.16012],[17.49152,43.15872],[17.49323,43.15725],[17.49458,43.15644],[17.49585,43.15634],[17.49633,43.15603],[17.50096,43.15453],[17.50323,43.15328],[17.5041,43.15307],[17.5075,43.15153],[17.50916,43.1501],[17.51062,43.14917],[17.51568,43.14763],[17.52138,43.1462],[17.528,43.14377],[17.53268,43.14149],[17.53599,43.1394],[17.54105,43.13789],[17.54608,43.13624],[17.54735,43.1356],[17.54932,43.13385],[17.5514,43.13349],[17.55324,43.13339],[17.55662,43.1323],[17.55868,43.13126],[17.56014,43.13017],[17.56376,43.12737],[17.56486,43.12661],[17.5672,43.12577],[17.56843,43.12491],[17.5703,43.12428],[17.57361,43.12358],[17.57736,43.12229],[17.5818,43.12095],[17.58489,43.11943],[17.58694,43.11874],[17.58996,43.11716],[17.59436,43.11478],[17.59802,43.1129],[17.60069,43.11105],[17.60222,43.11094],[17.60363,43.11035],[17.60494,43.10942],[17.60589,43.1083],[17.61323,43.1047],[17.62194,43.10018],[17.62776,43.09777],[17.629,43.09757],[17.63049,43.09706],[17.63221,43.09613],[17.63334,43.09557],[17.63715,43.09477],[17.63904,43.09354],[17.64095,43.09229],[17.64304,43.09121],[17.64429,43.09027],[17.64522,43.08805],[17.65012,43.07925],[17.65267,43.07481],[17.65291,43.07368],[17.65295,43.07287],[17.65387,43.07064],[17.65413,43.07026],[17.65533,43.06911],[17.65625,43.06685],[17.65718,43.06482],[17.65969,43.06062],[17.66288,43.05543],[17.66398,43.05285],[17.66521,43.05078],[17.66695,43.04723],[17.669,43.04299],[17.67219,43.0381],[17.67612,43.03219],[17.67831,43.02874],[17.67986,43.0277],[17.68069,43.02618],[17.68167,43.0252],[17.68268,43.02425],[17.68431,43.02197],[17.68636,43.02069],[17.68689,43.01954],[17.68763,43.01635],[17.68846,43.01132],[17.69535,43.00363],[17.69763,43.00099],[17.69817,42.99964],[17.70499,42.98764],[17.70556,42.98527],[17.70669,42.98351],[17.7085,42.98023],[17.71408,42.97496],[17.71384,42.9707],[17.70105,42.96614],[17.68885,42.9633],[17.68698,42.96293],[17.68241,42.96273],[17.67891,42.96188],[17.67431,42.96167],[17.67178,42.96069],[17.67,42.95984],[17.66802,42.95943],[17.66662,42.95952],[17.66291,42.9585],[17.66149,42.95834],[17.66003,42.95843],[17.65517,42.95706],[17.65359,42.95674],[17.65131,42.95563],[17.64944,42.95519],[17.64297,42.95113],[17.64175,42.95083],[17.63991,42.95074],[17.63492,42.94772],[17.63317,42.94633],[17.63199,42.9452],[17.62938,42.94451],[17.62762,42.94357],[17.62611,42.9432],[17.62282,42.94183],[17.62121,42.94083],[17.61881,42.94012],[17.61537,42.93951],[17.60937,42.93868],[17.60543,42.93831],[17.6032,42.93825],[17.60213,42.93792],[17.59293,42.93768],[17.58964,42.93703],[17.58596,42.93632],[17.58424,42.93625],[17.58165,42.93547],[17.58002,42.93553],[17.57649,42.93745],[17.57444,42.9389],[17.56628,42.93853],[17.56426,42.93879],[17.56195,42.93632],[17.55993,42.93579],[17.55714,42.93584],[17.55358,42.9384],[17.54924,42.93892],[17.54776,42.93718],[17.54426,42.93619],[17.54064,42.93645],[17.53969,42.93831],[17.53589,42.93792],[17.5331,42.93936],[17.52978,42.9424],[17.52028,42.92815],[17.52748,42.92702],[17.53375,42.92469],[17.54671,42.91709],[17.548,42.91583],[17.55298,42.91602],[17.56242,42.91338],[17.56697,42.91111],[17.57452,42.90822],[17.58096,42.90634],[17.58714,42.90407],[17.59512,42.90112],[17.60087,42.89785],[17.60774,42.89873],[17.61263,42.89772],[17.62113,42.89213],[17.62671,42.8871],[17.63263,42.88269],[17.63752,42.88137],[17.64361,42.88081],[17.6467,42.88452],[17.64542,42.88942],[17.66215,42.90753],[17.6643,42.91162],[17.67305,42.92048],[17.67683,42.92325],[17.68764,42.92563],[17.70404,42.92431],[17.72558,42.92174],[17.75631,42.91476],[17.76858,42.90992],[17.7879,42.89439],[17.79974,42.91174],[17.80532,42.91742],[17.80648,42.91838],[17.81313,42.91834],[17.8145,42.91781],[17.81646,42.91693],[17.82294,42.9144],[17.83115,42.91166],[17.84137,42.90642],[17.84605,42.90453],[17.84684,42.90398],[17.84753,42.90304],[17.85276,42.89772],[17.85497,42.89507],[17.85905,42.88991],[17.85883,42.88178],[17.86074,42.88175],[17.8592,42.87944],[17.85757,42.8779],[17.8578,42.87662],[17.85961,42.86939],[17.86077,42.86793],[17.86188,42.8654],[17.86257,42.86362],[17.86613,42.85892],[17.86645,42.85802],[17.86733,42.85673],[17.87057,42.85152],[17.87315,42.84772],[17.87643,42.84496],[17.878,42.84334],[17.88046,42.83977],[17.88551,42.8398],[17.88933,42.83823],[17.89355,42.83672],[17.90126,42.83463],[17.90231,42.83418],[17.90334,42.8331],[17.90351,42.8322],[17.90241,42.82987],[17.90113,42.82794],[17.90003,42.82717],[17.8989,42.82512],[17.89754,42.82419],[17.89478,42.82156],[17.8933,42.82071],[17.89081,42.815],[17.89327,42.81196],[17.90171,42.81198],[17.90911,42.8131],[17.91046,42.81308],[17.91166,42.81273],[17.91362,42.81155],[17.91613,42.81011],[17.94119,42.80308],[17.95164,42.8011],[17.95338,42.79982],[17.96005,42.7946],[17.962,42.79191],[17.96683,42.78819],[17.96825,42.78757],[17.96921,42.78682],[17.96966,42.78627],[17.97529,42.78378],[17.97704,42.78202],[17.98146,42.78038],[17.98501,42.78065],[17.99464,42.77921],[17.99837,42.77783],[17.99975,42.77641],[17.99979,42.77518],[17.99975,42.7739],[18.00007,42.77231],[18.00018,42.76573],[18.00168,42.76442],[18.00219,42.76363],[18.00515,42.75962],[18.00663,42.75855],[18.01058,42.75648],[18.01161,42.75539],[18.0123,42.75465],[18.02601,42.75448],[18.02882,42.75358],[18.03268,42.75248],[18.03451,42.75242],[18.03698,42.7518],[18.04343,42.75042],[18.04496,42.74908],[18.05144,42.74422],[18.05339,42.74396],[18.05616,42.74279],[18.0588,42.74176],[18.06393,42.73857],[18.06562,42.73715],[18.06755,42.7354],[18.07105,42.73316],[18.07609,42.7296],[18.07667,42.7287],[18.07663,42.72749],[18.07691,42.7266],[18.07903,42.72698],[18.08019,42.72679],[18.08159,42.72632],[18.08416,42.72504],[18.0927,42.72184],[18.10032,42.71919],[18.10392,42.71713],[18.10843,42.71355],[18.10933,42.71193],[18.11045,42.70962],[18.11141,42.70663],[18.11131,42.7027],[18.11036,42.70155],[18.1107,42.69967],[18.11049,42.69906],[18.10873,42.69663],[18.10813,42.69359],[18.10592,42.68963],[18.1059,42.68878],[18.10976,42.68843],[18.1115,42.68857],[18.11246,42.68857],[18.11442,42.68876],[18.11626,42.68833],[18.11746,42.68747],[18.11948,42.68633],[18.12422,42.68545],[18.12667,42.68494],[18.12851,42.68472],[18.13373,42.68444],[18.13527,42.68384],[18.13813,42.68226],[18.14085,42.68261],[18.14253,42.68248],[18.14596,42.68086],[18.14686,42.67969],[18.14772,42.67676],[18.14931,42.67204],[18.15328,42.66798],[18.15613,42.66443],[18.15772,42.66199],[18.15828,42.65994],[18.15819,42.65896],[18.16598,42.66117],[18.17158,42.66197],[18.17261,42.66182],[18.17396,42.66295],[18.17501,42.66333],[18.17606,42.66339],[18.17913,42.66322],[18.18087,42.66254],[18.18338,42.66011],[18.18589,42.65781],[18.18772,42.65804],[18.19093,42.65757],[18.19327,42.65669],[18.1948,42.65524],[18.19497,42.65473],[18.19673,42.65381],[18.19782,42.65206],[18.19862,42.6508],[18.20424,42.64569],[18.20761,42.64051],[18.21389,42.63647],[18.21563,42.63405],[18.21844,42.63086],[18.22147,42.62796],[18.22422,42.62502],[18.22887,42.62202],[18.23381,42.62163],[18.23632,42.62041],[18.23728,42.61894],[18.23733,42.61801],[18.23911,42.6185],[18.24241,42.61822],[18.24368,42.61763],[18.24522,42.61563],[18.24619,42.61395],[18.2466,42.61106],[18.24679,42.60541],[18.24911,42.60547],[18.25844,42.60781],[18.26273,42.60892],[18.26477,42.61117],[18.27044,42.61342],[18.27312,42.61307],[18.2744,42.61517],[18.28073,42.61969],[18.28168,42.61995],[18.28503,42.61967],[18.28861,42.61945],[18.29249,42.61817],[18.31086,42.61733],[18.3235,42.61934],[18.33193,42.62142],[18.34811,42.6216],[18.36845,42.61827],[18.37062,42.61669],[18.37631,42.60993],[18.3824,42.60094],[18.38596,42.59811],[18.39259,42.59094],[18.40075,42.58794],[18.40066,42.586],[18.40545,42.58592],[18.41875,42.57781],[18.43351,42.56805],[18.43729,42.56658],[18.43954,42.56497],[18.44008,42.5637],[18.44096,42.5567],[18.44343,42.55112],[18.44341,42.54918],[18.44244,42.53503],[18.44201,42.52551],[18.44072,42.52124],[18.44021,42.52064],[18.446,42.5169],[18.45055,42.51001],[18.44931,42.50814],[18.44407,42.50121],[18.44394,42.49871],[18.44321,42.49754],[18.4433,42.4959],[18.44223,42.49397],[18.44171,42.49318],[18.44115,42.49026],[18.44175,42.48786],[18.44102,42.48631],[18.43987,42.48498],[18.44613,42.48264],[18.45077,42.47909],[18.45274,42.4765],[18.456,42.47482],[18.45815,42.47529],[18.46102,42.47444],[18.46634,42.47203],[18.47647,42.46665],[18.4787,42.46409],[18.48239,42.45883],[18.48673,42.45316],[18.49119,42.45006],[18.49437,42.4474],[18.49621,42.44357],[18.5069,42.43435],[18.48793,42.4169],[18.48287,42.41931],[18.47862,42.42371],[18.47561,42.42659],[18.47261,42.42935],[18.47124,42.43261],[18.46591,42.43701],[18.46385,42.43961],[18.45969,42.4424],[18.44974,42.44683],[18.44562,42.44309],[18.4306,42.43708],[18.42236,42.44081],[18.42253,42.44582],[18.40219,42.45741],[18.40716,42.46456],[18.37051,42.48292],[18.35026,42.49159],[18.30503,42.5133],[18.26941,42.52582],[18.26348,42.53474],[18.24091,42.54979],[18.22254,42.56181],[18.21945,42.56775],[18.19851,42.56648],[18.18718,42.57255],[18.18443,42.57887],[18.16795,42.58532],[18.16915,42.5905],[18.19868,42.59998],[18.21327,42.59833],[18.21568,42.60453],[18.2016,42.61501],[18.18237,42.60983],[18.16401,42.61476],[18.14461,42.62524],[18.13379,42.62676],[18.1307,42.61792],[18.12178,42.61678],[18.10822,42.62171],[18.10444,42.6351],[18.03989,42.64873],[17.94891,42.64128],[17.06039,42.69152],[16.34491,42.37123],[16.22612,42.3834],[16.39023,42.73995],[15.45776,43.0729]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-dof-2018",name:"dgu.hr: Croatia 2018 Aerial imagery",type:"wms",template:"https://geoportal.dgu.hr/services/inspire/orthophoto_2018/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.OrthoImagery&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",polygon:[[[16.29963,46.3815],[16.30495,46.38151],[16.30862,45.22967],[16.49996,45.22994],[16.49997,45.20987],[16.49689,45.20907],[16.49491,45.20698],[16.49417,45.20094],[16.49086,45.19326],[16.48662,45.1876],[16.47863,45.18198],[16.47765,45.18004],[16.4782,45.17638],[16.48211,45.1696],[16.4831,45.16561],[16.48159,45.15965],[16.47876,45.15632],[16.47142,45.14842],[16.46679,45.14146],[16.46448,45.13997],[16.46184,45.13997],[16.46186,45.13855],[16.45391,45.13501],[16.45031,45.13174],[16.44722,45.13101],[16.44499,45.12871],[16.44087,45.12514],[16.43486,45.12272],[16.42988,45.12175],[16.42383,45.1219],[16.4237,45.12057],[16.41417,45.11902],[16.40499,45.11581],[16.39821,45.11157],[16.39752,45.10909],[16.39675,45.1063],[16.39744,45.10509],[16.40636,45.0997],[16.40645,45.09831],[16.40585,45.09661],[16.40233,45.09449],[16.39958,45.09255],[16.39915,45.08807],[16.39641,45.08485],[16.39057,45.08037],[16.3898,45.0771],[16.39152,45.07207],[16.39134,45.06613],[16.38817,45.06067],[16.38757,45.05236],[16.38165,45.04794],[16.37718,45.04842],[16.37315,45.0426],[16.3686,45.03969],[16.36362,45.03508],[16.3613,45.03023],[16.36311,45.02392],[16.36122,45.01706],[16.36268,45.01172],[16.35984,45.00693],[16.3583,45.00232],[16.35504,44.99959],[16.34706,44.99704],[16.3304,44.99691],[16.3062,44.9957],[16.28569,44.9923],[16.28191,44.99588],[16.27573,45.00001],[16.2541,45.00608],[16.22423,45.01567],[16.21599,45.02088],[16.17582,45.03205],[16.16707,45.05861],[16.16192,45.07231],[16.14407,45.08007],[16.10407,45.08891],[16.08175,45.10321],[16.08021,45.12308],[16.06441,45.14427],[16.04622,45.16074],[16.04158,45.17562],[16.01326,45.17683],[16.00914,45.18458],[16.02064,45.19631],[16.01395,45.20418],[16.00794,45.213],[15.99318,45.21651],[15.97876,45.2257],[15.97395,45.22316],[15.96605,45.21736],[15.9561,45.21445],[15.94429,45.2106],[15.91799,45.21049],[15.91619,45.21291],[15.92176,45.22222],[15.91837,45.22313],[15.90816,45.22098],[15.90099,45.22244],[15.89653,45.21288],[15.88537,45.21276],[15.85396,45.21397],[15.84108,45.21869],[15.83645,45.21615],[15.83611,45.20986],[15.82804,45.20345],[15.81842,45.20248],[15.80658,45.1968],[15.79216,45.18784],[15.77896,45.1736],[15.77476,45.17354],[15.77482,45.17128],[15.77087,45.16404],[15.77349,45.1522],[15.78109,45.14609],[15.7871,45.13525],[15.78564,45.12889],[15.79482,45.12108],[15.79516,45.11278],[15.78486,45.10321],[15.78341,45.09297],[15.77534,45.09164],[15.77785,45.08373],[15.77597,45.08369],[15.776,45.08188],[15.77439,45.08001],[15.77534,45.07382],[15.75122,45.06121],[15.75929,45.05309],[15.76032,45.04691],[15.77165,45.02161],[15.77654,45.01075],[15.78186,45.0096],[15.78701,45.00456],[15.79001,44.99352],[15.78572,44.98271],[15.78847,44.97482],[15.7871,44.96984],[15.781,44.96504],[15.77371,44.96583],[15.77182,44.96765],[15.75336,44.96619],[15.75113,44.95836],[15.75371,44.95083],[15.75113,44.94488],[15.74281,44.93655],[15.76487,44.88762],[15.76401,44.87071],[15.79834,44.84699],[15.79628,44.84419],[15.76143,44.82617],[15.73551,44.82288],[15.7477,44.80863],[15.74547,44.80121],[15.75972,44.78829],[15.76744,44.77794],[15.77465,44.77196],[15.77568,44.76758],[15.78289,44.75844],[15.7877,44.75051],[15.81242,44.74332],[15.81911,44.73686],[15.82615,44.72649],[15.8325,44.72393],[15.84726,44.7393],[15.85894,44.74003],[15.87147,44.73613],[15.87696,44.73564],[15.88005,44.74698],[15.89481,44.75271],[15.90631,44.74978],[15.93292,44.71734],[15.95884,44.71466],[15.96502,44.70807],[15.96605,44.69624],[15.97206,44.68525],[15.9767,44.6772],[15.99215,44.66902],[16.0251,44.66023],[16.0397,44.654],[16.0445,44.64081],[16.04828,44.63251],[16.05823,44.62811],[16.06167,44.622],[16.0651,44.60538],[16.0548,44.60122],[16.05617,44.59291],[16.04176,44.58387],[16.02562,44.58313],[16.02493,44.57506],[16.0294,44.56185],[16.05926,44.54253],[16.10287,44.53567],[16.12724,44.51585],[16.13377,44.49871],[16.1475,44.48132],[16.14269,44.45829],[16.15059,44.44432],[16.14716,44.43648],[16.14819,44.42716],[16.15711,44.42593],[16.17187,44.41318],[16.17977,44.4019],[16.16398,44.39135],[16.14578,44.38816],[16.13651,44.38816],[16.13754,44.38031],[16.15643,44.38399],[16.17634,44.37639],[16.20998,44.36191],[16.22406,44.3489],[16.22406,44.33809],[16.2038,44.3236],[16.19556,44.30592],[16.19797,44.272],[16.2244,44.24422],[16.22852,44.22355],[16.2347,44.20633],[16.23713,44.20428],[16.23721,44.20365],[16.23912,44.20362],[16.27178,44.17753],[16.29719,44.163],[16.30577,44.15084],[16.30509,44.14984],[16.12495,44.1494],[16.12815,43.60943],[15.92174,43.60849],[15.52195,43.61231],[14.78331,44.11942],[14.28198,44.49521],[13.88603,44.75271],[13.82578,44.82532],[13.81273,44.84467],[13.80363,44.85648],[13.78029,44.86633],[13.76638,44.87777],[13.73428,44.88604],[13.72673,44.90471],[13.72647,44.90823],[13.71858,44.90817],[13.70853,44.9134],[13.70544,44.92835],[13.70905,44.94646],[13.72398,44.94888],[13.74596,44.94366],[13.76862,44.94342],[13.76673,44.96128],[13.74956,44.98156],[13.72261,44.98289],[13.69926,44.98714],[13.69017,44.99661],[13.68347,45.00984],[13.68334,45.01524],[13.6745,45.01506],[13.64605,45.03605],[13.60777,45.03763],[13.60451,45.08431],[13.60193,45.12296],[13.57035,45.13967],[13.56262,45.20309],[13.56571,45.27271],[13.55421,45.3116],[13.55397,45.31264],[13.55372,45.31784],[13.54998,45.31787],[13.52898,45.32753],[13.52383,45.39773],[13.51044,45.4146],[13.50975,45.42779],[13.50357,45.44261],[13.50872,45.44279],[13.5076,45.46073],[13.5052,45.46085],[13.48331,45.48595],[13.48555,45.496],[13.49894,45.50731],[13.51439,45.51032],[13.5443,45.4977],[13.56091,45.49377],[13.58344,45.48213],[13.58341,45.48066],[13.58734,45.48071],[13.62264,45.46586],[13.62274,45.46366],[13.63102,45.46387],[13.64511,45.46236],[13.65952,45.45616],[13.66785,45.45194],[13.67463,45.44773],[13.68073,45.44797],[13.68596,45.4511],[13.69643,45.45802],[13.70399,45.46013],[13.71042,45.46013],[13.71317,45.45688],[13.71969,45.45869],[13.72184,45.46133],[13.72699,45.46278],[13.74175,45.46453],[13.75248,45.46362],[13.76432,45.47054],[13.77308,45.46934],[13.77602,45.46747],[13.78933,45.46771],[13.80501,45.46386],[13.81119,45.4586],[13.81187,45.45483],[13.80913,45.45047],[13.80969,45.44577],[13.81865,45.4421],[13.819,45.43779],[13.83243,45.43803],[13.84217,45.43677],[13.85427,45.43439],[13.85827,45.42999],[13.86286,45.4305],[13.88238,45.429],[13.8859,45.43439],[13.89204,45.44297],[13.90762,45.45432],[13.91371,45.45664],[13.94096,45.45718],[13.94573,45.45938],[13.9595,45.45844],[13.9701,45.45233],[13.98027,45.45832],[13.98186,45.47094],[13.98663,45.47319],[13.99019,45.47328],[13.98087,45.48255],[13.98281,45.48451],[13.97113,45.49161],[13.96633,45.49335],[13.96186,45.49444],[13.95822,45.5071],[13.96337,45.5105],[13.96688,45.51465],[13.97414,45.51768],[13.97804,45.51738],[13.9816,45.51654],[13.98396,45.51432],[13.98937,45.51185],[13.99542,45.51104],[13.99336,45.51483],[13.99435,45.51756],[13.99804,45.52147],[14.00195,45.52298],[14.01465,45.52213],[14.03173,45.51173],[14.04495,45.50078],[14.04941,45.50117],[14.05375,45.50006],[14.07602,45.48728],[14.09147,45.48502],[14.10915,45.48586],[14.1267,45.48135],[14.14189,45.47795],[14.14872,45.48306],[14.15481,45.48385],[14.17172,45.48258],[14.18854,45.47864],[14.20335,45.47325],[14.20288,45.483],[14.21043,45.49459],[14.217,45.49654],[14.22047,45.50397],[14.23137,45.50845],[14.24884,45.50803],[14.26656,45.48715],[14.27695,45.49305],[14.28914,45.49296],[14.29467,45.48676],[14.30622,45.48345],[14.31733,45.48607],[14.31982,45.4846],[14.32179,45.4827],[14.32381,45.47413],[14.33656,45.48195],[14.34862,45.48791],[14.35282,45.48857],[14.36578,45.48821],[14.3869,45.49693],[14.39243,45.4975],[14.39462,45.50553],[14.41007,45.5099],[14.4138,45.51251],[14.42913,45.51215],[14.43346,45.51353],[14.43998,45.51931],[14.45299,45.52283],[14.47341,45.53756],[14.48749,45.54141],[14.49376,45.54991],[14.49238,45.56596],[14.49577,45.58008],[14.50058,45.58455],[14.50178,45.58852],[14.49311,45.59638],[14.49324,45.60041],[14.4953,45.60824],[14.49998,45.6084],[14.49993,45.61037],[14.50305,45.61087],[14.5112,45.61024],[14.51311,45.6103],[14.51569,45.61242],[14.52614,45.61357],[14.53247,45.61654],[14.54144,45.62448],[14.54242,45.62709],[14.54453,45.62895],[14.54779,45.63655],[14.56186,45.65401],[14.56487,45.6756],[14.56821,45.67686],[14.57954,45.67464],[14.58418,45.66912],[14.59748,45.67254],[14.61164,45.66673],[14.61345,45.65737],[14.61027,45.65065],[14.60522,45.62774],[14.62551,45.61817],[14.63212,45.61512],[14.63507,45.60761],[14.64061,45.60736],[14.6471,45.60249],[14.65359,45.59515],[14.6544,45.59372],[14.65441,45.59304],[14.66074,45.59309],[14.67618,45.59236],[14.68164,45.59083],[14.68697,45.58689],[14.6881,45.5847],[14.69134,45.58365],[14.69391,45.58134],[14.69629,45.57799],[14.70107,45.56974],[14.70367,45.56282],[14.70119,45.55836],[14.69821,45.55431],[14.6947,45.55291],[14.69452,45.54617],[14.69276,45.54485],[14.69175,45.54122],[14.69211,45.53837],[14.68957,45.53456],[14.69169,45.53064],[14.69859,45.52874],[14.69724,45.53345],[14.69989,45.53651],[14.70526,45.53816],[14.72508,45.53642],[14.73145,45.53258],[14.73729,45.53237],[14.74024,45.5301],[14.74343,45.52568],[14.75239,45.52068],[14.76183,45.51444],[14.76891,45.51502],[14.77298,45.51369],[14.77363,45.51026],[14.7882,45.50911],[14.79239,45.50555],[14.79516,45.50609],[14.79864,45.50514],[14.80766,45.49592],[14.80725,45.49385],[14.80389,45.4912],[14.80796,45.48889],[14.80949,45.48475],[14.80996,45.47995],[14.82011,45.47205],[14.82058,45.46316],[14.83309,45.46353],[14.84553,45.46519],[14.86034,45.46974],[14.86689,45.46895],[14.87249,45.47437],[14.87904,45.4752],[14.88895,45.47917],[14.90252,45.47822],[14.90782,45.4814],[14.90776,45.48314],[14.90664,45.48736],[14.90735,45.4922],[14.91083,45.49401],[14.90718,45.49848],[14.90859,45.50377],[14.91184,45.50514],[14.90894,45.51097],[14.9093,45.51593],[14.91001,45.52055],[14.9162,45.52444],[14.91667,45.52845],[14.92157,45.53097],[14.93136,45.53217],[14.93561,45.53072],[14.94953,45.52378],[14.97395,45.51006],[14.98516,45.50063],[14.99253,45.49927],[15.00798,45.50055],[15.0143,45.5003],[15.01872,45.49811],[15.03046,45.48897],[15.04119,45.49067],[15.04639,45.49654],[15.057,45.49707],[15.06078,45.49352],[15.06255,45.49033],[15.07258,45.49062],[15.0793,45.48541],[15.08738,45.48583],[15.09116,45.48368],[15.09181,45.47995],[15.08809,45.47689],[15.0888,45.46924],[15.09558,45.46622],[15.10443,45.46618],[15.11499,45.45819],[15.12679,45.44959],[15.14018,45.44719],[15.14525,45.44164],[15.15085,45.43249],[15.15846,45.42765],[15.16778,45.42529],[15.17427,45.42633],[15.17775,45.42479],[15.18566,45.42951],[15.18453,45.43552],[15.18772,45.43759],[15.19142,45.43844],[15.19617,45.4385],[15.19971,45.43634],[15.2043,45.4303],[15.2073,45.42827],[15.22158,45.42864],[15.22412,45.43067],[15.22417,45.43742],[15.22972,45.44363],[15.23562,45.45042],[15.24152,45.45633],[15.25385,45.46101],[15.26429,45.46469],[15.26912,45.46833],[15.2749,45.46903],[15.27968,45.46845],[15.29767,45.46241],[15.32298,45.45819],[15.32782,45.45555],[15.33832,45.46006],[15.3438,45.45993],[15.34575,45.46585],[15.34976,45.46949],[15.35548,45.47822],[15.36156,45.48157],[15.37766,45.48781],[15.37459,45.48996],[15.36881,45.49261],[15.36144,45.49186],[15.35707,45.49472],[15.34622,45.50154],[15.33082,45.50724],[15.32298,45.51402],[15.32227,45.51824],[15.31484,45.51915],[15.31177,45.52105],[15.30941,45.52576],[15.30938,45.52971],[15.30487,45.52969],[15.29879,45.53386],[15.29661,45.53841],[15.29691,45.5425],[15.29431,45.54807],[15.29372,45.56947],[15.29396,45.58243],[15.27414,45.59903],[15.27225,45.6053],[15.28122,45.61198],[15.29372,45.61578],[15.30233,45.61603],[15.29738,45.62139],[15.2975,45.63162],[15.30363,45.63575],[15.33112,45.63806],[15.34044,45.63682],[15.34669,45.63806],[15.34103,45.63888],[15.33702,45.64309],[15.33702,45.6468],[15.34292,45.64903],[15.3553,45.6501],[15.37335,45.64845],[15.37831,45.64408],[15.38657,45.64292],[15.38916,45.64086],[15.39836,45.64787],[15.39176,45.65183],[15.38904,45.65604],[15.3881,45.659],[15.38338,45.66667],[15.37276,45.67566],[15.37005,45.67912],[15.36734,45.68233],[15.36639,45.67516],[15.352,45.66585],[15.34575,45.66692],[15.34327,45.67129],[15.34598,45.6858],[15.35778,45.69124],[15.35896,45.69321],[15.35212,45.69791],[15.35424,45.7101],[15.34315,45.7087],[15.33808,45.70195],[15.329,45.69445],[15.32392,45.69404],[15.33136,45.67368],[15.32451,45.67005],[15.31413,45.67211],[15.31071,45.67714],[15.30387,45.6844],[15.29938,45.6825],[15.28287,45.69041],[15.28263,45.70409],[15.28004,45.70483],[15.27296,45.70112],[15.27308,45.69297],[15.26859,45.69132],[15.26437,45.69142],[15.25461,45.69799],[15.25213,45.70458],[15.25042,45.70792],[15.24647,45.71076],[15.24724,45.71377],[15.24541,45.71525],[15.24087,45.71579],[15.2401,45.71772],[15.23532,45.719],[15.23367,45.72238],[15.23656,45.72608],[15.25379,45.73028],[15.25904,45.72921],[15.2703,45.73807],[15.27042,45.74132],[15.27933,45.74696],[15.29059,45.74963],[15.29278,45.75428],[15.29903,45.7577],[15.30723,45.7584],[15.31643,45.76297],[15.3228,45.76309],[15.32982,45.76597],[15.3533,45.77655],[15.36197,45.77959],[15.36775,45.77963],[15.3725,45.78229],[15.37772,45.78234],[15.3804,45.78186],[15.38204,45.78291],[15.38291,45.7856],[15.39323,45.79224],[15.39851,45.79415],[15.40482,45.79528],[15.41276,45.79759],[15.4168,45.7975],[15.42025,45.79874],[15.44906,45.79833],[15.46384,45.79761],[15.47062,45.79902],[15.46703,45.80238],[15.4662,45.81097],[15.4626,45.81716],[15.46272,45.82041],[15.4662,45.82215],[15.47278,45.82067],[15.47455,45.82141],[15.47387,45.82458],[15.47602,45.82937],[15.48071,45.83111],[15.49316,45.83504],[15.49738,45.83374],[15.49897,45.83202],[15.50569,45.83101],[15.50729,45.8291],[15.50661,45.82499],[15.51015,45.82458],[15.5131,45.82577],[15.51914,45.82501],[15.52513,45.82641],[15.53144,45.83115],[15.5315,45.83329],[15.53536,45.83666],[15.53445,45.84085],[15.53438,45.84594],[15.53477,45.8477],[15.5364,45.85015],[15.53989,45.85055],[15.54429,45.84863],[15.55131,45.84846],[15.55369,45.84675],[15.55563,45.84103],[15.55871,45.83936],[15.55824,45.84189],[15.5599,45.8459],[15.56453,45.8489],[15.56666,45.85054],[15.56722,45.85191],[15.56902,45.85535],[15.57099,45.85595],[15.57316,45.85585],[15.57674,45.85445],[15.58208,45.8507],[15.58645,45.84938],[15.59155,45.84904],[15.5936,45.84878],[15.59706,45.84726],[15.60159,45.84556],[15.6061,45.84455],[15.61125,45.84251],[15.61172,45.84169],[15.61175,45.8384],[15.61794,45.83844],[15.62135,45.83665],[15.62662,45.83504],[15.6301,45.83508],[15.6328,45.8345],[15.63617,45.83193],[15.63715,45.8304],[15.63749,45.82716],[15.63986,45.82649],[15.64191,45.82462],[15.64389,45.82588],[15.64679,45.83072],[15.64819,45.83258],[15.65461,45.83693],[15.65905,45.83958],[15.66213,45.84285],[15.66478,45.84397],[15.66841,45.84418],[15.67124,45.84315],[15.67615,45.84369],[15.67829,45.84494],[15.68003,45.84534],[15.68771,45.84555],[15.69097,45.84555],[15.69081,45.84835],[15.69212,45.84996],[15.69403,45.85136],[15.69633,45.85186],[15.69817,45.85137],[15.69404,45.8549],[15.68885,45.85909],[15.68248,45.86067],[15.67953,45.86276],[15.67553,45.86715],[15.67431,45.86884],[15.67484,45.87033],[15.67659,45.87161],[15.67733,45.87335],[15.67618,45.87521],[15.67599,45.87739],[15.6773,45.87991],[15.67782,45.88346],[15.67984,45.88498],[15.68217,45.88501],[15.67997,45.8865],[15.67935,45.88766],[15.6767,45.88933],[15.67639,45.89149],[15.67723,45.89276],[15.67885,45.89367],[15.67887,45.8942],[15.67718,45.89569],[15.67698,45.89707],[15.67789,45.89907],[15.67649,45.90062],[15.67639,45.90182],[15.67547,45.90472],[15.6763,45.90599],[15.67991,45.90833],[15.68067,45.9085],[15.68251,45.91063],[15.68561,45.91093],[15.68793,45.91095],[15.68787,45.91501],[15.68927,45.91582],[15.69103,45.9161],[15.69245,45.91687],[15.69442,45.9174],[15.69554,45.91715],[15.69563,45.91873],[15.69681,45.92187],[15.7023,45.92368],[15.70256,45.92448],[15.70003,45.92579],[15.69988,45.92749],[15.70156,45.92934],[15.70171,45.93176],[15.7041,45.93322],[15.70463,45.93664],[15.70401,45.93896],[15.70548,45.94101],[15.70531,45.94214],[15.70501,45.94349],[15.70525,45.94534],[15.70404,45.94866],[15.70534,45.95092],[15.70563,45.95752],[15.70575,45.96322],[15.69991,45.98064],[15.69625,45.98753],[15.69643,45.99138],[15.69779,45.99196],[15.69619,45.994],[15.69584,45.99749],[15.6982,46.00261],[15.70327,46.00413],[15.70817,46.00667],[15.7074,46.00974],[15.70663,46.01093],[15.70374,46.01162],[15.70233,46.01339],[15.70209,46.01601],[15.70292,46.01818],[15.70793,46.02027],[15.70947,46.02232],[15.70947,46.02498],[15.71247,46.03038],[15.71194,46.03599],[15.71584,46.04017],[15.71902,46.04083],[15.71991,46.04345],[15.72315,46.04492],[15.72545,46.04492],[15.72026,46.04635],[15.7189,46.04844],[15.7189,46.04992],[15.71265,46.05536],[15.70274,46.05675],[15.68923,46.06003],[15.68103,46.06428],[15.67354,46.06772],[15.66812,46.06903],[15.66015,46.06719],[15.65596,46.06903],[15.65343,46.07112],[15.65213,46.07496],[15.65408,46.07852],[15.64594,46.08053],[15.64417,46.08213],[15.63726,46.07996],[15.63054,46.08057],[15.62323,46.08368],[15.61497,46.08994],[15.61432,46.09235],[15.61556,46.09423],[15.61886,46.09522],[15.61951,46.09677],[15.61373,46.09653],[15.6106,46.09845],[15.60748,46.10508],[15.60743,46.10826],[15.60466,46.10824],[15.6009,46.1108],[15.60143,46.11691],[15.60352,46.12515],[15.60677,46.13378],[15.60069,46.13729],[15.5922,46.14346],[15.59179,46.14731],[15.5945,46.15025],[15.60181,46.15303],[15.60789,46.15495],[15.6073,46.15666],[15.59928,46.15907],[15.59963,46.1632],[15.60317,46.1659],[15.60411,46.1688],[15.61432,46.1746],[15.62305,46.17615],[15.62671,46.17872],[15.63284,46.18252],[15.63178,46.18599],[15.63349,46.18791],[15.64192,46.19008],[15.6444,46.19281],[15.64251,46.19967],[15.64263,46.20351],[15.63833,46.20478],[15.63709,46.20743],[15.63844,46.21388],[15.64198,46.2158],[15.64329,46.21654],[15.64456,46.21655],[15.64451,46.21888],[15.64602,46.21958],[15.64847,46.21976],[15.65007,46.22006],[15.65216,46.22133],[15.65511,46.22198],[15.65664,46.22198],[15.66065,46.22327],[15.66505,46.22522],[15.66756,46.22561],[15.67045,46.22835],[15.67652,46.22955],[15.68242,46.22937],[15.68587,46.22845],[15.68917,46.22678],[15.69602,46.22614],[15.70286,46.225],[15.70846,46.22578],[15.71359,46.22578],[15.71787,46.22496],[15.72642,46.2259],[15.73032,46.22504],[15.73229,46.2238],[15.73321,46.222],[15.74094,46.22431],[15.74742,46.2238],[15.75185,46.22261],[15.75592,46.2221],[15.75798,46.22027],[15.75916,46.21765],[15.75792,46.21445],[15.75497,46.21186],[15.75601,46.21035],[15.75778,46.2098],[15.76893,46.21269],[15.77774,46.21586],[15.7832,46.21908],[15.78556,46.22143],[15.78491,46.22365],[15.78957,46.22906],[15.78925,46.23608],[15.79181,46.23891],[15.79529,46.24004],[15.79694,46.24269],[15.79223,46.25019],[15.78916,46.25376],[15.78742,46.2588],[15.78813,46.26088],[15.79102,46.2621],[15.79715,46.26272],[15.80205,46.263],[15.81013,46.26465],[15.81974,46.26461],[15.82313,46.26416],[15.82974,46.26549],[15.83874,46.26855],[15.84753,46.26877],[15.85219,46.26902],[15.86154,46.27034],[15.86384,46.27207],[15.86392,46.27348],[15.86221,46.27554],[15.86336,46.27735],[15.86652,46.27874],[15.8703,46.2811],[15.87487,46.28251],[15.87755,46.2832],[15.88327,46.28261],[15.89486,46.28614],[15.89537,46.28936],[15.89668,46.29014],[15.91594,46.29024],[15.91596,46.29077],[15.91918,46.28974],[15.92608,46.29051],[15.92855,46.29127],[15.93006,46.29121],[15.93211,46.29242],[15.93459,46.29274],[15.93863,46.2925],[15.94279,46.29335],[15.94636,46.29647],[15.95326,46.29747],[15.95595,46.29896],[15.96043,46.29937],[15.96264,46.3004],[15.96668,46.30778],[15.9727,46.31224],[15.97386,46.31387],[15.97615,46.31511],[15.97807,46.31491],[15.9847,46.31391],[15.98618,46.31693],[15.98913,46.31725],[15.99284,46.31713],[16.00352,46.31114],[16.01013,46.3131],[16.01284,46.3133],[16.0165,46.31522],[16.01709,46.31636],[16.01614,46.31852],[16.01361,46.32063],[16.01408,46.32292],[16.02222,46.3285],[16.02405,46.33265],[16.02812,46.33546],[16.03525,46.33998],[16.03962,46.34051],[16.04546,46.34006],[16.04758,46.33868],[16.05189,46.33795],[16.05484,46.34104],[16.05879,46.3441],[16.06357,46.34499],[16.07131,46.3449],[16.0713,46.34703],[16.07116,46.36293],[16.0691,46.3629],[16.06271,46.36942],[16.05136,46.37687],[16.04534,46.38216],[16.0467,46.38488],[16.05625,46.39644],[16.08799,46.39139],[16.13842,46.40811],[16.1501,46.40762],[16.15883,46.40457],[16.17045,46.3957],[16.17765,46.392],[16.17818,46.38838],[16.17989,46.38822],[16.18679,46.39066],[16.19181,46.38907],[16.1947,46.38728],[16.19405,46.38224],[16.20266,46.38378],[16.20827,46.38732],[16.21788,46.38793],[16.22042,46.38598],[16.22484,46.39005],[16.23204,46.3905],[16.23888,46.38769],[16.24106,46.38236],[16.24985,46.38289],[16.26507,46.37886],[16.27191,46.3813],[16.29863,46.38102],[16.29963,46.3815]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-hok",name:"dgu.hr: HOK",type:"wms",template:"https://geoportal.dgu.hr/services/hok/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=HOK5&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2009-01-01T00:00:00.000Z",startDate:"1954-01-01T00:00:00.000Z",polygon:[[[15.34155,45.63868],[15.34189,45.6658],[15.28409,45.66592],[15.28413,45.69284],[15.22636,45.69305],[15.22662,45.74698],[15.28451,45.74695],[15.2846,45.7739],[15.34236,45.77372],[15.34254,45.80068],[15.45841,45.80029],[15.45879,45.85439],[15.66157,45.85331],[15.66243,45.93435],[15.69152,45.93405],[15.6929,46.04211],[15.6638,46.04223],[15.66414,46.06921],[15.60599,46.06951],[15.60621,46.09654],[15.57707,46.09666],[15.57806,46.17763],[15.63625,46.17733],[15.63702,46.23139],[15.7828,46.23041],[15.78358,46.28441],[15.87117,46.28382],[15.8716,46.3108],[15.95914,46.31006],[15.95979,46.33703],[16.01811,46.33653],[16.01862,46.36357],[16.04789,46.36331],[16.04884,46.41724],[16.19531,46.41579],[16.19471,46.38889],[16.25311,46.38812],[16.25492,46.47124],[16.22578,46.47156],[16.22694,46.5235],[16.3147,46.52252],[16.31551,46.54945],[16.49498,46.54726],[16.49507,46.52025],[16.5285,46.52066],[16.52923,46.49372],[16.61721,46.49476],[16.61798,46.46787],[16.67639,46.46855],[16.67703,46.44152],[16.7063,46.44188],[16.70699,46.41487],[16.76552,46.41549],[16.76617,46.38853],[16.85389,46.38939],[16.85449,46.36248],[16.88367,46.36271],[16.88474,46.30879],[16.91401,46.30911],[16.91452,46.2821],[16.94362,46.28228],[16.94422,46.25534],[16.9734,46.25567],[16.97392,46.2286],[17.06134,46.22946],[17.0619,46.20241],[17.14931,46.20303],[17.14974,46.17606],[17.20798,46.17647],[17.20888,46.12257],[17.23786,46.1227],[17.23824,46.0957],[17.26734,46.09594],[17.2678,46.06891],[17.29669,46.06918],[17.29746,46.01514],[17.38458,46.01562],[17.38501,45.98861],[17.41389,45.98879],[17.41432,45.96183],[17.58847,45.96255],[17.58864,45.93557],[17.61761,45.93566],[17.61786,45.9087],[17.64683,45.90879],[17.647,45.88182],[17.67597,45.88185],[17.67619,45.85487],[17.76296,45.85505],[17.76318,45.82808],[17.85004,45.82823],[17.85012,45.80125],[18.05273,45.80131],[18.05268,45.77432],[18.11053,45.77426],[18.11058,45.80131],[18.25533,45.80104],[18.2552,45.77405],[18.39974,45.7736],[18.39961,45.74662],[18.42871,45.74656],[18.42879,45.77354],[18.45772,45.77333],[18.45793,45.80038],[18.54488,45.80014],[18.54509,45.82698],[18.57415,45.82689],[18.57436,45.85388],[18.60329,45.8537],[18.60354,45.88072],[18.63264,45.8806],[18.63316,45.93459],[18.72019,45.93399],[18.71984,45.90706],[18.80688,45.90643],[18.80726,45.93339],[18.83627,45.93318],[18.8355,45.87925],[18.86438,45.87904],[18.8631,45.79808],[18.89206,45.79793],[18.89172,45.77085],[18.97845,45.7701],[18.97609,45.60815],[18.94674,45.60836],[18.94635,45.58143],[19.06167,45.58044],[19.06145,45.55343],[19.08986,45.55325],[19.08952,45.52622],[19.1181,45.52595],[19.11716,45.47187],[19.00223,45.47295],[19.00167,45.44598],[19.05918,45.44556],[19.05823,45.39143],[19.00055,45.39197],[19.00014,45.36502],[19.08625,45.36421],[19.08573,45.33727],[19.11448,45.3371],[19.11397,45.31],[19.14267,45.30979],[19.14207,45.28274],[19.28549,45.28127],[19.28489,45.25415],[19.4568,45.25211],[19.45472,45.17123],[19.16856,45.17445],[19.16817,45.14748],[19.13939,45.14775],[19.13879,45.12072],[19.08165,45.12126],[19.08114,45.09439],[19.10975,45.09406],[19.10873,45.04013],[19.08016,45.04028],[19.07909,44.98637],[19.13611,44.98592],[19.13517,44.93186],[19.10656,44.9321],[19.10609,44.90514],[18.99209,44.90614],[18.99124,44.85213],[18.79191,44.85367],[18.79234,44.8808],[18.73541,44.88107],[18.73651,44.96209],[18.76496,44.96185],[18.76538,44.98887],[18.70828,44.98926],[18.70866,45.0163],[18.68009,45.01642],[18.6803,45.04344],[18.42323,45.04465],[18.42374,45.09866],[18.2236,45.09923],[18.22349,45.07223],[18.08061,45.07241],[18.08057,45.09944],[18.02342,45.09938],[18.02346,45.12646],[17.99489,45.12649],[17.99502,45.0995],[17.9377,45.09947],[17.93774,45.04546],[17.88064,45.04546],[17.88077,45.01844],[17.82362,45.01831],[17.82354,45.04528],[17.76635,45.04519],[17.76626,45.0722],[17.70911,45.07196],[17.70894,45.09908],[17.42317,45.09794],[17.42287,45.12498],[17.30845,45.12429],[17.3082,45.1513],[17.27945,45.15115],[17.27988,45.1242],[17.16546,45.12342],[17.16503,45.15034],[17.10789,45.14992],[17.10755,45.17694],[17.05014,45.17634],[17.04972,45.20347],[16.93521,45.20239],[16.93428,45.25649],[16.90553,45.25619],[16.9066,45.20233],[16.84932,45.20161],[16.84996,45.17466],[16.67818,45.1727],[16.6775,45.19975],[16.49516,45.19753],[16.49495,45.17051],[16.48371,45.17063],[16.48239,45.11675],[16.42516,45.11744],[16.42384,45.06345],[16.39526,45.06375],[16.39462,45.03685],[16.36605,45.03715],[16.36473,44.98321],[16.25065,44.98453],[16.2512,45.01145],[16.16557,45.01229],[16.16668,45.06634],[16.10953,45.06691],[16.11017,45.0925],[16.10689,45.094],[16.08143,45.09424],[16.08202,45.12129],[16.05341,45.12147],[16.05405,45.14847],[16.02539,45.1488],[16.02581,45.17571],[15.99724,45.17598],[15.99775,45.20305],[15.79723,45.20455],[15.79531,45.06961],[15.76665,45.06979],[15.7664,45.04278],[15.79489,45.04263],[15.79382,44.96167],[15.76529,44.9618],[15.76423,44.88077],[15.79271,44.88062],[15.79199,44.82667],[15.76355,44.82685],[15.7632,44.79982],[15.79156,44.79967],[15.79088,44.74562],[15.87618,44.74498],[15.87656,44.77185],[15.9049,44.77176],[15.90449,44.74477],[15.93273,44.74465],[15.93243,44.71754],[15.98923,44.71706],[15.98885,44.69012],[16.01713,44.68985],[16.01679,44.66278],[16.0451,44.6626],[16.04459,44.6356],[16.07287,44.6353],[16.07197,44.5814],[16.01525,44.58182],[16.01483,44.55486],[16.12797,44.55379],[16.12712,44.49979],[16.15522,44.49954],[16.15429,44.44558],[16.1826,44.44527],[16.1815,44.39122],[16.20964,44.39101],[16.20905,44.36395],[16.23741,44.36368],[16.23673,44.33664],[16.20858,44.33691],[16.207,44.25603],[16.2349,44.25572],[16.23396,44.20168],[16.29013,44.20104],[16.2897,44.17414],[16.31772,44.17379],[16.31663,44.11979],[16.37272,44.11914],[16.37225,44.09218],[16.45636,44.09113],[16.4552,44.0371],[16.5352,44.0371],[16.53597,44.0101],[16.56391,44.01041],[16.56528,43.95653],[16.62128,43.95714],[16.6218,43.93011],[16.62798,43.93014],[16.62875,43.90327],[16.67858,43.90383],[16.67918,43.87683],[16.7351,43.87739],[16.73686,43.79647],[16.76479,43.79672],[16.76535,43.76982],[16.82123,43.77041],[16.82174,43.74335],[16.84959,43.74366],[16.85019,43.71671],[16.90603,43.71718],[16.90646,43.69013],[16.93431,43.69047],[16.93508,43.66353],[16.96272,43.66368],[16.96323,43.63673],[16.99104,43.63698],[16.99169,43.60998],[17.01932,43.61026],[17.01993,43.58328],[17.04773,43.58347],[17.04829,43.55648],[17.10378,43.55688],[17.10421,43.52991],[17.15987,43.53038],[17.1603,43.50337],[17.27149,43.50415],[17.27192,43.47709],[17.29969,43.47728],[17.30055,43.39625],[17.27283,43.39607],[17.27325,43.36912],[17.30093,43.36928],[17.30149,43.31522],[17.3293,43.31544],[17.32995,43.28845],[17.35728,43.28855],[17.35758,43.26158],[17.44067,43.26202],[17.44148,43.18102],[17.4968,43.18121],[17.49706,43.15426],[17.58006,43.15454],[17.58023,43.12755],[17.60782,43.12758],[17.60808,43.1007],[17.66331,43.10079],[17.66361,43.04688],[17.69116,43.04688],[17.69142,43.01974],[17.71897,43.01993],[17.71927,42.93889],[17.77442,42.93902],[17.77459,42.91203],[17.80223,42.91215],[17.80197,42.93911],[17.82952,42.93918],[17.82969,42.91221],[17.88476,42.91221],[17.88488,42.85819],[17.91248,42.85826],[17.91248,42.8312],[17.93999,42.83116],[17.9399,42.80422],[17.995,42.80428],[17.995,42.77726],[18.05002,42.77716],[18.05002,42.75023],[18.105,42.75023],[18.105,42.72318],[18.13229,42.72309],[18.13233,42.69616],[18.1598,42.69619],[18.15976,42.66906],[18.21456,42.66899],[18.21443,42.64201],[18.24203,42.64191],[18.2419,42.61495],[18.26928,42.61489],[18.26941,42.64185],[18.37913,42.64156],[18.37897,42.61457],[18.40648,42.61444],[18.40635,42.58753],[18.46111,42.58718],[18.46025,42.47925],[18.48763,42.47909],[18.48746,42.45215],[18.54218,42.45187],[18.54149,42.37078],[18.51411,42.37097],[18.51424,42.39792],[16.48009,42.74046],[15.71251,42.99134],[13.71386,44.87631],[13.59592,45.03763],[13.56502,45.11763],[13.56067,45.30623],[13.53207,45.30586],[13.52983,45.38682],[13.50211,45.38736],[13.49885,45.46741],[13.47018,45.46705],[13.46956,45.49407],[13.49675,45.49442],[13.49658,45.49889],[13.49816,45.49892],[13.49761,45.52141],[13.55507,45.52207],[13.5558,45.49522],[13.61331,45.49597],[13.61403,45.46895],[13.84428,45.47145],[13.84488,45.44442],[13.90234,45.44505],[13.90182,45.47205],[13.98808,45.47289],[13.98757,45.49985],[14.10275,45.50081],[14.10305,45.47379],[14.33334,45.47533],[14.33308,45.50232],[14.39059,45.50268],[14.39042,45.52959],[14.44797,45.52995],[14.44771,45.55697],[14.47642,45.55712],[14.47625,45.58419],[14.50504,45.58422],[14.50487,45.61128],[14.53375,45.61137],[14.53354,45.63832],[14.56229,45.63844],[14.56186,45.69242],[14.59074,45.69257],[14.59109,45.66553],[14.61984,45.66568],[14.62014,45.63868],[14.64885,45.63871],[14.6492,45.61173],[14.70683,45.61194],[14.70713,45.5579],[14.7358,45.55793],[14.73601,45.531],[14.79378,45.53112],[14.79382,45.50415],[14.82236,45.50421],[14.82262,45.47717],[14.88004,45.47735],[14.88008,45.5043],[15.11036,45.50421],[15.11028,45.47735],[15.1392,45.4772],[15.13899,45.45029],[15.22533,45.45011],[15.22593,45.47704],[15.34056,45.47674],[15.34073,45.50379],[15.28314,45.50394],[15.28391,45.63895],[15.34155,45.63868]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-topo-25",name:"dgu.hr: Topo 25",type:"wms",template:"https://geoportal.dgu.hr/services/tk/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=tk:TK25&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"1996-01-01T00:00:00.000Z",polygon:[[[16.245,46.6248],[16.49546,46.62492],[16.49503,46.50016],[16.87019,46.49981],[16.86968,46.375],[16.99482,46.375],[16.99448,46.25003],[17.24459,46.25015],[17.24476,46.12501],[17.3699,46.12489],[17.37007,46.00018],[17.74498,45.99994],[17.74481,45.87483],[18.61994,45.87507],[18.61959,46.00018],[18.99485,45.99982],[18.99485,45.62499],[19.1199,45.62496],[19.11982,45.37476],[19.36984,45.37494],[19.3701,45.25012],[19.49507,45.25],[19.49524,45.12502],[19.12016,45.12466],[19.11982,44.99989],[19.24444,45.00013],[19.24496,44.87509],[19.11982,44.87485],[19.11982,44.75015],[18.74474,44.74978],[18.74508,44.9903],[18.72568,44.9903],[18.72568,44.99977],[17.37007,44.99965],[17.37024,45.12514],[16.49528,45.1249],[16.49546,45.00001],[16.31693,45.00013],[16.31676,44.99491],[16.28483,44.99491],[16.28534,44.99977],[15.99524,45.00013],[15.99506,45.12514],[15.87009,45.12502],[15.87044,44.75015],[16.1202,44.75015],[16.11986,44.51671],[16.1257,44.51646],[16.12553,44.50006],[16.245,44.49993],[16.24517,44.25012],[16.37014,44.25012],[16.3698,44.12506],[16.62043,44.1253],[16.62077,44.00035],[16.74488,43.99998],[16.7454,43.87587],[16.87054,43.87538],[16.87019,43.75039],[16.99482,43.75002],[16.99533,43.62551],[17.24493,43.62489],[17.24527,43.50013],[17.36973,43.50001],[17.37024,43.24995],[17.61967,43.25008],[17.62018,43.12517],[17.74498,43.12529],[17.74498,43.00038],[17.87012,43.00025],[17.86995,42.87546],[18.11989,42.87559],[18.12006,42.75016],[18.24503,42.75016],[18.2452,42.62512],[18.49462,42.62537],[18.49514,42.50058],[18.61994,42.50033],[18.62011,42.37491],[18.37017,42.37529],[18.37017,42.48919],[18.34528,42.48931],[18.34528,42.50045],[18.12023,42.50007],[18.12006,42.61817],[18.11079,42.6183],[18.11062,42.62512],[17.49487,42.62487],[17.49453,42.73831],[17.43324,42.73806],[17.43324,42.74991],[17.2451,42.75016],[17.2451,42.87521],[16.99516,42.87508],[16.99516,42.83368],[17.17043,42.83343],[17.17026,42.75016],[16.95345,42.75016],[16.95345,42.66716],[16.77887,42.66716],[16.77835,42.75016],[16.72832,42.7502],[16.72829,42.74769],[16.70636,42.74775],[16.70628,42.75026],[16.62008,42.75029],[16.62008,42.97947],[16.60605,42.9795],[16.60601,42.99109],[16.62013,42.99137],[16.61991,43.12523],[16.36989,43.12504],[16.36989,43.00006],[16.12003,43.00038],[16.12038,42.95831],[16.01266,42.95824],[16.0124,42.9502],[15.99515,42.95008],[15.99524,43.08356],[16.1202,43.08356],[16.1202,43.12529],[16.24552,43.12492],[16.24466,43.37486],[15.99524,43.37511],[15.99524,43.48902],[15.99309,43.48911],[15.99313,43.49558],[15.99524,43.49558],[15.99524,43.49848],[15.9827,43.49854],[15.98266,43.49042],[15.95648,43.49032],[15.95657,43.50007],[15.87018,43.50007],[15.87018,43.62508],[15.74555,43.62483],[15.74547,43.61949],[15.62011,43.61936],[15.62024,43.62085],[15.49544,43.62085],[15.49527,43.62508],[15.3703,43.62502],[15.37028,43.74428],[15.35541,43.74433],[15.35537,43.74996],[15.12019,43.74996],[15.12011,43.87507],[14.99539,43.87507],[14.99522,44.00004],[14.87051,44.00004],[14.87025,44.12487],[14.7452,44.12493],[14.74545,44.24557],[14.7331,44.24557],[14.73292,44.24999],[14.49543,44.24993],[14.49552,44.4913],[14.48419,44.49987],[14.31004,44.49987],[14.31004,44.49706],[14.29871,44.49709],[14.29871,44.49999],[14.24549,44.50006],[14.24515,44.61552],[14.22884,44.61577],[14.22884,44.62493],[14.12035,44.62444],[14.12052,44.7499],[14.24532,44.75003],[14.24515,44.87497],[14.00448,44.87497],[14.00499,44.7995],[13.99555,44.79938],[13.99538,44.75015],[13.74544,44.74978],[13.74561,44.87497],[13.62064,44.87509],[13.62039,45.04157],[13.60382,45.04139],[13.60391,45.12478],[13.4955,45.12478],[13.49567,45.46519],[13.48675,45.46519],[13.4864,45.49648],[13.49533,45.49648],[13.49516,45.50683],[13.53807,45.50719],[13.53807,45.49997],[13.87041,45.49985],[13.87058,45.62472],[14.11983,45.62472],[14.12052,45.49997],[14.20618,45.50033],[14.20618,45.5096],[14.27708,45.50996],[14.27725,45.50021],[14.36995,45.50009],[14.37012,45.62484],[14.49526,45.62472],[14.4956,45.7498],[14.62023,45.74992],[14.6204,45.62496],[14.99514,45.62484],[14.99548,45.50009],[15.24508,45.49997],[15.24525,45.71649],[15.23701,45.71661],[15.23701,45.72524],[15.24542,45.72524],[15.24559,45.87483],[15.61998,45.87507],[15.61981,45.9997],[15.49519,45.99947],[15.49484,46.25003],[15.74512,46.24979],[15.7453,46.37489],[15.99472,46.37512],[15.99472,46.49993],[16.24517,46.49981],[16.245,46.6248]],[[15.68264,42.95868],[15.80795,42.95818],[15.80761,43.08318],[15.68264,43.08368],[15.68264,42.95868]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-topo-25-new",name:"dgu.hr: Topo 25 new",type:"wms",template:"https://geoportal.dgu.hr/services/tk/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=tk:TK25_NOVI&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[16.49987,42.70991],[17.04993,42.70902],[17.04963,42.7443],[17.17218,42.74374],[17.17218,42.77966],[17.04993,42.78022],[17.05023,42.79823],[17.00138,42.79873],[17.00138,42.82574],[16.96479,42.82585],[16.96456,42.79895],[16.49941,42.79968],[16.49987,42.7711],[16.4826,42.7711],[16.4826,42.74363],[16.50002,42.74363],[16.49987,42.70991]],[[13.42719,45.54859],[13.61807,45.55389],[13.62292,45.46386],[13.76198,45.4671],[13.76191,45.46936],[13.77081,45.46955],[13.77088,45.46742],[14.58109,45.48389],[14.58723,45.30405],[14.77841,45.30701],[14.78114,45.21712],[14.97186,45.21981],[14.97694,45.03983],[14.78659,45.03716],[14.78924,44.94727],[14.5992,44.94406],[14.6051,44.76444],[14.2263,44.75745],[14.21941,44.93719],[14.05163,44.93381],[14.05277,44.91124],[14.03103,44.91065],[14.03717,44.75352],[13.8478,44.74922],[13.845,44.81933],[13.82273,44.8189],[13.82175,44.83856],[13.65443,44.83453],[13.64534,45.01441],[13.45529,45.00943],[13.42719,45.54859]],[[15.44375,43.10094],[15.48034,43.10133],[15.48064,43.08341],[15.44383,43.08352],[15.44375,43.10094]],[[15.72242,46.21722],[15.91671,46.21827],[15.91962,45.94844],[15.7261,45.94721],[15.72242,46.21722]],[[15.57866,43.0662],[15.58047,42.97671],[15.76423,42.97704],[15.76438,42.99522],[15.81316,42.99588],[15.81347,43.01328],[15.7715,43.0135],[15.77181,43.04041],[15.76363,43.04041],[15.76393,43.06764],[15.57866,43.0662]],[[16.3049,46.48965],[16.49957,46.48986],[16.49972,46.39978],[16.30505,46.39967],[16.3049,46.48965]],[[15.53442,45.85567],[16.30679,45.85976],[16.30619,46.03979],[16.50032,46.04037],[16.49998,46.12978],[16.69404,46.12965],[16.6944,46.21962],[16.88874,46.21911],[16.88837,46.12915],[17.27626,46.12721],[17.27514,46.03719],[17.0814,46.0383],[17.08045,45.94841],[17.27391,45.94717],[17.27268,45.85726],[17.46569,45.8558],[17.46429,45.76578],[17.84972,45.762],[17.84113,45.40218],[18.03272,45.39968],[18.03778,45.57956],[18.22977,45.57683],[18.22707,45.48686],[18.41895,45.48394],[18.42194,45.57372],[18.806,45.56667],[18.7986,45.38682],[19.18132,45.37853],[19.17731,45.28839],[18.98605,45.29292],[18.97825,45.11311],[18.78775,45.11707],[18.78419,45.02731],[18.59384,45.03073],[18.60395,45.30056],[18.22152,45.30697],[18.22428,45.39693],[18.03286,45.39964],[18.02795,45.21976],[18.21887,45.2172],[18.21341,45.03721],[17.4521,45.04599],[17.45339,45.12428],[17.44581,45.12431],[17.44577,45.13107],[17.45339,45.13107],[17.45346,45.13599],[17.42309,45.13617],[17.42309,45.13131],[17.35944,45.13181],[17.35954,45.13676],[16.49994,45.13997],[16.50032,44.96003],[16.11978,44.95936],[16.11914,45.04937],[15.92881,45.04857],[15.92784,45.13855],[15.54639,45.13604],[15.54942,44.95604],[15.7395,44.95747],[15.74304,44.68753],[15.93235,44.68862],[15.93144,44.7785],[16.12088,44.77934],[16.1258,44.50938],[16.31126,44.50983],[16.3125,44.14984],[16.49991,44.14998],[16.50002,44.06],[16.68726,44.05983],[16.68669,43.87982],[16.87325,43.87936],[16.87221,43.70925],[16.87842,43.70922],[16.87837,43.69932],[17.05822,43.6986],[17.05747,43.6086],[17.24319,43.6075],[17.24217,43.51755],[17.42761,43.51622],[17.4236,43.24615],[17.60821,43.24448],[17.60668,43.15452],[17.791,43.15255],[17.78723,42.97258],[17.9711,42.97037],[17.96681,42.79042],[18.15005,42.78789],[18.14778,42.69789],[18.3307,42.6951],[18.32853,42.62021],[18.37964,42.61937],[18.37926,42.60432],[18.51071,42.60206],[18.50551,42.43715],[18.55404,42.43625],[18.55355,42.42127],[18.68705,42.41881],[18.68394,42.32883],[18.50215,42.33212],[18.50454,42.40708],[18.48025,42.40746],[18.48072,42.42256],[18.32286,42.42516],[18.32527,42.5084],[18.31006,42.50865],[18.31025,42.51538],[18.14308,42.51789],[18.14539,42.60794],[17.59706,42.61447],[17.59861,42.70448],[17.23248,42.7074],[17.23346,42.79734],[17.33863,42.79667],[17.33875,42.80837],[17.40722,42.80784],[17.40714,42.7962],[17.41691,42.79617],[17.41813,42.88612],[16.50006,42.88987],[16.49994,43.06991],[16.31585,43.06971],[16.31611,42.97987],[16.13228,42.9792],[16.13273,42.88914],[15.94913,42.88859],[15.94746,43.07965],[16.13152,43.08075],[16.13114,43.15921],[16.31573,43.15987],[16.31543,43.16694],[16.30505,43.167],[16.30498,43.17777],[16.31558,43.17788],[16.31497,43.33975],[16.13008,43.33926],[16.12955,43.41313],[16.11724,43.41305],[16.11717,43.42569],[16.10607,43.42567],[16.106,43.42923],[15.9442,43.42857],[15.94344,43.5087],[15.91625,43.50859],[15.91618,43.51839],[15.75789,43.51755],[15.75673,43.60747],[15.3852,43.6044],[15.38335,43.69456],[15.19751,43.69259],[15.19372,43.8618],[15.17509,43.86158],[15.17463,43.87207],[15.00701,43.87026],[15.00481,43.96046],[15.37823,43.9646],[15.37687,44.05438],[15.18963,44.05242],[15.18357,44.32247],[14.99572,44.32011],[14.98633,44.67999],[15.17548,44.68236],[15.16299,45.22216],[15.35396,45.22424],[15.35218,45.31423],[15.5434,45.31596],[15.53442,45.85567]],[[16.23264,42.36768],[16.35459,42.36858],[16.35413,42.4036],[16.23218,42.40349],[16.23264,42.36768]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{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",zoomExtent:[0,18],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:"tms",template:"https://osm.rrze.fau.de/protected/YgktSWTTo6HS9nKi/lbe2016/{zoom}/{x}/{y}.jpg",endDate:"2016-03-18T00:00:00.000Z",startDate:"2016-03-18T00:00:00.000Z",zoomExtent:[0,21],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"},{id:"Erlangen-2018",name:"Erlangen Luftbild (2018 5,0 cm)",type:"tms",template:"https://osm.rrze.fau.de/protected/YgktSWTTo6HS9nKi/lbe2018/{zoom}/{x}/{y}.jpg",endDate:"2018-04-09T00:00:00.000Z",startDate:"2018-04-09T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[10.85157,49.55172],[10.93037,49.55272],[10.9326,49.55818],[10.91627,49.55882],[10.91144,49.56652],[10.92281,49.60584],[10.9108,49.63751],[10.92775,49.64838],[10.94444,49.64321],[10.96487,49.63317],[10.96384,49.62711],[10.9745,49.62483],[10.9786,49.61794],[10.98478,49.61694],[10.998,49.62228],[11.00813,49.62194],[11.0071,49.61449],[11.01448,49.61394],[11.02081,49.62292],[11.05757,49.63993],[11.08136,49.62614],[11.08312,49.62034],[11.10419,49.61524],[11.11767,49.61449],[11.11997,49.60377],[11.13132,49.60348],[11.1272,49.58815],[11.10271,49.58378],[11.08898,49.59124],[11.07988,49.60837],[11.05808,49.60971],[11.06049,49.59803],[11.06512,49.59614],[11.0689,49.58879],[11.06031,49.58556],[11.04469,49.58913],[11.03851,49.58556],[11.03577,49.57276],[11.03937,49.55785],[11.04272,49.5432],[11.03465,49.5324],[10.97531,49.53467],[10.97158,49.53084],[10.94279,49.52986],[10.94273,49.50582],[10.92163,49.50566],[10.91245,49.51829],[10.88818,49.52834],[10.87518,49.51725],[10.84872,49.52291],[10.84652,49.52797],[10.84637,49.53223],[10.85157,49.55172]]],terms_text:"© Stadt Erlangen | © Hansa Luftbild AG",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:"https://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:"https://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_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-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:[6,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:"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:"gothenburg-citymap",name:"Gothenburg City map",type:"wms",template:"https://opengeodata.goteborg.se/services/stadskarta.wms.v4/ows?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=stadskarta&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,21],polygon:[[[10.8078,58.34266],[13.0258,58.34266],[13.0258,57.0896],[11.70328,57.0896],[10.8078,58.34266]]],terms_url:"https://catalog.goteborg.se/catalog/6/datasets/718",terms_text:"© Gothenburg municipality, CC0",best:true,description:"The city map is an overview map that describes Gothenburg. It contains general information about land, communications, hydrography, buildings, address numbers and street names, administrative division and other orientation text.",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/G%C3%B6teborg_kommunvapen_-_Riksarkivet_Sverige.png/206px-G%C3%B6teborg_kommunvapen_-_Riksarkivet_Sverige.png"},{id:"GRAFCAN_Express-Canary_Islands",name:"GRAFCAN OrtoExpress - 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_url:"https://catalogo.idecanarias.es/geonetwork/srv/spa/catalog.search#/metadata/spagrafcan_ORTOWMS_20160101",terms_text:"GRAFCAN OrtoExpress",description:"High resolution imagery covering the Canary Islands, 20 cm/pixel. More recent in some urban areas than the higher-resolution \"GRAFCAN OrtoExpress Urbana\"."},{id:"GRAFCAN-Canary_Islands",name:"GRAFCAN OrtoExpress Urbana - 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_url:"https://catalogo.idecanarias.es/geonetwork/srv/spa/catalog.search#/metadata/spagrafcan_ORTOURBANAWMS_20160101",terms_text:"GRAFCAN OrtoExpress Urbana",best:true,description:"High resolution imagery covering the Canary Islands, 12.5 or 10 cm/pixel in urban areas, and 20 cm/pixel elsewhere. Older in some urban areas than the lower-resolution \"GRAFCAN OrtoExpress\"."},{id:"GrandNancy_Orthophotographie_2012",name:"GrandNancy - Orthophoto - 2012",type:"tms",template:"https://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:"https://www.gov.si/drzavni-organi/organi-v-sestavi/geodetska-uprava/",terms_text:"CC-BY ©2020 Geodetska uprava Republike Slovenije (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:"https://www.gov.si/drzavni-organi/organi-v-sestavi/geodetska-uprava/",terms_text:"CC-BY ©2020 Geodetska uprava Republike Slovenije (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:"https://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.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.png"},{id:"IBGE_Nomes_Ruas",name:"IBGE Nomes de Ruas",type:"tms",template:"https://api.maptiler.com/maps/b2037b15-5614-4fed-9608-9830b8dc574a/256/{zoom}/{x}/{y}.png?key=YmPoUxbTlEHlrASzv56Z",zoomExtent:[4,22],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, OSM Brasil",icon:"https://osmlab.github.io/editor-layer-index/sources/south-america/br/IBGE.png",overlay:true},{id:"IBGE_BC250_Aglomerado_Rural",name:"IBGE-BC250-Aglomerado Rural Isolado",type:"wms",template:"https://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:"https://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:"https://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:"https://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:"https://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:"https://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:"https://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:"https://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:"https://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,19],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:"https://www.ign.gob.ar/",terms_text:"Instituto Geográfico Nacional de la República Argentina",icon:"https://www.ign.gob.ar/sites/default/files/favicon.png"},{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-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:"IndianaMap2016",name:"IndianaMap Orthoimagery 2016",type:"wms",template:"https://maps.indiana.edu/arcgis/services/Imagery/Orthos_2016/MapServer/WmsServer?FORMAT=image/jpeg&TRANSPARENT=FALSE&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:[4,20],polygon:[[[-86.93095,41.086],[-86.93041,40.99844],[-86.92929,40.9136],[-86.69579,40.91281],[-86.57968,40.91095],[-86.58017,40.82402],[-86.58133,40.73508],[-86.69536,40.73677],[-86.75238,40.73713],[-86.75719,40.72441],[-86.74927,40.71899],[-86.75651,40.709],[-86.75831,40.70082],[-86.7528,40.68632],[-86.75884,40.68177],[-86.74611,40.67998],[-86.7455,40.67817],[-86.75688,40.66457],[-86.7743,40.66412],[-86.7711,40.56207],[-86.69544,40.56209],[-86.69619,40.17853],[-86.24242,40.18069],[-86.24065,39.94074],[-86.24067,39.92607],[-86.32632,39.92421],[-86.6937,39.92283],[-86.69294,39.86434],[-86.68456,39.86481],[-86.68529,39.68845],[-86.68574,39.62997],[-86.66543,39.63046],[-86.64035,39.63049],[-86.64033,39.62006],[-86.65224,39.60871],[-86.65462,39.6001],[-86.65276,39.56656],[-86.64915,39.55523],[-86.67058,39.53389],[-86.68607,39.52616],[-86.68604,39.51438],[-86.68593,39.46995],[-86.63229,39.46957],[-86.63088,39.34809],[-86.64755,39.35578],[-86.65112,39.35623],[-86.65585,39.34353],[-86.65345,39.33402],[-86.66534,39.33173],[-86.68439,39.33715],[-86.6849,39.00994],[-86.68529,38.99402],[-86.31766,38.99358],[-86.27858,38.99352],[-86.27876,38.93414],[-86.27518,38.763],[-86.25877,38.76964],[-86.25766,38.76989],[-86.25632,38.76464],[-86.25595,38.76412],[-86.2429,38.7655],[-86.24046,38.76564],[-86.22518,38.77887],[-86.22435,38.77922],[-86.2209,38.77188],[-86.22004,38.77071],[-86.2156,38.77862],[-86.21476,38.77934],[-86.20226,38.77383],[-86.19747,38.77366],[-86.1851,38.7837],[-86.1836,38.78391],[-86.17766,38.77509],[-86.173,38.77274],[-86.13588,38.76259],[-86.13545,38.76235],[-86.10381,38.76552],[-86.10252,38.76556],[-86.0931,38.78364],[-86.09219,38.78371],[-86.07581,38.77482],[-86.07469,38.77421],[-86.062,38.77849],[-86.06126,38.77817],[-86.02771,38.75574],[-86.02649,38.75529],[-86.0218,38.76733],[-86.02092,38.76757],[-86.01255,38.75668],[-86.01133,38.75667],[-85.98508,38.76808],[-85.98354,38.76793],[-85.98577,38.75933],[-85.98563,38.75823],[-85.97835,38.7528],[-85.97723,38.75239],[-85.96239,38.76394],[-85.96129,38.76424],[-85.95064,38.76109],[-85.95026,38.76081],[-85.94987,38.75358],[-85.94931,38.75345],[-85.93697,38.76276],[-85.93642,38.76271],[-85.93698,38.75636],[-85.93658,38.7555],[-85.91801,38.74601],[-85.91691,38.74554],[-85.91924,38.75314],[-85.91903,38.75375],[-85.91141,38.7472],[-85.91054,38.74747],[-85.91027,38.75725],[-85.90966,38.75713],[-85.90954,38.75157],[-85.90878,38.75108],[-85.89661,38.75053],[-85.8963,38.75027],[-85.89425,38.7303],[-85.89408,38.72998],[-85.88619,38.73486],[-85.88581,38.73485],[-85.88175,38.72502],[-85.88146,38.72485],[-85.84755,38.73477],[-85.84734,38.73492],[-85.82006,38.77551],[-85.81989,38.77593],[-85.8048,38.77951],[-85.80465,38.77961],[-85.8074,38.78896],[-85.80736,38.7892],[-85.79512,38.80755],[-85.79493,38.8078],[-85.79893,39.12907],[-85.688,39.13067],[-85.68507,39.3387],[-85.68494,39.35049],[-85.94282,39.34752],[-85.95215,39.3473],[-85.954,39.86768],[-85.95401,39.86965],[-85.94827,39.86972],[-85.93807,39.86981],[-85.93738,39.92643],[-85.93759,39.92714],[-85.86955,39.92885],[-85.86242,39.92894],[-85.86218,40.40686],[-85.86405,40.56663],[-86.01292,40.56503],[-86.16541,40.56325],[-86.16901,40.96017],[-86.16763,40.99646],[-86.01846,40.9978],[-85.94662,40.99932],[-85.94044,40.7008],[-85.93961,40.65272],[-85.67424,40.65399],[-85.6385,40.65421],[-85.64054,40.78532],[-85.64402,41.00129],[-85.68359,41.00155],[-85.68562,41.08958],[-85.68764,41.17898],[-85.65224,41.17875],[-85.65887,41.69895],[-85.6598,41.7591],[-86.51946,41.75968],[-86.52422,41.75966],[-86.52661,41.6516],[-86.52664,41.65022],[-86.49012,41.64955],[-86.48727,41.64952],[-86.48627,41.58005],[-86.48617,41.57768],[-86.49511,41.56343],[-86.49809,41.56109],[-86.49811,41.52928],[-86.4982,41.52832],[-86.50521,41.51995],[-86.52484,41.51999],[-86.52465,41.43601],[-86.52467,41.43287],[-86.58209,41.43339],[-86.64151,41.4338],[-86.69839,41.40422],[-86.70206,41.40058],[-86.73794,41.32927],[-86.73914,41.32246],[-86.77633,41.29335],[-86.78424,41.28516],[-86.8465,41.26731],[-86.87032,41.26452],[-86.92821,41.23801],[-86.93004,41.2371],[-86.93095,41.086]],[[-86.33109,38.18099],[-86.28777,38.15805],[-86.2718,38.13787],[-86.27866,38.09851],[-86.27872,38.0893],[-86.26689,38.05712],[-86.26127,38.05272],[-86.19093,38.01644],[-86.17898,38.01131],[-86.10023,38.01074],[-86.09466,38.00864],[-86.04537,37.95884],[-86.04352,37.95869],[-86.03632,37.96156],[-86.03517,37.96327],[-86.03106,37.99164],[-86.02831,37.99322],[-85.94916,38.00484],[-85.94706,38.00508],[-85.92644,38.02085],[-85.925,38.02259],[-85.90524,38.08899],[-85.90505,38.09007],[-85.90893,38.14231],[-85.90882,38.14497],[-85.90039,38.17904],[-85.89986,38.17988],[-85.89992,38.18561],[-85.95077,38.18574],[-85.9549,38.26055],[-85.97366,38.26063],[-85.97355,38.27558],[-85.99466,38.27522],[-85.99564,38.30242],[-86.0144,38.30249],[-86.01481,38.33059],[-86.033,38.33067],[-86.03244,38.41768],[-86.25445,38.4224],[-86.25917,38.41516],[-86.26447,38.412],[-86.25802,38.41017],[-86.25215,38.40699],[-86.24927,38.39066],[-86.24576,38.38794],[-86.25517,38.38433],[-86.26163,38.38117],[-86.2593,38.37754],[-86.25816,38.36666],[-86.24819,38.36301],[-86.2482,38.36029],[-86.25291,38.35577],[-86.25703,38.35442],[-86.26405,38.36123],[-86.2705,38.3617],[-86.27353,38.3243],[-86.27306,38.32159],[-86.28346,38.33154],[-86.28605,38.33195],[-86.28451,38.32105],[-86.28941,38.31641],[-86.28263,38.31106],[-86.27581,38.30841],[-86.27864,38.30298],[-86.27444,38.29991],[-86.27136,38.30714],[-86.26773,38.30867],[-86.25894,38.30638],[-86.26423,38.30413],[-86.26485,38.29461],[-86.25253,38.29504],[-86.25313,38.29142],[-86.26959,38.27831],[-86.27486,38.27832],[-86.27612,38.25294],[-86.27737,38.2271],[-86.27972,38.22348],[-86.28442,38.22077],[-86.29319,38.22487],[-86.29788,38.2217],[-86.29848,38.21944],[-86.28912,38.21398],[-86.29557,38.20946],[-86.29032,38.20175],[-86.30627,38.20273],[-86.30848,38.20087],[-86.31671,38.18955],[-86.31847,38.18819],[-86.3097,38.18183],[-86.31264,38.17822],[-86.33109,38.18099]]],terms_text:"Indiana Office of Information Technology, Indiana University Spatial Data Portal, UITS, Woolpert Inc.",description:"Orthophotography for 24 counties in central Indiana, collected during leaf-off conditions in 2016. One-foot resolution for Bartholomew, Boon, Brown, Carroll, Cass, Clinton, Elkhart, Hamilton, Hendricks, Howard, Johnson, Marion, Marshall, Pulaski, St. Joseph, Starke, and Tipton counties. Six-inch resolution for Fulton, Harrison, Jackson, Kosciusko, Monroe, Morgan, and Wabash counties.",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/in/IU.gif"},{id:"IndianaMap2017",name:"IndianaMap Orthoimagery 2017",type:"wms",template:"https://maps.indiana.edu/arcgis/services/Imagery/Orthos_2017/MapServer/WmsServer?FORMAT=image/jpeg&TRANSPARENT=FALSE&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:[4,20],polygon:[[[-86.68529,38.99402],[-86.67996,38.27838],[-86.67992,38.26342],[-86.66644,38.26344],[-86.57149,38.26445],[-86.57202,38.20824],[-86.46132,38.20826],[-86.46253,38.12986],[-86.46293,38.11943],[-86.43208,38.12614],[-86.43175,38.12612],[-86.40507,38.1058],[-86.40141,38.10504],[-86.38722,38.12463],[-86.37977,38.12927],[-86.336,38.1292],[-86.33514,38.12924],[-86.32345,38.13903],[-86.32091,38.1471],[-86.33079,38.15764],[-86.33553,38.15941],[-86.36675,38.1634],[-86.37038,38.16528],[-86.37546,38.18741],[-86.37402,38.19055],[-86.36106,38.19673],[-86.35711,38.19649],[-86.31732,38.17822],[-86.31264,38.17822],[-86.31591,38.18524],[-86.31847,38.18819],[-86.30919,38.19754],[-86.30848,38.20087],[-86.29384,38.2013],[-86.29032,38.20175],[-86.29557,38.20946],[-86.2903,38.21081],[-86.28912,38.21398],[-86.29848,38.21944],[-86.29788,38.2217],[-86.27972,38.22348],[-86.27737,38.2271],[-86.27551,38.25702],[-86.27486,38.27832],[-86.25313,38.29142],[-86.25253,38.29504],[-86.26015,38.29733],[-86.26485,38.29461],[-86.25895,38.30503],[-86.25894,38.30638],[-86.27136,38.30714],[-86.27444,38.29991],[-86.28263,38.31106],[-86.28941,38.31641],[-86.28451,38.32105],[-86.28307,38.32473],[-86.28754,38.32958],[-86.28605,38.33195],[-86.27594,38.32018],[-86.27306,38.32159],[-86.27345,38.35627],[-86.2705,38.3617],[-86.25291,38.35577],[-86.2482,38.36029],[-86.2593,38.37754],[-86.26163,38.38117],[-86.24635,38.38613],[-86.24576,38.38794],[-86.25334,38.402],[-86.25215,38.40699],[-86.26272,38.40973],[-86.26447,38.412],[-86.25917,38.41516],[-86.25445,38.4224],[-86.03244,38.41768],[-86.033,38.33067],[-86.01481,38.33059],[-86.0144,38.30249],[-85.99564,38.30242],[-85.99466,38.27522],[-85.97355,38.27558],[-85.97359,38.27054],[-85.97366,38.26063],[-85.9549,38.26055],[-85.95077,38.18574],[-85.89992,38.18561],[-85.89986,38.17988],[-85.84499,38.23024],[-85.84422,38.23109],[-85.82696,38.27839],[-85.82559,38.2794],[-85.78149,38.28825],[-85.78098,38.28829],[-85.74553,38.26698],[-85.74392,38.2671],[-85.67667,38.29986],[-85.67558,38.30067],[-85.65256,38.32841],[-85.65165,38.3301],[-85.63191,38.3978],[-85.63166,38.39877],[-85.60737,38.43805],[-85.60677,38.43869],[-85.58381,38.45058],[-85.58123,38.45136],[-85.50038,38.46755],[-85.49931,38.46799],[-85.46866,38.50867],[-85.46682,38.51025],[-85.42008,38.53466],[-85.41957,38.53503],[-85.41566,38.56235],[-85.41566,38.56312],[-85.43759,38.60284],[-85.43824,38.60468],[-85.43837,38.65779],[-85.43854,38.65896],[-85.45673,38.68734],[-85.4569,38.68851],[-85.45197,38.70988],[-85.45184,38.7102],[-85.43609,38.7285],[-85.43532,38.729],[-85.41644,38.73643],[-85.41489,38.73677],[-85.36507,38.73034],[-85.3636,38.73037],[-85.27859,38.74159],[-85.2767,38.74135],[-85.24937,38.73348],[-85.24859,38.73314],[-85.21096,38.69444],[-85.20967,38.69367],[-85.16501,38.6898],[-85.16321,38.69019],[-84.9939,38.77765],[-84.99229,38.77815],[-84.94286,38.77541],[-84.94121,38.77565],[-84.88761,38.79478],[-84.88724,38.7948],[-84.81562,38.78393],[-84.8149,38.78428],[-84.8131,38.79745],[-84.81339,38.79851],[-84.83,38.82966],[-84.82993,38.83037],[-84.79418,38.85753],[-84.79354,38.85784],[-84.78486,38.87357],[-84.78461,38.87498],[-84.8015,38.89171],[-84.80298,38.89227],[-84.86245,38.89789],[-84.8637,38.89809],[-84.87596,38.90778],[-84.87702,38.90901],[-84.87765,38.92059],[-84.87706,38.92147],[-84.83422,38.95885],[-84.83363,38.95943],[-84.82995,38.97142],[-84.83003,38.97305],[-84.89728,39.05471],[-84.89739,39.05548],[-84.82239,39.10457],[-84.81993,39.10544],[-84.80397,40.30267],[-84.80358,40.31025],[-84.80292,40.92236],[-84.80292,40.92257],[-85.3224,40.91703],[-85.33597,40.91703],[-85.33847,41.12909],[-85.3389,41.15113],[-85.33818,41.17286],[-85.31331,41.17316],[-85.30997,41.1732],[-85.30921,41.25112],[-85.30777,41.26413],[-84.84755,41.27],[-84.80356,41.27116],[-84.80613,41.74312],[-84.80588,41.76022],[-85.65074,41.7591],[-85.6598,41.7591],[-85.65224,41.17875],[-85.68764,41.17898],[-85.68359,41.00155],[-85.64402,41.00129],[-85.64014,40.76899],[-85.6385,40.65421],[-85.90024,40.65254],[-85.93961,40.65272],[-85.94663,40.99751],[-85.94662,40.99932],[-86.12927,40.99726],[-86.16763,40.99646],[-86.16805,40.64354],[-86.16541,40.56325],[-85.89975,40.56636],[-85.86405,40.56663],[-85.86211,40.37841],[-85.86144,40.21908],[-86.12848,40.21759],[-86.2435,40.21516],[-86.24065,39.94074],[-86.24067,39.92607],[-85.93779,39.92712],[-85.93759,39.92714],[-85.93807,39.87702],[-85.93807,39.86981],[-85.95364,39.86965],[-85.95401,39.86965],[-85.95269,39.36098],[-85.95215,39.3473],[-85.79977,39.35073],[-85.68494,39.35049],[-85.688,39.13067],[-85.79893,39.12907],[-85.79535,38.82447],[-85.79493,38.8078],[-85.80719,38.78942],[-85.80736,38.7892],[-85.80444,38.78003],[-85.80451,38.77981],[-85.81957,38.77608],[-85.81989,38.77593],[-85.84718,38.73514],[-85.84734,38.73492],[-85.88015,38.72487],[-85.88046,38.72479],[-85.88555,38.73468],[-85.88581,38.73485],[-85.89381,38.72974],[-85.89408,38.72998],[-85.89621,38.74987],[-85.8963,38.75027],[-85.90901,38.75661],[-85.90966,38.75713],[-85.9097,38.74805],[-85.91054,38.74747],[-85.91869,38.75411],[-85.91903,38.75375],[-85.91605,38.7457],[-85.91691,38.74554],[-85.9358,38.75504],[-85.93658,38.7555],[-85.9361,38.76235],[-85.93642,38.76271],[-85.94798,38.75356],[-85.94931,38.75345],[-85.96056,38.7641],[-85.96129,38.76424],[-85.97598,38.75232],[-85.97723,38.75239],[-85.985,38.75764],[-85.98563,38.75823],[-85.98233,38.76692],[-85.98256,38.76759],[-86.01028,38.75687],[-86.01133,38.75667],[-86.01902,38.76736],[-86.02092,38.76757],[-86.02585,38.75538],[-86.02649,38.75529],[-86.06023,38.7775],[-86.06126,38.77817],[-86.0734,38.77417],[-86.07469,38.77421],[-86.09118,38.7835],[-86.09219,38.78371],[-86.10176,38.76589],[-86.10252,38.76556],[-86.13481,38.76227],[-86.13545,38.76235],[-86.17165,38.77244],[-86.173,38.77274],[-86.18176,38.78289],[-86.1836,38.78391],[-86.19724,38.77408],[-86.19747,38.77366],[-86.21178,38.77945],[-86.21476,38.77934],[-86.21851,38.7705],[-86.22004,38.77071],[-86.22363,38.77925],[-86.22435,38.77922],[-86.23696,38.76775],[-86.24046,38.76564],[-86.27167,38.76451],[-86.27518,38.763],[-86.27875,38.986],[-86.27858,38.99352],[-86.68529,38.99402]],[[-87.9869,38.25738],[-87.98177,38.23376],[-87.9843,38.2304],[-87.79945,38.22857],[-87.79978,38.21407],[-87.79955,38.20092],[-87.68887,38.20204],[-87.68891,38.1685],[-87.46706,38.16543],[-87.46665,38.19389],[-87.46633,38.20354],[-87.35565,38.20482],[-87.31699,38.20508],[-87.31686,38.24588],[-87.31599,38.37733],[-87.33482,38.38173],[-87.34541,38.38347],[-87.40584,38.38032],[-87.40759,38.3794],[-87.40712,38.43606],[-87.44473,38.43623],[-87.44453,38.46706],[-87.46394,38.4669],[-87.46401,38.51722],[-87.4642,38.53217],[-87.47051,38.51988],[-87.47047,38.51626],[-87.47569,38.51123],[-87.49091,38.50567],[-87.49255,38.49704],[-87.49548,38.49566],[-87.50017,38.49517],[-87.51323,38.50367],[-87.52786,38.49857],[-87.5314,38.49899],[-87.52985,38.51442],[-87.53637,38.51844],[-87.54693,38.51654],[-87.5498,38.51153],[-87.54139,38.49936],[-87.54069,38.49166],[-87.55772,38.4897],[-87.57302,38.49093],[-87.57962,38.49948],[-87.58373,38.49945],[-87.58059,38.48588],[-87.57997,38.48362],[-87.59023,38.46222],[-87.59888,38.45082],[-87.63108,38.44282],[-87.63579,38.44323],[-87.6371,38.45228],[-87.64069,38.45587],[-87.65128,38.45714],[-87.656,38.458],[-87.6723,38.44833],[-87.67345,38.4465],[-87.66273,38.43799],[-87.66206,38.43256],[-87.7433,38.41401],[-87.74413,38.4141],[-87.77157,38.37799],[-87.77267,38.37656],[-87.80361,38.36406],[-87.80768,38.36175],[-87.82237,38.34582],[-87.82357,38.34448],[-87.83209,38.29841],[-87.83227,38.29745],[-87.84315,38.27932],[-87.84663,38.27702],[-87.86249,38.28335],[-87.86305,38.28425],[-87.8684,38.31254],[-87.87073,38.31296],[-87.90788,38.27006],[-87.90916,38.26955],[-87.91712,38.27358],[-87.91753,38.27531],[-87.9074,38.2931],[-87.90796,38.29582],[-87.93145,38.29737],[-87.93436,38.29517],[-87.9475,38.27861],[-87.94981,38.27675],[-87.94382,38.26401],[-87.94385,38.2622],[-87.95967,38.24218],[-87.96045,38.24177],[-87.97899,38.25866],[-87.97997,38.25958],[-87.9869,38.25738]]],terms_text:"Indiana Office of Information Technology, Indiana University Spatial Data Portal, UITS, Woolpert Inc.",description:"Orthophotography for 39 counties in eastern Indiana, collected during leaf-off conditions in 2017. One-foot resolution for Adams, Blackford, Clark, Crawford, Decatur, Delaware, Fayette, Floyd, Franklin, Grant, Hamilton, Hancock, Henry, Huntington, Jay, Jefferson, Jennings, Lagrange, Lawrence, Madison, Miami, Noble, Ohio, Orange, Randolph, Ripley, Rush, Scott, Switzerland, Union, and Washington counties. Six-inch resolution for Dearborn, Dekalb, Gibson, Shelby, Steuben, Wayne, Wells, and Whitley counties. Three-inch resolution for Hamilton County and Shelbyville.",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/in/IU.gif"},{id:"IndianaMap2018",name:"IndianaMap Orthoimagery 2018",type:"wms",template:"https://maps.indiana.edu/arcgis/services/Imagery/Orthos_2018/MapServer/WmsServer?FORMAT=image/jpeg&TRANSPARENT=FALSE&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:[4,20],polygon:[[[-88.0997,37.90441],[-88.06863,37.85773],[-88.06288,37.85102],[-88.02672,37.8371],[-88.02543,37.83344],[-88.03865,37.82239],[-88.04431,37.82151],[-88.07796,37.83094],[-88.08182,37.83114],[-88.09143,37.81819],[-88.08912,37.815],[-88.06783,37.79988],[-88.06397,37.799],[-88.03556,37.81121],[-88.03118,37.8108],[-88.02509,37.80253],[-88.02502,37.7999],[-88.00471,37.80015],[-87.9971,37.79767],[-87.95948,37.77311],[-87.95259,37.77174],[-87.93323,37.79697],[-87.93255,37.79767],[-87.90681,37.80762],[-87.9046,37.81253],[-87.90777,37.83761],[-87.91028,37.84342],[-87.94102,37.87917],[-87.94084,37.88334],[-87.89616,37.9284],[-87.89614,37.9284],[-87.87326,37.92145],[-87.87254,37.921],[-87.8381,37.87977],[-87.83388,37.87732],[-87.78517,37.87216],[-87.76563,37.86662],[-87.73176,37.88574],[-87.72678,37.89148],[-87.6765,37.90216],[-87.67573,37.90193],[-87.66286,37.88558],[-87.66282,37.88145],[-87.6754,37.86595],[-87.68163,37.85592],[-87.68069,37.84062],[-87.67919,37.83632],[-87.66718,37.82764],[-87.66652,37.82746],[-87.62501,37.82908],[-87.6154,37.83197],[-87.58873,37.86098],[-87.58843,37.86879],[-87.59037,37.88013],[-87.59158,37.88719],[-87.61988,37.90665],[-87.62027,37.90692],[-87.62842,37.92145],[-87.62896,37.92671],[-87.61082,37.9446],[-87.60622,37.94964],[-87.60051,37.97291],[-87.60035,37.97314],[-87.58818,37.97603],[-87.58795,37.97617],[-87.57576,37.96872],[-87.5755,37.9684],[-87.57705,37.95222],[-87.57749,37.95173],[-87.56396,37.93533],[-87.56188,37.9331],[-87.5115,37.90643],[-87.51077,37.90615],[-87.44949,37.94181],[-87.44779,37.94243],[-87.42852,37.94481],[-87.41858,37.94476],[-87.38051,37.93567],[-87.38025,37.9356],[-87.25525,37.86733],[-87.22094,37.84913],[-87.16486,37.84121],[-87.16232,37.84016],[-87.13291,37.7933],[-87.13094,37.78801],[-87.11433,37.78253],[-87.11113,37.78251],[-87.09197,37.78699],[-87.08835,37.78889],[-87.06805,37.80576],[-87.06784,37.80606],[-87.04926,37.85974],[-87.04385,37.8708],[-87.04535,37.8929],[-87.0451,37.89377],[-87.03589,37.90429],[-87.03344,37.90659],[-86.97896,37.9302],[-86.96904,37.93286],[-86.91963,37.9366],[-86.91933,37.93666],[-86.86322,37.9825],[-86.85595,37.98729],[-86.82349,37.99894],[-86.82007,37.99939],[-86.8037,37.99345],[-86.79498,37.98898],[-86.76733,37.93617],[-86.76505,37.93251],[-86.73445,37.89641],[-86.73146,37.89434],[-86.71846,37.89312],[-86.71614,37.89407],[-86.68601,37.91308],[-86.68093,37.91501],[-86.64773,37.90905],[-86.64708,37.90862],[-86.64404,37.8982],[-86.64475,37.89481],[-86.6625,37.85695],[-86.66158,37.84942],[-86.6553,37.84251],[-86.65252,37.84164],[-86.63351,37.84415],[-86.62576,37.84727],[-86.60462,37.85827],[-86.59811,37.86738],[-86.59595,37.91445],[-86.58858,37.92116],[-86.54072,37.91687],[-86.53416,37.91701],[-86.50783,37.92883],[-86.50662,37.93072],[-86.52383,37.96217],[-86.52517,37.96823],[-86.52183,38.03833],[-86.5194,38.04124],[-86.4719,38.04622],[-86.45219,38.05049],[-86.43135,38.07334],[-86.43052,38.0783],[-86.45991,38.09656],[-86.46386,38.10118],[-86.46253,38.12986],[-86.46132,38.20826],[-86.57202,38.20824],[-86.57149,38.26445],[-86.66644,38.26344],[-86.67992,38.26342],[-86.68299,39.25374],[-86.68439,39.33715],[-86.66059,39.33355],[-86.65582,39.33129],[-86.65527,39.34942],[-86.65112,39.35623],[-86.63088,39.34809],[-86.63229,39.46957],[-86.68593,39.46995],[-86.68604,39.51438],[-86.68607,39.52616],[-86.65331,39.54752],[-86.64915,39.55523],[-86.65459,39.5865],[-86.6552,39.59647],[-86.64033,39.62006],[-86.64035,39.63049],[-86.66543,39.63046],[-86.68574,39.62997],[-86.6952,40.4751],[-86.69544,40.56209],[-86.7711,40.56207],[-86.7743,40.66412],[-86.75688,40.66457],[-86.75336,40.67271],[-86.7455,40.67817],[-86.75702,40.67951],[-86.75884,40.68177],[-86.7528,40.68632],[-86.74978,40.68859],[-86.75526,40.69493],[-86.75831,40.70082],[-86.7541,40.71308],[-86.74927,40.71899],[-86.75719,40.72441],[-86.75236,40.73304],[-86.75238,40.73713],[-86.69536,40.73677],[-86.58133,40.73508],[-86.58017,40.82402],[-86.57968,40.91095],[-86.81376,40.91303],[-86.92929,40.9136],[-86.93,41.22984],[-86.93004,41.2371],[-86.87763,41.25996],[-86.87032,41.26452],[-86.81414,41.27329],[-86.78424,41.28516],[-86.74584,41.31701],[-86.73914,41.32246],[-86.70206,41.40058],[-86.69839,41.40422],[-86.64314,41.43266],[-86.64151,41.4338],[-86.58209,41.43339],[-86.52467,41.43287],[-86.52485,41.50529],[-86.52484,41.51999],[-86.50521,41.51995],[-86.50383,41.52024],[-86.49845,41.528],[-86.4982,41.52832],[-86.49511,41.56343],[-86.48648,41.57047],[-86.4872,41.64648],[-86.48727,41.64952],[-86.51944,41.65012],[-86.52664,41.65022],[-86.52427,41.75785],[-86.52422,41.75966],[-86.82433,41.76024],[-86.82569,41.76025],[-86.91273,41.72327],[-86.91638,41.71645],[-87.13327,41.64289],[-87.17696,41.63272],[-87.26141,41.62887],[-87.28612,41.62704],[-87.40469,41.65019],[-87.41161,41.64876],[-87.42034,41.65341],[-87.39377,41.67733],[-87.42266,41.69573],[-87.4622,41.68529],[-87.50542,41.70611],[-87.51756,41.71643],[-87.52398,41.71348],[-87.52495,41.64461],[-87.52517,41.63248],[-87.53086,40.16985],[-87.53141,40.15046],[-87.4896,40.15077],[-87.49052,40.13081],[-87.40632,40.13009],[-87.41637,40.06971],[-87.41627,40.062],[-87.42097,40.0538],[-87.43171,40.04738],[-87.42439,40.03927],[-87.43152,40.03287],[-87.4356,40.02377],[-87.43012,39.97076],[-87.44019,39.96117],[-87.4209,39.95405],[-87.41967,39.95225],[-87.43444,39.93446],[-87.4332,39.93084],[-87.41218,39.92873],[-87.40677,39.92831],[-87.41325,39.91874],[-87.40958,39.91333],[-87.38431,39.90625],[-87.37827,39.90267],[-87.3728,39.89681],[-87.36787,39.88551],[-87.37917,39.87773],[-87.37914,39.87592],[-87.35564,39.86474],[-87.35381,39.86203],[-87.37149,39.83788],[-87.38166,39.83691],[-87.37382,39.78301],[-87.37377,39.77938],[-87.38338,39.72232],[-87.38432,39.7199],[-87.38166,39.69371],[-87.38183,39.69264],[-87.39542,39.6557],[-87.39557,39.6536],[-87.38127,39.61559],[-87.3821,39.60935],[-87.46069,39.60964],[-87.53206,39.60904],[-87.53114,39.41882],[-87.53138,39.34771],[-87.54333,39.35256],[-87.54374,39.35272],[-87.55371,39.34081],[-87.55413,39.34031],[-87.58799,39.33415],[-87.58881,39.33365],[-87.58942,39.33253],[-87.60013,39.31272],[-87.60001,39.29311],[-87.60978,39.28205],[-87.60535,39.26125],[-87.60554,39.26112],[-87.57916,39.23296],[-87.57456,39.2184],[-87.58573,39.20114],[-87.58861,39.19782],[-87.63518,39.16889],[-87.64043,39.16673],[-87.62796,39.15734],[-87.62772,39.15661],[-87.64313,39.15614],[-87.64599,39.1449],[-87.63073,39.10478],[-87.63038,39.1043],[-87.58251,39.06661],[-87.57259,39.05729],[-87.56982,39.01975],[-87.5697,39.01941],[-87.57839,38.98994],[-87.57832,38.98879],[-87.54369,38.97683],[-87.5295,38.97192],[-87.51409,38.95634],[-87.51219,38.95442],[-87.51847,38.92486],[-87.51883,38.92321],[-87.5294,38.9054],[-87.54409,38.89509],[-87.54737,38.87561],[-87.55338,38.86334],[-87.53059,38.8524],[-87.52943,38.85148],[-87.52191,38.83086],[-87.52129,38.82818],[-87.52648,38.81994],[-87.52614,38.81894],[-87.50008,38.79001],[-87.49925,38.78843],[-87.4976,38.7807],[-87.49825,38.7796],[-87.51401,38.77245],[-87.51449,38.77092],[-87.49978,38.76894],[-87.49805,38.76756],[-87.4977,38.74539],[-87.49708,38.74313],[-87.53062,38.68451],[-87.53275,38.68272],[-87.58724,38.67109],[-87.58973,38.67018],[-87.61753,38.64294],[-87.61936,38.64117],[-87.62656,38.60785],[-87.62711,38.60467],[-87.61356,38.59212],[-87.61383,38.59099],[-87.63633,38.59383],[-87.63694,38.5937],[-87.64997,38.56972],[-87.65233,38.5682],[-87.6507,38.55624],[-87.66073,38.54109],[-87.6538,38.51738],[-87.65417,38.51191],[-87.67837,38.49844],[-87.69319,38.48804],[-87.73536,38.4768],[-87.73952,38.47507],[-87.74345,38.46584],[-87.74317,38.45902],[-87.73551,38.45273],[-87.73013,38.44652],[-87.74071,38.43581],[-87.74104,38.43558],[-87.74397,38.41707],[-87.74413,38.4141],[-87.67257,38.42883],[-87.66206,38.43256],[-87.67159,38.44108],[-87.67345,38.4465],[-87.65833,38.45707],[-87.656,38.458],[-87.64537,38.45493],[-87.64069,38.45587],[-87.63818,38.44593],[-87.63579,38.44323],[-87.61116,38.44663],[-87.59888,38.45082],[-87.58917,38.46994],[-87.57997,38.48362],[-87.58717,38.49353],[-87.58373,38.49945],[-87.55772,38.4897],[-87.54069,38.49166],[-87.54682,38.50883],[-87.5498,38.51153],[-87.54049,38.51841],[-87.53637,38.51844],[-87.52985,38.51442],[-87.53322,38.50351],[-87.5314,38.49899],[-87.51852,38.50409],[-87.51323,38.50367],[-87.50017,38.49517],[-87.49548,38.49566],[-87.49255,38.49704],[-87.49091,38.50567],[-87.47569,38.51123],[-87.47047,38.51626],[-87.46538,38.53171],[-87.4642,38.53217],[-87.46412,38.48095],[-87.46394,38.4669],[-87.44453,38.46706],[-87.44423,38.44349],[-87.44473,38.43623],[-87.40712,38.43606],[-87.40759,38.3794],[-87.35772,38.38158],[-87.34541,38.38347],[-87.31834,38.37776],[-87.31599,38.37733],[-87.3167,38.23137],[-87.31699,38.20508],[-87.35565,38.20482],[-87.46633,38.20354],[-87.46706,38.16543],[-87.68891,38.1685],[-87.68887,38.20204],[-87.79955,38.20092],[-87.79945,38.22857],[-87.9843,38.2304],[-87.97637,38.19939],[-87.96938,38.19044],[-87.94213,38.17786],[-87.94012,38.17625],[-87.93557,38.16283],[-87.9352,38.16233],[-87.92312,38.17009],[-87.92184,38.17035],[-87.91494,38.16256],[-87.91499,38.16029],[-87.94197,38.13351],[-87.94518,38.13085],[-87.96801,38.13066],[-87.96912,38.12987],[-87.97701,38.11149],[-87.97929,38.11004],[-88.01454,38.10034],[-88.01575,38.09854],[-88.00958,38.08532],[-88.00784,38.08484],[-87.96303,38.10202],[-87.96098,38.10165],[-87.95486,38.08812],[-87.95458,38.08708],[-87.95876,38.07453],[-87.9613,38.07156],[-87.98943,38.05671],[-87.99203,38.05557],[-88.02368,38.05286],[-88.03012,38.05248],[-88.04168,38.04467],[-88.04258,38.04311],[-88.03739,38.03544],[-88.03444,38.03411],[-88.01109,38.03342],[-88.00921,38.03129],[-88.02389,38.01342],[-88.02512,38.01026],[-88.01063,37.97518],[-88.01099,37.97319],[-88.03123,37.96013],[-88.03206,37.95901],[-88.02998,37.93083],[-88.03258,37.92876],[-88.05756,37.93455],[-88.0598,37.93452],[-88.06862,37.92726],[-88.06884,37.92489],[-88.02204,37.91462],[-88.01733,37.91183],[-88.0125,37.89012],[-88.01421,37.88565],[-88.0282,37.89127],[-88.03129,37.89472],[-88.04966,37.89086],[-88.05696,37.89181],[-88.08425,37.90482],[-88.08957,37.90732],[-88.0997,37.90441]],[[-85.3389,41.15113],[-85.33593,40.9349],[-85.33597,40.91703],[-84.87996,40.92059],[-84.80292,40.92257],[-84.80353,41.25256],[-84.80356,41.27116],[-85.19291,41.26426],[-85.30777,41.26413],[-85.30938,41.24972],[-85.30997,41.1732],[-85.31331,41.17316],[-85.33818,41.17286],[-85.3389,41.15113]]],terms_text:"Indiana Office of Information Technology, Indiana University Spatial Data Portal, UITS, Woolpert Inc.",description:"Orthophotography for 19 counties and one city in western Indiana, collected during leaf-off conditions in 2018. One-foot resolution for Benton, Clay, Fountain, Greene, Jasper, LaPorte, Montogomery, Newton, Owen, Parke, Sullivan, Tippecanoe, Vigo, Warren, and White counties. Six-inch resolution for Allen, Lake, Porter, and Putnam counties. Three-inch resolution for Huntingburg.",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/in/IU.gif"},{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:[2,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:"https://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:"https://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:"https://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:"https://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_seamlessphoto",name:"Japan GSI seamlessphoto Imagery",type:"tms",template:"https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{zoom}/{x}/{y}.jpg",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:"https://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html",terms_text:"GSI Japan seamless photo",description:"Japan GSI seamlessphoto Imagery. The collection of latest imageries of GSI ortho, airphoto, post disaster and others."},{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",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{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",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{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",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Aargau-AGIS-2019",name:"Kanton Aargau 25cm (AGIS 2019)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2019/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-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 OF2019",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Aargau-AGIS-2014-Hillshade",name:"Kanton Aargau 50cm DTM/Hillshade",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2014HILLSHADE/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",startDate:"2014-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 2014 50cm DTM/Hillshade",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{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,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{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",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Bern-dsm-hillshade-2015",name:"Kanton Bern, Digitales Oberflaechenmodell 50cm, Relief",type:"wms",template:"https://www.geoservice.apps.be.ch/geoservice2/services/a42geo/a42geo_hoehenwms_d_fk/MapServer/WmsServer?LAYERS=GEODB.LDOM50CM_LORELIEF&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&STYLES=default&FORMAT=image/jpeg&CRS={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:[8,22],polygon:[[[6.82526,47.07901],[7.28497,46.74221],[7.06335,46.27329],[8.20129,46.43975],[8.44334,46.59001],[8.47595,46.76315],[8.41244,46.79841],[8.13984,46.7869],[7.96543,46.80687],[7.90089,46.8914],[7.97676,47.00414],[7.88784,47.05609],[7.90363,47.17665],[7.81952,47.29413],[7.55859,47.33231],[7.16583,47.31183],[6.82388,47.18131],[6.82526,47.07901]]],terms_text:"Digitales Oberflächenmodell LIDAR 50cm © Amt für Wald des Kantons Bern"},{id:"Bern-dtm-hillshade-2015",name:"Kanton Bern, Digitales Terrainmodell 50cm, Relief",type:"wms",template:"https://www.geoservice.apps.be.ch/geoservice2/services/a42geo/a42geo_hoehenwms_d_fk/MapServer/WmsServer?LAYERS=GEODB.LDTM50CM_LTRELIEF&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&STYLES=default&FORMAT=image/jpeg&CRS={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:[8,22],polygon:[[[6.82526,47.07901],[7.28497,46.74221],[7.06335,46.27329],[8.20129,46.43975],[8.44334,46.59001],[8.47595,46.76315],[8.41244,46.79841],[8.13984,46.7869],[7.96543,46.80687],[7.90089,46.8914],[7.97676,47.00414],[7.88784,47.05609],[7.90363,47.17665],[7.81952,47.29413],[7.55859,47.33231],[7.16583,47.31183],[6.82388,47.18131],[6.82526,47.07901]]],terms_text:"Digitales Terrainmodell LIDAR 50cm © Amt für Wald des Kantons Bern"},{id:"KTGL_ORTHO_2013",name:"Kanton Glarus Orthophoto 2013",type:"wms",template:"https://wms.geo.gl.ch?LAYERS=ch.gl.imagery.orthofoto2013&STYLES=default&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.99094,47.18505],[8.94836,47.13462],[8.93738,47.05609],[8.87421,47.03363],[8.9415,46.93807],[8.86597,46.84423],[8.86459,46.80852],[8.91815,46.78596],[9.04587,46.80758],[9.245,46.8968],[9.26147,46.92213],[9.25186,47.01865],[9.2189,47.04673],[9.19693,47.12154],[9.06235,47.1505],[8.99094,47.18505]]],terms_text:"Kanton Glarus, Luftbild Orthofoto 2013"},{id:"KTGL_ORTHO_2015",name:"Kanton Glarus Orthophoto 2015",type:"wms",template:"https://wms.geo.gl.ch?LAYERS=ch.gl.imagery.orthofoto2015&STYLES=default&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.99094,47.18505],[8.94836,47.13462],[8.93738,47.05609],[8.87421,47.03363],[8.9415,46.93807],[8.86597,46.84423],[8.86459,46.80852],[8.91815,46.78596],[9.04587,46.80758],[9.245,46.8968],[9.26147,46.92213],[9.25186,47.01865],[9.2189,47.04673],[9.19693,47.12154],[9.06235,47.1505],[8.99094,47.18505]]],terms_text:"Kanton Glarus, Luftbild Orthofoto 2015"},{id:"KTGL_ORTHO_2017",name:"Kanton Glarus Orthophoto 2017",type:"wms",template:"https://wms.geo.gl.ch?LAYERS=ch.gl.imagery.orthofoto2017&STYLES=default&FORMAT=image/jpeg&CRS={proj}&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[8.99094,47.18505],[8.94836,47.13462],[8.93738,47.05609],[8.87421,47.03363],[8.9415,46.93807],[8.86597,46.84423],[8.86459,46.80852],[8.91815,46.78596],[9.04587,46.80758],[9.245,46.8968],[9.26147,46.92213],[9.25186,47.01865],[9.2189,47.04673],[9.19693,47.12154],[9.06235,47.1505],[8.99094,47.18505]]],terms_text:"Kanton Glarus, Luftbild Orthofoto 2017",best:true},{id:"Solothurn-sogis2014-wms",name:"Kanton Solothurn (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_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,20],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://geo.so.ch/api/wms?LAYERS=ch.so.agi.orthofoto_2015.cir&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",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:"Solothurn-sogis2014-dom-wms",name:"Kanton Solothurn, DOM Relief 2014 50cm",type:"wms",template:"https://geo.so.ch/api/wms?LAYERS=ch.so.agi.lidar_2014.dom_relief&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],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:"DOM Relief 2014 - Auflösung 50cm, WMS Solothurn (SOGIS)"},{id:"Solothurn-sogis2014-dtm-wms",name:"Kanton Solothurn, DTM Relief 2014 50cm",type:"wms",template:"https://geo.so.ch/api/wms?LAYERS=ch.so.agi.lidar_2014.dtm_relief&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,22],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:"DTM Relief 2014 - Auflösung 50cm, WMS Solothurn (SOGIS)"},{id:"kt_tg_dtm_hillshade",name:"Kanton Thurgau Relief DTM",type:"wms",template:"https://ows-raster.geo.tg.ch/geofy_access_proxy/reliefschattierung?LAYERS=DTMRelief&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",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_url:"https://opendata.swiss/dataset/reliefschattierung",terms_text:"Kanton Thurgau, DTM Relief 2014",description:"Digitale Repräsentation des Geländes"},{id:"kt_tg_av",name:"Kanton Thurgau, Basisplan-AV",type:"wms",template:"https://ows.geo.tg.ch/geofy_access_proxy/basisplanf?LAYERS=Basisplan_farbig&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",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_url:"https://opendata.swiss/dataset/basisplan-av",terms_text:"Kanton Thurgau, Basisplan-AV",description:"Basisplan-AV des Kantons Thurgau farbig & schwarzweiss mit Liegenschaften, Nomenklatur, Landes-, Kantons- und Gemeindegrenzen, Einzelobjekten, Bodenbedeckung, Strassennamen, Höhenkurven und Geländemodell"},{id:"kt_tg_ortho_2017",name:"Kanton Thurgau, Orthofoto2017 RGB",type:"wms",template:"https://ows-raster.geo.tg.ch/geofy_access_proxy/orthofoto2017?LAYERS=Orthofoto2017_RGB&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",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_url:"https://opendata.swiss/en/dataset/orthofoto-2017-dop17",terms_text:"Kanton Thurgau, Orthofoto2017 RGB",best:true,description:"Digitales multispektrales Orthofotomosaik des Kantons Thurgau"},{id:"kt_tg_radrouten",name:"Kanton Thurgau, Rad-Routen",type:"wms",template:"https://ows.geo.tg.ch/geofy_access_proxy/radwege?LAYERS=Radwege&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",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_url:"https://opendata.swiss/dataset/rad-routen",terms_text:"Kanton Thurgau, Rad-Routen",description:"Langsamverkehr: Radweg-Netz (Routen) signalisiert durch Wegweiser"},{id:"kt_tg_ww",name:"Kanton Thurgau, Wanderwege",type:"wms",template:"https://ows.geo.tg.ch/geofy_access_proxy/wanderwege?LAYERS=Wanderwege&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap",projection:"EPSG:3857",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_url:"https://opendata.swiss/dataset/wanderwege",terms_text:"Kanton Thurgau, Wanderwege",description:"Langsamverkehr: Verlauf der Wanderwege mit symbolischer Darstellung der Wegweiser, Unterführungen, Treppen und Brücken. Informationen über die Wegoberfläche und Rollstuhlgängigkeit."},{id:"Zug-2011",name:"Kanton Zug 2011",type:"wms",template:"https://services.geo.zg.ch:443/ows/Orthofotos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=zg.orthofoto_2011_kt_zg&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:[10,21],polygon:[[[8.38726,47.10908],[8.38983,47.25303],[8.42944,47.25265],[8.42894,47.22567],[8.60057,47.22407],[8.60037,47.21507],[8.61357,47.21495],[8.61338,47.20594],[8.62658,47.20582],[8.62618,47.18783],[8.63934,47.18769],[8.63914,47.1787],[8.66555,47.17844],[8.66534,47.16943],[8.7049,47.16899],[8.70427,47.14203],[8.69105,47.14215],[8.69046,47.11516],[8.67731,47.1153],[8.67706,47.10634],[8.66389,47.10647],[8.66371,47.0975],[8.65052,47.09761],[8.65031,47.08863],[8.59764,47.08915],[8.59746,47.08015],[8.49204,47.0812],[8.49245,47.09917],[8.43969,47.09967],[8.43996,47.10863],[8.38726,47.10908]]],terms_text:"GIS Kanton Zug",best:true},{id:"Zug-2018",name:"Kanton Zug Gemeinde Zug Süd 2018",type:"wms",template:"https://services.geo.zg.ch:443/ows/Orthofotos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=zg.orthofoto_2018_kt_zg&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:[10,21],polygon:[[[8.50052,47.11291],[8.49638,47.11761],[8.49451,47.12364],[8.49538,47.12653],[8.50462,47.13724],[8.50322,47.13933],[8.50466,47.14722],[8.51099,47.15916],[8.56415,47.15299],[8.5652,47.14929],[8.54924,47.13843],[8.55098,47.12132],[8.50052,47.11291]]],terms_text:"GIS Kanton Zug",best:true},{id:"Zug-2016",name:"Kanton Zug Nord 2016",type:"wms",template:"https://services.geo.zg.ch:443/ows/Orthofotos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=zg.orthofoto_2016_kt_zg&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:[10,21],polygon:[[[8.41093,47.16521],[8.40759,47.16918],[8.40754,47.23725],[8.419,47.23722],[8.42336,47.22958],[8.43891,47.22945],[8.48056,47.2125],[8.5294,47.22688],[8.57951,47.22275],[8.57946,47.17083],[8.57535,47.14926],[8.56428,47.14944],[8.53594,47.15205],[8.50658,47.15268],[8.50686,47.162],[8.44723,47.16256],[8.41093,47.16521]]],terms_text:"GIS Kanton Zug",best:true},{id:"OGDLidarZH-DOM",name:"Kanton Zurich, Oberflächenschummerung 50cm",type:"wms",template:"https://wms.zh.ch/OGDLidarZH?FORMAT=image/jpeg&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap&LAYERS=dom2014hillshade&CRS={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:[8,22],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:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Oberflächenschummerung"},{id:"OGDOrthoZH2016",name:"Kanton Zurich, Orthofoto ZH Frühjahr 2015/16 RGB 10cm",type:"wms",template:"https://wms.zh.ch/OGDOrthoZH?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&LAYERS=ortho_w_15&FORMAT=image/jpeg&CRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[8,22],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:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Orthofoto ZH Frühjahr 2015/16 RGB"},{id:"OGDOrthoZH2015",name:"Kanton Zurich, Orthofoto ZH Sommer 2014/15 RGB 10cm",type:"wms",template:"https://wms.zh.ch/OGDOrthoZH?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&LAYERS=ortho_s_14&FORMAT=image/jpeg&CRS={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,22],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:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Orthofoto ZH Sommer 2014/15 RGB"},{id:"OGDOrthoZH2018",name:"Kanton Zurich, Orthofoto ZH Sommer 2018 RGB 10cm",type:"wms",template:"https://wms.zh.ch/OGDOrthoZH?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&LAYERS=ortho&FORMAT=image/jpeg&CRS={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:[8,22],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:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Orthofoto ZH Sommer 2018 RGB",best:true},{id:"OGDLidarZH-DTM",name:"Kanton Zurich, Terrainschummerung 50cm",type:"wms",template:"https://wms.zh.ch/OGDLidarZH?FORMAT=image/jpeg&VERSION=1.3.0&SERVICE=WMS&REQUEST=GetMap&LAYERS=dtm2014hillshade&CRS={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:[8,22],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:"Geographisches Informationssystem des Kantons Zürich (GIS-ZH), Terrainschummerung"},{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:"https://seeiendom.kartverket.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:"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:"https://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:"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:"2019-08-22T00:00:00.000Z",startDate:"2019-07-04T00:00:00.000Z",zoomExtent:[5,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:"CityOfLaunceston_2011",name:"Launceston OrthoPhoto 2011",type:"tms",template:"https://mapping.launceston.tas.gov.au/arcgis/rest/services/Public/OrthoPhoto_Dec2011_10cm/MapServer/tile/{zoom}/{y}/{x}",endDate:"2011-12-01T00:00:00.000Z",startDate:"2011-12-01T00:00:00.000Z",zoomExtent:[10,20],polygon:[[[147.10456,-41.3946],[147.10541,-41.47525],[147.17433,-41.47514],[147.17428,-41.45584],[147.17533,-41.45584],[147.17501,-41.39451],[147.10456,-41.3946]]],terms_text:"© City of Launceston",icon:"https://www.launceston.tas.gov.au/files/assets/public/templateimages/favicons/favicon-196x196.png"},{id:"CityOfLaunceston_2013",name:"Launceston OrthoPhoto 2013",type:"tms",template:"https://mapping.launceston.tas.gov.au/arcgis/rest/services/Public/OrthoPhoto_Feb2013_10cm/MapServer/tile/{zoom}/{y}/{x}",endDate:"2013-02-15T00:00:00.000Z",startDate:"2013-02-15T00:00:00.000Z",zoomExtent:[12,20],polygon:[[[147.06561,-41.5081],[147.06547,-41.36487],[147.23734,-41.36464],[147.23786,-41.50787],[147.06561,-41.5081]]],terms_text:"© City of Launceston",icon:"https://www.launceston.tas.gov.au/files/assets/public/templateimages/favicons/favicon-196x196.png"},{id:"Lausanne-2016",name:"Lausanne - Orthophoto 2016",type:"tms",template:"https://osmdata.asitvd.ch/tiles/lausanne2016/{zoom}/{x}/{y}.png",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[10,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 2016"},{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://map.cazzaserver.com/linz_aerial/{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,icon:"https://koordinates.a.ssl.fastly.net/media/settings/branding/favicon-lds.ico"},{id:"LINZ_NZ_Topo50_Gridless_Maps",name:"LINZ NZ Topo50 Gridless Maps",type:"tms",template:"https://map.cazzaserver.com/linz_topo/{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",icon:"https://koordinates.a.ssl.fastly.net/media/settings/branding/favicon-lds.ico"},{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:"https://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:"https://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-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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico"},{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]],[[159.22678,-31.74407],[159.26398,-31.74399],[159.28989,-31.77428],[159.28993,-31.79393],[159.26157,-31.79395],[159.22682,-31.75483],[159.22678,-31.74407]],[[159.03784,-31.49819],[159.04448,-31.5006],[159.04619,-31.49734],[159.04888,-31.49829],[159.04884,-31.48423],[159.06882,-31.48423],[159.06991,-31.482],[159.08317,-31.48203],[159.08203,-31.48434],[159.08205,-31.49567],[159.08564,-31.49703],[159.08383,-31.50058],[159.09007,-31.5026],[159.08682,-31.50859],[159.09433,-31.51136],[159.09174,-31.51585],[159.09537,-31.51724],[159.10276,-31.52611],[159.1161,-31.53006],[159.11422,-31.5342],[159.11875,-31.53417],[159.1193,-31.54888],[159.12618,-31.55796],[159.11841,-31.56323],[159.11553,-31.55983],[159.1115,-31.55983],[159.11154,-31.60158],[159.08954,-31.6016],[159.08626,-31.60845],[159.07954,-31.60611],[159.07714,-31.61149],[159.05943,-31.61155],[159.05296,-31.60369],[159.05893,-31.59087],[159.05891,-31.57897],[159.05541,-31.57773],[159.05735,-31.57387],[159.05585,-31.57333],[159.05038,-31.57335],[159.05035,-31.56329],[159.0463,-31.5619],[159.04847,-31.55793],[159.04237,-31.55601],[159.04533,-31.55038],[159.03783,-31.54763],[159.03802,-31.54723],[159.03487,-31.54724],[159.03487,-31.54383],[159.03244,-31.54297],[159.03461,-31.53808],[159.02754,-31.53554],[159.02964,-31.53159],[159.02305,-31.52935],[159.03784,-31.49819]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",best:true,icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico"},{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]],[[159.22678,-31.74407],[159.26398,-31.74399],[159.28989,-31.77428],[159.28993,-31.79393],[159.26157,-31.79395],[159.22682,-31.75483],[159.22678,-31.74407]],[[159.03784,-31.49819],[159.04448,-31.5006],[159.04619,-31.49734],[159.04888,-31.49829],[159.04884,-31.48423],[159.06882,-31.48423],[159.06991,-31.482],[159.08317,-31.48203],[159.08203,-31.48434],[159.08205,-31.49567],[159.08564,-31.49703],[159.08383,-31.50058],[159.09007,-31.5026],[159.08682,-31.50859],[159.09433,-31.51136],[159.09174,-31.51585],[159.09537,-31.51724],[159.10276,-31.52611],[159.1161,-31.53006],[159.11422,-31.5342],[159.11875,-31.53417],[159.1193,-31.54888],[159.12618,-31.55796],[159.11841,-31.56323],[159.11553,-31.55983],[159.1115,-31.55983],[159.11154,-31.60158],[159.08954,-31.6016],[159.08626,-31.60845],[159.07954,-31.60611],[159.07714,-31.61149],[159.05943,-31.61155],[159.05296,-31.60369],[159.05893,-31.59087],[159.05891,-31.57897],[159.05541,-31.57773],[159.05735,-31.57387],[159.05585,-31.57333],[159.05038,-31.57335],[159.05035,-31.56329],[159.0463,-31.5619],[159.04847,-31.55793],[159.04237,-31.55601],[159.04533,-31.55038],[159.03783,-31.54763],[159.03802,-31.54723],[159.03487,-31.54724],[159.03487,-31.54383],[159.03244,-31.54297],[159.03461,-31.53808],[159.02754,-31.53554],[159.02964,-31.53159],[159.02305,-31.52935],[159.03784,-31.49819]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico",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],[140.99652,-34.13858],[142.03614,-34.37588],[142.40976,-34.76694],[143.33826,-35.23318],[143.99654,-35.98105],[144.49912,-36.0211],[144.50725,-36.24765],[145.01541,-36.25421],[145.00118,-36.00795],[146.50426,-36.12639],[146.49564,-36.24471],[146.98863,-36.25283],[146.99725,-36.12755],[147.38221,-36.13103],[147.38939,-36.01137],[147.81483,-36.00556],[147.99306,-36.138],[148.06846,-36.80624],[149.98571,-37.508],[163,-32],[153.76465,-28.11075],[153.25003,-28.12497],[153.24999,-28.23324],[153.16672,-28.23316],[153.16663,-28.25001],[153.11659,-28.24986],[153.1165,-28.2834],[152.9999,-28.28324],[152.99972,-28.24986],[152.24994,-28.25001],[152.24997,-28.37507],[151.99986,-28.37496],[151.99989,-28.50023],[151.93341,-28.50007],[151.93313,-28.62475],[151.98317,-28.62491],[151.98299,-28.64139],[151.99988,-28.64163],[152.00007,-28.68335],[152.03322,-28.6832],[152.0334,-28.71661],[151.99998,-28.71645],[151.99998,-28.74953],[151.03383,-28.75054],[151.03293,-28.74188],[151.02413,-28.74188],[151.02395,-28.73274],[151.00059,-28.73258],[151.00005,-28.50052],[148.99982,-28.50003],[148.99985,-28.74974],[149.0997,-28.74885],[149.10007,-28.81658],[149.00009,-28.81658],[148.99983,-28.96653],[148.94988,-28.96653],[148.95024,-28.99937],[140.99884,-28.99924]]],terms_url:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/0017/224801/favicon.ico"},{id:"Arenda_OAM",name:"Lupang Arenda, Taytay Drone Imagery",type:"tms",template:"https://tiles.openaerialmap.org/5d25d7bf161a790005c03e6e/0/5d25d7bf161a790005c03e6f/{zoom}/{x}/{y}.png",zoomExtent:[16,22],polygon:[[[121.11444,14.5407],[121.11236,14.54131],[121.10965,14.54186],[121.10884,14.54093],[121.10824,14.53808],[121.10841,14.53675],[121.1079,14.53542],[121.10779,14.53295],[121.10792,14.5312],[121.1089,14.53069],[121.11431,14.53035],[121.1153,14.53085],[121.11541,14.53166],[121.11528,14.53388],[121.1145,14.53395],[121.1138,14.53366],[121.1135,14.5343],[121.11435,14.53631],[121.11457,14.53796],[121.11472,14.53901],[121.11459,14.53985],[121.11444,14.5407]]],best:true},{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",name:"Lyon Orthophoto 8cm",type:"tms",template:"https://wms.openstreetmap.fr/tms/1.0.0/lyon/{zoom}/{x}/{y}",endDate:"2018-01-01T00:00:00.000Z",startDate:"2015-05-01T00:00:00.000Z",zoomExtent:[2,22],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"},{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://geodaten.mainz.de/map/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho_2018&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[12,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:"Maxar_19-20_Australian_Bushfires_PreEvent",name:"Maxar 2019-2020 Australian Bushfires Pre-event",type:"tms",template:"https://cogeoxyz.b-cdn.net/6b6f479fbacd9a42e9e38bc5c0c6889f009beae13b07742ec4a1648f/{zoom}/{x}/{y}.jpg",endDate:"2019-10-18T00:00:00.000Z",startDate:"2018-01-20T00:00:00.000Z",zoomExtent:[11,19],polygon:[[[149.88647,-32.97641],[149.88785,-34.04583],[150.08835,-34.02421],[150.09264,-34.66569],[150.06758,-34.66604],[150.06775,-34.67733],[149.91669,-34.67952],[149.91806,-34.80365],[150.09247,-34.80478],[150.09796,-34.976],[149.44977,-34.9625],[149.44565,-35.46514],[149.20807,-35.48527],[149.2012,-35.96689],[148.98834,-35.98467],[148.99246,-37.02229],[149.96338,-37.02996],[150.53192,-36.02911],[150.78735,-35.29719],[151.37237,-33.75403],[151.35864,-31.96847],[150.35614,-31.9475],[150.35339,-32.45415],[150.04028,-32.4472],[150.04852,-32.96258],[149.88647,-32.97641]]],terms_url:"https://www.digitalglobe.com/ecosystem/open-data/australia-wildfires",terms_text:"©2020 DigitalGlobe"},{id:"Maxar-Premium",name:"Maxar Premium Imagery (Beta)",type:"tms",template:"7586487389962e3f6e31ab2ed8ca321f2f3fe2cf87f1dedce8fc918b4692efd86fcd816ab8a35303effb1be9abe39b1cce3fe6db2c740044364ae68560822c88373d2c784325baf4e1fa007c6dbedab4cea3fa0dd86ee0ae4feeef032d33dcac28e4b16c90d55a42087c6b66526423ea1b4cc7e63c613940eb1c60f48270060bf41c5fcb6a628985ebe6801e9e71f041cc9f8df06b0345600376663e7dc1cdbc7df16876d8b5d006ed5782e6af4bfe2ff5a292",terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback","default":true,description:"Maxar Premium is a mosaic composed of Maxar basemap with select regions filled with +Vivid or custom area of interest imagery, 50cm resolution or better, and refreshed more frequently with ongoing updates.",encrypted:true,icon:"https://osmlab.github.io/editor-layer-index/sources/world/Maxar.png"},{id:"Maxar-Standard",name:"Maxar Standard Imagery (Beta)",type:"tms",template:"7586487389962e3f6e31ab2ed8ca321f2f3fe2cf87f1dedce8fc918b4692efd86fcd816ab8a35303effb1be9abe39b1cce3fe6db2c740044364ae68560822c88373d2c784325baf4e1fa007c6dbedab4cea3fa0dd86ee0ae4feeef032d33dcac28e4b16c90d55a42087c6b66526423ea1b4cc7e63c613940eb1c60f48270060bf41c5fcb6a628985ebe6801e9e71f010c8c9d7fb6b534560012461377dc1cdb672f16827dfe0d005bf5685b7ac4ea97cf5f795",terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback","default":true,description:"Maxar 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.",encrypted:true,icon:"https://osmlab.github.io/editor-layer-index/sources/world/Maxar.png"},{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:"https://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:"https://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:"https://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:"https://www.miljodirektoratet.no/globalassets/profilbank/profilbank-bilder/m_logo_hoved_pos_rgb_thumb2.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:"https://kartkatalog.miljodirektoratet.no/Dataset/Details/30",terms_text:"© Miljødirektoratet",description:"Public recreation areas with State ownership (\"friluftsområder\").",icon:"https://www.miljodirektoratet.no/globalassets/profilbank/profilbank-bilder/m_logo_hoved_pos_rgb_thumb2.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:"https://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:"https://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:"https://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:"Mulhouse_2018",name:"Mulhouse - 2018",type:"tms",template:"https://wms.openstreetmap.fr/tms/1.0.0/mulhouse_2018/{zoom}/{x}/{y}",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[7.53731,47.78041],[7.57439,47.84128],[7.57301,47.85602],[7.55035,47.86201],[7.53525,47.84588],[7.5016,47.85141],[7.45972,47.84174],[7.4556,47.83252],[7.4453,47.83114],[7.43088,47.84128],[7.41549,47.83831],[7.39174,47.84727],[7.38007,47.83851],[7.33475,47.83989],[7.34024,47.89563],[7.31758,47.91082],[7.28737,47.89977],[7.28462,47.88412],[7.24686,47.88228],[7.23724,47.87629],[7.23312,47.86431],[7.2139,47.86524],[7.183,47.85786],[7.17613,47.84819],[7.21115,47.82284],[7.18986,47.81085],[7.19948,47.78179],[7.16789,47.77025],[7.183,47.73517],[7.17682,47.72362],[7.19467,47.69451],[7.21802,47.68527],[7.24548,47.68527],[7.25166,47.69497],[7.2448,47.70376],[7.2551,47.71392],[7.27844,47.713],[7.27982,47.70237],[7.26814,47.69405],[7.26883,47.68434],[7.28531,47.67094],[7.30247,47.66308],[7.32376,47.65984],[7.33337,47.66724],[7.3732,47.65383],[7.39242,47.65475],[7.40822,47.6603],[7.39723,47.67648],[7.42744,47.68666],[7.47551,47.69821],[7.5222,47.69636],[7.55104,47.71531],[7.56134,47.73517],[7.53731,47.78041]]],terms_url:"https://data.mulhouse-alsace.fr/explore/dataset/m2a_orthophotographie-2018/information/",terms_text:"Mulhouse Alsace Agglomération 2018"},{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:"https://www.muenchen.de/rathaus/Stadtverwaltung/Kommunalreferat/geodatenservice.html",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:"USDA-NAIP",name:"National Agriculture Imagery Program",type:"wms",template:"https://gis.apfo.usda.gov/arcgis/services/NAIP/USDA_CONUS_PRIME/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:3857",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:"The most recent year of DOQQs from the National Agriculture Imagery Program (NAIP) for each state in the contiguous United States.",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USDA.png"},{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:"img.nj.gov-Infrared2015",name:"NJ 2015 Aerial Imagery (Infrared)",type:"wms",template:"https://img.nj.gov/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=188471FF-2803-4145-A5AD-605DE86D3B4D",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:"img.nj.gov-Natural2015",name:"NJ 2015 Aerial Imagery (Natural Color)",type:"wms",template:"https://img.nj.gov/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=188471FF-2803-4145-A5AD-605DE86D3B4D",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:"Norwegian orthophotos (max zoom 21), courtesy of Geovekst and Norkart.",icon:"https://register.geonorge.no/data/organizations/_L_norgeibilder96x96.png"},{id:"geovekst-nib2",name:"Norway Orthophoto (more recent, less zoom)",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_nib_web_mercator_wmts_v2?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Nibcache_web_mercator_v2&STYLE=default&FORMAT=image/jpgpng&tileMatrixSet=default028mm&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,19],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 (max zoom 19), courtesy of Geovekst and Kartverket.",icon:"https://register.geonorge.no/data/organizations/_L_norgeibilder96x96.png"},{id:"npd-offshore",name:"NPD Offshore Installations overlay",type:"wms",template:"https://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:"https://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://kommunikasjon.ntb.no/data/images/00525/e8799776-4b69-4ec4-906d-46285ccb3dbe-w_300_h_100.png",overlay:true},{id:"nve-nettanlegg",name:"NVE Electricity Network overlay",type:"wms",template:"https://gis3.nve.no/map/services/Nettanlegg2/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://kommunikasjon.ntb.no/data/images/00525/e8799776-4b69-4ec4-906d-46285ccb3dbe-w_300_h_100.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://kommunikasjon.ntb.no/data/images/00525/e8799776-4b69-4ec4-906d-46285ccb3dbe-w_300_h_100.png",overlay:true},{id:"nve-vindkraft",name:"NVE Wind Power Plants overlay",type:"wms",template:"https://gis3.nve.no/map/services/Vindkraft2/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vindkraft_konsesjon_gitt_ikke_utbygd,Vindkraft_under_bygging,Vindkraft_utbygd,Vindkraftomrade,Vindturbin&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 (blue: planned, light green: construction, dark green: built).",icon:"https://kommunikasjon.ntb.no/data/images/00525/e8799776-4b69-4ec4-906d-46285ccb3dbe-w_300_h_100.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 2.0","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.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:[5,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.ortho2018",name:"Ortho 2018 geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2018/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2018-08-05T00:00:00.000Z",startDate:"2018-07-02T00:00:00.000Z",zoomExtent:[5,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-OpenData_Locator",name:"OS OpenData Locator",type:"tms",template:"https://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:"OSIP_1ft",name:"OSIP 1ft Imagery Most Current Available",type:"wms",template:"https://geo1.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:[8,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://geo1.oit.ohio.gov/arcgis/services/OSIP/OSIP_6in_best_avail/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:"2018-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[8,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 6-inch orthoimagery from the Ohio Statewide Imagery Program."},{id:"osm-hr-knin-2007",name:"osm-hr: Knin 2007 Aerial imagery",type:"tms",template:"https://tms.osm-hr.org/knin-2007/{zoom}/{x}/{-y}.png",endDate:"2007-01-01T00:00:00.000Z",startDate:"2007-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[16.21712,44.08054],[16.22916,44.08041],[16.22938,44.06055],[16.2303,44.05757],[16.23715,44.04213],[16.23715,44.03615],[16.23041,44.03599],[16.22494,44.03627],[16.2243,44.03599],[16.22404,44.03504],[16.21608,44.02178],[16.21286,44.01661],[16.20391,44.01672],[16.19269,44.02601],[16.18003,44.03662],[16.18011,44.03772],[16.21129,44.06685],[16.21712,44.08054]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-orbview",name:"osm-hr: Orbview",type:"tms",template:"https://tms.osm-hr.org/orbview/{zoom}/{x}/{-y}.png",endDate:"2007-01-01T00:00:00.000Z",startDate:"2003-01-01T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[19.59394,45.00171],[19.70329,45.00547],[19.70441,43.01839],[19.77633,43.02304],[19.77427,42.11507],[19.66935,42.11019],[19.66656,42.98104],[19.59377,42.97665],[19.59394,45.00171]],[[21.49434,44.00064],[21.60243,44.00519],[21.60273,41.98521],[21.49527,41.97908],[21.49434,44.00064]],[[15.48386,45.51525],[15.59338,45.5102],[15.59355,44.51169],[15.66994,44.5156],[15.672,45.25531],[15.77499,45.25411],[15.77568,44.47642],[15.75886,44.47618],[15.75611,44.24569],[15.82169,44.2452],[15.82203,44.51156],[15.92279,44.51046],[15.92245,44.2618],[15.98837,44.26094],[15.98614,44.51022],[16.09531,44.5156],[16.09016,43.4736],[15.9918,43.4746],[15.98991,43.99825],[15.92365,43.99924],[15.92674,43.48132],[15.64453,43.46987],[15.65277,43.97898],[15.48385,43.97602],[15.48042,44.2393],[15.56145,44.24274],[15.55904,44.4725],[15.48489,44.47201],[15.48386,45.51525]],[[18.79237,44.00158],[18.90404,44.00813],[18.8994,42.19012],[18.79864,42.18821],[18.79237,44.00158]],[[19.39593,42.03272],[19.50138,42.03734],[19.50056,44.59982],[19.39748,44.59838],[19.39593,42.03272]],[[21.35021,45.06504],[21.46076,45.04982],[21.21554,44.33975],[21.11795,44.35651],[21.35021,45.06504]],[[16.90521,45.22606],[17.02057,45.22606],[17.01713,46.01461],[16.92238,46.02128],[16.92032,46.16889],[17.01096,46.16937],[17.01507,46.7963],[16.92169,46.79677],[16.92169,47.01397],[16.53511,47.01818],[16.53717,46.48397],[16.45889,46.48705],[16.46061,47.01561],[15.98305,47.01608],[15.98339,46.95542],[15.90031,46.95143],[15.90752,45.84399],[16.00965,45.84339],[16.00914,45.97334],[16.37031,45.97549],[16.36825,46.23258],[16.44379,46.23305],[16.44722,45.96452],[16.64978,45.95736],[16.64978,45.97358],[16.90315,45.97072],[16.90521,45.22606]],[[15.29674,45.59698],[15.40112,45.59795],[15.39974,45.00632],[15.2988,45.00632],[15.29674,45.59698]],[[15.97412,45.78345],[16.13153,45.78446],[16.13814,45.69833],[15.97936,45.69959],[15.97412,45.78345]],[[20.4847,44.95994],[20.67661,44.96091],[20.67541,44.65815],[20.48658,44.65937],[20.4847,44.95994]],[[18.98403,47.01631],[19.27586,47.01631],[19.27654,45.97788],[19.16977,45.97549],[19.17114,46.48965],[19.09098,46.48906],[19.09115,46.23329],[18.98678,46.23246],[18.98403,47.01631]],[[13.59695,45.63229],[14.01031,45.61884],[14.01581,44.96893],[13.70441,44.96796],[13.70407,44.87461],[13.59283,44.87242],[13.59695,45.63229]],[[16.30663,45.51074],[16.51623,45.51429],[16.51211,44.73015],[16.4043,44.73417],[16.4043,45.24903],[16.30955,45.25],[16.30663,45.51074]],[[20.33295,44.96067],[20.44933,44.9597],[20.4483,44.65449],[20.33535,44.65937],[20.33295,44.96067]],[[19.35362,47.01502],[19.46005,47.01549],[19.46056,45.96845],[19.35379,45.96666],[19.35362,47.01502]],[[16.15505,44.50899],[16.26595,44.51585],[16.26217,44.24077],[16.32465,44.24151],[16.32397,44.5112],[16.4352,44.51658],[16.42997,43.47553],[16.24535,43.47385],[16.24466,43.72707],[16.16055,43.72794],[16.15505,44.50899]],[[19.92714,43.97651],[20.03632,43.98244],[20.03717,46.00686],[20.0116,46.00573],[20.02052,47.02474],[19.533,47.01397],[19.53953,45.97382],[19.73556,45.97096],[19.73848,46.73951],[19.81007,46.7361],[19.81676,45.97442],[19.92336,45.97334],[19.92714,43.97651]],[[21.98055,42.96107],[21.98038,44.79377],[22.08801,44.79329],[22.08681,44.5868],[22.1517,44.58594],[22.14809,45.01542],[22.25933,45.01967],[22.25281,44.12407],[22.31872,44.12358],[22.31666,44.75697],[22.39357,44.75844],[22.39494,45.0022],[22.59484,45.01606],[22.5927,43.60377],[22.49382,43.60526],[22.49382,43.76961],[22.4231,43.7701],[22.42378,43.53312],[22.49794,43.53212],[22.50069,43.31818],[22.58789,43.31619],[22.5872,43.27521],[22.60368,43.27371],[22.603,42.97602],[22.5872,42.97451],[22.58446,42.88502],[22.48764,42.88603],[22.48695,42.97099],[22.22465,42.94587],[22.22603,42.97501],[21.98055,42.96107]],[[15.90666,45.64165],[16.00965,45.64201],[16.01352,44.96404],[15.90314,44.95927],[15.90666,45.64165]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-ustopo50",name:"osm-hr: US Topo 50",type:"tms",template:"https://tms.osm-hr.org/ustopo/{zoom}/{x}/{y}.png",endDate:"2002-01-01T00:00:00.000Z",startDate:"1992-01-01T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[14.70005,45.75004],[15.00046,45.75004],[15.00046,45.50081],[14.70005,45.50033],[14.70005,45.75004]],[[20.99995,42.00004],[20.99899,41.49932],[21.90262,41.49932],[21.8985,41.7498],[22.19993,41.75004],[22.19959,41.50061],[22.80006,41.50086],[22.79938,41.99982],[22.50069,42.00084],[22.49931,42.24987],[22.19994,42.24987],[22.19788,42.00186],[21.59912,42.00084],[21.59981,42.24987],[21.30043,42.24987],[21.29974,42.00033],[20.99995,42.00004]],[[13.49962,46.50217],[13.49945,45.50009],[14.09958,45.50105],[14.09958,45.75028],[13.79883,45.75028],[13.8002,45.99982],[14.39964,46.0003],[14.40102,46.2492],[14.09958,46.24967],[14.10026,46.49981],[13.49962,46.50217]],[[15.89996,46.75115],[16.19968,46.75048],[16.19917,46.5004],[15.89979,46.5004],[15.89996,46.75115]],[[15.59964,45.25006],[16.80084,45.25],[16.80016,45.49985],[16.50009,45.50009],[16.49975,45.75004],[16.79981,45.75004],[16.80018,45.50012],[17.0997,45.50009],[17.10005,45.24988],[18.89854,45.25193],[18.89992,45.75052],[18.6002,45.75052],[18.60054,45.99982],[19.49936,45.99887],[19.49867,46.24944],[20.39921,46.24896],[20.39886,46.00006],[20.69893,45.99959],[20.69824,45.50009],[20.99899,45.50009],[21.00037,45.25024],[21.29837,45.25169],[21.297,45.00171],[21.60187,45.00171],[21.59912,44.74673],[21.89438,44.74673],[21.89987,44.50238],[22.1965,44.49944],[22.20062,44.75064],[22.49863,44.74868],[22.49863,43.50075],[22.798,43.49876],[22.79938,43.25021],[23.09875,43.2492],[23.1015,43.00164],[22.49588,42.99963],[22.49863,42.50045],[21.89712,42.50045],[21.90262,42.74903],[21.59775,42.74802],[21.59775,42.50147],[21.30112,42.50147],[21.29837,42.74903],[20.99762,42.75105],[20.99899,43.00063],[20.69961,43.00063],[20.69961,42.75105],[19.80148,42.75206],[19.80423,42.50248],[19.49936,42.49944],[19.50073,42.00237],[18.88962,42.00033],[18.88824,42.24987],[18.29773,42.24784],[18.2991,42.49944],[17.70035,42.50147],[17.69897,42.74903],[17.3996,42.75004],[17.40234,43.00164],[17.10022,43.00063],[17.10022,43.50075],[16.79947,43.50275],[16.80084,43.74927],[16.50284,43.74828],[16.49872,43.50374],[16.20209,43.50075],[16.19797,43.74927],[16.49803,43.75082],[16.49872,44.00121],[15.90134,43.99973],[15.89928,44.49993],[15.60059,44.49944],[15.59964,45.25006]],[[14.40033,45.25024],[14.69902,45.25024],[14.70002,44.99997],[14.4017,45.00074],[14.40033,45.25024]],[[21.59997,41.25002],[21.89996,41.25052],[21.90056,41.00218],[21.60118,41.00115],[21.59997,41.25002]],[[14.69996,46.49996],[14.99984,46.50017],[14.99951,46.25039],[14.69962,46.25005],[14.69996,46.49996]],[[13.7996,45.25018],[14.09992,45.25048],[14.10027,44.74966],[13.80089,44.75063],[13.7996,45.25018]],[[20.39886,41.75185],[20.40024,41.00218],[21.29974,41.00011],[21.29837,41.25045],[20.7003,41.25097],[20.69824,41.74929],[20.39886,41.75185]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-zagreb-2012",name:"osm-hr: Zagreb 2012 Aerial imagery",type:"tms",template:"https://tms.osm-hr.org/zagreb-2012/{zoom}/{x}/{-y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[16.15334,45.96857],[16.17462,45.94041],[16.17599,45.91796],[16.18595,45.90793],[16.18423,45.89789],[16.19728,45.8924],[16.22578,45.86085],[16.22097,45.85248],[16.22938,45.84638],[16.22921,45.84148],[16.24088,45.83645],[16.21719,45.83885],[16.20655,45.82784],[16.19865,45.77638],[16.1602,45.79554],[16.12827,45.80224],[16.13033,45.79434],[16.12278,45.78716],[16.10081,45.7862],[16.07677,45.77303],[16.0572,45.75746],[16.03901,45.76082],[16.03695,45.7577],[16.03935,45.75411],[16.02699,45.75507],[16.01772,45.74453],[16.01772,45.71936],[15.98785,45.71601],[15.96554,45.69131],[15.96725,45.67236],[15.95077,45.65125],[15.95077,45.63589],[15.94768,45.62989],[15.94288,45.63109],[15.93395,45.62172],[15.92606,45.61932],[15.92125,45.6138],[15.90031,45.62244],[15.90717,45.63229],[15.89619,45.63565],[15.87421,45.65557],[15.83885,45.66517],[15.81722,45.67044],[15.8131,45.67716],[15.77568,45.68915],[15.77396,45.7081],[15.78941,45.73398],[15.79285,45.73159],[15.80898,45.7383],[15.81001,45.73063],[15.82237,45.72344],[15.83473,45.72871],[15.85155,45.71673],[15.87078,45.73159],[15.84434,45.73159],[15.84469,45.76465],[15.83834,45.76764],[15.81276,45.76764],[15.80555,45.77543],[15.80538,45.80403],[15.8325,45.80391],[15.82993,45.80762],[15.83319,45.81062],[15.82289,45.82581],[15.82186,45.83837],[15.82975,45.84136],[15.84074,45.83992],[15.8452,45.84112],[15.84434,45.84459],[15.84984,45.84805],[15.85052,45.85236],[15.85979,45.85511],[15.86031,45.85308],[15.86477,45.85272],[15.87301,45.85451],[15.87378,45.85755],[15.87328,45.86081],[15.87816,45.8621],[15.87782,45.86563],[15.88263,45.8618],[15.88649,45.86306],[15.88529,45.86545],[15.89026,45.87603],[15.89709,45.88143],[15.9082,45.88642],[15.92125,45.88953],[15.9288,45.88762],[15.93876,45.89359],[15.92194,45.89431],[15.91988,45.89789],[15.92983,45.90339],[15.94768,45.90434],[15.95352,45.90554],[15.95524,45.91223],[15.97412,45.91271],[15.99918,45.92369],[16.00811,45.9299],[16.02802,45.93324],[16.03043,45.93611],[16.04313,45.93969],[16.05206,45.93563],[16.05171,45.94447],[16.06476,45.94661],[16.06579,45.95115],[16.0778,45.95569],[16.09325,45.95903],[16.09497,45.95449],[16.10767,45.95688],[16.11317,45.96165],[16.11282,45.96762],[16.12038,45.96905],[16.13205,45.96475],[16.1372,45.96523],[16.13823,45.96786],[16.15334,45.96857]]],terms_url:"https://geoportal.zagreb.hr/",terms_text:"Grad Zagreb, Gradski ured za strategijsko planiranje i razvoj Grada",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-zagreb-2018",name:"osm-hr: Zagreb 2018 Aerial imagery",type:"tms",template:"https://tms.osm-hr.org/zagreb-2018/{zoom}/{x}/{-y}.png",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[15.87649,45.87423],[15.87739,45.87821],[15.88087,45.88248],[15.88503,45.8849],[15.88773,45.88741],[15.89112,45.88953],[15.89357,45.89019],[15.89773,45.89311],[15.90151,45.8944],[15.90687,45.89527],[15.91116,45.89652],[15.91455,45.89691],[15.91953,45.89837],[15.92378,45.89891],[15.92786,45.89849],[15.93035,45.90133],[15.9343,45.90408],[15.93854,45.90599],[15.94155,45.90817],[15.94567,45.9096],[15.9509,45.91008],[15.95326,45.91166],[15.95605,45.91378],[15.96138,45.9159],[15.96507,45.92053],[15.96923,45.92298],[15.97734,45.92536],[15.98232,45.92814],[15.9873,45.9305],[15.99047,45.93104],[15.99463,45.93405],[16.00287,45.93802],[16.00687,45.93924],[16.01219,45.93945],[16.01648,45.93996],[16.01789,45.94056],[16.0191,45.94262],[16.02219,45.9447],[16.02579,45.94605],[16.03141,45.94721],[16.03618,45.94834],[16.04103,45.94849],[16.04352,45.95094],[16.04759,45.95267],[16.05025,45.95339],[16.05326,45.95401],[16.05609,45.95673],[16.06008,45.95876],[16.06536,45.9598],[16.06819,45.96252],[16.07167,45.96407],[16.07549,45.96493],[16.07931,45.96508],[16.08141,45.96538],[16.08411,45.96669],[16.08707,45.96744],[16.09076,45.96762],[16.0936,45.96729],[16.09566,45.96657],[16.09755,45.96562],[16.09922,45.96463],[16.10034,45.96475],[16.10089,45.96565],[16.10098,45.96693],[16.10132,45.97027],[16.1027,45.97281],[16.10527,45.97504],[16.10827,45.97648],[16.11205,45.9774],[16.11407,45.97755],[16.11669,45.97803],[16.11948,45.97815],[16.12334,45.97758],[16.12707,45.97633],[16.12939,45.97603],[16.13179,45.9754],[16.13402,45.97618],[16.13703,45.97683],[16.13892,45.97698],[16.14145,45.97743],[16.14428,45.9774],[16.14557,45.97722],[16.1481,45.97767],[16.15145,45.97761],[16.15415,45.97797],[16.15724,45.97797],[16.1599,45.97734],[16.16235,45.97663],[16.16458,45.97525],[16.16651,45.97334],[16.16793,45.9712],[16.16844,45.9689],[16.16896,45.96726],[16.16913,45.96529],[16.17123,45.96443],[16.17376,45.96264],[16.17621,45.96076],[16.1778,45.95888],[16.17866,45.95664],[16.17866,45.95524],[16.17956,45.95321],[16.17964,45.95082],[16.17986,45.94945],[16.18278,45.94736],[16.18462,45.94521],[16.18582,45.94276],[16.18595,45.94065],[16.18578,45.93874],[16.18509,45.93727],[16.18582,45.93506],[16.18617,45.93256],[16.18578,45.93059],[16.18608,45.92721],[16.18728,45.92548],[16.18771,45.9228],[16.19067,45.92077],[16.1923,45.91856],[16.19308,45.91644],[16.19329,45.91515],[16.19535,45.91309],[16.19698,45.91059],[16.19741,45.90784],[16.19737,45.90605],[16.19647,45.90378],[16.19651,45.90279],[16.19951,45.9027],[16.20359,45.90163],[16.20625,45.90022],[16.20827,45.89822],[16.2117,45.89365],[16.21505,45.88854],[16.21664,45.88553],[16.21977,45.88338],[16.22204,45.8806],[16.22591,45.87531],[16.2338,45.86969],[16.2359,45.86862],[16.23874,45.86626],[16.24032,45.86327],[16.24071,45.85983],[16.2405,45.85855],[16.24002,45.85598],[16.23904,45.85409],[16.23779,45.85281],[16.23972,45.85122],[16.24093,45.84949],[16.2417,45.84737],[16.24487,45.84641],[16.24779,45.84474],[16.25041,45.84231],[16.25191,45.8401],[16.25247,45.83795],[16.25204,45.83517],[16.26826,45.83511],[16.26831,45.8236],[16.22974,45.82356],[16.2299,45.78591],[16.21109,45.78616],[16.21101,45.78447],[16.21243,45.7827],[16.21333,45.78039],[16.21333,45.77797],[16.2123,45.77558],[16.2099,45.77309],[16.20788,45.77129],[16.20543,45.76977],[16.20217,45.76878],[16.19934,45.76827],[16.19552,45.76851],[16.19174,45.7695],[16.17531,45.77818],[16.16934,45.78081],[16.1578,45.78497],[16.1508,45.78692],[16.14394,45.78701],[16.14368,45.77965],[16.11181,45.69503],[16.07629,45.69513],[16.07624,45.69708],[16.02624,45.69689],[16.01491,45.70991],[16.01129,45.70996],[16.00871,45.71028],[16.00373,45.71008],[15.99841,45.70879],[15.99472,45.70513],[15.99386,45.70237],[15.99172,45.69914],[15.9888,45.69698],[15.98657,45.69581],[15.98369,45.69365],[15.97949,45.69185],[15.97923,45.68954],[15.97803,45.68739],[15.98022,45.68427],[15.98077,45.68091],[15.98043,45.67911],[15.9797,45.67755],[15.97944,45.6756],[15.97858,45.67314],[15.97906,45.6711],[15.97871,45.66844],[15.97704,45.66604],[15.97459,45.66379],[15.97305,45.66196],[15.97052,45.65968],[15.97034,45.65614],[15.96846,45.6526],[15.96627,45.65023],[15.96215,45.64795],[15.96223,45.64567],[15.96288,45.64225],[15.96271,45.64],[15.96335,45.63724],[15.96279,45.63478],[15.95987,45.63049],[15.95944,45.6273],[15.95768,45.62454],[15.95429,45.62211],[15.95163,45.62118],[15.94803,45.62061],[15.94494,45.61761],[15.94082,45.61515],[15.93799,45.61389],[15.93408,45.61305],[15.93099,45.60935],[15.92764,45.60704],[15.92322,45.60542],[15.91816,45.605],[15.91352,45.60596],[15.91181,45.60671],[15.90885,45.6074],[15.90387,45.6083],[15.90074,45.60989],[15.89812,45.6114],[15.89464,45.61263],[15.89194,45.61431],[15.8885,45.61665],[15.8864,45.61911],[15.88554,45.62199],[15.88584,45.6246],[15.88747,45.62697],[15.88816,45.62808],[15.88464,45.63013],[15.88224,45.63256],[15.88134,45.63436],[15.88095,45.63577],[15.87778,45.63718],[15.87554,45.63859],[15.87215,45.64033],[15.86984,45.64267],[15.86821,45.64525],[15.86666,45.64738],[15.86318,45.64744],[15.85962,45.64807],[15.85696,45.64912],[15.85413,45.6502],[15.85138,45.65014],[15.84731,45.65104],[15.84426,45.65242],[15.84224,45.65395],[15.83967,45.65515],[15.83417,45.6562],[15.83027,45.65755],[15.82709,45.65923],[15.8246,45.66118],[15.82044,45.66112],[15.81563,45.66136],[15.81048,45.66271],[15.80641,45.66514],[15.80435,45.66796],[15.80306,45.67008],[15.79851,45.67149],[15.79529,45.67338],[15.7928,45.6735],[15.78817,45.6747],[15.78349,45.67632],[15.77521,45.67992],[15.76791,45.6837],[15.76525,45.68649],[15.76431,45.68909],[15.76427,45.69158],[15.76379,45.69539],[15.76405,45.69944],[15.76281,45.70246],[15.76079,45.70606],[15.7607,45.70957],[15.76221,45.71289],[15.76598,45.71652],[15.76856,45.72287],[15.77143,45.72748],[15.77345,45.73264],[15.77748,45.73713],[15.77989,45.73985],[15.78371,45.74183],[15.78787,45.74282],[15.79169,45.74255],[15.79551,45.74387],[15.79808,45.74474],[15.8013,45.74617],[15.80615,45.74716],[15.80438,45.87573],[15.83911,45.87594],[15.84298,45.8754],[15.84322,45.85968],[15.84542,45.86074],[15.84866,45.86191],[15.85106,45.86268],[15.85246,45.86304],[15.85518,45.86382],[15.85733,45.86421],[15.8599,45.86422],[15.8617,45.86397],[15.8637,45.86682],[15.86499,45.86781],[15.86726,45.87077],[15.87035,45.87286],[15.87301,45.8737],[15.87649,45.87423]]],terms_url:"https://geoportal.zagreb.hr/",terms_text:"Grad Zagreb, Gradski ured za strategijsko planiranje i razvoj Grada",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.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:"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:"https://integracja02.gugik.gov.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:"https://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:"Singapore-Landlot",name:"Singapore Landlot",type:"wms",template:"https://mapservices.onemap.sg/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=singapore_landlot_wmts&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[103.564,1.189],[103.7453,1.12465],[104.1284,1.28255],[104.08035,1.3457],[104.1229,1.49123],[103.6615,1.49123],[103.564,1.189]]],terms_url:"https://www.onemap.sg/legal/opendatalicence.html",terms_text:"©OneMap Singapore ODL v1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/sg/OM2_logo.png"},{id:"Singapore-OneMap",name:"Singapore OneMap",type:"wms",template:"https://mapservices.onemap.sg/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=singapore_3414_wms&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[103.564,1.189],[103.7453,1.12465],[104.1284,1.28255],[104.08035,1.3457],[104.1229,1.49123],[103.6615,1.49123],[103.564,1.189]]],terms_url:"https://www.onemap.sg/legal/opendatalicence.html",terms_text:"©OneMap Singapore ODL v1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/sg/OM2_logo.png"},{id:"Slovakia-Historic-Maps",name:"Slovakia Historic Maps",type:"tms",template:"https://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-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-Orthofoto-2017",name:"South Tyrol Orthofoto 2017",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=p_bz-orthoimagery:P_BZ_OF_2017_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",endDate:"2017-10-01T00:00:00.000Z",startDate:"2017-07-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[11.37851,46.30096],[11.38516,46.30241],[11.39571,46.30998],[11.39893,46.30771],[11.40047,46.30835],[11.39922,46.30922],[11.39641,46.31043],[11.39752,46.3114],[11.39759,46.31529],[11.40432,46.32512],[11.41239,46.3245],[11.41531,46.32568],[11.41956,46.32559],[11.45325,46.33531],[11.4632,46.35096],[11.48003,46.35439],[11.47676,46.36434],[11.52706,46.3557],[11.54972,46.34515],[11.55762,46.34977],[11.5638,46.38164],[11.59641,46.3872],[11.61907,46.4252],[11.62525,46.47109],[11.64705,46.48445],[11.63315,46.49875],[11.63847,46.5017],[11.66456,46.49804],[11.70632,46.51086],[11.70362,46.62244],[11.39677,46.62433],[11.38982,46.61077],[11.38124,46.61248],[11.3742,46.6172],[11.3736,46.62351],[11.33308,46.62445],[11.3324,46.66169],[11.28639,46.65415],[11.27008,46.72256],[11.18099,46.71845],[11.1779,46.73045],[11.15988,46.72433],[11.1331,46.72321],[11.11404,46.71539],[11.03371,46.70832],[10.99869,46.69655],[10.92607,46.69632],[10.89226,46.68431],[10.81879,46.67159],[10.76729,46.6697],[10.74531,46.66452],[10.54001,46.64237],[10.5098,46.63247],[10.46448,46.63341],[10.49143,46.61407],[10.47546,46.56476],[10.47787,46.55756],[10.47049,46.54257],[10.45916,46.5408],[10.45057,46.52863],[10.45504,46.50879],[10.48199,46.49296],[10.48851,46.49567],[10.55065,46.49071],[10.57966,46.47369],[10.60181,46.4692],[10.62138,46.44779],[10.63992,46.44555],[10.67116,46.45252],[10.67888,46.4485],[10.6933,46.45737],[10.71562,46.46104],[10.74188,46.48386],[10.76385,46.48539],[10.77913,46.4705],[10.7975,46.4446],[10.86205,46.43656],[10.88333,46.45099],[10.91183,46.44401],[10.93191,46.45335],[10.93809,46.4666],[10.95491,46.47014],[10.96075,46.4744],[10.96556,46.48232],[10.98753,46.48362],[11.00573,46.47735],[11.01002,46.47121],[11.02993,46.46116],[11.03525,46.453],[11.03903,46.45276],[11.04177,46.44708],[11.04675,46.44661],[11.05482,46.45016],[11.06409,46.4459],[11.0677,46.44294],[11.07336,46.44129],[11.07731,46.44354],[11.07868,46.44862],[11.06787,46.46577],[11.0622,46.48835],[11.0586,46.48917],[11.05001,46.50643],[11.03525,46.51399],[11.04366,46.51741],[11.05619,46.51635],[11.0828,46.53171],[11.08829,46.50312],[11.10512,46.49615],[11.11044,46.49709],[11.13035,46.4822],[11.15919,46.48917],[11.1858,46.50855],[11.20794,46.49473],[11.21241,46.48208],[11.21962,46.46021],[11.20717,46.41668],[11.21524,46.4065],[11.20073,46.37204],[11.20597,46.36695],[11.19472,46.3647],[11.19275,46.36043],[11.20348,46.34515],[11.18923,46.3234],[11.17816,46.30319],[11.16477,46.29731],[11.16271,46.29044],[11.14391,46.28812],[11.13928,46.28415],[11.15001,46.27991],[11.15838,46.26834],[11.16653,46.2619],[11.17477,46.25914],[11.18301,46.25864],[11.18599,46.25755],[11.19397,46.25715],[11.19719,46.2581],[11.19996,46.25626],[11.1958,46.25092],[11.19508,46.249],[11.19183,46.24901],[11.19168,46.25283],[11.18932,46.25395],[11.18704,46.25405],[11.1826,46.25209],[11.18116,46.24865],[11.19484,46.24838],[11.20756,46.24807],[11.20683,46.21877],[11.2073,46.21773],[11.20923,46.21948],[11.24657,46.23109],[11.25433,46.23872],[11.25966,46.24089],[11.26365,46.24199],[11.27442,46.25184],[11.27652,46.25181],[11.28266,46.2565],[11.28631,46.26107],[11.29429,46.26086],[11.30313,46.25929],[11.31042,46.26599],[11.30888,46.2676],[11.31145,46.26872],[11.31485,46.27341],[11.31334,46.27943],[11.31025,46.2816],[11.31073,46.28367],[11.31575,46.28596],[11.32317,46.29224],[11.32291,46.29319],[11.33167,46.29479],[11.33201,46.29708],[11.3333,46.2982],[11.33566,46.29776],[11.33815,46.29951],[11.34017,46.29838],[11.3375,46.29432],[11.33858,46.29195],[11.33583,46.29067],[11.34158,46.28207],[11.34562,46.28023],[11.3475,46.28026],[11.356,46.2765],[11.35733,46.27409],[11.35729,46.27252],[11.35664,46.2697],[11.35823,46.26582],[11.36527,46.26469],[11.36986,46.26255],[11.373,46.26398],[11.37763,46.26226],[11.38857,46.26166],[11.39308,46.26499],[11.39789,46.26472],[11.39565,46.27282],[11.38917,46.27863],[11.38643,46.27988],[11.38505,46.2813],[11.38441,46.28705],[11.38093,46.29127],[11.37887,46.29221],[11.37102,46.29324],[11.35862,46.29613],[11.35896,46.29889],[11.36025,46.3009],[11.36458,46.30191],[11.36797,46.30072],[11.36815,46.3017],[11.37851,46.30096]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC0-1.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.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.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.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.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.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.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.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:"https://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:"https://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,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{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",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{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",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{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",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{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",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{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:"https://openmap.stockholm.se/bios/wms/app/baggis/web/WMS_STHLM_ORTOFOTO_2016?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=p_1002630&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:"https://dataportalen.stockholm.se/dataportalen/",terms_text:"© Stockholm municipality, CC0",best:true,description:"Orthophotos from the municipality of Stockholm 2016, 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/TEC.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/TEC.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:"US-TIGER-Roads-2019",name:"TIGER Roads 2019",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/ck0dxfa7602e61cmjk7p86749/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-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:[5,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:"https://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:"https://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",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"UkraineKyiv2014DZK",name:"Ukraine - Kyiv 2014 (DZK)",type:"tms",template:"https://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/UrbIS.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/UrbIS.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/UrbIS.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/UrbIS.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/UrbIS.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/UrbIS.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",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/UrbIS.png"},{id:"UrbISOrtho2019",name:"UrbIS-Ortho 2019",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:Ortho2019&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-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/UrbIS.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/UrbIS.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/UrbIS.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/UrbIS.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/UrbIS.png"},{id:"USGS-Imagery",name:"USGS Imagery",type:"tms",template:"https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[12,20],polygon:[[[-79.12989,43.31497],[-79.12989,43.24293],[-79.06696,43.24293],[-79.06696,43.13],[-79.12989,43.13],[-79.12989,43.05773],[-79.07126,43.05773],[-79.07126,42.92949],[-78.94326,42.92949],[-78.94326,42.75422],[-82.67886,41.67159],[-82.88391,41.75369],[-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.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.51953,45.33698],[-83.49681,45.87251],[-83.49681,45.93371],[-83.43381,45.93371],[-83.43381,46.00169],[-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.60983,46.50453],[-84.76227,46.63341],[-84.86115,46.88929],[-88.3882,48.30154],[-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.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],[-123.12915,49.06451],[-123.12915,48.93432],[-123.00554,48.75295],[-123.12969,48.75295],[-123.12969,48.69022],[-123.18382,48.69022],[-123.18382,48.7529],[-123.25493,48.7529],[-123.25493,48.55923],[-123.19222,48.55923],[-123.19222,48.43484],[-123.25411,48.19051],[-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],[-139,48.45],[-139,32.5],[-117.18748,32.5],[-116.7465,32.49746],[-116.7465,32.56092],[-115.99701,32.56092],[-115.99701,32.62649],[-115.12495,32.62474],[-115.12495,32.68749],[-114.81241,32.68749],[-114.81261,32.62524],[-114.87531,32.62557],[-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.434],[-111.4419,31.434],[-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],[-80.7,24],[-79.314,27.108],[-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.691],[-75.62902,44.691],[-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.80375,43.64253],[-79.12989,43.31497]]],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:"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-2016",name:"Ville de Nyon - Orthophoto 2016 HD 5cm/pi",type:"tms",template:"http://osmdata.asitvd.ch/tiles/nyon2016/{zoom}/{x}/{y}.png",endDate:"2016-03-10T00:00:00.000Z",startDate:"2016-03-10T00:00:00.000Z",zoomExtent:[10,20],polygon:[[[6.18068,46.38878],[6.21445,46.41522],[6.25774,46.3887],[6.22398,46.36228],[6.18068,46.38878]]],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:"https://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:"https://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:"https://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:"https://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:"https://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:"https://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:"https://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-ef2018_10cm",name:"VoGIS: Echtfarbenbild 2018 (10cm)",type:"wms",template:"https://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2018_10cm&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",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:"https://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"}];
26842
26843         var presets = {aerialway:{fields:["name","aerialway"],moreFields:["layer"],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","line","area"],tags:{amenity:"*"},searchable:false,name:"Amenity"},attraction:{icon:"maki-star",fields:["name","attraction","operator","opening_hours","fee","charge_fee"],moreFields:["address","email","fax","opening_hours","payment_multi","phone","website"],geometry:["point","vertex","line","area"],tags:{attraction:"*"},searchable:false,name:"Attraction"},boundary:{fields:["boundary"],geometry:["line"],tags:{boundary:"*"},searchable:false,name:"Boundary",matchScore:0.45},building_point:{icon:"maki-home",fields:["{building}"],moreFields:["{building}"],geometry:["point"],tags:{building:"*"},matchScore:0.6,searchable:false,name:"Building"},embankment:{geometry:["line"],tags:{embankment:"yes"},name:"Embankment",matchScore:0.2,searchable:false},emergency:{fields:["emergency_combo"],geometry:["point","vertex","area"],tags:{emergency:"*"},searchable:false,name:"Emergency Feature"},ford_line:{geometry:["line"],tags:{ford:"*"},name:"Ford",searchable:false},highway:{fields:["name","highway"],geometry:["point","vertex","line","area"],tags:{highway:"*"},searchable:false,name:"Highway Feature"},indoor:{fields:["level","indoor_type"],geometry:["point","vertex","line","area"],tags:{indoor:"*"},matchScore:0.8,searchable:false,name:"Indoor Feature"},landuse:{fields:["name","landuse"],geometry:["area"],tags:{landuse:"*"},matchScore:0.9,searchable:false,name:"Land Use Feature"},leisure:{icon:"maki-pitch",fields:["name","leisure"],geometry:["point","vertex","line","area"],tags:{leisure:"*"},searchable:false,name:"Leisure Feature"},man_made:{icon:"temaki-storage_tank",fields:["name","man_made"],moreFields:["material"],geometry:["point","vertex","line","area"],tags:{man_made:"*"},matchScore:0.95,searchable:false,name:"Man Made Feature"},natural:{icon:"maki-natural",fields:["name","natural"],moreFields:["gnis/feature_id"],geometry:["point","vertex","line","area"],tags:{natural:"*"},searchable:false,name:"Natural Feature"},place:{fields:["name","place"],moreFields:["gnis/feature_id"],geometry:["point","vertex","area"],tags:{place:"*"},searchable:false,name:"Place"},playground:{icon:"maki-playground",fields:["playground","playground/theme","min_age","max_age","wheelchair","blind","height"],moreFields:["access_simple","colour","ref"],geometry:["point","vertex","line","area"],tags:{playground:"*"},searchable:false,name:"Playground Equipment"},power:{geometry:["point","vertex","line","area"],tags:{power:"*"},fields:["power"],moreFields:["material"],searchable:false,name:"Power Feature"},railway:{fields:["railway"],geometry:["point","vertex","line","area"],tags:{railway:"*"},searchable:false,name:"Railway Feature"},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","line","area"],tags:{tourism:"*"},searchable:false,name:"Tourism Feature"},waterway:{fields:["name","waterway"],geometry:["point","vertex","line","area"],tags:{waterway:"*"},searchable:false,name:"Waterway Feature"},"addr/interpolation":{fields:["addr/interpolation"],geometry:["line"],tags:{"addr:interpolation":"*"},name:"Address Interpolation",searchable:false,matchScore:0.2},address:{fields:["address"],geometry:["point","vertex","area"],tags:{"addr:*":"*"},addTags:{},removeTags:{},reference:{key:"addr"},name:"Address",matchScore:0.15},"advertising/billboard":{icon:"temaki-billboard",fields:["direction","lit"],geometry:["point","vertex","line"],tags:{advertising:"billboard"},name:"Billboard"},"advertising/board":{fields:["lit","support","height"],geometry:["point"],tags:{advertising:"board"},name:"Notice Board"},"advertising/column":{icon:"temaki-storage_tank",fields:["lit"],geometry:["point","area"],tags:{advertising:"column"},name:"Advertising Column"},"advertising/poster_box":{fields:["lit","height"],geometry:["point"],tags:{advertising:"poster_box"},name:"Poster Box"},"advertising/totem":{fields:["operator","lit","visibility","direction","height"],geometry:["point"],tags:{advertising:"totem"},name:"Advertising Totem"},"aerialway/cable_car":{icon:"fas-tram",geometry:["line"],fields:["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"cable_car"},terms:["aerial cable","lift","ropeway","skiing","snowboarding","tramway"],name:"Cable Car"},"aerialway/chair_lift":{icon:"temaki-chairlift",geometry:["line"],fields:["name","oneway_yes","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"chair_lift"},terms:["aerial cable","skiing","snowboarding"],name:"Chair Lift"},"aerialway/drag_lift":{icon:"temaki-drag_lift",geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"drag_lift"},terms:["skiing","snowboarding","surface cable"],name:"Drag Lift"},"aerialway/gondola":{icon:"maki-aerialway",geometry:["line"],fields:["name","oneway","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"gondola"},terms:["aerial cable","lift","skiing","snowboarding"],name:"Gondola"},"aerialway/goods":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"goods"},terms:["aerial cable"],name:"Goods Aerialway"},"aerialway/j-bar":{icon:"temaki-j_bar_lift",geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"j-bar"},terms:["drag lift","skiing","snowboarding","surface cable","jaybar","jbar"],name:"J-Bar Lift"},"aerialway/magic_carpet":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"magic_carpet"},terms:["conveyor belt","skiing","snowboarding","surface lift"],name:"Magic Carpet Lift"},"aerialway/mixed_lift":{icon:"maki-aerialway",geometry:["line"],fields:["name","oneway_yes","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"mixed_lift"},terms:["aerial cable","skiing","snowboarding"],name:"Mixed Lift"},"aerialway/platter":{icon:"temaki-platter_lift",geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"platter"},terms:["button lift","disc lift","drag lift","poma lift","skiing","snowboarding","surface cable"],name:"Platter Lift"},"aerialway/pylon":{icon:"temaki-aerialway_pole",geometry:["point","vertex"],fields:["ref"],tags:{aerialway:"pylon"},terms:["chair lift pole","skiing","snowboarding","lift tower"],name:"Aerialway Pylon"},"aerialway/rope_tow":{geometry:["line"],fields:["name","oneway_yes","aerialway/capacity","aerialway/duration"],tags:{aerialway:"rope_tow"},terms:["bugel lift","drag lift","handle tow","skiing","snowboarding","surface cable"],name:"Rope Tow Lift"},"aerialway/t-bar":{icon:"temaki-t_bar_lift",geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"t-bar"},terms:["drag lift","skiing","surface cable","tbar"],name:"T-Bar Lift"},"aerialway/zip_line":{geometry:["line"],fields:["name","oneway_yes","aerialway/duration","maxweight","access_simple"],tags:{aerialway:"zip_line"},terms:["aerial runway","canopy","flying fox","foefie slide","gravity propelled aerial ropeslide","Tyrolean traverse","zip wire","zip-line","zipline","zipwire"],name:"Zip Line"},"aeroway/aerodrome":{icon:"maki-airport",geometry:["area","point"],fields:["name","iata","icao","operator","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["gnis/feature_id"],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":{icon:"fas-warehouse",geometry:["area"],fields:["name","building_area"],tags:{aeroway:"hangar"},addTags:{building:"hangar",aeroway:"hangar"},name:"Hangar"},"aeroway/helipad":{icon:"maki-heliport",geometry:["area","point"],fields:["name","ref","operator","surface","lit"],moreFields:["access_simple","address","charge_fee","fee","opening_hours"],terms:["helicopter","helipad","heliport"],tags:{aeroway:"helipad"},name:"Helipad"},"aeroway/holding_position":{icon:"maki-airport",geometry:["vertex"],fields:["ref"],tags:{aeroway:"holding_position"},name:"Aircraft Holding Position"},"aeroway/jet_bridge":{icon:"temaki-pedestrian_walled",geometry:["line"],fields:["ref_aeroway_gate","width","access_simple","wheelchair"],moreFields:["manufacturer"],terms:["aerobridge","air jetty","airbridge","finger","gangway","jet way","jetway","passenger boarding bridge","PBB","portal","skybridge","terminal gate connector"],tags:{aeroway:"jet_bridge"},addTags:{aeroway:"jet_bridge",highway:"corridor"},matchScore:1.05,name:"Jet Bridge"},"aeroway/parking_position":{icon:"maki-airport",geometry:["vertex","point","line"],fields:["ref"],tags:{aeroway:"parking_position"},name:"Aircraft Parking Position"},"aeroway/runway":{icon:"fas-plane-departure",geometry:["line","area"],terms:["landing strip"],fields:["ref_runway","surface","length","width"],tags:{aeroway:"runway"},name:"Runway"},"aeroway/spaceport":{icon:"fas-space-shuttle",geometry:["area","point"],fields:["name","operator","access_simple","website","wikidata"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","phone"],terms:["cosmodrome","rocket launch center","rocket launch complex","rocket launch site","rocket range","space port"],tags:{aeroway:"spaceport"},name:"Spaceport"},"aeroway/taxiway":{icon:"fas-plane",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","wheelchair","baby_feeding"],moreFields:["smoking"],tags:{aeroway:"terminal"},name:"Airport Terminal"},"aeroway/windsock":{icon:"fas-wind",geometry:["point","vertex"],fields:["ref","lit","height"],moreFields:["manufacturer"],tags:{aeroway:"windsock"},name:"Windsock"},"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,replacement:"public_transport/station_bus"},"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/embassy":{icon:"temaki-embassy",fields:["name","country","address","building_area"],moreFields:["email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"embassy"},searchable:false,name:"Embassy"},"amenity/ferry_terminal":{icon:"maki-ferry",fields:["name","network","operator","address","building_area"],geometry:["point","vertex","area"],tags:{amenity:"ferry_terminal"},matchScore:0.95,name:"Ferry Station / Terminal",searchable:false,replacement:"public_transport/station_ferry"},"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"],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:"temaki-junk_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:"fas-swimmer",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:["email","fax","gnis/feature_id","level","payment_multi","phone","website","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:["email","fax","gnis/feature_id","level","phone","website","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:["email","fax","gnis/feature_id","level","phone","website","wheelchair"],geometry:["point","area"],terms:["adoption","aspca","cat","dog","horse","kitten","pet care","pet rescue","puppy","raptor","reptile","rescue","spca","pound"],tags:{amenity:"animal_shelter"},name:"Animal Shelter"},"amenity/arts_centre":{icon:"maki-theatre",fields:["name","address","building_area","opening_hours","website"],moreFields:["charge_fee","email","fax","fee","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","website","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:["brand","covered","height","indoor","level","lit","manufacturer","name","opening_hours","wheelchair"],geometry:["point","vertex"],terms:["money","cash","machine"],tags:{amenity:"atm"},name:"ATM"},"amenity/bank":{icon:"maki-bank",fields:["name","operator","address","building_area","opening_hours","atm","drive_through"],moreFields:["air_conditioning","brand","currency_multi","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","phone","ref/vatin","website","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","opening_hours","min_age","brewery"],moreFields:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","microbrewery","operator","outdoor_seating","payment_multi","phone","ref/vatin","smoking","website","wheelchair"],geometry:["point","area"],terms:["dive","beer","bier","booze"],tags:{amenity:"bar"},name:"Bar"},"amenity/bar/lgbtq":{icon:"maki-bar",geometry:["point","area"],terms:["gay bar","lesbian bar","lgbtq bar","lgbt bar","lgb bar"],tags:{amenity:"bar",lgbtq:"primary"},name:"LGBTQ+ 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","height","inscription","level","lit","manufacturer","operator"],geometry:["point","vertex","line"],terms:["seat","chair"],tags:{amenity:"bench"},name:"Bench"},"amenity/bicycle_parking":{icon:"maki-bicycle",fields:["bicycle_parking","capacity","operator","operator/type","covered","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["colour","indoor","level","lit"],geometry:["point","vertex","area"],terms:["bike","cycle parking","cycling"],tags:{amenity:"bicycle_parking"},name:"Bicycle Parking"},"amenity/bicycle_parking/building":{icon:"temaki-bicycle_structure",fields:["{amenity/bicycle_parking}","opening_hours","building_area"],geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"building"},reference:{key:"bicycle_parking"},terms:["Bike Parking Station","cycle parking","cycling","Multi-Storey Bicycle Park","Multi-Storey Bike Park"],name:"Bicycle Parking Garage"},"amenity/bicycle_parking/lockers":{icon:"temaki-bicycle_box",geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"lockers"},reference:{key:"bicycle_parking"},terms:["cycle locker","cycling","Bike Lockers"],name:"Bicycle Lockers"},"amenity/bicycle_parking/shed":{icon:"maki-bicycle",fields:["{amenity/bicycle_parking}","building_area"],geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"shed"},reference:{key:"bicycle_parking"},terms:["cycle shed","cycling","Bike Shed"],name:"Bicycle Shed"},"amenity/bicycle_rental":{icon:"temaki-bicycle_rental",fields:["capacity","network","operator","operator/type","fee","payment_multi_fee"],moreFields:["address","covered","email","fax","level","opening_hours","phone","website","wheelchair"],geometry:["point","vertex","area"],terms:["bike","bicycle","bikeshare","bike share","bicycle share","cycle dock","cycle hub","cycleshare","cycling"],tags:{amenity:"bicycle_rental"},name:"Bicycle Rental"},"amenity/bicycle_repair_station":{icon:"temaki-bicycle_repair",fields:["operator","brand","opening_hours","fee","payment_multi_fee","charge_fee","service/bicycle"],moreFields:["colour","covered","indoor","level","manufacturer"],geometry:["point","vertex"],terms:["bike chain","bike multitool","bike repair","bike tools","cycle pump","cycle repair","cycling"],tags:{amenity:"bicycle_repair_station"},name:"Bicycle Repair Tool Stand"},"amenity/biergarten":{icon:"fas-beer",fields:["name","address","opening_hours","outdoor_seating","brewery"],moreFields:["{amenity/bar}","building_area","cuisine"],geometry:["point","area"],tags:{amenity:"biergarten"},terms:["beer","bier","booze"],name:"Biergarten"},"amenity/boat_rental":{icon:"temaki-boat_rental",fields:["name","operator","operator/type","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["access_simple","address","email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"boat_rental"},name:"Boat Rental"},"amenity/bureau_de_change":{icon:"temaki-money_hand",fields:["name","operator","payment_multi","currency_multi","address","building_area"],moreFields:["email","fax","level","opening_hours","phone","website","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","opening_hours","outdoor_seating","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","bar","brand","capacity","delivery","diet_multi","email","fax","gnis/feature_id","level","min_age","not/name","payment_multi","phone","ref/vatin","reservation","smoking","takeaway","website","wheelchair"],geometry:["point","area"],terms:["bistro","coffee","tea"],tags:{amenity:"cafe"},name:"Cafe"},"amenity/car_pooling":{icon:"temaki-car_pool",fields:["name","operator","operator/type","capacity","address","opening_hours","lit"],moreFields:["email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"car_pooling"},terms:["car sharing","carpooling","lift sharing","ride sharing"],name:"Car Pooling Station"},"amenity/car_rental":{icon:"maki-car-rental",fields:["name","operator","address","opening_hours","payment_multi"],moreFields:["brand","email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"car_rental"},name:"Car Rental"},"amenity/car_sharing":{icon:"temaki-sign_and_car",fields:["name","operator","operator/type","capacity","address","payment_multi","supervised"],moreFields:["brand","email","fax","lit","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"car_sharing"},name:"Car Sharing Station"},"amenity/car_wash":{icon:"temaki-car_wash",fields:["name","operator","address","building_area","opening_hours","payment_multi","self_service"],moreFields:["email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"car_wash"},name:"Car Wash"},"amenity/casino":{icon:"maki-casino",fields:["name","operator","address","building_area","opening_hours","gambling","smoking"],moreFields:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","min_age","payment_multi","phone","ref/vatin","website","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","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["brand","covered","level","manufacturer"],geometry:["point"],tags:{amenity:"charging_station"},terms:["EV","Electric Vehicle","Supercharger"],name:"Charging Station"},"amenity/childcare":{icon:"fas-child",fields:["name","operator","operator/type","address","building_area","opening_hours","website"],moreFields:["baby_feeding","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","max_age","min_age","not/name","payment_multi","phone","wheelchair"],geometry:["point","area"],terms:["daycare","orphanage","playgroup"],tags:{amenity:"childcare"},name:"Nursery/Childcare"},"amenity/cinema":{icon:"maki-cinema",fields:["name","address","screen","building_area","opening_hours","payment_multi"],moreFields:["air_conditioning","brand","email","fax","gnis/feature_id","level","min_age","phone","website","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","operator/type","healthcare/speciality","address","building_area","opening_hours"],moreFields:["air_conditioning","brand","email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["medical","urgentcare"],tags:{amenity:"clinic"},addTags:{amenity:"clinic",healthcare:"clinic"},reference:{key:"amenity",value:"clinic"},name:"Clinic"},"amenity/clinic/abortion":{icon:"maki-hospital",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",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:["covered","height","indoor","level","lit","manufacturer"],geometry:["point","vertex"],terms:["time"],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","operator/type","address","website","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["denomination","email","fax","gnis/feature_id","not/name","phone","religion","wheelchair"],geometry:["area","point"],terms:["university","undergraduate school"],tags:{amenity:"college"},name:"College Grounds"},"amenity/community_centre":{icon:"maki-town-hall",fields:["name","operator","operator/type","address","building_area","opening_hours","website"],moreFields:["air_conditioning","baby_feeding","email","fax","gnis/feature_id","phone","polling_station","wheelchair"],geometry:["point","area"],terms:["event","hall"],tags:{amenity:"community_centre"},name:"Community Center"},"amenity/community_centre/lgbtq":{icon:"maki-town-hall",geometry:["point","area"],terms:["lgbtq event","lgbtq hall","lgbt event","lgbt hall","lgb event","lgb hall"],tags:{amenity:"community_centre",lgbtq:"primary"},name:"LGBTQ+ Community Center"},"amenity/compressed_air":{icon:"fas-tachometer-alt",fields:["operator","access_simple","fee","payment_multi_fee","charge_fee","covered","lit"],moreFields:["brand","manufacturer"],geometry:["point","area"],tags:{amenity:"compressed_air"},name:"Compressed Air"},"amenity/conference_centre":{icon:"fas-user-tie",fields:["name","operator","operator/type","building_area","address","website","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","gnis/feature_id","not/name","phone","smoking","wheelchair"],geometry:["point","area"],tags:{amenity:"conference_centre"},terms:["auditorium","conference","exhibition","exposition","lecture"],name:"Convention Center"},"amenity/courthouse":{icon:"fas-gavel",fields:["name","operator","address","building_area"],moreFields:["email","fax","gnis/feature_id","level","phone","polling_station","smoking","website","wheelchair"],geometry:["point","area"],tags:{amenity:"courthouse"},name:"Courthouse"},"amenity/crematorium":{icon:"maki-cemetery",fields:["name","website","phone","opening_hours","wheelchair"],moreFields:["address","email","fax","gnis/feature_id","level","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"crematorium"},terms:["cemetery","funeral"],name:"Crematorium"},"amenity/dentist":{icon:"maki-dentist",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["tooth","teeth"],tags:{amenity:"dentist"},addTags:{amenity:"dentist",healthcare:"dentist"},reference:{key:"amenity",value:"dentist"},name:"Dentist"},"amenity/dive_centre":{icon:"temaki-scuba_diving",fields:["name","operator","address","building_area","opening_hours","scuba_diving"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","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:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["medic*","physician"],tags:{amenity:"doctors"},addTags:{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:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["martial arts","dojang"],tags:{amenity:"dojo"},name:"Dojo / Martial Arts Academy"},"amenity/dressing_room":{icon:"maki-clothing-store",fields:["operator","access_simple","gender","wheelchair","building_area"],moreFields:["charge_fee","fee","level","opening_hours","payment_multi_fee","ref"],geometry:["point","area"],terms:["changeroom","dressing room","fitting room","locker room"],tags:{amenity:"dressing_room"},name:"Changing Room"},"amenity/drinking_water":{icon:"maki-drinking-water",fields:["operator","access_simple","fee","payment_multi_fee","charge_fee","wheelchair","bottle"],moreFields:["covered","indoor","level","lit"],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","operator/type","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"driving_school"},name:"Driving School"},"amenity/events_venue":{icon:"fas-users",fields:["name","operator","building_area","address","website","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","gnis/feature_id","level","min_age","phone","smoking","wheelchair"],geometry:["point","area"],tags:{amenity:"events_venue"},terms:["banquet hall","baptism","Bar Mitzvah","Bat Mitzvah","birthdays","celebrations","conferences","confirmation","meetings","parties","party","quinceañera","reunions","weddings"],name:"Events Venue"},"amenity/fast_food":{icon:"maki-fast-food",fields:["name","cuisine","operator","address","building_area","opening_hours","drive_through"],moreFields:["air_conditioning","brand","capacity","delivery","diet_multi","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","opening_hours","outdoor_seating","payment_multi","phone","ref/vatin","smoking","takeaway","website","wheelchair"],geometry:["point","area"],tags:{amenity:"fast_food"},terms:["restaurant","takeaway"],name:"Fast Food"},"amenity/fast_food/ice_cream":{icon:"fas-ice-cream",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"ice_cream"},reference:{key:"cuisine",value:"ice_cream"},name:"Ice Cream Fast Food",searchable:false},"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/donut":{icon:"temaki-donut",geometry:["point","area"],terms:["breakfast","brunch","cafe","canteen","coffee","dine","diner","donut","doughnut","dining","eat","lunch","table"],tags:{amenity:"fast_food",cuisine:"donut"},reference:{key:"cuisine",value:"donut"},name:"Donut 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/hot_dog":{icon:"fas-hotdog",geometry:["point","area"],terms:["ballpark","frankfurter","frank","hotdog stand","sandwich","sausage","wiener"],tags:{amenity:"fast_food",cuisine:"hot_dog"},reference:{key:"cuisine",value:"hot_dog"},name:"Hot Dog 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:"temaki-sandwich",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:["email","fax","gnis/feature_id","phone","polling_station","smoking","website","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","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["capacity","diet_multi","email","fax","gnis/feature_id","level","not/name","outdoor_seating","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["fast food","restaurant","food"],tags:{amenity:"food_court"},name:"Food Court"},"amenity/fountain":{icon:"temaki-fountain",fields:["name","operator","fountain","drinking_water","height","lit"],moreFields:["covered","indoor","level","manufacturer"],geometry:["point","area"],tags:{amenity:"fountain"},terms:["basin","water"],name:"Fountain"},"amenity/fuel":{icon:"maki-fuel",fields:["name","brand","operator","address","fuel_multi","self_service"],moreFields:["brand","building","email","fax","gnis/feature_id","opening_hours","payment_multi","phone","ref/vatin","website","wheelchair"],geometry:["point","area"],terms:["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],tags:{amenity:"fuel"},name:"Gas Station"},"amenity/gambling":{icon:"fas-coins",fields:["{amenity/casino}"],moreFields:["{amenity/casino}"],geometry:["point","area"],terms:["betting","bingo","blackjack","casino","craps","gamble","gambling","keno","lottery","pachinko","poker","roulette","slot machines","slots"],tags:{amenity:"gambling"},name:"Gambling Hall"},"amenity/grave_yard":{icon:"maki-cemetery",fields:["religion","address"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],tags:{amenity:"grave_yard"},terms:["burial ground","cemetary","cemetery","churchyard","columbarium","grave yard","graveyard","mausoleum","tomb"],name:"Graveyard"},"amenity/grit_bin":{icon:"fas-box",fields:["operator","access_simple","material","collection_times"],moreFields:["colour","height","lit"],geometry:["point","vertex"],tags:{amenity:"grit_bin"},terms:["salt","sand"],name:"Grit Bin"},"amenity/hospital":{icon:"maki-hospital",fields:["name","operator","operator/type","healthcare/speciality","address","emergency"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","phone","website","wheelchair"],geometry:["area","point"],terms:["clinic","doctor","emergency room","health","infirmary","institution","sanatorium","sanitarium","sick","surgery","ward"],tags:{amenity:"hospital"},addTags:{amenity:"hospital",healthcare:"hospital"},reference:{key:"amenity",value:"hospital"},name:"Hospital Grounds"},"amenity/hunting_stand":{icon:"temaki-binoculars",fields:["access_simple","lockable"],geometry:["point","vertex","area"],terms:["game","gun","lookout","rifle","shoot*","wild","watch"],tags:{amenity:"hunting_stand"},name:"Hunting Stand"},"amenity/ice_cream":{icon:"fas-ice-cream",fields:["name","address","building_area","opening_hours","outdoor_seating"],moreFields:["delivery","diet_multi","drive_through","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","takeaway","website","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","operator/type","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","gnis/feature_id","level","min_age","opening_hours","outdoor_seating","payment_multi","phone","ref/vatin","smoking","website","wheelchair"],geometry:["point","area"],terms:["cybercafe","taxiphone","teleboutique","coffee","cafe","net","lanhouse"],tags:{amenity:"internet_cafe"},name:"Internet Cafe"},"amenity/karaoke_box":{icon:"maki-karaoke",fields:["name","operator","address","building_area","opening_hours","website"],moreFields:["air_conditioning","email","fax","gnis/feature_id","level","min_age","payment_multi","phone","ref/vatin","smoking","wheelchair"],geometry:["point","area"],terms:["karaoke club","karaoke room","karaoke television","KTV"],tags:{amenity:"karaoke_box"},name:"Karaoke Box"},"amenity/kindergarten":{icon:"temaki-school",fields:["name","operator","address","phone","preschool"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","max_age","min_age","not/name","opening_hours","payment_multi","website","wheelchair"],geometry:["area","point"],terms:["kindergarden","pre-school"],tags:{amenity:"kindergarten"},name:"Preschool / Kindergarten Grounds"},"amenity/language_school":{icon:"temaki-school",fields:["name","operator","operator/type","address","building_area","opening_hours","language_multi"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["esl"],tags:{amenity:"language_school"},name:"Language School"},"amenity/lavoir":{icon:"tnp-4310",fields:["name","operator","operator/type","address","access_simple","building_area"],moreFields:["gnis/feature_id","smoking","wheelchair"],geometry:["point","area"],tags:{amenity:"lavoir"},terms:["clothing","laundry","washing"],name:"Lavoir"},"amenity/letter_box":{icon:"temaki-letter_box",fields:["post","access_simple","collection_times","height"],moreFields:["covered","indoor","level","lit","lockable","manufacturer","material","operator","wheelchair"],geometry:["point","vertex"],tags:{amenity:"letter_box"},terms:["curbside delivery box","home delivery box","direct-to-door delivery box","letter hole","letter plate","letter slot","letterbox","letterhole","letterplate","letterslot","mail box","mail hole","mail slot","mailbox","mailhole","mailslot","through-door delivery box"],name:"Letter Box"},"amenity/library":{icon:"maki-library",fields:["name","operator","operator/type","building_area","address","ref/isil","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["access_simple","air_conditioning","baby_feeding","email","fax","gnis/feature_id","level","not/name","opening_hours","payment_multi","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["book"],tags:{amenity:"library"},name:"Library"},"amenity/loading_dock":{icon:"fas-truck-loading",fields:["ref","operator","access_simple","door","width","height"],moreFields:["address","colour","level","lit","wheelchair"],geometry:["vertex"],terms:["door","loading bay","shipping","unloading","warehouse"],tags:{amenity:"loading_dock"},name:"Loading Dock"},"amenity/love_hotel":{icon:"maki-heart",fields:["name","operator","address","building_area","rooms","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["email","fax","gnis/feature_id","min_age","payment_multi","phone","ref/vatin","smoking","website","wheelchair"],geometry:["point","area"],tags:{amenity:"love_hotel"},name:"Love Hotel"},"amenity/marketplace":{icon:"maki-shop",fields:["name","operator","address","building","opening_hours"],moreFields:["email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"marketplace"},name:"Marketplace"},"amenity/monastery":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area"],moreFields:["email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["area","point"],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:"temaki-money_hand",fields:["name","brand","address","building_area","payment_multi","currency_multi"],moreFields:["email","fax","level","opening_hours","phone","website","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:"fas-music",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","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","min_age","smoking"],moreFields:["air_conditioning","email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"nightclub"},terms:["disco*","night club","dancing","dance club"],name:"Nightclub"},"amenity/nightclub/lgbtq":{icon:"maki-bar",geometry:["point","area"],tags:{amenity:"nightclub",lgbtq:"primary"},terms:["gay nightclub","lesbian nightclub","lgbtq nightclub","lgbt nightclub","lgb nightclub"],name:"LGBTQ+ Nightclub"},"amenity/parking_entrance":{icon:"maki-entrance-alt1",fields:["ref","access_simple","address","level"],geometry:["vertex"],tags:{amenity:"parking_entrance"},name:"Parking Garage Entrance / Exit"},"amenity/parking_space":{fields:["capacity"],geometry:["area","point","vertex"],terms:[],tags:{amenity:"parking_space"},matchScore:0.95,name:"Parking Space"},"amenity/parking":{icon:"temaki-car_parked",fields:["operator","operator/type","parking","capacity","access_simple","fee","payment_multi_fee","charge_fee","surface"],moreFields:["address","covered","email","fax","maxstay","name","opening_hours","park_ride","phone","ref","supervised","website","wheelchair"],geometry:["area","point","vertex"],tags:{amenity:"parking"},terms:["automobile parking","car lot","car parking","rv parking","truck parking","vehicle parking"],name:"Parking Lot"},"amenity/parking/multi-storey":{icon:"temaki-car_structure",fields:["name","{amenity/parking}","building"],moreFields:["{amenity/parking}","height","building/levels"],geometry:["area"],tags:{amenity:"parking",parking:"multi-storey"},addTags:{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/parking/park_ride":{icon:"temaki-sign_and_car",geometry:["area","point","vertex"],tags:{amenity:"parking",park_ride:"yes"},reference:{key:"park_ride",value:"yes"},terms:["commuter parking lot","incentive parking lot","metro parking lot","park and pool lot","park and ride lot","P+R","public transport parking lot","public transit parking lot","train parking lot"],matchScore:0.95,name:"Park & Ride Lot"},"amenity/parking/underground":{icon:"temaki-car_structure",fields:["{amenity/parking}","layer"],geometry:["area","point","vertex"],tags:{amenity:"parking",parking:"underground"},addTags:{amenity:"parking",parking:"underground",layer:"-1"},reference:{key:"parking",value:"underground"},terms:["automobile parking","car lot","car parking","rv parking","subsurface parking","truck parking","vehicle parking"],name:"Underground Parking"},"amenity/payment_centre":{icon:"temaki-money_hand",fields:["name","brand","address","building_area","opening_hours","payment_multi"],moreFields:["currency_multi","email","fax","level","phone","website","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:"far-credit-card",fields:["name","brand","address","opening_hours","payment_multi"],moreFields:["covered","currency_multi","indoor","level","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","opening_hours","dispensing","drive_through"],moreFields:["brand","email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"pharmacy"},addTags:{amenity:"pharmacy",healthcare:"pharmacy"},reference:{key:"amenity",value:"pharmacy"},terms:["apothecary","drug store","drugstore","med*","prescription"],name:"Pharmacy Counter"},"amenity/photo_booth":{icon:"fas-person-booth",fields:["name","operator","payment_multi","wheelchair"],moreFields:["brand","indoor","level"],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:["air_conditioning","baby_feeding","email","fax","gnis/feature_id","internet_access","internet_access/ssid","level","opening_hours","phone","polling_station","website","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","{amenity/place_of_worship}"],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","{amenity/place_of_worship}"],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/christian/jehovahs_witness":{icon:"maki-place-of-worship",geometry:["point","area"],terms:["christian","church","house of God","house of prayer","house of worship"],tags:{amenity:"place_of_worship",religion:"christian",denomination:"jehovahs_witness"},reference:{key:"denomination",value:"jehovahs_witness"},name:"Kingdom Hall of Jehovah's Witnesses"},"amenity/place_of_worship/christian/la_luz_del_mundo":{icon:"maki-place-of-worship",geometry:["point","area"],terms:["christian","church","house of God","house of prayer","house of worship","the light of the world church"],tags:{amenity:"place_of_worship",religion:"christian",denomination:"la_luz_del_mundo"},reference:{key:"denomination",value:"la_luz_del_mundo"},name:"La Luz del Mundo Temple"},"amenity/place_of_worship/christian/quaker":{icon:"maki-place-of-worship",geometry:["point","area"],terms:["christian","church","house of God","house of prayer","house of worship"],tags:{amenity:"place_of_worship",religion:"christian",denomination:"quaker"},reference:{key:"denomination",value:"quaker"},name:"Quaker Friends Meeting House"},"amenity/place_of_worship/hindu":{icon:"temaki-hinduism",fields:["name","religion","denomination","{amenity/place_of_worship}"],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","{amenity/place_of_worship}"],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","{amenity/place_of_worship}"],geometry:["point","area"],terms:["islam","islamic center","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","{amenity/place_of_worship}"],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","{amenity/place_of_worship}"],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","{amenity/place_of_worship}"],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:["air_conditioning","charge_fee","email","fax","fee","gnis/feature_id","payment_multi_fee","phone","website","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:["email","fax","gnis/feature_id","level","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["badge","constable","constabulary","cop","detective","fed","law","enforcement","officer","patrol"],tags:{amenity:"police"},name:"Police"},"amenity/polling_station":{icon:"fas-vote-yea",fields:["name","ref","operator","address","opening_hours","building_area"],moreFields:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","phone","website","wheelchair"],geometry:["point","area"],terms:["ballot box","ballot drop","democracy","elections","polling place","vote","voting booth","voting machine"],tags:{amenity:"polling_station"},addTags:{amenity:"polling_station",polling_station:"yes"},name:"Permanent Polling Place"},"amenity/post_box":{icon:"temaki-post_box",fields:["operator","collection_times","drive_through","ref"],moreFields:["access_simple","brand","covered","gnis/feature_id","height","indoor","level","manufacturer","wheelchair"],geometry:["point","vertex"],tags:{amenity:"post_box"},terms:["drop box","dropbox","letter drop","mail box","mail collection box","mail drop","mail dropoff","mailbox","package drop","pillar box","pillarbox","post box","postal box","postbox"],name:"Mail Drop Box"},"amenity/post_depot":{icon:"fas-mail-bulk",fields:["name","operator","address","building_area","phone"],moreFields:["email","fax","gnis/feature_id","opening_hours","website","wheelchair"],geometry:["point","area"],terms:["mail processing and distribution center","post depot"],tags:{amenity:"post_depot"},name:"Post Sorting Office"},"amenity/post_office":{icon:"maki-post",fields:["name","operator","address","building_area","opening_hours"],moreFields:["brand","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["letter","mail"],tags:{amenity:"post_office"},name:"Post Office"},"amenity/prep_school":{icon:"temaki-school",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["academic","ACT","SAT","homework","math","reading","test prep","tutoring","writing"],tags:{amenity:"prep_school"},name:"Test Prep / Tutoring School"},"amenity/prison":{icon:"maki-prison",fields:["name","operator","operator/type","address"],moreFields:["email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["area","point"],terms:["cell","jail","correction"],tags:{amenity:"prison"},name:"Prison Grounds"},"amenity/pub":{icon:"maki-beer",fields:["name","address","building_area","opening_hours","smoking","brewery"],moreFields:["air_conditioning","cuisine","diet_multi","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","microbrewery","min_age","outdoor_seating","payment_multi","phone","ref/vatin","website","wheelchair"],geometry:["point","area"],tags:{amenity:"pub"},terms:["alcohol","drink","dive","beer","bier","booze"],name:"Pub"},"amenity/pub/lgbtq":{icon:"maki-beer",geometry:["point","area"],tags:{amenity:"pub",lgbtq:"primary"},terms:["gay pub","lesbian pub","lgbtq pub","lgbt pub","lgb pub"],name:"LGBTQ+ Pub"},"amenity/pub/microbrewery":{icon:"maki-beer",geometry:["point","area"],tags:{amenity:"pub",microbrewery:"yes"},reference:{key:"microbrewery"},terms:["alcohol","drink","dive","beer","bier","booze","craft brewery","microbrewery","small batch brewery"],name:"Brewpub"},"amenity/public_bath":{icon:"maki-water",fields:["name","bath/type","bath/open_air","bath/sand_bath","address","building_area","fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","opening_hours","payment_multi_fee","phone","website","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","public_bookcase/type","operator","opening_hours","capacity","website","lit"],moreFields:["access_simple","address","brand","email","level","location","phone","website","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:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","phone","website","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","operator/type","address","building","opening_hours","recycling_accepts"],moreFields:["charge_fee","email","fax","fee","payment_multi_fee","phone","website","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:["operator","recycling_accepts","collection_times"],moreFields:["colour","covered","indoor","level","manufacturer","material","opening_hours"],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/recycling/container/electrical_items":{icon:"maki-recycling",fields:["{amenity/recycling_container}"],moreFields:["{amenity/recycling_container}"],geometry:["point","area"],terms:["computers","electronic waste","electronics recycling","ewaste bin","phones","tablets"],tags:{amenity:"recycling",recycling_type:"container","recycling:electrical_items":"yes"},reference:{key:"recycling:electrical_items",value:"yes"},name:"E-Waste Container"},"amenity/recycling/container/green_waste":{icon:"maki-recycling",fields:["{amenity/recycling_container}"],moreFields:["{amenity/recycling_container}"],geometry:["point","area"],terms:["biodegradable","biological","compost","decomposable","garbage bin","garden waste","organic","rubbish","food scrap"],tags:{amenity:"recycling",recycling_type:"container","recycling:green_waste":"yes"},reference:{key:"recycling:green_waste",value:"yes"},name:"Green Waste Container"},"amenity/research_institute":{icon:"fas-flask",fields:["name","operator","operator/type","address","website","internet_access","internet_access/fee"],moreFields:["email","fax","gnis/feature_id","internet_access/ssid","phone","wheelchair"],geometry:["point","area"],terms:["applied research","experimentation","r&d","r & d","r and d","research and development","research institution","research laboratory","research labs"],tags:{amenity:"research_institute"},name:"Research Institute Grounds"},"amenity/restaurant":{icon:"maki-restaurant",fields:["name","cuisine","address","building_area","opening_hours","phone","website"],moreFields:["air_conditioning","bar","brand","brewery","capacity","delivery","diet_multi","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","microbrewery","min_age","not/name","outdoor_seating","ref/vatin","reservation","smoking","stars","takeaway","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:"temaki-temaki",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","payment_multi_fee","charge_fee","water_point"],moreFields:["opening_hours"],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:"temaki-school",fields:["name","operator","operator/type","address","religion","denomination","website"],moreFields:["charge_fee","email","fax","fee","gnis/feature_id","internet_access","internet_access/ssid","level","phone","polling_station","wheelchair"],geometry:["area","point"],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:["gnis/feature_id","lit","lockable","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:"temaki-sleep_shelter",fields:["name","operator","building_area"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"lean_to"},terms:["alpine hut","cabin","leanto","lodging","overnight accommodations","sleeping shelter","wilderness hut"],name:"Lean-To"},"amenity/shelter/picnic_shelter":{icon:"temaki-picnic_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:"temaki-transit_shelter",fields:["name","shelter_type","building_area","bench","lit"],geometry:["point","area"],terms:["bus stop","metro stop","public transit shelter","public transport shelter","tram stop shelter","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","access_simple","fee","payment_multi_fee","charge_fee","supervised","building_area","hot_water","wheelchair"],moreFields:["address","gender","level","operator"],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:["covered","level","lit","wheelchair"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"smoking_area"},name:"Smoking Area"},"amenity/social_centre":{icon:"fas-handshake",fields:["name","brand","operator","operator/type","address","building_area"],moreFields:["air_conditioning","baby_feeding","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["event","fraternal","fraternity","hall","organization","professional","society","sorority","union","vetern"],tags:{amenity:"social_centre"},name:"Social Center"},"amenity/social_facility":{icon:"temaki-social_facility",fields:["name","operator","operator/type","address","building_area","social_facility","social_facility_for"],moreFields:["baby_feeding","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","opening_hours","phone","website","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"social_facility"},name:"Social Facility"},"amenity/social_facility/ambulatory_care":{icon:"maki-wheelchair",geometry:["point","area"],tags:{amenity:"social_facility",social_facility:"ambulatory_care"},reference:{key:"social_facility",value:"ambulatory_care"},name:"Ambulatory Care"},"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:"fas-microphone",fields:["name","studio","address","building_area","website"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","phone","wheelchair"],geometry:["point","area"],terms:["recording","radio","television"],tags:{amenity:"studio"},name:"Studio"},"amenity/studio/audio":{icon:"fas-microphone",geometry:["point","area"],terms:["audio mixing","audio production","audio recording","audio studio"],tags:{amenity:"studio",studio:"audio"},reference:{key:"studio",value:"audio"},name:"Recording Studio"},"amenity/studio/radio":{icon:"fas-microphone",geometry:["point","area"],terms:["am radio","fm radio","radio broadcast","radio studio"],tags:{amenity:"studio",studio:"radio"},reference:{key:"studio",value:"radio"},name:"Radio Station"},"amenity/studio/television":{icon:"fas-video",geometry:["point","area"],terms:["television broadcast","television studio","tv broadcast","tv station","tv studio"],tags:{amenity:"studio",studio:"television"},reference:{key:"studio",value:"television"},name:"Television Station"},"amenity/studio/video":{icon:"fas-video",geometry:["point","area"],terms:["movie production","movie studio","video production","video recording","video studio"],tags:{amenity:"studio",studio:"video"},reference:{key:"studio",value:"video"},name:"Film Studio"},"amenity/taxi":{icon:"fas-taxi",fields:["name","operator","capacity","address"],moreFields:["access_simple","brand","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_fee","charge_fee","booth"],moreFields:["covered","indoor","internet_access","internet_access/fee","internet_access/ssid","level","lit","ref","sms","video_calls","wheelchair"],geometry:["point","vertex"],tags:{amenity:"telephone"},terms:["phone"],name:"Telephone"},"amenity/theatre":{icon:"maki-theatre",fields:["name","operator","address","building_area","website"],moreFields:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","min_age","payment_multi","phone","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","access_simple","gender","changing_table","wheelchair","building_area"],moreFields:["charge_fee","fee","level","opening_hours","operator","payment_multi_fee","toilets/handwashing","toilets/position"],geometry:["point","vertex","area"],terms:["bathroom","restroom","outhouse","privy","head","lavatory","latrine","water closet","WC","W.C."],tags:{amenity:"toilets"},name:"Toilets"},"amenity/toilets/disposal/flush":{icon:"fas-toilet",fields:["toilets/disposal","{amenity/toilets}"],moreFields:["{amenity/toilets}"],geometry:["point","vertex","area"],terms:["bathroom","head","lavatory","privy","restroom","water closet","WC","W.C."],tags:{amenity:"toilets","toilets:disposal":"flush"},reference:{key:"toilets:disposal",value:"flush"},name:"Flush Toilets"},"amenity/toilets/disposal/pitlatrine":{icon:"tnp-2009541",fields:["toilets/disposal","{amenity/toilets}","toilets/handwashing"],moreFields:["{amenity/toilets}"],geometry:["point","vertex","area"],terms:["head","lavatory","long drop","outhouse","pit toilet","privy"],tags:{amenity:"toilets","toilets:disposal":"pitlatrine"},reference:{key:"toilets:disposal",value:"pitlatrine"},name:"Pit Latrine"},"amenity/townhall":{icon:"maki-town-hall",fields:["name","operator","townhall/type","address","building_area"],moreFields:["baby_feeding","email","fax","gnis/feature_id","phone","polling_station","smoking","website","wheelchair"],geometry:["point","area"],terms:["village","city","government","courthouse","municipal"],tags:{amenity:"townhall"},name:"Town Hall"},"amenity/townhall/city":{icon:"maki-town-hall",geometry:["point","area"],terms:["council","courthouse","government","mayor","municipality"],tags:{amenity:"townhall","townhall:type":"city"},name:"City Hall"},"amenity/toy_library":{icon:"fas-chess-knight",fields:["operator","address","building_area","opening_hours"],moreFields:["level","website","wheelchair"],geometry:["point","area"],terms:["game","toy"],tags:{amenity:"toy_library"},name:"Toy Library"},"amenity/university":{icon:"maki-college",fields:["{amenity/college}"],moreFields:["{amenity/college}"],geometry:["area","point"],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:["email","fax","gnis/feature_id","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["car inspection"],tags:{amenity:"vehicle_inspection"},name:"Vehicle Inspection"},"amenity/vending_machine":{icon:"temaki-vending_machine",fields:["vending","ref","operator","payment_multi","currency_multi"],moreFields:["blind","brand","covered","height","indoor","level","manufacturer"],geometry:["point","vertex"],terms:[],tags:{amenity:"vending_machine"},matchScore:0.9,name:"Vending Machine"},"amenity/vending_machine/bottle_return":{icon:"temaki-vending_machine",fields:["vending","operator"],geometry:["point","vertex"],terms:["bottle return"],tags:{amenity:"vending_machine",vending:"bottle_return"},reference:{key:"vending",value:"bottle_return"},name:"Bottle Return Machine"},"amenity/vending_machine/bread":{icon:"temaki-vending_bread",geometry:["point","vertex"],terms:["baguette","bread"],tags:{amenity:"vending_machine",vending:"bread"},reference:{key:"vending",value:"bread"},name:"Bread Vending Machine"},"amenity/vending_machine/cigarettes":{icon:"temaki-vending_cigarettes",moreFields:["{amenity/vending_machine}","min_age"],geometry:["point","vertex"],terms:["cigarette"],tags:{amenity:"vending_machine",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},name:"Cigarette Vending Machine"},"amenity/vending_machine/coffee":{icon:"temaki-vending_hot_drink",geometry:["point","vertex"],terms:["coffee"],tags:{amenity:"vending_machine",vending:"coffee"},reference:{key:"vending",value:"coffee"},name:"Coffee Vending Machine"},"amenity/vending_machine/condoms":{icon:"temaki-vending_love",geometry:["point","vertex"],terms:["condom"],tags:{amenity:"vending_machine",vending:"condoms"},reference:{key:"vending",value:"condoms"},name:"Condom Vending Machine"},"amenity/vending_machine/drinks":{icon:"temaki-vending_cold_drink",fields:["vending","drink_multi","{amenity/vending_machine}"],geometry:["point","vertex"],terms:["drink","soda","beverage","juice","pop"],tags:{amenity:"vending_machine",vending:"drinks"},reference:{key:"vending",value:"drinks"},name:"Drink Vending Machine"},"amenity/vending_machine/eggs":{icon:"temaki-vending_eggs",geometry:["point","vertex"],terms:["egg"],tags:{amenity:"vending_machine",vending:"eggs"},reference:{key:"vending",value:"eggs"},name:"Egg Vending Machine"},"amenity/vending_machine/electronics":{icon:"temaki-vending_machine",geometry:["point","vertex"],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_flat_coin",geometry:["point","vertex"],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_pet_waste",geometry:["point","vertex"],terms:["excrement bags","poop","waste","dog","animal"],tags:{amenity:"vending_machine",vending:"excrement_bags"},reference:{key:"vending",value:"excrement_bags"},name:"Excrement Bag Dispenser"},"amenity/vending_machine/feminine_hygiene":{icon:"temaki-vending_venus",geometry:["point","vertex"],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","vertex"],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","vertex"],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_ice_cream",geometry:["point","vertex"],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/ice_cubes":{icon:"temaki-vending_ice",geometry:["point","vertex"],terms:["cubes","ice"],tags:{amenity:"vending_machine",vending:"ice_cubes"},reference:{key:"vending",value:"ice_cubes"},name:"Ice Vending Machine"},"amenity/vending_machine/newspapers":{icon:"temaki-vending_newspaper",fields:["vending","ref","operator","fee","payment_multi_fee","charge_fee","currency_multi"],geometry:["point","vertex"],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_lockers",fields:["vending","operator","payment_multi","currency_multi"],geometry:["point","vertex"],terms:["mail","packstation","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_lockers",fields:["vending","operator"],geometry:["point","vertex"],terms:["amazon","locker","mail","packstation","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_tickets",geometry:["point","vertex"],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_tickets",geometry:["point","vertex"],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_stamps",geometry:["point","vertex"],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","vertex"],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:["charge_fee","email","fax","fee","gnis/feature_id","level","payment_multi_fee","phone","website","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:["operator","waste","collection_times","material","colour"],moreFields:["covered","indoor","manufacturer"],geometry:["point","vertex"],tags:{amenity:"waste_basket"},terms:["bin","garbage","rubbish","litter","trash"],name:"Waste Basket"},"amenity/waste_disposal":{icon:"fas-dumpster",fields:["operator","waste","collection_times","access_simple"],moreFields:["brand","colour","height","manufacturer","material"],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","operator/type","waste","address","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","phone","website","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","access_simple","fee","payment_multi_fee","charge_fee","opening_hours"],moreFields:["covered","drinking_water","lit","ref"],geometry:["point","vertex","area"],tags:{amenity:"water_point"},terms:["water faucet","water point","water tap","water source","water spigot"],name:"RV Drinking Water"},"amenity/watering_place":{icon:"maki-drinking-water",fields:["operator","fee","payment_multi_fee","charge_fee","opening_hours"],geometry:["point","vertex","area"],tags:{amenity:"watering_place"},name:"Animal Watering Place"},"amenity/weighbridge":{icon:"fas-weight",fields:["ref","operator","access_simple","maxweight"],moreFields:["address","colour","lit","manufacturer","material","wheelchair"],geometry:["point","vertex"],terms:["weigh station","weighbridge"],tags:{amenity:"weighbridge"},name:"Truck Scale"},area:{fields:["name"],geometry:["area"],tags:{area:"yes"},terms:["polygon"],name:"Area",matchScore:0.1},"area/highway":{fields:["name","area/highway","surface"],geometry:["area"],terms:["area:highway","edge of pavement","highway area","highway shape","pavement","road shape","street area"],tags:{"area:highway":"*"},name:"Road Area"},"attraction/amusement_ride":{icon:"maki-amusement-park",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","carnival ride"],tags:{attraction:"amusement_ride"},name:"Amusement Ride"},"attraction/animal":{icon:"maki-zoo",fields:["name","operator","species/wikidata"],geometry:["point","area"],terms:["amphibian","animal park","aquarium","bear","bird","fish","insect","lion","mammal","monkey","penguin","reptile","safari","theme park","tiger","zoo"],tags:{attraction:"animal"},name:"Animal Enclosure"},"attraction/big_wheel":{icon:"maki-amusement-park",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point"],terms:["ferris wheel","theme park","amusement ride"],tags:{attraction:"big_wheel"},name:"Big Wheel"},"attraction/bumper_car":{icon:"fas-car-crash",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","dodgem cars","autoscooter"],tags:{attraction:"bumper_car"},name:"Bumper Cars"},"attraction/bungee_jumping":{icon:"maki-pitch",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],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"],moreFields:["{attraction}","max_age","min_age"],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"],moreFields:["{attraction}","max_age","min_age"],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"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride","gondola","tower","big drop"],tags:{attraction:"drop_tower"},name:"Drop Tower Ride"},"attraction/kiddie_ride":{icon:"temaki-amusement_park",fields:["{attraction}","fee","payment_multi_fee","charge_fee"],moreFields:["{attraction}","max_age","min_age"],geometry:["point"],tags:{attraction:"kiddie_ride"},name:"Kiddie Ride"},"attraction/log_flume":{icon:"maki-ferry",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride","flume"],tags:{attraction:"log_flume"},name:"Log Flume"},"attraction/maze":{icon:"maki-amusement-park",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride","labyrinth"],tags:{attraction:"maze"},name:"Maze"},"attraction/pirate_ship":{icon:"maki-danger",moreFields:["{attraction}","max_age","min_age"],geometry:["point"],terms:["theme park","carnival ride","amusement ride"],tags:{attraction:"pirate_ship"},name:"Pirate Ship Ride"},"attraction/river_rafting":{icon:"maki-ferry",moreFields:["{attraction}","max_age","min_age"],geometry:["point","line"],terms:["theme park","aquatic park","water park","rafting simulator","river rafting ride","river rapids ride"],tags:{attraction:"river_rafting"},name:"River Rapids Ride"},"attraction/roller_coaster":{icon:"temaki-roller_coaster",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride"],tags:{attraction:"roller_coaster"},name:"Roller Coaster"},"attraction/summer_toboggan":{icon:"temaki-sledding",moreFields:["{attraction}","max_age","min_age"],geometry:["line"],terms:["alpine slide","mountain coaster"],tags:{attraction:"summer_toboggan"},name:"Summer Toboggan"},"attraction/swing_carousel":{icon:"temaki-tower",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride","carousel","tower","carousel tower"],tags:{attraction:"swing_carousel"},name:"Swing Carousel"},"attraction/train":{icon:"maki-rail",fields:["{attraction}","fee","charge_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:"temaki-slide",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],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"],moreFields:["level"],name:"Barrier",matchScore:0.4},"barrier/entrance":{icon:"maki-entrance-alt1",geometry:["vertex"],tags:{barrier:"entrance"},name:"Entrance",searchable:false},"barrier/block":{icon:"fas-cube",fields:["access","material"],geometry:["point","vertex"],tags:{barrier:"block"},name:"Block"},"barrier/bollard_line":{icon:"temaki-silo",fields:["access","bollard","height","material","colour"],geometry:["line"],tags:{barrier:"bollard"},name:"Bollard Row"},"barrier/bollard":{icon:"temaki-silo",fields:["access","bollard","height","width","material","colour"],geometry:["point","vertex"],tags:{barrier:"bollard"},name:"Bollard"},"barrier/border_control":{icon:"maki-roadblock",fields:["access","building_area"],moreFields:["address","email","fax","phone","website"],geometry:["vertex","area"],tags:{barrier:"border_control"},name:"Border Control"},"barrier/cattle_grid":{icon:"temaki-cattle_grid",geometry:["vertex"],tags:{barrier:"cattle_grid"},terms:["cattle guard","cattle stop","livestock grid","stock gate","stock grid","stock stop","Texas gate","vehicle pass"],name:"Cattle Grid"},"barrier/chain":{icon:"temaki-rope_fence",fields:["access"],geometry:["vertex","line"],tags:{barrier:"chain"},name:"Chain"},"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"},terms:["bicycle barrier","bicycling barrier","bike gates","cycling 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:"temaki-gate",fields:["access","wheelchair","opening_hours","height","material"],moreFields:["colour","manufacturer","operator","ref"],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/height_restrictor":{icon:"temaki-height_restrictor",fields:["maxheight"],geometry:["vertex"],tags:{barrier:"height_restrictor"},name:"Height Restrictor"},"barrier/kerb":{icon:"temaki-kerb-raised",fields:["kerb","tactile_paving","wheelchair"],moreFields:["material"],geometry:["vertex","line"],tags:{barrier:"kerb"},matchScore:0.5,name:"Curb"},"barrier/kerb/flush":{icon:"temaki-kerb-flush",fields:["kerb","{barrier/kerb}"],geometry:["vertex","line"],tags:{kerb:"flush"},addTags:{barrier:"kerb",kerb:"flush"},reference:{key:"kerb",value:"flush"},terms:["even curb","level curb","tactile curb"],matchScore:0.55,name:"Flush Curb"},"barrier/kerb/lowered":{icon:"temaki-kerb-lowered",fields:["kerb","{barrier/kerb}","kerb/height"],geometry:["vertex","line"],tags:{kerb:"lowered"},addTags:{barrier:"kerb",kerb:"lowered"},reference:{key:"kerb",value:"lowered"},terms:["curb cut","curb ramp","kerb ramp","dropped kerb","pram ramp"],matchScore:0.55,name:"Lowered Curb"},"barrier/kerb/raised":{icon:"temaki-kerb-raised",fields:["kerb","{barrier/kerb}","kerb/height"],geometry:["vertex","line"],tags:{kerb:"raised"},addTags:{barrier:"kerb",kerb:"raised"},reference:{key:"kerb",value:"raised"},terms:[],matchScore:0.55,name:"Raised Curb"},"barrier/kerb/rolled":{icon:"temaki-kerb-rolled",fields:["kerb","{barrier/kerb}","kerb/height"],geometry:["vertex","line"],tags:{kerb:"rolled"},addTags:{barrier:"kerb",kerb:"rolled"},reference:{key:"kerb",value:"rolled"},terms:["gutter"],matchScore:0.55,name:"Rolled Curb"},"barrier/kissing_gate":{icon:"temaki-gate",fields:["access"],geometry:["vertex"],tags:{barrier:"kissing_gate"},name:"Kissing Gate"},"barrier/lift_gate":{icon:"temaki-lift_gate",fields:["access","opening_hours"],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/sally_port":{icon:"fas-dungeon",geometry:["vertex"],tags:{barrier:"sally_port"},terms:["Postern","castle side gate"],name:"Sally Port"},"barrier/stile":{icon:"maki-roadblock",fields:["access","stile","material"],geometry:["vertex"],tags:{barrier:"stile"},name:"Stile"},"barrier/swing_gate":{icon:"temaki-gate",fields:["{barrier/gate}"],moreFields:["{barrier/gate}"],geometry:["vertex"],tags:{barrier:"swing_gate"},name:"Swing Gate"},"barrier/toll_booth":{icon:"maki-roadblock",fields:["access","building_area","payment_multi","currency_multi"],moreFields:["address","email","fax","opening_hours","phone","website"],geometry:["vertex","area"],tags:{barrier:"toll_booth"},name:"Toll Booth"},"barrier/turnstile":{icon:"temaki-turnstile",fields:["access"],geometry:["vertex"],terms:["baffle gate","turnstyle"],tags:{barrier:"turnstile"},name:"Turnstile"},"barrier/wall":{icon:"temaki-wall",fields:["wall","height","material"],geometry:["line","area"],tags:{barrier:"wall"},name:"Wall",matchScore:0.25},"barrier/wall/noise_barrier":{icon:"temaki-wall",geometry:["line","area"],tags:{barrier:"wall",wall:"noise_barrier"},terms:["acoustical barrier","noise wall","noisewall","sound barrier","sound berm","sound wall","soundberm","soundwall"],name:"Noise Barrier",matchScore:0.27},"boundary/administrative":{fields:["name","admin_level"],geometry:["line"],tags:{boundary:"administrative"},name:"Administrative Boundary",matchScore:0.5},"bridge/support":{icon:"fas-archway",fields:["bridge/support","height","layer","material"],moreFields:["colour","seamark/type"],geometry:["point","vertex","area"],tags:{"bridge:support":"*"},name:"Bridge Support"},"bridge/support/pier":{icon:"fas-archway",fields:["bridge/support","{bridge/support}"],geometry:["point","vertex","area"],tags:{"bridge:support":"pier"},name:"Bridge Pier"},building_part:{icon:"maki-building",fields:["building/levels","height","building/material","roof/colour"],moreFields:["layer"],geometry:["area"],tags:{"building:part":"*"},matchScore:0.5,terms:["roof","simple 3D buildings"],name:"Building Part"},building:{icon:"maki-home",fields:["name","building","building/levels","height","address"],moreFields:["architect","building/levels/underground","building/material","gnis/feature_id","layer","not/name","operator","roof/colour","smoking","wheelchair"],geometry:["area"],tags:{building:"*"},matchScore:0.6,terms:[],name:"Building"},"building/bunker":{icon:"temaki-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:"temaki-barn",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:"temaki-cabin",geometry:["area"],tags:{building:"cabin"},matchScore:0.5,name:"Cabin"},"building/carport":{icon:"fas-warehouse",fields:["{building}","capacity"],geometry:["area"],tags:{building:"carport"},matchScore:0.5,terms:["covered parking space","garage","car","porch"],name:"Carport"},"building/cathedral":{icon:"fas-church",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:"fas-church",geometry:["area"],tags:{building:"church"},matchScore:0.5,name:"Church Building"},"building/civic":{icon:"maki-building",fields:["{building}","smoking"],moreFields:["{building}","polling_station"],geometry:["area"],tags:{building:"civic"},matchScore:0.5,name:"Civic Building"},"building/college":{icon:"fas-school",moreFields:["{building}","polling_station"],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:["{building}","capacity"],geometry:["area"],tags:{building:"garage"},matchScore:0.5,name:"Garage"},"building/garages":{icon:"fas-warehouse",fields:["{building}","capacity"],geometry:["area"],tags:{building:"garages"},matchScore:0.5,name:"Garages"},"building/grandstand":{icon:"maki-building",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/hangar":{icon:"fas-warehouse",fields:["name"],geometry:["area"],tags:{building:"hangar"},matchScore:0.5,name:"Hangar Building"},"building/hospital":{icon:"fas-hospital-alt",geometry:["area"],tags:{building:"hospital"},matchScore:0.5,name:"Hospital Building"},"building/hotel":{icon:"fas-hotel",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/houseboat":{icon:"temaki-houseboat",geometry:["area"],tags:{building:"houseboat"},terms:["home","family","residence","dwelling"],matchScore:0.5,name:"Houseboat"},"building/hut":{icon:"maki-home",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:"fas-school",geometry:["area"],terms:["kindergarden","pre-school"],tags:{building:"kindergarten"},matchScore:0.5,name:"Preschool / Kindergarten Building"},"building/mosque":{icon:"fas-mosque",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"],moreFields:["{building}","polling_station"],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:["{building}","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:"fas-school",moreFields:["{building}","polling_station"],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-building",geometry:["area"],tags:{building:"service"},matchScore:0.5,name:"Service Building"},"building/shed":{icon:"fas-warehouse",fields:["{building}","lockable"],geometry:["area"],tags:{building:"shed"},matchScore:0.5,name:"Shed"},"building/stable":{icon:"temaki-horse_shelter",geometry:["area"],tags:{building:"stable"},terms:["horse shelter"],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:"temaki-row_houses",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:"fas-school",moreFields:["{building}","polling_station"],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"},club:{icon:"fas-handshake",fields:["name","club","operator","address","building_area","opening_hours"],moreFields:["access_simple","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access","internet_access/fee","internet_access/ssid","level","max_age","min_age","phone","website","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:["air_conditioning","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access","internet_access/fee","internet_access/ssid","level","phone","product","ref/vatin","website","wheelchair"],geometry:["point","area"],tags:{craft:"*"},terms:[],name:"Craft"},"craft/locksmith":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"locksmith"},reference:{key:"shop",value:"locksmith"},name:"Locksmith",searchable:false},"craft/tailor":{icon:"temaki-needle_and_spool",geometry:["point","area"],tags:{craft:"tailor"},reference:{key:"shop",value:"tailor"},name:"Tailor",searchable:false},"craft/agricultural_engines":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"agricultural_engines"},name:"Argricultural Engines Mechanic"},"craft/basket_maker":{icon:"temaki-vase",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-anvil_and_hammer",geometry:["point","area"],tags:{craft:"blacksmith"},name:"Blacksmith"},"craft/boatbuilder":{icon:"temaki-boat_repair",geometry:["point","area"],tags:{craft:"boatbuilder"},matchScore:0.6,name:"Boat Builder"},"craft/bookbinder":{icon:"maki-library",geometry:["point","area"],terms:["book repair"],tags:{craft:"bookbinder"},name:"Bookbinder"},"craft/brewery":{icon:"temaki-storage_fermenter",fields:["{craft}","product"],moreFields:["{craft}","min_age"],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/cleaning":{icon:"temaki-vacuum",geometry:["point","area"],tags:{craft:"cleaning"},name:"Cleaning Service"},"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_fermenter",fields:["{craft}","product"],moreFields:["{craft}","min_age"],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:"temaki-dress",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/floorer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"floorer"},name:"Floorer"},"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:"temaki-vase",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/joiner":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"joiner"},terms:["furniture"],name:"Joiner"},"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/parquet_layer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"parquet_layer"},name:"Parquet Layer"},"craft/photographer":{icon:"maki-attraction",geometry:["point","area"],tags:{craft:"photographer"},name:"Photographer"},"craft/photographic_laboratory":{icon:"fas-film",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:"temaki-vase",geometry:["point","area"],terms:["ceramic","kiln","pot","vase"],tags:{craft:"pottery"},name:"Pottery Maker"},"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/signmaker":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"signmaker"},name:"Signmaker"},"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",moreFields:["{craft}","min_age"],geometry:["point","area"],tags:{craft:"winery"},name:"Winery"},"cycleway/asl":{icon:"maki-bicycle",fields:["ref","direction_vertex","width"],geometry:["vertex"],tags:{cycleway:"asl"},terms:["advanced stop box","asl","bicycle box","bike box","bikebox","cycle box","cycle stop marking"],name:"Advanced Stop Line"},"demolished/building":{icon:"fas-house-damage",fields:["name","address"],geometry:["area"],tags:{"demolished:building":"*"},name:"Recently Demolished Building",searchable:false},"disused/railway":{fields:["disused/railway"],geometry:["point","vertex","line","area"],tags:{"disused:railway":"*"},matchScore:0.05,searchable:false,name:"Disused Railway Feature"},"emergency/designated":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"designated"},name:"Emergency Access Designated",searchable:false,matchScore:0.01},"emergency/destination":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"destination"},name:"Emergency Access Destination",searchable:false,matchScore:0.01},"emergency/no":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"no"},name:"Emergency Access No",searchable:false,matchScore:0.01},"emergency/official":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"official"},name:"Emergency Access Official",searchable:false,matchScore:0.01},"emergency/private":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"private"},name:"Emergency Access Private",searchable:false,matchScore:0.01},"emergency/yes":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"yes"},name:"Emergency Access Yes",searchable:false,matchScore:0.01},"emergency/ambulance_station":{icon:"fas-ambulance",fields:["name","operator","building_area","address"],moreFields:["email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["point","area"],terms:["EMS","EMT","rescue"],tags:{emergency:"ambulance_station"},name:"Ambulance Station"},"emergency/defibrillator":{icon:"maki-defibrillator",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],terms:["AED"],tags:{emergency:"defibrillator"},name:"Defibrillator"},"emergency/fire_alarm":{icon:"fas-bell",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"fire_alarm_box"},name:"Fire Alarm Call Box"},"emergency/fire_extinguisher":{icon:"fas-fire-extinguisher",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"fire_extinguisher"},name:"Fire Extinguisher"},"emergency/fire_hose":{icon:"fas-tape",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"fire_hose"},name:"Fire Hose"},"emergency/fire_hydrant":{icon:"temaki-fire_hydrant",fields:["ref","fire_hydrant/type","colour","water_source","couplings"],moreFields:["fire_hydrant/diameter","fire_hydrant/pressure","level","survey/date","water_volume"],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"],moreFields:["level"],geometry:["point","vertex"],terms:["bandage","first aid","med","med kit","medic*","medkit"],tags:{emergency:"first_aid_kit"},name:"First Aid Kit"},"emergency/landing_site":{icon:"maki-heliport",fields:["name","operator","surface"],geometry:["point","area"],terms:["helicopter","helipad","heliport"],tags:{emergency:"landing_site"},name:"Emergency Landing Site"},"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"],moreFields:["level"],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",fields:["ref","entrance","door","access_simple","wheelchair","level","address"],geometry:["vertex"],tags:{entrance:"*"},terms:["entrance","exit","door"],matchScore:0.8,name:"Entrance / Exit"},"entrance/emergency":{icon:"maki-entrance-alt1",fields:["ref","door","access_simple","level"],geometry:["vertex"],tags:{entrance:"emergency"},terms:["fire exit","door"],matchScore:0.8,name:"Emergency Exit"},ford:{icon:"temaki-pedestrian",fields:["name","access","seasonal"],moreFields:["gnis/feature_id"],geometry:["vertex"],tags:{ford:"yes"},name:"Ford"},"golf/bunker":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"bunker"},addTags:{golf:"bunker",natural:"sand"},terms:["hazard","bunker"],name:"Sand Trap"},"golf/cartpath":{icon:"temaki-golf_cart",fields:["{golf/path}","maxspeed"],geometry:["line"],tags:{golf:"cartpath"},addTags:{golf:"cartpath",golf_cart:"designated",highway:"service"},name:"Golf Cartpath"},"golf/driving_range":{icon:"maki-golf",fields:["name","capacity"],geometry:["area"],tags:{golf:"driving_range"},addTags:{golf:"driving_range",landuse:"grass"},name:"Driving Range"},"golf/fairway":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"fairway"},addTags:{golf:"fairway",landuse:"grass"},name:"Fairway"},"golf/green":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"green"},addTags:{golf:"green",landuse:"grass"},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"},addTags:{golf:"lateral_water_hazard",natural:"water"},name:"Lateral Water Hazard"},"golf/path":{icon:"maki-golf",fields:["name","surface","width","structure","incline"],geometry:["line"],tags:{golf:"path"},addTags:{golf:"path",highway:"path",foot:"designated"},name:"Golf Walking Path"},"golf/rough":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"rough"},addTags:{golf:"rough",landuse:"grass"},name:"Rough"},"golf/tee":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"tee"},addTags:{golf:"tee",landuse:"grass"},terms:["teeing ground"],name:"Tee Box"},"golf/water_hazard":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"water_hazard"},addTags:{golf:"water_hazard",natural:"water"},name:"Water Hazard"},healthcare:{icon:"maki-hospital",fields:["name","healthcare","operator","healthcare/speciality","address","building_area"],moreFields:["brand","building/levels_building","email","fax","gnis/feature_id","height_building","level","opening_hours","payment_multi","phone","website","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:"fas-baby",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/counselling":{icon:"fas-comments",geometry:["point","area"],tags:{healthcare:"counselling"},name:"Counselling Center"},"healthcare/hospice":{icon:"maki-hospital",geometry:["point","area"],terms:["terminal","illness"],tags:{healthcare:"hospice"},name:"Hospice"},"healthcare/laboratory":{icon:"fas-vial",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:"fas-baby",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:"fas-eye",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:"fas-comment",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"},matchScore:0.95,name:"Bus Stop",searchable:false,replacement:"public_transport/platform/bus_point"},"highway/crossing":{fields:["crossing"],geometry:["vertex"],tags:{highway:"crossing"},searchable:false,matchScore:0.95,name:"Crossing"},"highway/bridleway":{fields:["name","surface","width","structure","access","incline","horse_scale"],moreFields:["covered","dog","lit","maxweight_bridge","smoothness","stroller","wheelchair"],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"],moreFields:["trolley_wire","width"],geometry:["line"],tags:{highway:"bus_guideway"},addTags:{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_walled",fields:["name","width","level","access_simple","wheelchair"],moreFields:["covered","indoor","maxheight","stroller"],geometry:["line"],tags:{highway:"corridor"},addTags:{highway:"corridor",indoor:"yes"},terms:["gallery","hall","hallway","indoor","passage","passageway"],name:"Indoor Corridor"},"highway/crossing/zebra-raised":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},name:"Marked Crosswalk (Raised)",searchable:false},"highway/crossing/zebra":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra"},reference:{key:"highway",value:"crossing"},name:"Marked Crosswalk",searchable:false},"highway/crossing/marked-raised":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"marked",traffic_calming:"table"},addTags:{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_crosswalk",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"marked"},addTags:{highway:"crossing",crossing:"marked"},reference:{key:"highway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk"},"highway/crossing/unmarked-raised":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"unmarked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["flat top","hump","speed","slow"],name:"Unmarked Crossing (Raised)"},"highway/crossing/unmarked":{icon:"temaki-pedestrian",fields:["crossing","tactile_paving","crossing/island"],geometry:["vertex"],tags:{highway:"crossing",crossing:"unmarked"},addTags:{highway:"crossing",crossing:"unmarked"},reference:{key:"crossing",value:"unmarked"},terms:[],name:"Unmarked Crossing"},"highway/cycleway":{icon:"fas-biking",fields:["name","oneway","surface","width","structure","access","incline"],moreFields:["covered","dog","lit","maxspeed","maxweight_bridge","not/name","smoothness","stroller","wheelchair"],geometry:["line"],tags:{highway:"cycleway"},terms:["bicyle path","bike path","cycling path"],name:"Cycle Path"},"highway/cycleway/crossing":{icon:"temaki-cyclist_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{cycleway:"crossing"},addTags:{highway:"cycleway",cycleway:"crossing"},reference:{key:"cycleway",value:"crossing"},searchable:false,matchScore:0.95,name:"Cycle Crossing"},"highway/cycleway/bicycle_foot":{notCountryCodes:["fr","lt","pl"],icon:"temaki-pedestrian_and_cyclist",geometry:["line"],tags:{highway:"cycleway",foot:"designated"},addTags:{highway:"cycleway",foot:"designated",bicycle:"designated"},terms:["bicycle and foot path","bike and pedestrian path","green way","greenway","mixed-use trail","multi-use trail","segregated trail","rail trail"],fields:["name","segregated","oneway","surface","width","structure","access","incline"],matchScore:0.9,name:"Cycle & Foot Path"},"highway/cycleway/crossing/marked":{icon:"temaki-cyclist_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{cycleway:"crossing",crossing:"marked"},addTags:{highway:"cycleway",cycleway:"crossing",crossing:"marked"},reference:{key:"cycleway",value:"crossing"},terms:["cycle crosswalk","cycle path crossing","cycleway crossing","bicycle crossing","bike crossing"],matchScore:0.95,name:"Marked Cycle Crossing"},"highway/cycleway/crossing/unmarked":{icon:"fas-biking",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{cycleway:"crossing",crossing:"unmarked"},addTags:{highway:"cycleway",cycleway:"crossing",crossing:"unmarked"},reference:{key:"cycleway",value:"crossing"},terms:["cycle path crossing","cycleway crossing","bicycle crossing","bike crossing"],matchScore:0.95,name:"Unmarked Cycle Crossing"},"highway/elevator":{icon:"temaki-elevator",fields:["ref","level_semi","access_simple","wheelchair","maxweight"],moreFields:["maxheight","opening_hours"],geometry:["vertex"],tags:{highway:"elevator"},terms:["lift"],name:"Elevator"},"highway/emergency_bay":{icon:"maki-car",geometry:["vertex"],tags:{highway:"emergency_bay"},terms:["Highway Emergency Bay"],name:"Emergency Stopping Place"},"highway/footway":{icon:"temaki-pedestrian",fields:["name","surface","width","structure","access","incline"],moreFields:["covered","dog","lit","maxweight_bridge","not/name","smoothness","stroller","tactile_paving","wheelchair"],geometry:["line"],terms:["hike","hiking","promenade","trackway","trail","walk"],tags:{highway:"footway"},name:"Foot Path"},"highway/footway/crossing":{fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{footway:"crossing"},addTags:{highway:"footway",footway:"crossing"},reference:{key:"footway",value:"crossing"},searchable:false,name:"Pedestrian Crossing"},"highway/footway/zebra-raised":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},name:"Marked Crosswalk (Raised)",searchable:false},"highway/footway/zebra":{icon:"temaki-pedestrian_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra"},reference:{key:"footway",value:"crossing"},name:"Marked Crosswalk",searchable:false},"highway/footway/access_aisle":{icon:"temaki-striped_way",fields:["access_aisle","width","surface","tactile_paving","access","wheelchair"],moreFields:["covered","dog","incline","lit","maxweight_bridge","name","ref","smoothness","stroller","structure"],geometry:["line"],terms:["accessible van loading zone","disabled parking access zone","handicap parking access zone","parking lot aisle","striped zone","tow zone","tow-away zone","towaway zone","wheelchair aisle"],tags:{highway:"footway",footway:"access_aisle"},reference:{key:"footway",value:"access_aisle"},name:"Access Aisle"},"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_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{footway:"crossing",crossing:"marked",traffic_calming:"table"},addTags:{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_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{footway:"crossing",crossing:"marked"},addTags:{highway:"footway",footway:"crossing",crossing:"marked"},reference:{key:"footway",value:"crossing"},terms:["marked foot path crossing","marked crossing","marked pedestrian crosswalk","zebra crossing"],name:"Marked Crosswalk"},"highway/footway/sidewalk":{icon:"temaki-pedestrian",geometry:["line"],tags:{footway:"sidewalk"},addTags:{highway:"footway",footway:"sidewalk"},reference:{key:"footway",value:"sidewalk"},terms:["pavement","sidepath"],name:"Sidewalk"},"highway/footway/unmarked-raised":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{footway:"crossing",crossing:"unmarked",traffic_calming:"table"},addTags:{highway:"footway",footway:"crossing",crossing:"unmarked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["flat top","hump","speed","slow"],name:"Unmarked Crossing (Raised)"},"highway/footway/unmarked":{icon:"temaki-pedestrian",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{footway:"crossing",crossing:"unmarked"},addTags:{highway:"footway",footway:"crossing",crossing:"unmarked"},reference:{key:"footway",value:"crossing"},terms:["unmarked foot path crossing","unmarked crosswalk","unmarked pedestrian crossing"],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:["covered","cycleway","flood_prone","junction_line","lit","maxheight","maxweight_bridge","oneway/bicycle","smoothness","trolley_wire","width"],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:["mile marker","mile post","mile stone","mileage marker","milemarker","milepost"],name:"Highway Milestone"},"highway/mini_roundabout":{icon:"maki-circle-stroked",geometry:["vertex"],terms:["traffic circle"],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:["charge_toll","covered","destination/symbol_oneway","incline","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","name","ref_road_number","smoothness","toll","width"],geometry:["line"],tags:{highway:"motorway_link"},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:["charge_toll","covered","incline","junction_line","lit","maxheight","maxweight_bridge","minspeed","not/name","smoothness","toll","width"],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:["covered","dog","gnis/feature_id","horse_scale","informal","lit","maxweight_bridge","mtb/scale","mtb/scale/imba","mtb/scale/uphill","not/name","ref","sac_scale","smoothness","stroller","trail_visibility","wheelchair"],geometry:["line"],terms:["hike","hiking","trackway","trail","walk"],tags:{highway:"path"},name:"Path"},"highway/path/informal":{icon:"iD-other-line",fields:["surface","width","access","trail_visibility","smoothness","incline"],moreFields:["covered","dog","horse_scale","informal","lit","maxweight_bridge","mtb/scale","mtb/scale/imba","mtb/scale/uphill","sac_scale","stroller","structure","wheelchair"],geometry:["line"],terms:["bootleg trail","cow path","desire line","desire path","desireline","desirepath","elephant path","game trail","goat track","herd path","pig trail","shortcut","social trail","use trail"],tags:{highway:"path",informal:"yes"},reference:{key:"informal"},name:"Informal 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","incline","maxweight_bridge","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:["charge_toll","covered","cycleway","destination/symbol_oneway","flood_prone","incline","junction_line","junction/ref_oneway","lit","maxheight","maxspeed/advisory","maxweight_bridge","name","oneway/bicycle","ref_road_number","smoothness","toll","trolley_wire","width"],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:["charge_toll","covered","cycleway","flood_prone","incline","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","not/name","oneway/bicycle","smoothness","toll","trolley_wire","width"],geometry:["line"],tags:{highway:"primary"},terms:["road","street"],name:"Primary Road"},"highway/raceway":{icon:"fas-flag-checkered",fields:["name","oneway","surface","sport_racing_motor","lit","width","lanes","structure"],geometry:["line","area"],tags:{highway:"raceway"},addTags:{highway:"raceway",sport:"motor"},terms:["auto*","formula one","kart","motocross","nascar","race*","track"],name:"Motorsport Racetrack"},"highway/raceway/karting":{icon:"fas-flag-checkered",geometry:["line","area"],tags:{highway:"raceway",sport:"karting"},terms:["carting","go carts","go karts","go-karts","gokarts","kart racing","karting track","motorsports","shifter karts","superkarts"],name:"Karting Racetrack"},"highway/raceway/motocross":{icon:"fas-motorcycle",geometry:["line","area"],tags:{highway:"raceway",sport:"motocross"},terms:["off-road racing","offroad moto racing","motocross circuit","motorcycle track","motorsports"],name:"Motocross Racetrack"},"highway/residential":{icon:"iD-highway-residential",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","flood_prone","incline","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","not/name","oneway/bicycle","smoothness","trolley_wire","width"],geometry:["line"],tags:{highway:"residential"},terms:["road","street"],name:"Residential Road"},"highway/rest_area":{icon:"maki-car",fields:["name","operator","opening_hours"],moreFields:["address","email","fax","phone","website","wheelchair"],geometry:["point","vertex","area"],tags:{highway:"rest_area"},terms:["rest stop"],name:"Rest Area"},"highway/road":{icon:"iD-other-line",fields:["highway","{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","covered","structure","access"],moreFields:["flood_prone","incline","lanes","lit","maxheight","maxspeed/advisory","maxweight_bridge","oneway/bicycle","trolley_wire","width"],geometry:["line"],tags:{highway:"service"},terms:["road","street"],matchScore:0.9,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",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:"temaki-security_camera",geometry:["point","vertex"],fields:["direction","ref","maxspeed"],tags:{highway:"speed_camera"},terms:[],name:"Speed Camera"},"highway/steps":{icon:"iD-highway-steps",fields:["incline_steps","access_simple","handrail","step_count","tactile_paving","surface","width"],moreFields:["covered","dog","indoor","level_semi","lit","name","ref","stroller","wheelchair"],geometry:["line"],tags:{highway:"steps"},terms:["stairs","staircase","stairway"],name:"Steps"},"highway/steps/conveying":{icon:"maki-entrance",fields:["incline_steps","conveying","access_simple","indoor","level_semi","width"],moreFields:["{highway/steps}","handrail","step_count","surface"],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-street_lamp_arm",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:"fas-truck-monster",fields:["name","tracktype","surface","width","structure","access","incline","smoothness"],moreFields:["covered","flood_prone","horse_scale","maxweight_bridge","mtb/scale","mtb/scale/imba","mtb/scale/uphill","stroller","wheelchair"],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":{icon:"maki-circle-stroked",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/trailhead":{icon:"fas-hiking",fields:["name","operator","elevation","address","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["gnis/feature_id","opening_hours"],geometry:["vertex"],tags:{highway:"trailhead"},terms:["hiking","mile zero","mountain biking","mountaineering","trail endpoint","trail start","staging area","trekking"],name:"Trailhead"},"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:["charge_toll","covered","incline","junction_line","lit","maxheight","maxweight_bridge","minspeed","not/name","smoothness","toll","width"],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"],moreFields:["gnis/feature_id"],geometry:["point","vertex","line","area"],tags:{historic:"*"},matchScore:0.5,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:["{historic}","material"],geometry:["point","vertex"],tags:{historic:"boundary_stone"},name:"Boundary Stone"},"historic/building":{icon:"maki-home",fields:["{building}","start_date"],moreFields:["{building}","access_simple"],geometry:["area"],tags:{historic:"building"},addTags:{historic:"building",building:"*"},reference:{key:"historic",value:"building"},matchScore:0.5,name:"Historic Building"},"historic/castle":{icon:"maki-castle",fields:["name","castle_type","building_area","historic/civilization","access_simple","start_date"],geometry:["point","area"],tags:{historic:"castle"},name:"Castle"},"historic/castle/fortress":{icon:"maki-castle",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],reference:{key:"castle_type",value:"fortress"},tags:{historic:"castle",castle_type:"fortress"},terms:["citadel","military"],name:"Historic Fortress"},"historic/castle/palace":{icon:"fas-crown",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],reference:{key:"castle_type",value:"palace"},tags:{historic:"castle",castle_type:"palace"},terms:["Royal Residence","royal","king","queen"],name:"Palace"},"historic/castle/stately":{icon:"fas-crown",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],reference:{key:"castle_type",value:"stately"},tags:{historic:"castle",castle_type:"stately"},terms:["Historic Country House","Stately Home","nobility","gentry","representative"],name:"Château"},"historic/city_gate":{icon:"maki-castle",fields:["name","building_area","historic/civilization","start_date"],geometry:["point","area"],tags:{historic:"city_gate"},terms:["Town Gate"],name:"City Gate"},"historic/fort":{icon:"maki-castle",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],tags:{historic:"fort"},terms:["military"],name:"Historic Fort"},"historic/manor":{icon:"maki-castle",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],tags:{historic:"manor"},terms:["Mansion","gentry","nobility","estate"],name:"Manor House"},"historic/memorial":{icon:"maki-monument",fields:["name","memorial","inscription","material"],moreFields:["{historic}","website"],geometry:["point","vertex","area"],terms:["dedicatory","epitaph","remember","remembrance","memory","monument","stolperstein"],tags:{historic:"memorial"},name:"Memorial"},"historic/memorial/plaque":{icon:"temaki-plaque",fields:["{historic/memorial}","direction"],geometry:["point","vertex"],terms:["dedicatory","epitaph","historical marker","remember","remembrance","memory"],tags:{historic:"memorial",memorial:"plaque"},reference:{key:"memorial",value:"plaque"},name:"Commemorative Plaque"},"historic/monument":{icon:"maki-monument",fields:["name","inscription","access_simple"],moreFields:["{historic}","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:["{historic}","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:["{historic}","seamark/type"],geometry:["point","area"],tags:{historic:"wreck"},addTags:{historic:"wreck","seamark:type":"wreck"},terms:["hull","mast","maritime","remains","ship","boat"],name:"Shipwreck"},"indoor/corridor_line":{fields:["level","name"],geometry:["line"],tags:{indoor:"corridor"},searchable:false,matchScore:1.1,name:"Indoor Corridor",replacement:"highway/corridor"},"indoor/area":{fields:["level","name","ref_room_number","height"],geometry:["area"],tags:{indoor:"area"},terms:["indoor space"],matchScore:0.8,name:"Indoor Area"},"indoor/corridor":{icon:"temaki-pedestrian",fields:["level","name","ref","height"],geometry:["area"],tags:{indoor:"corridor"},terms:["concourse","foyer","hallway","passageway"],matchScore:0.8,name:"Indoor Corridor"},"indoor/door":{icon:"maki-entrance-alt1",fields:["level","ref","door_type","access_simple","width","height"],moreFields:["wheelchair"],geometry:["vertex"],tags:{indoor:"door"},addTags:{indoor:"door",door:"yes"},removeTags:{indoor:"door",door:"*"},terms:["doorframe","doorway","portal","room access","threshold"],name:"Indoor Door"},"indoor/elevator":{icon:"temaki-elevator",fields:["ref","level_semi"],geometry:["area"],tags:{indoor:"room",elevator:"yes"},terms:["elevator","lift"],matchScore:0.8,name:"Indoor Elevator Shaft"},"indoor/room":{fields:["level","name","ref_room_number","room","height"],geometry:["area"],tags:{indoor:"room"},terms:["antechamber","anteroom","atrium","cell","chamber","concourse","foyer","indoor room","lobby","vestibule"],matchScore:0.8,name:"Room"},"indoor/stairs":{icon:"iD-highway-steps",fields:["ref","level_semi","conveying_escalator"],geometry:["area"],tags:{indoor:"room",stairs:"yes"},terms:["stair","stairs","staircase","stairway","stairwell","steps"],matchScore:0.8,name:"Indoor Stairwell"},"indoor/wall":{icon:"temaki-wall",fields:["level","height"],geometry:["line"],tags:{indoor:"wall"},terms:["indoor barrier","room divider","room partition"],name:"Indoor Wall"},"internet_access/wlan":{icon:"fas-wifi",geometry:["point","area"],fields:["internet_access/ssid","internet_access/fee"],moreFields:["level"],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/churchyard":{icon:"maki-religious-christian",fields:["{landuse/religious}"],moreFields:["{landuse/religious}"],geometry:["area"],tags:{landuse:"churchyard"},searchable:false,name:"Churchyard"},"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","email","fax","phone","website"],tags:{landuse:"allotments"},terms:["allotment","garden"],name:"Community Garden"},"landuse/aquaculture":{icon:"maki-aquarium",fields:["name","operator","produce"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"aquaculture"},terms:["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],name:"Aquaculture"},"landuse/brownfield":{icon:"temaki-bulldozer",geometry:["area"],fields:["name"],tags:{landuse:"brownfield"},terms:[],matchScore:0.9,name:"Brownfield"},"landuse/cemetery":{icon:"maki-cemetery",fields:["name","religion","denomination"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"cemetery"},terms:["burial ground","cemetary","cemetery","churchyard","columbarium","grave yard","graveyard","mausoleum","tomb"],name:"Cemetery"},"landuse/commercial":{icon:"maki-suitcase",fields:["name"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"commercial"},terms:[],matchScore:0.9,name:"Commercial Area"},"landuse/construction":{icon:"temaki-bulldozer",fields:["name","construction","operator","opening_date","check_date","note"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"construction"},terms:["building","bulldozer","construction site","construction zone","crane","demolition","development","infrastructure"],name:"Construction Area"},"landuse/farmland":{icon:"fas-tractor",fields:["name","operator","crop","produce"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"farmland"},terms:["crop","grow","plant"],name:"Farmland"},"landuse/farmyard":{icon:"maki-farm",fields:["name","operator","crop"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"farmyard"},terms:["crop","grow","plant"],name:"Farmyard"},"landuse/flowerbed":{icon:"maki-garden",fields:["operator"],moreFields:["address","name"],geometry:["area"],tags:{landuse:"flowerbed"},terms:["floral garden","flower garden"],name:"Flowerbed"},"landuse/forest":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle","produce"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"forest"},terms:["boreal","cut","forest","forestry","forrest","lumber","silviculture","taiga","tree","trees","woodlands","woods"],name:"Managed Forest"},"landuse/garages":{icon:"fas-warehouse",geometry:["area"],fields:["name"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"garages"},terms:[],name:"Garage Landuse"},"landuse/grass":{icon:"temaki-lawn",geometry:["area"],tags:{landuse:"grass"},terms:["field","green","lawn","managed grass","mown grass","turf"],name:"Grass"},"landuse/greenfield":{icon:"temaki-bulldozer",geometry:["area"],fields:["name"],tags:{landuse:"greenfield"},terms:[],matchScore:0.9,name:"Greenfield"},"landuse/greenhouse_horticulture":{icon:"maki-garden",fields:["name","operator"],moreFields:["address","email","fax","phone","website"],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","email","fax","phone","website"],geometry:["area"],terms:["boat"],tags:{landuse:"harbour"},name:"Harbor"},"landuse/industrial":{icon:"maki-industry",fields:["name","industrial"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"industrial"},terms:[],matchScore:0.9,name:"Industrial Area"},"landuse/industrial/scrap_yard":{icon:"temaki-junk_car",fields:["name","operator","address","opening_hours"],geometry:["point","area"],tags:{industrial:"scrap_yard"},addTags:{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"},reference:{key:"industrial",value:"slaughterhouse"},terms:["abattoir","beef","butchery","calf","chicken","cow","killing house","meat","pig","pork","poultry","shambles","stockyard"],name:"Slaughterhouse"},"landuse/landfill":{icon:"temaki-bulldozer",geometry:["area"],fields:["name"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"landfill"},terms:["dump"],name:"Landfill"},"landuse/meadow":{icon:"maki-garden",geometry:["area"],fields:["name"],tags:{landuse:"meadow"},terms:["grazing","hay field","pasture"],name:"Meadow"},"landuse/military":{icon:"temaki-military",fields:["name"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"military"},terms:[],matchScore:0.9,name:"Military Area"},"landuse/military/airfield":{icon:"tnp-2009265",fields:["name","iata","icao"],geometry:["point","area"],tags:{military:"airfield"},addTags:{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"},terms:["air force","army","base","fight","force","guard","marine","navy","troop","war"],name:"Barracks"},"landuse/military/danger_area":{icon:"maki-danger",fields:["name"],geometry:["point","vertex","area"],tags:{military:"danger_area"},addTags:{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"},terms:["base","fight","force","guard","marine","navy","ship","sub","troop","war"],name:"Naval Base"},"landuse/military/obstacle_course":{icon:"temaki-military",geometry:["point","area"],tags:{military:"obstacle_course"},addTags:{landuse:"military",military:"obstacle_course"},terms:["army","base","force","guard","marine","navy","troop","war"],name:"Obstacle Course"},"landuse/military/range":{icon:"temaki-military",fields:["name"],geometry:["point","area"],tags:{military:"range"},addTags:{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"},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",fields:["name","operator","trees"],moreFields:["address","email","fax","phone","species/wikidata","website"],geometry:["area"],tags:{landuse:"orchard"},terms:["fruit"],name:"Orchard"},"landuse/plant_nursery":{icon:"maki-garden",fields:["name","operator","plant"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"plant_nursery"},terms:["flower","garden","grow","vivero"],name:"Plant Nursery"},"landuse/quarry":{geometry:["area"],fields:["name","operator","resource"],moreFields:["address","email","fax","phone","website"],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","email","fax","phone","website"],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","email","fax","phone","website"],tags:{landuse:"religious"},terms:["christian","churchyard","hindu","jewish","mosque","muslim","place of worship","shinto","sikh","taoist","temple","shrine","synagogue"],name:"Religious Area"},"landuse/residential":{icon:"maki-residential-community",fields:["name","residential"],geometry:["area"],tags:{landuse:"residential"},terms:[],matchScore:0.9,name:"Residential Area"},"landuse/residential/apartments":{icon:"maki-residential-community",fields:["name","operator","address"],geometry:["point","area"],tags:{residential:"apartments"},addTags:{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","email","fax","phone","website"],tags:{landuse:"retail"},matchScore:0.9,name:"Retail Area"},"landuse/vineyard":{icon:"temaki-grapes",fields:["name","operator","grape_variety"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"vineyard"},addTags:{landuse:"vineyard",crop:"grape"},removeTags:{landuse:"vineyard",crop:"grape",grape_variety:"*"},terms:["grape","wine"],name:"Vineyard"},"landuse/winter_sports":{icon:"fas-skiing",geometry:["area"],fields:["name","operator"],moreFields:["access_simple","address","opening_hours"],tags:{landuse:"winter_sports"},terms:["piste area","ski area","ski hill","ski mountain","ski resort","snow board area","snowboard area"],name:"Winter Sports Area"},"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:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","max_age","min_age","opening_hours","payment_multi","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["pay-to-play games","video games","driving simulators","pinball machines"],tags:{leisure:"amusement_arcade"},name:"Amusement Arcade"},"leisure/bandstand":{icon:"fas-music",fields:["name","building_area","operator"],moreFields:["gnis/feature_id","website"],geometry:["point","area"],tags:{leisure:"bandstand"},name:"Bandstand"},"leisure/beach_resort":{icon:"fas-umbrella-beach",fields:["name","address","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","phone","smoking","website"],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":{icon:"temaki-bleachers",geometry:["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:["air_conditioning","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","min_age","opening_hours","payment_multi","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["bowling center"],tags:{leisure:"bowling_alley"},name:"Bowling Alley"},"leisure/common":{icon:"temaki-pedestrian",fields:["name","access_simple"],moreFields:["gnis/feature_id","website"],geometry:["area","point"],terms:["open space"],tags:{leisure:"common"},name:"Common"},"leisure/dance":{icon:"fas-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["email","fax","gnis/feature_id","level","opening_hours","payment_multi","phone","website"],geometry:["point","area"],terms:["ballroom","jive","swing","tango","waltz"],tags:{leisure:"dance"},name:"Dance Hall"},"leisure/dancing_school":{icon:"fas-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["email","fax","gnis/feature_id","level","opening_hours","payment_multi","phone","website"],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/disc_golf_course":{icon:"temaki-disc_golf_basket",fields:["name","operator","access_simple","fee","payment_multi_fee","charge_fee","opening_hours"],moreFields:["address","dog","email","fax","gnis/feature_id","lit","phone","website","wheelchair"],geometry:["area","point"],tags:{leisure:"disc_golf_course"},addTags:{leisure:"disc_golf_course",sport:"disc_golf"},terms:["disk golf","frisbee golf","flying disc golf","frolf","ultimate"],name:"Disc Golf Course"},"leisure/dog_park":{icon:"maki-dog-park",fields:["name","operator","operator/type","address","access_simple","website"],moreFields:["dog","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","phone","ref"],geometry:["area","point"],tags:{leisure:"dog_park"},terms:[],name:"Dog Park"},"leisure/escape_game":{icon:"fas-puzzle-piece",fields:["name","address","building_area","opening_hours","website","fee","payment_multi_fee","charge_fee","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","level","phone","smoking","wheelchair"],geometry:["point","area"],terms:["escape game","escape the room","puzzle room","quest room"],tags:{leisure:"escape_game"},name:"Escape Room"},"leisure/firepit":{icon:"temaki-campfire",fields:["access_simple","seasonal","width"],moreFields:["ref"],geometry:["point","area"],tags:{leisure:"firepit"},terms:["bonfire","campfire","fire circle","fire hole","fire place","fire ring","firepit","fireplace","firering"],name:"Fire Pit"},"leisure/fishing":{icon:"fas-fish",fields:["name","access_simple","fishing"],geometry:["vertex","point","area"],tags:{leisure:"fishing"},terms:["angler"],name:"Fishing Spot"},"leisure/fitness_centre":{icon:"fas-dumbbell",fields:["name","sport","address","building_area","opening_hours","phone","website"],moreFields:["brand","charge_fee","email","fax","fee","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi"],geometry:["point","area"],tags:{leisure:"fitness_centre"},terms:["health","gym","leisure","pilates","studio"],name:"Gym / Fitness Center"},"leisure/fitness_centre/yoga":{icon:"maki-pitch",geometry:["point","area"],terms:["asanas","meditation","modern yoga","studio"],tags:{leisure:"fitness_centre",sport:"yoga"},reference:{key:"sport",value:"yoga"},name:"Yoga Studio"},"leisure/fitness_station":{icon:"maki-pitch",fields:["fitness_station","ref","wheelchair","blind"],moreFields:["access_simple","opening_hours"],geometry:["point","area"],tags:{leisure:"fitness_station"},addTags:{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"},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"},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"},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"},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"},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"},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"},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"},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"},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"},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"},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","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","vertex","area"],tags:{leisure:"garden"},name:"Garden"},"leisure/golf_course":{icon:"maki-golf",fields:["name","operator","address","opening_hours"],moreFields:["email","fax","gnis/feature_id","payment_multi","phone","website"],geometry:["area","point"],terms:["links"],tags:{leisure:"golf_course"},name:"Golf Course"},"leisure/hackerspace":{icon:"fas-code",fields:["name","address","building_area","opening_hours","website","fee","payment_multi_fee","charge_fee","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","gnis/feature_id","level","phone","smoking","wheelchair"],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:["email","fax","gnis/feature_id","opening_hours","payment_multi","phone","website"],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:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","opening_hours","payment_multi","phone","website"],geometry:["area","point"],terms:["hockey","skating","curling"],tags:{leisure:"ice_rink"},name:"Ice Rink"},"leisure/marina":{icon:"tnp-2009223",fields:["name","operator","capacity","fee","payment_multi_fee","charge_fee","sanitary_dump_station","power_supply"],moreFields:["address","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","phone","seamark/type","website"],geometry:["area","point","vertex"],terms:["boat"],tags:{leisure:"marina"},name:"Marina"},"leisure/miniature_golf":{icon:"maki-golf",fields:["name","operator","address","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["area","point"],terms:["crazy golf","mini golf","putt-putt"],tags:{leisure:"miniature_golf"},name:"Miniature Golf"},"leisure/nature_reserve":{icon:"maki-park",geometry:["area","point"],fields:["name","operator","address","opening_hours"],moreFields:["dog","email","fax","gnis/feature_id","phone","website"],tags:{leisure:"nature_reserve"},terms:["protected","wildlife"],name:"Nature Reserve"},"leisure/outdoor_seating":{icon:"maki-picnic-site",geometry:["point","area"],fields:["name","operator"],moreFields:["level"],terms:["al fresco","beer garden","dining","cafe","restaurant","pub","bar","patio"],tags:{leisure:"outdoor_seating"},name:"Outdoor Seating Area"},"leisure/park":{icon:"temaki-tree_and_bench",fields:["name","operator","address","opening_hours"],moreFields:["dog","email","fax","gnis/feature_id","phone","smoking","website"],geometry:["area","point"],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"],moreFields:["level"],geometry:["point"],tags:{leisure:"picnic_table"},terms:["bench"],name:"Picnic Table"},"leisure/picnic_table/chess":{icon:"fas-chess-pawn",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","access_simple","surface","lit"],moreFields:["charge_fee","covered","fee","gnis/feature_id","indoor","payment_multi_fee"],geometry:["area","point"],tags:{leisure:"pitch"},terms:["field"],name:"Sport Pitch"},"leisure/pitch/american_football":{icon:"maki-american-football",geometry:["area","point"],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:["area","point"],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:["area","point"],tags:{leisure:"pitch",sport:"badminton"},reference:{key:"sport",value:"badminton"},terms:[],name:"Badminton Court"},"leisure/pitch/baseball":{icon:"maki-baseball",geometry:["area","point"],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:["area","point"],tags:{leisure:"pitch",sport:"basketball"},reference:{key:"sport",value:"basketball"},terms:[],name:"Basketball Court"},"leisure/pitch/beachvolleyball":{icon:"maki-volleyball",geometry:["area","point"],tags:{leisure:"pitch",sport:"beachvolleyball"},addTags:{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:["area","point"],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:["area","point"],tags:{leisure:"pitch",sport:"bowls"},reference:{key:"sport",value:"bowls"},terms:[],name:"Bowling Green"},"leisure/pitch/chess":{icon:"fas-chess-bishop",geometry:["area","point"],tags:{leisure:"pitch",sport:"chess"},reference:{key:"sport",value:"chess"},terms:["chessboard","checkerboard","checkers","chequerboard","garden chess","large chess","oversize chess"],name:"Giant Chess Board"},"leisure/pitch/cricket":{icon:"maki-cricket",geometry:["area","point"],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:["area","point"],tags:{leisure:"pitch",sport:"equestrian"},reference:{key:"sport",value:"equestrian"},terms:["dressage","equestrian","horse","horseback","riding"],name:"Riding Arena"},"leisure/pitch/field_hockey":{icon:"maki-pitch",geometry:["area","point"],tags:{leisure:"pitch",sport:"field_hockey"},reference:{key:"sport",value:"field_hockey"},terms:["landhockey"],name:"Field Hockey Pitch"},"leisure/pitch/horseshoes":{icon:"temaki-horseshoes",geometry:["area","point"],tags:{leisure:"pitch",sport:"horseshoes"},reference:{key:"sport",value:"horseshoes"},terms:["horse shoes"],name:"Horseshoes Pit"},"leisure/pitch/netball":{icon:"maki-volleyball",geometry:["area","point"],tags:{leisure:"pitch",sport:"netball"},reference:{key:"sport",value:"netball"},terms:[],name:"Netball Court"},"leisure/pitch/rugby_league":{icon:"maki-american-football",geometry:["area","point"],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:["area","point"],tags:{leisure:"pitch",sport:"rugby_union"},reference:{key:"sport",value:"rugby_union"},terms:[],name:"Rugby Union Field"},"leisure/pitch/shuffleboard":{icon:"temaki-shuffleboard",geometry:["area","point"],tags:{leisure:"pitch",sport:"shuffleboard"},reference:{key:"sport",value:"shuffleboard"},terms:["deck shuffleboard","floor shuffleboard"],name:"Shuffleboard Court"},"leisure/pitch/skateboard":{icon:"maki-skateboard",geometry:["area","point"],tags:{leisure:"pitch",sport:"skateboard"},reference:{key:"sport",value:"skateboard"},terms:[],name:"Skate Park"},"leisure/pitch/soccer":{icon:"maki-soccer",geometry:["area","point"],tags:{leisure:"pitch",sport:"soccer"},reference:{key:"sport",value:"soccer"},terms:["football"],name:"Soccer Field"},"leisure/pitch/softball":{icon:"maki-baseball",geometry:["area","point"],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:["area","point"],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:["area","point"],tags:{leisure:"pitch",sport:"tennis"},reference:{key:"sport",value:"tennis"},terms:[],name:"Tennis Court"},"leisure/pitch/volleyball":{icon:"maki-volleyball",geometry:["area","point"],tags:{leisure:"pitch",sport:"volleyball"},reference:{key:"sport",value:"volleyball"},terms:[],name:"Volleyball Court"},"leisure/playground":{icon:"maki-playground",fields:["name","operator","playground/theme","surface","access_simple","min_age","max_age"],moreFields:["blind","dog","gnis/feature_id","wheelchair"],geometry:["area","point"],terms:["jungle gym","play area"],tags:{leisure:"playground"},name:"Playground"},"leisure/resort":{icon:"maki-lodging",fields:["name","operator","resort","address","opening_hours"],moreFields:["access_simple","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website"],geometry:["point","area"],tags:{leisure:"resort"},terms:["recreation center","sanatorium","ski and snowboard resort","vacation resort","winter sports resort"],name:"Resort"},"leisure/sauna":{icon:"fas-thermometer-three-quarters",fields:["name","operator","address","opening_hours","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","level","phone","website"],geometry:["point","area"],tags:{leisure:"sauna"},name:"Sauna"},"leisure/slipway_point":{icon:"maki-slipway",fields:["{leisure/slipway}"],moreFields:["{leisure/slipway}"],geometry:["point","vertex"],terms:["boat launch","boat ramp","boat landing"],tags:{leisure:"slipway"},name:"Slipway"},"leisure/slipway":{icon:"maki-slipway",fields:["name","surface","access_simple","fee","payment_multi_fee","charge_fee","lanes"],moreFields:["lit","opening_hours","seamark/type","width"],geometry:["line"],terms:["boat launch","boat ramp","boat landing"],tags:{leisure:"slipway"},addTags:{leisure:"slipway",highway:"service",service:"slipway"},matchScore:1.1,name:"Slipway"},"leisure/sports_centre":{icon:"maki-pitch",fields:["name","sport","building","address","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","opening_hours","phone","website"],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:"fas-swimmer",geometry:["area","point"],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","operator","sport","address"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],tags:{leisure:"stadium"},name:"Stadium"},"leisure/swimming_area":{icon:"fas-swimmer",fields:["name","access_simple","supervised","fee","payment_multi_fee","charge_fee","lit"],moreFields:["opening_hours","operator"],geometry:["area"],terms:["dive","water","aquatics"],tags:{leisure:"swimming_area"},name:"Natural Swimming Area"},"leisure/swimming_pool":{icon:"fas-swimming-pool",fields:["name","access_simple","lit","location_pool","length","swimming_pool"],moreFields:["address","level","gnis/feature_id","opening_hours","operator"],geometry:["area","point"],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"],moreFields:["access","covered","gnis/feature_id","indoor","level"],geometry:["line","point","area"],tags:{leisure:"track"},terms:["cycle","dog","greyhound","horse","race*","track"],name:"Racetrack (Non-Motorsport)"},"leisure/track/cycling_point":{icon:"fas-biking",fields:["{leisure/track/cycling}"],geometry:["point"],tags:{leisure:"track",sport:"cycling"},terms:["bicycle track","bicycling track","cycle racetrack","velodrome"],name:"Cycling Track"},"leisure/track/cycling":{icon:"fas-biking",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["line","area"],tags:{leisure:"track",sport:"cycling"},terms:["bicycle track","bicycling track","cycle racetrack","velodrome"],name:"Cycling Track"},"leisure/track/horse_racing_point":{icon:"maki-horse-riding",fields:["{leisure/track/horse_racing}"],geometry:["point"],tags:{leisure:"track",sport:"horse_racing"},terms:["equestrian race track","horse race betting","horseracing","horsetrack","horse racetrack"],name:"Horse Racing Track"},"leisure/track/horse_racing":{icon:"maki-horse-riding",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["line","area"],tags:{leisure:"track",sport:"horse_racing"},terms:["equestrian race track","horse race betting","horseracing","horsetrack","horse racetrack"],name:"Horse Racing Track"},"leisure/track/running_point":{icon:"maki-pitch",fields:["{leisure/track/running}"],geometry:["point"],tags:{leisure:"track",sport:"running"},terms:["athletics track","decathlon","foot race","long distance running","marathon","middle distance running","racetrack","running","sprint","track","walking"],name:"Running Track"},"leisure/track/running":{icon:"maki-pitch",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["line","area"],tags:{leisure:"track",sport:"running"},terms:["athletics track","decathlon","foot race","long distance running","marathon","middle distance running","racetrack","running","sprint","track","walking"],name:"Running Track"},"leisure/water_park":{icon:"fas-swimmer",fields:["name","operator","address"],moreFields:["brand","email","fax","gnis/feature_id","payment_multi","phone","website"],geometry:["area","point"],terms:["swim","pool","dive"],tags:{leisure:"water_park"},name:"Water Park"},line:{fields:["name"],geometry:["line"],tags:{},terms:["polyline"],name:"Line",matchScore:0.1},"man_made/adit":{icon:"maki-triangle",geometry:["point","area"],fields:["name","operator","resource","direction"],moreFields:["gnis/feature_id"],terms:["cave","horizontal mine entrance","tunnel","underground"],tags:{man_made:"adit"},name:"Adit"},"man_made/antenna":{icon:"temaki-antenna",fields:["communication_multi","operator","manufacturer","height"],geometry:["point"],terms:["broadcast","cell phone","cell","communication","mobile phone","radio","television","transmission","tv"],tags:{man_made:"antenna"},name:"Antenna"},"man_made/beacon":{icon:"maki-communications-tower",fields:["name","height"],moreFields:["seamark/type"],geometry:["point","area"],tags:{man_made:"beacon"},name:"Beacon",matchScore:0.5},"man_made/beehive":{icon:"fas-archive",geometry:["point","area"],fields:["ref","operator","seasonal","height","colour"],moreFields:["manufacturer"],terms:["apiary","beekeeper","farm","honey","pollination"],tags:{man_made:"beehive"},name:"Beehive"},"man_made/breakwater":{fields:["material","seamark/type"],geometry:["line","area"],tags:{man_made:"breakwater"},name:"Breakwater"},"man_made/bridge":{icon:"maki-bridge",fields:["name","bridge","layer","maxweight"],moreFields:["gnis/feature_id","manufacturer","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 Area",matchScore:0.85},"man_made/bunker_silo":{icon:"temaki-silo",fields:["content"],moreFields:["gnis/feature_id"],geometry:["point","area"],terms:["Silage","Storage"],tags:{man_made:"bunker_silo"},name:"Bunker Silo"},"man_made/cairn":{icon:"temaki-cairn",geometry:["point","area"],terms:["rock pile","stone stack","stone pile","càrn"],tags:{man_made:"cairn"},name:"Cairn"},"man_made/chimney":{icon:"temaki-chimney",fields:["operator","material","height"],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","manufacturer","height","crane/type"],geometry:["point","line","vertex","area"],tags:{man_made:"crane"},name:"Crane"},"man_made/cross":{icon:"maki-religious-christian",fields:["name","material","height","elevation","inscription","direction"],geometry:["point","vertex"],tags:{man_made:"cross"},name:"Summit Cross"},"man_made/cutline":{icon:"maki-logging",geometry:["line"],tags:{man_made:"cutline"},name:"Cut line"},"man_made/dyke":{geometry:["line"],tags:{man_made:"dyke"},terms:["Dike","Dyke","Floodbank","Stopbank"],name:"Levee"},"man_made/embankment":{geometry:["line"],tags:{man_made:"embankment"},name:"Embankment"},"man_made/flagpole":{icon:"maki-embassy",fields:["operator","flag/type","country_flag","lit","height"],moreFields:["manufacturer","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","seamark/type"],geometry:["line","area"],tags:{man_made:"groyne"},name:"Groyne"},"man_made/lighthouse":{icon:"maki-lighthouse",fields:["name","operator","building_area","height"],moreFields:["address","email","fax","gnis/feature_id","phone","seamark/type","website"],geometry:["point","area"],tags:{man_made:"lighthouse"},addTags:{man_made:"lighthouse","seamark:type":"light_major"},removeTags:{man_made:"lighthouse","seamark:type":"*"},name:"Lighthouse"},"man_made/manhole":{icon:"temaki-manhole",fields:["manhole","operator","label","ref"],geometry:["point","vertex"],tags:{manhole:"*"},addTags:{man_made:"manhole",manhole:"*"},terms:["cover","hole","sewer","sewage","telecom"],name:"Manhole"},"man_made/manhole/drain":{icon:"temaki-manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"drain"},addTags:{man_made:"manhole",manhole:"drain"},terms:["cover","drain","hole","rain","sewer","sewage","storm"],name:"Storm Drain"},"man_made/manhole/gas":{icon:"temaki-gas_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"gas"},addTags:{man_made:"manhole",manhole:"gas"},terms:["cover","gas","heat","hole","utility"],name:"Gas Utility Manhole"},"man_made/manhole/power":{icon:"temaki-power_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"power"},addTags:{man_made:"manhole",manhole:"power"},terms:["cover","hole","electric","hole","power","utility"],name:"Power Utility Manhole"},"man_made/manhole/sewer":{icon:"temaki-waste_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"sewer"},addTags:{man_made:"manhole",manhole:"sewer"},terms:["cover","drain","hole","sewer","sewage","utility"],name:"Sewer Utility Manhole"},"man_made/manhole/telecom":{icon:"temaki-cable_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"telecom"},addTags:{man_made:"manhole",manhole:"telecom"},terms:["bt","cable","cover","phone","hole","telecom","telephone","utility"],name:"Telecom Utility Manhole"},"man_made/manhole/water":{icon:"temaki-waste_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"water"},addTags:{man_made:"manhole",manhole:"water"},terms:["cover","drinking","hole","utility","water"],name:"Water Utility Manhole"},"man_made/mast":{icon:"temaki-mast",fields:["tower/type","tower/construction","height"],moreFields:["communication_multi","gnis/feature_id","manufacturer","material"],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:"temaki-mast_communication",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:"temaki-mast_communication",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:"temaki-mast_communication",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:"temaki-mast_communication",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/mineshaft":{icon:"maki-triangle",geometry:["point","area"],fields:["name","operator","resource"],moreFields:["gnis/feature_id"],terms:["cave","mine shaft","tunnel","underground","vertical mine entrance"],tags:{man_made:"mineshaft"},name:"Mineshaft"},"man_made/monitoring_station":{icon:"temaki-antenna",geometry:["point","vertex","area"],fields:["monitoring_multi","operator","manufacturer"],terms:["weather","earthquake","seismology","air","gps"],tags:{man_made:"monitoring_station"},name:"Monitoring Station"},"man_made/obelisk":{icon:"maki-monument",fields:["name","inscription","height","material","colour"],geometry:["point","vertex","area"],tags:{man_made:"obelisk"},name:"Obelisk"},"man_made/observatory":{fields:["name","operator","address","access_simple","building_area"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],terms:["astronomical","meteorological"],tags:{man_made:"observatory"},name:"Observatory"},"man_made/petroleum_well":{icon:"temaki-oil_well",fields:["name","ref","operator","substance"],moreFields:["gnis/feature_id"],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-pier_fixed",fields:["name","surface","floating","width","access","lit"],moreFields:["{highway/footway}","access","fishing","gnis/feature_id","incline"],geometry:["line","area"],terms:["berth","dock","jetty","landing","promenade","wharf"],tags:{man_made:"pier"},name:"Pier"},"man_made/pier/floating":{icon:"temaki-pier_floating",geometry:["line","area"],terms:["berth","dock","jetty","landing","promenade","wharf"],tags:{man_made:"pier",floating:"yes"},name:"Floating Pier"},"man_made/pipeline":{icon:"iD-pipeline-line",fields:["operator","location","substance","layer","diameter"],geometry:["line"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline"},name:"Pipeline"},"man_made/pipeline/underground":{icon:"iD-pipeline-line",geometry:["line"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline",location:"underground"},addTags:{man_made:"pipeline",location:"underground",layer:"-1"},name:"Underground Pipeline"},"man_made/pipeline/valve":{icon:"temaki-wheel",geometry:["vertex"],fields:["ref","operator","valve","location","diameter"],moreFields:["colour","manufacturer","material"],terms:["oil","natural gas","water","sewer","sewage"],tags:{pipeline:"valve"},name:"Pipeline Valve"},"man_made/pumping_station":{icon:"maki-water",geometry:["point","area"],moreFields:["gnis/feature_id"],tags:{man_made:"pumping_station"},name:"Pumping Station"},"man_made/silo":{icon:"temaki-silo",fields:["crop","building_area"],moreFields:["gnis/feature_id"],geometry:["point","area"],terms:["grain","corn","wheat"],tags:{man_made:"silo"},name:"Silo"},"man_made/storage_tank":{icon:"temaki-storage_tank",fields:["content","operator","material","building_area","height","capacity"],moreFields:["layer","location","manufacturer"],geometry:["area","point"],terms:["water","oil","gas","petrol"],tags:{man_made:"storage_tank"},name:"Storage Tank"},"man_made/storage_tank/water":{icon:"temaki-storage_tank",geometry:["point","area"],terms:["cistern","water tower"],tags:{man_made:"storage_tank",content:"water"},name:"Water Tank"},"man_made/street_cabinet":{icon:"fas-door-closed",geometry:["point","area"],fields:["ref","operator","street_cabinet","utility_semi","height","colour"],terms:["cable tv","monitoring box","technical box","telecommunications","traffic signal controls"],tags:{man_made:"street_cabinet"},name:"Street Cabinet"},"man_made/surveillance":{icon:"temaki-security_camera",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:"temaki-security_camera",geometry:["point","vertex"],fields:["surveillance","surveillance/type","camera/type","camera/mount","camera/direction","surveillance/zone","contact/webcam"],moreFields:["manufacturer"],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/torii":{icon:"temaki-shinto",fields:["height","material","colour","lit"],moreFields:["name","operator","ref"],geometry:["point","vertex","line"],terms:["Japanese gate","Shinto shrine"],tags:{man_made:"torii"},name:"Torii"},"man_made/tower":{icon:"temaki-tower",fields:["tower/type","tower/construction","height","building_area"],moreFields:["architect","gnis/feature_id"],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_communication",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/defensive":{icon:"maki-castle",geometry:["point","area"],tags:{man_made:"tower","tower:type":"defensive"},reference:{key:"tower:type",value:"defensive"},terms:["Defensive Tower","Castle Tower"],name:"Fortified Tower"},"man_made/tower/minaret":{icon:"temaki-domed_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/tunnel":{icon:"temaki-tunnel",fields:["name","tunnel","layer","width","length","height"],moreFields:["gnis/feature_id"],geometry:["area"],tags:{man_made:"tunnel"},addTags:{man_made:"tunnel",layer:"-1"},removeTags:{man_made:"tunnel",layer:"*"},reference:{key:"man_made",value:"tunnel"},terms:["bore","dig","shaft","underground passage","underpass"],name:"Tunnel Area"},"man_made/utility_pole":{icon:"temaki-utility_pole",fields:["ref","operator","utility_semi","height","material"],moreFields:["colour","manufacturer"],geometry:["point","vertex"],tags:{man_made:"utility_pole"},name:"Utility Pole"},"man_made/wastewater_plant":{icon:"temaki-waste",fields:["name","operator","address"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],terms:["sewage*","water treatment plant","reclamation plant"],tags:{man_made:"wastewater_plant"},name:"Wastewater Plant"},"man_made/water_tap":{icon:"temaki-water_tap",fields:["ref","operator","drinking_water","access_simple"],geometry:["point","vertex"],tags:{man_made:"water_tap"},terms:["drinking water","water faucet","water point","water source","water spigot"],name:"Water Tap"},"man_made/water_tower":{icon:"temaki-water_tower",fields:["operator","height"],moreFields:["gnis/feature_id"],geometry:["area","point"],tags:{man_made:"water_tower"},name:"Water Tower"},"man_made/water_well":{icon:"temaki-well_pump_manual",fields:["ref","operator","drinking_water","pump","access_simple"],moreFields:["gnis/feature_id"],geometry:["point","area"],tags:{man_made:"water_well"},terms:["aquifer","drinking water","water pump","water point","water source"],name:"Water Well"},"man_made/water_works":{icon:"maki-water",fields:["name","operator","address"],moreFields:["gnis/feature_id"],geometry:["point","area"],tags:{man_made:"water_works"},name:"Water Works"},"man_made/watermill":{icon:"maki-watermill",fields:["building_area"],moreFields:["gnis/feature_id"],geometry:["point","area"],terms:["water","wheel","mill"],tags:{man_made:"watermill"},name:"Watermill"},"man_made/windmill":{icon:"maki-windmill",fields:["building_area"],moreFields:["gnis/feature_id"],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:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],terms:["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],tags:{man_made:"works"},name:"Factory"},marker:{icon:"temaki-silo",fields:["ref","operator","marker","utility","inscription","colour"],moreFields:["height","location","manufacturer","material"],geometry:["point"],terms:["identifier","marking","plate","pole","post","sign"],tags:{marker:"*"},name:"Marker"},"marker/utility":{icon:"temaki-silo",fields:["ref","operator","marker","utility","{marker}"],geometry:["point"],terms:["gas line marker","identifier","marking","oil marker","pipline marker","plate","pole","post","sign"],tags:{marker:"*",utility:"*"},name:"Utility Marker"},"marker/utility/power":{icon:"temaki-silo",fields:["ref","operator","marker","{marker}"],geometry:["point"],terms:["electric line","identifier","marking","plate","pole","post","power cable","power line","sign"],tags:{marker:"*",utility:"power"},name:"Power Marker"},"military/bunker":{icon:"temaki-bunker",fields:["name","bunker_type","building_area"],moreFields:["gnis/feature_id"],geometry:["point","area"],tags:{military:"bunker"},addTags:{building:"bunker",military:"bunker"},terms:["air force","army","base","fight","force","guard","marine","navy","troop","war"],name:"Military Bunker"},"military/checkpoint":{icon:"maki-barrier",fields:["name"],geometry:["point","vertex","area"],tags:{military:"checkpoint"},terms:["air force","army","base","force","guard","marine","navy","troop","war"],name:"Checkpoint"},"military/nuclear_explosion_site":{icon:"maki-danger",fields:["name"],moreFields:["gnis/feature_id"],geometry:["point","vertex","area"],tags:{military:"nuclear_explosion_site"},terms:["atom","blast","bomb","detonat*","nuke","site","test"],name:"Nuclear Explosion Site"},"military/office":{icon:"temaki-military",fields:["name","building_area"],moreFields:["gnis/feature_id","level"],geometry:["point","area"],tags:{military:"office"},terms:["air force","army","base","enlist","fight","force","guard","marine","navy","recruit","troop","war"],name:"Military Office"},"military/trench":{icon:"temaki-military",fields:["name","trench"],geometry:["point","line"],tags:{military:"trench"},terms:["dugout","firestep","fox hole","infantry trench","war trench"],name:"Military Trench"},"natural/bare_rock":{geometry:["area"],tags:{natural:"bare_rock"},terms:["rock"],name:"Bare Rock"},"natural/bay":{icon:"temaki-beach",geometry:["point","line","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/cape":{icon:"temaki-beach",fields:["name","elevation","description"],geometry:["point","vertex"],tags:{natural:"cape"},terms:["bay","coastline","erosion","headland","promontory"],name:"Cape"},"natural/cave_entrance":{icon:"maki-triangle",geometry:["point","area"],fields:["name","elevation","access_simple","direction","fee","payment_multi_fee","charge_fee"],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":{icon:"temaki-beach",geometry:["line"],tags:{natural:"coastline"},terms:["shore"],name:"Coastline"},"natural/fell":{geometry:["area"],tags:{natural:"fell"},terms:[],name:"Fell"},"natural/geyser":{icon:"maki-water",fields:["name","geyser/height","elevation"],geometry:["point"],tags:{natural:"geyser"},terms:["erupting spring","geiser","gieser","guyser","hot water","hydrogeology","hydrothermal explosion","steam"],name:"Geyser"},"natural/glacier":{icon:"temaki-snow",geometry:["area"],tags:{natural:"glacier"},terms:["ice","snow"],name:"Glacier"},"natural/grassland":{icon:"temaki-grass",geometry:["area"],tags:{natural:"grassland"},terms:["field","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:["area","point"],tags:{natural:"reef"},terms:["barrier","coral","ocean","sand","shoal"],name:"Reef"},"natural/ridge":{geometry:["line"],tags:{natural:"ridge"},terms:["crest"],name:"Ridge"},"natural/rock":{icon:"temaki-boulder2",fields:["name"],geometry:["point","area"],tags:{natural:"rock"},terms:["boulder","stone","rock"],name:"Attached Rock / Boulder"},"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/shingle":{geometry:["area"],tags:{natural:"shingle"},terms:["beach","gravel","pebbles","riverbed","rounded rock fragments"],name:"Shingle"},"natural/spring":{icon:"maki-water",fields:["name","drinking_water","intermittent"],geometry:["point","vertex"],tags:{natural:"spring"},terms:["aquifer","hydro","seep","water source"],name:"Spring"},"natural/stone":{icon:"temaki-boulder1",fields:["name"],geometry:["point","area"],tags:{natural:"stone"},terms:["boulder","stone","rock"],name:"Unattached Stone / Boulder"},"natural/tree_row":{icon:"temaki-tree_row",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","diameter"],moreFields:["species/wikidata"],geometry:["point","vertex"],tags:{natural:"tree"},terms:[],name:"Tree"},"natural/valley":{icon:"maki-triangle-stroked",fields:["name","elevation","description"],geometry:["vertex","point","line"],tags:{natural:"valley"},terms:["canyon","dale","dell","dene","depression","glen","gorge","gully","gulley","gultch","hollow","ravine","rift","vale"],name:"Valley"},"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:["fishing","gnis/feature_id","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:"iD-waterway-canal",fields:["{natural/water}","salt"],geometry:["area"],tags:{natural:"water",water:"canal"},reference:{key:"water",value:"canal"},name:"Canal Area"},"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/moat":{icon:"maki-water",fields:["{natural/water}","salt"],geometry:["area"],tags:{natural:"water",water:"moat"},name:"Moat"},"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:"iD-waterway-river",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 Area"},"natural/water/stream":{icon:"iD-waterway-stream",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 Area"},"natural/water/wastewater":{icon:"temaki-waste",geometry:["area"],tags:{natural:"water",water:"wastewater"},reference:{key:"water",value:"wastewater"},terms:["excrement","shit","sewage","wastewater","Settling Basin","Clarifier Basin"],name:"Wastewater Basin"},"natural/wetland":{icon:"maki-wetland",fields:["wetland","salt","tidal"],geometry:["point","area"],tags:{natural:"wetland"},terms:["bog","fen","marsh","mire","moor","muskeg","peatland","quagmire","reedbed","saltmarsh","swamp","tidalflat","wet meadow"],name:"Wetland"},"natural/wood":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle"],geometry:["area","point"],tags:{natural:"wood"},terms:["boreal","forest","forrest","taiga","tree","trees","woodlands","woods"],name:"Natural Wood"},"network/type/node_network":{fields:["name","rwn_ref","expected_rwn_route_relations","rcn_ref","expected_rcn_route_relations"],geometry:["vertex"],tags:{"network:type":"node_network"},terms:["node network","rcn","rwn"],countryCodes:["be","de","lu","nl"],matchScore:0.2,name:"Recreational Network Node"},"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:["air_conditioning","baby_feeding","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access","internet_access/fee","internet_access/ssid","level","not/name","operator","phone","ref/vatin","smoking","website","wheelchair"],geometry:["point","vertex","area"],tags:{office:"*"},terms:[],name:"Office"},"office/administrative":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"administrative"},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"},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:"fas-drafting-compass",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/bail_bond_agent":{icon:"maki-bank",moreFields:["{office}","currency_multi","payment_multi"],geometry:["point","area"],tags:{office:"bail_bond_agent"},terms:["bail bond dealer","bail bond man","bail bondsman","bail bondsperson"],name:"Bail Bond Agent"},"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/consulting":{icon:"maki-suitcase",fields:["name","consulting","{office}"],geometry:["point","area"],tags:{office:"consulting"},terms:["consulting firm office"],name:"Consultancy 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/diplomatic":{icon:"temaki-embassy",fields:["name","diplomatic","country","target","diplomatic/services","{office}"],geometry:["point","area"],tags:{office:"diplomatic"},terms:[],name:"Diplomatic Office"},"office/diplomatic/consulate":{icon:"temaki-embassy",fields:["name","consulate","{office/diplomatic}"],geometry:["point","area"],tags:{office:"diplomatic",diplomatic:"consulate"},reference:{key:"diplomatic",value:"consulate"},terms:[],name:"Consulate"},"office/diplomatic/embassy":{icon:"temaki-embassy",fields:["name","embassy","{office/diplomatic}"],geometry:["point","area"],tags:{office:"diplomatic",diplomatic:"embassy"},reference:{key:"diplomatic",value:"embassy"},terms:[],name:"Embassy"},"office/diplomatic/liaison":{icon:"temaki-embassy",fields:["name","liaison","{office/diplomatic}"],geometry:["point","area"],tags:{office:"diplomatic",diplomatic:"liaison"},reference:{key:"diplomatic",value:"liaison"},terms:[],name:"Liaison Office"},"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:"temaki-briefcase_bolt",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",moreFields:["brand","{office}"],geometry:["point","area"],tags:{office:"estate_agent"},terms:["real estate"],name:"Real Estate Office"},"office/financial_advisor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"financial_advisor"},terms:["401k","inheritance","savings","stocks","retirement","wealth management"],name:"Financial Advisor"},"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/prosecutor":{icon:"maki-suitcase",fields:["{office}","operator"],geometry:["point","area"],terms:["attorney general","district attorney","prosecution"],tags:{office:"government",government:"prosecutor"},reference:{key:"government",value:"prosecutor"},name:"Public Prosecutor's 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:"temaki-briefcase_shield",moreFields:["brand","{office}"],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:["advocate","attorney","barrister","counsellor","counselor","defender","lawyer","legal","prosecutor"],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:"fas-newspaper",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:"fas-stamp",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"},"office/private_investigator":{icon:"fas-user-secret",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:"fas-flask",geometry:["point","area"],tags:{office:"research"},terms:["R and D","research and development","research lab"],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 service provider","isp","network","telephone","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"],tags:{"piste:type":"downhill"},terms:["alpine skiing","piste","ski hill","skiing","snowboarding"],name:"Downhill Ski Run"},"piste/downhill/halfpipe":{icon:"fas-snowboarding",geometry:["line","area"],tags:{"piste:type":"downhill",man_made:"piste:halfpipe"},reference:{key:"man_made",value:"piste:halfpipe"},terms:["ski","alpine","halfpipe","half pipe","snowboard","downhill","piste"],name:"Snowsports Half-Pipe"},"piste/hike":{icon:"temaki-snow_shoeing",fields:["name","piste/type","piste/difficulty","piste/grooming_hike","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"hike"},terms:["hike","nordic walking","piste","show shoeing","snowshoe","snowshoeing"],name:"Snowshoeing / Winter Hiking Trail"},"piste/ice_skate":{icon:"fas-skating",fields:["name","piste/type","sport_ice","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"ice_skate"},terms:["ice rink","ice track","iceskating","piste","skates"],name:"Ice Skating Trail"},"piste/nordic":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_nordic","piste/grooming_nordic","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"nordic"},terms:["crosscountry","nordic skiing","piste","skate skiing","skiing","xc"],name:"Cross-Country Ski Trail"},"piste/piste":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"*"},terms:["ski","nordic","crosscountry","downhill","alpine","snowboard","skitour","ski touring","sled","luge","sleigh","sledge","ski-joring","husky","horse","winter hiking","snowshoe","snowshoeing","ice","skating"],name:"Snowsports Trail / Piste"},"piste/skitour":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_skitour","piste/grooming","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"skitour"},terms:["ski","skitour","crosscountry","ski touring","piste"],name:"Ski Touring Trail"},"piste/sled":{icon:"temaki-sledding",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"sled"},terms:["bobsled","luge","piste","skeleton","sledge","sleigh","toboggan"],name:"Sled Run"},"piste/sleigh":{icon:"fas-sleigh",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],tags:{"piste:type":"sleigh"},terms:["dogsledding","husky","horse","piste","sled","sledge","ski-joring","skijoring"],name:"Sleigh Trail"},"place/farm":{icon:"maki-farm",geometry:["point","area"],tags:{place:"farm"},name:"Farm",searchable:false},"place/city_block":{icon:"maki-triangle-stroked",moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"city_block"},name:"City Block"},"place/city":{icon:"maki-city",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"city"},name:"City"},"place/hamlet":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"hamlet"},name:"Hamlet"},"place/island":{icon:"temaki-island_trees_building",geometry:["point","area"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"island"},name:"Island"},"place/islet":{icon:"temaki-islet_tree",geometry:["point","area"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"islet"},name:"Islet"},"place/isolated_dwelling":{icon:"maki-home",geometry:["point","area"],tags:{place:"isolated_dwelling"},name:"Isolated Dwelling"},"place/locality":{icon:"maki-triangle-stroked",moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"locality"},name:"Locality"},"place/neighbourhood":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["gnis/feature_id","website"],geometry:["point","area"],tags:{place:"neighbourhood"},terms:["neighbourhood"],name:"Neighborhood"},"place/plot":{icon:"maki-triangle-stroked",geometry:["point","area"],tags:{place:"plot"},terms:["tract","land","lot","parcel"],name:"Plot"},"place/quarter":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"quarter"},terms:["boro","borough","quarter"],name:"Sub-Borough / Quarter"},"place/square":{icon:"temaki-pedestrian",moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"square"},name:"Square"},"place/suburb":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"suburb"},terms:["boro","borough","quarter"],name:"Borough / Suburb"},"place/town":{icon:"maki-town",fields:["name","population"],moreFields:["{place}","website"],geometry:["point","area"],tags:{place:"town"},name:"Town"},"place/village":{icon:"maki-village",fields:["name","population"],moreFields:["{place}","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",geometry:["point"],terms:["chin-up bar","high bar","pull-up 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:["{playground}","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"},terms:["sandbox"],name:"Sandpit"},"playground/seesaw":{icon:"maki-playground",geometry:["point"],tags:{playground:"seesaw"},name:"Seesaw"},"playground/slide":{icon:"temaki-slide",geometry:["point","line"],tags:{playground:"slide"},name:"Slide"},"playground/structure":{icon:"temaki-play_structure",geometry:["point","area"],tags:{playground:"structure"},terms:["jungle gym"],name:"Play Structure"},"playground/swing":{icon:"maki-playground",fields:["capacity","baby_seat","wheelchair","blind"],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:["vertex","point"],tags:{},terms:["node","other","vertex","vertices"],name:"Point",matchScore:0.1},polling_station:{icon:"fas-vote-yea",fields:["name","ref","operator","address","opening_hours","building_area"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","phone","website","wheelchair"],geometry:["point","area"],terms:["ballot box","ballot drop","democracy","elections","polling place","vote","voting booth","voting machine"],tags:{polling_station:"*"},matchScore:0.75,name:"Temporary Polling Place"},"power/cable/underground":{icon:"temaki-cable",fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"cable",location:"underground"},addTags:{power:"cable",location:"underground",layer:"-1"},name:"Underground Power Cable"},"power/generator":{icon:"temaki-power",fields:["ref","operator","generator/source","generator/method","generator/type","generator/output/electricity"],moreFields:["colour","height","level","manufacturer","material"],geometry:["point","vertex","area"],terms:["hydro","solar","turbine","wind"],tags:{power:"generator"},name:"Power Generator"},"power/generator/method/photovoltaic":{icon:"fas-solar-panel",fields:["ref","operator","generator/output/electricity"],moreFields:["{power/generator}"],geometry:["area","point","vertex"],tags:{power:"generator","generator:method":"photovoltaic"},addTags:{power:"generator","generator:source":"solar","generator:method":"photovoltaic","generator:type":"solar_photovoltaic_panel","generator:output:electricity":"*"},reference:{key:"generator:method",value:"photovoltaic"},terms:["photovoltaic module","PV module","sunlight"],name:"Solar Panel"},"power/generator/source/hydro":{icon:"temaki-power",fields:["ref","operator","generator/method","generator/type","generator/output/electricity"],moreFields:["{power/generator}"],geometry:["point","vertex","area"],tags:{power:"generator","generator:source":"hydro"},addTags:{power:"generator","generator:source":"hydro","generator:output:electricity":"yes"},reference:{key:"generator:source",value:"hydro"},terms:["dam","generator","francis turbine","hydroelectricity","kaplan turbine","pelton turbine"],name:"Water Turbine"},"power/generator/source/nuclear":{icon:"temaki-radiation",fields:["ref","operator","generator/method","generator/type","generator/output/electricity"],moreFields:["{power/generator}"],geometry:["point","vertex","area"],tags:{power:"generator","generator:source":"nuclear","generator:method":"fission"},reference:{key:"generator:source",value:"nuclear"},terms:["fission","generator","nuclear","nuke","reactor"],name:"Nuclear Reactor"},"power/generator/source/wind":{icon:"temaki-wind_turbine",fields:["ref","operator","generator/type","generator/output/electricity"],moreFields:["{power/generator}"],geometry:["point","vertex","area"],tags:{power:"generator","generator:source":"wind","generator:method":"wind_turbine"},reference:{key:"generator:source",value:"wind"},terms:["generator","turbine","windmill","wind"],name:"Wind Turbine"},"power/line":{icon:"temaki-power_tower",fields:["name","operator","voltage","ref","layer"],geometry:["line"],terms:["electric power transmission line","high voltage line","high tension 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/source","plant/method","plant/output/electricity","start_date"],moreFields:["gnis/feature_id"],geometry:["area"],tags:{power:"plant"},addTags:{power:"plant",landuse:"industrial"},terms:["coal","gas","generat*","hydro","nuclear","power","station"],name:"Power Station Grounds"},"power/plant/source/coal":{icon:"maki-industry",fields:["name","operator","address","plant/output/electricity","start_date"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"coal"},addTags:{power:"plant",landuse:"industrial","plant:source":"coal","plant:method":"combustion","plant:output:electricity":"*"},reference:{key:"plant:source",value:"coal"},terms:["carbon","combustion","fossil fuel","coalfired","power station"],name:"Coal-Fired Power Plant"},"power/plant/source/gas":{icon:"temaki-gas",fields:["name","operator","address","plant/output/electricity","start_date"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"gas"},addTags:{power:"plant",landuse:"industrial","plant:source":"gas","plant:method":"combustion","plant:output:electricity":"*"},reference:{key:"plant:source",value:"gas"},terms:["carbon","combustion","fossil fuel","gasfired","power station","natural gas"],name:"Gas-Fired Power Plant"},"power/plant/source/hydro":{icon:"maki-dam",fields:["{power/plant}"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"hydro"},addTags:{power:"plant",landuse:"industrial","plant:source":"hydro","plant:output:electricity":"*"},reference:{key:"plant:source",value:"hydro"},terms:["dam","power plant","run-of-the-river","tidal","water turbine"],name:"Hydroelectric Power Station"},"power/plant/source/nuclear":{icon:"temaki-radiation",fields:["{power/plant}"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"nuclear"},addTags:{power:"plant",landuse:"industrial","plant:source":"nuclear","plant:method":"fission","plant:output:electricity":"*"},reference:{key:"plant:source",value:"nuclear"},terms:["atomic","fission","power station","nuclear reactor"],name:"Nuclear Power Plant"},"power/plant/source/solar":{icon:"fas-solar-panel",fields:["{power/plant}"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"solar"},addTags:{power:"plant","plant:source":"solar","plant:method":"photovoltaic","plant:output:electricity":"*"},removeTags:{power:"plant","plant:method":"*","plant:source":"solar","plant:output:electricity":"*",landuse:"industrial"},reference:{key:"plant:method",value:"photovoltaic"},terms:["photovoltaic power station","solar panels","solar park","utility-scale solar"],name:"Solar Farm"},"power/plant/source/wind":{icon:"temaki-wind_turbine",fields:["name","operator","address","plant/output/electricity","start_date"],moreFields:["{power/plant}"],geometry:["area"],tags:{power:"plant","plant:source":"wind"},addTags:{power:"plant","plant:source":"wind","plant:method":"wind_turbine","plant:output:electricity":"*"},removeTags:{power:"plant","plant:method":"*","plant:source":"wind","plant:output:electricity":"*",landuse:"industrial"},reference:{key:"plant:source",value:"wind"},terms:["offshore wind","wind park","wind power plant","wind power station","wind turbines","windmills"],name:"Wind Farm"},"power/pole":{icon:"temaki-utility_pole",fields:["ref","operator","height","material","line_attachment"],moreFields:["manufacturer"],geometry:["point","vertex"],tags:{power:"pole"},name:"Power Pole"},"power/substation":{icon:"temaki-power",fields:["substation","operator","building","ref"],moreFields:["gnis/feature_id"],geometry:["area","point"],tags:{power:"substation"},name:"Substation"},"power/switch":{icon:"temaki-power_switch",fields:["switch","operator","location","cables","voltage","ref"],geometry:["point","vertex"],tags:{power:"switch"},name:"Power Switch"},"power/tower":{icon:"temaki-power_tower",fields:["ref","operator","design","height","material","line_attachment"],moreFields:["manufacturer"],geometry:["point","vertex"],terms:["power"],tags:{power:"tower"},matchScore:1.05,name:"High-Voltage Tower"},"power/transformer":{icon:"temaki-power_transformer",fields:["ref","operator","transformer","location","rating","devices","phases"],moreFields:["frequency","manufacturer","voltage/primary","voltage/secondary","voltage/tertiary","windings","windings/configuration"],geometry:["point","vertex"],tags:{power:"transformer"},name:"Transformer"},"public_transport/platform_point":{icon:"temaki-sign_and_bench",fields:["name","network","operator","departures_board","shelter"],moreFields:["bench","bin","gnis/feature_id","level","lit","wheelchair"],geometry:["point"],tags:{public_transport:"platform"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Stop / Platform",matchScore:0.6},"public_transport/platform":{icon:"temaki-sign_and_pedestrian",fields:["ref_platform","network","operator","departures_board","surface"],moreFields:["access","covered","indoor","layer","level","lit","wheelchair"],geometry:["line","area"],tags:{public_transport:"platform"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Platform",matchScore:0.6},"public_transport/platform/aerialway_point":{icon:"maki-aerialway",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",aerialway:"yes"},reference:{key:"public_transport",value:"platform"},searchable:false,name:"Aerialway Stop / Platform"},"public_transport/platform/ferry_point":{icon:"maki-ferry",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",ferry:"yes"},reference:{key:"public_transport",value:"platform"},searchable:false,name:"Ferry Stop / Platform"},"public_transport/platform/light_rail_point":{icon:"temaki-light_rail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",light_rail:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Light Rail Stop / Platform"},"public_transport/platform/monorail_point":{icon:"temaki-monorail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",monorail:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Monorail Stop / Platform"},"public_transport/platform/subway_point":{icon:"temaki-subway",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",subway:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Subway Stop / Platform"},"public_transport/platform/train_point":{icon:"maki-rail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",train:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Train Stop / Platform"},"public_transport/platform/aerialway":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["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 Platform"},"public_transport/platform/bus_point":{icon:"maki-bus",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point","vertex"],tags:{public_transport:"platform",bus:"yes"},addTags:{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"},"public_transport/platform/bus":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",bus:"yes"},reference:{key:"public_transport",value:"platform"},terms:["bus","platform","public transit","public transportation","transit","transportation"],name:"Bus Platform"},"public_transport/platform/ferry":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["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 Platform"},"public_transport/platform/light_rail":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",light_rail:"yes"},addTags:{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 Platform"},"public_transport/platform/monorail":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",monorail:"yes"},addTags:{public_transport:"platform",monorail:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["monorail","platform","public transit","public transportation","rail","transit","transportation"],name:"Monorail Platform"},"public_transport/platform/subway":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",subway:"yes"},addTags:{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 Platform"},"public_transport/platform/train":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",train:"yes"},addTags:{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 Platform"},"public_transport/platform/tram_point":{icon:"temaki-tram",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",tram:"yes"},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/tram":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",tram:"yes"},addTags:{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 Platform"},"public_transport/platform/trolleybus_point":{icon:"temaki-trolleybus",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point","vertex"],tags:{public_transport:"platform",trolleybus:"yes"},addTags:{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"},"public_transport/platform/trolleybus":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{public_transport:"platform",trolleybus:"yes"},reference:{key:"public_transport",value:"platform"},terms:["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Platform"},"public_transport/station_aerialway":{icon:"maki-aerialway",fields:["{public_transport/station}","aerialway/access","aerialway/summer/access"],moreFields:["{public_transport/station}"],geometry:["point","vertex","area"],tags:{aerialway:"station"},addTags:{public_transport:"station",aerialway:"station"},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"},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:["vertex","point","area"],tags:{public_transport:"station",ferry:"yes"},addTags:{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"},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"},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"},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:["vertex","point","area"],tags:{public_transport:"station",train:"yes"},addTags:{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"},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:["air_conditioning","baby_feeding","email","fax","gnis/feature_id","internet_access/fee","internet_access/ssid","level","phone","website","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"},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"},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"},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"},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"},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"},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"],moreFields:["level"],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"},name:"Train Station (Halt / Request)",searchable:false},"railway/platform":{icon:"temaki-sign_and_pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{railway:"platform"},name:"Train Platform",searchable:false},"railway/station":{icon:"maki-rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","vertex","area"],tags:{railway:"station"},matchScore:0.95,name:"Train Station",searchable:false},"railway/tram_stop":{icon:"temaki-tram",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{railway:"tram_stop"},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:[],matchScore:0.85,name:"Abandoned Railway"},"railway/buffer_stop":{icon:"temaki-buffer_stop",geometry:["vertex"],tags:{railway:"buffer_stop"},terms:["stop","halt","buffer"],name:"Buffer Stop"},"railway/construction":{icon:"iD-railway-rail",fields:["name","opening_date","check_date","note","structure","gauge","electrified"],moreFields:["covered","frequency_electrified","highspeed","maxspeed","service_rail","usage_rail","voltage_electrified"],geometry:["line"],tags:{railway:"construction"},name:"Railway Under Construction"},"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:["operator","structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"disused"},terms:[],name:"Disused Railway"},"railway/funicular":{icon:"iD-railway-rail",fields:["name","operator","structure","gauge","service_rail"],moreFields:["covered"],geometry:["line"],terms:["venicular","cliff railway","cable car","cable railway","funicular railway"],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:["{railway/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","operator","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:["{railway/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","operator","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","highspeed","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"rail"},terms:["rail line","railroad track","train track"],name:"Rail"},"railway/rail/highspeed":{icon:"iD-railway-rail",geometry:["line"],tags:{railway:"rail",highspeed:"yes"},reference:{key:"highspeed"},terms:["bullet train","fast rail","high speed rail","highspeed rail","HSR"],name:"High-Speed 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","level","wheelchair"],tags:{railway:"subway_entrance"},terms:["metro","transit"],name:"Subway Entrance"},"railway/subway":{icon:"temaki-subway",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_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:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"tram"},terms:["light rail","streetcar","tram","trolley"],name:"Tram"},"railway/yard":{icon:"maki-rail",fields:["name","operator"],moreFields:["gnis/feature_id"],geometry:["point"],tags:{railway:"yard"},terms:["freight car stop","freight train station","rail freight station","railroad yard","railway yard"],name:"Rail Yard"},relation:{icon:"iD-relation",fields:["name","relation"],geometry:["relation"],tags:{},name:"Relation"},"route/ferry":{icon:"maki-ferry",geometry:["line"],fields:["name","operator","duration","access","toll","to","from"],moreFields:["charge_toll","dog","interval","maxheight","maxweight","network","network/type","opening_hours","ref_route","wheelchair"],tags:{route:"ferry"},terms:["boat","merchant vessel","ship","water bus","water shuttle","water taxi"],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":{icon:"temaki-buoy",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":{icon:"temaki-buoy",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":{icon:"temaki-buoy",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":{icon:"temaki-buoy",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:["air_conditioning","brand","building/levels_building","currency_multi","email","fax","gnis/feature_id","height_building","internet_access","internet_access/fee","internet_access/ssid","level","not/name","phone","ref/vatin","second_hand","stroller","website","wheelchair"],geometry:["point","area"],tags:{shop:"*"},terms:[],name:"Shop"},"shop/boutique":{icon:"maki-shop",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"boutique"},searchable:false,name:"Boutique"},"shop/fashion":{icon:"maki-shop",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"fashion"},searchable:false,name:"Fashion Store"},"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"],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:"fas-tractor",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:"fas-wine-bottle",fields:["{shop}","drive_through"],moreFields:["{shop}","min_age"],geometry:["point","area"],terms:["alcohol","beer","booze","wine"],tags:{shop:"alcohol"},name:"Liquor Store"},"shop/anime":{icon:"fas-dragon",geometry:["point","area"],tags:{shop:"anime"},terms:["manga","japan","cosplay","figurine","dakimakura"],name:"Anime / Manga Shop"},"shop/antiques":{icon:"temaki-furniture",geometry:["point","area"],tags:{shop:"antiques"},name:"Antiques Shop"},"shop/appliance":{icon:"temaki-laundry",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:"fas-baby-carriage",geometry:["point","area"],tags:{shop:"baby_goods"},name:"Baby Goods Store"},"shop/bag":{icon:"fas-suitcase-rolling",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:"fas-bath",geometry:["point","area"],tags:{shop:"bathroom_furnishing"},name:"Bathroom Furnishing Store"},"shop/beauty":{icon:"temaki-lipstick",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:"temaki-tanning",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:"temaki-bottles",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/boat":{icon:"temaki-boat",geometry:["point","area"],terms:["fishing boat","jetski","motorboat","rowboat","sailboat","vessel","watercraft"],tags:{shop:"boat"},name:"Boat Store"},"shop/bookmaker":{icon:"temaki-money_hand",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"bookmaker"},terms:["betting","bookie","gamble","gambling","turf accountant"],name:"Bookmaker"},"shop/books":{icon:"fas-book",fields:["{shop}","internet_access"],moreFields:["{shop}","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{shop:"books"},name:"Book Store"},"shop/brewing_supplies":{icon:"temaki-storage_fermenter",geometry:["point","area"],terms:["brew shop","homebrew supply store"],tags:{shop:"brewing_supplies"},name:"Brewing Supply Store"},"shop/butcher":{icon:"temaki-cleaver",geometry:["point","area"],terms:["chicken","beef","lamb","meat","pork"],tags:{shop:"butcher"},name:"Butcher"},"shop/camera":{icon:"fas-camera-retro",geometry:["point","area"],terms:["camera","film","lens","photo"],tags:{shop:"camera"},name:"Camera Equipment Store"},"shop/candles":{icon:"fas-burn",geometry:["point","area"],tags:{shop:"candles"},terms:["wax"],name:"Candle Shop"},"shop/cannabis":{icon:"fas-cannabis",moreFields:["{shop}","min_age"],geometry:["point","area"],terms:["420","marijuana","pot","reefer","weed"],tags:{shop:"cannabis"},name:"Cannabis Shop"},"shop/car_parts":{icon:"fas-car-battery",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/car/second_hand":{icon:"maki-car",geometry:["point","area"],terms:["automobile","automotive"],tags:{shop:"car",second_hand:"only"},name:"Used 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:"fas-tape",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:"fas-shopping-basket",geometry:["point","area"],tags:{shop:"chemist"},terms:["apothecary","beauty","drug store","drugstore","gift","hair","med*","pharmacy","prescription","tooth"],name:"Drugstore"},"shop/chocolate":{icon:"maki-confectionery",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"},terms:["blouses","boutique","bras","clothes","dresses","fashion","pants","shirts","shorts","skirts","slacks","socks","suits","underwear"],name:"Clothing Store"},"shop/clothes/second_hand":{icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes",second_hand:"only"},terms:["blouses","clothes","consignment","dresses","pants","second hand","shirts","shorts","skirts","slacks","suits","used"],name:"Secondhand Clothing Store"},"shop/clothes/underwear":{icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes",clothes:"underwear"},reference:{key:"clothes",value:"underwear"},terms:["boutique","bras","brassieres","briefs","boxers","fashion","lingerie","panties","slips","socks","stockings","underclothes","undergarments","underpants","undies"],name:"Underwear Store"},"shop/clothes/wedding":{icon:"temaki-gown",geometry:["point","area"],tags:{shop:"clothes",clothes:"wedding"},reference:{key:"clothes",value:"wedding"},terms:["boutique","bridal","bride","bridegroom","bridesmaid","groom","groomsman","tuxedo","wedding dress","wedding gown"],name:"Wedding Clothes Store"},"shop/coffee":{icon:"temaki-coffee",geometry:["point","area"],tags:{shop:"coffee"},name:"Coffee Store"},"shop/computer":{icon:"fas-laptop",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:"fas-shopping-basket",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:"temaki-lipstick",geometry:["point","area"],tags:{shop:"cosmetics"},terms:["make-up","makeup"],name:"Cosmetics Store"},"shop/country_store":{icon:"fas-hat-cowboy-side",geometry:["point","area"],tags:{shop:"country_store"},name:"Country Store"},"shop/craft":{icon:"fas-cut",geometry:["point","area"],tags:{shop:"craft"},terms:["art*","paint*","frame"],name:"Arts & 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/doors":{icon:"fas-door-open",geometry:["point","area"],tags:{shop:"doors"},name:"Door Shop"},"shop/dry_cleaning":{icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{shop:"dry_cleaning"},name:"Dry Cleaner"},"shop/e-cigarette":{icon:"maki-shop",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"e-cigarette"},terms:["electronic","vape","vaping","vapor"],name:"E-Cigarette Shop"},"shop/electrical":{icon:"temaki-power",geometry:["point","area"],terms:["cable","electric","fan","LED","lighting","power","wire"],tags:{shop:"electrical"},name:"Electrical Equipment Store"},"shop/electronics":{icon:"fas-plug",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",fields:["{shop}","min_age"],geometry:["point","area"],terms:["sex","porn"],tags:{shop:"erotic"},name:"Erotic Store"},"shop/erotic/lgbtq":{icon:"maki-shop",geometry:["point","area"],terms:["sex","porn"],tags:{shop:"erotic",lgbtq:"primary"},name:"LGBTQ+ Erotic Store"},"shop/fabric":{icon:"fas-tape",geometry:["point","area"],terms:["sew"],tags:{shop:"fabric"},name:"Fabric Store"},"shop/farm":{icon:"fas-apple-alt",geometry:["point","area"],terms:["baked goods","farm shop","farm stand","fresh food","fruits","greengrocer","organics","vegetables"],tags:{shop:"farm"},name:"Produce Stand"},"shop/fashion_accessories":{icon:"temaki-fashion_accessories",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"fashion_accessories"},terms:["bag","cologne","fragrance","hat","jewellery","purfume","purse","scarf","sunglasses","umbrella","wallet","watch"],name:"Fashion Accessories Store"},"shop/fireplace":{icon:"maki-shop",geometry:["point","area"],terms:["fireplace","stove","masonry heater"],tags:{shop:"fireplace"},name:"Fireplace Store"},"shop/fishing":{icon:"temaki-ice_fishing",geometry:["point","area"],tags:{shop:"fishing"},terms:["bait","fishing line","flies","fly","lure","reel","rod","tackle"],name:"Fishing Shop"},"shop/flooring":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"flooring"},terms:["tile"],name:"Flooring Supply Shop"},"shop/florist":{icon:"maki-florist",geometry:["point","area"],terms:["flower"],tags:{shop:"florist"},name:"Florist"},"shop/frame":{icon:"fas-vector-square",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:"temaki-propane_tank",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/games":{icon:"fas-dice",geometry:["point","area"],tags:{shop:"games"},terms:["board game","card game","dice game","game shop","live action role-playing game","miniatures wargame","strategy game"],name:"Tabletop Game 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:"temaki-propane_tank",geometry:["point","area"],terms:["cng","lpg","natural gas","propane","refill","tank"],tags:{shop:"gas"},name:"Bottled Gas Shop"},"shop/general":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"general"},terms:["village shop"],name:"General Store"},"shop/gift":{icon:"maki-gift",geometry:["point","area"],terms:["souvenir"],tags:{shop:"gift"},name:"Gift Shop"},"shop/greengrocer":{icon:"fas-carrot",geometry:["point","area"],terms:["fruit","produce","vegetable"],tags:{shop:"greengrocer"},name:"Greengrocer"},"shop/hairdresser_supply":{icon:"temaki-hair_care",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:"temaki-hearing_aid",geometry:["point","area"],tags:{shop:"hearing_aids"},name:"Hearing Aids Store"},"shop/herbalist":{icon:"fas-leaf",geometry:["point","area"],tags:{shop:"herbalist"},name:"Herbalist"},"shop/hifi":{icon:"temaki-speaker",geometry:["point","area"],terms:["audio","hi-fi","high fidelity","stereo","video"],tags:{shop:"hifi"},name:"Hifi Store"},"shop/hobby":{icon:"fas-dragon",geometry:["point","area"],tags:{shop:"hobby"},terms:["manga","figurine","model"],name:"Hobby Shop"},"shop/houseware":{icon:"fas-blender",geometry:["point","area"],terms:["home","household","kitchenware"],tags:{shop:"houseware"},name:"Houseware Store"},"shop/hunting":{icon:"temaki-binoculars",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","gold","jeweler","jewellery","jeweller","necklace","pins","ring","silver"],tags:{shop:"jewelry"},name:"Jewelry Store"},"shop/kiosk":{icon:"fas-store",geometry:["point","area"],tags:{shop:"kiosk"},name:"Kiosk"},"shop/kitchen":{icon:"temaki-kitchen_sink",geometry:["point","area"],tags:{shop:"kitchen"},terms:["cabinets","countertops","sinks"],name:"Kitchen Design Store"},"shop/laundry":{icon:"temaki-laundry",fields:["{shop}","self_service"],geometry:["point","area"],tags:{shop:"laundry"},name:"Laundry"},"shop/laundry/self_service":{icon:"temaki-laundry",geometry:["point","area"],tags:{shop:"laundry",self_service:"yes"},terms:["Coin Laundry","Laundromat","Coin Wash","Launderette","Washateria"],name:"Self-Service Laundry"},"shop/leather":{icon:"temaki-handbag",geometry:["point","area"],tags:{shop:"leather"},name:"Leather Store"},"shop/lighting":{icon:"temaki-desk_lamp",geometry:["point","area"],terms:["fluorescent lighting","lamps","LEDs","light fixtures","lightbulbs"],tags:{shop:"lighting"},name:"Lighting Store"},"shop/locksmith":{icon:"fas-key",geometry:["point","area"],terms:["key","lockpick"],tags:{shop:"locksmith"},name:"Locksmith"},"shop/lottery":{icon:"fas-ticket-alt",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"lottery"},terms:["lotto tickets","gamble","gambling","scratch-offs"],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:"fas-crutch",geometry:["point","area"],tags:{shop:"medical_supply"},name:"Medical Supply Store"},"shop/military_surplus":{icon:"temaki-military",geometry:["point","area"],terms:["armor","army-navy store","army surplus","navy surplus","tactical gear","war surplus shop","weapons"],tags:{shop:"military_surplus"},name:"Military Surplus Store"},"shop/mobile_phone":{icon:"fas-mobile-alt",geometry:["point","area"],tags:{shop:"mobile_phone"},name:"Mobile Phone Store"},"shop/money_lender":{icon:"temaki-money_hand",fields:["{shop}","currency_multi"],geometry:["point","area"],tags:{shop:"money_lender"},name:"Money Lender"},"shop/motorcycle_repair":{icon:"temaki-motorcycle_repair",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:"fas-compact-disc",geometry:["point","area"],terms:["tape casettes","CDs","compact discs","vinyl records"],tags:{shop:"music"},name:"Music Store"},"shop/musical_instrument":{icon:"fas-guitar",geometry:["point","area"],terms:["guitar"],tags:{shop:"musical_instrument"},name:"Musical Instrument Store"},"shop/newsagent":{icon:"fas-newspaper",geometry:["point","area"],tags:{shop:"newsagent"},name:"Newspaper/Magazine Shop"},"shop/nutrition_supplements":{icon:"fas-pills",geometry:["point","area"],terms:["health","supplement","vitamin"],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",fields:["{shop}","clothes"],geometry:["point","area"],terms:["camping","climbing","hiking","outfitter","outdoor equipment","outdoor supplies"],tags:{shop:"outdoor"},name:"Outdoors Store"},"shop/outpost":{icon:"maki-shop",geometry:["point","area"],terms:["online","pick up","pickup"],tags:{shop:"outpost"},name:"Online Retailer Outpost"},"shop/paint":{icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint"},name:"Paint Store"},"shop/party":{icon:"temaki-balloon",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:"temaki-money_hand",geometry:["point","area"],tags:{shop:"pawnbroker"},name:"Pawn Shop"},"shop/perfumery":{icon:"temaki-perfume",geometry:["point","area"],tags:{shop:"perfumery"},terms:["cologne","fragrance","purfume"],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:"fas-camera-retro",geometry:["point","area"],terms:["camera","film","lens","photo"],tags:{shop:"photo"},name:"Photography Store"},"shop/pottery":{icon:"temaki-vase",geometry:["point","area"],terms:["ceramic","pot","vase"],tags:{shop:"pottery"},name:"Pottery Store"},"shop/printer_ink":{icon:"fas-print",geometry:["point","area"],terms:["copier ink","fax ink","ink cartridges","toner"],tags:{shop:"printer_ink"},name:"Printer Ink Store"},"shop/psychic":{icon:"temaki-psychic",geometry:["point","area"],tags:{shop:"psychic"},terms:["astrology","crystal ball","divination","fortune teller","seer","spirit"],name:"Psychic"},"shop/pyrotechnics":{icon:"temaki-rocket_firework",geometry:["point","area"],tags:{shop:"pyrotechnics"},terms:["fireworks"],name:"Fireworks Store"},"shop/radiotechnics":{icon:"fas-microchip",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/rental":{icon:"fas-dolly",geometry:["point","area"],tags:{shop:"rental"},name:"Rental Shop"},"shop/scuba_diving":{icon:"temaki-scuba_diving",fields:["{shop}","scuba_diving"],geometry:["point","area"],terms:["diving","scuba"],tags:{shop:"scuba_diving"},name:"Scuba Diving Shop"},"shop/seafood":{icon:"temaki-fish_cleaning",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:"temaki-needle_and_spool",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/spices":{icon:"maki-shop",geometry:["point","area"],terms:["chili","cinnamon","curry","ginger","herbs","pepper","saffron","salt","spice store","spices","turmeric","wasabi"],tags:{shop:"spices"},name:"Spice Shop"},"shop/sports":{icon:"fas-futbol",fields:["name","operator","sport","{shop}"],geometry:["point","area"],tags:{shop:"sports"},terms:["athletics"],name:"Sporting Goods Store"},"shop/stationery":{icon:"fas-paperclip",geometry:["point","area"],terms:["card","paper"],tags:{shop:"stationery"},name:"Stationery Store"},"shop/storage_rental":{icon:"temaki-storage_rental",geometry:["point","area"],tags:{shop:"storage_rental"},terms:["garages"],name:"Storage Rental"},"shop/supermarket":{icon:"maki-grocery",moreFields:["{shop}","diet_multi"],geometry:["point","area"],terms:["grocery","store","shop"],tags:{shop:"supermarket"},name:"Supermarket"},"shop/swimming_pool":{icon:"fas-swimmer",geometry:["point","area"],terms:["hot tub equipment store","hot tub maintenance store","hot tub supply store","pool shop","pool store","swimming pool equipment store","swimming pool installation store","swimming pool maintenance store","swimming pool supply shop"],tags:{shop:"swimming_pool"},name:"Pool Supply Store"},"shop/tailor":{icon:"temaki-needle_and_spool",geometry:["point","area"],terms:["clothes","suit"],tags:{shop:"tailor"},name:"Tailor"},"shop/tattoo":{icon:"maki-shop",moreFields:["{shop}","min_age"],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/telecommunication":{icon:"maki-telephone",geometry:["point","area"],terms:["communication","internet service provider","isp","network","telephone","voice"],tags:{shop:"telecommunication"},name:"Telecom Retail Store"},"shop/ticket":{icon:"fas-ticket-alt",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:"temaki-pipe",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"tobacco"},terms:["cigarettes","cigars"],name:"Tobacco Shop"},"shop/tool_hire":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"tool_hire"},name:"Tool Rental"},"shop/toys":{icon:"fas-rocket",geometry:["point","area"],tags:{shop:"toys"},terms:["games"],name:"Toy Store"},"shop/trade":{icon:"temaki-tools",fields:["name","trade","{shop}"],geometry:["point","area"],tags:{shop:"trade"},name:"Trade Shop"},"shop/travel_agency":{icon:"fas-suitcase",geometry:["point","area"],tags:{shop:"travel_agency"},terms:["cruises","flights","hotels","tickets","travel packages"],name:"Travel Agency"},"shop/tyres":{icon:"temaki-tire",geometry:["point","area"],tags:{shop:"tyres"},name:"Tire Store"},"shop/vacuum_cleaner":{icon:"temaki-vacuum",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",moreFields:["{shop}","min_age"],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:"fas-swimmer",geometry:["point","area"],tags:{shop:"water_sports"},name:"Watersport/Swim Shop"},"shop/water":{icon:"tnp-2009234",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",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"wine"},name:"Wine Shop"},"telecom/data_center":{icon:"fas-server",fields:["name","ref","operator","building_area"],moreFields:["address","gnis/feature_id","phone","website"],geometry:["point","area"],tags:{telecom:"data_center"},terms:["computer systems storage","information technology","server farm","the cloud","telecommunications"],name:"Data Center"},"tourism/alpine_hut":{icon:"temaki-cabin",fields:["name","operator","address","building_area","internet_access","internet_access/fee","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","internet_access/ssid","phone","reservation","website","wheelchair"],geometry:["point","area"],terms:["cabin","climbing hut","lodge","lodging","overnight accommodations","wilderness hut"],tags:{tourism:"alpine_hut"},name:"Alpine Hut"},"tourism/apartment":{icon:"maki-lodging",fields:["name","operator","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["building/levels_building","email","fax","height_building","internet_access/ssid","level","payment_multi","phone","reservation","smoking","website","wheelchair"],geometry:["point","area"],tags:{tourism:"apartment"},terms:["bnb","holiday rental","lodging","overnight accommodations","vacation rental"],name:"Guest Apartment / Condo"},"tourism/aquarium":{icon:"maki-aquarium",fields:["name","operator","address","building_area","opening_hours"],moreFields:["charge_fee","email","fax","fee","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi_fee","phone","ref/vatin","smoking","website","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:["level","material","website"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork"},terms:["mural","sculpture","statue"],name:"Artwork"},"tourism/artwork/bust":{icon:"fas-user-alt",fields:["name","artist","material"],geometry:["point","vertex"],tags:{tourism:"artwork",artwork_type:"bust"},reference:{key:"artwork_type"},terms:["figure"],name:"Bust"},"tourism/artwork/graffiti":{icon:"maki-art-gallery",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"graffiti"},reference:{key:"artwork_type"},terms:["Street Artwork","Guerilla Artwork","Graffiti Artwork"],name:"Graffiti"},"tourism/artwork/installation":{icon:"temaki-sculpture",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"installation"},reference:{key:"artwork_type"},terms:["interactive art","intervention art","modern art"],name:"Art Installation"},"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:"temaki-sculpture",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:"temaki-statue",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"],moreFields:["gnis/feature_id"],geometry:["point","vertex","line","area"],tags:{tourism:"attraction"},matchScore:0.75,name:"Tourist Attraction"},"tourism/camp_pitch":{icon:"maki-campsite",fields:["name","ref"],geometry:["point","area"],terms:["tent","rv"],tags:{tourism:"camp_pitch"},name:"Camp Pitch"},"tourism/camp_site":{icon:"maki-campsite",fields:["name","operator","address","access_simple","capacity","fee","payment_multi_fee","charge_fee"],moreFields:["backcountry","dog","email","fax","gnis/feature_id","group_only","internet_access","internet_access/fee","internet_access/ssid","openfire","opening_hours","phone","power_supply","ref/vatin","reservation","sanitary_dump_station","shower","stars","toilets","website","wheelchair"],geometry:["point","vertex","area"],tags:{tourism:"camp_site"},terms:["caravans","camp ground","camp pitch","camp site","campers","campground","campsite","mobile homes","recreational vehicles","rv","tenting"],name:"Campground"},"tourism/camp_site/backcountry":{icon:"maki-campsite",geometry:["point","vertex","area"],tags:{tourism:"camp_site",backcountry:"yes"},reference:{key:"backcountry"},terms:["alpine camping","backpacking site","backwoods camping","camp ground","camp pitch","camp site","campground","campsite","informal camping","primitive camping"],name:"Backcountry Camping Area"},"tourism/camp_site/group_only":{icon:"maki-campsite",geometry:["point","vertex","area"],tags:{tourism:"camp_site",group_only:"yes"},reference:{key:"group_only"},terms:["camp ground","camp pitch","camp site","campground","campsite","scout camping","youth camping"],name:"Group Camping Area"},"tourism/caravan_site":{icon:"temaki-rv_park",fields:["name","address","capacity","sanitary_dump_station","power_supply","internet_access","internet_access/fee"],moreFields:["charge_fee","email","fax","fee","gnis/feature_id","internet_access/ssid","operator","payment_multi_fee","phone","reservation","smoking","website","wheelchair"],geometry:["point","vertex","area"],terms:["Motor Home","Camper"],tags:{tourism:"caravan_site"},name:"RV Park"},"tourism/chalet":{icon:"temaki-cabin",fields:["name","operator","address","building_area","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access/ssid","payment_multi","phone","reservation","smoking","website","wheelchair"],geometry:["point","area"],terms:["chalet","holiday cabin","holiday cottage","holiday home","lodge","lodging","overnight accommodations","vacation cabin","vacation home"],tags:{tourism:"chalet"},name:"Holiday Cottage"},"tourism/gallery":{icon:"maki-art-gallery",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","ref/vatin","website","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","guest_house","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access/ssid","payment_multi","phone","ref/vatin","reservation","smoking","website","wheelchair"],geometry:["point","area"],tags:{tourism:"guest_house"},terms:["b & b","b and b","B&B","Bed and Breakfast","bnb","lodging","overnight accommodations"],name:"Guest House"},"tourism/hostel":{icon:"temaki-bunk_beds",fields:["{tourism/guest_house}"],moreFields:["{tourism/guest_house}"],geometry:["point","area"],tags:{tourism:"hostel"},terms:["bunk beds","dormitories","dorms","lodging","overnight accommodations"],name:"Hostel"},"tourism/hotel":{icon:"fas-concierge-bell",fields:["{tourism/motel}"],moreFields:["{tourism/motel}","bar","stars"],geometry:["point","area"],tags:{tourism:"hotel"},terms:["concierge","lodge","lodging","overnight accommodations"],name:"Hotel"},"tourism/information":{icon:"maki-information",fields:["information","operator","address","building_area"],moreFields:["level"],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:"fas-map-signs",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:"fas-map",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","internet_access","internet_access/fee"],moreFields:["building/levels_building","email","fax","gnis/feature_id","height_building","internet_access/ssid","phone","website","wheelchair"],geometry:["point","vertex","area"],tags:{tourism:"information",information:"office"},reference:{key:"information",value:"office"},name:"Tourist Information Office"},"tourism/information/route_marker":{icon:"maki-information",fields:["ref","operator","colour","material","elevation"],geometry:["point","vertex"],terms:["cairn","painted blaze","route flag","route marker","stone pile","trail blaze","trail post","way marker"],tags:{tourism:"information",information:"route_marker"},reference:{key:"information",value:"route_marker"},name:"Trail Marker"},"tourism/information/terminal":{icon:"maki-information",fields:["operator"],geometry:["point","vertex"],tags:{tourism:"information",information:"terminal"},reference:{key:"information",value:"terminal"},name:"Information Terminal"},"tourism/motel":{icon:"maki-lodging",fields:["name","brand","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["air_conditioning","brand","building/levels_building","email","fax","gnis/feature_id","height_building","internet_access/ssid","operator","payment_multi","phone","ref/vatin","reservation","smoking","website","wheelchair"],geometry:["point","area"],tags:{tourism:"motel"},terms:["lodging","motor hotel","overnight accommodations"],name:"Motel"},"tourism/museum":{icon:"temaki-museum",fields:["name","operator","operator/type","museum","address","building_area","opening_hours"],moreFields:["air_conditioning","building/levels_building","charge_fee","email","fax","fee","gnis/feature_id","height_building","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],tags:{tourism:"museum"},name:"Museum"},"tourism/museum/history":{icon:"temaki-museum",geometry:["point","area"],terms:["artifacts","dioramas","exhibits","exhibitions","foundation","hall","institution"],tags:{tourism:"museum",museum:"history"},reference:{key:"museum",value:"history"},name:"History Museum"},"tourism/picnic_site":{icon:"maki-picnic-site",fields:["name","operator","address","access_simple","capacity"],moreFields:["charge_fee","fee","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi_fee","phone","reservation","smoking","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:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website","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","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","opening_hours","phone","website"],geometry:["point","area"],tags:{tourism:"trail_riding_station"},name:"Trail Riding Station",matchScore:2},"tourism/viewpoint":{icon:"temaki-binoculars",geometry:["point","vertex"],fields:["direction"],moreFields:["level"],tags:{tourism:"viewpoint"},name:"Viewpoint"},"tourism/wilderness_hut":{icon:"temaki-cabin",fields:["name","operator","address","building_area","fee","payment_multi_fee","charge_fee","fireplace"],moreFields:["gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","reservation","wheelchair"],geometry:["point","area"],terms:["alpine hut","cabin","backcountry hut","bothy","lodge","lodging","overnight accommodations","sleeping shelter","wilderness hut"],tags:{tourism:"wilderness_hut"},name:"Wilderness Hut"},"tourism/zoo":{icon:"temaki-zoo",fields:["name","operator","address","opening_hours","fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","ref/vatin","website","wheelchair"],geometry:["point","area"],terms:["animal"],tags:{tourism:"zoo"},name:"Zoo"},"tourism/zoo/petting":{icon:"fas-horse",geometry:["point","area"],tags:{tourism:"zoo",zoo:"petting_zoo"},reference:{key:"zoo",value:"petting_zoo"},terms:["Children's Zoo","Children's Farm","Petting Farm","farm animals"],name:"Petting Zoo"},"tourism/zoo/safari":{icon:"temaki-zoo",geometry:["point","area"],tags:{tourism:"zoo",zoo:"safari_park"},reference:{key:"zoo",value:"safari_park"},terms:["Drive-Through Zoo","Drive-In Zoo"],name:"Safari Park"},"tourism/zoo/wildlife":{icon:"fas-frog",geometry:["point","area"],tags:{tourism:"zoo",zoo:"wildlife_park"},reference:{key:"zoo",value:"wildlife_park"},terms:["indigenous animals"],name:"Wildlife Park"},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","line","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","line","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","line","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:"fas-directions",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"],moreFields:["gnis/feature_id"],geometry:["relation"],tags:{type:"boundary",boundary:"administrative"},reference:{key:"boundary",value:"administrative"},name:"Administrative Boundary"},"type/connectivity":{icon:"iD-relation",fields:["connectivity"],geometry:["relation"],tags:{type:"connectivity"},name:"Lane Connectivity"},"type/enforcement":{icon:"iD-relation",fields:["enforcement"],geometry:["relation"],tags:{type:"enforcement"},name:"Enforcement"},"type/enforcement/maxspeed":{icon:"iD-relation",fields:["maxspeed"],geometry:["relation"],tags:{type:"enforcement",enforcement:"maxspeed"},reference:{key:"enforcement",value:"maxspeed"},terms:["maxspeed","radar","speed camera"],name:"Speed Limit Enforcement"},"type/public_transport/stop_area_group":{icon:"iD-relation",fields:["name","ref","network","operator"],geometry:["relation"],tags:{type:"public_transport",public_transport:"stop_area_group"},reference:{key:"public_transport",value:"stop_area_group"},name:"Transit Stop Area Group"},"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"],moreFields:["colour","interval","opening_hours","wheelchair"],geometry:["relation"],tags:{type:"route_master"},name:"Route Master"},"type/route":{icon:"iD-route",fields:["name","route","ref_route","operator","network","network/type"],geometry:["relation"],tags:{type:"route"},name:"Route"},"type/route/bicycle":{icon:"maki-bicycle",fields:["name","ref_route","network_bicycle","cycle_network","network/type","to","from"],geometry:["relation"],tags:{type:"route",route:"bicycle"},name:"Cycle Route"},"type/route/bus":{icon:"maki-bus",fields:["{type/route/train}"],moreFields:["{type/route/train}"],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:"maki-ferry",fields:["{route/ferry}"],moreFields:["{route/ferry}"],geometry:["relation"],tags:{type:"route",route:"ferry"},name:"Ferry Route"},"type/route/foot":{icon:"temaki-pedestrian",fields:["name","ref_route","operator","network_foot","network/type","to","from"],geometry:["relation"],tags:{type:"route",route:"foot"},name:"Foot Route"},"type/route/hiking":{icon:"fas-hiking",fields:["name","ref_route","operator","network_foot","network/type","description","distance","to","from"],geometry:["relation"],tags:{type:"route",route:"hiking"},name:"Hiking Route"},"type/route/horse":{icon:"maki-horse-riding",fields:["name","ref_route","operator","network_horse","network/type","description","distance","to","from"],geometry:["relation"],tags:{type:"route",route:"horse"},name:"Riding Route"},"type/route/light_rail":{icon:"temaki-light_rail",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"light_rail"},name:"Light Rail Route"},"type/route/monorail":{icon:"temaki-monorail",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"monorail"},name:"Monorail Route"},"type/route/pipeline":{icon:"iD-pipeline-line",fields:["name","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"pipeline"},name:"Pipeline Route"},"type/route/piste":{icon:"fas-skiing",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-power-line",fields:["name","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"power"},name:"Power Route"},"type/route/road":{icon:"iD-highway-unclassified",fields:["name","ref_route","network_road","network/type","to","from"],geometry:["relation"],tags:{type:"route",route:"road"},name:"Road Route"},"type/route/subway":{icon:"temaki-subway",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"subway"},name:"Subway Route"},"type/route/train":{icon:"iD-railway-rail",fields:["name","ref_route","operator","network","network/type","to","from"],moreFields:["colour","duration","interval","opening_hours","wheelchair"],geometry:["relation"],tags:{type:"route",route:"train"},name:"Train Route"},"type/route/tram":{icon:"temaki-tram",fields:["{type/route/train}"],moreFields:["{type/route/train}"],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-waterway-stream",fields:["name","waterway","ref"],geometry:["relation"],tags:{type:"waterway"},name:"Waterway"},"waterway/riverbank":{icon:"maki-water",geometry:["area"],tags:{waterway:"riverbank"},name:"Riverbank",searchable:false},"waterway/boatyard":{icon:"temaki-boat",fields:["name","operator"],moreFields:["address","email","fax","gnis/feature_id","phone","website","wheelchair"],geometry:["area","vertex","point"],tags:{waterway:"boatyard"},name:"Boatyard"},"waterway/canal":{icon:"iD-waterway-canal",fields:["name","structure_waterway","width","intermittent","lock"],moreFields:["fishing","gnis/feature_id","salt","tidal"],geometry:["line"],tags:{waterway:"canal"},name:"Canal"},"waterway/canal/lock":{icon:"iD-waterway-canal",fields:["name","width","lock"],moreFields:["gnis/feature_id","intermittent","salt","tidal"],geometry:["line"],tags:{waterway:"canal",lock:"yes"},name:"Canal Lock"},"waterway/dam":{icon:"maki-dam",geometry:["point","vertex","line","area"],fields:["name","operator","gnis/feature_id","height","material"],moreFields:["seamark/type","website"],tags:{waterway:"dam"},name:"Dam"},"waterway/ditch":{icon:"iD-waterway-ditch",fields:["{waterway/drain}"],moreFields:["{waterway/drain}"],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"],moreFields:["covered"],geometry:["line"],tags:{waterway:"drain"},name:"Drain"},"waterway/fish_pass":{icon:"temaki-fish_ladder",fields:["name","structure_waterway","width","seasonal"],moreFields:["covered","gnis/feature_id","salt"],geometry:["line"],terms:["eel ladder","eel pass","fish ladder","fish migration","fish passage","fish siphon","fish steps","fish way","fishladder","fishpass","fishsteps","fishway"],tags:{waterway:"fish_pass"},name:"Fish Pass"},"waterway/fuel":{icon:"maki-fuel",fields:["name","operator","address","opening_hours","fuel_multi"],moreFields:["brand","building","email","fax","payment_multi","phone","seamark/type","website","wheelchair"],geometry:["point","area"],terms:["petrol","gas","diesel","boat"],tags:{waterway:"fuel"},name:"Marine Fuel Station"},"waterway/lock_gate":{icon:"maki-dam",geometry:["vertex","line"],fields:["name","ref","height","material"],tags:{waterway:"lock_gate"},addTags:{waterway:"lock_gate","seamark:type":"gate"},terms:["canal"],name:"Lock Gate"},"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:["covered","fishing","gnis/feature_id","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","payment_multi_fee","charge_fee","water_point"],moreFields:["opening_hours","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:["{waterway/stream}"],moreFields:["{waterway/stream}"],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:["covered","fishing","gnis/feature_id","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/tidal_channel":{icon:"iD-waterway-stream",fields:["name","structure_waterway","width","salt","tidal","intermittent"],moreFields:["covered","fishing","gnis/feature_id"],geometry:["line"],terms:["coastal","pill","intertidal","mangroves","marine","salt marsh","tidal creek","tidal flat","tidal inlet","waterway"],tags:{waterway:"tidal_channel"},addTags:{waterway:"tidal_channel",tidal:"yes"},name:"Tidal Channel"},"waterway/water_point":{icon:"maki-drinking-water",fields:["{amenity/water_point}"],moreFields:["{amenity/water_point}"],geometry:["point","vertex","area"],tags:{waterway:"water_point"},terms:["water faucet","water point","water tap","water source","water spigot"],name:"Marine Drinking Water"},"waterway/waterfall":{icon:"maki-waterfall",fields:["name","height","width","intermittent"],moreFields:["gnis/feature_id"],geometry:["vertex"],terms:["fall"],tags:{waterway:"waterfall"},name:"Waterfall"},"waterway/weir":{icon:"maki-dam",fields:["name","operator","height","material"],moreFields:["gnis/feature_id","seamark/type"],geometry:["vertex","line"],terms:["low-head dam","low-rise dam","wier"],tags:{waterway:"weir"},name:"Weir"},"amenity/animal_boarding/PetsHotel":{name:"PetsHotel",icon:"maki-veterinary",imageURL:"https://graph.facebook.com/PetSmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67141961",amenity:"animal_boarding"},addTags:{amenity:"animal_boarding",animal_boarding:"dog;cat",brand:"PetsHotel","brand:wikidata":"Q67141961",name:"PetsHotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ABANCA":{name:"ABANCA",icon:"maki-bank",imageURL:"https://graph.facebook.com/SomosAbanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9598744",amenity:"bank"},addTags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA",official_name:"ABANCA Corporación Bancaria"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ABN AMRO":{name:"ABN AMRO",icon:"maki-bank",imageURL:"https://graph.facebook.com/abnamro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q287471",amenity:"bank"},addTags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"nl:ABN AMRO Group",name:"ABN AMRO",official_name:"ABN AMRO Bank N.V."},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ABSA":{name:"ABSA",icon:"maki-bank",imageURL:"https://graph.facebook.com/AbsaSouthAfrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58641733",amenity:"bank"},addTags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q58641733","brand:wikipedia":"en:Absa Group Limited",name:"ABSA"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/bank/AIB":{name:"AIB",icon:"maki-bank",imageURL:"https://graph.facebook.com/aib/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1642179",amenity:"bank"},addTags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB",official_name:"Allied Irish Banks"},countryCodes:["gb","ie"],terms:["aib bank","allied irish bank"],matchScore:2,suggestion:true},"amenity/bank/AMP":{name:"AMP",icon:"maki-bank",imageURL:"https://graph.facebook.com/AMPaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q295261",amenity:"bank"},addTags:{amenity:"bank",brand:"AMP","brand:wikidata":"Q295261","brand:wikipedia":"en:AMP Limited",name:"AMP",official_name:"AMP Limited"},countryCodes:["au","nz"],terms:["amp bank"],matchScore:2,suggestion:true},"amenity/bank/ANZ":{name:"ANZ",icon:"maki-bank",imageURL:"https://graph.facebook.com/ANZAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714641",amenity:"bank"},addTags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ",official_name:"Australia and New Zealand Banking Group Limited"},countryCodes:["au","nz"],terms:["anz bank"],matchScore:2,suggestion:true},"amenity/bank/ASB Bank":{name:"ASB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ASBBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297214",amenity:"bank"},addTags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ATB Financial":{name:"ATB Financial",icon:"maki-bank",imageURL:"https://graph.facebook.com/ATBFinancial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q298762",amenity:"bank"},addTags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial",official_name:"Alberta Treasury Branches"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/AXA":{name:"AXA",icon:"maki-bank",imageURL:"https://graph.facebook.com/axainsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q160054",amenity:"bank"},addTags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Access Bank":{name:"Access Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AccessBankPlc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4672418",amenity:"bank"},addTags:{amenity:"bank",brand:"Access Bank","brand:wikidata":"Q4672418","brand:wikipedia":"en:Access Bank plc",name:"Access Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/ActivoBank":{name:"ActivoBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ActivoBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9581725",amenity:"bank"},addTags:{amenity:"bank",brand:"ActivoBank","brand:wikidata":"Q9581725","brand:wikipedia":"pt:ActivoBank",name:"ActivoBank"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Addiko Bank":{name:"Addiko Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/addiko.ba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27926559",amenity:"bank"},addTags:{amenity:"bank",brand:"Addiko Bank","brand:wikidata":"Q27926559","brand:wikipedia":"en:Addiko Bank",name:"Addiko Bank"},countryCodes:["ba","hr","me","rs","si"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Affinity Credit Union":{name:"Affinity Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/affinitycu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4688969",amenity:"bank"},addTags:{amenity:"bank",brand:"Affinity Credit Union","brand:wikidata":"Q4688969","brand:wikipedia":"en:Affinity Credit Union",name:"Affinity Credit Union"},countryCodes:["ca"],terms:["affinity"],matchScore:2,suggestion:true},"amenity/bank/Agribank (USA)":{name:"Agribank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/63806221089/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4693829",amenity:"bank"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693829","brand:wikipedia":"en:AgriBank",name:"Agribank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Agribank (Vietnam)":{name:"Agribank (Vietnam)",icon:"maki-bank",imageURL:"https://graph.facebook.com/AgribankVN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1924723",amenity:"bank"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q1924723","brand:wikipedia":"vi:Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam",name:"Agribank",official_name:"Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam","official_name:en":"Vietnam Bank for Agriculture and Rural Development"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Agribank (Zimbabwe)":{name:"Agribank (Zimbabwe)",icon:"maki-bank",imageURL:"https://graph.facebook.com/agribankzim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4693887",amenity:"bank"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693887","brand:wikipedia":"en:Agricultural Development Bank of Zimbabwe",name:"Agribank"},countryCodes:["zw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Akbank":{name:"Akbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Akbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q416624",amenity:"bank"},addTags:{amenity:"bank",brand:"Akbank","brand:wikidata":"Q416624","brand:wikipedia":"tr:Akbank",name:"Akbank"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Aktia":{name:"Aktia",icon:"maki-bank",imageURL:"https://graph.facebook.com/aktia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4353753",amenity:"bank"},addTags:{amenity:"bank",brand:"Aktia","brand:wikidata":"Q4353753","brand:wikipedia":"fi:Aktia Pankki",name:"Aktia"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Alior Bank":{name:"Alior Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AliorBankSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9148395",amenity:"bank"},addTags:{amenity:"bank",brand:"Alior Bank","brand:wikidata":"Q9148395","brand:wikipedia":"pl:Alior Bank",name:"Alior Bank"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Allahabad Bank":{name:"Allahabad Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AllahabadBankOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2018840",amenity:"bank"},addTags:{amenity:"bank",brand:"Allahabad Bank","brand:wikidata":"Q2018840","brand:wikipedia":"en:Allahabad Bank",name:"Allahabad Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Allied Bank (Pakistan)":{name:"Allied Bank (Pakistan)",icon:"maki-bank",imageURL:"https://graph.facebook.com/alliedbankpk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4732553",amenity:"bank"},addTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732553","brand:wikipedia":"en:Allied Bank Limited",name:"Allied Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Allied Bank (defunct bank in Philipiness)":{name:"Allied Bank (defunct bank in Philipiness)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAllied%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4732555",amenity:"bank"},addTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Alpha Bank":{name:"Alpha Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/125297404838251/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q747394",amenity:"bank"},addTags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Alterna Savings":{name:"Alterna Savings",icon:"maki-bank",imageURL:"https://graph.facebook.com/alternasavings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4736322",amenity:"bank"},addTags:{amenity:"bank",brand:"Alterna Savings","brand:wikidata":"Q4736322","brand:wikipedia":"en:Alterna Savings",name:"Alterna Savings"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/America First Credit Union":{name:"America First Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/americafirstcu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4742758",amenity:"bank"},addTags:{amenity:"bank",brand:"America First Credit Union","brand:wikidata":"Q4742758","brand:wikipedia":"en:America First Credit Union",name:"America First Credit Union",short_name:"AFCU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Andhra Bank":{name:"Andhra Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/official.andhrabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003476",amenity:"bank"},addTags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Antonveneta":{name:"Antonveneta",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633689",amenity:"bank"},addTags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Apple Bank":{name:"Apple Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AppleBankfan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4781125",amenity:"bank"},addTags:{amenity:"bank",brand:"Apple Bank","brand:wikidata":"Q4781125","brand:wikipedia":"en:Apple Bank for Savings",name:"Apple Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Argenta":{name:"Argenta",icon:"maki-bank",imageURL:"https://graph.facebook.com/argenta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q932856",amenity:"bank"},addTags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"nl:Argenta Groep",name:"Argenta"},countryCodes:["be","lu","nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Arvest Bank":{name:"Arvest Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ArvestBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4802393",amenity:"bank"},addTags:{amenity:"bank",brand:"Arvest Bank","brand:wikidata":"Q4802393","brand:wikipedia":"en:Arvest Bank",name:"Arvest Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Asia United Bank":{name:"Asia United Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AUB.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4806482",amenity:"bank"},addTags:{amenity:"bank",brand:"Asia United Bank","brand:wikidata":"Q4806482","brand:wikipedia":"tl:Asia United Bank",name:"Asia United Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Askari Bank":{name:"Askari Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/askaribankpakistan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807137",amenity:"bank"},addTags:{amenity:"bank",brand:"Askari Bank","brand:wikidata":"Q4807137","brand:wikipedia":"en:Askari Bank",name:"Askari Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Associated Bank":{name:"Associated Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/associatedbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4809155",amenity:"bank"},addTags:{amenity:"bank",brand:"Associated Bank","brand:wikidata":"Q4809155","brand:wikipedia":"en:Associated Banc-Corp",name:"Associated Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Attijariwafa Bank":{name:"Attijariwafa Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AttijariWB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758052",amenity:"bank"},addTags:{amenity:"bank",brand:"Attijariwafa Bank","brand:wikidata":"Q758052","brand:wikipedia":"en:Attijariwafa Bank",name:"Attijariwafa Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Axis Bank":{name:"Axis Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/axisbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003549",amenity:"bank"},addTags:{amenity:"bank",brand:"Axis Bank","brand:wikidata":"Q2003549","brand:wikipedia":"en:Axis Bank",name:"Axis Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BAC Credomatic":{name:"BAC Credomatic",icon:"maki-bank",imageURL:"https://graph.facebook.com/BACCredomaticSV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5715556",amenity:"bank"},addTags:{amenity:"bank",brand:"BAC Credomatic","brand:wikidata":"Q5715556","brand:wikipedia":"en:BAC Credomatic",name:"BAC Credomatic"},terms:["bac"],matchScore:2,suggestion:true},"amenity/bank/BAI":{name:"BAI",icon:"maki-bank",imageURL:"https://graph.facebook.com/bai.angola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806172",amenity:"bank"},addTags:{amenity:"bank",brand:"BAI","brand:wikidata":"Q806172","brand:wikipedia":"en:Banco Angolano de Investimentos",name:"BAI",official_name:"Banco Angolano de Investimentos"},countryCodes:["ao"],terms:["banco africano de investimentos"],matchScore:2,suggestion:true},"amenity/bank/BAWAG PSK":{name:"BAWAG PSK",icon:"maki-bank",imageURL:"https://graph.facebook.com/bawag.psk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q379938",amenity:"bank"},addTags:{amenity:"bank",brand:"BAWAG PSK","brand:wikidata":"Q379938","brand:wikipedia":"en:BAWAG P.S.K.",name:"BAWAG PSK"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BB&T":{name:"BB&T",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBTBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795486",amenity:"bank"},addTags:{amenity:"bank",brand:"BB&T","brand:wikidata":"Q795486","brand:wikipedia":"en:BB&T",name:"BB&T",official_name:"Branch Banking and Trust Company"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBBank":{name:"BBBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBBank.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795504",amenity:"bank"},addTags:{amenity:"bank",brand:"BBBank","brand:wikidata":"Q795504","brand:wikipedia":"en:BBBank",name:"BBBank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA":{name:"BBVA",icon:"maki-bank",imageURL:"https://graph.facebook.com/GrupoBBVA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806189",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA","brand:wikidata":"Q806189","brand:wikipedia":"en:Banco Bilbao Vizcaya Argentaria",name:"BBVA",official_name:"Banco Bilbao Vizcaya Argentaria"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Bancomer":{name:"BBVA Bancomer",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVASeguros.mx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2876794",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"BBVA Bancomer"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Compass":{name:"BBVA Compass",icon:"maki-bank",imageURL:"https://graph.facebook.com/bbvaintheusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835088",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Compass","brand:wikidata":"Q4835088","brand:wikipedia":"en:BBVA Compass",name:"BBVA Compass",official_name:"BBVA Compass Bancshares"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Continental":{name:"BBVA Continental",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVAenPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835089",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"BBVA Continental"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BBVA Francés":{name:"BBVA Francés",icon:"maki-bank",imageURL:"https://graph.facebook.com/bbva.argentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2876788",amenity:"bank"},addTags:{amenity:"bank",brand:"BBVA Francés","brand:en":"BBVA France","brand:fr":"BBVA France","brand:wikidata":"Q2876788","brand:wikipedia":"en:BBVA Francés",name:"BBVA Francés","name:en":"BBVA France","name:fr":"BBVA Francés"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BCA":{name:"BCA",icon:"maki-bank",imageURL:"https://graph.facebook.com/316954705121733/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806626",amenity:"bank"},addTags:{amenity:"bank",brand:"BCA","brand:wikidata":"Q806626","brand:wikipedia":"id:Bank Central Asia",name:"BCA",official_name:"Bank Central Asia"},terms:["bank bca"],matchScore:2,suggestion:true},"amenity/bank/BCEE":{name:"BCEE",icon:"maki-bank",imageURL:"https://graph.facebook.com/spuerkeess/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q668996",amenity:"bank"},addTags:{amenity:"bank",brand:"BCEE","brand:wikidata":"Q668996","brand:wikipedia":"fr:Banque et caisse d'épargne de l'État",name:"BCEE",official_name:"Banque et Caisse d'Épargne de l'État"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BCI":{name:"BCI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBci/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882083",amenity:"bank"},addTags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI",official_name:"Banco de Crédito e Inversiones","official_name:en":"Bank of Credit and Investments","official_name:es":"Banco de Crédito e Inversiones"},terms:["banco bci"],matchScore:2,suggestion:true},"amenity/bank/BCP (Bolivia)":{name:"BCP (Bolivia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodeCreditoBolivia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16826675",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP",official_name:"Banco de Crédito de Bolivia","official_name:en":"Credit Bank of Bolivia","official_name:es":"Banco de Crédito de Bolivia"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BCP (France)":{name:"BCP (France)",icon:"maki-bank",imageURL:"https://graph.facebook.com/millenniumbcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118581",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},countryCodes:["fr"],terms:["banque bcp","bcp"],matchScore:2,suggestion:true},"amenity/bank/BCP (Luxembourg)":{name:"BCP (Luxembourg)",icon:"maki-bank",imageURL:"https://graph.facebook.com/millenniumbcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118581",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},countryCodes:["lu"],terms:["banque bcp","bcp"],matchScore:2,suggestion:true},"amenity/bank/BCP (Peru)":{name:"BCP (Peru)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancodecreditobcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854124",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP",official_name:"Banco de Crédito del Perú","official_name:en":"Credit Bank of Peru","official_name:es":"Banco de Crédito del Perú"},countryCodes:["pe"],terms:["banco de crédito del perú"],matchScore:2,suggestion:true},"amenity/bank/BCR (Banca Comercială Română)":{name:"BCR (Banca Comercială Română)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BCRRomania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806149",amenity:"bank"},addTags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q806149","brand:wikipedia":"ro:Banca Comercială Română",name:"BCR",official_name:"Banca Comercială Română","official_name:en":"Romanian Commercial Bank","official_name:ro":"Banca Comercială Română"},countryCodes:["ro"],terms:["banca comercială română"],matchScore:2,suggestion:true},"amenity/bank/BCR (Costa Rica)":{name:"BCR (Costa Rica)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBCR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6951632",amenity:"bank"},addTags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q6951632","brand:wikipedia":"es:Banco de Costa Rica",name:"BCR",official_name:"Banco de Costa Rica","official_name:en":"Bank of Costa Rica","official_name:es":"Banco de Costa Rica"},countryCodes:["cr"],terms:["banco de costa rica"],matchScore:2,suggestion:true},"amenity/bank/BDM":{name:"BDM",icon:"maki-bank",imageURL:"https://graph.facebook.com/bdmbot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883022",amenity:"bank"},addTags:{amenity:"bank",brand:"BDM","brand:wikidata":"Q2883022","brand:wikipedia":"fr:Banque de développement du Mali",name:"BDM",official_name:"Banque du Développement du Mali","official_name:en":"Mali Development Bank","official_name:fr":"Banque du Développement du Mali"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BDO":{name:"BDO",icon:"maki-bank",imageURL:"https://graph.facebook.com/BDOUnibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854129",amenity:"bank"},addTags:{alt_name:"Banco de Oro",amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BECU":{name:"BECU",icon:"maki-bank",imageURL:"https://graph.facebook.com/becu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835409",amenity:"bank"},addTags:{amenity:"bank",brand:"BECU","brand:wikidata":"Q4835409","brand:wikipedia":"en:BECU",name:"BECU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BGL BNP Paribas":{name:"BGL BNP Paribas",icon:"maki-bank",imageURL:"https://graph.facebook.com/BGL.BNP.Paribas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795898",amenity:"bank"},addTags:{amenity:"bank",brand:"BGL BNP Paribas","brand:wikidata":"Q795898","brand:wikipedia":"fr:BGL BNP Paribas",name:"BGL BNP Paribas"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BGŻ BNP Paribas":{name:"BGŻ BNP Paribas",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNPParibasBankPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20744004",amenity:"bank"},addTags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q20744004","brand:wikipedia":"pl:BNP Paribas Bank Polska",name:"BGŻ BNP Paribas"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BIAT":{name:"BIAT",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanqueInternationaleArabedeTunisie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q690739",amenity:"bank"},addTags:{amenity:"bank",brand:"BIAT","brand:wikidata":"Q690739","brand:wikipedia":"fr:Banque internationale arabe de Tunisie",name:"BIAT",official_name:"Banque internationale arabe de Tunisie","official_name:en":"Arab International Bank of Tunisia","official_name:fr":"Banque internationale arabe de Tunisie"},countryCodes:["tn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BIDV":{name:"BIDV",icon:"maki-bank",imageURL:"https://graph.facebook.com/BIDVbankvietnam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1003180",amenity:"bank"},addTags:{amenity:"bank",brand:"BIDV","brand:wikidata":"Q1003180","brand:wikipedia":"vi:Ngân hàng Đầu tư và Phát triển Việt Nam",name:"BIDV",official_name:"Ngân hàng Đầu tư và Phát triển Việt Nam","official_name:en":"Bank for Investment and Development of Vietnam","official_name:vi":"Ngân hàng Đầu tư và Phát triển Việt Nam"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BIL":{name:"BIL",icon:"maki-bank",imageURL:"https://graph.facebook.com/BIL1856/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883404",amenity:"bank"},addTags:{amenity:"bank",brand:"BIL","brand:wikidata":"Q2883404","brand:wikipedia":"en:Banque Internationale à Luxembourg",name:"BIL",official_name:"Banque Internationale à Luxembourg","official_name:en":"International Bank in Luxembourg","official_name:fr":"Banque Internationale à Luxembourg"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BMCE Bank":{name:"BMCE Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BMCEBankOfAfrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2300433",amenity:"bank"},addTags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank",official_name:"البنك المغربي للتجارة الخارجية‎","official_name:ar":"البنك المغربي للتجارة الخارجية‎","official_name:en":"Moroccan Bank of Foreign Commerce"},countryCodes:["ma"],terms:["bmce"],matchScore:2,suggestion:true},"amenity/bank/BMCI":{name:"BMCI",icon:"maki-bank",imageURL:"https://graph.facebook.com/bmcigroupebnpparibas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883409",amenity:"bank"},addTags:{amenity:"bank",brand:"BMCI","brand:wikidata":"Q2883409","brand:wikipedia":"ar:البنك المغربي للتجارة والصناعة",name:"BMCI"},countryCodes:["ma"],terms:["bmci bank"],matchScore:2,suggestion:true},"amenity/bank/BMN":{name:"BMN",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBMN%20nuevo%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3754900",amenity:"bank"},addTags:{amenity:"bank",brand:"BMN","brand:wikidata":"Q3754900","brand:wikipedia":"es:Banco Mare Nostrum",name:"BMN",official_name:"Banco Mare Nostrum"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BMO Harris Bank (USA)":{name:"BMO Harris Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bmoharrisbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835981",amenity:"bank"},addTags:{amenity:"bank",brand:"BMO Harris Bank","brand:wikidata":"Q4835981","brand:wikipedia":"en:BMO Harris Bank",name:"BMO Harris Bank"},countryCodes:["us"],terms:["bank of montreal","bmo","bmo bank of montreal","bmo harris bank","harris bank"],matchScore:2,suggestion:true},"amenity/bank/BMO (Canada)":{name:"BMO (Canada)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BMOcommunity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806693",amenity:"bank"},addTags:{amenity:"bank",brand:"BMO","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"BMO",official_name:"Bank of Montreal"},countryCodes:["ca"],terms:["bank of montreal","banque de montréal","bmo","bmo bank of montreal","bmo banque de montréal"],matchScore:2,suggestion:true},"amenity/bank/BNA (Algeria)":{name:"BNA (Algeria)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bnalgerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883410",amenity:"bank"},addTags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883410","brand:wikipedia":"fr:Banque nationale d'Algérie",name:"BNA",official_name:"Banque nationale d'Algérie","official_name:en":"National Bank of Algeria","official_name:fr":"Banque nationale d'Algérie"},countryCodes:["dz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNA (Tunisia)":{name:"BNA (Tunisia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanqueNationaleAgricole/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883413",amenity:"bank"},addTags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883413","brand:wikipedia":"fr:Banque nationale agricole",name:"BNA"},countryCodes:["tn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNDA":{name:"BNDA",icon:"maki-bank",imageURL:"https://graph.facebook.com/MaliBNDA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30594734",amenity:"bank"},addTags:{amenity:"bank",brand:"BNDA","brand:wikidata":"Q30594734","brand:wikipedia":"en:Banque Nationale de Développement Agricole",name:"BNDA",official_name:"Banque Nationale de Développement Agricole"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNI":{name:"BNI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882611",amenity:"bank"},addTags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI",official_name:"Bank Negara Indonesia","official_name:en":"State Bank of Indonesia","official_name:id":"Bank Negara Indonesia"},terms:["bank bni"],matchScore:2,suggestion:true},"amenity/bank/BNL":{name:"BNL",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNLBNPParibas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2201225",amenity:"bank"},addTags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"it:Banca Nazionale del Lavoro",name:"BNL",official_name:"Banca Nazionale del Lavoro","official_name:en":"National Labor Bank","official_name:it":"Banca Nazionale del Lavoro"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNP Paribas":{name:"BNP Paribas",icon:"maki-bank",imageURL:"https://graph.facebook.com/mabanque.bnpparibas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q499707",amenity:"bank"},addTags:{amenity:"bank",brand:"BNP Paribas","brand:wikidata":"Q499707","brand:wikipedia":"en:BNP Paribas",name:"BNP Paribas"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BNP Paribas Fortis":{name:"BNP Paribas Fortis",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNPParibasFortisBelgique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q796827",amenity:"bank"},addTags:{amenity:"bank",brand:"BNP Paribas Fortis","brand:wikidata":"Q796827","brand:wikipedia":"en:BNP Paribas Fortis",name:"BNP Paribas Fortis"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BOC":{name:"BOC",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofchina.cn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q790068",amenity:"bank"},addTags:{amenity:"bank",brand:"BOC","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"BOC",official_name:"Bank of China"},terms:[],matchScore:2,suggestion:true},"amenity/bank/BOM":{name:"BOM",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankofMelbourne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856151",amenity:"bank"},addTags:{amenity:"bank",brand:"BOM","brand:wikidata":"Q4856151","brand:wikipedia":"en:Bank of Melbourne (2011)",name:"BOM",official_name:"Bank of Melbourne"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BOQ":{name:"BOQ",icon:"maki-bank",imageURL:"https://graph.facebook.com/BOQOnline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856173",amenity:"bank"},addTags:{amenity:"bank",brand:"BOQ","brand:wikidata":"Q4856173","brand:wikipedia":"en:Bank of Queensland",name:"BOQ",official_name:"Bank of Queensland"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BPC":{name:"BPC",icon:"maki-bank",imageURL:"https://graph.facebook.com/BpcBancoDePoupancaECredito/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854132",amenity:"bank"},addTags:{amenity:"bank",brand:"BPC","brand:wikidata":"Q4854132","brand:wikipedia":"en:Banco de Poupança e Crédito",name:"BPC",official_name:"Banco de Poupança e Crédito"},countryCodes:["ao"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BPER Banca":{name:"BPER Banca",icon:"maki-bank",imageURL:"https://graph.facebook.com/BPERbanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806167",amenity:"bank"},addTags:{amenity:"bank",brand:"BPER Banca","brand:wikidata":"Q806167","brand:wikipedia":"it:BPER Banca",name:"BPER Banca",official_name:"Banca Popolare dell'Emilia Romagna"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BPI (Global)":{name:"BPI (Global)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bpi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2501256",amenity:"bank"},addTags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI",official_name:"Bank of the Philippine Islands"},terms:["bpi family savings bank"],matchScore:2,suggestion:true},"amenity/bank/BRD":{name:"BRD",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRDGroupeSocieteGenerale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q796927",amenity:"bank"},addTags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BRED":{name:"BRED",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRED.Banque.Populaire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2877455",amenity:"bank"},addTags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED",official_name:"Banque régionale d'escompte et de dépôts","official_name:en":"Regional Discount and Deposit Bank","official_name:fr":"Banque régionale d'escompte et de dépôts"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BRI":{name:"BRI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRIofficialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q623042",amenity:"bank"},addTags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI",official_name:"Bank Rakyat Indonesia","official_name:en":"People's Bank of Indonesia","official_name:id":"Bank Rakyat Indonesia"},countryCodes:["id"],terms:["bank bri"],matchScore:2,suggestion:true},"amenity/bank/BTN":{name:"BTN",icon:"maki-bank",imageURL:"https://graph.facebook.com/www.btn.co.id/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12474534",amenity:"bank"},addTags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:id":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN","name:id":"BTN",official_name:"Bank Tabungan Negara","official_name:en":"State Savings Bank","official_name:id":"Bank Tabungan Negara"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BW-Bank":{name:"BW-Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/LBBW.Stuttgart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q798891",amenity:"bank"},addTags:{amenity:"bank",brand:"BW-Bank","brand:de":"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:de":"BW-Bank","name:en":"BW-Bank"},countryCodes:["de"],terms:["baden-württembergische bank"],matchScore:2,suggestion:true},"amenity/bank/Banamex":{name:"Banamex",icon:"maki-bank",imageURL:"https://graph.facebook.com/Citibanamex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q749474",amenity:"bank"},addTags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex",official_name:"Grupo Financiero Banamex","official_name:en":"Banamex Financial Group","official_name:es":"Grupo Financiero Banamex"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Intesa":{name:"Banca Intesa",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancaintesa.rs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q647092",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa","name:en":"Intesa Bank","name:it":"Banca Intesa"},countryCodes:["it","rs"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca March":{name:"Banca March",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/529243270367309824/JFWCTY94_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q578252",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Mediolanum":{name:"Banca Mediolanum",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaMediolanum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633712",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Mediolanum","brand:wikidata":"Q3633712","brand:wikipedia":"en:Banca Mediolanum",name:"Banca Mediolanum"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Bari":{name:"Banca Popolare di Bari",icon:"maki-bank",imageURL:"https://graph.facebook.com/popolarebari/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633730",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Bari","brand:wikidata":"Q3633730","brand:wikipedia":"en:Banca Popolare di Bari",name:"Banca Popolare di Bari"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Milano":{name:"Banca Popolare di Milano",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBPM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806154",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:en":"Popular Bank of Milan","brand:it":"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano","name:en":"Popular Bank of Milan","name:it":"Banca Popolare di Milano"},countryCodes:["it"],terms:["bpm"],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Novara":{name:"Banca Popolare di Novara",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633742",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:en":"Popular Bank of Novara","brand:it":"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara","name:en":"Popular Bank of Novara","name:it":"Banca Popolare di Novara"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Sondrio":{name:"Banca Popolare di Sondrio",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q686176",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:en":"Popular Bank of Sandrio","brand:it":"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio","name:en":"Popular Bank of Sandrio","name:it":"Banca Popolare di Sondrio"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Verona":{name:"Banca Popolare di Verona",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3167468",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:en":"Popular Bank of Verona","brand:it":"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona","name:en":"Popular Bank of Verona","name:it":"Banca Popolare di Verona"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Vicenza":{name:"Banca Popolare di Vicenza",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3127200",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:en":"Popular Bank of Vicenza","brand:it":"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza","name:en":"Popular Bank of Vicena","name:it":"Banca Popolare di Vicenza"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Românească":{name:"Banca Românească",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaRomaneascaOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854052",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Românească","brand:en":"Romanian Bank","brand:ro":"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"ro:Banca Românească",name:"Banca Românească","name:en":"Popular Bank of Vicena","name:ro":"Banca Românească"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Sella":{name:"Banca Sella",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancasella/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633749",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Sella","brand:en":"Sella Bank","brand:it":"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella","name:en":"Sella Bank","name:it":"Banca Sella"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Transilvania":{name:"Banca Transilvania",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaTransilvania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806161",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Transilvania","brand:en":"Transilvania Bank","brand:ro":"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania","name:en":"Transilvania Bank","name:ro":"Banca Transilvania"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancaribe":{name:"Bancaribe",icon:"maki-bank",imageURL:"https://graph.facebook.com/Bancaribe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717827",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"},countryCodes:["ve"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco AV Villas":{name:"Banco AV Villas",icon:"maki-bank",imageURL:"https://graph.facebook.com/AVVillas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854068",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco AV Villas","brand:en":"Bank of Villas","brand:es":"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas","name:en":"Bank of Villas","name:es":"Banco AV Villas"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Agrario":{name:"Banco Agrario",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancoagrario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20013358",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Agrario","brand:en":"Agrarian Bank","brand:wikidata":"Q20013358","brand:wikipedia":"es:Banco Agrario de Colombia",name:"Banco Agrario","name:en":"Agrarian Bank","name:es":"Banco Agrario",official_name:"Banco Agrario de Colombia","official_name:en":"Agrarian Bank of Colombia","official_name:es":"Banco Agrario de Colombia"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Azteca":{name:"Banco Azteca",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoAzteca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854076",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Azteca","brand:en":"Aztec Bank","brand:es":"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca","name:en":"Aztec Bank","name:es":"Banco Azteca"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco BPI (Portugal)":{name:"Banco BPI (Portugal)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancobpi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q537886",amenity:"bank"},addTags:{amenity:"bank",brand:"Branco BPI","brand:wikidata":"Q537886","brand:wikipedia":"en:Banco Português de Investimento",name:"Banco BPI",official_name:"Banco Português de Investimento",short_name:"BPI"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco BPM":{name:"Banco BPM",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBPM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27331643",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco BPM","brand:en":"BPM Bank","brand:es":"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM","name:en":"BPM Bank","name:es":"Banco BPM"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco CTT":{name:"Banco CTT",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q65161642",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco CTT","brand:wikidata":"Q65161642","brand:wikipedia":"pt:Banco CTT",name:"Banco CTT"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Caja Social":{name:"Banco Caja Social",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoCajaSocial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717869",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Caja Social","brand:en":"Social Housing Bank","brand:es":"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social","name:en":"Social Housing Bank","name:es":"Banco Caja Social"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Ciudad":{name:"Banco Ciudad",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancociudad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856204",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Ciudad","brand:en":"City Bank","brand:es":"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad","name:en":"City Bank","name:es":"Banco Ciudad",official_name:"Banco Ciudad de Buenos Aires","official_name:en":"Bank of the City of Buenos Aires","official_name:es":"Banco Ciudad de Buenos Aires"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Continental (Paraguay)":{name:"Banco Continental (Paraguay)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bcontinentalpy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62054564",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q62054564",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Continental (Peru)":{name:"Banco Continental (Peru)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVAenPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835089",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Estado":{name:"Banco Estado",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoEstado/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5718188",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Estado","brand:en":"State Bank","brand:es":"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado","name:en":"State Bank","name:es":"Banco Estado",official_name:"Banco del Estado de Chile","official_name:en":"Bank of the State of Chile","official_name:es":"Banco del Estado de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Falabella":{name:"Banco Falabella",icon:"maki-bank",imageURL:"https://graph.facebook.com/248982132664061/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854088",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Falabella","brand:en":"Falabella Bank","brand:es":"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella","name:en":"Falabella Bank","name:es":"Banco Falabella"},countryCodes:["cl","co","pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Fassil":{name:"Banco Fassil",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancofassil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118592",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Fassil","brand:en":"Fassil Bank","brand:es":"Banco Fassil","brand:wikidata":"Q62118592",name:"Banco Fassil","name:en":"Fassil Bank","name:es":"Banco Fassil"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco G&T Continental":{name:"Banco G&T Continental",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoGTC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717949",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco G&T Continental","brand:en":"G&T Continental Bank","brand:es":"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental","name:en":"G&T Continental Bank","name:es":"Banco G&T Continental"},countryCodes:["gt","sv"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco General":{name:"Banco General",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancogeneral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27618271",amenity:"bank"},addTags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:es":"BW-Bank","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General","name:en":"General Bank","name:es":"Banco General"},countryCodes:["cr","pa"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Industrial":{name:"Banco Industrial",icon:"maki-bank",imageURL:"https://graph.facebook.com/bindARG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16489444",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Industrial","brand:en":"Industrial Bank","brand:es":"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial","name:en":"Industrial Bank","name:es":"Banco Industrial"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Internacional (Chile)":{name:"Banco Internacional (Chile)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/438324350148571136/fCNvpo-F_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q56605586",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q56605586","brand:wikipedia":"es:Banco Internacional (Chile)",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Internacional (Ecuador)":{name:"Banco Internacional (Ecuador)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/986297558493487104/4Y3z4QEF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q806187",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q806187","brand:wikipedia":"es:Banco Internacional",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Metropolitano":{name:"Banco Metropolitano",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanmetCuba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118612",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Metropolitano","brand:en":"Metroplitan Bank","brand:es":"Banco Metropolitano","brand:wikidata":"Q62118612",name:"Banco Metropolitano","name:en":"Metropolitan Bank","name:es":"Banco Metropolitano"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Nacional":{name:"Banco Nacional",icon:"maki-bank",imageURL:"https://graph.facebook.com/bnmascerca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2917708",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Nacional de Costa Rica","brand:en":"National Bank of Costa Rica","brand:es":"Banco Nacional de Costa Rica","brand:wikidata":"Q2917708","brand:wikipedia":"es:Banco Nacional de Costa Rica",name:"Banco Nacional","name:en":"National Bank","name:es":"Banco Nacional",official_name:"Banco Nacional de Costa Rica","official_name:en":"National Bank of Costa Rica","official_name:es":"Banco Nacional de Costa Rica",short_name:"BNCR"},countryCodes:["cr","pa"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Nación":{name:"Banco Nación",icon:"maki-bank",imageURL:"https://graph.facebook.com/banconacion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883376",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Nación","brand:en":"Nation Bank","brand:es":"Banco Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación","name:en":"Nation Bank","name:es":"Banco Nación",official_name:"Banco de la Nación Argentina","official_name:en":"Bank of the Argentine Nation","official_name:es":"Banco de la Nación Argentina"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Pastor":{name:"Banco Pastor",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosantander/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806193",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Pastor","brand:en":"Shepherd Bank","brand:es":"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor","name:en":"Shepherd Bank","name:es":"Banco Pastor",official_name:"Banco Popular Pastor","official_name:en":"Popular Shepherd Bank","official_name:es":"Banco Popular Pastor"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Pichincha":{name:"Banco Pichincha",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoPichinchaEcuador/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854135",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Pichincha","brand:en":"Pichincha Bank","brand:es":"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha","name:en":"Pichincha Bank","name:es":"Banco Pichincha"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Popular de Ahorro":{name:"Banco Popular de Ahorro",icon:"maki-bank",imageURL:"https://graph.facebook.com/bpa.cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118626",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Popular de Ahorro","brand:en":"Popular Saving Bank","brand:es":"Banco Popular de Ahorro","brand:wikidata":"Q62118626",name:"Banco Popular de Ahorro","name:en":"Popular Saving Bank","name:es":"Banco Popular de Ahorro"},countryCodes:["cu"],terms:["bpa"],matchScore:2,suggestion:true},"amenity/bank/Banco Provincia":{name:"Banco Provincia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancoprovincia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856209",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Provincia","brand:en":"Province Bank","brand:es":"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia","name:en":"Province Bank","name:es":"Banco Provincia",official_name:"Banco de la Provincia de Buenos Aires","official_name:en":"Bank of the Province of Buenos Aires","official_name:es":"Banco de la Provincia de Buenos Aires"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sabadell":{name:"Banco Sabadell",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosabadell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q762330",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sabadell","brand:ca":"Banc Sabadell","brand:es":"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell","name:ca":"Banc Sabadell","name:es":"Banco Sabadell",official_name:"Banco de Sabadell, S.A."},countryCodes:["es"],terms:["banc sabadell","sabadell"],matchScore:2,suggestion:true},"amenity/bank/Banco Santa Fe":{name:"Banco Santa Fe",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSantaFe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6046871",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Santa Fe","brand:en":"Santa Fe Bank","brand:es":"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe","name:en":"Santa Fe Bank","name:es":"Banco Santa Fe",official_name:"Nuevo Banco de Santa Fe","official_name:en":"New Bank of Santa Fe","official_name:es":"Nuevo Banco de Santa Fe"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Santander":{name:"Banco Santander",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosantander/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6496310",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Santander","brand:en":"Santander Bank","brand:es":"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander","name:en":"Santander Bank","name:es":"Banco Santander",official_name:"Santander Group"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sol (Angola)":{name:"Banco Sol (Angola)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosolangola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118744",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118744",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"},countryCodes:["ao"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sol (Bolivia)":{name:"Banco Sol (Bolivia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSolidarioBolivia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118746",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118746",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Unión":{name:"Banco Unión",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoUnionSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72315494",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Unión","brand:en":"Union Bank","brand:es":"Banco Unión","brand:wikidata":"Q72315494",name:"Banco Unión","name:en":"Union Bank","name:es":"Banco Unión"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Bogotá":{name:"Banco de Bogotá",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodeBogota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854122",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Bogotá","brand:en":"Bank of Bogota","brand:es":"Banco de Bogotá","brand:wikidata":"Q4854122","brand:wikipedia":"es:Banco de Bogotá",name:"Banco de Bogotá","name:en":"Bank of Bogota","name:es":"Banco de Bogotá"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Chile":{name:"Banco de Chile",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancochile.cl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882085",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Chile","brand:en":"Bank of Chile","brand:es":"Banco de Chile","brand:wikidata":"Q2882085","brand:wikipedia":"es:Banco de Chile",name:"Banco de Chile","name:en":"Bank of Chile","name:es":"Banco de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Desarrollo Banrural":{name:"Banco de Desarrollo Banrural",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanruralHonduras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5719130",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Desarrollo Banrural","brand:en":"Bank of Banrural Development","brand:es":"Banco de Desarrollo Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banco de Desarrollo Banrural","name:en":"Bank of Banrural Development","name:es":"Banco de Desarrollo Banrural"},countryCodes:["gt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Fomento Angola (BFA)":{name:"Banco de Fomento Angola (BFA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/Banco.BFA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806197",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Fomento Angola (BFA)","brand:en":"Angola Development Bank (BFA)","brand:es":"Banco de Fomento Angola (BFA)","brand:wikidata":"Q806197","brand:wikipedia":"de:Banco de Fomento Angola",name:"Banco de Fomento Angola (BFA)","name:en":"Angola Development Bank (BFA)","name:es":"Banco de Fomento Angola (BFA)"},countryCodes:["ao"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Occidente":{name:"Banco de Occidente",icon:"maki-bank",imageURL:"https://graph.facebook.com/BcoOccidente/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854127",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Occidente","brand:wikidata":"Q4854127","brand:wikipedia":"es:Banco de Occidente (Colombia)",name:"Banco de Occidente"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de Venezuela":{name:"Banco de Venezuela",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodeVenezuelaOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q517093",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de Venezuela","brand:wikidata":"Q517093","brand:wikipedia":"es:Banco de Venezuela",name:"Banco de Venezuela"},countryCodes:["ve"],terms:["de venezuela"],matchScore:2,suggestion:true},"amenity/bank/Banco de la Nación (Argentina)":{name:"Banco de la Nación (Argentina)",icon:"maki-bank",imageURL:"https://graph.facebook.com/banconacion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883376",amenity:"bank"},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"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco de la Nación (Peru)":{name:"Banco de la Nación (Peru)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodelaNacion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856206",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q4856206","brand:wikipedia":"en:Bank of the Nation (Peru)",name:"Banco de la Nación"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco del Austro":{name:"Banco del Austro",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancodelaustro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122344",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco del Austro","brand:wikidata":"Q62122344",name:"Banco del Austro"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco di Napoli":{name:"Banco di Napoli",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633835",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco di Napoli","brand:wikidata":"Q3633835","brand:wikipedia":"en:Banco di Napoli",name:"Banco di Napoli"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco di Sardegna":{name:"Banco di Sardegna",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q806205",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco di Sardegna","brand:wikidata":"Q806205","brand:wikipedia":"en:Banco di Sardegna",name:"Banco di Sardegna"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco do Brasil":{name:"Banco do Brasil",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancodobrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q610817",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco do Brasil","brand:wikidata":"Q610817","brand:wikipedia":"en:Banco do Brasil",name:"Banco do Brasil"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco do Nordeste":{name:"Banco do Nordeste",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancodonordeste/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854137",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco do Nordeste","brand:wikidata":"Q4854137","brand:wikipedia":"en:Banco do Nordeste",name:"Banco do Nordeste"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancolombia":{name:"Bancolombia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancolombia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806206",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancolombia","brand:wikidata":"Q806206","brand:wikipedia":"en:Bancolombia",name:"Bancolombia"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancomer":{name:"Bancomer",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVASeguros.mx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2876794",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"Bancomer"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancpost":{name:"Bancpost",icon:"maki-bank",imageURL:"https://graph.facebook.com/1408419985932200/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854143",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancpost","brand:wikidata":"Q4854143","brand:wikipedia":"ro:Bancpost",name:"Bancpost"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banesco":{name:"Banesco",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanescoBancoUniversal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854841",amenity:"bank"},addTags:{amenity:"bank",brand:"Banesco","brand:wikidata":"Q4854841","brand:wikipedia":"en:Banesco",name:"Banesco"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bangkok Bank":{name:"Bangkok Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/924817393049677824/zctRzkcO_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q806483",amenity:"bank"},addTags:{amenity:"bank",brand:"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"Bangkok Bank"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Al Habib":{name:"Bank Al Habib",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankalhabiblimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4034833",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Al Habib","brand:wikidata":"Q4034833","brand:wikipedia":"ur:بينک الحبيب لمیٹڈ",name:"Bank Al Habib"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Alfalah":{name:"Bank Alfalah",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankAlfalahOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855895",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Alfalah","brand:wikidata":"Q4855895","brand:wikipedia":"en:Bank Alfalah",name:"Bank Alfalah"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Austria":{name:"Bank Austria",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/941602537043525632/UALD6dxn_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q697619",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Austria","brand:wikidata":"Q697619","brand:wikipedia":"en:Bank Austria",name:"Bank Austria"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Danamon":{name:"Bank Danamon",icon:"maki-bank",imageURL:"https://graph.facebook.com/DanamonIndonesia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855913",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Danamon","brand:wikidata":"Q4855913","brand:wikipedia":"en:Bank Danamon",name:"Bank Danamon"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Islam":{name:"Bank Islam",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankIslamFB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4115279",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Islam","brand:wikidata":"Q4115279","brand:wikipedia":"en:Bank Islam Malaysia",name:"Bank Islam"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Mandiri":{name:"Bank Mandiri",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankmandiricare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806639",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Mandiri","brand:wikidata":"Q806639","brand:wikipedia":"en:Bank Mandiri",name:"Bank Mandiri"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Mandiri Syariah":{name:"Bank Mandiri Syariah",icon:"maki-bank",imageURL:"https://graph.facebook.com/syariahmandiri/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12474533",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Mandiri Syariah","brand:wikidata":"Q12474533","brand:wikipedia":"id:Bank Syariah Mandiri",name:"Bank Mandiri Syariah"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Mega":{name:"Bank Mega",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankMegaID/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12474504",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Mega","brand:wikidata":"Q12474504","brand:wikipedia":"id:Bank Mega",name:"Bank Mega"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Muamalat":{name:"Bank Muamalat",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankMuamalatIndonesia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855949",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Muamalat","brand:wikidata":"Q4855949","brand:wikipedia":"en:Bank Muamalat",name:"Bank Muamalat"},countryCodes:["id","my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Pekao":{name:"Bank Pekao",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankpekaosa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806642",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Pekao","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Bank Pekao"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank Rakyat":{name:"Bank Rakyat",icon:"maki-bank",imageURL:"https://graph.facebook.com/myBANKRAKYAT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855964",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Rakyat","brand:wikidata":"Q4855964","brand:wikipedia":"ms:Bank Rakyat",name:"Bank Rakyat"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Africa":{name:"Bank of Africa",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofafrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882627",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Africa","brand:wikidata":"Q2882627","brand:wikipedia":"en:Bank of Africa Group",name:"Bank of Africa",short_name:"BOA"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of America":{name:"Bank of America",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankofAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487907",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of America","brand:wikidata":"Q487907","brand:wikipedia":"en:Bank of America",name:"Bank of America"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Baroda":{name:"Bank of Baroda",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofbaroda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003797",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Baroda","brand:wikidata":"Q2003797","brand:wikipedia":"en:Bank of Baroda",name:"Bank of Baroda"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Ceylon":{name:"Bank of Ceylon",icon:"maki-bank",imageURL:"https://graph.facebook.com/BANKOFCEYLON/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882652",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Ceylon","brand:wikidata":"Q2882652","brand:wikipedia":"en:Bank of Ceylon",name:"Bank of Ceylon"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Commerce":{name:"Bank of Commerce",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4856092",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Commerce","brand:wikidata":"Q4856092","brand:wikipedia":"en:Bank of Commerce",name:"Bank of Commerce"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Cyprus":{name:"Bank of Cyprus",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankofCyprusOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806678",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Cyprus","brand:wikidata":"Q806678","brand:wikipedia":"en:Bank of Cyprus",name:"Bank of Cyprus"},countryCodes:["cy","gr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of India":{name:"Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankOfIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2004439",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of India","brand:wikidata":"Q2004439","brand:wikipedia":"en:Bank of India",name:"Bank of India"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Ireland":{name:"Bank of Ireland",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankofIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806689",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Ireland","brand:wikidata":"Q806689","brand:wikipedia":"en:Bank of Ireland",name:"Bank of Ireland"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Maharashtra":{name:"Bank of Maharashtra",icon:"maki-bank",imageURL:"https://graph.facebook.com/BOM1685/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2004304",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Maharashtra","brand:wikidata":"Q2004304","brand:wikipedia":"en:Bank of Maharashtra",name:"Bank of Maharashtra"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of New Zealand":{name:"Bank of New Zealand",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNZBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806687",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of New Zealand","brand:wikidata":"Q806687","brand:wikipedia":"en:Bank of New Zealand",name:"Bank of New Zealand"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Scotland":{name:"Bank of Scotland",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofscotland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q627381",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of Scotland","brand:wikidata":"Q627381","brand:wikipedia":"en:Bank of Scotland",name:"Bank of Scotland"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of the West":{name:"Bank of the West",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankoftheWest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2881919",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank of the West","brand:wikidata":"Q2881919","brand:wikipedia":"en:Bank of the West",name:"Bank of the West"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bankia":{name:"Bankia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankia.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806807",amenity:"bank"},addTags:{amenity:"bank",brand:"Bankia","brand:wikidata":"Q806807","brand:wikipedia":"en:Bankia",name:"Bankia"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bankinter":{name:"Bankinter",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankinter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806808",amenity:"bank"},addTags:{amenity:"bank",brand:"Bankinter","brand:wikidata":"Q806808","brand:wikipedia":"es:Bankinter",name:"Bankinter"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bankwest":{name:"Bankwest",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankwest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856817",amenity:"bank"},addTags:{amenity:"bank",brand:"Bankwest","brand:wikidata":"Q4856817","brand:wikipedia":"en:Bankwest",name:"Bankwest"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banner Bank":{name:"Banner Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/bannerbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856910",amenity:"bank"},addTags:{amenity:"bank",brand:"Banner Bank","brand:wikidata":"Q4856910","brand:wikipedia":"en:Banner Bank",name:"Banner Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banorte":{name:"Banorte",icon:"maki-bank",imageURL:"https://graph.facebook.com/banorte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806914",amenity:"bank"},addTags:{amenity:"bank",brand:"Banorte","brand:wikidata":"Q806914","brand:wikipedia":"en:Banorte",name:"Banorte"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Atlantique":{name:"Banque Atlantique",icon:"maki-bank",imageURL:"https://graph.facebook.com/BqAtlantiqueOfficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882890",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Atlantique","brand:wikidata":"Q2882890","brand:wikipedia":"en:Atlantic Bank Group",name:"Banque Atlantique"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Laurentienne":{name:"Banque Laurentienne",icon:"maki-bank",imageURL:"https://graph.facebook.com/BLaurentienne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1360087",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Laurentienne","brand:wikidata":"Q1360087","brand:wikipedia":"en:Laurentian Bank of Canada",name:"Banque Laurentienne"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Populaire (France)":{name:"Banque Populaire (France)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1044103146405064704/MNLRD2Pq_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q846647",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q846647","brand:wikipedia":"fr:Banque populaire",name:"Banque Populaire"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque Populaire (Maroc)":{name:"Banque Populaire (Maroc)",icon:"maki-bank",imageURL:"https://graph.facebook.com/PopulaireEtDigitale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883441",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q2883441","brand:wikipedia":"en:Banque Populaire du Maroc",name:"Banque Populaire"},countryCodes:["de","es","fr","gb","it","ma","nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque de France":{name:"Banque de France",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanquedeFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806950",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque de France","brand:wikidata":"Q806950","brand:wikipedia":"en:Bank of France",name:"Banque de France"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque de l'Habitat du Mali":{name:"Banque de l'Habitat du Mali",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4857076",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque de l'Habitat du Mali","brand:wikidata":"Q4857076","brand:wikipedia":"en:Banque de l'Habitat du Mali",name:"Banque de l'Habitat du Mali"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banrisul":{name:"Banrisul",icon:"maki-bank",imageURL:"https://graph.facebook.com/banrisul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4857098",amenity:"bank"},addTags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banrural":{name:"Banrural",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanruralHonduras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5719130",amenity:"bank"},addTags:{amenity:"bank",brand:"Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banrural"},countryCodes:["gt","hn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Barclays":{name:"Barclays",icon:"maki-bank",imageURL:"https://graph.facebook.com/BarclaysUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q245343",amenity:"bank"},addTags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"},terms:["barclays bank"],matchScore:2,suggestion:true},"amenity/bank/Bcc":{name:"Bcc",icon:"maki-bank",imageURL:"https://graph.facebook.com/BCCRomaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25060394",amenity:"bank"},addTags:{amenity:"bank",brand:"Bcc","brand:wikidata":"Q25060394","brand:wikipedia":"en:Banca di Credito Cooperativo di Roma",name:"Bcc"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Belfius":{name:"Belfius",icon:"maki-bank",imageURL:"https://graph.facebook.com/belfius/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1956014",amenity:"bank"},addTags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bendigo Bank":{name:"Bendigo Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BendigoBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4887077",amenity:"bank"},addTags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Berliner Volksbank":{name:"Berliner Volksbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BerlinerVolksbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q821855",amenity:"bank"},addTags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bicentenario":{name:"Bicentenario",icon:"maki-bank",imageURL:"https://graph.facebook.com/BicentenarioBU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5728123",amenity:"bank"},addTags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"},countryCodes:["ve"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bicici":{name:"Bicici",icon:"maki-bank",imageURL:"https://graph.facebook.com/BICICIGroupeBNPParibas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1667302",amenity:"bank"},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"},countryCodes:["ci"],terms:["agence bicici"],matchScore:2,suggestion:true},"amenity/bank/Bradesco":{name:"Bradesco",icon:"maki-bank",imageURL:"https://graph.facebook.com/bradesco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806181",amenity:"bank"},addTags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"},countryCodes:["br"],terms:["banco bradesco"],matchScore:2,suggestion:true},"amenity/bank/Budapest Bank":{name:"Budapest Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/budapestbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27493463",amenity:"bank"},addTags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CBAO":{name:"CBAO",icon:"maki-bank",imageURL:"https://graph.facebook.com/161410284020244/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q532104",amenity:"bank"},addTags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"},countryCodes:["sn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CEC Bank":{name:"CEC Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/521658591374182/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1023306",amenity:"bank"},addTags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIB Bank":{name:"CIB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/with.cib.hu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839566",amenity:"bank"},addTags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/CIBC":{name:"CIBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/CIBC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q666694",amenity:"bank"},addTags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"},countryCodes:["ca"],terms:["cibc banking centre"],matchScore:2,suggestion:true},"amenity/bank/CIC":{name:"CIC",icon:"maki-bank",imageURL:"https://graph.facebook.com/cic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q746525",amenity:"bank"},addTags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIH Bank":{name:"CIH Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/cihbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3006220",amenity:"bank"},addTags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"},countryCodes:["ma"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIMB Bank":{name:"CIMB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/CIMBMalaysia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3045976",amenity:"bank"},addTags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIMB Niaga":{name:"CIMB Niaga",icon:"maki-bank",imageURL:"https://graph.facebook.com/CIMBIndonesia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5011747",amenity:"bank"},addTags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CNEP":{name:"CNEP",icon:"maki-bank",imageURL:"https://graph.facebook.com/CNEPOfficielle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2931752",amenity:"bank"},addTags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"},countryCodes:["dz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CRDB Bank":{name:"CRDB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/crdbbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5013848",amenity:"bank"},addTags:{amenity:"bank",brand:"CRDB Bank","brand:wikidata":"Q5013848","brand:wikipedia":"en:CRDB Bank",name:"CRDB Bank"},countryCodes:["tz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caisse d'Épargne":{name:"Caisse d'Épargne",icon:"maki-bank",imageURL:"https://graph.facebook.com/Caisse.Epargne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1547738",amenity:"bank"},addTags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"fr:Caisse d'épargne (banque)",name:"Caisse d'Épargne"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Caixa Econômica Federal (Brazil)":{name:"Caixa Econômica Federal (Brazil)",icon:"maki-bank",imageURL:"https://graph.facebook.com/caixa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q835283",amenity:"bank"},addTags:{amenity:"bank",brand:"Caixa Econômica Federal","brand:wikidata":"Q835283","brand:wikipedia":"pt:Caixa Econômica Federal",name:"Caixa Econômica Federal"},countryCodes:["br"],terms:["caixa","caixabank"],matchScore:2,suggestion:true},"amenity/bank/Caixa Geral de Depósitos":{name:"Caixa Geral de Depósitos",icon:"maki-bank",imageURL:"https://graph.facebook.com/anossacaixa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1026044",amenity:"bank"},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"},countryCodes:["es","fr","pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caixabank (Spain)":{name:"Caixabank (Spain)",icon:"maki-bank",imageURL:"https://graph.facebook.com/CaixaBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q847225",amenity:"bank"},addTags:{amenity:"bank",brand:"Caixabank","brand:wikidata":"Q847225","brand:wikipedia":"en:CaixaBank",name:"Caixabank"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Duero":{name:"Caja Duero",icon:"maki-bank",imageURL:"https://graph.facebook.com/222871461403445/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3821055",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Duero","brand:wikidata":"Q3821055","brand:wikipedia":"es:Caja Duero",name:"Caja Duero"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja España":{name:"Caja España",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q966985",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Rural":{name:"Caja Rural",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCaja%20Rural.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3649971",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Rural de Jaén":{name:"Caja Rural de Jaén",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCaja%20Rural.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q18720350",amenity:"bank"},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"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CajaSur":{name:"CajaSur",icon:"maki-bank",imageURL:"https://graph.facebook.com/Cajasur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3751637",amenity:"bank"},addTags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cajamar":{name:"Cajamar",icon:"maki-bank",imageURL:"https://graph.facebook.com/cajamar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8254971",amenity:"bank"},addTags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/California Coast Credit Union":{name:"California Coast Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/CalCoastCU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25025281",amenity:"bank"},addTags:{amenity:"bank",brand:"California Coast Credit Union","brand:wikidata":"Q25025281","brand:wikipedia":"en:California Coast Credit Union",name:"California Coast Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Canara Bank":{name:"Canara Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/canarabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003777",amenity:"bank"},addTags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Capital Bank":{name:"Capital Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5035481",amenity:"bank"},addTags:{amenity:"bank",brand:"Capital Bank","brand:wikidata":"Q5035481","brand:wikipedia":"en:Capital Bank Financial",name:"Capital Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Capital One":{name:"Capital One",icon:"maki-bank",imageURL:"https://graph.facebook.com/capitalone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1034654",amenity:"bank"},addTags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"},countryCodes:["us"],terms:["capital one bank"],matchScore:2,suggestion:true},"amenity/bank/Carige":{name:"Carige",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/608212417395499008/oUMlcP6e_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3633695",amenity:"bank"},addTags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cariparma":{name:"Cariparma",icon:"maki-bank",imageURL:"https://graph.facebook.com/CreditAgricoleItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2938832",amenity:"bank"},addTags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Carisbo":{name:"Carisbo",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3661937",amenity:"bank"},addTags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Casden":{name:"Casden",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2930976",amenity:"bank"},addTags:{amenity:"bank",brand:"Casden","brand:wikidata":"Q2930976","brand:wikipedia":"fr:CASDEN Banque populaire",name:"Casden"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cassa di Risparmio del Veneto":{name:"Cassa di Risparmio del Veneto",icon:"maki-bank",imageURL:"https://graph.facebook.com/CassadiRisparmiodelVeneto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3661909",amenity:"bank"},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"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CatalunyaCaixa":{name:"CatalunyaCaixa",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20cx%20original.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3750952",amenity:"bank"},addTags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cathay Bank":{name:"Cathay Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/cathaybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4189507",amenity:"bank"},addTags:{amenity:"bank",brand:"Cathay Bank","brand:wikidata":"Q4189507","brand:wikipedia":"en:Cathay Bank",name:"Cathay Bank"},countryCodes:["cn","tw","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Central Bank of India":{name:"Central Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/CentralBankofIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2007090",amenity:"bank"},addTags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Chase":{name:"Chase",icon:"maki-bank",imageURL:"https://graph.facebook.com/chase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q524629",amenity:"bank"},addTags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"},terms:["chase bank"],matchScore:2,suggestion:true},"amenity/bank/China Bank":{name:"China Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/chinabank.ph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5100080",amenity:"bank"},addTags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/China Bank Savings":{name:"China Bank Savings",icon:"maki-bank",imageURL:"https://graph.facebook.com/cbschinabanksavings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18387359",amenity:"bank"},addTags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/China Construction Bank":{name:"China Construction Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/225342697629586/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26299",amenity:"bank"},addTags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank",short_name:"CCB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Citibank":{name:"Citibank",icon:"maki-bank",imageURL:"https://graph.facebook.com/citi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q857063",amenity:"bank"},addTags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank",short_name:"Citi"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Citizens Bank (Eastern USA)":{name:"Citizens Bank (Eastern USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/citizensbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5122694",amenity:"bank"},addTags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q5122694","brand:wikipedia":"en:Citizens Financial Group",name:"Citizens Bank",short_name:"Citizens"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Citizens Bank (Kentucky)":{name:"Citizens Bank (Kentucky)",icon:"maki-bank",imageURL:"https://graph.facebook.com/citizensbankofkentucky/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5122711",amenity:"bank"},addTags:{alt_name:"Citizens Bank of Kentucky",amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q5122711","brand:wikipedia":"en:Citizens National Bank (Eastern Kentucky)",name:"Citizens Bank",official_name:"Citizens National Bank",short_name:"Citizens"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Citizens Bank (Nepal)":{name:"Citizens Bank (Nepal)",icon:"maki-bank",imageURL:"https://graph.facebook.com/ctznbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13186934",amenity:"bank"},addTags:{amenity:"bank",brand:"Citizens Bank International","brand:wikidata":"Q13186934","brand:wikipedia":"en:Citizens Bank International",name:"Citizens Bank",official_name:"Citizens Bank International Ltd.",short_name:"Citizens"},countryCodes:["np"],terms:[],matchScore:2,suggestion:true},"amenity/bank/City National Bank (California)":{name:"City National Bank (California)",icon:"maki-bank",imageURL:"https://graph.facebook.com/CityNationalBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5123314",amenity:"bank"},addTags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q5123314","brand:wikipedia":"en:City National Bank (California)",name:"City National Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/City National Bank (Florida)":{name:"City National Bank (Florida)",icon:"maki-bank",imageURL:"https://graph.facebook.com/CityNationalBankFL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16958644",amenity:"bank"},addTags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q16958644","brand:wikipedia":"en:City National Bank of Florida",name:"City National Bank",official_name:"City National Bank of Florida"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Clydesdale Bank":{name:"Clydesdale Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/clydesdalebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q971680",amenity:"bank"},addTags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikidata":"Q971680","brand:wikipedia":"en:Clydesdale Bank",name:"Clydesdale Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Coast Capital Savings":{name:"Coast Capital Savings",icon:"maki-bank",imageURL:"https://graph.facebook.com/coastcapitalsavings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5138088",amenity:"bank"},addTags:{amenity:"bank",brand:"Coast Capital Savings","brand:wikidata":"Q5138088","brand:wikipedia":"en:Coast Capital Savings",name:"Coast Capital Savings",official_name:"Coast Capital Savings Federal Credit Union"},countryCodes:["ca"],terms:["coast capital","coast capital savings credit union"],matchScore:2,suggestion:true},"amenity/bank/Columbia Bank (New Jersey)":{name:"Columbia Bank (New Jersey)",icon:"maki-bank",imageURL:"https://graph.facebook.com/columbiabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62084096",amenity:"bank"},addTags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084096",name:"Columbia Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Columbia Bank (Washington)":{name:"Columbia Bank (Washington)",icon:"maki-bank",imageURL:"https://graph.facebook.com/columbiastatebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62084089",amenity:"bank"},addTags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084089",name:"Columbia Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Comerica Bank":{name:"Comerica Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/comerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1114148",amenity:"bank"},addTags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commerce Bank":{name:"Commerce Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/commercebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5152411",amenity:"bank"},addTags:{amenity:"bank",brand:"Commerce Bank","brand:wikidata":"Q5152411","brand:wikipedia":"en:Commerce Bancshares",name:"Commerce Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commercial Bank of Ceylon PLC":{name:"Commercial Bank of Ceylon PLC",icon:"maki-bank",imageURL:"https://graph.facebook.com/combanksl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5152468",amenity:"bank"},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"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commerzbank":{name:"Commerzbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/commerzbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157617",amenity:"bank"},addTags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commonwealth Bank":{name:"Commonwealth Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/commonwealthbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q285328",amenity:"bank"},addTags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Community Bank":{name:"Community Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/communitybankna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5154635",amenity:"bank"},addTags:{amenity:"bank",brand:"Community Bank","brand:wikidata":"Q5154635","brand:wikipedia":"en:Community Bank, N.A.",name:"Community Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Corporation Bank":{name:"Corporation Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/corporationbank.co.in/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003387",amenity:"bank"},addTags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credem":{name:"Credem",icon:"maki-bank",imageURL:"https://graph.facebook.com/credem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3696881",amenity:"bank"},addTags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credicoop":{name:"Credicoop",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancocredicoopcl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854086",amenity:"bank"},addTags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credit Suisse":{name:"Credit Suisse",icon:"maki-bank",imageURL:"https://graph.facebook.com/creditsuisse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q372657",amenity:"bank"},addTags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credito Valtellinese":{name:"Credito Valtellinese",icon:"maki-bank",imageURL:"https://graph.facebook.com/Creval/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3696888",amenity:"bank"},addTags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crelan":{name:"Crelan",icon:"maki-bank",imageURL:"https://graph.facebook.com/Crelan.Banque/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q389872",amenity:"bank"},addTags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Agricole":{name:"Crédit Agricole",icon:"maki-bank",imageURL:"https://graph.facebook.com/CreditAgricole/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q590952",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Maritime":{name:"Crédit Maritime",icon:"maki-bank",imageURL:"https://graph.facebook.com/CreditMaritimeGrandOuest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17176866",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel":{name:"Crédit Mutuel",icon:"maki-bank",imageURL:"https://graph.facebook.com/creditmutuel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q642627",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel de Bretagne":{name:"Crédit Mutuel de Bretagne",icon:"maki-bank",imageURL:"https://graph.facebook.com/GroupeArkea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3006236",amenity:"bank"},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"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit du Nord":{name:"Crédit du Nord",icon:"maki-bank",imageURL:"https://graph.facebook.com/creditdunord/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3006209",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédito Agrícola":{name:"Crédito Agrícola",icon:"maki-bank",imageURL:"https://graph.facebook.com/grupocreditoagricola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10262017",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Danske Bank":{name:"Danske Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/DanskeBankDanmark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1636974",amenity:"bank"},addTags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"},countryCodes:["dk","fi","gb","lt","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Davivienda":{name:"Davivienda",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoDavivienda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5242054",amenity:"bank"},addTags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"es:Davivienda",name:"Davivienda"},countryCodes:["co","cr","hn","pa","sv"],terms:["banco davivienda"],matchScore:2,suggestion:true},"amenity/bank/Denizbank":{name:"Denizbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/DenizBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1115064",amenity:"bank"},addTags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Desjardins":{name:"Desjardins",icon:"maki-bank",imageURL:"https://graph.facebook.com/desjardins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2933350",amenity:"bank"},addTags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"},countryCodes:["ca"],terms:["caisse desjardins"],matchScore:2,suggestion:true},"amenity/bank/Deutsche Bank":{name:"Deutsche Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/DeutscheBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66048",amenity:"bank"},addTags:{amenity:"bank",brand:"Deutsche Bank","brand:wikidata":"Q66048","brand:wikipedia":"en:Deutsche Bank",name:"Deutsche Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Dollar Bank":{name:"Dollar Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/dollarbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5289205",amenity:"bank"},addTags:{amenity:"bank",brand:"Dollar Bank","brand:wikidata":"Q5289205","brand:wikipedia":"en:Dollar Bank",name:"Dollar Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Dubai Islamic Bank":{name:"Dubai Islamic Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/dib.uae/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5310570",amenity:"bank"},addTags:{amenity:"bank",brand:"Dubai Islamic Bank","brand:wikidata":"Q5310570","brand:wikipedia":"en:Dubai Islamic Bank",name:"Dubai Islamic Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/EastWest Unibank":{name:"EastWest Unibank",icon:"maki-bank",imageURL:"https://graph.facebook.com/EastWestBanker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5327595",amenity:"bank"},addTags:{amenity:"bank",brand:"EastWest Unibank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Unibank"},countryCodes:["ph"],terms:["eastwest bank"],matchScore:2,suggestion:true},"amenity/bank/Ecobank":{name:"Ecobank",icon:"maki-bank",imageURL:"https://graph.facebook.com/EcobankGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q930225",amenity:"bank"},addTags:{amenity:"bank",brand:"Ecobank","brand:wikidata":"Q930225","brand:wikipedia":"en:Ecobank",name:"Ecobank"},terms:["agence ecobank"],matchScore:2,suggestion:true},"amenity/bank/Emigrant Savings Bank":{name:"Emigrant Savings Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5371104",amenity:"bank"},addTags:{amenity:"bank",brand:"Emigrant Savings Bank","brand:wikidata":"Q5371104","brand:wikipedia":"en:Emigrant Savings Bank",name:"Emigrant Savings Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Emirates NBD":{name:"Emirates NBD",icon:"maki-bank",imageURL:"https://graph.facebook.com/EmiratesNBD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5372575",amenity:"bank"},addTags:{amenity:"bank",brand:"Emirates NBD","brand:wikidata":"Q5372575","brand:wikipedia":"en:Emirates NBD",name:"Emirates NBD"},countryCodes:["ae"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Congo)":{name:"Equity Bank (Congo)",icon:"maki-bank",imageURL:"https://graph.facebook.com/www.equitybank.cd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21178738",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q21178738","brand:wikipedia":"en:Equity Bank Congo",name:"Equity Bank"},countryCodes:["cd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Kenya)":{name:"Equity Bank (Kenya)",icon:"maki-bank",imageURL:"https://graph.facebook.com/KeEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384664",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384664","brand:wikipedia":"en:Equity Bank Kenya Limited",name:"Equity Bank"},countryCodes:["ke"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Rwanda)":{name:"Equity Bank (Rwanda)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RwEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384665",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384665","brand:wikipedia":"en:Equity Bank Rwanda Limited",name:"Equity Bank"},countryCodes:["rw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (South Sudan)":{name:"Equity Bank (South Sudan)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5384666",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384666","brand:wikipedia":"en:Equity Bank South Sudan Limited",name:"Equity Bank"},countryCodes:["ss"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Tanzania)":{name:"Equity Bank (Tanzania)",icon:"maki-bank",imageURL:"https://graph.facebook.com/TzEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384667",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384667","brand:wikipedia":"en:Equity Bank Tanzania Limited",name:"Equity Bank"},countryCodes:["tz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (USA)":{name:"Equity Bank (USA)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/624655695741366272/12-izccG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q62260414",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q62260414","brand:wikipedia":"en:Equity Bank USA",name:"Equity Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Equity Bank (Uganda)":{name:"Equity Bank (Uganda)",icon:"maki-bank",imageURL:"https://graph.facebook.com/UgEquityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5384668",amenity:"bank"},addTags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384668","brand:wikipedia":"en:Equity Bank Uganda Limited",name:"Equity Bank"},countryCodes:["ug"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Erste Bank":{name:"Erste Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1008639007046107136/-MtFGuJT_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q696867",amenity:"bank"},addTags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"},countryCodes:["at","hr","hu","rs"],terms:[],matchScore:2,suggestion:true},"amenity/bank/EuroBic":{name:"EuroBic",icon:"maki-bank",imageURL:"https://graph.facebook.com/607149339334285/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806175",amenity:"bank"},addTags:{amenity:"bank",brand:"EuroBic","brand:wikidata":"Q806175","brand:wikipedia":"pt:EuroBic",name:"EuroBic",official_name:"Banco BIC Português"},countryCodes:["pt"],terms:["banco bic"],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Greece)":{name:"Eurobank (Greece)",icon:"maki-bank",imageURL:"https://graph.facebook.com/319859041765749/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q951850",amenity:"bank"},addTags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q951850","brand:wikipedia":"el:Eurobank",name:"Eurobank"},countryCodes:["gr"],terms:["eurobank ergasias"],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Poland)":{name:"Eurobank (Poland)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q9256201",amenity:"bank"},addTags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q9256201","brand:wikipedia":"pl:Euro Bank",name:"Eurobank"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Serbia)":{name:"Eurobank (Serbia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/EurobankSrbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5411684",amenity:"bank"},addTags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q5411684","brand:wikipedia":"sr:Eurobanka",name:"Eurobank"},countryCodes:["rs"],terms:[],matchScore:2,suggestion:true},"amenity/bank/FNB (South Africa)":{name:"FNB (South Africa)",icon:"maki-bank",imageURL:"https://graph.facebook.com/FNBSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3072956",amenity:"bank"},addTags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB",official_name:"First National Bank"},countryCodes:["bw","mz","na","us","za","zm"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Faysal Bank":{name:"Faysal Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/faysalbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5439099",amenity:"bank"},addTags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Federal Bank":{name:"Federal Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/federalbankltd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2044983",amenity:"bank"},addTags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fidelity Bank (Ghana)":{name:"Fidelity Bank (Ghana)",icon:"maki-bank",imageURL:"https://graph.facebook.com/fidelitybankgh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5446778",amenity:"bank"},addTags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446778","brand:wikipedia":"en:Fidelity Bank Ghana",name:"Fidelity Bank"},countryCodes:["gh"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fidelity Bank (Nigeria)":{name:"Fidelity Bank (Nigeria)",icon:"maki-bank",imageURL:"https://graph.facebook.com/FidelityBankplc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5446777",amenity:"bank"},addTags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446777","brand:wikipedia":"en:Fidelity Bank Nigeria",name:"Fidelity Bank"},countryCodes:["ng"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fidelity Bank (USA)":{name:"Fidelity Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/fidelityinvestments/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1411292",amenity:"bank"},addTags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q1411292","brand:wikipedia":"en:Fidelity Investments",name:"Fidelity Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fifth Third Bank":{name:"Fifth Third Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FifthThirdBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1411810",amenity:"bank"},addTags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank",short_name:"5/3 Bank"},countryCodes:["us"],terms:["5/3"],matchScore:2,suggestion:true},"amenity/bank/Finansbank":{name:"Finansbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/qnbfinansbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1416237",amenity:"bank"},addTags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First Bank (North and South Carolina)":{name:"First Bank (North and South Carolina)",icon:"maki-bank",imageURL:"https://graph.facebook.com/localfirstbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452332",amenity:"bank"},addTags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452332","brand:wikipedia":"en:First Bancorp",name:"First Bank"},countryCodes:["us"],terms:["1st bancorp","1st bank","first bancorp"],matchScore:2,suggestion:true},"amenity/bank/First Bank (Puerto Rico)":{name:"First Bank (Puerto Rico)",icon:"maki-bank",imageURL:"https://graph.facebook.com/firstbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452333",amenity:"bank"},addTags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452333","brand:wikipedia":"en:First BanCorp",name:"First Bank"},countryCodes:["us"],terms:["1st bancorp","1st bank","first bancorp"],matchScore:2,suggestion:true},"amenity/bank/First Bank (Western USA)":{name:"First Bank (Western USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/efirstbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452217",amenity:"bank"},addTags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452217","brand:wikipedia":"en:FirstBank Holding Co",name:"First Bank",short_name:"1STBank"},countryCodes:["us"],terms:["1st bank"],matchScore:2,suggestion:true},"amenity/bank/First Citizens Bank (Trinidad and Tobago)":{name:"First Citizens Bank (Trinidad and Tobago)",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstCitizens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452734",amenity:"bank"},addTags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"},countryCodes:["bb","tt"],terms:["1st citizens bank"],matchScore:2,suggestion:true},"amenity/bank/First Citizens Bank (USA)":{name:"First Citizens Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/firstcitizensbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452733",amenity:"bank"},addTags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452733","brand:wikipedia":"en:First Citizens BancShares",name:"First Citizens Bank"},countryCodes:["us"],terms:["1st citizens bank"],matchScore:2,suggestion:true},"amenity/bank/First Financial Bank":{name:"First Financial Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstFinancialBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453009",amenity:"bank"},addTags:{amenity:"bank",brand:"First Financial Bank","brand:wikidata":"Q5453009","brand:wikipedia":"en:First Financial Bank (Ohio)",name:"First Financial Bank"},countryCodes:["us"],terms:["1st financial bank"],matchScore:2,suggestion:true},"amenity/bank/First Interstate Bank":{name:"First Interstate Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstInterstateBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453107",amenity:"bank"},addTags:{amenity:"bank",brand:"First Interstate BancSystem","brand:wikidata":"Q5453107","brand:wikipedia":"en:First Interstate BancSystem",name:"First Interstate Bank"},countryCodes:["us"],terms:["1st interstate","1st interstate bancsystem","1st interstate bank","first interstate","first interstate bancsystem"],matchScore:2,suggestion:true},"amenity/bank/First Midwest Bank":{name:"First Midwest Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstMidwest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453331",amenity:"bank"},addTags:{amenity:"bank",brand:"First Midwest Bank","brand:wikidata":"Q5453331","brand:wikipedia":"en:First Midwest Bank",name:"First Midwest Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First National Bank (USA)":{name:"First National Bank (USA)",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5426765",amenity:"bank"},addTags:{amenity:"bank",brand:"First National Bank","brand:wikidata":"Q5426765","brand:wikipedia":"en:F.N.B. Corporation",name:"First National Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First West Credit Union":{name:"First West Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/WebsterFirst/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5454073",amenity:"bank"},addTags:{alt_name:"First West",amenity:"bank",brand:"First West Credit Union","brand:wikidata":"Q5454073","brand:wikipedia":"en:First West Credit Union",name:"First West Credit Union"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Frost Bank":{name:"Frost Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FrostBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5506152",amenity:"bank"},addTags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fulton Bank":{name:"Fulton Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/605798444855197696/U70Uo44x_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16976594",amenity:"bank"},addTags:{amenity:"bank",brand:"Fulton Bank","brand:wikidata":"Q16976594",name:"Fulton Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/GCB Bank":{name:"GCB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/gcbbanklimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1521346",amenity:"bank"},addTags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank",name:"GCB Bank"},countryCodes:["gh"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Galicia":{name:"Galicia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancogalicia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717952",amenity:"bank"},addTags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Garanti":{name:"Garanti",icon:"maki-bank",imageURL:"https://graph.facebook.com/GarantiBBVA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q322962",amenity:"bank"},addTags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Garanti Bankası":{name:"Garanti Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/GarantiBBVA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q322962",amenity:"bank"},addTags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Getin Bank":{name:"Getin Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/GetinBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9267646",amenity:"bank"},addTags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"pl:Getin Bank",name:"Getin Bank"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Golden 1 Credit Union":{name:"Golden 1 Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/golden1cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7736976",amenity:"bank"},addTags:{amenity:"bank",brand:"Golden 1 Credit Union","brand:wikidata":"Q7736976","brand:wikipedia":"en:Golden 1 Credit Union",name:"Golden 1 Credit Union"},countryCodes:["us"],terms:["golden 1","golden one","golden one credit union","the golden 1 credit union","the golden one credit union"],matchScore:2,suggestion:true},"amenity/bank/Great Western Bank":{name:"Great Western Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/500391873328778/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5600185",amenity:"bank"},addTags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Groupama":{name:"Groupama",icon:"maki-bank",imageURL:"https://graph.facebook.com/groupama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3083531",amenity:"bank"},addTags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HBL Bank":{name:"HBL Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HBLBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1566843",amenity:"bank"},addTags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"},countryCodes:["pk"],terms:["hbl"],matchScore:2,suggestion:true},"amenity/bank/HDFC Bank":{name:"HDFC Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HDFC.bank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q631047",amenity:"bank"},addTags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HNB":{name:"HNB",icon:"maki-bank",imageURL:"https://graph.facebook.com/HNBPLC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3532080",amenity:"bank"},addTags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HSBC UK (UK)":{name:"HSBC UK (UK)",icon:"maki-bank",imageURL:"https://graph.facebook.com/hsbcuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64767453",amenity:"bank"},addTags:{amenity:"bank",brand:"HSBC UK","brand:wikidata":"Q64767453",name:"HSBC UK"},countryCodes:["gb"],terms:["hsbc"],matchScore:2,suggestion:true},"amenity/bank/HSBC (Global)":{name:"HSBC (Global)",icon:"maki-bank",imageURL:"https://graph.facebook.com/HSBC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q190464",amenity:"bank"},addTags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Halifax":{name:"Halifax",icon:"maki-bank",imageURL:"https://graph.facebook.com/halifax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3310164",amenity:"bank"},addTags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Halkbank":{name:"Halkbank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3593818",amenity:"bank"},addTags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Hamburger Sparkasse":{name:"Hamburger Sparkasse",icon:"maki-bank",imageURL:"https://graph.facebook.com/haspa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1573140",amenity:"bank"},addTags:{amenity:"bank",brand:"Hamburger Sparkasse","brand:wikidata":"Q1573140","brand:wikipedia":"de:Hamburger Sparkasse",name:"Hamburger Sparkasse",short_name:"Haspa"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Handelsbanken":{name:"Handelsbanken",icon:"maki-bank",imageURL:"https://graph.facebook.com/Handelsbanken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1421630",amenity:"bank"},addTags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"},countryCodes:["dk","fi","gb","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Heritage Bank":{name:"Heritage Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/heritage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5738690",amenity:"bank"},addTags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Hong Leong Bank":{name:"Hong Leong Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HLBMalaysia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4383943",amenity:"bank"},addTags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Hrvatska poštanska banka":{name:"Hrvatska poštanska banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/mojpunnovcanik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5923981",amenity:"bank"},addTags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Huntington Bank":{name:"Huntington Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HuntingtonBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q798819",amenity:"bank"},addTags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/HypoVereinsbank":{name:"HypoVereinsbank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/950681154906095618/sFON4jIk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q220189",amenity:"bank"},addTags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ICBC":{name:"ICBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/icbcglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},addTags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"},terms:[],matchScore:2,suggestion:true},"amenity/bank/ICICI Bank":{name:"ICICI Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/icicibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1653258",amenity:"bank"},addTags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"},countryCodes:["ca","gb","in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/IDBI Bank":{name:"IDBI Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/IDBIBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633485",amenity:"bank"},addTags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ING":{name:"ING",icon:"maki-bank",imageURL:"https://graph.facebook.com/ING/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q645708",amenity:"bank"},addTags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"},terms:["ing bank"],matchScore:2,suggestion:true},"amenity/bank/ING Bank Śląski":{name:"ING Bank Śląski",icon:"maki-bank",imageURL:"https://graph.facebook.com/INGPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1410383",amenity:"bank"},addTags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"pl:ING Bank Śląski",name:"ING Bank Śląski"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Ibercaja":{name:"Ibercaja",icon:"maki-bank",imageURL:"https://graph.facebook.com/Ibercaja/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5907815",amenity:"bank"},addTags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja (banco)",name:"Ibercaja"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Indian Bank":{name:"Indian Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/MyIndianBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003789",amenity:"bank"},addTags:{amenity:"bank",brand:"Indian Bank","brand:wikidata":"Q2003789","brand:wikipedia":"en:Indian Bank",name:"Indian Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Indian Overseas Bank":{name:"Indian Overseas Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankiob/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003611",amenity:"bank"},addTags:{amenity:"bank",brand:"Indian Overseas Bank","brand:wikidata":"Q2003611","brand:wikipedia":"en:Indian Overseas Bank",name:"Indian Overseas Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Interbank":{name:"Interbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/InterbankPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2835558",amenity:"bank"},addTags:{amenity:"bank",brand:"Interbank","brand:wikidata":"Q2835558","brand:wikipedia":"es:Interbank",name:"Interbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Intesa Sanpaolo":{name:"Intesa Sanpaolo",icon:"maki-bank",imageURL:"https://graph.facebook.com/intesasanpaolo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1343118",amenity:"bank"},addTags:{amenity:"bank",brand:"Intesa Sanpaolo","brand:wikidata":"Q1343118","brand:wikipedia":"it:Intesa Sanpaolo",name:"Intesa Sanpaolo"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Investors Bank":{name:"Investors Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Investorsbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15109896",amenity:"bank"},addTags:{amenity:"bank",brand:"Investors Bank","brand:wikidata":"Q15109896","brand:wikipedia":"en:Investors Bank",name:"Investors Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Itaú (Brazil)":{name:"Itaú (Brazil)",icon:"maki-bank",imageURL:"https://graph.facebook.com/itau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1424293",amenity:"bank"},addTags:{amenity:"bank",brand:"Itaú Unibanco","brand:wikidata":"Q1424293","brand:wikipedia":"pt:Itaú Unibanco",name:"Itaú"},countryCodes:["br"],terms:["banco itau"],matchScore:2,suggestion:true},"amenity/bank/Itaú (Chile)":{name:"Itaú (Chile)",icon:"maki-bank",imageURL:"https://graph.facebook.com/corpbanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2423252",amenity:"bank"},addTags:{amenity:"bank",brand:"Itaú Corpbanca","brand:wikidata":"Q2423252","brand:wikipedia":"en:Itaú Corpbanca",name:"Itaú"},countryCodes:["cl"],terms:["banco itau"],matchScore:2,suggestion:true},"amenity/bank/JS Bank":{name:"JS Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/JSBankLtd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6108986",amenity:"bank"},addTags:{amenity:"bank",brand:"JS Bank","brand:wikidata":"Q6108986","brand:wikipedia":"en:JS Bank",name:"JS Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Jyske Bank":{name:"Jyske Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1062308131567517702/0I4wgGmc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q136672",amenity:"bank"},addTags:{amenity:"bank",brand:"Jyske Bank","brand:wikidata":"Q136672","brand:wikipedia":"en:Jyske Bank",name:"Jyske Bank"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/K&H Bank":{name:"K&H Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/dontsokosan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6393834",amenity:"bank"},addTags:{amenity:"bank",brand:"K&H Bank","brand:wikidata":"Q6393834","brand:wikipedia":"en:K&H Bank",name:"K&H Bank"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/KBC":{name:"KBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/KBCBankEnVerzekering/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q941020",amenity:"bank"},addTags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"},countryCodes:["be","ie"],terms:[],matchScore:2,suggestion:true},"amenity/bank/KBZ Bank":{name:"KBZ Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/KanbawzaBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6360949",amenity:"bank"},addTags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"},countryCodes:["mm"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Karnataka Bank":{name:"Karnataka Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/KarnatakaBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2042632",amenity:"bank"},addTags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Karur Vysya Bank":{name:"Karur Vysya Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/KVB100/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6373724",amenity:"bank"},addTags:{amenity:"bank",brand:"Karur Vysya Bank","brand:wikidata":"Q6373724","brand:wikipedia":"en:Karur Vysya Bank",name:"Karur Vysya Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kasa Stefczyka":{name:"Kasa Stefczyka",icon:"maki-bank",imageURL:"https://graph.facebook.com/kasastefczykapl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57624461",amenity:"bank"},addTags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/KeyBank":{name:"KeyBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/keybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1740314",amenity:"bank"},addTags:{amenity:"bank",brand:"KeyBank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"KeyBank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Komerční banka":{name:"Komerční banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/komercni.banka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1541079",amenity:"bank"},addTags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kotak Mahindra Bank":{name:"Kotak Mahindra Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/KotakBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2040404",amenity:"bank"},addTags:{amenity:"bank",brand:"Kotak Mahindra Bank","brand:wikidata":"Q2040404","brand:wikipedia":"en:Kotak Mahindra Bank",name:"Kotak Mahindra Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kutxabank":{name:"Kutxabank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Kutxabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5139377",amenity:"bank"},addTags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Kuveyt Türk":{name:"Kuveyt Türk",icon:"maki-bank",imageURL:"https://graph.facebook.com/KuveytTurk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6036058",amenity:"bank"},addTags:{amenity:"bank",brand:"Kuveyt Türk","brand:wikidata":"Q6036058","brand:wikipedia":"tr:Kuveyt Türk",name:"Kuveyt Türk"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/LCL":{name:"LCL",icon:"maki-bank",imageURL:"https://graph.facebook.com/LCL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q779722",amenity:"bank"},addTags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"fr:Crédit lyonnais",name:"LCL"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/LCNB":{name:"LCNB",icon:"maki-bank",imageURL:"https://graph.facebook.com/LCNBNATBANK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65095575",amenity:"bank"},addTags:{alt_name:"Lebanon Citizens National Bank",amenity:"bank",brand:"LCNB","brand:wikidata":"Q65095575",name:"LCNB",official_name:"LCNB National Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/La Banque Postale":{name:"La Banque Postale",icon:"maki-bank",imageURL:"https://graph.facebook.com/labanquepostale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3206431",amenity:"bank"},addTags:{amenity:"bank",brand:"La Banque Postale","brand:wikidata":"Q3206431","brand:wikipedia":"en:La Banque postale",name:"La Banque Postale"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/La Caixa":{name:"La Caixa",icon:"maki-bank",imageURL:"https://graph.facebook.com/fundlacaixa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q287753",amenity:"bank"},addTags:{amenity:"bank",brand:"La Caixa","brand:wikidata":"Q287753","brand:wikipedia":"en:La Caixa",name:"La Caixa"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Laboral Kutxa":{name:"Laboral Kutxa",icon:"maki-bank",imageURL:"https://graph.facebook.com/laboralkutxa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12052386",amenity:"bank"},addTags:{amenity:"bank",brand:"Laboral Kutxa","brand:wikidata":"Q12052386","brand:wikipedia":"en:Laboral Kutxa",name:"Laboral Kutxa"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Lake Michigan Credit Union":{name:"Lake Michigan Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/LakeMichiganCreditUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6476906",amenity:"bank"},addTags:{amenity:"bank",brand:"Lake Michigan Credit Union","brand:wikidata":"Q6476906","brand:wikipedia":"en:Lake Michigan Credit Union",name:"Lake Michigan Credit Union",short_name:"LMCU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Landbank":{name:"Landbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/landbankofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6483872",amenity:"bank"},addTags:{amenity:"bank",brand:"Landbank","brand:wikidata":"Q6483872","brand:wikipedia":"en:Land Bank of the Philippines",name:"Landbank"},countryCodes:["ph"],terms:["bangko sa lupa ng pilipinas","land bank of the philippines","lbp"],matchScore:2,suggestion:true},"amenity/bank/Leeds Building Society":{name:"Leeds Building Society",icon:"maki-bank",imageURL:"https://graph.facebook.com/LeedsBS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6515848",amenity:"bank"},addTags:{amenity:"bank",brand:"Leeds Building Society","brand:wikidata":"Q6515848","brand:wikipedia":"en:Leeds Building Society",name:"Leeds Building Society"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Liberbank":{name:"Liberbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/liberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2891018",amenity:"bank"},addTags:{amenity:"bank",brand:"Liberbank","brand:wikidata":"Q2891018","brand:wikipedia":"en:Liberbank",name:"Liberbank"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Liberty Bank (Connecticut)":{name:"Liberty Bank (Connecticut)",icon:"maki-bank",imageURL:"https://graph.facebook.com/Liberty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6541584",amenity:"bank"},addTags:{amenity:"bank",brand:"Liberty Bank","brand:wikidata":"Q6541584","brand:wikipedia":"en:Liberty Bank",name:"Liberty Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Lloyds Bank":{name:"Lloyds Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/lloydsbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1152847",amenity:"bank"},addTags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"},countryCodes:["gb","im"],terms:["lloyds","lloyds tsb"],matchScore:2,suggestion:true},"amenity/bank/M&T Bank":{name:"M&T Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/MandTBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3272257",amenity:"bank"},addTags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/MCB":{name:"MCB",icon:"maki-bank",imageURL:"https://graph.facebook.com/mcbbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15982510",amenity:"bank"},addTags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"},terms:["mcb bank"],matchScore:2,suggestion:true},"amenity/bank/MONETA Money Bank":{name:"MONETA Money Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/726534904452931588/E4dnojuF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q24282966",amenity:"bank"},addTags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Macro":{name:"Macro",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancomacro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2335199",amenity:"bank"},addTags:{amenity:"bank",brand:"Macro","brand:wikidata":"Q2335199","brand:wikipedia":"en:Banco Macro",name:"Macro"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Maybank":{name:"Maybank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Maybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1364018",amenity:"bank"},addTags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Meezan Bank":{name:"Meezan Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/MeezanBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6807934",amenity:"bank"},addTags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mercantil":{name:"Mercantil",icon:"maki-bank",imageURL:"https://graph.facebook.com/mercantilbancooficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6818004",amenity:"bank"},addTags:{amenity:"bank",brand:"Mercantil","brand:wikidata":"Q6818004","brand:wikipedia":"en:Mercantil Servicios Financieros",name:"Mercantil"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Meridian Credit Union":{name:"Meridian Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/MeridianCreditUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6819303",amenity:"bank"},addTags:{alt_name:"Meridian",amenity:"bank",brand:"Meridian Credit Union","brand:wikidata":"Q6819303","brand:wikipedia":"en:Meridian Credit Union",name:"Meridian Credit Union"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Metro Bank (UK)":{name:"Metro Bank (UK)",icon:"maki-bank",imageURL:"https://graph.facebook.com/380904035384141/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6824499",amenity:"bank"},addTags:{amenity:"bank",brand:"Metro Bank","brand:wikidata":"Q6824499","brand:wikipedia":"en:Metro Bank (United Kingdom)",name:"Metro Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Metrobank (Philippines)":{name:"Metrobank (Philippines)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1140117795809550338/ySSJStq-_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1925799",amenity:"bank"},addTags:{amenity:"bank",brand:"Metrobank","brand:wikidata":"Q1925799","brand:wikipedia":"en:Metrobank (Philippines)",name:"Metrobank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mibanco":{name:"Mibanco",icon:"maki-bank",imageURL:"https://graph.facebook.com/MibancoOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558589",amenity:"bank"},addTags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589",name:"Mibanco"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/MidFirst Bank":{name:"MidFirst Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1096428932889362432/-d2Y2wF4_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q17081131",amenity:"bank"},addTags:{amenity:"bank",brand:"MidFirst Bank","brand:wikidata":"Q17081131","brand:wikipedia":"en:MidFirst Bank",name:"MidFirst Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Millennium Bank":{name:"Millennium Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/684026097688817664/fg1i7QVc_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4855947",amenity:"bank"},addTags:{amenity:"bank",brand:"Millennium Bank","brand:wikidata":"Q4855947","brand:wikipedia":"pl:Bank Millennium",name:"Millennium Bank"},countryCodes:["pl"],terms:["bank millennium"],matchScore:2,suggestion:true},"amenity/bank/Millennium bcp":{name:"Millennium bcp",icon:"maki-bank",imageURL:"https://graph.facebook.com/millenniumbcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118581",amenity:"bank"},addTags:{amenity:"bank",brand:"Millennium bcp","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"Millennium bcp",official_name:"Banco Comercial Português","official_name:en":"Portuguese Commercial Bank","official_name:es":"Banco Comercial Português"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mission Federal Credit Union":{name:"Mission Federal Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/missionfedcu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18345955",amenity:"bank"},addTags:{amenity:"bank",brand:"Mission Federal Credit Union","brand:wikidata":"Q18345955","brand:wikipedia":"en:Mission Federal Credit Union",name:"Mission Federal Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mittelbrandenburgische Sparkasse":{name:"Mittelbrandenburgische Sparkasse",icon:"maki-bank",imageURL:"https://graph.facebook.com/mbs.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1940058",amenity:"bank"},addTags:{amenity:"bank",brand:"Mittelbrandenburgische Sparkasse","brand:wikidata":"Q1940058","brand:wikipedia":"de:Mittelbrandenburgische Sparkasse",name:"Mittelbrandenburgische Sparkasse"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Monte dei Paschi di Siena":{name:"Monte dei Paschi di Siena",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancamps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q46730",amenity:"bank"},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"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Montepio":{name:"Montepio",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/303285168/logo_Montepio_259x248_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1946091",amenity:"bank"},addTags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mountain America Credit Union":{name:"Mountain America Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/MountainAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6924862",amenity:"bank"},addTags:{amenity:"bank",brand:"Mountain America Credit Union","brand:wikidata":"Q6924862","brand:wikipedia":"en:Mountain America Credit Union",name:"Mountain America Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/NAB":{name:"NAB",icon:"maki-bank",imageURL:"https://graph.facebook.com/NAB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1430985",amenity:"bank"},addTags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/NASA Federal Credit Union":{name:"NASA Federal Credit Union",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/458951842995503105/UQGjhMmT_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q6952409",amenity:"bank"},addTags:{amenity:"bank",brand:"NASA Federal Credit Union","brand:wikidata":"Q6952409","brand:wikipedia":"en:NASA Federal Credit Union",name:"NASA Federal Credit Union"},terms:[],matchScore:2,suggestion:true},"amenity/bank/NLB":{name:"NLB",icon:"maki-bank",imageURL:"https://graph.facebook.com/NLBdd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1481509",amenity:"bank"},addTags:{amenity:"bank",brand:"NLB","brand:wikidata":"Q1481509","brand:wikipedia":"en:NLB Group",name:"NLB"},countryCodes:["si"],terms:[],matchScore:2,suggestion:true},"amenity/bank/NSB":{name:"NSB",icon:"maki-bank",imageURL:"https://graph.facebook.com/NSBSLOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12500189",amenity:"bank"},addTags:{amenity:"bank",brand:"NSB","brand:wikidata":"Q12500189","brand:wikipedia":"en:National Savings Bank (Sri Lanka)",name:"NSB"},countryCodes:["lk"],terms:["national savings bank"],matchScore:2,suggestion:true},"amenity/bank/NatWest":{name:"NatWest",icon:"maki-bank",imageURL:"https://graph.facebook.com/NatWest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2740021",amenity:"bank"},addTags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"},countryCodes:["gb","gg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/National Bank":{name:"National Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/banquenationale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q634298",amenity:"bank"},addTags:{amenity:"bank",brand:"National Bank","brand:en":"National Bank","brand:fr":"Banque Nationale","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"National Bank","name:en":"National Bank","name:fr":"Banque Nationale",official_name:"National Bank of Canada","official_name:en":"National Bank of Canada","official_name:fr":"Banque Nationale du Canada"},countryCodes:["ca"],terms:["banque nationale","banque nationale du canada"],matchScore:2,suggestion:true},"amenity/bank/Nationwide":{name:"Nationwide",icon:"maki-bank",imageURL:"https://graph.facebook.com/NationwideBuildingSociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q846735",amenity:"bank"},addTags:{amenity:"bank",brand:"Nationwide","brand:wikidata":"Q846735","brand:wikipedia":"en:Nationwide Building Society",name:"Nationwide"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Navy Federal Credit Union":{name:"Navy Federal Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/NavyFederal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6982632",amenity:"bank"},addTags:{amenity:"bank",brand:"Navy Federal Credit Union","brand:wikidata":"Q6982632","brand:wikipedia":"en:Navy Federal Credit Union",name:"Navy Federal Credit Union"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Nedbank":{name:"Nedbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Nedbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2751701",amenity:"bank"},addTags:{amenity:"bank",brand:"Nedbank","brand:wikidata":"Q2751701","brand:wikipedia":"en:Nedbank",name:"Nedbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Nordea":{name:"Nordea",icon:"maki-bank",imageURL:"https://graph.facebook.com/Nordea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1123823",amenity:"bank"},addTags:{amenity:"bank",brand:"Nordea","brand:wikidata":"Q1123823","brand:wikipedia":"en:Nordea",name:"Nordea"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Novo Banco":{name:"Novo Banco",icon:"maki-bank",imageURL:"https://graph.facebook.com/planetanovobanco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17488861",amenity:"bank"},addTags:{amenity:"bank",brand:"Novo Banco","brand:wikidata":"Q17488861","brand:wikipedia":"en:Novo Banco",name:"Novo Banco"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/OLB":{name:"OLB",icon:"maki-bank",imageURL:"https://graph.facebook.com/OLB.Bank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q879591",amenity:"bank"},addTags:{amenity:"bank",brand:"OLB","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"OLB"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/OTP":{name:"OTP",icon:"maki-bank",imageURL:"https://graph.facebook.com/otpbank.hu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q912778",amenity:"bank"},addTags:{amenity:"bank",brand:"OTP","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"OTP Bank"},terms:["otp bank"],matchScore:2,suggestion:true},"amenity/bank/Oberbank":{name:"Oberbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/oberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2009139",amenity:"bank"},addTags:{amenity:"bank",brand:"Oberbank","brand:wikidata":"Q2009139","brand:wikipedia":"de:Oberbank",name:"Oberbank"},countryCodes:["at","cz","de","hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Occidental de Descuento":{name:"Occidental de Descuento",icon:"maki-bank",imageURL:"https://graph.facebook.com/1086400904717496/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854108",amenity:"bank"},addTags:{amenity:"bank",brand:"Occidental de Descuento","brand:wikidata":"Q4854108","brand:wikipedia":"en:Banco Occidental de Descuento",name:"Occidental de Descuento"},countryCodes:["ve"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Oldenburgische Landesbank":{name:"Oldenburgische Landesbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/OLB.Bank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q879591",amenity:"bank"},addTags:{amenity:"bank",brand:"Oldenburgische Landesbank","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"Oldenburgische Landesbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/One Network Bank":{name:"One Network Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7093019",amenity:"bank"},addTags:{amenity:"bank",brand:"One Network Bank","brand:wikidata":"Q7093019","brand:wikipedia":"en:One Network Bank",name:"One Network Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Oriental":{name:"Oriental",icon:"maki-bank",imageURL:"https://graph.facebook.com/OrientalBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64887002",amenity:"bank"},addTags:{alt_name:"Oriental Bank",amenity:"bank",brand:"Oriental","brand:wikidata":"Q64887002",name:"Oriental"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Oriental Bank of Commerce":{name:"Oriental Bank of Commerce",icon:"maki-bank",imageURL:"https://graph.facebook.com/OBCIndOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q367008",amenity:"bank"},addTags:{amenity:"bank",brand:"Oriental Bank of Commerce","brand:wikidata":"Q367008","brand:wikipedia":"en:Oriental Bank of Commerce",name:"Oriental Bank of Commerce"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Osuuspankki":{name:"Osuuspankki",icon:"maki-bank",imageURL:"https://graph.facebook.com/OP.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4045597",amenity:"bank"},addTags:{amenity:"bank",brand:"Osuuspankki","brand:wikidata":"Q4045597","brand:wikipedia":"fi:OP (finanssiryhmä)",name:"Osuuspankki"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/PBZ":{name:"PBZ",icon:"maki-bank",imageURL:"https://graph.facebook.com/privrednabankazagreb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7246343",amenity:"bank"},addTags:{amenity:"bank",brand:"PBZ","brand:wikidata":"Q7246343","brand:wikipedia":"en:Privredna banka Zagreb",name:"PBZ"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/PKO BP":{name:"PKO BP",icon:"maki-bank",imageURL:"https://graph.facebook.com/PKOBankPolski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q578832",amenity:"bank"},addTags:{amenity:"bank",brand:"PKO BP","brand:wikidata":"Q578832","brand:wikipedia":"pl:Powszechna Kasa Oszczędności Bank Polski",name:"PKO BP"},countryCodes:["pl"],terms:["pko bank polski"],matchScore:2,suggestion:true},"amenity/bank/PNB":{name:"PNB",icon:"maki-bank",imageURL:"https://graph.facebook.com/PNBph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1657971",amenity:"bank"},addTags:{amenity:"bank",brand:"PNB","brand:wikidata":"Q1657971","brand:wikipedia":"en:Philippine National Bank",name:"PNB",official_name:"Philippine National Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/PNC Bank":{name:"PNC Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/pncbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38928",amenity:"bank"},addTags:{amenity:"bank",brand:"PNC Bank","brand:wikidata":"Q38928","brand:wikipedia":"en:PNC Financial Services",name:"PNC Bank"},countryCodes:["us"],terms:["pnc"],matchScore:2,suggestion:true},"amenity/bank/PSBank":{name:"PSBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/psbankofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7185203",amenity:"bank"},addTags:{amenity:"bank",brand:"PSBank","brand:wikidata":"Q7185203","brand:wikipedia":"en:Philippine Savings Bank",name:"PSBank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Panin Bank":{name:"Panin Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/paninbankfanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12502751",amenity:"bank"},addTags:{amenity:"bank",brand:"Panin Bank","brand:wikidata":"Q12502751","brand:wikipedia":"id:Panin Bank",name:"Panin Bank"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Patagonia":{name:"Patagonia",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoPatagonia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882078",amenity:"bank"},addTags:{amenity:"bank",brand:"Patagonia","brand:wikidata":"Q2882078","brand:wikipedia":"en:Banco Patagonia",name:"Patagonia"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Pekao SA":{name:"Pekao SA",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankpekaosa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806642",amenity:"bank"},addTags:{amenity:"bank",brand:"Pekao SA","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Pekao SA"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/PenFed Credit Union":{name:"PenFed Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/PenFed/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3374885",amenity:"bank"},addTags:{alt_name:"Pentagon Federal Credit Union",amenity:"bank",brand:"PenFed Credit Union","brand:wikidata":"Q3374885","brand:wikipedia":"en:Pentagon Federal Credit Union",name:"PenFed Credit Union",short_name:"PenFed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/People's United Bank":{name:"People's United Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/peoplesunited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7165802",amenity:"bank"},addTags:{amenity:"bank",brand:"People's United Bank","brand:wikidata":"Q7165802","brand:wikipedia":"en:People's United Financial",name:"People's United Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Peoples Bank (Ohio)":{name:"Peoples Bank (Ohio)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1196505714942005250/zxK84aT2_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q65716607",amenity:"bank"},addTags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q65716607",name:"Peoples Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Peoples Bank (Washington)":{name:"Peoples Bank (Washington)",icon:"maki-bank",imageURL:"https://graph.facebook.com/peoplesbankwa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7166050",amenity:"bank"},addTags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q7166050","brand:wikipedia":"en:Peoples Bank",name:"Peoples Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Piraeus Bank":{name:"Piraeus Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/piraeusbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312",amenity:"bank"},addTags:{amenity:"bank",brand:"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Piraeus Bank"},countryCodes:["bg","cy","gr","ro","ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Popular":{name:"Popular",icon:"maki-bank",imageURL:"https://graph.facebook.com/PopularVI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7229656",amenity:"bank"},addTags:{alt_name:"Banco Popular","alt_name:en":"Popular Bank","alt_name:es":"Banco Popular",amenity:"bank",brand:"Popular","brand:en":"Popular","brand:es":"Popular","brand:wikidata":"Q7229656","brand:wikipedia":"en:Popular, Inc.",name:"Popular","name:en":"Popular","name:es":"Popular",official_name:"Banco Popular de Puerto Rico","official_name:es":"Banco Popular de Puerto Rico",short_name:"BPPR"},countryCodes:["us"],terms:["popular bank"],matchScore:2,suggestion:true},"amenity/bank/Postbank (Bulgaria)":{name:"Postbank (Bulgaria)",icon:"maki-bank",imageURL:"https://graph.facebook.com/PostbankBG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7234083",amenity:"bank"},addTags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q7234083","brand:wikipedia":"en:Bulgarian Postbank",name:"Postbank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Postbank (Germany)":{name:"Postbank (Germany)",icon:"maki-bank",imageURL:"https://graph.facebook.com/postbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q708835",amenity:"bank"},addTags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q708835","brand:wikipedia":"en:Deutsche Postbank",name:"Postbank"},countryCodes:["de"],terms:["postbank finanzcenter"],matchScore:2,suggestion:true},"amenity/bank/Prima banka":{name:"Prima banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/primabankaslovensko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13538661",amenity:"bank"},addTags:{amenity:"bank",brand:"Prima banka","brand:wikidata":"Q13538661","brand:wikipedia":"sk:Prima banka Slovensko",name:"Prima banka"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Provincial":{name:"Provincial",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1151125571289718786/INihTiHa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4835087",amenity:"bank"},addTags:{amenity:"bank",brand:"Provincial","brand:wikidata":"Q4835087","brand:wikipedia":"es:BBVA Provincial",name:"Provincial"},countryCodes:["ve"],terms:["bbva provincial"],matchScore:2,suggestion:true},"amenity/bank/Public Bank (Malaysia)":{name:"Public Bank (Malaysia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/277915305558566/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3046561",amenity:"bank"},addTags:{amenity:"bank",brand:"Public Bank","brand:wikidata":"Q3046561","brand:wikipedia":"en:Public Bank Berhad",name:"Public Bank"},terms:["public bank berhad"],matchScore:2,suggestion:true},"amenity/bank/Punjab National Bank":{name:"Punjab National Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/pnbindia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2743499",amenity:"bank"},addTags:{amenity:"bank",brand:"Punjab National Bank","brand:wikidata":"Q2743499","brand:wikipedia":"en:Punjab National Bank",name:"Punjab National Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/RBC":{name:"RBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/rbc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735261",amenity:"bank"},addTags:{amenity:"bank",brand:"RBC","brand:wikidata":"Q735261","brand:wikipedia":"en:Royal Bank of Canada",name:"RBC",official_name:"Royal Bank of Canada"},terms:["rbc financial group","rbc royal bank","royal bank"],matchScore:2,suggestion:true},"amenity/bank/RBS":{name:"RBS",icon:"maki-bank",imageURL:"https://graph.facebook.com/royalbankofscotland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q160126",amenity:"bank"},addTags:{amenity:"bank",brand:"RBS","brand:wikidata":"Q160126","brand:wikipedia":"en:Royal Bank of Scotland",name:"RBS",official_name:"Royal Bank of Scotland"},countryCodes:["gb","je","ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/RCBC":{name:"RCBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/RCBCGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7339070",amenity:"bank"},addTags:{amenity:"bank",brand:"RCBC","brand:wikidata":"Q7339070","brand:wikipedia":"en:Rizal Commercial Banking Corporation",name:"RCBC",official_name:"Rizal Commercial Banking Corporation"},countryCodes:["ph"],terms:["rcbc savings bank"],matchScore:2,suggestion:true},"amenity/bank/Rabobank":{name:"Rabobank",icon:"maki-bank",imageURL:"https://graph.facebook.com/rabobank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q252004",amenity:"bank"},addTags:{amenity:"bank",brand:"Rabobank","brand:wikidata":"Q252004","brand:wikipedia":"en:Rabobank",name:"Rabobank"},countryCodes:["au","id","nl","nz","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Raiffeisen Polbank":{name:"Raiffeisen Polbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNPParibasBankPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9303218",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisen Polbank","brand:wikidata":"Q9303218","brand:wikipedia":"pl:Raiffeisen Bank Polska",name:"Raiffeisen Polbank"},countryCodes:["de","pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Raiffeisenbank (Albania)":{name:"Raiffeisenbank (Albania)",icon:"maki-bank",imageURL:"https://graph.facebook.com/raiffeisenbankshqiperi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2127541",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q2127541","brand:wikipedia":"sq:Raiffeisen Bank Shqipëri",name:"Raiffeisenbank"},countryCodes:["al"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Raiffeisenbank (Bulgaria)":{name:"Raiffeisenbank (Bulgaria)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RBB.bg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7283808",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283808","brand:wikipedia":"bg:Райфайзенбанк (България)",name:"Raiffeisenbank"},countryCodes:["bg"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Raiffeisenbank (Czech Republic)":{name:"Raiffeisenbank (Czech Republic)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RaiffeisenbankCZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24282825",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q24282825","brand:wikipedia":"cs:Raiffeisenbank",name:"Raiffeisenbank"},countryCodes:["cz"],terms:["raiffeisen","raiffeisenkasse"],matchScore:2,suggestion:true},"amenity/bank/Raiffeisenbank (Romania)":{name:"Raiffeisenbank (Romania)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RaiffeisenBankRomania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7283806",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283806","brand:wikipedia":"ro:Raiffeisen Bank România",name:"Raiffeisenbank"},countryCodes:["ro"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Raiffeisenbank (Serbia)":{name:"Raiffeisenbank (Serbia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/RaiffeisenSrbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7283807",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283807","brand:wikipedia":"en:Raiffeisen Bank (Serbia)",name:"Raiffeisenbank"},countryCodes:["rs"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Raiffeisen (Luxembourg)":{name:"Raiffeisen (Luxembourg)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBanque%20Raiffeisen%20Luxembourg%20Logo%20on%20Social%20Media.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11220162",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisen","brand:wikidata":"Q11220162","brand:wikipedia":"en:Banque Raiffeisen",name:"Raiffeisen"},countryCodes:["lu"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Regions Bank":{name:"Regions Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/RegionsBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q917131",amenity:"bank"},addTags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Republic Bank (Eastern Caribbean)":{name:"Republic Bank (Eastern Caribbean)",icon:"maki-bank",imageURL:"https://graph.facebook.com/republicbanktnt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7314386",amenity:"bank"},addTags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314386","brand:wikipedia":"en:Republic Bank",name:"Republic Bank"},countryCodes:["bb","gd","gy","tt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Republic Bank (USA)":{name:"Republic Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/republicbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7314387",amenity:"bank"},addTags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314387","brand:wikipedia":"en:Republic Bank & Trust Company",name:"Republic Bank",official_name:"Republic Bank & Trust Company"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/República":{name:"República",icon:"maki-bank",imageURL:"https://graph.facebook.com/BROU.uy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4077337",amenity:"bank"},addTags:{amenity:"bank",brand:"República","brand:wikidata":"Q4077337","brand:wikipedia":"en:Banco de la República Oriental del Uruguay",name:"República"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"amenity/bank/S-Pankki":{name:"S-Pankki",icon:"maki-bank",imageURL:"https://graph.facebook.com/kauppapankki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7387053",amenity:"bank"},addTags:{amenity:"bank",brand:"S-Pankki","brand:wikidata":"Q7387053","brand:wikipedia":"fi:S-Pankki",name:"S-Pankki"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SC제일은행":{name:"SC제일은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/StandardCharteredKR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q625531",amenity:"bank"},addTags:{amenity:"bank",brand:"SC제일은행","brand:ko":"SC제일은행","brand:wikidata":"Q625531","brand:wikipedia":"en:Standard Chartered Korea",name:"SC제일은행","name:ko":"SC제일은행"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SEB":{name:"SEB",icon:"maki-bank",imageURL:"https://graph.facebook.com/sebsverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q975655",amenity:"bank"},addTags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"},countryCodes:["de","ee","lt","lv","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SMBC信託銀行":{name:"SMBC信託銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/smbc.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17218805",amenity:"bank"},addTags:{amenity:"bank",brand:"SMBC信託銀行","brand:en":"SMBC Trust Bank","brand:wikidata":"Q17218805","brand:wikipedia":"jp:SMBC信託銀行",name:"SMBC信託銀行","name:en":" SMBC Trust Bank "},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SNS Bank":{name:"SNS Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/devolksbanknl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1857899",amenity:"bank"},addTags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sacombank":{name:"Sacombank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SacombankHome/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6123772",amenity:"bank"},addTags:{amenity:"bank",brand:"Sacombank","brand:wikidata":"Q6123772","brand:wikipedia":"vi:Ngân hàng thương mại cổ phần Sài Gòn Thương Tín",name:"Sacombank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Sampath Bank":{name:"Sampath Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Sampathbankplc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7410095",amenity:"bank"},addTags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/San Diego County Credit Union":{name:"San Diego County Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/SDCCU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7413628",amenity:"bank"},addTags:{amenity:"bank",brand:"San Diego County Credit Union","brand:wikidata":"Q7413628","brand:wikipedia":"en:San Diego County Credit Union",name:"San Diego County Credit Union",short_name:"SDCCU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Santander":{name:"Santander",icon:"maki-bank",imageURL:"https://graph.facebook.com/SantanderBankUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5835668",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"},terms:["santander consumer bank"],matchScore:2,suggestion:true},"amenity/bank/Santander Río":{name:"Santander Río",icon:"maki-bank",imageURL:"https://graph.facebook.com/Santander.Ar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3385268",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander (Argentina)",name:"Santander Río"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Santander Totta":{name:"Santander Totta",icon:"maki-bank",imageURL:"https://graph.facebook.com/santanderpt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854116",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander Totta","brand:wikidata":"Q4854116","brand:wikipedia":"pt:Banco Santander Portugal",name:"Santander Totta"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sberbank":{name:"Sberbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/sberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q205012",amenity:"bank"},addTags:{amenity:"bank",brand:"Sberbank","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Sberbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Scotiabank (Québec)":{name:"Scotiabank (Québec)",icon:"maki-bank",imageURL:"https://graph.facebook.com/scotiabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q451476",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Scotia","brand:wikidata":"Q451476","brand:wikipedia":"fr:Banque Scotia",name:"Banque Scotia"},countryCodes:["ca"],terms:["scotia"],matchScore:2,suggestion:true},"amenity/bank/Scotiabank (non-Québec)":{name:"Scotiabank (non-Québec)",icon:"maki-bank",imageURL:"https://graph.facebook.com/scotiabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q451476",amenity:"bank"},addTags:{amenity:"bank",brand:"Scotiabank","brand:wikidata":"Q451476","brand:wikipedia":"en:Scotiabank",name:"Scotiabank"},terms:["scotia"],matchScore:2,suggestion:true},"amenity/bank/Security Bank":{name:"Security Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SecurityBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7444945",amenity:"bank"},addTags:{amenity:"bank",brand:"Security Bank","brand:wikidata":"Q7444945","brand:wikipedia":"en:Security Bank",name:"Security Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Security Service Federal Credit Union":{name:"Security Service Federal Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/ssfcu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7444993",amenity:"bank"},addTags:{amenity:"bank",brand:"Security Service Federal Credit Union","brand:wikidata":"Q7444993","brand:wikipedia":"en:Security Service Federal Credit Union",name:"Security Service Federal Credit Union",short_name:"SSFCU"},countryCodes:["us"],terms:["security service fcu"],matchScore:2,suggestion:true},"amenity/bank/Service Credit Union":{name:"Service Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/ServiceCreditUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7455675",amenity:"bank"},addTags:{amenity:"bank",brand:"Service Credit Union","brand:wikidata":"Q7455675","brand:wikipedia":"en:Service Credit Union",name:"Service Credit Union"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Servus Credit Union":{name:"Servus Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/ServusCU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2274396",amenity:"bank"},addTags:{alt_name:"Servus",amenity:"bank",brand:"Servus Credit Union","brand:wikidata":"Q2274396","brand:wikipedia":"en:Servus Credit Union",name:"Servus Credit Union"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Seylan Bank":{name:"Seylan Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SeylanBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3532083",amenity:"bank"},addTags:{amenity:"bank",brand:"Seylan Bank","brand:wikidata":"Q3532083","brand:wikipedia":"en:Seylan Bank",name:"Seylan Bank"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Siam Commercial Bank":{name:"Siam Commercial Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/scb.thailand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2038986",amenity:"bank"},addTags:{amenity:"bank",brand:"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"Siam Commercial Bank"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sicoob":{name:"Sicoob",icon:"maki-bank",imageURL:"https://graph.facebook.com/sicooboficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28679754",amenity:"bank"},addTags:{amenity:"bank",brand:"Sicoob","brand:wikidata":"Q28679754","brand:wikipedia":"pt:Sistema de Cooperativas de Crédito do Brasil",name:"Sicoob"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sicredi":{name:"Sicredi",icon:"maki-bank",imageURL:"https://graph.facebook.com/Sicredi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3483060",amenity:"bank"},addTags:{amenity:"bank",brand:"Sicredi","brand:wikidata":"Q3483060","brand:wikipedia":"pt:Sistema de Crédito Cooperativo",name:"Sicredi"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Simmons Bank":{name:"Simmons Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/simmonsbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28402389",amenity:"bank"},addTags:{amenity:"bank",brand:"Simmons Bank","brand:wikidata":"Q28402389","brand:wikipedia":"en:Simmons Bank",name:"Simmons Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Skipton Building Society":{name:"Skipton Building Society",icon:"maki-bank",imageURL:"https://graph.facebook.com/skiptonbs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16931747",amenity:"bank"},addTags:{amenity:"bank",brand:"Skipton Building Society","brand:wikidata":"Q16931747","brand:wikipedia":"en:Skipton Building Society",name:"Skipton Building Society"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Slovenská sporiteľňa":{name:"Slovenská sporiteľňa",icon:"maki-bank",imageURL:"https://graph.facebook.com/SlovenskaSporitelna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7541907",amenity:"bank"},addTags:{amenity:"bank",brand:"Slovenská sporiteľňa","brand:wikidata":"Q7541907","brand:wikipedia":"en:Slovenská sporiteľňa",name:"Slovenská sporiteľňa"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Société Générale":{name:"Société Générale",icon:"maki-bank",imageURL:"https://graph.facebook.com/societegenerale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q270363",amenity:"bank"},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"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Société Marseillaise de Crédit":{name:"Société Marseillaise de Crédit",icon:"maki-bank",imageURL:"https://graph.facebook.com/societemarseillaisedecredit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3488479",amenity:"bank"},addTags:{amenity:"bank",brand:"Société Marseillaise de Crédit","brand:wikidata":"Q3488479","brand:wikipedia":"fr:Société marseillaise de crédit",name:"Société Marseillaise de Crédit"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Société générale Côte d’Ivoire":{name:"Société générale Côte d’Ivoire",icon:"maki-bank",imageURL:"https://graph.facebook.com/societegenerale.cotedivoire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3488360",amenity:"bank"},addTags:{amenity:"bank",brand:"Société générale Côte d’Ivoire","brand:wikidata":"Q3488360","brand:wikipedia":"fr:Société générale Côte d'Ivoire",name:"Société générale Côte d’Ivoire","name:fr":"Société générale Côte d’Ivoire",old_name:"SGBCI"},countryCodes:["ci"],terms:["agence sgbci","sgbci"],matchScore:2,suggestion:true},"amenity/bank/South Indian Bank":{name:"South Indian Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/thesouthindianbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2044973",amenity:"bank"},addTags:{amenity:"bank",brand:"South Indian Bank","brand:wikidata":"Q2044973","brand:wikipedia":"en:South Indian Bank",name:"South Indian Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/South State Bank":{name:"South State Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SouthStateBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55633597",amenity:"bank"},addTags:{amenity:"bank",brand:"South State Bank","brand:wikidata":"Q55633597","brand:wikipedia":"en:South State Bank",name:"South State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Southern Bank":{name:"Southern Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SouthernBank.Since1901/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7569660",amenity:"bank"},addTags:{amenity:"bank",brand:"Southern Bank","brand:wikidata":"Q7569660","brand:wikipedia":"en:Southern Bank",name:"Southern Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sparda-Bank":{name:"Sparda-Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SpardaVerband/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2307136",amenity:"bank"},addTags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Stanbic Bank":{name:"Stanbic Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/standardbankgrp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7597999",amenity:"bank"},addTags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Standard Bank":{name:"Standard Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/standardbankgrp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1576610",amenity:"bank"},addTags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Standard Chartered":{name:"Standard Chartered",icon:"maki-bank",imageURL:"https://graph.facebook.com/StandardChartered/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q548278",amenity:"bank"},addTags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"},terms:["standard chartered bank"],matchScore:2,suggestion:true},"amenity/bank/State Bank of India":{name:"State Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/StateBankOfIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1340361",amenity:"bank"},addTags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"},terms:[],matchScore:2,suggestion:true},"amenity/bank/State Employees Credit Union":{name:"State Employees Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/stateemployeescreditunion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7603196",amenity:"bank"},addTags:{amenity:"bank",brand:"State Employees Credit Union","brand:wikidata":"Q7603196","brand:wikipedia":"en:State Employees Credit Union",name:"State Employees Credit Union",short_name:"SECU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Summit Bank":{name:"Summit Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SummitBankPK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7637775",amenity:"bank"},addTags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SunTrust":{name:"SunTrust",icon:"maki-bank",imageURL:"https://graph.facebook.com/suntrust/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181507",amenity:"bank"},addTags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"},countryCodes:["us"],terms:["suntrust bank"],matchScore:2,suggestion:true},"amenity/bank/Suncorp":{name:"Suncorp",icon:"maki-bank",imageURL:"https://graph.facebook.com/suncorpAUNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24189567",amenity:"bank"},addTags:{amenity:"bank",brand:"Suncorp","brand:wikidata":"Q24189567","brand:wikipedia":"en:Suncorp Bank",name:"Suncorp"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Supervielle":{name:"Supervielle",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSupervielle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5718035",amenity:"bank"},addTags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Swedbank":{name:"Swedbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/swedbanksverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1145493",amenity:"bank"},addTags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"},countryCodes:["ee","lt","lv","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Syndicate Bank":{name:"Syndicate Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/syndicatebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2004088",amenity:"bank"},addTags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Synovus":{name:"Synovus",icon:"maki-bank",imageURL:"https://graph.facebook.com/Synovus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3508889",amenity:"bank"},addTags:{amenity:"bank",brand:"Synovus","brand:wikidata":"Q3508889","brand:wikipedia":"en:Synovus",name:"Synovus"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TCF Bank":{name:"TCF Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/TCFbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669687",amenity:"bank"},addTags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TD Bank":{name:"TD Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/TDBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669891",amenity:"bank"},addTags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TD Canada Trust":{name:"TD Canada Trust",icon:"maki-bank",imageURL:"https://graph.facebook.com/TDBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1080670",amenity:"bank"},addTags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TEB":{name:"TEB",icon:"maki-bank",imageURL:"https://graph.facebook.com/teb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7862447",amenity:"bank"},addTags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TSB":{name:"TSB",icon:"maki-bank",imageURL:"https://graph.facebook.com/TSBbankUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7671560",amenity:"bank"},addTags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Takarékszövetkezet":{name:"Takarékszövetkezet",icon:"maki-bank",imageURL:"https://graph.facebook.com/takarekcsoport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30324674",amenity:"bank"},addTags:{amenity:"bank",brand:"Takarékszövetkezet","brand:wikidata":"Q30324674","brand:wikipedia":"en:TakarékBank",name:"Takarékszövetkezet"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Tangerine":{name:"Tangerine",icon:"maki-bank",imageURL:"https://graph.facebook.com/TangerineBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15238797",amenity:"bank"},addTags:{amenity:"bank",brand:"Tangerine","brand:wikidata":"Q15238797","brand:wikipedia":"en:Tangerine Bank",name:"Tangerine"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Targobank":{name:"Targobank",icon:"maki-bank",imageURL:"https://graph.facebook.com/targobank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1455437",amenity:"bank"},addTags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"},countryCodes:["de","es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Tatra banka":{name:"Tatra banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/tatrabanka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1718069",amenity:"bank"},addTags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Taytay sa Kauswagan":{name:"Taytay sa Kauswagan",icon:"maki-bank",imageURL:"https://graph.facebook.com/tskiofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72361196",amenity:"bank"},addTags:{amenity:"bank",brand:"Taytay sa Kauswagan","brand:wikidata":"Q72361196",name:"Taytay sa Kauswagan"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/The Co-operative Bank":{name:"The Co-operative Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/thecooperativebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3520318",amenity:"bank"},addTags:{amenity:"bank",brand:"The Co-operative Bank","brand:wikidata":"Q3520318","brand:wikipedia":"en:The Co-operative Bank",name:"The Co-operative Bank"},countryCodes:["gb"],terms:["co-op bank"],matchScore:2,suggestion:true},"amenity/bank/Türkiye İş Bankası":{name:"Türkiye İş Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/isbankasi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q909613",amenity:"bank"},addTags:{amenity:"bank",brand:"Türkiye İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"Türkiye İş Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/U.S. Bank":{name:"U.S. Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/usbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q739084",amenity:"bank"},addTags:{amenity:"bank",brand:"U.S. Bank","brand:wikidata":"Q739084","brand:wikipedia":"en:U.S. Bancorp",name:"U.S. Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UBA":{name:"UBA",icon:"maki-bank",imageURL:"https://graph.facebook.com/ubagroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q513457",amenity:"bank"},addTags:{amenity:"bank",brand:"UBA","brand:wikidata":"Q513457","brand:wikipedia":"en:United Bank for Africa",name:"UBA",official_name:"United Bank for Africa"},terms:[],matchScore:2,suggestion:true},"amenity/bank/UBI Banca":{name:"UBI Banca",icon:"maki-bank",imageURL:"https://graph.facebook.com/UBIBanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1476162",amenity:"bank"},addTags:{amenity:"bank",brand:"UBI Banca","brand:wikidata":"Q1476162","brand:wikipedia":"en:UBI Banca",name:"UBI Banca"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UBL":{name:"UBL",icon:"maki-bank",imageURL:"https://graph.facebook.com/UBLUnitedBankLtd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887504",amenity:"bank"},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"},countryCodes:["pk"],terms:["ubl bank"],matchScore:2,suggestion:true},"amenity/bank/UBS":{name:"UBS",icon:"maki-bank",imageURL:"https://graph.facebook.com/UBSglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q193199",amenity:"bank"},addTags:{amenity:"bank",brand:"UBS","brand:wikidata":"Q193199","brand:wikipedia":"en:UBS",name:"UBS"},terms:[],matchScore:2,suggestion:true},"amenity/bank/UCO Bank":{name:"UCO Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/official.ucobank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2005310",amenity:"bank"},addTags:{amenity:"bank",brand:"UCO Bank","brand:wikidata":"Q2005310","brand:wikipedia":"en:UCO Bank",name:"UCO Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UCPB":{name:"UCPB",icon:"maki-bank",imageURL:"https://graph.facebook.com/UCPB.Connect/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887615",amenity:"bank"},addTags:{amenity:"bank",brand:"UCPB","brand:wikidata":"Q7887615","brand:wikipedia":"en:United Coconut Planters Bank",name:"UCPB"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UIB":{name:"UIB",icon:"maki-bank",imageURL:"https://graph.facebook.com/societegenerale.UIB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3550305",amenity:"bank"},addTags:{amenity:"bank",brand:"UIB","brand:wikidata":"Q3550305","brand:wikipedia":"ar:الاتحاد الدولي للبنوك",name:"UIB",official_name:"Union internationale de banques"},countryCodes:["tn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UMB Bank":{name:"UMB Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/504613260851564544/6xEseH7h_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q7865088",amenity:"bank"},addTags:{amenity:"bank",brand:"UMB Bank","brand:wikidata":"Q7865088","brand:wikipedia":"en:UMB Financial Corporation",name:"UMB Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/UNI":{name:"UNI",icon:"maki-bank",imageURL:"https://graph.facebook.com/unicooperation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2933348",amenity:"bank"},addTags:{amenity:"bank",brand:"UNI","brand:wikidata":"Q2933348","brand:wikipedia":"fr:UNI Coopération financière",name:"UNI",official_name:"UNI Coopération financière"},countryCodes:["ca"],terms:["caisse populaire","caisse populaire acadienne"],matchScore:2,suggestion:true},"amenity/bank/UOB":{name:"UOB",icon:"maki-bank",imageURL:"https://graph.facebook.com/uob.sg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2064074",amenity:"bank"},addTags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/USAA":{name:"USAA",icon:"maki-bank",imageURL:"https://graph.facebook.com/USAA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7865722",amenity:"bank"},addTags:{amenity:"bank",brand:"USAA","brand:wikidata":"Q7865722","brand:wikipedia":"en:USAA",name:"USAA",official_name:"United Services Automobile Association"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Ulster Bank":{name:"Ulster Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/UlsterBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2613366",amenity:"bank"},addTags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Umpqua Bank":{name:"Umpqua Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/umpquabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7881772",amenity:"bank"},addTags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UniCredit Bank":{name:"UniCredit Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/938454142338596864/uYxN76cQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q45568",amenity:"bank"},addTags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"},terms:["unicredit","unicredit banca"],matchScore:2,suggestion:true},"amenity/bank/Unicaja Banco":{name:"Unicaja Banco",icon:"maki-bank",imageURL:"https://graph.facebook.com/unicajabanco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2543704",amenity:"bank"},addTags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco",short_name:"Unicaja"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Union Bank of India":{name:"Union Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/UnionBankOfIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2004078",amenity:"bank"},addTags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Union Bank (USA)":{name:"Union Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/unionbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1442804",amenity:"bank"},addTags:{alt_name:"UnionBank",amenity:"bank",brand:"Union Bank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"Union Bank"},countryCodes:["us"],terms:["mufg union bank","union bank of california"],matchScore:2,suggestion:true},"amenity/bank/UnionBank (Philippines)":{name:"UnionBank (Philippines)",icon:"maki-bank",imageURL:"https://graph.facebook.com/unionbankph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7885403",amenity:"bank"},addTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"},countryCodes:["ph"],terms:["union bank of the philippines"],matchScore:2,suggestion:true},"amenity/bank/United Bank (Connecticut)":{name:"United Bank (Connecticut)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUnited%20Bank%20(Connecticut)%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q64825157",amenity:"bank"},addTags:{amenity:"bank",brand:"United Bank","brand:wikidata":"Q64825157",name:"United Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/United Bank (West Virginia)":{name:"United Bank (West Virginia)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/742722956263055361/O8MsoXoX_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16920636",amenity:"bank"},addTags:{amenity:"bank",brand:"United Bank","brand:wikidata":"Q16920636","brand:wikipedia":"en:United Bank (West Virginia)",name:"United Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/United Community Bank":{name:"United Community Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/unitedcommunitybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887635",amenity:"bank"},addTags:{amenity:"bank",brand:"United Community Bank","brand:wikidata":"Q7887635","brand:wikipedia":"en:United Community Bank",name:"United Community Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Vakıfbank":{name:"Vakıfbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/vakifbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1148521",amenity:"bank"},addTags:{amenity:"bank",brand:"Vakıfbank","brand:wikidata":"Q1148521","brand:wikipedia":"en:VakıfBank",name:"Vakıfbank"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Vancity":{name:"Vancity",icon:"maki-bank",imageURL:"https://graph.facebook.com/Vancity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7914085",amenity:"bank"},addTags:{amenity:"bank",brand:"Vancity","brand:wikidata":"Q7914085","brand:wikipedia":"en:Vancity",name:"Vancity",official_name:"Vancouver City Savings Credit Union"},countryCodes:["ca"],terms:["vancouver city savings"],matchScore:2,suggestion:true},"amenity/bank/Veneto Banca":{name:"Veneto Banca",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3127221",amenity:"bank"},addTags:{amenity:"bank",brand:"Veneto Banca","brand:wikidata":"Q3127221","brand:wikipedia":"en:Veneto Banca",name:"Veneto Banca"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Vietcombank":{name:"Vietcombank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ilovevcb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6122995",amenity:"bank"},addTags:{amenity:"bank",brand:"Vietcombank","brand:wikidata":"Q6122995","brand:wikipedia":"en:Vietcombank",name:"Vietcombank"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/VietinBank":{name:"VietinBank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/282125983/logo_Vietinbank_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7928459",amenity:"bank"},addTags:{amenity:"bank",brand:"VietinBank","brand:wikidata":"Q7928459","brand:wikipedia":"en:Vietinbank",name:"VietinBank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Vijaya Bank":{name:"Vijaya Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Vijayabank.in/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003171",amenity:"bank"},addTags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Virgin Money":{name:"Virgin Money",icon:"maki-bank",imageURL:"https://graph.facebook.com/VirginMoneyUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2527746",amenity:"bank"},addTags:{amenity:"bank",brand:"Virgin Money","brand:wikidata":"Q2527746","brand:wikipedia":"en:Virgin Money UK",name:"Virgin Money"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Volksbank Köln Bonn eG":{name:"Volksbank Köln Bonn eG",icon:"maki-bank",imageURL:"https://graph.facebook.com/volksbankkoelnbonn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41680844",amenity:"bank"},addTags:{amenity:"bank",brand:"Volksbank Köln Bonn eG","brand:wikidata":"Q41680844","brand:wikipedia":"de:Volksbank Köln Bonn",name:"Volksbank Köln Bonn eG"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/VÚB":{name:"VÚB",icon:"maki-bank",imageURL:"https://graph.facebook.com/vub.banka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12778981",amenity:"bank"},addTags:{amenity:"bank",brand:"VÚB","brand:wikidata":"Q12778981","brand:wikipedia":"en:Všeobecná úverová banka",name:"VÚB"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Washington Federal":{name:"Washington Federal",icon:"maki-bank",imageURL:"https://graph.facebook.com/wafdbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7971859",amenity:"bank"},addTags:{amenity:"bank",brand:"Washington Federal","brand:wikidata":"Q7971859","brand:wikipedia":"en:Washington Federal",name:"Washington Federal"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Webster Bank":{name:"Webster Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/websterbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7978891",amenity:"bank"},addTags:{amenity:"bank",brand:"Webster Bank","brand:wikidata":"Q7978891","brand:wikipedia":"en:Webster Bank",name:"Webster Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Wells Fargo":{name:"Wells Fargo",icon:"maki-bank",imageURL:"https://graph.facebook.com/wellsfargo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q744149",amenity:"bank"},addTags:{amenity:"bank",brand:"Wells Fargo","brand:wikidata":"Q744149","brand:wikipedia":"en:Wells Fargo",name:"Wells Fargo"},countryCodes:["us"],terms:["wells fargo bank"],matchScore:2,suggestion:true},"amenity/bank/WesBanco":{name:"WesBanco",icon:"maki-bank",imageURL:"https://graph.facebook.com/WesBanco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7983629",amenity:"bank"},addTags:{amenity:"bank",brand:"WesBanco","brand:wikidata":"Q7983629","brand:wikipedia":"en:WesBanco",name:"WesBanco"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Western Union":{name:"Western Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/WesternUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q861042",amenity:"bank"},addTags:{amenity:"bank",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Westpac":{name:"Westpac",icon:"maki-bank",imageURL:"https://graph.facebook.com/Westpac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2031726",amenity:"bank"},addTags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Wings Financial Credit Union":{name:"Wings Financial Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/WingsFinancial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8025267",amenity:"bank"},addTags:{amenity:"bank",brand:"Wings Financial Credit Union","brand:wikidata":"Q8025267","brand:wikipedia":"en:Wings Financial Credit Union",name:"Wings Financial Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yapı Kredi":{name:"Yapı Kredi",icon:"maki-bank",imageURL:"https://graph.facebook.com/YapiKrediAZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8049138",amenity:"bank"},addTags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yorkshire Bank":{name:"Yorkshire Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/yorkshirebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8055678",amenity:"bank"},addTags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yorkshire Building Society":{name:"Yorkshire Building Society",icon:"maki-bank",imageURL:"https://graph.facebook.com/yorkshirebuildingsociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12073381",amenity:"bank"},addTags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Zagrebačka banka":{name:"Zagrebačka banka",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/512220346951299072/bHCa2IWn_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q140381",amenity:"bank"},addTags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Zenith Bank":{name:"Zenith Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Zenithbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5978240",amenity:"bank"},addTags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"},countryCodes:["gb","gh","gm","ng","sl","za"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Zions Bank":{name:"Zions Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/714566769550225408/Xem9Ei7E_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q8072576",amenity:"bank"},addTags:{amenity:"bank",brand:"Zions Bank","brand:wikidata":"Q8072576",name:"Zions Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Ziraat Bankası":{name:"Ziraat Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/ziraatbankasi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q696003",amenity:"bank"},addTags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/mBank":{name:"mBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/mBank.Polska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1160928",amenity:"bank"},addTags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/st.george":{name:"st.george",icon:"maki-bank",imageURL:"https://graph.facebook.com/stgeorgebankaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1606050",amenity:"bank"},addTags:{amenity:"bank",brand:"st.george","brand:wikidata":"Q1606050","brand:wikipedia":"en:St.George Bank",name:"st.george"},countryCodes:["au"],terms:["st.george bank"],matchScore:2,suggestion:true},"amenity/bank/Ålandsbanken":{name:"Ålandsbanken",icon:"maki-bank",imageURL:"https://graph.facebook.com/alandsbankenaland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4349236",amenity:"bank"},addTags:{amenity:"bank",brand:"Ålandsbanken","brand:wikidata":"Q4349236","brand:wikipedia":"sv:Ålandsbanken",name:"Ålandsbanken"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ČSOB":{name:"ČSOB",icon:"maki-bank",imageURL:"https://graph.facebook.com/csob/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q340135",amenity:"bank"},addTags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Česká spořitelna":{name:"Česká spořitelna",icon:"maki-bank",imageURL:"https://graph.facebook.com/ceskasporitelna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q341100",amenity:"bank"},addTags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/İş Bankası":{name:"İş Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/isbankasi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q909613",amenity:"bank"},addTags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Εθνική Τράπεζα":{name:"Εθνική Τράπεζα",icon:"maki-bank",imageURL:"https://graph.facebook.com/ibanknbg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1816028",amenity:"bank"},addTags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:el":"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:el":"Εθνική Τράπεζα","name:en":"National Bank of Greece"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Τράπεζα Πειραιώς":{name:"Τράπεζα Πειραιώς",icon:"maki-bank",imageURL:"https://graph.facebook.com/piraeusbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312",amenity:"bank"},addTags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:el":"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:el":"Τράπεζα Πειραιώς","name:en":"Piraeus Bank",short_name:"Πειραιώς","short_name:el":"Πειραιώς","short_name:en":"Piraeus"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/А-Банк":{name:"А-Банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/abank.dp.ua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28705400",amenity:"bank"},addTags:{amenity:"bank",brand:"А-Банк","brand:wikidata":"Q28705400","brand:wikipedia":"uk:А-Банк",name:"А-Банк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Авангард":{name:"Авангард",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankavangard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122617",amenity:"bank"},addTags:{amenity:"bank",brand:"Авангард","brand:wikidata":"Q62122617",name:"Авангард"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Альфа-Банк (Россия)":{name:"Альфа-Банк (Россия)",icon:"maki-bank",imageURL:"https://graph.facebook.com/alfabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1377835",amenity:"bank"},addTags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:wikidata":"Q1377835","brand:wikipedia":"ru:Альфа-банк",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"},countryCodes:["by","kz","ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Альфа-Банк (Украина)":{name:"Альфа-Банк (Украина)",icon:"maki-bank",imageURL:"https://graph.facebook.com/AlfaBankUkraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16691757",amenity:"bank"},addTags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:ua":"Альфа-Банк","brand:wikidata":"Q16691757","brand:wikipedia":"uk:Альфа-Банк (Україна)",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/БПС-Сбербанк":{name:"БПС-Сбербанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/sberbank.bps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2074915",amenity:"bank"},addTags:{amenity:"bank",brand:"БПС-Сбербанк","brand:wikidata":"Q2074915","brand:wikipedia":"be:БПС-Сбербанк",name:"БПС-Сбербанк"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Банк Дабрабыт":{name:"Банк Дабрабыт",icon:"maki-bank",imageURL:"https://graph.facebook.com/bank.dabrabyt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63981850",amenity:"bank"},addTags:{amenity:"bank",brand:"Банк Дабрабыт","brand:wikidata":"Q63981850",name:"Банк Дабрабыт"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Банка ДСК":{name:"Банка ДСК",icon:"maki-bank",imageURL:"https://graph.facebook.com/dskbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5206146",amenity:"bank"},addTags:{amenity:"bank",brand:"Банка ДСК","brand:bg":"Банка ДСК","brand:en":"DSK Bank","brand:wikidata":"Q5206146","brand:wikipedia":"en:DSK Bank",name:"Банка ДСК","name:bg":"Банка ДСК","name:en":"DSK Bank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Белагропромбанк":{name:"Белагропромбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/belagroprombank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1991373",amenity:"bank"},addTags:{amenity:"bank",brand:"Белагропромбанк","brand:en":"Belagroprom Bank","brand:wikidata":"Q1991373","brand:wikipedia":"be:Белаграпрамбанк",name:"Белагропромбанк","name:en":"Belagroprom Bank"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Беларусбанк":{name:"Беларусбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/asb.belarusbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1997334",amenity:"bank"},addTags:{amenity:"bank",brand:"Беларусбанк","brand:en":"Belarusbank","brand:wikidata":"Q1997334","brand:wikipedia":"en:Belarusbank",name:"Беларусбанк","name:en":"Belarusbank"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Белинвестбанк":{name:"Белинвестбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/belinvestbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4081940",amenity:"bank"},addTags:{amenity:"bank",brand:"Белинвестбанк","brand:wikidata":"Q4081940","brand:wikipedia":"ru:Белинвестбанк",name:"Белинвестбанк"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Бинбанк":{name:"Бинбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/binbank.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4086829",amenity:"bank"},addTags:{amenity:"bank",brand:"Бинбанк","brand:en":"B&N Bank","brand:wikidata":"Q4086829","brand:wikipedia":"en:B&N Bank",name:"Бинбанк","name:en":"B&N Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ВТБ (Россия)":{name:"ВТБ (Россия)",icon:"maki-bank",imageURL:"https://graph.facebook.com/vtbrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1549389",amenity:"bank"},addTags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q1549389","brand:wikipedia":"en:VTB Bank",name:"ВТБ","name:en":"VTB Bank"},countryCodes:["ru"],terms:["втб банк москвы"],matchScore:2,suggestion:true},"amenity/bank/ВТБ (Украина)":{name:"ВТБ (Украина)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%D0%9B%D0%BE%D0%B3%D0%BE%D1%82%D0%B8%D0%BF%20%D0%92%D0%A2%D0%91.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16628820",amenity:"bank"},addTags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q16628820","brand:wikipedia":"uk:ВТБ#ПАТ «ВТБ Банк (Україна)»",name:"ВТБ","name:en":"VTB Bank"},countryCodes:["ua"],terms:["втб банк"],matchScore:2,suggestion:true},"amenity/bank/Возрождение":{name:"Возрождение",icon:"maki-bank",imageURL:"https://graph.facebook.com/Vozrozhdenie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4114952",amenity:"bank"},addTags:{amenity:"bank",brand:"Возрождение","brand:wikidata":"Q4114952","brand:wikipedia":"ru:Возрождение (банк)",name:"Возрождение"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Газпромбанк":{name:"Газпромбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/gpbofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1924338",amenity:"bank"},addTags:{amenity:"bank",brand:"Газпромбанк","brand:en":"Gazprombank","brand:wikidata":"Q1924338","brand:wikipedia":"en:Gazprombank",name:"Газпромбанк","name:en":"Gazprombank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Генбанк":{name:"Генбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/GENBANK.Crimea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122630",amenity:"bank"},addTags:{amenity:"bank",brand:"Генбанк","brand:wikidata":"Q62122630",name:"Генбанк"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Зенит":{name:"Зенит",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankZENIT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4191388",amenity:"bank"},addTags:{amenity:"bank",brand:"Зенит","brand:en":"Zenit","brand:ru":"Зенит","brand:wikidata":"Q4191388","brand:wikipedia":"ru:Зенит (банк)",name:"Зенит","name:en":"Zenit","name:ru":"Зенит"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Казкоммерцбанк":{name:"Казкоммерцбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/halykbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1168179",amenity:"bank"},addTags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Московский индустриальный банк":{name:"Московский индустриальный банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Minbank.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4304145",amenity:"bank"},addTags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Мособлбанк":{name:"Мособлбанк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4304446",amenity:"bank"},addTags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Народный банк":{name:"Народный банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/halykbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1046186",amenity:"bank"},addTags:{amenity:"bank",brand:"Народный банк","brand:wikidata":"Q1046186","brand:wikipedia":"kk:Қазақстан Халық банкі",name:"Народный банк"},countryCodes:["kg","kz","uz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ОТП Банк":{name:"ОТП Банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/otpbank.hu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q912778",amenity:"bank"},addTags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Обединена Българска Банка":{name:"Обединена Българска Банка",icon:"maki-bank",imageURL:"https://graph.facebook.com/UnitedBulgarianBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887555",amenity:"bank"},addTags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Открытие":{name:"Открытие",icon:"maki-bank",imageURL:"https://graph.facebook.com/otkritie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4327204",amenity:"bank"},addTags:{amenity:"bank",brand:"Открытие","brand:wikidata":"Q4327204","brand:wikipedia":"ru:Банк «Финансовая корпорация Открытие»",name:"Открытие"},countryCodes:["ru"],terms:["банк открытие"],matchScore:2,suggestion:true},"amenity/bank/Ощадбанк":{name:"Ощадбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/oschadbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4340839",amenity:"bank"},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"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ПУМБ":{name:"ПУМБ",icon:"maki-bank",imageURL:"https://graph.facebook.com/pumbua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4341156",amenity:"bank"},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"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Почта Банк":{name:"Почта Банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/pochtabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24930461",amenity:"bank"},addTags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Пощенска банка":{name:"Пощенска банка",icon:"maki-bank",imageURL:"https://graph.facebook.com/PostbankBG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7234083",amenity:"bank"},addTags:{amenity:"bank",brand:"Пощенска банка","brand:wikidata":"Q7234083","brand:wikipedia":"bg:Пощенска банка",name:"Пощенска банка","name:en":"Postbank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ПриватБанк":{name:"ПриватБанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/privatbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1515015",amenity:"bank"},addTags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Приднестровский Сбербанк":{name:"Приднестровский Сбербанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/pridnestrovskiy.sberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4378147",amenity:"bank"},addTags:{amenity:"bank",brand:"Приднестровский Сбербанк","brand:en":"Pridnestrovian Savings Bank","brand:ru":"Приднестровский Сбербанк","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Приднестровский Сбербанк","name:en":"Pridnestrovian Savings Bank","name:ru":"Приднестровский Сбербанк"},countryCodes:["md"],terms:["приднестровский cбербанк"],matchScore:2,suggestion:true},"amenity/bank/Приорбанк":{name:"Приорбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Priorbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3919658",amenity:"bank"},addTags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Промсвязьбанк":{name:"Промсвязьбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/psbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q649100",amenity:"bank"},addTags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/РНКБ":{name:"РНКБ",icon:"maki-bank",imageURL:"https://graph.facebook.com/rncb.crimea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16912944",amenity:"bank"},addTags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Райффайзен":{name:"Райффайзен",icon:"maki-bank",imageURL:"https://graph.facebook.com/raiffeisenbankrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4389244",amenity:"bank"},addTags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:ru":"Райффайзен","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank","name:ru":"Райффайзен"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Райффайзен Банк Аваль":{name:"Райффайзен Банк Аваль",icon:"maki-bank",imageURL:"https://graph.facebook.com/raiffeisenua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4389243",amenity:"bank"},addTags:{amenity:"bank",brand:"Райффайзен Банк Аваль","brand:en":"Raiffeisen Bank Aval","brand:ru":"Райффайзен Банк Аваль","brand:ua":"Райффайзен Банк Аваль","brand:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval","name:ru":"Райффайзен Банк Аваль","name:ua":"Райффайзен Банк Аваль"},countryCodes:["ua"],terms:["аваль","банк аваль"],matchScore:2,suggestion:true},"amenity/bank/Росбанк":{name:"Росбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/rosbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1119857",amenity:"bank"},addTags:{amenity:"bank",brand:"Росбанк","brand:en":"Rosbank","brand:ru":"Росбанк","brand:wikidata":"Q1119857","brand:wikipedia":"en:Rosbank",name:"Росбанк","name:en":"Rosbank","name:ru":"Росбанк"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Россельхозбанк":{name:"Россельхозбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/rshb.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3920226",amenity:"bank"},addTags:{amenity:"bank",brand:"Россельхозбанк","brand:en":"Rosselkhozbank","brand:ru":"Россельхозбанк","brand:wikidata":"Q3920226","brand:wikipedia":"en:Russian Agricultural Bank",name:"Россельхозбанк","name:en":"Rosselkhozbank","name:ru":"Россельхозбанк"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Русский Стандарт":{name:"Русский Стандарт",icon:"maki-bank",imageURL:"https://graph.facebook.com/rsbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4400854",amenity:"bank"},addTags:{amenity:"bank",brand:"Русский Стандарт","brand:en":"Russian Standard Bank","brand:ru":"Русский Стандарт","brand:wikidata":"Q4400854","brand:wikipedia":"en:Russian Standard Bank",name:"Русский Стандарт","name:en":"Russian Standard Bank","name:ru":"Русский Стандарт"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Сбербанк":{name:"Сбербанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/sberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q205012",amenity:"bank"},addTags:{amenity:"bank",brand:"Сбербанк","brand:en":"Sberbank","brand:ru":"Сбербанк","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Сбербанк","name:en":"Sberbank","name:ru":"Сбербанк"},countryCodes:["kz","ru"],terms:["cбербанк","cбербанк россии","сбербанк россии"],matchScore:2,suggestion:true},"amenity/bank/Совкомбанк":{name:"Совкомбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/sovcombank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4426566",amenity:"bank"},addTags:{amenity:"bank",brand:"Совкомбанк","brand:en":"Sovcom Bank","brand:ru":"Совкомбанк","brand:wikidata":"Q4426566","brand:wikipedia":"ru:Совкомбанк",name:"Совкомбанк","name:en":"Sovcom Bank","name:ru":"Совкомбанк"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/УкрСиббанк":{name:"УкрСиббанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/UKRSIBBANK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1976290",amenity:"bank"},addTags:{amenity:"bank",brand:"УкрСиббанк","brand:en":"UkrSibbank","brand:uk":"УкрСиббанк","brand:wikidata":"Q1976290","brand:wikipedia":"uk:Ukrsibbank BNP Paribas Group",name:"УкрСиббанк","name:en":"UkrSibbank","name:uk":"УкрСиббанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Укргазбанк":{name:"Укргазбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Ukrgasbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4470692",amenity:"bank"},addTags:{amenity:"bank",brand:"Укргазбанк","brand:en":"Ukrgasbank","brand:uk":"Укргазбанк","brand:wikidata":"Q4470692","brand:wikipedia":"uk:Укргазбанк",name:"Укргазбанк","name:en":"Ukrgasbank","name:uk":"Укргазбанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Укрсоцбанк":{name:"Укрсоцбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Ukrsotsbankofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3547885",amenity:"bank"},addTags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:uk":"Укрсоцбанк","brand:wikidata":"Q3547885","brand:wikipedia":"uk:Укрсоцбанк",name:"Укрсоцбанк","name:en":"Ukrsotsbank","name:uk":"Укрсоцбанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Уралсиб":{name:"Уралсиб",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankuralsib/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4476693",amenity:"bank"},addTags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib Bank","brand:ru":"Уралсиб","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib Bank","name:ru":"Уралсиб"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Хаан банк":{name:"Хаан банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/KhanBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25632240",amenity:"bank"},addTags:{amenity:"bank",brand:"Хаан банк","brand:en":"Khan Bank","brand:mn":"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк","name:en":"Khan Bank","name:mn":"Хаан банк"},countryCodes:["mn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Хоум Кредит":{name:"Хоум Кредит",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1202884588458184704/hGu1kfij_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4500466",amenity:"bank"},addTags:{amenity:"bank",brand:"Хоум Кредит","brand:en":"Home Credit & Finance Bank","brand:ru":"Хоум Кредит","brand:wikidata":"Q4500466","brand:wikipedia":"en:Home Credit & Finance Bank",name:"Хоум Кредит","name:en":"Home Credit & Finance Bank","name:ru":"Хоум Кредит"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק אגוד":{name:"בנק אגוד",icon:"maki-bank",imageURL:"https://graph.facebook.com/igudbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2903265",amenity:"bank"},addTags:{"alt_name:en":"Bank Igud",amenity:"bank",brand:"בנק אגוד","brand:en":"Union Bank of Israel","brand:he":"בנק אגוד","brand:wikidata":"Q2903265","brand:wikipedia":"en:Union Bank of Israel",name:"בנק אגוד","name:en":"Union Bank of Israel","name:he":"בנק אגוד"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק אוצר החייל":{name:"בנק אוצר החייל",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOtsarLogoHE.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2900674",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק אוצר החייל","brand:en":"Bank Otsar Ha-Hayal","brand:he":"בנק אוצר החייל","brand:wikidata":"Q2900674","brand:wikipedia":"en:Bank Otsar Ha-Hayal",name:"בנק אוצר החייל","name:en":"Bank Otsar Ha-Hayal","name:he":"בנק אוצר החייל"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק דיסקונט":{name:"בנק דיסקונט",icon:"maki-bank",imageURL:"https://graph.facebook.com/discountbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q250362",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק דיסקונט לישראל","brand:en":"Israel Discount Bank","brand:he":"בנק דיסקונט לישראל","brand:wikidata":"Q250362","brand:wikipedia":"en:Israel Discount Bank",name:"בנק דיסקונט","name:en":"Bank Discount","name:he":"בנק דיסקונט"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק הפועלים":{name:"בנק הפועלים",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/950970103667052544/Ymilo1Mp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2666775",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק הפועלים","brand:en":"Bank Hapoalim","brand:he":"בנק הפועלים","brand:wikidata":"Q2666775","brand:wikipedia":"en:Bank Hapoalim",name:"בנק הפועלים","name:en":"Bank Hapoalim","name:he":"בנק הפועלים"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק יהד":{name:"בנק יהד",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7187611",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק יהד","brand:en":"Bank Yahav","brand:he":"בנק יהד","brand:wikidata":"Q7187611","brand:wikipedia":"he:בנק יהב",name:"בנק יהד","name:en":"Bank Yahav","name:he":"בנק יהד"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק ירושלים":{name:"בנק ירושלים",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankjerusalem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2900227",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק ירושלים","brand:en":"Bank of Jerusalem","brand:he":"בנק ירושלים","brand:wikidata":"Q2900227","brand:wikipedia":"en:Bank of Jerusalem",name:"בנק ירושלים","name:en":"Bank of Jerusalem","name:he":"בנק ירושלים"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק לאומי":{name:"בנק לאומי",icon:"maki-bank",imageURL:"https://graph.facebook.com/LeumiDigital/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806641",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק לאומי","brand:en":"Bank Leumi","brand:he":"בנק לאומי","brand:wikidata":"Q806641","brand:wikipedia":"en:Bank Leumi",name:"בנק לאומי","name:en":"Bank Leumi","name:he":"בנק לאומי"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/בנק מסד":{name:"בנק מסד",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7187667",amenity:"bank"},addTags:{amenity:"bank",brand:"בנק מסד","brand:en":"Bank Massad","brand:he":"בנק מסד","brand:wikidata":"Q7187667","brand:wikipedia":"en:Bank Massad",name:"בנק מסד","name:en":"Bank Massad","name:he":"בנק מסד"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/הבנק הבינלאומי":{name:"הבנק הבינלאומי",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHaBank%20Hbinleumi%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2777497",amenity:"bank"},addTags:{amenity:"bank",brand:"הבנק הבינלאומי","brand:en":"First International Bank of Israel","brand:he":"הבנק הבינלאומי","brand:wikidata":"Q2777497","brand:wikipedia":"en:First International Bank of Israel",name:"הבנק הבינלאומי","name:en":"First International Bank of Israel","name:he":"הבנק הבינלאומי"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/מזרחי טפחות":{name:"מזרחי טפחות",icon:"maki-bank",imageURL:"https://graph.facebook.com/bank.mizrahi.tefahot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2777129",amenity:"bank"},addTags:{amenity:"bank",brand:"מזרחי טפחות","brand:en":"Mizrahi-Tefahot","brand:he":"מזרחי טפחות","brand:wikidata":"Q2777129","brand:wikipedia":"en:Bank Mizrahi-Tefahot",name:"בנק מזרחי טפחות","name:en":"Bank Mizrahi-Tefahot","name:he":"בנק מזרחי טפחות"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک آینده":{name:"بانک آینده",icon:"maki-bank",imageURL:"https://graph.facebook.com/AyandehBankIran/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5938144",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک آینده","brand:en":"Ayandeh Bank","brand:wikidata":"Q5938144","brand:wikipedia":"en:Ayandeh Bank",name:"بانک آینده","name:en":"Ayandeh Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک اقتصاد نوین":{name:"بانک اقتصاد نوین",icon:"maki-bank",imageURL:"https://graph.facebook.com/NewEconomyBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5323768",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک اقتصاد نوین","brand:en":"EN Bank","brand:wikidata":"Q5323768","brand:wikipedia":"en:EN Bank",name:"بانک اقتصاد نوین","name:en":"EN Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک انصار":{name:"بانک انصار",icon:"maki-bank",imageURL:"https://graph.facebook.com/bank.ansar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5862675",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک انصار","brand:wikidata":"Q5862675","brand:wikipedia":"fa:بانک انصار",name:"بانک انصار"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک ایران زمین":{name:"بانک ایران زمین",icon:"maki-bank",imageURL:"https://graph.facebook.com/503759579674794/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5934423",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک ایران زمین","brand:wikidata":"Q5934423","brand:wikipedia":"en:Iran Zamin Bank",name:"بانک ایران زمین"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک تجارت":{name:"بانک تجارت",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankTjart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7695198",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک تجارت","brand:wikidata":"Q7695198","brand:wikipedia":"en:Tejarat Bank",name:"بانک تجارت"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک توسعه تعاون":{name:"بانک توسعه تعاون",icon:"maki-bank",imageURL:"https://graph.facebook.com/ttbank.official1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5684450",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک توسعه تعاون","brand:wikidata":"Q5684450","brand:wikipedia":"fa:بانک توسعه تعاون",name:"بانک توسعه تعاون"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک رفاه":{name:"بانک رفاه",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRefah-Bank-Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7307083",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک رفاه","brand:en":"Refah Bank","brand:wikidata":"Q7307083","brand:wikipedia":"en:Refah Bank",name:"بانک رفاه","name:en":"Refah Bank"},countryCodes:["ir"],terms:["بانک رفاه کارگران"],matchScore:2,suggestion:true},"amenity/bank/بانک سامان":{name:"بانک سامان",icon:"maki-bank",imageURL:"https://graph.facebook.com/saman.bank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4117676",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سامان","brand:en":"Saman Bank","brand:wikidata":"Q4117676","brand:wikipedia":"en:Saman Bank",name:"بانک سامان","name:en":"Saman Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک سرمایه":{name:"بانک سرمایه",icon:"maki-bank",imageURL:"https://graph.facebook.com/116484438378460/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7424291",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سرمایه","brand:en":"Sarmayeh Bank","brand:wikidata":"Q7424291","brand:wikipedia":"en:Sarmayeh Bank",name:"بانک سرمایه","name:en":"Sarmayeh Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک سپه":{name:"بانک سپه",icon:"maki-bank",imageURL:"https://graph.facebook.com/SepahBankClub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882624",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سپه","brand:en":"Bank Sepah","brand:wikidata":"Q2882624","brand:wikipedia":"en:Bank Sepah",name:"بانک سپه","name:en":"Bank Sepah"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک سینا":{name:"بانک سینا",icon:"maki-bank",imageURL:"https://graph.facebook.com/Esinabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10860246",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک سینا","brand:en":"Sina Bank","brand:wikidata":"Q10860246","brand:wikipedia":"en:Sina Bank",name:"بانک سینا","name:en":"Sina Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک شهر":{name:"بانک شهر",icon:"maki-bank",imageURL:"https://graph.facebook.com/217753181621178/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5941033",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک شهر","brand:en":"Shahr Bank","brand:wikidata":"Q5941033","brand:wikipedia":"fa:بانک شهر",name:"بانک شهر","name:en":"Shahr Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک صادرات":{name:"بانک صادرات",icon:"maki-bank",imageURL:"https://graph.facebook.com/bsi.ir/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882608",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک صادرات","brand:en":"Bank Saderat Iran","brand:wikidata":"Q2882608","brand:wikipedia":"en:Bank Saderat Iran",name:"بانک صادرات","name:en":"Bank Saderat Iran"},countryCodes:["ir"],terms:["بانک صادرات ایران","صادرات"],matchScore:2,suggestion:true},"amenity/bank/بانک قوامین":{name:"بانک قوامین",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10860253",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک قوامین","brand:en":"Ghavamin Bank","brand:wikidata":"Q10860253","brand:wikipedia":"en:Ghavamin Bank",name:"بانک قوامین","name:en":"Ghavamin Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک مسکن":{name:"بانک مسکن",icon:"maki-bank",imageURL:"https://graph.facebook.com/146073072233557/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855942",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک مسکن","brand:en":"Bank Maskan","brand:wikidata":"Q4855942","brand:wikipedia":"en:Bank Maskan",name:"بانک مسکن","name:en":"Bank Maskan"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک ملت":{name:"بانک ملت",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankMellatOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855944",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک ملت","brand:en":"Bank Mellat","brand:wikidata":"Q4855944","brand:wikipedia":"en:Bank Mellat",name:"بانک ملت","name:en":"Bank Mellat"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک ملی":{name:"بانک ملی",icon:"maki-bank",imageURL:"https://graph.facebook.com/www.bmi.ir/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806640",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک ملی","brand:en":"Bank Melli Iran","brand:wikidata":"Q806640","brand:wikipedia":"en:Bank Melli Iran",name:"بانک ملی","name:en":"Bank Melli Iran"},countryCodes:["ir"],terms:["بانک ملی ایران","ملی"],matchScore:2,suggestion:true},"amenity/bank/بانک مهر اقتصاد":{name:"بانک مهر اقتصاد",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5942921",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک مهر اقتصاد","brand:wikidata":"Q5942921","brand:wikipedia":"fa:بانک مهر اقتصاد",name:"بانک مهر اقتصاد","name:en":"Mehr Eqtesad Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک پارسیان":{name:"بانک پارسیان",icon:"maki-bank",imageURL:"https://graph.facebook.com/parsianbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2410404",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک پارسیان","brand:en":"Parsian Bank","brand:wikidata":"Q2410404","brand:wikipedia":"en:Parsian Bank",name:"بانک پارسیان","name:en":"Parsian Bank"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک پاسارگاد":{name:"بانک پاسارگاد",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankpasargadofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855962",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک پاسارگاد","brand:en":"Bank Pasargad","brand:wikidata":"Q4855962","brand:wikipedia":"en:Bank Pasargad",name:"بانک پاسارگاد","name:en":"Bank Pasargad"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/بانک کشاورزی":{name:"بانک کشاورزی",icon:"maki-bank",imageURL:"https://graph.facebook.com/277894095586473/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6395007",amenity:"bank"},addTags:{amenity:"bank",brand:"بانک کشاورزی","brand:en":"Bank Keshavarzi Iran","brand:wikidata":"Q6395007","brand:wikipedia":"en:Bank Keshavarzi Iran",name:"بانک کشاورزی","name:en":"Bank Keshavarzi Iran"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/پست بانک":{name:"پست بانک",icon:"maki-bank",imageURL:"https://graph.facebook.com/149174395175600/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7233625",amenity:"bank"},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"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"amenity/bank/অগ্রণী ব্যাংক":{name:"অগ্রণী ব্যাংক",icon:"maki-bank",imageURL:"https://graph.facebook.com/AgraniBankLimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q517050",amenity:"bank"},addTags:{amenity:"bank",brand:"অগ্রণী ব্যাংক","brand:bn":"অগ্রণী ব্যাংক","brand:en":"Agrani Bank","brand:wikidata":"Q517050","brand:wikipedia":"bn:অগ্রণী ব্যাংক",name:"অগ্রণী ব্যাংক","name:bn":"অগ্রণী ব্যাংক","name:en":"Agrani Bank"},countryCodes:["bd"],terms:["agrani bank","agrani bank limited","agrani bank limited অগ্রণী ব্যাংক লিমিটেড","agrani bank ltd","agrani bank ltd অগ্রণী ব্যাংক লিমিটেড","অগ্রণী ব্যাংক লিমিটেড"],matchScore:2,suggestion:true},"amenity/bank/গ্রামীণ ব্যাংক":{name:"গ্রামীণ ব্যাংক",icon:"maki-bank",imageURL:"https://graph.facebook.com/gramenbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188567",amenity:"bank"},addTags:{amenity:"bank",brand:"গ্রামীণ ব্যাংক","brand:bn":"গ্রামীণ ব্যাংক","brand:en":"Grameen Bank","brand:wikidata":"Q188567","brand:wikipedia":"en:Grameen Bank",name:"গ্রামীণ ব্যাংক","name:bn":"গ্রামীণ ব্যাংক","name:en":"Grameen Bank"},countryCodes:["bd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/জনতা ব্যাংক লিমিটেড":{name:"জনতা ব্যাংক লিমিটেড",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/901845891891568641/8L_3kxxa_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3347028",amenity:"bank"},addTags:{amenity:"bank",brand:"জনতা ব্যাংক লিমিটেড","brand:bn":"জনতা ব্যাংক লিমিটেড","brand:en":"Janata Bank Limited","brand:wikidata":"Q3347028","brand:wikipedia":"bn:জনতা ব্যাংক",name:"জনতা ব্যাংক লিমিটেড","name:bn":"জনতা ব্যাংক লিমিটেড","name:en":"Janata Bank Limited"},countryCodes:["bd"],terms:["janata bank","janata bank limited","janata bank limited জনতা ব্যাংক লিমিটেড"],matchScore:2,suggestion:true},"amenity/bank/বাংলাদেশ কৃষি ব্যাংক":{name:"বাংলাদেশ কৃষি ব্যাংক",icon:"maki-bank",imageURL:"https://graph.facebook.com/bangladeshkrishibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16345932",amenity:"bank"},addTags:{amenity:"bank",brand:"বাংলাদেশ কৃষি ব্যাংক","brand:bn":"বাংলাদেশ কৃষি ব্যাংক","brand:en":"Bangladesh Krishi Bank","brand:wikidata":"Q16345932","brand:wikipedia":"en:Bangladesh Krishi Bank",name:"বাংলাদেশ কৃষি ব্যাংক","name:bn":"বাংলাদেশ কৃষি ব্যাংক","name:en":"Bangladesh Krishi Bank"},countryCodes:["bd"],terms:[],matchScore:2,suggestion:true},"amenity/bank/সোনালী ব্যাংক লিমিটেড":{name:"সোনালী ব্যাংক লিমিটেড",icon:"maki-bank",imageURL:"https://graph.facebook.com/sb.ltd.bd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3350382",amenity:"bank"},addTags:{amenity:"bank",brand:"সোনালী ব্যাংক লিমিটেড","brand:bn":"সোনালী ব্যাংক লিমিটেড","brand:en":"Sonali Bank","brand:wikidata":"Q3350382","brand:wikipedia":"en:Sonali Bank",name:"সোনালী ব্যাংক লিমিটেড","name:bn":"সোনালী ব্যাংক লিমিটেড","name:en":"Sonali Bank"},countryCodes:["bd"],terms:["sonali bank","sonali bank limited","sonali bank limited সোনালী ব্যাংক লিমিটেড"],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงเทพ":{name:"ธนาคารกรุงเทพ",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/924817393049677824/zctRzkcO_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q806483",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกรุงเทพ","brand:en":"Bangkok Bank","brand:th":"ธนาคารกรุงเทพ","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"ธนาคารกรุงเทพ","name:en":"Bangkok Bank","name:th":"ธนาคารกรุงเทพ"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงไทย":{name:"ธนาคารกรุงไทย",icon:"maki-bank",imageURL:"https://graph.facebook.com/krungthaibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q962865",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:th":"ธนาคารกรุงไทย","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank","name:th":"ธนาคารกรุงไทย"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกสิกรไทย":{name:"ธนาคารกสิกรไทย",icon:"maki-bank",imageURL:"https://graph.facebook.com/KBankLive/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q276557",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"Kasikornbank","brand:th":"ธนาคารกสิกรไทย","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"Kasikornbank","name:th":"ธนาคารกสิกรไทย"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารออมสิน":{name:"ธนาคารออมสิน",icon:"maki-bank",imageURL:"https://graph.facebook.com/GSBSociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6579041",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:th":"ธนาคารออมสิน","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank","name:th":"ธนาคารออมสิน"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารไทยพาณิชย์":{name:"ธนาคารไทยพาณิชย์",icon:"maki-bank",imageURL:"https://graph.facebook.com/scb.thailand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2038986",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:th":"ธนาคารไทยพาณิชย์","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank","name:th":"ธนาคารไทยพาณิชย์"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/みずほ銀行":{name:"みずほ銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/902036508672106496/L8rp7WY6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2882956",amenity:"bank"},addTags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:ja":"みずほ銀行","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank","name:ja":"みずほ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ゆうちょ銀行":{name:"ゆうちょ銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJapan%20Post%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q907103",amenity:"bank"},addTags:{amenity:"bank",brand:"ゆうちょ銀行","brand:en":"Japan Post Bank","brand:ja":"ゆうちょ銀行","brand:wikidata":"Q907103","brand:wikipedia":"ja:ゆうちょ銀行",name:"ゆうちょ銀行","name:en":"Japan Post Bank","name:ja":"ゆうちょ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/りそな銀行":{name:"りそな銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FResona%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11281447",amenity:"bank"},addTags:{amenity:"bank",brand:"りそな銀行","brand:en":"Resona Bank","brand:ja":"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行","name:en":"Resona Bank","name:ja":"りそな銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/イオン銀行":{name:"イオン銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1064359056909856774/mH1CT4mL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11286327",amenity:"bank"},addTags:{amenity:"bank",brand:"イオン銀行","brand:en":"Aeon Bank","brand:ja":"イオン銀行","brand:wikidata":"Q11286327","brand:wikipedia":"ja:イオン銀行",name:"イオン銀行","name:en":"Aeon Bank","name:ja":"イオン銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/スルガ銀行":{name:"スルガ銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSuruga%20Bank%20Ltd.%20head%20office%20ac.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11313470",amenity:"bank"},addTags:{amenity:"bank",brand:"スルガ銀行","brand:en":"Suruga Bank","brand:ja":"スルガ銀行","brand:wikidata":"Q11313470","brand:wikipedia":"ja:スルガ銀行",name:"スルガ銀行","name:en":"Suruga Bank","name:ja":"スルガ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三井住友信託銀行":{name:"三井住友信託銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSumitomo%20Mitsui%20Trust%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5215421",amenity:"bank"},addTags:{amenity:"bank",brand:"三井住友信託銀行","brand:en":"Sumitomo Mitsui Trust Bank","brand:wikidata":"Q5215421","brand:wikipedia":"jp:三井住友信託銀行",name:"三井住友信託銀行","name:en":"Sumitomo Mitsui Trust Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三井住友銀行":{name:"三井住友銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/smbc.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2660418",amenity:"bank"},addTags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:ja":"三井住友銀行","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation","name:ja":"三井住友銀行","short_name:en":"SMBC"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三菱UFJ信託銀行":{name:"三菱UFJ信託銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FToyotb.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6883178",amenity:"bank"},addTags:{amenity:"bank",brand:"三菱UFJ信託銀行","brand:en":"Mitsubishi UFJ Trust and Banking Corporation","brand:ja":"三菱UFJ信託銀行","brand:wikidata":"Q6883178","brand:wikipedia":"en:Mitsubishi UFJ Trust and Banking Corporation",name:"三菱UFJ信託銀行","name:en":"Mitsubishi UFJ Trust and Banking Corporation","name:ja":"三菱UFJ信託銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三菱UFJ銀行":{name:"三菱UFJ銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/bk.mufg.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q988284",amenity:"bank"},addTags:{amenity:"bank",brand:"三菱UFJ銀行","brand:en":"MUFG Bank","brand:ja":"三菱UFJ銀行","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱UFJ銀行","name:en":"MUFG Bank","name:ja":"三菱UFJ銀行"},terms:["三菱東京ufj銀行"],matchScore:2,suggestion:true},"amenity/bank/上海商業儲蓄銀行":{name:"上海商業儲蓄銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/SCSB.Pukii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4207208",amenity:"bank"},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"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/上海浦东发展银行":{name:"上海浦东发展银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPSD%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1479076",amenity:"bank"},addTags:{amenity:"bank",brand:"上海浦东发展银行","brand:en":"Shanghai Pudong Development Bank","brand:wikidata":"Q1479076","brand:wikipedia":"zh:上海浦东发展银行",name:"上海浦东发展银行","name:en":"Shanghai Pudong Development Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/东亚银行":{name:"东亚银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20of%20East%20Asia%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806679",amenity:"bank"},addTags:{amenity:"bank",brand:"东亚银行","brand:wikidata":"Q806679","brand:wikipedia":"en:Bank of East Asia",name:"东亚银行","name:en":"Bank of East Asia"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中信银行":{name:"中信银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/CITICFanPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38960",amenity:"bank"},addTags:{amenity:"bank",brand:"中信银行","brand:en":"China CITIC Bank","brand:wikidata":"Q38960","brand:wikipedia":"en:China CITIC Bank",name:"中信银行","name:en":"China CITIC Bank"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国光大银行":{name:"中国光大银行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10873167",amenity:"bank"},addTags:{amenity:"bank",brand:"中国光大银行","brand:en":"China Everbright Bank","brand:wikidata":"Q10873167","brand:wikipedia":"zh:中国光大银行",name:"中国光大银行","name:en":"China Everbright Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/中国农业银行":{name:"中国农业银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAgricultural%20Bank%20of%20China%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26298",amenity:"bank"},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"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国工商银行":{name:"中国工商银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/icbcglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},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"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国建设银行":{name:"中国建设银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/225342697629586/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26299",amenity:"bank"},addTags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"},countryCodes:["cn"],terms:["建设银行"],matchScore:2,suggestion:true},"amenity/bank/中国民生银行":{name:"中国民生银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/chinaminshengbanking/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q911543",amenity:"bank"},addTags:{amenity:"bank",brand:"中国民生银行","brand:en":"China Minsheng Bank","brand:wikidata":"Q911543","brand:wikipedia":"en:China Minsheng Bank",name:"中国民生银行","name:en":"China Minsheng Bank"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国邮政储蓄银行":{name:"中国邮政储蓄银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/362173487941724/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q986744",amenity:"bank"},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"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中国银行":{name:"中国银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofchina.cn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q790068",amenity:"bank"},addTags:{amenity:"bank",brand:"中国银行","brand:en":"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"中国银行","name:en":"Bank of China"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/中國信託商業銀行":{name:"中國信託商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/ctbcbankusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5100191",amenity:"bank"},addTags:{amenity:"bank",brand:"中國信託商業銀行","brand:en":"CTBC Bank","brand:wikidata":"Q5100191","brand:wikipedia":"en:CTBC Bank",name:"中國信託商業銀行","name:en":"CTBC Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/交通银行":{name:"交通银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankofcommunications/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806680",amenity:"bank"},addTags:{amenity:"bank",brand:"交通银行","brand:en":"Bank of Communications","brand:wikidata":"Q806680","brand:wikipedia":"en:Bank of Communications",name:"交通银行","name:en":"Bank of Communications"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/京城商業銀行":{name:"京城商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/ktb2809/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10883132",amenity:"bank"},addTags:{amenity:"bank",brand:"京城商業銀行","brand:wikidata":"Q10883132","brand:wikipedia":"zh:京城商業銀行",name:"京城商業銀行"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/京都中央信用金庫":{name:"京都中央信用金庫",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11374844",amenity:"bank"},addTags:{amenity:"bank",brand:"京都中央信用金庫","brand:en":"Kyoto Chuo Shinkin Bank","brand:wikidata":"Q11374844","brand:wikipedia":"ja:京都中央信用金庫",name:"京都中央信用金庫","name:en":"Kyoto Chuo Shinkin Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/京都銀行":{name:"京都銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11375713",amenity:"bank"},addTags:{amenity:"bank",brand:"京都銀行","brand:en":"Bank of Kyoto","brand:wikidata":"Q11375713","brand:wikipedia":"en:Bank of Kyoto",name:"京都銀行","name:en":"Bank of Kyoto"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/元大商業銀行":{name:"元大商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/yuantabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10889602",amenity:"bank"},addTags:{amenity:"bank",brand:"元大商業銀行","brand:en":"Yuanta Commercial Bank","brand:wikidata":"Q10889602","brand:wikipedia":"zh:元大商業銀行",name:"元大商業銀行","name:en":"Yuanta Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/兆豐國際商業銀行":{name:"兆豐國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q709757",amenity:"bank"},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"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/兴业银行":{name:"兴业银行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1410821",amenity:"bank"},addTags:{amenity:"bank",brand:"兴业银行","brand:wikidata":"Q1410821","brand:wikipedia":"zh:兴业银行",name:"兴业银行"},terms:[],matchScore:2,suggestion:true},"amenity/bank/农业银行":{name:"农业银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAgricultural%20Bank%20of%20China%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q26298",amenity:"bank"},addTags:{amenity:"bank",brand:"农业银行","brand:wikidata":"Q26298","brand:wikipedia":"zh:中国农业银行",name:"农业银行"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/北京银行":{name:"北京银行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q39146",amenity:"bank"},addTags:{amenity:"bank",brand:"北京银行","brand:wikidata":"Q39146","brand:wikipedia":"zh:北京银行",name:"北京银行"},terms:[],matchScore:2,suggestion:true},"amenity/bank/北洋銀行":{name:"北洋銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11402354",amenity:"bank"},addTags:{amenity:"bank",brand:"北洋銀行","brand:en":"North Pacific Bank","brand:wikidata":"Q11402354","brand:wikipedia":"ja:北洋銀行",name:"北洋銀行","name:en":"North Pacific Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/北海道銀行":{name:"北海道銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5878076",amenity:"bank"},addTags:{amenity:"bank",brand:"北海道銀行","brand:en":"Hokkaido Bank","brand:wikidata":"Q5878076","brand:wikipedia":"en:Hokkaido Bank",name:"北海道銀行","name:en":"Hokkaido Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/千葉銀行":{name:"千葉銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1071712",amenity:"bank"},addTags:{amenity:"bank",brand:"千葉銀行","brand:en":"The Chiba Bank","brand:ja":"千葉銀行","brand:wikidata":"Q1071712","brand:wikipedia":"en:Chiba Bank",name:"千葉銀行","name:en":"Chiba Bank","name:ja":"千葉銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台中商業銀行":{name:"台中商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTcbbank%20headoffice.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6136958",amenity:"bank"},addTags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台北富邦商業銀行":{name:"台北富邦商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q697293",amenity:"bank"},addTags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台新國際商業銀行":{name:"台新國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7676420",amenity:"bank"},addTags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/合作金庫商業銀行":{name:"合作金庫商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDepartment%20of%20Business%2C%20Taiwan%20Cooperative%20Bank%2020171216.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q701540",amenity:"bank"},addTags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/國泰世華商業銀行":{name:"國泰世華商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/cathayunitedbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q702656",amenity:"bank"},addTags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/埼玉りそな銀行":{name:"埼玉りそな銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSaitama%20Resona%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4671591",amenity:"bank"},addTags:{amenity:"bank",brand:"埼玉りそな銀行","brand:en":"Saitama Resona Bank","brand:ja":"埼玉りそな銀行","brand:wikidata":"Q4671591","brand:wikipedia":"ja:埼玉りそな銀行",name:"埼玉りそな銀行","name:en":"Saitama Resona Bank","name:ja":"埼玉りそな銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/大眾商業銀行":{name:"大眾商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10937047",amenity:"bank"},addTags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/安泰商業銀行":{name:"安泰商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10946952",amenity:"bank"},addTags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/工商银行":{name:"工商银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/icbcglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},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"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/常陽銀行":{name:"常陽銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q6297774",amenity:"bank"},addTags:{amenity:"bank",brand:"常陽銀行","brand:en":"Joyo Bank","brand:wikidata":"Q6297774","brand:wikipedia":"en:Joyo Bank",name:"常陽銀行","name:en":"Joyo Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/彰化商業銀行":{name:"彰化商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCentral%20Branch%2C%20Chang%20Hwa%20Bank%2020101213.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5071627",amenity:"bank"},addTags:{amenity:"bank",brand:"彰化商業銀行","brand:en":"Chang Hwa Bank","brand:wikidata":"Q5071627","brand:wikipedia":"en:Chang Hwa Bank",name:"彰化商業銀行","name:en":"Chang Hwa Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/招商银行":{name:"招商银行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q1073327",amenity:"bank"},addTags:{amenity:"bank",brand:"招商银行","brand:en":"China Merchants Bank","brand:wikidata":"Q1073327","brand:wikipedia":"en:China Merchants Bank",name:"招商银行","name:en":"China Merchants Bank"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/新生銀行":{name:"新生銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q571997",amenity:"bank"},addTags:{amenity:"bank",brand:"新生銀行","brand:en":"Shinsei Bank","brand:ja":"新生銀行","brand:wikidata":"Q571997","brand:wikipedia":"ja:新生銀行",name:"新生銀行","name:en":"Shinsei Bank","name:ja":"新生銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/日本銀行":{name:"日本銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1695643374/medama_moji_en_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q333101",amenity:"bank"},addTags:{amenity:"bank",brand:"日本銀行","brand:en":"Bank of Japan","brand:wikidata":"Q333101","brand:wikipedia":"ja:日本銀行",name:"日本銀行","name:en":"Bank of Japan"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/東亞銀行":{name:"東亞銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20of%20East%20Asia%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806679",amenity:"bank"},addTags:{amenity:"bank",brand:"東亞銀行","brand:en":"Bank of East Asia","brand:wikidata":"Q806679","brand:wikipedia":"zh:東亞銀行","brand:zh-Hans":"东亚银行","brand:zh-Hant":"東亞銀行",name:"東亞銀行 BEA","name:en":"Bank of East Asia","name:zh-Hans":"东亚银行","name:zh-Hant":"東亞銀行"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/東日本銀行":{name:"東日本銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11527211",amenity:"bank"},addTags:{amenity:"bank",brand:"東日本銀行","brand:en":"Higashi-Nippon Bank","brand:ja":"東日本銀行","brand:wikidata":"Q11527211","brand:wikipedia":"ja:東日本銀行",name:"東日本銀行","name:en":"Higashi-Nippon Bank","name:ja":"東日本銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/板信商業銀行":{name:"板信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11104946",amenity:"bank"},addTags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/横浜銀行":{name:"横浜銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2744340",amenity:"bank"},addTags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/永豐商業銀行":{name:"永豐商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20SinoPac%20logo%2020121103.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4855976",amenity:"bank"},addTags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/渣打國際商業銀行":{name:"渣打國際商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/StandardCharteredTW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267023",amenity:"bank"},addTags:{amenity:"bank",brand:"渣打國際商業銀行","brand:wikidata":"Q62267023",name:"渣打國際商業銀行"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/玉山商業銀行":{name:"玉山商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FE.SUN%20Bank.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5321663",amenity:"bank"},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"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/第一商業銀行":{name:"第一商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/firsthaka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11602128",amenity:"bank"},addTags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/聯邦商業銀行":{name:"聯邦商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/180081655368957/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15927195",amenity:"bank"},addTags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣中小企業銀行":{name:"臺灣中小企業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/tbbdreamplus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15913812",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣土地銀行":{name:"臺灣土地銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/landbank.com.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q717592",amenity:"bank"},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"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣新光商業銀行":{name:"臺灣新光商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/SKBankTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15909616",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/臺灣銀行":{name:"臺灣銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/botlion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706533",amenity:"bank"},addTags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/芝信用金庫":{name:"芝信用金庫",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11614605",amenity:"bank"},addTags:{amenity:"bank",brand:"芝信用金庫","brand:en":"Shiba Shinkin Bank","brand:ja":"芝信用金庫","brand:wikidata":"Q11614605","brand:wikipedia":"ja:芝信用金庫",name:"芝信用金庫","name:en":"Shiba Shinkin Bank","name:ja":"芝信用金庫"},terms:[],matchScore:2,suggestion:true},"amenity/bank/華南商業銀行":{name:"華南商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/hncb008/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11620043",amenity:"bank"},addTags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/近畿大阪銀行":{name:"近畿大阪銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11638628",amenity:"bank"},addTags:{amenity:"bank",brand:"近畿大阪銀行","brand:en":"The Kinki Osaka Bank","brand:ja":"近畿大阪銀行","brand:wikidata":"Q11638628","brand:wikipedia":"ja:近畿大阪銀行",name:"近畿大阪銀行","name:en":"Kinki Osaka Bank","name:ja":"近畿大阪銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/遠東國際商業銀行":{name:"遠東國際商業銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/feibHG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15911143",amenity:"bank"},addTags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/陽信商業銀行":{name:"陽信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11658759",amenity:"bank"},addTags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/静岡銀行":{name:"静岡銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1161550011710287883/klbYfRjt_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7499501",amenity:"bank"},addTags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:ja":"静岡銀行","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank","name:ja":"静岡銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/국민은행":{name:"국민은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/kb.financialgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q496606",amenity:"bank"},addTags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:ko":"국민은행","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Financial Group Inc",name:"국민은행","name:en":"KB Kookmin Bank","name:ko":"국민은행"},countryCodes:["kr"],terms:["국민은행 (gungmin bank)"],matchScore:2,suggestion:true},"amenity/bank/기업은행":{name:"기업은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/SMART.IBK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483855",amenity:"bank"},addTags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:ko":"기업은행","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea","name:ko":"기업은행"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/농협":{name:"농협",icon:"maki-bank",imageURL:"https://graph.facebook.com/nhnonghyupbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15283673",amenity:"bank"},addTags:{amenity:"bank",brand:"농협","brand:en":"NH","brand:ko":"농협","brand:wikidata":"Q15283673","brand:wikipedia":"ko:NH농협은행",name:"농협","name:en":"NH","name:ko":"농협"},countryCodes:["kr"],terms:["nh농협은행"],matchScore:2,suggestion:true},"amenity/bank/새마을금고":{name:"새마을금고",icon:"maki-bank",imageURL:"https://graph.facebook.com/kfcc.kr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12600614",amenity:"bank"},addTags:{amenity:"bank",brand:"새마을금고","brand:ko":"새마을금고","brand:wikidata":"Q12600614","brand:wikipedia":"ko:새마을금고",name:"새마을금고","name:ko":"새마을금고"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/신한은행":{name:"신한은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/ShinhanBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487230",amenity:"bank"},addTags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:ko":"신한은행","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank","name:ko":"신한은행"},countryCodes:["kr"],terms:["신한은행 (sinhan bank)"],matchScore:2,suggestion:true},"amenity/bank/우리은행":{name:"우리은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/wooribank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q494369",amenity:"bank"},addTags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:ko":"우리은행","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank","name:ko":"우리은행"},countryCodes:["kr"],terms:["우리은행 (uri bank)"],matchScore:2,suggestion:true},"amenity/bank/하나은행":{name:"하나은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/KEBHana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q484047",amenity:"bank"},addTags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:ko":"하나은행","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank","name:ko":"하나은행"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bar/All Bar One":{name:"All Bar One",icon:"maki-bar",imageURL:"https://pbs.twimg.com/profile_images/717013484467306497/vjG-lkGe_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4728624",amenity:"bar"},addTags:{amenity:"bar",brand:"All Bar One","brand:wikidata":"Q4728624","brand:wikipedia":"en:All Bar One",name:"All Bar One"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bar/Revolución de Cuba":{name:"Revolución de Cuba",icon:"maki-bar",imageURL:"https://pbs.twimg.com/profile_images/1001476884482396160/3NEm7OnI_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q64024691",amenity:"bar"},addTags:{amenity:"bar",brand:"Revolución de Cuba","brand:wikidata":"Q64024691",name:"Revolución de Cuba"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bar/Revolution":{name:"Revolution",icon:"maki-bar",imageURL:"https://graph.facebook.com/revolutionbars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64024398",amenity:"bar"},addTags:{amenity:"bar",brand:"Revolution","brand:wikidata":"Q64024398",name:"Revolution"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/Call a Bike":{name:"Call a Bike",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/callabikesharing/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q1060525",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/Grid":{name:"Grid",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/Gridbikes/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q62104168",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"Grid","brand:wikidata":"Q62104168",name:"Grid"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/MiBici":{name:"MiBici",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/MiBiciPublica/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q60966987",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"MiBici","brand:wikidata":"Q60966987","brand:wikipedia":"es:MiBici",name:"MiBici"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/Swapfiets":{name:"Swapfiets",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/Swapfiets/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q62104374",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"Swapfiets","brand:wikidata":"Q62104374",name:"Swapfiets"},countryCodes:["be","de","dk","nl"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/metropolradruhr":{name:"metropolradruhr",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/nextbike/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q62104274",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"metropolradruhr","brand:wikidata":"Q62104274",name:"metropolradruhr"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/CADECA":{name:"CADECA",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/CadecaCasasdeCambioOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122716",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"CADECA","brand:wikidata":"Q62122716",name:"CADECA"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/Travelex":{name:"Travelex",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/TravelexUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2337964",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/85°C":{name:"85°C",icon:"maki-cafe",imageURL:"https://graph.facebook.com/85CBakeryCafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644852",amenity:"cafe"},addTags:{alt_name:"85C",amenity:"cafe",brand:"85°C","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop;chinese",name:"85°C",takeaway:"yes"},countryCodes:["au","us"],terms:["85 cafe","85 degrees","85 degrees c","85 degrees celsius","85c bakery cafe","85c daily cafe","85oc"],matchScore:2,suggestion:true},"amenity/cafe/85度C":{name:"85度C",icon:"maki-cafe",imageURL:"https://graph.facebook.com/85CBakeryCafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644852",amenity:"cafe"},addTags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop",name:"85度C","name:en":"85C Bakery Cafe",takeaway:"yes"},countryCodes:["cn","tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Aroma Espresso Bar":{name:"Aroma Espresso Bar",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Israel.Aroma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2909872",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Aroma Espresso Bar","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"Aroma Espresso Bar",takeaway:"yes"},countryCodes:["ca","kz","ro","ua","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Barista":{name:"Barista",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BaristaCoffeeCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q644735",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",cuisine:"coffee_shop",name:"Barista",takeaway:"yes"},countryCodes:["in","lk","mv","np"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Beck's Coffee Shop":{name:"Beck's Coffee Shop",icon:"maki-cafe",imageURL:"https://pbs.twimg.com/profile_images/773289632230322180/YtO0yEVy_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11191008",amenity:"cafe"},addTags:{alt_name:"ベックス・コーヒーショップ",amenity:"cafe",brand:"Beck's Coffee Shop","brand:wikidata":"Q11191008","brand:wikipedia":"ja:BECK'S COFFEE SHOP",cuisine:"coffee_shop",name:"Beck's Coffee Shop",takeaway:"yes"},countryCodes:["jp"],terms:["beck's coffe shop"],matchScore:2,suggestion:true},"amenity/cafe/Biggby Coffee":{name:"Biggby Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BiggbyCoffee.Bhappy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906876",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Biggby Coffee","brand:wikidata":"Q4906876","brand:wikipedia":"en:Biggby Coffee",cuisine:"coffee_shop",name:"Biggby Coffee",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Black Rock Coffee":{name:"Black Rock Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/blackrockcoffeebar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64225934",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Black Rock Coffee","brand:wikidata":"Q64225934",cuisine:"coffee_shop",name:"Black Rock Coffee",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Blue Bottle Coffee":{name:"Blue Bottle Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/bluebottlecoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4928917",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Blue Bottle Coffee","brand:wikidata":"Q4928917","brand:wikipedia":"en:Blue Bottle Coffee",cuisine:"coffee_shop",name:"Blue Bottle Coffee",takeaway:"yes"},countryCodes:["jp","kr","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Bonafide":{name:"Bonafide",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BonafideArgentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122746",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Bonafide","brand:wikidata":"Q62122746",cuisine:"coffee_shop",name:"Bonafide",takeaway:"yes"},countryCodes:["ar","cl"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Boston Tea Party":{name:"Boston Tea Party",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BTPCafes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461358",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Boston Tea Party","brand:wikidata":"Q23461358","brand:wikipedia":"en:Boston Tea Party (café chain)",cuisine:"coffee_shop",name:"Boston Tea Party",takeaway:"yes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Bridgehead":{name:"Bridgehead",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BridgeheadCoffeehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4966509",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Bridgehead","brand:wikidata":"Q4966509","brand:wikipedia":"en:Bridgehead Coffee",cuisine:"coffee_shop",name:"Bridgehead",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Cafe Coffee Day":{name:"Cafe Coffee Day",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafecoffeeday/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5017235",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",cuisine:"coffee_shop",name:"Cafe Coffee Day",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Caffè Nero":{name:"Caffè Nero",icon:"maki-cafe",imageURL:"https://graph.facebook.com/caffenerous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q675808",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",cuisine:"coffee_shop",name:"Caffè Nero",takeaway:"yes"},countryCodes:["gb","ie","tr","us"],terms:["cafe nero"],matchScore:2,suggestion:true},"amenity/cafe/Café Amazon":{name:"Café Amazon",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafeamazonofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43247503",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"Café Amazon",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Café Dépôt":{name:"Café Dépôt",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafedepot.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64924449",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Dépôt","brand:wikidata":"Q64924449",cuisine:"coffee_shop;cake;bagel;bistro",name:"Café Dépôt",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Café Martínez":{name:"Café Martínez",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CafeMartinezSitioOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16540032",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",cuisine:"coffee_shop",name:"Café Martínez",takeaway:"yes"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Caribou Coffee":{name:"Caribou Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cariboucoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5039494",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",cuisine:"coffee_shop",name:"Caribou Coffee",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Chatime":{name:"Chatime",icon:"maki-cafe",imageURL:"https://graph.facebook.com/ChatimeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16829306",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Chatime","brand:en":"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime","brand:zh":"日出茶太",cuisine:"bubble_tea",name:"Chatime","name:en":"Chatime","name:zh":"日出茶太",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/CoCo":{name:"CoCo",icon:"maki-cafe",imageURL:"https://pbs.twimg.com/profile_images/1143629340564963328/C8Axen7r_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q64827025",amenity:"cafe"},addTags:{amenity:"cafe",brand:"CoCo","brand:wikidata":"Q64827025",cuisine:"bubble_tea",name:"Coco",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Fellows":{name:"Coffee Fellows",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeFellowsDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461429",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",cuisine:"coffee_shop",name:"Coffee Fellows",takeaway:"yes"},countryCodes:["de","lu","nl"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee House (Finland)":{name:"Coffee House (Finland)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/raflaamo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11855430",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",cuisine:"coffee_shop",name:"Coffee House",takeaway:"yes"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Island":{name:"Coffee Island",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeIslandUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60867333",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",cuisine:"coffee_shop",name:"Coffee Island",takeaway:"yes"},countryCodes:["cy","gr"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Like":{name:"Coffee Like",icon:"maki-cafe",imageURL:"https://graph.facebook.com/coffeelikerus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55662627",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Like","brand:wikidata":"Q55662627","brand:wikipedia":"ru:Coffee Like",cuisine:"coffee_shop",name:"Coffee Like",takeaway:"yes"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Time":{name:"Coffee Time",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeTimeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5140932",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Time","brand:wikidata":"Q5140932","brand:wikipedia":"en:Coffee Time",cuisine:"coffee_shop",name:"Coffee Time",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee#1":{name:"Coffee#1",icon:"maki-cafe",imageURL:"https://graph.facebook.com/coffeenumber1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22032058",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee#1","brand:wikidata":"Q22032058","brand:wikipedia":"en:Coffee 1",cuisine:"coffee_shop",name:"Coffee#1",takeaway:"yes"},countryCodes:["gb"],terms:["coffee number 1","coffee number one"],matchScore:2,suggestion:true},"amenity/cafe/Cofix":{name:"Cofix",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Cofix.co.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16132717",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cofix","brand:en":"Cofix","brand:he":"קפויקס","brand:wikidata":"Q16132717","brand:wikipedia":"he:קופיקס",cuisine:"coffee_shop",name:"Cofix","name:en":"Cofix","name:he":"קופיקס",takeaway:"yes"},countryCodes:["il","ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Cofizz":{name:"Cofizz",icon:"maki-cafe",imageURL:"https://graph.facebook.com/1253496538019194/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64606270",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cofizz","brand:en":"Cofizz","brand:he":"קופיז","brand:wikidata":"Q64606270",cuisine:"coffee_shop",name:"Cofizz","name:en":"Cofizz","name:he":"קופיז",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Costa":{name:"Costa",icon:"maki-cafe",imageURL:"https://graph.facebook.com/costacoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q608845",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",cuisine:"coffee_shop",name:"Costa",takeaway:"yes"},terms:["costa coffee"],matchScore:2,suggestion:true},"amenity/cafe/Country Style":{name:"Country Style",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CountryStyleCDN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5177435",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",cuisine:"coffee_shop",name:"Country Style",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Cộng Cà Phê":{name:"Cộng Cà Phê",icon:"maki-cafe",imageURL:"https://graph.facebook.com/congcaphe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63864181",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cộng Cà Phê","brand:wikidata":"Q63864181",cuisine:"coffee_shop;vietnamese",name:"Cộng Cà Phê","name:vi":"Cộng Cà Phê",takeaway:"yes"},countryCodes:["kr","vn"],terms:["cong"],matchScore:2,suggestion:true},"amenity/cafe/Dutch Bros. Coffee":{name:"Dutch Bros. Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/dutchbros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5317253",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Dutch Bros. Coffee","brand:wikidata":"Q5317253","brand:wikipedia":"en:Dutch Bros. Coffee",cuisine:"coffee_shop",name:"Dutch Bros. Coffee",takeaway:"only"},countryCodes:["us"],terms:["dutch bros","dutch brothers"],matchScore:2,suggestion:true},"amenity/cafe/Espresso House":{name:"Espresso House",icon:"maki-cafe",imageURL:"https://graph.facebook.com/196870344516819/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10489162",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",cuisine:"coffee_shop",name:"Espresso House",takeaway:"yes"},countryCodes:["dk","fi","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Fran's Café":{name:"Fran's Café",icon:"maki-cafe",imageURL:"https://graph.facebook.com/franscafeoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075645",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Fran's Café","brand:wikidata":"Q62075645",cuisine:"coffee_shop",name:"Fran's Café",takeaway:"yes"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Gloria Jean's":{name:"Gloria Jean's",icon:"maki-cafe",imageURL:"https://graph.facebook.com/gloriajeanscoffeesAUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2666365",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Gloria Jean's","brand:wikidata":"Q2666365","brand:wikipedia":"en:Gloria Jean's Coffees",cuisine:"coffee_shop",name:"Gloria Jean's",official_name:"Gloria Jean's Coffees",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Gong Cha (Vietnam)":{name:"Gong Cha (Vietnam)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{"alt_name:vi":"Cống Trà",amenity:"cafe",brand:"Gong Cha","brand:vi":"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"vi:Gong Cha","brand:zh":"貢茶",cuisine:"bubble_tea",name:"Gong Cha","name:vi":"Gong Cha","name:zh":"貢茶",takeaway:"yes"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Gong Cha (worldwide)":{name:"Gong Cha (worldwide)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"en:Gong Cha","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"Gong Cha","name:zh":"貢茶",takeaway:"yes"},countryCodes:["au","bn","ca","mm","mo","my","nz","ph","sg","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Havanna":{name:"Havanna",icon:"maki-cafe",imageURL:"https://graph.facebook.com/havannaargentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2900869",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Havanna","brand:wikidata":"Q2900869","brand:wikipedia":"es:Havanna",cuisine:"coffee_shop",name:"Havanna",takeaway:"yes"},countryCodes:["ar","pe"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Highlands Coffee":{name:"Highlands Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/highlandscoffeevietnam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5759361",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Highlands Coffee","brand:wikidata":"Q5759361","brand:wikipedia":"vi:Highlands Coffee",cuisine:"coffee_shop;vietnamese",name:"Highlands Coffee","name:en":"Highlands Coffee",takeaway:"yes"},countryCodes:["vn"],terms:["highlands"],matchScore:2,suggestion:true},"amenity/cafe/Hudsons Coffee":{name:"Hudsons Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/HudsonsCoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5929076",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Hudsons Coffee","brand:wikidata":"Q5929076","brand:wikipedia":"en:Hudsons Coffee",cuisine:"coffee_shop",name:"Hudsons Coffee",takeaway:"yes"},countryCodes:["au","sg"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Insomnia":{name:"Insomnia",icon:"maki-cafe",imageURL:"https://graph.facebook.com/InsomniaCoffeeCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6038271",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Insomnia","brand:wikidata":"Q6038271","brand:wikipedia":"en:Insomnia Coffee Company",cuisine:"coffee_shop",name:"Insomnia",takeaway:"yes"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Jamaica Blue":{name:"Jamaica Blue",icon:"maki-cafe",imageURL:"https://graph.facebook.com/JamaicaBlueCafes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24965819",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Jamaica Blue","brand:wikidata":"Q24965819","brand:wikipedia":"en:Jamaica Blue",cuisine:"coffee_shop",name:"Jamaica Blue",takeaway:"yes"},countryCodes:["ae","au","cn","gb","my","nz","sg"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Joe & The Juice":{name:"Joe & The Juice",icon:"maki-cafe",imageURL:"https://graph.facebook.com/joeandthejuice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26221514",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",cuisine:"coffee_shop",name:"Joe & The Juice",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/La Colombe Coffee Roasters":{name:"La Colombe Coffee Roasters",icon:"maki-cafe",imageURL:"https://graph.facebook.com/lacolombecoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461663",amenity:"cafe"},addTags:{amenity:"cafe",brand:"La Colombe Coffee Roasters","brand:wikidata":"Q23461663","brand:wikipedia":"en:La Colombe Coffee Roasters",cuisine:"coffee_shop",name:"La Colombe Coffee Roasters",short_name:"La Colombe",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Le Pain Quotidien":{name:"Le Pain Quotidien",icon:"maki-cafe",imageURL:"https://graph.facebook.com/lepainquotidienusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2046903",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",cuisine:"coffee_shop",name:"Le Pain Quotidien",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Mado":{name:"Mado",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MADOglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17116336",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",cuisine:"coffee_shop",name:"Mado",takeaway:"yes"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/McCafé":{name:"McCafé",icon:"maki-cafe",imageURL:"https://graph.facebook.com/276517512552782/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3114287",amenity:"cafe"},addTags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Michel's Patisserie":{name:"Michel's Patisserie",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MichelsCoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6836235",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Michel's Patisserie","brand:wikidata":"Q6836235","brand:wikipedia":"en:Michel's Patisserie",cuisine:"coffee_shop",name:"Michel's Patisserie",takeaway:"yes"},countryCodes:["au","cn","id","nz"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Mikel":{name:"Mikel",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MikelCoffeeCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16952021",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Mikel","brand:wikidata":"Q16952021","brand:wikipedia":"el:Mikel",cuisine:"coffee_shop",name:"Mikel",takeaway:"yes"},countryCodes:["ae","au","cy","de","eg","gb","gr","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Muffin Break":{name:"Muffin Break",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MuffinBreakUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16964876",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Muffin Break","brand:wikidata":"Q16964876","brand:wikipedia":"en:Muffin Break",cuisine:"coffee_shop",name:"Muffin Break",takeaway:"yes"},countryCodes:["au","gb","in","nz"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Muzz Buzz":{name:"Muzz Buzz",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MuzzBuzzAus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6944483",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Muzz Buzz","brand:wikidata":"Q6944483","brand:wikipedia":"en:Muzz Buzz",cuisine:"coffee_shop",name:"Muzz Buzz",takeaway:"yes"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Patisserie Valerie":{name:"Patisserie Valerie",icon:"maki-cafe",imageURL:"https://graph.facebook.com/patisserievalerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22101966",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Patisserie Valerie","brand:wikidata":"Q22101966","brand:wikipedia":"en:Patisserie Valerie",cuisine:"coffee_shop",name:"Patisserie Valerie",takeaway:"yes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Peet's Coffee":{name:"Peet's Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/peets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1094101",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Peet's Coffee","brand:wikidata":"Q1094101","brand:wikipedia":"en:Peet's Coffee",cuisine:"coffee_shop",name:"Peet's Coffee",takeaway:"yes"},countryCodes:["us"],terms:["peets","peets coffee & tea"],matchScore:2,suggestion:true},"amenity/cafe/Pie Face":{name:"Pie Face",icon:"maki-cafe",imageURL:"https://graph.facebook.com/piefaceaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18166370",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Pie Face","brand:wikidata":"Q18166370","brand:wikipedia":"en:Pie Face",cuisine:"coffee_shop",name:"Pie Face",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Prime":{name:"Prime",icon:"maki-cafe",imageURL:"https://graph.facebook.com/PRIMENATURALFOOD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122839",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Prime","brand:wikidata":"Q62122839",cuisine:"coffee_shop",name:"Prime",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Pronto":{name:"Pronto",icon:"maki-cafe",imageURL:"https://pbs.twimg.com/profile_images/1002458417733120000/lQc9dDWQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11336224",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Pronto","brand:wikidata":"Q11336224","brand:wikipedia":"ja:プロントコーポレーション",cuisine:"coffee_shop",name:"Pronto","name:ja":"プロント",takeaway:"yes"},countryCodes:["jp"],terms:["プロント"],matchScore:2,suggestion:true},"amenity/cafe/Pumpkin":{name:"Pumpkin",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q27825961",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Pumpkin","brand:wikidata":"Q27825961","brand:wikipedia":"en:Pumpkin Café Shop",cuisine:"coffee_shop",name:"Pumpkin",takeaway:"yes"},countryCodes:["gb"],terms:["pumpkin cafe","pumpkin cafe shop"],matchScore:2,suggestion:true},"amenity/cafe/Quickly":{name:"Quickly",icon:"maki-cafe",imageURL:"https://graph.facebook.com/quicklyphilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3771463",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Quickly","brand:en":"Quickly","brand:wikidata":"Q3771463","brand:wikipedia":"en:Quickly","brand:zh":"快可立",cuisine:"bubble_tea",name:"Quickly","name:en":"Quickly","name:zh":"快可立",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Second Cup":{name:"Second Cup",icon:"maki-cafe",imageURL:"https://graph.facebook.com/SecondCup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q862180",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Second Cup","brand:wikidata":"Q862180","brand:wikipedia":"en:Second Cup",cuisine:"coffee_shop",name:"Second Cup",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Segafredo":{name:"Segafredo",icon:"maki-cafe",imageURL:"https://graph.facebook.com/SegafredoZanettiItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21282762",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Segafredo","brand:wikidata":"Q21282762","brand:wikipedia":"it:Segafredo Zanetti",cuisine:"coffee_shop",name:"Segafredo",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Sharetea":{name:"Sharetea",icon:"maki-cafe",imageURL:"https://graph.facebook.com/shareteaglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64827032",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Sharetea","brand:wikidata":"Q64827032",cuisine:"bubble_tea",name:"Sharetea","name:en":"Sharetea","name:zh":"歇腳亭",takeaway:"yes"},countryCodes:["au","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Starbucks":{name:"Starbucks",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Starbucks",official_name:"Starbucks Coffee",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/The Coffee Bean & Tea Leaf":{name:"The Coffee Bean & Tea Leaf",icon:"maki-cafe",imageURL:"https://graph.facebook.com/thecoffeebean/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141384",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Coffee Bean & Tea Leaf","brand:wikidata":"Q1141384","brand:wikipedia":"en:The Coffee Bean & Tea Leaf",cuisine:"coffee_shop",name:"The Coffee Bean & Tea Leaf",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/The Coffee Club":{name:"The Coffee Club",icon:"maki-cafe",imageURL:"https://graph.facebook.com/tccau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7726599",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Coffee Club","brand:wikidata":"Q7726599","brand:wikipedia":"en:The Coffee Club",cuisine:"coffee_shop",name:"The Coffee Club",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/The Coffee House (Vietnam)":{name:"The Coffee House (Vietnam)",icon:"maki-cafe",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FThe%20Coffee%20House%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q60775742",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Coffee House","brand:wikidata":"Q60775742","brand:wikipedia":"en:The Coffee House (coffeehouse chain)",cuisine:"coffee_shop;vietnamese",name:"The Coffee House","name:en":"The Coffee House",takeaway:"yes"},countryCodes:["vn"],terms:["coffee house"],matchScore:2,suggestion:true},"amenity/cafe/The Human Bean":{name:"The Human Bean",icon:"maki-cafe",imageURL:"https://graph.facebook.com/HumanBeanNoCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7740821",amenity:"cafe"},addTags:{amenity:"cafe",brand:"The Human Bean","brand:wikidata":"Q7740821","brand:wikipedia":"en:The Human Bean",cuisine:"coffee_shop",name:"The Human Bean",takeaway:"yes"},countryCodes:["us"],terms:["human bean"],matchScore:2,suggestion:true},"amenity/cafe/Tim Hortons":{name:"Tim Hortons",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TimHortonsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q175106",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Tim Hortons","brand:wikidata":"Q175106","brand:wikipedia":"en:Tim Hortons",cuisine:"coffee_shop",name:"Tim Hortons",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Timothy's":{name:"Timothy's",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TimothysCafes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7807011",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Timothy's","brand:wikidata":"Q7807011","brand:wikipedia":"en:Timothy's World Coffee",cuisine:"coffee_shop",name:"Timothy's",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Tostao’":{name:"Tostao’",icon:"maki-cafe",imageURL:"https://graph.facebook.com/tostaocafeypan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60632476",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Tostao’","brand:wikidata":"Q60632476",cuisine:"coffee_shop",name:"Tostao’","name:es":"Tostao’",official_name:"TOSTAO’ Café & Pan",takeaway:"yes"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Traveler's Coffee":{name:"Traveler's Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TravelersCoffeeMoscow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4051716",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",cuisine:"coffee_shop",name:"Traveler's Coffee",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Trung Nguyên Coffee":{name:"Trung Nguyên Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/trungnguyenlegend/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3541154",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Trung Nguyên","brand:wikidata":"Q3541154","brand:wikipedia":"vi:Trung Nguyên (công ty)",cuisine:"coffee_shop;vietnamese",name:"Trung Nguyên Coffee","name:en":"Trung Nguyen Coffee","name:vi":"Cà phê Trung Nguyên",takeaway:"yes"},countryCodes:["vn"],terms:["trung nguyen"],matchScore:2,suggestion:true},"amenity/cafe/Wayne's Coffee":{name:"Wayne's Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/WaynesCoffeeInternational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2637272",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",cuisine:"coffee_shop",name:"Wayne's Coffee",takeaway:"yes"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Wild Bean Cafe":{name:"Wild Bean Cafe",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q61804826",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Wild Bean Cafe","brand:wikidata":"Q61804826",cuisine:"coffee_shop",name:"Wild Bean Cafe",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Ya Kun Kaya Toast":{name:"Ya Kun Kaya Toast",icon:"maki-cafe",imageURL:"https://graph.facebook.com/yakunkayatoastsg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8046237",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Ya Kun Kaya Toast","brand:wikidata":"Q8046237","brand:wikipedia":"en:Ya Kun Kaya Toast",cuisine:"coffee_shop",name:"Ya Kun Kaya Toast",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Zarraffa's Coffee":{name:"Zarraffa's Coffee",icon:"maki-cafe",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCffee.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q8066878",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Zarraffa's Coffee ","brand:wikidata":"Q8066878","brand:wikipedia":"en:Zarraffa's Coffee",cuisine:"coffee_shop",name:"Zarraffa's Coffee",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Даблби":{name:"Даблби",icon:"maki-cafe",imageURL:"https://graph.facebook.com/DoubleBCoffeeTea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62501686",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Даблби","brand:en":"Double B","brand:wikidata":"Q62501686",cuisine:"coffee_shop",name:"Даблби","name:en":"Double B",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Старбакс":{name:"Старбакс",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Старбакс","name:en":"Starbucks",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Шоколадница":{name:"Шоколадница",icon:"maki-cafe",imageURL:"https://graph.facebook.com/shoko.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30891188",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",cuisine:"coffee_shop",name:"Шоколадница","name:en":"Shokoladnitsa",takeaway:"yes"},countryCodes:["ru"],terms:["шоколад"],matchScore:2,suggestion:true},"amenity/cafe/Штолле":{name:"Штолле",icon:"maki-cafe",imageURL:"https://graph.facebook.com/stollerussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62502236",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Штолле","brand:en":"Stolle","brand:wikidata":"Q62502236",cuisine:"coffee_shop",name:"Штолле","name:en":"Stolle",takeaway:"yes"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/ארומה":{name:"ארומה",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Israel.Aroma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2909872",amenity:"cafe"},addTags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:he":"ארומה","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"ארומה","name:en":"Aroma Espresso Bar","name:he":"ארומה",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/לנדוור":{name:"לנדוור",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafelandwer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6485288",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה לנדוור","brand:en":"Landwer Coffee","brand:he":"קפה לנדוור","brand:wikidata":"Q6485288","brand:wikipedia":"he:קפה לנדוור",cuisine:"coffee_shop",name:"לנדוור","name:en":"Landwer","name:he":"לנדוור",takeaway:"yes"},countryCodes:["il"],terms:["קפה לדנוור"],matchScore:2,suggestion:true},"amenity/cafe/סי קפה":{name:"סי קפה",icon:"maki-cafe",imageURL:"https://graph.facebook.com/242590255775924/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64606227",amenity:"cafe"},addTags:{alt_name:"סי אספרסו","alt_name:en":"Si Espresso","alt_name:he":"סי אספרסו",amenity:"cafe",brand:"סי קפה","brand:en":"Si Cafe","brand:he":"סי קפה","brand:wikidata":"Q64606227",cuisine:"coffee_shop",name:"סי קפה","name:en":"Si Cafe","name:he":"סי קפה",takeaway:"yes"},countryCodes:["il"],terms:["si cafe","si espresso"],matchScore:2,suggestion:true},"amenity/cafe/קפה ג'ו":{name:"קפה ג'ו",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafejoe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6774425",amenity:"cafe"},addTags:{alt_name:"קפה Joe",amenity:"cafe",brand:"קפה ג'ו","brand:en":"Cafe Joe","brand:he":"קפה ג'ו","brand:wikidata":"Q6774425","brand:wikipedia":"he:קפה ג'ו",cuisine:"coffee_shop",name:"קפה ג'ו","name:en":"Cafe Joe","name:he":"קפה ג'ו",takeaway:"yes"},countryCodes:["il"],terms:["ג'ו קפה"],matchScore:2,suggestion:true},"amenity/cafe/קפה גרג":{name:"קפה גרג",icon:"maki-cafe",imageURL:"https://graph.facebook.com/gregcafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43295499",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה גרג","brand:en":"Greg Cafe","brand:he":"קפה גרג","brand:wikidata":"Q43295499","brand:wikipedia":"he:קפה גרג",cuisine:"coffee_shop",name:"קפה גרג","name:en":"Greg Cafe","name:he":"קפה גרג",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/קפה נמרוד":{name:"קפה נמרוד",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafenimrod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64606192",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה נמרוד","brand:en":"Cafe Nimrod","brand:he":"קפה נמרוד","brand:wikidata":"Q64606192",cuisine:"coffee_shop",name:"קפה נמרוד","name:en":"Cafe Nimrod","name:he":"קפה נמרוד",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/קפה קפה":{name:"קפה קפה",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafe.cafe.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5017233",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה קפה","brand:en":"Cafe Cafe","brand:he":"קפה קפה","brand:wikidata":"Q5017233","brand:wikipedia":"he:קפה קפה",cuisine:"coffee_shop",name:"קפה קפה","name:en":"Cafe Cafe","name:he":"קפה קפה",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/רולדין":{name:"רולדין",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q18390972",amenity:"cafe"},addTags:{amenity:"cafe",brand:"רולדין","brand:en":"Roladin","brand:he":"רולדין","brand:wikidata":"Q18390972","brand:wikipedia":"he:רולדין",cuisine:"coffee_shop",name:"רולדין","name:en":"Roladin","name:he":"רולדין",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/คาเฟ่ อเมซอน":{name:"คาเฟ่ อเมซอน",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafeamazonofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43247503",amenity:"cafe"},addTags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:th":"คาเฟ่ อเมซอน","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon","name:th":"คาเฟ่ อเมซอน",takeaway:"yes"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/エクセルシオール カフェ":{name:"エクセルシオール カフェ",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q11289828",amenity:"cafe"},addTags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:ja":"エクセルシオール カフェ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ","name:ja":"エクセルシオール カフェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/カフェ・ド・クリエ":{name:"カフェ・ド・クリエ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/pokkacreate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17219077",amenity:"cafe"},addTags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:ja":"カフェ・ド・クリエ","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",cuisine:"coffee_shop",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE","name:ja":"カフェ・ド・クリエ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/カフェ・ベローチェ":{name:"カフェ・ベローチェ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/ChatnoirCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294597",amenity:"cafe"},addTags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:ja":"カフェ・ベローチェ","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE","name:ja":"カフェ・ベローチェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/コメダ珈琲店":{name:"コメダ珈琲店",icon:"maki-cafe",imageURL:"https://graph.facebook.com/komeda.coffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302679",amenity:"cafe"},addTags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:ja":"コメダ珈琲店","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop","name:ja":"コメダ珈琲店",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/サンマルクカフェ":{name:"サンマルクカフェ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/saintmarccafephilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11305989",amenity:"cafe"},addTags:{"alt_name:en":"Saint Marc Café",amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:ja":"サンマルクカフェ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ","name:ja":"サンマルクカフェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/スターバックス":{name:"スターバックス",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:ja":"スターバックス","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks","name:ja":"スターバックス",official_name:"スターバックスコーヒー","official_name:en":"Starbucks Coffee","official_name:ja":"スターバックスコーヒー",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/タリーズコーヒー":{name:"タリーズコーヒー",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TullysCoffeeShops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3541983",amenity:"cafe"},addTags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:ja":"タリーズコーヒー","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",cuisine:"coffee_shop",name:"タリーズコーヒー","name:en":"Tully's Coffee","name:ja":"タリーズコーヒー",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/ドトールコーヒーショップ":{name:"ドトールコーヒーショップ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Fun.Doutor.Fan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11322732",amenity:"cafe"},addTags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:ja":"ドトールコーヒーショップ","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop","name:ja":"ドトールコーヒーショップ",takeaway:"yes"},countryCodes:["jp"],terms:["ドトールコーヒー"],matchScore:2,suggestion:true},"amenity/cafe/ルノアール":{name:"ルノアール",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q11649991",amenity:"cafe"},addTags:{amenity:"cafe",brand:"ルノアール","brand:en":"Renoir","brand:ja":"ルノアール","brand:wikidata":"Q11649991","brand:wikipedia":"ja:銀座ルノアール",cuisine:"coffee_shop",name:"ルノアール","name:en":"Renoir","name:ja":"ルノアール",official_name:"喫茶室ルノアール","official_name:en":"Ginza Renoir","official_name:ja":"喫茶室ルノアール",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/快可立":{name:"快可立",icon:"maki-cafe",imageURL:"https://graph.facebook.com/quicklyphilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3771463",amenity:"cafe"},addTags:{amenity:"cafe",brand:"快可立","brand:en":"Quickly","brand:wikidata":"Q3771463","brand:wikipedia":"zh:快可立","brand:zh":"快可立",cuisine:"bubble_tea",name:"快可立","name:en":"Quickly","name:zh":"快可立",takeaway:"yes"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/日出茶太":{name:"日出茶太",icon:"maki-cafe",imageURL:"https://graph.facebook.com/ChatimeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16829306",amenity:"cafe"},addTags:{amenity:"cafe",brand:"日出茶太","brand:en":"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"zh:日出茶太","brand:zh":"日出茶太",cuisine:"bubble_tea",name:"日出茶太","name:en":"Chatime","name:zh":"日出茶太",takeaway:"yes"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/星巴克":{name:"星巴克",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"星巴克","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"zh:星巴克","brand:zh":"星巴克",cuisine:"coffee_shop",name:"星巴克","name:en":"Starbucks","name:zh":"星巴克",takeaway:"yes"},countryCodes:["cn","tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/珈琲館":{name:"珈琲館",icon:"maki-cafe",imageURL:"https://graph.facebook.com/kohikancorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11573290",amenity:"cafe"},addTags:{amenity:"cafe",brand:"珈琲館","brand:en":"Kohikan","brand:ja":"珈琲館","brand:wikidata":"Q11573290","brand:wikipedia":"ja:珈琲館",cuisine:"coffee_shop",name:"珈琲館","name:en":"Kohikan","name:ja":"珈琲館",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/貢茶 Gong Cha":{name:"貢茶 Gong Cha",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"貢茶 Gong Cha","brand:en":"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"zh:貢茶 (連鎖店)","brand:zh":"貢茶",cuisine:"bubble_tea",name:"貢茶 Gong Cha","name:en":"Gong Cha","name:zh":"貢茶",takeaway:"yes"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/貢茶 (Japan)":{name:"貢茶 (Japan)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"貢茶","brand:ja":"貢茶","brand:wikidata":"Q5581670","brand:wikipedia":"ja:貢茶","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"貢茶","name:ja":"貢茶","name:zh":"貢茶",takeaway:"yes"},countryCodes:["ja"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/貢茶 (Taiwan)":{name:"貢茶 (Taiwan)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"貢茶","brand:wikidata":"Q5581670","brand:wikipedia":"zh:貢茶 (連鎖店)",cuisine:"bubble_tea",int_name:"Gong Cha",name:"貢茶","name:zh":"貢茶",takeaway:"yes"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/贡茶 (China)":{name:"贡茶 (China)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"贡茶","brand:wikidata":"Q5581670","brand:wikipedia":"zh:贡茶 (连锁店)","brand:zh-Hans":"贡茶","brand:zh-Hant":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"贡茶","name:zh-Hans":"贡茶","name:zh-Hant":"貢茶",takeaway:"yes"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/공차":{name:"공차",icon:"maki-cafe",imageURL:"https://graph.facebook.com/GongChaTaiwan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5581670",amenity:"cafe"},addTags:{amenity:"cafe",brand:"공차","brand:ko":"공차","brand:wikidata":"Q5581670","brand:wikipedia":"ko:공차","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"공차","name:ko":"공차","name:zh":"貢茶",takeaway:"yes"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/스타벅스":{name:"스타벅스",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"스타벅스","brand:en":"Starbucks","brand:ko":"스타벅스","brand:wikidata":"Q37158","brand:wikipedia":"ko:스타벅스",cuisine:"coffee_shop",name:"스타벅스","name:en":"Starbucks","name:ko":"스타벅스",takeaway:"yes"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Alamo":{name:"Alamo",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/AlamoRentACar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1429287",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Alamo","brand:wikidata":"Q1429287","brand:wikipedia":"en:Alamo Rent a Car",name:"Alamo"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Avis":{name:"Avis",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/avis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q791136",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Avis","brand:wikidata":"Q791136","brand:wikipedia":"en:Avis Car Rental",name:"Avis"},terms:["avis car rental"],matchScore:2,suggestion:true},"amenity/car_rental/Budget":{name:"Budget",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/Budget/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1001437",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Budget","brand:wikidata":"Q1001437","brand:wikipedia":"en:Budget Rent a Car",name:"Budget",official_name:"Budget Rent a Car"},terms:["budget car rental"],matchScore:2,suggestion:true},"amenity/car_rental/Dollar":{name:"Dollar",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/DollarCarRental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1235661",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Dollar","brand:wikidata":"Q1235661","brand:wikipedia":"en:Dollar Rent A Car",name:"Dollar",official_name:"Dollar Rent A Car"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Enterprise":{name:"Enterprise",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/Enterprise/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17085454",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Enterprise","brand:wikidata":"Q17085454","brand:wikipedia":"en:Enterprise Rent-A-Car",name:"Enterprise",official_name:"Enterprise Rent-A-Car"},terms:["enterprise car rental"],matchScore:2,suggestion:true},"amenity/car_rental/Europcar":{name:"Europcar",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/europcar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1376256",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Europcar","brand:wikidata":"Q1376256","brand:wikipedia":"en:Europcar",name:"Europcar"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Hertz":{name:"Hertz",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/hertz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1543874",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Hertz","brand:wikidata":"Q1543874","brand:wikipedia":"en:The Hertz Corporation",name:"Hertz"},terms:["hertz car rental"],matchScore:2,suggestion:true},"amenity/car_rental/Localiza":{name:"Localiza",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/localizahertz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10319490",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Localiza","brand:wikidata":"Q10319490","brand:wikipedia":"en:Localiza",name:"Localiza"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/National":{name:"National",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/NationalCarRental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1424142",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"National","brand:wikidata":"Q1424142","brand:wikipedia":"en:National Car Rental",name:"National",official_name:"National Car Rental"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Sixt":{name:"Sixt",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/sixt.rentacar.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q705664",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Sixt","brand:wikidata":"Q705664","brand:wikipedia":"en:Sixt",name:"Sixt"},terms:[],matchScore:2,suggestion:true},"amenity/car_rental/Thrifty":{name:"Thrifty",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/ThriftyCarRental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2429546",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"Thrifty","brand:wikidata":"Q2429546","brand:wikipedia":"en:Thrifty Car Rental",name:"Thrifty"},terms:["thrifty car rental"],matchScore:2,suggestion:true},"amenity/car_rental/オリックスレンタカー":{name:"オリックスレンタカー",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/227957351080226/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11123021",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"オリックスレンタカー","brand:en":"ORIX Car Rental","brand:ja":"オリックスレンタカー","brand:wikidata":"Q11123021","brand:wikipedia":"ja:オリックスレンタカー",name:"オリックスレンタカー","name:en":"ORIX Car Rental","name:ja":"オリックスレンタカー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/トヨタレンタカー":{name:"トヨタレンタカー",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/rentacarjapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11321580",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"トヨタレンタカー","brand:en":"Toyota Rental Car","brand:ja":"トヨタレンタカー","brand:wikidata":"Q11321580","brand:wikipedia":"ja:トヨタレンタリース",name:"トヨタレンタカー","name:en":"Toyota Rental Car","name:ja":"トヨタレンタカー"},countryCodes:["jp"],terms:["トヨタレンタリース"],matchScore:2,suggestion:true},"amenity/car_rental/ニッポンレンタカー":{name:"ニッポンレンタカー",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/115494788561573/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11086533",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"ニッポンレンタカー","brand:en":"Nippon Car Rental","brand:ja":"ニッポンレンタカー","brand:wikidata":"Q11086533","brand:wikipedia":"ja:ニッポンレンタカー",name:"ニッポンレンタカー","name:en":"Nippon Car Rental","name:ja":"ニッポンレンタカー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/car_rental/日産レンタカー":{name:"日産レンタカー",icon:"maki-car-rental",imageURL:"https://graph.facebook.com/231926140196841/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11086838",amenity:"car_rental"},addTags:{amenity:"car_rental",brand:"日産レンタカー","brand:en":"Nissan Car Rental","brand:ja":"日産レンタカー","brand:wikidata":"Q11086838","brand:wikipedia":"ja:日産レンタカー",name:"日産レンタカー","name:en":"Nissan Car Rental","name:ja":"日産レンタカー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/car_sharing/Bluely":{name:"Bluely",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/bluely.eu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16039715",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Bluely","brand:wikidata":"Q16039715","brand:wikipedia":"fr:Bluely",name:"Bluely"},countryCodes:["fr"],terms:["station bluely"],matchScore:2,suggestion:true},"amenity/car_sharing/Enterprise Car Club":{name:"Enterprise Car Club",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/EnterpriseCarClub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5123055",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Enterprise Car Club","brand:wikidata":"Q5123055","brand:wikipedia":"en:Enterprise Car Club",name:"Enterprise Car Club"},countryCodes:["gb"],terms:["city car club"],matchScore:2,suggestion:true},"amenity/car_sharing/Greenwheels":{name:"Greenwheels",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/Greenwheels.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q316782",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Greenwheels","brand:wikidata":"Q316782","brand:wikipedia":"en:Greenwheels",name:"Greenwheels"},countryCodes:["de","nl"],terms:[],matchScore:2,suggestion:true},"amenity/car_sharing/Zipcar":{name:"Zipcar",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/zipcar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1069924",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"Zipcar","brand:wikidata":"Q1069924","brand:wikipedia":"en:Zipcar",name:"Zipcar"},terms:[],matchScore:2,suggestion:true},"amenity/car_sharing/stadtmobil":{name:"stadtmobil",icon:"temaki-sign_and_car",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FStadtmobil%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2327629",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"stadtmobil","brand:wikidata":"Q2327629","brand:wikipedia":"en:Stadtmobil",name:"stadtmobil"},countryCodes:["de"],terms:["stadtmobil carsharing-station"],matchScore:2,suggestion:true},"amenity/car_sharing/teilAuto":{name:"teilAuto",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/teilauto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2400658",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"teilAuto","brand:wikidata":"Q2400658","brand:wikipedia":"de:TeilAuto",name:"teilAuto"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/car_sharing/タイムズカーシェア":{name:"タイムズカーシェア",icon:"temaki-sign_and_car",imageURL:"https://graph.facebook.com/timescar.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17987881",amenity:"car_sharing"},addTags:{amenity:"car_sharing",brand:"タイムズカーシェア","brand:en":"Times Car Share","brand:ja":"タイムズカーシェア","brand:wikidata":"Q17987881","brand:wikipedia":"ja:タイムズカーシェア",name:"タイムズカーシェア","name:en":"Times Car Share","name:ja":"タイムズカーシェア"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/casino/Luckia":{name:"Luckia",icon:"maki-casino",imageURL:"https://pbs.twimg.com/profile_images/1186190309409148929/ySzAHaqd_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q42304308",amenity:"casino"},addTags:{amenity:"casino",brand:"Luckia","brand:wikidata":"Q42304308",name:"Luckia"},terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Blink":{name:"Blink",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/blinkcharging/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q62065645",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Blink","brand:wikidata":"Q62065645",name:"Blink"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/ChargePoint":{name:"ChargePoint",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/ChargePoint/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q5176149",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"ChargePoint","brand:wikidata":"Q5176149","brand:wikipedia":"en:ChargePoint",name:"ChargePoint"},terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Chargy":{name:"Chargy",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/chargy.lu/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q62702950",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Chargy","brand:wikidata":"Q62702950","brand:wikipedia":"lb:Chargy",name:"Chargy"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Circuit électrique":{name:"Circuit électrique",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/lecircuitelectrique/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q24934590",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Circuit électrique","brand:en":"Electric Circuit","brand:fr":"Circuit électrique","brand:wikidata":"Q24934590","brand:wikipedia":"fr:Le Circuit électrique",name:"Circuit électrique","name:en":"Electric Circuit","name:fr":"Circuit électrique"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/E-WALD":{name:"E-WALD",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/E.WALD.emobility/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q61804335",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"E-WALD","brand:wikidata":"Q61804335",name:"E-WALD"},countryCodes:["de"],terms:["e-wald ladestation"],matchScore:2,suggestion:true},"amenity/charging_station/Enel":{name:"Enel",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/enelsharing/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q651222",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Enel","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel"},countryCodes:["it"],terms:["enel - stazione di ricarica"],matchScore:2,suggestion:true},"amenity/charging_station/FLO":{name:"FLO",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/flonetwork/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q64971203",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"FLO","brand:wikidata":"Q64971203",name:"FLO"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/InCharge":{name:"InCharge",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/InChargeSverige/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q71041027",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"InCharge","brand:wikidata":"Q71041027",name:"InCharge"},terms:["vattenfall"],matchScore:2,suggestion:true},"amenity/charging_station/Innogy":{name:"Innogy",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/innogized/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q2124721",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Innogy","brand:wikidata":"Q2124721","brand:wikipedia":"de:Innogy",name:"Innogy"},terms:["rwe"],matchScore:2,suggestion:true},"amenity/charging_station/Source London":{name:"Source London",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/SourceLondon/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q7565133",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Source London","brand:wikidata":"Q7565133","brand:wikipedia":"en:Source London",name:"Source London"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Tesla Supercharger":{name:"Tesla Supercharger",icon:"fas-charging-station",imageURL:"https://pbs.twimg.com/profile_images/489192650474414080/4RxZxsud_bigger.png",geometry:["point"],tags:{"brand:wikidata":"Q17089620",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"},terms:[],matchScore:2,suggestion:true},"amenity/charging_station/bike-energy":{name:"bike-energy",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/bikeenergyaustria/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q67770877",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"bike-energy","brand:wikidata":"Q67770877",name:"bike-energy"},countryCodes:["at","ch","de","fr","it","lu"],terms:["bike-energy ladestation"],matchScore:2,suggestion:true},"amenity/charging_station/eVgo":{name:"eVgo",icon:"fas-charging-station",imageURL:"https://pbs.twimg.com/profile_images/1072541771777888256/E1Ma7jGm_bigger.jpg",geometry:["point"],tags:{"brand:wikidata":"Q61803820",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"eVgo","brand:wikidata":"Q61803820",name:"eVgo"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/childcare/Kids 'R' Kids":{name:"Kids 'R' Kids",icon:"fas-child",imageURL:"https://graph.facebook.com/kidsrkidscorporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65560342",amenity:"childcare"},addTags:{after_school:"yes",amenity:"childcare",brand:"Kids 'R' Kids","brand:wikidata":"Q65560342",grades:"PK",name:"Kids 'R' Kids",nursery:"yes",official_name:"Kids 'R' Kids Learning Academies",preschool:"yes"},countryCodes:["us"],terms:["kids are kids"],matchScore:2,suggestion:true},"amenity/childcare/YMCA Child Care":{name:"YMCA Child Care",icon:"fas-child",imageURL:"https://graph.facebook.com/YMCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157169",amenity:"childcare"},addTags:{amenity:"childcare",brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",name:"YMCA Child Care"},countryCodes:["us"],terms:["ymca","ymca child care center"],matchScore:2,suggestion:true},"amenity/cinema/109シネマズ":{name:"109シネマズ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/438297009664571/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10854269",amenity:"cinema"},addTags:{amenity:"cinema",brand:"109シネマズ","brand:en":"109 Cinemas","brand:ja":"109シネマズ","brand:wikidata":"Q10854269","brand:wikipedia":"ja:109シネマズ",name:"109シネマズ","name:en":"109 Cinemas","name:ja":"109シネマズ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/AMC":{name:"AMC",icon:"maki-cinema",imageURL:"https://graph.facebook.com/amctheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q294721",amenity:"cinema"},addTags:{amenity:"cinema",brand:"AMC","brand:wikidata":"Q294721","brand:wikipedia":"en:AMC Theatres",name:"AMC"},countryCodes:["us"],terms:["amc cinema","amc cinemas","amc theater","amc theaters","amc theatre","amc theatres"],matchScore:2,suggestion:true},"amenity/cinema/B&B Theatres":{name:"B&B Theatres",icon:"maki-cinema",imageURL:"https://pbs.twimg.com/profile_images/796752289859969025/6La-tnNc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4833576",amenity:"cinema"},addTags:{amenity:"cinema",brand:"B&B Theatres","brand:wikidata":"Q4833576","brand:wikipedia":"en:B&B Theatres",name:"B&B Theatres",short_name:"B&B"},countryCodes:["us"],terms:["b&b theaters"],matchScore:2,suggestion:true},"amenity/cinema/CGR":{name:"CGR",icon:"maki-cinema",imageURL:"https://graph.facebook.com/CGRCinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2931406",amenity:"cinema"},addTags:{amenity:"cinema",brand:"CGR","brand:wikidata":"Q2931406","brand:wikipedia":"fr:Circuit Georges-Raymond",name:"CGR Cinémas"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Caribbean Cinemas":{name:"Caribbean Cinemas",icon:"maki-cinema",imageURL:"https://graph.facebook.com/caribbeancinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5039364",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Caribbean Cinemas","brand:wikidata":"Q5039364","brand:wikipedia":"en:Caribbean Cinemas",name:"Caribbean Cinemas"},countryCodes:["ag","do","fr","gy","kn","lc","nl","pa","tt","us"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Century Theatres":{name:"Century Theatres",icon:"maki-cinema",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCentury%20Theater.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2946307",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Century Theatres","brand:wikidata":"Q2946307","brand:wikipedia":"en:Century Theatres",name:"Century Theatres",short_name:"Century"},countryCodes:["us"],terms:["century theater","century theaters","century theatre"],matchScore:2,suggestion:true},"amenity/cinema/CineStar":{name:"CineStar",icon:"maki-cinema",imageURL:"https://graph.facebook.com/CineStarDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q321889",amenity:"cinema"},addTags:{amenity:"cinema",brand:"CineStar","brand:wikidata":"Q321889","brand:wikipedia":"de:Cinestar",name:"CineStar"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinema City":{name:"Cinema City",icon:"maki-cinema",imageURL:"https://graph.facebook.com/CinemaCityPoland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q543651",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"},countryCodes:["cz","hu","pl","ro"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinema NOS":{name:"Cinema NOS",icon:"maki-cinema",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLog%C3%B3tipo%20da%20NOS.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q8063259",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemas NOS","brand:wikidata":"Q8063259","brand:wikipedia":"en:NOS Audiovisuais",name:"Cinema NOS"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemark":{name:"Cinemark",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinemarkoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q707530",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemaxx (Europe)":{name:"Cinemaxx (Europe)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinemaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q881860",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q881860","brand:wikipedia":"de:Cinemaxx",name:"Cinemaxx"},countryCodes:["de","dk"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemaxx (Indonesia)":{name:"Cinemaxx (Indonesia)",icon:"maki-cinema",imageURL:"https://pbs.twimg.com/profile_images/1197244555726336001/2R2OJ6hQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q19942740",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q19942740","brand:wikipedia":"id:Cinemaxx",name:"Cinemaxx"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemex":{name:"Cinemex",icon:"maki-cinema",imageURL:"https://graph.facebook.com/Cinemex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3333072",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cineplanet":{name:"Cineplanet",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cineplanet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5769680",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineplanet","brand:wikidata":"Q5769680","brand:wikipedia":"es:Cineplanet",name:"Cineplanet"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cineplex":{name:"Cineplex",icon:"maki-cinema",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCineplex%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2972807",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineplex","brand:wikidata":"Q2972807","brand:wikipedia":"en:Cineplex Entertainment",name:"Cineplex"},countryCodes:["ca"],terms:["cineplex cinema","cineplex cinemas","cineplex entertainment","cineplex odeon","cineplex theatre","cineplex theatres"],matchScore:2,suggestion:true},"amenity/cinema/Cineplexx":{name:"Cineplexx",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cineplexxAT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q873340",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineplexx","brand:wikidata":"Q873340","brand:wikipedia":"en:Cineplexx Cinemas",name:"Cineplexx"},countryCodes:["at","si"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinepolis":{name:"Cinepolis",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinepolisbrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5686673",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cineworld":{name:"Cineworld",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cineworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5120901",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Event":{name:"Event",icon:"maki-cinema",imageURL:"https://graph.facebook.com/EventCinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5416698",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Event","brand:wikidata":"Q5416698","brand:wikipedia":"en:Event Cinemas",name:"Event",official_name:"Event Cinemas"},countryCodes:["au","nz"],terms:["event cinema"],matchScore:2,suggestion:true},"amenity/cinema/Harkins Theatres":{name:"Harkins Theatres",icon:"maki-cinema",imageURL:"https://graph.facebook.com/harkinstheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5658199",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Harkins Theatres","brand:wikidata":"Q5658199","brand:wikipedia":"en:Harkins Theatres",name:"Harkins Theatres",short_name:"Harkins"},countryCodes:["us"],terms:["harkins theater","harkins theaters","harkins theatre"],matchScore:2,suggestion:true},"amenity/cinema/Hoyts":{name:"Hoyts",icon:"maki-cinema",imageURL:"https://graph.facebook.com/hoytsaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5922976",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Hoyts","brand:wikidata":"Q5922976","brand:wikipedia":"en:Hoyts",name:"Hoyts"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Landmark Theatres":{name:"Landmark Theatres",icon:"maki-cinema",imageURL:"https://graph.facebook.com/LandmarkTheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6484805",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Landmark Theatres","brand:wikidata":"Q6484805","brand:wikipedia":"en:Landmark Theatres",name:"Landmark Theatres",short_name:"Landmark"},countryCodes:["us"],terms:["landmark theater","landmark theaters","landmark theatre"],matchScore:2,suggestion:true},"amenity/cinema/MOVIX":{name:"MOVIX",icon:"maki-cinema",geometry:["point","area"],tags:{"brand:wikidata":"Q11532184",amenity:"cinema"},addTags:{amenity:"cinema",brand:"MOVIX","brand:wikidata":"Q11532184","brand:wikipedia":"ja:松竹マルチプレックスシアターズ",name:"MOVIX",official_name:"松竹マルチプレックスシアターズ","official_name:en":"Shochiku Multiplex Theatres"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Marcus Cinema":{name:"Marcus Cinema",icon:"maki-cinema",imageURL:"https://graph.facebook.com/marcustheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64083352",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Marcus Cinema","brand:wikidata":"Q64083352",name:"Marcus Cinema",short_name:"Marcus"},countryCodes:["us"],terms:["marcus cinemas","marcus theater","marcus theaters","marcus theatre","marcus theatres"],matchScore:2,suggestion:true},"amenity/cinema/Movie Tavern":{name:"Movie Tavern",icon:"maki-cinema",imageURL:"https://graph.facebook.com/movietavern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64083534",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Movie Tavern","brand:wikidata":"Q64083534",name:"Movie Tavern"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Multikino":{name:"Multikino",icon:"maki-cinema",imageURL:"https://graph.facebook.com/MultikinoPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1144802",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Multikino","brand:wikidata":"Q1144802","brand:wikipedia":"pl:Multikino",name:"Multikino"},countryCodes:["lt","lv","pl"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Odeon":{name:"Odeon",icon:"maki-cinema",imageURL:"https://graph.facebook.com/ODEON/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6127470",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"},countryCodes:["gb","gr","ie","it"],terms:["odeon cinema"],matchScore:2,suggestion:true},"amenity/cinema/Pathé Gaumont":{name:"Pathé Gaumont",icon:"maki-cinema",imageURL:"https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3060526",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Pathé Gaumont","brand:wikidata":"Q3060526","brand:wikipedia":"fr:Les cinémas Gaumont Pathé",name:"Pathé Gaumont"},countryCodes:["be","ch","fr","nl"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Regal Cinemas":{name:"Regal Cinemas",icon:"maki-cinema",imageURL:"https://graph.facebook.com/RegalMovies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q835638",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Regal Cinemas","brand:wikidata":"Q835638","brand:wikipedia":"en:Regal Cinemas",name:"Regal Cinemas",short_name:"Regal"},countryCodes:["us"],terms:["regal cinema"],matchScore:2,suggestion:true},"amenity/cinema/Showcase Cinemas":{name:"Showcase Cinemas",icon:"maki-cinema",imageURL:"https://graph.facebook.com/ShowcaseUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7503170",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Showcase Cinemas","brand:wikidata":"Q7503170","brand:wikipedia":"en:Showcase Cinemas",name:"Showcase Cinemas",short_name:"Showcase"},countryCodes:["ar","gb","us"],terms:["showcase cinema"],matchScore:2,suggestion:true},"amenity/cinema/TOHOシネマズ":{name:"TOHOシネマズ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/tohocinemasmagagine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11235261",amenity:"cinema"},addTags:{amenity:"cinema",brand:"TOHOシネマズ","brand:en":"TOHO CINEMAS","brand:ja":"TOHOシネマズ","brand:wikidata":"Q11235261","brand:wikipedia":"ja:TOHOシネマズ",name:"TOHOシネマズ","name:en":"Toho Cinemas","name:ja":"TOHOシネマズ",short_name:"TOHO"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/The Space Cinema":{name:"The Space Cinema",icon:"maki-cinema",imageURL:"https://graph.facebook.com/TheSpaceCinema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3989406",amenity:"cinema"},addTags:{amenity:"cinema",brand:"The Space Cinema","brand:wikidata":"Q3989406","brand:wikipedia":"it:The Space Cinema",name:"The Space Cinema"},countryCodes:["it"],terms:["the space"],matchScore:2,suggestion:true},"amenity/cinema/UGC":{name:"UGC",icon:"maki-cinema",imageURL:"https://pbs.twimg.com/profile_images/966691384865558529/LlqCR8ga_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1643241",amenity:"cinema"},addTags:{amenity:"cinema",brand:"UGC","brand:wikidata":"Q1643241","brand:wikipedia":"fr:Union générale cinématographique",name:"UGC"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Vue (IrelandAndUK)":{name:"Vue (IrelandAndUK)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/VueCinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2535134",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2535134","brand:wikipedia":"en:Vue Cinemas",name:"Vue"},countryCodes:["gb","ie"],terms:["vue cinema","vue cinemas"],matchScore:2,suggestion:true},"amenity/cinema/Vue (Netherlands)":{name:"Vue (Netherlands)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/vuecinemasnl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2421690",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2421690","brand:wikipedia":"nl:Vue (bioscoopketen)",name:"Vue"},countryCodes:["nl"],terms:["vue cinema"],matchScore:2,suggestion:true},"amenity/cinema/イオンシネマ":{name:"イオンシネマ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/aeoncinema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17192792",amenity:"cinema"},addTags:{amenity:"cinema",brand:"イオンシネマ","brand:en":"AEON Cinema","brand:ja":"イオンシネマ","brand:wikidata":"Q17192792","brand:wikipedia":"ja:イオンエンターテイメント",name:"イオンシネマ","name:en":"AEON Cinema","name:ja":"イオンシネマ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/ユナイテッド・シネマ":{name:"ユナイテッド・シネマ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/unitedcinemasgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11345629",amenity:"cinema"},addTags:{amenity:"cinema",brand:"ユナイテッド・シネマ","brand:en":"United Cinemas","brand:ja":"ユナイテッド・シネマ","brand:wikidata":"Q11345629","brand:wikipedia":"ja:ユナイテッド・シネマ",name:"ユナイテッド・シネマ","name:en":"United Cinemas","name:ja":"ユナイテッド・シネマ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Asepeyo":{name:"Asepeyo",icon:"maki-doctor",imageURL:"https://graph.facebook.com/Asepeyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11906879",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Asepeyo","brand:wikidata":"Q11906879","brand:wikipedia":"es:Asepeyo",healthcare:"clinic",name:"Asepeyo"},reference:{key:"amenity",value:"clinic"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/CityMD":{name:"CityMD",icon:"maki-doctor",imageURL:"https://graph.facebook.com/CityMD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22295471",amenity:"clinic"},addTags:{amenity:"clinic",brand:"CityMD","brand:wikidata":"Q22295471","brand:wikipedia":"en:CityMD",healthcare:"clinic",name:"CityMD"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/DaVita Dialysis":{name:"DaVita Dialysis",icon:"maki-doctor",imageURL:"https://graph.facebook.com/davitakidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5207184",amenity:"clinic"},addTags:{amenity:"clinic",brand:"DaVita Dialysis","brand:wikidata":"Q5207184",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"DaVita Dialysis"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["davita","davita dialysis center","davita kidney care"],matchScore:2,suggestion:true},"amenity/clinic/Dialysis Clinic":{name:"Dialysis Clinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/DialysisClinicInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5270633",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Dialysis Clinic","brand:wikidata":"Q5270633","brand:wikipedia":"en:Dialysis Clinic, Inc.",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Dialysis Clinic",short_name:"DCI"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["dialysis clinic inc"],matchScore:2,suggestion:true},"amenity/clinic/Fresenius Kidney Care":{name:"Fresenius Kidney Care",icon:"maki-doctor",imageURL:"https://graph.facebook.com/freseniuskidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650259",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Fresenius Kidney Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Kidney Care"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Fresenius Medical Care":{name:"Fresenius Medical Care",icon:"maki-doctor",imageURL:"https://graph.facebook.com/freseniuskidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650259",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Fresenius Medical Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Medical Care"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Planned Parenthood":{name:"Planned Parenthood",icon:"maki-doctor",imageURL:"https://graph.facebook.com/PlannedParenthood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2553262",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Planned Parenthood","brand:wikidata":"Q2553262","brand:wikipedia":"en:Planned Parenthood",healthcare:"counselling","healthcare:counselling":"antenatal;sexual",name:"Planned Parenthood"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Satellite Healthcare":{name:"Satellite Healthcare",icon:"maki-doctor",imageURL:"https://graph.facebook.com/satellitehealthcare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q50039787",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Satellite Healthcare","brand:wikidata":"Q50039787",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Satellite Healthcare"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["satellite","satellite dialysis"],matchScore:2,suggestion:true},"amenity/clinic/Terveystalo":{name:"Terveystalo",icon:"maki-doctor",imageURL:"https://graph.facebook.com/Terveystalo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11897034",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Terveystalo","brand:wikidata":"Q11897034","brand:wikipedia":"fi:Terveystalo",healthcare:"clinic",name:"Terveystalo"},reference:{key:"amenity",value:"clinic"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/VA Clinic":{name:"VA Clinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/VeteransHealth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6580225",amenity:"clinic"},addTags:{amenity:"clinic",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"clinic","healthcare:for":"veterans",name:"VA Clinic",short_name:"VA"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["department of veterans affairs clinic","veterans administration","veterans administration clinic","veterans affairs","veterans affairs clinic"],matchScore:2,suggestion:true},"amenity/clinic/ZoomCare":{name:"ZoomCare",icon:"maki-doctor",imageURL:"https://graph.facebook.com/ZOOMCare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64120374",amenity:"clinic"},addTags:{amenity:"clinic",brand:"ZoomCare","brand:wikidata":"Q64120374","brand:wikipedia":"en:ZoomCare",healthcare:"clinic",name:"ZoomCare",urgent_care:"yes"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Aspen Dental":{name:"Aspen Dental",icon:"maki-dentist",imageURL:"https://graph.facebook.com/AspenDental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807808",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Aspen Dental","brand:wikidata":"Q4807808","brand:wikipedia":"en:Aspen Dental",healthcare:"dentist",name:"Aspen Dental"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Comfort Dental":{name:"Comfort Dental",icon:"maki-dentist",imageURL:"https://graph.facebook.com/comfortdental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22079521",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Comfort Dental","brand:wikidata":"Q22079521","brand:wikipedia":"en:Comfort Dental",healthcare:"dentist",name:"Comfort Dental"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Dentix":{name:"Dentix",icon:"maki-dentist",imageURL:"https://graph.facebook.com/dentixes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30505320",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Dentix","brand:wikidata":"Q30505320","brand:wikipedia":"es:Dentix",name:"Dentix"},reference:{key:"amenity",value:"dentist"},terms:[],matchScore:2,suggestion:true},"amenity/dentist/Folktandvården":{name:"Folktandvården",icon:"maki-dentist",imageURL:"https://graph.facebook.com/folktandvardenstockholm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10497476",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Folktandvården","brand:wikidata":"Q10497476","brand:wikipedia":"sv:Folktandvården",name:"Folktandvården"},reference:{key:"amenity",value:"dentist"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Kool Smiles":{name:"Kool Smiles",icon:"maki-dentist",imageURL:"https://graph.facebook.com/MyKoolSmiles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6430587",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Kool Smiles","brand:wikidata":"Q6430587","brand:wikipedia":"en:Kool Smiles",healthcare:"dentist",name:"Kool Smiles"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Vitaldent":{name:"Vitaldent",icon:"maki-dentist",imageURL:"https://graph.facebook.com/VitaldentEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5860599",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Vitaldent","brand:wikidata":"Q5860599","brand:wikipedia":"es:Vitaldent",name:"Vitaldent"},reference:{key:"amenity",value:"dentist"},countryCodes:["es","it"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Western Dental":{name:"Western Dental",icon:"maki-dentist",imageURL:"https://graph.facebook.com/WesternDental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64211989",amenity:"dentist"},addTags:{alt_name:"Western Dental & Orthodontics",amenity:"dentist",brand:"Western Dental","brand:wikidata":"Q64211989","brand:wikipedia":"en:Western Dental",healthcare:"dentist",name:"Western Dental"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/doctors/MinuteClinic":{name:"MinuteClinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/minuteclinic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6871141",amenity:"doctors"},addTags:{amenity:"doctors",brand:"MinuteClinic","brand:wikidata":"Q6871141","brand:wikipedia":"en:MinuteClinic",healthcare:"doctor","healthcare:speciality":"community",name:"MinuteClinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/doctors/RediClinic":{name:"RediClinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/RediClinic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64138408",amenity:"doctors"},addTags:{amenity:"doctors",brand:"RediClinic","brand:wikidata":"Q64138408",healthcare:"doctor","healthcare:speciality":"community",name:"RediClinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/doctors/The Little Clinic":{name:"The Little Clinic",icon:"maki-doctor",geometry:["point","area"],tags:{"brand:wikidata":"Q64138262",amenity:"doctors"},addTags:{amenity:"doctors",brand:"The Little Clinic","brand:wikidata":"Q64138262",healthcare:"doctor","healthcare:speciality":"community",name:"The Little Clinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:["little clinic"],matchScore:2,suggestion:true},"amenity/doctors/Walgreens Healthcare Clinic":{name:"Walgreens Healthcare Clinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/walgreens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1591889",amenity:"doctors"},addTags:{amenity:"doctors",brand:"Walgreens","brand:wikidata":"Q1591889",healthcare:"doctor","healthcare:speciality":"community",name:"Walgreens Healthcare Clinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:["healthcare clinic","takecare","takecare clinic","walgreens"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/241 Pizza":{name:"241 Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/241PizzaCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4631768",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"241 Pizza","brand:wikidata":"Q4631768","brand:wikipedia":"en:241 Pizza",cuisine:"pizza",name:"241 Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (Canada)":{name:"A&W (Canada)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/405801939456462/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818848",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (USA)":{name:"A&W (USA)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/awrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q277641",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Andok's":{name:"Andok's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/andokslitsonmanok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267166",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Andok's","brand:wikidata":"Q62267166",cuisine:"chicken",name:"Andok's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Angel's Burger":{name:"Angel's Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/angburgerngbayan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267228",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Angel's Burger","brand:wikidata":"Q62267228",cuisine:"burger",name:"Angel's Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Arby's":{name:"Arby's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/arbys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q630866",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca","tr","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Arctic Circle":{name:"Arctic Circle",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ArcticCircle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4787501",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Arctic Circle","brand:wikidata":"Q4787501","brand:wikipedia":"en:Arctic Circle Restaurants",cuisine:"burger",name:"Arctic Circle",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Au Bon Pain":{name:"Au Bon Pain",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/aubonpain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4818942",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Au Bon Pain","brand:wikidata":"Q4818942","brand:wikipedia":"en:Au Bon Pain",cuisine:"sandwich",name:"Au Bon Pain",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["in","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Auntie Anne's":{name:"Auntie Anne's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/auntieannespretzels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4822010",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's",takeaway:"yes"},countryCodes:["us"],terms:["auntie annes pretzels"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Back Yard Burgers":{name:"Back Yard Burgers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/backyardburgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2878376",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Back Yard Burgers","brand:wikidata":"Q2878376","brand:wikipedia":"en:Back Yard Burgers",cuisine:"burger",name:"Back Yard Burgers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Baja Fresh":{name:"Baja Fresh",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/bajafresh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2880019",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Baja Fresh","brand:wikidata":"Q2880019","brand:wikipedia":"en:Baja Fresh",cuisine:"mexican",name:"Baja Fresh",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Barburrito":{name:"Barburrito",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/BarburritoUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16983668",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Barburrito","brand:wikidata":"Q16983668","brand:wikipedia":"en:Barburrito",cuisine:"mexican",name:"Barburrito",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Bembos":{name:"Bembos",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/bembos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466971",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Bembos","brand:wikidata":"Q466971","brand:wikipedia":"en:Bembos",cuisine:"burger",name:"Bembos",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Big Fernand":{name:"Big Fernand",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/bigfernand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19521346",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Big Fernand","brand:wikidata":"Q19521346","brand:wikipedia":"fr:Big Fernand",cuisine:"burger",name:"Big Fernand",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ae","fr","lu"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Biscuitville":{name:"Biscuitville",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q4917274",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Biscuitville","brand:wikidata":"Q4917274","brand:wikipedia":"en:Biscuitville",cuisine:"american;breakfast",name:"Biscuitville",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Blackjack Pizza":{name:"Blackjack Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/BlackjackPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4923061",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Blackjack Pizza","brand:wikidata":"Q4923061","brand:wikipedia":"en:Blackjack Pizza",cuisine:"pizza",name:"Blackjack Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Blimpie":{name:"Blimpie",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/Blimpie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4926479",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Blimpie","brand:wikidata":"Q4926479","brand:wikipedia":"en:Blimpie",cuisine:"sandwich",name:"Blimpie",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Bob's":{name:"Bob's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/bobsbrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1392113",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ao","br","cl","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Bojangles'":{name:"Bojangles'",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Bojangles1977/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q891163",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'",official_name:"Bojangles' Famous Chicken 'n Biscuits",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Booster Juice":{name:"Booster Juice",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/boosterjuice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943796",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",cuisine:"juice",name:"Booster Juice",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Boston Market":{name:"Boston Market",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/BostonMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q603617",amenity:"fast_food",cuisine:"american;chicken"},addTags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",cuisine:"american;chicken",name:"Boston Market",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Braum's":{name:"Braum's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BraumsIceCreamandDairyStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4958263",amenity:"fast_food",cuisine:"ice_cream"},addTags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",cuisine:"ice_cream",name:"Braum's",shop:"dairy",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Bruegger's Bagels":{name:"Bruegger's Bagels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Brueggers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4978656",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Bruegger's Bagels","brand:wikidata":"Q4978656","brand:wikipedia":"en:Bruegger's",cuisine:"bagel",name:"Bruegger's Bagels",short_name:"Bruegger's",takeaway:"yes"},countryCodes:["us"],terms:["breuger's","breugger's","bruger's","brugger's"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger Fuel":{name:"Burger Fuel",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1036730886979387392/F36y-pRf_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4998537",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burger Fuel","brand:wikidata":"Q4998537","brand:wikipedia":"en:Burger Fuel",cuisine:"burger",name:"Burger Fuel",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ae","iq","nz","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger King":{name:"Burger King",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBurger%20King%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q177054",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Burger King",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:["burguer king"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger Machine":{name:"Burger Machine",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/burgermachineofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4998549",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burger Machine","brand:wikidata":"Q4998549","brand:wikipedia":"en:Burger Machine",cuisine:"burger",name:"Burger Machine",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/BurgerFi":{name:"BurgerFi",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/BurgerFi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q39045496",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"BurgerFi","brand:wikidata":"Q39045496","brand:wikipedia":"en:BurgerFi",cuisine:"burger",name:"BurgerFi",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burgerim":{name:"Burgerim",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/iBurgerim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760354",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burgerim","brand:en":"Burgerim","brand:he":"בורגרים","brand:wikidata":"Q64760354",cuisine:"burger",name:"Burgerim","name:en":"Burgerim","name:he":"בורגרים",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burgers Bar":{name:"Burgers Bar",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/BurgersBarIL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760337",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burgers Bar","brand:en":"Burgers Bar","brand:he":"בורגרס בר","brand:wikidata":"Q64760337",cuisine:"burger","diet:kosher":"yes",name:"Burgers Bar","name:en":"Burgers Bar","name:he":"בורגרס בר",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burgerville":{name:"Burgerville",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/burgerville/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4998570",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Burgerville","brand:wikidata":"Q4998570","brand:wikipedia":"en:Burgerville",cuisine:"burger",name:"Burgerville",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/California Fish Grill":{name:"California Fish Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/CaliforniaFishGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55606435",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"California Fish Grill","brand:wikidata":"Q55606435","brand:wikipedia":"en:California Fish Grill",cuisine:"seafood",name:"California Fish Grill",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Captain D's":{name:"Captain D's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/CaptainDs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5036616",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Captain D's","brand:wikidata":"Q5036616","brand:wikipedia":"en:Captain D's",cuisine:"seafood",name:"Captain D's",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Carl's Jr.":{name:"Carl's Jr.",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/carlsjr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1043486",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Carl's Jr.","brand:wikidata":"Q1043486","brand:wikipedia":"en:Carl's Jr.",cuisine:"burger",name:"Carl's Jr.",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Charleys Philly Steaks":{name:"Charleys Philly Steaks",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/CharleysPhillySteaks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1066777",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Charleys Philly Steaks","brand:wikidata":"Q1066777","brand:wikipedia":"en:Charleys Philly Steaks",cuisine:"sandwich",name:"Charleys Philly Steaks",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["charleys"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Checkers":{name:"Checkers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/checkersrallys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63919315",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Checkers","brand:wikidata":"Q63919315",cuisine:"burger",name:"Checkers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chester's":{name:"Chester's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/ChestersIntl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5093401",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chester's","brand:wikidata":"Q5093401","brand:wikipedia":"en:Chester's International",cuisine:"chicken",name:"Chester's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:["chesters chicken"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chick-fil-A":{name:"Chick-fil-A",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/ChickfilA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q491516",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chick-fil-A","brand:wikidata":"Q491516","brand:wikipedia":"en:Chick-fil-A",cuisine:"chicken",name:"Chick-fil-A",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chicken Express":{name:"Chicken Express",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/chickenexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5096235",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chicken Express","brand:wikidata":"Q5096235","brand:wikipedia":"en:Chicken Express",cuisine:"chicken",name:"Chicken Express",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chicken Treat":{name:"Chicken Treat",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/ChickenTreat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5096274",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chicken Treat","brand:wikidata":"Q5096274","brand:wikipedia":"en:Chicken Treat",cuisine:"chicken",name:"Chicken Treat",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/China Wok":{name:"China Wok",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ChinaWokPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5766542",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"China Wok","brand:wikidata":"Q5766542","brand:wikipedia":"es:China Wok",cuisine:"chinese",name:"China Wok",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Chipotle":{name:"Chipotle",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/chipotle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q465751",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle",official_name:"Chipotle Mexican Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Chopt":{name:"Chopt",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/choptsalad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17509305",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Chopt","brand:wikidata":"Q17509305","brand:wikipedia":"en:Chopt",cuisine:"salad",name:"Chopt",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Chowking":{name:"Chowking",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/chowkingph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1076816",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking",takeaway:"yes"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Church's Chicken":{name:"Church's Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/churchschicken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1089932",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Cinnabon":{name:"Cinnabon",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Cinnabon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1092539",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Cinnabon","brand:wikidata":"Q1092539","brand:wikipedia":"en:Cinnabon",cuisine:"dessert",name:"Cinnabon",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/CoCo壱番屋":{name:"CoCo壱番屋",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/cocoichicurry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5986105",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"CoCo壱番屋","brand:en":"CoCo Ichibanya","brand:ja":"CoCo壱番屋","brand:wikidata":"Q5986105","brand:wikipedia":"en:Ichibanya",cuisine:"japanese",name:"CoCo壱番屋","name:en":"CoCo Ichibanya","name:ja":"CoCo壱番屋",takeaway:"yes"},countryCodes:["cn","jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Cook Out":{name:"Cook Out",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/CookOut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5166992",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Cook Out","brand:wikidata":"Q5166992","brand:wikipedia":"en:Cook Out (restaurant)",cuisine:"american",name:"Cook Out",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Così":{name:"Così",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/getcosi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175243",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Così","brand:wikidata":"Q5175243","brand:wikipedia":"en:Così (restaurant)",cuisine:"sandwich",name:"Così",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Cultures":{name:"Cultures",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/culturesrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64876898",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Cultures","brand:wikidata":"Q64876898",cuisine:"sandwich",name:"Cultures",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Culver's":{name:"Culver's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/culvers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143589",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",cuisine:"burger",name:"Culver's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/DQ Grill & Chill":{name:"DQ Grill & Chill",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/dairyqueen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141226",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"DQ Grill & Chill","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"DQ Grill & Chill",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},countryCodes:["ca","us"],terms:["dairy queen chill & grill"],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Dairy Queen":{name:"Dairy Queen",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/dairyqueen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141226",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"Dairy Queen",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},terms:["dq"],matchScore:2,suggestion:true},"amenity/fast_food/donut/Daylight Donuts":{name:"Daylight Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DaylightDonutFlourCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48970508",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Debonairs Pizza":{name:"Debonairs Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/DebonairsPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65079407",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Debonairs Pizza","brand:wikidata":"Q65079407","brand:wikipedia":"en:Debonairs Pizza",cuisine:"pizza",name:"Debonairs Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ae","bw","ke","ls","mu","mw","mz","na","ng","sd","ss","sz","za","zm"],terms:["debonairs"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Del Taco":{name:"Del Taco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/deltaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1183818",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Dig Inn":{name:"Dig Inn",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/diginnmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28226241",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Dig Inn","brand:wikidata":"Q28226241","brand:wikipedia":"en:Dig Inn",cuisine:"regional",name:"Dig Inn",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Domino's":{name:"Domino's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Dominos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839466",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Domino's","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["dominos pizza"],matchScore:2,suggestion:true},"amenity/fast_food/donut/Donut King":{name:"Donut King",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DonutKing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5296921",amenity:"fast_food",cuisine:"donut;coffee_shop"},addTags:{amenity:"fast_food",brand:"Donut King","brand:wikidata":"Q5296921","brand:wikipedia":"en:Donut King",cuisine:"donut;coffee_shop",name:"Donut King",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/Dunkin' Donuts":{name:"Dunkin' Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DunkinUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q847743",amenity:"fast_food",cuisine:"donut;coffee_shop"},addTags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut;coffee_shop",name:"Dunkin' Donuts",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},terms:["dunkin doughnuts"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/EAT.":{name:"EAT.",icon:"temaki-sandwich",imageURL:"https://pbs.twimg.com/profile_images/1169156289248862209/hO6pPROJ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5331219",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"EAT.","brand:wikidata":"Q5331219","brand:wikipedia":"en:Eat (restaurant)",cuisine:"sandwich",name:"EAT.",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Einstein Bros. Bagels":{name:"Einstein Bros. Bagels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/einsteinbros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5349788",amenity:"fast_food"},addTags:{alt_name:"Einstein Brothers Bagels",amenity:"fast_food",brand:"Einstein Bros. Bagels","brand:wikidata":"Q5349788","brand:wikipedia":"en:Einstein Bros. Bagels",cuisine:"bagel",name:"Einstein Bros. Bagels",takeaway:"yes"},countryCodes:["us"],terms:["einstein bros","einstein brothers"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/El Pollo Loco":{name:"El Pollo Loco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/ElPolloLoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2353849",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"El Pollo Loco","brand:wikidata":"Q2353849","brand:wikipedia":"en:El Pollo Loco",cuisine:"mexican",name:"El Pollo Loco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Elevation Burger":{name:"Elevation Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/elevationburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15291092",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Elevation Burger","brand:wikidata":"Q15291092","brand:wikipedia":"en:Elevation Burger",cuisine:"burger",name:"Elevation Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["bh","kw","qa","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Es Teler 77":{name:"Es Teler 77",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/esteler77/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5396630",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Es Teler 77","brand:wikidata":"Q5396630",cuisine:"indonesian",name:"Es Teler 77",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Everest":{name:"Everest",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/everest.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273299",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Everest","brand:wikidata":"Q62273299",cuisine:"burger",name:"Everest",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Extreme Pita":{name:"Extreme Pita",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TheExtremePita/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422367",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Extreme Pizza":{name:"Extreme Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/ExtremePizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422364",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Extreme Pizza","brand:wikidata":"Q5422364","brand:wikipedia":"en:Extreme Pizza",cuisine:"pizza",name:"Extreme Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Fazoli's":{name:"Fazoli's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Fazolis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1399195",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Figaro's Pizza":{name:"Figaro's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/figarospizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48802600",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Figaro's Pizza","brand:wikidata":"Q48802600","brand:wikipedia":"en:Figaro's Pizza",cuisine:"pizza",name:"Figaro's Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Firehouse Subs":{name:"Firehouse Subs",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/firehousesubs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5451873",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Five Guys":{name:"Five Guys",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/fiveguys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1131810",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys",official_name:"Five Guys Burgers and Fries",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Freddy's":{name:"Freddy's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/FreddysUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5496837",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"ice_cream;burger",name:"Freddy's",official_name:"Freddys Frozen Custard & Steakburgers",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Freebirds":{name:"Freebirds",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/freebirdsworldburrito/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5500367",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Freshslice Pizza":{name:"Freshslice Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Freshslice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5503082",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Freshslice Pizza","brand:wikidata":"Q5503082","brand:wikipedia":"en:Freshslice Pizza",cuisine:"pizza",name:"Freshslice Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Gabriel Pizza":{name:"Gabriel Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/gabrielpizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5515791",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Gabriel Pizza","brand:wikidata":"Q5515791","brand:wikipedia":"en:Gabriel Pizza",cuisine:"pizza",name:"Gabriel Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Gino's Pizza":{name:"Gino's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/1240550288/TwitterProfile_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5563205",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Gino's Pizza","brand:wikidata":"Q5563205","brand:wikipedia":"en:Gino's Pizza and Spaghetti",cuisine:"pizza",name:"Gino's Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Gold Star Chili":{name:"Gold Star Chili",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/goldstarchili/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16994254",amenity:"fast_food"},addTags:{alt_name:"Gold Star",amenity:"fast_food",brand:"Gold Star Chili","brand:wikidata":"Q16994254","brand:wikipedia":"en:Gold Star Chili",cuisine:"chili",name:"Gold Star Chili",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Golden Chick":{name:"Golden Chick",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/GoldenChick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3772930",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Golden Chick","brand:wikidata":"Q3772930","brand:wikipedia":"en:Golden Chick",cuisine:"chicken",name:"Golden Chick",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Golden Krust Caribbean Bakery & Grill":{name:"Golden Krust Caribbean Bakery & Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/GoldenKrust/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5579615",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Golden Krust Caribbean Bakery & Grill","brand:wikidata":"Q5579615","brand:wikipedia":"en:Golden Krust Caribbean Bakery & Grill",cuisine:"caribbean",name:"Golden Krust",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Good Times":{name:"Good Times",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/culvers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143589",amenity:"fast_food",cuisine:"burger;ice_cream"},addTags:{amenity:"fast_food",brand:"Good Times","brand:wikidata":"Q1143589","brand:wikipedia":"en:Good Times Burgers & Frozen Custard",cuisine:"burger;ice_cream",name:"Good Times",official_name:"Good Times Burgers & Frozen Custard",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Great American Cookies":{name:"Great American Cookies",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/greatamericancookies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5598629",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Great American Cookies","brand:wikidata":"Q5598629","brand:wikipedia":"en:Great American Cookies",cuisine:"cookies",name:"Great American Cookies",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Greenwich":{name:"Greenwich",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/GreenwichPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2691308",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Greggs":{name:"Greggs",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/greggsofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3403981",amenity:"fast_food",cuisine:"sandwich;bakery"},addTags:{amenity:"fast_food",brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",cuisine:"sandwich;bakery",name:"Greggs",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Grill'd":{name:"Grill'd",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/GrilldBurgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18165852",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Grill'd","brand:wikidata":"Q18165852","brand:wikipedia":"en:Grill'd",cuisine:"burger",name:"Grill'd",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Habib's":{name:"Habib's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/habibsoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2504930",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Habib's","brand:wikidata":"Q2504930","brand:wikipedia":"en:Habib's",cuisine:"middle_eastern",name:"Habib's",takeaway:"yes"},countryCodes:["br","mx"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Hallo Pizza":{name:"Hallo Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Hallo.Pizza.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1571798",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Hallo Pizza","brand:wikidata":"Q1571798","brand:wikipedia":"de:Hallo Pizza",cuisine:"pizza",name:"Hallo Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hardee's":{name:"Hardee's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hardees/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1585088",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hardee's","brand:wikidata":"Q1585088","brand:wikipedia":"en:Hardee's",cuisine:"burger",name:"Hardee's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/fish_and_chips/Harry Ramsden's":{name:"Harry Ramsden's",icon:"fas-fish",imageURL:"https://graph.facebook.com/harryramsdensuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5671849",amenity:"fast_food",cuisine:"fish_and_chips"},addTags:{amenity:"fast_food",brand:"Harry Ramsden's","brand:wikidata":"Q5671849","brand:wikipedia":"en:Harry Ramsden's",cuisine:"fish_and_chips",name:"Harry Ramsden's",takeaway:"yes"},reference:{key:"cuisine",value:"fish_and_chips"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Harvey's":{name:"Harvey's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HarveysCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1466184",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Harvey's","brand:wikidata":"Q1466184","brand:wikipedia":"en:Harvey's",cuisine:"burger",name:"Harvey's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Herfy":{name:"Herfy",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/herfyfscksa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5738371",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Herfy","brand:ar":"هرفي","brand:en":"Herfy","brand:wikidata":"Q5738371","brand:wikipedia":"en:Herfy",cuisine:"burger",name:"Herfy","name:ar":"هرفي","name:en":"Herfy",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ae","bd","bh","kw","sa"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hero Certified Burgers":{name:"Hero Certified Burgers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HeroBurgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5742641",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hero Certified Burgers","brand:wikidata":"Q5742641","brand:wikipedia":"en:Hero Certified Burgers",cuisine:"burger",name:"Hero Certified Burgers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hesburger":{name:"Hesburger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hesburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1276832",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hesburger","brand:wikidata":"Q1276832","brand:wikipedia":"en:Hesburger",cuisine:"burger",name:"Hesburger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Honey Baked Ham":{name:"Honey Baked Ham",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HoneyBaked/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5893363",amenity:"fast_food"},addTags:{alt_name:"HoneyBaked Ham",amenity:"fast_food",brand:"Honey Baked Ham","brand:wikidata":"Q5893363","brand:wikipedia":"en:The Honey Baked Ham Company",cuisine:"american",name:"Honey Baked Ham",official_name:"The Honey Baked Ham Company",takeaway:"yes"},countryCodes:["us"],terms:["honey baked ham company"],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Hot Dog on a Stick":{name:"Hot Dog on a Stick",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/HotDogonaStick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5909922",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Hot Dog on a Stick","brand:wikidata":"Q5909922","brand:wikipedia":"en:Hot Dog on a Stick",cuisine:"hot_dog",name:"Hot Dog on a Stick",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Hot Head Burritos":{name:"Hot Head Burritos",icon:"fas-pepper-hot",imageURL:"https://pbs.twimg.com/profile_images/956274820035022853/SBuliAdo_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5910008",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Hot Head Burritos","brand:wikidata":"Q5910008","brand:wikipedia":"en:Hot Head Burritos",cuisine:"mexican",name:"Hot Head Burritos",short_name:"Hot Head",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/HuHot":{name:"HuHot",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/huhot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5924606",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"HuHot","brand:wikidata":"Q5924606","brand:wikipedia":"en:HuHot Mongolian Grill",cuisine:"bbq",name:"HuHot",official_name:"HuHot Mongolian Grill",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Hungry Howie's":{name:"Hungry Howie's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/hungryhowies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16985303",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Hungry Howie's","brand:wikidata":"Q16985303","brand:wikipedia":"en:Hungry Howie's Pizza",cuisine:"pizza",name:"Hungry Howie's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["hungry howies pizza"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Hungry Jacks":{name:"Hungry Jacks",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HungryJacks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3036373",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Hungry Jacks","brand:wikidata":"Q3036373","brand:wikipedia":"en:Hungry Jack's",cuisine:"burger",name:"Hungry Jacks",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/IKEA Restaurant":{name:"IKEA Restaurant",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/IKEA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54078",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",cuisine:"swedish",name:"IKEA Restaurant",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Imo's Pizza":{name:"Imo's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/imospizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6005623",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Imo's Pizza","brand:wikidata":"Q6005623","brand:wikipedia":"en:Imo's Pizza",cuisine:"pizza",name:"Imo's Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/In-N-Out Burger":{name:"In-N-Out Burger",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FInNOut.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1205312",amenity:"fast_food",cuisine:"burger"},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",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Jack in the Box":{name:"Jack in the Box",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/jackinthebox/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1538507",amenity:"fast_food",cuisine:"burger"},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",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Jamba Juice":{name:"Jamba Juice",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/jambajuice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088784",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Jamba Juice","brand:wikidata":"Q3088784","brand:wikipedia":"en:Jamba Juice",cuisine:"juice",name:"Jamba Juice",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Jersey Mike's Subs":{name:"Jersey Mike's Subs",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/jerseymikes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6184897",amenity:"fast_food",cuisine:"sandwich"},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",short_name:"Jersey Mike's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Jimmy John's":{name:"Jimmy John's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/jimmyjohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1689380",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Jimmy John's","brand:wikidata":"Q1689380","brand:wikipedia":"en:Jimmy John's",cuisine:"sandwich",name:"Jimmy John's",official_name:"Jimmy John's Gourmet Sandwiches",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Jimmy the Greek":{name:"Jimmy the Greek",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/gimmejimmy.jtg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17077817",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Jimmy the Greek","brand:wikidata":"Q17077817","brand:wikipedia":"en:Jimmy the Greek (restaurant)",cuisine:"greek",name:"Jimmy the Greek",takeaway:"yes"},countryCodes:["ae","ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Jollibee":{name:"Jollibee",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/JollibeePhilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37614",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Just Salad":{name:"Just Salad",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/justsalad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23091823",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Just Salad","brand:wikidata":"Q23091823","brand:wikipedia":"en:Just Salad",cuisine:"salad",name:"Just Salad",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/KFC":{name:"KFC",icon:"fas-drumstick-bite",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKFC%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{alt_name:"Kentucky Fried Chicken",amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Kernels Popcorn":{name:"Kernels Popcorn",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/kernelspopcorn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64876684",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Kernels Popcorn","brand:wikidata":"Q64876684",cuisine:"popcorn",name:"Kernels Popcorn",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Kochlöffel":{name:"Kochlöffel",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kochloeffel.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q315539",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["de","tr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Kotipizza":{name:"Kotipizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/kotipizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1628625",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/Krispy Kreme":{name:"Krispy Kreme",icon:"temaki-donut",imageURL:"https://graph.facebook.com/KrispyKreme/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1192805",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},terms:["krispy kreme doughnuts"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Krispy Krunchy Chicken":{name:"Krispy Krunchy Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Krispy.Krunchy.Foods.LLC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65087447",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Krispy Krunchy Chicken","brand:wikidata":"Q65087447","brand:wikipedia":"en:Krispy Krunchy Chicken",cuisine:"chicken",name:"Krispy Krunchy Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["mx","us"],terms:["crispy crunchy chicken"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Krystal":{name:"Krystal",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Krystal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q472195",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Kudu":{name:"Kudu",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/KuduRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6441777",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["bh","jo","sa"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/L&L Drive-Inn (Hawaii)":{name:"L&L Drive-Inn (Hawaii)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hawaiianbarbecue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6455441",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"L&L Drive-Inn","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Drive-Inn",takeaway:"yes"},countryCodes:["us"],terms:["l&l","l&l drive-in"],matchScore:2,suggestion:true},"amenity/fast_food/L&L Hawaiian Barbecue":{name:"L&L Hawaiian Barbecue",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hawaiianbarbecue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6455441",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"L&L Hawaiian Barbecue","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Hawaiian Barbecue",takeaway:"yes"},countryCodes:["us"],terms:["l&l","l&l hawaiian bbq"],matchScore:2,suggestion:true},"amenity/fast_food/LEON":{name:"LEON",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1166629678184054784/oDbvI41-_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6524851",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"LEON","brand:wikidata":"Q6524851","brand:wikipedia":"en:Leon Restaurants",name:"LEON",takeaway:"yes"},countryCodes:["ch","gb","ie","nl","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/La Belle Province":{name:"La Belle Province",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/restolbp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3206579",amenity:"fast_food",cuisine:"burger;sandwich"},addTags:{amenity:"fast_food",brand:"La Belle Province","brand:wikidata":"Q3206579","brand:wikipedia":"fr:La Belle Province (restaurant)",cuisine:"burger;sandwich",name:"La Belle Province",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/La Salsa":{name:"La Salsa",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/lasalsa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48835190",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"La Salsa","brand:wikidata":"Q48835190","brand:wikipedia":"en:La Salsa",cuisine:"tex-mex",name:"La Salsa",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Lee's Famous Recipe Chicken":{name:"Lee's Famous Recipe Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/LeesFamousRecipeChicken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6512810",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Lee's Famous Recipe Chicken","brand:wikidata":"Q6512810","brand:wikipedia":"en:Lee's Famous Recipe Chicken",cuisine:"chicken",name:"Lee's Famous Recipe Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ca","us"],terms:["lee's"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Lee's Sandwiches":{name:"Lee's Sandwiches",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/LeesSandwiches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6512823",amenity:"fast_food",cuisine:"vietnamese;sandwich"},addTags:{amenity:"fast_food",brand:"Lee's Sandwiches","brand:wikidata":"Q6512823","brand:wikipedia":"en:Lee's Sandwiches",cuisine:"vietnamese;sandwich",name:"Lee's Sandwiches",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Little Caesars":{name:"Little Caesars",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/LittleCaesars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1393809",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["little caesars pizza","little ceasars","little ceasars pizza"],matchScore:2,suggestion:true},"amenity/fast_food/Long John Silver's":{name:"Long John Silver's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/LongJohnSilvers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1535221",amenity:"fast_food"},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",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Lotteria":{name:"Lotteria",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/MOD Pizza":{name:"MOD Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/MODPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19903469",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Manchu Wok":{name:"Manchu Wok",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ManchuWOKRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6747622",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Manchu Wok","brand:wikidata":"Q6747622","brand:wikipedia":"en:Manchu Wok",cuisine:"chinese",name:"Manchu Wok",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Mang Inasal":{name:"Mang Inasal",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/MangInasalPhilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6748573",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal",takeaway:"yes"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Manhattan Bagel":{name:"Manhattan Bagel",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ManhattanBagel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64517333",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Manhattan Bagel","brand:wikidata":"Q64517333",cuisine:"bagel",name:"Manhattan Bagel",takeaway:"yes"},countryCodes:["us"],terms:["manhattan bagels"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Mary Brown's":{name:"Mary Brown's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/MaryBrowns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6779125",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Mary Brown's","brand:wikidata":"Q6779125","brand:wikipedia":"en:Mary Brown's",cuisine:"chicken",name:"Mary Brown's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Max":{name:"Max",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/maxburgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1912172",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/McDonald's":{name:"McDonald's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Meson Sandwiches":{name:"Meson Sandwiches",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/elmesonsandwiches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5351585",amenity:"fast_food",cuisine:"sandwich"},addTags:{alt_name:"El Meson Sandwiches",amenity:"fast_food",brand:"Meson Sandwiches","brand:wikidata":"Q5351585","brand:wikipedia":"en:El Meson Sandwiches",cuisine:"sandwich",name:"Meson Sandwiches",short_name:"Meson",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["el meson"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Mighty Taco":{name:"Mighty Taco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MyMightyTaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6844210",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Mighty Taco","brand:wikidata":"Q6844210","brand:wikipedia":"en:Mighty Taco",cuisine:"mexican",name:"Mighty Taco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Minute Burger":{name:"Minute Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/MinuteBurger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273503",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Minute Burger","brand:wikidata":"Q62273503",cuisine:"burger",name:"Minute Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Moe's Southwest Grill":{name:"Moe's Southwest Grill",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MoesSouthwestGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6889938",amenity:"fast_food",cuisine:"mexican"},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",short_name:"Moe's",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Morley's":{name:"Morley's",icon:"fas-drumstick-bite",imageURL:"https://pbs.twimg.com/profile_images/845831830066659328/xY231QEy_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q21008528",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Morley's","brand:wikidata":"Q21008528","brand:wikipedia":"en:Morley's",cuisine:"chicken",name:"Morley's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Mr. Sub":{name:"Mr. Sub",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/mrsub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6929225",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Mucho Burrito":{name:"Mucho Burrito",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MuchoBurritoHQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65148332",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Mucho Burrito","brand:wikidata":"Q65148332",cuisine:"mexican",name:"Mucho Burrito",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Nathan's":{name:"Nathan's",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/nathansfamous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1319505",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Nathan's","brand:wikidata":"Q1319505","brand:wikipedia":"en:Nathan's Famous",cuisine:"hot_dog",name:"Nathan's",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:["nathans famous"],matchScore:2,suggestion:true},"amenity/fast_food/Nestlé Toll House Café":{name:"Nestlé Toll House Café",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1059491137700814848/KtzCuNTH_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6997922",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Nestlé Toll House Café","brand:wikidata":"Q6997922","brand:wikipedia":"en:Nestlé Toll House Café",cuisine:"dessert",name:"Nestlé Toll House Café",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/New York Fries":{name:"New York Fries",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NewYorkFries/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7013558",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"New York Fries","brand:wikidata":"Q7013558","brand:wikipedia":"en:New York Fries",cuisine:"fries",name:"New York Fries",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/New York Pizza":{name:"New York Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/newyorkpizza.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2639128",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Noah's Bagels":{name:"Noah's Bagels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NoahsBagels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64517373",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Noah's Bagels","brand:wikidata":"Q64517373",cuisine:"bagel",name:"Noah's Bagels",official_name:"Noah's New York Bagels",takeaway:"yes"},countryCodes:["us"],terms:["noahs ny bagels"],matchScore:2,suggestion:true},"amenity/fast_food/Noodle Box":{name:"Noodle Box",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NoodleBoxAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7049671",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Noodle Box","brand:wikidata":"Q7049671","brand:wikipedia":"en:Noodle Box",cuisine:"noodle",name:"Noodle Box",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Nordsee":{name:"Nordsee",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NORDSEEDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q74866",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee",takeaway:"yes"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Num Pang":{name:"Num Pang",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/NumPangKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62079702",amenity:"fast_food",cuisine:"cambodian;sandwich"},addTags:{amenity:"fast_food",brand:"Num Pang","brand:wikidata":"Q62079702","brand:wikipedia":"en:Num Pang",cuisine:"cambodian;sandwich",name:"Num Pang",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/O'Tacos":{name:"O'Tacos",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/Otacos.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28494040",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Oporto":{name:"Oporto",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Oportos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4412342",amenity:"fast_food",cuisine:"burger;chicken"},addTags:{amenity:"fast_food",brand:"Oporto","brand:wikidata":"Q4412342","brand:wikipedia":"en:Oporto (restaurant)",cuisine:"burger;chicken",name:"Oporto",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Orange Julius":{name:"Orange Julius",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/OrangeJulius/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3355059",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Orange Julius","brand:wikidata":"Q3355059","brand:wikipedia":"en:Orange Julius",cuisine:"juice",name:"Orange Julius",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/P. Terry's":{name:"P. Terry's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/pterrys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19903521",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"P. Terry's","brand:wikidata":"Q19903521","brand:wikipedia":"en:P. Terry's",cuisine:"burger",name:"P. Terry's",official_name:"P. Terry's Burger Stand",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Pal's":{name:"Pal's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Palsweb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7126094",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's",official_name:"Pal's Sudden Service",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Panago":{name:"Panago",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/panago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17111672",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Panda Express":{name:"Panda Express",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/PandaExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1358690",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express",takeaway:"yes"},terms:["panda"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Panera Bread":{name:"Panera Bread",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/panerabread/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7130852",amenity:"fast_food",cuisine:"sandwich;bakery"},addTags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich;bakery",name:"Panera Bread",short_name:"Panera",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Panos":{name:"Panos",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/PanosBelgium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3384496",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Panos","brand:wikidata":"Q3384496","brand:wikipedia":"nl:Panos",cuisine:"sandwich",name:"Panos",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ae","be","cz","nl","pl","sk","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Pans & Company":{name:"Pans & Company",icon:"temaki-sandwich",imageURL:"https://pbs.twimg.com/profile_images/1039055431996530688/bgRgkBHD_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11697586",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Pans & Company","brand:wikidata":"Q11697586","brand:wikipedia":"es:Pans & Company",cuisine:"sandwich",name:"Pans & Company",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["es","it","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa John's":{name:"Papa John's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papajohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2759586",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["papa john","papa john pizza","papa johns pizza"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa Murphy's":{name:"Papa Murphy's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papamurphyspizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7132349",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's",official_name:"Papa Murphy's Take 'N' Bake Pizza",takeaway:"only"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:["papa murphy","papa murphy pizza","papa murphys pizza"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Penn Station":{name:"Penn Station",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/pennstation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7163311",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Penn Station","brand:wikidata":"Q7163311","brand:wikipedia":"en:Penn Station (restaurant)",cuisine:"sandwich",name:"Penn Station",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Philly Pretzel Factory":{name:"Philly Pretzel Factory",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/PhillyPretzel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60097339",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory",takeaway:"yes"},countryCodes:["us"],terms:["philadelphia pretzel factory","philadelphia soft pretzel factory","philly soft pretzel factory"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pinulito":{name:"Pinulito",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/elsabordenuestragente/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273613",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pinulito","brand:wikidata":"Q62273613",cuisine:"chicken",name:"Pinulito",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["gt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Pita Pit":{name:"Pita Pit",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/pitapitusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7757289",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza 73":{name:"Pizza 73",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q7199950",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza 73","brand:wikidata":"Q7199950","brand:wikipedia":"en:Pizza 73",cuisine:"pizza",name:"Pizza 73",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Delivery":{name:"Pizza Hut Delivery",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Express":{name:"Pizza Hut Express",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Express",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Inn":{name:"Pizza Inn",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/959101899675901952/2SogbY41_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4118850",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Inn","brand:wikidata":"Q4118850","brand:wikipedia":"en:Pizza Inn",cuisine:"pizza",name:"Pizza Inn",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Móvil":{name:"Pizza Móvil",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzamovil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12397697",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Móvil","brand:wikidata":"Q12397697","brand:wikipedia":"gl:Pizza Móvil",cuisine:"pizza",name:"Pizza Móvil",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Nova":{name:"Pizza Nova",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaNova/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199971",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Pizza":{name:"Pizza Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaPizzaCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1194143",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Schmizza":{name:"Pizza Schmizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/schmizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199979",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Schmizza","brand:wikidata":"Q7199979","brand:wikipedia":"en:Pizza Schmizza",cuisine:"pizza",name:"Pizza Schmizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Campero":{name:"Pollo Campero",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/CamperoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q942741",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Granjero (Costa Rica)":{name:"Pollo Granjero (Costa Rica)",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloGranjeroCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273665",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273665",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Granjero (Guatemala)":{name:"Pollo Granjero (Guatemala)",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloGranjeroGuatemala/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273652",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273652",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["gt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Tropical":{name:"Pollo Tropical",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloTropical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3395356",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Tropical","brand:wikidata":"Q3395356","brand:wikipedia":"en:Pollo Tropical",cuisine:"chicken",name:"Pollo Tropical",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Popeyes":{name:"Popeyes",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PopeyesLouisianaKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1330910",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Popeyes","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeyes",official_name:"Popeyes Louisiana Kitchen",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Portillo's":{name:"Portillo's",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/portillos.hotdog/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3399307",amenity:"fast_food",cuisine:"hot_dog;burger"},addTags:{amenity:"fast_food",brand:"Portillo's","brand:wikidata":"Q3399307","brand:wikipedia":"en:Portillo's Restaurants",cuisine:"hot_dog;burger",name:"Portillo's",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Potbelly":{name:"Potbelly",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/potbellysandwichshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7234777",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Shop",cuisine:"sandwich",name:"Potbelly",official_name:"Potbelly Sandwich Works",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["potbelly sandwich shop"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Pret A Manger":{name:"Pret A Manger",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/pretamangerusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2109109",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",cuisine:"sandwich",name:"Pret A Manger",short_name:"Pret",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ae","cn","de","dk","fr","gb","hk","nl","sg","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Pretzelmaker":{name:"Pretzelmaker",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/pretzelmaker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242321",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Pretzelmaker","brand:wikidata":"Q7242321","brand:wikipedia":"en:Pretzelmaker",cuisine:"pretzel",name:"Pretzelmaker",takeaway:"yes"},countryCodes:["us"],terms:["pretzel time"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Qdoba":{name:"Qdoba",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/qdoba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1363885",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba",official_name:"Qdoba Mexican Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Quesada":{name:"Quesada",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/QuesadaBurritos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66070360",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Quesada","brand:wikidata":"Q66070360",cuisine:"mexican",name:"Quesada",official_name:"Quesada Burritos & Tacos",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Quick":{name:"Quick",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/QuickBelgium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q286494",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Quiznos":{name:"Quiznos",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/Quiznos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1936229",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:["quiznos sub","quiznos subs"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Raising Cane's":{name:"Raising Cane's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/RaisingCanesChickenFingers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7285144",amenity:"fast_food",cuisine:"chicken"},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",official_name:"Raising Cane's Chicken Fingers",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Rally's":{name:"Rally's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/checkersrallys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63919323",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q63919323",cuisine:"burger",name:"Rally's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Red Rooster":{name:"Red Rooster",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/RedRoosterAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q376466",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/Robin's Donuts":{name:"Robin's Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/RobinsDonutsCAN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7352199",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Robin's Donuts","brand:wikidata":"Q7352199","brand:wikipedia":"en:Robin's Donuts",cuisine:"donut",name:"Robin's Donuts",short_name:"Robin's",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Roy Rogers":{name:"Roy Rogers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/RoyRogersRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7373311",amenity:"fast_food",cuisine:"burger;sandwich;chicken"},addTags:{amenity:"fast_food",brand:"Roy Rogers","brand:wikidata":"Q7373311","brand:wikipedia":"en:Roy Rogers Restaurants",cuisine:"burger;sandwich;chicken",name:"Roy Rogers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Rubio's":{name:"Rubio's",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/rubios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7376154",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Rubio's","brand:wikidata":"Q7376154","brand:wikipedia":"en:Rubio's Coastal Grill",cuisine:"mexican",name:"Rubio's",official_name:"Rubio's Coastal Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:["rubios fresh mexican grill"],matchScore:2,suggestion:true},"amenity/fast_food/burger/SUSU & Sons":{name:"SUSU & Sons",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/susuandsons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760081",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"SUSU & Sons","brand:en":"SUSU & Sons","brand:he":"סוסו אנד סאנס","brand:wikidata":"Q64760081",cuisine:"burger",name:"SUSU & Sons","name:en":"SUSU & Sons","name:he":"סוסו אנד סאנס",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:["סוסו ובניו"],matchScore:2,suggestion:true},"amenity/fast_food/Sarku Japan":{name:"Sarku Japan",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/SarkuJapanColombia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7424243",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Sarku Japan","brand:wikidata":"Q7424243",cuisine:"japanese",name:"Sarku Japan",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Sarpino's Pizzeria":{name:"Sarpino's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/SarpinosPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28229116",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Sarpino's Pizzeria","brand:wikidata":"Q28229116","brand:wikipedia":"en:Sarpino's Pizzeria",cuisine:"pizza",name:"Sarpino's Pizzeria",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Sbarro":{name:"Sbarro",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Sbarro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2589409",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["sbarro pizzeria"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Schlotzsky's":{name:"Schlotzsky's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/Schlotzskys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2244796",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["schlotzskys deli"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Schnitz":{name:"Schnitz",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{"brand:wikidata":"Q48792277",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Schnitz","brand:wikidata":"Q48792277","brand:wikipedia":"en:Schnitz",cuisine:"chicken",name:"Schnitz",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Shake Shack":{name:"Shake Shack",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/shakeshack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1058722",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Shake Shack","brand:wikidata":"Q1058722","brand:wikipedia":"en:Shake Shack",cuisine:"burger",name:"Shake Shack",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Sibylla":{name:"Sibylla",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sibyllasverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q488643",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Sibylla","brand:wikidata":"Q488643","brand:wikipedia":"en:Sibylla (fast food)",cuisine:"burger",name:"Sibylla",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["fi","se"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Smashburger":{name:"Smashburger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/smashburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17061332",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Smashburger","brand:wikidata":"Q17061332","brand:wikipedia":"en:Smashburger",cuisine:"burger",name:"Smashburger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Smoothie King":{name:"Smoothie King",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/SmoothieKing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5491421",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Smoothie King","brand:wikidata":"Q5491421","brand:wikipedia":"en:Smoothie King",cuisine:"juice",name:"Smoothie King",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Sonic":{name:"Sonic",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sonicdrivein/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7561808",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Sonic","brand:wikidata":"Q7561808","brand:wikipedia":"en:Sonic Drive-In",cuisine:"burger",drive_in:"yes",name:"Sonic",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:["sonic drive in"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Specialty's":{name:"Specialty's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/specialtys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64339210",amenity:"fast_food",cuisine:"sandwich;bakery"},addTags:{amenity:"fast_food",brand:"Specialty's","brand:wikidata":"Q64339210",cuisine:"sandwich;bakery",name:"Specialty's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/St-Hubert Express":{name:"St-Hubert Express",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/sthubert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3495225",amenity:"fast_food",cuisine:"chicken;barbecue"},addTags:{amenity:"fast_food",brand:"St-Hubert","brand:wikidata":"Q3495225","brand:wikipedia":"fr:St-Hubert (restaurant)",cuisine:"chicken;barbecue",name:"St-Hubert Express",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Steak 'n Shake":{name:"Steak 'n Shake",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/steaknshake/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605233",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Steak Escape":{name:"Steak Escape",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/steakescape/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605235",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Steak Escape","brand:wikidata":"Q7605235","brand:wikipedia":"en:Steak Escape",cuisine:"sandwich",name:"Steak Escape",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Steers":{name:"Steers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/OfficialSteers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56599145",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Subway":{name:"Subway",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/subway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q244457",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:["subway sandwiches"],matchScore:2,suggestion:true},"amenity/fast_food/Sumo Salad":{name:"Sumo Salad",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/SumoSalad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16951700",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Sumo Salad","brand:wikidata":"Q16951700","brand:wikipedia":"en:Sumo Salad",cuisine:"salad",name:"Sumo Salad",takeaway:"yes"},countryCodes:["ae","au","br","nz","sg","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Supermac's":{name:"Supermac's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/supermacsofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643750",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Sushi Shop":{name:"Sushi Shop",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sushishopboutique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64840990",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Sushi Shop","brand:wikidata":"Q64840990",cuisine:"sushi",name:"Sushi Shop",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Taco Bell":{name:"Taco Bell",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tacobell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q752941",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Bueno":{name:"Taco Bueno",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/buenoheadquarters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673958",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Cabana":{name:"Taco Cabana",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/TacoCabana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12070488",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Del Mar":{name:"Taco Del Mar",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacodelmarcorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673972",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco John's":{name:"Taco John's",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacojohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673962",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Taco Mayo":{name:"Taco Mayo",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1014909415101624320/p-fzpv6u_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2386946",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Taco Mayo","brand:wikidata":"Q2386946","brand:wikipedia":"en:Taco Mayo",cuisine:"tex-mex",name:"Taco Mayo",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Time":{name:"Taco Time",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacotime/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673969",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Ted's Hot Dogs":{name:"Ted's Hot Dogs",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/TedsHotDogs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7692930",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Ted's Hot Dogs","brand:wikidata":"Q7692930","brand:wikipedia":"en:Ted's Hot Dogs",cuisine:"hot_dog",name:"Ted's Hot Dogs",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Telepizza":{name:"Telepizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/telepizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2699863",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Teriyaki Experience":{name:"Teriyaki Experience",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TeriyakiExperience/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7702453",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Teriyaki Experience","brand:wikidata":"Q7702453",cuisine:"japanese",name:"Teriyaki Experience",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Thai Express (Singapore)":{name:"Thai Express (Singapore)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ThaiExpressSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7709119",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express",takeaway:"yes"},countryCodes:["sg"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Thaï Express (North America)":{name:"Thaï Express (North America)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/EatThaiExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7711610",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Thaï Express","brand:wikidata":"Q7711610","brand:wikipedia":"en:Thaï Express",cuisine:"thai",name:"Thaï Express",takeaway:"yes"},countryCodes:["ca","us"],terms:["thai express"],matchScore:2,suggestion:true},"amenity/fast_food/burger/The Habit Burger Grill":{name:"The Habit Burger Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/habitburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18158741",amenity:"fast_food",cuisine:"burger"},addTags:{alt_name:"Habit Burger Grill",amenity:"fast_food",brand:"The Habit Burger Grill","brand:wikidata":"Q18158741","brand:wikipedia":"en:The Habit Burger Grill",cuisine:"burger",name:"The Habit Burger Grill",short_name:"Habit Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:["the habit burger"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/The Pizza Company":{name:"The Pizza Company",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/thepizzacompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2413520",amenity:"fast_food",cuisine:"pizza"},addTags:{alt_name:"Pizza Company",amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ae","bh","cn","jo","kh","la","mm","my","sa","th","vn"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Togo's":{name:"Togo's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/togossandwiches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3530375",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Togo's","brand:wikidata":"Q3530375","brand:wikipedia":"en:Togo's",cuisine:"sandwich",name:"Togo's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Tropical Smoothie Cafe":{name:"Tropical Smoothie Cafe",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tropicalsmoothiecafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7845817",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Tropical Smoothie Cafe","brand:wikidata":"Q7845817","brand:wikipedia":"en:Tropical Smoothie Cafe",cuisine:"juice",name:"Tropical Smoothie Cafe",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Upper Crust":{name:"Upper Crust",icon:"temaki-sandwich",imageURL:"https://pbs.twimg.com/profile_images/1156194120324591619/0Wy7xKDd_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7898585",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Upper Crust","brand:wikidata":"Q7898585","brand:wikipedia":"en:Upper Crust (restaurant chain)",cuisine:"sandwich",name:"Upper Crust",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["de","dk","eg","es","fi","gb","ie","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Valentine":{name:"Valentine",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/valentineqc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3553635",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Valentine","brand:wikidata":"Q3553635","brand:wikipedia":"fr:Valentine (restaurant)",cuisine:"burger",name:"Valentine",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Veggie Grill":{name:"Veggie Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/veggiegrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18636427",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Veggie Grill","brand:wikidata":"Q18636427","brand:wikipedia":"en:Veggie Grill",cuisine:"american","diet:vegan":"only",name:"Veggie Grill",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Villa Madina":{name:"Villa Madina",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/villamadinarestaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64876884",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Villa Madina","brand:wikidata":"Q64876884",cuisine:"mediterranean",name:"Villa Madina",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Wahoo's Fish Taco":{name:"Wahoo's Fish Taco",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/WahoosFishTaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7959827",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Wahoo's Fish Taco","brand:wikidata":"Q7959827","brand:wikipedia":"en:Wahoo's Fish Taco",cuisine:"seafood",name:"Wahoo's Fish Taco",short_name:"Wahoo's",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Wayback Burgers":{name:"Wayback Burgers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/waybackburgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997570",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wayback Burgers","brand:wikidata":"Q16997570","brand:wikipedia":"en:Wayback Burgers",cuisine:"burger",name:"Wayback Burgers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Wendy's":{name:"Wendy's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/wendys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q550258",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/West Cornwall Pasty Co.":{name:"West Cornwall Pasty Co.",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1079670717074018304/juDTW6De_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7774268",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"West Cornwall Pasty Co.","brand:wikidata":"Q7774268","brand:wikipedia":"en:The West Cornwall Pasty Company",cuisine:"pasty",name:"West Cornwall Pasty Co.",takeaway:"yes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Wetzel's Pretzels":{name:"Wetzel's Pretzels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/WetzelsPretzels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7990205",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Wetzel's Pretzels","brand:wikidata":"Q7990205","brand:wikipedia":"en:Wetzel's Pretzels",cuisine:"pretzel",name:"Wetzel's Pretzels",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Whataburger":{name:"Whataburger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/whataburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q376627",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Which Wich?":{name:"Which Wich?",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/whichwich/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7993556",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Which Wich?","brand:wikidata":"Q7993556","brand:wikipedia":"en:Which Wich?",cuisine:"sandwich",name:"Which Wich?",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ae","gb","gt","mx","om","qa","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/White Castle":{name:"White Castle",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/WhiteCastle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1244034",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Wienerschnitzel":{name:"Wienerschnitzel",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/Wienerschnitzel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q324679",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Wimpy":{name:"Wimpy",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/wimpyrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2811992",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/WingStreet":{name:"WingStreet",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWingStreet.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q946630",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"WingStreet","brand:wikidata":"Q946630","brand:wikipedia":"en:WingStreet",cuisine:"wings",name:"WingStreet",takeaway:"yes"},countryCodes:["au","ca","cy","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Wingstop":{name:"Wingstop",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Wingstop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8025339",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop",takeaway:"yes"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Xi'an Famous Foods":{name:"Xi'an Famous Foods",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/xianfoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8044020",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Xi'an Famous Foods","brand:wikidata":"Q8044020","brand:wikipedia":"en:Xi'an Famous Foods",cuisine:"chinese",name:"Xi'an Famous Foods",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Yellow Cab Pizza":{name:"Yellow Cab Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/YellowCabPizzaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8051689",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Yellow Cab Pizza","brand:wikidata":"Q8051689","brand:wikipedia":"en:Yellow Cab Pizza",cuisine:"pizza",name:"Yellow Cab Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Zaxby's":{name:"Zaxby's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Zaxbys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8067525",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's",official_name:"Zaxby's Chicken Fingers & Buffalo Wings",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Zoës Kitchen":{name:"Zoës Kitchen",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ZoesKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8074747",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Zoës Kitchen","brand:wikidata":"Q8074747","brand:wikipedia":"en:Zoës Kitchen",cuisine:"mediterranean",name:"Zoës Kitchen",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/immergrün":{name:"immergrün",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/mein.immergruen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62589254",amenity:"fast_food",cuisine:"sandwich;salad;juice"},addTags:{amenity:"fast_food",brand:"immergrün","brand:wikidata":"Q62589254",cuisine:"sandwich;salad;juice",name:"immergün",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["de"],terms:["immergün"],matchScore:2,suggestion:true},"amenity/fast_food/itsu":{name:"itsu",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1159375014875078656/IaKatTeE_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6094914",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"itsu","brand:wikidata":"Q6094914","brand:wikipedia":"en:Itsu",cuisine:"asian",name:"itsu",takeaway:"yes"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Γρηγόρης":{name:"Γρηγόρης",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/gregorys.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273834",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Γρηγόρης","brand:el":"Γρηγόρης","brand:en":"Gregorys","brand:wikidata":"Q62273834",cuisine:"sandwich",name:"Γρηγόρης","name:el":"Γρηγόρης","name:en":"Gregorys",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Бургер Кинг":{name:"Бургер Кинг",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBurger%20King%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q177054",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:ru":"Бургер Кинг","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King","name:ru":"Бургер Кинг",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["by","kz","ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Домино'c":{name:"Домино'c",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Dominos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839466",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Домино'c","brand:en":"Domino's","brand:ru":"Домино'c","brand:wikidata":"Q839466","brand:wikipedia":"ru:Domino’s Pizza",cuisine:"pizza",name:"Домино'c","name:en":"Domino's","name:ru":"Домино'c",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["доминоc пицца"],matchScore:2,suggestion:true},"amenity/fast_food/Крошка Картошка":{name:"Крошка Картошка",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/kartoshka.moscow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4241838",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Крошка Картошка","brand:en":"Kroshka Kartoshka","brand:ru":"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",cuisine:"potato",name:"Крошка Картошка","name:en":"Kroshka Kartoshka","name:ru":"Крошка Картошка",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Макдоналдс":{name:"Макдоналдс",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:ru":"Макдоналдс","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's","name:ru":"Макдоналдс",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Папа Джонс":{name:"Папа Джонс",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papajohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2759586",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:ru":"Папа Джонс","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's","name:ru":"Папа Джонс",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Пузата хата":{name:"Пузата хата",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/puzatahata/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11832009",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Пузата Хата","brand:en":"Puzata hata","brand:ru":"Пузата Хата","brand:ua":"Пузата Хата","brand:wikidata":"Q11832009","brand:wikipedia":"uk:Пузата Хата",cuisine:"ukrainian;western",name:"Пузата Хата","name:en":"Puzata hata","name:ru":"Пузата Хата","name:ua":"Пузата Хата",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Робин Сдобин":{name:"Робин Сдобин",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/robinsdobin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273880",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Робин Сдобин","brand:en":"Robins Dobin","brand:ru":"Робин Сдобин","brand:wikidata":"Q62273880",cuisine:"burger",name:"Робин Сдобин","name:en":"Robins Dobin","name:ru":"Робин Сдобин",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Русский Аппетит":{name:"Русский Аппетит",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/1502979646622576/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086063",amenity:"fast_food",cuisine:"sandwich;salad;regional"},addTags:{amenity:"fast_food",brand:"Русский Аппетит","brand:en":"Russkiy Appetit","brand:ru":"Русский Аппетит","brand:wikidata":"Q62086063",cuisine:"sandwich;salad;regional",name:"Русский Аппетит","name:en":"Russkiy Appetit","name:ru":"Русский Аппетит",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Стардог!s":{name:"Стардог!s",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/StardogsOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4439856",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Стардог!s","brand:en":"Stardog!s","brand:ru":"Стардог!s","brand:wikidata":"Q4439856","brand:wikipedia":"ru:Стардогс",cuisine:"sausage",name:"Стардог!s","name:en":"Stardog!s","name:ru":"Стардог!s",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Суши Wok":{name:"Суши Wok",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sushiwokofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25444754",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Суши Wok","brand:en":"Sushi Wok","brand:ru":"Суши Wok","brand:wikidata":"Q25444754","brand:wikipedia":"uk:Суши Wok (мережа магазинів)",cuisine:"asian",name:"Суши Wok","name:en":"Sushi Wok","name:ru":"Суши Wok",takeaway:"yes"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Теремок":{name:"Теремок",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/teremok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4455593",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Теремок","brand:en":"Teremok","brand:ru":"Теремок","brand:wikidata":"Q4455593","brand:wikipedia":"ru:Теремок (сеть быстрого питания)",cuisine:"crepe;russian",name:"Теремок","name:en":"Teremok","name:ru":"Теремок",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/אגדיר":{name:"אגדיר",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/agadirburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760070",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"אגדיר","brand:en":"Agadir","brand:he":"אגדיר","brand:wikidata":"Q64760070",cuisine:"burger",name:"אגדיר","name:en":"Agadir","name:he":"אגדיר",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/מקדונלד'ס":{name:"מקדונלד'ס",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/McDonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12061542",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"מקדונלד'ס","brand:en":"McDonald's","brand:he":"מקדונלד'ס","brand:wikidata":"Q12061542","brand:wikipedia":"en:McDonald's Israel",cuisine:"burger",name:"מקדונלד'ס","name:en":"McDonald's","name:he":"מקדונלד'ס",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/עד העצם אקספרס":{name:"עד העצם אקספרס",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/1793025004285088/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760165",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"עד העצם אקספרס","brand:en":"Ad Haetzem Express","brand:he":"עד העצם אקספרס","brand:wikidata":"Q64760165",cuisine:"burger",name:"עד העצם אקספרס","name:en":"Ad Haetzem Express","name:he":"עד העצם אקספרס",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/دجاج كنتاكي":{name:"دجاج كنتاكي",icon:"fas-drumstick-bite",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKFC%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"دجاج كنتاكي","brand:ar":"دجاج كنتاكي","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"ar:دجاج كنتاكي",cuisine:"chicken",name:"دجاج كنتاكي","name:ar":"دجاج كنتاكي","name:en":"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/ماكدونالدز":{name:"ماكدونالدز",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"ماكدونالدز","brand:ar":"ماكدونالدز","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"ar:ماكدونالدز",cuisine:"burger",name:"ماكدونالدز","name:ar":"ماكدونالدز","name:en":"McDonald's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/هرفي":{name:"هرفي",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/herfyfscksa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5738371",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"هرفي","brand:ar":"هرفي","brand:en":"Herfy","brand:wikidata":"Q5738371","brand:wikipedia":"ar:هرفي",cuisine:"burger",name:"هرفي","name:ar":"هرفي","name:en":"Herfy",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ae","bh","kw","sa"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/かっぱ寿司":{name:"かっぱ寿司",icon:"maki-fast-food",imageURL:"https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q11263916",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"かっぱ寿司","brand:en":"Kappazushi","brand:ja":"かっぱ寿司","brand:wikidata":"Q11263916","brand:wikipedia":"ja:かっぱ寿司",cuisine:"sushi",name:"かっぱ寿司","name:en":"Kappazushi","name:ja":"かっぱ寿司",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/かつや":{name:"かつや",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1215226415383080960/YbJ7aSm7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2855257",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"かつや","brand:en":"Katsuya","brand:ja":"かつや","brand:wikidata":"Q2855257","brand:wikipedia":"ja:かつや",cuisine:"fried_food",name:"かつや","name:en":"Katsuya","name:ja":"かつや","name:ko":"카쯔야","name:zh":"吉豚屋",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/くら寿司":{name:"くら寿司",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kurasushi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6445491",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"くら寿司","brand:en":"Kurazushi","brand:ja":"くら寿司","brand:wikidata":"Q6445491","brand:wikipedia":"ja:くら寿司",cuisine:"sushi",name:"くら寿司","name:en":"Kurazushi","name:ja":"くら寿司",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/すき家":{name:"すき家",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1074928090885672960/nTgKn0jh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6137375",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"すき家","brand:en":"Sukiya","brand:ja":"すき家","brand:wikidata":"Q6137375","brand:wikipedia":"ja:すき家",cuisine:"beef_bowl",name:"すき家","name:en":"Sukiya","name:ja":"すき家",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/てんや":{name:"てんや",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TWtenya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11319830",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"てんや","brand:en":"Tenya","brand:ja":"てんや","brand:wikidata":"Q11319830","brand:wikipedia":"ja:テンコーポレーション",cuisine:"fries",name:"てんや","name:en":"Tenya","name:ja":"てんや",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/なか卯":{name:"なか卯",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/107330239328355/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11274132",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"なか卯","brand:en":"Nakau","brand:ja":"なか卯","brand:wikidata":"Q11274132","brand:wikipedia":"ja:なか卯",cuisine:"udon",name:"なか卯","name:en":"Nakau","name:ja":"なか卯",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/はま寿司":{name:"はま寿司",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/1743876322501841/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17220385",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"はま寿司","brand:en":"Hamazushi","brand:ja":"はま寿司","brand:wikidata":"Q17220385","brand:wikipedia":"ja:はま寿司",cuisine:"sushi",name:"はま寿司","name:en":"Hamazushi","name:ja":"はま寿司",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ほっかほっか亭":{name:"ほっかほっか亭",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/516896005176524/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5878035",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ほっかほっか亭","brand:en":"Hokka Hokka Tei","brand:ja":"ほっかほっか亭","brand:wikidata":"Q5878035","brand:wikipedia":"ja:ほっかほっか亭",cuisine:"japanese",name:"ほっかほっか亭","name:en":"Hokka Hokka Tei","name:ja":"ほっかほっか亭",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ほっともっと":{name:"ほっともっと",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hottomotto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10850949",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",cuisine:"japanese",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ゆで太郎":{name:"ゆで太郎",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/273267212711878/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11280824",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ゆで太郎","brand:en":"Yudetaro","brand:ja":"ゆで太郎","brand:wikidata":"Q11280824","brand:wikipedia":"ja:ゆで太郎",cuisine:"noodle",name:"ゆで太郎","name:en":"Yudetaro","name:ja":"ゆで太郎",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/ウェンディーズ":{name:"ウェンディーズ",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/wendys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q550258",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"ウェンディーズ","brand:en":"Wendy's","brand:ja":"ウェンディーズ","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"ウェンディーズ","name:en":"Wendy's","name:ja":"ウェンディーズ",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/オリジン弁当":{name:"オリジン弁当",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/152356971456128/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11292632",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"オリジン弁当","brand:en":"Origin Bentō","brand:ja":"オリジン弁当","brand:wikidata":"Q11292632","brand:wikipedia":"ja:オリジン東秀",cuisine:"japanese",name:"オリジン弁当","name:en":"Origin Bentō","name:ja":"オリジン弁当",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/ケンタッキーフライドチキン":{name:"ケンタッキーフライドチキン",icon:"fas-drumstick-bite",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKFC%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"ケンタッキーフライドチキン","brand:en":"KFC","brand:ja":"ケンタッキーフライドチキン","brand:wikidata":"Q524757","brand:wikipedia":"ja:KFCコーポレーション",cuisine:"chicken",name:"ケンタッキーフライドチキン","name:en":"KFC","name:ja":"ケンタッキーフライドチキン",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ゴーゴーカレー":{name:"ゴーゴーカレー",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1983361461/___2__bigger.JPG",geometry:["point","area"],tags:{"brand:wikidata":"Q11303801",amenity:"fast_food"},addTags:{"alt_name:en":"Go Go Curry",amenity:"fast_food",brand:"ゴーゴーカレー","brand:en":"Go!Go!Curry","brand:ja":"ゴーゴーカレー","brand:wikidata":"Q11303801","brand:wikipedia":"ja:ゴーゴーカレー",cuisine:"curry",name:"ゴーゴーカレー","name:en":"Go!Go!Curry","name:ja":"ゴーゴーカレー",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/サブウェイ":{name:"サブウェイ",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/subway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q244457",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"サブウェイ","brand:en":"Subway","brand:ja":"サブウェイ","brand:wikidata":"Q244457","brand:wikipedia":"ja:サブウェイ",cuisine:"sandwich",name:"サブウェイ","name:en":"Subway","name:ja":"サブウェイ",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/スシロー":{name:"スシロー",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/akindosushiro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11257037",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"スシロー","brand:en":"Sushiro","brand:ja":"スシロー","brand:wikidata":"Q11257037","brand:wikipedia":"ja:あきんどスシロー",cuisine:"sushi",name:"スシロー","name:en":"Sushiro","name:ja":"スシロー","name:zh":"壽司郎",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ドミノ":{name:"ドミノ",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Dominos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839466",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ドミノ","brand:en":"Domino's","brand:ja":"ドミノ","brand:wikidata":"Q839466","brand:wikipedia":"ja:ドミノ・ピザ",cuisine:"pizza",name:"ドミノ","name:en":"Domino's","name:ja":"ドミノ",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:["ドミノ・ピザ"],matchScore:2,suggestion:true},"amenity/fast_food/burger/バーガーキング":{name:"バーガーキング",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBurger%20King%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q177054",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"バーガーキング","brand:en":"Burger King","brand:ja":"バーガーキング","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"バーガーキング","name:en":"Burger King","name:ja":"バーガーキング",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザハット":{name:"ピザハット",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:ja":"ピザハット","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut","name:ja":"ピザハット",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザ・カリフォルニア":{name:"ピザ・カリフォルニア",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q75324",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザ・カリフォルニア","brand:en":"Pizza California","brand:ja":"ピザ・カリフォルニア","brand:wikidata":"Q75324","brand:wikipedia":"ja:ピザ・カリフォルニア",cuisine:"pizza",name:"ピザ・カリフォルニア","name:en":"Pizza California","name:ja":"ピザ・カリフォルニア",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザーラ":{name:"ピザーラ",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzala.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199948",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザーラ","brand:en":"Pizza-La","brand:ja":"ピザーラ","brand:wikidata":"Q7199948","brand:wikipedia":"ja:ピザーラ",cuisine:"pizza",name:"ピザーラ","name:en":"Pizza-La","name:ja":"ピザーラ",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ファーストキッチン":{name:"ファーストキッチン",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/firstkitchen.offical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453133",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ファーストキッチン","brand:en":"First Kitchen","brand:ja":"ファーストキッチン","brand:wikidata":"Q5453133","brand:wikipedia":"ja:ファーストキッチン",cuisine:"pizza",name:"ファーストキッチン","name:en":"First Kitchen","name:ja":"ファーストキッチン",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/フレッシュネスバーガー":{name:"フレッシュネスバーガー",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/freshness.burger.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5503087",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"フレッシュネスバーガー","brand:en":"Freshness Burger","brand:ja":"フレッシュネスバーガー","brand:wikidata":"Q5503087","brand:wikipedia":"ja:フレッシュネスバーガー",cuisine:"burger",name:"フレッシュネスバーガー","name:en":"Freshness Burger","name:ja":"フレッシュネスバーガー",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/マクドナルド":{name:"マクドナルド",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:ja":"マクドナルド","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's","name:ja":"マクドナルド",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/ミスタードーナツ":{name:"ミスタードーナツ",icon:"temaki-donut",imageURL:"https://graph.facebook.com/misdo.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1065819",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:ja":"ミスタードーナツ","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut","name:ja":"ミスタードーナツ",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/モスバーガー":{name:"モスバーガー",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mosburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1204169",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:ja":"モスバーガー","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger","name:ja":"モスバーガー",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ラーメン二郎":{name:"ラーメン二郎",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/jirolian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11347765",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ラーメン二郎","brand:en":"Ramen Jiro","brand:ja":"ラーメン二郎","brand:wikidata":"Q11347765","brand:wikipedia":"ja:ラーメン二郎",cuisine:"ramen",name:"ラーメン二郎","name:en":"Ramen Jiro","name:ja":"ラーメン二郎",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/ロッテリア":{name:"ロッテリア",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:ja":"ロッテリア","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria","name:ja":"ロッテリア",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/吉野家":{name:"吉野家",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tw.yoshinoya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q776272",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:ja":"吉野家","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",cuisine:"beef_bowl",name:"吉野家","name:en":"Yoshinoya","name:ja":"吉野家",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/富士そば":{name:"富士そば",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/fujisoba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11414722",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:ja":"富士そば","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",cuisine:"soba",name:"富士そば","name:en":"Fuji Soba","name:ja":"富士そば",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/幸楽苑":{name:"幸楽苑",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kourakuen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11484003",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:ja":"幸楽苑","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",cuisine:"ramen",name:"幸楽苑","name:en":"Kourakuen","name:ja":"幸楽苑",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/摩斯漢堡":{name:"摩斯漢堡",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mosburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1204169",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡","brand:zh":"摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger","name:zh":"摩斯漢堡",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["cn","hk","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/日高屋":{name:"日高屋",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hidakayavietnam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11326050",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋","name:en":"Hidakaya",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/松屋":{name:"松屋",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/matsuyafoods.matsuya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q848773",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya","brand:ja":"松屋","brand:wikidata":"Q848773","brand:wikipedia":"ja:松屋フーズ",cuisine:"japanese",name:"松屋","name:en":"Matsuya","name:ja":"松屋",official_name:"松屋フーズ","official_name:en":"Matsuya Foods","official_name:ja":"松屋フーズ",takeaway:"yes"},countryCodes:["cn","hk","jp","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/箱根そば":{name:"箱根そば",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q11603345",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"箱根そば","brand:en":"Hakone Soba","brand:ja":"箱根そば","brand:wikidata":"Q11603345","brand:wikipedia":"ja:箱根そば",cuisine:"soba",name:"箱根そば","name:en":"Hakone Soba","name:ja":"箱根そば",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/築地銀だこ":{name:"築地銀だこ",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/GindacoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11603490",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"築地銀だこ","brand:en":"Gindaco","brand:ja":"築地銀だこ","brand:wikidata":"Q11603490","brand:wikipedia":"ja:築地銀だこ",cuisine:"takoyaki",name:"築地銀だこ","name:en":"Gindaco","name:ja":"築地銀だこ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/肯德基":{name:"肯德基",icon:"fas-drumstick-bite",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKFC%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",cuisine:"chicken",name:"肯德基","name:en":"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["cn","hk","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/麥當勞":{name:"麥當勞",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麥當勞","brand:zh":"麥當勞","brand:zh-Hant":"麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's","name:zh":"麥當勞","name:zh-Hant":"麥當勞",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["hk","mo","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/麦当劳":{name:"麦当劳",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳","brand:zh":"麦当劳","brand:zh-Hans":"麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's","name:zh":"麦当劳","name:zh-Hans":"麦当劳",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["cn","sg"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/롯데리아":{name:"롯데리아",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:ko":"롯데리아","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria","name:ko":"롯데리아",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/맘스터치":{name:"맘스터치",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/momstouchmain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23044856",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"맘스터치","brand:ko":"맘스터치","brand:wikidata":"Q23044856","brand:wikipedia":"en:Mom's Touch",cuisine:"burger",name:"맘스터치","name:ko":"맘스터치",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/맥도날드":{name:"맥도날드",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"맥도날드","brand:en":"McDonald's","brand:ko":"맥도날드","brand:wikidata":"Q38076","brand:wikipedia":"ko:맥도날드",cuisine:"burger",name:"맥도날드","name:en":"McDonald's","name:ko":"맥도날드",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/1-2-3":{name:"1-2-3",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4545742",amenity:"fuel"},addTags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"},countryCodes:["dk","pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/7-Eleven":{name:"7-Eleven",icon:"maki-fuel",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",amenity:"fuel"},addTags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"},terms:["7-11","seven eleven"],matchScore:2,suggestion:true},"amenity/fuel/76":{name:"76",icon:"maki-fuel",imageURL:"https://graph.facebook.com/76gas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1658320",amenity:"fuel"},addTags:{amenity:"fuel",brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/8 à Huit":{name:"8 à Huit",icon:"maki-fuel",imageURL:"https://graph.facebook.com/fashion8a8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818601",amenity:"fuel"},addTags:{amenity:"fuel",brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ABC":{name:"ABC",icon:"maki-fuel",imageURL:"https://graph.facebook.com/abcasemat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10397504",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ABC","brand:wikidata":"Q10397504","brand:wikipedia":"fi:ABC-ketju",name:"ABC"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ADNOC":{name:"ADNOC",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ADNOCDistribution/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q166729",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ADNOC"},countryCodes:["ae"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ANCAP":{name:"ANCAP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/EstacionesANCAP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2824522",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ANCAP","brand:wikidata":"Q2824522","brand:wikipedia":"es:Administración Nacional de Combustibles, Alcohol y Portland",name:"ANCAP",official_name:"Administración Nacional de Combustibles, Alcoholes y Portland"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/AS 24":{name:"AS 24",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAS%2024%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2819394",amenity:"fuel"},addTags:{amenity:"fuel",brand:"AS 24","brand:wikidata":"Q2819394","brand:wikipedia":"fr:AS 24 (entreprise)",hgv:"only",name:"AS 24"},countryCodes:["at","be","bg","cz","de","dk","es","fr","gb","ge","gr","hr","hu","ie","it","lt","lu","mk","nl","pl","pt","ro","rs","se","si","sk","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aegean":{name:"Aegean",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AegeanOil.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28146598",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aegean","brand:wikidata":"Q28146598","brand:wikipedia":"el:Aegean Oil",name:"Aegean"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Afriquia":{name:"Afriquia",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2829178",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Afriquia","brand:wikidata":"Q2829178","brand:wikipedia":"en:Akwa Group",name:"Afriquia"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Agip":{name:"Agip",icon:"maki-fuel",imageURL:"https://graph.facebook.com/agipoil888/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q377915",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Agrola":{name:"Agrola",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AGROLA.AG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q397351",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aloha Petroleum":{name:"Aloha Petroleum",icon:"maki-fuel",imageURL:"https://graph.facebook.com/alohagas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4734197",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aloha Petroleum","brand:wikidata":"Q4734197","brand:wikipedia":"en:Aloha Petroleum",name:"Aloha Petroleum",official_name:"Aloha Petroleum Ltd"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Alon":{name:"Alon",icon:"maki-fuel",imageURL:"https://graph.facebook.com/alonbrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274304",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Alon","brand:wikidata":"Q62274304",name:"Alon"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Alpet":{name:"Alpet",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ALPETtr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62131561",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Alpet","brand:wikidata":"Q62131561",name:"Alpet"},countryCodes:["al","tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Amoco":{name:"Amoco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Amoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q465952",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Amoco","brand:wikidata":"Q465952","brand:wikipedia":"en:Amoco",name:"Amoco"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ampol":{name:"Ampol",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4748528",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ampol","brand:wikidata":"Q4748528","brand:wikipedia":"en:Ampol",name:"Ampol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Api":{name:"Api",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TheAmericanPetroleumInstitute/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466043",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aral":{name:"Aral",icon:"maki-fuel",imageURL:"https://graph.facebook.com/araldeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q565734",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"},countryCodes:["de","lu"],terms:["aral tankstelle"],matchScore:2,suggestion:true},"amenity/fuel/Arco":{name:"Arco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/arco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q304769",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Asda":{name:"Asda",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Asda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297410",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Atem":{name:"Atem",icon:"maki-fuel",imageURL:"https://graph.facebook.com/postosatem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62332255",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Atem","brand:wikidata":"Q62332255",name:"Atem"},countryCodes:["br"],terms:["posto atem"],matchScore:2,suggestion:true},"amenity/fuel/Auchan":{name:"Auchan",icon:"maki-fuel",imageURL:"https://graph.facebook.com/auchan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Avanti":{name:"Avanti",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OMV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Avia":{name:"Avia",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AVIA.racing.team/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q300147",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"},countryCodes:["at","be","bg","ch","cz","de","es","fr","hu","it","nl","pl","pt","rs","ua"],terms:["station avia"],matchScore:2,suggestion:true},"amenity/fuel/Avin":{name:"Avin",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q19903165",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avin","brand:wikidata":"Q19903165","brand:wikipedia":"en:Avin International",name:"Avin"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Axion":{name:"Axion",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AXIONenergyOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62131749",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Axion","brand:wikidata":"Q62131749",name:"Axion"},countryCodes:["ar","py","uy"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aytemiz":{name:"Aytemiz",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AytemizOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274352",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aytemiz","brand:wikidata":"Q62274352",name:"Aytemiz"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Azpetrol":{name:"Azpetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/1029982540429881/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4034661",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Azpetrol","brand:wikidata":"Q4034661","brand:wikipedia":"az:Azpetrol",name:"Azpetrol"},countryCodes:["az"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/BEBECO":{name:"BEBECO",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62274373",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BEBECO","brand:wikidata":"Q62274373",name:"BEBECO"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/BHPetrol":{name:"BHPetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BHP.Petrol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274381",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BHPetrol","brand:wikidata":"Q62274381",name:"BHPetrol"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/BP":{name:"BP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/bp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152057",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BP","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP"},terms:["bp gas station"],matchScore:2,suggestion:true},"amenity/fuel/BR":{name:"BR",icon:"maki-fuel",imageURL:"https://graph.facebook.com/postospetrobras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4836468",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BR","brand:wikidata":"Q4836468","brand:wikipedia":"pt:Petrobras Distribuidora",name:"BR"},countryCodes:["br"],terms:["br petrobras","petrobras","posto br"],matchScore:2,suggestion:true},"amenity/fuel/BWOC":{name:"BWOC",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4836845",amenity:"fuel"},addTags:{amenity:"fuel",brand:"BWOC","brand:wikidata":"Q4836845","brand:wikipedia":"en:BWOC",name:"BWOC",official_name:"Bob Wayne's Oil Company"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Bangchak":{name:"Bangchak",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Bangchak/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6579719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Bapco":{name:"Bapco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Bapco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q803640",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bapco","brand:wikidata":"Q803640","brand:wikipedia":"en:Bahrain Petroleum Company",name:"Bapco",official_name:"Bahrain Petroleum Company"},countryCodes:["bh"],terms:["bahrain petroleum"],matchScore:2,suggestion:true},"amenity/fuel/Benzina":{name:"Benzina",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBenzina%2B.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11130894",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Benzina","brand:wikidata":"Q11130894","brand:wikipedia":"cs:Benzina",name:"Benzina"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Bharat Petroleum":{name:"Bharat Petroleum",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BharatPetroleumcorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q854826",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Biomax":{name:"Biomax",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BiomaxColombia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274413",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Biomax","brand:wikidata":"Q62274413",name:"Biomax"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Bliska":{name:"Bliska",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4016378",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/CAMPSA":{name:"CAMPSA",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q1031623",amenity:"fuel"},addTags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA",official_name:"Compañía Arrendataria del Monopolio del Petróleo, S.A."},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Caltex":{name:"Caltex",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/582354948345634816/nzfEGDG1_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q277470",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Canadian Tire Gas+":{name:"Canadian Tire Gas+",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Canadiantire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032400",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"},terms:["canadian tire","canadian tire gas bar"],matchScore:2,suggestion:true},"amenity/fuel/Carrefour":{name:"Carrefour",icon:"maki-fuel",imageURL:"https://graph.facebook.com/carrefour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour"},terms:["carrefour market"],matchScore:2,suggestion:true},"amenity/fuel/Casey's General Store":{name:"Casey's General Store",icon:"maki-fuel",imageURL:"https://graph.facebook.com/caseys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940968",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"},terms:["caseys"],matchScore:2,suggestion:true},"amenity/fuel/Cenex":{name:"Cenex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CenexStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5011381",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cepsa":{name:"Cepsa",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CEPSAespana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q608819",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cepsa","brand:wikidata":"Q608819","brand:wikipedia":"en:Cepsa",name:"Cepsa",official_name:"Compañía Española de Petróleos, S.A.U."},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ceypetco":{name:"Ceypetco",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5065795",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"},countryCodes:["lk"],terms:["lanka filling station"],matchScore:2,suggestion:true},"amenity/fuel/Challenge":{name:"Challenge",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ChallengefuelNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5068888",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Challenge","brand:wikidata":"Q5068888","brand:wikipedia":"en:Challenge (gasoline)",name:"Challenge"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Chevron":{name:"Chevron",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Chevron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319642",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Circle K":{name:"Circle K",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Citgo":{name:"Citgo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CITGOPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2974437",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Clark":{name:"Clark",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ClarkCrownBrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5127157",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Co-op (Canada)":{name:"Co-op (Canada)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CoopCRS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"},countryCodes:["ca"],terms:["coop"],matchScore:2,suggestion:true},"amenity/fuel/Coles Express":{name:"Coles Express",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ColesExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5144653",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Conoco":{name:"Conoco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/conoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1126518",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Copec":{name:"Copec",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q11681461",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Copetrol":{name:"Copetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Copetrol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274431",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Copetrol","brand:wikidata":"Q62274431",name:"Copetrol"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cosan":{name:"Cosan",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CosanBrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2998228",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cosan","brand:wikidata":"Q2998228","brand:wikipedia":"pt:Cosan",name:"Cosan"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cosmo":{name:"Cosmo",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCosmo%20Oil%20company%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2498318",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cosmo","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"Cosmo"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Costco Gasoline":{name:"Costco Gasoline",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Costco Gasoline","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Gasoline"},countryCodes:["au","ca","mx","us"],terms:["costco","costco gas","costco wholesale"],matchScore:2,suggestion:true},"amenity/fuel/Couche-Tard":{name:"Couche-Tard",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CoucheTardQc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2836957",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Crevier":{name:"Crevier",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GroupeCrevier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61743451",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Crevier","brand:wikidata":"Q61743451",name:"Crevier"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Crodux":{name:"Crodux",icon:"maki-fuel",imageURL:"https://graph.facebook.com/croduxhr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274622",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Crodux","brand:wikidata":"Q62274622",name:"Crodux"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cumberland Farms":{name:"Cumberland Farms",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CumberlandFarms/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143685",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cupet":{name:"Cupet",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3007579",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cupet","brand:wikidata":"Q3007579","brand:wikipedia":"en:Cuba Petróleo Union",name:"Cupet"},countryCodes:["cu"],terms:["cuba oil union","cuba petróleo union"],matchScore:2,suggestion:true},"amenity/fuel/Delek":{name:"Delek",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFlad%20of%20Delek%202000.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1184087",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Delek","brand:wikidata":"Q1184087","brand:wikipedia":"en:Delek",name:"Delek"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Delta (Panama & Costa Rica)":{name:"Delta (Panama & Costa Rica)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetroleosDelta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274638",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274638",name:"Delta"},countryCodes:["cr","us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Delta (USA)":{name:"Delta (USA)",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62274661",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274661",name:"Delta"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Diamond Shamrock":{name:"Diamond Shamrock",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q16973722",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Diamond Shamrock","brand:wikidata":"Q16973722","brand:wikipedia":"en:Diamond Shamrock",name:"Diamond Shamrock"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Domo":{name:"Domo",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/924850916536107008/9ZCP6jwR_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5291326",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Domo","brand:wikidata":"Q5291326","brand:wikipedia":"en:Domo Gasoline",name:"Domo"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Dyneff":{name:"Dyneff",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q16630266",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Dyneff","brand:wikidata":"Q16630266","brand:wikipedia":"fr:Dyneff",name:"Dyneff"},countryCodes:["es","fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/EKO (Canada)":{name:"EKO (Canada)",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3045934",amenity:"fuel"},addTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q3045934","brand:wikipedia":"fr:EKO",name:"EKO"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/EKO (Greece)":{name:"EKO (Greece)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HELPEgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q903198",amenity:"fuel"},addTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q903198","brand:wikipedia":"el:Ελληνικά Πετρέλαια",name:"EKO"},countryCodes:["bg","cy","gr","me","mk","rs"],terms:["εκο"],matchScore:2,suggestion:true},"amenity/fuel/ENEOS":{name:"ENEOS",icon:"maki-fuel",imageURL:"https://graph.facebook.com/eneos.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1640290",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ENEOS","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"ENEOS"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Elan":{name:"Elan",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q57980752",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Elan","brand:wikidata":"Q57980752",name:"Elan"},countryCodes:["de","fr","nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Engen":{name:"Engen",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1014490248112373760/rL8smOvY_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3054251",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Engen","brand:wikidata":"Q3054251","brand:wikipedia":"en:Engen Petroleum",name:"Engen"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Eni":{name:"Eni",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/875644564459012097/fsDlSI7T_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q565594",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Eni","brand:wikidata":"Q565594","brand:wikipedia":"en:Eni",name:"Eni"},countryCodes:["at","ch","fr","it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Erg":{name:"Erg",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FERG%20logo2018.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q739503",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Erg","brand:wikidata":"Q739503","brand:wikipedia":"it:ERG (azienda)",name:"Erg"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Esso":{name:"Esso",icon:"maki-fuel",imageURL:"https://graph.facebook.com/EssoGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"Esso"},terms:["station esso"],matchScore:2,suggestion:true},"amenity/fuel/Esso Express":{name:"Esso Express",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2350336",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Esso Express","brand:wikidata":"Q2350336","brand:wikipedia":"nl:Esso Express",name:"Esso Express"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Exxon":{name:"Exxon",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ExxonandMobilStations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4781944",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Exxon","brand:wikidata":"Q4781944","brand:wikipedia":"en:Exxon",name:"Exxon"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/F24":{name:"F24",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q12310853",amenity:"fuel"},addTags:{amenity:"fuel",brand:"F24","brand:wikidata":"Q12310853","brand:wikipedia":"da:F24",name:"F24"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Fas Gas":{name:"Fas Gas",icon:"maki-fuel",imageURL:"https://graph.facebook.com/FasGasPlusCorporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61743505",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Fas Gas","brand:wikidata":"Q61743505","brand:wikipedia":"en:Parkland Fuel",name:"Fas Gas"},countryCodes:["ca"],terms:["fas gas plus"],matchScore:2,suggestion:true},"amenity/fuel/Firezone":{name:"Firezone",icon:"maki-fuel",imageURL:"https://graph.facebook.com/FirezoneNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q14628080",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Firezone","brand:wikidata":"Q14628080","brand:wikipedia":"nl:Firezone",name:"Firezone"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Flying J":{name:"Flying J",icon:"maki-fuel",imageURL:"https://graph.facebook.com/pilottravelcenters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64130592",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Flying J","brand:wikidata":"Q64130592",name:"Flying J"},countryCodes:["ca","us"],terms:["flying j travel plaza"],matchScore:2,suggestion:true},"amenity/fuel/Flying V":{name:"Flying V",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OfficialFlyingV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62275048",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Flying V","brand:wikidata":"Q62275048",name:"Flying V"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Freie Tankstelle":{name:"Freie Tankstelle",icon:"maki-fuel",imageURL:"https://graph.facebook.com/768624663275807/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1009104",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Freie Tankstelle","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"Freie Tankstelle"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/GALP":{name:"GALP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/468503569977955/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1492739",amenity:"fuel"},addTags:{amenity:"fuel",brand:"GALP","brand:wikidata":"Q1492739","brand:wikipedia":"en:Galp Energia",name:"GALP"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gazel":{name:"Gazel",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62529885",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gazel","brand:wikidata":"Q62529885",name:"Gazel"},countryCodes:["co","mx","pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gazprom":{name:"Gazprom",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GazpromNewsEn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q102673",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/GetGo":{name:"GetGo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GiantEagleGetGo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5553766",amenity:"fuel"},addTags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"},countryCodes:["us"],terms:["giant eagle","giant eagle fuel"],matchScore:2,suggestion:true},"amenity/fuel/Giant (Carlisle)":{name:"Giant (Carlisle)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/giantfoodstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558332",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Giant","brand:wikidata":"Q5558332","brand:wikipedia":"en:Giant Food Stores",name:"Giant"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Glusco":{name:"Glusco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Glusco.Ukraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62284719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Glusco","brand:wikidata":"Q62284719",name:"Glusco"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Goil":{name:"Goil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GOIL.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5555383",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Goil","brand:wikidata":"Q5555383","brand:wikipedia":"en:Ghana Oil Company",name:"Goil"},countryCodes:["gh"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gulf":{name:"Gulf",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGulf%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1296860",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gulf","brand:wikidata":"Q1296860","brand:wikipedia":"en:Gulf Oil",name:"Gulf"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Gull":{name:"Gull",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GullNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5617739",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Gull","brand:wikidata":"Q5617739","brand:wikipedia":"en:Gull Petroleum",name:"Gull"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/H-E-B Fuel":{name:"H-E-B Fuel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HEB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830621",amenity:"fuel"},addTags:{amenity:"fuel",brand:"H-E-B Fuel","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B Fuel"},countryCodes:["us"],terms:["h-e-b gas"],matchScore:2,suggestion:true},"amenity/fuel/HEM":{name:"HEM",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTamoil.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1563517",amenity:"fuel"},addTags:{amenity:"fuel",brand:"HEM","brand:wikidata":"Q1563517","brand:wikipedia":"de:Deutsche Tamoil",name:"HEM"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/HP":{name:"HP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/hpcl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1619375",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hindustan Petroleum","brand:wikidata":"Q1619375","brand:wikipedia":"en:Hindustan Petroleum",name:"HP",official_name:"Hindustan Petroleum"},countryCodes:["in"],terms:["hp petrol pump"],matchScore:2,suggestion:true},"amenity/fuel/Harnois":{name:"Harnois",icon:"maki-fuel",imageURL:"https://graph.facebook.com/harnoisenergies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61743558",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Harnois","brand:wikidata":"Q61743558",name:"Harnois"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Hess":{name:"Hess",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HessCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1615684",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hess","brand:wikidata":"Q1615684","brand:wikipedia":"en:Hess Corporation",name:"Hess"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Hofer":{name:"Hofer",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HOFER.AT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15815751",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer"},countryCodes:["at","si"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Holiday":{name:"Holiday",icon:"maki-fuel",imageURL:"https://graph.facebook.com/holidaystations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880490",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Huck's Food & Fuel":{name:"Huck's Food & Fuel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GoToHucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56276328",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Huck's Food & Fuel","brand:wikidata":"Q56276328","brand:wikipedia":"en:Huck's Food & Fuel",name:"Huck's Food & Fuel",short_name:"Huck's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Husky":{name:"Husky",icon:"maki-fuel",imageURL:"https://graph.facebook.com/huskyenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q702049",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",name:"Husky"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Hy-Vee Gas":{name:"Hy-Vee Gas",icon:"maki-fuel",imageURL:"https://graph.facebook.com/HyVee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Hy-Vee Gas","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee Gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/IES":{name:"IES",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/512948242925891586/WqYuXs0m_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q62287387",amenity:"fuel"},addTags:{amenity:"fuel",brand:"IES","brand:wikidata":"Q62287387",name:"IES"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/IP":{name:"IP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/IPperlitalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q646807",amenity:"fuel"},addTags:{amenity:"fuel",brand:"IP","brand:wikidata":"Q646807","brand:wikipedia":"en:Anonima Petroli Italiana",name:"IP"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Indian Oil":{name:"Indian Oil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/IndianOilCorpLimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1289348",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Indian Oil","brand:wikidata":"Q1289348","brand:wikipedia":"en:Indian Oil Corporation",name:"Indian Oil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ingo":{name:"Ingo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ingosverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17048617",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ingo","brand:wikidata":"Q17048617","brand:wikipedia":"en:Ingo (brand)",name:"Ingo"},countryCodes:["dk","se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Intermarché":{name:"Intermarché",icon:"maki-fuel",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché"},terms:["intermarché super"],matchScore:2,suggestion:true},"amenity/fuel/Ipiranga":{name:"Ipiranga",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ipirangaoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2081136",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ipiranga","brand:wikidata":"Q2081136","brand:wikipedia":"pt:Ipiranga (empresa)",name:"Ipiranga"},countryCodes:["br"],terms:["posto ipiranga"],matchScore:2,suggestion:true},"amenity/fuel/Irving":{name:"Irving",icon:"maki-fuel",imageURL:"https://graph.facebook.com/irvingoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1673286",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/JA-SS":{name:"JA-SS",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q11225213",amenity:"fuel"},addTags:{amenity:"fuel",brand:"JA-SS","brand:wikidata":"Q11225213","brand:wikipedia":"ja:JA-SS",name:"JA-SS"},countryCodes:["jp"],terms:["ja"],matchScore:2,suggestion:true},"amenity/fuel/Jet":{name:"Jet",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q568940",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Jet","brand:wikidata":"Q568940","brand:wikipedia":"en:Jet (brand)",name:"Jet"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Jetti":{name:"Jetti",icon:"maki-fuel",imageURL:"https://graph.facebook.com/drivewithjetti/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62288720",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Jetti","brand:wikidata":"Q62288720",name:"Jetti"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kangaroo Express":{name:"Kangaroo Express",icon:"maki-fuel",imageURL:"https://graph.facebook.com/KangarooExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61747408",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kangaroo Express","brand:wikidata":"Q61747408",name:"Kangaroo Express",short_name:"Kangaroo"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kobil":{name:"Kobil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/kenolkobil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22906119",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"},countryCodes:["bi","et","ke","rw","tz","ug","zm"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Krist":{name:"Krist",icon:"maki-fuel",imageURL:"https://graph.facebook.com/kristoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q77885501",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Krist","brand:wikidata":"Q77885501",name:"Krist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kroger":{name:"Kroger",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Kroger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q153417",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger"},terms:["kroger fuel","kroger gas"],matchScore:2,suggestion:true},"amenity/fuel/Kum & Go":{name:"Kum & Go",icon:"maki-fuel",imageURL:"https://graph.facebook.com/kumandgo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6443340",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Kwik Trip":{name:"Kwik Trip",icon:"maki-fuel",imageURL:"https://graph.facebook.com/KwikTrip/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6450420",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Lotos":{name:"Lotos",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GrupaLOTOS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1256909",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Lotos","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Lotos Optima":{name:"Lotos Optima",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GrupaLOTOS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1256909",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Lotos Optima","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos Optima"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Love's":{name:"Love's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/lovestravelstops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1872496",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Lukoil":{name:"Lukoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Lukoil.en/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q329347",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Lukoil","brand:wikidata":"Q329347","brand:wikipedia":"en:Lukoil",name:"Lukoil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/MEROIL":{name:"MEROIL",icon:"maki-fuel",imageURL:"https://graph.facebook.com/meroilspain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62292559",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MEROIL","brand:wikidata":"Q62292559",name:"MEROIL"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/MOL":{name:"MOL",icon:"maki-fuel",imageURL:"https://graph.facebook.com/molcesko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q549181",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/MRS":{name:"MRS",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q56274919",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"},countryCodes:["ng"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Mac's":{name:"Mac's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MacsBigBaypointRoad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4043527",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/MacEwen":{name:"MacEwen",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MacEwenServiceStation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61740335",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MacEwen","brand:wikidata":"Q61740335",name:"MacEwen"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Marathon":{name:"Marathon",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MarathonPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q458363",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon"},terms:["marathon gas"],matchScore:2,suggestion:true},"amenity/fuel/Maverik":{name:"Maverik",icon:"maki-fuel",imageURL:"https://graph.facebook.com/maverikadventure/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64149010",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Maverik","brand:wikidata":"Q64149010","brand:wikipedia":"en:Maverik, Inc.",name:"Maverik"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Maxol":{name:"Maxol",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1211959625710477313/3pwGBn8K_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3302837",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Maxol","brand:wikidata":"Q3302837","brand:wikipedia":"en:Maxol",name:"Maxol"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Meijer":{name:"Meijer",icon:"maki-fuel",imageURL:"https://graph.facebook.com/meijer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1917753",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Metano":{name:"Metano",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62294765",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Metano","brand:wikidata":"Q62294765",name:"Metano"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Migrol":{name:"Migrol",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Migrol.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1747771",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Mobil":{name:"Mobil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ExxonandMobilStations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088656",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"},terms:["mobile"],matchScore:2,suggestion:true},"amenity/fuel/Mohawk":{name:"Mohawk",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q6893796",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Mohawk","brand:wikidata":"Q6893796","brand:wikipedia":"en:Mohawk Oil",name:"Mohawk"},countryCodes:["ca"],terms:["mohawk oil"],matchScore:2,suggestion:true},"amenity/fuel/Moil":{name:"Moil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/milanpetrol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62296914",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Moil","brand:wikidata":"Q62296914",name:"Moil"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Morrisons":{name:"Morrisons",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Morrisons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q922344",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Moya":{name:"Moya",icon:"maki-fuel",imageURL:"https://graph.facebook.com/moyastacja/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62297700",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Moya","brand:wikidata":"Q62297700",name:"Moya"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Murco":{name:"Murco",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q16998281",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Murco","brand:wikidata":"Q16998281","brand:wikipedia":"en:Murco Petroleum",name:"Murco"},countryCodes:["gb"],terms:["murco petroleum"],matchScore:2,suggestion:true},"amenity/fuel/Murphy USA":{name:"Murphy USA",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MurphyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19604459",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Murphy USA","brand:wikidata":"Q19604459","brand:wikipedia":"en:Murphy USA",name:"Murphy USA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/NP":{name:"NP",icon:"maki-fuel",imageURL:"https://graph.facebook.com/trinidadnp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7842382",amenity:"fuel"},addTags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"},countryCodes:["tt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Neste":{name:"Neste",icon:"maki-fuel",imageURL:"https://graph.facebook.com/NesteUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q616376",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/OIL!":{name:"OIL!",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20OIL!.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2007561",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/OK":{name:"OK",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OKenergi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12329785",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/OKQ8":{name:"OKQ8",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OKQ8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1634762",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/OMV":{name:"OMV",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OMV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Oilibya":{name:"Oilibya",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OilibyaMisr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7081491",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"},terms:["oilibia","oilibiya","oillibia","oilliby","oillibya","oillybia","oilybia","olibya","olybia"],matchScore:2,suggestion:true},"amenity/fuel/Olerex":{name:"Olerex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/as.olerex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16931205",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Olerex","brand:wikidata":"Q16931205","brand:wikipedia":"et:AS Olerex",name:"Olerex"},countryCodes:["ee"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Opet":{name:"Opet",icon:"maki-fuel",imageURL:"https://graph.facebook.com/opet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7072824",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Orlen":{name:"Orlen",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ORLENOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q971649",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"},countryCodes:["lt","pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Oxxo":{name:"Oxxo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OXXOTiendas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1342538",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/PSO":{name:"PSO",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PSOCL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2741455",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PSO","brand:wikidata":"Q2741455","brand:wikipedia":"en:Pakistan State Oil",name:"PSO"},countryCodes:["pk"],terms:["pso petrol pump"],matchScore:2,suggestion:true},"amenity/fuel/PT":{name:"PT",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ptstation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62298612",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PT","brand:wikidata":"Q62298612",name:"PT"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/PTT":{name:"PTT",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PTTNews/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1810389",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PTT","brand:wikidata":"Q1810389","brand:wikipedia":"en:PTT Public Company Limited",name:"PTT"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/PV Oil":{name:"PV Oil",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2089536",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PV Oil","brand:wikidata":"Q2089536","brand:wikipedia":"en:Petrovietnam",name:"PV Oil"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pacific Pride":{name:"Pacific Pride",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PacificPrideUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7122637",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pacific Pride","brand:wikidata":"Q7122637","brand:wikipedia":"en:Pacific Pride",name:"Pacific Pride"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pecsa":{name:"Pecsa",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PecsaPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62299262",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pecsa","brand:wikidata":"Q62299262",name:"Pecsa"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pemex":{name:"Pemex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Pemex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q871308",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pemex","brand:wikidata":"Q871308","brand:wikipedia":"en:Pemex",name:"Pemex"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pertamina":{name:"Pertamina",icon:"maki-fuel",imageURL:"https://graph.facebook.com/pertamina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1641044",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pertamina","brand:wikidata":"Q1641044","brand:wikipedia":"en:Pertamina",name:"Pertamina"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petro":{name:"Petro",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TravelCentersOfAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64051305",amenity:"fuel"},addTags:{alt_name:"Petro Stopping Centers",amenity:"fuel",brand:"Petro","brand:wikidata":"Q64051305",name:"Petro"},countryCodes:["ca","us"],terms:["petro stopping center"],matchScore:2,suggestion:true},"amenity/fuel/Petro-Canada":{name:"Petro-Canada",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petrocanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1208279",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petro-T":{name:"Petro-T",icon:"maki-fuel",imageURL:"https://graph.facebook.com/433867116736933/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61743540",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petro-T","brand:wikidata":"Q61743540",name:"Petro-T"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/PetroPerú":{name:"PetroPerú",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petroperu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2506390",amenity:"fuel"},addTags:{amenity:"fuel",brand:"PetroPerú","brand:wikidata":"Q2506390","brand:wikipedia":"es:Petroperú",name:"PetroPerú"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrochina":{name:"Petrochina",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetroChina.Ltd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q503182",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrochina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"Petrochina"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petroecuador":{name:"Petroecuador",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetroecuadorEP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1812822",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petroecuador","brand:wikidata":"Q1812822","brand:wikipedia":"en:Petroecuador",name:"Petroecuador"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrol Ofisi":{name:"Petrol Ofisi",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petrolofisi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1278087",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrol Ofisi","brand:wikidata":"Q1278087","brand:wikipedia":"en:Petrol Ofisi",name:"Petrol Ofisi"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrolimex":{name:"Petrolimex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/tapdoanxangdauvietnam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10831598",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrolimex","brand:wikidata":"Q10831598","brand:wikipedia":"en:Petrolimex",name:"Petrolimex"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrolina":{name:"Petrolina",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petrolinaholdings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17013948",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrolina","brand:wikidata":"Q17013948","brand:wikipedia":"en:Petrolina (company)",name:"Petrolina"},countryCodes:["cy"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petrom":{name:"Petrom",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetromRo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1755034",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petrom","brand:wikidata":"Q1755034","brand:wikipedia":"en:Petrom",name:"Petrom"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petron":{name:"Petron",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetronCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7179011",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petron","brand:wikidata":"Q7179011","brand:wikipedia":"en:Petron Corporation",name:"Petron"},countryCodes:["my","ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petronas":{name:"Petronas",icon:"maki-fuel",imageURL:"https://graph.facebook.com/petronas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q221692",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petronas","brand:wikidata":"Q221692","brand:wikipedia":"en:Petronas",name:"Petronas"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Petronor":{name:"Petronor",icon:"maki-fuel",imageURL:"https://graph.facebook.com/info.petronor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1726547",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Petronor","brand:wikidata":"Q1726547","brand:wikipedia":"es:Petronor",name:"Petronor"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Phillips 66":{name:"Phillips 66",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Phillips66Co/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1656230",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Phillips 66","brand:wikidata":"Q1656230","brand:wikipedia":"en:Phillips 66",name:"Phillips 66"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Phoenix":{name:"Phoenix",icon:"maki-fuel",imageURL:"https://graph.facebook.com/phoenixfuels.ph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7186949",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Phoenix","brand:wikidata":"Q7186949","brand:wikipedia":"en:Phoenix Petroleum",name:"Phoenix"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Pilot":{name:"Pilot",icon:"maki-fuel",imageURL:"https://graph.facebook.com/pilottravelcenters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64128179",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pilot","brand:wikidata":"Q64128179",name:"Pilot"},countryCodes:["ca","us"],terms:["pilot travel centers"],matchScore:2,suggestion:true},"amenity/fuel/Pioneer":{name:"Pioneer",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PioneerEnergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7196684",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Pioneer","brand:wikidata":"Q7196684","brand:wikipedia":"en:Pioneer Energy",name:"Pioneer"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Preem":{name:"Preem",icon:"maki-fuel",imageURL:"https://graph.facebook.com/preem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q598835",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Preem","brand:wikidata":"Q598835","brand:wikipedia":"en:Preem",name:"Preem"},countryCodes:["pl","se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Primax (Ecuador)":{name:"Primax (Ecuador)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PrimaxEcuador/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62332857",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332857",name:"Primax"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Primax (Peru)":{name:"Primax (Peru)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PrimaxPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62332638",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332638",name:"Primax"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Prio":{name:"Prio",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PrioEnergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62530421",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Prio","brand:wikidata":"Q62530421",name:"Prio"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Puma":{name:"Puma",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PumaEnergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7259769",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Puma","brand:wikidata":"Q7259769","brand:wikipedia":"en:Puma Energy",name:"Puma"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Q1":{name:"Q1",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Q1EnergieAG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086498",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Q1","brand:wikidata":"Q62086498",name:"Q1"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Q8":{name:"Q8",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OKQ8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1634762",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Q8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"Q8"},countryCodes:["be","dk","es","it","lu","nl","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Q8 Easy":{name:"Q8 Easy",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Q8italia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1806948",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Q8 Easy","brand:wikidata":"Q1806948","brand:wikipedia":"nl:Q8 Easy",name:"Q8 Easy"},countryCodes:["be","it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Qstar":{name:"Qstar",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q10647961",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Qstar","brand:wikidata":"Q10647961","brand:wikipedia":"sv:Qstar",name:"Qstar"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/QuickChek":{name:"QuickChek",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1191354026673225733/8XEXlY7k_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7271689",amenity:"fuel"},addTags:{amenity:"fuel",brand:"QuickChek","brand:wikidata":"Q7271689","brand:wikipedia":"en:QuickChek",name:"QuickChek"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/QuikTrip":{name:"QuikTrip",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Quiktrip/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7271953",amenity:"fuel"},addTags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip",short_name:"QT"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/RaceTrac":{name:"RaceTrac",icon:"maki-fuel",imageURL:"https://graph.facebook.com/RaceTrac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735942",amenity:"fuel"},addTags:{amenity:"fuel",brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/RaceWay":{name:"RaceWay",icon:"maki-fuel",imageURL:"https://graph.facebook.com/720219901323849/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q73039084",amenity:"fuel"},addTags:{amenity:"fuel",brand:"RaceWay","brand:wikidata":"Q73039084",name:"RaceWay"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Repsol":{name:"Repsol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/repsol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q174747",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Repsol","brand:wikidata":"Q174747","brand:wikipedia":"es:Repsol",name:"Repsol"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Revoil":{name:"Revoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/revoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62530755",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Revoil","brand:wikidata":"Q62530755",name:"Revoil"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Rompetrol":{name:"Rompetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Rompetrol.Romania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1788862",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Rompetrol","brand:wikidata":"Q1788862","brand:wikipedia":"en:Rompetrol",name:"Rompetrol"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Royal Farms":{name:"Royal Farms",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Royalfarmsstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7374169",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Rubis":{name:"Rubis",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3446514",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Rubis","brand:wikidata":"Q3446514","brand:wikipedia":"en:Rubis (company)",name:"Rubis"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Rutter's":{name:"Rutter's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/rutters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7383544",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Rutter's","brand:wikidata":"Q7383544","brand:wikipedia":"en:Rutter's",name:"Rutter's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Safeway":{name:"Safeway",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Safeway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1508234",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sainsbury's":{name:"Sainsbury's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/sainsburys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152096",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sam's Club":{name:"Sam's Club",icon:"maki-fuel",imageURL:"https://graph.facebook.com/samsclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1972120",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club"},terms:["sams club fuel center","sams club gas"],matchScore:2,suggestion:true},"amenity/fuel/Sasol":{name:"Sasol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SasolSACareers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q905998",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sea Oil":{name:"Sea Oil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SEAOIL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7389549",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sheetz":{name:"Sheetz",icon:"maki-fuel",imageURL:"https://graph.facebook.com/sheetz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7492551",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Shell":{name:"Shell",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"},terms:["posto shell","shell gas station","shell petrol station","shell station","station shell"],matchScore:2,suggestion:true},"amenity/fuel/Shell Express":{name:"Shell Express",icon:"maki-fuel",imageURL:"https://graph.facebook.com/shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2289188",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sinclair":{name:"Sinclair",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SinclairOilCorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1290900",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Slovnaft":{name:"Slovnaft",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MySlovnaft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1587563",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"},countryCodes:["cz","pl","sk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Socar":{name:"Socar",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SOCARofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1622293",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sokimex":{name:"Sokimex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SokimexGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1149575",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"},countryCodes:["kh"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Speedway":{name:"Speedway",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SpeedwayStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7575683",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sprint":{name:"Sprint",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SprintTankstelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57588452",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/St1":{name:"St1",icon:"maki-fuel",imageURL:"https://graph.facebook.com/st1suomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7592214",amenity:"fuel"},addTags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"},countryCodes:["fi","se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Star":{name:"Star",icon:"maki-fuel",imageURL:"https://graph.facebook.com/123909017686285/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2031095",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Station Service E. Leclerc":{name:"Station Service E. Leclerc",icon:"maki-fuel",imageURL:"https://graph.facebook.com/E.Leclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",amenity:"fuel"},addTags:{amenity:"fuel",brand:"E.Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Station Service E. Leclerc"},terms:["e. leclerc"],matchScore:2,suggestion:true},"amenity/fuel/Statoil":{name:"Statoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Equinor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1776022",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"},countryCodes:["dk","ee","ie","pl","ru","se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Stewart's":{name:"Stewart's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/YourStewarts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7615690",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sunoco":{name:"Sunoco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GoSunoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1423218",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Super U":{name:"Super U",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/TA":{name:"TA",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TravelCentersOfAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7835892",amenity:"fuel"},addTags:{amenity:"fuel",brand:"TA","brand:wikidata":"Q7835892","brand:wikipedia":"en:TravelCenters of America",name:"TA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tamoil":{name:"Tamoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TamoilNederland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706793",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"},countryCodes:["ch","de","es","fr","it","nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tango":{name:"Tango",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TangoTankstations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2423920",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tanka":{name:"Tanka",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q10690640",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Teboil":{name:"Teboil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/teboil.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7692079",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tela":{name:"Tela",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TelaCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62534875",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tela","brand:wikidata":"Q62534875",name:"Tela"},countryCodes:["kh"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tempo":{name:"Tempo",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62535175",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tempo","brand:wikidata":"Q62535175",name:"Tempo"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Terpel":{name:"Terpel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Terpel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7703003",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Terrible's":{name:"Terrible's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TerribleHerbst/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7703648",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Terrible's","brand:wikidata":"Q7703648","brand:wikipedia":"en:Terrible Herbst",name:"Terrible's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tesco":{name:"Tesco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/1183230681723205/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Texaco":{name:"Texaco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TexacoWithTechron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q775060",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Thorntons":{name:"Thorntons",icon:"maki-fuel",imageURL:"https://graph.facebook.com/thorntonsllc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7796584",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Thorntons","brand:wikidata":"Q7796584","brand:wikipedia":"en:Thorntons LLC",name:"Thorntons"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tinq":{name:"Tinq",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2132028",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tinq","brand:wikidata":"Q2132028","brand:wikipedia":"nl:Tinq",name:"Tinq"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Top":{name:"Top",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TOPOilFuelingIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7693933",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Top","brand:wikidata":"Q7693933","brand:wikipedia":"en:Tedcastles Oil Products",name:"Top",official_name:"Tedcastles Oil Products"},countryCodes:["ie"],terms:["top oil"],matchScore:2,suggestion:true},"amenity/fuel/Topaz":{name:"Topaz",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1167471677904773120/_vgQ82G0_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7824764",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Total":{name:"Total",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TotalUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154037",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"},terms:["station total"],matchScore:2,suggestion:true},"amenity/fuel/Total Access":{name:"Total Access",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TotalUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154037",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Total Access","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total Access"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/TotalErg":{name:"TotalErg",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTotalerg%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3995933",amenity:"fuel"},addTags:{amenity:"fuel",brand:"TotalErg","brand:wikidata":"Q3995933","brand:wikipedia":"it:TotalErg",name:"TotalErg"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Turkey Hill":{name:"Turkey Hill",icon:"maki-fuel",imageURL:"https://graph.facebook.com/turkeyhillmm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42376970",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Turmöl":{name:"Turmöl",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Turmoel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1473279",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/UDF Fuel":{name:"UDF Fuel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/UnitedDairyFarmers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887677",amenity:"fuel"},addTags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"},countryCodes:["us"],terms:["udf fuels","united dairy farmers"],matchScore:2,suggestion:true},"amenity/fuel/USA Gasoline":{name:"USA Gasoline",icon:"maki-fuel",imageURL:"https://graph.facebook.com/153091311519939/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17126373",amenity:"fuel"},addTags:{amenity:"fuel",brand:"USA Gasoline","brand:wikidata":"Q17126373","brand:wikipedia":"en:USA Gasoline",name:"USA Gasoline"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ultramar":{name:"Ultramar",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ultramarcanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3548078",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/United":{name:"United",icon:"maki-fuel",imageURL:"https://graph.facebook.com/unitedpetroleum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28224393",amenity:"fuel"},addTags:{amenity:"fuel",brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United"},countryCodes:["au"],terms:["united petroleum"],matchScore:2,suggestion:true},"amenity/fuel/Uno":{name:"Uno",icon:"maki-fuel",imageURL:"https://graph.facebook.com/UnoGasolineras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62535574",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Uno","brand:wikidata":"Q62535574",name:"Uno"},countryCodes:["bz","cr","gt","hn","ni","sv"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Uno-X":{name:"Uno-X",icon:"maki-fuel",imageURL:"https://graph.facebook.com/unoxdanmark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3362746",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Uno-X","brand:wikidata":"Q3362746","brand:wikipedia":"en:Uno-X",name:"Uno-X"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Valero":{name:"Valero",icon:"maki-fuel",imageURL:"https://graph.facebook.com/valeroenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1283291",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Viada":{name:"Viada",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ViadaLietuva/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12663942",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Viada","brand:wikidata":"Q12663942","brand:wikipedia":"en:Lukoil Baltija",name:"Viada"},countryCodes:["lt","lv"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Vito":{name:"Vito",icon:"maki-fuel",imageURL:"https://graph.facebook.com/VITOCORSICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62536473",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Vito","brand:wikidata":"Q62536473",name:"Vito"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/WOG":{name:"WOG",icon:"maki-fuel",imageURL:"https://graph.facebook.com/azsWOG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12072939",amenity:"fuel"},addTags:{amenity:"fuel",brand:"WOG","brand:wikidata":"Q12072939","brand:wikipedia":"en:WOG (gas stations)",name:"WOG"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Walmart":{name:"Walmart",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62606411",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Walmart","brand:wikidata":"Q62606411","brand:wikipedia":"en:Walmart",name:"Walmart"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Wawa":{name:"Wawa",icon:"maki-fuel",imageURL:"https://graph.facebook.com/wawa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5936320",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Westfalen":{name:"Westfalen",icon:"maki-fuel",imageURL:"https://graph.facebook.com/WestfalenAG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1411209",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Westfalen","brand:wikidata":"Q1411209","brand:wikipedia":"en:Westfalen AG",name:"Westfalen"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Woolworths Petrol":{name:"Woolworths Petrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/woolworths/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5023980",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/XTR":{name:"XTR",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/1849683826/XTRASlogo_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q62537250",amenity:"fuel"},addTags:{amenity:"fuel",brand:"XTR","brand:wikidata":"Q62537250",name:"XTR"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/YPF":{name:"YPF",icon:"maki-fuel",imageURL:"https://graph.facebook.com/YPFoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2006989",amenity:"fuel"},addTags:{amenity:"fuel",brand:"YPF","brand:wikidata":"Q2006989","brand:wikipedia":"en:YPF",name:"YPF"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/YX Energi":{name:"YX Energi",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4580519",amenity:"fuel"},addTags:{amenity:"fuel",brand:"YX Energi","brand:wikidata":"Q4580519","brand:wikipedia":"en:YX Energi",name:"YX Energi"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Z":{name:"Z",icon:"maki-fuel",imageURL:"https://graph.facebook.com/zenergynz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8063337",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Z","brand:wikidata":"Q8063337","brand:wikipedia":"en:Z Energy",name:"Z"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/bft":{name:"bft",icon:"maki-fuel",imageURL:"https://graph.facebook.com/768624663275807/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1009104",amenity:"fuel"},addTags:{amenity:"fuel",brand:"bft","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"bft"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/din-X":{name:"din-X",icon:"maki-fuel",imageURL:"https://graph.facebook.com/bensinbolagettvartom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10472858",amenity:"fuel"},addTags:{amenity:"fuel",brand:"din-X","brand:wikidata":"Q10472858","brand:wikipedia":"sv:Din-X",name:"din-X"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/uSmile 昆仑好客":{name:"uSmile 昆仑好客",icon:"maki-fuel",imageURL:"https://graph.facebook.com/113494673346645/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66480830",amenity:"fuel"},addTags:{amenity:"fuel",brand:"uSmile 昆仑好客","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"昆仑好客",name:"uSmile 昆仑好","name:en":"uSmile","name:zh":"昆仑好客"},countryCodes:["cn"],terms:["usmile","usmile 便利店","昆仑好","昆仑好客"],matchScore:2,suggestion:true},"amenity/fuel/Авіас":{name:"Авіас",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q12122687",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Авіас","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"Авіас"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/БРСМ-Нафта":{name:"БРСМ-Нафта",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BRSM.NAFTA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56356523",amenity:"fuel"},addTags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Башнефть":{name:"Башнефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Bashneft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q809985",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Белоруснефть":{name:"Белоруснефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/belorusneft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4082693",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Газпромнефть":{name:"Газпромнефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/gazprom.neft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1461799",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Газпромнефть","brand:wikidata":"Q1461799","brand:wikipedia":"en:Gazprom Neft",name:"Газпромнефть"},countryCodes:["by","kg","kz","ru","tj"],terms:["газпром"],matchScore:2,suggestion:true},"amenity/fuel/Гелиос":{name:"Гелиос",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62286471",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Гелиос","brand:en":"Helios","brand:wikidata":"Q62286471",name:"Гелиос","name:en":"Helios"},countryCodes:["kz"],terms:["helios"],matchScore:2,suggestion:true},"amenity/fuel/ЕКА":{name:"ЕКА",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62543029",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ЕКА","brand:wikidata":"Q62543029",name:"ЕКА"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/КЛО":{name:"КЛО",icon:"maki-fuel",imageURL:"https://graph.facebook.com/klo.oil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60966526",amenity:"fuel"},addTags:{amenity:"fuel",brand:"КЛО","brand:en":"Klo","brand:wikidata":"Q60966526","brand:wikipedia":"ru:КЛО (сеть АЗС)",name:"КЛО","name:en":"Klo"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/КазМунайГаз":{name:"КазМунайГаз",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OzenMunaiGaz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1417227",amenity:"fuel"},addTags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Лукойл":{name:"Лукойл",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Lukoil.en/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q329347",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"},terms:["лукоил"],matchScore:2,suggestion:true},"amenity/fuel/Макпетрол":{name:"Макпетрол",icon:"maki-fuel",imageURL:"https://graph.facebook.com/makpetrol.ultra/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1886438",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"},countryCodes:["mk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/НК Альянс":{name:"НК Альянс",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AllianceOilUkraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4063700",amenity:"fuel"},addTags:{amenity:"fuel",brand:"НК Альянс","brand:en":"Alliance Oil","brand:ru":"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс","name:en":"Alliance Oil","name:ru":"НК Альянс"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Нефтьмагистраль":{name:"Нефтьмагистраль",icon:"maki-fuel",imageURL:"https://graph.facebook.com/neftm.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62544323",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Нефтьмагистраль","brand:en":"Neftmagistral","brand:wikidata":"Q62544323",name:"Нефтьмагистраль","name:en":"Neftmagistral"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ОККО":{name:"ОККО",icon:"maki-fuel",imageURL:"https://graph.facebook.com/okkoua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7072617",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ОМВ":{name:"ОМВ",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OMV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ОМВ","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"ОМВ"},countryCodes:["bg","rs"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ПТК":{name:"ПТК",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ptk.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4360193",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:ru":"ПТК","brand:wikidata":"Q4360193","brand:wikipedia":"ru:Петербургская топливная компания",name:"ПТК","name:en":"The Petersburg Fuel Company","name:ru":"ПТК"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Петрол":{name:"Петрол",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetrolAD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24315",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Петрол","brand:en":"Petrol AD","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол","name:en":"Petrol AD"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Роснефть":{name:"Роснефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/RosneftRu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141123",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:ru":"Роснефть","brand:wikidata":"Q1141123","brand:wikipedia":"ru:Роснефть",name:"Роснефть","name:en":"Rosneft","name:ru":"Роснефть"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Сургутнефтегаз":{name:"Сургутнефтегаз",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSng2.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q680776",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:ru":"Сургутнефтегаз","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas","name:ru":"Сургутнефтегаз"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ТНК":{name:"ТНК",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2298901",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Татнефтепродукт":{name:"Татнефтепродукт",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62545686",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Татнефтепродукт","brand:en":"Tatnefteprodukt","brand:ru":"Татнефтепродукт","brand:wikidata":"Q62545686",name:"Татнефтепродукт","name:en":"Tatnefteprodukt","name:ru":"Татнефтепродукт"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Татнефть":{name:"Татнефть",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTatneft%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1616858",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:ru":"Татнефть","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft","name:ru":"Татнефть"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Укрнафта":{name:"Укрнафта",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUkrnafta.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2447961",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:uk":"Укрнафта","brand:wikidata":"Q2447961","brand:wikipedia":"uk:Укрнафта",name:"Укрнафта","name:en":"Ukrnafta","name:uk":"Укрнафта"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/דור אלון":{name:"דור אלון",icon:"maki-fuel",imageURL:"https://graph.facebook.com/dor.alon.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16130352",amenity:"fuel"},addTags:{amenity:"fuel",brand:"דור אלון","brand:en":"Dor Alon","brand:he":"דור אלון","brand:wikidata":"Q16130352","brand:wikipedia":"he:דור אלון אנרגיה בישראל (1988)",name:"דור אלון","name:en":"Dor Alon","name:he":"דור אלון"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/סונול":{name:"סונול",icon:"maki-fuel",imageURL:"https://graph.facebook.com/sonolsogood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3701622",amenity:"fuel"},addTags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:he":"סונול","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol","name:he":"סונול"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/פז":{name:"פז",icon:"maki-fuel",imageURL:"https://graph.facebook.com/YellowPaz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2211731",amenity:"fuel"},addTags:{amenity:"fuel",brand:"פז","brand:en":"Paz","brand:he":"פז","brand:wikidata":"Q2211731","brand:wikipedia":"en:Paz Oil Company",name:"פז","name:en":"Paz","name:he":"פז"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ادنوك":{name:"ادنوك",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ADNOCDistribution/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q166729",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ادنوك","brand:ar":"ادنوك","brand:en":"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ادنوك","name:ar":"ادنوك","name:en":"ADNOC"},countryCodes:["ae"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/บางจาก":{name:"บางจาก",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Bangchak/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6579719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"บางจาก","brand:en":"Bangchak","brand:th":"บางจาก","brand:wikidata":"Q6579719","brand:wikipedia":"th:บางจาก คอร์ปอเรชัน",name:"บางจาก","name:en":"Bangchak","name:th":"บางจาก"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ป.ต.ท.":{name:"ป.ต.ท.",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PTTNews/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1810389",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ป.ต.ท.","brand:en":"PTT","brand:th":"ป.ต.ท.","brand:wikidata":"Q1810389","brand:wikipedia":"th:ปตท.",name:"ป.ต.ท.","name:en":"PTT","name:th":"ป.ต.ท."},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/เชลล์":{name:"เชลล์",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",amenity:"fuel"},addTags:{amenity:"fuel",brand:"เชลล์","brand:en":"Shell","brand:th":"เชลล์","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"เชลล์","name:en":"Shell","name:th":"เชลล์"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/เอสโซ่":{name:"เอสโซ่",icon:"maki-fuel",imageURL:"https://graph.facebook.com/EssoGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:th":"เอสโซ่","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso","name:th":"เอสโซ่"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/エッソ":{name:"エッソ",icon:"maki-fuel",imageURL:"https://graph.facebook.com/EssoGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:ja":"エッソ","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso","name:ja":"エッソ"},countryCodes:["jp"],terms:["エッソ石油"],matchScore:2,suggestion:true},"amenity/fuel/エネオス":{name:"エネオス",icon:"maki-fuel",imageURL:"https://graph.facebook.com/eneos.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1640290",amenity:"fuel"},addTags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:ja":"エネオス","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy","name:ja":"エネオス"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/キグナス石油":{name:"キグナス石油",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q11296629",amenity:"fuel"},addTags:{amenity:"fuel",brand:"キグナス石油","brand:en":"KYGNUS","brand:ja":"キグナス石油","brand:wikidata":"Q11296629","brand:wikipedia":"ja:キグナス石油",name:"キグナス石油","name:en":"Kygnus","name:ja":"キグナス石油"},countryCodes:["jp"],terms:["キグナス"],matchScore:2,suggestion:true},"amenity/fuel/コスモ石油":{name:"コスモ石油",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCosmo%20Oil%20company%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2498318",amenity:"fuel"},addTags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:ja":"コスモ石油","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company","name:ja":"コスモ石油"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ゼネラル":{name:"ゼネラル",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTonenGeneral.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11528048",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ゼネラル","brand:en":"Tonen General","brand:ja":"ゼネラル","brand:wikidata":"Q11528048","brand:wikipedia":"ja:東燃ゼネラル石油",name:"ゼネラル","name:en":"Tonen General","name:ja":"ゼネラル"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/モービル":{name:"モービル",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ExxonandMobilStations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088656",amenity:"fuel"},addTags:{amenity:"fuel",brand:"モービル","brand:en":"Mobil","brand:ja":"モービル","brand:wikidata":"Q3088656","brand:wikipedia":"ja:モービル (ブランド)",name:"モービル","name:en":"Mobil","name:ja":"モービル"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/中国石化 Sinopec":{name:"中国石化 Sinopec",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Sinopec/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q831445",amenity:"fuel"},addTags:{amenity:"fuel",brand:"中国石化 Sinopec","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec","brand:zh":"中国石化",name:"中国石化 Sinopec","name:en":"Sinopec","name:zh":"中国石化"},countryCodes:["cn"],terms:["sinopec","sinopec fuel","中国石化","中国石化加油站"],matchScore:2,suggestion:true},"amenity/fuel/中国石油":{name:"中国石油",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetroChina.Ltd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q503182",amenity:"fuel"},addTags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina","brand:zh":"中国石油",name:"中国石油","name:en":"PetroChina","name:zh":"中国石油"},countryCodes:["cn"],terms:["中油加油站"],matchScore:2,suggestion:true},"amenity/fuel/全國加油站":{name:"全國加油站",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q20410455",amenity:"fuel"},addTags:{amenity:"fuel",brand:"全國加油站","brand:en":"NPC","brand:wikidata":"Q20410455","brand:wikipedia":"zh:全國加油站","brand:zh":"全國加油站",name:"全國加油站","name:en":"NPC","name:zh":"全國加油站"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/出光":{name:"出光",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2216770",amenity:"fuel"},addTags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:ja":"出光","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan","name:ja":"出光"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/台灣中油":{name:"台灣中油",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q21527177",amenity:"fuel"},addTags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation, Taiwan","brand:zh":"台灣中油",name:"台灣中油","name:en":"CPC Corporation, Taiwan","name:zh":"台灣中油"},countryCodes:["tw"],terms:["中油"],matchScore:2,suggestion:true},"amenity/fuel/昭和シェル":{name:"昭和シェル",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q277115",amenity:"fuel"},addTags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:ja":"昭和シェル","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu","name:ja":"昭和シェル"},countryCodes:["jp"],terms:["昭和シェル石油"],matchScore:2,suggestion:true},"amenity/gambling/Buzz Bingo":{name:"Buzz Bingo",icon:"fas-coins",imageURL:"https://pbs.twimg.com/profile_images/1084856442736332800/GgVekVmJ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q60746117",amenity:"gambling"},addTags:{amenity:"gambling",brand:"Buzz Bingo","brand:wikidata":"Q60746117","brand:wikipedia":"en:Buzz Bingo",gambling:"bingo;slot_machines",name:"Buzz Bingo"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/hospital/Select Specialty Hospital":{name:"Select Specialty Hospital",icon:"maki-hospital",imageURL:"https://graph.facebook.com/SelectMedical/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q66360902",amenity:"hospital"},addTags:{amenity:"hospital",brand:"Select Specialty Hospital","brand:wikidata":"Q66360902",healthcare:"hospital",name:"Select Specialty Hospital"},reference:{key:"amenity",value:"hospital"},countryCodes:["us"],terms:["select speciality"],matchScore:2,suggestion:true},"amenity/hospital/Shriners Hospital for Children":{name:"Shriners Hospital for Children",icon:"maki-hospital",imageURL:"https://graph.facebook.com/ShrinersHospitalsforChildren/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q7504109",amenity:"hospital"},addTags:{amenity:"hospital",brand:"Shriners Hospitals for Children","brand:wikidata":"Q7504109","brand:wikipedia":"en:Shriners Hospitals for Children",healthcare:"hospital","healthcare:speciality":"paediatrics",name:"Shriners Hospitals for Children"},reference:{key:"amenity",value:"hospital"},countryCodes:["us"],terms:["shriners burn hospital","shriners hospital","shriners hospitals for children"],matchScore:2,suggestion:true},"amenity/hospital/VA Medical Center":{name:"VA Medical Center",icon:"maki-hospital",imageURL:"https://graph.facebook.com/VeteransHealth/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q6580225",amenity:"hospital"},addTags:{amenity:"hospital",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"hospital","healthcare:for":"veterans",name:"VA Medical Center",short_name:"VA"},reference:{key:"amenity",value:"hospital"},countryCodes:["us"],terms:["department of veterans affairs medical center","veterans administration","veterans administration hospital","veterans administration medical center","veterans affairs","veterans affairs hospital","veterans affairs medical center"],matchScore:2,suggestion:true},"amenity/ice_cream/Abbott's Frozen Custard":{name:"Abbott's Frozen Custard",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/AbbottsFrozenCustard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4664334",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Abbott's Frozen Custard","brand:wikidata":"Q4664334","brand:wikipedia":"en:Abbott's Frozen Custard",name:"Abbott's Frozen Custard",short_name:"Abbott's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Amorino":{name:"Amorino",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/AmorinoGelato/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2843884",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Amorino","brand:wikidata":"Q2843884","brand:wikipedia":"fr:Amorino",name:"Amorino"},countryCodes:["ae","ch","cz","de","es","fr","gb","gr","ie","it","lu","ma","mt","mx","nc","pt","qa","re","us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Amy's Ice Creams":{name:"Amy's Ice Creams",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/amysicecreams/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4749045",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Amy's Ice Creams","brand:wikidata":"Q4749045","brand:wikipedia":"en:Amy's Ice Creams",name:"Amy's Ice Creams"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Andy's Frozen Custard":{name:"Andy's Frozen Custard",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/AndysFrozenCustard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4760327",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Andy's Frozen Custard","brand:wikidata":"Q4760327","brand:wikipedia":"en:Andy's Frozen Custard",name:"Andy's Frozen Custard",short_name:"Andy's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Baskin-Robbins":{name:"Baskin-Robbins",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/baskinrobbinsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584601",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Ben & Jerry's":{name:"Ben & Jerry's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BenandJerryAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q816412",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Bruster's Ice Cream":{name:"Bruster's Ice Cream",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BrustersRealIceCream/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4979810",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Bruster's Ice Cream","brand:wikidata":"Q4979810","brand:wikipedia":"en:Bruster's Ice Cream",cuisine:"ice_cream",name:"Bruster's Ice Cream"},countryCodes:["us"],terms:["brusters"],matchScore:2,suggestion:true},"amenity/ice_cream/Carvel":{name:"Carvel",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/CarvelIceCream/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5047520",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Carvel","brand:wikidata":"Q5047520","brand:wikipedia":"en:Carvel (franchise)",cuisine:"ice_cream",name:"Carvel",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Cold Rock Ice Creamery":{name:"Cold Rock Ice Creamery",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/ColdRockIceCreamery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2982390",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Cold Rock Ice Creamery","brand:wikidata":"Q2982390","brand:wikipedia":"en:Cold Rock Ice Creamery",cuisine:"ice_cream",name:"Cold Rock Ice Creamery",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Cold Stone Creamery":{name:"Cold Stone Creamery",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/coldstonecreamery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1094923",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"},countryCodes:["ng","us"],terms:["cold stone"],matchScore:2,suggestion:true},"amenity/ice_cream/D'Onofrio":{name:"D'Onofrio",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/DonofrioDOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5203166",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"D'Onofrio","brand:wikidata":"Q5203166","brand:wikipedia":"es:D'Onofrio",cuisine:"ice_cream",name:"D'Onofrio"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Freddo":{name:"Freddo",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/FreddoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28823999",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Graeter's":{name:"Graeter's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/Graeters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5592430",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Graeter's","brand:wikidata":"Q5592430","brand:wikipedia":"en:Graeter's",cuisine:"ice_cream",name:"Graeter's",takeaway:"yes"},countryCodes:["us"],terms:["greaters"],matchScore:2,suggestion:true},"amenity/ice_cream/Grido":{name:"Grido",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/GridoHelados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5885724",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"},countryCodes:["ar"],terms:["grido helado"],matchScore:2,suggestion:true},"amenity/ice_cream/Häagen-Dazs":{name:"Häagen-Dazs",icon:"fas-ice-cream",imageURL:"https://pbs.twimg.com/profile_images/827598241403371520/qHkQxKH3_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1143333",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Häagen-Dazs","brand:wikidata":"Q1143333","brand:wikipedia":"en:Häagen-Dazs",name:"Häagen-Dazs"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/La Michoacana":{name:"La Michoacana",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/LaMichoacana.sv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17118857",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"La Michoacana","brand:wikidata":"Q17118857","brand:wikipedia":"en:Paletería La Michoacana",name:"La Michoacana"},countryCodes:["mx"],terms:["paleteria la michoacana"],matchScore:2,suggestion:true},"amenity/ice_cream/Marble Slab Creamery":{name:"Marble Slab Creamery",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/marbleslabcreamery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17020087",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Marble Slab Creamery","brand:wikidata":"Q17020087","brand:wikipedia":"en:Marble Slab Creamery",cuisine:"ice_cream",name:"Marble Slab Creamery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Menchie's":{name:"Menchie's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/MyMenchies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6816528",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Menchie's","brand:wikidata":"Q6816528","brand:wikipedia":"en:Menchie's Frozen Yogurt",cuisine:"frozen_yogurt",name:"Menchie's"},countryCodes:["ae","bh","bs","ca","cn","gb","in","jp","kw","qa","sa","us"],terms:["menchie's frozen yoghurt","menchie's frozen yogurt"],matchScore:2,suggestion:true},"amenity/ice_cream/Pinkberry":{name:"Pinkberry",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/pinkberry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2904053",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Pinkberry","brand:wikidata":"Q2904053","brand:wikipedia":"en:Pinkberry",cuisine:"frozen_yogurt",name:"Pinkberry",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Ralph's Italian Ices":{name:"Ralph's Italian Ices",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/RalphsFamous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62576909",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Ralph's Italian Ices","brand:wikidata":"Q62576909",cuisine:"ice_cream",name:"Ralph's Italian Ices",official_name:"Ralph's Famous Italian Ices"},countryCodes:["us"],terms:["ralphs famous italian ices and ice cream","ralphs italian ice","ralphs italian ices and ice cream"],matchScore:2,suggestion:true},"amenity/ice_cream/Rita's Italian Ice":{name:"Rita's Italian Ice",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/RitasItalianIceCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7336456",amenity:"ice_cream"},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"},countryCodes:["us"],terms:["ritas","ritas water ice"],matchScore:2,suggestion:true},"amenity/ice_cream/Shake's":{name:"Shake's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/shakeswlr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17032842",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Shake's","brand:wikidata":"Q17032842","brand:wikipedia":"en:Shake's Frozen Custard",name:"Shake's",official_name:"Shake’s Frozen Custard"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/TCBY":{name:"TCBY",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/tcby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669631",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Yogen Früz":{name:"Yogen Früz",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/yogenfruz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8054358",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Yogen Früz","brand:wikidata":"Q8054358","brand:wikipedia":"en:Yogen Früz",cuisine:"frozen_yogurt",name:"Yogen Früz",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Yogurt Mountain":{name:"Yogurt Mountain",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/YogurtMountain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8054427",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Yogurt Mountain","brand:wikidata":"Q8054427","brand:wikipedia":"en:Yogurt Mountain",cuisine:"frozen_yogurt",name:"Yogurt Mountain",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Yogurtland":{name:"Yogurtland",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/yogurtland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8054428",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Yogurtland","brand:wikidata":"Q8054428","brand:wikipedia":"en:Yogurtland",cuisine:"frozen_yogurt",name:"Yogurtland",takeaway:"yes"},countryCodes:["ae","au","sg","th","us","ve"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/smöoy":{name:"smöoy",icon:"fas-ice-cream",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSm%C3%B6oy-logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q21573945",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"smöoy","brand:wikidata":"Q21573945","brand:wikipedia":"es:Smöoy",name:"smöoy",official_name:"Softy Cream"},countryCodes:["ao","ci","cn","dz","ec","es","fr","gb","gn","it","ma","pa","pe","pt","re","sa"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/sweetFrog":{name:"sweetFrog",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/sweetfrogfroyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16952110",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"},countryCodes:["us"],terms:["sweetfrog frozen yogurt","sweetfrog premium frozen yogurt"],matchScore:2,suggestion:true},"amenity/ice_cream/サーティワンアイスクリーム":{name:"サーティワンアイスクリーム",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/baskinrobbinsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584601",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"バスキン・ロビンス","brand:en":"Baskin-Robbins","brand:ja":"バスキン・ロビンス","brand:wikidata":"Q584601","brand:wikipedia":"ja:バスキン・ロビンス",cuisine:"ice_cream",name:"サーティワンアイスクリーム","name:en":"Baskin-Robbins","name:ja":"サーティワンアイスクリーム"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/Children's Learning Adventure":{name:"Children's Learning Adventure",icon:"temaki-school",imageURL:"https://graph.facebook.com/Childrenslearningadventure/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q64821213",amenity:"kindergarten"},addTags:{after_school:"yes",amenity:"kindergarten",brand:"Children's Learning Adventure","brand:wikidata":"Q64821213","brand:wikipedia":"en:Children's Learning Adventure",fee:"yes","isced:level":"0",name:"Children's Learning Adventure",nursery:"yes",preschool:"yes",short_name:"CLA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/Childtime":{name:"Childtime",icon:"temaki-school",imageURL:"https://graph.facebook.com/Childtime/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q64877793",amenity:"kindergarten"},addTags:{amenity:"kindergarten",brand:"Childtime","brand:wikidata":"Q64877793",fee:"yes","isced:level":"0",name:"Childtime",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["childtime learning center","childtime learning centers"],matchScore:2,suggestion:true},"amenity/kindergarten/KinderCare":{name:"KinderCare",icon:"temaki-school",imageURL:"https://graph.facebook.com/kindercare/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q6410551",amenity:"kindergarten"},addTags:{after_school:"yes",alt_name:"KinderCare Learning Center",amenity:"kindergarten",brand:"KinderCare","brand:wikidata":"Q6410551","brand:wikipedia":"en:KinderCare Learning Centers",fee:"yes","isced:level":"0",name:"KinderCare",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/La Petite Academy":{name:"La Petite Academy",icon:"temaki-school",imageURL:"https://graph.facebook.com/LaPetiteAcademy/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q64877784",amenity:"kindergarten"},addTags:{amenity:"kindergarten",brand:"La Petite Academy","brand:wikidata":"Q64877784",fee:"yes","isced:level":"0",name:"La Petite Academy",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["la petite"],matchScore:2,suggestion:true},"amenity/kindergarten/New Horizon Academy":{name:"New Horizon Academy",icon:"temaki-school",imageURL:"https://pbs.twimg.com/profile_images/778681004206592001/ZQF3Eurh_bigger.jpg",geometry:["area","point"],tags:{"brand:wikidata":"Q64821306",amenity:"kindergarten"},addTags:{after_school:"yes",amenity:"kindergarten",brand:"New Horizon Academy","brand:wikidata":"Q64821306",fee:"yes","isced:level":"0",name:"New Horizon Academy",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/Primrose School":{name:"Primrose School",icon:"temaki-school",imageURL:"https://graph.facebook.com/PrimroseSchools/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q7243677",amenity:"kindergarten"},addTags:{after_school:"yes",alt_name:"Primrose Schools",amenity:"kindergarten",brand:"Primrose School","brand:wikidata":"Q7243677","brand:wikipedia":"en:Primrose Schools",fee:"yes","isced:level":"0",max_age:"12",min_age:"6 weeks",name:"Primrose School",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["primrose"],matchScore:2,suggestion:true},"amenity/kindergarten/The Children's Courtyard":{name:"The Children's Courtyard",icon:"temaki-school",imageURL:"https://graph.facebook.com/ChildrensCourtyard/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q64877852",amenity:"kindergarten"},addTags:{amenity:"kindergarten",brand:"The Children's Courtyard","brand:wikidata":"Q64877852",fee:"yes","isced:level":"0",name:"The Children's Courtyard",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["children's courtyard"],matchScore:2,suggestion:true},"amenity/kindergarten/The Goddard School":{name:"The Goddard School",icon:"temaki-school",imageURL:"https://graph.facebook.com/goddardschool/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q5576260",amenity:"kindergarten"},addTags:{after_school:"yes",alt_name:"Goddard School",amenity:"kindergarten",brand:"The Goddard School","brand:wikidata":"Q5576260","brand:wikipedia":"en:Goddard School",fee:"yes","isced:level":"0",min_age:"6 weeks",name:"The Goddard School",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/Tutor Time":{name:"Tutor Time",icon:"temaki-school",imageURL:"https://graph.facebook.com/TutorTime/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q64877826",amenity:"kindergarten"},addTags:{amenity:"kindergarten",brand:"Tutor Time","brand:wikidata":"Q64877826",fee:"yes","isced:level":"0",name:"Tutor Time",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:["tutor time child care","tutor time child care learning center","tutor time learning center","tutor time learning centers"],matchScore:2,suggestion:true},"amenity/language_school/AEON":{name:"AEON",icon:"temaki-school",imageURL:"https://graph.facebook.com/AEONCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4687898",amenity:"language_school"},addTags:{amenity:"language_school",brand:"AEON","brand:en":"Aeon","brand:ja":"AEON","brand:ja-Hira":"イーオン","brand:ja-Latn":"AEON","brand:wikidata":"Q4687898","brand:wikipedia":"ja:イーオン","language:en":"main",name:"AEON","name:en":"Aeon","name:ja":"AEON","name:ja-Hira":"イーオン","name:ja-Latn":"AEON"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/Berlitz":{name:"Berlitz",icon:"temaki-school",imageURL:"https://graph.facebook.com/BerlitzUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q821960",amenity:"language_school"},addTags:{amenity:"language_school",brand:"Berlitz","brand:wikidata":"Q821960","brand:wikipedia":"en:Berlitz Corporation",name:"Berlitz"},terms:[],matchScore:2,suggestion:true},"amenity/language_school/ECC外語学院":{name:"ECC外語学院",icon:"temaki-school",imageURL:"https://graph.facebook.com/ecc.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5322655",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ECC外語学院","brand:en":"ECC Foreign Language Institute","brand:ja":"ECC外語学院","brand:ja-Hira":"イーシーシーがいごがくいん","brand:ja-Latn":"ECC Gaigo Gakuin","brand:wikidata":"Q5322655","brand:wikipedia":"ja:ECC総合教育機関","language:en":"main",name:"ECC外語学院","name:en":"ECC Foreign Language Institute","name:ja":"ECC外語学院","name:ja-Hira":"イーシーシーがいごがくいん","name:ja-Latn":"ECC Gaigo Gakuin",short_name:"ECC","short_name:en":"ECC","short_name:ja":"ECC","short_name:ja-Hira":"イーシーシー","short_name:ja-Latn":"ECC"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/ELS":{name:"ELS",icon:"temaki-school",imageURL:"https://graph.facebook.com/els/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5323325",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ELS","brand:en":"ELS","brand:wikidata":"Q5323325","brand:wikipedia":"en:ELS Language Centers","language:en":"main",name:"ELS","name:en":"ELS",official_name:"ELS Language Centers","official_name:en":"ELS Language Centers"},countryCodes:["ca","in","my","pa","sa","tr","us","vn"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/GABA":{name:"GABA",icon:"temaki-school",imageURL:"https://graph.facebook.com/gaba.corp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5515241",amenity:"language_school"},addTags:{amenity:"language_school",brand:"GABA","brand:en":"Gaba","brand:ja":"GABA","brand:ja-Kana":"ガバ","brand:ja-Latn":"GABA","brand:wikidata":"Q5515241","brand:wikipedia":"ja:GABA (企業)","language:en":"main",name:"GABA","name:en":"Gaba","name:ja":"GABA","name:ja-Kana":"ガバ","name:ja-Latn":"GABA"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/NOVA":{name:"NOVA",icon:"temaki-school",imageURL:"https://graph.facebook.com/nova.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7064000",amenity:"language_school"},addTags:{amenity:"language_school",brand:"NOVA","brand:en":"Nova","brand:ja":"NOVA","brand:ja-Hira":"ノヴァ","brand:ja-Latn":"NOVA","brand:wikidata":"Q7064000","brand:wikipedia":"ja:NOVA","language:en":"main",name:"NOVA","name:en":"Nova","name:ja":"NOVA","name:ja-Hira":"ノヴァ","name:ja-Latn":"NOVA"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/Shane English School":{name:"Shane English School",icon:"temaki-school",imageURL:"https://graph.facebook.com/ShaneEnglishSchool/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17054332",amenity:"language_school"},addTags:{amenity:"language_school",brand:"Shane English School","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"en:Shane English School","language:en":"main",name:"Shane English School","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"},countryCodes:["cn","dz","gb","hk","id","kr","pl","th","tw","vn"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/シェーン英会話":{name:"シェーン英会話",icon:"temaki-school",imageURL:"https://graph.facebook.com/ShaneEnglishSchool/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17054332",amenity:"language_school"},addTags:{amenity:"language_school",brand:"シェーン英会話","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"ja:シェーン英会話スクール","language:en":"main",name:"シェーン英会話","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/セイハ英語学院":{name:"セイハ英語学院",icon:"temaki-school",geometry:["point","area"],tags:{"brand:wikidata":"Q7446694",amenity:"language_school"},addTags:{amenity:"language_school",brand:"セイハ英語学院","brand:en":"Seiha English Academy","brand:ja":"セイハ英語学院","brand:ja-Hani":"セイハえいごがくいん","brand:ja-Latn":"Seiha Eigo Gakuin","brand:wikidata":"Q7446694","language:en":"main",name:"セイハ英語学院","name:en":"Seiha English Academy","name:ja":"セイハ英語学院","name:ja-Hani":"セイハえいごがくいん","name:ja-Latn":"Seiha Eigo Gakuin"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/ベルリッツ":{name:"ベルリッツ",icon:"temaki-school",imageURL:"https://graph.facebook.com/BerlitzJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4892545",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ベルリッツ","brand:en":"Berlitz","brand:ja":"ベルリッツ","brand:ja-Hira":"ベルリッツ","brand:wikidata":"Q4892545","brand:wikipedia":"ja:ベルリッツ・ジャパン",name:"ベルリッツ","name:en":"Berlitz","name:ja":"ベルリッツ","name:ja-Hira":"ベルリッツ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/ペッピーキッズクラブ":{name:"ペッピーキッズクラブ",icon:"temaki-school",imageURL:"https://graph.facebook.com/1431440567161295/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7166471",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ペッピーキッズクラブ","brand:en":"Peppy Kids Club","brand:ja":"ペッピーキッズクラブ","brand:ja-Latn":"Peppi Kizzu Kurabu","brand:wikidata":"Q7166471","brand:wikipedia":"ja:ペッピーキッズクラブ","language:en":"main",name:"ペッピーキッズクラブ","name:en":"Peppy Kids Club","name:ja":"ペッピーキッズクラブ","name:ja-Latn":"Peppi Kizzu Kurabu"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Express Union":{name:"Express Union",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/ExpressUnionFinance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3062276",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"},countryCodes:["td"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Hoa Phát":{name:"Hoa Phát",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/692515699349135364/P4MUVfcJ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q65116775",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Hoa Phát","brand:wikidata":"Q65116775",name:"Hoa Phát","name:vi":"Hoa Phát"},countryCodes:["us"],terms:["hoa phat goi tien","hoa phat gui tien"],matchScore:2,suggestion:true},"amenity/money_transfer/MoneyGram":{name:"MoneyGram",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/moneygram/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1944412",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"MoneyGram","brand:wikidata":"Q1944412","brand:wikipedia":"en:MoneyGram",name:"MoneyGram"},countryCodes:["de","fr","gr"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Orange Money":{name:"Orange Money",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/orange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16668220",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Orange Money","brand:wikidata":"Q16668220","brand:wikipedia":"en:Orange Money",name:"Orange Money"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Western Union":{name:"Western Union",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/WesternUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q861042",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},terms:[],matchScore:2,suggestion:true},"amenity/parking/Diamond Parking":{name:"Diamond Parking",icon:"temaki-car_parked",imageURL:"https://graph.facebook.com/DiamondParkingService/picture?type=large",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q5270887",amenity:"parking"},addTags:{amenity:"parking",brand:"Diamond Parking","brand:wikidata":"Q5270887","brand:wikipedia":"en:Diamond Parking",name:"Diamond Parking"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/parking/Parking Company of America":{name:"Parking Company of America",icon:"temaki-car_parked",imageURL:"https://graph.facebook.com/parkingcompanyofamerica/picture?type=large",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q65491376",amenity:"parking"},addTags:{amenity:"parking",brand:"Parking Company of America","brand:wikidata":"Q65491376",fee:"yes",name:"Parking Company of America",short_name:"PCA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/parking/SP+":{name:"SP+",icon:"temaki-car_parked",imageURL:"https://graph.facebook.com/sppluscorp/picture?type=large",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q7598289",amenity:"parking"},addTags:{alt_name:"SP Plus",amenity:"parking",brand:"SP+","brand:wikidata":"Q7598289","brand:wikipedia":"en:SP Plus Corporation",fee:"yes",name:"SP+"},countryCodes:["ca","us"],terms:["central parking","central parking system","standard parking"],matchScore:2,suggestion:true},"amenity/parking/Wilson Parking":{name:"Wilson Parking",icon:"temaki-car_parked",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q28448427",amenity:"parking"},addTags:{amenity:"parking",brand:"Wilson Parking","brand:wikidata":"Q28448427","brand:wikipedia":"en:Wilson Parking",fee:"yes",name:"Wilson Parking"},countryCodes:["au","cn","hk","ko","nz","sg"],terms:["wilson"],matchScore:2,suggestion:true},"amenity/parking/タイムズ":{name:"タイムズ",icon:"temaki-car_parked",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q11089693",amenity:"parking"},addTags:{amenity:"parking",brand:"タイムズ","brand:en":"Times","brand:ja":"タイムズ","brand:wikidata":"Q11089693","brand:wikipedia":"ja:パーク24",fee:"yes",name:"Times","name:en":"タイムズ","name:ja":"Times"},countryCodes:["jp"],terms:["times 24th","タイムズ24"],matchScore:2,suggestion:true},"amenity/payment_centre/Abitab":{name:"Abitab",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/Abitaboficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16488129",amenity:"payment_centre"},addTags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"amenity/payment_centre/Rapipago":{name:"Rapipago",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/Rapipago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6100413",amenity:"payment_centre"},addTags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/Qiwi":{name:"Qiwi",icon:"far-credit-card",imageURL:"https://graph.facebook.com/qiwirussia/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q4047736",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/ПриватБанк":{name:"ПриватБанк",icon:"far-credit-card",imageURL:"https://graph.facebook.com/privatbank/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q1515015",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/Элекснет":{name:"Элекснет",icon:"far-credit-card",imageURL:"https://graph.facebook.com/elecsnet/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q4530795",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/36,6":{name:"36,6",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/apteka366/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q226889",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:["аптека 36,6"],matchScore:2,suggestion:true},"amenity/pharmacy/Amcal":{name:"Amcal",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/AmcalAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367373",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Amcal","brand:wikidata":"Q63367373",healthcare:"pharmacy",name:"Amcal"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["amcal pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Apollo Pharmacy":{name:"Apollo Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ApolloPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62562612",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Apollo Pharmacy","brand:wikidata":"Q62562612",healthcare:"pharmacy",name:"Apollo Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Apotek Hjärtat":{name:"Apotek Hjärtat",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/apotekhjartat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10416114",amenity:"pharmacy"},addTags:{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"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Bartell Drugs":{name:"Bartell Drugs",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BartellDrugs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4865152",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Benavides":{name:"Benavides",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasBenavides/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435613",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Benu":{name:"Benu",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmaciesBENUSwitzerland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62562792",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Benu","brand:wikidata":"Q62562792",healthcare:"pharmacy",name:"Benu"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Blooms The Chemist":{name:"Blooms The Chemist",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BloomsTheChemistPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367543",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Blooms The Chemist","brand:wikidata":"Q63367543",healthcare:"pharmacy",name:"Blooms The Chemist",shop:"chemist"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Boots":{name:"Boots",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/bootsuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6123139",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:["boots pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Boticas y Salud":{name:"Boticas y Salud",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/844038768993601/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563126",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Boticas y Salud","brand:wikidata":"Q62563126",healthcare:"pharmacy",name:"Boticas y Salud"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Brookshire Brothers Pharmacy":{name:"Brookshire Brothers Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BrookshireBros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4975084",amenity:"pharmacy"},addTags:{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"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/CVS Pharmacy":{name:"CVS Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/CVS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2078880",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS Pharmacy",short_name:"CVS"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Camelia":{name:"Camelia",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/camelia.vaistine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15867413",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Camelia","brand:wikidata":"Q15867413","brand:wikipedia":"lt:Nemuno vaistinė",healthcare:"pharmacy",name:"Camelia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Catena":{name:"Catena",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciaCatena/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24035728",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Chemist King Discount Pharmacy":{name:"Chemist King Discount Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ChemistKingDiscountPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367667",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Chemist King Discount Pharmacy","brand:wikidata":"Q63367667",healthcare:"pharmacy",name:"Chemist King Discount Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["chemist king","chemist king discount pharmacies"],matchScore:2,suggestion:true},"amenity/pharmacy/Chemist Warehouse":{name:"Chemist Warehouse",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ChemistWarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48782120",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Clicks":{name:"Clicks",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ClicksSouthAfrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563622",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Clicks","brand:wikidata":"Q62563622",healthcare:"pharmacy",name:"Clicks"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Costco Pharmacy":{name:"Costco Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",healthcare:"pharmacy",name:"Costco Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Cruz Azul":{name:"Cruz Azul",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/CruzAzul.Farmacias/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62108219",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Cruz Azul","brand:wikidata":"Q62108219",healthcare:"pharmacy",name:"Cruz Azul"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:["farmacias cruz azul"],matchScore:2,suggestion:true},"amenity/pharmacy/Cruz Verde":{name:"Cruz Verde",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasCruzVerde1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5856071",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl"],terms:["farmacias cruz verde"],matchScore:2,suggestion:true},"amenity/pharmacy/Day Lewis Pharmacy":{name:"Day Lewis Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DayLewisPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563772",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Day Lewis Pharmacy","brand:wikidata":"Q62563772",healthcare:"pharmacy",name:"Day Lewis Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Dbam o Zdrowie":{name:"Dbam o Zdrowie",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/dbamozdrowie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563833",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Dbam o Zdrowie","brand:wikidata":"Q62563833",healthcare:"pharmacy",name:"Dbam o Zdrowie"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Dr. Max":{name:"Dr. Max",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/lekarnadrmax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56317371",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Dr. Max","brand:wikidata":"Q56317371","brand:wikipedia":"fr:Dr.Max",healthcare:"pharmacy",name:"Dr. Max"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cz","pl","sk"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Droga Raia":{name:"Droga Raia",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DrogaRaia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10357101",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Droga Raia","brand:wikidata":"Q10357101","brand:wikipedia":"pt:RaiaDrogasil",healthcare:"pharmacy",name:"Droga Raia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Drogaria São Paulo":{name:"Drogaria São Paulo",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DrogariaSaoPaulo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5308184",amenity:"pharmacy"},addTags:{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"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Drogasil":{name:"Drogasil",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDrogazil.logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5308185",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Drogasil","brand:wikidata":"Q5308185","brand:wikipedia":"pt:Drogasil",healthcare:"pharmacy",name:"Drogasil",wheelchair:"yes"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Duane Reade":{name:"Duane Reade",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/duanereade/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5310380",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Duane Reade","brand:wikidata":"Q5310380","brand:wikipedia":"en:Duane Reade",healthcare:"pharmacy",name:"Duane Reade"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Eurovaistinė":{name:"Eurovaistinė",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q267205",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Eurovaistinė","brand:wikidata":"Q267205","brand:wikipedia":"en:Euroapotheca",healthcare:"pharmacy",name:"Eurovaistinė"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Extrafarma":{name:"Extrafarma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Extrafarma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20055480",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Extrafarma","brand:wikidata":"Q20055480","brand:wikipedia":"pt:Extrafarma",healthcare:"pharmacy",name:"Extrafarma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Familiprix":{name:"Familiprix",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Familiprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3064881",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Familiprix","brand:wikidata":"Q3064881","brand:wikipedia":"fr:Familiprix",healthcare:"pharmacy",name:"Familiprix"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacenter (Colombia)":{name:"Farmacenter (Colombia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmacenterCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563928",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacenter","brand:wikidata":"Q62563928",healthcare:"pharmacy",name:"Farmacenter"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacia Benavides":{name:"Farmacia Benavides",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasBenavides/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435613",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacia Guadalajara":{name:"Farmacia Guadalajara",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1204192654420000769/YTWjQ-IM_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5435609",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:["farmacias guadalajara"],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Ahumada":{name:"Farmacias Ahumada",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFarmacias%20ahumada.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5856069",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Económicas (Ecuador)":{name:"Farmacias Económicas (Ecuador)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasEconomicasEc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62108380",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108380",healthcare:"pharmacy",name:"Farmacias Económicas"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Económicas (El Salvador)":{name:"Farmacias Económicas (El Salvador)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasEconomicas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62108397",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108397",healthcare:"pharmacy",name:"Farmacias Económicas"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["sv"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Similares":{name:"Farmacias Similares",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DrSimiChile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Similares","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias Similares"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl","gt","mx"],terms:["similares"],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias del Ahorro":{name:"Farmacias del Ahorro",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FAhorro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086647",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias del Ahorro","brand:wikidata":"Q62086647",healthcare:"pharmacy",name:"Farmacias del Ahorro"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:["farmacia del ahorro"],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias del Dr. Simi":{name:"Farmacias del Dr. Simi",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DrSimiChile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias del Dr. Simi","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias del Dr. Simi"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl","gt","mx"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmacity":{name:"Farmacity",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Farmacity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5856076",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ra"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmahorro":{name:"Farmahorro",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmahorroVe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20015002",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Farmatodo":{name:"Farmatodo",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/farmatodovenezuela/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5856092",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Felicia":{name:"Felicia",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/farmaciafelicia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564805",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Felicia","brand:wikidata":"Q62564805",healthcare:"pharmacy",name:"Felicia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["md"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Fred Meyer Pharmacy":{name:"Fred Meyer Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/fredmeyer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5495932",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",healthcare:"pharmacy",name:"Fred Meyer Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:["fred meyer"],matchScore:2,suggestion:true},"amenity/pharmacy/Fybeca":{name:"Fybeca",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/fybeca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564822",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Fybeca","brand:wikidata":"Q62564822",healthcare:"pharmacy",name:"Fybeca"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Generika":{name:"Generika",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/GenerikaDrugstorePH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564876",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Generika","brand:wikidata":"Q62564876",healthcare:"pharmacy",name:"Generika"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:["generika drugstore"],matchScore:2,suggestion:true},"amenity/pharmacy/Gintarinė vaistinė":{name:"Gintarinė vaistinė",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Gintarine.Vaistine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15857801",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Guardian (Asia)":{name:"Guardian (Asia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Guardianmy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63371124",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63371124","brand:wikipedia":"ms:Guardian Malaysia",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["bn","id","kh","my","sg","vn"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Guardian (Australia)":{name:"Guardian (Australia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/GuardianAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367814",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63367814",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["guardian pharmacies","guardian pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Guardian (Canada)":{name:"Guardian (Canada)",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q65553864",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q65553864",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/H-E-B Pharmacy":{name:"H-E-B Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/HEB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830621",amenity:"pharmacy"},addTags:{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"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Health Mart":{name:"Health Mart",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/HealthMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5690597",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Health Mart","brand:wikidata":"Q5690597","brand:wikipedia":"en:Health Mart",healthcare:"pharmacy",name:"Health Mart"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:["health mart pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Hy-Vee Pharmacy":{name:"Hy-Vee Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/HyVee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639719",amenity:"pharmacy"},addTags:{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"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/I.D.A.":{name:"I.D.A.",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q65553883",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"I.D.A.","brand:wikidata":"Q65553883",healthcare:"pharmacy",name:"I.D.A."},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Inkafarma":{name:"Inkafarma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/inkafarmaperu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10997748",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Inkafarma","brand:wikidata":"Q10997748","brand:wikipedia":"es:Inkafarma",healthcare:"pharmacy",name:"Inkafarma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Jean Coutu":{name:"Jean Coutu",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/JeanCoutu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3117457",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Jean Coutu","brand:wikidata":"Q3117457","brand:wikipedia":"fr:Groupe Jean Coutu",healthcare:"pharmacy",name:"Jean Coutu"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Kimia Farma":{name:"Kimia Farma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/KimiaFarmaCare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11264892",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Kimia Farma","brand:wikidata":"Q11264892","brand:wikipedia":"en:Kimia Farma",healthcare:"pharmacy",name:"Kimia Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Kinney Drugs":{name:"Kinney Drugs",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/kinneydrugs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6414090",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Kinney Drugs","brand:wikidata":"Q6414090","brand:wikipedia":"en:Kinney Drugs",healthcare:"pharmacy",name:"Kinney Drugs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Lloyds Pharmacy":{name:"Lloyds Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/lloydspharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6662870",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["be","gb","ie","im"],terms:["lloyds"],matchScore:2,suggestion:true},"amenity/pharmacy/London Drugs":{name:"London Drugs",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/LondonDrugs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3258955",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Longs Drugs (Hawaii)":{name:"Longs Drugs (Hawaii)",icon:"maki-pharmacy",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLongs%20Drugs%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16931196",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",healthcare:"pharmacy",name:"Longs Drugs",short_name:"Longs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mannings":{name:"Mannings",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/manningshongkong/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13646560",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mannings","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Mannings"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cn","hk","mo"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Marc's Pharmacy":{name:"Marc's Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/MarcsStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17080259",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",healthcare:"pharmacy",name:"Marc's Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/MedPlus":{name:"MedPlus",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/842606018131443712/P1glGiqa_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q65684234",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"MedPlus","brand:wikidata":"Q65684234","brand:wikipedia":"en:MedPlus",healthcare:"pharmacy",name:"MedPlus"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mercury Drug":{name:"Mercury Drug",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/mercurydrugph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6818610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mifarma":{name:"Mifarma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/MifarmaPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564998",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mifarma","brand:wikidata":"Q62564998",healthcare:"pharmacy",name:"Mifarma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Multipharma":{name:"Multipharma",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Multipharma.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62565018",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Multipharma","brand:wikidata":"Q62565018",healthcare:"pharmacy",name:"Multipharma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Mēness aptieka":{name:"Mēness aptieka",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/MenessAptieka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57583051",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lv"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pague Menos":{name:"Pague Menos",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/farmaciaspaguemenos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7124466",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:["farmácia pague menos"],matchScore:2,suggestion:true},"amenity/pharmacy/Panvel":{name:"Panvel",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/panvelfarmacias/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10344254",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Panvel","brand:wikidata":"Q10344254","brand:wikipedia":"pt:Panvel",healthcare:"pharmacy",name:"Panvel"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/PharmaChoice":{name:"PharmaChoice",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/875423108513091584/kcsmBdjL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7180716",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"PharmaChoice","brand:wikidata":"Q7180716","brand:wikipedia":"en:PharmaChoice",healthcare:"pharmacy",name:"PharmaChoice"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/PharmaSave (Australia)":{name:"PharmaSave (Australia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmasaveBrentfordSquare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367906",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"PharmaSave","brand:wikidata":"Q63367906",healthcare:"pharmacy",name:"PharmaSave"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmacie Principale":{name:"Pharmacie Principale",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmaciePrincipale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1547749",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:Groupe PP Holding",healthcare:"pharmacy",name:"Pharmacie Principale"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmacy 4 Less":{name:"Pharmacy 4 Less",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/pharmacy4less/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367608",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmacy 4 Less","brand:wikidata":"Q63367608",healthcare:"pharmacy",name:"Pharmacy 4 Less"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmaprix":{name:"Pharmaprix",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/shoppersdrugmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1820137",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"fr:Pharmaprix",healthcare:"pharmacy",name:"Pharmaprix"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Pharmasave (Canada)":{name:"Pharmasave (Canada)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmasaveAtlantic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17093822",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Pharmasave","brand:wikidata":"Q17093822","brand:wikipedia":"en:Pharmasave",healthcare:"pharmacy",name:"Pharmasave"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Priceline Pharmacy":{name:"Priceline Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PricelineAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242652",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Priceline Pharmacy","brand:wikidata":"Q7242652","brand:wikipedia":"en:Priceline (Australia)",healthcare:"pharmacy",name:"Priceline Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["priceline"],matchScore:2,suggestion:true},"amenity/pharmacy/Punto Farma (Colombia)":{name:"Punto Farma (Colombia)",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q62595271",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595271",healthcare:"pharmacy",name:"Punto Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Punto Farma (Honduras)":{name:"Punto Farma (Honduras)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasPuntoFarma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62595229",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595229",healthcare:"pharmacy",name:"Punto Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["hn"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Punto Farma (Paraguay)":{name:"Punto Farma (Paraguay)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Puntofarmapy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62595220",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595220",healthcare:"pharmacy",name:"Punto Farma"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Remedy'sRx":{name:"Remedy'sRx",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q65553833",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Remedy'sRx","brand:wikidata":"Q65553833",healthcare:"pharmacy",name:"Remedy'sRx"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Rexall":{name:"Rexall",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Rexall/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7319360",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rexall","brand:wikidata":"Q7319360","brand:wikipedia":"en:Rexall",healthcare:"pharmacy",name:"Rexall"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Rite Aid":{name:"Rite Aid",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/riteaid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3433273",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",healthcare:"pharmacy",name:"Rite Aid"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:["rite aid pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Rose Pharmacy":{name:"Rose Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/RosePharmacyInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663208",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rose Pharmacy","brand:wikidata":"Q62663208",healthcare:"pharmacy",name:"Rose Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Rowlands Pharmacy":{name:"Rowlands Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/RowlandsPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663235",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Rowlands Pharmacy","brand:wikidata":"Q62663235",healthcare:"pharmacy",name:"Rowlands Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Safeway":{name:"Safeway",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Safeway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1508234",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",healthcare:"pharmacy",name:"Safeway"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/SalcoBrand":{name:"SalcoBrand",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Salcobrand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2877054",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"SalcoBrand"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl"],terms:["farmacias salcobrand"],matchScore:2,suggestion:true},"amenity/pharmacy/Sana Sana":{name:"Sana Sana",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasSanaSanaEc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564499",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Sana Sana","brand:wikidata":"Q62564499",healthcare:"pharmacy",name:"Sana Sana"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:["farmacias sana sana"],matchScore:2,suggestion:true},"amenity/pharmacy/Sensiblu":{name:"Sensiblu",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Sensiblu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12740640",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Sensiblu","brand:wikidata":"Q12740640","brand:wikipedia":"ro:Sensiblu",healthcare:"pharmacy",name:"Sensiblu"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Shoppers Drug Mart":{name:"Shoppers Drug Mart",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/shoppersdrugmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1820137",amenity:"pharmacy"},addTags:{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"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/South Star Drug":{name:"South Star Drug",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/southstardrugph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7568544",amenity:"pharmacy"},addTags:{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"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Superdrug":{name:"Superdrug",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Superdrug/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643261",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",healthcare:"pharmacy",name:"Superdrug"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/São João":{name:"São João",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/farmaciassaojoao/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663306",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"São João","brand:wikidata":"Q62663306",healthcare:"pharmacy",name:"São João"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/TGP":{name:"TGP",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/tgpthegenericspharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61948677",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"The Generics Pharmacy","brand:wikidata":"Q61948677",healthcare:"pharmacy",name:"TGP",official_name:"The Generics Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/TerryWhite Chemmart":{name:"TerryWhite Chemmart",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/terrywhitechemmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24089773",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"TerryWhite Chemmart","brand:wikidata":"Q24089773","brand:wikipedia":"en:Terry White Chemmart",healthcare:"pharmacy",name:"TerryWhite Chemmart"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["terrywhite","terrywhite chemist","terrywhite chemists"],matchScore:2,suggestion:true},"amenity/pharmacy/UFS":{name:"UFS",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ufsdispensaries/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367573",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"UFS","brand:wikidata":"Q63367573",healthcare:"pharmacy",name:"UFS"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["ufs dispensaries"],matchScore:2,suggestion:true},"amenity/pharmacy/Unichem Pharmacy":{name:"Unichem Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/UnichemNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663379",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Unichem Pharmacy","brand:wikidata":"Q62663379",healthcare:"pharmacy",name:"Unichem Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Uniprix":{name:"Uniprix",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/uniprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q683265",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Uniprix","brand:wikidata":"Q683265","brand:wikipedia":"fr:Uniprix (pharmacies)",healthcare:"pharmacy",name:"Uniprix"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Walgreens":{name:"Walgreens",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/walgreens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1591889",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",healthcare:"pharmacy",name:"Walgreens"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:["walgreens pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Walmart Pharmacy":{name:"Walmart Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",healthcare:"pharmacy",name:"Walmart Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ca","us"],terms:["walmart"],matchScore:2,suggestion:true},"amenity/pharmacy/Watsons":{name:"Watsons",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/WatsonsPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7974785",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",healthcare:"pharmacy",name:"Watsons"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Well Pharmacy":{name:"Well Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmacyWell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7726524",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Well Pharmacy","brand:wikidata":"Q7726524","brand:wikipedia":"en:Well Pharmacy",healthcare:"pharmacy",name:"Well Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:["well"],matchScore:2,suggestion:true},"amenity/pharmacy/Ziko Apteka":{name:"Ziko Apteka",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ZikoUrodaiZdrowie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63432892",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Ziko Apteka","brand:wikidata":"Q63432892",healthcare:"pharmacy",name:"Ziko Apteka",short_name:"Ziko"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/А5":{name:"А5",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/apteka5/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62663476",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"А5","brand:wikidata":"Q62663476",healthcare:"pharmacy",name:"А5"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Бережная аптека":{name:"Бережная аптека",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BereznayaApteka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62664194",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Бережная аптека","brand:wikidata":"Q62664194",healthcare:"pharmacy",name:"Бережная аптека"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Ригла":{name:"Ригла",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/rigla.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4394431",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Ригла","brand:wikidata":"Q4394431","brand:wikipedia":"ru:Ригла",healthcare:"pharmacy",name:"Ригла"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/סופר-פארם":{name:"סופר-פארם",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/super.pharm.co.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13220217",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"סופר-פארם","brand:he":"סופר-פארם","brand:wikidata":"Q13220217","brand:wikipedia":"en:Super-Pharm",healthcare:"pharmacy",name:"סופר-פארם","name:he":"סופר-פארם"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/くすりの福太郎":{name:"くすりの福太郎",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/kusurinofukutaro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17214460",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"くすりの福太郎","brand:en":"Kusurino FUKUTARO","brand:ja":"くすりの福太郎","brand:wikidata":"Q17214460","brand:wikipedia":"ja:くすりの福太郎",healthcare:"pharmacy",name:"くすりの福太郎","name:en":"Kusurino Fukutaro","name:ja":"くすりの福太郎"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ウェルパーク":{name:"ウェルパーク",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11288610",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ウェルパーク","brand:ja":"ウェルパーク","brand:wikidata":"Q11288610","brand:wikipedia":"ja:ウェルパーク",healthcare:"pharmacy",name:"ウェルパーク","name:en":"Welpark","name:ja":"ウェルパーク"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ウエルシア":{name:"ウエルシア",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/WelciaBHG.SG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11288684",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ウエルシア","brand:en":"Welcia","brand:ja":"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア","name:en":"Welcia","name:ja":"ウエルシア"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ウエルシア薬局":{name:"ウエルシア薬局",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11288687",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:en":"Welcia Yakkyoku","brand:ja":"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局","name:en":"Welcia Yakkyoku","name:ja":"ウエルシア薬局"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/カワチ薬品":{name:"カワチ薬品",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11295397",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"カワチ薬品","brand:en":"Cawachi","brand:ja":"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品","name:en":"Cawachi","name:ja":"カワチ薬品"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/キリン堂":{name:"キリン堂",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11297751",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"キリン堂","brand:en":"Kirindo","brand:ja":"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂","name:en":"Kirindo","name:ja":"キリン堂"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/クスリのアオキ":{name:"クスリのアオキ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11298661",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クスリのアオキ","brand:en":"Kusuri no Aoki","brand:ja":"クスリのアオキ","brand:wikidata":"Q11298661","brand:wikipedia":"ja:クスリのアオキ",healthcare:"pharmacy",name:"クスリのアオキ","name:en":"Kusuri no Aoki","name:ja":"クスリのアオキ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/クリエイト":{name:"クリエイト",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q17215731",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クリエイト","brand:en":"Create","brand:ja":"クリエイト","brand:wikidata":"Q17215731","brand:wikipedia":"ja:クリエイト",healthcare:"pharmacy",name:"クリエイト","name:en":"Create","name:ja":"クリエイト"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/クリエイトSD":{name:"クリエイトSD",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11299163",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クリエイトSD","brand:en":"CreateSD","brand:ja":"クリエイトSD","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイトSD","name:en":"CreateSD","name:ja":"クリエイトSD"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/コクミン":{name:"コクミン",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/803158983611559936/LnjULpI0_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11301923",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"コクミン","brand:en":"Kokumin","brand:ja":"コクミン","brand:wikidata":"Q11301923","brand:wikipedia":"ja:コクミン",healthcare:"pharmacy",name:"コクミン","name:en":"Kokumin","name:ja":"コクミン",official_name:"コクミンドラッグ","official_name:en":"Kokumin Drug","official_name:ja":"コクミンドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ココカラファイン":{name:"ココカラファイン",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1211925973156786176/HbdgyoLj_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11301948",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ココカラファイン","brand:en":"Cocokara Fine","brand:ja":"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン","name:en":"Cocokara Fine","name:ja":"ココカラファイン"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/サツドラ":{name:"サツドラ",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/780691690440962048/RYUgJsKP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11304804",amenity:"pharmacy"},addTags:{"alt_name:en":"Satsudora",amenity:"pharmacy",brand:"サツドラ","brand:en":"Sapporo Drug Store","brand:ja":"サツドラ","brand:wikidata":"Q11304804",healthcare:"pharmacy",name:"サツドラ","name:en":"Sapporo Drug Store","name:ja":"サツドラ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:["サッポロドラッグストアー"],matchScore:2,suggestion:true},"amenity/pharmacy/サンドラッグ":{name:"サンドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11305867",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"サンドラッグ","brand:en":"Sundrug","brand:ja":"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ","name:en":"Sundrug","name:ja":"サンドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/スギ薬局":{name:"スギ薬局",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11311460",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"スギ薬局","brand:en":"Sugi Pharmacy","brand:ja":"スギ薬局","brand:wikidata":"Q11311460","brand:wikipedia":"ja:スギ薬局",healthcare:"pharmacy",name:"スギ薬局","name:en":"Sugi Pharmacy","name:ja":"スギ薬局"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/セイジョー":{name:"セイジョー",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11314133",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"セイジョー","brand:en":"Seijo","brand:ja":"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー","name:en":"Seijo","name:ja":"セイジョー"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ダイコクドラッグ":{name:"ダイコクドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11316754",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ダイコクドラッグ","brand:en":"Daikoku Drug","brand:ja":"ダイコクドラッグ","brand:wikidata":"Q11316754","brand:wikipedia":"ja:ダイコク",healthcare:"pharmacy",name:"ダイコクドラッグ","name:en":"Daikoku Drug","name:ja":"ダイコクドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ツルハドラッグ":{name:"ツルハドラッグ",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1061863510546640898/j9crJ6gs_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11318826",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ツルハドラッグ","brand:en":"Tsuruha","brand:ja":"ツルハドラッグ","brand:wikidata":"Q11318826","brand:wikipedia":"ja:ツルハ",healthcare:"pharmacy",name:"ツルハドラッグ","name:en":"Tsuruha","name:ja":"ツルハドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/トモズ":{name:"トモズ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q7820097",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"トモズ","brand:en":"Tomod's","brand:ja":"トモズ","brand:wikidata":"Q7820097","brand:wikipedia":"ja:トモズ",healthcare:"pharmacy",name:"トモズ","name:en":"Tomod's","name:ja":"トモズ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:["トモズエキスプレス"],matchScore:2,suggestion:true},"amenity/pharmacy/ドラッグイレブン":{name:"ドラッグイレブン",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11323075",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ドラッグイレブン","brand:en":"Drug Eleven","brand:ja":"ドラッグイレブン","brand:wikidata":"Q11323075","brand:wikipedia":"ja:ドラッグイレブン",healthcare:"pharmacy",name:"ドラッグイレブン","name:en":"Drug Eleven","name:ja":"ドラッグイレブン"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ドラッグセイムス":{name:"ドラッグセイムス",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11456137",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ドラッグセイムス","brand:en":"Seims","brand:ja":"ドラッグセイムス","brand:wikidata":"Q11456137","brand:wikipedia":"ja:富士薬品",healthcare:"pharmacy",name:"ドラッグセイムス","name:en":"Drug Seims","name:ja":"ドラッグセイムス"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/マツモトキヨシ":{name:"マツモトキヨシ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q8014776",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:en":"Matsukiyo","brand:ja":"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ","name:en":"Matsukiyo","name:ja":"マツモトキヨシ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Australia Post":{name:"Australia Post",icon:"maki-post",imageURL:"https://graph.facebook.com/australiapost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1142936",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Australia Post","brand:wikidata":"Q1142936","brand:wikipedia":"en:Australia Post",name:"Australia Post"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/CTT (Macau)":{name:"CTT (Macau)",icon:"maki-post",imageURL:"https://graph.facebook.com/109452512407680/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q909429",amenity:"post_office"},addTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"},countryCodes:["mo"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/CTT (Portugal)":{name:"CTT (Portugal)",icon:"maki-post",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F2017-12-04%20Post%20office%20sign%2C%20Avenida%20Dr.%20Francisco%20S%C3%A1%20Carneiro%2C%20Albufeira.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1024518",amenity:"post_office"},addTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q1024518","brand:wikipedia":"en:CTT Correios de Portugal, S.A.",name:"CTT"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Canada Post":{name:"Canada Post",icon:"maki-post",imageURL:"https://graph.facebook.com/canadapost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032001",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correios":{name:"Correios",icon:"maki-post",imageURL:"https://graph.facebook.com/correios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3375004",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correo Argentino":{name:"Correo Argentino",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreoOficialSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4036566",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de Chile":{name:"Correos de Chile",icon:"maki-post",imageURL:"https://graph.facebook.com/correoschile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172893",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de Costa Rica":{name:"Correos de Costa Rica",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreosdeCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172894",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de México":{name:"Correos de México",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreosdeMexico.Mexpost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172898",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de México","brand:wikidata":"Q5172898","brand:wikipedia":"en:Correos de México",name:"Correos de México"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/DHL":{name:"DHL",icon:"maki-post",imageURL:"https://graph.facebook.com/dhl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489815",amenity:"post_office"},addTags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL",name:"DHL"},terms:["dhl paketshop"],matchScore:2,suggestion:true},"amenity/post_office/DPD Paketshop":{name:"DPD Paketshop",icon:"maki-post",imageURL:"https://graph.facebook.com/350375105088695/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q541030",amenity:"post_office"},addTags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"},countryCodes:["at","de","pl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Deutsche Post":{name:"Deutsche Post",icon:"maki-post",imageURL:"https://graph.facebook.com/deutschepost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157645",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},countryCodes:["de"],terms:["deutsche post ag","deutsche post filiale"],matchScore:2,suggestion:true},"amenity/post_office/Fancourier":{name:"Fancourier",icon:"maki-post",imageURL:"https://graph.facebook.com/FANCourier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12727984",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/FedEx":{name:"FedEx",icon:"maki-post",imageURL:"https://graph.facebook.com/FedEx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q459477",amenity:"post_office"},addTags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/Hermes Paketshop":{name:"Hermes Paketshop",icon:"maki-post",imageURL:"https://graph.facebook.com/Hermesparcels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1613532",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"},countryCodes:["de"],terms:["hermes"],matchScore:2,suggestion:true},"amenity/post_office/LBC":{name:"LBC",icon:"maki-post",imageURL:"https://graph.facebook.com/LBCexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17075584",amenity:"post_office"},addTags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"},countryCodes:["ph"],terms:["lbc express"],matchScore:2,suggestion:true},"amenity/post_office/La Poste":{name:"La Poste",icon:"maki-post",imageURL:"https://graph.facebook.com/laposte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q373724",amenity:"post_office"},addTags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/MRW":{name:"MRW",icon:"maki-post",imageURL:"https://graph.facebook.com/mrwespana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23767821",amenity:"post_office"},addTags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"},countryCodes:["ad","es","gi","pt","ve"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Mail Boxes Etc.":{name:"Mail Boxes Etc.",icon:"maki-post",imageURL:"https://graph.facebook.com/mbeitalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1139182",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Mail Boxes Etc.","brand:wikidata":"Q1139182","brand:wikipedia":"en:Mail Boxes Etc.",name:"Mail Boxes Etc."},terms:[],matchScore:2,suggestion:true},"amenity/post_office/OCA":{name:"OCA",icon:"maki-post",imageURL:"https://graph.facebook.com/OCACorreoOK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172887",amenity:"post_office"},addTags:{amenity:"post_office",brand:"OCA","brand:wikidata":"Q5172887","brand:wikipedia":"es:Correo OCA",name:"OCA"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Oficina de Correos":{name:"Oficina de Correos",icon:"maki-post",imageURL:"https://graph.facebook.com/correos.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q776605",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"},countryCodes:["es"],terms:["correos"],matchScore:2,suggestion:true},"amenity/post_office/PHLPost":{name:"PHLPost",icon:"maki-post",imageURL:"https://graph.facebook.com/PHLPost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1406037",amenity:"post_office"},addTags:{amenity:"post_office",brand:"PHLPost","brand:wikidata":"Q1406037","brand:wikipedia":"en:Philippine Postal Corporation",name:"PHLPost",official_name:"Philippine Postal Corporation"},countryCodes:["ph"],terms:["phl"],matchScore:2,suggestion:true},"amenity/post_office/Poczta Polska":{name:"Poczta Polska",icon:"maki-post",imageURL:"https://graph.facebook.com/pocztapolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168833",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"pl:Poczta Polska",name:"Poczta Polska"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Post Office (UK)":{name:"Post Office (UK)",icon:"maki-post",imageURL:"https://pbs.twimg.com/profile_images/1211657020283207685/knzWvwPK_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1783168",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Post Office","brand:wikidata":"Q1783168","brand:wikipedia":"en:Post Office Ltd",name:"Post Office"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/PostalAnnex":{name:"PostalAnnex",icon:"maki-post",imageURL:"https://graph.facebook.com/PostalAnnex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61960357",amenity:"post_office"},addTags:{amenity:"post_office",brand:"PostalAnnex","brand:wikidata":"Q61960357",name:"PostalAnnex"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Poste Italiane":{name:"Poste Italiane",icon:"maki-post",imageURL:"https://graph.facebook.com/PosteItaliane/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q495026",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Serpost":{name:"Serpost",icon:"maki-post",imageURL:"https://graph.facebook.com/428188863953059/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19521863",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Serpost","brand:wikidata":"Q19521863","brand:wikipedia":"es:Servicios Postales del Perú",name:"Serpost"},countryCodes:["pe"],terms:["servicios postales del perú"],matchScore:2,suggestion:true},"amenity/post_office/Slovenská pošta":{name:"Slovenská pošta",icon:"maki-post",imageURL:"https://graph.facebook.com/slovenskaposta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191849",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/The UPS Store":{name:"The UPS Store",icon:"maki-post",imageURL:"https://graph.facebook.com/theupsstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7771029",amenity:"post_office"},addTags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store",short_name:"UPS"},countryCodes:["ca","us"],terms:["ups store"],matchScore:2,suggestion:true},"amenity/post_office/United States Post Office":{name:"United States Post Office",icon:"maki-post",imageURL:"https://graph.facebook.com/USPS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q668687",amenity:"post_office"},addTags:{amenity:"post_office",brand:"United States Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"United States Post Office"},countryCodes:["us"],terms:["united states postal service","us post office","us postal service","usps","usps post office"],matchScore:2,suggestion:true},"amenity/post_office/ΕΛΤΑ":{name:"ΕΛΤΑ",icon:"maki-post",imageURL:"https://graph.facebook.com/HellenicPostELTA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1275135",amenity:"post_office"},addTags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Белпошта":{name:"Белпошта",icon:"maki-post",imageURL:"https://graph.facebook.com/belpost.by/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2662336",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Белпошта","brand:be":"Белпошта","brand:en":"Belposhta","brand:ru":"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"be:Белпошта",name:"Белпошта","name:be":"Белпошта","name:en":"Belposhta","name:ru":"Белпочта"},countryCodes:["by"],terms:["белпочта"],matchScore:2,suggestion:true},"amenity/post_office/Казпочта":{name:"Казпочта",icon:"maki-post",imageURL:"https://graph.facebook.com/Kazpost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q746263",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Нова Пошта":{name:"Нова Пошта",icon:"maki-post",imageURL:"https://graph.facebook.com/nova.poshta.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12133863",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Нова Пошта","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта"},countryCodes:["ua"],terms:["нова пошта №1","нова пошта №2","нова пошта №3","нова пошта №4"],matchScore:2,suggestion:true},"amenity/post_office/Почта России":{name:"Почта России",icon:"maki-post",imageURL:"https://graph.facebook.com/ruspost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1502763",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/СДЭК":{name:"СДЭК",icon:"maki-post",imageURL:"https://graph.facebook.com/edostavka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28665980",amenity:"post_office"},addTags:{amenity:"post_office",brand:"СДЭК","brand:wikidata":"Q28665980","brand:wikipedia":"ru:СДЭК",name:"СДЭК"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Укрпошта":{name:"Укрпошта",icon:"maki-post",imageURL:"https://graph.facebook.com/ukrposhta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2470783",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Укрпошта","brand:wikidata":"Q2470783","brand:wikipedia":"en:Ukrposhta",name:"Укрпошта"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/中国邮政":{name:"中国邮政",icon:"maki-post",geometry:["point","area"],tags:{"brand:wikidata":"Q1066476",amenity:"post_office"},addTags:{amenity:"post_office",brand:"中国邮政","brand:en":"China Post","brand:wikidata":"Q1066476","brand:wikipedia":"en:China Post",name:"中国邮政","name:en":"China Post"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/prep_school/Huntington Learning Center":{name:"Huntington Learning Center",icon:"temaki-school",imageURL:"https://graph.facebook.com/HuntingtonHelps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5945399",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Huntington Learning Center","brand:wikidata":"Q5945399","brand:wikipedia":"en:Huntington Learning Center",name:"Huntington Learning Center"},countryCodes:["us"],terms:["huntington"],matchScore:2,suggestion:true},"amenity/prep_school/KUMON (Japan)":{name:"KUMON (Japan)",icon:"temaki-school",imageURL:"https://graph.facebook.com/kumon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q142054",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"KUMON","brand:wikidata":"Q142054","brand:wikipedia":"ja:日本公文教育研究会",name:"KUMON","name:ja":"公文","name:ja-Hira":"くもん","name:ja-Latn":"KUMON"},countryCodes:["jp"],terms:["くもん","公文"],matchScore:2,suggestion:true},"amenity/prep_school/Kumon (International)":{name:"Kumon (International)",icon:"temaki-school",imageURL:"https://graph.facebook.com/kumon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q142054",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Kumon","brand:wikidata":"Q142054","brand:wikipedia":"en:Kumon",name:"Kumon"},terms:["kumon learning center"],matchScore:2,suggestion:true},"amenity/prep_school/Mathnasium":{name:"Mathnasium",icon:"temaki-school",imageURL:"https://graph.facebook.com/mathnasium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6787302",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Mathnasium","brand:wikidata":"Q6787302","brand:wikipedia":"en:Mathnasium",name:"Mathnasium"},countryCodes:["ca","us"],terms:["mathnasium learning center"],matchScore:2,suggestion:true},"amenity/prep_school/Russian School of Mathematics":{name:"Russian School of Mathematics",icon:"temaki-school",imageURL:"https://graph.facebook.com/RussianMath/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7382122",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Russian School of Mathematics","brand:wikidata":"Q7382122","brand:wikipedia":"en:Russian School of Mathematics",name:"Russian School of Mathematics"},countryCodes:["us"],terms:["rsm","russian school of math"],matchScore:2,suggestion:true},"amenity/prep_school/Sylvan":{name:"Sylvan",icon:"temaki-school",imageURL:"https://graph.facebook.com/SylvanLearning/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7660663",amenity:"prep_school"},addTags:{alt_name:"Sylvan Learning Center",amenity:"prep_school",brand:"Sylvan","brand:wikidata":"Q7660663","brand:wikipedia":"en:Sylvan Learning",name:"Sylvan"},countryCodes:["us"],terms:["sylvan learning"],matchScore:2,suggestion:true},"amenity/prep_school/栄光ゼミナール":{name:"栄光ゼミナール",icon:"temaki-school",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEikoh%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11535632",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"栄光ゼミナール","brand:ja":"栄光ゼミナール","brand:ja-Hira":"えいこうゼミナール","brand:ja-Latn":"Eikō Zemināru","brand:wikidata":"Q11535632","brand:wikipedia":"ja:栄光ゼミナール",name:"栄光ゼミナール","name:en":"Eikoh Seminar","name:ja":"栄光ゼミナール","name:ja-Hira":"えいこうゼミナール","name:ja-Latn":"Eikō Zemināru"},countryCodes:["jp"],terms:["eikoh"],matchScore:2,suggestion:true},"amenity/pub/Walkabout":{name:"Walkabout",icon:"maki-beer",imageURL:"https://graph.facebook.com/walkiebirmingham/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7962149",amenity:"pub"},addTags:{amenity:"pub",brand:"Walkabout","brand:wikidata":"Q7962149","brand:wikipedia":"en:Walkabout (pub chain)",name:"Walkabout"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/public_bookcase/Little Free Library":{name:"Little Free Library",icon:"maki-library",imageURL:"https://graph.facebook.com/LittleFreeLibrary/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6650101",amenity:"public_bookcase"},addTags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"},terms:[],matchScore:2,suggestion:true},"amenity/recycling/Planet Aid":{name:"Planet Aid",icon:"maki-recycling",imageURL:"https://graph.facebook.com/Planet.Aid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7201055",amenity:"recycling"},addTags:{amenity:"recycling",brand:"Planet Aid","brand:wikidata":"Q7201055","brand:wikipedia":"en:Planet Aid",name:"Planet Aid","recycling:clothes":"yes","recycling:shoes":"yes",recycling_type:"container"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/recycling/Saint Vincent de Paul":{name:"Saint Vincent de Paul",icon:"maki-recycling",imageURL:"https://graph.facebook.com/186921794657204/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66581837",amenity:"recycling"},addTags:{amenity:"recycling",brand:"Saint Vincent de Paul","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul","recycling:clothes":"yes","recycling:shoes":"yes",short_name:"SVdP"},countryCodes:["us"],terms:["st vincent de paul"],matchScore:2,suggestion:true},"amenity/recycling/The Salvation Army":{name:"The Salvation Army",icon:"maki-recycling",imageURL:"https://graph.facebook.com/SalvationArmyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188307",amenity:"recycling"},addTags:{amenity:"recycling",brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army","recycling:clothes":"yes"},countryCodes:["us"],terms:["salvation army"],matchScore:2,suggestion:true},"amenity/restaurant/100 Montaditos":{name:"100 Montaditos",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/100MontaditosSpain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8355805",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",cuisine:"sandwich",name:"100 Montaditos"},countryCodes:["es","it","pt"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/3 Brewers (On)":{name:"3 Brewers (On)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/3Brasseursca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3230326",amenity:"restaurant",cuisine:"burger;pizza;seafood"},addTags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brewers","name:fr":"3 Brasseurs",official_name:"Les 3 Brasseurs"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/ASK Italian":{name:"ASK Italian",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ASKItalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807056",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"ASK Italian","brand:wikidata":"Q4807056","brand:wikipedia":"en:ASK Italian",cuisine:"italian",name:"ASK Italian"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Amici's East Coast Pizzeria":{name:"Amici's East Coast Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/AmicisBayArea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133409",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Amici","brand:wikidata":"Q66133409",cuisine:"pizza",name:"Amici"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Applebee's":{name:"Applebee's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Applebeesmundoe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q621532",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Applebee's Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee's",official_name:"Applebee's Neighborhood Grill & Bar"},reference:{key:"cuisine",value:"american"},terms:["applebees bar and grill","applebees grill and bar","applebees neighborhood bar and grill"],matchScore:2,suggestion:true},"amenity/restaurant/american/Arooga's":{name:"Arooga's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/aroogas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72963322",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Arooga's","brand:wikidata":"Q72963322",cuisine:"american",name:"Arooga's",official_name:"Arooga's Grille House and Sports Bar"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Autogrill":{name:"Autogrill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/AutogrillOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q786790",amenity:"restaurant",cuisine:"italian;regional"},addTags:{amenity:"restaurant",brand:"Autogrill","brand:wikidata":"Q786790","brand:wikipedia":"en:Autogrill",cuisine:"italian;regional",name:"Autogrill"},reference:{key:"cuisine",value:"italian"},countryCodes:["at","es","fr","it"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/BBB":{name:"BBB",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BurgusBurgerBar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760094",amenity:"restaurant"},addTags:{alt_name:"Burgus Burger Bar","alt_name:en":"Burgus Burger Bar",amenity:"restaurant",brand:"Burgus Burger Bar","brand:en":"Burgus Burger Bar","brand:wikidata":"Q64760094",cuisine:"burger",name:"BBB","name:en":"BBB"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/BJ's":{name:"BJ's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BJsRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835755",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"BJ's","brand:wikidata":"Q4835755","brand:wikipedia":"en:BJ's Restaurants",cuisine:"american",name:"BJ's",official_name:"BJ's Restaurant & Brewhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Bella Italia":{name:"Bella Italia",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bellaitalia.co.uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4883362",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Bella Italia","brand:wikidata":"Q4883362","brand:wikipedia":"en:Bella Italia",cuisine:"italian",name:"Bella Italia"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Benihana":{name:"Benihana",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/Benihana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4887996",amenity:"restaurant",cuisine:"japanese;teppanyaki;steak"},addTags:{amenity:"restaurant",brand:"Benihana","brand:wikidata":"Q4887996","brand:wikipedia":"en:Benihana",cuisine:"japanese;teppanyaki;steak",name:"Benihana"},reference:{key:"cuisine",value:"japanese"},countryCodes:["aw","br","ca","pa","sv","us"],terms:["benihana of tokyo"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Bertucci's":{name:"Bertucci's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Bertuccis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4895917",amenity:"restaurant",cuisine:"pizza;italian"},addTags:{amenity:"restaurant",brand:"Bertucci's","brand:wikidata":"Q4895917","brand:wikipedia":"en:Bertucci's",cuisine:"pizza;italian",name:"Bertucci's"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Big Boy":{name:"Big Boy",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bigboyrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4386779",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Big Boy","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"Big Boy",official_name:"Big Boy Restaurant & Bakery"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Bill's":{name:"Bill's",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1133746268063358978/NRuBqcqZ_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q47012702",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Bill's","brand:wikidata":"Q47012702","brand:wikipedia":"en:Bill's",cuisine:"british",name:"Bill's"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Black":{name:"Black",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/blackbarnburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760158",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Black Bar Burger","brand:en":"Black Bar Burger","brand:he":"בלאק בורגר","brand:wikidata":"Q64760158",cuisine:"burger",name:"Black","name:en":"Black","name:he":"בלאק"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/steakhouse/Black Angus":{name:"Black Angus",icon:"maki-slaughterhouse",imageURL:"https://graph.facebook.com/BlackAngusSteakhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4920269",amenity:"restaurant",cuisine:"steakhouse"},addTags:{amenity:"restaurant",brand:"Black Angus","brand:wikidata":"Q4920269","brand:wikipedia":"en:Black Angus Steakhouse",cuisine:"steakhouse",name:"Black Angus"},reference:{key:"cuisine",value:"steak_house"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Black Bear Diner":{name:"Black Bear Diner",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BlackBearDiner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4920343",amenity:"restaurant",cuisine:"american"},addTags:{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"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Blaze Pizza":{name:"Blaze Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/BlazePizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23016666",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Blaze Pizza","brand:wikidata":"Q23016666","brand:wikipedia":"en:Blaze Pizza",cuisine:"pizza",name:"Blaze Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["bh","ca","kw","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Bob Evans":{name:"Bob Evans",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bobevans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4932386",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Bob Evans","brand:wikidata":"Q4932386","brand:wikipedia":"en:Bob Evans Restaurants",cuisine:"american",name:"Bob Evans"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Bonanza Steakhouse":{name:"Bonanza Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ponbonsteakhouses/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64045992",amenity:"restaurant",cuisine:"american;steak;buffet"},addTags:{amenity:"restaurant",brand:"Bonanza Steakhouse","brand:wikidata":"Q64045992",cuisine:"american;steak;buffet",name:"Bonanza Steakhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:["bonanza"],matchScore:2,suggestion:true},"amenity/restaurant/sushi/Bonchon Chicken":{name:"Bonchon Chicken",icon:"temaki-temaki",imageURL:"https://pbs.twimg.com/profile_images/1014893960551174149/cVQR1ZDY_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4941248",amenity:"restaurant",cuisine:"chicken;korean;sushi"},addTags:{amenity:"restaurant",brand:"Bonchon Chicken","brand:wikidata":"Q4941248","brand:wikipedia":"en:Bonchon Chicken",cuisine:"chicken;korean;sushi",name:"Bonchon Chicken"},reference:{key:"cuisine",value:"sushi"},countryCodes:["bh","kh","kr","kw","my","ph","sg","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Bonefish Grill":{name:"Bonefish Grill",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/bonefishgrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4941599",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Boston Pizza":{name:"Boston Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/BostonPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q894578",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Bravo":{name:"Bravo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bravoitalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64055574",amenity:"restaurant",cuisine:"italian"},addTags:{alt_name:"Bravo Cucina Italiana",amenity:"restaurant",brand:"Bravo","brand:wikidata":"Q64055574",cuisine:"italian",name:"Bravo"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Brewers Fayre":{name:"Brewers Fayre",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1197527556729319427/uj4Q0iJF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4962678",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Brewers Fayre","brand:wikidata":"Q4962678","brand:wikipedia":"en:Brewers Fayre",name:"Brewers Fayre"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Brio":{name:"Brio",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/brioitalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64055835",amenity:"restaurant",cuisine:"italian"},addTags:{alt_name:"Brio Tuscan Grille",amenity:"restaurant",brand:"Brio","brand:wikidata":"Q64055835",cuisine:"italian",name:"Brio"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Bubba Gump Shrimp Company":{name:"Bubba Gump Shrimp Company",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/bubbagumprestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q50024",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Bubba Gump Shrimp Company","brand:wikidata":"Q50024","brand:wikipedia":"en:Bubba Gump Shrimp Company",cuisine:"seafood",name:"Bubba Gump Shrimp Company"},reference:{key:"cuisine",value:"seafood"},countryCodes:["ca","co","gb","hk","id","jp","mp","mx","ph","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Buca di Beppo":{name:"Buca di Beppo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bucadibeppo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4982340",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Buca di Beppo","brand:wikidata":"Q4982340","brand:wikipedia":"en:Buca di Beppo",cuisine:"italian",name:"Buca di Beppo"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Bucking Bull":{name:"Bucking Bull",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BuckingBullAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18208286",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Bucking Bull","brand:wikidata":"Q18208286","brand:wikipedia":"en:Bucking Bull",cuisine:"steak_house",name:"Bucking Bull"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Grill":{name:"Buffalo Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/buffalogrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q944655",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Buffalo Grill","brand:wikidata":"Q944655","brand:wikipedia":"en:Buffalo Grill",cuisine:"steak_house",name:"Buffalo Grill"},countryCodes:["es","fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Wild Wings":{name:"Buffalo Wild Wings",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BuffaloWildWings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q509255",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Buffalo Wild Wings","brand:wikidata":"Q509255","brand:wikipedia":"en:Buffalo Wild Wings",cuisine:"wings",name:"Buffalo Wild Wings"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Wings & Rings":{name:"Buffalo Wings & Rings",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/wingsandrings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4985900",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Buffalo Wings & Rings","brand:wikidata":"Q4985900","brand:wikipedia":"en:Buffalo Wings & Rings",cuisine:"wings",name:"Buffalo Wings & Rings",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Byron":{name:"Byron",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q16828673",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Byron","brand:wikidata":"Q16828673","brand:wikipedia":"en:Byron Hamburgers",cuisine:"burger",name:"Byron"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Cafe Rio":{name:"Cafe Rio",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/CafeRio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5017108",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Cafe Rio","brand:wikidata":"Q5017108","brand:wikipedia":"en:Cafe Rio",cuisine:"mexican",name:"Cafe Rio"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Café Rouge":{name:"Café Rouge",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1113010856487419904/JzwWNWrF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5017261",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Café Rouge","brand:wikidata":"Q5017261","brand:wikipedia":"en:Café Rouge",cuisine:"french",name:"Café Rouge"},reference:{key:"cuisine",value:"french"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/California Pizza Kitchen":{name:"California Pizza Kitchen",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/californiapizzakitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15109854",amenity:"restaurant",cuisine:"pizza"},addTags:{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"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Campanile":{name:"Campanile",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/campanile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2412064",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",cuisine:"french",name:"Campanile"},reference:{key:"cuisine",value:"french"},countryCodes:["fr","gb","nl"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Carluccio's":{name:"Carluccio's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/carluccios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25111797",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Carluccio's","brand:wikidata":"Q25111797","brand:wikipedia":"en:Carluccio's Ltd",cuisine:"italian",name:"Carluccio's"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Carrabba's Italian Grill":{name:"Carrabba's Italian Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Carrabbas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5045999",amenity:"restaurant",cuisine:"italian"},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"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Cheddar's":{name:"Cheddar's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/CheddarsScratchKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5089187",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Cheddar's","brand:wikidata":"Q5089187","brand:wikipedia":"en:Cheddar's Scratch Kitchen",cuisine:"american",name:"Cheddar's",official_name:"Cheddar's Scratch Kitchen"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Cheeburger Cheeburger":{name:"Cheeburger Cheeburger",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/136947372998541/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5089247",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Cheeburger Cheeburger","brand:wikidata":"Q5089247","brand:wikipedia":"en:Cheeburger Cheeburger",cuisine:"burger",name:"Cheeburger Cheeburger"},countryCodes:["ca","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Chevys":{name:"Chevys",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/ChevysFreshMex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5094466",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Chevys Fresh Mex","brand:wikidata":"Q5094466","brand:wikipedia":"en:Chevys Fresh Mex",cuisine:"mexican",name:"Chevys",official_name:"Chevys Fresh Mex"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Chili's":{name:"Chili's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Chilis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1072948",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Chili's","brand:wikidata":"Q1072948","brand:wikipedia":"en:Chili's",cuisine:"tex-mex",name:"Chili's",official_name:"Chili's Grill & Bar"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Chiquito":{name:"Chiquito",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/chiquito.restaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5101775",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Chiquito","brand:wikidata":"Q5101775","brand:wikipedia":"en:Chiquito (restaurant)",cuisine:"tex-mex",name:"Chiquito"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Chuck E. Cheese's":{name:"Chuck E. Cheese's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/ChuckECheese/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2438391",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",leisure:"amusement_arcade",name:"Chuck E. Cheese's"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:["chuck e cheese"],matchScore:2,suggestion:true},"amenity/restaurant/Chuy's":{name:"Chuy's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Chuys.Restaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5118415",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Chuy's","brand:wikidata":"Q5118415","brand:wikipedia":"en:Chuy's",cuisine:"tex-mex",name:"Chuy's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Cici's Pizza":{name:"Cici's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Cicis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2972189",amenity:"restaurant",cuisine:"pizza;buffet"},addTags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza;buffet",name:"Cici's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Claim Jumper":{name:"Claim Jumper",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ClaimJumperRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5125081",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Claim Jumper","brand:wikidata":"Q5125081","brand:wikipedia":"en:Claim Jumper",cuisine:"american",name:"Claim Jumper"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Coast to Coast":{name:"Coast to Coast",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/coasttocoastrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22000729",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Coast to Coast","brand:wikidata":"Q22000729","brand:wikipedia":"en:Coast to Coast (restaurant)",cuisine:"american",name:"Coast to Coast"},reference:{key:"cuisine",value:"american"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Copeland's":{name:"Copeland's",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1211746451958779906/2WbnhhLW_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5168346",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Copeland's","brand:wikidata":"Q5168346","brand:wikipedia":"en:Copeland's",cuisine:"american",name:"Copeland's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Cora (Quebec)":{name:"Cora (Quebec)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/corarestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2996960",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Cora","brand:wikidata":"Q2996960","brand:wikipedia":"fr:Cora (chaîne de restaurants)",cuisine:"breakfast",name:"Cora"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Cora (non-Quebec)":{name:"Cora (non-Quebec)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/corarestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2996960",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Cora","brand:wikidata":"Q2996960","brand:wikipedia":"en:Cora (restaurant)",cuisine:"breakfast",name:"Cora"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Cosmo":{name:"Cosmo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/CosmoRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5174239",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Cosmo","brand:wikidata":"Q5174239","brand:wikipedia":"en:Cosmo (restaurant)",cuisine:"international",name:"Cosmo"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Country Pride":{name:"Country Pride",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/CountryPrideRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64051992",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Country Pride","brand:wikidata":"Q64051992",cuisine:"american",name:"Country Pride"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:["country pride restaurant"],matchScore:2,suggestion:true},"amenity/restaurant/french/Courtepaille":{name:"Courtepaille",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/GrillCourtepaille/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3116688",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Courtepaille","brand:wikidata":"Q3116688","brand:wikipedia":"fr:Grill Courtepaille",cuisine:"french",name:"Courtepaille"},reference:{key:"cuisine",value:"french"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Cracker Barrel":{name:"Cracker Barrel",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/crackerbarrel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4492609",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",cuisine:"american",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Côte Brasserie":{name:"Côte Brasserie",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/cotebrasserie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48699908",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Côte Brasserie","brand:wikidata":"Q48699908","brand:wikipedia":"en:Côte",cuisine:"french",name:"Côte Brasserie"},reference:{key:"cuisine",value:"french"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Dave & Buster's":{name:"Dave & Buster's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/daveandbusters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5228205",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Dave & Buster's","brand:wikidata":"Q5228205","brand:wikipedia":"en:Dave & Buster's",cuisine:"american",leisure:"amusement_arcade",name:"Dave & Buster's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Denny's":{name:"Denny's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/dennys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1189695",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Dickey's Barbecue Pit":{name:"Dickey's Barbecue Pit",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/dickeysbarbecuepit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19880747",amenity:"restaurant"},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"},countryCodes:["us"],terms:["dickeys barbecue"],matchScore:2,suggestion:true},"amenity/restaurant/Din Tai Fung":{name:"Din Tai Fung",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/dintaifungUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q699142",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Din Tai Fung","brand:wikidata":"Q699142","brand:wikipedia":"en:Din Tai Fung",cuisine:"taiwanese",name:"Din Tai Fung","name:zh":"鼎泰丰"},countryCodes:["ae","au","gb","hk","id","jp","kr","mo","my","ph","sg","th","tw","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Donatos Pizza":{name:"Donatos Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/DonatosPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1240741",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Donatos Pizza","brand:wikidata":"Q1240741","brand:wikipedia":"en:Donatos Pizza",cuisine:"pizza",name:"Donatos Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["donatos"],matchScore:2,suggestion:true},"amenity/restaurant/italian/East Side Mario's":{name:"East Side Mario's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/eastsidemarios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5329375",amenity:"restaurant",cuisine:"italian"},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"},reference:{key:"cuisine",value:"italian"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Eat'n Park":{name:"Eat'n Park",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/EatnParkRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5331211",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Eat'n Park","brand:wikidata":"Q5331211","brand:wikipedia":"en:Eat'n Park",cuisine:"american",name:"Eat'n Park"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Elephant Bar":{name:"Elephant Bar",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ElephantBar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5359302",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Elephant Bar","brand:wikidata":"Q5359302","brand:wikipedia":"en:Elephant Bar",cuisine:"american",name:"Elephant Bar"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Famous Dave's":{name:"Famous Dave's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/famousdaves/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433448",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"},countryCodes:["us"],terms:["famous daves bbq"],matchScore:2,suggestion:true},"amenity/restaurant/american/First Watch":{name:"First Watch",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/FirstWatch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5454064",amenity:"restaurant",cuisine:"american;breakfast"},addTags:{amenity:"restaurant",brand:"First Watch","brand:wikidata":"Q5454064","brand:wikipedia":"en:First Watch (restaurant chain)",cuisine:"american;breakfast",name:"First Watch"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Flunch":{name:"Flunch",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/flunch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q629326",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"},reference:{key:"cuisine",value:"french"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Foster's Hollywood":{name:"Foster's Hollywood",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/fostershollywood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5864366",amenity:"restaurant",cuisine:"american"},addTags:{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"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Frankie & Benny's":{name:"Frankie & Benny's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/frankiebennys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5490892",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"american",name:"Frankie & Benny's"},reference:{key:"cuisine",value:"american"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Freshii":{name:"Freshii",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/freshii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5503051",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Freshii","brand:wikidata":"Q5503051","brand:wikipedia":"en:Freshii",cuisine:"salad",name:"Freshii"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Friendly's":{name:"Friendly's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/friendlys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1464513",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Friendly's","brand:wikidata":"Q1464513","brand:wikipedia":"en:Friendly's",cuisine:"american",name:"Friendly's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Frisch's Big Boy":{name:"Frisch's Big Boy",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/frischsbigboy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5504660",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Frisch's Big Boy","brand:wikidata":"Q5504660","brand:wikipedia":"en:Frisch's",cuisine:"burger",name:"Frisch's Big Boy",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Fuddruckers":{name:"Fuddruckers",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/fuddruckers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5507056",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Fuddruckers","brand:wikidata":"Q5507056","brand:wikipedia":"en:Fuddruckers",cuisine:"burger",name:"Fuddruckers"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Gatti's Pizza":{name:"Gatti's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/1034520805923684352/wc5SE5R6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5527509",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Gatti's Pizza","brand:wikidata":"Q5527509","brand:wikipedia":"en:Gatti's Pizza",cuisine:"pizza",name:"Gatti's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Giordano's Pizzeria":{name:"Giordano's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/giordanospizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5563393",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Giordano's Pizzeria","brand:wikidata":"Q5563393","brand:wikipedia":"en:Giordano's Pizzeria",cuisine:"pizza",name:"Giordano's Pizzeria"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Godfather's Pizza":{name:"Godfather's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/godfatherspizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5576353",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Godfather's Pizza","brand:wikidata":"Q5576353","brand:wikipedia":"en:Godfather's Pizza",cuisine:"pizza",name:"Godfather's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Golden Corral":{name:"Golden Corral",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/goldencorral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4039560",amenity:"restaurant",cuisine:"american;buffet"},addTags:{amenity:"restaurant",brand:"Golden Corral","brand:wikidata":"Q4039560","brand:wikipedia":"en:Golden Corral",cuisine:"american;buffet",name:"Golden Corral"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:["golden corral buffet","golden corral buffet and grill"],matchScore:2,suggestion:true},"amenity/restaurant/Gourmet Burger Kitchen":{name:"Gourmet Burger Kitchen",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/gourmetburgerkitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5588445",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Gourmet Burger Kitchen","brand:wikidata":"Q5588445","brand:wikipedia":"en:Gourmet Burger Kitchen",cuisine:"burger",name:"Gourmet Burger Kitchen",short_name:"GBK"},countryCodes:["gb","gr","ie"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Grotto Pizza":{name:"Grotto Pizza",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/1189936353976496129/YXleniEP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q20709024",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Grotto Pizza","brand:wikidata":"Q20709024","brand:wikipedia":"en:Grotto Pizza",cuisine:"pizza",name:"Grotto Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Gusto (United Kingdom)":{name:"Gusto (United Kingdom)",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1032934760136486914/_P4TfIUL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q66087781",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Gusto","brand:wikidata":"Q66087781",cuisine:"italian",name:"Gusto"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Guzman y Gomez":{name:"Guzman y Gomez",icon:"fas-pepper-hot",geometry:["point","area"],tags:{"brand:wikidata":"Q23019759",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Guzman y Gomez","brand:wikidata":"Q23019759","brand:wikipedia":"en:Guzman y Gomez",cuisine:"mexican",name:"Guzman y Gomez"},reference:{key:"cuisine",value:"mexican"},countryCodes:["au","jp","sg"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Handmade Burger Co.":{name:"Handmade Burger Co.",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/handmadeburgercompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56154673",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Handmade Burger Co.","brand:wikidata":"Q56154673",cuisine:"burger",name:"Handmade Burger Co."},countryCodes:["gb"],terms:["handmade burger company"],matchScore:2,suggestion:true},"amenity/restaurant/Hans im Glück":{name:"Hans im Glück",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hansimglueck.burgergrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22569868",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hans im Glück","brand:wikidata":"Q22569868","brand:wikipedia":"de:Hans im Glück (Restaurantkette)",cuisine:"burger",name:"Hans im Glück"},countryCodes:["at","ch","de","sg"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Happy's Pizza":{name:"Happy's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/EatHappysPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5652393",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Happy's Pizza","brand:wikidata":"Q5652393","brand:wikipedia":"en:Happy's Pizza",cuisine:"pizza",name:"Happy's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Hard Rock Cafe":{name:"Hard Rock Cafe",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hardrock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q918151",amenity:"restaurant",cuisine:"american"},addTags:{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"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Harvester":{name:"Harvester",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/harvesterrestaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5676915",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Harvester","brand:wikidata":"Q5676915","brand:wikipedia":"en:Harvester (restaurant)",cuisine:"american",name:"Harvester"},reference:{key:"cuisine",value:"american"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Hippopotamus":{name:"Hippopotamus",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Hippopotamus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3136174",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hippopotamus","brand:wikidata":"Q3136174","brand:wikipedia":"fr:Hippopotamus (restaurant)",cuisine:"steak_house",name:"Hippopotamus"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Hog's Australia's Steakhouse":{name:"Hog's Australia's Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hogsbreath/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5876920",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hog's Australia's Steakhouse","brand:wikidata":"Q5876920","brand:wikipedia":"en:Hog's Australia's Steakhouse",cuisine:"steak_house",name:"Hog's Australia's Steakhouse"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Hooters":{name:"Hooters",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hooters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1025921",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/House of Blues":{name:"House of Blues",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/HOBChicago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q648898",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"House of Blues","brand:wikidata":"Q648898","brand:wikipedia":"en:House of Blues",cuisine:"american",name:"House of Blues"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Huddle House":{name:"Huddle House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/HuddleHouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5928324",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Huddle House","brand:wikidata":"Q5928324","brand:wikipedia":"en:Huddle House",cuisine:"american",name:"Huddle House"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Husky House":{name:"Husky House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/huskyenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q702049",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",cuisine:"diner",name:"Husky House"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/IHOP":{name:"IHOP",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/IHOP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1185675",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"IHOP","brand:wikidata":"Q1185675","brand:wikipedia":"en:IHOP",cuisine:"breakfast;pancake",name:"IHOP"},terms:["international house of pancakes"],matchScore:2,suggestion:true},"amenity/restaurant/italian/IL Патио":{name:"IL Патио",icon:"maki-restaurant",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRosInter.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4397763",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"IL Патио","brand:wikidata":"Q4397763","brand:wikipedia":"en:Росинтер",cuisine:"italian",name:"IL Патио"},reference:{key:"cuisine",value:"italian"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Iron Skillet":{name:"Iron Skillet",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/IronSkilletRestaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64052855",amenity:"restaurant",cuisine:"american;buffet"},addTags:{amenity:"restaurant",brand:"Iron Skillet","brand:wikidata":"Q64052855",cuisine:"american;buffet",name:"Iron Skillet"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:["iron skillet restaurant"],matchScore:2,suggestion:true},"amenity/restaurant/american/Jack Astor's":{name:"Jack Astor's",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1003974042351792130/-v3NNNEb_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6111066",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Jack Astor's","brand:wikidata":"Q6111066","brand:wikipedia":"en:Jack Astor's Bar and Grill",cuisine:"american",name:"Jack Astor's"},reference:{key:"cuisine",value:"american"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Jason's Deli":{name:"Jason's Deli",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/JasonsDeli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997641",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Jason's Deli","brand:wikidata":"Q16997641","brand:wikipedia":"en:Jason's Deli",cuisine:"sandwich",name:"Jason's Deli"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Jet's Pizza":{name:"Jet's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/JetsPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997713",amenity:"restaurant",cuisine:"pizza"},addTags:{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"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Jinya Ramen Bar":{name:"Jinya Ramen Bar",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/916114096742793216/3VVRQT9R_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16997755",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Jinya Ramen Bar","brand:wikidata":"Q16997755","brand:wikipedia":"en:Jinya Ramen Bar",cuisine:"ramen",name:"Jinya Ramen Bar"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Joe's Crab Shack":{name:"Joe's Crab Shack",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/joescrabshack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6208210",amenity:"restaurant",cuisine:"seafood"},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"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Johnny Carino's":{name:"Johnny Carino's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/carinositalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5039637",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Johnny Carino's","brand:wikidata":"Q5039637","brand:wikipedia":"en:Carino's Italian",cuisine:"italian",name:"Johnny Carino's"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:["carinios"],matchScore:2,suggestion:true},"amenity/restaurant/Johnny Rockets":{name:"Johnny Rockets",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/johnnyrockets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1051593",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Johnny Rockets","brand:wikidata":"Q1051593","brand:wikipedia":"en:Johnny Rockets",cuisine:"burger",name:"Johnny Rockets"},terms:["johnny rocket"],matchScore:2,suggestion:true},"amenity/restaurant/american/Kelsey's":{name:"Kelsey's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/KelseysRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6386459",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Kelsey's","brand:wikidata":"Q6386459","brand:wikipedia":"en:Kelseys Original Roadhouse",cuisine:"american",name:"Kelsey's"},reference:{key:"cuisine",value:"american"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/sushi/Kona Grill":{name:"Kona Grill",icon:"temaki-temaki",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKona%20Grill%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6428706",amenity:"restaurant",cuisine:"sushi;cocktails"},addTags:{amenity:"restaurant",brand:"Kona Grill","brand:wikidata":"Q6428706","brand:wikipedia":"en:Kona Grill",cuisine:"sushi;cocktails",name:"Kona Grill"},reference:{key:"cuisine",value:"sushi"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/L'Osteria":{name:"L'Osteria",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/losteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17323478",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"L'Osteria","brand:wikidata":"Q17323478","brand:wikipedia":"de:L’Osteria",cuisine:"italian",name:"L'Osteria"},reference:{key:"cuisine",value:"italian"},countryCodes:["at","ch","cz","de","fr","gb","nl"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/La Boucherie":{name:"La Boucherie",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/restaurantlaboucherie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21427479",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"La Boucherie","brand:wikidata":"Q21427479","brand:wikipedia":"fr:La Boucherie (restaurant)",cuisine:"steak_house",name:"La Boucherie"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/La Cage":{name:"La Cage",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/lacagebrasseriesportive/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3206980",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"La Cage","brand:wikidata":"Q3206980","brand:wikipedia":"fr:La Cage aux Sports",cuisine:"burger;chicken;sandwich;fish;pasta",name:"La Cage"},countryCodes:["ca"],terms:["la cage aux sports"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/LaRosa's Pizzeria":{name:"LaRosa's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/LaRosasPizzeria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6460833",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"LaRosa's Pizzeria","brand:wikidata":"Q6460833","brand:wikipedia":"en:LaRosa's Pizzeria",cuisine:"pizza",name:"LaRosa's Pizzeria",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Ledo Pizza":{name:"Ledo Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/ledopizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6512734",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Ledo Pizza","brand:wikidata":"Q6512734","brand:wikipedia":"en:Ledo Pizza",cuisine:"pizza",name:"Ledo Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Legal Sea Foods":{name:"Legal Sea Foods",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/LegalSeaFoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6517417",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Legal Sea Foods","brand:wikidata":"Q6517417","brand:wikipedia":"en:Legal Sea Foods",cuisine:"seafood",name:"Legal Sea Foods"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Les 3 Brasseurs (Qc,Br,Fr)":{name:"Les 3 Brasseurs (Qc,Br,Fr)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/3Brasseursca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3230326",amenity:"restaurant",cuisine:"burger;pizza;seafood"},addTags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brasseurs","name:en":"3 Brewers",official_name:"Les 3 Brasseurs"},reference:{key:"cuisine",value:"pizza"},countryCodes:["br","ca","fr"],terms:["3 brasseurs"],matchScore:2,suggestion:true},"amenity/restaurant/american/Logan's Roadhouse":{name:"Logan's Roadhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Logans.Roadhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6666872",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"american",name:"Logan's Roadhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/LongHorn Steakhouse":{name:"LongHorn Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/longhornsteakhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3259007",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",cuisine:"steak_house",name:"LongHorn Steakhouse"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Lou Malnati's Pizzeria":{name:"Lou Malnati's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/loumalnatis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6685628",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Lou Malnati's Pizzeria","brand:wikidata":"Q6685628","brand:wikipedia":"en:Lou Malnati's Pizzeria",cuisine:"pizza",name:"Lou Malnati's Pizzeria"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Loving Hut":{name:"Loving Hut",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/LovingHutUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3491655",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",cuisine:"international","diet:vegan":"only","diet:vegetarian":"only",name:"Loving Hut"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Luby's":{name:"Luby's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Lubys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6695701",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Luby's","brand:wikidata":"Q6695701","brand:wikipedia":"en:Luby's",cuisine:"american",name:"Luby's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Léon de Bruxelles":{name:"Léon de Bruxelles",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/leondebruxellesofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21041507",amenity:"restaurant"},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"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/thai/MK Restaurants":{name:"MK Restaurants",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/mkrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075359",amenity:"restaurant",cuisine:"thai"},addTags:{amenity:"restaurant",brand:"MK Restaurants","brand:wikidata":"Q62075359",cuisine:"thai",name:"MK Restaurants"},reference:{key:"cuisine",value:"thai"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Mad Mex Fresh Mexican":{name:"Mad Mex Fresh Mexican",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/madmex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19589766",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Mad Mex Fresh Mexican Grill","brand:wikidata":"Q19589766","brand:wikipedia":"en:Mad Mex Fresh Mexican Grill",cuisine:"mexican",name:"Mad Mex Fresh Mexican Grill"},reference:{key:"cuisine",value:"mexican"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Marco's Pizza":{name:"Marco's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/MarcosPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6757382",amenity:"restaurant",cuisine:"pizza"},addTags:{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"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Marie Callender's":{name:"Marie Callender's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/MarieCallenders/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6762784",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Marie Callender's","brand:wikidata":"Q6762784","brand:wikipedia":"en:Marie Callender's",cuisine:"american",name:"Marie Callender's"},reference:{key:"cuisine",value:"american"},countryCodes:["mx","us"],terms:["marie calendar","marie calendar's","marie callendar's"],matchScore:2,suggestion:true},"amenity/restaurant/asian/Max's Restaurant":{name:"Max's Restaurant",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/MaxsRestaurantNA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6794477",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's Restaurant",cuisine:"asian",name:"Max's Restaurant"},reference:{key:"cuisine",value:"asian"},countryCodes:["ph"],terms:["max's"],matchScore:2,suggestion:true},"amenity/restaurant/McAlister's Deli":{name:"McAlister's Deli",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/mcalistersdeli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17020829",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",cuisine:"sandwich",name:"McAlister's Deli"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/McCormick & Schmick's":{name:"McCormick & Schmick's",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/mccormickandschmicks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6800562",amenity:"restaurant",cuisine:"seafood;steak"},addTags:{amenity:"restaurant",brand:"McCormick & Schmick's","brand:wikidata":"Q6800562","brand:wikipedia":"en:McCormick & Schmick's",cuisine:"seafood;steak",name:"McCormick & Schmick's"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:["mccormick and schmick","mccormick and schmicks grill"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Mellow Mushroom":{name:"Mellow Mushroom",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/mellowmushroom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17021360",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Mikes":{name:"Mikes",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/MikesRestaurant.PageOfficielle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3313615",amenity:"restaurant",cuisine:"pizza;pasta;sandwich"},addTags:{amenity:"restaurant",brand:"Mikes","brand:wikidata":"Q3313615","brand:wikipedia":"fr:Mikes",cuisine:"pizza;pasta;sandwich",name:"Mikes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Mimi's Cafe":{name:"Mimi's Cafe",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/mimiscafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17022081",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Mimi's Cafe","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",cuisine:"french",name:"Mimi's Cafe"},reference:{key:"cuisine",value:"french"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Montana's":{name:"Montana's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/montanasBBQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17022490",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Montana's","brand:wikidata":"Q17022490","brand:wikipedia":"en:Montana's BBQ & Bar",cuisine:"barbecue",name:"Montana's",official_name:"Montana's BBQ & Bar"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Morton's The Steakhouse":{name:"Morton's The Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/mortons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17022759",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Morton's The Steakhouse","brand:wikidata":"Q17022759","brand:wikipedia":"en:Morton's The Steakhouse",cuisine:"steak_house",name:"Morton's The Steakhouse"},countryCodes:["us"],terms:["mortons"],matchScore:2,suggestion:true},"amenity/restaurant/Moses":{name:"Moses",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/MosesIsrael/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760150",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Moses","brand:en":"Moses","brand:he":"מוזס","brand:wikidata":"Q64760150",cuisine:"burger",name:"Moses","name:en":"Moses","name:he":"מוזס"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Mountain Mike's":{name:"Mountain Mike's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/mountainmikes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6925120",amenity:"restaurant",cuisine:"pizza"},addTags:{alt_name:"Mountain Mike's Pizza",amenity:"restaurant",brand:"Mountain Mike's","brand:wikidata":"Q6925120","brand:wikipedia":"en:Mountain Mike's Pizza",cuisine:"pizza",name:"Mountain Mike's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/greek/Mr. Greek":{name:"Mr. Greek",icon:"maki-restaurant",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMr.%20Greek%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6928719",amenity:"restaurant",cuisine:"greek"},addTags:{amenity:"restaurant",brand:"Mr. Greek","brand:wikidata":"Q6928719","brand:wikipedia":"en:Mr. Greek",cuisine:"greek",name:"Mr. Greek"},reference:{key:"cuisine",value:"greek"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Nando's":{name:"Nando's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/NandosUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3472954",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Nando's","brand:wikidata":"Q3472954","brand:wikipedia":"en:Nando's",cuisine:"chicken;portuguese",name:"Nando's"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Noodles & Company":{name:"Noodles & Company",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/noodlesandcompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7049673",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Noodles & Company","brand:wikidata":"Q7049673","brand:wikipedia":"en:Noodles & Company",cuisine:"pasta",name:"Noodles & Company"},countryCodes:["us"],terms:["noodles and co","noodles co","noodles company"],matchScore:2,suggestion:true},"amenity/restaurant/american/O'Charley's":{name:"O'Charley's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ocharleysfans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7071703",amenity:"restaurant",cuisine:"american"},addTags:{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"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Ocean Basket":{name:"Ocean Basket",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/daoceanbasket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075311",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Ocean Basket","brand:wikidata":"Q62075311",cuisine:"seafood",name:"Ocean Basket"},reference:{key:"cuisine",value:"seafood"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Old Chicago":{name:"Old Chicago",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/OldChicago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64411347",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Old Chicago","brand:wikidata":"Q64411347",cuisine:"pizza",name:"Old Chicago",official_name:"Old Chicago Pizza & Taproom"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Old Country Buffet":{name:"Old Country Buffet",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OldCountryBuffet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75243208",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Old Country Buffet","brand:wikidata":"Q75243208",cuisine:"american",name:"Old Country Buffet"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Old Wild West":{name:"Old Wild West",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OWWofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25402475",amenity:"restaurant",cuisine:"american"},addTags:{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"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Olive Garden":{name:"Olive Garden",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OliveGarden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3045312",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Olive Garden","brand:wikidata":"Q3045312","brand:wikipedia":"en:Olive Garden",cuisine:"italian",name:"Olive Garden"},reference:{key:"cuisine",value:"italian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/On The Border":{name:"On The Border",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/OnTheBorderMexicanGrillandCantina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7091305",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"On The Border","brand:wikidata":"Q7091305","brand:wikipedia":"en:On the Border Mexican Grill & Cantina",cuisine:"tex-mex",name:"On The Border",official_name:"On The Border Mexican Grill & Cantina"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Outback Steakhouse":{name:"Outback Steakhouse",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/778575984958267392/MGtDYhwg_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1064893",amenity:"restaurant",cuisine:"american;steak"},addTags:{amenity:"restaurant",brand:"Outback Steakhouse","brand:wikidata":"Q1064893","brand:wikipedia":"en:Outback Steakhouse",cuisine:"american;steak",name:"Outback Steakhouse"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/P.F. Chang's":{name:"P.F. Chang's",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/pfchangs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5360181",amenity:"restaurant",cuisine:"asian"},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",official_name:"P.F. Chang's China Bistro"},reference:{key:"cuisine",value:"asian"},countryCodes:["mx","us"],terms:["pf chang"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Papa Gino's":{name:"Papa Gino's",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/645764802531454976/5QHfmIzP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7132333",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Papa Gino's","brand:wikidata":"Q7132333","brand:wikipedia":"en:Papa Gino's",cuisine:"pizza",name:"Papa Gino's"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Pardos Chicken":{name:"Pardos Chicken",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/pardoschicken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17624435",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Pardos Chicken","brand:wikidata":"Q17624435","brand:wikipedia":"en:Pardos chicken",cuisine:"peruvian",name:"Pardos Chicken"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/Pei Wei":{name:"Pei Wei",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/peiwei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7160898",amenity:"restaurant",cuisine:"asian"},addTags:{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"},countryCodes:["us"],terms:["pei wei asian diner"],matchScore:2,suggestion:true},"amenity/restaurant/american/Perkins":{name:"Perkins",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/eatatperkins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7169056",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Perkins","brand:wikidata":"Q7169056","brand:wikipedia":"en:Perkins Restaurant and Bakery",cuisine:"american",name:"Perkins",official_name:"Perkins Restaurant and Bakery"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Peter Pane":{name:"Peter Pane",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/peter.pane.burgergrill.bar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66084419",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Peter Pane","brand:wikidata":"Q66084419",cuisine:"burger",name:"Peter Pane"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Peter Piper Pizza":{name:"Peter Piper Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/peterpiperpizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7176401",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Peter Piper Pizza","brand:wikidata":"Q7176401",cuisine:"pizza",name:"Peter Piper Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/vietnamese/Phở 24":{name:"Phở 24",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/pho24.24giavitinhte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63863118",amenity:"restaurant",cuisine:"vietnamese;noodle"},addTags:{amenity:"restaurant",brand:"Phở 24","brand:wikidata":"Q63863118",cuisine:"vietnamese;noodle",name:"Phở 24","name:en":"Pho 24","name:vi":"Phở 24"},reference:{key:"cuisine",value:"vietnamese"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/vietnamese/Phở Hòa":{name:"Phở Hòa",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/phohoanoodlesoup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55629932",amenity:"restaurant",cuisine:"vietnamese;noodle"},addTags:{alt_name:"Phở Hoà","alt_name:en":"Pho Hoa","alt_name:vi":"Phở Hoà",amenity:"restaurant",brand:"Phở Hòa","brand:wikidata":"Q55629932","brand:wikipedia":"en:Phở Hòa",cuisine:"vietnamese;noodle",name:"Phở Hòa","name:vi":"Phở Hòa"},reference:{key:"cuisine",value:"vietnamese"},countryCodes:["ca","id","kr","ms","ph","tw","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pieology Pizzeria":{name:"Pieology Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pieology/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60746053",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pieology Pizzeria","brand:wikidata":"Q60746053","brand:wikipedia":"en:Pieology",cuisine:"pizza",name:"Pieology Pizzeria"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["pieology"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Delight":{name:"Pizza Delight",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q3389502",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Delight","brand:wikidata":"Q3389502","brand:wikipedia":"en:Pizza Delight",cuisine:"pizza",name:"Pizza Delight"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Factory":{name:"Pizza Factory",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzafactoryinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q39054369",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Factory","brand:wikidata":"Q39054369","brand:wikipedia":"en:Pizza Factory",cuisine:"pizza",name:"Pizza Factory"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Hut":{name:"Pizza Hut",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Ranch":{name:"Pizza Ranch",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaRanchRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199978",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Ranch","brand:wikidata":"Q7199978","brand:wikipedia":"en:Pizza Ranch",cuisine:"pizza",name:"Pizza Ranch"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/PizzaExpress":{name:"PizzaExpress",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzaexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q662845",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"PizzaExpress","brand:wikidata":"Q662845","brand:wikipedia":"en:PizzaExpress",cuisine:"pizza",name:"PizzaExpress"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Poivre Rouge":{name:"Poivre Rouge",icon:"maki-restaurant",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Restaumarch%C3%A9.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7316076",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Poivre Rouge","brand:wikidata":"Q7316076","brand:wikipedia":"fr:Poivre Rouge (restauration)",cuisine:"french",name:"Poivre Rouge"},reference:{key:"cuisine",value:"french"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Ponderosa Steakhouse":{name:"Ponderosa Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ponbonsteakhouses/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64038204",amenity:"restaurant",cuisine:"american;steak;buffet"},addTags:{amenity:"restaurant",brand:"Ponderosa Steakhouse","brand:wikidata":"Q64038204",cuisine:"american;steak;buffet",name:"Ponderosa Steakhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["ae","eg","qa","tw","us"],terms:["ponderosa"],matchScore:2,suggestion:true},"amenity/restaurant/italian/Prezzo":{name:"Prezzo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/loveprezzo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242489",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Prezzo","brand:wikidata":"Q7242489","brand:wikipedia":"en:Prezzo (restaurant)",cuisine:"italian",name:"Prezzo"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Quaker Steak & Lube":{name:"Quaker Steak & Lube",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/TheOfficialQSL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7268570",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Quaker Steak & Lube","brand:wikidata":"Q7268570","brand:wikipedia":"en:Quaker Steak & Lube",cuisine:"wings",name:"Quaker Steak & Lube"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Rainforest Cafe":{name:"Rainforest Cafe",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/officialrainforestcafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3391111",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Rainforest Cafe","brand:wikidata":"Q3391111","brand:wikipedia":"en:Rainforest Cafe",cuisine:"american",name:"Rainforest Cafe"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Red Lobster":{name:"Red Lobster",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/redlobster/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q846301",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Red Lobster","brand:wikidata":"Q846301","brand:wikipedia":"en:Red Lobster",cuisine:"seafood",name:"Red Lobster"},reference:{key:"cuisine",value:"seafood"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Red Robin":{name:"Red Robin",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RedRobin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7304886",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Red Robin","brand:wikidata":"Q7304886","brand:wikipedia":"en:Red Robin",cuisine:"burger",name:"Red Robin",official_name:"Red Robin Gourmet Burgers and Brews"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Romano's Macaroni Grill":{name:"Romano's Macaroni Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RomanosMacaroniGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7362714",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Romano's Macaroni Grill","brand:wikidata":"Q7362714","brand:wikipedia":"en:Romano's Macaroni Grill",cuisine:"italian",name:"Romano's Macaroni Grill"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Round Table Pizza":{name:"Round Table Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/RoundTablePizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7371139",amenity:"restaurant",cuisine:"pizza"},addTags:{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"},countryCodes:["us"],terms:["round table"],matchScore:2,suggestion:true},"amenity/restaurant/american/Ruby Tuesday":{name:"Ruby Tuesday",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/rubytuesday/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7376400",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Ruby Tuesday","brand:wikidata":"Q7376400","brand:wikipedia":"en:Ruby Tuesday (restaurant)",cuisine:"american",name:"Ruby Tuesday"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Ruth's Chris Steak House":{name:"Ruth's Chris Steak House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RuthsChrisSteakHouseNational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7382829",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Ruth's Chris Steak House","brand:wikidata":"Q7382829","brand:wikipedia":"en:Ruth's Chris Steak House",cuisine:"american",name:"Ruth's Chris Steak House"},reference:{key:"cuisine",value:"american"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Saltgrass Steak House":{name:"Saltgrass Steak House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/saltgrass/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7406113",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Saltgrass Steak House","brand:wikidata":"Q7406113","brand:wikipedia":"en:Saltgrass Steak House",cuisine:"steak_house",name:"Saltgrass Steak House"},countryCodes:["us"],terms:["saltgrass"],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Sausalitos":{name:"Sausalitos",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/sausalitos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2227783",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Sausalitos","brand:wikidata":"Q2227783","brand:wikipedia":"de:Sausalitos",cuisine:"mexican",name:"Sausalitos"},reference:{key:"cuisine",value:"mexican"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Scores":{name:"Scores",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/RestaurantScores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3476059",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Scores","brand:wikidata":"Q3476059","brand:wikipedia":"fr:Scores",cuisine:"chicken;barbecue",name:"Scores"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Shakey's":{name:"Shakey's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/shakeyspizzaparlorusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6134929",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Shakey's","brand:wikidata":"Q6134929","brand:wikipedia":"en:Shakey's Pizza",cuisine:"pizza",name:"Shakey's"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Shari's":{name:"Shari's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SharisPies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7489612",amenity:"restaurant",cuisine:"american"},addTags:{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"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Shingle Inn":{name:"Shingle Inn",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/683845754704670721/6OMM2ZND_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7497463",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Shingle Inn","brand:wikidata":"Q7497463","brand:wikipedia":"en:Shingle Inn",cuisine:"bakery",name:"Shingle Inn"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Shoney's":{name:"Shoney's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/shoneys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500392",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Shoney's","brand:wikidata":"Q7500392","brand:wikipedia":"en:Shoney's",cuisine:"american",name:"Shoney's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Sizzler":{name:"Sizzler",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/sizzler/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1848822",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Sizzler","brand:wikidata":"Q1848822","brand:wikipedia":"en:Sizzler",cuisine:"steak_house",name:"Sizzler"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Skyline Chili":{name:"Skyline Chili",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SkylineChili/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151224",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Skyline Chili","brand:wikidata":"Q151224","brand:wikipedia":"en:Skyline Chili",cuisine:"chili",name:"Skyline Chili",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Smitty's":{name:"Smitty's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SmittysRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7545728",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Smitty's","brand:wikidata":"Q7545728","brand:wikipedia":"en:Smitty's",cuisine:"pancake",name:"Smitty's"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Snappy Tomato Pizza":{name:"Snappy Tomato Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/SnappyTomatoPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7547352",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Snappy Tomato Pizza","brand:wikidata":"Q7547352","brand:wikipedia":"en:Snappy Tomato Pizza",cuisine:"pizza",name:"Snappy Tomato Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Sonny's BBQ":{name:"Sonny's BBQ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/sonnysbbq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7561989",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Sonny's BBQ","brand:wikidata":"Q7561989","brand:wikipedia":"en:Sonny's BBQ",cuisine:"bbq",name:"Sonny's BBQ"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Spudbar":{name:"Spudbar",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SpudbarHQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19589778",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Spudbar","brand:wikidata":"Q19589778","brand:wikipedia":"en:Spudbar",cuisine:"baked_potato",name:"Spudbar"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Spur":{name:"Spur",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SpurSteakRanches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7581546",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Spur","brand:wikidata":"Q7581546","brand:wikipedia":"en:Spur Steak Ranches",cuisine:"steak_house",name:"Spur"},countryCodes:["za"],terms:["spur steak ranches"],matchScore:2,suggestion:true},"amenity/restaurant/St-Hubert":{name:"St-Hubert",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/sthubert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3495225",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"St-Hubert","brand:wikidata":"Q3495225","brand:wikipedia":"fr:St-Hubert (restaurant)",cuisine:"chicken;barbecue",name:"St-Hubert"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/St. Louis Bar & Grill":{name:"St. Louis Bar & Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/stlouisbarandgrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65567668",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"St. Louis Bar & Grill","brand:wikidata":"Q65567668",cuisine:"chicken",name:"St. Louis Bar & Grill"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Stoney River":{name:"Stoney River",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1050121272938643465/QjAWyNTq_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7619422",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Stoney River","brand:wikidata":"Q7619422","brand:wikipedia":"en:Stoney River Legendary Steaks",cuisine:"steak_house",name:"Stoney River"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Sunset Grill":{name:"Sunset Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SunsetGrillBreakfast/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62112489",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q62112489","brand:wikipedia":"en:Sunset Grill (Canadian restaurant chain)",cuisine:"american",name:"Sunset Grill"},reference:{key:"cuisine",value:"american"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Swiss Chalet":{name:"Swiss Chalet",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SwissChalet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2372909",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",cuisine:"chicken",name:"Swiss Chalet"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/TGI Friday's":{name:"TGI Friday's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/TGIFridays/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1524184",amenity:"restaurant",cuisine:"american"},addTags:{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"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Ted's Montana Grill":{name:"Ted's Montana Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/tedsmontanagrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16953170",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Ted's Montana Grill","brand:wikidata":"Q16953170","brand:wikipedia":"en:Ted's Montana Grill",cuisine:"american",name:"Ted's Montana Grill"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Texas Roadhouse":{name:"Texas Roadhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/texasroadhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7707945",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/The Cheesecake Factory":{name:"The Cheesecake Factory",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/thecheesecakefactory/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1045842",amenity:"restaurant",cuisine:"american"},addTags:{alt_name:"Cheesecake Factory",amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"The Cheesecake Factory"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/The Counter":{name:"The Counter",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/969352718669160449/M6JdmT69_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7727763",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"The Counter","brand:wikidata":"Q7727763","brand:wikipedia":"en:The Counter",cuisine:"burger",name:"The Counter"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/The Keg":{name:"The Keg",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/thekegsteakhouseandbar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7744066",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"},countryCodes:["ca","us"],terms:["keg"],matchScore:2,suggestion:true},"amenity/restaurant/The Melting Pot":{name:"The Melting Pot",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/themeltingpotrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7750948",amenity:"restaurant"},addTags:{alt_name:"Melting Pot",amenity:"restaurant",brand:"The Melting Pot","brand:wikidata":"Q7750948","brand:wikipedia":"en:The Melting Pot (restaurant)",cuisine:"fondue",name:"The Melting Pot"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/The Original Pancake House":{name:"The Original Pancake House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ophbaltimore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7755384",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"The Original Pancake House","brand:wikidata":"Q7755384","brand:wikipedia":"en:The Original Pancake House",cuisine:"breakfast;pancake",name:"The Original Pancake House"},countryCodes:["jp","kr","us"],terms:["original pancake house"],matchScore:2,suggestion:true},"amenity/restaurant/Toby Carvery":{name:"Toby Carvery",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1212682364406640642/KV1dX6Db_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7811777",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",cuisine:"british",name:"Toby Carvery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Toks":{name:"Toks",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/ToksMx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48835586",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"},reference:{key:"cuisine",value:"mexican"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Tony Roma's":{name:"Tony Roma's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/TonyRomas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2213883",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"},terms:["tony roma"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Topper's Pizza (Canada)":{name:"Topper's Pizza (Canada)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/topperscanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7825105",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Topper's Pizza","brand:wikidata":"Q7825105","brand:wikipedia":"en:Topper's Pizza (Canadian restaurant)",cuisine:"pizza",name:"Topper's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Toppers Pizza (USA)":{name:"Toppers Pizza (USA)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/ToppersRocks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7825113",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Toppers Pizza","brand:wikidata":"Q7825113","brand:wikipedia":"en:Toppers Pizza (American restaurant)",cuisine:"pizza",name:"Toppers Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Unos":{name:"Unos",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/UnoPizzeriaandGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7897209",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Unos","brand:wikidata":"Q7897209","brand:wikipedia":"en:Uno Pizzeria & Grill",cuisine:"pizza",name:"Unos"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Vapiano":{name:"Vapiano",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Vapiano/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q506252",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"},reference:{key:"cuisine",value:"italian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Village Inn":{name:"Village Inn",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/villageinnrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7930659",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Vips (Asia)":{name:"Vips (Asia)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ivips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12599540",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q12599540","brand:wikipedia":"ko:빕스",cuisine:"salad;steak_house",name:"Vips"},countryCodes:["cn","kr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Vips (Mexico)":{name:"Vips (Mexico)",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/VIPSMX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48783378",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q48783378","brand:wikipedia":"es:Vips",cuisine:"mexican",name:"Vips"},reference:{key:"cuisine",value:"mexican"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Vips (Spain)":{name:"Vips (Spain)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/vips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66087862",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q66087862",cuisine:"international",name:"Vips"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Waffle House":{name:"Waffle House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/WaffleHouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1701206",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House",opening_hours:"24/7"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/Wagamama":{name:"Wagamama",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/wagamama.spain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q503715",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"},reference:{key:"cuisine",value:"asian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Wasabi":{name:"Wasabi",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/WasabiUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23891278",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"},reference:{key:"cuisine",value:"japanese"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Western Sizzlin'":{name:"Western Sizzlin'",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/WesternSizzlin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7988295",amenity:"restaurant",cuisine:"american;steak"},addTags:{amenity:"restaurant",brand:"Western Sizzlin'","brand:wikidata":"Q7988295","brand:wikipedia":"en:Western Sizzlin'",cuisine:"american;steak",name:"Western Sizzlin'"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:["western sizzling"],matchScore:2,suggestion:true},"amenity/restaurant/White Spot":{name:"White Spot",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/whitespot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7995414",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Wild Wing":{name:"Wild Wing",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/WildWingRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8000869",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Wild Wing","brand:wikidata":"Q8000869","brand:wikipedia":"en:Wild Wing Restaurants",cuisine:"chicken",name:"Wild Wing"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/sushi/YO! Sushi":{name:"YO! Sushi",icon:"temaki-temaki",imageURL:"https://graph.facebook.com/YOSushi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3105441",amenity:"restaurant",cuisine:"sushi"},addTags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"},reference:{key:"cuisine",value:"sushi"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Yard House":{name:"Yard House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/yardhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21189156",amenity:"restaurant",cuisine:"american"},addTags:{alcohol:"yes",amenity:"restaurant",brand:"Yard House","brand:wikidata":"Q21189156","brand:wikipedia":"en:Yard House",cuisine:"american",name:"Yard House"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Zambrero":{name:"Zambrero",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/zambrero/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18636431",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Zambrero","brand:wikidata":"Q18636431","brand:wikipedia":"en:Zambrero",cuisine:"mexican",name:"Zambrero"},reference:{key:"cuisine",value:"mexican"},countryCodes:["au","ie","nl","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Zizzi":{name:"Zizzi",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/wearezizzi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8072944",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/bd's Mongolian Grill":{name:"bd's Mongolian Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bdsMongolianGrillVerifiedPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69890408",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"bd's Mongolian Grill","brand:wikidata":"Q69890408",cuisine:"mongolian_bbq",name:"bd's Mongolian Grill"},countryCodes:["mn","us"],terms:["bd mongolian grill"],matchScore:2,suggestion:true},"amenity/restaurant/dean&david":{name:"dean&david",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/deananddavid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66132404",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"dean&david","brand:wikidata":"Q66132404",cuisine:"salad;sandwich",name:"dean&david"},countryCodes:["at","ch","de","lu","qa"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Евразия (Russia)":{name:"Евразия (Russia)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/evrasiakiev/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66087936",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Евразия","brand:wikidata":"Q66087936",cuisine:"international",name:"Евразия"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Евразия (Ukraine)":{name:"Евразия (Ukraine)",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/EvrasiaKiev/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66088028",amenity:"restaurant",cuisine:"western;japanese"},addTags:{amenity:"restaurant",brand:"Євразія","brand:ru":"Евразия","brand:ua":"Євразія","brand:wikidata":"Q66088028",cuisine:"western;japanese",name:"Євразія","name:ru":"Евразия","name:ua":"Євразія"},reference:{key:"cuisine",value:"japanese"},countryCodes:["ua"],terms:["євразія"],matchScore:2,suggestion:true},"amenity/restaurant/sushi/Планета Суши":{name:"Планета Суши",icon:"temaki-temaki",imageURL:"https://graph.facebook.com/sushiplanet.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62739250",amenity:"restaurant",cuisine:"sushi"},addTags:{amenity:"restaurant",brand:"Планета Суши","brand:wikidata":"Q62739250",cuisine:"sushi",name:"Планета Суши","name:en":"Planet Sushi"},reference:{key:"cuisine",value:"sushi"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Тануки":{name:"Тануки",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/tanuki.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62758690",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"Тануки","brand:wikidata":"Q62758690",cuisine:"japanese",name:"Тануки","name:en":"Tanuki","name:ru":"Тануки"},reference:{key:"cuisine",value:"japanese"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Якитория":{name:"Якитория",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/yakitoriyacafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66088063",amenity:"restaurant",cuisine:"japanese;international"},addTags:{amenity:"restaurant",brand:"Якитория","brand:wikidata":"Q66088063",cuisine:"japanese;international",name:"Якитория"},reference:{key:"cuisine",value:"japanese"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/בורגר סאלון":{name:"בורגר סאלון",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/BurgerSaloon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760057",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"בורגר סאלון","brand:en":"Burger Saloon","brand:he":"בורגר סאלון","brand:wikidata":"Q64760057",cuisine:"burger",name:"בורגר סאלון","name:en":"Burger Saloon","name:he":"בורגר סאלון"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/あさくま":{name:"あさくま",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ASAKUMA.JP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11257174",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"あさくま","brand:en":"Asakuma","brand:ja":"あさくま","brand:wikidata":"Q11257174","brand:wikipedia":"ja:あさくま",cuisine:"steak_house",name:"あさくま","name:en":"Asakuma","name:ja":"あさくま"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/いきなり!ステーキ":{name:"いきなり!ステーキ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ikinari.steak/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21652405",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"いきなり!ステーキ","brand:en":"Ikinari Steak","brand:ja":"いきなり!ステーキ","brand:wikidata":"Q21652405","brand:wikipedia":"ja:いきなり!ステーキ",cuisine:"steak_house",name:"いきなり!ステーキ","name:en":"Ikinari Steak","name:ja":"いきなり!ステーキ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/とんでん":{name:"とんでん",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/tonden.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11273585",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"とんでん","brand:en":"Tonden","brand:ja":"とんでん","brand:wikidata":"Q11273585","brand:wikipedia":"jp:とんでん",name:"とんでん","name:en":"Tonden","name:ja":"とんでん"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/はなまるうどん":{name:"はなまるうどん",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/hanamaruudon.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11275674",amenity:"restaurant",cuisine:"japanese;udon"},addTags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"Hanamarūdon","brand:ja":"はなまるうどん","brand:wikidata":"Q11275674","brand:wikipedia":"ja:はなまるうどん",cuisine:"japanese;udon",name:"はなまるうどん","name:en":"Hanamarūdon","name:ja":"はなまるうどん"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/びっくりドンキー":{name:"びっくりドンキー",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/372270522955811/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11276815",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"びっくりドンキー","brand:en":"Bikkuri Donkey","brand:ja":"びっくりドンキー","brand:wikidata":"Q11276815","brand:wikipedia":"ja:びっくりドンキー",cuisine:"burger",name:"びっくりドンキー","name:en":"Bikkuri Donkey","name:ja":"びっくりドンキー"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/やよい軒":{name:"やよい軒",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/yayoiphilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11280577",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"やよい軒","brand:en":"Yayoiken","brand:ja":"やよい軒","brand:wikidata":"Q11280577","brand:wikipedia":"ja:やよい軒",cuisine:"japanese",name:"やよい軒","name:en":"Yayoiken","name:ja":"やよい軒"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/カプリチョーザ":{name:"カプリチョーザ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/capricciosa.restaurant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294660",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"カプリチョーザ","brand:en":"Capricciosa","brand:ja":"カプリチョーザ","brand:wikidata":"Q11294660","brand:wikipedia":"ja:カプリチョーザ",cuisine:"italian",name:"カプリチョーザ","name:en":"Capricciosa","name:ja":"カプリチョーザ"},reference:{key:"cuisine",value:"italian"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/ココス":{name:"ココス",icon:"maki-restaurant-noodle",imageURL:"https://pbs.twimg.com/profile_images/875584429069959169/5l38DoS7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11301951",amenity:"restaurant",cuisine:"western;japanese"},addTags:{amenity:"restaurant",brand:"ココス","brand:en":"Coco's","brand:ja":"ココス","brand:wikidata":"Q11301951","brand:wikipedia":"ja:ココスジャパン",cuisine:"western;japanese",name:"ココス","name:en":"Coco's","name:ja":"ココス"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/サイゼリヤ":{name:"サイゼリヤ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Saizeriya4Fun/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q886564",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"サイゼリヤ","brand:en":"Saizeriya","brand:ja":"サイゼリヤ","brand:wikidata":"Q886564","brand:wikipedia":"en:Saizeriya",cuisine:"italian",name:"サイゼリヤ","name:en":"Saizeriya","name:ja":"サイゼリヤ"},reference:{key:"cuisine",value:"italian"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ジョイフル":{name:"ジョイフル",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/116763348378560/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11310517",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ジョイフル","brand:en":"Joyfull","brand:ja":"ジョイフル","brand:wikidata":"Q11310517","brand:wikipedia":"ja:ジョイフル",cuisine:"western",name:"ジョイフル","name:en":"Joyfull","name:ja":"ジョイフル"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/ジョナサン":{name:"ジョナサン",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/jonathans.skylark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11310628",amenity:"restaurant",cuisine:"italian;japanese"},addTags:{amenity:"restaurant",brand:"ジョナサン","brand:en":"Jonathan's","brand:ja":"ジョナサン","brand:wikidata":"Q11310628","brand:wikipedia":"ja:ジョナサン (ファミリーレストラン)",cuisine:"italian;japanese",name:"ジョナサン","name:en":"Jonathan's","name:ja":"ジョナサン"},reference:{key:"cuisine",value:"italian"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ジョリーパスタ":{name:"ジョリーパスタ",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q10852718",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ジョリーパスタ","brand:en":"Jolly-Pasta","brand:ja":"ジョリーパスタ","brand:wikidata":"Q10852718","brand:wikipedia":"ja:ジョリーパスタ",cuisine:"pasta",name:"ジョリーパスタ","name:en":"Jolly-Pasta","name:ja":"ジョリーパスタ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ステーキガスト":{name:"ステーキガスト",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11253593",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ステーキガスト","brand:en":"Skylark","brand:ja":"ステーキガスト","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"steak",name:"ステーキガスト","name:en":"Skylark","name:ja":"ステーキガスト"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/デニーズ":{name:"デニーズ",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/dennys.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11320661",amenity:"restaurant",cuisine:"western;japanese"},addTags:{amenity:"restaurant",brand:"デニーズ","brand:en":"Denny's","brand:ja":"デニーズ","brand:wikidata":"Q11320661","brand:wikipedia":"ja:デニーズ (日本)",cuisine:"western;japanese",name:"デニーズ","name:en":"Denny's","name:ja":"デニーズ"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/chinese/バーミヤン":{name:"バーミヤン",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/113010145424150/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11328598",amenity:"restaurant",cuisine:"chinese"},addTags:{amenity:"restaurant",brand:"バーミヤン","brand:en":"Bamiyan","brand:ja":"バーミヤン","brand:wikidata":"Q11328598","brand:wikipedia":"ja:バーミヤン (レストランチェーン)",cuisine:"chinese",name:"バーミヤン","name:en":"Bamiyan","name:ja":"バーミヤン"},reference:{key:"cuisine",value:"chinese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/ビッグボーイ":{name:"ビッグボーイ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bigboyrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4386779",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"ビッグボーイ","brand:en":"Big Boy Restaurants","brand:ja":"ビッグボーイ","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"ビッグボーイ","name:en":"Big Boy Restaurants","name:ja":"ビッグボーイ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/リンガーハット":{name:"リンガーハット",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/ringerhut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7334856",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"リンガーハット","brand:en":"Ringer Hut","brand:ja":"リンガーハット","brand:wikidata":"Q7334856","brand:wikipedia":"en:Ringer Hut",cuisine:"japanese",name:"リンガーハット","name:en":"Ringer Hut","name:ja":"リンガーハット"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/ロイヤルホスト":{name:"ロイヤルホスト",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/577770399068313/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11120884",amenity:"restaurant",cuisine:"japanese;italian;french"},addTags:{amenity:"restaurant",brand:"ロイヤルホスト","brand:en":"Royal Host","brand:ja":"ロイヤルホスト","brand:wikidata":"Q11120884","brand:wikipedia":"ja:ロイヤルホスト",cuisine:"japanese;italian;french",name:"ロイヤルホスト","name:en":"Royal Host","name:ja":"ロイヤルホスト"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/noodle/丸亀製麺":{name:"丸亀製麺",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/marugame/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10877253",amenity:"restaurant",cuisine:"noodle"},addTags:{amenity:"restaurant",brand:"丸亀製麺","brand:en":"Marugame Seimen","brand:ja":"丸亀製麺","brand:wikidata":"Q10877253","brand:wikipedia":"ja:丸亀製麺",cuisine:"noodle",name:"丸亀製麺","name:en":"Marugame Seimen","name:ja":"丸亀製麺"},reference:{key:"cuisine",value:"noodle"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/chinese/八方雲集":{name:"八方雲集",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/8wayTW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28417381",amenity:"restaurant",cuisine:"chinese"},addTags:{amenity:"restaurant",brand:"八方雲集","brand:en":"Eight Way","brand:wikidata":"Q28417381","brand:wikipedia":"zh:八方雲集","brand:zh":"八方雲集",cuisine:"chinese",name:"八方雲集","name:en":"Eight Way","name:zh":"八方雲集"},reference:{key:"cuisine",value:"chinese"},countryCodes:["cn","tw"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/和食さと":{name:"和食さと",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/satorsgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11304897",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"和食さと","brand:en":"Washoku Sato","brand:ja":"和食さと","brand:wikidata":"Q11304897","brand:wikipedia":"ja:SRSホールディングス",cuisine:"japanese",name:"和食さと","name:en":"Washoku Sato","name:ja":"和食さと"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:["さと"],matchScore:2,suggestion:true},"amenity/restaurant/japanese/夢庵":{name:"夢庵",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{"brand:wikidata":"Q11253593",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"夢庵","brand:en":"Yumean","brand:ja":"夢庵","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"japanese",name:"夢庵","name:en":"Yumean","name:ja":"夢庵"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/大戸屋":{name:"大戸屋",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/ootoya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11435522",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"大戸屋","brand:en":"Ootoya","brand:ja":"大戸屋","brand:wikidata":"Q11435522","brand:wikipedia":"ja:大戸屋ホールディングス",cuisine:"japanese",name:"大戸屋","name:en":"Ootoya","name:ja":"大戸屋"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/大阪王将":{name:"大阪王将",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/osakaohsho/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48743717",amenity:"restaurant",cuisine:"japanese;chinese"},addTags:{amenity:"restaurant",brand:"大阪王将","brand:en":"Osaka Ohsho","brand:ja":"大阪王将","brand:wikidata":"Q48743717","brand:wikipedia":"ja:大阪王将",cuisine:"japanese;chinese",name:"大阪王将","name:en":"Osaka Ohsho","name:ja":"大阪王将"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/天下一品":{name:"天下一品",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/157798570902833/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11442172",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"天下一品","brand:en":"Tenkaippin","brand:wikidata":"Q11442172","brand:wikipedia":"en:Tenkaippin",cuisine:"ramen",name:"天下一品","name:en":"Tenkaippin"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/安楽亭":{name:"安楽亭",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11450866",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"安楽亭","brand:en":"Anrakutei","brand:wikidata":"Q11450866","brand:wikipedia":"ja:安楽亭",cuisine:"barbecue",name:"安楽亭","name:en":"Anrakutei"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/木曽路":{name:"木曽路",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{"brand:wikidata":"Q11518589",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"木曽路","brand:en":"Kisoji","brand:jp":"木曽路","brand:wikidata":"Q11518589","brand:wikipedia":"ja:木曽路 (企業)",cuisine:"japanese",name:"木曽路","name:en":"Kisoji","name:jp":"木曽路"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/chinese/海底捞火锅":{name:"海底捞火锅",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/HaiDiLaoHotPot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5638920",amenity:"restaurant",cuisine:"chinese"},addTags:{amenity:"restaurant",brand:"海底捞火锅","brand:en":"Hai Di Lao Hot Pot","brand:wikidata":"Q5638920","brand:wikipedia":"zh:海底捞",cuisine:"chinese",name:"海底捞火锅","name:en":"Hai Di Lao Hot Pot"},reference:{key:"cuisine",value:"chinese"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/牛角":{name:"牛角",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q11349387",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"牛角","brand:en":"Gyū-Kaku","brand:wikidata":"Q11349387","brand:wikipedia":"en:Gyu-Kaku",cuisine:"barbecue",name:"牛角","name:en":"Gyū-Kaku"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/華屋与兵衛":{name:"華屋与兵衛",icon:"maki-restaurant-noodle",imageURL:"https://pbs.twimg.com/profile_images/1199220209174773760/c_VfagtA_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11620063",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"華屋与兵衛","brand:en":"Hanaya Yohei","brand:ja":"華屋与兵衛","brand:wikidata":"Q11620063","brand:wikipedia":"ja:華屋与兵衛 (レストラン)",cuisine:"japanese",name:"華屋与兵衛","name:en":"Hanaya Yohei","name:ja":"華屋与兵衛"},reference:{key:"cuisine",value:"japanese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/chinese/餃子の王将":{name:"餃子の王将",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/ohshosaiyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11666805",amenity:"restaurant",cuisine:"chinese;gyoza"},addTags:{amenity:"restaurant",brand:"餃子の王将","brand:en":"Gyoza no Ohsho","brand:ja":"餃子の王将","brand:wikidata":"Q11666805","brand:wikipedia":"en:Gyoza no Ohsho",cuisine:"chinese;gyoza",name:"餃子の王将","name:en":"Gyoza no Ohsho","name:ja":"餃子の王将"},reference:{key:"cuisine",value:"chinese"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/빕스":{name:"빕스",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ivips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12599540",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"빕스","brand:en":"Vips","brand:ko":"빕스","brand:wikidata":"Q12599540","brand:wikipedia":"ko:빕스",cuisine:"salad;steak_house",name:"빕스","name:en":"Vips","name:ko":"빕스"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/school/Imagine Schools":{name:"Imagine Schools",icon:"temaki-school",imageURL:"https://graph.facebook.com/imaginecharters/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q6002737",amenity:"school"},addTags:{amenity:"school",brand:"Imagine Schools","brand:wikidata":"Q6002737","brand:wikipedia":"en:Imagine Schools",name:"Imagine Schools","operator:type":"private_non_profit"},countryCodes:["us"],terms:["imagine","imagine school"],matchScore:2,suggestion:true},"amenity/school/KIPP":{name:"KIPP",icon:"temaki-school",imageURL:"https://graph.facebook.com/KIPPFoundation/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q6423304",amenity:"school"},addTags:{amenity:"school",brand:"KIPP","brand:wikidata":"Q6423304","brand:wikipedia":"en:KIPP (organization)",name:"KIPP",official_name:"Knowledge Is Power Program","operator:type":"private_non_profit"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/school/Success Academy":{name:"Success Academy",icon:"temaki-school",imageURL:"https://graph.facebook.com/SuccessAcademies/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q14707388",amenity:"school"},addTags:{amenity:"school",brand:"Success Academy","brand:wikidata":"Q14707388","brand:wikipedia":"en:Success Academy Charter Schools",name:"Success Academy","operator:type":"private_non_profit"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/social_centre/American Legion Hall":{name:"American Legion Hall",icon:"fas-handshake",imageURL:"https://graph.facebook.com/americanlegionhq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q468865",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"American Legion","brand:wikidata":"Q468865","brand:wikipedia":"en:American Legion",name:"American Legion Hall","social_centre:for":"veterans"},countryCodes:["us"],terms:["american legion"],matchScore:2,suggestion:true},"amenity/social_centre/Eagles Lodge":{name:"Eagles Lodge",icon:"fas-handshake",imageURL:"https://graph.facebook.com/foegrandaerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5493810",amenity:"social_centre"},addTags:{alt_name:"Aeries Lodge",amenity:"social_centre",brand:"Fraternal Order of Eagles","brand:wikidata":"Q5493810","brand:wikipedia":"en:Fraternal Order of Eagles",name:"Eagles Lodge",official_name:"Fraternal Order of Eagles",short_name:"FOE"},countryCodes:["us"],terms:["aeries","eagles"],matchScore:2,suggestion:true},"amenity/social_centre/Elks Lodge":{name:"Elks Lodge",icon:"fas-handshake",imageURL:"https://graph.facebook.com/bpoeusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2895789",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Benevolent and Protective Order of Elks","brand:wikidata":"Q2895789","brand:wikipedia":"en:Benevolent and Protective Order of Elks",name:"Elks Lodge",official_name:"Benevolent and Protective Order of Elks",short_name:"BPOE"},countryCodes:["us"],terms:["elks"],matchScore:2,suggestion:true},"amenity/social_centre/Lions Clubs International":{name:"Lions Clubs International",icon:"fas-handshake",imageURL:"https://graph.facebook.com/lionsclubs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q270029",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Lions Clubs International","brand:wikidata":"Q270029","brand:wikipedia":"en:Lions Clubs International",name:"Lions Clubs International"},terms:["lions club","lions club international","lions clubs"],matchScore:2,suggestion:true},"amenity/social_centre/Moose Lodge":{name:"Moose Lodge",icon:"fas-handshake",imageURL:"https://graph.facebook.com/heardofmoose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6908585",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Loyal Order of Moose","brand:wikidata":"Q6908585","brand:wikipedia":"en:Loyal Order of Moose",name:"Moose Lodge",official_name:"Loyal Order of Moose"},countryCodes:["bm","ca","us"],terms:["moose"],matchScore:2,suggestion:true},"amenity/social_centre/Odd Fellows Hall":{name:"Odd Fellows Hall",icon:"fas-handshake",imageURL:"https://graph.facebook.com/IOOFSGL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425508",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Independent Order of Odd Fellows","brand:wikidata":"Q1425508","brand:wikipedia":"en:Independent Order of Odd Fellows",name:"Odd Fellows Hall",official_name:"Independent Order of Odd Fellows",short_name:"IOOF"},terms:["odd fellow","odd fellows"],matchScore:2,suggestion:true},"amenity/social_centre/Orioles Nest":{name:"Orioles Nest",icon:"fas-handshake",imageURL:"https://graph.facebook.com/146663135430661/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5493805",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Fraternal Order Orioles","brand:wikidata":"Q5493805","brand:wikipedia":"en:Fraternal Order Orioles",name:"Orioles Nest",official_name:"Fraternal Order Orioles",short_name:"FOO"},countryCodes:["us"],terms:["fraternal order of orioles","oriole nest","orioles"],matchScore:2,suggestion:true},"amenity/social_centre/Royal Canadian Legion Hall":{name:"Royal Canadian Legion Hall",icon:"fas-handshake",imageURL:"https://graph.facebook.com/CanadianLegion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3270231",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Royal Canadian Legion","brand:wikidata":"Q3270231","brand:wikipedia":"en:Royal Canadian Legion",name:"Royal Canadian Legion Hall",short_name:"RCL"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/social_centre/VFW Post":{name:"VFW Post",icon:"fas-handshake",imageURL:"https://graph.facebook.com/VFWFans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3556413",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Veterans of Foreign Wars of the United States","brand:wikidata":"Q3556413","brand:wikipedia":"en:Veterans of Foreign Wars",name:"VFW Post","name:en":"VFW Post",official_name:"Veterans of Foreign Wars of the United States",short_name:"VFW","social_centre:for":"veterans"},countryCodes:["de","jp","kr","ph","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/social_facility/Boys & Girls Club":{name:"Boys & Girls Club",icon:"temaki-social_facility",imageURL:"https://graph.facebook.com/bgca.clubs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2923055",amenity:"social_facility"},addTags:{amenity:"social_facility",brand:"Boys & Girls Club","brand:wikidata":"Q2923055","brand:wikipedia":"en:Boys & Girls Clubs of America",name:"Boys & Girls Club",social_facility:"outreach","social_facility:for":"children"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/social_facility/ONCE":{name:"ONCE",icon:"temaki-social_facility",imageURL:"https://graph.facebook.com/ONCE.org/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1750397",amenity:"social_facility"},addTags:{amenity:"social_facility",brand:"ONCE","brand:wikidata":"Q1750397","brand:wikipedia":"es:Organización Nacional de Ciegos Españoles",name:"ONCE",official_name:"Organización Nacional de Ciegos Españoles",social_facility:"outreach","social_facility:for":"blind"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/social_facility/Vet Center":{name:"Vet Center",icon:"temaki-social_facility",imageURL:"https://graph.facebook.com/VeteransHealth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6580225",amenity:"social_facility"},addTags:{amenity:"social_facility",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"counselling","healthcare:counselling":"psychiatry","healthcare:for":"veterans",name:"Vet Center",social_facility:"healthcare;outreach","social_facility:for":"veterans"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/university/DeVry University":{name:"DeVry University",icon:"maki-college",imageURL:"https://graph.facebook.com/DEVRYUNIVERSITY/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q3298441",amenity:"university"},addTags:{amenity:"university",brand:"DeVry University","brand:wikidata":"Q3298441","brand:wikipedia":"en:DeVry University",name:"DeVry University",short_name:"DeVry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/university/Strayer University":{name:"Strayer University",icon:"maki-college",imageURL:"https://graph.facebook.com/StrayerUniversity/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q7622587",amenity:"university"},addTags:{amenity:"university",brand:"Strayer University","brand:wikidata":"Q7622587","brand:wikipedia":"en:Strayer University",name:"Strayer University",short_name:"Strayer"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/university/University of Phoenix":{name:"University of Phoenix",icon:"maki-college",imageURL:"https://graph.facebook.com/universityofphoenix/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q1889100",amenity:"university"},addTags:{amenity:"university",brand:"University of Phoenix","brand:wikidata":"Q1889100","brand:wikipedia":"en:University of Phoenix",name:"University of Phoenix",short_name:"UOPX"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/Autosur":{name:"Autosur",icon:"maki-car",imageURL:"https://graph.facebook.com/autosurfrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64224807",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"Autosur","brand:wikidata":"Q64224807",name:"Autosur"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/Autovision":{name:"Autovision",icon:"maki-car",imageURL:"https://graph.facebook.com/AutovisionFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64224842",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"Autovision","brand:wikidata":"Q64224842",name:"Autovision"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/Dekra":{name:"Dekra",icon:"maki-car",imageURL:"https://graph.facebook.com/DEKRA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q383711",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"Dekra","brand:wikidata":"Q383711","brand:wikipedia":"en:Dekra",name:"Dekra",official_name:"Dekra Automotive"},countryCodes:["de","fr"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/Sécuritest":{name:"Sécuritest",icon:"maki-car",imageURL:"https://graph.facebook.com/218871841874062/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64224992",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"Sécuritest","brand:wikidata":"Q64224992",name:"Sécuritest"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Hanse":{name:"TÜV Hanse",icon:"maki-car",imageURL:"https://graph.facebook.com/tuevhanse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2463537",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Hanse","brand:wikidata":"Q2463537","brand:wikipedia":"de:TÜV Hanse",name:"TÜV Hanse",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Hessen":{name:"TÜV Hessen",icon:"maki-car",imageURL:"https://graph.facebook.com/Tuev.Hessen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2463542",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Hessen","brand:wikidata":"Q2463542","brand:wikipedia":"de:TÜV Hessen",name:"TÜV Hessen",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Nord":{name:"TÜV Nord",icon:"maki-car",imageURL:"https://graph.facebook.com/tuevnordde/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2463547",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Nord","brand:wikidata":"Q2463547","brand:wikipedia":"de:TÜV Nord",name:"TÜV Nord",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Rheinland":{name:"TÜV Rheinland",icon:"maki-car",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTUEV-Rheinland-Logo2.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q632391",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Rheinland","brand:wikidata":"Q632391","brand:wikipedia":"de:TÜV Rheinland",name:"TÜV Rheinland",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Saarland":{name:"TÜV Saarland",icon:"maki-car",imageURL:"https://graph.facebook.com/TUEVSeminare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q996314",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Saarland","brand:wikidata":"Q996314","brand:wikipedia":"de:TÜV Saarland",name:"TÜV Saarland",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Süd":{name:"TÜV Süd",icon:"maki-car",imageURL:"https://graph.facebook.com/123967834361715/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q880718",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Süd","brand:wikidata":"Q880718","brand:wikipedia":"de:TÜV Süd",name:"TÜV Süd",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vehicle_inspection/TÜV Thüringen":{name:"TÜV Thüringen",icon:"maki-car",imageURL:"https://graph.facebook.com/tuevthueringen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2463551",amenity:"vehicle_inspection"},addTags:{amenity:"vehicle_inspection",brand:"TÜV Thüringen","brand:wikidata":"Q2463551","brand:wikipedia":"de:TÜV Thüringen",name:"TÜV Thüringen",short_name:"TÜV"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup/Amazon Locker":{name:"Amazon Locker",icon:"temaki-vending_lockers",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAmazon%20locker%20logotype.png&width=100",geometry:["point","vertex"],tags:{"brand:wikidata":"Q16974764",amenity:"vending_machine",vending:"parcel_pickup"},addTags:{amenity:"vending_machine",brand:"Amazon Locker","brand:wikidata":"Q16974764","brand:wikipedia":"en:Amazon Locker",name:"Amazon Locker",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/AmeriGas":{name:"AmeriGas",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/AmeriGas/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q23130318",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"AmeriGas","brand:wikidata":"Q23130318","fuel:lpg":"yes",name:"AmeriGas",vending:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/Automat ŚKUP":{name:"Automat ŚKUP",icon:"temaki-vending_tickets",geometry:["point","vertex"],tags:{"brand:wikidata":"Q24945427",amenity:"vending_machine",vending:"public_transport_tickets"},addTags:{amenity:"vending_machine",brand:"Automat ŚKUP","brand:wikidata":"Q24945427","brand:wikipedia":"pl:Śląska Karta Usług Publicznych",name:"Automat ŚKUP",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/BKK-automata":{name:"BKK-automata",icon:"temaki-vending_tickets",imageURL:"https://graph.facebook.com/bkkbudapest/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q608917",amenity:"vending_machine",vending:"public_transport_tickets"},addTags:{amenity:"vending_machine",brand:"BKK-automata","brand:wikidata":"Q608917","brand:wikipedia":"hu:Budapesti Közlekedési Központ",name:"BKK-automata",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/electronics/Best Buy Express":{name:"Best Buy Express",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/bestbuy/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q533415",amenity:"vending_machine",vending:"electronics"},addTags:{amenity:"vending_machine",brand:"Best Buy Express","brand:wikidata":"Q533415",name:"Best Buy Express",vending:"electronics"},reference:{key:"vending",value:"electronics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/Blue Rhino":{name:"Blue Rhino",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/BlueRhino/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q65681213",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"Blue Rhino","brand:wikidata":"Q65681213","fuel:lpg":"yes",name:"Blue Rhino",vending:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/CVS Pharmacy":{name:"CVS Pharmacy",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/CVS/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q2078880",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",name:"CVS Pharmacy",short_name:"CVS",vending:"chemist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/DHL Packstation":{name:"DHL Packstation",icon:"temaki-vending_lockers",geometry:["point","vertex"],tags:{"brand:wikidata":"Q1766703",amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},addTags:{amenity:"vending_machine",brand:"Packstation","brand:wikidata":"Q1766703","brand:wikipedia":"en:Packstation",name:"DHL Packstation",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/DHL Paketbox":{name:"DHL Paketbox",icon:"temaki-vending_machine",geometry:["point","vertex"],tags:{"brand:wikidata":"Q2046604",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"Paketbox","brand:wikidata":"Q2046604","brand:wikipedia":"de:Paketbox",name:"DHL Paketbox",vending:"parcel_mail_in"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/excrement_bags/Dog-Station":{name:"Dog-Station",icon:"temaki-vending_pet_waste",geometry:["point","vertex"],tags:{"brand:wikidata":"Q63720061",amenity:"vending_machine",vending:"excrement_bags"},addTags:{amenity:"vending_machine",brand:"Dog-Station","brand:wikidata":"Q63720061",name:"Dog-Station",vending:"excrement_bags"},reference:{key:"vending",value:"excrement_bags"},countryCodes:["at","de","dk"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ice_cubes/Home City Ice":{name:"Home City Ice",icon:"temaki-vending_ice",imageURL:"https://graph.facebook.com/HomeCityIceJobs/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q5888287",amenity:"vending_machine",vending:"ice_cubes"},addTags:{amenity:"vending_machine",brand:"Home City Ice","brand:wikidata":"Q5888287",name:"Home City Ice",vending:"ice_cubes"},reference:{key:"vending",value:"ice_cubes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/KKM":{name:"KKM",icon:"temaki-vending_tickets",geometry:["point","vertex"],tags:{"brand:wikidata":"Q57515549",amenity:"vending_machine",vending:"public_transport_tickets"},addTags:{amenity:"vending_machine",brand:"KKM","brand:wikidata":"Q57515549",name:"KKM",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup/Ozon Box":{name:"Ozon Box",icon:"temaki-vending_lockers",imageURL:"https://graph.facebook.com/ozon.ru/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q2365235",amenity:"vending_machine",vending:"parcel_pickup"},addTags:{amenity:"vending_machine",brand:"Ozon Box","brand:wikidata":"Q2365235","brand:wikipedia":"ru:Ozon.ru",name:"Ozon Box",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},countryCodes:["ru"],terms:["постамат ozon box"],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/Paczkomat InPost":{name:"Paczkomat InPost",icon:"temaki-vending_lockers",imageURL:"https://graph.facebook.com/paczkomaty/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q3182097",amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},addTags:{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"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parking_tickets/ParkPlus (Calgary)":{name:"ParkPlus (Calgary)",icon:"temaki-vending_tickets",imageURL:"https://graph.facebook.com/CalgaryParkingAuthority/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q63719595",amenity:"vending_machine",vending:"parking_tickets"},addTags:{amenity:"vending_machine",brand:"ParkPlus","brand:wikidata":"Q63719595",name:"ParkPlus",vending:"parking_tickets"},reference:{key:"vending",value:"parking_tickets"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/Redbox":{name:"Redbox",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/redbox/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q7305489",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"Redbox","brand:wikidata":"Q7305489","brand:wikipedia":"en:Redbox",name:"Redbox",vending:"movies"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ice_cubes/Reddy Ice":{name:"Reddy Ice",icon:"temaki-vending_ice",imageURL:"https://graph.facebook.com/RealReddyIce/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q7305666",amenity:"vending_machine",vending:"ice_cubes"},addTags:{amenity:"vending_machine",brand:"Reddy Ice","brand:wikidata":"Q7305666","brand:wikipedia":"en:Reddy Ice",name:"Reddy Ice",vending:"ice_cubes"},reference:{key:"vending",value:"ice_cubes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/excrement_bags/Robidog":{name:"Robidog",icon:"temaki-vending_pet_waste",geometry:["point","vertex"],tags:{"brand:wikidata":"Q2159689",amenity:"vending_machine",vending:"excrement_bags"},addTags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog",vending:"excrement_bags"},reference:{key:"vending",value:"excrement_bags"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/Smartpost":{name:"Smartpost",icon:"temaki-vending_lockers",geometry:["point","vertex"],tags:{"brand:wikidata":"Q7543889",amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},addTags:{amenity:"vending_machine",brand:"Smartpost","brand:wikidata":"Q7543889","brand:wikipedia":"fi:SmartPOST",name:"Smartpost",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/cigarettes/Tobaccoland":{name:"Tobaccoland",icon:"temaki-vending_cigarettes",geometry:["point","vertex"],tags:{"brand:wikidata":"Q1439872",amenity:"vending_machine",vending:"cigarettes"},addTags:{amenity:"vending_machine",brand:"Tobaccoland","brand:wikidata":"Q1439872","brand:wikipedia":"de:Tobaccoland Automatengesellschaft",name:"Tobaccoland",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/コカ・コーラ":{name:"コカ・コーラ",icon:"temaki-vending_cold_drink",imageURL:"https://graph.facebook.com/CocaColaUnitedStates/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q2813",amenity:"vending_machine",vending:"drinks"},addTags:{amenity:"vending_machine",brand:"コカ・コーラ","brand:en":"Coca-Cola","brand:ja":"コカ・コーラ","brand:wikidata":"Q2813","brand:wikipedia":"ja:コカ・コーラ",drink:"cola",name:"コカ・コーラ","name:en":"Coca-Cola","name:ja":"コカ・コーラ",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ポッカサッポロ":{name:"ポッカサッポロ",icon:"temaki-vending_machine",imageURL:"https://pbs.twimg.com/profile_images/937822527543377920/j8-XeRV8_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q7208665",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"ポッカサッポロ","brand:en":"Pokka Sapporo","brand:ja":"ポッカサッポロ","brand:wikidata":"Q7208665","brand:wikipedia":"ja:ポッカサッポロフード&ビバレッジ",name:"ポッカサッポロ","name:en":"Pokka Sapporo","name:ja":"ポッカサッポロ",vending:"water;food"},countryCodes:["jp"],terms:["pokka sapporo"],matchScore:2,suggestion:true},"amenity/veterinary/Banfield Pet Hospital":{name:"Banfield Pet Hospital",icon:"temaki-veterinary_care",imageURL:"https://graph.facebook.com/BanfieldPetHospital/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882416",amenity:"veterinary"},addTags:{amenity:"veterinary",brand:"Banfield Pet Hospital","brand:wikidata":"Q2882416","brand:wikipedia":"en:Banfield Pet Hospital",name:"Banfield Pet Hospital"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/veterinary/VCA Animal Hospital":{name:"VCA Animal Hospital",icon:"temaki-veterinary_care",imageURL:"https://graph.facebook.com/VCAAnimalHospitals/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7906620",amenity:"veterinary"},addTags:{amenity:"veterinary",brand:"VCA Animal Hospital","brand:wikidata":"Q7906620","brand:wikipedia":"en:VCA Animal Hospitals",name:"VCA Animal Hospital"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"craft/cleaning/Molly Maid":{name:"Molly Maid",icon:"temaki-vacuum",imageURL:"https://graph.facebook.com/MollyMaid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6896624",craft:"cleaning"},addTags:{brand:"Molly Maid","brand:wikidata":"Q6896624","brand:wikipedia":"en:Molly Maid",craft:"cleaning",name:"Molly Maid"},countryCodes:["ca","gb","jp","pt","us"],terms:[],matchScore:2,suggestion:true},"craft/plumber/Mr. Rooter":{name:"Mr. Rooter",icon:"temaki-plumber",imageURL:"https://pbs.twimg.com/profile_images/746187320223633408/_TPED5cc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6929145",craft:"plumber"},addTags:{alt_name:"Mister Rooter",brand:"Mr. Rooter","brand:wikidata":"Q6929145","brand:wikipedia":"en:Mr. Rooter",craft:"plumber",name:"Mr. Rooter",official_name:"Mr. Rooter Plumbing"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"craft/signmaker/Fastsigns":{name:"Fastsigns",icon:"temaki-tools",imageURL:"https://graph.facebook.com/FASTSIGNS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5437127",craft:"signmaker"},addTags:{brand:"Fastsigns","brand:wikidata":"Q5437127","brand:wikipedia":"en:Fastsigns",craft:"signmaker",name:"Fastsigns"},countryCodes:["ae","ca","cl","gb","ky","mx","sa","us"],terms:[],matchScore:2,suggestion:true},"craft/window_construction/K par K":{name:"K par K",icon:"temaki-window",imageURL:"https://graph.facebook.com/KparKFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3191596",craft:"window_construction"},addTags:{brand:"K par K","brand:wikidata":"Q3191596","brand:wikipedia":"fr:K par K",craft:"window_construction",name:"K par K"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"healthcare/blood_donation/American Red Cross":{name:"American Red Cross",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/redcross/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q470110",healthcare:"blood_donation"},addTags:{brand:"American Red Cross","brand:wikidata":"Q470110","brand:wikipedia":"en:The American National Red Cross","donation:compensation":"no",healthcare:"blood_donation",name:"American Red Cross",official_name:"The American National Red Cross",short_name:"Red Cross"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"healthcare/blood_donation/Australian Red Cross Blood Service":{name:"Australian Red Cross Blood Service",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/lifebloodau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4824602",healthcare:"blood_donation"},addTags:{brand:"Australian Red Cross Blood Service","brand:wikidata":"Q4824602","brand:wikipedia":"en:Australian Red Cross Blood Service","donation:compensation":"no",healthcare:"blood_donation",name:"Australian Red Cross Blood Service",short_name:"Blood Service"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"healthcare/blood_donation/Thai Red Cross Society":{name:"Thai Red Cross Society",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/ThaiRedCross/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4922087",healthcare:"blood_donation"},addTags:{brand:"Thai Red Cross Society","brand:wikidata":"Q4922087","brand:wikipedia":"en:Thai Red Cross Society","donation:compensation":"no",healthcare:"blood_donation",name:"Thai Red Cross Society",short_name:"Thai Red Cross"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"healthcare/counselling/Jenny Craig":{name:"Jenny Craig",icon:"fas-comments",imageURL:"https://graph.facebook.com/jennycraig/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6179221",healthcare:"counselling"},addTags:{brand:"Jenny Craig","brand:wikidata":"Q6179221","brand:wikipedia":"en:Jenny Craig, Inc.",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"Jenny Craig"},countryCodes:["au","ca","nz","us"],terms:[],matchScore:2,suggestion:true},"healthcare/counselling/WW Studio":{name:"WW Studio",icon:"fas-comments",imageURL:"https://graph.facebook.com/WW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1929466",healthcare:"counselling"},addTags:{alt_name:"Weight Watchers",brand:"WW Studio","brand:wikidata":"Q1929466","brand:wikipedia":"en:WW International",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"WW Studio"},terms:["ww"],matchScore:2,suggestion:true},"landuse/residential/Avalon":{name:"Avalon",icon:"maki-residential-community",imageURL:"https://pbs.twimg.com/profile_images/859879308940193792/us4WbKaN_bigger.jpg",geometry:["area"],tags:{"brand:wikidata":"Q64665938",landuse:"residential"},addTags:{brand:"Avalon","brand:wikidata":"Q64665938",landuse:"residential",name:"Avalon",residential:"apartments"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/bowling_alley/Hollywood Bowl":{name:"Hollywood Bowl",icon:"temaki-bowling",imageURL:"https://graph.facebook.com/hollywoodbowluk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80971952",leisure:"bowling_alley"},addTags:{brand:"Hollywood Bowl","brand:wikidata":"Q80971952","brand:wikipedia":"en:Hollywood Bowl Group",leisure:"bowling_alley",name:"Hollywood Bowl"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"leisure/bowling_alley/Strike Bowling Bar":{name:"Strike Bowling Bar",icon:"temaki-bowling",imageURL:"https://graph.facebook.com/strikebowling/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7623769",leisure:"bowling_alley"},addTags:{brand:"Strike Bowling Bar","brand:wikidata":"Q7623769","brand:wikipedia":"en:Strike Bowling Bar",leisure:"bowling_alley",name:"Strike Bowling Bar"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"leisure/dog_park/Kamp K9":{name:"Kamp K9",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q16988635",leisure:"dog_park"},addTags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",leisure:"dog_park",name:"Kamp K9"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"leisure/escape_game/Escapology":{name:"Escapology",icon:"fas-puzzle-piece",imageURL:"https://graph.facebook.com/EscapologySanDiego/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64137163",leisure:"escape_game"},addTags:{brand:"Escapology","brand:wikidata":"Q64137163",leisure:"escape_game",name:"Escapology"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/24 Hour Fitness":{name:"24 Hour Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/24HourFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4631849",leisure:"fitness_centre"},addTags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Anytime Fitness":{name:"Anytime Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/anytimefitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4778364",leisure:"fitness_centre"},addTags:{brand:"Anytime Fitness","brand:wikidata":"Q4778364","brand:wikipedia":"en:Anytime Fitness",leisure:"fitness_centre",name:"Anytime Fitness"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Basic-Fit":{name:"Basic-Fit",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/BasicFitEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40165577",leisure:"fitness_centre"},addTags:{brand:"Basic-Fit","brand:wikidata":"Q40165577","brand:wikipedia":"nl:Basic-Fit",leisure:"fitness_centre",name:"Basic-Fit"},countryCodes:["be","es","fr","lu","nl"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Blink Fitness":{name:"Blink Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{"brand:wikidata":"Q65621568",leisure:"fitness_centre"},addTags:{brand:"Blink Fitness","brand:wikidata":"Q65621568",leisure:"fitness_centre",name:"Blink Fitness"},countryCodes:["us"],terms:["blink"],matchScore:2,suggestion:true},"leisure/fitness_centre/Clever fit":{name:"Clever fit",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/cleverfit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27909675",leisure:"fitness_centre"},addTags:{brand:"Clever fit","brand:wikidata":"Q27909675","brand:wikipedia":"de:Clever fit",leisure:"fitness_centre",name:"Clever fit"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/CorePower Yoga":{name:"CorePower Yoga",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/CorePowerYoga/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21015663",leisure:"fitness_centre"},addTags:{brand:"CorePower Yoga","brand:wikidata":"Q21015663","brand:wikipedia":"en:CorePower Yoga",leisure:"fitness_centre",name:"CorePower Yoga",sport:"yoga"},countryCodes:["us"],terms:["corepower"],matchScore:2,suggestion:true},"leisure/fitness_centre/Crunch Fitness":{name:"Crunch Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/CRUNCH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5190093",leisure:"fitness_centre"},addTags:{brand:"Crunch Fitness","brand:wikidata":"Q5190093","brand:wikipedia":"en:Crunch Fitness",leisure:"fitness_centre",name:"Crunch Fitness"},countryCodes:["au","ca","us"],terms:["crunch"],matchScore:2,suggestion:true},"leisure/fitness_centre/Curves":{name:"Curves",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Curves/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5196080",leisure:"fitness_centre"},addTags:{brand:"Curves","brand:wikidata":"Q5196080","brand:wikipedia":"en:Curves International",leisure:"fitness_centre",name:"Curves"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/F45 Training":{name:"F45 Training",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/F45FunctionalTraining/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64390973",leisure:"fitness_centre"},addTags:{brand:"F45 Training","brand:wikidata":"Q64390973",leisure:"fitness_centre",name:"F45 Training"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Fit4Less (Canada)":{name:"Fit4Less (Canada)",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/fit4lesscanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64821050",leisure:"fitness_centre"},addTags:{brand:"Fit4Less","brand:wikidata":"Q64821050",leisure:"fitness_centre",name:"Fit4Less"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Fit4less (UK)":{name:"Fit4less (UK)",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Fit4lessUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64821053",leisure:"fitness_centre"},addTags:{brand:"Fit4less","brand:wikidata":"Q64821053",leisure:"fitness_centre",name:"Fit4less"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Fitness First":{name:"Fitness First",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/FitnessFirstGER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q127120",leisure:"fitness_centre"},addTags:{brand:"Fitness First","brand:wikidata":"Q127120","brand:wikipedia":"en:Fitness First",leisure:"fitness_centre",name:"Fitness First"},countryCodes:["ae","au","de","gb","ph","th"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Fitness24Seven":{name:"Fitness24Seven",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Fitness24SevenSweden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61112447",leisure:"fitness_centre"},addTags:{brand:"Fitness24Seven","brand:wikidata":"Q61112447","brand:wikipedia":"sv:Fitness24Seven",leisure:"fitness_centre",name:"Fitness24Seven"},countryCodes:["fi","se"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Gold's Gym":{name:"Gold's Gym",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/goldsgym/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1536234",leisure:"fitness_centre"},addTags:{brand:"Gold's Gym","brand:wikidata":"Q1536234","brand:wikipedia":"en:Gold's Gym",leisure:"fitness_centre",name:"Gold's Gym"},countryCodes:["ae","in","ph","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/GoodLife Fitness":{name:"GoodLife Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/goodlifefitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3110654",leisure:"fitness_centre"},addTags:{brand:"GoodLife Fitness","brand:wikidata":"Q3110654","brand:wikipedia":"en:GoodLife Fitness",leisure:"fitness_centre",name:"GoodLife Fitness"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Jazzercise":{name:"Jazzercise",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Jazzerciseinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6168434",leisure:"fitness_centre"},addTags:{brand:"Jazzercise","brand:wikidata":"Q6168434","brand:wikipedia":"en:Jazzercise",leisure:"fitness_centre",name:"Jazzercise"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/LA Fitness":{name:"LA Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/LAFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6457180",leisure:"fitness_centre"},addTags:{brand:"LA Fitness","brand:wikidata":"Q6457180","brand:wikipedia":"en:LA Fitness",leisure:"fitness_centre",name:"LA Fitness"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Life Time":{name:"Life Time",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/LifeTime.Life/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6545004",leisure:"fitness_centre"},addTags:{brand:"Life Time","brand:wikidata":"Q6545004","brand:wikipedia":"en:Life Time Fitness",leisure:"fitness_centre",name:"Life Time"},countryCodes:["ca","us"],terms:["life time athletic","life time fitness"],matchScore:2,suggestion:true},"leisure/fitness_centre/McFit":{name:"McFit",icon:"fas-dumbbell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRSG%20Group%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q871302",leisure:"fitness_centre"},addTags:{brand:"McFit","brand:wikidata":"Q871302","brand:wikipedia":"en:McFit",leisure:"fitness_centre",name:"McFit"},countryCodes:["at","de","es","it","pl"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Orangetheory Fitness":{name:"Orangetheory Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/OrangeTheoryFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25005163",leisure:"fitness_centre"},addTags:{brand:"Orangetheory Fitness","brand:wikidata":"Q25005163","brand:wikipedia":"en:Orangetheory Fitness",leisure:"fitness_centre",name:"Orangetheory Fitness"},countryCodes:["ca","es","us"],terms:["orangetheory"],matchScore:2,suggestion:true},"leisure/fitness_centre/Planet Fitness":{name:"Planet Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/planetfitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7201095",leisure:"fitness_centre"},addTags:{brand:"Planet Fitness","brand:wikidata":"Q7201095","brand:wikipedia":"en:Planet Fitness",leisure:"fitness_centre",name:"Planet Fitness"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/PureGym":{name:"PureGym",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/puregym/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18345898",leisure:"fitness_centre"},addTags:{brand:"PureGym","brand:wikidata":"Q18345898","brand:wikipedia":"en:PureGym",leisure:"fitness_centre",name:"PureGym"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Retro Fitness":{name:"Retro Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/RetroFitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994955",leisure:"fitness_centre"},addTags:{brand:"Retro Fitness","brand:wikidata":"Q61994955",leisure:"fitness_centre",name:"Retro Fitness"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Smart Fit":{name:"Smart Fit",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/SmartFit.Oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30930959",leisure:"fitness_centre"},addTags:{brand:"Smart Fit","brand:wikidata":"Q30930959","brand:wikipedia":"pt:Smart Fit",leisure:"fitness_centre",name:"Smart Fit"},countryCodes:["br","cl","co","do","mx","pe"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Snap Fitness":{name:"Snap Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/SnapFitness247/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7547254",leisure:"fitness_centre"},addTags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/SoulCycle":{name:"SoulCycle",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/SoulCycleInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17084730",leisure:"fitness_centre"},addTags:{brand:"SoulCycle","brand:wikidata":"Q17084730","brand:wikipedia":"en:SoulCycle",leisure:"fitness_centre",name:"SoulCycle",sport:"cycling"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/The Gym":{name:"The Gym",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/thegymgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48815022",leisure:"fitness_centre"},addTags:{brand:"The Gym","brand:wikidata":"Q48815022","brand:wikipedia":"en:The Gym Group",leisure:"fitness_centre",name:"The Gym"},countryCodes:["gb"],terms:["the gym group"],matchScore:2,suggestion:true},"leisure/fitness_centre/Virgin Active":{name:"Virgin Active",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/VirginActiveSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4013942",leisure:"fitness_centre"},addTags:{brand:"Virgin Active","brand:wikidata":"Q4013942","brand:wikipedia":"en:Virgin Active",leisure:"fitness_centre",name:"Virgin Active"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Xercise4Less":{name:"Xercise4Less",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Xercise4Less/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79244612",leisure:"fitness_centre"},addTags:{brand:"Xercise4Less","brand:wikidata":"Q79244612",leisure:"fitness_centre",name:"Xercise4Less"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/エニタイムフィットネス":{name:"エニタイムフィットネス",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/anytimefitness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4778364",leisure:"fitness_centre"},addTags:{"alt_name:en":"Fast Fitness",brand:"エニタイムフィットネス","brand:en":"Anytime Fitness","brand:ja":"エニタイムフィットネス","brand:wikidata":"Q4778364","brand:wikipedia":"ja:エニタイムフィットネス",leisure:"fitness_centre",name:"エニタイムフィットネス","name:en":"Anytime Fitness","name:ja":"エニタイムフィットネス"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/カーブス":{name:"カーブス",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Curves/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5196080",leisure:"fitness_centre"},addTags:{brand:"カーブス","brand:en":"Curves","brand:ja":"カーブス","brand:wikidata":"Q5196080","brand:wikipedia":"ja:カーブス",leisure:"fitness_centre",name:"カーブス","name:en":"Curves","name:ja":"カーブス"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/playground/McDonald's PlayPlace":{name:"McDonald's PlayPlace",icon:"maki-playground",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q38076",leisure:"playground"},addTags:{access:"customers",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",leisure:"playground",name:"McDonald's PlayPlace"},terms:["mcdonald's"],matchScore:2,suggestion:true},"leisure/sports_centre/YMCA":{name:"YMCA",icon:"maki-pitch",imageURL:"https://graph.facebook.com/YMCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157169",leisure:"sports_centre"},addTags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"sports_centre",name:"YMCA"},terms:[],matchScore:2,suggestion:true},"leisure/sports_centre/iFLY":{name:"iFLY",icon:"maki-pitch",imageURL:"https://graph.facebook.com/iFLYUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64767105",leisure:"sports_centre"},addTags:{brand:"iFLY","brand:wikidata":"Q64767105",leisure:"sports_centre",name:"iFLY",sport:"indoor_skydiving"},terms:[],matchScore:2,suggestion:true},"office/bail_bond_agent/Aladdin Bail Bonds":{name:"Aladdin Bail Bonds",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAladdin%20Bail%20Bonds%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q64166257",office:"bail_bond_agent"},addTags:{brand:"Aladdin Bail Bonds","brand:wikidata":"Q64166257","brand:wikipedia":"en:Aladdin Bail Bonds",name:"Aladdin Bail Bonds",office:"bail_bond_agent",opening_hours:"24/7"},countryCodes:["us"],terms:["aladdin","aladin bail bonds","alladin bail bonds"],matchScore:2,suggestion:true},"office/consulting/Deloitte":{name:"Deloitte",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/DeloitteUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q491748",office:"consulting"},addTags:{brand:"Deloitte","brand:wikidata":"Q491748","brand:wikipedia":"en:Deloitte",name:"Deloitte",office:"consulting"},terms:[],matchScore:2,suggestion:true},"office/consulting/EY":{name:"EY",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/EY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489097",office:"consulting"},addTags:{brand:"EY","brand:wikidata":"Q489097","brand:wikipedia":"en:Ernst & Young",name:"EY",office:"consulting",official_name:"Ernst & Young"},terms:[],matchScore:2,suggestion:true},"office/consulting/Indra":{name:"Indra",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/indracompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1661823",office:"consulting"},addTags:{brand:"Indra","brand:wikidata":"Q1661823","brand:wikipedia":"es:Indra Sistemas",name:"Indra",office:"consulting",official_name:"Indra Sistemas, S.A."},terms:[],matchScore:2,suggestion:true},"office/consulting/KPMG":{name:"KPMG",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/KPMG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q493751",office:"consulting"},addTags:{brand:"KPMG","brand:wikidata":"Q493751","brand:wikipedia":"en:KPMG",name:"KPMG",office:"consulting"},terms:[],matchScore:2,suggestion:true},"office/consulting/PwC":{name:"PwC",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/lifeatpwc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q488048",office:"consulting"},addTags:{brand:"PwC","brand:wikidata":"Q488048","brand:wikipedia":"en:PricewaterhouseCoopers",name:"PwC",office:"consulting",official_name:"PricewaterhouseCoopers"},terms:[],matchScore:2,suggestion:true},"office/coworking/Awfis":{name:"Awfis",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/myawfis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60747757",office:"coworking"},addTags:{brand:"Awfis","brand:wikidata":"Q60747757","brand:wikipedia":"en:Awfis",fee:"yes",name:"Awfis",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (China)":{name:"Ucommune (China)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"优客工场","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"优客工场","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (Hong Kong)":{name:"Ucommune (Hong Kong)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"優客工場 Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場 Ucommune","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (Singapore)":{name:"Ucommune (Singapore)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"Ucommune","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["sg"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (Taiwan)":{name:"Ucommune (Taiwan)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"優客工場","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"office/coworking/WeWork":{name:"WeWork",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/wework/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19995004",office:"coworking"},addTags:{brand:"WeWork","brand:wikidata":"Q19995004","brand:wikipedia":"en:WeWork",fee:"yes",name:"WeWork",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Adecco":{name:"Adecco",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/adeccogroupDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q353494",office:"employment_agency"},addTags:{brand:"Adecco","brand:wikidata":"Q353494","brand:wikipedia":"en:The Adecco Group",name:"Adecco",office:"employment_agency"},terms:[],matchScore:2,suggestion:true},"office/employment_agency/Agentur für Arbeit":{name:"Agentur für Arbeit",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/160267817333843/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1478016",office:"employment_agency"},addTags:{brand:"Agentur für Arbeit","brand:wikidata":"Q1478016","brand:wikipedia":"de:Bundesagentur für Arbeit",name:"Agentur für Arbeit",office:"employment_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Jobcentre Plus":{name:"Jobcentre Plus",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/174667546602258/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6206793",office:"employment_agency"},addTags:{brand:"Jobcentre Plus","brand:wikidata":"Q6206793","brand:wikipedia":"en:Jobcentre Plus",name:"Jobcentre Plus",office:"employment_agency"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Manpower":{name:"Manpower",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ManpowerGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1472539",office:"employment_agency"},addTags:{brand:"Manpower","brand:wikidata":"Q1472539","brand:wikipedia":"en:ManpowerGroup",name:"Manpower",office:"employment_agency"},terms:[],matchScore:2,suggestion:true},"office/employment_agency/Pôle Emploi":{name:"Pôle Emploi",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/poleemploi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8901192",office:"employment_agency"},addTags:{brand:"Pôle Emploi","brand:wikidata":"Q8901192","brand:wikipedia":"en:Pôle emploi",name:"Pôle Emploi",office:"employment_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Randstad":{name:"Randstad",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/Randstad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q267840",office:"employment_agency"},addTags:{brand:"Randstad","brand:wikidata":"Q267840","brand:wikipedia":"en:Randstad Holding",name:"Randstad",office:"employment_agency"},terms:[],matchScore:2,suggestion:true},"office/energy_supplier/Endesa":{name:"Endesa",icon:"temaki-briefcase_bolt",imageURL:"https://graph.facebook.com/Endesa.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1275336",office:"energy_supplier"},addTags:{brand:"Endesa","brand:wikidata":"Q1275336","brand:wikipedia":"es:Endesa",name:"Endesa",office:"energy_supplier"},terms:[],matchScore:2,suggestion:true},"office/energy_supplier/Iberdrola":{name:"Iberdrola",icon:"temaki-briefcase_bolt",imageURL:"https://graph.facebook.com/Iberdrola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1437502",office:"energy_supplier"},addTags:{brand:"Iberdrola","brand:wikidata":"Q1437502","brand:wikipedia":"es:Iberdrola",name:"Iberdrola",office:"energy_supplier"},terms:[],matchScore:2,suggestion:true},"office/energy_supplier/Naturgy":{name:"Naturgy",icon:"temaki-briefcase_bolt",imageURL:"https://graph.facebook.com/Naturgy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q474690",office:"energy_supplier"},addTags:{brand:"Naturgy","brand:wikidata":"Q474690","brand:wikipedia":"es:Naturgy",name:"Naturgy",office:"energy_supplier"},countryCodes:["ar","au","be","br","cl","cn","cr","de","do","dz","eg","es","fr","gb","ie","in","jm","jo","jp","lu","ma","mx","nl","om","pa","pe","pk","pr","pt","sg"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Allen & Harris":{name:"Allen & Harris",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/allenandharrisestateagents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81856601",office:"estate_agent"},addTags:{brand:"Allen & Harris","brand:wikidata":"Q81856601",name:"Allen & Harris",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Bagshaws Residential":{name:"Bagshaws Residential",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/BagshawsResidentialEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81859084",office:"estate_agent"},addTags:{brand:"Bagshaws Residential","brand:wikidata":"Q81859084",name:"Bagshaws Residential",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Bairstow Eves":{name:"Bairstow Eves",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/BairstowEvesEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81074787",office:"estate_agent"},addTags:{brand:"Bairstow Eves","brand:wikidata":"Q81074787",name:"Bairstow Eves",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Barnard Marcus":{name:"Barnard Marcus",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/BarnardMarcusEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81860444",office:"estate_agent"},addTags:{brand:"Barnard Marcus","brand:wikidata":"Q81860444",name:"Barnard Marcus",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Brown & Merry":{name:"Brown & Merry",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/BrownAndMerryEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81859714",office:"estate_agent"},addTags:{brand:"Brown & Merry","brand:wikidata":"Q81859714",name:"Brown & Merry",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Century 21":{name:"Century 21",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/century21/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1054480",office:"estate_agent"},addTags:{brand:"Century 21","brand:wikidata":"Q1054480","brand:wikipedia":"en:Century 21 (real estate)",name:"Century 21",office:"estate_agent"},terms:["century 21 real estate"],matchScore:2,suggestion:true},"office/estate_agent/Coldwell Banker":{name:"Coldwell Banker",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/coldwellbanker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q738853",office:"estate_agent"},addTags:{brand:"Coldwell Banker","brand:wikidata":"Q738853","brand:wikipedia":"en:Coldwell Banker",name:"Coldwell Banker",office:"estate_agent"},terms:["coldwell banker real estate"],matchScore:2,suggestion:true},"office/estate_agent/Connells":{name:"Connells",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/298744224054963/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5161738",office:"estate_agent"},addTags:{brand:"Connells","brand:wikidata":"Q5161738","brand:wikipedia":"en:Connells Group",name:"Connells",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Engel & Völkers":{name:"Engel & Völkers",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/engelvoelkershq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1341765",office:"estate_agent"},addTags:{brand:"Engel & Völkers","brand:wikidata":"Q1341765","brand:wikipedia":"en:Engel & Völkers",name:"Engel & Völkers",office:"estate_agent"},terms:[],matchScore:2,suggestion:true},"office/estate_agent/Foncia":{name:"Foncia",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/Foncia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1435638",office:"estate_agent"},addTags:{brand:"Foncia","brand:wikidata":"Q1435638","brand:wikipedia":"fr:Foncia",name:"Foncia",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Fox & Sons":{name:"Fox & Sons",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/FoxAndSonsEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81855298",office:"estate_agent"},addTags:{brand:"Fox & Sons","brand:wikidata":"Q81855298",name:"Fox & Sons",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Foxtons":{name:"Foxtons",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/FoxtonsEstateAgent/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5477251",office:"estate_agent"},addTags:{brand:"Foxtons","brand:wikidata":"Q5477251","brand:wikipedia":"en:Foxtons",name:"Foxtons",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Greenslade Taylor Hunt":{name:"Greenslade Taylor Hunt",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/GTHGreensladeTaylorHunt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81052826",office:"estate_agent"},addTags:{brand:"Greenslade Taylor Hunt","brand:wikidata":"Q81052826",name:"Greenslade Taylor Hunt",office:"estate_agent"},countryCodes:["gb"],terms:["gth"],matchScore:2,suggestion:true},"office/estate_agent/Guy Hoquet":{name:"Guy Hoquet",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/GuyHoquetImmobilier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25383970",office:"estate_agent"},addTags:{brand:"Guy Hoquet","brand:wikidata":"Q25383970","brand:wikipedia":"fr:Guy Hoquet l'immobilier",name:"Guy Hoquet",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Haart":{name:"Haart",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/haart.estate.agents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75006731",office:"estate_agent"},addTags:{brand:"Haart","brand:wikidata":"Q75006731","brand:wikipedia":"en: Spicerhaart",name:"Haart",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Hamptons International":{name:"Hamptons International",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/HamptonsInt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5646350",office:"estate_agent"},addTags:{brand:"Hamptons International","brand:wikidata":"Q5646350","brand:wikipedia":"en:Hamptons International",name:"Hamptons International",office:"estate_agent",short_name:"Hamptons"},countryCodes:["gb"],terms:["hamptons international lettings","hamptons international sales"],matchScore:2,suggestion:true},"office/estate_agent/Harcourts":{name:"Harcourts",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/HarcourtsNewZealand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5655056",office:"estate_agent"},addTags:{brand:"Harcourts","brand:wikidata":"Q5655056","brand:wikipedia":"en:Harcourts International",name:"Harcourts",office:"estate_agent"},terms:[],matchScore:2,suggestion:true},"office/estate_agent/John L. Scott":{name:"John L. Scott",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/johnlscott/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6243687",office:"estate_agent"},addTags:{brand:"John L. Scott","brand:wikidata":"Q6243687","brand:wikipedia":"en:John L. Scott",name:"John L. Scott",office:"estate_agent"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Jones & Chapman":{name:"Jones & Chapman",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/JonesAndChapmanEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81858007",office:"estate_agent"},addTags:{brand:"Jones & Chapman","brand:wikidata":"Q81858007",name:"Jones & Chapman",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Knight Frank":{name:"Knight Frank",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/KnightFrankLLP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3197998",office:"estate_agent"},addTags:{brand:"Knight Frank","brand:wikidata":"Q3197998","brand:wikipedia":"en:Knight Frank",name:"Knight Frank",office:"estate_agent"},terms:[],matchScore:2,suggestion:true},"office/estate_agent/Laforêt":{name:"Laforêt",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/Laforetfrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56310946",office:"estate_agent"},addTags:{brand:"Laforêt","brand:wikidata":"Q56310946","brand:wikipedia":"fr:Laforêt (immobilier)",name:"Laforêt",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Manners & Harrison":{name:"Manners & Harrison",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/MannersAndHarrisonEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81857241",office:"estate_agent"},addTags:{brand:"Manners & Harrison","brand:wikidata":"Q81857241",name:"Manners & Harrison",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Martin & Co":{name:"Martin & Co",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/martincouk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81066918",office:"estate_agent"},addTags:{brand:"Martin & Co","brand:wikidata":"Q81066918",name:"Martin & Co",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Orpi":{name:"Orpi",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/OrpiFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3356080",office:"estate_agent"},addTags:{brand:"Orpi","brand:wikidata":"Q3356080","brand:wikipedia":"fr:Organisation régionale des professionnels de l'immobilier",name:"Orpi",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Palmer Snell":{name:"Palmer Snell",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/PalmerSnellEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81068923",office:"estate_agent"},addTags:{brand:"Palmer Snell","brand:wikidata":"Q81068923",name:"Palmer Snell",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/REMAX":{name:"RE/MAX",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/remax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q965845",office:"estate_agent"},addTags:{brand:"RE/MAX","brand:wikidata":"Q965845","brand:wikipedia":"en:RE/MAX",name:"RE/MAX",office:"estate_agent"},terms:[],matchScore:2,suggestion:true},"office/estate_agent/Ray White":{name:"Ray White",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/raywhitegroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81077729",office:"estate_agent"},addTags:{brand:"Ray White","brand:wikidata":"Q81077729",name:"Ray White",office:"estate_agent"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Roger Platt":{name:"Roger Platt",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/RogerPlattEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81859999",office:"estate_agent"},addTags:{brand:"Roger Platt","brand:wikidata":"Q81859999",name:"Roger Platt",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Royal LePage":{name:"Royal LePage",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/royallepage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7374385",office:"estate_agent"},addTags:{brand:"Royal LePage","brand:wikidata":"Q7374385","brand:wikipedia":"en:Royal LePage",name:"Royal LePage",office:"estate_agent"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Shipways":{name:"Shipways",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/ShipwaysEstateAgent/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81859397",office:"estate_agent"},addTags:{brand:"Shipways","brand:wikidata":"Q81859397",name:"Shipways",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Square Habitat":{name:"Square Habitat",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/541219055971624/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64027038",office:"estate_agent"},addTags:{brand:"Square Habitat","brand:wikidata":"Q64027038","brand:wikipedia":"fr:Square Habitat",name:"Square Habitat",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Stirling Ackroyd":{name:"Stirling Ackroyd",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/StirlingAckroyd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81062228",office:"estate_agent"},addTags:{brand:"Stirling Ackroyd","brand:wikidata":"Q81062228",name:"Stirling Ackroyd",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Swetenhams":{name:"Swetenhams",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/SwetenhamsEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81858340",office:"estate_agent"},addTags:{brand:"Swetenhams","brand:wikidata":"Q81858340",name:"Swetenhams",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Tecnocasa":{name:"Tecnocasa",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/GruppoTecnocasa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2399658",office:"estate_agent"},addTags:{brand:"Tecnocasa","brand:wikidata":"Q2399658","brand:wikipedia":"de:Tecnocasa",name:"Tecnocasa",office:"estate_agent"},countryCodes:["es","it","pl"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Townends":{name:"Townends",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/Townends/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81061275",office:"estate_agent"},addTags:{brand:"Townends","brand:wikidata":"Q81061275",name:"Townends",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Webbers":{name:"Webbers",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/WebbersEstateAgentsHQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81068176",office:"estate_agent"},addTags:{brand:"Webbers","brand:wikidata":"Q81068176",name:"Webbers",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/William H. Brown":{name:"William H. Brown",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/WilliamHBrownEstateAgents/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81787271",office:"estate_agent"},addTags:{brand:"William H. Brown","brand:wikidata":"Q81787271",name:"William H. Brown",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Your Move":{name:"Your Move",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/yourmoveuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81078416",office:"estate_agent"},addTags:{brand:"Your Move","brand:wikidata":"Q81078416",name:"Your Move",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/アパマンショップ":{name:"アパマンショップ",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/apamanshopcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11284512",office:"estate_agent"},addTags:{brand:"アパマンショップ","brand:en":"Apaman Shop","brand:ja":"アパマンショップ","brand:wikidata":"Q11284512","brand:wikipedia":"ja:Apaman Network",name:"アパマンショップ","name:en":"Apaman Shop","name:ja":"アパマンショップ",office:"estate_agent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/エイブル":{name:"エイブル",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/able.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11289620",office:"estate_agent"},addTags:{brand:"エイブル","brand:en":"Able","brand:ja":"エイブル","brand:wikidata":"Q11289620","brand:wikipedia":"ja:エイブル",name:"エイブル","name:en":"Able","name:ja":"エイブル",office:"estate_agent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/ピタットハウス":{name:"ピタットハウス",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/pitatofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11331484",office:"estate_agent"},addTags:{brand:"ピタットハウス","brand:en":"Pitat House","brand:ja":"ピタットハウス","brand:wikidata":"Q11331484","brand:wikipedia":"ja:ピタットハウスネットワーク",name:"ピタットハウス","name:en":"Pitat House","name:ja":"ピタットハウス",office:"estate_agent"},countryCodes:["jp"],terms:["ピタットハウスネットワーク"],matchScore:2,suggestion:true},"office/estate_agent/三菱UFJ不動産販売":{name:"三菱UFJ不動産販売",icon:"temaki-real_estate_agency",geometry:["point","area"],tags:{"brand:wikidata":"Q11357004",office:"estate_agent"},addTags:{brand:"三菱UFJ不動産販売","brand:en":"Mitsubishi UFJ Real Estate Services","brand:ja":"三菱UFJ不動産販売","brand:wikidata":"Q11357004","brand:wikipedia":"ja:三菱UFJ不動産販売",name:"三菱UFJ不動産販売","name:en":"Mitsubishi UFJ Real Estate Services","name:ja":"三菱UFJ不動産販売",office:"estate_agent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/信義房屋":{name:"信義房屋",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/sinyifans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10888034",office:"estate_agent"},addTags:{brand:"信義房屋","brand:en":"Sinyi Realty","brand:wikidata":"Q10888034","brand:wikipedia":"zh:信義房屋","brand:zh":"信義房屋",name:"信義房屋","name:en":"Sinyi Realty","name:zh":"信義房屋",office:"estate_agent"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/永慶房屋":{name:"永慶房屋",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/yungching.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11132113",office:"estate_agent"},addTags:{brand:"永慶房屋","brand:en":"Yung Ching","brand:wikidata":"Q11132113","brand:wikipedia":"zh:永慶房屋","brand:zh":"永慶房屋",name:"永慶房屋","name:en":"Yung Ching","name:zh":"永慶房屋",office:"estate_agent"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"office/financial_advisor/Edward Jones":{name:"Edward Jones",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/edwardjones/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5343830",office:"financial_advisor"},addTags:{alt_name:"Edward Jones Investments",brand:"Edward Jones","brand:wikidata":"Q5343830","brand:wikipedia":"en:Edward Jones Investments",name:"Edward Jones",office:"financial_advisor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"office/financial_advisor/TD Ameritrade":{name:"TD Ameritrade",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/tdameritrade/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669886",office:"financial_advisor"},addTags:{brand:"TD Ameritrade","brand:wikidata":"Q7669886","brand:wikipedia":"en:TD Ameritrade",name:"TD Ameritrade",office:"financial_advisor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/insurance/A-MAX Auto Insurance":{name:"A-MAX Auto Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/amaxinsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75767609",office:"insurance"},addTags:{brand:"A-MAX Auto Insurance","brand:wikidata":"Q75767609",name:"A-MAX Auto Insurance",office:"insurance",short_name:"A-MAX"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/insurance/AAA Insurance":{name:"AAA Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/AAAFanPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q463436",office:"insurance"},addTags:{brand:"American Automobile Association","brand:wikidata":"Q463436","brand:wikipedia":"en:American Automobile Association",name:"AAA Insurance",office:"insurance",short_name:"AAA"},countryCodes:["us"],terms:["american automobile association"],matchScore:2,suggestion:true},"office/insurance/AOK":{name:"AOK",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAllgemeine%20Ortskrankenkasse%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q835141",office:"insurance"},addTags:{brand:"AOK","brand:wikidata":"Q835141","brand:wikipedia":"de:Allgemeine Ortskrankenkasse",name:"AOK",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/AXA":{name:"AXA",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/axainsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q160054",office:"insurance"},addTags:{brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Allianz":{name:"Allianz",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/allianz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487292",office:"insurance"},addTags:{brand:"Allianz","brand:wikidata":"Q487292","brand:wikipedia":"en:Allianz",name:"Allianz",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Allstate":{name:"Allstate",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/Allstate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2645636",office:"insurance"},addTags:{brand:"Allstate","brand:wikidata":"Q2645636","brand:wikipedia":"en:Allstate",name:"Allstate",office:"insurance"},countryCodes:["us"],terms:["allstate insurance"],matchScore:2,suggestion:true},"office/insurance/American Family Insurance":{name:"American Family Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/amfam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4743730",office:"insurance"},addTags:{brand:"American Family Insurance","brand:wikidata":"Q4743730","brand:wikipedia":"en:American Family Insurance",name:"American Family Insurance",office:"insurance"},countryCodes:["us"],terms:["american family","amfam"],matchScore:2,suggestion:true},"office/insurance/Asepeyo":{name:"Asepeyo",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/Asepeyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11906879",office:"insurance"},addTags:{brand:"Asepeyo","brand:wikidata":"Q11906879","brand:wikipedia":"es:Asepeyo",name:"Asepeyo",office:"insurance"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"office/insurance/Aviva":{name:"Aviva",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/Aviva/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q791179",office:"insurance"},addTags:{brand:"Aviva","brand:wikidata":"Q791179","brand:wikipedia":"en:Aviva",name:"Aviva",office:"insurance"},countryCodes:["fr","ie","pl"],terms:[],matchScore:2,suggestion:true},"office/insurance/BGV":{name:"BGV",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBadische%20Versicherungen%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q795911",office:"insurance"},addTags:{alt_name:"Badische Versicherungen",brand:"BGV","brand:wikidata":"Q795911","brand:wikipedia":"de:BGV / Badische Versicherungen",name:"BGV",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/Banco do Brasil Seguridade":{name:"Banco do Brasil Seguridade",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/BBSeguros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18499520",office:"insurance"},addTags:{brand:"Banco do Brasil Seguridade","brand:wikidata":"Q18499520","brand:wikipedia":"pt:BB Seguridade",name:"Banco do Brasil Seguridade",office:"insurance",short_name:"BB Seguridade"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"office/insurance/Bâloise":{name:"Bâloise",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/BaloiseGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457912",office:"insurance"},addTags:{brand:"Bâloise","brand:wikidata":"Q457912","brand:wikipedia":"en:Bâloise",name:"Bâloise",office:"insurance"},countryCodes:["be","ch","de","li","lu"],terms:[],matchScore:2,suggestion:true},"office/insurance/DAK":{name:"DAK",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/DAKGesundheit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1151671",office:"insurance"},addTags:{brand:"DAK","brand:wikidata":"Q1151671","brand:wikipedia":"de:DAK-Gesundheit",name:"DAK",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/DEVK":{name:"DEVK",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/devk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1153049",office:"insurance"},addTags:{brand:"DEVK","brand:wikidata":"Q1153049","brand:wikipedia":"de:DEVK",name:"DEVK",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/Debeka":{name:"Debeka",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/Debeka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1181452",office:"insurance"},addTags:{brand:"Debeka","brand:wikidata":"Q1181452","brand:wikipedia":"de:Debeka",name:"Debeka",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/Erie Insurance":{name:"Erie Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/erieinsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5388314",office:"insurance"},addTags:{brand:"Erie Insurance","brand:wikidata":"Q5388314","brand:wikipedia":"en:Erie Insurance Group",name:"Erie Insurance",office:"insurance"},countryCodes:["us"],terms:["erie"],matchScore:2,suggestion:true},"office/insurance/Farmers Insurance":{name:"Farmers Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/FarmersInsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1396863",office:"insurance"},addTags:{brand:"Farmers Insurance","brand:wikidata":"Q1396863","brand:wikipedia":"en:Farmers Insurance Group",name:"Farmers Insurance",office:"insurance"},countryCodes:["us"],terms:["farmers"],matchScore:2,suggestion:true},"office/insurance/Foyer":{name:"Foyer",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q1344573",office:"insurance"},addTags:{brand:"Foyer","brand:wikidata":"Q1344573","brand:wikipedia":"lb:Foyer",name:"Foyer",office:"insurance"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"office/insurance/Fremap":{name:"Fremap",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q5869232",office:"insurance"},addTags:{brand:"Fremap","brand:wikidata":"Q5869232","brand:wikipedia":"es:Fremap",name:"Fremap",office:"insurance"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"office/insurance/GEICO":{name:"GEICO",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/geico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1498689",office:"insurance"},addTags:{brand:"GEICO","brand:wikidata":"Q1498689","brand:wikipedia":"en:GEICO",name:"GEICO",office:"insurance"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/insurance/GMF":{name:"GMF",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/GMFassurances/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3095296",office:"insurance"},addTags:{brand:"GMF","brand:wikidata":"Q3095296","brand:wikipedia":"fr:Garantie mutuelle des fonctionnaires",name:"GMF",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Generali":{name:"Generali",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/GENERALIes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q670482",office:"insurance"},addTags:{brand:"Generali","brand:wikidata":"Q670482","brand:wikipedia":"it:Assicurazioni Generali",name:"Generali",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Grange Insurance":{name:"Grange Insurance",icon:"temaki-briefcase_shield",imageURL:"https://pbs.twimg.com/profile_images/476391605457260545/J37LFSJc_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q17183481",office:"insurance"},addTags:{brand:"Grange Insurance","brand:wikidata":"Q17183481","brand:wikipedia":"en:Grange Insurance",name:"Grange Insurance",office:"insurance"},countryCodes:["us"],terms:["grange"],matchScore:2,suggestion:true},"office/insurance/Groupama":{name:"Groupama",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/groupama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3083531",office:"insurance"},addTags:{brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"fr:Groupama",name:"Groupama",office:"insurance",official_name:"Groupe des Assurances Mutuelles Agricoles"},terms:[],matchScore:2,suggestion:true},"office/insurance/Harmonie Mutuelle":{name:"Harmonie Mutuelle",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/harmoniemutuelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3127528",office:"insurance"},addTags:{brand:"Harmonie Mutuelle","brand:wikidata":"Q3127528","brand:wikipedia":"fr:Harmonie mutuelle",name:"Harmonie Mutuelle",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Helvetia":{name:"Helvetia",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHelvetia%20logo%20422x129.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q933766",office:"insurance"},addTags:{brand:"Helvetia","brand:wikidata":"Q933766","brand:wikipedia":"it:Helvetia Assicurazioni",name:"Helvetia",office:"insurance"},countryCodes:["at","ch","de","es","fr","it"],terms:[],matchScore:2,suggestion:true},"office/insurance/Knappschaft":{name:"Knappschaft",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/KNAPPSCHAFT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1313465",office:"insurance"},addTags:{brand:"Knappschaft","brand:wikidata":"Q1313465","brand:wikipedia":"de:Knappschaft (Krankenkasse)",name:"Knappschaft",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/MAAF":{name:"MAAF",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/maafassurances/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3331028",office:"insurance"},addTags:{brand:"MAAF","brand:wikidata":"Q3331028","brand:wikipedia":"fr:Mutuelle d'assurance des artisans de France",name:"MAAF",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/MMA":{name:"MMA",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/MMA.Assurances/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3331046",office:"insurance"},addTags:{brand:"MMA","brand:wikidata":"Q3331046","brand:wikipedia":"fr:MMA (assurance)",name:"MMA",office:"insurance",official_name:"Mutuelles du Mans Assurances"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Macif":{name:"Macif",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/lEssentielparMacif/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3331021",office:"insurance"},addTags:{brand:"Macif","brand:wikidata":"Q3331021","brand:wikipedia":"fr:Mutuelle assurance des commerçants et industriels de France et des cadres et des salariés de l'industrie et du commerce",name:"Macif",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Maif":{name:"Maif",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/MAIFassureur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3331029",office:"insurance"},addTags:{brand:"Maif","brand:wikidata":"Q3331029","brand:wikipedia":"fr:Mutuelle d'assurance des instituteurs de France",name:"Maif",office:"insurance",official_name:"Mutuelle d'assurance des instituteurs de France"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Mapfre":{name:"Mapfre",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/mapfreinsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q544532",office:"insurance"},addTags:{brand:"Mapfre","brand:wikidata":"Q544532","brand:wikipedia":"en:Mapfre",name:"Mapfre",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Matmut":{name:"Matmut",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/MatmutAssurances/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3299185",office:"insurance"},addTags:{brand:"Matmut","brand:wikidata":"Q3299185","brand:wikipedia":"fr:Matmut",name:"Matmut",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Nationwide":{name:"Nationwide",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/nationwide/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6979886",office:"insurance"},addTags:{brand:"Nationwide","brand:wikidata":"Q6979886","brand:wikipedia":"en:Nationwide Mutual Insurance Company",name:"Nationwide",office:"insurance"},countryCodes:["us"],terms:["nationwide insurance"],matchScore:2,suggestion:true},"office/insurance/Ocaso":{name:"Ocaso",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q6123955",office:"insurance"},addTags:{brand:"Ocaso","brand:wikidata":"Q6123955","brand:wikipedia":"es:Seguros Ocaso",name:"Ocaso",office:"insurance"},countryCodes:["es","gb"],terms:["ocaso seguros","seguros ocaso"],matchScore:2,suggestion:true},"office/insurance/PZU":{name:"PZU",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/grupapzu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1807170",office:"insurance"},addTags:{brand:"PZU","brand:wikidata":"Q1807170","brand:wikipedia":"pl:Powszechny Zakład Ubezpieczeń",name:"PZU",office:"insurance"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"office/insurance/Progressive":{name:"Progressive",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/progressive/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7248721",office:"insurance"},addTags:{brand:"Progressive","brand:wikidata":"Q7248721","brand:wikipedia":"en:Progressive Corporation",name:"Progressive",office:"insurance"},countryCodes:["us"],terms:["progressive insurance"],matchScore:2,suggestion:true},"office/insurance/Reale":{name:"Reale",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Reale%20Mutua%202015.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3931092",office:"insurance"},addTags:{brand:"Reale","brand:wikidata":"Q3931092","brand:wikipedia":"it:Reale Mutua Assicurazioni",name:"Reale",office:"insurance"},countryCodes:["cl","es","it"],terms:["reale chile","reale immobili","reale mutua assicurazioni","reale seguros","seguros reale"],matchScore:2,suggestion:true},"office/insurance/SV SparkassenVersicherung":{name:"SV SparkassenVersicherung",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSV%20SparkassenVersicherung%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2208645",office:"insurance"},addTags:{brand:"SV SparkassenVersicherung","brand:wikidata":"Q2208645","brand:wikipedia":"de:SV SparkassenVersicherung",name:"SV SparkassenVersicherung",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/State Farm":{name:"State Farm",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/statefarm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2007336",office:"insurance"},addTags:{brand:"State Farm","brand:wikidata":"Q2007336","brand:wikipedia":"en:State Farm",name:"State Farm",office:"insurance"},countryCodes:["us"],terms:["state farm insurance"],matchScore:2,suggestion:true},"office/insurance/Swinton":{name:"Swinton",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/SwintonInsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7658785",office:"insurance"},addTags:{brand:"Swinton","brand:wikidata":"Q7658785","brand:wikipedia":"en:Swinton Insurance",name:"Swinton",office:"insurance"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/insurance/Techniker Krankenkasse":{name:"Techniker Krankenkasse",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/DieTechniker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q607531",office:"insurance"},addTags:{brand:"Techniker Krankenkasse","brand:wikidata":"Q607531","brand:wikipedia":"de:Techniker Krankenkasse",name:"Techniker Krankenkasse",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/The Co-operators":{name:"The Co-operators",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/TheCooperatorsInsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3520320",office:"insurance"},addTags:{brand:"The Co-operators","brand:wikidata":"Q3520320","brand:wikipedia":"en:The Co-operators",name:"The Co-operators",office:"insurance"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"office/insurance/Tranquilidade":{name:"Tranquilidade",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q7833457",office:"insurance"},addTags:{brand:"Tranquilidade Seguros","brand:wikidata":"Q7833457","brand:wikipedia":"en:Tranquilidade",name:"Tranquilidade",office:"insurance"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"office/insurance/Württembergische":{name:"Württembergische",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWuerttembergische.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1412465",office:"insurance"},addTags:{brand:"Württembergische","brand:wikidata":"Q1412465","brand:wikipedia":"de:Württembergische Versicherung",name:"Württembergische",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/Zurich":{name:"Zurich",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FZurich%20Logo%20new.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q230426",office:"insurance"},addTags:{brand:"Zurich","brand:wikidata":"Q230426","brand:wikipedia":"en:Zurich Insurance Group",name:"Zurich",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Ингосстрах":{name:"Ингосстрах",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/ingos.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4200631",office:"insurance"},addTags:{brand:"Ингосстрах","brand:en":"Ingosstrakh","brand:ru":"Ингосстрах","brand:wikidata":"Q4200631","brand:wikipedia":"ru:Ингосстрах",name:"Ингосстрах","name:en":"Ingosstrakh","name:ru":"Ингосстрах",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/РЕСО-Гарантия":{name:"РЕСО-Гарантия",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/reso.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4386516",office:"insurance"},addTags:{brand:"РЕСО-Гарантия","brand:en":"RESO-Guarantee","brand:ru":"РЕСО-Гарантия","brand:wikidata":"Q4386516","brand:wikipedia":"ru:РЕСО-Гарантия",name:"РЕСО-Гарантия","name:en":"RESO-Guarantee","name:ru":"РЕСО-Гарантия",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/Росгосстрах":{name:"Росгосстрах",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/RGS.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4397745",office:"insurance"},addTags:{brand:"Росгосстрах","brand:wikidata":"Q4397745","brand:wikipedia":"en:Rosgosstrakh",name:"Росгосстрах",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/Согласие":{name:"Согласие",icon:"temaki-briefcase_shield",imageURL:"https://pbs.twimg.com/profile_images/789134207478067201/iGlOuCFZ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4426689",office:"insurance"},addTags:{brand:"Согласие","brand:en":"Soglasie","brand:ru":"Согласие","brand:wikidata":"Q4426689","brand:wikipedia":"ru:Согласие (компания)",name:"Согласие","name:en":"Soglasie","name:ru":"Согласие",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/بیمه ایران":{name:"بیمه ایران",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/iraninsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5930269",office:"insurance"},addTags:{brand:"بیمه ایران","brand:en":"Iran Insurance","brand:fa":"بیمه ایران","brand:wikidata":"Q5930269","brand:wikipedia":"fa:بیمه ایران",name:"بیمه ایران","name:en":"Iran Insurance","name:fa":"بیمه ایران",office:"insurance"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/Block Advisors":{name:"Block Advisors",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/BlockAdvisors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64166231",office:"tax_advisor"},addTags:{brand:"Block Advisors","brand:wikidata":"Q64166231",name:"Block Advisors",office:"tax_advisor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/H&R Block":{name:"H&R Block",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/hrblock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5627799",office:"tax_advisor"},addTags:{brand:"H&R Block","brand:wikidata":"Q5627799","brand:wikipedia":"en:H&R Block",name:"H&R Block",office:"tax_advisor"},countryCodes:["au","ca","in","us"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/Jackson Hewitt":{name:"Jackson Hewitt",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/jacksonhewitt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6117132",office:"tax_advisor"},addTags:{brand:"Jackson Hewitt","brand:wikidata":"Q6117132","brand:wikipedia":"en:Jackson Hewitt",name:"Jackson Hewitt",office:"tax_advisor",official_name:"Jackson Hewitt Tax Service"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/Liberty Tax":{name:"Liberty Tax",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/libertytax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6541978",office:"tax_advisor"},addTags:{alt_name:"Liberty Tax Service",brand:"Liberty Tax","brand:wikidata":"Q6541978","brand:wikipedia":"en:Liberty Tax Service",name:"Liberty Tax",office:"tax_advisor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/agrarian/Granngården":{name:"Granngården",icon:"fas-tractor",imageURL:"https://graph.facebook.com/granngarden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10508136",shop:"agrarian"},addTags:{brand:"Granngården","brand:wikidata":"Q10508136","brand:wikipedia":"sv:Granngården AB",name:"Granngården",shop:"agrarian"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/agrarian/Southern States":{name:"Southern States",icon:"fas-tractor",imageURL:"https://graph.facebook.com/SouthernStatesCoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7570508",shop:"agrarian"},addTags:{agrarian:"seed;feed;tools",brand:"Southern States","brand:wikidata":"Q7570508","brand:wikipedia":"en:Southern States Cooperative",name:"Southern States",official_name:"Southern States Cooperative",shop:"agrarian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Alko":{name:"Alko",icon:"fas-wine-bottle",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAlko.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1849187",shop:"alcohol"},addTags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BC Liquor Store":{name:"BC Liquor Store",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1302250656/winesplash-icon_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q43079557",shop:"alcohol"},addTags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BWS":{name:"BWS",icon:"fas-wine-bottle",geometry:["point","area"],tags:{"brand:wikidata":"Q4836848",shop:"alcohol"},addTags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Bargain Booze":{name:"Bargain Booze",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/998956835796205568/21tNi907_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16971315",shop:"alcohol"},addTags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BevMo!":{name:"BevMo!",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1214680678047997952/TMa6euy2_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4899308",shop:"alcohol"},addTags:{brand:"BevMo!","brand:wikidata":"Q4899308","brand:wikipedia":"en:BevMo!",name:"BevMo!",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Dan Murphy's":{name:"Dan Murphy's",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/465419847128473601/ybOMjW8-_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5214075",shop:"alcohol"},addTags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Fine Wine & Good Spirits":{name:"Fine Wine & Good Spirits",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/PAWineSpirits/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64514776",shop:"alcohol"},addTags:{brand:"Fine Wine & Good Spirits","brand:wikidata":"Q64514776",name:"Fine Wine & Good Spirits",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Gall & Gall":{name:"Gall & Gall",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/652468758515068928/dzFqRsLG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q13639185",shop:"alcohol"},addTags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/LCBO":{name:"LCBO",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/481885343986102272/mGMV-t--_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q845263",shop:"alcohol"},addTags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Liquorland":{name:"Liquorland",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/378800000468322180/92219ed513322ff2f4d6d416dc477704_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q2283837",shop:"alcohol"},addTags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Majestic":{name:"Majestic",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1139531853759729665/3J0irT72_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q6737725",shop:"alcohol"},addTags:{brand:"Majestic","brand:wikidata":"Q6737725","brand:wikipedia":"en:Majestic Wine",name:"Majestic",shop:"alcohol"},countryCodes:["gb"],terms:["majestic wine","majestic wine warehouse"],matchScore:2,suggestion:true},"shop/alcohol/Nicolas":{name:"Nicolas",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/842779196082573314/AtkEMQlh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3340012",shop:"alcohol"},addTags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"},countryCodes:["be","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Oddbins":{name:"Oddbins",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/547781884533436416/xshXfITG_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7077472",shop:"alcohol"},addTags:{brand:"Oddbins","brand:wikidata":"Q7077472","brand:wikipedia":"en:Oddbins",name:"Oddbins",shop:"alcohol"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/SAQ":{name:"SAQ",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1064657571133308928/zhzEYvxp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3488077",shop:"alcohol"},addTags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/SAQ Express":{name:"SAQ Express",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1064657571133308928/zhzEYvxp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3488077",shop:"alcohol"},addTags:{brand:"SAQ Express","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Express",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/SAQ Sélection":{name:"SAQ Sélection",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1064657571133308928/zhzEYvxp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3488077",shop:"alcohol"},addTags:{brand:"SAQ Sélection","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Sélection",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Spec's":{name:"Spec's",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1212782822706089984/ZaF4dGOy_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7574415",shop:"alcohol"},addTags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Systembolaget":{name:"Systembolaget",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/456046476032872449/mg3NXDpc_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1476113",shop:"alcohol"},addTags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/The Beer Store":{name:"The Beer Store",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1112700310441676800/Gyk3rZl6_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q16243674",shop:"alcohol"},addTags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Total Wine":{name:"Total Wine",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1171529136919048195/cip0mUtb_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7828084",shop:"alcohol"},addTags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",official_name:"Total Wine & More",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Virginia ABC":{name:"Virginia ABC",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/VirginiaABC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7934236",shop:"alcohol"},addTags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Бристоль":{name:"Бристоль",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/bristolretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q59155583",shop:"alcohol"},addTags:{brand:"Бристоль","brand:wikidata":"Q59155583","brand:wikipedia":"ru:Бристоль (сеть магазинов)",name:"Бристоль",shop:"alcohol"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Красное & Белое":{name:"Красное & Белое",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/krasnoe.beloe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24933790",shop:"alcohol"},addTags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Krasnoe & Beloe",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"},countryCodes:["ru"],terms:["красное и белое"],matchScore:2,suggestion:true},"shop/alcohol/カクヤス":{name:"カクヤス",icon:"fas-wine-bottle",geometry:["point","area"],tags:{"brand:wikidata":"Q11293990",shop:"alcohol"},addTags:{brand:"カクヤス","brand:en":"Kakuyasu","brand:ja":"カクヤス","brand:wikidata":"Q11293990","brand:wikipedia":"ja:カクヤス",name:"カクヤス","name:en":"Kakuyasu","name:ja":"カクヤス",shop:"alcohol"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/art/YellowKorner":{name:"YellowKorner",icon:"maki-shop",imageURL:"https://graph.facebook.com/YellowKorner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3572115",shop:"art"},addTags:{brand:"YellowKorner","brand:wikidata":"Q3572115","brand:wikipedia":"fr:YellowKorner",name:"YellowKorner",shop:"art"},terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Aubert":{name:"Aubert",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/Aubert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62964657",shop:"baby_goods"},addTags:{brand:"Aubert","brand:wikidata":"Q62964657",name:"Aubert",shop:"baby_goods"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Babies R Us":{name:"Babies R Us",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/babiesrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17232036",shop:"baby_goods"},addTags:{brand:"Babies R Us","brand:wikidata":"Q17232036",name:"Babies R Us",shop:"baby_goods"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/BabyOne":{name:"BabyOne",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/BabyOne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57540408",shop:"baby_goods"},addTags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Buy Buy Baby":{name:"Buy Buy Baby",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/buybuyBABY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5003352",shop:"baby_goods"},addTags:{brand:"Buy Buy Baby","brand:wikidata":"Q5003352","brand:wikipedia":"en:Buy Buy Baby",name:"Buy Buy Baby",shop:"baby_goods"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Mothercare":{name:"Mothercare",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/mothercareuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136738",shop:"baby_goods"},addTags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"},terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Zippy":{name:"Zippy",icon:"fas-baby-carriage",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FZippy%20Kidstore%20logo%2020150813.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q10395161",shop:"baby_goods"},addTags:{brand:"Zippy","brand:wikidata":"Q10395161","brand:wikipedia":"en:Zippy Kidstore",name:"Zippy",shop:"baby_goods"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/西松屋":{name:"西松屋",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/nishimatsuya.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11628761",shop:"baby_goods"},addTags:{brand:"西松屋","brand:en":"Nishimatsuya Chain","brand:ja":"西松屋","brand:wikidata":"Q11628761","brand:wikipedia":"ja:西松屋",name:"西松屋","name:en":"Nishimatsuya Chain","name:ja":"西松屋",shop:"baby_goods"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bag/Bentley":{name:"Bentley",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/bentleyleathers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947700",shop:"bag"},addTags:{brand:"Bentley","brand:wikidata":"Q65947700",name:"Bentley",shop:"bag"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/bag/Carpisa":{name:"Carpisa",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/CarpisaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28035409",shop:"bag"},addTags:{brand:"Carpisa","brand:wikidata":"Q28035409","brand:wikipedia":"en:Carpisa",name:"Carpisa",shop:"bag"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/bag/Coach":{name:"Coach",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/coach/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q727697",shop:"bag"},addTags:{brand:"Coach","brand:wikidata":"Q727697","brand:wikipedia":"en:Coach New York",name:"Coach",shop:"bag"},countryCodes:["ca","us"],terms:["coach new york","coach ny"],matchScore:2,suggestion:true},"shop/bag/Kipling":{name:"Kipling",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/KiplingU.S.A/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6414641",shop:"bag"},addTags:{brand:"Kipling","brand:wikidata":"Q6414641","brand:wikipedia":"en:Kipling (brand)",name:"Kipling",shop:"bag"},countryCodes:["be","gb"],terms:[],matchScore:2,suggestion:true},"shop/bag/Samsonite":{name:"Samsonite",icon:"fas-suitcase-rolling",imageURL:"https://pbs.twimg.com/profile_images/1117861430366175232/3u8m-kIE_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1203426",shop:"bag"},addTags:{brand:"Samsonite","brand:wikidata":"Q1203426","brand:wikipedia":"en:Samsonite",name:"Samsonite",shop:"bag"},terms:[],matchScore:2,suggestion:true},"shop/bag/Tumi":{name:"Tumi",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/TumiTravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4465402",shop:"bag"},addTags:{brand:"Tumi","brand:wikidata":"Q4465402","brand:wikipedia":"en:Tumi Inc.",name:"Tumi",shop:"bag"},terms:[],matchScore:2,suggestion:true},"shop/bag/Vera Bradley":{name:"Vera Bradley",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/VeraBradley/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7920749",shop:"bag"},addTags:{brand:"Vera Bradley","brand:wikidata":"Q7920749","brand:wikipedia":"en:Vera Bradley",name:"Vera Bradley",shop:"bag"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Anker":{name:"Anker",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Ankerbrot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q557116",shop:"bakery"},addTags:{brand:"Anker","brand:wikidata":"Q557116","brand:wikipedia":"de:Ankerbrot",name:"Anker",shop:"bakery"},countryCodes:["at","sk"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Armbruster":{name:"Armbruster",icon:"maki-bakery",imageURL:"https://graph.facebook.com/104104147676951/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67987954",shop:"bakery"},addTags:{brand:"Armbruster","brand:wikidata":"Q67987954",name:"Armbruster",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Arome Bakery":{name:"Arome Bakery",icon:"maki-bakery",imageURL:"https://graph.facebook.com/aromebakery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1305627",shop:"bakery"},addTags:{brand:"Arome Bakery","brand:wikidata":"Q1305627","brand:wikipedia":"zh:東海堂",name:"Arome Bakery",shop:"bakery"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Awiteks":{name:"Awiteks",icon:"maki-bakery",imageURL:"https://graph.facebook.com/awiteks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62054190",shop:"bakery"},addTags:{brand:"Awiteks","brand:wikidata":"Q62054190",name:"Awiteks",shop:"bakery"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Back-Factory":{name:"Back-Factory",icon:"maki-bakery",imageURL:"https://graph.facebook.com/backfactory/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21200483",shop:"bakery"},addTags:{brand:"Back-Factory","brand:wikidata":"Q21200483","brand:wikipedia":"de:Back-Factory",name:"Back-Factory",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Backstube Wünsche":{name:"Backstube Wünsche",icon:"maki-bakery",imageURL:"https://graph.facebook.com/BackstubeWuensche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66085325",shop:"bakery"},addTags:{brand:"Backstube Wünsche","brand:wikidata":"Q66085325",name:"Backstube Wünsche",shop:"bakery"},countryCodes:["de"],terms:["wünsche"],matchScore:2,suggestion:true},"shop/bakery/Backwerk":{name:"Backwerk",icon:"maki-bakery",imageURL:"https://graph.facebook.com/155997891116938/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q798298",shop:"bakery"},addTags:{brand:"BackWerk","brand:wikidata":"Q798298","brand:wikipedia":"de:BackWerk",name:"Backwerk",shop:"bakery"},countryCodes:["at","ch","de","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Baguette":{name:"Baguette",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Baguette.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q82512635",shop:"bakery"},addTags:{brand:"Baguette","brand:wikidata":"Q82512635",name:"Baguette",shop:"bakery"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Bakers Delight":{name:"Bakers Delight",icon:"maki-bakery",imageURL:"https://graph.facebook.com/bakersdelight/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4849261",shop:"bakery"},addTags:{brand:"Bakers Delight","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"Bakers Delight",shop:"bakery"},countryCodes:["au","ca","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Bakker Bart":{name:"Bakker Bart",icon:"maki-bakery",imageURL:"https://graph.facebook.com/bakkerbartNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2177445",shop:"bakery"},addTags:{brand:"Bakker Bart","brand:wikidata":"Q2177445","brand:wikipedia":"nl:Bakker Bart",name:"Bakker Bart",shop:"bakery"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Balfours":{name:"Balfours",icon:"maki-bakery",imageURL:"https://graph.facebook.com/balfoursbakery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4850765",shop:"bakery"},addTags:{brand:"Balfours","brand:wikidata":"Q4850765",name:"Balfours",shop:"bakery",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Banette":{name:"Banette",icon:"maki-bakery",imageURL:"https://graph.facebook.com/293934294060419/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882405",shop:"bakery"},addTags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Beechworth Bakery":{name:"Beechworth Bakery",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Beechworth.Bakery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28183324",shop:"bakery"},addTags:{brand:"Beechworth Bakery","brand:wikidata":"Q28183324","brand:wikipedia":"en:Beechworth Bakery",name:"Beechworth Bakery",shop:"bakery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Birds":{name:"Birds",icon:"maki-bakery",imageURL:"https://graph.facebook.com/birdsbakeryderby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63001935",shop:"bakery"},addTags:{brand:"Birds","brand:wikidata":"Q63001935","brand:wikipedia":"en:Birds Bakery",name:"Birds",official_name:"Birds Bakery",shop:"bakery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bakery/BreadTalk":{name:"BreadTalk",icon:"maki-bakery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBreadTalk%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1106640",shop:"bakery"},addTags:{brand:"BreadTalk","brand:wikidata":"Q1106640","brand:wikipedia":"en:BreadTalk",name:"BreadTalk",shop:"bakery"},countryCodes:["sg"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Breadtop":{name:"Breadtop",icon:"maki-bakery",imageURL:"https://graph.facebook.com/we.love.breadtop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4959217",shop:"bakery"},addTags:{brand:"Breadtop","brand:wikidata":"Q4959217","brand:wikipedia":"en:Breadtop",cuisine:"chinese",name:"Breadtop",shop:"bakery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Brumby's Bakeries":{name:"Brumby's Bakeries",icon:"maki-bakery",imageURL:"https://graph.facebook.com/brumbys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4978794",shop:"bakery"},addTags:{brand:"Brumby's Bakeries","brand:wikidata":"Q4978794","brand:wikipedia":"en:Brumby's Bakeries",name:"Brumby's Bakeries",shop:"bakery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Bäckerei Fuchs":{name:"Bäckerei Fuchs",icon:"maki-bakery",imageURL:"https://graph.facebook.com/baeckereifuchs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42825993",shop:"bakery"},addTags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/COBS Bread":{name:"COBS Bread",icon:"maki-bakery",imageURL:"https://graph.facebook.com/bakersdelight/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4849261",shop:"bakery"},addTags:{brand:"COBS Bread","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"COBS Bread",shop:"bakery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Cadera":{name:"Cadera",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Cadera1853/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62086410",shop:"bakery"},addTags:{brand:"Cadera","brand:wikidata":"Q62086410",name:"Cadera",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Castaño":{name:"Castaño",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q5049629",shop:"bakery"},addTags:{brand:"Castaño","brand:wikidata":"Q5049629","brand:wikipedia":"en:Castaño (bakery)",name:"Castaño",shop:"bakery"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Cooplands":{name:"Cooplands",icon:"maki-bakery",imageURL:"https://graph.facebook.com/CooplandsBakers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5167971",shop:"bakery"},addTags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Dat Backhus":{name:"Dat Backhus",icon:"maki-bakery",imageURL:"https://graph.facebook.com/datbackhus.hamburg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62093175",shop:"bakery"},addTags:{brand:"Dat Backhus","brand:wikidata":"Q62093175",name:"Dat Backhus",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Der Beck":{name:"Der Beck",icon:"maki-bakery",imageURL:"https://graph.facebook.com/derbeck.baeckerei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1192443",shop:"bakery"},addTags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ditsch":{name:"Ditsch",icon:"maki-bakery",imageURL:"https://graph.facebook.com/ditsch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q911573",shop:"bakery"},addTags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Fornetti":{name:"Fornetti",icon:"maki-bakery",imageURL:"https://graph.facebook.com/fornetti.magyarorszag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1003020",shop:"bakery"},addTags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Goldilocks":{name:"Goldilocks",icon:"maki-bakery",imageURL:"https://graph.facebook.com/GoldilocksPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5580198",shop:"bakery"},addTags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"},countryCodes:["ca","ph","th","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Great Harvest Bread Company":{name:"Great Harvest Bread Company",icon:"maki-bakery",imageURL:"https://graph.facebook.com/GreatHarvestBreadCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5599297",shop:"bakery"},addTags:{brand:"Great Harvest Bread Company","brand:wikidata":"Q5599297","brand:wikipedia":"en:Great Harvest Bread Company",name:"Great Harvest Bread Company",shop:"bakery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Hofpfisterei":{name:"Hofpfisterei",icon:"maki-bakery",imageURL:"https://graph.facebook.com/hofpfisterei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1623217",shop:"bakery"},addTags:{brand:"Hofpfisterei","brand:wikidata":"Q1623217","brand:wikipedia":"en:Hofpfisterei",name:"Hofpfisterei",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ihle":{name:"Ihle",icon:"maki-bakery",imageURL:"https://graph.facebook.com/1845011368873218/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1626371",shop:"bakery"},addTags:{brand:"Ihle","brand:wikidata":"Q1626371","brand:wikipedia":"de:Landbäckerei Ihle",name:"Ihle",shop:"bakery"},countryCodes:["de"],terms:["landbäckerei ihle"],matchScore:2,suggestion:true},"shop/bakery/K&U Bäckerei":{name:"K&U Bäckerei",icon:"maki-bakery",imageURL:"https://graph.facebook.com/KU.Backkultur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1719433",shop:"bakery"},addTags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"},countryCodes:["de"],terms:["k&u"],matchScore:2,suggestion:true},"shop/bakery/Kamps":{name:"Kamps",icon:"maki-bakery",imageURL:"https://graph.facebook.com/417008548362119/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1723381",shop:"bakery"},addTags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/La Mie Câline":{name:"La Mie Câline",icon:"maki-bakery",imageURL:"https://graph.facebook.com/lamiecalinefrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3210704",shop:"bakery"},addTags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Le Crobag":{name:"Le Crobag",icon:"maki-bakery",imageURL:"https://graph.facebook.com/lecrobag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1558025",shop:"bakery"},addTags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"},countryCodes:["at","de","pl","ru"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Leifert":{name:"Leifert",icon:"maki-bakery",imageURL:"https://graph.facebook.com/baeckerei.leifert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66086129",shop:"bakery"},addTags:{brand:"Leifert","brand:wikidata":"Q66086129",name:"Leifert",shop:"bakery"},countryCodes:["de"],terms:["bäckerei leifert"],matchScore:2,suggestion:true},"shop/bakery/Lila Bäcker":{name:"Lila Bäcker",icon:"maki-bakery",imageURL:"https://pbs.twimg.com/profile_images/1145260042/logo_up_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q57516591",shop:"bakery"},addTags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Löwenbäcker Schaper":{name:"Löwenbäcker Schaper",icon:"maki-bakery",imageURL:"https://graph.facebook.com/LoewenbaeckerSchaper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075965",shop:"bakery"},addTags:{brand:"Löwenbäcker Schaper","brand:wikidata":"Q62075965",name:"Löwenbäcker Schaper",shop:"bakery"},countryCodes:["de"],terms:["schaper"],matchScore:2,suggestion:true},"shop/bakery/Marie Blachère":{name:"Marie Blachère",icon:"maki-bakery",imageURL:"https://graph.facebook.com/marieblachereusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082410",shop:"bakery"},addTags:{brand:"Marie Blachère","brand:wikidata":"Q62082410","brand:wikipedia":"fr:Marie Blachère",name:"Marie Blachère",shop:"bakery"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Milkau":{name:"Milkau",icon:"maki-bakery",imageURL:"https://graph.facebook.com/MilkauStadtbaecker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66208652",shop:"bakery"},addTags:{brand:"Milkau","brand:wikidata":"Q66208652",name:"Milkau",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Mlinar":{name:"Mlinar",icon:"maki-bakery",imageURL:"https://graph.facebook.com/MlinarHrvatska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082464",shop:"bakery"},addTags:{brand:"Mlinar","brand:wikidata":"Q62082464",name:"Mlinar",shop:"bakery"},countryCodes:["ba","hr","sl"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Musmanni":{name:"Musmanni",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q19382082",shop:"bakery"},addTags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Nothing Bundt Cakes":{name:"Nothing Bundt Cakes",icon:"maki-bakery",imageURL:"https://graph.facebook.com/nothingbundtcakes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082526",shop:"bakery"},addTags:{brand:"Nothing Bundt Cakes","brand:wikidata":"Q62082526",name:"Nothing Bundt Cakes",shop:"bakery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Paris Baguette (worldwide)":{name:"Paris Baguette (worldwide)",icon:"maki-bakery",imageURL:"https://graph.facebook.com/parisbaguetteus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62605260",shop:"bakery"},addTags:{brand:"Paris Baguette","brand:wikidata":"Q62605260",name:"Paris Baguette",shop:"bakery"},countryCodes:["sg","us","vn"],terms:["paris baguette cafe"],matchScore:2,suggestion:true},"shop/bakery/Paul":{name:"Paul",icon:"maki-bakery",imageURL:"https://pbs.twimg.com/profile_images/1104154254699364353/69J1OrZ1_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3370417",shop:"bakery"},addTags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Peter's gute Backstube":{name:"Peter's gute Backstube",icon:"maki-bakery",imageURL:"https://graph.facebook.com/petersgutebackstube/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67987587",shop:"bakery"},addTags:{brand:"Peter's gute Backstube","brand:wikidata":"Q67987587",name:"Peter's gute Backstube",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Red Ribbon":{name:"Red Ribbon",icon:"maki-bakery",imageURL:"https://graph.facebook.com/redribbonbakeshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7304789",shop:"bakery"},addTags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"},countryCodes:["ph","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Richters Altstadt-Bäckerei":{name:"Richters Altstadt-Bäckerei",icon:"maki-bakery",imageURL:"https://graph.facebook.com/richteraltstadtbaecker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66212346",shop:"bakery"},addTags:{brand:"Richters Altstadt-Bäckerei","brand:wikidata":"Q66212346",name:"Richters Altstadt-Bäckerei",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ronde des Pains":{name:"Ronde des Pains",icon:"maki-bakery",imageURL:"https://graph.facebook.com/487418498019899/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3441707",shop:"bakery"},addTags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Schäfer's":{name:"Schäfer's",icon:"maki-bakery",imageURL:"https://graph.facebook.com/149823855088841/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1464562",shop:"bakery"},addTags:{brand:"Schäfer's","brand:wikidata":"Q1464562","brand:wikipedia":"de:Schäfers Brot",name:"Schäfer's",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Sehne":{name:"Sehne",icon:"maki-bakery",imageURL:"https://graph.facebook.com/150057125031868/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1314761",shop:"bakery"},addTags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Starke Bäcker":{name:"Starke Bäcker",icon:"maki-bakery",imageURL:"https://graph.facebook.com/StarkeBaecker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133336",shop:"bakery"},addTags:{brand:"Starke Bäcker","brand:wikidata":"Q66133336",name:"Starke Bäcker",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Steinecke":{name:"Steinecke",icon:"maki-bakery",imageURL:"https://graph.facebook.com/brotmeisterei.steinecke/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57516278",shop:"bakery"},addTags:{brand:"Steinecke","brand:wikidata":"Q57516278","brand:wikipedia":"de:Meisterbäckerei Steinecke",name:"Steinecke",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Sternenbäck":{name:"Sternenbäck",icon:"maki-bakery",imageURL:"https://graph.facebook.com/sternenbaeck/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62595021",shop:"bakery"},addTags:{brand:"Sternenbäck","brand:wikidata":"Q62595021",name:"Sternenbäck",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ströck":{name:"Ströck",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Stroeck/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2357607",shop:"bakery"},addTags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Wiener Feinbäcker":{name:"Wiener Feinbäcker",icon:"maki-bakery",imageURL:"https://graph.facebook.com/248217405252147/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15854357",shop:"bakery"},addTags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/sander's backstube":{name:"sander's backstube",icon:"maki-bakery",imageURL:"https://graph.facebook.com/sanders.backstube/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66207337",shop:"bakery"},addTags:{brand:"sander's backstube","brand:wikidata":"Q66207337",name:"sander's backstube",shop:"bakery"},countryCodes:["de"],terms:["bäckerei sander"],matchScore:2,suggestion:true},"shop/bakery/von Allwörden":{name:"von Allwörden",icon:"maki-bakery",imageURL:"https://graph.facebook.com/allwoerden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60411349",shop:"bakery"},addTags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/サンジェルマン":{name:"サンジェルマン",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q11305612",shop:"bakery"},addTags:{brand:"サンジェルマン","brand:en":"Saint-Germain","brand:ja":"サンジェルマン","brand:wikidata":"Q11305612","brand:wikipedia":"ja:サンジェルマン (製パン)",name:"サンジェルマン","name:en":"Saint-Germain","name:ja":"サンジェルマン",shop:"bakery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bakery/ヴィ・ド・フランス":{name:"ヴィ・ド・フランス",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q7928249",shop:"bakery"},addTags:{brand:"ヴィ・ド・フランス","brand:en":"Vie de France","brand:ja":"ヴィ・ド・フランス","brand:wikidata":"Q7928249","brand:wikipedia":"ja:ヴィ・ド・フランス",name:"ヴィ・ド・フランス","name:en":"Vie de France","name:ja":"ヴィ・ド・フランス",shop:"bakery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bakery/巴黎贝甜 (China)":{name:"巴黎贝甜 (China)",icon:"maki-bakery",imageURL:"https://graph.facebook.com/parisbaguetteus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62605260",shop:"bakery"},addTags:{brand:"巴黎贝甜","brand:en":"Paris Baguette","brand:wikidata":"Q62605260","brand:zh":"巴黎贝甜",name:"巴黎贝甜","name:en":"Paris Baguette","name:zh":"巴黎贝甜",shop:"bakery"},countryCodes:["cn"],terms:["paris baguette","paris baguette cafe","巴黎貝甜"],matchScore:2,suggestion:true},"shop/bakery/뚜레쥬르":{name:"뚜레쥬르",icon:"maki-bakery",imageURL:"https://graph.facebook.com/TousLesJoursUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3535609",shop:"bakery"},addTags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:ko":"뚜레쥬르","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours","name:ko":"뚜레쥬르",shop:"bakery"},countryCodes:["kr"],terms:["뚜레주르"],matchScore:2,suggestion:true},"shop/bakery/파리바게뜨 (South Korea)":{name:"파리바게뜨 (South Korea)",icon:"maki-bakery",imageURL:"https://graph.facebook.com/parisbaguetteus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62605260",shop:"bakery"},addTags:{"alt_name:ko":"파리바게트",brand:"파리바게뜨","brand:en":"Paris Baguette","brand:ko":"파리바게뜨","brand:wikidata":"Q62605260",name:"파리바게뜨","name:en":"Paris Baguette","name:ko":"파리바게뜨",shop:"bakery"},countryCodes:["kr"],terms:["paris baguette","paris baguette cafe","파리바게트"],matchScore:2,suggestion:true},"shop/beauty/Benefit Brow Bar":{name:"Benefit Brow Bar",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/benefitcosmetics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2895769",shop:"beauty"},addTags:{beauty:"eyebrow;eyelash;waxing",brand:"Benefit","brand:wikidata":"Q2895769","brand:wikipedia":"en:Benefit Cosmetics",name:"Benefit Brow Bar",shop:"beauty"},countryCodes:["us"],terms:["benefit","ulta brow bar"],matchScore:2,suggestion:true},"shop/beauty/European Wax Center":{name:"European Wax Center",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/EuropeanWax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5413426",shop:"beauty"},addTags:{beauty:"waxing",brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Indigo Sun":{name:"Indigo Sun",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/indigosunretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63436906",shop:"beauty"},addTags:{beauty:"tanning",brand:"Indigo Sun","brand:wikidata":"Q63436906",name:"Indigo Sun",shop:"beauty"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Palm Beach Tan":{name:"Palm Beach Tan",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/PBTOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64027086",shop:"beauty"},addTags:{beauty:"tanning",brand:"Palm Beach Tan","brand:wikidata":"Q64027086","brand:wikipedia":"en:Palm Beach Tan",name:"Palm Beach Tan",shop:"beauty"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Sola Salons":{name:"Sola Salons",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/solasalons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64337426",shop:"beauty"},addTags:{beauty:"hair;nails;skin_care;massage",brand:"Sola Salons","brand:wikidata":"Q64337426",name:"Sola Salons",shop:"beauty"},countryCodes:["us"],terms:["sola","sola salon studios"],matchScore:2,suggestion:true},"shop/beauty/The Skin Bar at Ulta Beauty":{name:"The Skin Bar at Ulta Beauty",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/UltaBeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7880076",shop:"beauty"},addTags:{alt_name:"Ulta Skin Bar",beauty:"skin_care",brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"The Skin Bar at Ulta Beauty",shop:"beauty"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Yves Rocher":{name:"Yves Rocher",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/YvesRocherUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28496595",shop:"beauty"},addTags:{beauty:"cosmetics",brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"en:Yves Rocher (company)",name:"Yves Rocher",shop:"beauty"},terms:["ив роше"],matchScore:2,suggestion:true},"shop/bed/Bensons for Beds":{name:"Bensons for Beds",icon:"maki-lodging",imageURL:"https://pbs.twimg.com/profile_images/435352801321840641/LvfVjgBH_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q4890299",shop:"bed"},addTags:{brand:"Bensons for Beds","brand:wikidata":"Q4890299","brand:wikipedia":"en:Bensons for Beds",name:"Bensons for Beds",shop:"bed"},countryCodes:["gb"],terms:["bensons"],matchScore:2,suggestion:true},"shop/bed/Beter Bed":{name:"Beter Bed",icon:"maki-lodging",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBeterBed-logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q831076",shop:"bed"},addTags:{brand:"Beter Bed","brand:wikidata":"Q831076","brand:wikipedia":"nl:Beter Bed",name:"Beter Bed",shop:"bed"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/bed/Casper":{name:"Casper",icon:"maki-lodging",imageURL:"https://graph.facebook.com/224110981099062/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20539294",shop:"bed"},addTags:{brand:"Casper","brand:wikidata":"Q20539294","brand:wikipedia":"en:Casper Sleep",name:"Casper",shop:"bed"},terms:[],matchScore:2,suggestion:true},"shop/bed/Dreams":{name:"Dreams",icon:"maki-lodging",imageURL:"https://graph.facebook.com/dreamsbeds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5306688",shop:"bed"},addTags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bed/Grand Litier":{name:"Grand Litier",icon:"maki-lodging",imageURL:"https://graph.facebook.com/grandlitier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21030208",shop:"bed"},addTags:{brand:"Grand Litier","brand:wikidata":"Q21030208","brand:wikipedia":"fr:Grand Litier",name:"Grand Litier",shop:"bed"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/bed/Maison de la Literie":{name:"Maison de la Literie",icon:"maki-lodging",imageURL:"https://graph.facebook.com/MaisondelaLiterieFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80955776",shop:"bed"},addTags:{brand:"Maison de la Literie","brand:wikidata":"Q80955776",name:"Maison de la Literie",shop:"bed"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/bed/Matratzen Concord":{name:"Matratzen Concord",icon:"maki-lodging",imageURL:"https://graph.facebook.com/MatratzenConcord/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18629057",shop:"bed"},addTags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/bed/Mattress Firm":{name:"Mattress Firm",icon:"maki-lodging",imageURL:"https://graph.facebook.com/MattressFirm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6791878",shop:"bed"},addTags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"},countryCodes:["us"],terms:["sleepys"],matchScore:2,suggestion:true},"shop/bed/Mattress Warehouse":{name:"Mattress Warehouse",icon:"maki-lodging",imageURL:"https://graph.facebook.com/mattresswhse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61995079",shop:"bed"},addTags:{brand:"Mattress Warehouse","brand:wikidata":"Q61995079",name:"Mattress Warehouse",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bed/Sleep Country":{name:"Sleep Country",icon:"maki-lodging",imageURL:"https://graph.facebook.com/SleepCountryCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7539684",shop:"bed"},addTags:{brand:"Sleep Country","brand:wikidata":"Q7539684","brand:wikipedia":"en:Sleep Country Canada",name:"Sleep Country",shop:"bed"},countryCodes:["ca"],terms:["sleep country canada"],matchScore:2,suggestion:true},"shop/bed/Sleep Experts":{name:"Sleep Experts",icon:"maki-lodging",imageURL:"https://graph.facebook.com/sleepexperts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7539688",shop:"bed"},addTags:{brand:"Sleep Experts","brand:wikidata":"Q7539688","brand:wikipedia":"en:Sleep Experts",name:"Sleep Experts",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bed/Sleep Number":{name:"Sleep Number",icon:"maki-lodging",imageURL:"https://graph.facebook.com/SleepNumber/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7447640",shop:"bed"},addTags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Dursty":{name:"Dursty",icon:"temaki-bottles",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDursty%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1267518",shop:"beverages"},addTags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Edeka Getränkemarkt":{name:"Edeka Getränkemarkt",icon:"temaki-bottles",geometry:["point","area"],tags:{"brand:wikidata":"Q57450576",shop:"beverages"},addTags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Fristo":{name:"Fristo",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/848769365134665/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1465151",shop:"beverages"},addTags:{brand:"Fristo","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo",shop:"beverages"},countryCodes:["at","de"],terms:["fristo getränkemarkt"],matchScore:2,suggestion:true},"shop/beverages/Getränke Hoffmann":{name:"Getränke Hoffmann",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/getraenkehoffmann/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19284021",shop:"beverages"},addTags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Getränkeland":{name:"Getränkeland",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/Getraenkeland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62594849",shop:"beverages"},addTags:{brand:"Getränkeland","brand:wikidata":"Q62594849",name:"Getränkeland",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Hol'ab":{name:"Hol'ab",icon:"temaki-bottles",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20hol%20ab.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q57557270",shop:"beverages"},addTags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Orterer Getränkemarkt":{name:"Orterer Getränkemarkt",icon:"temaki-bottles",geometry:["point","area"],tags:{"brand:wikidata":"Q23787118",shop:"beverages"},addTags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Rewe Getränkemarkt":{name:"Rewe Getränkemarkt",icon:"temaki-bottles",geometry:["point","area"],tags:{"brand:wikidata":"Q57519344",shop:"beverages"},addTags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Trinkgut":{name:"Trinkgut",icon:"temaki-bottles",imageURL:"https://pbs.twimg.com/profile_images/339373337/twitter_icon_trinkgut_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q2453627",shop:"beverages"},addTags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/清心福全":{name:"清心福全",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/chingshin1987/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10391229",shop:"beverages"},addTags:{brand:"清心福全","brand:en":"Ching Shin","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站","brand:zh":"清心福全",name:"清心福全","name:en":"Ching Shin","name:zh":"清心福全",shop:"beverages"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Cycle Republic":{name:"Cycle Republic",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/CycleRepublicUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65042920",shop:"bicycle"},addTags:{brand:"Cycle Republic","brand:wikidata":"Q65042920","brand:wikipedia":"en:Cycle Republic",name:"Cycle Republic",shop:"bicycle"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Evans Cycles":{name:"Evans Cycles",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/evanscycles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5415901",shop:"bicycle"},addTags:{brand:"Evans Cycles","brand:wikidata":"Q5415901","brand:wikipedia":"en:Evans Cycles",name:"Evans Cycles",shop:"bicycle"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Fri BikeShop":{name:"Fri BikeShop",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/Cykelbutikken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26721030",shop:"bicycle"},addTags:{brand:"Fri BikeShop","brand:wikidata":"Q26721030",name:"Fri BikeShop",shop:"bicycle"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/Giant":{name:"Giant",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/giantbicycles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q703557",shop:"bicycle"},addTags:{brand:"Giant","brand:wikidata":"Q703557","brand:wikipedia":"en:Giant Bicycles",name:"Giant",shop:"bicycle"},terms:[],matchScore:2,suggestion:true},"shop/bicycle/Trek":{name:"Trek",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/TrekBicycle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1067617",shop:"bicycle"},addTags:{alt_name:"Trek Bicycle Store",brand:"Trek","brand:wikidata":"Q1067617","brand:wikipedia":"en:Trek Bicycle Corporation",name:"Trek",shop:"bicycle"},terms:["treck","trek bicycle"],matchScore:2,suggestion:true},"shop/bicycle/サイクルベースあさひ":{name:"サイクルベースあさひ",icon:"maki-bicycle",imageURL:"https://graph.facebook.com/cbasahi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11257202",shop:"bicycle"},addTags:{brand:"サイクルベースあさひ","brand:en":"Cycle Base Asahi","brand:ja":"サイクルベースあさひ","brand:wikidata":"Q11257202","brand:wikipedia":"ja:あさひ (企業)",name:"サイクルベースあさひ","name:en":"Cycle Base Asahi","name:ja":"サイクルベースあさひ",shop:"bicycle"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/boat/West Marine":{name:"West Marine",icon:"temaki-boat",imageURL:"https://graph.facebook.com/WestMarine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7985852",shop:"boat"},addTags:{brand:"West Marine","brand:wikidata":"Q7985852","brand:wikipedia":"en:West Marine",name:"West Marine",shop:"boat"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Betfred":{name:"Betfred",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1034363254758359041/dxetDfNN_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4897425",shop:"bookmaker"},addTags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Coral":{name:"Coral",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1000461740772134913/T9-zMXmF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q54621344",shop:"bookmaker"},addTags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Fortuna":{name:"Fortuna",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/703606549739592/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25857973",shop:"bookmaker"},addTags:{brand:"Fortuna","brand:wikidata":"Q25857973","brand:wikipedia":"en:Fortuna Entertainment Group",name:"Fortuna",shop:"bookmaker"},countryCodes:["cz","hr","pl","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Ladbrokes":{name:"Ladbrokes",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1148531433947967488/3zGk1STM_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1799875",shop:"bookmaker"},addTags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Paddy Power":{name:"Paddy Power",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/964533060942299136/XCPfJNxf_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3888718",shop:"bookmaker"},addTags:{brand:"Paddy Power","brand:wikidata":"Q3888718","brand:wikipedia":"en:Paddy Power",name:"Paddy Power",shop:"bookmaker"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Tipico":{name:"Tipico",icon:"temaki-money_hand",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTipico%20Unternehmenslogo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q15851003",shop:"bookmaker"},addTags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"},countryCodes:["at","co","de","gi","hr","mt"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/William Hill":{name:"William Hill",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/797028677733253120/bW9oFXT-_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4053147",shop:"bookmaker"},addTags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/ΟΠΑΠ":{name:"ΟΠΑΠ",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1024247841135452160/UlceXxkv_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2007823",shop:"bookmaker"},addTags:{brand:"ΟΠΑΠ","brand:wikidata":"Q2007823","brand:wikipedia":"el:ΟΠΑΠ",name:"ΟΠΑΠ",shop:"bookmaker"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Лига ставок":{name:"Лига ставок",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/ligastavok05/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6545804",shop:"bookmaker"},addTags:{brand:"Лига ставок","brand:en":"Liga Stavok","brand:ru":"Лига ставок","brand:wikidata":"Q6545804","brand:wikipedia":"ru:Лига Ставок",name:"Лига ставок","name:en":"Liga Stavok","name:ru":"Лига ставок",shop:"bookmaker"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Фонбет":{name:"Фонбет",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/fonbetrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q49137910",shop:"bookmaker"},addTags:{brand:"Фонбет","brand:en":"Fonbet","brand:ru":"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет","name:en":"Fonbet","name:ru":"Фонбет",shop:"bookmaker"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Akademibokhandeln":{name:"Akademibokhandeln",icon:"fas-book",imageURL:"https://graph.facebook.com/Akademibokhandeln/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10403918",shop:"books"},addTags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/books/Akateeminen Kirjakauppa":{name:"Akateeminen Kirjakauppa",icon:"fas-book",imageURL:"https://graph.facebook.com/AkateeminenCOM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10403942",shop:"books"},addTags:{brand:"Akateeminen Kirjakauppa","brand:wikidata":"Q10403942","brand:wikipedia":"fi:Akateeminen Kirjakauppa",name:"Akateeminen Kirjakauppa",shop:"books"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/books/Barnes & Noble":{name:"Barnes & Noble",icon:"fas-book",imageURL:"https://graph.facebook.com/barnesandnoble/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795454",shop:"books"},addTags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Bertrand":{name:"Bertrand",icon:"fas-book",imageURL:"https://graph.facebook.com/bertrandlivreiros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1866547",shop:"books"},addTags:{brand:"Bertrand","brand:wikidata":"Q1866547","brand:wikipedia":"en:Livraria Bertrand",name:"Bertrand",shop:"books"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/books/Books-A-Million":{name:"Books-A-Million",icon:"fas-book",imageURL:"https://graph.facebook.com/booksamillion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943266",shop:"books"},addTags:{brand:"Books-A-Million","brand:wikidata":"Q4943266","brand:wikipedia":"en:Books-A-Million",name:"Books-A-Million",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Bruna":{name:"Bruna",icon:"fas-book",imageURL:"https://graph.facebook.com/Brunawinkels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317555",shop:"books"},addTags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"en:Bruna (company)",name:"Bruna",shop:"books"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/books/Chapters":{name:"Chapters",icon:"fas-book",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChapters%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5073540",shop:"books"},addTags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters (bookstore)",name:"Chapters",shop:"books"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/books/Coles":{name:"Coles",icon:"fas-book",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FColes%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5144641",shop:"books"},addTags:{brand:"Coles","brand:wikidata":"Q5144641","brand:wikipedia":"en:Coles (bookstore)",name:"Coles",shop:"books"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/books/Cultura":{name:"Cultura",icon:"fas-book",imageURL:"https://graph.facebook.com/culturafr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3007154",shop:"books"},addTags:{brand:"Cultura","brand:wikidata":"Q3007154","brand:wikipedia":"fr:Cultura",name:"Cultura",shop:"books"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/books/Empik":{name:"Empik",icon:"fas-book",imageURL:"https://graph.facebook.com/empikcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3045978",shop:"books"},addTags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"pl:Empik",name:"Empik",shop:"books"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/books/Fnac":{name:"Fnac",icon:"fas-book",imageURL:"https://graph.facebook.com/Fnac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q676585",shop:"books"},addTags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"},countryCodes:["be","ch","es","fr","nl","pt"],terms:[],matchScore:2,suggestion:true},"shop/books/Gramedia":{name:"Gramedia",icon:"fas-book",imageURL:"https://graph.facebook.com/gramediacom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19646130",shop:"books"},addTags:{brand:"Gramedia","brand:wikidata":"Q19646130","brand:wikipedia":"id:Gramedia (toko buku)",name:"Gramedia",shop:"books"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/books/Half Price Books":{name:"Half Price Books",icon:"fas-book",imageURL:"https://graph.facebook.com/halfpricebooks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5641744",shop:"books"},addTags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Hugendubel":{name:"Hugendubel",icon:"fas-book",imageURL:"https://graph.facebook.com/hugendubelbuchhandlungen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1634142",shop:"books"},addTags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Indigo":{name:"Indigo",icon:"fas-book",imageURL:"https://graph.facebook.com/ChaptersIndigo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2477358",shop:"books"},addTags:{alt_name:"!ndigo",brand:"Indigo","brand:wikidata":"Q2477358","brand:wikipedia":"en:Indigo Books and Music",name:"Indigo",shop:"books"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/books/Libro":{name:"Libro",icon:"fas-book",imageURL:"https://graph.facebook.com/libro.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1823138",shop:"books"},addTags:{brand:"Libro","brand:wikidata":"Q1823138","brand:wikipedia":"de:Libro",name:"Libro",shop:"books"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/books/Mondadori":{name:"Mondadori",icon:"fas-book",imageURL:"https://graph.facebook.com/GruppoMondadori/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q85355",shop:"books"},addTags:{brand:"Mondadori","brand:wikidata":"Q85355","brand:wikipedia":"en:Arnoldo Mondadori Editore",name:"Mondadori",shop:"books"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/books/National Book Store":{name:"National Book Store",icon:"fas-book",imageURL:"https://graph.facebook.com/nbsalert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6971094",shop:"books"},addTags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/books/Osiander":{name:"Osiander",icon:"fas-book",imageURL:"https://graph.facebook.com/Osiander/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1800686",shop:"books"},addTags:{brand:"Osiander","brand:wikidata":"Q1800686","brand:wikipedia":"de:Osiandersche Buchhandlung",name:"Osiander",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Oxfam Bookshop":{name:"Oxfam Bookshop",icon:"fas-book",imageURL:"https://graph.facebook.com/oxfamGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7115196",shop:"books"},addTags:{brand:"Oxfam Bookshop","brand:wikidata":"Q7115196","brand:wikipedia":"en:Oxfam bookshops",name:"Oxfam Bookshop",second_hand:"only",shop:"books"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/books/Saraiva":{name:"Saraiva",icon:"fas-book",imageURL:"https://graph.facebook.com/saraivaonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10319337",shop:"books"},addTags:{alt_name:"Livraria Saraiva",brand:"Saraiva","brand:wikidata":"Q10319337","brand:wikipedia":"pt:Livraria Saraiva",name:"Saraiva",shop:"books"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/books/Seagull Book":{name:"Seagull Book",icon:"fas-book",imageURL:"https://graph.facebook.com/SeagullBookCorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7440458",shop:"books"},addTags:{brand:"Seagull Book","brand:wikidata":"Q7440458","brand:wikipedia":"en:Seagull Book",name:"Seagull Book",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Standaard Boekhandel":{name:"Standaard Boekhandel",icon:"fas-book",imageURL:"https://graph.facebook.com/standaardboekhandel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3496554",shop:"books"},addTags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"shop/books/Suomalainen Kirjakauppa":{name:"Suomalainen Kirjakauppa",icon:"fas-book",imageURL:"https://graph.facebook.com/suomalainencom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7641808",shop:"books"},addTags:{brand:"Suomalainen Kirjakauppa","brand:wikidata":"Q7641808","brand:wikipedia":"fi:Suomalainen Kirjakauppa",name:"Suomalainen Kirjakauppa",shop:"books"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/books/TSUTAYA":{name:"TSUTAYA",icon:"fas-book",imageURL:"https://graph.facebook.com/TSUTAYA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"books"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/Thalia":{name:"Thalia",icon:"fas-book",imageURL:"https://graph.facebook.com/thalia.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2408854",shop:"books"},addTags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/books/The Works":{name:"The Works",icon:"fas-book",imageURL:"https://graph.facebook.com/TheWorksStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7775853",shop:"books"},addTags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/books/WHSmith":{name:"WHSmith",icon:"fas-book",imageURL:"https://graph.facebook.com/WHSmithuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1548712",shop:"books"},addTags:{brand:"WHSmith","brand:wikidata":"Q1548712","brand:wikipedia":"en:WHSmith",name:"WHSmith",shop:"books"},terms:[],matchScore:2,suggestion:true},"shop/books/Waterstones":{name:"Waterstones",icon:"fas-book",imageURL:"https://graph.facebook.com/waterstones/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151779",shop:"books"},addTags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"},countryCodes:["be","gb","ie","je","nl"],terms:[],matchScore:2,suggestion:true},"shop/books/Weltbild":{name:"Weltbild",icon:"fas-book",imageURL:"https://graph.facebook.com/weltbild/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q883522",shop:"books"},addTags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Буквоед":{name:"Буквоед",icon:"fas-book",imageURL:"https://graph.facebook.com/SuperBookvoed/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4098549",shop:"books"},addTags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Дом книги":{name:"Дом книги",icon:"fas-book",imageURL:"https://graph.facebook.com/spbdk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48950742",shop:"books"},addTags:{brand:"Дом книги","brand:wikidata":"Q48950742","brand:wikipedia":"ru:Московский дом книги",name:"Дом книги",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Читай-город":{name:"Читай-город",icon:"fas-book",imageURL:"https://graph.facebook.com/chitaigorod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4516645",shop:"books"},addTags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/סטימצקי":{name:"סטימצקי",icon:"fas-book",imageURL:"https://graph.facebook.com/SteimatzkyMadaf.HaSfarim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2903995",shop:"books"},addTags:{brand:"סטימצקי","brand:en":"Steimatzky","brand:he":"סטימצקי","brand:wikidata":"Q2903995","brand:wikipedia":"he:סטימצקי",name:"סטימצקי","name:en":"Steimatzky","name:he":"סטימצקי",shop:"books"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"shop/books/צומת ספרים":{name:"צומת ספרים",icon:"fas-book",imageURL:"https://graph.facebook.com/tzometsfarim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6743833",shop:"books"},addTags:{brand:"צומת ספרים","brand:en":"Tzomet Sfarim","brand:he":"צומת ספרים","brand:wikidata":"Q6743833","brand:wikipedia":"he:צומת ספרים",name:"צומת ספרים","name:en":"Tzomet Sfarm","name:he":"צומת ספרים",shop:"books"},countryCodes:["il"],terms:["zomet sfarim"],matchScore:2,suggestion:true},"shop/books/あおい書店":{name:"あおい書店",icon:"fas-book",imageURL:"https://graph.facebook.com/aoi.bookstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11256783",shop:"books"},addTags:{brand:"あおい書店","brand:en":"AOI","brand:ja":"あおい書店","brand:wikidata":"Q11256783","brand:wikipedia":"ja:あおい書店",name:"あおい書店","name:en":"AOI","name:ja":"あおい書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/オリオン書房":{name:"オリオン書房",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q11292597",shop:"books"},addTags:{brand:"オリオン書房","brand:en":"Orion Books","brand:ja":"オリオン書房","brand:wikidata":"Q11292597","brand:wikipedia":"ja:オリオン書房",name:"オリオン書房","name:en":"Orion Books","name:ja":"オリオン書房",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/ブックオフ":{name:"ブックオフ",icon:"fas-book",imageURL:"https://graph.facebook.com/bookoffcorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q893011",shop:"books"},addTags:{brand:"ブックオフ","brand:en":"Book Off","brand:ja":"ブックオフ","brand:wikidata":"Q893011","brand:wikipedia":"en:Book Off",name:"ブックオフ","name:en":"Book Off","name:ja":"ブックオフ",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/メロンブックス":{name:"メロンブックス",icon:"fas-book",imageURL:"https://pbs.twimg.com/profile_images/877364475304714240/Ael4G2BP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q10851653",shop:"books"},addTags:{brand:"メロンブックス","brand:en":"Melonbooks","brand:ja":"メロンブックス","brand:wikidata":"Q10851653","brand:wikipedia":"ja:メロンブックス",name:"メロンブックス","name:en":"Melonbooks","name:ja":"メロンブックス",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/リブロ":{name:"リブロ",icon:"fas-book",imageURL:"https://graph.facebook.com/libroryubo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6542768",shop:"books"},addTags:{brand:"リブロ","brand:en":"LIBRO","brand:ja":"リブロ","brand:wikidata":"Q6542768","brand:wikipedia":"ja:リブロ",name:"リブロ","name:en":"Libro","name:ja":"リブロ",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/三省堂書店":{name:"三省堂書店",icon:"fas-book",imageURL:"https://graph.facebook.com/books.sanseido/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10866539",shop:"books"},addTags:{brand:"三省堂書店","brand:en":"Books Sanseido","brand:ja":"三省堂書店","brand:wikidata":"Q10866539","brand:wikipedia":"ja:三省堂書店",name:"三省堂書店","name:en":"Books Sanseido","name:ja":"三省堂書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/文教堂":{name:"文教堂",icon:"fas-book",imageURL:"https://pbs.twimg.com/profile_images/1151659177552404481/CvFdvBDu_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11499974",shop:"books"},addTags:{brand:"文教堂","brand:en":"Bunkyodo","brand:ja":"文教堂","brand:wikidata":"Q11499974","brand:wikipedia":"ja:文教堂",name:"文教堂","name:en":"Bunkyodo","name:ja":"文教堂",shop:"books"},countryCodes:["jp"],terms:["文教堂書店"],matchScore:2,suggestion:true},"shop/books/新华书店":{name:"新华书店",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q6124193",shop:"books"},addTags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore","brand:zh":"新华书店",name:"新华书店","name:en":"Xinhua Bookstore","name:zh":"新华书店",shop:"books"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/books/有隣堂":{name:"有隣堂",icon:"fas-book",imageURL:"https://graph.facebook.com/136524066475474/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8061680",shop:"books"},addTags:{brand:"有隣堂","brand:en":"Yurindo","brand:ja":"有隣堂","brand:wikidata":"Q8061680","brand:wikipedia":"ja:有隣堂",name:"有隣堂","name:en":"Yurindo","name:ja":"有隣堂",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/未来屋書店":{name:"未来屋書店",icon:"fas-book",imageURL:"https://graph.facebook.com/miraiyashoten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11519563",shop:"books"},addTags:{brand:"未来屋書店","brand:en":"Miraiya Shoten","brand:ja":"未来屋書店","brand:wikidata":"Q11519563","brand:wikipedia":"ja:未来屋書店",name:"未来屋書店","name:en":"Miraiya Shoten","name:ja":"未来屋書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Coqivoire":{name:"Coqivoire",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/COQIVOIRE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60183284",shop:"butcher"},addTags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"},countryCodes:["ci"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Foani":{name:"Foani",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/foaniservices/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60183335",shop:"butcher"},addTags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"},countryCodes:["ci"],terms:[],matchScore:2,suggestion:true},"shop/butcher/M&M Food Market":{name:"M&M Food Market",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/mandmfoodmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6711827",shop:"butcher"},addTags:{brand:"M&M Food Market","brand:wikidata":"Q6711827","brand:wikipedia":"en:M&M Food Market",name:"M&M Food Market",shop:"butcher"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Vinzenzmurr":{name:"Vinzenzmurr",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/vinzenzmurrtraditionsmetzgerei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2527361",shop:"butcher"},addTags:{brand:"Vinzenzmurr","brand:wikidata":"Q2527361","brand:wikipedia":"de:Vinzenzmurr",name:"Vinzenzmurr",shop:"butcher"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Великолукский мясокомбинат":{name:"Великолукский мясокомбинат",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/vlmkspb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18401767",shop:"butcher"},addTags:{brand:"Великолукский мясокомбинат","brand:wikidata":"Q18401767","brand:wikipedia":"ru:Великолукский мясокомбинат",name:"Великолукский мясокомбинат",shop:"butcher"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Родинна ковбаска":{name:"Родинна ковбаска",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/rodunnakovbaska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30969660",shop:"butcher"},addTags:{brand:"Родинна ковбаска","brand:en":"Rodynna-kovbaska","brand:wikidata":"Q30969660","brand:wikipedia":"uk:ТзОВ «Барком»",name:"Родинна ковбаска","name:en":"Rodynna-kovbaska",shop:"butcher"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/butcher/肉のハナマサ":{name:"肉のハナマサ",icon:"temaki-cleaver",imageURL:"https://graph.facebook.com/hanamasaresto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11326564",shop:"butcher"},addTags:{brand:"ハナマサ","brand:en":"Hanamasa","brand:ja":"ハナマサ","brand:wikidata":"Q11326564","brand:wikipedia":"ja:ハナマサ",butcher:"beef",name:"肉のハナマサ","name:en":"Hanamasa Meat","name:ja":"肉のハナマサ",shop:"butcher"},countryCodes:["jp"],terms:["ハナマサ"],matchScore:2,suggestion:true},"shop/camera/Jessops":{name:"Jessops",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/jessops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3191701",shop:"camera"},addTags:{brand:"Jessops","brand:wikidata":"Q3191701","brand:wikipedia":"en:Jessops",name:"Jessops",shop:"camera"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/candles/Yankee Candle":{name:"Yankee Candle",icon:"fas-burn",imageURL:"https://graph.facebook.com/Yankeecandle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8048733",shop:"candles"},addTags:{brand:"Yankee Candle","brand:wikidata":"Q8048733","brand:wikipedia":"en:Yankee Candle",name:"Yankee Candle",shop:"candles"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Advance Auto Parts":{name:"Advance Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/advanceautoparts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4686051",shop:"car_parts"},addTags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"},countryCodes:["ca","us","vi"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Auto Plus":{name:"Auto Plus",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/AutoPlusUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65121114",shop:"car_parts"},addTags:{brand:"Auto Plus","brand:wikidata":"Q65121114",name:"Auto Plus",official_name:"Auto Plus Auto Parts",shop:"car_parts"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/AutoZone":{name:"AutoZone",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/autozone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4826087",shop:"car_parts"},addTags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"},countryCodes:["br","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Automat":{name:"Automat",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/automatnl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q70623238",shop:"car_parts"},addTags:{brand:"Automat","brand:wikidata":"Q70623238",name:"Automat",shop:"car_parts"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Carquest":{name:"Carquest",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/Carquestautoparts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5045948",shop:"car_parts"},addTags:{brand:"Carquest","brand:wikidata":"Q5045948","brand:wikipedia":"en:Carquest",name:"Carquest",official_name:"Carquest Auto Parts",shop:"car_parts"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Euro Car Parts":{name:"Euro Car Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/EuroCarPartsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23782692",shop:"car_parts"},addTags:{brand:"Euro Car Parts","brand:wikidata":"Q23782692","brand:wikipedia":"en:Euro Car Parts",name:"Euro Car Parts",shop:"car_parts"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/GSF Car Parts":{name:"GSF Car Parts",icon:"fas-car-battery",imageURL:"https://pbs.twimg.com/profile_images/945686511017701376/_DP1VoIg_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q80963064",shop:"car_parts"},addTags:{brand:"GSF Car Parts","brand:wikidata":"Q80963064",name:"GSF Car Parts",shop:"car_parts"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Halfords":{name:"Halfords",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/HalfordsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3398786",shop:"car_parts"},addTags:{brand:"Halfords","brand:wikidata":"Q3398786","brand:wikipedia":"en:Halfords",name:"Halfords","service:bicycle:retail":"yes",shop:"car_parts"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/KOI Auto Parts":{name:"KOI Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/KOIAutoParts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6334934",shop:"car_parts"},addTags:{brand:"KOI Auto Parts","brand:wikidata":"Q6334934","brand:wikipedia":"en:KOI Auto Parts",name:"KOI Auto Parts",shop:"car_parts",short_name:"KOI"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/NAPA Auto Parts":{name:"NAPA Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/NAPAAUTOPARTS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6970842",shop:"car_parts"},addTags:{brand:"NAPA Auto Parts","brand:wikidata":"Q6970842","brand:wikipedia":"en:National Automotive Parts Association",name:"NAPA Auto Parts",shop:"car_parts"},countryCodes:["ca","mx","us"],terms:["napa"],matchScore:2,suggestion:true},"shop/car_parts/O'Reilly Auto Parts":{name:"O'Reilly Auto Parts",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/oreillyautoparts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7071951",shop:"car_parts"},addTags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"},countryCodes:["us"],terms:["o'reilly"],matchScore:2,suggestion:true},"shop/car_parts/Repco":{name:"Repco",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/RepcoAusCareers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q173425",shop:"car_parts"},addTags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Supercheap Auto":{name:"Supercheap Auto",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/scauto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643119",shop:"car_parts"},addTags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/The Parts Alliance":{name:"The Parts Alliance",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/thepartsalliance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80964997",shop:"car_parts"},addTags:{brand:"The Parts Alliance","brand:wikidata":"Q80964997",name:"The Parts Alliance",shop:"car_parts"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/イエローハット":{name:"イエローハット",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/YellowHatUAE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11285915",shop:"car_parts"},addTags:{brand:"イエローハット","brand:en":"Yellow Hat","brand:ja":"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット","name:en":"Yellow Hat","name:ja":"イエローハット",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/オートバックス":{name:"オートバックス",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/autobacs.seven/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7886426",shop:"car_parts"},addTags:{brand:"オートバックス","brand:en":"Autobacs","brand:ja":"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス","name:en":"Autobacs","name:ja":"オートバックス",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/ジェームス":{name:"ジェームス",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/1589262564705310/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11309404",shop:"car_parts"},addTags:{brand:"ジェームス","brand:en":"JMS","brand:ja":"ジェームス","brand:wikidata":"Q11309404","brand:wikipedia":"ja:ジェームス",name:"ジェームス","name:en":"JMS","name:ja":"ジェームス","official_name:en":"Joyful Motorist Shop",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/タイヤ館":{name:"タイヤ館",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/1627235540828842/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11315808",shop:"car_parts"},addTags:{brand:"タイヤ館","brand:en":"Taiyakan","brand:ja":"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館","name:en":"Taiyakan","name:ja":"タイヤ館",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/A.T.U":{name:"A.T.U",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ATU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q784721",shop:"car_repair"},addTags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"},countryCodes:["at","de"],terms:["auto-teile-unger"],matchScore:2,suggestion:true},"shop/car_repair/AAMCO":{name:"AAMCO",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/AAMCO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4649902",shop:"car_repair"},addTags:{brand:"AAMCO","brand:wikidata":"Q4649902","brand:wikipedia":"en:AAMCO Transmissions",name:"AAMCO","service:vehicle:transmission":"yes",shop:"car_repair"},countryCodes:["ca","us"],terms:["aamco transmissions","aamco transmissions and total car care"],matchScore:2,suggestion:true},"shop/car_repair/ATS Euromaster":{name:"ATS Euromaster",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ATSEUROMASTER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4654920",shop:"car_repair"},addTags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Avatacar":{name:"Avatacar",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Avatacar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65156251",shop:"car_repair"},addTags:{brand:"Avatacar","brand:wikidata":"Q65156251","brand:wikipedia":"fr:Avatacar",name:"Avatacar",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/BestDrive":{name:"BestDrive",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/BestDriveFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63057183",shop:"car_repair"},addTags:{brand:"BestDrive","brand:wikidata":"Q63057183",name:"BestDrive",shop:"car_repair"},countryCodes:["cz","fr","sk"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Bosch Car Service":{name:"Bosch Car Service",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/BoschGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q234021",shop:"car_repair"},addTags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"en:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"},terms:["bosch service"],matchScore:2,suggestion:true},"shop/car_repair/Brakes Plus":{name:"Brakes Plus",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/brakesplusllc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075246",shop:"car_repair"},addTags:{brand:"Brakes Plus","brand:wikidata":"Q62075246",name:"Brakes Plus",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Car-X":{name:"Car-X",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/CarxAuto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63859189",shop:"car_repair"},addTags:{brand:"Car-X","brand:wikidata":"Q63859189",name:"Car-X",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Carglass":{name:"Carglass",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/CarglassSweden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1035997",shop:"car_repair"},addTags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Carstar":{name:"Carstar",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/CARSTAR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64187891",shop:"car_repair"},addTags:{brand:"Carstar","brand:wikidata":"Q64187891",name:"Carstar","service:vehicle:body_repair":"yes",shop:"car_repair"},countryCodes:["ca","us"],terms:["carstar auto body repair experts"],matchScore:2,suggestion:true},"shop/car_repair/Citroën":{name:"Citroën",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Citroen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6746",shop:"car_repair"},addTags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Euromaster":{name:"Euromaster",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ATSEUROMASTER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3060668",shop:"car_repair"},addTags:{brand:"Euromaster","brand:wikidata":"Q3060668","brand:wikipedia":"de:Euromaster",name:"Euromaster",shop:"car_repair"},countryCodes:["ch","de","es","fi","fr","nl","pt"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/F1 Autocentre":{name:"F1 Autocentre",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/FormulaOneAutocentres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79239635",shop:"car_repair"},addTags:{brand:"F1 Autocentre","brand:wikidata":"Q79239635",name:"F1 Autocentre",shop:"car_repair"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Feu Vert":{name:"Feu Vert",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/FeuVert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3070922",shop:"car_repair"},addTags:{brand:"Feu Vert","brand:wikidata":"Q3070922","brand:wikipedia":"fr:Feu vert (entreprise)",name:"Feu Vert",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Firestone":{name:"Firestone",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/FirestoneTires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420837",shop:"car_repair"},addTags:{brand:"Firestone","brand:wikidata":"Q420837","brand:wikipedia":"en:Firestone Tire and Rubber Company",name:"Firestone",official_name:"Firestone Complete Auto Care",shop:"car_repair"},countryCodes:["ca","cl","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/First Stop":{name:"First Stop",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/380279892308003/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3072965",shop:"car_repair"},addTags:{brand:"First Stop","brand:wikidata":"Q3072965","brand:wikipedia":"fr:First Stop",name:"First Stop",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Ford":{name:"Ford",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ford/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q44294",shop:"car_repair"},addTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Goodyear":{name:"Goodyear",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/GoodyearNorthAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q620875",shop:"car_repair"},addTags:{brand:"Goodyear","brand:wikidata":"Q620875","brand:wikipedia":"en:Goodyear Tire and Rubber Company",name:"Goodyear",shop:"car_repair"},countryCodes:["au","ca","cl","pe","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Grease Monkey":{name:"Grease Monkey",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/greasemonkeyintl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5598563",shop:"car_repair"},addTags:{brand:"Grease Monkey","brand:wikidata":"Q5598563","brand:wikipedia":"en:Grease Monkey (business)",name:"Grease Monkey",shop:"car_repair"},countryCodes:["cn","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Halfords Autocentre":{name:"Halfords Autocentre",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/HalfordsAutocentres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5641894",shop:"car_repair"},addTags:{brand:"Halfords Autocentre","brand:wikidata":"Q5641894","brand:wikipedia":"en:Halfords Autocentre",name:"Halfords Autocentre",shop:"car_repair"},countryCodes:["gb"],terms:["halfords"],matchScore:2,suggestion:true},"shop/car_repair/Jiffy Lube":{name:"Jiffy Lube",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/jiffylube/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6192247",shop:"car_repair"},addTags:{brand:"Jiffy Lube","brand:wikidata":"Q6192247","brand:wikipedia":"en:Jiffy Lube",name:"Jiffy Lube",shop:"car_repair"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Kwik Fit":{name:"Kwik Fit",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/KwikFit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q958053",shop:"car_repair"},addTags:{brand:"Kwik Fit","brand:wikidata":"Q958053","brand:wikipedia":"en:Kwik Fit",name:"Kwik Fit",shop:"car_repair"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/MAACO":{name:"MAACO",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/MAACOUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6714015",shop:"car_repair"},addTags:{brand:"MAACO","brand:wikidata":"Q6714015","brand:wikipedia":"en:MAACO",name:"MAACO","service:vehicle:body_repair":"yes","service:vehicle:painting":"yes",shop:"car_repair"},countryCodes:["ca","us"],terms:["maaco collision repair & auto painting"],matchScore:2,suggestion:true},"shop/car_repair/Meineke":{name:"Meineke",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/meinekecarcareusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6810159",shop:"car_repair"},addTags:{brand:"Meineke","brand:wikidata":"Q6810159","brand:wikipedia":"en:Meineke Car Care Centers",name:"Meineke",official_name:"Meineke Car Care Center",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Mekonomen":{name:"Mekonomen",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/MekonomenSverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10580079",shop:"car_repair"},addTags:{brand:"Mekonomen","brand:wikidata":"Q10580079","brand:wikipedia":"sv:Mekonomen",name:"Mekonomen",shop:"car_repair"},countryCodes:["dk","no","se"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Midas":{name:"Midas",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Midas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312613",shop:"car_repair"},addTags:{brand:"Midas","brand:wikidata":"Q3312613","brand:wikipedia":"en:Midas (automotive service)",name:"Midas",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Monro Muffler Brake":{name:"Monro Muffler Brake",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/MonroAutoServiceTire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6902090",shop:"car_repair"},addTags:{brand:"Monro Muffler Brake","brand:wikidata":"Q6902090","brand:wikipedia":"en:Monro Muffler Brake",name:"Monro Muffler Brake",shop:"car_repair"},countryCodes:["us"],terms:["monro","monro muffler"],matchScore:2,suggestion:true},"shop/car_repair/Mr. Lube":{name:"Mr. Lube",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/MrLubeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17104067",shop:"car_repair"},addTags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/National Tire and Battery":{name:"National Tire and Battery",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/nationaltireandbattery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6978944",shop:"car_repair"},addTags:{brand:"National Tire and Battery","brand:wikidata":"Q6978944","brand:wikipedia":"en:National Tire and Battery",name:"National Tire and Battery",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Norauto":{name:"Norauto",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/norautoitalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317698",shop:"car_repair"},addTags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"},countryCodes:["ar","es","fr","hu","it","pl","pt","ro"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Pep Boys":{name:"Pep Boys",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/pepboysauto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3375007",shop:"car_repair"},addTags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Peugeot":{name:"Peugeot",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Peugeot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6742",shop:"car_repair"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Point S":{name:"Point S",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/points.france/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3393358",shop:"car_repair"},addTags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Renault":{name:"Renault",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Renault/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6686",shop:"car_repair"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"fr:Renault",name:"Renault",shop:"car_repair"},terms:["garage renault"],matchScore:2,suggestion:true},"shop/car_repair/Roady":{name:"Roady",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q3434112",shop:"car_repair"},addTags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Safelite AutoGlass":{name:"Safelite AutoGlass",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/safelite/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28797369",shop:"car_repair"},addTags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",name:"Safelite AutoGlass","service:vehicle:glass":"yes",shop:"car_repair"},countryCodes:["us"],terms:["safelight auto glass"],matchScore:2,suggestion:true},"shop/car_repair/Sears Auto Center":{name:"Sears Auto Center",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/sears/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6499202",shop:"car_repair"},addTags:{brand:"Sears Auto Center","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears Auto Center",shop:"car_repair"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Speedy":{name:"Speedy",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/vadoncchezSpeedy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3492969",shop:"car_repair"},addTags:{brand:"Speedy","brand:wikidata":"Q3492969","brand:wikipedia":"fr:Speedy (entreprise)",name:"Speedy",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Speedy Auto Service":{name:"Speedy Auto Service",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/SpeedyAutoServiceCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22318193",shop:"car_repair"},addTags:{brand:"Speedy Auto Service","brand:wikidata":"Q22318193",name:"Speedy Auto Service",shop:"car_repair"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Toyota":{name:"Toyota",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/toyota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q53268",shop:"car_repair"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Tuffy":{name:"Tuffy",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Tuffy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17125314",shop:"car_repair"},addTags:{brand:"Tuffy","brand:wikidata":"Q17125314","brand:wikipedia":"en:Tuffy Auto Service Centers",name:"Tuffy",shop:"car_repair"},countryCodes:["us"],terms:["tuffy auto service","tuffy auto service center","tuffy auto service centers","tuffy service","tuffy service center","tuffy service centers","tuffy tire and auto service","tuffy tire and auto service center","tuffy tire and auto service centers"],matchScore:2,suggestion:true},"shop/car_repair/Valvoline":{name:"Valvoline",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/viocofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7912852",shop:"car_repair"},addTags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",official_name:"Valvoline Instant Oil Change",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Valvoline Express Care":{name:"Valvoline Express Care",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ExpressCareValvoline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q74273584",shop:"car_repair"},addTags:{alt_name:"Express Care",brand:"Valvoline Express Care","brand:wikidata":"Q74273584",name:"Valvoline Express Care",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Vulco":{name:"Vulco",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/vulcofrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80184403",shop:"car_repair"},addTags:{brand:"Vulco","brand:wikidata":"Q80184403",name:"Vulco",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/pitstop":{name:"pitstop",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/pitstop.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1310014",shop:"car_repair"},addTags:{brand:"pitstop","brand:wikidata":"Q1310014","brand:wikipedia":"de:Pitstop (Werkstattkette)",name:"pitstop",shop:"car_repair"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/ÖAMTC":{name:"ÖAMTC",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/OEAMTC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q306057",shop:"car_repair"},addTags:{brand:"ÖAMTC","brand:wikidata":"Q306057","brand:wikipedia":"de:Österreichischer Automobil-, Motorrad- und Touring Club",name:"ÖAMTC",shop:"car_repair"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/カーコンビニ倶楽部":{name:"カーコンビニ倶楽部",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/carcon.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11295590",shop:"car_repair"},addTags:{brand:"カーコンビニ倶楽部","brand:en":"Car Convenience Club","brand:ja":"カーコンビニ倶楽部","brand:wikidata":"Q11295590","brand:wikipedia":"ja:カーコンビニ倶楽部",name:"カーコンビニ倶楽部","name:en":"Car Convenience Club","name:ja":"カーコンビニ倶楽部",shop:"car_repair"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car/Alfa Romeo":{name:"Alfa Romeo",icon:"maki-car",imageURL:"https://graph.facebook.com/Alfa.Romeo.cars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26921",shop:"car"},addTags:{brand:"Alfa Romeo","brand:wikidata":"Q26921","brand:wikipedia":"en:Alfa Romeo",name:"Alfa Romeo",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Aston Martin":{name:"Aston Martin",icon:"maki-car",imageURL:"https://graph.facebook.com/astonmartin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27074",shop:"car"},addTags:{brand:"Aston Martin","brand:wikidata":"Q27074","brand:wikipedia":"en:Aston Martin",name:"Aston Martin",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Audi":{name:"Audi",icon:"maki-car",imageURL:"https://graph.facebook.com/audi.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23317",shop:"car"},addTags:{brand:"Audi","brand:wikidata":"Q23317","brand:wikipedia":"en:Audi",name:"Audi",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/BMW":{name:"BMW",icon:"maki-car",imageURL:"https://graph.facebook.com/BMWGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26678",shop:"car"},addTags:{brand:"BMW","brand:wikidata":"Q26678","brand:wikipedia":"en:BMW",name:"BMW",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Bentley":{name:"Bentley",icon:"maki-car",imageURL:"https://graph.facebook.com/BentleyMotors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27224",shop:"car"},addTags:{brand:"Bentley","brand:wikidata":"Q27224","brand:wikipedia":"en:Bentley",name:"Bentley",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Buick":{name:"Buick",icon:"maki-car",imageURL:"https://graph.facebook.com/Buick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27415",shop:"car"},addTags:{brand:"Buick","brand:wikidata":"Q27415","brand:wikipedia":"en:Buick",name:"Buick",shop:"car"},countryCodes:["ca","cn","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/car/Cadillac":{name:"Cadillac",icon:"maki-car",imageURL:"https://graph.facebook.com/cadillac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27436",shop:"car"},addTags:{brand:"Cadillac","brand:wikidata":"Q27436","brand:wikipedia":"en:Cadillac",name:"Cadillac",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/CarMax":{name:"CarMax",icon:"maki-car",imageURL:"https://graph.facebook.com/CarMax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5037190",shop:"car"},addTags:{brand:"CarMax","brand:wikidata":"Q5037190","brand:wikipedia":"en:CarMax",name:"CarMax",second_hand:"only",shop:"car"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car/Chevrolet":{name:"Chevrolet",icon:"maki-car",imageURL:"https://graph.facebook.com/chevrolet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29570",shop:"car"},addTags:{brand:"Chevrolet","brand:wikidata":"Q29570","brand:wikipedia":"en:Chevrolet",name:"Chevrolet",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Chrysler":{name:"Chrysler",icon:"maki-car",imageURL:"https://graph.facebook.com/chrysler/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181114",shop:"car"},addTags:{brand:"Chrysler","brand:wikidata":"Q181114","brand:wikipedia":"en:Chrysler",name:"Chrysler",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Citroën":{name:"Citroën",icon:"maki-car",imageURL:"https://graph.facebook.com/Citroen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6746",shop:"car"},addTags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Dacia":{name:"Dacia",icon:"maki-car",imageURL:"https://graph.facebook.com/Dacia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27460",shop:"car"},addTags:{brand:"Dacia","brand:wikidata":"Q27460","brand:wikipedia":"en:Automobile Dacia",name:"Dacia",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Dodge":{name:"Dodge",icon:"maki-car",imageURL:"https://graph.facebook.com/dodge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27564",shop:"car"},addTags:{brand:"Dodge","brand:wikidata":"Q27564","brand:wikipedia":"en:Dodge",name:"Dodge",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Fiat":{name:"Fiat",icon:"maki-car",imageURL:"https://graph.facebook.com/Fiat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27597",shop:"car"},addTags:{brand:"Fiat","brand:wikidata":"Q27597","brand:wikipedia":"en:Fiat Automobiles",name:"Fiat",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Ford":{name:"Ford",icon:"maki-car",imageURL:"https://graph.facebook.com/ford/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q44294",shop:"car"},addTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Freightliner":{name:"Freightliner",icon:"maki-car",imageURL:"https://graph.facebook.com/freightliner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1420724",shop:"car"},addTags:{brand:"Freightliner","brand:wikidata":"Q1420724","brand:wikipedia":"en:Freightliner Trucks",name:"Freightliner",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/GMC":{name:"GMC",icon:"maki-car",imageURL:"https://graph.facebook.com/gmc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28993",shop:"car"},addTags:{brand:"GMC","brand:wikidata":"Q28993","brand:wikipedia":"en:GMC (automobile)",name:"GMC",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Holden":{name:"Holden",icon:"maki-car",imageURL:"https://graph.facebook.com/holdenaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29281",shop:"car"},addTags:{brand:"Holden","brand:wikidata":"Q29281","brand:wikipedia":"en:Holden",name:"Holden",shop:"car"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/car/Honda":{name:"Honda",icon:"maki-car",imageURL:"https://graph.facebook.com/HondaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9584",shop:"car"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"car"},terms:["honda cars"],matchScore:2,suggestion:true},"shop/car/Hyundai":{name:"Hyundai",icon:"maki-car",imageURL:"https://graph.facebook.com/Hyundai/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55931",shop:"car"},addTags:{brand:"Hyundai","brand:wikidata":"Q55931","brand:wikipedia":"en:Hyundai Motor Company",name:"Hyundai",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Isuzu":{name:"Isuzu",icon:"maki-car",imageURL:"https://graph.facebook.com/isuzumex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29803",shop:"car"},addTags:{brand:"Isuzu","brand:wikidata":"Q29803","brand:wikipedia":"en:Isuzu Motors",name:"Isuzu",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Jaguar":{name:"Jaguar",icon:"maki-car",imageURL:"https://graph.facebook.com/JaguarUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26742231",shop:"car"},addTags:{brand:"Jaguar","brand:wikidata":"Q26742231",name:"Jaguar",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Jeep":{name:"Jeep",icon:"maki-car",imageURL:"https://graph.facebook.com/jeep/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30113",shop:"car"},addTags:{brand:"Jeep","brand:wikidata":"Q30113","brand:wikipedia":"en:Jeep",name:"Jeep",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Kia":{name:"Kia",icon:"maki-car",imageURL:"https://graph.facebook.com/Kiamotorsworldwide/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35349",shop:"car"},addTags:{brand:"Kia","brand:wikidata":"Q35349","brand:wikipedia":"en:Kia Motors",name:"Kia",shop:"car"},terms:["kia motors"],matchScore:2,suggestion:true},"shop/car/Lada":{name:"Lada",icon:"maki-car",imageURL:"https://graph.facebook.com/LADA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35676",shop:"car"},addTags:{brand:"Lada","brand:en":"Lada","brand:ru":"Лада","brand:wikidata":"Q35676","brand:wikipedia":"en:Lada",name:"Lada","name:en":"Lada","name:ru":"Лада",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Land Rover":{name:"Land Rover",icon:"maki-car",imageURL:"https://graph.facebook.com/landroverusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26777551",shop:"car"},addTags:{brand:"Land Rover","brand:wikidata":"Q26777551",name:"Land Rover",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Lexus":{name:"Lexus",icon:"maki-car",imageURL:"https://graph.facebook.com/lexus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35919",shop:"car"},addTags:{brand:"Lexus","brand:wikidata":"Q35919","brand:wikipedia":"en:Lexus",name:"Lexus",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Lincoln":{name:"Lincoln",icon:"maki-car",imageURL:"https://graph.facebook.com/Lincoln/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q216796",shop:"car"},addTags:{brand:"Lincoln","brand:wikidata":"Q216796","brand:wikipedia":"en:Lincoln Motor Company",name:"Lincoln",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Mazda":{name:"Mazda",icon:"maki-car",imageURL:"https://graph.facebook.com/Mazda.Japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35996",shop:"car"},addTags:{brand:"Mazda","brand:wikidata":"Q35996","brand:wikipedia":"en:Mazda",name:"Mazda",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Mercedes-Benz":{name:"Mercedes-Benz",icon:"maki-car",imageURL:"https://graph.facebook.com/MercedesBenz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q36008",shop:"car"},addTags:{brand:"Mercedes-Benz","brand:wikidata":"Q36008","brand:wikipedia":"en:Mercedes-Benz",name:"Mercedes-Benz",shop:"car"},terms:["mercedes"],matchScore:2,suggestion:true},"shop/car/Mitsubishi":{name:"Mitsubishi",icon:"maki-car",imageURL:"https://graph.facebook.com/MitsubishiMotors.en/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q36033",shop:"car"},addTags:{brand:"Mitsubishi","brand:wikidata":"Q36033","brand:wikipedia":"en:Mitsubishi Motors",name:"Mitsubishi",shop:"car"},terms:["mitsubishi motors"],matchScore:2,suggestion:true},"shop/car/Netz":{name:"Netz",icon:"maki-car",imageURL:"https://graph.facebook.com/302854786851446/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11325416",shop:"car"},addTags:{brand:"Netz","brand:wikidata":"Q11325416","brand:wikipedia":"ja:ネッツ店",name:"Netz",shop:"car"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car/Nissan":{name:"Nissan",icon:"maki-car",imageURL:"https://graph.facebook.com/NissanJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20165",shop:"car"},addTags:{brand:"Nissan","brand:wikidata":"Q20165","brand:wikipedia":"ja:日産自動車",name:"Nissan",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Opel":{name:"Opel",icon:"maki-car",imageURL:"https://graph.facebook.com/Opel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40966",shop:"car"},addTags:{brand:"Opel","brand:wikidata":"Q40966","brand:wikipedia":"en:Opel",name:"Opel",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Peterbilt":{name:"Peterbilt",icon:"maki-car",imageURL:"https://graph.facebook.com/PeterbiltMotors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q944640",shop:"car"},addTags:{brand:"Peterbilt","brand:wikidata":"Q944640","brand:wikipedia":"en:Peterbilt",name:"Peterbilt",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Peugeot":{name:"Peugeot",icon:"maki-car",imageURL:"https://graph.facebook.com/Peugeot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6742",shop:"car"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Porsche":{name:"Porsche",icon:"maki-car",imageURL:"https://graph.facebook.com/porsche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40993",shop:"car"},addTags:{brand:"Porsche","brand:wikidata":"Q40993","brand:wikipedia":"en:Porsche",name:"Porsche",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Proton":{name:"Proton",icon:"maki-car",imageURL:"https://graph.facebook.com/ProtonCarsOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q827306",shop:"car"},addTags:{brand:"Proton","brand:wikidata":"Q827306","brand:wikipedia":"en:PROTON Holdings",name:"Proton",shop:"car"},countryCodes:["cl","eg","id","my","sg","th"],terms:[],matchScore:2,suggestion:true},"shop/car/Ram":{name:"Ram",icon:"maki-car",imageURL:"https://graph.facebook.com/RamTrucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q165708",shop:"car"},addTags:{brand:"Ram","brand:wikidata":"Q165708","brand:wikipedia":"en:Ram Trucks",name:"Ram",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Renault":{name:"Renault",icon:"maki-car",imageURL:"https://graph.facebook.com/Renault/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6686",shop:"car"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"fr:Renault",name:"Renault",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Seat":{name:"Seat",icon:"maki-car",imageURL:"https://graph.facebook.com/SEAT.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188217",shop:"car"},addTags:{brand:"Seat","brand:wikidata":"Q188217","brand:wikipedia":"en:SEAT",name:"Seat",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Subaru":{name:"Subaru",icon:"maki-car",imageURL:"https://graph.facebook.com/SUBARU.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q172741",shop:"car"},addTags:{brand:"Subaru","brand:wikidata":"Q172741","brand:wikipedia":"en:Subaru",name:"Subaru",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Suzuki":{name:"Suzuki",icon:"maki-car",imageURL:"https://graph.facebook.com/SuzukiGlobalOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181642",shop:"car"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Tesla":{name:"Tesla",icon:"maki-car",imageURL:"https://pbs.twimg.com/profile_images/489192650474414080/4RxZxsud_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q478214",shop:"car"},addTags:{brand:"Tesla","brand:wikidata":"Q478214","brand:wikipedia":"en:Tesla, Inc.",name:"Tesla",shop:"car"},terms:["tesla motors"],matchScore:2,suggestion:true},"shop/car/Toyota":{name:"Toyota",icon:"maki-car",imageURL:"https://graph.facebook.com/toyota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q53268",shop:"car"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Volkswagen":{name:"Volkswagen",icon:"maki-car",imageURL:"https://graph.facebook.com/VW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q246",shop:"car"},addTags:{brand:"Volkswagen","brand:wikidata":"Q246","brand:wikipedia":"en:Volkswagen",name:"Volkswagen",shop:"car"},terms:["vw"],matchScore:2,suggestion:true},"shop/car/Volvo":{name:"Volvo",icon:"maki-car",imageURL:"https://graph.facebook.com/volvocars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q215293",shop:"car"},addTags:{brand:"Volvo","brand:wikidata":"Q215293","brand:wikipedia":"en:Volvo Cars",name:"Volvo",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Škoda":{name:"Škoda",icon:"maki-car",imageURL:"https://graph.facebook.com/skoda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29637",shop:"car"},addTags:{brand:"Škoda","brand:wikidata":"Q29637","brand:wikipedia":"en:Škoda Auto",name:"Škoda",shop:"car"},terms:[],matchScore:2,suggestion:true},"shop/car/Автомир":{name:"Автомир",icon:"maki-car",imageURL:"https://graph.facebook.com/avtomir.cars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4056321",shop:"car"},addTags:{brand:"Автомир","brand:en":"Autoworld","brand:ru":"Автомир","brand:wikidata":"Q4056321","brand:wikipedia":"ru:Автомир (автодилер)",name:"Автомир","name:en":"Autoworld","name:ru":"Автомир",shop:"car"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/car/سایپا":{name:"سایپا",icon:"maki-car",imageURL:"https://graph.facebook.com/saipaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q116234",shop:"car"},addTags:{brand:"سایپا","brand:en":"Saipa","brand:fa":"سایپا","brand:wikidata":"Q116234","brand:wikipedia":"en:Saipa",name:"سایپا","name:en":"Saipa","name:fa":"سایپا",shop:"car"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"shop/car/ガリバー":{name:"ガリバー",icon:"maki-car",imageURL:"https://graph.facebook.com/gulliver.nz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11296264",shop:"car"},addTags:{brand:"ガリバー","brand:en":"Gulliver","brand:ja":"ガリバー","brand:wikidata":"Q11296264","brand:wikipedia":"ja:IDOM",name:"ガリバー","name:en":"Gulliver","name:ja":"ガリバー",shop:"car"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car/ダイハツ":{name:"ダイハツ",icon:"maki-car",imageURL:"https://graph.facebook.com/DaihatsuKSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27511",shop:"car"},addTags:{brand:"ダイハツ","brand:en":"Daihatsu","brand:ja":"ダイハツ","brand:wikidata":"Q27511","brand:wikipedia":"ja:ダイハツ工業",name:"ダイハツ","name:en":"Daihatsu","name:ja":"ダイハツ",shop:"car"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car/トヨタ":{name:"トヨタ",icon:"maki-car",imageURL:"https://graph.facebook.com/toyota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q53268",shop:"car"},addTags:{brand:"トヨタ","brand:en":"Toyota","brand:ja":"トヨタ","brand:wikidata":"Q53268","brand:wikipedia":"ja:トヨタ自動車",name:"トヨタ","name:en":"Toyota","name:ja":"トヨタ",shop:"car"},countryCodes:["jp"],terms:["トヨタカローラ","トヨタ自動車"],matchScore:2,suggestion:true},"shop/car/ホンダ":{name:"ホンダ",icon:"maki-car",imageURL:"https://graph.facebook.com/HondaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9584",shop:"car"},addTags:{brand:"ホンダ","brand:en":"Honda","brand:ja":"ホンダ","brand:wikidata":"Q9584","brand:wikipedia":"ja:本田技研工業",name:"ホンダ","name:en":"Honda","name:ja":"ホンダ",shop:"car"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/carpet/Carpetright":{name:"Carpetright",icon:"fas-tape",imageURL:"https://graph.facebook.com/carpetright/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5045782",shop:"carpet"},addTags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"},countryCodes:["be","gb","ie","nl"],terms:[],matchScore:2,suggestion:true},"shop/carpet/Tapi Carpets":{name:"Tapi Carpets",icon:"fas-tape",imageURL:"https://graph.facebook.com/tapicarpetsandfloors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79223951",shop:"carpet"},addTags:{brand:"Tapi Carpets","brand:wikidata":"Q79223951",name:"Tapi Carpets",shop:"carpet"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/catalogue/Argos":{name:"Argos",icon:"maki-shop",imageURL:"https://graph.facebook.com/argos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4789707",shop:"catalogue"},addTags:{brand:"Argos","brand:wikidata":"Q4789707","brand:wikipedia":"en:Argos (retailer)",name:"Argos",shop:"catalogue"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/Age UK":{name:"Age UK",icon:"maki-shop",imageURL:"https://graph.facebook.com/ageuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4691850",shop:"charity"},addTags:{brand:"Age UK","brand:wikidata":"Q4691850","brand:wikipedia":"en:Age UK",name:"Age UK",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Barnardo's":{name:"Barnardo's",icon:"maki-shop",imageURL:"https://graph.facebook.com/barnardos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2884670",shop:"charity"},addTags:{brand:"Barnardo's","brand:wikidata":"Q2884670","brand:wikipedia":"en:Barnardo's",name:"Barnardo's",shop:"charity"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/British Heart Foundation":{name:"British Heart Foundation",icon:"maki-shop",imageURL:"https://graph.facebook.com/bhf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4970039",shop:"charity"},addTags:{brand:"British Heart Foundation","brand:wikidata":"Q4970039","brand:wikipedia":"en:British Heart Foundation",name:"British Heart Foundation",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/British Red Cross":{name:"British Red Cross",icon:"maki-shop",imageURL:"https://graph.facebook.com/britishredcross/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4970966",shop:"charity"},addTags:{brand:"British Red Cross","brand:wikidata":"Q4970966","brand:wikipedia":"en:British Red Cross",name:"British Red Cross",shop:"charity"},countryCodes:["gb","gg","im"],terms:[],matchScore:2,suggestion:true},"shop/charity/Cancer Research UK":{name:"Cancer Research UK",icon:"maki-shop",imageURL:"https://graph.facebook.com/cancerresearchuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q326079",shop:"charity"},addTags:{brand:"Cancer Research UK","brand:wikidata":"Q326079","brand:wikipedia":"en:Cancer Research UK",name:"Cancer Research UK",shop:"charity"},countryCodes:["gb","gg"],terms:[],matchScore:2,suggestion:true},"shop/charity/Goodwill":{name:"Goodwill",icon:"maki-shop",imageURL:"https://graph.facebook.com/GoodwillIntl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5583655",shop:"charity"},addTags:{brand:"Goodwill","brand:wikidata":"Q5583655","brand:wikipedia":"en:Goodwill Industries",name:"Goodwill",shop:"charity"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/charity/Humana":{name:"Humana",icon:"maki-shop",imageURL:"https://graph.facebook.com/HumanaHPP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1636581",shop:"charity"},addTags:{brand:"Humana","brand:wikidata":"Q1636581","brand:wikipedia":"de:Humana People to People",name:"Humana",shop:"charity"},terms:["humana people to people"],matchScore:2,suggestion:true},"shop/charity/Kirkens Korshær Genbrug":{name:"Kirkens Korshær Genbrug",icon:"maki-shop",imageURL:"https://graph.facebook.com/vierkirkenskorshaer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12321915",shop:"charity"},addTags:{brand:"Kirkens Korshær Genbrug","brand:wikidata":"Q12321915","brand:wikipedia":"da:Kirkens Korshær",name:"Kirkens Korshær Genbrug",shop:"charity"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/charity/Marie Curie":{name:"Marie Curie",icon:"maki-shop",imageURL:"https://graph.facebook.com/MarieCurieUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997351",shop:"charity"},addTags:{brand:"Marie Curie","brand:wikidata":"Q16997351","brand:wikipedia":"en:Marie Curie (charity)",name:"Marie Curie",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Mind":{name:"Mind",icon:"maki-shop",imageURL:"https://graph.facebook.com/mindforbettermentalhealth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3314763",shop:"charity"},addTags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Myrorna":{name:"Myrorna",icon:"maki-shop",imageURL:"https://graph.facebook.com/Myrorna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10592609",shop:"charity"},addTags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/charity/Oxfam":{name:"Oxfam",icon:"maki-shop",imageURL:"https://graph.facebook.com/oxfamGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q267941",shop:"charity"},addTags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"},countryCodes:["be","de","gb","ie","im"],terms:[],matchScore:2,suggestion:true},"shop/charity/PDSA":{name:"PDSA",icon:"maki-shop",imageURL:"https://graph.facebook.com/pdsa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7165541",shop:"charity"},addTags:{brand:"PDSA","brand:wikidata":"Q7165541","brand:wikipedia":"en:People's Dispensary for Sick Animals",name:"PDSA",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/RSPCA":{name:"RSPCA",icon:"maki-shop",imageURL:"https://graph.facebook.com/RSPCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584819",shop:"charity"},addTags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"},countryCodes:["au","gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Saint Vincent de Paul Thrift Store":{name:"Saint Vincent de Paul Thrift Store",icon:"maki-shop",imageURL:"https://graph.facebook.com/186921794657204/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66581837",shop:"charity"},addTags:{brand:"Saint Vincent de Paul Thrift Store","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul Thrift Store",shop:"charity",short_name:"SVdP"},countryCodes:["us"],terms:["saint vincent de paul","saint vincent de paul society","society of saint vincent de paul","society of st vincent de paul","st vincent de paul","st vincent de paul society","st vincent de paul thrift store","svdp thrift store","the society of saint vincent de paul","the society of st vincent de paul"],matchScore:2,suggestion:true},"shop/charity/Samaritans":{name:"Samaritans",icon:"maki-shop",imageURL:"https://graph.facebook.com/samaritanscharity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7408851",shop:"charity"},addTags:{brand:"Samaritans","brand:wikidata":"Q7408851","brand:wikipedia":"en:Samaritans (charity)",name:"Samaritans",shop:"charity"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/Scope":{name:"Scope",icon:"maki-shop",imageURL:"https://graph.facebook.com/Scope/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7434435",shop:"charity"},addTags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Sue Ryder":{name:"Sue Ryder",icon:"maki-shop",imageURL:"https://graph.facebook.com/SueRyderNational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7634271",shop:"charity"},addTags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/The Children's Society":{name:"The Children's Society",icon:"maki-shop",imageURL:"https://graph.facebook.com/childrenssociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7722484",shop:"charity"},addTags:{brand:"The Children's Society","brand:wikidata":"Q7722484","brand:wikipedia":"en:The Children's Society",name:"The Children's Society",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/The Salvation Army":{name:"The Salvation Army",icon:"maki-shop",imageURL:"https://graph.facebook.com/SalvationArmyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188307",shop:"charity"},addTags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"},countryCodes:["au","ca","gb","us"],terms:["salvation army"],matchScore:2,suggestion:true},"shop/charity/YMCA":{name:"YMCA",icon:"maki-shop",imageURL:"https://graph.facebook.com/YMCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157169",shop:"charity"},addTags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",name:"YMCA",shop:"charity"},terms:[],matchScore:2,suggestion:true},"shop/chemist/101 Drogerie":{name:"101 Drogerie",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/101drogerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67197464",shop:"chemist"},addTags:{brand:"101 Drogerie","brand:wikidata":"Q67197464",name:"101 Drogerie",shop:"chemist"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Acqua & Sapone":{name:"Acqua & Sapone",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/acquaesapone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q51079044",shop:"chemist"},addTags:{brand:"Acqua & Sapone","brand:wikidata":"Q51079044","brand:wikipedia":"it:Acqua & Sapone (azienda)",name:"Acqua & Sapone",shop:"chemist"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Bipa":{name:"Bipa",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/BIPA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q864933",shop:"chemist"},addTags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"},countryCodes:["at","hr"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Boots":{name:"Boots",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/bootsuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6123139",shop:"chemist"},addTags:{brand:"Boots","brand:wikidata":"Q6123139",name:"Boots",shop:"chemist"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Budnikowsky":{name:"Budnikowsky",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/BUDNI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1001516",shop:"chemist"},addTags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/chemist/CVS Pharmacy":{name:"CVS Pharmacy",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CVS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2078880",shop:"chemist"},addTags:{brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",name:"CVS Pharmacy",shop:"chemist",short_name:"CVS"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Drogeria Natura":{name:"Drogeria Natura",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/707518851785871360/aCEmonjR_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q9212032",shop:"chemist"},addTags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Etos":{name:"Etos",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEtos%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2609459",shop:"chemist"},addTags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Kruidvat":{name:"Kruidvat",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKruidvat%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2226366",shop:"chemist"},addTags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"},countryCodes:["be","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Longs Drugs (Hawaii)":{name:"Longs Drugs (Hawaii)",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLongs%20Drugs%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16931196",shop:"chemist"},addTags:{brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",name:"Longs Drugs",shop:"chemist",short_name:"Longs"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Matas":{name:"Matas",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/matasdk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6786143",shop:"chemist"},addTags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Müller":{name:"Müller",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/mueller.drogeriemarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1958759",shop:"chemist"},addTags:{brand:"Müller","brand:wikidata":"Q1958759","brand:wikipedia":"en:Müller (German trade company)",name:"Müller",shop:"chemist"},countryCodes:["at","ch","de","es","hr","hu"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Rite Aid":{name:"Rite Aid",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/riteaid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3433273",shop:"chemist"},addTags:{brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",name:"Rite Aid",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/Rossmann":{name:"Rossmann",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/rossmann.gmbh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q316004",shop:"chemist"},addTags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"},countryCodes:["cz","de","hu","pl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Savers":{name:"Savers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/SaversHB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7428189",shop:"chemist"},addTags:{brand:"Savers","brand:wikidata":"Q7428189","brand:wikipedia":"en:Savers (UK retailer)",name:"Savers",official_name:"Savers Health & Beauty",shop:"chemist"},countryCodes:["gb"],terms:["savers drugstores"],matchScore:2,suggestion:true},"shop/chemist/Superdrug":{name:"Superdrug",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Superdrug/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643261",shop:"chemist"},addTags:{brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",name:"Superdrug",shop:"chemist"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Teta":{name:"Teta",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q20860823",shop:"chemist"},addTags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Trekpleister":{name:"Trekpleister",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1212663879542681601/a6Mr-zut_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2551576",shop:"chemist"},addTags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Walgreens":{name:"Walgreens",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/walgreens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1591889",shop:"chemist"},addTags:{brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",name:"Walgreens",shop:"chemist"},countryCodes:["us"],terms:["walgreens pharmacy"],matchScore:2,suggestion:true},"shop/chemist/Watsons":{name:"Watsons",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/WatsonsPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7974785",shop:"chemist"},addTags:{brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",name:"Watsons",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/dm":{name:"dm",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/dm.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q266572",shop:"chemist"},addTags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"},countryCodes:["at","ba","bg","cz","de","hr","hu","it","mk","ro","rs","si","sk"],terms:["dm drogerie markt"],matchScore:2,suggestion:true},"shop/chemist/屈臣氏":{name:"屈臣氏",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/WatsonsPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7974785",shop:"chemist"},addTags:{brand:"屈臣氏","brand:wikidata":"Q7974785","brand:wikipedia":"zh:屈臣氏",name:"屈臣氏",shop:"chemist"},countryCodes:["cn","hk","tw"],terms:[],matchScore:2,suggestion:true},"shop/chemist/康是美":{name:"康是美",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/cococo.cosmed/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11063876",shop:"chemist"},addTags:{brand:"康是美","brand:wikidata":"Q11063876","brand:wikipedia":"zh:康是美藥妝店",name:"康是美",shop:"chemist"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Cacau Show":{name:"Cacau Show",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/CacauShow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9671713",shop:"chocolate"},addTags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau Show",name:"Cacau Show",shop:"chocolate"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Chocolates Brasil Cacau":{name:"Chocolates Brasil Cacau",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/ChocolatesBrasilCacau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9750569",shop:"chocolate"},addTags:{brand:"Chocolates Brasil Cacau","brand:wikidata":"Q9750569","brand:wikipedia":"pt:Chocolates Brasil Cacau",name:"Chocolates Brasil Cacau",shop:"chocolate",short_name:"Brasil Cacau"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Gertrude Hawk Chocolates":{name:"Gertrude Hawk Chocolates",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/gertrudehawkchocolates/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5553326",shop:"chocolate"},addTags:{brand:"Gertrude Hawk Chocolates","brand:wikidata":"Q5553326","brand:wikipedia":"en:Gertrude Hawk Chocolates",name:"Gertrude Hawk Chocolates",shop:"chocolate",short_name:"Gertrude Hawk"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Godiva Chocolatier":{name:"Godiva Chocolatier",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Godiva/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q931084",shop:"chocolate"},addTags:{brand:"Godiva Chocolatier","brand:wikidata":"Q931084","brand:wikipedia":"en:Godiva Chocolatier",name:"Godiva Chocolatier",shop:"chocolate",short_name:"Godiva"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Jeff de Bruges":{name:"Jeff de Bruges",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/JeffdeBrugesofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3176626",shop:"chocolate"},addTags:{brand:"Jeff de Bruges","brand:wikidata":"Q3176626","brand:wikipedia":"fr:Jeff de Bruges",name:"Jeff de Bruges",shop:"chocolate"},countryCodes:["ca","cz","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Laura Secord":{name:"Laura Secord",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/laurasecord.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6499418",shop:"chocolate"},addTags:{brand:"Laura Secord","brand:wikidata":"Q6499418","brand:wikipedia":"en:Laura Secord Chocolates",name:"Laura Secord",shop:"chocolate"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Leonidas":{name:"Leonidas",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Leonidas.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80335",shop:"chocolate"},addTags:{brand:"Leonidas","brand:wikidata":"Q80335","brand:wikipedia":"en:Leonidas (chocolate maker)",name:"Leonidas",shop:"chocolate"},countryCodes:["be","cz","fr","gb","gr","nl"],terms:[],matchScore:2,suggestion:true},"shop/chocolate/Lindt":{name:"Lindt",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/lindtchocolateusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152822",shop:"chocolate"},addTags:{brand:"Lindt","brand:wikidata":"Q152822","brand:wikipedia":"en:Lindt & Sprüngli",name:"Lindt",shop:"chocolate"},terms:[],matchScore:2,suggestion:true},"shop/chocolate/Purdys Chocolatier":{name:"Purdys Chocolatier",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/PurdysChocolatier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7261007",shop:"chocolate"},addTags:{brand:"Purdys Chocolatier","brand:wikidata":"Q7261007","brand:wikipedia":"en:Purdy's Chocolates",name:"Purdys Chocolatier",shop:"chocolate"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/A Pea in the Pod":{name:"A Pea in the Pod",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/apeainthepod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79051737",shop:"clothes"},addTags:{brand:"A Pea in the Pod","brand:wikidata":"Q79051737",clothes:"maternity",name:"A Pea in the Pod",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/AOKI":{name:"AOKI",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/aokistyle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11189480",shop:"clothes"},addTags:{brand:"AOKI","brand:wikidata":"Q11189480","brand:wikipedia":"ja:AOKIホールディングス",clothes:"men",name:"AOKI","name:ja":"アオキ",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Abercrombie & Fitch":{name:"Abercrombie & Fitch",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/abercrombieofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319344",shop:"clothes"},addTags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",clothes:"men;women",name:"Abercrombie & Fitch",shop:"clothes"},countryCodes:["ae","be","ca","cn","de","es","fr","gb","hk","ie","it","jp","kw","mx","nl","qa","sa","sg"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Abercrombie Kids":{name:"Abercrombie Kids",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AbercrombieKids/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q429856",shop:"clothes"},addTags:{brand:"Abercrombie Kids","brand:wikidata":"Q429856","brand:wikipedia":"en:Abercrombie Kids",clothes:"children",name:"Abercrombie Kids",shop:"clothes"},countryCodes:["ae","ca","cn","de","gb","it","nl","sg","sp","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Accessorize":{name:"Accessorize",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AccessorizeUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65007482",shop:"clothes"},addTags:{brand:"Accessorize","brand:wikidata":"Q65007482",name:"Accessorize",shop:"clothes"},countryCodes:["gb","it","ru"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ackermans":{name:"Ackermans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AckermansSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4674255",shop:"clothes"},addTags:{brand:"Ackermans","brand:wikidata":"Q4674255","brand:wikipedia":"en:Ackermans",name:"Ackermans",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Addition Elle":{name:"Addition Elle",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/additionelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4681311",shop:"clothes"},addTags:{brand:"Addition Elle","brand:wikidata":"Q4681311","brand:wikipedia":"en:Addition Elle",clothes:"women",name:"Addition Elle",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Aerie":{name:"Aerie",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Aerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25351619",shop:"clothes"},addTags:{brand:"Aerie","brand:wikidata":"Q25351619","brand:wikipedia":"en:Aerie (clothing retailer)",name:"Aerie",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Aeropostale":{name:"Aeropostale",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Aeropostale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q794565",shop:"clothes"},addTags:{brand:"Aeropostale","brand:wikidata":"Q794565","brand:wikipedia":"en:Aéropostale (clothing)",clothes:"men;women",name:"Aeropostale",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Alia N TanJay":{name:"Alia N TanJay",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tanjayalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947844",shop:"clothes"},addTags:{brand:"Alia N TanJay","brand:wikidata":"Q65947844",clothes:"women",name:"Alia N TanJay",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/AllSaints":{name:"AllSaints",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/allsaintsus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4728473",shop:"clothes"},addTags:{brand:"AllSaints","brand:wikidata":"Q4728473","brand:wikipedia":"en:AllSaints",name:"AllSaints",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Altar'd State":{name:"Altar'd State",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/altardstate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71022008",shop:"clothes"},addTags:{brand:"Altar'd State","brand:wikidata":"Q71022008",name:"Altar'd State",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/American Eagle Outfitters":{name:"American Eagle Outfitters",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/americaneagle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2842931",shop:"clothes"},addTags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",clothes:"men;women",name:"American Eagle Outfitters",shop:"clothes",short_name:"American Eagle"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Animal":{name:"Animal",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q4764749",shop:"clothes"},addTags:{brand:"Animal","brand:wikidata":"Q4764749",name:"Animal",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ann Taylor":{name:"Ann Taylor",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AnnTaylor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4766699",shop:"clothes"},addTags:{brand:"Ann Taylor","brand:wikidata":"Q4766699","brand:wikipedia":"en:Ann Inc.",clothes:"women",name:"Ann Taylor",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Anthropologie":{name:"Anthropologie",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Anthropologie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4773903",shop:"clothes"},addTags:{brand:"Anthropologie","brand:wikidata":"Q4773903","brand:wikipedia":"en:Anthropologie",clothes:"women",name:"Anthropologie",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Arc'teryx":{name:"Arc'teryx",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/arcteryx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3271455",shop:"clothes"},addTags:{brand:"Arc'teryx","brand:wikidata":"Q3271455","brand:wikipedia":"en:Arc'teryx",clothes:"men;women",name:"Arc'teryx",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Ardene":{name:"Ardene",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Ardene/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2860764",shop:"clothes"},addTags:{brand:"Ardene","brand:wikidata":"Q2860764","brand:wikipedia":"en:Ardene",name:"Ardene",shop:"clothes"},countryCodes:["ca","sn"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Aritzia":{name:"Aritzia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/aritzia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4791147",shop:"clothes"},addTags:{brand:"Aritzia","brand:wikidata":"Q4791147","brand:wikipedia":"en:Aritzia",clothes:"women",name:"Aritzia",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Armand Thiery":{name:"Armand Thiery",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ARMANDTHIERY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2861975",shop:"clothes"},addTags:{brand:"Armand Thiery","brand:wikidata":"Q2861975","brand:wikipedia":"fr:Armand Thiery",name:"Armand Thiery",shop:"clothes"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Armani Exchange":{name:"Armani Exchange",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/armaniexchange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56045740",shop:"clothes"},addTags:{brand:"Armani Exchange","brand:wikidata":"Q56045740",clothes:"men;women",name:"Armani Exchange",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Avenue":{name:"Avenue",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MyAvenue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4828182",shop:"clothes"},addTags:{brand:"Avenue","brand:wikidata":"Q4828182","brand:wikipedia":"en:Avenue (store)",clothes:"women;oversize",name:"Avenue",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Baby Gap":{name:"Baby Gap",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GapJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420822",shop:"clothes"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Baby Gap",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Banana Republic":{name:"Banana Republic",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BananaRepublic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806085",shop:"clothes"},addTags:{brand:"Banana Republic","brand:wikidata":"Q806085","brand:wikipedia":"en:Banana Republic",clothes:"men;women",name:"Banana Republic",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bench.":{name:"Bench.",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BenchOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q816714",shop:"clothes"},addTags:{brand:"Bench.","brand:wikidata":"Q816714","brand:wikipedia":"en:Bench (British clothing brand)",name:"Bench.",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Bershka":{name:"Bershka",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bershka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q827258",shop:"clothes"},addTags:{brand:"Bershka","brand:wikidata":"Q827258","brand:wikipedia":"en:Bershka",name:"Bershka",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Betty Barclay":{name:"Betty Barclay",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Barclay.Betty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q850250",shop:"clothes"},addTags:{brand:"Betty Barclay","brand:wikidata":"Q850250","brand:wikipedia":"de:Betty Barclay",name:"Betty Barclay",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Big Star":{name:"Big Star",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bigstareurope/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9171569",shop:"clothes"},addTags:{brand:"Big Star","brand:wikidata":"Q9171569","brand:wikipedia":"pl:Big Star Limited",name:"Big Star",shop:"clothes"},countryCodes:["by","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Billabong":{name:"Billabong",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Billabong/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q862718",shop:"clothes"},addTags:{brand:"Billabong","brand:wikidata":"Q862718","brand:wikipedia":"en:Billabong (clothing)",clothes:"men;women",name:"Billabong",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Bluenotes":{name:"Bluenotes",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BluenotesJeans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4930395",shop:"clothes"},addTags:{brand:"Bluenotes","brand:wikidata":"Q4930395","brand:wikipedia":"en:Bluenotes",name:"Bluenotes",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/BonWorth":{name:"BonWorth",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/shopbonworth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4941034",shop:"clothes"},addTags:{brand:"BonWorth","brand:wikidata":"Q4941034","brand:wikipedia":"en:BonWorth",clothes:"women",name:"BonWorth",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonita":{name:"Bonita",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BONITAfashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q892598",shop:"clothes"},addTags:{brand:"Bonita","brand:wikidata":"Q892598","brand:wikipedia":"de:Bonita (Unternehmen)",name:"Bonita",shop:"clothes"},countryCodes:["at","ch","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonmarché":{name:"Bonmarché",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bonmarche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4942146",shop:"clothes"},addTags:{brand:"Bonmarché","brand:wikidata":"Q4942146","brand:wikipedia":"en:Bonmarché",name:"Bonmarché",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonobo":{name:"Bonobo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bonoboplanet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63682093",shop:"clothes"},addTags:{brand:"Bonobo","brand:wikidata":"Q63682093",clothes:"men;women",name:"Bonobo",shop:"clothes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonobos":{name:"Bonobos",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bonobos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4942546",shop:"clothes"},addTags:{brand:"Bonobos","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",clothes:"men",name:"Bonobos",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bootlegger":{name:"Bootlegger",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BootleggerJeans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947984",shop:"clothes"},addTags:{brand:"Bootlegger","brand:wikidata":"Q65947984",clothes:"women",name:"Bootlegger",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Boux Avenue":{name:"Boux Avenue",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BouxAvenue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4950489",shop:"clothes"},addTags:{brand:"Boux Avenue","brand:wikidata":"Q4950489","brand:wikipedia":"en:Boux Avenue",clothes:"underwear",name:"Boux Avenue",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Brice":{name:"Brice",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/brandbrice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925067",shop:"clothes"},addTags:{brand:"Brice","brand:wikidata":"Q2925067","brand:wikipedia":"fr:Brice (enseigne)",name:"Brice",shop:"clothes"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Brooks Brothers":{name:"Brooks Brothers",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BrooksBrothers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q929722",shop:"clothes"},addTags:{brand:"Brooks Brothers","brand:wikidata":"Q929722","brand:wikipedia":"en:Brooks Brothers",name:"Brooks Brothers",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Brunello Cucinelli":{name:"Brunello Cucinelli",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BrunelloCucinelli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3645582",shop:"clothes"},addTags:{brand:"Brunello Cucinelli","brand:wikidata":"Q3645582","brand:wikipedia":"en:Brunello Cucinelli (company)",name:"Brunello Cucinelli",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Buckle":{name:"Buckle",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bucklestore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4983306",shop:"clothes"},addTags:{brand:"Buckle","brand:wikidata":"Q4983306","brand:wikipedia":"en:Buckle (clothing retailer)",clothes:"men;women;children",name:"Buckle",shop:"clothes"},countryCodes:["us"],terms:["the buckle"],matchScore:2,suggestion:true},"shop/clothes/Buffalo Exchange":{name:"Buffalo Exchange",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/buffaloexchange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4985721",shop:"clothes"},addTags:{brand:"Buffalo Exchange","brand:wikidata":"Q4985721","brand:wikipedia":"en:Buffalo Exchange",name:"Buffalo Exchange",second_hand:"only",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Burberry":{name:"Burberry",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Burberry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q390107",shop:"clothes"},addTags:{brand:"Burberry","brand:wikidata":"Q390107","brand:wikipedia":"en:Burberry",clothes:"men;women",name:"Burberry",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Burlington Coat Factory":{name:"Burlington Coat Factory",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BurlingtonStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4999220",shop:"clothes"},addTags:{brand:"Burlington Coat Factory","brand:wikidata":"Q4999220","brand:wikipedia":"en:Burlington (department store)",name:"Burlington Coat Factory",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Burton":{name:"Burton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BurtonMenswear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5000795",shop:"clothes"},addTags:{brand:"Burton","brand:wikidata":"Q5000795","brand:wikipedia":"en:Burton (retailer)",name:"Burton",shop:"clothes"},countryCodes:["fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/C&A":{name:"C&A",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701338",shop:"clothes"},addTags:{brand:"C&A","brand:wikidata":"Q701338","brand:wikipedia":"en:C&A",name:"C&A",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/COS":{name:"COS",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60772401",shop:"clothes"},addTags:{brand:"COS","brand:wikidata":"Q60772401","brand:wikipedia":"en:COS (clothing)",name:"COS",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Cache Cache":{name:"Cache Cache",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CacheCacheFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63064086",shop:"clothes"},addTags:{brand:"Cache Cache","brand:wikidata":"Q63064086",name:"Cache Cache",shop:"clothes"},countryCodes:["fr","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Calvin Klein":{name:"Calvin Klein",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CalvinKlein/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1068628",shop:"clothes"},addTags:{brand:"Calvin Klein","brand:wikidata":"Q1068628","brand:wikipedia":"en:Calvin Klein (company)",name:"Calvin Klein",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Calzedonia":{name:"Calzedonia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/calzedonia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1027874",shop:"clothes"},addTags:{brand:"Calzedonia","brand:wikidata":"Q1027874","brand:wikipedia":"en:Calzedonia",name:"Calzedonia",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Camaïeu":{name:"Camaïeu",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/camaieu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2934647",shop:"clothes"},addTags:{brand:"Camaïeu","brand:wikidata":"Q2934647","brand:wikipedia":"en:Camaïeu (company)",name:"Camaïeu",shop:"clothes"},countryCodes:["be","cz","fr","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Camp David":{name:"Camp David",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CAMPDAVID.OFFICIAL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q50540636",shop:"clothes"},addTags:{brand:"Camp David","brand:wikidata":"Q50540636","brand:wikipedia":"en:Camp David (fashion)",name:"Camp David",shop:"clothes"},countryCodes:["at","de","ee","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Canada Goose":{name:"Canada Goose",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/canadagoose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2988422",shop:"clothes"},addTags:{brand:"Canada Goose","brand:wikidata":"Q2988422","brand:wikipedia":"en:Canada Goose (clothing)",name:"Canada Goose",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Carhartt":{name:"Carhartt",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Carhartt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q527877",shop:"clothes"},addTags:{brand:"Carhartt","brand:wikidata":"Q527877","brand:wikipedia":"en:Carhartt",clothes:"workwear",name:"Carhartt",shop:"clothes"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Carlings":{name:"Carlings",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/carlingsofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10443115",shop:"clothes"},addTags:{brand:"Carlings","brand:wikidata":"Q10443115","brand:wikipedia":"no:Carlings",name:"Carlings",shop:"clothes"},countryCodes:["at","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Caroll":{name:"Caroll",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/carollparis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63063871",shop:"clothes"},addTags:{brand:"Caroll","brand:wikidata":"Q63063871",name:"Caroll",shop:"clothes"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Carter's":{name:"Carter's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/carters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5047083",shop:"clothes"},addTags:{brand:"Carter's","brand:wikidata":"Q5047083","brand:wikipedia":"en:Carter's",clothes:"children",name:"Carter's",shop:"clothes"},terms:["carters babies and kids"],matchScore:2,suggestion:true},"shop/clothes/Catherines":{name:"Catherines",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CatherinesPlusSizes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64026208",shop:"clothes"},addTags:{brand:"Catherines","brand:wikidata":"Q64026208",clothes:"oversize;women",name:"Catherines",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Cato":{name:"Cato",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CatoFashions/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16956136",shop:"clothes"},addTags:{brand:"Cato","brand:wikidata":"Q16956136","brand:wikipedia":"en:Cato Corporation",clothes:"women",name:"Cato",official_name:"Cato Fashions",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Celio":{name:"Celio",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/celioOFFICIAL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2672003",shop:"clothes"},addTags:{brand:"Celio","brand:wikidata":"Q2672003","brand:wikipedia":"en:Celio (retailer)",name:"Celio",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Chanel":{name:"Chanel",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/chanel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q218115",shop:"clothes"},addTags:{brand:"Chanel","brand:wikidata":"Q218115","brand:wikipedia":"en:Chanel",name:"Chanel",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Charles Vögele":{name:"Charles Vögele",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/charlesvoegeletiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1066326",shop:"clothes"},addTags:{brand:"Charles Vögele","brand:wikidata":"Q1066326","brand:wikipedia":"de:Charles Vögele Holding",name:"Charles Vögele",shop:"clothes",short_name:"Vögele"},countryCodes:["at","be","ch","de","hu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Charlotte Russe":{name:"Charlotte Russe",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CharlotteRusse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5086126",shop:"clothes"},addTags:{brand:"Charlotte Russe","brand:wikidata":"Q5086126","brand:wikipedia":"en:Charlotte Russe (clothing retailer)",name:"Charlotte Russe",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Charming Charlie":{name:"Charming Charlie",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CharmingCharlie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16829286",shop:"clothes"},addTags:{brand:"Charming Charlie","brand:wikidata":"Q16829286","brand:wikipedia":"en:Charming Charlie",clothes:"women",name:"Charming Charlie",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Chico's":{name:"Chico's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LoveChicos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5096393",shop:"clothes"},addTags:{brand:"Chico's","brand:wikidata":"Q5096393","brand:wikipedia":"en:Chico's (clothing retailer)",name:"Chico's",shop:"clothes"},countryCodes:["ar","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Christopher & Banks":{name:"Christopher & Banks",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ChristopherandBanks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5111816",shop:"clothes"},addTags:{brand:"Christopher & Banks","brand:wikidata":"Q5111816","brand:wikipedia":"en:Christopher & Banks",name:"Christopher & Banks",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Citi Trends":{name:"Citi Trends",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cititrends/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5122438",shop:"clothes"},addTags:{brand:"Citi Trends","brand:wikidata":"Q5122438","brand:wikipedia":"en:Citi Trends",name:"Citi Trends",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/City Gear":{name:"City Gear",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/citygear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16958629",shop:"clothes"},addTags:{brand:"City Gear","brand:wikidata":"Q16958629","brand:wikipedia":"en:City Gear",name:"City Gear",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Cleo":{name:"Cleo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cleo.cafashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947963",shop:"clothes"},addTags:{brand:"Cleo","brand:wikidata":"Q65947963",clothes:"women",name:"Cleo",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Club Monaco":{name:"Club Monaco",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/clubmonaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2979949",shop:"clothes"},addTags:{brand:"Club Monaco","brand:wikidata":"Q2979949","brand:wikipedia":"en:Club Monaco",name:"Club Monaco",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Colin's":{name:"Colin's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ColinsLook/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28729658",shop:"clothes"},addTags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Colloseum":{name:"Colloseum",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mycolloseum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15794685",shop:"clothes"},addTags:{brand:"Colloseum","brand:wikidata":"Q15794685","brand:wikipedia":"de:Colloseum",name:"Colloseum",shop:"clothes"},countryCodes:["at","cz","de","gr","lv","pl","ru","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Columbia":{name:"Columbia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ColumbiaSportswear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1112588",shop:"clothes"},addTags:{brand:"Columbia","brand:wikidata":"Q1112588","brand:wikipedia":"en:Columbia Sportswear",name:"Columbia",official_name:"Columbia Sportswear",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Cotton On":{name:"Cotton On",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cottonon.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175717",shop:"clothes"},addTags:{brand:"Cotton On","brand:wikidata":"Q5175717","brand:wikipedia":"en:Cotton On Group",name:"Cotton On",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Cropp":{name:"Cropp",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/CroppGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9196793",shop:"clothes"},addTags:{brand:"Cropp","brand:wikidata":"Q9196793","brand:wikipedia":"pl:Cropp",name:"Cropp",shop:"clothes"},countryCodes:["cs","hu","pl","ro","ru","sk","ua"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Cubus":{name:"Cubus",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cubusnorge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3439593",shop:"clothes"},addTags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"},countryCodes:["de","fi","lv","no","pl","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/DXL Men's Apparel":{name:"DXL Men's Apparel",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/DestinationXL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61981830",shop:"clothes"},addTags:{brand:"DXL Men's Apparel","brand:wikidata":"Q61981830",clothes:"oversize;men",name:"DXL Men's Apparel",shop:"clothes",short_name:"DXL"},countryCodes:["us"],terms:["casual male xl"],matchScore:2,suggestion:true},"shop/clothes/Damart":{name:"Damart",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/damartbelgium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3012602",shop:"clothes"},addTags:{brand:"Damart","brand:wikidata":"Q3012602","brand:wikipedia":"en:Damart",name:"Damart",shop:"clothes"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/David's Bridal":{name:"David's Bridal",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/davidsbridal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5230388",shop:"clothes"},addTags:{brand:"David's Bridal","brand:wikidata":"Q5230388","brand:wikipedia":"en:David's Bridal",clothes:"wedding",name:"David's Bridal",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Desigual":{name:"Desigual",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/desigual6/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q83750",shop:"clothes"},addTags:{brand:"Desigual","brand:wikidata":"Q83750","brand:wikipedia":"en:Desigual",name:"Desigual",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Destination Maternity":{name:"Destination Maternity",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/DestinationMat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79051770",shop:"clothes"},addTags:{brand:"Destination Maternity","brand:wikidata":"Q79051770",clothes:"maternity",name:"Destination Maternity",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Devred":{name:"Devred",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Devred1902.Officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3025542",shop:"clothes"},addTags:{brand:"Devred","brand:wikidata":"Q3025542","brand:wikipedia":"fr:Devred 1902",name:"Devred",shop:"clothes"},countryCodes:["be","fr","ma"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Diesel":{name:"Diesel",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Diesel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q158285",shop:"clothes"},addTags:{brand:"Diesel","brand:wikidata":"Q158285","brand:wikipedia":"en:Diesel (brand)",name:"Diesel",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Dior":{name:"Dior",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Dior/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q542767",shop:"clothes"},addTags:{brand:"Dior","brand:wikidata":"Q542767","brand:wikipedia":"en:Christian Dior (fashion house)",name:"Dior",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Diverse":{name:"Diverse",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/DiverseSystem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11694298",shop:"clothes"},addTags:{brand:"Diverse","brand:wikidata":"Q11694298","brand:wikipedia":"pl:Diverse",name:"Diverse",shop:"clothes"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Dolce & Gabbana":{name:"Dolce & Gabbana",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/DolceGabbana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q214480",shop:"clothes"},addTags:{brand:"Dolce & Gabbana","brand:wikidata":"Q214480","brand:wikipedia":"en:Dolce & Gabbana",name:"Dolce & Gabbana",shop:"clothes"},terms:["d and g","dg","dolce and gabana","dolce and gabanna","dolce and gabbanna","dolce y gabana","dolce y gabanna","dolce y gabbana","dolce y gabbanna"],matchScore:2,suggestion:true},"shop/clothes/Dorothy Perkins":{name:"Dorothy Perkins",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/dorothyperkins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5298588",shop:"clothes"},addTags:{brand:"Dorothy Perkins","brand:wikidata":"Q5298588","brand:wikipedia":"en:Dorothy Perkins",name:"Dorothy Perkins",shop:"clothes"},countryCodes:["gb","gg","ie","im"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Dress Barn":{name:"Dress Barn",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/dressbarn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65090033",shop:"clothes"},addTags:{brand:"Dress Barn","brand:wikidata":"Q65090033","brand:wikipedia":"en:DressBarn",name:"Dress Barn",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Dressmann":{name:"Dressmann",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/dressmann.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3357081",shop:"clothes"},addTags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"},countryCodes:["at","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Dynamite":{name:"Dynamite",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Dynamite/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3117385",shop:"clothes"},addTags:{brand:"Dynamite","brand:wikidata":"Q3117385","brand:wikipedia":"en:Groupe Dynamite",clothes:"women",name:"Dynamite",shop:"clothes"},countryCodes:["ca","jo","ku","sa","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Eddie Bauer":{name:"Eddie Bauer",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/EddieBauer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q842174",shop:"clothes"},addTags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"},countryCodes:["ca","jp","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Edinburgh Woollen Mill":{name:"Edinburgh Woollen Mill",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/edinburghwoollenmill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16834657",shop:"clothes"},addTags:{brand:"Edinburgh Woollen Mill","brand:wikidata":"Q16834657","brand:wikipedia":"en:Edinburgh Woollen Mill",name:"Edinburgh Woollen Mill",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Engbers":{name:"Engbers",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/engbers.maennermode/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1290088",shop:"clothes"},addTags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ermenegildo Zegna":{name:"Ermenegildo Zegna",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ZegnaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1355904",shop:"clothes"},addTags:{brand:"Ermenegildo Zegna","brand:wikidata":"Q1355904","brand:wikipedia":"en:Ermenegildo Zegna",clothes:"men",name:"Ermenegildo Zegna",shop:"clothes",short_name:"Zegna"},countryCodes:["ch","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ernsting's family":{name:"Ernsting's family",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Ernstingsfamily/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1361016",shop:"clothes"},addTags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Esprit":{name:"Esprit",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/esprit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q532746",shop:"clothes"},addTags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Etam":{name:"Etam",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/etam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3059202",shop:"clothes"},addTags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Evans":{name:"Evans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Evans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5415877",shop:"clothes"},addTags:{brand:"Evans","brand:wikidata":"Q5415877","brand:wikipedia":"en:Evans (retailer)",clothes:"women",name:"Evans",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Evereve":{name:"Evereve",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/evereveofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69891997",shop:"clothes"},addTags:{brand:"Evereve","brand:wikidata":"Q69891997",clothes:"women",name:"Evereve",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Express":{name:"Express",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/express/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1384784",shop:"clothes"},addTags:{brand:"Express","brand:wikidata":"Q1384784","brand:wikipedia":"en:Express, Inc.",name:"Express",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Fairweather":{name:"Fairweather",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/fairweatherclothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64861806",shop:"clothes"},addTags:{brand:"Fairweather","brand:wikidata":"Q64861806",clothes:"women",name:"Fairweather",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Fat Face":{name:"Fat Face",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/fatfaceusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5437186",shop:"clothes"},addTags:{brand:"Fat Face","brand:wikidata":"Q5437186","brand:wikipedia":"en:Fat Face",name:"Fat Face",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Fendi":{name:"Fendi",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Fendi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q926575",shop:"clothes"},addTags:{brand:"Fendi","brand:wikidata":"Q926575","brand:wikipedia":"en:Fendi",name:"Fendi",shop:"clothes"},countryCodes:["fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Forever 21":{name:"Forever 21",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Forever21/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1060537",shop:"clothes"},addTags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"Forever 21",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Francesca's":{name:"Francesca's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/francescascollectionsboutique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72982331",shop:"clothes"},addTags:{brand:"Francesca's","brand:wikidata":"Q72982331",clothes:"women;luxury",name:"Francesca's",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Free People":{name:"Free People",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/FreePeople/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5499945",shop:"clothes"},addTags:{brand:"Free People","brand:wikidata":"Q5499945","brand:wikipedia":"en:Free People",name:"Free People",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/French Connection":{name:"French Connection",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/FrenchConnectionUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q306457",shop:"clothes"},addTags:{brand:"French Connection","brand:wikidata":"Q306457","brand:wikipedia":"en:French Connection (clothing)",name:"French Connection",shop:"clothes",short_name:"FCUK"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Fussl":{name:"Fussl",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/fussl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24266366",shop:"clothes"},addTags:{alt_name:"Fussl Modestraße",brand:"Fussl","brand:wikidata":"Q24266366","brand:wikipedia":"de:Fussl Modestraße",name:"Fussl",shop:"clothes"},countryCodes:["at","de"],terms:["fussl modestraße"],matchScore:2,suggestion:true},"shop/clothes/G-Star Raw":{name:"G-Star Raw",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/gstarraw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1484081",shop:"clothes"},addTags:{brand:"G-Star Raw","brand:wikidata":"Q1484081","brand:wikipedia":"en:G-Star Raw",name:"G-Star Raw",shop:"clothes"},terms:["g-star"],matchScore:2,suggestion:true},"shop/clothes/GU":{name:"GU",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/g.u.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5512642",shop:"clothes"},addTags:{brand:"GU","brand:wikidata":"Q5512642","brand:wikipedia":"en:GU (retailer)",name:"GU",shop:"clothes"},countryCodes:["cl","jp","tw"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gabe's":{name:"Gabe's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GabesStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5515554",shop:"clothes"},addTags:{brand:"Gabe's","brand:wikidata":"Q5515554","brand:wikipedia":"en:Gabe's",name:"Gabe's",shop:"clothes"},countryCodes:["us"],terms:["gabriel brothers"],matchScore:2,suggestion:true},"shop/clothes/Gant":{name:"Gant",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/gant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1493667",shop:"clothes"},addTags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Gap":{name:"Gap",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GapJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420822",shop:"clothes"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"},terms:["the gap"],matchScore:2,suggestion:true},"shop/clothes/Gap Factory":{name:"Gap Factory",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GapJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420822",shop:"clothes"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap Factory",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gap Kids":{name:"Gap Kids",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GapJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420822",shop:"clothes"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap Kids",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Garage":{name:"Garage",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Garage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5521860",shop:"clothes"},addTags:{brand:"Garage","brand:wikidata":"Q5521860","brand:wikipedia":"en:Garage (clothing retailer)",clothes:"women",name:"Garage",shop:"clothes"},countryCodes:["am","ca","jo","om","qa","sa","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gerry Weber":{name:"Gerry Weber",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/gerryweber.global/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q873447",shop:"clothes"},addTags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Gina Laura":{name:"Gina Laura",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ginalaura.mode/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2700576",shop:"clothes"},addTags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gloria Jeans":{name:"Gloria Jeans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/gloriajeanscorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4139985",shop:"clothes"},addTags:{brand:"Gloria Jeans","brand:wikidata":"Q4139985","brand:wikipedia":"ru:Глория Джинс",name:"Gloria Jeans",shop:"clothes"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gucci":{name:"Gucci",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GUCCI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q178516",shop:"clothes"},addTags:{brand:"Gucci","brand:wikidata":"Q178516","brand:wikipedia":"en:Gucci",name:"Gucci",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Guess":{name:"Guess",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GUESS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2470307",shop:"clothes"},addTags:{brand:"Guess","brand:wikidata":"Q2470307","brand:wikipedia":"en:Guess (clothing)",name:"Guess",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Gymboree":{name:"Gymboree",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Gymboree/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4039771",shop:"clothes"},addTags:{brand:"Gymboree","brand:wikidata":"Q4039771","brand:wikipedia":"en:Gymboree",name:"Gymboree",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Gémo":{name:"Gémo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Gemo.Officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3122954",shop:"clothes"},addTags:{brand:"Gémo","brand:wikidata":"Q3122954","brand:wikipedia":"fr:Gémo",name:"Gémo",shop:"clothes"},countryCodes:["be","ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/H&M":{name:"H&M",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hmhongkong/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188326",shop:"clothes"},addTags:{brand:"H&M","brand:wikidata":"Q188326","brand:wikipedia":"en:H&M",name:"H&M",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Haggar":{name:"Haggar",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/HaggarClothingCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5638669",shop:"clothes"},addTags:{alt_name:"Haggar Clothing Co.",brand:"Haggar","brand:wikidata":"Q5638669","brand:wikipedia":"en:Haggar Clothing",name:"Haggar",shop:"clothes"},countryCodes:["us"],terms:["haggar clothing"],matchScore:2,suggestion:true},"shop/clothes/Hallhuber":{name:"Hallhuber",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hallhuberfashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1571714",shop:"clothes"},addTags:{brand:"Hallhuber","brand:wikidata":"Q1571714","brand:wikipedia":"de:Hallhuber (Bekleidungshaus)",name:"Hallhuber",shop:"clothes"},countryCodes:["at","ch","de","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Hanna Andersson":{name:"Hanna Andersson",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ShopHannaAndersson/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17460802",shop:"clothes"},addTags:{brand:"Hanna Andersson","brand:wikidata":"Q17460802","brand:wikipedia":"en:Hanna Andersson",clothes:"baby;children;women",name:"Hanna Andersson",shop:"clothes"},countryCodes:["us"],terms:["hanna anderssen"],matchScore:2,suggestion:true},"shop/clothes/Hermès":{name:"Hermès",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hermesusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q843887",shop:"clothes"},addTags:{brand:"Hermès","brand:wikidata":"Q843887","brand:wikipedia":"en:Hermès",name:"Hermès",shop:"clothes"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Hobbs":{name:"Hobbs",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hobbslondon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25108740",shop:"clothes"},addTags:{brand:"Hobbs","brand:wikidata":"Q25108740",name:"Hobbs",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Hollister":{name:"Hollister",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hollister/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1257477",shop:"clothes"},addTags:{brand:"Hollister","brand:wikidata":"Q1257477","brand:wikipedia":"en:Hollister Co.",name:"Hollister",official_name:"Hollister Co.",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Hot Topic":{name:"Hot Topic",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hottopic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9294032",shop:"clothes"},addTags:{brand:"Hot Topic","brand:wikidata":"Q9294032","brand:wikipedia":"en:Hot Topic",name:"Hot Topic",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/House":{name:"House",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/house.clothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9294202",shop:"clothes"},addTags:{brand:"House","brand:wikidata":"Q9294202","brand:wikipedia":"pl:House (marka)",name:"House",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Hugo Boss":{name:"Hugo Boss",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hugoboss/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q491627",shop:"clothes"},addTags:{brand:"Hugo Boss","brand:wikidata":"Q491627","brand:wikipedia":"en:Hugo Boss",name:"Hugo Boss",shop:"clothes",short_name:"Boss"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Hunkemöller":{name:"Hunkemöller",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/hunkemoller/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2604175",shop:"clothes"},addTags:{brand:"Hunkemöller","brand:wikidata":"Q2604175","brand:wikipedia":"en:Hunkemöller",name:"Hunkemöller",shop:"clothes"},countryCodes:["at","be","de","dk","es","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/IZOD":{name:"IZOD",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/IZOD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17152556",shop:"clothes"},addTags:{brand:"IZOD","brand:wikidata":"Q17152556","brand:wikipedia":"en:Izod",clothes:"men",name:"IZOD",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Indochino":{name:"Indochino",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/indochino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64448127",shop:"clothes"},addTags:{brand:"Indochino","brand:wikidata":"Q64448127","brand:wikipedia":"en:Indochino",clothes:"suits",name:"Indochino",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Intimissimi":{name:"Intimissimi",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/intimissimi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q305404",shop:"clothes"},addTags:{brand:"Intimissimi","brand:wikidata":"Q305404","brand:wikipedia":"en:Intimissimi",clothes:"underwear",name:"Intimissimi",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/J.Crew":{name:"J.Crew",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/jcrew/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5370765",shop:"clothes"},addTags:{brand:"J.Crew","brand:wikidata":"Q5370765","brand:wikipedia":"en:J.Crew",clothes:"men;women;children",name:"J.Crew",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/J.Jill":{name:"J.Jill",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/JJillStyle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64448268",shop:"clothes"},addTags:{brand:"J.Jill","brand:wikidata":"Q64448268","brand:wikipedia":"en:J.Jill",clothes:"women",name:"J.Jill",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/JBC":{name:"JBC",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/jbcfashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2671470",shop:"clothes"},addTags:{brand:"JBC","brand:wikidata":"Q2671470","brand:wikipedia":"nl:JBC",name:"JBC",shop:"clothes"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jack & Jones":{name:"Jack & Jones",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/jackandjonesUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6077665",shop:"clothes"},addTags:{brand:"Jack & Jones","brand:wikidata":"Q6077665","brand:wikipedia":"en:Jack & Jones",name:"Jack & Jones",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Jack Wills":{name:"Jack Wills",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/jackwills/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6115814",shop:"clothes"},addTags:{brand:"Jack Wills","brand:wikidata":"Q6115814","brand:wikipedia":"en:Jack Wills",name:"Jack Wills",shop:"clothes"},countryCodes:["ae","gb","hk","ie","kw","lb","mo","sg","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Janie & Jack":{name:"Janie & Jack",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/janieandjack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64449634",shop:"clothes"},addTags:{brand:"Janie & Jack","brand:wikidata":"Q64449634","brand:wikipedia":"en:Janie & Jack",clothes:"children",name:"Janie & Jack",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jeans Fritz":{name:"Jeans Fritz",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/JeansFritz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1686071",shop:"clothes"},addTags:{brand:"Jeans Fritz","brand:wikidata":"Q1686071","brand:wikipedia":"de:Jeans Fritz",name:"Jeans Fritz",shop:"clothes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jennyfer":{name:"Jennyfer",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/brand.jennyfer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3177174",shop:"clothes"},addTags:{brand:"Jennyfer","brand:wikidata":"Q3177174","brand:wikipedia":"fr:Jennyfer",name:"Jennyfer",shop:"clothes"},countryCodes:["fr","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jet":{name:"Jet",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/JetGoodForLife/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61995123",shop:"clothes"},addTags:{brand:"Jet","brand:wikidata":"Q61995123",name:"Jet",shop:"clothes"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jigsaw":{name:"Jigsaw",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/InsideJigsaw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6192383",shop:"clothes"},addTags:{brand:"Jigsaw","brand:wikidata":"Q6192383","brand:wikipedia":"en:Jigsaw (clothing retailer)",name:"Jigsaw",shop:"clothes"},countryCodes:["au","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/JoJo Maman Bébé":{name:"JoJo Maman Bébé",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/jojomamanbebe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6204064",shop:"clothes"},addTags:{brand:"JoJo Maman Bébé","brand:wikidata":"Q6204064",clothes:"maternity;babies",name:"JoJo Maman Bébé",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/JoS. A. Bank":{name:"JoS. A. Bank",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Jos.A.Bank.Clothiers.Inc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6204078",shop:"clothes"},addTags:{brand:"JoS. A. Bank","brand:wikidata":"Q6204078","brand:wikipedia":"en:JoS. A. Bank Clothiers",name:"JoS. A. Bank",official_name:"Jos. A. Bank Clothiers",shop:"clothes"},countryCodes:["us"],terms:["jos bank","joseph a bank"],matchScore:2,suggestion:true},"shop/clothes/Jockey":{name:"Jockey",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Jockey/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q534235",shop:"clothes"},addTags:{brand:"Jockey","brand:wikidata":"Q534235","brand:wikipedia":"en:Jockey International",name:"Jockey",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Joe Fresh":{name:"Joe Fresh",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/joefresh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6209926",shop:"clothes"},addTags:{brand:"Joe Fresh","brand:wikidata":"Q6209926","brand:wikipedia":"en:Joe Fresh",name:"Joe Fresh",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Joules":{name:"Joules",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Joules/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25351738",shop:"clothes"},addTags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jules":{name:"Jules",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Julescom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3188386",shop:"clothes"},addTags:{brand:"Jules","brand:wikidata":"Q3188386","brand:wikipedia":"fr:Jules (enseigne)",clothes:"men",name:"Jules",shop:"clothes"},countryCodes:["be","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Justice":{name:"Justice",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Justice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7857512",shop:"clothes"},addTags:{brand:"Justice","brand:wikidata":"Q7857512","brand:wikipedia":"en:Tween Brands",name:"Justice",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/K&Ö":{name:"K&Ö",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/KastnerOehler/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1735474",shop:"clothes"},addTags:{alt_name:"Kastner & Öhler",brand:"K&Ö","brand:wikidata":"Q1735474","brand:wikipedia":"de:Kastner & Öhler",name:"K&Ö",shop:"clothes"},countryCodes:["at"],terms:["kastner & öhler"],matchScore:2,suggestion:true},"shop/clothes/KappAhl":{name:"KappAhl",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/kappahl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4349016",shop:"clothes"},addTags:{brand:"KappAhl","brand:wikidata":"Q4349016","brand:wikipedia":"sv:Kappahl",name:"KappAhl",shop:"clothes"},countryCodes:["fi","no","pl","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Karen Millen":{name:"Karen Millen",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/karenmillen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6369889",shop:"clothes"},addTags:{brand:"Karen Millen","brand:wikidata":"Q6369889",name:"Karen Millen",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Kate Spade New York":{name:"Kate Spade New York",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/katespadeny/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6375797",shop:"clothes"},addTags:{brand:"Kate Spade New York","brand:wikidata":"Q6375797","brand:wikipedia":"en:Kate Spade New York",name:"Kate Spade New York",shop:"clothes",short_name:"Kate Spade"},countryCodes:["ca","us"],terms:["kate spade ny"],matchScore:2,suggestion:true},"shop/clothes/KiK":{name:"KiK",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/kik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q883965",shop:"clothes"},addTags:{brand:"KiK","brand:wikidata":"Q883965","brand:wikipedia":"en:KiK",name:"KiK",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Kiabi":{name:"Kiabi",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Kiabi.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3196299",shop:"clothes"},addTags:{brand:"Kiabi","brand:wikidata":"Q3196299","brand:wikipedia":"fr:Kiabi",name:"Kiabi",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Koton":{name:"Koton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/koton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6063877",shop:"clothes"},addTags:{brand:"Koton","brand:wikidata":"Q6063877","brand:wikipedia":"tr:Koton",name:"Koton",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/LC Waikiki":{name:"LC Waikiki",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lcwaikiki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3205965",shop:"clothes"},addTags:{brand:"LC Waikiki","brand:wikidata":"Q3205965","brand:wikipedia":"fr:LC Waikiki",name:"LC Waikiki",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/La Senza":{name:"La Senza",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lasenza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3212802",shop:"clothes"},addTags:{brand:"La Senza","brand:wikidata":"Q3212802","brand:wikipedia":"en:La Senza",name:"La Senza",shop:"clothes"},countryCodes:["ca","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/La Vie en Rose":{name:"La Vie en Rose",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lavieenrose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4950452",shop:"clothes"},addTags:{brand:"La Vie en Rose","brand:wikidata":"Q4950452","brand:wikipedia":"en:Boutique La Vie en Rose",clothes:"underwear;women",name:"La Vie en Rose",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lacoste":{name:"Lacoste",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Lacoste/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q309031",shop:"clothes"},addTags:{brand:"Lacoste","brand:wikidata":"Q309031","brand:wikipedia":"en:Lacoste",name:"Lacoste",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lane Bryant":{name:"Lane Bryant",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LaneBryant/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6485350",shop:"clothes"},addTags:{brand:"Lane Bryant","brand:wikidata":"Q6485350","brand:wikipedia":"en:Lane Bryant",clothes:"oversize;women",name:"Lane Bryant",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Laura":{name:"Laura",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/StyleLaura/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6498590",shop:"clothes"},addTags:{brand:"Laura","brand:wikidata":"Q6498590","brand:wikipedia":"en:Laura (clothing retailer)",clothes:"women",name:"Laura",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Laura Ashley":{name:"Laura Ashley",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1096100741968785408/hOoKNZzn_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1523089",shop:"clothes"},addTags:{brand:"Laura Ashley","brand:wikidata":"Q1523089","brand:wikipedia":"en:Laura Ashley plc",name:"Laura Ashley",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Le Château":{name:"Le Château",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lechateaustyle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6506731",shop:"clothes"},addTags:{brand:"Le Château","brand:wikidata":"Q6506731","brand:wikipedia":"en:Le Château",name:"Le Château",shop:"clothes"},countryCodes:["ae","ca","sa"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Levi's":{name:"Levi's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Levis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q127962",shop:"clothes"},addTags:{brand:"Levi's","brand:wikidata":"Q127962","brand:wikipedia":"en:Levi Strauss & Co.",clothes:"denim;men;women",name:"Levi's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lids":{name:"Lids",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Lids/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19841609",shop:"clothes"},addTags:{brand:"Lids","brand:wikidata":"Q19841609","brand:wikipedia":"en:Lids (store)",clothes:"hats",name:"Lids",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Lindex":{name:"Lindex",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lindex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1786717",shop:"clothes"},addTags:{brand:"Lindex","brand:wikidata":"Q1786717","brand:wikipedia":"en:Lindex",name:"Lindex",shop:"clothes"},countryCodes:["cz","ee","fi","no","se","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Loft":{name:"Loft",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LOFT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075137",shop:"clothes"},addTags:{brand:"Loft","brand:wikidata":"Q62075137",clothes:"women",name:"Loft",shop:"clothes"},terms:["ann taylor loft","the loft"],matchScore:2,suggestion:true},"shop/clothes/Loro Piana":{name:"Loro Piana",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LoroPiana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1686544",shop:"clothes"},addTags:{brand:"Loro Piana","brand:wikidata":"Q1686544","brand:wikipedia":"en:Loro Piana",name:"Loro Piana",shop:"clothes"},countryCodes:["fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Louis Vuitton":{name:"Louis Vuitton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/LouisVuitton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191485",shop:"clothes"},addTags:{brand:"Louis Vuitton","brand:wikidata":"Q191485","brand:wikipedia":"en:Louis Vuitton",name:"Louis Vuitton",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Lowes":{name:"Lowes",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lowesaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6693996",shop:"clothes"},addTags:{brand:"Lowes","brand:wikidata":"Q6693996","brand:wikipedia":"en:Lowes Menswear",name:"Lowes",shop:"clothes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Lucky Brand":{name:"Lucky Brand",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/luckybrand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6697865",shop:"clothes"},addTags:{brand:"Lucky Brand","brand:wikidata":"Q6697865","brand:wikipedia":"en:Lucky Brand Jeans",name:"Lucky Brand",shop:"clothes"},countryCodes:["ca","us"],terms:["lucky brand jeans"],matchScore:2,suggestion:true},"shop/clothes/Lululemon":{name:"Lululemon",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/lululemon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6702957",shop:"clothes"},addTags:{brand:"Lululemon","brand:wikidata":"Q6702957","brand:wikipedia":"en:Lululemon Athletica",clothes:"men;women",name:"Lululemon",official_name:"Lululemon Athletica",shop:"clothes"},countryCodes:["au","ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/M&Co":{name:"M&Co",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mandcofashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6711808",shop:"clothes"},addTags:{brand:"M&Co","brand:wikidata":"Q6711808","brand:wikipedia":"en:M&Co.",name:"M&Co",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/MO":{name:"MO",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mo.online.pt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q51882883",shop:"clothes"},addTags:{brand:"MO","brand:wikidata":"Q51882883","brand:wikipedia":"pt:MO (lojas)",name:"MO",shop:"clothes"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/clothes/MS Mode":{name:"MS Mode",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/530141134025649/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6718117",shop:"clothes"},addTags:{brand:"MS Mode","brand:wikidata":"Q6718117","brand:wikipedia":"nl:MS Mode",name:"MS Mode",shop:"clothes"},countryCodes:["be","de","fr","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Madewell":{name:"Madewell",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/madewell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64026213",shop:"clothes"},addTags:{brand:"Madewell","brand:wikidata":"Q64026213",clothes:"men;women",name:"Madewell",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Maidenform":{name:"Maidenform",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MaidenformBrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6735419",shop:"clothes"},addTags:{brand:"Maidenform","brand:wikidata":"Q6735419","brand:wikipedia":"en:Maidenform",clothes:"underwear;women",name:"Maidenform",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mandee":{name:"Mandee",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/shopmandee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71035705",shop:"clothes"},addTags:{brand:"Mandee","brand:wikidata":"Q71035705",clothes:"women",name:"Mandee",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mango":{name:"Mango",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mango.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136503",shop:"clothes"},addTags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Marc O'Polo":{name:"Marc O'Polo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/marcopoloru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1892752",shop:"clothes"},addTags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"},countryCodes:["at","be","ch","de","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Marimekko":{name:"Marimekko",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/marimekkodesignhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q534903",shop:"clothes"},addTags:{brand:"Marimekko","brand:wikidata":"Q534903","brand:wikipedia":"fi:Marimekko",name:"Marimekko",shop:"clothes"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mark Formelle":{name:"Mark Formelle",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/markformelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25381083",shop:"clothes"},addTags:{brand:"Mark Formelle","brand:wikidata":"Q25381083","brand:wikipedia":"ru:Mark Formelle",name:"Mark Formelle",shop:"clothes"},countryCodes:["by","kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mark's":{name:"Mark's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MarksClothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6766373",shop:"clothes"},addTags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Massimo Dutti":{name:"Massimo Dutti",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MassimoDuttiOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q788231",shop:"clothes"},addTags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Matalan":{name:"Matalan",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/shopmatalan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12061509",shop:"clothes"},addTags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"},countryCodes:["ae","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Maurices":{name:"Maurices",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/maurices/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6793571",shop:"clothes"},addTags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",clothes:"women",name:"Maurices",shop:"clothes"},countryCodes:["ca","fr","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Max Mara":{name:"Max Mara",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/maxmara/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1151774",shop:"clothes"},addTags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Melanie Lyne":{name:"Melanie Lyne",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/StyleMelanieLyne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64861470",shop:"clothes"},addTags:{brand:"Melanie Lyne","brand:wikidata":"Q64861470",clothes:"women",name:"Melanie Lyne",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Men's Wearhouse":{name:"Men's Wearhouse",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MensWearhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57405513",shop:"clothes"},addTags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513","brand:wikipedia":"en:Men's Wearhouse",clothes:"suits",name:"Men's Wearhouse",shop:"clothes"},countryCodes:["us"],terms:["mens warehouse"],matchScore:2,suggestion:true},"shop/clothes/Mexx":{name:"Mexx",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Mexx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1837290",shop:"clothes"},addTags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Michael Kors":{name:"Michael Kors",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MichaelKors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19572998",shop:"clothes"},addTags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Capri Holdings",name:"Michael Kors",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Miss Selfridge":{name:"Miss Selfridge",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/missselfridge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6877374",shop:"clothes"},addTags:{brand:"Miss Selfridge","brand:wikidata":"Q6877374","brand:wikipedia":"en:Miss Selfridge",clothes:"women",name:"Miss Selfridge",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Monsoon":{name:"Monsoon",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MonsoonUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65007501",shop:"clothes"},addTags:{brand:"Monsoon","brand:wikidata":"Q65007501",name:"Monsoon",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Moores":{name:"Moores",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MooresClothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6908309",shop:"clothes"},addTags:{brand:"Moores","brand:wikidata":"Q6908309","brand:wikipedia":"en:Moores",clothes:"men",name:"Moores",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Moss Bros":{name:"Moss Bros",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Moss/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6916538",shop:"clothes"},addTags:{brand:"Moss Bros","brand:wikidata":"Q6916538","brand:wikipedia":"en:Moss Bros Group",clothes:"men",name:"Moss Bros",shop:"clothes"},countryCodes:["ae","gb","gg","je"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Motherhood Maternity":{name:"Motherhood Maternity",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/motherhoodmaternity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79051139",shop:"clothes"},addTags:{brand:"Motherhood Maternity","brand:wikidata":"Q79051139",clothes:"maternity",name:"Motherhood Maternity",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mr Price":{name:"Mr Price",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MRPFASHION/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6929120",shop:"clothes"},addTags:{brand:"Mr Price","brand:wikidata":"Q6929120","brand:wikipedia":"en:Mr. Price",name:"Mr Price",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Mustang":{name:"Mustang",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mustangjeans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q221562",shop:"clothes"},addTags:{brand:"Mustang","brand:wikidata":"Q221562","brand:wikipedia":"de:Mustang (Jeans)",name:"Mustang",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/NKD":{name:"NKD",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nkd.friends/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q927272",shop:"clothes"},addTags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"},countryCodes:["at","de","it","si"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Naf Naf":{name:"Naf Naf",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nafnaf.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3334188",shop:"clothes"},addTags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Napapijri":{name:"Napapijri",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q2782017",shop:"clothes"},addTags:{brand:"Napapijri","brand:wikidata":"Q2782017","brand:wikipedia":"en:Napapijri",name:"Napapijri",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Nautica":{name:"Nautica",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Nautica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6981479",shop:"clothes"},addTags:{brand:"Nautica","brand:wikidata":"Q6981479","brand:wikipedia":"en:Nautica (clothing company)",name:"Nautica",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/New Look":{name:"New Look",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/newlook/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12063852",shop:"clothes"},addTags:{brand:"New Look","brand:wikidata":"Q12063852","brand:wikipedia":"en:New Look (company)",name:"New Look",shop:"clothes"},countryCodes:["be","de","fr","gb","ie","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/New York & Company":{name:"New York & Company",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/NewYorkandCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7012977",shop:"clothes"},addTags:{brand:"New York & Company","brand:wikidata":"Q7012977","brand:wikipedia":"en:New York & Company",name:"New York & Company",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/New Yorker":{name:"New Yorker",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/NewYorker.Fashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706421",shop:"clothes"},addTags:{brand:"New Yorker","brand:wikidata":"Q706421","brand:wikipedia":"en:New Yorker (clothing)",name:"New Yorker",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Next":{name:"Next",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nextofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q246655",shop:"clothes"},addTags:{brand:"Next","brand:wikidata":"Q246655","brand:wikipedia":"en:Next plc",name:"Next",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Nike":{name:"Nike",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nike/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483915",shop:"clothes"},addTags:{brand:"Nike","brand:wikidata":"Q483915","brand:wikipedia":"en:Nike, Inc.",name:"Nike",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Nordstrom Rack":{name:"Nordstrom Rack",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/NordstromRack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21463374",shop:"clothes"},addTags:{brand:"Nordstrom Rack","brand:wikidata":"Q21463374","brand:wikipedia":"en:Nordstrom Rack",name:"Nordstrom Rack",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Northern Reflections":{name:"Northern Reflections",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/northernreflections/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947797",shop:"clothes"},addTags:{brand:"Northern Reflections","brand:wikidata":"Q65947797",name:"Northern Reflections",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/OVS":{name:"OVS",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/OVSGlobalPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2042514",shop:"clothes"},addTags:{brand:"OVS","brand:wikidata":"Q2042514","brand:wikipedia":"en:OVS (company)",name:"OVS",shop:"clothes"},countryCodes:["at","ch","fr","it","si"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Oasis":{name:"Oasis",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/oasisfashions/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64532852",shop:"clothes"},addTags:{brand:"Oasis","brand:wikidata":"Q64532852",name:"Oasis",shop:"clothes"},countryCodes:["es","gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Okaïdi":{name:"Okaïdi",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/OkaidiWorld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3350027",shop:"clothes"},addTags:{brand:"Okaïdi","brand:wikidata":"Q3350027","brand:wikipedia":"fr:Okaïdi",name:"Okaïdi",shop:"clothes"},countryCodes:["be","ch","es","fr","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Old Navy":{name:"Old Navy",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/oldnavy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2735242",shop:"clothes"},addTags:{brand:"Old Navy","brand:wikidata":"Q2735242","brand:wikipedia":"en:Old Navy",name:"Old Navy",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Only":{name:"Only",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ONLY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61799370",shop:"clothes"},addTags:{brand:"Only","brand:wikidata":"Q61799370",name:"Only",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Orchestra":{name:"Orchestra",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/orchestraUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28042940",shop:"clothes"},addTags:{brand:"Orchestra","brand:wikidata":"Q28042940","brand:wikipedia":"fr:Orchestra Prémaman",name:"Orchestra",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Orsay":{name:"Orsay",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/orsay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q883245",shop:"clothes"},addTags:{brand:"Orsay","brand:wikidata":"Q883245","brand:wikipedia":"de:Orsay (Modeunternehmen)",name:"Orsay",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Outfit":{name:"Outfit",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/OutfitFashionUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7112061",shop:"clothes"},addTags:{brand:"Outfit","brand:wikidata":"Q7112061","brand:wikipedia":"en:Outfit (retailer)",name:"Outfit",shop:"clothes"},countryCodes:["de","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Oysho":{name:"Oysho",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/OYSHO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3327046",shop:"clothes"},addTags:{brand:"Oysho","brand:wikidata":"Q3327046","brand:wikipedia":"en:Oysho",name:"Oysho",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/PacSun":{name:"PacSun",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/pacsun/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7121857",shop:"clothes"},addTags:{brand:"PacSun","brand:wikidata":"Q7121857","brand:wikipedia":"en:PacSun",name:"PacSun",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Palmers":{name:"Palmers",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/palmers.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1509985",shop:"clothes"},addTags:{brand:"Palmers","brand:wikidata":"Q1509985","brand:wikipedia":"de:Palmers",name:"Palmers",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Peacocks":{name:"Peacocks",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/peacocksclothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7157762",shop:"clothes"},addTags:{brand:"Peacocks","brand:wikidata":"Q7157762","brand:wikipedia":"en:Peacocks (clothing)",name:"Peacocks",shop:"clothes"},countryCodes:["cy","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Peek & Cloppenburg":{name:"Peek & Cloppenburg",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/peekcloppenburg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2066959",shop:"clothes"},addTags:{brand:"Peek & Cloppenburg","brand:wikidata":"Q2066959","brand:wikipedia":"en:Peek & Cloppenburg",name:"Peek & Cloppenburg",shop:"clothes"},countryCodes:["at","be","de","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Penningtons":{name:"Penningtons",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/penningtons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16956527",shop:"clothes"},addTags:{brand:"Penningtons","brand:wikidata":"Q16956527","brand:wikipedia":"en:Penningtons",clothes:"women",name:"Penningtons",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pep":{name:"Pep",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PEPSocial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7166182",shop:"clothes"},addTags:{brand:"Pep","brand:wikidata":"Q7166182","brand:wikipedia":"en:Pep (store)",name:"Pep",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Pep&Co":{name:"Pep&Co",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/pepandco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24908166",shop:"clothes"},addTags:{brand:"Pep&Co","brand:wikidata":"Q24908166","brand:wikipedia":"en:Pep&Co",name:"Pep&Co",shop:"clothes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pepco":{name:"Pepco",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PEPCOpl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11815580",shop:"clothes"},addTags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"},countryCodes:["cz","hu","pl","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pepe Jeans":{name:"Pepe Jeans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PepeJeans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q426992",shop:"clothes"},addTags:{brand:"Pepe Jeans","brand:wikidata":"Q426992","brand:wikipedia":"en:Pepe Jeans",name:"Pepe Jeans",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Petit Bateau":{name:"Petit Bateau",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/petitbateauus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3377090",shop:"clothes"},addTags:{brand:"Petit Bateau","brand:wikidata":"Q3377090","brand:wikipedia":"en:Petit Bateau",name:"Petit Bateau",shop:"clothes"},countryCodes:["be","de","fr","gb","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Phase Eight":{name:"Phase Eight",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/phaseeight/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17020730",shop:"clothes"},addTags:{brand:"Phase Eight","brand:wikidata":"Q17020730","brand:wikipedia":"en:Phase Eight",name:"Phase Eight",shop:"clothes"},countryCodes:["ch","de","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Piazza Italia":{name:"Piazza Italia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/piazzaitaliaofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3902241",shop:"clothes"},addTags:{brand:"Piazza Italia","brand:wikidata":"Q3902241","brand:wikipedia":"it:Piazza Italia (azienda)",name:"Piazza Italia",shop:"clothes"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pierre Cardin":{name:"Pierre Cardin",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PIERRECARDINOFFICIAL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22921009",shop:"clothes"},addTags:{brand:"Pierre Cardin","brand:wikidata":"Q22921009",name:"Pierre Cardin",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Pimkie":{name:"Pimkie",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Pimkie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1758066",shop:"clothes"},addTags:{brand:"Pimkie","brand:wikidata":"Q1758066","brand:wikipedia":"en:Pimkie",name:"Pimkie",shop:"clothes"},countryCodes:["at","be","de","es","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Pink":{name:"Pink",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/vspink/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20716793",shop:"clothes"},addTags:{brand:"Pink","brand:wikidata":"Q20716793","brand:wikipedia":"en:Pink (Victoria's Secret)",clothes:"underwear;women",name:"Pink",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Plato's Closet":{name:"Plato's Closet",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/platoscloset/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61779112",shop:"clothes"},addTags:{brand:"Plato's Closet","brand:wikidata":"Q61779112",name:"Plato's Closet",second_hand:"only",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Polo Ralph Lauren":{name:"Polo Ralph Lauren",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/RalphLauren/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1641437",shop:"clothes"},addTags:{brand:"Polo Ralph Lauren","brand:wikidata":"Q1641437","brand:wikipedia":"en:Ralph Lauren Corporation",name:"Polo Ralph Lauren",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Prada":{name:"Prada",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Prada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q193136",shop:"clothes"},addTags:{brand:"Prada","brand:wikidata":"Q193136","brand:wikipedia":"en:Prada",name:"Prada",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Primark":{name:"Primark",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Primark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q137023",shop:"clothes"},addTags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Promod":{name:"Promod",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Promod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3407429",shop:"clothes"},addTags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Pull & Bear":{name:"Pull & Bear",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/pullandbear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q691029",shop:"clothes"},addTags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Puma":{name:"Puma",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PUMA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157064",shop:"clothes"},addTags:{brand:"Puma","brand:wikidata":"Q157064","brand:wikipedia":"en:Puma (brand)",name:"Puma",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Quiksilver":{name:"Quiksilver",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/quiksilver/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1329463",shop:"clothes"},addTags:{brand:"Quiksilver","brand:wikidata":"Q1329463","brand:wikipedia":"en:Quiksilver",name:"Quiksilver",shop:"clothes"},terms:["quicksilver"],matchScore:2,suggestion:true},"shop/clothes/Quiz":{name:"Quiz",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/887970746378727426/apda4Qe9_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q29995941",shop:"clothes"},addTags:{brand:"Quiz","brand:wikidata":"Q29995941","brand:wikipedia":"en:Quiz (clothing)",clothes:"women",name:"Quiz",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/RW&CO.":{name:"RW&CO.",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/RWandCO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65965663",shop:"clothes"},addTags:{brand:"RW&CO.","brand:wikidata":"Q65965663",clothes:"women;men",name:"RW&CO.",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Rainbow":{name:"Rainbow",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/RainbowApparel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7284708",shop:"clothes"},addTags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Reebok":{name:"Reebok",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ReebokUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466183",shop:"clothes"},addTags:{brand:"Reebok","brand:wikidata":"Q466183","brand:wikipedia":"en:Reebok",name:"Reebok",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Reiss":{name:"Reiss",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Reiss/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7310479",shop:"clothes"},addTags:{brand:"Reiss","brand:wikidata":"Q7310479","brand:wikipedia":"en:Reiss (brand)",name:"Reiss",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Reitmans":{name:"Reitmans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/reitmans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7310506",shop:"clothes"},addTags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Reserved":{name:"Reserved",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Reserved/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21809354",shop:"clothes"},addTags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved",name:"Reserved",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Ricki's":{name:"Ricki's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Rickis.Sizes0to18/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947929",shop:"clothes"},addTags:{brand:"Ricki's","brand:wikidata":"Q65947929",clothes:"women",name:"Ricki's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/River Island":{name:"River Island",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/riverisland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2670328",shop:"clothes"},addTags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"},countryCodes:["gb","ie","im","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Robert Graham":{name:"Robert Graham",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/robertgrahamnyc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18390679",shop:"clothes"},addTags:{brand:"Robert Graham","brand:wikidata":"Q18390679","brand:wikipedia":"en:Robert Graham (fashion brand)",clothes:"men",name:"Robert Graham",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Roots":{name:"Roots",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/roots/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7366633",shop:"clothes"},addTags:{brand:"Roots","brand:wikidata":"Q7366633","brand:wikipedia":"en:Roots Canada",name:"Roots",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Saint Laurent":{name:"Saint Laurent",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ysl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2282172",shop:"clothes"},addTags:{alt_name:"Yves Saint Laurent",brand:"Saint Laurent","brand:wikidata":"Q2282172","brand:wikipedia":"en:Yves Saint Laurent (brand)",name:"Saint Laurent",shop:"clothes",short_name:"YSL"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Saltrock":{name:"Saltrock",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/saltrocksoul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7406195",shop:"clothes"},addTags:{brand:"Saltrock","brand:wikidata":"Q7406195","brand:wikipedia":"en:Saltrock",name:"Saltrock",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Scotch & Soda":{name:"Scotch & Soda",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FScotch%20and%20Soda%20logo.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q17141914",shop:"clothes"},addTags:{brand:"Scotch & Soda","brand:wikidata":"Q17141914","brand:wikipedia":"en:Scotch and Soda (clothing)",name:"Scotch & Soda",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Sela":{name:"Sela",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/sela.shop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075111",shop:"clothes"},addTags:{brand:"Sela","brand:wikidata":"Q62075111",name:"Sela",shop:"clothes"},countryCodes:["kg","ru"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Sergent Major":{name:"Sergent Major",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/sergent.major.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62521738",shop:"clothes"},addTags:{brand:"Sergent Major","brand:wikidata":"Q62521738","brand:wikipedia":"fr:Sergent Major (entreprise)",clothes:"babies;children",name:"Sergent Major",shop:"clothes"},countryCodes:["be","de","es","fr","gb","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Sisley":{name:"Sisley",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Sisley/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12054325",shop:"clothes"},addTags:{brand:"Sisley","brand:wikidata":"Q12054325","brand:wikipedia":"cs:Sisley",name:"Sisley",shop:"clothes"},countryCodes:["at","ch","de","hr","it","ru"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Slaters":{name:"Slaters",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Slatermenswear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7538912",shop:"clothes"},addTags:{brand:"Slaters","brand:wikidata":"Q7538912","brand:wikipedia":"en:Slater Menswear",clothes:"suits",name:"Slaters",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Soma":{name:"Soma",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/SomaIntimates/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69882213",shop:"clothes"},addTags:{alt_name:"Soma Intimates",brand:"Soma","brand:wikidata":"Q69882213",clothes:"underwear;women",name:"Soma",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Spanx":{name:"Spanx",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/SPANX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1932886",shop:"clothes"},addTags:{brand:"Spanx","brand:wikidata":"Q1932886","brand:wikipedia":"en:Spanx",clothes:"underwear",name:"Spanx",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Springfield":{name:"Springfield",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Springfield/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q958209",shop:"clothes"},addTags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Stefanel":{name:"Stefanel",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Stefanel.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2338087",shop:"clothes"},addTags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"},countryCodes:["at","de","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Stitches":{name:"Stitches",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/stitchescanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7617652",shop:"clothes"},addTags:{brand:"Stitches","brand:wikidata":"Q7617652","brand:wikipedia":"en:Stitches (store)",name:"Stitches",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Stradivarius":{name:"Stradivarius",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/stradivas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3322945",shop:"clothes"},addTags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Street One":{name:"Street One",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MyStreetOne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61997265",shop:"clothes"},addTags:{brand:"Street One","brand:wikidata":"Q61997265",name:"Street One",shop:"clothes"},countryCodes:["at","be","ch","de","dk","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Suburbia":{name:"Suburbia",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/moda.suburbia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6134992",shop:"clothes"},addTags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Superdry":{name:"Superdry",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/SuperdryUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1684445",shop:"clothes"},addTags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Suzy Shier":{name:"Suzy Shier",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/SuzyShierCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65464976",shop:"clothes"},addTags:{brand:"Suzy Shier","brand:wikidata":"Q65464976",clothes:"women",name:"Suzy Shier",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/T.M.Lewin":{name:"T.M.Lewin",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/T.M.Lewin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16933755",shop:"clothes"},addTags:{brand:"T.M.Lewin","brand:wikidata":"Q16933755","brand:wikipedia":"en:T. M. Lewin",name:"T.M.Lewin",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Takko":{name:"Takko",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TakkoFashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1371302",shop:"clothes"},addTags:{brand:"Takko","brand:wikidata":"Q1371302","brand:wikipedia":"de:Takko",name:"Takko",shop:"clothes"},countryCodes:["at","cz","de","hu","nl"],terms:["takko fashion"],matchScore:2,suggestion:true},"shop/clothes/Talbots":{name:"Talbots",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TALBOTS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7679064",shop:"clothes"},addTags:{brand:"Talbots","brand:wikidata":"Q7679064","brand:wikipedia":"en:Talbots",name:"Talbots",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tally Weijl":{name:"Tally Weijl",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TALLYWEiJL.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q689695",shop:"clothes"},addTags:{brand:"Tally Weijl","brand:wikidata":"Q689695","brand:wikipedia":"en:Tally Weijl",name:"Tally Weijl",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tati":{name:"Tati",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Tati/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3516026",shop:"clothes"},addTags:{brand:"Tati","brand:wikidata":"Q3516026","brand:wikipedia":"fr:Tati (entreprise)",name:"Tati",shop:"clothes"},countryCodes:["dz","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ted Baker":{name:"Ted Baker",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1156016837466849280/kWtJhyL7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2913458",shop:"clothes"},addTags:{brand:"Ted Baker","brand:wikidata":"Q2913458","brand:wikipedia":"en:Ted Baker",name:"Ted Baker",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tezenis":{name:"Tezenis",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tezenis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28056374",shop:"clothes"},addTags:{brand:"Tezenis","brand:wikidata":"Q28056374",name:"Tezenis",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/The Children's Place":{name:"The Children's Place",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/childrensplace/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3520257",shop:"clothes"},addTags:{alt_name:"Children's Place",brand:"The Children's Place","brand:wikidata":"Q3520257","brand:wikipedia":"en:The Children's Place",name:"The Children's Place",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/The Kooples":{name:"The Kooples",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/thekooples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3521493",shop:"clothes"},addTags:{brand:"The Kooples","brand:wikidata":"Q3521493","brand:wikipedia":"fr:The Kooples",name:"The Kooples",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/The North Face":{name:"The North Face",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/thenorthface/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152784",shop:"clothes"},addTags:{alt_name:"North Face",brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/The Sting":{name:"The Sting",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/thesting.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2518794",shop:"clothes"},addTags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"},countryCodes:["be","de","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/The Walking Company":{name:"The Walking Company",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TheWalkingCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30716262",shop:"clothes"},addTags:{alt_name:"Walking Company",brand:"The Walking Company","brand:wikidata":"Q30716262","brand:wikipedia":"en:The Walking Company",name:"The Walking Company",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Thyme Maternity":{name:"Thyme Maternity",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ThymeMaternity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17033572",shop:"clothes"},addTags:{brand:"Thyme Maternity","brand:wikidata":"Q17033572","brand:wikipedia":"en:Thyme Maternity",clothes:"maternity",name:"Thyme Maternity",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tillys":{name:"Tillys",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Tillys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7802889",shop:"clothes"},addTags:{brand:"Tillys","brand:wikidata":"Q7802889","brand:wikipedia":"en:Tillys",clothes:"children;men;women",name:"Tillys",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Timberland":{name:"Timberland",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/timberland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1539185",shop:"clothes"},addTags:{brand:"Timberland","brand:wikidata":"Q1539185","brand:wikipedia":"en:The Timberland Company",name:"Timberland",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tip Top Tailors":{name:"Tip Top Tailors",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TipTopTailors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7808781",shop:"clothes"},addTags:{brand:"Tip Top Tailors","brand:wikidata":"Q7808781","brand:wikipedia":"en:Tip Top Tailors",clothes:"men",name:"Tip Top Tailors",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tom Tailor":{name:"Tom Tailor",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tomtailor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q571206",shop:"clothes"},addTags:{brand:"Tom Tailor","brand:wikidata":"Q571206","brand:wikipedia":"en:Tom Tailor",name:"Tom Tailor",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Tommy Bahama":{name:"Tommy Bahama",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tommybahama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3531299",shop:"clothes"},addTags:{brand:"Tommy Bahama","brand:wikidata":"Q3531299","brand:wikipedia":"en:Tommy Bahama",name:"Tommy Bahama",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tommy Hilfiger":{name:"Tommy Hilfiger",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tommyhilfiger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q634881",shop:"clothes"},addTags:{brand:"Tommy Hilfiger","brand:wikidata":"Q634881","brand:wikipedia":"en:Tommy Hilfiger (company)",name:"Tommy Hilfiger",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Topman":{name:"Topman",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/topmanus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1090880",shop:"clothes"},addTags:{brand:"Topman","brand:wikidata":"Q1090880","brand:wikipedia":"en:Topman",clothes:"men",name:"Topman",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Topshop":{name:"Topshop",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/227518370711659/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1893576",shop:"clothes"},addTags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",clothes:"women",name:"Topshop",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Torrid":{name:"Torrid",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Torrid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7827120",shop:"clothes"},addTags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tory Burch":{name:"Tory Burch",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/toryburch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19988222",shop:"clothes"},addTags:{brand:"Tory Burch","brand:wikidata":"Q19988222","brand:wikipedia":"en:Tory Burch (company)",name:"Tory Burch",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Triumph":{name:"Triumph",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TriumphInternationalUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q671216",shop:"clothes"},addTags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Truworths":{name:"Truworths",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TruworthsFashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24233998",shop:"clothes"},addTags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"shop/clothes/UNTUCKit":{name:"UNTUCKit",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/UNTUCKit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28207006",shop:"clothes"},addTags:{brand:"UNTUCKit","brand:wikidata":"Q28207006","brand:wikipedia":"en:Untuckit",name:"UNTUCKit",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/USC":{name:"USC",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/uscfashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7866331",shop:"clothes"},addTags:{brand:"USC","brand:wikidata":"Q7866331","brand:wikipedia":"en:USC (clothing retailer)",name:"USC",shop:"clothes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ulla Popken":{name:"Ulla Popken",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ulla.popken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2475146",shop:"clothes"},addTags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"},countryCodes:["at","be","ch","de","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Under Armour":{name:"Under Armour",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/UnderArmour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2031485",shop:"clothes"},addTags:{brand:"Under Armour","brand:wikidata":"Q2031485","brand:wikipedia":"en:Under Armour",clothes:"men;women",name:"Under Armour",shop:"clothes"},terms:["under armor"],matchScore:2,suggestion:true},"shop/clothes/Uniqlo":{name:"Uniqlo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/uniqlo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26070",shop:"clothes"},addTags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/United Colors of Benetton":{name:"United Colors of Benetton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BenettonUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q817139",shop:"clothes"},addTags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes",short_name:"Benetton"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Urban Outfitters":{name:"Urban Outfitters",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/urbanoutfitters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3552193",shop:"clothes"},addTags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/V.I.M.":{name:"V.I.M.",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/VIM.STORES/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71042495",shop:"clothes"},addTags:{brand:"V.I.M.","brand:wikidata":"Q71042495",clothes:"children;men;women",name:"V.I.M.",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Van Heusen":{name:"Van Heusen",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q7913397",shop:"clothes"},addTags:{brand:"Van Heusen","brand:wikidata":"Q7913397","brand:wikipedia":"en:Van Heusen",clothes:"men",name:"Van Heusen",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Vero Moda":{name:"Vero Moda",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bestsellercom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q594721",shop:"clothes"},addTags:{brand:"Vero Moda","brand:wikidata":"Q594721","brand:wikipedia":"en:Bestseller (company)",name:"Vero Moda",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Victoria's Secret":{name:"Victoria's Secret",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/victoriassecret/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q332477",shop:"clothes"},addTags:{brand:"Victoria's Secret","brand:wikidata":"Q332477","brand:wikipedia":"en:Victoria's Secret",clothes:"underwear;women",name:"Victoria's Secret",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Vilebrequin":{name:"Vilebrequin",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/VILEBREQUIN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3558391",shop:"clothes"},addTags:{brand:"Vilebrequin","brand:wikidata":"Q3558391","brand:wikipedia":"en:Vilebrequin",clothes:"swimwear",name:"Vilebrequin",shop:"clothes"},countryCodes:["fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Vineyard Vines":{name:"Vineyard Vines",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/vineyardvines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7932495",shop:"clothes"},addTags:{brand:"Vineyard Vines","brand:wikidata":"Q7932495","brand:wikipedia":"en:Vineyard Vines",name:"Vineyard Vines",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Volcom":{name:"Volcom",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Volcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2021416",shop:"clothes"},addTags:{brand:"Volcom","brand:wikidata":"Q2021416","brand:wikipedia":"en:Volcom",name:"Volcom",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/WE":{name:"WE",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/weeurope/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1987861",shop:"clothes"},addTags:{brand:"WE","brand:wikidata":"Q1987861","brand:wikipedia":"en:WE (clothing)",name:"WE",shop:"clothes"},countryCodes:["be","ch","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Wacoal":{name:"Wacoal",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/wacoal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q909522",shop:"clothes"},addTags:{brand:"Wacoal","brand:wikidata":"Q909522","brand:wikipedia":"en:Wacoal",clothes:"underwear",name:"Wacoal",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Wallis":{name:"Wallis",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Wallis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7963123",shop:"clothes"},addTags:{brand:"Wallis","brand:wikidata":"Q7963123","brand:wikipedia":"en:Wallis (retailer)",name:"Wallis",shop:"clothes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Warehouse":{name:"Warehouse",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WarehouseFashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28135370",shop:"clothes"},addTags:{brand:"Warehouse","brand:wikidata":"Q28135370",name:"Warehouse",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/West 49":{name:"West 49",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/west49/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7984218",shop:"clothes"},addTags:{brand:"West 49","brand:wikidata":"Q7984218","brand:wikipedia":"en:West 49",name:"West 49",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/White House Black Market":{name:"White House Black Market",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WhiteHouseBlackMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7994858",shop:"clothes"},addTags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"},countryCodes:["ca","us"],terms:["white house | black market"],matchScore:2,suggestion:true},"shop/clothes/White Stuff":{name:"White Stuff",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WhiteStuffUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7995442",shop:"clothes"},addTags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"},countryCodes:["de","dk","gb","gg"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Wibra":{name:"Wibra",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WibraBelgie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q943405",shop:"clothes"},addTags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Wilsons Leather":{name:"Wilsons Leather",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/wilsonsleather/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8023296",shop:"clothes"},addTags:{brand:"Wilsons Leather","brand:wikidata":"Q8023296","brand:wikipedia":"en:Wilsons Leather",clothes:"men;women",name:"Wilsons Leather",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Windsor":{name:"Windsor",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Windsorstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72981668",shop:"clothes"},addTags:{brand:"Windsor","brand:wikidata":"Q72981668",clothes:"women",name:"Windsor",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Winners":{name:"Winners",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Winners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q845257",shop:"clothes"},addTags:{brand:"Winners","brand:wikidata":"Q845257","brand:wikipedia":"en:Winners",name:"Winners",shop:"clothes"},countryCodes:["ca","es"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Wolford":{name:"Wolford",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WolfordFashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q431607",shop:"clothes"},addTags:{brand:"Wolford","brand:wikidata":"Q431607","brand:wikipedia":"en:Wolford",name:"Wolford",shop:"clothes"},countryCodes:["at","de","fr","gb","it","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Women'secret":{name:"Women'secret",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WomenSecret/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16648226",shop:"clothes"},addTags:{brand:"Women'secret","brand:wikidata":"Q16648226","brand:wikipedia":"es:Women'secret",clothes:"underwear;women",name:"Women'secret",shop:"clothes"},terms:["women's secret"],matchScore:2,suggestion:true},"shop/clothes/Woolworths":{name:"Woolworths",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/WoolworthsSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8033997",shop:"clothes"},addTags:{brand:"Woolworths","brand:wikidata":"Q8033997","brand:wikipedia":"en:Woolworths Holdings Limited",name:"Woolworths",shop:"clothes"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"shop/clothes/XIOS":{name:"XIOS",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/xiosamerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66149584",shop:"clothes"},addTags:{brand:"XIOS","brand:wikidata":"Q66149584",clothes:"men",name:"XIOS",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/XXI Forever":{name:"XXI Forever",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Forever21/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1060537",shop:"clothes"},addTags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"XXI Forever",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Yamamay":{name:"Yamamay",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/YamamayOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2599214",shop:"clothes"},addTags:{brand:"Yamamay","brand:wikidata":"Q2599214","brand:wikipedia":"it:Yamamay",name:"Yamamay",shop:"clothes"},countryCodes:["es","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Zara":{name:"Zara",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/zara/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q147662",shop:"clothes"},addTags:{brand:"Zara","brand:wikidata":"Q147662","brand:wikipedia":"en:Zara (retailer)",name:"Zara",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Zeeman":{name:"Zeeman",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/zeemantextielsupers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q184399",shop:"clothes"},addTags:{brand:"Zeeman","brand:wikidata":"Q184399","brand:wikipedia":"en:Zeeman (store)",name:"Zeeman",shop:"clothes"},countryCodes:["be","de","fr","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Zumiez":{name:"Zumiez",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/zumiez/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8075252",shop:"clothes"},addTags:{brand:"Zumiez","brand:wikidata":"Q8075252","brand:wikipedia":"en:Zumiez",name:"Zumiez",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/mister*lady":{name:"mister*lady",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/misterlady.community/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18640136",shop:"clothes"},addTags:{brand:"mister*lady","brand:wikidata":"Q18640136","brand:wikipedia":"de:Mister*lady",name:"mister*lady",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/rue21":{name:"rue21",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/rue21/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7377762",shop:"clothes"},addTags:{brand:"rue21","brand:wikidata":"Q7377762","brand:wikipedia":"en:Rue21",name:"rue21",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/s.Oliver":{name:"s.Oliver",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/s.OliverGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q265056",shop:"clothes"},addTags:{brand:"s.Oliver","brand:wikidata":"Q265056","brand:wikipedia":"en:S.Oliver",name:"s.Oliver",shop:"clothes"},countryCodes:["at","be","de","fr","hr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/しまむら":{name:"しまむら",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/shimamuragroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7758173",shop:"clothes"},addTags:{brand:"しまむら","brand:en":"Shimamura","brand:ja":"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",name:"しまむら","name:en":"Shimamura","name:ja":"しまむら",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/はるやま":{name:"はるやま",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/haruyama.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11275918",shop:"clothes"},addTags:{brand:"はるやま","brand:en":"Haruyama","brand:ja":"はるやま","brand:wikidata":"Q11275918","brand:wikipedia":"ja:はるやま商事",name:"はるやま","name:en":"Haruyama","name:ja":"はるやま",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/コナカ":{name:"コナカ",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKonaka%20yokohama.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11302278",shop:"clothes"},addTags:{brand:"コナカ","brand:en":"Konaka","brand:ja":"コナカ","brand:wikidata":"Q11302278","brand:wikipedia":"jp:コナカ",name:"コナカ","name:en":"Konaka","name:ja":"コナカ",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/ユニクロ":{name:"ユニクロ",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/uniqlo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26070",shop:"clothes"},addTags:{brand:"ユニクロ","brand:en":"UNIQLO","brand:ja":"ユニクロ","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"ユニクロ","name:en":"UNIQLO","name:ja":"ユニクロ",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/ライトオン":{name:"ライトオン",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/righton.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346416",shop:"clothes"},addTags:{brand:"ライトオン","brand:en":"Right-on","brand:ja":"ライトオン","brand:wikidata":"Q11346416","brand:wikipedia":"ja:ライトオン",name:"ライトオン","name:en":"Right-on","name:ja":"ライトオン",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/ワークマン":{name:"ワークマン",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/306869439836144/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11351660",shop:"clothes"},addTags:{brand:"ワークマン","brand:en":"Workman","brand:ja":"ワークマン","brand:wikidata":"Q11351660","brand:wikipedia":"ja:ワークマン",name:"ワークマン","name:en":"Workman","name:ja":"ワークマン",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/clothes/洋服の青山":{name:"洋服の青山",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AoyamaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11661241",shop:"clothes"},addTags:{brand:"洋服の青山","brand:en":"Aoyama Tailor","brand:ja":"洋服の青山","brand:wikidata":"Q11661241","brand:wikipedia":"ja:青山商事",name:"洋服の青山","name:en":"Aoyama Tailor","name:ja":"洋服の青山",shop:"clothes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/coffee/Nespresso":{name:"Nespresso",icon:"temaki-coffee",imageURL:"https://graph.facebook.com/nespresso/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q301301",shop:"coffee"},addTags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"},terms:[],matchScore:2,suggestion:true},"shop/coffee/Tchibo":{name:"Tchibo",icon:"temaki-coffee",imageURL:"https://graph.facebook.com/tchibo.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q564213",shop:"coffee"},addTags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"},countryCodes:["at","ch","cz","de","pl","sk"],terms:[],matchScore:2,suggestion:true},"shop/computer/DNS":{name:"DNS",icon:"fas-laptop",imageURL:"https://graph.facebook.com/dnsshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4036922",shop:"computer"},addTags:{alt_name:"ДНС",brand:"DNS","brand:en":"DNS","brand:ru":"ДНС","brand:wikidata":"Q4036922","brand:wikipedia":"ru:DNS (компания)",name:"DNS","name:en":"DNS","name:ru":"ДНС",shop:"computer"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/computer/PCデポ":{name:"PCデポ",icon:"fas-laptop",geometry:["point","area"],tags:{"brand:wikidata":"Q11331723",shop:"computer"},addTags:{brand:"PCデポ","brand:en":"PC Depot","brand:ja":"PCデポ","brand:wikidata":"Q11331723","brand:wikipedia":"ja:ピーシーデポコーポレーション",name:"PCデポ","name:en":"PC Depot","name:ja":"PCデポ",shop:"computer"},countryCodes:["jp"],terms:["pc depot","ピーシーデポ"],matchScore:2,suggestion:true},"shop/computer/じゃんぱら":{name:"じゃんぱら",icon:"fas-laptop",imageURL:"https://graph.facebook.com/janparapr01/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11306198",shop:"computer"},addTags:{brand:"じゃんぱら","brand:en":"Janpara","brand:ja":"じゃんぱら","brand:wikidata":"Q11306198","brand:wikipedia":"ja:じゃんぱら",name:"じゃんぱら","name:en":"Janpara","name:ja":"じゃんぱら",shop:"computer"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Adyar Ananda Bhavan":{name:"Adyar Ananda Bhavan",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/a2b.officialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15178238",shop:"confectionery"},addTags:{brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan",shop:"confectionery"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hemmakvall":{name:"Hemmakvall",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/hemmakvall/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10521791",shop:"confectionery"},addTags:{brand:"Hemmakväll","brand:wikidata":"Q10521791","brand:wikipedia":"sv:Hemmakväll",name:"Hemmakväll",shop:"confectionery"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hotel Chocolat":{name:"Hotel Chocolat",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/HotelChocolat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5911369",shop:"confectionery"},addTags:{brand:"Hotel Chocolat","brand:wikidata":"Q5911369","brand:wikipedia":"en:Hotel Chocolat",name:"Hotel Chocolat",shop:"confectionery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hussel":{name:"Hussel",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/HusselConfiserie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17123688",shop:"confectionery"},addTags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Jamin":{name:"Jamin",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/jaminonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2291848",shop:"confectionery"},addTags:{brand:"Jamin","brand:wikidata":"Q2291848","brand:wikipedia":"nl:Jamin",name:"Jamin",shop:"confectionery"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Kilwins":{name:"Kilwins",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/KilwinsChocolatesFudgeandIceCream/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38250832",shop:"confectionery"},addTags:{brand:"Kilwins","brand:wikidata":"Q38250832","brand:wikipedia":"en:Kilwins",cuisine:"chocolate;ice_cream;popcorn",name:"Kilwins",shop:"confectionery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Rocky Mountain Chocolate Factory":{name:"Rocky Mountain Chocolate Factory",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/myrmcf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7355878",shop:"confectionery"},addTags:{brand:"Rocky Mountain Chocolate Factory","brand:wikidata":"Q7355878","brand:wikipedia":"en:Rocky Mountain Chocolate Factory",name:"Rocky Mountain Chocolate Factory",shop:"confectionery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/See's Candies":{name:"See's Candies",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Sees.Candies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2103510",shop:"confectionery"},addTags:{brand:"See's Candies","brand:wikidata":"Q2103510","brand:wikipedia":"en:See's Candies",name:"See's Candies",shop:"confectionery"},countryCodes:["us"],terms:["sees candy"],matchScore:2,suggestion:true},"shop/confectionery/Thorntons":{name:"Thorntons",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Thorntons.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q683102",shop:"confectionery"},addTags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Вацак":{name:"Вацак",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Vatsak.KD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30966576",shop:"confectionery"},addTags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/シャトレーゼ":{name:"シャトレーゼ",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/chateraise.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11307696",shop:"confectionery"},addTags:{brand:"シャトレーゼ","brand:en":"Chateraise","brand:ja":"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ","name:en":"Chateraise","name:ja":"シャトレーゼ",shop:"confectionery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/不二家":{name:"不二家",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/FUJIYA.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q858452",shop:"confectionery"},addTags:{brand:"不二家","brand:en":"Fujiya","brand:ja":"不二家","brand:wikidata":"Q858452","brand:wikipedia":"ja:不二家",name:"不二家","name:en":"Fujiya","name:ja":"不二家",shop:"confectionery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/10-11":{name:"10-11",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65336720",shop:"convenience"},addTags:{brand:"10-11","brand:wikidata":"Q65336720","brand:wikipedia":"is:10-11",name:"10-11",shop:"convenience"},countryCodes:["is"],terms:[],matchScore:2,suggestion:true},"shop/convenience/1st Stop":{name:"1st Stop",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65706152",shop:"convenience"},addTags:{brand:"1st Stop","brand:wikidata":"Q65706152",name:"1st Stop",shop:"convenience"},countryCodes:["us"],terms:["first stop"],matchScore:2,suggestion:true},"shop/convenience/3COINS":{name:"3COINS",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/3COINS.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60997353",shop:"convenience"},addTags:{alt_name:"スリーコインズ",brand:"3COINS","brand:wikidata":"Q60997353","brand:wikipedia":"ja:3COINS",name:"3COINS",shop:"convenience"},countryCodes:["jp"],terms:["スリーコインズ"],matchScore:2,suggestion:true},"shop/convenience/7-Eleven":{name:"7-Eleven",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"},terms:["7-11","seven eleven"],matchScore:2,suggestion:true},"shop/convenience/759 Store":{name:"759 Store",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/759StoreHK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10846179",shop:"convenience"},addTags:{brand:"759 Store","brand:wikidata":"Q10846179","brand:wikipedia":"en:759 Store",name:"759 Store",shop:"convenience"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"shop/convenience/76":{name:"76",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/76gas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1658320",shop:"convenience"},addTags:{brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/8 à Huit":{name:"8 à Huit",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/fashion8a8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818601",shop:"convenience"},addTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/99 Speedmart":{name:"99 Speedmart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/99speedmartMY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075061",shop:"convenience"},addTags:{brand:"99 Speedmart","brand:wikidata":"Q62075061",name:"99 Speedmart",shop:"convenience"},countryCodes:["br","my","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ABC (Hawaii)":{name:"ABC (Hawaii)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/abcstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4650251",shop:"convenience"},addTags:{brand:"ABC","brand:wikidata":"Q4650251","brand:wikipedia":"en:ABC Stores (Hawaii)",name:"ABC",shop:"convenience"},countryCodes:["us"],terms:["abc stores"],matchScore:2,suggestion:true},"shop/convenience/Aibė":{name:"Aibė",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1022952",shop:"convenience"},addTags:{brand:"Aibė","brand:wikidata":"Q1022952","brand:wikipedia":"de:Aibė",name:"Aibė",shop:"convenience"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Albert Heijn to go":{name:"Albert Heijn to go",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ahtogo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q77971185",shop:"convenience"},addTags:{brand:"Albert Heijn to go","brand:wikidata":"Q77971185","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",official_name:"AH to go",shop:"convenience"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Alepa":{name:"Alepa",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/alepaan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4716167",shop:"convenience"},addTags:{brand:"Alepa","brand:wikidata":"Q4716167","brand:wikipedia":"fi:Alepa",name:"Alepa",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Alfamidi":{name:"Alfamidi",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/alfamidiku/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12471462",shop:"convenience"},addTags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Allsup's":{name:"Allsup's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/allsups940/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4733292",shop:"convenience"},addTags:{brand:"Allsup's","brand:wikidata":"Q4733292","brand:wikipedia":"en:Allsup's",name:"Allsup's",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/AmeriStop":{name:"AmeriStop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ameristopreynoldsburg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66048258",shop:"convenience"},addTags:{brand:"AmeriStop","brand:wikidata":"Q66048258",name:"AmeriStop",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Amoco":{name:"Amoco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Amoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q465952",shop:"convenience"},addTags:{brand:"Amoco","brand:wikidata":"Q465952","brand:wikipedia":"en:Amoco",name:"Amoco",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Aral":{name:"Aral",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/araldeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q565734",shop:"convenience"},addTags:{brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral",shop:"convenience"},countryCodes:["de"],terms:["aral tankstelle"],matchScore:2,suggestion:true},"shop/convenience/BP Shop":{name:"BP Shop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/bp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152057",shop:"convenience"},addTags:{brand:"BP Shop","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP Shop",shop:"convenience"},countryCodes:["au","ch","fr","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Best-one":{name:"Best-one",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/107890284043812/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4896532",shop:"convenience"},addTags:{brand:"Best-one","brand:wikidata":"Q4896532","brand:wikipedia":"en:Best-one",name:"Best-one",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Buc-ee's":{name:"Buc-ee's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/bucees/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4982335",shop:"convenience"},addTags:{brand:"Buc-ee's","brand:wikidata":"Q4982335","brand:wikipedia":"en:Buc-ee's",name:"Buc-ee's",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Budgens":{name:"Budgens",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/DiscoverBudgens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4985016",shop:"convenience"},addTags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/CBA":{name:"CBA",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCBA%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q779845",shop:"convenience"},addTags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/COOP Jednota":{name:"COOP Jednota",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/COOPJednota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41629254",shop:"convenience"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"},countryCodes:["cz","sk"],terms:["jednota"],matchScore:2,suggestion:true},"shop/convenience/CU":{name:"CU",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CU.BGFretail.cvs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12580836",shop:"convenience"},addTags:{brand:"CU","brand:wikidata":"Q12580836","brand:wikipedia":"ko:CU (편의점)",name:"CU",shop:"convenience"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Carrefour Express":{name:"Carrefour Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/expresshoria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940190",shop:"convenience"},addTags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Casey's General Store":{name:"Casey's General Store",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/caseys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940968",shop:"convenience"},addTags:{brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Centra":{name:"Centra",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CentraIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q747678",shop:"convenience"},addTags:{brand:"Centra","brand:wikidata":"Q747678","brand:wikipedia":"en:Centra",name:"Centra",shop:"convenience"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Chata Polska":{name:"Chata Polska",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/chatapolskasklepy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994406",shop:"convenience"},addTags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Cheers":{name:"Cheers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CheersSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64154066",shop:"convenience"},addTags:{brand:"Cheers","brand:wikidata":"Q64154066",name:"Cheers",opening_hours:"24/7",shop:"convenience"},countryCodes:["sg","vn"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Chevron":{name:"Chevron",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Chevron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319642",shop:"convenience"},addTags:{brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Circle K":{name:"Circle K",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"},terms:["ok","ok-mart"],matchScore:2,suggestion:true},"shop/convenience/Citgo":{name:"Citgo",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CITGOPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2974437",shop:"convenience"},addTags:{brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Clark's Pump-N-Shop":{name:"Clark's Pump-N-Shop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/clarkspumpnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65118218",shop:"convenience"},addTags:{brand:"Clark's Pump-N-Shop","brand:wikidata":"Q65118218",name:"Clark's Pump-N-Shop",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Co-op (Canada)":{name:"Co-op (Canada)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CoopCRS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",shop:"convenience"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Coles Express":{name:"Coles Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ColesExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5144653",shop:"convenience"},addTags:{brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Coop Pronto":{name:"Coop Pronto",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/209094172456220/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1129777",shop:"convenience"},addTags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"},countryCodes:["ch","li"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Coop (Schweiz)":{name:"Coop (Schweiz)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/coop.ch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q432564",shop:"convenience"},addTags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"convenience"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Costcutter":{name:"Costcutter",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/costcutter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175072",shop:"convenience"},addTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Couche-Tard":{name:"Couche-Tard",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CoucheTardQc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2836957",shop:"convenience"},addTags:{brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Cruizers":{name:"Cruizers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CruizersStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66134801",shop:"convenience"},addTags:{brand:"Cruizers","brand:wikidata":"Q66134801",name:"Cruizers",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Cumberland Farms":{name:"Cumberland Farms",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CumberlandFarms/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143685",shop:"convenience"},addTags:{brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Daisy Mart":{name:"Daisy Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/DaisyMart.Kamel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994934",shop:"convenience"},addTags:{brand:"Daisy Mart","brand:wikidata":"Q61994934",name:"Daisy Mart",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Dari Mart":{name:"Dari Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/darimart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5222675",shop:"convenience"},addTags:{brand:"Dari Mart","brand:wikidata":"Q5222675","brand:wikipedia":"en:Dari Mart",name:"Dari Mart",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Delikatesy Centrum":{name:"Delikatesy Centrum",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Delikatesypl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11693824",shop:"convenience"},addTags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ExtraMile":{name:"ExtraMile",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ExtraMileExtras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64224605",shop:"convenience"},addTags:{brand:"ExtraMile","brand:wikidata":"Q64224605",name:"ExtraMile",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/FamilyMart":{name:"FamilyMart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/familymart.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191685",shop:"convenience"},addTags:{brand:"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"FamilyMart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Four Square":{name:"Four Square",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/FourSquareNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5475558",shop:"convenience"},addTags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"convenience"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Franprix":{name:"Franprix",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/franprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2420096",shop:"convenience"},addTags:{brand:"Franprix","brand:wikidata":"Q2420096","brand:wikipedia":"fr:Franprix",name:"Franprix",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Freshmarket":{name:"Freshmarket",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q16546326",shop:"convenience"},addTags:{brand:"Freshmarket","brand:wikidata":"Q16546326","brand:wikipedia":"pl:Freshmarket",name:"Freshmarket",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/GS25":{name:"GS25",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/funGS25/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q624041",shop:"convenience"},addTags:{brand:"GS25","brand:wikidata":"Q624041","brand:wikipedia":"ko:GS25",name:"GS25",shop:"convenience"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Groszek":{name:"Groszek",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Sklepy.Groszek/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9280965",shop:"convenience"},addTags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Hasty Market":{name:"Hasty Market",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/607684929288087/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58022603",shop:"convenience"},addTags:{brand:"Hasty Market","brand:wikidata":"Q58022603",name:"Hasty Market",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Holiday":{name:"Holiday",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/holidaystations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880490",shop:"convenience"},addTags:{brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Huck's Food & Fuel":{name:"Huck's Food & Fuel",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/GoToHucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56276328",shop:"convenience"},addTags:{brand:"Huck's Food & Fuel","brand:wikidata":"Q56276328","brand:wikipedia":"en:Huck's Food & Fuel",name:"Huck's Food & Fuel",shop:"convenience",short_name:"Huck's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Hudson":{name:"Hudson",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/673632989434235/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5928682",shop:"convenience"},addTags:{brand:"Hudson","brand:wikidata":"Q5928682","brand:wikipedia":"en:Hudson Group",name:"Hudson",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Hursts":{name:"Hursts",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q80975681",shop:"convenience"},addTags:{brand:"Hursts","brand:wikidata":"Q80975681",name:"Hursts",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Husky":{name:"Husky",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/huskyenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q702049",shop:"convenience"},addTags:{brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",name:"Husky",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Indomaret":{name:"Indomaret",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/IndomaretMudahdanHemat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4262825",shop:"convenience"},addTags:{brand:"Indomaret","brand:wikidata":"Q4262825","brand:wikipedia":"en:Indomaret",name:"Indomaret",shop:"convenience"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Intermarché Contact":{name:"Intermarché Contact",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"convenience"},addTags:{brand:"Intermarché Contact","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Contact",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Irving":{name:"Irving",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/irvingoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1673286",shop:"convenience"},addTags:{brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving",shop:"convenience"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Jacksons":{name:"Jacksons",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/JacksonsFoodStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64617393",shop:"convenience"},addTags:{brand:"Jacksons","brand:wikidata":"Q64617393",name:"Jacksons",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Joker":{name:"Joker",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/JokerNorge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q716328",shop:"convenience"},addTags:{brand:"Joker","brand:wikidata":"Q716328","brand:wikipedia":"en:Joker (store)",name:"Joker",shop:"convenience"},countryCodes:["no"],terms:[],matchScore:2,suggestion:true},"shop/convenience/K-Market":{name:"K-Market",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/KMarketSuomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11868562",shop:"convenience"},addTags:{brand:"K-Market","brand:wikidata":"Q11868562","brand:wikipedia":"fi:K-Market",name:"K-Market",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Kangaroo Express":{name:"Kangaroo Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/KangarooExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61747408",shop:"convenience"},addTags:{brand:"Kangaroo Express","brand:wikidata":"Q61747408",name:"Kangaroo Express",shop:"convenience",short_name:"Kangaroo"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Konzum (Balkans)":{name:"Konzum (Balkans)",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKonzum%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q518563",shop:"convenience"},addTags:{brand:"Konzum","brand:wikidata":"Q518563","brand:wikipedia":"hr:Konzum",name:"Konzum",shop:"convenience"},countryCodes:["ba","hr","rs"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Kum & Go":{name:"Kum & Go",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/kumandgo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6443340",shop:"convenience"},addTags:{brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Kwik Shop":{name:"Kwik Shop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/kwikshopstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6450417",shop:"convenience"},addTags:{brand:"Kwik Shop","brand:wikidata":"Q6450417","brand:wikipedia":"en:Kwik Shop",name:"Kwik Shop",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Kwik Trip":{name:"Kwik Trip",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/KwikTrip/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6450420",shop:"convenience"},addTags:{brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/La Vie Claire":{name:"La Vie Claire",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Lavieclaire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3213589",shop:"convenience"},addTags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"fr:La Vie Claire",name:"La Vie Claire",organic:"only",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Lawson":{name:"Lawson",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/lawson.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1557223",shop:"convenience"},addTags:{brand:"Lawson","brand:wikidata":"Q1557223","brand:wikipedia":"en:Lawson (store)",name:"Lawson",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Lewiatan":{name:"Lewiatan",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/psh.lewiatan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11755396",shop:"convenience"},addTags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Lifestyle Express":{name:"Lifestyle Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/324527018203312/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994869",shop:"convenience"},addTags:{brand:"Lifestyle Express","brand:wikidata":"Q61994869",name:"Lifestyle Express",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Little Waitrose":{name:"Little Waitrose",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/waitroseandpartners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q771734",shop:"convenience"},addTags:{brand:"Little Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Little Waitrose",shop:"convenience"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Loaf 'N Jug":{name:"Loaf 'N Jug",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/loafnjugstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6663398",shop:"convenience"},addTags:{brand:"Loaf 'N Jug","brand:wikidata":"Q6663398","brand:wikipedia":"en:Loaf 'N Jug",name:"Loaf 'N Jug",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Londis (Ireland)":{name:"Londis (Ireland)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/londisireland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21015800",shop:"convenience"},addTags:{brand:"Londis","brand:wikidata":"Q21015800","brand:wikipedia":"en:Londis (Ireland)",name:"Londis",shop:"convenience"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Londis (UK)":{name:"Londis (UK)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/102483611097059/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21008564",shop:"convenience"},addTags:{brand:"Londis","brand:wikidata":"Q21008564","brand:wikipedia":"en:Londis (United Kingdom)",name:"Londis",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/M&S Simply Food":{name:"M&S Simply Food",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MarksandSpencer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"convenience"},addTags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"convenience"},terms:["marks & spencer simply food"],matchScore:2,suggestion:true},"shop/convenience/Mac's":{name:"Mac's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MacsBigBaypointRoad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4043527",shop:"convenience"},addTags:{brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mace (Ireland)":{name:"Mace (Ireland)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MACEIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75236910",shop:"convenience"},addTags:{brand:"Mace","brand:wikidata":"Q75236910","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mace (Northern Ireland)":{name:"Mace (Northern Ireland)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MACENorthernIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75238536",shop:"convenience"},addTags:{brand:"Mace","brand:wikidata":"Q75238536","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mace (UK)":{name:"Mace (UK)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/maces.stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75240338",shop:"convenience"},addTags:{brand:"Mace","brand:wikidata":"Q75240338","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Marathon":{name:"Marathon",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MarathonPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q458363",shop:"convenience"},addTags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Maverik":{name:"Maverik",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/maverikadventure/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64149010",shop:"convenience"},addTags:{brand:"Maverik","brand:wikidata":"Q64149010","brand:wikipedia":"en:Maverik, Inc.",name:"Maverik",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Małpka Express":{name:"Małpka Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/malpkaexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18431946",shop:"convenience"},addTags:{brand:"Małpka Express","brand:wikidata":"Q18431946","brand:wikipedia":"pl:Małpka Express",name:"Małpka Express",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/McColl's":{name:"McColl's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/YourMcColls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997477",shop:"convenience"},addTags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mercator":{name:"Mercator",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Mercator/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q738412",shop:"convenience"},addTags:{brand:"Mercator","brand:wikidata":"Q738412","brand:wikipedia":"en:Mercator (retail)",name:"Mercator",shop:"convenience"},countryCodes:["ba","hr","me","rs","si"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Migrolino":{name:"Migrolino",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/migrolino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56745088",shop:"convenience"},addTags:{brand:"Migrolino","brand:wikidata":"Q56745088","brand:wikipedia":"de:Migrolino",name:"Migrolino",shop:"convenience"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Ministop":{name:"Ministop",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875897219508871168/OZ1swK9c_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1038929",shop:"convenience"},addTags:{brand:"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"Ministop",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Minit Mart":{name:"Minit Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/MinitMartOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18154470",shop:"convenience"},addTags:{brand:"Minit Mart","brand:wikidata":"Q18154470","brand:wikipedia":"en:Minit Mart Foods Inc.",name:"Minit Mart",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mobil Mart":{name:"Mobil Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ExxonandMobilStations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088656",shop:"convenience"},addTags:{brand:"Mobil Mart","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil Mart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/MrMax":{name:"MrMax",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/mrmaxrecruit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11342034",shop:"convenience"},addTags:{alt_name:"ミスターマックス",brand:"MrMax","brand:wikidata":"Q11342034","brand:wikipedia":"ja:ミスターマックス",name:"MrMax",shop:"convenience"},countryCodes:["jp"],terms:["ミスターマックス"],matchScore:2,suggestion:true},"shop/convenience/Nasz Sklep":{name:"Nasz Sklep",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/356733814830329/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62070369",shop:"convenience"},addTags:{brand:"Nasz Sklep","brand:wikidata":"Q62070369",name:"Nasz Sklep",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Neste K":{name:"Neste K",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/nestebensis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42901270",shop:"convenience"},addTags:{brand:"Neste K","brand:wikidata":"Q42901270","brand:wikipedia":"fi:Neste K",name:"Neste K",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/NewDays":{name:"NewDays",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/NEWDAYSKIOSK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11234763",shop:"convenience"},addTags:{alt_name:"ニューデイズ",brand:"NewDays","brand:wikidata":"Q11234763","brand:wikipedia":"ja:NewDays",name:"NewDays",shop:"convenience"},countryCodes:["jp"],terms:["newdays ミニ"],matchScore:2,suggestion:true},"shop/convenience/Nisa":{name:"Nisa",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/nisalocally/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16999069",shop:"convenience"},addTags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Nisa Local":{name:"Nisa Local",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/nisalocally/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16999069",shop:"convenience"},addTags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/OK Market":{name:"OK Market",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/okmarketcl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6047736",shop:"convenience"},addTags:{brand:"OK Market","brand:wikidata":"Q6047736","brand:wikipedia":"es:OK Market",name:"OK Market",shop:"convenience"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/OK便利店":{name:"OK便利店",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"OK便利店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利店","name:en":"Circle K",shop:"convenience"},countryCodes:["cn","hk","mo"],terms:["ok便利商店","ok便利店 circle k"],matchScore:2,suggestion:true},"shop/convenience/OK超商":{name:"OK超商",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/okmart.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10851968",shop:"convenience"},addTags:{brand:"OK超商","brand:en":"OK mart","brand:wikidata":"Q10851968","brand:wikipedia":"zh:OK超商",name:"OK超商","name:en":"OK mart",shop:"convenience"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/convenience/On the Run":{name:"On the Run",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/OntheRunUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16931259",shop:"convenience"},addTags:{brand:"On the Run","brand:wikidata":"Q16931259","brand:wikipedia":"en:On the Run (convenience store)",name:"On the Run",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/One Stop":{name:"One Stop",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/933786043735830534/dehdJCDU_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q65954217",shop:"convenience"},addTags:{brand:"One Stop","brand:wikidata":"Q65954217",name:"One Stop",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Orlen":{name:"Orlen",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ORLENOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q971649",shop:"convenience"},addTags:{brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Oxxo":{name:"Oxxo",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/OXXOTiendas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1342538",shop:"convenience"},addTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Petro-Canada":{name:"Petro-Canada",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/petrocanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1208279",shop:"convenience"},addTags:{brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Plaid Pantry":{name:"Plaid Pantry",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/plaidpantryOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7200591",shop:"convenience"},addTags:{brand:"Plaid Pantry","brand:wikidata":"Q7200591","brand:wikipedia":"en:Plaid Pantry",name:"Plaid Pantry",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Premier":{name:"Premier",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/552086468839997441/Ok2vWsQl_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q7240340",shop:"convenience"},addTags:{brand:"Premier","brand:wikidata":"Q7240340","brand:wikipedia":"en:Premier Stores",name:"Premier",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Proxi":{name:"Proxi",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q3408522",shop:"convenience"},addTags:{brand:"Proxi","brand:wikidata":"Q3408522","brand:wikipedia":"fr:Proxi",name:"Proxi",shop:"convenience"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Quality Mart":{name:"Quality Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/QualityMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66134834",shop:"convenience"},addTags:{brand:"Quality Mart","brand:wikidata":"Q66134834",name:"Quality Mart",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/QuickChek":{name:"QuickChek",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1191354026673225733/8XEXlY7k_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7271689",shop:"convenience"},addTags:{brand:"QuickChek","brand:wikidata":"Q7271689","brand:wikipedia":"en:QuickChek",name:"QuickChek",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/QuikTrip":{name:"QuikTrip",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Quiktrip/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7271953",shop:"convenience"},addTags:{brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip",shop:"convenience",short_name:"QT"},terms:[],matchScore:2,suggestion:true},"shop/convenience/RaceTrac":{name:"RaceTrac",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/RaceTrac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735942",shop:"convenience"},addTags:{brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/RaceWay":{name:"RaceWay",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/720219901323849/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q73039084",shop:"convenience"},addTags:{brand:"RaceWay","brand:wikidata":"Q73039084",name:"RaceWay",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Rewe To Go":{name:"Rewe To Go",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Rewe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16968817",shop:"convenience"},addTags:{brand:"Rewe To Go","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe To Go",shop:"convenience"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Royal Farms":{name:"Royal Farms",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Royalfarmsstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7374169",shop:"convenience"},addTags:{brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Rutter's":{name:"Rutter's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/rutters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7383544",shop:"convenience"},addTags:{brand:"Rutter's","brand:wikidata":"Q7383544","brand:wikipedia":"en:Rutter's",name:"Rutter's",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sainsbury's Local":{name:"Sainsbury's Local",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/sainsburys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13218434",shop:"convenience"},addTags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sale":{name:"Sale",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSale%20wordmark.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11892046",shop:"convenience"},addTags:{brand:"Sale","brand:wikidata":"Q11892046","brand:wikipedia":"fi:Sale",name:"Sale",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sheetz":{name:"Sheetz",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/sheetz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7492551",shop:"convenience"},addTags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Shell":{name:"Shell",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",shop:"convenience"},addTags:{brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Shell Select":{name:"Shell Select",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",shop:"convenience"},addTags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Siwa":{name:"Siwa",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSiwa%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11893827",shop:"convenience"},addTags:{brand:"Siwa","brand:wikidata":"Q11893827","brand:wikipedia":"fi:Siwa",name:"Siwa",shop:"convenience"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Spar":{name:"Spar",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"convenience"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Spar Express":{name:"Spar Express",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"convenience"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Speedway":{name:"Speedway",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/SpeedwayStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7575683",shop:"convenience"},addTags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Społem":{name:"Społem",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/SpolemSpoldzielczoscSpozywcow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11826043",shop:"convenience"},addTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Star Mart":{name:"Star Mart",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q61994857",shop:"convenience"},addTags:{brand:"Star Mart","brand:wikidata":"Q61994857",name:"Star Mart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Stewart's Shops":{name:"Stewart's Shops",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/YourStewarts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7615690",shop:"convenience"},addTags:{brand:"Stewart's Shops","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's Shops",shop:"convenience"},countryCodes:["us"],terms:["stewarts"],matchScore:2,suggestion:true},"shop/convenience/Stripes":{name:"Stripes",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/stripesstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7624135",shop:"convenience"},addTags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"},countryCodes:["cl","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sunoco":{name:"Sunoco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/GoSunoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1423218",shop:"convenience"},addTags:{brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Tesco":{name:"Tesco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/1183230681723205/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"convenience"},addTags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Tesco Express":{name:"Tesco Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/1183230681723205/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"convenience"},addTags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Texaco":{name:"Texaco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/TexacoWithTechron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q775060",shop:"convenience"},addTags:{brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/The Co-operative Food (UK)":{name:"The Co-operative Food (UK)",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1034360565127409665/V4fCWHgw_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3277439",shop:"convenience"},addTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"convenience"},countryCodes:["gb"],terms:["coop","coop food","cooperative food","the cooperative"],matchScore:2,suggestion:true},"shop/convenience/Thorntons":{name:"Thorntons",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/thorntonsllc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7796584",shop:"convenience"},addTags:{brand:"Thorntons","brand:wikidata":"Q7796584","brand:wikipedia":"en:Thorntons LLC",name:"Thorntons",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Tiger Mart":{name:"Tiger Mart",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q57643977",shop:"convenience"},addTags:{brand:"Tiger Mart","brand:wikidata":"Q57643977",name:"Tiger Mart",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Total":{name:"Total",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/TotalUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154037",shop:"convenience"},addTags:{brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Turkey Hill":{name:"Turkey Hill",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/turkeyhillmm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42376970",shop:"convenience"},addTags:{brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Ultramar":{name:"Ultramar",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ultramarcanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3548078",shop:"convenience"},addTags:{brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/United":{name:"United",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/unitedpetroleum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28224393",shop:"convenience"},addTags:{brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United",shop:"convenience"},countryCodes:["au"],terms:["united petroleum"],matchScore:2,suggestion:true},"shop/convenience/United Dairy Farmers":{name:"United Dairy Farmers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/UnitedDairyFarmers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887677",shop:"convenience"},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"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Utile":{name:"Utile",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"convenience"},addTags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Valero":{name:"Valero",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/valeroenergy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1283291",shop:"convenience"},addTags:{brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/VinMart+":{name:"VinMart+",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/sieuthivinmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60245505",shop:"convenience"},addTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart+",shop:"convenience"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Vival":{name:"Vival",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/vivalvoiron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7937525",shop:"convenience"},addTags:{brand:"Vival","brand:wikidata":"Q7937525","brand:wikipedia":"en:Vival (shop)",name:"Vival",shop:"convenience"},countryCodes:["fr","pe"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Waitrose":{name:"Waitrose",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/waitroseandpartners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q771734",shop:"convenience"},addTags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",shop:"convenience"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Wawa":{name:"Wawa",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/wawa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5936320",shop:"convenience"},addTags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Weltladen":{name:"Weltladen",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1640782",shop:"convenience"},addTags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Woolworths Petrol":{name:"Woolworths Petrol",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/woolworths/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5023980",shop:"convenience"},addTags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/convenience/abc (Poland)":{name:"abc (Poland)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/abcsklepy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11683985",shop:"convenience"},addTags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:Abc (sieć handlowa)",name:"abc",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ampm":{name:"ampm",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ampm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q306960",shop:"convenience"},addTags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/miniピアゴ":{name:"miniピアゴ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11188499",shop:"convenience"},addTags:{brand:"miniピアゴ","brand:en":"mini Piago","brand:ja":"miniピアゴ","brand:wikidata":"Q11188499","brand:wikipedia":"ja:Miniピアゴ",name:"miniピアゴ","name:en":"mini Piago","name:ja":"miniピアゴ",shop:"convenience"},countryCodes:["jp"],terms:["ミニピアゴ"],matchScore:2,suggestion:true},"shop/convenience/uSmile 昆仑好客":{name:"uSmile 昆仑好客",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/113494673346645/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66480830",shop:"convenience"},addTags:{brand:"uSmile 昆仑好客","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"昆仑好客",name:"uSmile 昆仑好客","name:en":"uSmile","name:zh":"昆仑好客",shop:"convenience"},countryCodes:["cn"],terms:["usmile","usmile 便利店","昆仑好","昆仑好客"],matchScore:2,suggestion:true},"shop/convenience/Żabka":{name:"Żabka",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/zabkapolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2589061",shop:"convenience"},addTags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"pl:Żabka (sieć sklepów)",name:"Żabka",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ВкусВилл":{name:"ВкусВилл",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/vkusvill.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57271676",shop:"convenience"},addTags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:Вкусвилл",name:"ВкусВилл",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Гроздь":{name:"Гроздь",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/grozdmag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21638412",shop:"convenience"},addTags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Доброном":{name:"Доброном",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Eurooptby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2565040",shop:"convenience"},addTags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Евроопт Market":{name:"Евроопт Market",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65455869",shop:"convenience"},addTags:{brand:"Евроопт Market","brand:wikidata":"Q65455869",name:"Евроопт Market",shop:"convenience"},countryCodes:["by"],terms:["евроопт маркет"],matchScore:2,suggestion:true},"shop/convenience/Евроопт Минимаркет":{name:"Евроопт Минимаркет",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65455911",shop:"convenience"},addTags:{brand:"Евроопт Минимаркет","brand:wikidata":"Q65455911",name:"Евроопт Минимаркет",shop:"convenience"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Копеечка":{name:"Копеечка",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q68207105",shop:"convenience"},addTags:{brand:"Копеечка","brand:wikidata":"Q68207105",name:"Копеечка",shop:"convenience"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Копейка":{name:"Копейка",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1783878",shop:"convenience"},addTags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Магнит":{name:"Магнит",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/magnitretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"convenience"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"},terms:["магнит у дома"],matchScore:2,suggestion:true},"shop/convenience/Мария-Ра":{name:"Мария-Ра",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/mariarashop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4281631",shop:"convenience"},addTags:{brand:"Мария-Ра","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Сильпо":{name:"Сильпо",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/silpo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4419434",shop:"convenience"},addTags:{brand:"Сильпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сильпо",shop:"convenience"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/convenience/アンスリー":{name:"アンスリー",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q17192555",shop:"convenience"},addTags:{brand:"アンスリー","brand:en":"Ansuri","brand:ja":"アンスリー","brand:wikidata":"Q17192555","brand:wikipedia":"ja:アンスリー",name:"アンスリー","name:en":"Ansuri","name:ja":"アンスリー",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/サンクス":{name:"サンクス",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUny.group.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16141064",shop:"convenience"},addTags:{brand:"サンクス","brand:en":"Sunkus","brand:ja":"サンクス","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus","name:ja":"サンクス",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/サークルK":{name:"サークルK",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"サークルK","brand:en":"Circle K","brand:ja":"サークルK","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K","name:ja":"サークルK",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/スリーエフ":{name:"スリーエフ",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875645560073539585/X1oFVQef_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11313419",shop:"convenience"},addTags:{brand:"スリーエフ","brand:en":"Three F","brand:ja":"スリーエフ","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F","name:ja":"スリーエフ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/セイコーマート":{name:"セイコーマート",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1019751731402379264/OudcSFFt_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11314123",shop:"convenience"},addTags:{brand:"セイコーマート","brand:en":"Seicomart","brand:ja":"セイコーマート","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart","name:ja":"セイコーマート",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/セブン-イレブン":{name:"セブン-イレブン",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:ja":"セブン-イレブン","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven","name:ja":"セブン-イレブン","official_name:en":"Seven-Eleven",shop:"convenience"},countryCodes:["jp"],terms:["セブンイレブン(7-11)","セブンイレブン(seven-eleven)"],matchScore:2,suggestion:true},"shop/convenience/セーブオン":{name:"セーブオン",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11314868",shop:"convenience"},addTags:{brand:"セーブオン","brand:en":"Save On","brand:ja":"セーブオン","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On","name:ja":"セーブオン",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/デイリーヤマザキ":{name:"デイリーヤマザキ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q5209392",shop:"convenience"},addTags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:ja":"デイリーヤマザキ","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki","name:ja":"デイリーヤマザキ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ナチュラルローソン":{name:"ナチュラルローソン",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11323850",shop:"convenience"},addTags:{brand:"ナチュラルローソン","brand:en":"NATURAL LAWSON","brand:ja":"ナチュラルローソン","brand:wikidata":"Q11323850","brand:wikipedia":"ja:ナチュラルローソン",name:"ナチュラルローソン","name:en":"Natural Lawson","name:ja":"ナチュラルローソン",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ファミリーマート":{name:"ファミリーマート",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/familymart.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191685",shop:"convenience"},addTags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:ja":"ファミリーマート","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart","name:ja":"ファミリーマート",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ポプラ":{name:"ポプラ",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/826586791058644992/chXkmxnQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7229380",shop:"convenience"},addTags:{brand:"ポプラ","brand:en":"Poplar","brand:ja":"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar","name:ja":"ポプラ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ミニストップ":{name:"ミニストップ",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875897219508871168/OZ1swK9c_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1038929",shop:"convenience"},addTags:{brand:"ミニストップ","brand:en":"Ministop","brand:ja":"ミニストップ","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop","name:ja":"ミニストップ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ヤマザキショップ":{name:"ヤマザキショップ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11345131",shop:"convenience"},addTags:{brand:"ヤマザキショップ","brand:ja":"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop","name:ja":"ヤマザキショップ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ローソン":{name:"ローソン",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/lawson.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1557223",shop:"convenience"},addTags:{brand:"ローソン","brand:en":"LAWSON","brand:ja":"ローソン","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson","name:ja":"ローソン",shop:"convenience"},countryCodes:["jp"],terms:["ローソン"],matchScore:2,suggestion:true},"shop/convenience/ローソンストア100":{name:"ローソンストア100",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875652208217411585/B2Uc8iMy_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q11350960",shop:"convenience"},addTags:{brand:"ローソンストア100","brand:en":"LAWSON STORE 100","brand:ja":"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100","name:en":"Lawson Store 100","name:ja":"ローソンストア100",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ローソン・スリーエフ":{name:"ローソン・スリーエフ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q24866804",shop:"convenience"},addTags:{brand:"ローソン・スリーエフ","brand:en":"LAWSON・Three F","brand:ja":"ローソン・スリーエフ","brand:wikidata":"Q24866804","brand:wikipedia":"ja:ローソン・スリーエフ",name:"ローソン・スリーエフ","name:en":"Lawson・Three F","name:ja":"ローソン・スリーエフ",shop:"convenience"},countryCodes:["jp"],terms:["lawson+スリーエフ","ローソン・スリーエフ"],matchScore:2,suggestion:true},"shop/convenience/全家":{name:"全家",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/familymart.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191685",shop:"convenience"},addTags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"zh:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/convenience/全家便利商店":{name:"全家便利商店",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q10891564",shop:"convenience"},addTags:{brand:"全家便利商店","brand:en":"FamilyMart","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店","name:en":"FamilyMart",shop:"convenience"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/convenience/萊爾富":{name:"萊爾富",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11326216",shop:"convenience"},addTags:{brand:"萊爾富","brand:en":"Hi-Life","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富","name:en":"Hi-Life",shop:"convenience"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/convenience/세븐일레븐":{name:"세븐일레븐",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:ko":"세븐일레븐","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven","name:ko":"세븐일레븐",shop:"convenience"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/copyshop/FedEx Office":{name:"FedEx Office",icon:"fas-print",imageURL:"https://graph.facebook.com/FedExOffice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q474379",shop:"copyshop"},addTags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"},countryCodes:["us"],terms:["fedex office print and ship center"],matchScore:2,suggestion:true},"shop/copyshop/Minuteman Press":{name:"Minuteman Press",icon:"fas-print",imageURL:"https://graph.facebook.com/MinutemanPressFranchise/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64866081",shop:"copyshop"},addTags:{brand:"Minuteman Press","brand:wikidata":"Q64866081",name:"Minuteman Press",shop:"copyshop"},terms:[],matchScore:2,suggestion:true},"shop/copyshop/Sir Speedy":{name:"Sir Speedy",icon:"fas-print",imageURL:"https://graph.facebook.com/SirSpeedyCorporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17088225",shop:"copyshop"},addTags:{brand:"Sir Speedy","brand:wikidata":"Q17088225","brand:wikipedia":"en:Sir Speedy",name:"Sir Speedy",shop:"copyshop"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Aveda":{name:"Aveda",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/Aveda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4827965",shop:"cosmetics"},addTags:{brand:"Aveda","brand:wikidata":"Q4827965","brand:wikipedia":"en:Aveda",name:"Aveda",shop:"cosmetics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Bath & Body Works":{name:"Bath & Body Works",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/bathandbodyworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q810773",shop:"cosmetics"},addTags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Jurlique":{name:"Jurlique",icon:"temaki-lipstick",geometry:["point","area"],tags:{"brand:wikidata":"Q17008691",shop:"cosmetics"},addTags:{brand:"Jurlique","brand:wikidata":"Q17008691","brand:wikipedia":"en:Jurlique",name:"Jurlique",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/KIKO Milano":{name:"KIKO Milano",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/KikoMilanoGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3812045",shop:"cosmetics"},addTags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"},countryCodes:["be","de","es","fr","gb","nl"],terms:["kiko"],matchScore:2,suggestion:true},"shop/cosmetics/Kiehl's":{name:"Kiehl's",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/KiehlsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3196447",shop:"cosmetics"},addTags:{brand:"Kiehl's","brand:wikidata":"Q3196447","brand:wikipedia":"en:Kiehl's",name:"Kiehl's",shop:"cosmetics"},countryCodes:["ca","us"],terms:["kiehl's since 1851"],matchScore:2,suggestion:true},"shop/cosmetics/L'Occitane":{name:"L'Occitane",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/loccitaneusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1880676",shop:"cosmetics"},addTags:{brand:"L'Occitane","brand:wikidata":"Q1880676","brand:wikipedia":"en:L'Occitane en Provence",name:"L'Occitane",shop:"cosmetics"},terms:["l'occitane en provence"],matchScore:2,suggestion:true},"shop/cosmetics/Lush":{name:"Lush",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/LUSHJAPAN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1585448",shop:"cosmetics"},addTags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/MAC Cosmetics":{name:"MAC Cosmetics",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/MACcosmetics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2624442",shop:"cosmetics"},addTags:{brand:"MAC Cosmetics","brand:wikidata":"Q2624442","brand:wikipedia":"en:MAC Cosmetics",name:"MAC Cosmetics",shop:"cosmetics",short_name:"M·A·C"},countryCodes:["ca","de","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Nature Republic":{name:"Nature Republic",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/naturerepublic.kr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16935507",shop:"cosmetics"},addTags:{brand:"Nature Republic","brand:wikidata":"Q16935507","brand:wikipedia":"en:Nature Republic",name:"Nature Republic",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Nocibé":{name:"Nocibé",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/nocibe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3342592",shop:"cosmetics"},addTags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Origins":{name:"Origins",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/Origins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6643229",shop:"cosmetics"},addTags:{brand:"Origins","brand:wikidata":"Q6643229","brand:wikipedia":"en:Origins (cosmetics)",name:"Origins",shop:"cosmetics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Rituals":{name:"Rituals",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/RitualsCosmetics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62874140",shop:"cosmetics"},addTags:{brand:"Rituals","brand:wikidata":"Q62874140",name:"Rituals",shop:"cosmetics"},countryCodes:["be","ch","de","es","gb","nl","se","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Saje":{name:"Saje",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/SajeWellness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q44631749",shop:"cosmetics"},addTags:{brand:"Saje","brand:wikidata":"Q44631749","brand:wikipedia":"en:Saje Natural Wellness",name:"Saje",shop:"cosmetics"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Sephora":{name:"Sephora",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/sephoraturkiye/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2408041",shop:"cosmetics"},addTags:{brand:"Sephora","brand:wikidata":"Q2408041","brand:wikipedia":"en:Sephora",name:"Sephora",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/The Body Shop":{name:"The Body Shop",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/TheBodyShopUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q837851",shop:"cosmetics"},addTags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Ulta Beauty":{name:"Ulta Beauty",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/UltaBeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7880076",shop:"cosmetics"},addTags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"cosmetics"},countryCodes:["us"],terms:["ulta"],matchScore:2,suggestion:true},"shop/cosmetics/bareMinerals":{name:"bareMinerals",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/bareminerals/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66740659",shop:"cosmetics"},addTags:{brand:"bareMinerals","brand:wikidata":"Q66740659",name:"bareMinerals",shop:"cosmetics"},countryCodes:["au","ca","dk","gb","ie","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Л'Этуаль":{name:"Л'Этуаль",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/letoile.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18400706",shop:"cosmetics"},addTags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Магнит Косметик":{name:"Магнит Косметик",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/magnitretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"cosmetics"},addTags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Atwoods":{name:"Atwoods",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/Atwoods.Ranch.and.Home.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4818874",shop:"country_store"},addTags:{brand:"Atwoods","brand:wikidata":"Q4818874","brand:wikipedia":"en:Atwoods",name:"Atwoods",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Blain's Farm & Fleet":{name:"Blain's Farm & Fleet",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/BlainsFarmandFleet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4923906",shop:"country_store"},addTags:{brand:"Blain's Farm & Fleet","brand:wikidata":"Q4923906","brand:wikipedia":"en:Blain's Farm & Fleet",name:"Blain's Farm & Fleet",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Bomgaars":{name:"Bomgaars",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/BomgaarsSupply.Corporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22059070",shop:"country_store"},addTags:{brand:"Bomgaars","brand:wikidata":"Q22059070","brand:wikipedia":"en:Bomgaars",name:"Bomgaars",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Fleet Farm":{name:"Fleet Farm",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/fleetfarm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6859973",shop:"country_store"},addTags:{brand:"Fleet Farm","brand:wikidata":"Q6859973","brand:wikipedia":"en:Fleet Farm",name:"Fleet Farm",shop:"country_store"},countryCodes:["us"],terms:["mills fleet farm"],matchScore:2,suggestion:true},"shop/country_store/Grange Co-op":{name:"Grange Co-op",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/grangecoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5595639",shop:"country_store"},addTags:{brand:"Grange Co-op","brand:wikidata":"Q5595639","brand:wikipedia":"en:Grange Cooperative",name:"Grange Co-op",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Home of Economy":{name:"Home of Economy",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/Homeofeconomy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5889100",shop:"country_store"},addTags:{brand:"Home of Economy","brand:wikidata":"Q5889100","brand:wikipedia":"en:Home of Economy",name:"Home of Economy",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Norbys Farm Fleet":{name:"Norbys Farm Fleet",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/norbysfarmfleet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7050461",shop:"country_store"},addTags:{brand:"Norbys Farm Fleet","brand:wikidata":"Q7050461","brand:wikipedia":"en:Norby's Farm Fleet",name:"Norbys Farm Fleet",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Orscheln Farm & Home":{name:"Orscheln Farm & Home",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/orschelnfarmandhome/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22060331",shop:"country_store"},addTags:{brand:"Orscheln Farm & Home","brand:wikidata":"Q22060331","brand:wikipedia":"en:Orscheln Farm & Home",name:"Orscheln Farm & Home",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Peavey Mart":{name:"Peavey Mart",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/PeaveyMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7158483",shop:"country_store"},addTags:{brand:"Peavey Mart","brand:wikidata":"Q7158483","brand:wikipedia":"en:Peavey Mart",name:"Peavey Mart",shop:"country_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Rural King":{name:"Rural King",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/RuralKing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7380525",shop:"country_store"},addTags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/TSC Stores":{name:"TSC Stores",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/TSCStoresCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62720230",shop:"country_store"},addTags:{brand:"TSC Stores","brand:wikidata":"Q62720230",name:"TSC Stores",shop:"country_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Theisen's":{name:"Theisen's",icon:"fas-hat-cowboy-side",imageURL:"https://pbs.twimg.com/profile_images/743446346414227456/6V3KBxMe_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7777850",shop:"country_store"},addTags:{brand:"Theisen's","brand:wikidata":"Q7777850","brand:wikipedia":"en:Theisen's",name:"Theisen's",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Tractor Supply Company":{name:"Tractor Supply Company",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/TractorSupplyCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15109925",shop:"country_store"},addTags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"},countryCodes:["us"],terms:["tractor supply co"],matchScore:2,suggestion:true},"shop/country_store/Wynnstay":{name:"Wynnstay",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/WynnstayCountryStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63016351",shop:"country_store"},addTags:{brand:"Wynnstay","brand:wikidata":"Q63016351",name:"Wynnstay",shop:"country_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/craft/A.C. Moore":{name:"A.C. Moore",icon:"fas-cut",imageURL:"https://graph.facebook.com/acmoore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4647066",shop:"craft"},addTags:{brand:"A.C. Moore","brand:wikidata":"Q4647066","brand:wikipedia":"en:A.C. Moore",name:"A.C. Moore",shop:"craft"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/craft/Hobby Lobby":{name:"Hobby Lobby",icon:"fas-cut",imageURL:"https://graph.facebook.com/HobbyLobby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5874938",shop:"craft"},addTags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"},countryCodes:["in","us"],terms:[],matchScore:2,suggestion:true},"shop/craft/Hobbycraft":{name:"Hobbycraft",icon:"fas-cut",imageURL:"https://graph.facebook.com/HobbycraftUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16984508",shop:"craft"},addTags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/craft/Jo-Ann":{name:"Jo-Ann",icon:"fas-cut",imageURL:"https://graph.facebook.com/JoAnn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6203968",shop:"craft"},addTags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/craft/Michaels":{name:"Michaels",icon:"fas-cut",imageURL:"https://graph.facebook.com/Michaels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6835667",shop:"craft"},addTags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/craft/Woodcraft":{name:"Woodcraft",icon:"fas-cut",imageURL:"https://graph.facebook.com/WoodcraftWoodworking/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22026341",shop:"craft"},addTags:{brand:"Woodcraft","brand:wikidata":"Q22026341","brand:wikipedia":"en:Woodcraft Supply",name:"Woodcraft",shop:"craft"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/deli/ほっともっと":{name:"ほっともっと",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/hottomotto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10850949",shop:"deli"},addTags:{brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",shop:"deli"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/deli/京樽":{name:"京樽",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/kyotaru.sushi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11374503",shop:"deli"},addTags:{brand:"京樽","brand:en":"Kyotaru","brand:ja":"京樽","brand:wikidata":"Q11374503","brand:wikipedia":"ja:京樽",name:"京樽","name:en":"Kyotaru","name:ja":"京樽",shop:"deli"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Barneys New York":{name:"Barneys New York",icon:"maki-shop",imageURL:"https://graph.facebook.com/BarneysNY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q59465",shop:"department_store"},addTags:{brand:"Barneys New York","brand:wikidata":"Q59465","brand:wikipedia":"en:Barneys New York",name:"Barneys New York",shop:"department_store"},countryCodes:["us"],terms:["barneys"],matchScore:2,suggestion:true},"shop/department_store/Beales":{name:"Beales",icon:"maki-shop",imageURL:"https://graph.facebook.com/LoveBeales/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4876141",shop:"department_store"},addTags:{brand:"Beales","brand:wikidata":"Q4876141","brand:wikipedia":"en:Beales (department store)",name:"Beales",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bealls (Florida-based)":{name:"Bealls (Florida-based)",icon:"maki-shop",imageURL:"https://graph.facebook.com/BeallsCorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4876153",shop:"department_store"},addTags:{brand:"Bealls","brand:wikidata":"Q4876153","brand:wikipedia":"en:Bealls (Florida)",name:"Bealls",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bealls (Texas-based)":{name:"Bealls (Texas-based)",icon:"maki-shop",imageURL:"https://graph.facebook.com/Beallstx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4876156",shop:"department_store"},addTags:{brand:"Bealls","brand:wikidata":"Q4876156","brand:wikipedia":"en:Bealls (Texas)",name:"Bealls",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Belk":{name:"Belk",icon:"maki-shop",imageURL:"https://graph.facebook.com/Belk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q127428",shop:"department_store"},addTags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bi-Mart":{name:"Bi-Mart",icon:"maki-shop",imageURL:"https://graph.facebook.com/BiMart.Membership.Discount.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4902331",shop:"department_store"},addTags:{brand:"Bi-Mart","brand:wikidata":"Q4902331","brand:wikipedia":"en:Bi-Mart",name:"Bi-Mart",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Big Lots":{name:"Big Lots",icon:"maki-shop",imageURL:"https://graph.facebook.com/biglots/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4905973",shop:"department_store"},addTags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Big W":{name:"Big W",icon:"maki-shop",imageURL:"https://graph.facebook.com/BIGWaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906646",shop:"department_store"},addTags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bloomingdale's":{name:"Bloomingdale's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Bloomingdales/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q283383",shop:"department_store"},addTags:{brand:"Bloomingdale's","brand:wikidata":"Q283383","brand:wikipedia":"en:Bloomingdale's",name:"Bloomingdale's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Boscov's":{name:"Boscov's",icon:"maki-shop",imageURL:"https://graph.facebook.com/boscovs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4947190",shop:"department_store"},addTags:{brand:"Boscov's","brand:wikidata":"Q4947190","brand:wikipedia":"en:Boscov's",name:"Boscov's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Boyes":{name:"Boyes",icon:"maki-shop",imageURL:"https://graph.facebook.com/boyesstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7958471",shop:"department_store"},addTags:{brand:"Boyes","brand:wikidata":"Q7958471","brand:wikipedia":"en:Boyes (retailer)",name:"Boyes",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/BrightHouse":{name:"BrightHouse",icon:"maki-shop",imageURL:"https://graph.facebook.com/BrightHouseUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4967357",shop:"department_store"},addTags:{brand:"BrightHouse","brand:wikidata":"Q4967357","brand:wikipedia":"en:BrightHouse (retailer)",name:"BrightHouse",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Canadian Tire":{name:"Canadian Tire",icon:"maki-shop",imageURL:"https://graph.facebook.com/Canadiantire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032400",shop:"department_store"},addTags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Casas Bahia":{name:"Casas Bahia",icon:"maki-shop",imageURL:"https://graph.facebook.com/CasasBahia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5048048",shop:"department_store"},addTags:{brand:"Casas Bahia","brand:wikidata":"Q5048048","brand:wikipedia":"en:Casas Bahia",name:"Casas Bahia",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Century 21":{name:"Century 21",icon:"maki-shop",imageURL:"https://graph.facebook.com/century21stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5063125",shop:"department_store"},addTags:{brand:"Century 21","brand:wikidata":"Q5063125","brand:wikipedia":"en:Century 21 (department store)",name:"Century 21",shop:"department_store"},countryCodes:["us"],terms:["c21"],matchScore:2,suggestion:true},"shop/department_store/Coppel":{name:"Coppel",icon:"maki-shop",imageURL:"https://graph.facebook.com/tiendascoppel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2497795",shop:"department_store"},addTags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/David Jones":{name:"David Jones",icon:"maki-shop",imageURL:"https://graph.facebook.com/davidjonesstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5235753",shop:"department_store"},addTags:{brand:"David Jones","brand:wikidata":"Q5235753","brand:wikipedia":"en:David Jones Limited",name:"David Jones",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Debenhams":{name:"Debenhams",icon:"maki-shop",imageURL:"https://graph.facebook.com/Debenhams/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1181484",shop:"department_store"},addTags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Dillard's":{name:"Dillard's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Dillards/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q844805",shop:"department_store"},addTags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/El Corte Inglés":{name:"El Corte Inglés",icon:"maki-shop",imageURL:"https://graph.facebook.com/elcorteingles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q623133",shop:"department_store"},addTags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"},countryCodes:["es"],terms:["corte ingles"],matchScore:2,suggestion:true},"shop/department_store/Falabella":{name:"Falabella",icon:"maki-shop",imageURL:"https://graph.facebook.com/falabellachile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5135229",shop:"department_store"},addTags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"},terms:["saga falabella"],matchScore:2,suggestion:true},"shop/department_store/Galeria Kaufhof":{name:"Galeria Kaufhof",icon:"maki-shop",imageURL:"https://graph.facebook.com/GaleriaKarstadtKaufhof/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q322598",shop:"department_store"},addTags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Giant Tiger":{name:"Giant Tiger",icon:"maki-shop",imageURL:"https://graph.facebook.com/GiantTiger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558429",shop:"department_store"},addTags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Goody's":{name:"Goody's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Goodys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5583733",shop:"department_store"},addTags:{brand:"Goody's","brand:wikidata":"Q5583733","brand:wikipedia":"en:Goody's (store)",name:"Goody's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Gordmans":{name:"Gordmans",icon:"maki-shop",imageURL:"https://graph.facebook.com/gordmans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5584725",shop:"department_store"},addTags:{brand:"Gordmans","brand:wikidata":"Q5584725","brand:wikipedia":"en:Gordmans",name:"Gordmans",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/HEMA":{name:"HEMA",icon:"maki-shop",imageURL:"https://graph.facebook.com/hema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q903805",shop:"department_store"},addTags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"},countryCodes:["ae","at","be","de","es","fr","gb","lu","nl","qa"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Harvey Norman":{name:"Harvey Norman",icon:"maki-shop",imageURL:"https://graph.facebook.com/HarveyNormanAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4040441",shop:"department_store"},addTags:{brand:"Harvey Norman","brand:wikidata":"Q4040441","brand:wikipedia":"en:Harvey Norman",name:"Harvey Norman",shop:"department_store"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Havan":{name:"Havan",icon:"maki-shop",imageURL:"https://graph.facebook.com/Havanoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10294065",shop:"department_store"},addTags:{brand:"Havan","brand:wikidata":"Q10294065","brand:wikipedia":"pt:Havan",name:"Havan",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/House of Fraser":{name:"House of Fraser",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHouseOfFraser.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5928422",shop:"department_store"},addTags:{brand:"House of Fraser","brand:wikidata":"Q5928422","brand:wikipedia":"en:House of Fraser",name:"House of Fraser",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Hudson's Bay":{name:"Hudson's Bay",icon:"maki-shop",imageURL:"https://graph.facebook.com/hudsonsbay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q641129",shop:"department_store"},addTags:{alt_name:"The Bay",brand:"Hudson's Bay","brand:wikidata":"Q641129","brand:wikipedia":"en:Hudson's Bay (retailer)",name:"Hudson's Bay",shop:"department_store"},countryCodes:["ca","nl"],terms:[],matchScore:2,suggestion:true},"shop/department_store/JCPenney":{name:"JCPenney",icon:"maki-shop",imageURL:"https://graph.facebook.com/jcp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q920037",shop:"department_store"},addTags:{brand:"JCPenney","brand:wikidata":"Q920037","brand:wikipedia":"en:J. C. Penney",name:"JCPenney",official_name:"J.C. Penney Company",shop:"department_store"},countryCodes:["us"],terms:["jcpenny"],matchScore:2,suggestion:true},"shop/department_store/John Lewis":{name:"John Lewis",icon:"maki-shop",imageURL:"https://graph.facebook.com/JohnLewisandPartners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1918981",shop:"department_store"},addTags:{brand:"John Lewis","brand:wikidata":"Q1918981","brand:wikipedia":"en:John Lewis & Partners",name:"John Lewis",official_name:"John Lewis & Partners",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Karstadt":{name:"Karstadt",icon:"maki-shop",imageURL:"https://graph.facebook.com/karstadt1881/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q182910",shop:"department_store"},addTags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Kmart (Australia)":{name:"Kmart (Australia)",icon:"maki-shop",imageURL:"https://graph.facebook.com/KmartAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6421682",shop:"department_store"},addTags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Kmart (USA)":{name:"Kmart (USA)",icon:"maki-shop",imageURL:"https://graph.facebook.com/kmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1753080",shop:"department_store"},addTags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"},countryCodes:["us"],terms:["k-mart"],matchScore:2,suggestion:true},"shop/department_store/Kohl's":{name:"Kohl's",icon:"maki-shop",imageURL:"https://graph.facebook.com/kohls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q967265",shop:"department_store"},addTags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lojas Americanas":{name:"Lojas Americanas",icon:"maki-shop",imageURL:"https://graph.facebook.com/lojasamericanas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3064093",shop:"department_store"},addTags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lord & Taylor":{name:"Lord & Taylor",icon:"maki-shop",imageURL:"https://graph.facebook.com/lordandtaylor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2749082",shop:"department_store"},addTags:{brand:"Lord & Taylor","brand:wikidata":"Q2749082","brand:wikipedia":"en:Lord & Taylor",name:"Lord & Taylor",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lotte Department Store":{name:"Lotte Department Store",icon:"maki-shop",imageURL:"https://graph.facebook.com/LOTTEshopping/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489905",shop:"department_store"},addTags:{brand:"Lotte Department Store","brand:wikidata":"Q489905","brand:wikipedia":"en:Lotte Department Store",name:"Lotte Department Store",shop:"department_store"},terms:["lotte"],matchScore:2,suggestion:true},"shop/department_store/M&S Outlet":{name:"M&S Outlet",icon:"maki-shop",imageURL:"https://graph.facebook.com/MarksandSpencer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"department_store"},addTags:{brand:"M&S Outlet","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Outlet",shop:"department_store"},terms:["marks & spencer outlet"],matchScore:2,suggestion:true},"shop/department_store/Macy's":{name:"Macy's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Macys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q629269",shop:"department_store"},addTags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Manor":{name:"Manor",icon:"maki-shop",imageURL:"https://graph.facebook.com/Manor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q382686",shop:"department_store"},addTags:{brand:"Manor","brand:wikidata":"Q382686","brand:wikipedia":"en:Manor (department store)",name:"Manor",shop:"department_store"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Marks & Spencer":{name:"Marks & Spencer",icon:"maki-shop",imageURL:"https://graph.facebook.com/MarksandSpencer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"department_store"},addTags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"},countryCodes:["gb","gr","ie"],terms:["m and s"],matchScore:2,suggestion:true},"shop/department_store/Marshalls":{name:"Marshalls",icon:"maki-shop",imageURL:"https://graph.facebook.com/Marshalls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15903261",shop:"department_store"},addTags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Muji":{name:"Muji",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/2779266335/6fbe4ceb685984dbe3a149bd94043e80_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q708789",shop:"department_store"},addTags:{brand:"Muji","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"en:Muji",name:"Muji","name:en":"Muji","name:ja":"無印良品",shop:"department_store"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Myer":{name:"Myer",icon:"maki-shop",imageURL:"https://graph.facebook.com/myer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1110323",shop:"department_store"},addTags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Neiman Marcus":{name:"Neiman Marcus",icon:"maki-shop",imageURL:"https://graph.facebook.com/neimanmarcus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q743497",shop:"department_store"},addTags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Nordstrom":{name:"Nordstrom",icon:"maki-shop",imageURL:"https://graph.facebook.com/Nordstrom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q174310",shop:"department_store"},addTags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Oechsle":{name:"Oechsle",icon:"maki-shop",imageURL:"https://graph.facebook.com/tiendasoechsle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6049096",shop:"department_store"},addTags:{brand:"Oechsle","brand:wikidata":"Q6049096","brand:wikipedia":"es:Oechsle",name:"Oechsle",shop:"department_store"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"shop/department_store/París":{name:"París",icon:"maki-shop",imageURL:"https://graph.facebook.com/TiendasParis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20812805",shop:"department_store"},addTags:{brand:"París","brand:wikidata":"Q20812805","brand:wikipedia":"en:París (retail store)",name:"París",shop:"department_store"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Printemps":{name:"Printemps",icon:"maki-shop",imageURL:"https://graph.facebook.com/Printemps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1535260",shop:"department_store"},addTags:{brand:"Printemps","brand:wikidata":"Q1535260","brand:wikipedia":"fr:Printemps (grands magasins)",name:"Printemps",shop:"department_store"},countryCodes:["ad","cn","fr","jp","sa"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Ripley":{name:"Ripley",icon:"maki-shop",imageURL:"https://graph.facebook.com/ripleychile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3433040",shop:"department_store"},addTags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Ross":{name:"Ross",icon:"maki-shop",imageURL:"https://graph.facebook.com/RossDressforLess/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3442791",shop:"department_store"},addTags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",official_name:"Ross Dress for Less",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Saks Fifth Avenue":{name:"Saks Fifth Avenue",icon:"maki-shop",imageURL:"https://graph.facebook.com/saks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2723882",shop:"department_store"},addTags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Saks Off 5th":{name:"Saks Off 5th",icon:"maki-shop",imageURL:"https://graph.facebook.com/saks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2723882",shop:"department_store"},addTags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Sears":{name:"Sears",icon:"maki-shop",imageURL:"https://graph.facebook.com/sears/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6499202",shop:"department_store"},addTags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Sears Hometown":{name:"Sears Hometown",icon:"maki-shop",imageURL:"https://graph.facebook.com/SearsHometownStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69926963",shop:"department_store"},addTags:{brand:"Sears Hometown","brand:wikidata":"Q69926963",name:"Sears Hometown",shop:"department_store"},countryCodes:["us"],terms:["sears hometown store","sears hometown stores"],matchScore:2,suggestion:true},"shop/department_store/Sears Outlet":{name:"Sears Outlet",icon:"maki-shop",imageURL:"https://graph.facebook.com/Sears.Outlet.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20080412",shop:"department_store"},addTags:{brand:"Sears Outlet","brand:wikidata":"Q20080412",name:"Sears Outlet",shop:"department_store"},countryCodes:["us"],terms:["sears outlet store","sears outlet stores"],matchScore:2,suggestion:true},"shop/department_store/Shopko":{name:"Shopko",icon:"maki-shop",imageURL:"https://graph.facebook.com/ShopkoOptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7501155",shop:"department_store"},addTags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Shoppers Stop":{name:"Shoppers Stop",icon:"maki-shop",imageURL:"https://graph.facebook.com/ShopkoOptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7501155",shop:"department_store"},addTags:{brand:"Shoppers Stop","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shoppers Stop",name:"Shoppers Stop",shop:"department_store"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Stein Mart":{name:"Stein Mart",icon:"maki-shop",imageURL:"https://graph.facebook.com/SteinMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7606770",shop:"department_store"},addTags:{brand:"Stein Mart","brand:wikidata":"Q7606770","brand:wikipedia":"en:Stein Mart",name:"Stein Mart",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Stockmann":{name:"Stockmann",icon:"maki-shop",imageURL:"https://graph.facebook.com/StockmannCOM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1543093",shop:"department_store"},addTags:{brand:"Stockmann","brand:wikidata":"Q1543093","brand:wikipedia":"fi:Stockmann",name:"Stockmann",shop:"department_store"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/department_store/TJ Maxx":{name:"TJ Maxx",icon:"maki-shop",imageURL:"https://graph.facebook.com/tjmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10860683",shop:"department_store"},addTags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/TK Maxx":{name:"TK Maxx",icon:"maki-shop",imageURL:"https://graph.facebook.com/tkmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23823668",shop:"department_store"},addTags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Target (Australia)":{name:"Target (Australia)",icon:"maki-shop",imageURL:"https://graph.facebook.com/targetaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7685854",shop:"department_store"},addTags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Target (USA)":{name:"Target (USA)",icon:"maki-shop",imageURL:"https://graph.facebook.com/target/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1046951",shop:"department_store"},addTags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"},countryCodes:["us"],terms:["super target"],matchScore:2,suggestion:true},"shop/department_store/The Warehouse":{name:"The Warehouse",icon:"maki-shop",imageURL:"https://graph.facebook.com/TheWarehouseNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3566291",shop:"department_store"},addTags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Walmart":{name:"Walmart",icon:"maki-shop",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"department_store"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Woolworth":{name:"Woolworth",icon:"maki-shop",imageURL:"https://graph.facebook.com/WoolworthDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q183538",shop:"department_store"},addTags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Åhléns":{name:"Åhléns",icon:"maki-shop",imageURL:"https://graph.facebook.com/ahlens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q270851",shop:"department_store"},addTags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/department_store/東急ハンズ":{name:"東急ハンズ",icon:"maki-shop",imageURL:"https://graph.facebook.com/TokyuHandsInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q859212",shop:"department_store"},addTags:{brand:"東急ハンズ","brand:en":"Tokyu Hands","brand:ja":"東急ハンズ","brand:wikidata":"Q859212","brand:wikipedia":"ja:東急ハンズ",name:"東急ハンズ","name:en":"Tokyu Hands","name:ja":"東急ハンズ",shop:"department_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/department_store/無印良品":{name:"無印良品",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/2779266335/6fbe4ceb685984dbe3a149bd94043e80_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q708789",shop:"department_store"},addTags:{brand:"無印良品","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"ja:無印良品",name:"無印良品","name:en":"Muji","name:ja":"無印良品",shop:"department_store"},countryCodes:["jp","tw"],terms:[],matchScore:2,suggestion:true},"shop/department_store/롯데백화점":{name:"롯데백화점",icon:"maki-shop",imageURL:"https://graph.facebook.com/LOTTEshopping/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489905",shop:"department_store"},addTags:{brand:"롯데백화점","brand:ko":"롯데백화점","brand:wikidata":"Q489905","brand:wikipedia":"ko:롯데백화점",name:"롯데백화점","name:en":"Lotte Department Store","name:ko":"롯데백화점",shop:"department_store"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Ace Hardware":{name:"Ace Hardware",icon:"temaki-tools",imageURL:"https://graph.facebook.com/acehardware/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4672981",shop:"doityourself"},addTags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/B&Q":{name:"B&Q",icon:"temaki-tools",imageURL:"https://graph.facebook.com/bandq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q707602",shop:"doityourself"},addTags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bauhaus":{name:"Bauhaus",icon:"temaki-tools",geometry:["point","area"],tags:{"brand:wikidata":"Q672043",shop:"doityourself"},addTags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"},countryCodes:["at","bg","ch","cz","de","dk","ee","es","fi","hr","hu","is","lu","nl","no","se","si","sk","tr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Biltema":{name:"Biltema",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BiltemaSverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3355552",shop:"doityourself"},addTags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"},countryCodes:["dk","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Brico":{name:"Brico",icon:"temaki-tools",imageURL:"https://graph.facebook.com/brico.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2510786",shop:"doityourself"},addTags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"},countryCodes:["be","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Brico Dépôt":{name:"Brico Dépôt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricoDepotFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2889702",shop:"doityourself"},addTags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"fr:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"},countryCodes:["es","fr","pt","ro"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricoman":{name:"Bricoman",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricomanFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925142",shop:"doityourself"},addTags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"},countryCodes:["fr","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricomarché":{name:"Bricomarché",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Bricomarche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925147",shop:"doityourself"},addTags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"},countryCodes:["fr","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricorama":{name:"Bricorama",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricoramaFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925146",shop:"doityourself"},addTags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"},countryCodes:["es","fr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bunnings Warehouse":{name:"Bunnings Warehouse",icon:"temaki-tools",imageURL:"https://pbs.twimg.com/profile_images/1405732718/hammer_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4997829",shop:"doityourself"},addTags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Castorama":{name:"Castorama",icon:"temaki-tools",imageURL:"https://graph.facebook.com/castorama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q966971",shop:"doityourself"},addTags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"},countryCodes:["fr","pl","ru"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Clas Ohlson":{name:"Clas Ohlson",icon:"temaki-tools",imageURL:"https://graph.facebook.com/clasohlsonsverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3356220",shop:"doityourself"},addTags:{brand:"Clas Ohlson","brand:wikidata":"Q3356220","brand:wikipedia":"en:Clas Ohlson",name:"Clas Ohlson",shop:"doityourself"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Easy":{name:"Easy",icon:"temaki-tools",imageURL:"https://graph.facebook.com/EasyHomecenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5331091",shop:"doityourself"},addTags:{brand:"Easy","brand:wikidata":"Q5331091","brand:wikipedia":"en:Easy (store)",name:"Easy",shop:"doityourself"},countryCodes:["ar","cl","co"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Gamma":{name:"Gamma",icon:"temaki-tools",imageURL:"https://graph.facebook.com/gamma.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2294120",shop:"doityourself"},addTags:{brand:"Gamma","brand:wikidata":"Q2294120","brand:wikipedia":"en:Gamma (store)",name:"Gamma",shop:"doityourself"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Globus Baumarkt":{name:"Globus Baumarkt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Globus.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457503",shop:"doityourself"},addTags:{brand:"Globus Baumarkt","brand:wikidata":"Q457503","brand:wikipedia":"de:Globus Holding",name:"Globus Baumarkt",shop:"doityourself"},countryCodes:["de","lu"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hagebaumarkt":{name:"Hagebaumarkt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hagebau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1568279",shop:"doityourself"},addTags:{brand:"Hagebaumarkt","brand:wikidata":"Q1568279","brand:wikipedia":"de:Hagebau",name:"Hagebaumarkt",shop:"doityourself"},countryCodes:["at","be","ch","de","es","fr","lu","nl"],terms:["hagebau"],matchScore:2,suggestion:true},"shop/doityourself/Hammer":{name:"Hammer",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hammerzuhause/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q52159668",shop:"doityourself"},addTags:{brand:"Hammer","brand:wikidata":"Q52159668","brand:wikipedia":"de:Hammer (Fachmarktkette)",name:"Hammer",shop:"doityourself"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hellweg":{name:"Hellweg",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Hellweg.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1603084",shop:"doityourself"},addTags:{brand:"Hellweg","brand:wikidata":"Q1603084","brand:wikipedia":"de:Hellweg (Baumarkt)",name:"Hellweg",shop:"doityourself"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Home Building Centre (Canada)":{name:"Home Building Centre (Canada)",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homehardwarestores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3139611",shop:"doityourself"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Building Centre",shop:"doityourself"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Home Hardware Building Centre (Canada)":{name:"Home Hardware Building Centre (Canada)",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homehardwarestores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3139611",shop:"doityourself"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware Building Centre",shop:"doityourself"},countryCodes:["ca"],terms:["home hardware"],matchScore:2,suggestion:true},"shop/doityourself/Home Timber & Hardware (Australia)":{name:"Home Timber & Hardware (Australia)",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hometimberandhardware/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17006984",shop:"doityourself"},addTags:{alt_name:"Home Hardware",brand:"Home Timber & Hardware","brand:wikidata":"Q17006984","brand:wikipedia":"en:Home Timber & Hardware",name:"Home Timber & Hardware",shop:"doityourself",short_name:"Home"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Homebase":{name:"Homebase",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homebase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9293447",shop:"doityourself"},addTags:{brand:"Homebase","brand:wikidata":"Q9293447","brand:wikipedia":"en:Homebase",name:"Homebase",shop:"doityourself"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hornbach":{name:"Hornbach",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hornbach.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q685926",shop:"doityourself"},addTags:{brand:"Hornbach","brand:wikidata":"Q685926","brand:wikipedia":"en:Hornbach (retailer)",name:"Hornbach",shop:"doityourself"},countryCodes:["at","ch","cz","de","lu","nl","ro","se","sk"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Hubo":{name:"Hubo",icon:"temaki-tools",imageURL:"https://graph.facebook.com/hubo.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3142153",shop:"doityourself"},addTags:{brand:"Hubo","brand:wikidata":"Q3142153","brand:wikipedia":"en:Hubo Belgium",name:"Hubo",shop:"doityourself"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Jewson":{name:"Jewson",icon:"temaki-tools",imageURL:"https://graph.facebook.com/jewsonuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6190226",shop:"doityourself"},addTags:{brand:"Jewson","brand:wikidata":"Q6190226","brand:wikipedia":"en:Jewson",name:"Jewson",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Karwei":{name:"Karwei",icon:"temaki-tools",imageURL:"https://graph.facebook.com/karwei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2097480",shop:"doityourself"},addTags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Leroy Merlin":{name:"Leroy Merlin",icon:"temaki-tools",imageURL:"https://graph.facebook.com/leroymerlin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q889624",shop:"doityourself"},addTags:{brand:"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Leroy Merlin",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Lowe's":{name:"Lowe's",icon:"temaki-tools",imageURL:"https://graph.facebook.com/lowes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1373493",shop:"doityourself"},addTags:{brand:"Lowe's","brand:wikidata":"Q1373493","brand:wikipedia":"en:Lowe's",name:"Lowe's",shop:"doityourself"},countryCodes:["ca","mx","us"],terms:["lowes home improvement"],matchScore:2,suggestion:true},"shop/doityourself/Menards":{name:"Menards",icon:"temaki-tools",imageURL:"https://graph.facebook.com/MenardsHomeImprovement/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639897",shop:"doityourself"},addTags:{brand:"Menards","brand:wikidata":"Q1639897","brand:wikipedia":"en:Menards",name:"Menards",shop:"doityourself"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Mitre 10":{name:"Mitre 10",icon:"temaki-tools",imageURL:"https://graph.facebook.com/224109081130110/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6882393",shop:"doityourself"},addTags:{brand:"Mitre 10","brand:wikidata":"Q6882393","brand:wikipedia":"en:Mitre 10",name:"Mitre 10",shop:"doityourself"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Mr.Bricolage":{name:"Mr.Bricolage",icon:"temaki-tools",imageURL:"https://graph.facebook.com/mr.bricolagefrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3141657",shop:"doityourself"},addTags:{brand:"Mr.Bricolage","brand:wikidata":"Q3141657","brand:wikipedia":"fr:Mr Bricolage",name:"Mr.Bricolage",shop:"doityourself"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/OBI":{name:"OBI",icon:"temaki-tools",imageURL:"https://graph.facebook.com/obirussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q300518",shop:"doityourself"},addTags:{brand:"OBI","brand:wikidata":"Q300518","brand:wikipedia":"en:Obi (store)",name:"OBI",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Praktiker":{name:"Praktiker",icon:"temaki-tools",imageURL:"https://graph.facebook.com/984505914908905/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q680214",shop:"doityourself"},addTags:{brand:"Praktiker","brand:wikidata":"Q680214","brand:wikipedia":"en:Praktiker",name:"Praktiker",shop:"doityourself"},countryCodes:["bg","gr","hu","ro"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Praxis":{name:"Praxis",icon:"temaki-tools",imageURL:"https://graph.facebook.com/praxis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2741995",shop:"doityourself"},addTags:{brand:"Praxis","brand:wikidata":"Q2741995","brand:wikipedia":"nl:Praxis (winkel)",name:"Praxis",shop:"doityourself"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Promart":{name:"Promart",icon:"temaki-tools",imageURL:"https://graph.facebook.com/PROMARTHomecenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17626095",shop:"doityourself"},addTags:{brand:"Promart","brand:wikidata":"Q17626095","brand:wikipedia":"en:Promart",name:"Promart",shop:"doityourself"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Rona":{name:"Rona",icon:"temaki-tools",imageURL:"https://graph.facebook.com/ronainc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3415283",shop:"doityourself"},addTags:{brand:"Rona","brand:wikidata":"Q3415283","brand:wikipedia":"en:Rona, Inc.",name:"Rona",shop:"doityourself"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Screwfix":{name:"Screwfix",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Screwfix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7439115",shop:"doityourself"},addTags:{brand:"Screwfix","brand:wikidata":"Q7439115","brand:wikipedia":"en:Screwfix",name:"Screwfix",shop:"doityourself"},countryCodes:["de","gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Sodimac":{name:"Sodimac",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homecenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7553274",shop:"doityourself"},addTags:{brand:"Sodimac","brand:wikidata":"Q7553274","brand:wikipedia":"es:Sodimac",name:"Sodimac",shop:"doityourself"},countryCodes:["ar","br","cl","co","mx","pe","uy"],terms:["sodimac constructor"],matchScore:2,suggestion:true},"shop/doityourself/Tekzen":{name:"Tekzen",icon:"temaki-tools",imageURL:"https://graph.facebook.com/tekzenturkiye/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25475379",shop:"doityourself"},addTags:{brand:"Tekzen","brand:wikidata":"Q25475379","brand:wikipedia":"tr:Tekzen",name:"Tekzen",shop:"doityourself"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/The Home Depot":{name:"The Home Depot",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homedepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q864407",shop:"doityourself"},addTags:{alt_name:"Home Depot",brand:"The Home Depot","brand:wikidata":"Q864407","brand:wikipedia":"en:The Home Depot",name:"The Home Depot",shop:"doityourself"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Toolstation":{name:"Toolstation",icon:"temaki-tools",imageURL:"https://pbs.twimg.com/profile_images/761131960215502849/EaiesgRv_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7824103",shop:"doityourself"},addTags:{brand:"Toolstation","brand:wikidata":"Q7824103","brand:wikipedia":"en:Toolstation",name:"Toolstation",shop:"doityourself"},countryCodes:["fr","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Toom Baumarkt":{name:"Toom Baumarkt",icon:"temaki-tools",imageURL:"https://graph.facebook.com/toom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2442970",shop:"doityourself"},addTags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"},countryCodes:["de"],terms:["toom"],matchScore:2,suggestion:true},"shop/doityourself/Travis Perkins":{name:"Travis Perkins",icon:"temaki-tools",imageURL:"https://graph.facebook.com/TravisPerkinsPlcUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2450664",shop:"doityourself"},addTags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Weldom":{name:"Weldom",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Weldom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16683226",shop:"doityourself"},addTags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Wickes":{name:"Wickes",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Wickes.co.uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7998350",shop:"doityourself"},addTags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/jem & fix":{name:"jem & fix",icon:"temaki-tools",imageURL:"https://graph.facebook.com/jemogfix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12319200",shop:"doityourself"},addTags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:Jem & fix",name:"jem & fix",shop:"doityourself"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Леруа Мерлен":{name:"Леруа Мерлен",icon:"temaki-tools",imageURL:"https://graph.facebook.com/leroymerlin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q889624",shop:"doityourself"},addTags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/カインズホーム":{name:"カインズホーム",icon:"temaki-tools",imageURL:"https://graph.facebook.com/cainzfun/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11293852",shop:"doityourself"},addTags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:ja":"カインズホーム","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home","name:ja":"カインズホーム",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/ケーヨー":{name:"ケーヨー",icon:"temaki-tools",geometry:["point","area"],tags:{"brand:wikidata":"Q11301462",shop:"doityourself"},addTags:{brand:"ケーヨー","brand:en":"Keiyo","brand:ja":"ケーヨー","brand:wikidata":"Q11301462","brand:wikipedia":"ja:ケーヨー",name:"ケーヨー","name:en":"Keiyo","name:ja":"ケーヨー",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/コメリ":{name:"コメリ",icon:"temaki-tools",imageURL:"https://graph.facebook.com/saiengardenclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302690",shop:"doityourself"},addTags:{brand:"コメリ","brand:en":"Komeri","brand:ja":"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri","name:ja":"コメリ",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/コーナン":{name:"コーナン",icon:"temaki-tools",imageURL:"https://graph.facebook.com/kohnan.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11303403",shop:"doityourself"},addTags:{brand:"コーナン","brand:en":"Kohnan","brand:ja":"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan","name:ja":"コーナン",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/ナフコ":{name:"ナフコ",icon:"temaki-tools",geometry:["point","area"],tags:{"brand:wikidata":"Q11323981",shop:"doityourself"},addTags:{brand:"ナフコ","brand:en":"Nafco","brand:ja":"ナフコ","brand:wikidata":"Q11323981","brand:wikipedia":"ja:ナフコ (ホームセンター)",name:"ナフコ","name:en":"Nafco","name:ja":"ナフコ",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/5àsec":{name:"5àsec",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/5aSecBrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2817899",shop:"dry_cleaning"},addTags:{brand:"5àsec","brand:wikidata":"Q2817899","brand:wikipedia":"fr:5àsec",name:"5àsec",shop:"dry_cleaning"},terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/Johnsons":{name:"Johnsons",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/johnsoncleaners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6268527",shop:"dry_cleaning"},addTags:{brand:"Johnsons","brand:wikidata":"Q6268527","brand:wikipedia":"en:Johnsons Cleaners UK",name:"Johnsons",shop:"dry_cleaning"},countryCodes:["gb"],terms:["johnson","johnsons cleaners"],matchScore:2,suggestion:true},"shop/dry_cleaning/Martinizing Dry Cleaning":{name:"Martinizing Dry Cleaning",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/MartinizingDryClean/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6777169",shop:"dry_cleaning"},addTags:{brand:"Martinizing Dry Cleaning","brand:wikidata":"Q6777169","brand:wikipedia":"en:Martinizing Dry Cleaning",name:"Martinizing Dry Cleaning",shop:"dry_cleaning"},terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/Tide Cleaners":{name:"Tide Cleaners",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/tidedrycleaners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66048841",shop:"dry_cleaning"},addTags:{brand:"Tide Cleaners","brand:wikidata":"Q66048841",name:"Tide Cleaners",shop:"dry_cleaning"},countryCodes:["us"],terms:["tide","tide dry cleaners"],matchScore:2,suggestion:true},"shop/dry_cleaning/Диана":{name:"Диана",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/diana.dryclean/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62105088",shop:"dry_cleaning"},addTags:{brand:"Диана","brand:wikidata":"Q62105088",name:"Диана",shop:"dry_cleaning"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/タカケンサンシャイン":{name:"タカケンサンシャイン",icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{"brand:wikidata":"Q11315914",shop:"dry_cleaning"},addTags:{brand:"タカケンサンシャイン","brand:en":"Takaken Sunshine","brand:ja":"タカケンサンシャイン","brand:wikidata":"Q11315914","brand:wikipedia":"ja:タカケンサンシャイン",name:"タカケンサンシャイン","name:en":"Takaken Sunshine","name:ja":"タカケンサンシャイン",shop:"dry_cleaning"},countryCodes:["jp"],terms:["タカケンクリーング"],matchScore:2,suggestion:true},"shop/dry_cleaning/ホワイト急便":{name:"ホワイト急便",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/974471789387794/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11505557",shop:"dry_cleaning"},addTags:{brand:"ホワイト急便","brand:en":"White Kyuubin","brand:ja":"ホワイト急便","brand:wikidata":"Q11505557","brand:wikipedia":"ja:日本さわやかグループ",name:"ホワイト急便","name:en":"White Kyuubin","name:ja":"ホワイト急便",shop:"dry_cleaning"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/白洋舎":{name:"白洋舎",icon:"temaki-clothes_hanger",imageURL:"https://graph.facebook.com/hakuyosha.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11579995",shop:"dry_cleaning"},addTags:{brand:"白洋舎","brand:en":"Hakuyosha","brand:wikidata":"Q11579995","brand:wikipedia":"ja:白洋舎",name:"白洋舎","name:en":"Hakuyosha",shop:"dry_cleaning"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electrical/Kafkas":{name:"Kafkas",icon:"temaki-power",imageURL:"https://graph.facebook.com/kafkas.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q68201770",shop:"electrical"},addTags:{brand:"Kafkas","brand:wikidata":"Q68201770",name:"Kafkas",shop:"electrical"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Apple Store":{name:"Apple Store",icon:"fas-plug",imageURL:"https://graph.facebook.com/apple/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q421253",shop:"electronics"},addTags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics",short_name:"Apple"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Batteries Plus Bulbs":{name:"Batteries Plus Bulbs",icon:"fas-plug",imageURL:"https://graph.facebook.com/BatteriesPlus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17005157",shop:"electronics"},addTags:{brand:"Batteries Plus Bulbs","brand:wikidata":"Q17005157","brand:wikipedia":"en:Batteries Plus Bulbs",name:"Batteries Plus Bulbs",shop:"electronics"},countryCodes:["us"],terms:["batteries plus"],matchScore:2,suggestion:true},"shop/electronics/Best Buy":{name:"Best Buy",icon:"fas-plug",imageURL:"https://graph.facebook.com/bestbuy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q533415",shop:"electronics"},addTags:{brand:"Best Buy","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Boulanger":{name:"Boulanger",icon:"fas-plug",imageURL:"https://graph.facebook.com/Boulanger.Electromenager.Multimedia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2921695",shop:"electronics"},addTags:{brand:"Boulanger","brand:wikidata":"Q2921695","brand:wikipedia":"fr:Boulanger (entreprise)",name:"Boulanger",shop:"electronics"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/electronics/CeX":{name:"CeX",icon:"fas-plug",imageURL:"https://graph.facebook.com/CeX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5055676",shop:"electronics"},addTags:{brand:"CeX","brand:wikidata":"Q5055676","brand:wikipedia":"en:CeX (company)",name:"CeX",shop:"electronics"},countryCodes:["au","es","gb","ie","in","it","mx","nl","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Coolblue":{name:"Coolblue",icon:"fas-plug",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo-coolblue-500x500.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4992516",shop:"electronics"},addTags:{brand:"Coolblue","brand:wikidata":"Q4992516","brand:wikipedia":"en:Coolblue",name:"Coolblue",shop:"electronics"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Currys PC World":{name:"Currys PC World",icon:"fas-plug",imageURL:"https://graph.facebook.com/curryspcworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3246464",shop:"electronics"},addTags:{brand:"Currys PC World","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys PC World",shop:"electronics"},countryCodes:["gb","ie"],terms:["currys","pc world"],matchScore:2,suggestion:true},"shop/electronics/Darty":{name:"Darty",icon:"fas-plug",imageURL:"https://graph.facebook.com/darty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2439098",shop:"electronics"},addTags:{brand:"Darty","brand:wikidata":"Q2439098","brand:wikipedia":"fr:Darty",name:"Darty",shop:"electronics"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Elektra":{name:"Elektra",icon:"fas-plug",imageURL:"https://graph.facebook.com/TiendasElektraMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1142753",shop:"electronics"},addTags:{brand:"Elektra","brand:wikidata":"Q1142753","brand:wikipedia":"es:Grupo Elektra",name:"Elektra",shop:"electronics"},countryCodes:["gt","hn","pa","pe","sv"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Elgiganten":{name:"Elgiganten",icon:"fas-plug",imageURL:"https://graph.facebook.com/elgiganten.dk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17050121",shop:"electronics"},addTags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"},countryCodes:["dk","se"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Euronics":{name:"Euronics",icon:"fas-plug",imageURL:"https://graph.facebook.com/EuronicsItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q184860",shop:"electronics"},addTags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Expert":{name:"Expert",icon:"fas-plug",imageURL:"https://graph.facebook.com/expert.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q680990",shop:"electronics"},addTags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Fry's Electronics":{name:"Fry's Electronics",icon:"fas-plug",imageURL:"https://graph.facebook.com/fryselectronics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5506545",shop:"electronics"},addTags:{brand:"Fry's Electronics","brand:wikidata":"Q5506545","brand:wikipedia":"en:Fry's Electronics",name:"Fry's Electronics",shop:"electronics",short_name:"Fry's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Frávega":{name:"Frávega",icon:"fas-plug",imageURL:"https://graph.facebook.com/fravegaonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5401467",shop:"electronics"},addTags:{brand:"Frávega","brand:wikidata":"Q5401467","brand:wikipedia":"es:Frávega",name:"Frávega",shop:"electronics"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Garbarino":{name:"Garbarino",icon:"fas-plug",imageURL:"https://graph.facebook.com/GarbarinoGarantiaDeConfianza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5875270",shop:"electronics"},addTags:{brand:"Garbarino","brand:wikidata":"Q5875270","brand:wikipedia":"es:Garbarino",name:"Garbarino",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Gigantti":{name:"Gigantti",icon:"fas-plug",imageURL:"https://graph.facebook.com/gigantti/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42512186",shop:"electronics"},addTags:{brand:"Gigantti","brand:wikidata":"Q42512186","brand:wikipedia":"fi:Gigantti (tavarataloketju)",name:"Gigantti",shop:"electronics"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Hartlauer":{name:"Hartlauer",icon:"fas-plug",imageURL:"https://graph.facebook.com/loewennews/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1587223",shop:"electronics"},addTags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Interdiscount":{name:"Interdiscount",icon:"fas-plug",imageURL:"https://graph.facebook.com/interdiscount/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1665980",shop:"electronics"},addTags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/electronics/JB Hi-Fi":{name:"JB Hi-Fi",icon:"fas-plug",imageURL:"https://graph.facebook.com/JBHiFi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3310113",shop:"electronics"},addTags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Jaycar":{name:"Jaycar",icon:"fas-plug",imageURL:"https://graph.facebook.com/jaycarelectronics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6167713",shop:"electronics"},addTags:{brand:"Jaycar","brand:wikidata":"Q6167713","brand:wikipedia":"en:Jaycar",name:"Jaycar",shop:"electronics"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Kjell & Company":{name:"Kjell & Company",icon:"fas-plug",imageURL:"https://graph.facebook.com/kjellcoSverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6419332",shop:"electronics"},addTags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"},countryCodes:["no","se"],terms:["kjell och company"],matchScore:2,suggestion:true},"shop/electronics/Komputronik":{name:"Komputronik",icon:"fas-plug",imageURL:"https://graph.facebook.com/komputronik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11742085",shop:"electronics"},addTags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/LG":{name:"LG",icon:"fas-plug",imageURL:"https://graph.facebook.com/theLGstory/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q162345",shop:"electronics"},addTags:{brand:"LG","brand:wikidata":"Q162345","brand:wikipedia":"en:LG Electronics",name:"LG",shop:"electronics"},terms:["lg electronics"],matchScore:2,suggestion:true},"shop/electronics/La Curacao":{name:"La Curacao",icon:"fas-plug",imageURL:"https://graph.facebook.com/CuracaoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5194599",shop:"electronics"},addTags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Maplin":{name:"Maplin",icon:"fas-plug",imageURL:"https://graph.facebook.com/Maplin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6754124",shop:"electronics"},addTags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Media Expert":{name:"Media Expert",icon:"fas-plug",imageURL:"https://graph.facebook.com/mediaexpert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11776794",shop:"electronics"},addTags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Media Markt":{name:"Media Markt",icon:"fas-plug",imageURL:"https://graph.facebook.com/mediamarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2381223",shop:"electronics"},addTags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Medimax":{name:"Medimax",icon:"fas-plug",imageURL:"https://graph.facebook.com/MEDIMAX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62872450",shop:"electronics"},addTags:{brand:"Medimax","brand:wikidata":"Q62872450",name:"Medimax",shop:"electronics"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Microsoft Store":{name:"Microsoft Store",icon:"fas-plug",imageURL:"https://pbs.twimg.com/profile_images/918923853870522368/tjvU4OpM_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1688786",shop:"electronics"},addTags:{brand:"Microsoft Store","brand:wikidata":"Q1688786","brand:wikipedia":"en:Microsoft Store",name:"Microsoft Store",shop:"electronics",short_name:"Microsoft"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Musimundo":{name:"Musimundo",icon:"fas-plug",imageURL:"https://graph.facebook.com/musimundo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6034719",shop:"electronics"},addTags:{brand:"Musimundo","brand:wikidata":"Q6034719","brand:wikipedia":"es:Musimundo",name:"Musimundo",shop:"electronics"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Neonet":{name:"Neonet",icon:"fas-plug",imageURL:"https://graph.facebook.com/Neonetpl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11790622",shop:"electronics"},addTags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/P. C. Richard & Son":{name:"P. C. Richard & Son",icon:"fas-plug",imageURL:"https://graph.facebook.com/Pcrichardandson/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7117161",shop:"electronics"},addTags:{brand:"P. C. Richard & Son","brand:wikidata":"Q7117161","brand:wikipedia":"en:P. C. Richard & Son",name:"P. C. Richard & Son",shop:"electronics"},countryCodes:["us"],terms:["pc richard"],matchScore:2,suggestion:true},"shop/electronics/Power":{name:"Power",icon:"fas-plug",imageURL:"https://graph.facebook.com/power.retail.international/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20857751",shop:"electronics"},addTags:{brand:"Power","brand:wikidata":"Q20857751","brand:wikipedia":"fi:Power",name:"Power",shop:"electronics"},countryCodes:["dk","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/electronics/RTV Euro AGD":{name:"RTV Euro AGD",icon:"fas-plug",imageURL:"https://graph.facebook.com/rtveuroagd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7277895",shop:"electronics"},addTags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"pl:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/RadioShack":{name:"RadioShack",icon:"fas-plug",imageURL:"https://graph.facebook.com/RadioShack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1195490",shop:"electronics"},addTags:{brand:"RadioShack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"RadioShack",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Robert Dyas":{name:"Robert Dyas",icon:"fas-plug",imageURL:"https://pbs.twimg.com/profile_images/1082680408200884224/5hEh4Ws6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7343720",shop:"electronics"},addTags:{brand:"Robert Dyas","brand:wikidata":"Q7343720","brand:wikipedia":"en:Robert Dyas",name:"Robert Dyas",shop:"electronics"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Samsung":{name:"Samsung",icon:"fas-plug",imageURL:"https://graph.facebook.com/SamsungNewsroom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20718",shop:"electronics"},addTags:{brand:"Samsung","brand:wikidata":"Q20718","brand:wikipedia":"en:Samsung Electronics",name:"Samsung",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Saturn":{name:"Saturn",icon:"fas-plug",imageURL:"https://graph.facebook.com/SaturnDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2543504",shop:"electronics"},addTags:{brand:"Saturn","brand:wikidata":"Q2543504","brand:wikipedia":"en:Saturn (retailer)",name:"Saturn",shop:"electronics"},countryCodes:["at","de","lu","pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Sony":{name:"Sony",icon:"fas-plug",imageURL:"https://graph.facebook.com/sony.jpn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41187",shop:"electronics"},addTags:{brand:"Sony","brand:wikidata":"Q41187","brand:wikipedia":"en:Sony",name:"Sony",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Sony Centre":{name:"Sony Centre",icon:"fas-plug",geometry:["point","area"],tags:{"brand:wikidata":"Q3437496",shop:"electronics"},addTags:{brand:"Sony Centre","brand:wikidata":"Q3437496","brand:wikipedia":"en:Sony Centre",name:"Sony Centre",shop:"electronics"},terms:["sony center"],matchScore:2,suggestion:true},"shop/electronics/Teknikmagasinet":{name:"Teknikmagasinet",icon:"fas-plug",imageURL:"https://graph.facebook.com/TeknikmagasinetNorge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3357520",shop:"electronics"},addTags:{brand:"Teknikmagasinet","brand:wikidata":"Q3357520","brand:wikipedia":"en:Teknikmagasinet",name:"Teknikmagasinet",shop:"electronics"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/electronics/The Good Guys":{name:"The Good Guys",icon:"fas-plug",imageURL:"https://graph.facebook.com/thegoodguysAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7737217",shop:"electronics"},addTags:{brand:"The Good Guys","brand:wikidata":"Q7737217","brand:wikipedia":"en:The Good Guys (Australian company)",name:"The Good Guys",shop:"electronics"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/electronics/The Source":{name:"The Source",icon:"fas-plug",imageURL:"https://graph.facebook.com/thesourcecanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3212934",shop:"electronics"},addTags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Trony":{name:"Trony",icon:"fas-plug",imageURL:"https://graph.facebook.com/trony/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3999692",shop:"electronics"},addTags:{brand:"Trony","brand:wikidata":"Q3999692","brand:wikipedia":"it:Trony",name:"Trony",shop:"electronics"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Unieuro":{name:"Unieuro",icon:"fas-plug",imageURL:"https://graph.facebook.com/unieuro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4004687",shop:"electronics"},addTags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Worten":{name:"Worten",icon:"fas-plug",imageURL:"https://graph.facebook.com/WortenES/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10394039",shop:"electronics"},addTags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/electronics/b8ta":{name:"b8ta",icon:"fas-plug",imageURL:"https://graph.facebook.com/b8ta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55604609",shop:"electronics"},addTags:{brand:"b8ta","brand:wikidata":"Q55604609","brand:wikipedia":"en:B8ta",name:"b8ta",shop:"electronics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/electronics/М.Видео":{name:"М.Видео",icon:"fas-plug",imageURL:"https://graph.facebook.com/mvideo.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6558800",shop:"electronics"},addTags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Фокстрот":{name:"Фокстрот",icon:"fas-plug",imageURL:"https://graph.facebook.com/foxtrotinfo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16721578",shop:"electronics"},addTags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Эксперт":{name:"Эксперт",icon:"fas-plug",imageURL:"https://graph.facebook.com/expertVyhino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4530590",shop:"electronics"},addTags:{brand:"Эксперт","brand:en":"Expert","brand:ru":"Эксперт","brand:wikidata":"Q4530590","brand:wikipedia":"ru:Эксперт (сеть магазинов)",name:"Эксперт","name:en":"Expert","name:ru":"Эксперт",shop:"electronics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Эльдорадо":{name:"Эльдорадо",icon:"fas-plug",imageURL:"https://graph.facebook.com/Eldorado.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4531492",shop:"electronics"},addTags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/electronics/あきばお〜":{name:"あきばお〜",icon:"fas-plug",geometry:["point","area"],tags:{"brand:wikidata":"Q11257009",shop:"electronics"},addTags:{brand:"あきばお〜","brand:en":"Akibaoo","brand:ja":"あきばお〜","brand:wikidata":"Q11257009","brand:wikipedia":"ja:あきばお〜",name:"あきばお〜","name:en":"Akibaoo","name:ja":"あきばお〜",shop:"electronics"},countryCodes:["jp"],terms:["あきばお~"],matchScore:2,suggestion:true},"shop/electronics/エディオン":{name:"エディオン",icon:"fas-plug",imageURL:"https://graph.facebook.com/edion.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11290252",shop:"electronics"},addTags:{brand:"エディオン","brand:en":"EDION","brand:ja":"エディオン","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION","name:ja":"エディオン",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ケーズデンキ":{name:"ケーズデンキ",icon:"fas-plug",imageURL:"https://graph.facebook.com/ksdenki20180125/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6322472",shop:"electronics"},addTags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:ja":"ケーズデンキ","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki","name:ja":"ケーズデンキ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/コジマ":{name:"コジマ",icon:"fas-plug",imageURL:"https://graph.facebook.com/kojima.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302052",shop:"electronics"},addTags:{brand:"コジマ","brand:en":"Kojima","brand:ja":"コジマ","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima","name:ja":"コジマ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ソフマップ":{name:"ソフマップ",icon:"fas-plug",imageURL:"https://graph.facebook.com/sofmap.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7553789",shop:"electronics"},addTags:{brand:"ソフマップ","brand:en":"Sofmap","brand:ja":"ソフマップ","brand:wikidata":"Q7553789","brand:wikipedia":"ja:ソフマップ",name:"ソフマップ","name:en":"Sofmap","name:ja":"ソフマップ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ノジマ":{name:"ノジマ",icon:"fas-plug",imageURL:"https://graph.facebook.com/nojima.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11325660",shop:"electronics"},addTags:{brand:"ノジマ","brand:en":"Nojima","brand:ja":"ノジマ","brand:wikidata":"Q11325660","brand:wikipedia":"ja:ノジマ",name:"ノジマ","name:en":"Nojima","name:ja":"ノジマ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ビックカメラ":{name:"ビックカメラ",icon:"fas-plug",imageURL:"https://graph.facebook.com/biccamera.page/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4903531",shop:"electronics"},addTags:{brand:"ビックカメラ","brand:en":"Bic Camera","brand:ja":"ビックカメラ","brand:wikidata":"Q4903531","brand:wikipedia":"ja:ビックカメラ",name:"ビックカメラ","name:en":"Bic Camera","name:ja":"ビックカメラ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ヤマダ電機":{name:"ヤマダ電機",icon:"fas-plug",imageURL:"https://graph.facebook.com/YAMADA.DENKI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1096390",shop:"electronics"},addTags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:ja":"ヤマダ電機","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki","name:ja":"ヤマダ電機",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ヨドバシカメラ":{name:"ヨドバシカメラ",icon:"fas-plug",imageURL:"https://graph.facebook.com/yodobashi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168467",shop:"electronics"},addTags:{brand:"ヨドバシカメラ","brand:en":"Yodobashi Camera","brand:ja":"ヨドバシカメラ","brand:wikidata":"Q168467","brand:wikipedia":"ja:ヨドバシカメラ",name:"ヨドバシカメラ","name:en":"Yodobashi Camera","name:ja":"ヨドバシカメラ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/全國電子":{name:"全國電子",icon:"fas-plug",imageURL:"https://graph.facebook.com/elifemall.com.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10891540",shop:"electronics"},addTags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/electronics/燦坤3C":{name:"燦坤3C",icon:"fas-plug",imageURL:"https://graph.facebook.com/tkec520/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11569285",shop:"electronics"},addTags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Adam & Eve":{name:"Adam & Eve",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1215637357011046402/6y0FBjqk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4678604",shop:"erotic"},addTags:{brand:"Adam & Eve","brand:wikidata":"Q4678604","brand:wikipedia":"en:Adam & Eve (company)",name:"Adam & Eve",shop:"erotic"},countryCodes:["ca","pe","us"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Amazing Intimate Essentials":{name:"Amazing Intimate Essentials",icon:"maki-shop",imageURL:"https://graph.facebook.com/amazingstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66305936",shop:"erotic"},addTags:{brand:"Amazing Intimate Essentials","brand:wikidata":"Q66305936",name:"Amazing Intimate Essentials",shop:"erotic",short_name:"Amazing.net"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Ann Summers":{name:"Ann Summers",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1104069397008789504/jN1FCnL5_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q579524",shop:"erotic"},addTags:{brand:"Ann Summers","brand:wikidata":"Q579524","brand:wikipedia":"en:Ann Summers",name:"Ann Summers",shop:"erotic"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Orion":{name:"Orion",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/807193082244505600/DWoJxqGu_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1609577",shop:"erotic"},addTags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Pulse and Cocktails":{name:"Pulse and Cocktails",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/820968242835587072/oAqqidgR_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7259672",shop:"erotic"},addTags:{brand:"Pulse and Cocktails","brand:wikidata":"Q7259672","brand:wikipedia":"en:Pulse and Cocktails",name:"Pulse and Cocktails",shop:"erotic"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/fabric/Mondial Tissus":{name:"Mondial Tissus",icon:"fas-tape",imageURL:"https://graph.facebook.com/MondialTissus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17635288",shop:"fabric"},addTags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Brighton Collectibles":{name:"Brighton Collectibles",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/BrightonCollectibles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4967623",shop:"fashion_accessories"},addTags:{brand:"Brighton Collectibles","brand:wikidata":"Q4967623","brand:wikipedia":"en:Brighton Collectibles",name:"Brighton Collectibles",shop:"fashion_accessories"},countryCodes:["us"],terms:["brighton"],matchScore:2,suggestion:true},"shop/fashion_accessories/Bvlgari":{name:"Bvlgari",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/Bulgari/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q752515",shop:"fashion_accessories"},addTags:{brand:"Bulgari","brand:wikidata":"Q752515","brand:wikipedia":"en:Bulgari",name:"Bvlgari",shop:"fashion_accessories"},terms:["bulgari"],matchScore:2,suggestion:true},"shop/fashion_accessories/Claire's":{name:"Claire's",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/claires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2974996",shop:"fashion_accessories"},addTags:{brand:"Claire's","brand:wikidata":"Q2974996","brand:wikipedia":"en:Claire's",name:"Claire's",shop:"fashion_accessories"},terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Radley London":{name:"Radley London",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/RadleyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7281436",shop:"fashion_accessories"},addTags:{brand:"Radley London","brand:wikidata":"Q7281436",name:"Radley London",shop:"fashion_accessories",short_name:"Radley"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Van Cleef & Arpels":{name:"Van Cleef & Arpels",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/vancleef.arpels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2708181",shop:"fashion_accessories"},addTags:{brand:"Van Cleef & Arpels","brand:wikidata":"Q2708181","brand:wikipedia":"en:Van Cleef & Arpels",name:"Van Cleef & Arpels",shop:"fashion_accessories"},terms:["van cleef & arples"],matchScore:2,suggestion:true},"shop/flooring/Floor & Decor":{name:"Floor & Decor",icon:"temaki-tools",imageURL:"https://graph.facebook.com/flooranddecor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56280964",shop:"flooring"},addTags:{brand:"Floor & Decor","brand:wikidata":"Q56280964","brand:wikipedia":"en:Floor & Decor",name:"Floor & Decor",shop:"flooring"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/florist/Blume 2000":{name:"Blume 2000",icon:"maki-florist",imageURL:"https://graph.facebook.com/Blume2000.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q886166",shop:"florist"},addTags:{brand:"Blume 2000","brand:wikidata":"Q886166","brand:wikipedia":"de:Blume 2000",name:"Blume 2000",shop:"florist"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/florist/Blumen Risse":{name:"Blumen Risse",icon:"maki-florist",imageURL:"https://graph.facebook.com/BlumenRisse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q886177",shop:"florist"},addTags:{brand:"Blumen Risse","brand:wikidata":"Q886177","brand:wikipedia":"de:Blumen Risse",name:"Blumen Risse",shop:"florist"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/florist/Holland Blumen Mark":{name:"Holland Blumen Mark",icon:"maki-florist",imageURL:"https://graph.facebook.com/HollandBlumenMark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1624739",shop:"florist"},addTags:{brand:"Holland Blumen Mark","brand:wikidata":"Q1624739","brand:wikipedia":"de:Holland Blumen Mark",name:"Holland Blumen Mark",shop:"florist"},countryCodes:["at"],terms:["holland blumen"],matchScore:2,suggestion:true},"shop/florist/Interflora":{name:"Interflora",icon:"maki-florist",imageURL:"https://graph.facebook.com/Interflora.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q692179",shop:"florist"},addTags:{brand:"Interflora","brand:wikidata":"Q692179","brand:wikipedia":"en:Interflora",name:"Interflora",shop:"florist"},countryCodes:["fr","gb","no","se"],terms:[],matchScore:2,suggestion:true},"shop/florist/Monceau Fleurs":{name:"Monceau Fleurs",icon:"maki-florist",imageURL:"https://graph.facebook.com/Monceau.Fleurs.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17629431",shop:"florist"},addTags:{brand:"Monceau Fleurs","brand:wikidata":"Q17629431","brand:wikipedia":"fr:Emova Group",name:"Monceau Fleurs",shop:"florist"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/frame/Aaron Brothers":{name:"Aaron Brothers",icon:"fas-vector-square",imageURL:"https://graph.facebook.com/aaronbrothers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64979251",shop:"frame"},addTags:{brand:"Aaron Brothers","brand:wikidata":"Q64979251",name:"Aaron Brothers",shop:"frame"},countryCodes:["us"],terms:["aaron brothers art & framing","aaron brothers custom framing"],matchScore:2,suggestion:true},"shop/frozen_food/Dream Dinners":{name:"Dream Dinners",icon:"maki-shop",imageURL:"https://graph.facebook.com/DreamDinners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5306355",shop:"frozen_food"},addTags:{brand:"Dream Dinners","brand:wikidata":"Q5306355","brand:wikipedia":"en:Dream Dinners",name:"Dream Dinners",opening_hours:"\"by appointment\"",shop:"frozen_food"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Farmfoods":{name:"Farmfoods",icon:"maki-shop",imageURL:"https://graph.facebook.com/147382588630890/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435841",shop:"frozen_food"},addTags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"frozen_food"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Fulton's Foods":{name:"Fulton's Foods",icon:"maki-shop",imageURL:"https://graph.facebook.com/fultonfoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6112633",shop:"frozen_food"},addTags:{brand:"Fulton's Foods","brand:wikidata":"Q6112633","brand:wikipedia":"en:Fulton's Foods",name:"Fulton's Foods",shop:"frozen_food"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Iceland":{name:"Iceland",icon:"maki-shop",imageURL:"https://graph.facebook.com/icelandfoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q721810",shop:"frozen_food"},addTags:{brand:"Iceland","brand:wikidata":"Q721810","brand:wikipedia":"en:Iceland (supermarket)",name:"Iceland",shop:"frozen_food"},terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Picard":{name:"Picard",icon:"maki-shop",imageURL:"https://graph.facebook.com/picardsurgeles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3382454",shop:"frozen_food"},addTags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",shop:"frozen_food"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/frozen_food/Thiriet":{name:"Thiriet",icon:"maki-shop",imageURL:"https://graph.facebook.com/thiriet.surgeles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3524695",shop:"frozen_food"},addTags:{brand:"Thiriet","brand:wikidata":"Q3524695","brand:wikipedia":"fr:Thiriet (entreprise)",name:"Thiriet",shop:"frozen_food"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/PFG":{name:"PFG",icon:"maki-cemetery",geometry:["point","area"],tags:{"brand:wikidata":"Q3396087",shop:"funeral_directors"},addTags:{brand:"PFG","brand:wikidata":"Q3396087","brand:wikipedia":"fr:Pompes funèbres générales",name:"PFG",official_name:"Pompes Funèbres Générales",shop:"funeral_directors"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/Roblot":{name:"Roblot",icon:"maki-cemetery",imageURL:"https://graph.facebook.com/522928887844420/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63247414",shop:"funeral_directors"},addTags:{brand:"Roblot","brand:wikidata":"Q63247414",name:"Roblot",shop:"funeral_directors"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/Roc-Eclerc":{name:"Roc-Eclerc",icon:"maki-cemetery",imageURL:"https://graph.facebook.com/grouperoceclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62558102",shop:"funeral_directors"},addTags:{brand:"Roc-Eclerc","brand:wikidata":"Q62558102",name:"Roc-Eclerc",shop:"funeral_directors"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/The Co-operative Funeralcare":{name:"The Co-operative Funeralcare",icon:"maki-cemetery",imageURL:"https://pbs.twimg.com/profile_images/1034361261193134080/1PfqKyVV_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7726521",shop:"funeral_directors"},addTags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/AHF":{name:"AHF",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/1207239597513674752/BvhwknlS_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q50132485",shop:"furniture"},addTags:{brand:"AHF","brand:wikidata":"Q50132485",name:"AHF",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Aaron's":{name:"Aaron's",icon:"fas-couch",imageURL:"https://graph.facebook.com/aaronsinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10397787",shop:"furniture"},addTags:{brand:"Aaron's","brand:wikidata":"Q10397787","brand:wikipedia":"en:Aaron's, Inc.",name:"Aaron's",shop:"furniture"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/American Signature Furniture":{name:"American Signature Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/AmericanSignatureFurniture/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63859411",shop:"furniture"},addTags:{brand:"American Signature Furniture","brand:wikidata":"Q63859411",name:"American Signature Furniture",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Arhaus":{name:"Arhaus",icon:"fas-couch",imageURL:"https://graph.facebook.com/44947264751/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q35689887",shop:"furniture"},addTags:{brand:"Arhaus","brand:wikidata":"Q35689887","brand:wikipedia":"en:Arhaus",name:"Arhaus",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Ashley HomeStore":{name:"Ashley HomeStore",icon:"fas-couch",imageURL:"https://graph.facebook.com/AshleyHomeStore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4805437",shop:"furniture"},addTags:{alt_name:"Ashley Furniture",brand:"Ashley HomeStore","brand:wikidata":"Q4805437","brand:wikipedia":"en:Ashley HomeStore",name:"Ashley HomeStore",shop:"furniture"},countryCodes:["ca","us"],terms:["ashley furniture homestore"],matchScore:2,suggestion:true},"shop/furniture/Asko":{name:"Asko",icon:"fas-couch",imageURL:"https://graph.facebook.com/askohuonekalut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11853132",shop:"furniture"},addTags:{brand:"Asko","brand:wikidata":"Q11853132","brand:wikipedia":"fi:Asko",name:"Asko",shop:"furniture"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Askona":{name:"Askona",icon:"fas-couch",imageURL:"https://graph.facebook.com/AskonaRu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4071319",shop:"furniture"},addTags:{brand:"Askona","brand:wikidata":"Q4071319","brand:wikipedia":"ru:Аскона (компания)",name:"Askona",shop:"furniture"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Black Red White":{name:"Black Red White",icon:"fas-couch",imageURL:"https://graph.facebook.com/BlackRedWhitePL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4921546",shop:"furniture"},addTags:{brand:"Black Red White","brand:wikidata":"Q4921546","brand:wikipedia":"en:Black Red White",name:"Black Red White",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/BoConcept":{name:"BoConcept",icon:"fas-couch",imageURL:"https://graph.facebook.com/boconceptusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11338915",shop:"furniture"},addTags:{brand:"BoConcept","brand:wikidata":"Q11338915","brand:wikipedia":"en:BoConcept",name:"BoConcept",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Bob's Discount Furniture":{name:"Bob's Discount Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/mybobs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4931582",shop:"furniture"},addTags:{brand:"Bob's Discount Furniture","brand:wikidata":"Q4931582","brand:wikipedia":"en:Bob's Discount Furniture",name:"Bob's Discount Furniture",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Bodzio":{name:"Bodzio",icon:"fas-couch",imageURL:"https://graph.facebook.com/FabrykaMebliBodzio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20034845",shop:"furniture"},addTags:{brand:"Bodzio","brand:wikidata":"Q20034845","brand:wikipedia":"pl:Fabryka Mebli Bodzio",name:"Bodzio",shop:"furniture"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/furniture/But":{name:"But",icon:"fas-couch",imageURL:"https://graph.facebook.com/but/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18720442",shop:"furniture"},addTags:{brand:"But","brand:wikidata":"Q18720442","brand:wikipedia":"en:BUT (retailer)",name:"But",shop:"furniture"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Cabinets To Go":{name:"Cabinets To Go",icon:"fas-couch",imageURL:"https://graph.facebook.com/CabinetsToGo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25245346",shop:"furniture"},addTags:{brand:"Cabinets To Go","brand:wikidata":"Q25245346","brand:wikipedia":"en:Cabinets To Go",name:"Cabinets To Go",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Casa":{name:"Casa",icon:"fas-couch",imageURL:"https://graph.facebook.com/casashops.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1991755",shop:"furniture"},addTags:{brand:"Casa","brand:wikidata":"Q1991755","brand:wikipedia":"fr:Casa (enseigne)",name:"Casa",shop:"furniture"},countryCodes:["be","ch","es","fr","it","lu","pt"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Conforama":{name:"Conforama",icon:"fas-couch",imageURL:"https://graph.facebook.com/Conforama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q541134",shop:"furniture"},addTags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"},countryCodes:["ch","es","fr","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Crate & Barrel":{name:"Crate & Barrel",icon:"fas-couch",imageURL:"https://graph.facebook.com/crateandbarrel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5182604",shop:"furniture"},addTags:{brand:"Crate & Barrel","brand:wikidata":"Q5182604","brand:wikipedia":"en:Crate & Barrel",name:"Crate & Barrel",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/DFS":{name:"DFS",icon:"fas-couch",imageURL:"https://graph.facebook.com/DFSUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5204927",shop:"furniture"},addTags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Dunelm":{name:"Dunelm",icon:"fas-couch",imageURL:"https://graph.facebook.com/DunelmUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5315020",shop:"furniture"},addTags:{brand:"Dunelm","brand:wikidata":"Q5315020","brand:wikipedia":"en:Dunelm Group",name:"Dunelm",shop:"furniture"},countryCodes:["gb"],terms:["dunelm hill"],matchScore:2,suggestion:true},"shop/furniture/Dänisches Bettenlager":{name:"Dänisches Bettenlager",icon:"fas-couch",imageURL:"https://graph.facebook.com/JYSK.dk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q138913",shop:"furniture"},addTags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Ethan Allen":{name:"Ethan Allen",icon:"fas-couch",imageURL:"https://graph.facebook.com/ethanallendesign/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5402870",shop:"furniture"},addTags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (company)",name:"Ethan Allen",shop:"furniture"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Fly":{name:"Fly",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFly-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1389184",shop:"furniture"},addTags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Freedom":{name:"Freedom",icon:"fas-couch",imageURL:"https://graph.facebook.com/freedomAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5500546",shop:"furniture"},addTags:{brand:"Freedom","brand:wikidata":"Q5500546","brand:wikipedia":"en:Freedom Furniture",name:"Freedom",shop:"furniture"},countryCodes:["au"],terms:["freedom furniture"],matchScore:2,suggestion:true},"shop/furniture/Furniture Village":{name:"Furniture Village",icon:"fas-couch",imageURL:"https://graph.facebook.com/furniturevillage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5509685",shop:"furniture"},addTags:{brand:"Furniture Village","brand:wikidata":"Q5509685","brand:wikipedia":"en:Furniture Village",name:"Furniture Village",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/HSL":{name:"HSL",icon:"fas-couch",imageURL:"https://graph.facebook.com/hslchairs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64284324",shop:"furniture"},addTags:{brand:"HSL","brand:wikidata":"Q64284324",name:"HSL",official_name:"High Seat Limited",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Harveys":{name:"Harveys",icon:"fas-couch",imageURL:"https://graph.facebook.com/harveysfurniture/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5677754",shop:"furniture"},addTags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Havertys":{name:"Havertys",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/672434576397062144/tX39o3Bz_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5683881",shop:"furniture"},addTags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/IKEA":{name:"IKEA",icon:"fas-couch",imageURL:"https://graph.facebook.com/IKEA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54078",shop:"furniture"},addTags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Isku":{name:"Isku",icon:"fas-couch",imageURL:"https://graph.facebook.com/iskuinteriorofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11865127",shop:"furniture"},addTags:{brand:"Isku","brand:wikidata":"Q11865127","brand:wikipedia":"fi:Isku (yritys)",name:"Isku",shop:"furniture"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/furniture/JYSK":{name:"JYSK",icon:"fas-couch",imageURL:"https://graph.facebook.com/JYSK.dk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q138913",shop:"furniture"},addTags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Jerome's Furniture":{name:"Jerome's Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/JeromesFurniture/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997693",shop:"furniture"},addTags:{brand:"Jerome's Furniture","brand:wikidata":"Q16997693","brand:wikipedia":"en:Jerome's",name:"Jerome's Furniture",shop:"furniture",short_name:"Jerome's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Kika":{name:"Kika",icon:"fas-couch",imageURL:"https://graph.facebook.com/kika/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q256456",shop:"furniture"},addTags:{brand:"Kika","brand:wikidata":"Q256456","brand:wikipedia":"de:Kika (Möbelhaus)",name:"Kika",shop:"furniture"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Kwantum":{name:"Kwantum",icon:"fas-couch",imageURL:"https://graph.facebook.com/KwantumNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2262591",shop:"furniture"},addTags:{brand:"Kwantum","brand:wikidata":"Q2262591","brand:wikipedia":"nl:Kwantum (winkelketen)",name:"Kwantum",shop:"furniture"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/furniture/La-Z-Boy":{name:"La-Z-Boy",icon:"fas-couch",imageURL:"https://graph.facebook.com/lazboy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6391583",shop:"furniture"},addTags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"},countryCodes:["ca","us"],terms:["la-z-boy furniture gallery"],matchScore:2,suggestion:true},"shop/furniture/Laura Ashley Home":{name:"Laura Ashley Home",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/1096100741968785408/hOoKNZzn_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1523089",shop:"furniture"},addTags:{brand:"Laura Ashley","brand:wikidata":"Q1523089","brand:wikipedia":"en:Laura Ashley plc",name:"Laura Ashley Home",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Leen Bakker":{name:"Leen Bakker",icon:"fas-couch",imageURL:"https://graph.facebook.com/leenbakker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3333662",shop:"furniture"},addTags:{brand:"Leen Bakker","brand:wikidata":"Q3333662","brand:wikipedia":"nl:Leen Bakker",name:"Leen Bakker",shop:"furniture"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Leiner":{name:"Leiner",icon:"fas-couch",imageURL:"https://graph.facebook.com/Leiner.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1661472",shop:"furniture"},addTags:{brand:"Leiner","brand:wikidata":"Q1661472","brand:wikipedia":"de:Rudolf Leiner (Unternehmen)",name:"Leiner",shop:"furniture"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/furniture/LoveSac":{name:"LoveSac",icon:"fas-couch",imageURL:"https://graph.facebook.com/LoveSac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6690181",shop:"furniture"},addTags:{brand:"LoveSac","brand:wikidata":"Q6690181","brand:wikipedia":"en:LoveSac",name:"LoveSac",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Maisons du Monde":{name:"Maisons du Monde",icon:"fas-couch",imageURL:"https://graph.facebook.com/maisonsdumondeus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3280364",shop:"furniture"},addTags:{brand:"Maisons du Monde","brand:wikidata":"Q3280364","brand:wikipedia":"fr:Maisons du Monde",name:"Maisons du Monde",shop:"furniture"},countryCodes:["be","ch","de","es","fr","gb","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Möbelix":{name:"Möbelix",icon:"fas-couch",imageURL:"https://graph.facebook.com/moebelix.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q877547",shop:"furniture"},addTags:{brand:"Möbelix","brand:wikidata":"Q877547","brand:wikipedia":"hu:Möbelix",name:"Möbelix",shop:"furniture"},countryCodes:["at","cz","hu","sk"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Mömax":{name:"Mömax",icon:"fas-couch",imageURL:"https://graph.facebook.com/moemax.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56388481",shop:"furniture"},addTags:{brand:"Mömax","brand:wikidata":"Q56388481","brand:wikipedia":"hu:Mömax",name:"Mömax",shop:"furniture"},countryCodes:["at","de","hu","si"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Oak Furnitureland":{name:"Oak Furnitureland",icon:"fas-couch",imageURL:"https://graph.facebook.com/OakFurnitureland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16959724",shop:"furniture"},addTags:{brand:"Oak Furnitureland","brand:wikidata":"Q16959724","brand:wikipedia":"en:Oak Furniture Land",name:"Oak Furnitureland",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Poltronesofà":{name:"Poltronesofà",icon:"fas-couch",imageURL:"https://graph.facebook.com/poltronesofaspa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80833069",shop:"furniture"},addTags:{brand:"Poltronesofà","brand:wikidata":"Q80833069",name:"Poltronesofà",shop:"furniture"},countryCodes:["be","ch","cy","fr","it","mt"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Pottery Barn":{name:"Pottery Barn",icon:"fas-couch",imageURL:"https://graph.facebook.com/potterybarn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3400126",shop:"furniture"},addTags:{brand:"Pottery Barn","brand:wikidata":"Q3400126","brand:wikipedia":"en:Pottery Barn",name:"Pottery Barn",shop:"furniture"},countryCodes:["au","ca","mx","ph","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Raymour & Flanigan":{name:"Raymour & Flanigan",icon:"fas-couch",imageURL:"https://graph.facebook.com/raymourandflanigan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7299290",shop:"furniture"},addTags:{brand:"Raymour & Flanigan","brand:wikidata":"Q7299290","brand:wikipedia":"en:Raymour & Flanigan",name:"Raymour & Flanigan",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Rent-A-Center":{name:"Rent-A-Center",icon:"fas-couch",imageURL:"https://graph.facebook.com/RentACenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7313497",shop:"furniture"},addTags:{brand:"Rent-A-Center","brand:wikidata":"Q7313497","brand:wikipedia":"en:Rent-A-Center",name:"Rent-A-Center",shop:"furniture"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Restoration Hardware":{name:"Restoration Hardware",icon:"fas-couch",imageURL:"https://graph.facebook.com/791504884230356/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7316207",shop:"furniture"},addTags:{brand:"Restoration Hardware","brand:wikidata":"Q7316207","brand:wikipedia":"en:Restoration Hardware",name:"Restoration Hardware",shop:"furniture"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Roche Bobois":{name:"Roche Bobois",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Roche%20Bobois.jpeg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3437504",shop:"furniture"},addTags:{brand:"Roche Bobois","brand:wikidata":"Q3437504","brand:wikipedia":"fr:Roche Bobois",name:"Roche Bobois",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Roller":{name:"Roller",icon:"fas-couch",imageURL:"https://graph.facebook.com/ROLLER.Clever.einrichten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1621286",shop:"furniture"},addTags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"},countryCodes:["de","lu"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Rooms To Go":{name:"Rooms To Go",icon:"fas-couch",imageURL:"https://graph.facebook.com/roomstogo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7366329",shop:"furniture"},addTags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Rutar":{name:"Rutar",icon:"fas-couch",imageURL:"https://graph.facebook.com/RutarAustria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22910157",shop:"furniture"},addTags:{brand:"Rutar","brand:wikidata":"Q22910157","brand:wikipedia":"de:RUTAR Group",name:"Rutar",shop:"furniture"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/furniture/ScS":{name:"ScS",icon:"fas-couch",imageURL:"https://graph.facebook.com/scssofas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19654399",shop:"furniture"},addTags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/The Brick":{name:"The Brick",icon:"fas-couch",imageURL:"https://graph.facebook.com/TheBrick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7720000",shop:"furniture"},addTags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Urban Barn":{name:"Urban Barn",icon:"fas-couch",imageURL:"https://graph.facebook.com/urbanbarn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62515207",shop:"furniture"},addTags:{brand:"Urban Barn","brand:wikidata":"Q62515207",name:"Urban Barn",shop:"furniture"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Value City Furniture":{name:"Value City Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/ValueCityFurnitureUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63859417",shop:"furniture"},addTags:{brand:"Value City Furniture","brand:wikidata":"Q63859417",name:"Value City Furniture",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/XXXLutz":{name:"XXXLutz",icon:"fas-couch",imageURL:"https://graph.facebook.com/xxxlutz.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q70339467",shop:"furniture"},addTags:{brand:"XXXLutz","brand:wikidata":"Q70339467","brand:wikipedia":"de:XXXLutz",name:"XXXLutz",shop:"furniture"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/furniture/west elm":{name:"west elm",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q7985021",shop:"furniture"},addTags:{brand:"west elm","brand:wikidata":"Q7985021","brand:wikipedia":"en:Williams-Sonoma",name:"west elm",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/İstikbal":{name:"İstikbal",icon:"fas-couch",imageURL:"https://graph.facebook.com/istikbal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6031999",shop:"furniture"},addTags:{brand:"İstikbal","brand:wikidata":"Q6031999","brand:wikipedia":"tr:İstikbal",name:"İstikbal",shop:"furniture"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/furniture/ニトリ":{name:"ニトリ",icon:"fas-couch",imageURL:"https://graph.facebook.com/nitori.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10801453",shop:"furniture"},addTags:{brand:"ニトリ","brand:en":"Nitori","brand:ja":"ニトリ","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori","name:ja":"ニトリ",shop:"furniture"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/games/Games Workshop":{name:"Games Workshop",icon:"fas-dice",imageURL:"https://graph.facebook.com/GWSunriseVillage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q587270",shop:"games"},addTags:{brand:"Games Workshop","brand:wikidata":"Q587270","brand:wikipedia":"en:Games Workshop",name:"Games Workshop",shop:"games"},countryCodes:["de","fr","gb","nl","us"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Bellaflora":{name:"Bellaflora",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/bellafloraNr1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q815787",shop:"garden_centre"},addTags:{brand:"Bellaflora","brand:wikidata":"Q815787","brand:wikipedia":"de:Bellaflora",name:"Bellaflora",shop:"garden_centre"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Blue Diamond Garden Centres":{name:"Blue Diamond Garden Centres",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/bluediamondgardencentres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81097207",shop:"garden_centre"},addTags:{brand:"Blue Diamond Garden Centres","brand:wikidata":"Q81097207",name:"Blue Diamond Garden Centres",shop:"garden_centre"},terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Dehner":{name:"Dehner",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/dehner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1183029",shop:"garden_centre"},addTags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",shop:"garden_centre"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Dobbies":{name:"Dobbies",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/DobbiesGC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5286529",shop:"garden_centre"},addTags:{brand:"Dobbies","brand:wikidata":"Q5286529","brand:wikipedia":"en:Dobbies Garden Centres",name:"Dobbies",shop:"garden_centre"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Gamm Vert":{name:"Gamm Vert",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/gammvert.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3095006",shop:"garden_centre"},addTags:{brand:"Gamm Vert","brand:wikidata":"Q3095006","brand:wikipedia":"fr:Gamm Vert",name:"Gamm Vert",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Intratuin":{name:"Intratuin",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/intratuin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2927176",shop:"garden_centre"},addTags:{brand:"Intratuin","brand:wikidata":"Q2927176","brand:wikipedia":"nl:Intratuin",name:"Intratuin",shop:"garden_centre"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Jardiland":{name:"Jardiland",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/Jardiland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3162276",shop:"garden_centre"},addTags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Otter Garden Centres":{name:"Otter Garden Centres",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/OtterGardenCentres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81095450",shop:"garden_centre"},addTags:{brand:"Otter Garden Centres","brand:wikidata":"Q81095450",name:"Otter Garden Centres",shop:"garden_centre"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Point Vert":{name:"Point Vert",icon:"maki-garden-centre",imageURL:"https://pbs.twimg.com/profile_images/1984615026/Apex_quadrit_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16661975",shop:"garden_centre"},addTags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Truffaut":{name:"Truffaut",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/truffautfr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3162640",shop:"garden_centre"},addTags:{brand:"Truffaut","brand:wikidata":"Q3162640","brand:wikipedia":"fr:Jardineries Truffaut",name:"Truffaut",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Walmart Garden Center":{name:"Walmart Garden Center",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"garden_centre"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Garden Center",shop:"garden_centre"},terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Welkoop":{name:"Welkoop",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/welkoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72799253",shop:"garden_centre"},addTags:{brand:"Welkoop","brand:wikidata":"Q72799253",name:"Welkoop",shop:"garden_centre"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Wyevale":{name:"Wyevale",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/WyevaleGC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7735819",shop:"garden_centre"},addTags:{brand:"Wyevale","brand:wikidata":"Q7735819","brand:wikipedia":"en:Wyevale Garden Centres",name:"Wyevale",shop:"garden_centre"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/ZG Raiffeisen":{name:"ZG Raiffeisen",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/zgraiffeisen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136135",shop:"garden_centre"},addTags:{brand:"ZG Raiffeisen","brand:wikidata":"Q136135","brand:wikipedia":"de:ZG Raiffeisen",name:"ZG Raiffeisen",shop:"garden_centre"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/gas/Airgas":{name:"Airgas",icon:"temaki-propane_tank",imageURL:"https://graph.facebook.com/airgasusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80635",shop:"gas"},addTags:{brand:"Airgas","brand:wikidata":"Q80635","brand:wikipedia":"en:Airgas",name:"Airgas",shop:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gas/AmeriGas":{name:"AmeriGas",icon:"temaki-propane_tank",imageURL:"https://graph.facebook.com/AmeriGas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23130318",shop:"gas"},addTags:{brand:"AmeriGas","brand:wikidata":"Q23130318","brand:wikipedia":"en:AmeriGas","fuel:lpg":"yes",name:"AmeriGas",shop:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gas/Ferrellgas":{name:"Ferrellgas",icon:"temaki-propane_tank",imageURL:"https://graph.facebook.com/Ferrellgas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5445299",shop:"gas"},addTags:{brand:"Ferrellgas","brand:wikidata":"Q5445299","brand:wikipedia":"en:Ferrellgas","fuel:lpg":"yes",name:"Ferrellgas",shop:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/American Greetings":{name:"American Greetings",icon:"maki-gift",imageURL:"https://graph.facebook.com/AmericanGreetings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q464767",shop:"gift"},addTags:{brand:"American Greetings","brand:wikidata":"Q464767","brand:wikipedia":"en:American Greetings",name:"American Greetings",shop:"gift"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Card Factory":{name:"Card Factory",icon:"maki-gift",imageURL:"https://graph.facebook.com/cardfactoryplc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5038192",shop:"gift"},addTags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"},countryCodes:["gb","im"],terms:[],matchScore:2,suggestion:true},"shop/gift/Carlton Cards":{name:"Carlton Cards",icon:"maki-gift",imageURL:"https://graph.facebook.com/Carltoncards.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5042968",shop:"gift"},addTags:{brand:"Carlton Cards","brand:wikidata":"Q5042968","brand:wikipedia":"en:Carlton Cards",name:"Carlton Cards",shop:"gift"},countryCodes:["ca"],terms:["carlton"],matchScore:2,suggestion:true},"shop/gift/Clintons":{name:"Clintons",icon:"maki-gift",imageURL:"https://graph.facebook.com/ClintonsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5134299",shop:"gift"},addTags:{brand:"Clintons","brand:wikidata":"Q5134299","brand:wikipedia":"en:Clintons",name:"Clintons",shop:"gift"},countryCodes:["gb"],terms:["clinton cards"],matchScore:2,suggestion:true},"shop/gift/Cracker Barrel":{name:"Cracker Barrel",icon:"maki-gift",imageURL:"https://graph.facebook.com/crackerbarrel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4492609",shop:"gift"},addTags:{brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store",shop:"gift"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Disney Store":{name:"Disney Store",icon:"maki-gift",imageURL:"https://graph.facebook.com/shopdisney/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1047009",shop:"gift"},addTags:{brand:"Disney Store","brand:wikidata":"Q1047009","brand:wikipedia":"en:Disney Store",name:"Disney Store",shop:"gift"},countryCodes:["ca","fr","us"],terms:["the disney store"],matchScore:2,suggestion:true},"shop/gift/Edible Arrangements":{name:"Edible Arrangements",icon:"maki-gift",imageURL:"https://graph.facebook.com/ediblearrangements/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5337996",shop:"gift"},addTags:{brand:"Edible Arrangements","brand:wikidata":"Q5337996","brand:wikipedia":"en:Edible Arrangements",name:"Edible Arrangements",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Hallmark":{name:"Hallmark",icon:"maki-gift",imageURL:"https://graph.facebook.com/Hallmark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1521910",shop:"gift"},addTags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"},countryCodes:["ca","gb","us"],terms:["hallmark gold crown"],matchScore:2,suggestion:true},"shop/gift/Nanu-Nana":{name:"Nanu-Nana",icon:"maki-gift",imageURL:"https://graph.facebook.com/NanuNanaDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1720245",shop:"gift"},addTags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/gift/Papyrus":{name:"Papyrus",icon:"maki-gift",imageURL:"https://graph.facebook.com/papyrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28222692",shop:"gift"},addTags:{brand:"Papyrus","brand:wikidata":"Q28222692","brand:wikipedia":"en:Papyrus (company)",name:"Papyrus",shop:"gift"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Showcase":{name:"Showcase",icon:"maki-gift",imageURL:"https://graph.facebook.com/shopatshowcase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7503163",shop:"gift"},addTags:{brand:"Showcase","brand:wikidata":"Q7503163","brand:wikipedia":"en:Showcase (retailer)",name:"Showcase",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Spencer's":{name:"Spencer's",icon:"maki-gift",imageURL:"https://graph.facebook.com/spencers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7576055",shop:"gift"},addTags:{brand:"Spencer Gifts","brand:wikidata":"Q7576055","brand:wikipedia":"en:Spencer Gifts",name:"Spencer's",official_name:"Spencer Gifts",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Things Remembered":{name:"Things Remembered",icon:"maki-gift",imageURL:"https://graph.facebook.com/thingsremembered/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54958287",shop:"gift"},addTags:{brand:"Things Remembered","brand:wikidata":"Q54958287","brand:wikipedia":"en:Things Remembered",name:"Things Remembered",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/greengrocer/Produce Junction":{name:"Produce Junction",icon:"fas-carrot",imageURL:"https://graph.facebook.com/ProduceJunction/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60583541",shop:"greengrocer"},addTags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser_supply/Sally Beauty Supply":{name:"Sally Beauty Supply",icon:"temaki-hair_care",imageURL:"https://graph.facebook.com/sallybeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7405065",shop:"hairdresser_supply"},addTags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"},countryCodes:["be","ca","cl","de","es","fr","gb","ie","mx","nl","pe","pr","us"],terms:["sally beauty"],matchScore:2,suggestion:true},"shop/hairdresser/Camille Albane":{name:"Camille Albane",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/CamilleAlbane.Paris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62965183",shop:"hairdresser"},addTags:{brand:"Camille Albane","brand:wikidata":"Q62965183",name:"Camille Albane",shop:"hairdresser"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Cost Cutters":{name:"Cost Cutters",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/CostCutters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62029366",shop:"hairdresser"},addTags:{brand:"Cost Cutters","brand:wikidata":"Q62029366",name:"Cost Cutters",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Dessange":{name:"Dessange",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/DESSANGE.Paris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62979914",shop:"hairdresser"},addTags:{brand:"Dessange","brand:wikidata":"Q62979914",name:"Dessange",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Fantastic Sams":{name:"Fantastic Sams",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/fantasticsamscutandcolor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5434222",shop:"hairdresser"},addTags:{brand:"Fantastic Sams","brand:wikidata":"Q5434222","brand:wikipedia":"en:Fantastic Sams",name:"Fantastic Sams",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/First Choice Haircutters":{name:"First Choice Haircutters",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/SignatureStyleSalons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5452622",shop:"hairdresser"},addTags:{brand:"First Choice Haircutters","brand:wikidata":"Q5452622","brand:wikipedia":"en:First Choice Haircutters",name:"First Choice Haircutters",shop:"hairdresser"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Franck Provost":{name:"Franck Provost",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/franck.provost.paris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62805922",shop:"hairdresser"},addTags:{brand:"Franck Provost","brand:wikidata":"Q62805922","brand:wikipedia":"fr:Franck Provost (Salons de coiffure)",name:"Franck Provost",shop:"hairdresser"},countryCodes:["be","fr","pl"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Great Clips":{name:"Great Clips",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/GreatClips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5598967",shop:"hairdresser"},addTags:{brand:"Great Clips","brand:wikidata":"Q5598967","brand:wikipedia":"en:Great Clips",name:"Great Clips",shop:"hairdresser"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Hair Cuttery":{name:"Hair Cuttery",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/haircuttery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5639484",shop:"hairdresser"},addTags:{brand:"Hair Cuttery","brand:wikidata":"Q5639484","brand:wikipedia":"en:Hair Cuttery",name:"Hair Cuttery",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Hair Express":{name:"Hair Express",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/hairexpressfriseur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57550814",shop:"hairdresser"},addTags:{brand:"Hair Express","brand:wikidata":"Q57550814",name:"Hair Express",shop:"hairdresser"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Hairkiller":{name:"Hairkiller",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/hairkillerDetmold/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58305998",shop:"hairdresser"},addTags:{brand:"Hairkiller","brand:wikidata":"Q58305998",name:"Hairkiller",shop:"hairdresser"},countryCodes:["at","de","lu"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Jean Louis David":{name:"Jean Louis David",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/jean.louis.david.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64445174",shop:"hairdresser"},addTags:{brand:"Jean Louis David","brand:wikidata":"Q64445174",name:"Jean Louis David",shop:"hairdresser"},countryCodes:["es","fr","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Klier":{name:"Klier",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/frisoerklier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1465159",shop:"hairdresser"},addTags:{brand:"Klier","brand:wikidata":"Q1465159","brand:wikipedia":"de:Frisör Klier",name:"Klier",shop:"hairdresser"},countryCodes:["at","cz","de","sk"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Klipp":{name:"Klipp",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/klipp.frisoer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1737304",shop:"hairdresser"},addTags:{brand:"Klipp","brand:wikidata":"Q1737304","brand:wikipedia":"de:Klipp Frisör",name:"Klipp",shop:"hairdresser"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Mastercuts":{name:"Mastercuts",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/MasterCuts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64026258",shop:"hairdresser"},addTags:{brand:"Mastercuts","brand:wikidata":"Q64026258",name:"Mastercuts",shop:"hairdresser"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Pascal Coste":{name:"Pascal Coste",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/pascalcosteofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66555630",shop:"hairdresser"},addTags:{brand:"Pascal Coste","brand:wikidata":"Q66555630",name:"Pascal Coste",shop:"hairdresser"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Saint Algue":{name:"Saint Algue",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/saint.algue.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62973210",shop:"hairdresser"},addTags:{brand:"Saint Algue","brand:wikidata":"Q62973210",name:"Saint Algue",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Sport Clips":{name:"Sport Clips",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/SportClipsHaircuts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579310",shop:"hairdresser"},addTags:{brand:"Sport Clips","brand:wikidata":"Q7579310",name:"Sport Clips",shop:"hairdresser"},countryCodes:["ca","us"],terms:["sport clips haircuts","sports clips"],matchScore:2,suggestion:true},"shop/hairdresser/Super Cut":{name:"Super Cut",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/supercut.friseur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64139077",shop:"hairdresser"},addTags:{brand:"Super Cut","brand:wikidata":"Q64139077",name:"Super Cut",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Supercuts":{name:"Supercuts",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/Supercuts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643239",shop:"hairdresser"},addTags:{brand:"Supercuts","brand:wikidata":"Q7643239","brand:wikipedia":"en:Supercuts",name:"Supercuts",shop:"hairdresser"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Tchip":{name:"Tchip",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/TCHIP.Coiffure.Officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62871250",shop:"hairdresser"},addTags:{brand:"Tchip","brand:wikidata":"Q62871250",name:"Tchip",shop:"hairdresser"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/The Salon at Ulta Beauty":{name:"The Salon at Ulta Beauty",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/UltaBeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7880076",shop:"hairdresser"},addTags:{alt_name:"Ulta Salon",brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"The Salon at Ulta Beauty",shop:"hairdresser"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Toni & Guy":{name:"Toni & Guy",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/toniandguyworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q324784",shop:"hairdresser"},addTags:{brand:"Toni & Guy","brand:wikidata":"Q324784","brand:wikipedia":"en:Toni & Guy",name:"Toni & Guy",shop:"hairdresser"},terms:[],matchScore:2,suggestion:true},"shop/hairdresser/Top Hair":{name:"Top Hair",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/Mein.Friseur.Top.Hair/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62523343",shop:"hairdresser"},addTags:{brand:"Top Hair","brand:wikidata":"Q62523343",name:"Top Hair",shop:"hairdresser"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/hardware/220 вольт":{name:"220 вольт",icon:"temaki-tools",imageURL:"https://graph.facebook.com/likevolt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18635304",shop:"hardware"},addTags:{brand:"220 вольт","brand:en":"220 Volt","brand:ru":"220 вольт","brand:wikidata":"Q18635304","brand:wikipedia":"ru:220 Вольт (компания)",name:"220 вольт","name:en":"220 Volt","name:ru":"220 вольт",shop:"hardware"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Harbor Freight Tools":{name:"Harbor Freight Tools",icon:"temaki-tools",imageURL:"https://graph.facebook.com/harborfreight/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5654601",shop:"hardware"},addTags:{brand:"Harbor Freight Tools","brand:wikidata":"Q5654601","brand:wikipedia":"en:Harbor Freight Tools",name:"Harbor Freight Tools",shop:"hardware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Home Hardware":{name:"Home Hardware",icon:"temaki-tools",imageURL:"https://graph.facebook.com/homehardwarestores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3139611",shop:"hardware"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware",shop:"hardware"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/hardware/K-Rauta":{name:"K-Rauta",icon:"temaki-tools",imageURL:"https://graph.facebook.com/KRautaSuomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4206187",shop:"hardware"},addTags:{brand:"K-Rauta","brand:wikidata":"Q4206187","brand:wikipedia":"fi:K-Rauta",name:"K-Rauta",shop:"hardware"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Kodin Terra":{name:"Kodin Terra",icon:"temaki-tools",imageURL:"https://graph.facebook.com/KodinTerraPori/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11872038",shop:"hardware"},addTags:{brand:"Kodin Terra","brand:wikidata":"Q11872038","brand:wikipedia":"fi:Kodin Terra",name:"Kodin Terra",shop:"hardware"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/hardware/True Value":{name:"True Value",icon:"temaki-tools",imageURL:"https://graph.facebook.com/TrueValue/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7847545",shop:"hardware"},addTags:{brand:"True Value","brand:wikidata":"Q7847545","brand:wikipedia":"en:True Value",name:"True Value",shop:"hardware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Würth":{name:"Würth",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Wuerth.Group/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q679750",shop:"hardware"},addTags:{brand:"Würth","brand:wikidata":"Q679750","brand:wikipedia":"de:Würth-Gruppe",name:"Würth",shop:"hardware"},countryCodes:["be","de","fi","fr","it","no"],terms:[],matchScore:2,suggestion:true},"shop/hardware/Мосхозторг":{name:"Мосхозторг",icon:"temaki-tools",imageURL:"https://graph.facebook.com/MosHozTorg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62499092",shop:"hardware"},addTags:{brand:"Мосхозторг","brand:wikidata":"Q62499092",name:"Мосхозторг",shop:"hardware"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/hardware/ロフト":{name:"ロフト",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Only.at.Loft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5358428",shop:"hardware"},addTags:{brand:"ロフト","brand:en":"Loft","brand:ja":"ロフト","brand:wikidata":"Q5358428","brand:wikipedia":"ja:ロフト (雑貨店)",name:"ロフト","name:en":"Loft","name:ja":"ロフト",shop:"hardware"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/health_food/Holland & Barrett":{name:"Holland & Barrett",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1201862607575093249/nSY-jIIi_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5880870",shop:"health_food"},addTags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"},countryCodes:["gb","ie","nl"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Amplifon":{name:"Amplifon",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/AmplifonGroupCareers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q477222",shop:"hearing_aids"},addTags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"},terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Audika":{name:"Audika",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/audikafrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2870745",shop:"hearing_aids"},addTags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Geers":{name:"Geers",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/geers.hoerakustik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1497707",shop:"hearing_aids"},addTags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"},countryCodes:["de","pl"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Kind Hörgeräte":{name:"Kind Hörgeräte",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/kindhoerenundsehen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43598590",shop:"hearing_aids"},addTags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"},countryCodes:["de"],terms:["kind"],matchScore:2,suggestion:true},"shop/hearing_aids/Miracle-Ear":{name:"Miracle-Ear",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/miracleear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17108572",shop:"hearing_aids"},addTags:{brand:"Miracle-Ear","brand:wikidata":"Q17108572","brand:wikipedia":"en:Miracle-Ear",name:"Miracle-Ear",shop:"hearing_aids"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Neuroth":{name:"Neuroth",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/NeurothAG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15836645",shop:"hearing_aids"},addTags:{brand:"Neuroth","brand:wikidata":"Q15836645","brand:wikipedia":"de:Neuroth AG",name:"Neuroth",shop:"hearing_aids"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/hifi/Bang & Olufsen":{name:"Bang & Olufsen",icon:"temaki-speaker",imageURL:"https://graph.facebook.com/bangolufsenusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q790020",shop:"hifi"},addTags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/Bose":{name:"Bose",icon:"temaki-speaker",imageURL:"https://graph.facebook.com/Bose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q328568",shop:"hifi"},addTags:{brand:"Bose","brand:wikidata":"Q328568","brand:wikipedia":"en:Bose Corporation",name:"Bose",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/Devialet":{name:"Devialet",icon:"temaki-speaker",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDEVIALET-ingenierie-Logo-3.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3025419",shop:"hifi"},addTags:{brand:"Devialet","brand:wikidata":"Q3025419","brand:wikipedia":"fr:Devialet",name:"Devialet",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/Harman Kardon":{name:"Harman Kardon",icon:"temaki-speaker",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHarman%20Kardon%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1476454",shop:"hifi"},addTags:{brand:"Harman Kardon","brand:wikidata":"Q1476454","brand:wikipedia":"en:Harman Kardon",name:"Harman Kardon",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/JBL":{name:"JBL",icon:"temaki-speaker",imageURL:"https://graph.facebook.com/JBL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1153754",shop:"hifi"},addTags:{brand:"JBL","brand:wikidata":"Q1153754","brand:wikipedia":"en:JBL",name:"JBL",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hobby/アニメイト":{name:"アニメイト",icon:"fas-dragon",imageURL:"https://pbs.twimg.com/profile_images/1098862296787382272/pLo1nSbN_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1041890",shop:"hobby"},addTags:{brand:"アニメイト","brand:en":"Animate","brand:ja":"アニメイト","brand:wikidata":"Q1041890","brand:wikipedia":"ja:アニメイト",name:"アニメイト","name:en":"Animate","name:ja":"アニメイト",shop:"hobby"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/houseware/At Home":{name:"At Home",icon:"fas-blender",imageURL:"https://graph.facebook.com/AtHomeStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5522290",shop:"houseware"},addTags:{brand:"At Home","brand:wikidata":"Q5522290","brand:wikipedia":"en:At Home (store)",name:"At Home",shop:"houseware"},countryCodes:["us"],terms:["garden ridge"],matchScore:2,suggestion:true},"shop/houseware/Bed Bath & Beyond":{name:"Bed Bath & Beyond",icon:"fas-blender",imageURL:"https://graph.facebook.com/BedBathAndBeyond/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q813782",shop:"houseware"},addTags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"},countryCodes:["ca","mx","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Blokker":{name:"Blokker",icon:"fas-blender",imageURL:"https://graph.facebook.com/BlokkerNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q884934",shop:"houseware"},addTags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Cervera":{name:"Cervera",icon:"fas-blender",imageURL:"https://graph.facebook.com/CerveraAB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10447179",shop:"houseware"},addTags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/houseware/HomeGoods":{name:"HomeGoods",icon:"fas-blender",imageURL:"https://graph.facebook.com/Homegoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5887941",shop:"houseware"},addTags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Kitchen Collection":{name:"Kitchen Collection",icon:"fas-blender",imageURL:"https://graph.facebook.com/KitchenCollectionStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64149036",shop:"houseware"},addTags:{brand:"Kitchen Collection","brand:wikidata":"Q64149036",name:"Kitchen Collection",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Lagerhaus":{name:"Lagerhaus",icon:"fas-blender",imageURL:"https://graph.facebook.com/lagerhaus.se/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10553211",shop:"houseware"},addTags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"houseware"},terms:[],matchScore:2,suggestion:true},"shop/houseware/Lakeland":{name:"Lakeland",icon:"fas-blender",imageURL:"https://graph.facebook.com/LakelandUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16256199",shop:"houseware"},addTags:{brand:"Lakeland","brand:wikidata":"Q16256199","brand:wikipedia":"en:Lakeland (company)",name:"Lakeland",shop:"houseware"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Le Creuset":{name:"Le Creuset",icon:"fas-blender",imageURL:"https://graph.facebook.com/lecreuset/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q555861",shop:"houseware"},addTags:{brand:"Le Creuset","brand:wikidata":"Q555861","brand:wikipedia":"en:Le Creuset",name:"Le Creuset",shop:"houseware"},terms:[],matchScore:2,suggestion:true},"shop/houseware/Marskramer":{name:"Marskramer",icon:"fas-blender",imageURL:"https://graph.facebook.com/marskramer.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2305917",shop:"houseware"},addTags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Old Time Pottery":{name:"Old Time Pottery",icon:"fas-blender",imageURL:"https://graph.facebook.com/oldtimepottery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7085222",shop:"houseware"},addTags:{brand:"Old Time Pottery","brand:wikidata":"Q7085222","brand:wikipedia":"en:Old Time Pottery",name:"Old Time Pottery",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Stokes":{name:"Stokes",icon:"fas-blender",imageURL:"https://graph.facebook.com/StokesStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66481382",shop:"houseware"},addTags:{brand:"Stokes","brand:wikidata":"Q66481382",name:"Stokes",shop:"houseware"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Sur La Table":{name:"Sur La Table",icon:"fas-blender",imageURL:"https://graph.facebook.com/SurLaTable/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7645220",shop:"houseware"},addTags:{brand:"Sur La Table","brand:wikidata":"Q7645220","brand:wikipedia":"en:Sur La Table",name:"Sur La Table",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/The Container Store":{name:"The Container Store",icon:"fas-blender",imageURL:"https://graph.facebook.com/containerstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7727445",shop:"houseware"},addTags:{brand:"The Container Store","brand:wikidata":"Q7727445","brand:wikipedia":"en:The Container Store",name:"The Container Store",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/The Range":{name:"The Range",icon:"fas-blender",imageURL:"https://graph.facebook.com/therange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7759409",shop:"houseware"},addTags:{brand:"The Range","brand:wikidata":"Q7759409",name:"The Range",shop:"houseware"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Think Kitchen":{name:"Think Kitchen",icon:"fas-blender",imageURL:"https://graph.facebook.com/thinkkitchenstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66481390",shop:"houseware"},addTags:{brand:"Think Kitchen","brand:wikidata":"Q66481390",name:"Think Kitchen",shop:"houseware"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Tuesday Morning":{name:"Tuesday Morning",icon:"fas-blender",imageURL:"https://graph.facebook.com/TuesdayMorning/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7851426",shop:"houseware"},addTags:{brand:"Tuesday Morning","brand:wikidata":"Q7851426","brand:wikipedia":"en:Tuesday Morning",name:"Tuesday Morning",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/WMF":{name:"WMF",icon:"fas-blender",imageURL:"https://graph.facebook.com/WMF/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q451423",shop:"houseware"},addTags:{brand:"WMF","brand:wikidata":"Q451423","brand:wikipedia":"en:WMF Group",name:"WMF",shop:"houseware"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Williams-Sonoma":{name:"Williams-Sonoma",icon:"fas-blender",imageURL:"https://graph.facebook.com/WilliamsSonoma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2581220",shop:"houseware"},addTags:{brand:"Williams-Sonoma","brand:wikidata":"Q2581220","brand:wikipedia":"en:Williams-Sonoma",name:"Williams-Sonoma",shop:"houseware"},countryCodes:["ca","us"],terms:["william sonoma"],matchScore:2,suggestion:true},"shop/houseware/Xenos":{name:"Xenos",icon:"fas-blender",imageURL:"https://graph.facebook.com/XenosNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16547960",shop:"houseware"},addTags:{brand:"Xenos","brand:wikidata":"Q16547960","brand:wikipedia":"nl:Xenos",name:"Xenos",shop:"houseware"},countryCodes:["de","nl"],terms:[],matchScore:2,suggestion:true},"shop/houseware/京王アートマン":{name:"京王アートマン",icon:"fas-blender",imageURL:"https://graph.facebook.com/keio.atman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11374580",shop:"houseware"},addTags:{brand:"京王アートマン","brand:en":"Keio Atman","brand:ja":"京王アートマン","brand:wikidata":"Q11374580","brand:wikipedia":"ja:京王アートマン",name:"京王アートマン","name:en":"Keio Atman","name:ja":"京王アートマン",shop:"houseware"},countryCodes:["jp"],terms:["アートマン"],matchScore:2,suggestion:true},"shop/interior_decoration/Centrakor":{name:"Centrakor",icon:"maki-shop",imageURL:"https://graph.facebook.com/Centrakor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64079345",shop:"interior_decoration"},addTags:{brand:"Centrakor","brand:wikidata":"Q64079345","brand:wikipedia":"fr:Centrakor",name:"Centrakor",shop:"interior_decoration"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Depot":{name:"Depot",icon:"maki-shop",imageURL:"https://graph.facebook.com/DEPOTonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191740",shop:"interior_decoration"},addTags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Fired Earth":{name:"Fired Earth",icon:"maki-shop",imageURL:"https://graph.facebook.com/FiredEarth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20594569",shop:"interior_decoration"},addTags:{brand:"Fired Earth","brand:wikidata":"Q20594569",name:"Fired Earth",shop:"interior_decoration"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Hemtex":{name:"Hemtex",icon:"maki-shop",imageURL:"https://graph.facebook.com/hemtex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10521868",shop:"interior_decoration"},addTags:{brand:"Hemtex","brand:wikidata":"Q10521868","brand:wikipedia":"sv:Hemtex",name:"Hemtex",shop:"interior_decoration"},countryCodes:["ee","fi","se"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/HomeSense":{name:"HomeSense",icon:"maki-shop",imageURL:"https://graph.facebook.com/HomesenseUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16844433",shop:"interior_decoration"},addTags:{brand:"HomeSense","brand:wikidata":"Q16844433","brand:wikipedia":"en:HomeSense",name:"HomeSense",shop:"interior_decoration"},countryCodes:["ca","gb","ie","us"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Kirkland's":{name:"Kirkland's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Kirklands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6415714",shop:"interior_decoration"},addTags:{brand:"Kirkland's","brand:wikidata":"Q6415714","brand:wikipedia":"en:Kirkland's",name:"Kirkland's",shop:"interior_decoration"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Pier 1 Imports":{name:"Pier 1 Imports",icon:"maki-shop",imageURL:"https://graph.facebook.com/pier1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7191691",shop:"interior_decoration"},addTags:{brand:"Pier 1 Imports","brand:wikidata":"Q7191691","brand:wikipedia":"en:Pier 1 Imports",name:"Pier 1 Imports",shop:"interior_decoration"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Ten Thousand Villages":{name:"Ten Thousand Villages",icon:"maki-shop",imageURL:"https://graph.facebook.com/TenThousandVillages/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2403252",shop:"interior_decoration"},addTags:{brand:"Ten Thousand Villages","brand:wikidata":"Q2403252","brand:wikipedia":"en:Ten Thousand Villages",fair_trade:"only",name:"Ten Thousand Villages",shop:"interior_decoration"},countryCodes:["ca","us"],terms:["10 thousand villages","10,000 villages"],matchScore:2,suggestion:true},"shop/interior_decoration/World Market":{name:"World Market",icon:"maki-shop",imageURL:"https://graph.facebook.com/worldmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5174750",shop:"interior_decoration"},addTags:{brand:"World Market","brand:wikidata":"Q5174750","brand:wikipedia":"en:Cost Plus World Market",name:"World Market",official_name:"Cost Plus World Market",shop:"interior_decoration"},countryCodes:["us"],terms:["cost plus"],matchScore:2,suggestion:true},"shop/jewelry/Alex and Ani":{name:"Alex and Ani",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/alexandaniusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16198810",shop:"jewelry"},addTags:{brand:"Alex and Ani","brand:wikidata":"Q16198810","brand:wikipedia":"en:Alex and Ani",name:"Alex and Ani",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Apart":{name:"Apart",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/BizuteriaApart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11686561",shop:"jewelry"},addTags:{brand:"Apart","brand:wikidata":"Q11686561","brand:wikipedia":"pl:Apart",name:"Apart",shop:"jewelry"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Bijou Brigitte":{name:"Bijou Brigitte",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/bijoubrigitte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q599545",shop:"jewelry"},addTags:{brand:"Bijou Brigitte","brand:wikidata":"Q599545","brand:wikipedia":"de:Bijou Brigitte",name:"Bijou Brigitte",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Cartier":{name:"Cartier",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/cartier.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q538587",shop:"jewelry"},addTags:{brand:"Cartier","brand:wikidata":"Q538587","brand:wikipedia":"en:Cartier (jeweler)",name:"Cartier",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Charm Diamond Centres":{name:"Charm Diamond Centres",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/CharmDiamonds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5086396",shop:"jewelry"},addTags:{brand:"Charm Diamond Centres","brand:wikidata":"Q5086396","brand:wikipedia":"en:Charm Diamond Centres",name:"Charm Diamond Centres",shop:"jewelry"},countryCodes:["ca"],terms:["charm diamond","charm diamond centre"],matchScore:2,suggestion:true},"shop/jewelry/Chisholm Hunter":{name:"Chisholm Hunter",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/ChisholmHunterOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66662001",shop:"jewelry"},addTags:{brand:"Chisholm Hunter","brand:wikidata":"Q66662001",name:"Chisholm Hunter",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Christ":{name:"Christ",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/juwelierchrist/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1077957",shop:"jewelry"},addTags:{brand:"Christ","brand:wikidata":"Q1077957","brand:wikipedia":"de:Christ (Juwelier)",name:"Christ",shop:"jewelry"},countryCodes:["ch","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/David Yurman":{name:"David Yurman",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/DavidYurman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5241390",shop:"jewelry"},addTags:{brand:"David Yurman","brand:wikidata":"Q5241390","brand:wikipedia":"en:David Yurman",name:"David Yurman",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Ernest Jones":{name:"Ernest Jones",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/ernestjonesjewellers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5393358",shop:"jewelry"},addTags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/F.Hinds":{name:"F.Hinds",icon:"maki-jewelry-store",imageURL:"https://pbs.twimg.com/profile_images/859360908304371712/lYv3bPA7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5423915",shop:"jewelry"},addTags:{brand:"F.Hinds","brand:wikidata":"Q5423915","brand:wikipedia":"en:F. Hinds",name:"F.Hinds",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Fred Meyer":{name:"Fred Meyer",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/fredmeyer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5495932",shop:"jewelry"},addTags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Goldsmiths":{name:"Goldsmiths",icon:"maki-jewelry-store",imageURL:"https://pbs.twimg.com/profile_images/1161193150247047170/JWBAlWqx_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16993095",shop:"jewelry"},addTags:{brand:"Goldsmiths","brand:wikidata":"Q16993095","brand:wikipedia":"en:Goldsmiths (retailer)",name:"Goldsmiths",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Guldfynd":{name:"Guldfynd",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Guldfynd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q49099223",shop:"jewelry"},addTags:{brand:"Guldfynd","brand:wikidata":"Q49099223","brand:wikipedia":"sv:Guldfynd",name:"Guldfynd",shop:"jewelry"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/H.Samuel":{name:"H.Samuel",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/HSamuelTheJeweller/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5628558",shop:"jewelry"},addTags:{brand:"H.Samuel","brand:wikidata":"Q5628558","brand:wikipedia":"en:H. Samuel",name:"H.Samuel",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Helzberg Diamonds":{name:"Helzberg Diamonds",icon:"maki-jewelry-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHelzberg%20Diamonds%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16995161",shop:"jewelry"},addTags:{brand:"Helzberg Diamonds","brand:wikidata":"Q16995161","brand:wikipedia":"en:Helzberg Diamonds",name:"Helzberg Diamonds",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Histoire d'Or":{name:"Histoire d'Or",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/HistoiredOr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62529245",shop:"jewelry"},addTags:{brand:"Histoire d'Or","brand:wikidata":"Q62529245",name:"Histoire d'Or",shop:"jewelry"},countryCodes:["be","fr","it","nl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/James Avery Jewelry":{name:"James Avery Jewelry",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/JamesAvery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6129024",shop:"jewelry"},addTags:{brand:"James Avery Jewelry","brand:wikidata":"Q6129024","brand:wikipedia":"en:James Avery Artisan Jewelry",name:"James Avery Jewelry",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Jared":{name:"Jared",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/JaredTheGalleriaOfJewelry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62029282",shop:"jewelry"},addTags:{brand:"Jared","brand:wikidata":"Q62029282",name:"Jared",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Julien d'Orcel":{name:"Julien d'Orcel",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/juliendorcel.bijouteries/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62497463",shop:"jewelry"},addTags:{brand:"Julien d'Orcel","brand:wikidata":"Q62497463",name:"Julien d'Orcel",shop:"jewelry"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Kay Jewelers":{name:"Kay Jewelers",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/KayJewelers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62029290",shop:"jewelry"},addTags:{brand:"Kay Jewelers","brand:wikidata":"Q62029290",name:"Kay Jewelers",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Lucardi":{name:"Lucardi",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/LucardiJuweliers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13774940",shop:"jewelry"},addTags:{brand:"Lucardi","brand:wikidata":"Q13774940","brand:wikipedia":"nl:Lucardi",name:"Lucardi",shop:"jewelry"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Michael Hill":{name:"Michael Hill",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/MichaelHillJ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3308250",shop:"jewelry"},addTags:{brand:"Michael Hill","brand:wikidata":"Q3308250","brand:wikipedia":"en:Michael Hill Jeweller",name:"Michael Hill",shop:"jewelry"},countryCodes:["au","ca","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/PNJ":{name:"PNJ",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/PNJ.COM.VN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61129183",shop:"jewelry"},addTags:{brand:"PNJ","brand:wikidata":"Q61129183","brand:wikipedia":"vi:PNJ",name:"PNJ",shop:"jewelry"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Pandora":{name:"Pandora",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/PANDORA.Japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2241604",shop:"jewelry"},addTags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Peoples Jewellers":{name:"Peoples Jewellers",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Peoples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64995558",shop:"jewelry"},addTags:{brand:"Peoples Jewellers","brand:wikidata":"Q64995558",name:"Peoples Jewellers",shop:"jewelry"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Swarovski":{name:"Swarovski",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/SWAROVSKI.NorthAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q611115",shop:"jewelry"},addTags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Thomas Sabo":{name:"Thomas Sabo",icon:"maki-jewelry-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTHOMAS%20SABO%20Unternehmenslogo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q13415716",shop:"jewelry"},addTags:{brand:"Thomas Sabo","brand:wikidata":"Q13415716","brand:wikipedia":"en:Thomas Sabo",name:"Thomas Sabo",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Tiffany & Company":{name:"Tiffany & Company",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Tiffany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1066858",shop:"jewelry"},addTags:{brand:"Tiffany & Company","brand:wikidata":"Q1066858","brand:wikipedia":"en:Tiffany & Co.",name:"Tiffany & Company",official_name:"Tiffany & Co.",shop:"jewelry"},countryCodes:["us"],terms:["tiffany","tiffany's"],matchScore:2,suggestion:true},"shop/jewelry/Tous":{name:"Tous",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/tousjewelry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3815128",shop:"jewelry"},addTags:{brand:"Tous","brand:wikidata":"Q3815128","brand:wikipedia":"en:Tous (company)",name:"Tous",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Warren James":{name:"Warren James",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/warrenjamesjewellers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19604616",shop:"jewelry"},addTags:{brand:"Warren James","brand:wikidata":"Q19604616","brand:wikipedia":"en:Warren James Jewellers",name:"Warren James",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Zales":{name:"Zales",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Zales/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8065305",shop:"jewelry"},addTags:{brand:"Zales","brand:wikidata":"Q8065305","brand:wikipedia":"en:Zale Corporation",name:"Zales",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Адамас":{name:"Адамас",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/adamas.club/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393709",shop:"jewelry"},addTags:{brand:"Адамас","brand:en":"Adamas","brand:ru":"Адамас","brand:wikidata":"Q62393709",name:"Адамас","name:en":"Adamas","name:ru":"Адамас",shop:"jewelry"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Lietuvos spauda":{name:"Lietuvos spauda",icon:"fas-store",imageURL:"https://graph.facebook.com/narvesen.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6514414",shop:"kiosk"},addTags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Narvesen":{name:"Narvesen",icon:"fas-store",imageURL:"https://graph.facebook.com/narvesen.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6514414",shop:"kiosk"},addTags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"},countryCodes:["lt","lv","no"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Pressbyrån":{name:"Pressbyrån",icon:"fas-store",imageURL:"https://graph.facebook.com/Pressbyran/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2489072",shop:"kiosk"},addTags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/R-Kioski":{name:"R-Kioski",icon:"fas-store",imageURL:"https://graph.facebook.com/rkioski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1571400",shop:"kiosk"},addTags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Ruch":{name:"Ruch",icon:"fas-store",imageURL:"https://graph.facebook.com/ruch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1260314",shop:"kiosk"},addTags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Tisak":{name:"Tisak",icon:"fas-store",imageURL:"https://graph.facebook.com/tisakmedia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12643627",shop:"kiosk"},addTags:{brand:"Tisak","brand:wikidata":"Q12643627","brand:wikipedia":"hr:Tisak (tvrtka)",name:"Tisak",shop:"kiosk"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/k kiosk":{name:"k kiosk",icon:"fas-store",imageURL:"https://graph.facebook.com/kkiosk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60381703",shop:"kiosk"},addTags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/キヨスク":{name:"キヨスク",icon:"fas-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKiosk%20logos.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1334796",shop:"kiosk"},addTags:{brand:"キヨスク","brand:en":"KIOSK","brand:ja":"キヨスク","brand:wikidata":"Q1334796","brand:wikipedia":"ja:キヨスク",name:"キヨスク","name:en":"KIOSK","name:ja":"キヨスク",shop:"kiosk"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Cuisinella":{name:"Cuisinella",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/CuisinellaFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3007012",shop:"kitchen"},addTags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"},countryCodes:["fr","tn"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Ixina":{name:"Ixina",icon:"temaki-kitchen_sink",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FIxina.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3156424",shop:"kitchen"},addTags:{brand:"Ixina","brand:wikidata":"Q3156424","brand:wikipedia":"fr:Ixina",name:"Ixina",shop:"kitchen"},countryCodes:["ae","au","be","bf","bh","bj","ca","ci","cm","cn","cz","dz","ee","eg","fr","gh","hr","ke","kw","lu","ly","ma","mu","nl","pl","qa","ro","ru","sa","se","sn","tg","th","tn","vn"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Magnet":{name:"Magnet",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/MagnetKitchens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6731427",shop:"kitchen"},addTags:{brand:"Magnet","brand:wikidata":"Q6731427","brand:wikipedia":"en:Magnet Kitchens",name:"Magnet",shop:"kitchen"},countryCodes:["gb"],terms:["magnet kitchens"],matchScore:2,suggestion:true},"shop/kitchen/Mobalpa":{name:"Mobalpa",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/Mobalpa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317571",shop:"kitchen"},addTags:{brand:"Mobalpa","brand:wikidata":"Q3317571","brand:wikipedia":"fr:Mobalpa",name:"Mobalpa",shop:"kitchen"},countryCodes:["be","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Schmidt":{name:"Schmidt",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/Schmidt.HomeDesign/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3487620",shop:"kitchen"},addTags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"},countryCodes:["be","es","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/SoCoo'c":{name:"SoCoo'c",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/SoCooc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62783840",shop:"kitchen"},addTags:{brand:"SoCoo'c","brand:wikidata":"Q62783840","brand:wikipedia":"fr:SoCoo'c",name:"SoCoo'c",shop:"kitchen"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/lottery/Loterías y Apuestas del Estado":{name:"Loterías y Apuestas del Estado",icon:"fas-ticket-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogotipo%20de%20Loter%C3%ADas%20y%20Apuestas%20del%20Estado.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1311806",shop:"lottery"},addTags:{brand:"Loterías y Apuestas del Estado","brand:wikidata":"Q1311806","brand:wikipedia":"es:Loterías y Apuestas del Estado",name:"Loterías y Apuestas del Estado",shop:"lottery"},countryCodes:["es"],terms:["apuestas del estado","lotería del estado","loterías del estado"],matchScore:2,suggestion:true},"shop/lottery/ONCE":{name:"ONCE",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/ONCE.org/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1750397",shop:"lottery"},addTags:{brand:"ONCE","brand:wikidata":"Q1750397","brand:wikipedia":"es:Organización Nacional de Ciegos Españoles",name:"ONCE",official_name:"Organización Nacional de Ciegos Españoles",shop:"lottery"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/massage/Hand & Stone Massage and Facial Spa":{name:"Hand & Stone Massage and Facial Spa",icon:"temaki-spa",imageURL:"https://graph.facebook.com/handandstoneusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55613342",shop:"massage"},addTags:{brand:"Hand & Stone Massage and Facial Spa","brand:wikidata":"Q55613342","brand:wikipedia":"en:Hand & Stone Massage and Facial Spa",name:"Hand & Stone Massage and Facial Spa",shop:"massage"},countryCodes:["us"],terms:["hand and stone massage"],matchScore:2,suggestion:true},"shop/massage/Massage Envy":{name:"Massage Envy",icon:"temaki-spa",imageURL:"https://graph.facebook.com/MassageEnvy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22922899",shop:"massage"},addTags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"},countryCodes:["us"],terms:["massage envy spa"],matchScore:2,suggestion:true},"shop/massage/Massage Heights":{name:"Massage Heights",icon:"temaki-spa",imageURL:"https://graph.facebook.com/MassageHeights/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64573956",shop:"massage"},addTags:{brand:"Massage Heights","brand:wikidata":"Q64573956",name:"Massage Heights",shop:"massage"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/medical_supply/Pofam-Poznań":{name:"Pofam-Poznań",icon:"fas-crutch",imageURL:"https://graph.facebook.com/381601628634155/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62057457",shop:"medical_supply"},addTags:{brand:"Pofam-Poznań","brand:wikidata":"Q62057457",name:"Pofam-Poznań",shop:"medical_supply"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/medical_supply/Ортека":{name:"Ортека",icon:"fas-crutch",imageURL:"https://graph.facebook.com/orteka.rus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393660",shop:"medical_supply"},addTags:{brand:"Ортека","brand:wikidata":"Q62393660",name:"Ортека",shop:"medical_supply"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/3 Store":{name:"3 Store",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ThreeUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q407009",shop:"mobile_phone"},addTags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"},countryCodes:["gb","it"],terms:["3","three","three store"],matchScore:2,suggestion:true},"shop/mobile_phone/A1":{name:"A1",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/A1Fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688755",shop:"mobile_phone"},addTags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"mobile_phone"},countryCodes:["at","bg","by","hr","si"],terms:["velcom","velcom|a1","велком"],matchScore:2,suggestion:true},"shop/mobile_phone/AT&T":{name:"AT&T",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ATT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q298594",shop:"mobile_phone"},addTags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"},countryCodes:["mx","us"],terms:["att mobile","att mobility","att wireless"],matchScore:2,suggestion:true},"shop/mobile_phone/Bell":{name:"Bell",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/BellCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2894594",shop:"mobile_phone"},addTags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"},countryCodes:["ca"],terms:["bell mobile","bell mobility","bell wireless"],matchScore:2,suggestion:true},"shop/mobile_phone/Best Buy Mobile":{name:"Best Buy Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/bestbuy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q533415",shop:"mobile_phone"},addTags:{brand:"Best Buy Mobile","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy Mobile",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Bitė":{name:"Bitė",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/bitelietuva/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q796010",shop:"mobile_phone"},addTags:{brand:"Bitė","brand:wikidata":"Q796010","brand:wikipedia":"lt:Bitės grupė",name:"Bitė",shop:"mobile_phone"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Boost Mobile":{name:"Boost Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/boostmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943790",shop:"mobile_phone"},addTags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"},countryCodes:["us"],terms:["boost"],matchScore:2,suggestion:true},"shop/mobile_phone/Bouygues Telecom":{name:"Bouygues Telecom",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/bouyguestelecom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q581438",shop:"mobile_phone"},addTags:{brand:"Bouygues Telecom","brand:wikidata":"Q581438","brand:wikipedia":"fr:Bouygues Telecom",name:"Bouygues Telecom",shop:"mobile_phone"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Carphone Warehouse":{name:"Carphone Warehouse",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/carphonewarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118046",shop:"mobile_phone"},addTags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"},countryCodes:["by","gb","ie"],terms:["the carphone warehouse"],matchScore:2,suggestion:true},"shop/mobile_phone/Chatr":{name:"Chatr",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/chatrmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5087766",shop:"mobile_phone"},addTags:{brand:"Chatr","brand:wikidata":"Q5087766","brand:wikipedia":"en:Chatr",name:"Chatr",shop:"mobile_phone"},countryCodes:["ca"],terms:["chatr mobile"],matchScore:2,suggestion:true},"shop/mobile_phone/Claro":{name:"Claro",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ClaroCol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1770208",shop:"mobile_phone"},addTags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Cricket Wireless":{name:"Cricket Wireless",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/cricketwireless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5184987",shop:"mobile_phone"},addTags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"},countryCodes:["us"],terms:["cricket"],matchScore:2,suggestion:true},"shop/mobile_phone/Digicel":{name:"Digicel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/digicel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2117506",shop:"mobile_phone"},addTags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/EE":{name:"EE",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5322942",shop:"mobile_phone"},addTags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Entel":{name:"Entel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/entelsa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q450420",shop:"mobile_phone"},addTags:{brand:"Entel","brand:wikidata":"Q450420","brand:wikipedia":"en:Entel (Chile)",name:"Entel",shop:"mobile_phone"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Fido":{name:"Fido",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/fidomobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3071471",shop:"mobile_phone"},addTags:{brand:"Fido","brand:wikidata":"Q3071471","brand:wikipedia":"en:Fido Solutions",name:"Fido",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Freedom Mobile":{name:"Freedom Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/frdmmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8023931",shop:"mobile_phone"},addTags:{brand:"Freedom Mobile","brand:wikidata":"Q8023931","brand:wikipedia":"en:Freedom Mobile",name:"Freedom Mobile",shop:"mobile_phone"},countryCodes:["ca"],terms:["freedom","wind mobile"],matchScore:2,suggestion:true},"shop/mobile_phone/Koodo":{name:"Koodo",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Koodo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6430529",shop:"mobile_phone"},addTags:{brand:"Koodo","brand:wikidata":"Q6430529","brand:wikipedia":"en:Koodo Mobile",name:"Koodo",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/MEO":{name:"MEO",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMeo%20logo%20pt.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3306167",shop:"mobile_phone"},addTags:{brand:"MEO","brand:wikidata":"Q3306167","brand:wikipedia":"en:MEO (telecommunications company)",name:"MEO",shop:"mobile_phone"},terms:["loja meo"],matchScore:2,suggestion:true},"shop/mobile_phone/MTN":{name:"MTN",icon:"fas-mobile-alt",imageURL:"https://pbs.twimg.com/profile_images/576253333133877248/27GSSNb8_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q1813361",shop:"mobile_phone"},addTags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"},terms:["agence mtn"],matchScore:2,suggestion:true},"shop/mobile_phone/MetroPCS":{name:"MetroPCS",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/MetroByTMobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1925685",shop:"mobile_phone"},addTags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Mobilcom Debitel":{name:"Mobilcom Debitel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/mobilcomdebitel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q344744",shop:"mobile_phone"},addTags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"},countryCodes:["de","ir"],terms:["debitel"],matchScore:2,suggestion:true},"shop/mobile_phone/Moov":{name:"Moov",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/moovcotedivoire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3323637",shop:"mobile_phone"},addTags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"},countryCodes:["ci","tg"],terms:["agence moov"],matchScore:2,suggestion:true},"shop/mobile_phone/Movistar":{name:"Movistar",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/movistar.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q967735",shop:"mobile_phone"},addTags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/NOS":{name:"NOS",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLog%C3%B3tipo%20da%20NOS.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q136331",shop:"mobile_phone"},addTags:{brand:"NOS","brand:wikidata":"Q136331","brand:wikipedia":"en:NOS (Portuguese media company)",name:"NOS",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/O2":{name:"O2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/o2uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1759255",shop:"mobile_phone"},addTags:{brand:"O2","brand:wikidata":"Q1759255","brand:wikipedia":"en:Telefónica Europe",name:"O2",shop:"mobile_phone"},countryCodes:["cz","de","gb","ie","sk"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Optie1":{name:"Optie1",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Optie1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393564",shop:"mobile_phone"},addTags:{brand:"Optie1","brand:wikidata":"Q62393564",name:"Optie1",shop:"mobile_phone"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Optus":{name:"Optus",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOptus%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q865038",shop:"mobile_phone"},addTags:{brand:"Optus","brand:wikidata":"Q865038",name:"Optus",shop:"mobile_phone"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Orange":{name:"Orange",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/orange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1431486",shop:"mobile_phone"},addTags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange (entreprise)",name:"Orange",shop:"mobile_phone"},terms:["agence orange"],matchScore:2,suggestion:true},"shop/mobile_phone/Personal":{name:"Personal",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/personalargentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10933021",shop:"mobile_phone"},addTags:{brand:"Personal","brand:wikidata":"Q10933021","brand:wikipedia":"es:Personal (Argentina)",name:"Personal",shop:"mobile_phone"},countryCodes:["ar","py"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Phone House":{name:"Phone House",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/carphonewarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118046",shop:"mobile_phone"},addTags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"},countryCodes:["de","es","fr","nl","pt"],terms:["the phone house"],matchScore:2,suggestion:true},"shop/mobile_phone/Play":{name:"Play",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Play/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7202998",shop:"mobile_phone"},addTags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"pl:Play (sieć telefonii komórkowej)",name:"Play",shop:"mobile_phone"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Plus":{name:"Plus",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/plus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7205598",shop:"mobile_phone"},addTags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Rogers":{name:"Rogers",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Rogers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3439663",shop:"mobile_phone"},addTags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/SFR":{name:"SFR",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/SFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q218765",shop:"mobile_phone"},addTags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"},countryCodes:["fr","lu"],terms:["espace sfr"],matchScore:2,suggestion:true},"shop/mobile_phone/Sprint":{name:"Sprint",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/sprint/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q301965",shop:"mobile_phone"},addTags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/T-Mobile":{name:"T-Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TMobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q327634",shop:"mobile_phone"},addTags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/TIM":{name:"TIM",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TimOfficialPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q144617",shop:"mobile_phone"},addTags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"},countryCodes:["br","it"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Tbooth Wireless":{name:"Tbooth Wireless",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TboothWireless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7690597",shop:"mobile_phone"},addTags:{brand:"Tbooth Wireless","brand:wikidata":"Q7690597",name:"Tbooth Wireless",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telcel":{name:"Telcel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Telcel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3517255",shop:"mobile_phone"},addTags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"},countryCodes:["cu","mx"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Tele2":{name:"Tele2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/WeAreTele2/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q309865",shop:"mobile_phone"},addTags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telekom":{name:"Telekom",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/deutschetelekom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9396",shop:"mobile_phone"},addTags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"},countryCodes:["de","hu","ro","si","sk"],terms:["telekom shop"],matchScore:2,suggestion:true},"shop/mobile_phone/Telenor":{name:"Telenor",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/telenorgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q845632",shop:"mobile_phone"},addTags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telia":{name:"Telia",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/teliacompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q862303",shop:"mobile_phone"},addTags:{brand:"Telia","brand:wikidata":"Q862303","brand:wikipedia":"en:Telia Company",name:"Telia",shop:"mobile_phone"},countryCodes:["dk","fi","lt","no","se"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telstra":{name:"Telstra",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Telstra/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q721162",shop:"mobile_phone"},addTags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telus":{name:"Telus",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/telus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q165858",shop:"mobile_phone"},addTags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Turkcell":{name:"Turkcell",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Turkcell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q283852",shop:"mobile_phone"},addTags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"},countryCodes:["cy","tr"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/U.S. Cellular":{name:"U.S. Cellular",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/USCellular/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2466256",shop:"mobile_phone"},addTags:{brand:"U.S. Cellular","brand:wikidata":"Q2466256","brand:wikipedia":"en:U.S. Cellular",name:"U.S. Cellular",shop:"mobile_phone"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/UQモバイル":{name:"UQモバイル",icon:"fas-mobile-alt",imageURL:"https://pbs.twimg.com/profile_images/875506930256494592/gHnlkGTo_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11252091",shop:"mobile_phone"},addTags:{brand:"UQモバイル","brand:en":"UQ mobile","brand:ja":"UQモバイル","brand:wikidata":"Q11252091","brand:wikipedia":"ja:UQコミュニケーションズ",name:"UQモバイル","name:en":"UQ mobile","name:ja":"UQモバイル",shop:"mobile_phone"},countryCodes:["jp"],terms:["ユーキューモバイル"],matchScore:2,suggestion:true},"shop/mobile_phone/Verizon Wireless":{name:"Verizon Wireless",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/verizon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q919641",shop:"mobile_phone"},addTags:{brand:"Verizon Wireless","brand:wikidata":"Q919641","brand:wikipedia":"en:Verizon Wireless",name:"Verizon Wireless",shop:"mobile_phone"},countryCodes:["us"],terms:["verizon"],matchScore:2,suggestion:true},"shop/mobile_phone/Vidéotron":{name:"Vidéotron",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/videotron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2396830",shop:"mobile_phone"},addTags:{brand:"Vidéotron","brand:wikidata":"Q2396830","brand:wikipedia":"en:Vidéotron",name:"Vidéotron",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Virgin Mobile (Canada)":{name:"Virgin Mobile (Canada)",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/virginmobilecan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3560641",shop:"mobile_phone"},addTags:{brand:"Virgin Mobile","brand:wikidata":"Q3560641","brand:wikipedia":"en:Virgin Mobile Canada",name:"Virgin Mobile",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Vivo":{name:"Vivo",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/vivoGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18301787",shop:"mobile_phone"},addTags:{brand:"Vivo","brand:wikidata":"Q18301787","brand:wikipedia":"en:Vivo (technology company)",name:"Vivo",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Vodafone":{name:"Vodafone",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/vodafoneUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q122141",shop:"mobile_phone"},addTags:{brand:"Vodafone","brand:wikidata":"Q122141","brand:wikipedia":"en:Vodafone",name:"Vodafone",shop:"mobile_phone"},terms:["vodafone shop"],matchScore:2,suggestion:true},"shop/mobile_phone/WIFI_ETECSA":{name:"WIFI_ETECSA",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/etecsa.cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q490323",shop:"mobile_phone"},addTags:{brand:"WIFI_ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"WIFI_ETECSA",shop:"mobile_phone"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/WOW! Mobile Boutique":{name:"WOW! Mobile Boutique",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/wowmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64847598",shop:"mobile_phone"},addTags:{brand:"WOW! Mobile Boutique","brand:wikidata":"Q64847598",name:"WOW! Mobile Boutique",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Wind":{name:"Wind",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Wind/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650467",shop:"mobile_phone"},addTags:{brand:"Wind","brand:wikidata":"Q650467","brand:wikipedia":"en:WIND (Italy)",name:"Wind",shop:"mobile_phone"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/WirelessWave":{name:"WirelessWave",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/wirelesswave/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8026815",shop:"mobile_phone"},addTags:{brand:"WirelessWave","brand:wikidata":"Q8026815",name:"WirelessWave",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Yoigo":{name:"Yoigo",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Yoigo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2630989",shop:"mobile_phone"},addTags:{brand:"Yoigo","brand:wikidata":"Q2630989","brand:wikipedia":"en:Yoigo",name:"Yoigo",shop:"mobile_phone"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/auショップ":{name:"auショップ",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/aubyKDDI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q307110",shop:"mobile_phone"},addTags:{brand:"au","brand:ja":"au","brand:wikidata":"Q307110","brand:wikipedia":"ja:Au (携帯電話)",name:"auショップ","name:en":"au","name:ja":"auショップ",shop:"mobile_phone"},countryCodes:["jp"],terms:["au"],matchScore:2,suggestion:true},"shop/mobile_phone/lifecell":{name:"lifecell",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/lifeua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1936895",shop:"mobile_phone"},addTags:{brand:"lifecell","brand:wikidata":"Q1936895","brand:wikipedia":"uk:Lifecell",name:"lifecell",shop:"mobile_phone"},terms:["магазин lifecell"],matchScore:2,suggestion:true},"shop/mobile_phone/Алло":{name:"Алло",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/allo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18683057",shop:"mobile_phone"},addTags:{brand:"Алло","brand:wikidata":"Q18683057","brand:wikipedia":"uk:Алло (торгова мережа)",name:"Алло",shop:"mobile_phone"},countryCodes:["md","ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Билайн":{name:"Билайн",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Beelinerus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q402880",shop:"mobile_phone"},addTags:{brand:"Билайн","brand:en":"Beeline","brand:wikidata":"Q402880","brand:wikipedia":"en:Beeline (brand)",name:"Билайн","name:en":"Beeline",shop:"mobile_phone"},countryCodes:["kg","kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Евросеть":{name:"Евросеть",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/euroset/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65310",shop:"mobile_phone"},addTags:{brand:"Евросеть","brand:en":"Euroset","brand:wikidata":"Q65310","brand:wikipedia":"en:Euroset",name:"Евросеть","name:en":"Euroset",shop:"mobile_phone"},countryCodes:["by","kz","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Київстар":{name:"Київстар",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/kyivstar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2288463",shop:"mobile_phone"},addTags:{brand:"Київстар","brand:en":"Kyivstar","brand:wikidata":"Q2288463","brand:wikipedia":"en:Kyivstar",name:"Київстар","name:en":"Kyivstar",shop:"mobile_phone"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/МТС":{name:"МТС",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/mts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1368919",shop:"mobile_phone"},addTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Мегафон":{name:"Мегафон",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/MegaFon.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1720713",shop:"mobile_phone"},addTags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"},countryCodes:["ru","tj"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Связной":{name:"Связной",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/svyaznoy.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65371",shop:"mobile_phone"},addTags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"},countryCodes:["by","ru","uz"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Теле2":{name:"Теле2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/WeAreTele2/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q309865",shop:"mobile_phone"},addTags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ソフトバンク":{name:"ソフトバンク",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/SoftBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7553832",shop:"mobile_phone"},addTags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:ja":"ソフトバンク","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom","name:ja":"ソフトバンク",shop:"mobile_phone"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ソフトバンクショップ":{name:"ソフトバンクショップ",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/SoftBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11315281",shop:"mobile_phone"},addTags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:ja":"ソフトバンクショップ","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop","name:ja":"ソフトバンクショップ",shop:"mobile_phone"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ドコモショップ":{name:"ドコモショップ",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/docomo.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q853958",shop:"mobile_phone"},addTags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:ja":"ドコモショップ","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop","name:ja":"ドコモショップ",shop:"mobile_phone"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/ワイモバイル":{name:"ワイモバイル",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FYmobile%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5322556",shop:"mobile_phone"},addTags:{brand:"ワイモバイル","brand:en":"Ymobile","brand:ja":"ワイモバイル","brand:wikidata":"Q5322556","brand:wikipedia":"ja:ワイモバイル",name:"ワイモバイル","name:en":"Ymobile","name:ja":"ワイモバイル",shop:"mobile_phone"},countryCodes:["jp"],terms:["ymobile, y!mobile"],matchScore:2,suggestion:true},"shop/mobile_phone/台灣大哥大":{name:"台灣大哥大",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/taiwanmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5943259",shop:"mobile_phone"},addTags:{brand:"台灣大哥大","brand:en":"Taiwan Mobile","brand:wikidata":"Q5943259","brand:wikipedia":"zh:台灣大哥大","brand:zh":"台灣大哥大",name:"台灣大哥大","name:en":"Taiwan Mobile","name:zh":"台灣大哥大",shop:"mobile_phone"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/ACE Cash Express":{name:"ACE Cash Express",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/acecashexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24260962",shop:"money_lender"},addTags:{brand:"ACE Cash Express","brand:wikidata":"Q24260962","brand:wikipedia":"en:ACE Cash Express",name:"ACE Cash Express",shop:"money_lender"},countryCodes:["us"],terms:["ace"],matchScore:2,suggestion:true},"shop/money_lender/Advance America":{name:"Advance America",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/AdvanceAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4686044",shop:"money_lender"},addTags:{brand:"Advance America","brand:wikidata":"Q4686044",name:"Advance America",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/California Check Cashing Stores":{name:"California Check Cashing Stores",icon:"temaki-money_hand",geometry:["point","area"],tags:{"brand:wikidata":"Q64390932",shop:"money_lender"},addTags:{brand:"California Check Cashing Stores","brand:wikidata":"Q64390932",name:"California Check Cashing Stores",shop:"money_lender"},countryCodes:["us"],terms:["california check cashing"],matchScore:2,suggestion:true},"shop/money_lender/Cash Store":{name:"Cash Store",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/cashstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61943411",shop:"money_lender"},addTags:{brand:"Cash Store","brand:wikidata":"Q61943411",name:"Cash Store",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/CashMax":{name:"CashMax",icon:"temaki-money_hand",geometry:["point","area"],tags:{"brand:wikidata":"Q69365478",shop:"money_lender"},addTags:{brand:"CashMax","brand:wikidata":"Q69365478",name:"CashMax",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/Check Into Cash":{name:"Check Into Cash",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/checkintocash/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16961246",shop:"money_lender"},addTags:{brand:"Check Into Cash","brand:wikidata":"Q16961246","brand:wikipedia":"en:Check Into Cash",name:"Check Into Cash",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/CheckSmart":{name:"CheckSmart",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/166958136649293/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65640213",shop:"money_lender"},addTags:{alt_name:"Check$mart",brand:"CheckSmart","brand:wikidata":"Q65640213",name:"CheckSmart",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/First Virginia":{name:"First Virginia",icon:"temaki-money_hand",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFirst%20Virginia%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q65640051",shop:"money_lender"},addTags:{brand:"First Virginia","brand:wikidata":"Q65640051",name:"First Virginia",shop:"money_lender"},countryCodes:["us"],terms:["1st virginia"],matchScore:2,suggestion:true},"shop/money_lender/Money Mart":{name:"Money Mart",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/moneymartusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6899166",shop:"money_lender"},addTags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/Moneytree":{name:"Moneytree",icon:"temaki-money_hand",geometry:["point","area"],tags:{"brand:wikidata":"Q6899361",shop:"money_lender"},addTags:{brand:"Moneytree","brand:wikidata":"Q6899361","brand:wikipedia":"en:Moneytree",name:"Moneytree",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Harley-Davidson":{name:"Harley-Davidson",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/harley-davidson/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q192814",shop:"motorcycle"},addTags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Honda":{name:"Honda",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/HondaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9584",shop:"motorcycle"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Kawasaki":{name:"Kawasaki",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/kawasaki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6379855",shop:"motorcycle"},addTags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Motortrade":{name:"Motortrade",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/MotortradePh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48803162",shop:"motorcycle"},addTags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Suzuki":{name:"Suzuki",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/SuzukiGlobalOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181642",shop:"motorcycle"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Yamaha":{name:"Yamaha",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/yamahamotorusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q158888",shop:"motorcycle"},addTags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/レッドバロン":{name:"レッドバロン",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/redbaron.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11349759",shop:"motorcycle"},addTags:{brand:"レッドバロン","brand:en":"Red Baron","brand:ja":"レッドバロン","brand:wikidata":"Q11349759","brand:wikipedia":"ja:レッドバロン (企業)",name:"レッドバロン","name:en":"Red Baron","name:ja":"レッドバロン",shop:"motorcycle"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/music/FYE":{name:"FYE",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/FYE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5424141",shop:"music"},addTags:{brand:"FYE","brand:wikidata":"Q5424141","brand:wikipedia":"en:FYE (retailer)",name:"FYE",shop:"music"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/music/HMV":{name:"HMV",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/hmv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10854572",shop:"music"},addTags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"},countryCodes:["ca","gb"],terms:[],matchScore:2,suggestion:true},"shop/music/Sunrise Records":{name:"Sunrise Records",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/sunriserecords/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30600373",shop:"music"},addTags:{brand:"Sunrise Records","brand:wikidata":"Q30600373","brand:wikipedia":"en:Sunrise Records (retailer)",name:"Sunrise Records",shop:"music"},countryCodes:["ca","gb"],terms:[],matchScore:2,suggestion:true},"shop/music/TSUTAYA":{name:"TSUTAYA",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/TSUTAYA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"music"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"},terms:[],matchScore:2,suggestion:true},"shop/music/タワーレコード":{name:"タワーレコード",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/towerrecordsinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3265728",shop:"music"},addTags:{alt_name:"タワレコ",brand:"タワーレコード","brand:en":"Tower Records","brand:ja":"タワーレコード","brand:wikidata":"Q3265728","brand:wikipedia":"ja:タワーレコード",name:"タワーレコード","name:en":"Tower Records","name:ja":"タワーレコード",shop:"music"},countryCodes:["jp"],terms:["タワレコ"],matchScore:2,suggestion:true},"shop/musical_instrument/Guitar Center":{name:"Guitar Center",icon:"fas-guitar",imageURL:"https://graph.facebook.com/GuitarCenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3622794",shop:"musical_instrument"},addTags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/musical_instrument/Long & McQuade":{name:"Long & McQuade",icon:"fas-guitar",imageURL:"https://graph.facebook.com/LongMcQuade/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6672180",shop:"musical_instrument"},addTags:{brand:"Long & McQuade","brand:wikidata":"Q6672180","brand:wikipedia":"en:Long & McQuade",name:"Long & McQuade",shop:"musical_instrument"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Cigo":{name:"Cigo",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/cigo.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391977",shop:"newsagent"},addTags:{brand:"Cigo","brand:wikidata":"Q62391977",name:"Cigo",shop:"newsagent"},countryCodes:["de","nl"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Kolporter":{name:"Kolporter",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/kolporterpl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6427874",shop:"newsagent"},addTags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"newsagent"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Maison de la Presse":{name:"Maison de la Presse",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/260230084083052/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62085960",shop:"newsagent"},addTags:{brand:"Maison de la Presse","brand:wikidata":"Q62085960",name:"Maison de la Presse",shop:"newsagent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Martin's":{name:"Martin's",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/YourMcColls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997477",shop:"newsagent"},addTags:{brand:"Martin's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"Martin's",shop:"newsagent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Primera":{name:"Primera",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/Primera.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2176149",shop:"newsagent"},addTags:{brand:"Primera","brand:wikidata":"Q2176149","brand:wikipedia":"nl:Primera (winkelketen)",name:"Primera",shop:"newsagent"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Relay":{name:"Relay",icon:"fas-newspaper",imageURL:"https://pbs.twimg.com/profile_images/1024284754911416320/NcQ5ml-K_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3424298",shop:"newsagent"},addTags:{brand:"Relay","brand:wikidata":"Q3424298","brand:wikipedia":"en:Relay (shop)",name:"Relay",shop:"newsagent"},terms:[],matchScore:2,suggestion:true},"shop/newsagent/WHSmith":{name:"WHSmith",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/WHSmithuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1548712",shop:"newsagent"},addTags:{brand:"WHSmith","brand:wikidata":"Q1548712","brand:wikipedia":"en:WHSmith",name:"WHSmith",shop:"newsagent"},terms:[],matchScore:2,suggestion:true},"shop/newsagent/k kiosk":{name:"k kiosk",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/kkiosk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60381703",shop:"newsagent"},addTags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"newsagent"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Белсоюзпечать":{name:"Белсоюзпечать",icon:"fas-newspaper",imageURL:"https://pbs.twimg.com/profile_images/1072050933054484480/bEd3Ce1j_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q67723214",shop:"newsagent"},addTags:{brand:"Белсоюзпечать","brand:wikidata":"Q67723214",name:"Белсоюзпечать",shop:"newsagent"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Витебскоблсоюзпечать":{name:"Витебскоблсоюзпечать",icon:"fas-newspaper",imageURL:"https://pbs.twimg.com/profile_images/1072050933054484480/bEd3Ce1j_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q67723214",shop:"newsagent"},addTags:{brand:"Витебскоблсоюзпечать","brand:wikidata":"Q67723214",name:"Витебскоблсоюзпечать",shop:"newsagent"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Первая полоса":{name:"Первая полоса",icon:"fas-newspaper",geometry:["point","area"],tags:{"brand:wikidata":"Q62736412",shop:"newsagent"},addTags:{brand:"Первая полоса","brand:wikidata":"Q62736412",name:"Первая полоса",shop:"newsagent"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Союзпечать":{name:"Союзпечать",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/Belsouzpechat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4430611",shop:"newsagent"},addTags:{brand:"Союзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Союзпечать",shop:"newsagent"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/読売新聞":{name:"読売新聞",icon:"fas-newspaper",imageURL:"https://pbs.twimg.com/profile_images/1091035339232227328/elp0X_L6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q645218",shop:"newsagent"},addTags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/GNC":{name:"GNC",icon:"fas-pills",imageURL:"https://graph.facebook.com/GNCLiveWell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4808595",shop:"nutrition_supplements"},addTags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"},terms:["gnc live well"],matchScore:2,suggestion:true},"shop/nutrition_supplements/Popeye's Supplements":{name:"Popeye's Supplements",icon:"fas-pills",imageURL:"https://graph.facebook.com/popeyessupplements/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71096495",shop:"nutrition_supplements"},addTags:{brand:"Popeye's Supplements","brand:wikidata":"Q71096495",name:"Popeye's Supplements",shop:"nutrition_supplements"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/The Vitamin Shoppe":{name:"The Vitamin Shoppe",icon:"fas-pills",imageURL:"https://graph.facebook.com/THEVITAMINSHOPPE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7772938",shop:"nutrition_supplements"},addTags:{brand:"The Vitamin Shoppe","brand:wikidata":"Q7772938","brand:wikipedia":"en:The Vitamin Shoppe",name:"The Vitamin Shoppe",shop:"nutrition_supplements"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/Vitamin World":{name:"Vitamin World",icon:"fas-pills",imageURL:"https://graph.facebook.com/OfficialVitaminWorld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7936979",shop:"nutrition_supplements"},addTags:{brand:"Vitamin World","brand:wikidata":"Q7936979","brand:wikipedia":"en:Vitamin World",name:"Vitamin World",shop:"nutrition_supplements"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Alain Afflelou":{name:"Alain Afflelou",icon:"maki-optician",imageURL:"https://graph.facebook.com/AlainAfflelouOptico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2829511",shop:"optician"},addTags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"},countryCodes:["be","ch","es","fr","pt"],terms:[],matchScore:2,suggestion:true},"shop/optician/America's Best Contacts & Eyeglasses":{name:"America's Best Contacts & Eyeglasses",icon:"maki-optician",imageURL:"https://graph.facebook.com/AmericasBestContactsandEyeglasses/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4742504",shop:"optician"},addTags:{brand:"America's Best Contacts & Eyeglasses","brand:wikidata":"Q4742504","brand:wikipedia":"en:America's Best Contacts & Eyeglasses",name:"America's Best Contacts & Eyeglasses",shop:"optician",short_name:"America's Best"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Apollo-Optik":{name:"Apollo-Optik",icon:"maki-optician",imageURL:"https://graph.facebook.com/ApolloOptik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q618940",shop:"optician"},addTags:{brand:"Apollo-Optik","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo-Optik",shop:"optician",short_name:"Apollo"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/optician/Atol":{name:"Atol",icon:"maki-optician",imageURL:"https://graph.facebook.com/opticiensatol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2869542",shop:"optician"},addTags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Boots Opticians":{name:"Boots Opticians",icon:"maki-optician",imageURL:"https://graph.facebook.com/BootsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4944037",shop:"optician"},addTags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician",short_name:"Boots"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/optician/Clarkson Eyecare":{name:"Clarkson Eyecare",icon:"maki-optician",geometry:["point","area"],tags:{"brand:wikidata":"Q64027001",shop:"optician"},addTags:{brand:"Clarkson Eyecare","brand:wikidata":"Q64027001",healthcare:"optometrist",name:"Clarkson Eyecare",shop:"optician",short_name:"Clarkson"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Cohen's Fashion Optical":{name:"Cohen's Fashion Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/cohensoptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5141313",shop:"optician"},addTags:{brand:"Cohen's Fashion Optical","brand:wikidata":"Q5141313","brand:wikipedia":"en:Cohen's Fashion Optical",healthcare:"optometrist",name:"Cohen's Fashion Optical",shop:"optician",short_name:"Cohen's"},countryCodes:["us"],terms:["cohen's optical"],matchScore:2,suggestion:true},"shop/optician/Eye Wish":{name:"Eye Wish",icon:"maki-optician",imageURL:"https://graph.facebook.com/EyeWishOpticiens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391641",shop:"optician"},addTags:{brand:"Eye Wish","brand:wikidata":"Q62391641",name:"Eye Wish",shop:"optician"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/optician/Fielmann":{name:"Fielmann",icon:"maki-optician",imageURL:"https://graph.facebook.com/Fielmann.DACH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457822",shop:"optician"},addTags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/General Óptica":{name:"General Óptica",icon:"maki-optician",imageURL:"https://graph.facebook.com/generaloptica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391672",shop:"optician"},addTags:{brand:"General Óptica","brand:wikidata":"Q62391672",name:"General Óptica",shop:"optician"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/optician/Grand Optical":{name:"Grand Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/grandoptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3113677",shop:"optician"},addTags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Générale d'Optique":{name:"Générale d'Optique",icon:"maki-optician",imageURL:"https://graph.facebook.com/generaledoptique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391701",shop:"optician"},addTags:{brand:"Générale d'Optique","brand:wikidata":"Q62391701",name:"Générale d'Optique",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Hakim Optical":{name:"Hakim Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/HakimOptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28232761",shop:"optician"},addTags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/optician/Hans Anders":{name:"Hans Anders",icon:"maki-optician",imageURL:"https://graph.facebook.com/hansanders.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1884976",shop:"optician"},addTags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"},countryCodes:["be","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/optician/Instrumentarium":{name:"Instrumentarium",icon:"maki-optician",imageURL:"https://graph.facebook.com/instru.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11864937",shop:"optician"},addTags:{brand:"Instrumentarium","brand:wikidata":"Q11864937","brand:wikipedia":"fi:Instrumentarium",name:"Instrumentarium",shop:"optician"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/optician/Krys":{name:"Krys",icon:"maki-optician",imageURL:"https://graph.facebook.com/Krys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3119538",shop:"optician"},addTags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/LensCrafters":{name:"LensCrafters",icon:"maki-optician",imageURL:"https://graph.facebook.com/LensCrafters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6523209",shop:"optician"},addTags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Lenskart":{name:"Lenskart",icon:"maki-optician",imageURL:"https://graph.facebook.com/Lenskartindia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17068753",shop:"optician"},addTags:{brand:"Lenskart","brand:wikidata":"Q17068753",name:"Lenskart",shop:"optician"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/optician/Les Opticiens Mutualistes":{name:"Les Opticiens Mutualistes",icon:"maki-optician",imageURL:"https://graph.facebook.com/lesopticiensmutualistes.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18414551",shop:"optician"},addTags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Lissac":{name:"Lissac",icon:"maki-optician",imageURL:"https://graph.facebook.com/lissac.opticien/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63102559",shop:"optician"},addTags:{brand:"Lissac","brand:wikidata":"Q63102559",name:"Lissac",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Multiópticas (Portugal)":{name:"Multiópticas (Portugal)",icon:"maki-optician",imageURL:"https://graph.facebook.com/MultiOpticasPortugal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391722",shop:"optician"},addTags:{brand:"Multiópticas","brand:wikidata":"Q62391722",name:"Multiópticas",shop:"optician"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/optician/Multiópticas (Spain)":{name:"Multiópticas (Spain)",icon:"maki-optician",imageURL:"https://graph.facebook.com/Multiopticas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391719",shop:"optician"},addTags:{brand:"Multiópticas","brand:wikidata":"Q62391719",name:"Multiópticas",shop:"optician"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/optician/Oakley":{name:"Oakley",icon:"maki-optician",imageURL:"https://graph.facebook.com/Oakley/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q161906",shop:"optician"},addTags:{brand:"Oakley","brand:wikidata":"Q161906","brand:wikipedia":"en:Oakley, Inc.",name:"Oakley",shop:"optician"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Oliver Peoples":{name:"Oliver Peoples",icon:"maki-optician",imageURL:"https://graph.facebook.com/oliverpeoples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7087746",shop:"optician"},addTags:{brand:"Oliver Peoples","brand:wikidata":"Q7087746","brand:wikipedia":"en:Oliver Peoples",name:"Oliver Peoples",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Optic 2000":{name:"Optic 2000",icon:"maki-optician",imageURL:"https://graph.facebook.com/optic2000/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3354445",shop:"optician"},addTags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Optical Center":{name:"Optical Center",icon:"maki-optician",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20opticalcenter.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3354448",shop:"optician"},addTags:{brand:"Optical Center","brand:wikidata":"Q3354448","brand:wikipedia":"fr:Optical Center",name:"Optical Center",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Optical Express":{name:"Optical Express",icon:"maki-optician",imageURL:"https://graph.facebook.com/opticalexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7098810",shop:"optician"},addTags:{brand:"Optical Express","brand:wikidata":"Q7098810","brand:wikipedia":"en:Optical Express",name:"Optical Express",shop:"optician"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/optician/Opticalia":{name:"Opticalia",icon:"maki-optician",imageURL:"https://graph.facebook.com/OPTICALIAGRUPO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082114",shop:"optician"},addTags:{brand:"Opticalia","brand:wikidata":"Q62082114",name:"Opticalia",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Pearle Vision":{name:"Pearle Vision",icon:"maki-optician",imageURL:"https://graph.facebook.com/pearlevision/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2231148",shop:"optician"},addTags:{brand:"Pearle Vision","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle Vision",shop:"optician",short_name:"Pearle"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Scrivens":{name:"Scrivens",icon:"maki-optician",imageURL:"https://graph.facebook.com/ScrivensOpticians/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q79424133",shop:"optician"},addTags:{brand:"Scrivens","brand:wikidata":"Q79424133",name:"Scrivens",shop:"optician"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/optician/Silmäasema":{name:"Silmäasema",icon:"maki-optician",imageURL:"https://graph.facebook.com/silmaasema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15994200",shop:"optician"},addTags:{brand:"Silmäasema","brand:wikidata":"Q15994200","brand:wikipedia":"fi:Silmäasema",name:"Silmäasema",shop:"optician"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/optician/Specsavers":{name:"Specsavers",icon:"maki-optician",imageURL:"https://graph.facebook.com/Specsavers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2000610",shop:"optician"},addTags:{brand:"Specsavers","brand:wikidata":"Q2000610","brand:wikipedia":"en:Specsavers",name:"Specsavers",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Sunglass Hut":{name:"Sunglass Hut",icon:"maki-optician",imageURL:"https://graph.facebook.com/SunglassHut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136311",shop:"optician"},addTags:{brand:"Sunglass Hut","brand:wikidata":"Q136311","brand:wikipedia":"en:Sunglass Hut",name:"Sunglass Hut",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Synoptik":{name:"Synoptik",icon:"maki-optician",imageURL:"https://graph.facebook.com/synoptiksverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10687541",shop:"optician"},addTags:{brand:"Synoptik","brand:wikidata":"Q10687541","brand:wikipedia":"sv:Synoptik",name:"Synoptik",shop:"optician"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/optician/Synsam":{name:"Synsam",icon:"maki-optician",imageURL:"https://graph.facebook.com/synsam.se/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12004589",shop:"optician"},addTags:{brand:"Synsam","brand:wikidata":"Q12004589","brand:wikipedia":"sv:Synsam",name:"Synsam",shop:"optician"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/optician/Target Optical":{name:"Target Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/1955770117992590/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19903688",shop:"optician"},addTags:{brand:"Target Optical","brand:wikidata":"Q19903688","brand:wikipedia":"en:Target Optical",name:"Target Optical",shop:"optician"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Vision Express":{name:"Vision Express",icon:"maki-optician",imageURL:"https://graph.facebook.com/visionexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7936150",shop:"optician"},addTags:{brand:"Vision Express","brand:wikidata":"Q7936150","brand:wikipedia":"en:Vision Express",name:"Vision Express",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Visionworks":{name:"Visionworks",icon:"maki-optician",imageURL:"https://graph.facebook.com/Visionworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422607",shop:"optician"},addTags:{brand:"Visionworks","brand:wikidata":"Q5422607","brand:wikipedia":"en:Visionworks",name:"Visionworks",shop:"optician"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Warby Parker":{name:"Warby Parker",icon:"maki-optician",imageURL:"https://graph.facebook.com/warbyparker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7968882",shop:"optician"},addTags:{brand:"Warby Parker","brand:wikidata":"Q7968882","brand:wikipedia":"en:Warby Parker",name:"Warby Parker",shop:"optician"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/optician/แว่นท็อปเจริญ":{name:"แว่นท็อปเจริญ",icon:"maki-optician",imageURL:"https://graph.facebook.com/TopCharoenOpticalOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391732",shop:"optician"},addTags:{brand:"แว่นท็อปเจริญ","brand:th":"แว่นท็อปเจริญ","brand:wikidata":"Q62391732",name:"แว่นท็อปเจริญ","name:th":"แว่นท็อปเจริญ",shop:"optician"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"shop/optician/メガネスーパー":{name:"メガネスーパー",icon:"maki-optician",imageURL:"https://graph.facebook.com/meganesuper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11343504",shop:"optician"},addTags:{brand:"メガネスーパー","brand:ja":"メガネスーパー","brand:wikidata":"Q11343504","brand:wikipedia":"ja:メガネスーパー",name:"メガネスーパー","name:en":"Meganesuper","name:ja":"メガネスーパー",shop:"optician"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/optician/寶島眼鏡":{name:"寶島眼鏡",icon:"maki-optician",imageURL:"https://graph.facebook.com/formosafans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391741",shop:"optician"},addTags:{brand:"寶島眼鏡","brand:wikidata":"Q62391741",name:"寶島眼鏡",shop:"optician"},countryCodes:["zh"],terms:[],matchScore:2,suggestion:true},"shop/optician/眼鏡市場":{name:"眼鏡市場",icon:"maki-optician",imageURL:"https://graph.facebook.com/meganeichiba.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11343506",shop:"optician"},addTags:{brand:"眼鏡市場","brand:en":"Megane Ichiba","brand:wikidata":"Q11343506","brand:wikipedia":"ja:メガネトップ",name:"眼鏡市場","name:en":"Megane Ichiba",shop:"optician"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Bass Pro Shops":{name:"Bass Pro Shops",icon:"temaki-compass",imageURL:"https://graph.facebook.com/bassproshops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4867953",shop:"outdoor"},addTags:{brand:"Bass Pro Shops","brand:wikidata":"Q4867953","brand:wikipedia":"en:Bass Pro Shops",name:"Bass Pro Shops",shop:"outdoor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Blacks":{name:"Blacks",icon:"temaki-compass",imageURL:"https://graph.facebook.com/blacksonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64822933",shop:"outdoor"},addTags:{brand:"Blacks","brand:wikidata":"Q64822933",name:"Blacks",shop:"outdoor"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Cabela's":{name:"Cabela's",icon:"temaki-compass",imageURL:"https://graph.facebook.com/Cabelas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2793714",shop:"outdoor"},addTags:{brand:"Cabela's","brand:wikidata":"Q2793714","brand:wikipedia":"en:Cabela's",name:"Cabela's",shop:"outdoor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Cotswold Outdoor":{name:"Cotswold Outdoor",icon:"temaki-compass",imageURL:"https://graph.facebook.com/CotswoldOutdoor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175488",shop:"outdoor"},addTags:{brand:"Cotswold Outdoor","brand:wikidata":"Q5175488","brand:wikipedia":"en:Cotswold Outdoor",name:"Cotswold Outdoor",shop:"outdoor"},countryCodes:["gb"],terms:["cotswold"],matchScore:2,suggestion:true},"shop/outdoor/Gander Outdoors":{name:"Gander Outdoors",icon:"temaki-compass",imageURL:"https://graph.facebook.com/GanderRV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64357426",shop:"outdoor"},addTags:{brand:"Gander Outdoors","brand:wikidata":"Q64357426","brand:wikipedia":"en:Gander Outdoors",name:"Gander Outdoors",shop:"outdoor"},countryCodes:["us"],terms:["gander mountain"],matchScore:2,suggestion:true},"shop/outdoor/Go Outdoors":{name:"Go Outdoors",icon:"temaki-compass",imageURL:"https://graph.facebook.com/GOoutdoorsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75293941",shop:"outdoor"},addTags:{brand:"Go Outdoors","brand:wikidata":"Q75293941",name:"Go Outdoors",shop:"outdoor"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Jack Wolfskin":{name:"Jack Wolfskin",icon:"temaki-compass",imageURL:"https://graph.facebook.com/JACKWOLFSKINofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q536133",shop:"outdoor"},addTags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"},countryCodes:["ch","de","fr"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Kathmandu":{name:"Kathmandu",icon:"temaki-compass",imageURL:"https://graph.facebook.com/kathmandu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1736294",shop:"outdoor"},addTags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Millets":{name:"Millets",icon:"temaki-compass",imageURL:"https://graph.facebook.com/milletsonlinefans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64822903",shop:"outdoor"},addTags:{brand:"Millets","brand:wikidata":"Q64822903",name:"Millets",shop:"outdoor"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Mountain Warehouse":{name:"Mountain Warehouse",icon:"temaki-compass",imageURL:"https://graph.facebook.com/MountainWarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6925414",shop:"outdoor"},addTags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"},countryCodes:["gb","pl"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/REI":{name:"REI",icon:"temaki-compass",imageURL:"https://graph.facebook.com/9062006483/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3414933",shop:"outdoor"},addTags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",official_name:"Recreational Equipment, Inc.",shop:"outdoor"},countryCodes:["id","us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Sportsman's Warehouse":{name:"Sportsman's Warehouse",icon:"temaki-compass",imageURL:"https://graph.facebook.com/sportsmanswh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579979",shop:"outdoor"},addTags:{brand:"Sportsman's Warehouse","brand:wikidata":"Q7579979","brand:wikipedia":"en:Sportsman's Warehouse",name:"Sportsman's Warehouse",shop:"outdoor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Trespass":{name:"Trespass",icon:"temaki-compass",imageURL:"https://graph.facebook.com/trespass/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17035733",shop:"outdoor"},addTags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"},countryCodes:["fr","gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/outpost/Wildberries":{name:"Wildberries",icon:"maki-shop",imageURL:"https://graph.facebook.com/wildberries.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24933714",shop:"outpost"},addTags:{brand:"Wildberries","brand:wikidata":"Q24933714","brand:wikipedia":"ru:Wildberries",name:"Wildberries",shop:"outpost"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"shop/paint/Benjamin Moore":{name:"Benjamin Moore",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/benjaminmoorepaints/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4889038",shop:"paint"},addTags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/paint/Comex":{name:"Comex",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/Comex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5151654",shop:"paint"},addTags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"},terms:[],matchScore:2,suggestion:true},"shop/paint/Jotun":{name:"Jotun",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/JotunGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1778870",shop:"paint"},addTags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"},terms:[],matchScore:2,suggestion:true},"shop/paint/National Paints":{name:"National Paints",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/NationalPaints/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073521",shop:"paint"},addTags:{brand:"National Paints","brand:wikidata":"Q62073521",name:"National Paints",shop:"paint"},countryCodes:["ae","qa"],terms:[],matchScore:2,suggestion:true},"shop/paint/Sherwin-Williams":{name:"Sherwin-Williams",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/SherwinWilliamsforYourHome/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48881",shop:"paint"},addTags:{brand:"Sherwin-Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin-Williams",shop:"paint"},terms:["sherwin williams paint store","sherwin williams paints"],matchScore:2,suggestion:true},"shop/party/Party City":{name:"Party City",icon:"temaki-balloon",imageURL:"https://graph.facebook.com/PartyCity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7140896",shop:"party"},addTags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/pastry/Cookies by Design":{name:"Cookies by Design",icon:"maki-bakery",imageURL:"https://graph.facebook.com/CookiesbyDesignHQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5167112",shop:"pastry"},addTags:{brand:"Cookies by Design","brand:wikidata":"Q5167112","brand:wikipedia":"en:Cookies by Design",craft:"bakery",name:"Cookies by Design",shop:"pastry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pastry/Smallcakes":{name:"Smallcakes",icon:"maki-bakery",imageURL:"https://graph.facebook.com/SmallcakesKC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62384749",shop:"pastry"},addTags:{brand:"Smallcakes","brand:wikidata":"Q62384749",name:"Smallcakes",shop:"pastry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Cash Converters":{name:"Cash Converters",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/CashConvertersUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5048645",shop:"pawnbroker"},addTags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"},terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Cebuana Lhuillier":{name:"Cebuana Lhuillier",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/cebuanalhuillierpawnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17064661",shop:"pawnbroker"},addTags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker",short_name:"Cebuana"},countryCodes:["ph"],terms:["agencia cebuana","m lhuillier"],matchScore:2,suggestion:true},"shop/pawnbroker/Palawan Pawnshop":{name:"Palawan Pawnshop",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/palawan.pawnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391488",shop:"pawnbroker"},addTags:{brand:"Palawan Pawnshop","brand:wikidata":"Q62391488",name:"Palawan Pawnshop",shop:"pawnbroker"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Villarica Pawnshop":{name:"Villarica Pawnshop",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/155765647803482/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391438",shop:"pawnbroker"},addTags:{brand:"Villarica Pawnshop","brand:wikidata":"Q62391438",name:"Villarica Pawnshop",shop:"pawnbroker"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/大黒屋":{name:"大黒屋",icon:"temaki-money_hand",geometry:["point","area"],tags:{"brand:wikidata":"Q11442068",shop:"pawnbroker"},addTags:{brand:"大黒屋","brand:en":"Daikokuya","brand:ja":"大黒屋","brand:wikidata":"Q11442068","brand:wikipedia":"ja:大黒屋 (チケット)",name:"大黒屋","name:en":"Daikokuya","name:ja":"大黒屋",shop:"pawnbroker"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/Douglas":{name:"Douglas",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/DouglasDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2052213",shop:"perfumery"},addTags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"},countryCodes:["at","ch","de","es","it","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/FAnn":{name:"FAnn",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/FAnn.cz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391353",shop:"perfumery"},addTags:{brand:"FAnn","brand:wikidata":"Q62391353",name:"FAnn",shop:"perfumery"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/ICI PARIS XL":{name:"ICI PARIS XL",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/iciparisxlbe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q769749",shop:"perfumery"},addTags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"},countryCodes:["be","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/Marionnaud":{name:"Marionnaud",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/Marionnaud.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1129073",shop:"perfumery"},addTags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud",name:"Marionnaud",shop:"perfumery"},countryCodes:["at","ch","es","fr","it","sk"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/O Boticário":{name:"O Boticário",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/oboticario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7073219",shop:"perfumery"},addTags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/Perfumania":{name:"Perfumania",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/perfumania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72983916",shop:"perfumery"},addTags:{brand:"Perfumania","brand:wikidata":"Q72983916",name:"Perfumania",shop:"perfumery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/The Perfume Shop":{name:"The Perfume Shop",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/theperfumeshoponline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7756719",shop:"perfumery"},addTags:{brand:"The Perfume Shop","brand:wikidata":"Q7756719","brand:wikipedia":"en:The Perfume Shop",name:"The Perfume Shop",shop:"perfumery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/pet/Das Futterhaus":{name:"Das Futterhaus",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/futterhaus.deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1167914",shop:"pet"},addTags:{brand:"Das Futterhaus","brand:wikidata":"Q1167914","brand:wikipedia":"de:Das Futterhaus",name:"Das Futterhaus",shop:"pet"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/pet/Faunatar":{name:"Faunatar",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Faunatar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11859415",shop:"pet"},addTags:{brand:"Faunatar","brand:wikidata":"Q11859415","brand:wikipedia":"fi:Faunatar",name:"Faunatar",shop:"pet"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/pet/Fressnapf":{name:"Fressnapf",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Fressnapf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q875796",shop:"pet"},addTags:{brand:"Fressnapf","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Fressnapf",shop:"pet"},countryCodes:["at","ch","de","hu","lu"],terms:[],matchScore:2,suggestion:true},"shop/pet/Global Pet Foods":{name:"Global Pet Foods",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/globalpetfoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57985699",shop:"pet"},addTags:{brand:"Global Pet Foods","brand:wikidata":"Q57985699",name:"Global Pet Foods",shop:"pet"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/pet/Maxi Zoo":{name:"Maxi Zoo",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Fressnapf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q875796",shop:"pet"},addTags:{brand:"Maxi Zoo","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Maxi Zoo",shop:"pet"},countryCodes:["be","ch","dk","fr","ie","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/pet/Mud Bay":{name:"Mud Bay",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/mudbay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30324179",shop:"pet"},addTags:{brand:"Mud Bay","brand:wikidata":"Q30324179","brand:wikipedia":"en:Mud Bay pet store",name:"Mud Bay",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Musti ja Mirri":{name:"Musti ja Mirri",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/mustijamirri/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11883558",shop:"pet"},addTags:{brand:"Musti ja Mirri","brand:wikidata":"Q11883558","brand:wikipedia":"fi:Musti ja Mirri",name:"Musti ja Mirri",shop:"pet"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Food Express":{name:"Pet Food Express",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petfoodexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7171541",shop:"pet"},addTags:{brand:"Pet Food Express","brand:wikidata":"Q7171541","brand:wikipedia":"en:Pet Food Express",name:"Pet Food Express",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Supermarket":{name:"Pet Supermarket",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetSupermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61968363",shop:"pet"},addTags:{brand:"Pet Supermarket","brand:wikidata":"Q61968363",name:"Pet Supermarket",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Supplies Plus":{name:"Pet Supplies Plus",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petsuppliesplus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7171563",shop:"pet"},addTags:{brand:"Pet Supplies Plus","brand:wikidata":"Q7171563","brand:wikipedia":"en:Pet Supplies Plus",name:"Pet Supplies Plus",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pet Valu":{name:"Pet Valu",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetValuUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58009635",shop:"pet"},addTags:{brand:"Pet Valu","brand:wikidata":"Q58009635",name:"Pet Valu",shop:"pet"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/pet/PetSmart":{name:"PetSmart",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetSmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3307147",shop:"pet"},addTags:{brand:"PetSmart","brand:wikidata":"Q3307147","brand:wikipedia":"en:PetSmart",name:"PetSmart",shop:"pet"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Petco":{name:"Petco",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Petco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7171798",shop:"pet"},addTags:{brand:"Petco","brand:wikidata":"Q7171798","brand:wikipedia":"en:Petco",name:"Petco",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Petland":{name:"Petland",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/PetlandUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17111474",shop:"pet"},addTags:{brand:"Petland","brand:wikidata":"Q17111474","brand:wikipedia":"en:Petland",name:"Petland",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Petland Discounts":{name:"Petland Discounts",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petlanddiscount/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7178463",shop:"pet"},addTags:{brand:"Petland Discounts","brand:wikidata":"Q7178463","brand:wikipedia":"en:Petland Discounts",name:"Petland Discounts",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Pets at Home":{name:"Pets at Home",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petsathomeUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7179258",shop:"pet"},addTags:{brand:"Pets at Home","brand:wikidata":"Q7179258","brand:wikipedia":"en:Pets at Home",name:"Pets at Home",shop:"pet"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/pet/Unleashed":{name:"Unleashed",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Petco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122874",shop:"pet"},addTags:{alt_name:"Unleashed by Petco",brand:"Unleashed","brand:wikidata":"Q62122874",name:"Unleashed",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Wild Birds Unlimited":{name:"Wild Birds Unlimited",icon:"maki-dog-park",imageURL:"https://pbs.twimg.com/profile_images/466209950788636672/DHjpTthh_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q8000542",shop:"pet"},addTags:{brand:"Wild Birds Unlimited","brand:wikidata":"Q8000542","brand:wikipedia":"en:Wild Birds Unlimited",name:"Wild Birds Unlimited",shop:"pet"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pet/Бетховен":{name:"Бетховен",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/zoobethowenclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390798",shop:"pet"},addTags:{brand:"Бетховен","brand:wikidata":"Q62390798",name:"Бетховен",shop:"pet"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/pet/Четыре лапы":{name:"Четыре лапы",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/4laps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390783",shop:"pet"},addTags:{brand:"Четыре лапы","brand:wikidata":"Q62390783",name:"Четыре лапы",shop:"pet"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/pet/イオンペット":{name:"イオンペット",icon:"maki-dog-park",geometry:["point","area"],tags:{"brand:wikidata":"Q11286064",shop:"pet"},addTags:{brand:"イオンペット","brand:en":"Aeonpet","brand:ja":"イオンペット","brand:wikidata":"Q11286064","brand:wikipedia":"ja:イオンペット",name:"イオンペット","name:en":"Aeonpet","name:ja":"イオンペット",shop:"pet"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/photo/Kamera Express":{name:"Kamera Express",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/kameraexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q77976400",shop:"photo"},addTags:{brand:"Kamera Express","brand:wikidata":"Q77976400",name:"Kamera Express",shop:"photo"},countryCodes:["be","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/photo/Kodak Express":{name:"Kodak Express",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/kodakexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6425126",shop:"photo"},addTags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"},terms:["kodak"],matchScore:2,suggestion:true},"shop/photo/Max Spielmann":{name:"Max Spielmann",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/MaxPhotoCentres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q76221051",shop:"photo"},addTags:{brand:"Max Spielmann","brand:wikidata":"Q76221051",name:"Max Spielmann",shop:"photo"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/photo/カメラのキタムラ":{name:"カメラのキタムラ",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/kitamura.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294821",shop:"photo"},addTags:{brand:"カメラのキタムラ","brand:en":"Kitamura Camera","brand:ja":"カメラのキタムラ","brand:wikidata":"Q11294821","brand:wikipedia":"ja:カメラのキタムラ",name:"カメラのキタムラ","name:en":"Kitamura Camera","name:ja":"カメラのキタムラ",shop:"photo"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/pottery/Sargadelos":{name:"Sargadelos",icon:"temaki-vase",imageURL:"https://graph.facebook.com/Sargadelos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12390201",shop:"pottery"},addTags:{brand:"Sargadelos","brand:wikidata":"Q12390201","brand:wikipedia":"gl:Grupo Sargadelos",name:"Sargadelos",shop:"pottery"},terms:[],matchScore:2,suggestion:true},"shop/printer_ink/Cartridge World":{name:"Cartridge World",icon:"fas-print",imageURL:"https://graph.facebook.com/CartridgeWorldNewsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5047439",shop:"printer_ink"},addTags:{brand:"Cartridge World","brand:wikidata":"Q5047439","brand:wikipedia":"en:Cartridge World",name:"Cartridge World",shop:"printer_ink"},terms:[],matchScore:2,suggestion:true},"shop/rental/Penske Truck Rental":{name:"Penske Truck Rental",icon:"fas-dolly",imageURL:"https://graph.facebook.com/PenskeTruckRental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81234570",shop:"rental"},addTags:{brand:"Penske Truck Rental","brand:wikidata":"Q81234570",name:"Penske Truck Rental",shop:"rental",short_name:"Penske"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/rental/Ryder":{name:"Ryder",icon:"fas-dolly",imageURL:"https://graph.facebook.com/RyderSystemInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2178198",shop:"rental"},addTags:{brand:"Ryder","brand:wikidata":"Q2178198","brand:wikipedia":"en:Ryder",name:"Ryder",shop:"rental"},countryCodes:["ca","gb","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/rental/U-Haul":{name:"U-Haul",icon:"fas-dolly",imageURL:"https://graph.facebook.com/uhaul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7862902",shop:"rental"},addTags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"rental"},countryCodes:["ca","us"],terms:["uhaul neighborhood dealer"],matchScore:2,suggestion:true},"shop/rental/United Rentals":{name:"United Rentals",icon:"fas-dolly",imageURL:"https://graph.facebook.com/UnitedRentals/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7889101",shop:"rental"},addTags:{brand:"United Rentals","brand:wikidata":"Q7889101","brand:wikipedia":"en:United Rentals",name:"United Rentals",shop:"rental"},countryCodes:["ca","us"],terms:["united rental"],matchScore:2,suggestion:true},"shop/second_hand/Savers":{name:"Savers",icon:"maki-shop",imageURL:"https://graph.facebook.com/savers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7428188",shop:"second_hand"},addTags:{brand:"Savers","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Savers",shop:"second_hand"},countryCodes:["au","ca","us"],terms:[],matchScore:2,suggestion:true},"shop/second_hand/Value Village":{name:"Value Village",icon:"maki-shop",imageURL:"https://graph.facebook.com/savers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7428188",shop:"second_hand"},addTags:{brand:"Value Village","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Value Village",shop:"second_hand"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/ABC Schuh-Center":{name:"ABC Schuh-Center",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ABCSchuhCenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66007228",shop:"shoes"},addTags:{brand:"ABC Schuh-Center","brand:wikidata":"Q66007228",name:"ABC Schuh-Center",shop:"shoes"},countryCodes:["de"],terms:["abc schuhe"],matchScore:2,suggestion:true},"shop/shoes/ABCマート":{name:"ABCマート",icon:"maki-shoe",imageURL:"https://graph.facebook.com/172547912801644/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11188787",shop:"shoes"},addTags:{brand:"ABCマート","brand:ja":"ABCマート","brand:wikidata":"Q11188787","brand:wikipedia":"en:ABC-Mart",name:"ABCマート","name:ja":"ABCマート",shop:"shoes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Aldo":{name:"Aldo",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ALDO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2832297",shop:"shoes"},addTags:{brand:"Aldo","brand:wikidata":"Q2832297","brand:wikipedia":"en:Aldo Group",name:"Aldo",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Allen Edmonds":{name:"Allen Edmonds",icon:"maki-shoe",imageURL:"https://graph.facebook.com/allenedmonds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4731627",shop:"shoes"},addTags:{brand:"Allen Edmonds","brand:wikidata":"Q4731627","brand:wikipedia":"en:Allen Edmonds",name:"Allen Edmonds",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/André":{name:"André",icon:"maki-shoe",imageURL:"https://graph.facebook.com/AndreChaussures/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2847114",shop:"shoes"},addTags:{brand:"André","brand:wikidata":"Q2847114","brand:wikipedia":"fr:André (chaussure)",name:"André",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Bata":{name:"Bata",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Bata/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688082",shop:"shoes"},addTags:{brand:"Bata","brand:wikidata":"Q688082","brand:wikipedia":"en:Bata (company)",name:"Bata",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Besson Chaussures":{name:"Besson Chaussures",icon:"maki-shoe",imageURL:"https://graph.facebook.com/besson.chaussures/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2899930",shop:"shoes"},addTags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Birkenstock":{name:"Birkenstock",icon:"maki-shoe",imageURL:"https://graph.facebook.com/birkenstock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q648458",shop:"shoes"},addTags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Brantano":{name:"Brantano",icon:"maki-shoe",imageURL:"https://graph.facebook.com/brantano.belgie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4957616",shop:"shoes"},addTags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"},countryCodes:["be","gb","lu"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Browns":{name:"Browns",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Brownsshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16954153",shop:"shoes"},addTags:{brand:"Browns","brand:wikidata":"Q16954153","brand:wikipedia":"en:Browns Shoes",name:"Browns",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/CCC":{name:"CCC",icon:"maki-shoe",imageURL:"https://graph.facebook.com/CCC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11788344",shop:"shoes"},addTags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Call It Spring":{name:"Call It Spring",icon:"maki-shoe",imageURL:"https://graph.facebook.com/CallItSpring/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7580363",shop:"shoes"},addTags:{brand:"Call It Spring","brand:wikidata":"Q7580363","brand:wikipedia":"en:Call It Spring",name:"Call It Spring",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Camper":{name:"Camper",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Camper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1030922",shop:"shoes"},addTags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Chaussea":{name:"Chaussea",icon:"maki-shoe",imageURL:"https://graph.facebook.com/chaussea.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62082044",shop:"shoes"},addTags:{brand:"Chaussea","brand:wikidata":"Q62082044",name:"Chaussea",shop:"shoes"},countryCodes:["be","es","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Christian Louboutin":{name:"Christian Louboutin",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q23681835",shop:"shoes"},addTags:{brand:"Christian Louboutin","brand:wikidata":"Q23681835",name:"Christian Louboutin",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Clarks":{name:"Clarks",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ClarksShoesUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1095857",shop:"shoes"},addTags:{brand:"Clarks","brand:wikidata":"Q1095857","brand:wikipedia":"en:C. & J. Clark",name:"Clarks",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Cole Haan":{name:"Cole Haan",icon:"maki-shoe",imageURL:"https://graph.facebook.com/colehaan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4356504",shop:"shoes"},addTags:{brand:"Cole Haan","brand:wikidata":"Q4356504","brand:wikipedia":"en:Cole Haan",name:"Cole Haan",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Converse":{name:"Converse",icon:"maki-shoe",imageURL:"https://graph.facebook.com/converse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319515",shop:"shoes"},addTags:{brand:"Converse","brand:wikidata":"Q319515","brand:wikipedia":"en:Converse (shoe company)",name:"Converse",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Courir":{name:"Courir",icon:"maki-shoe",imageURL:"https://graph.facebook.com/courircom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3001258",shop:"shoes"},addTags:{brand:"Courir","brand:wikidata":"Q3001258","brand:wikipedia":"fr:Courir (chaîne de magasins)",name:"Courir",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Crocs":{name:"Crocs",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Crocs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q926699",shop:"shoes"},addTags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/DSW":{name:"DSW",icon:"maki-shoe",imageURL:"https://graph.facebook.com/designerbrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5206207",shop:"shoes"},addTags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:Designer Brands",name:"DSW",shop:"shoes"},countryCodes:["ca","us"],terms:["designer shoe warehouse","dsw shoes"],matchScore:2,suggestion:true},"shop/shoes/Deichmann":{name:"Deichmann",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Deichmann/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q664543",shop:"shoes"},addTags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Din sko":{name:"Din sko",icon:"maki-shoe",imageURL:"https://graph.facebook.com/dinsko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10472869",shop:"shoes"},addTags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"},countryCodes:["no","se"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Dosenbach":{name:"Dosenbach",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Dosenbach.CH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2677329",shop:"shoes"},addTags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Dr. Martens":{name:"Dr. Martens",icon:"maki-shoe",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDr.%20Martens%20Logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1126126",shop:"shoes"},addTags:{brand:"Dr. Martens","brand:wikidata":"Q1126126","brand:wikipedia":"en:Dr. Martens",name:"Dr. Martens",shop:"shoes"},terms:["doc marten","doc martens","doctor marten","doctor martens","martens"],matchScore:2,suggestion:true},"shop/shoes/Dune London":{name:"Dune London",icon:"maki-shoe",imageURL:"https://graph.facebook.com/DuneLondon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65557112",shop:"shoes"},addTags:{brand:"Dune London","brand:wikidata":"Q65557112",name:"Dune London",shop:"shoes",short_name:"Dune"},countryCodes:["ch","de","fr","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Ecco":{name:"Ecco",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Ecco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1280255",shop:"shoes"},addTags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/FLO":{name:"FLO",icon:"maki-shoe",imageURL:"https://graph.facebook.com/FLOShoesGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994802",shop:"shoes"},addTags:{brand:"FLO","brand:wikidata":"Q61994802",name:"FLO",shop:"shoes"},countryCodes:["al","tr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Famous Footwear":{name:"Famous Footwear",icon:"maki-shoe",imageURL:"https://graph.facebook.com/famousfootwear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433457",shop:"shoes"},addTags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Foot Locker":{name:"Foot Locker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footlocker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63335",shop:"shoes"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Foot Solutions":{name:"Foot Solutions",icon:"maki-shoe",imageURL:"https://graph.facebook.com/FootSolutions/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69982369",shop:"shoes"},addTags:{brand:"Foot Solutions","brand:wikidata":"Q69982369","healthcare:speciality":"pedorthist",name:"Foot Solutions",shoes:"orthopaedic",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Footaction":{name:"Footaction",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footaction/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71022064",shop:"shoes"},addTags:{brand:"Footaction","brand:wikidata":"Q71022064",name:"Footaction",shop:"shoes"},countryCodes:["ca","pr","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/G.H. Bass & Co.":{name:"G.H. Bass & Co.",icon:"maki-shoe",imageURL:"https://graph.facebook.com/G.H.Bass/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16993893",shop:"shoes"},addTags:{brand:"G.H. Bass & Co.","brand:wikidata":"Q16993893","brand:wikipedia":"en:G.H. Bass & Co.",name:"G.H. Bass & Co.",shop:"shoes"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Gabor":{name:"Gabor",icon:"maki-shoe",imageURL:"https://graph.facebook.com/gaborshoesag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1488760",shop:"shoes"},addTags:{brand:"Gabor","brand:wikidata":"Q1488760","brand:wikipedia":"de:Gabor Shoes",name:"Gabor",shop:"shoes"},countryCodes:["de","it"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Geox":{name:"Geox",icon:"maki-shoe",imageURL:"https://graph.facebook.com/GEOX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q588001",shop:"shoes"},addTags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Görtz":{name:"Görtz",icon:"maki-shoe",imageURL:"https://graph.facebook.com/goertz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1559593",shop:"shoes"},addTags:{brand:"Görtz","brand:wikidata":"Q1559593","brand:wikipedia":"de:Ludwig Görtz",name:"Görtz",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Havaianas":{name:"Havaianas",icon:"maki-shoe",imageURL:"https://graph.facebook.com/HavaianasUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3128675",shop:"shoes"},addTags:{brand:"Havaianas","brand:wikidata":"Q3128675","brand:wikipedia":"en:Havaianas",name:"Havaianas",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Humanic":{name:"Humanic",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Humanic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1636668",shop:"shoes"},addTags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"},countryCodes:["at","cz","de","hu","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Hush Puppies":{name:"Hush Puppies",icon:"maki-shoe",imageURL:"https://graph.facebook.com/hushpuppiesglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1828588",shop:"shoes"},addTags:{brand:"Hush Puppies","brand:wikidata":"Q1828588","brand:wikipedia":"en:Hush Puppies",name:"Hush Puppies",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Jimmy Choo":{name:"Jimmy Choo",icon:"maki-shoe",imageURL:"https://graph.facebook.com/JimmyChoo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5213855",shop:"shoes"},addTags:{brand:"Jimmy Choo","brand:wikidata":"Q5213855","brand:wikipedia":"en:Jimmy Choo Ltd",name:"Jimmy Choo",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Johnston & Murphy":{name:"Johnston & Murphy",icon:"maki-shoe",imageURL:"https://graph.facebook.com/johnstonmurphy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6268615",shop:"shoes"},addTags:{brand:"Johnston & Murphy","brand:wikidata":"Q6268615","brand:wikipedia":"en:Johnston & Murphy",name:"Johnston & Murphy",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Jones Bootmaker":{name:"Jones Bootmaker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/JonesBootmaker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6275139",shop:"shoes"},addTags:{brand:"Jones Bootmaker","brand:wikidata":"Q6275139","brand:wikipedia":"en:Jones Bootmaker",name:"Jones Bootmaker",shop:"shoes",short_name:"Jones"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Journeys":{name:"Journeys",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Journeys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994838",shop:"shoes"},addTags:{brand:"Journeys","brand:wikidata":"Q61994838",name:"Journeys",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Kari":{name:"Kari",icon:"maki-shoe",imageURL:"https://graph.facebook.com/shopkari/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q47155680",shop:"shoes"},addTags:{brand:"Kari","brand:wikidata":"Q47155680","brand:wikipedia":"ru:Kari (компания)",name:"Kari",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Kids Foot Locker":{name:"Kids Foot Locker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footlocker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63335",shop:"shoes"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Kids Foot Locker",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Kurt Geiger":{name:"Kurt Geiger",icon:"maki-shoe",imageURL:"https://graph.facebook.com/kurtgeigerofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17063744",shop:"shoes"},addTags:{brand:"Kurt Geiger","brand:wikidata":"Q17063744",name:"Kurt Geiger",shop:"shoes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/shoes/La Halle aux Chaussures":{name:"La Halle aux Chaussures",icon:"maki-shoe",imageURL:"https://graph.facebook.com/lahalle.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390731",shop:"shoes"},addTags:{brand:"La Halle aux Chaussures","brand:wikidata":"Q62390731",name:"La Halle aux Chaussures",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Lady Foot Locker":{name:"Lady Foot Locker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footlocker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63335",shop:"shoes"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Lady Foot Locker",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Little Burgundy":{name:"Little Burgundy",icon:"maki-shoe",imageURL:"https://graph.facebook.com/littleburgundyshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72984664",shop:"shoes"},addTags:{brand:"Little Burgundy","brand:wikidata":"Q72984664",name:"Little Burgundy",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Manfield (Netherlands)":{name:"Manfield (Netherlands)",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Manfieldshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58328872",shop:"shoes"},addTags:{brand:"Manfield","brand:wikidata":"Q58328872","brand:wikipedia":"nl:Manfield schoenen",name:"Manfield",shop:"shoes"},countryCodes:["be","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Marko":{name:"Marko",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q67861181",shop:"shoes"},addTags:{brand:"Marko","brand:wikidata":"Q67861181",name:"Marko","name:ru":"Марко",shop:"shoes"},countryCodes:["by","ru"],terms:["марко"],matchScore:2,suggestion:true},"shop/shoes/Mephisto":{name:"Mephisto",icon:"maki-shoe",imageURL:"https://graph.facebook.com/mephisto.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q822975",shop:"shoes"},addTags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Merrell":{name:"Merrell",icon:"maki-shoe",imageURL:"https://graph.facebook.com/merrell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1921997",shop:"shoes"},addTags:{brand:"Merrell","brand:wikidata":"Q1921997","brand:wikipedia":"en:Merrell (company)",name:"Merrell",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Minelli":{name:"Minelli",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Minelli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994831",shop:"shoes"},addTags:{brand:"Minelli","brand:wikidata":"Q61994831",name:"Minelli",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Moshulu":{name:"Moshulu",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Moshulu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81555702",shop:"shoes"},addTags:{brand:"Moshulu","brand:wikidata":"Q81555702",name:"Moshulu",shop:"shoes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Naturalizer":{name:"Naturalizer",icon:"maki-shoe",imageURL:"https://graph.facebook.com/naturalizer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65012038",shop:"shoes"},addTags:{brand:"Naturalizer","brand:wikidata":"Q65012038",name:"Naturalizer",shop:"shoes"},countryCodes:["ca","cn","gu","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/New Balance":{name:"New Balance",icon:"maki-shoe",imageURL:"https://graph.facebook.com/newbalanceusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q742988",shop:"shoes"},addTags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Office":{name:"Office",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Officeshoes1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079121",shop:"shoes"},addTags:{brand:"Office","brand:wikidata":"Q7079121","brand:wikipedia":"en:Office Holdings",name:"Office",shop:"shoes"},countryCodes:["de","gb","ie","ro"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Payless ShoeSource":{name:"Payless ShoeSource",icon:"maki-shoe",imageURL:"https://graph.facebook.com/payless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7156755",shop:"shoes"},addTags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"},terms:["payless"],matchScore:2,suggestion:true},"shop/shoes/Quick Schuh":{name:"Quick Schuh",icon:"maki-shoe",imageURL:"https://graph.facebook.com/quick.schuh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2123069",shop:"shoes"},addTags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/R.M.Williams":{name:"R.M.Williams",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q65042966",shop:"shoes"},addTags:{brand:"R.M.Williams","brand:wikidata":"Q65042966","brand:wikipedia":"en:R. M. Williams (company)",name:"R.M.Williams",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Rack Room Shoes":{name:"Rack Room Shoes",icon:"maki-shoe",imageURL:"https://graph.facebook.com/myrackroomshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17109937",shop:"shoes"},addTags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Red Wing":{name:"Red Wing",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RedWingShoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q934096",shop:"shoes"},addTags:{brand:"Red Wing","brand:wikidata":"Q934096","brand:wikipedia":"en:Red Wing Shoes",name:"Red Wing",shop:"shoes"},countryCodes:["de","gb","nl","us"],terms:["red wing shoes"],matchScore:2,suggestion:true},"shop/shoes/Reno":{name:"Reno",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RENO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2144204",shop:"shoes"},addTags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"},countryCodes:["at","ch","de","hu","sk"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Rieker":{name:"Rieker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/riekerofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2152193",shop:"shoes"},addTags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Rockport":{name:"Rockport",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Rockport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4048384",shop:"shoes"},addTags:{brand:"Rockport","brand:wikidata":"Q4048384","brand:wikipedia":"en:Rockport (company)",name:"Rockport",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Runners Point":{name:"Runners Point",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RunnersPoint84/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2176418",shop:"shoes"},addTags:{brand:"Runners Point","brand:wikidata":"Q2176418","brand:wikipedia":"de:Runners Point",name:"Runners Point",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Salamander":{name:"Salamander",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SalamanderCzech/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q878354",shop:"shoes"},addTags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Salvatore Ferragamo":{name:"Salvatore Ferragamo",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SalvatoreFerragamo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3946053",shop:"shoes"},addTags:{brand:"Salvatore Ferragamo","brand:wikidata":"Q3946053","brand:wikipedia":"en:Salvatore Ferragamo S.p.A.",name:"Salvatore Ferragamo",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/San Marina":{name:"San Marina",icon:"maki-shoe",imageURL:"https://graph.facebook.com/sanmarina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3471558",shop:"shoes"},addTags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Scapino":{name:"Scapino",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ScapinoNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2298792",shop:"shoes"},addTags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Schuh":{name:"Schuh",icon:"maki-shoe",imageURL:"https://graph.facebook.com/schuhshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7432952",shop:"shoes"},addTags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"},countryCodes:["de","gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Schuh-Mann":{name:"Schuh-Mann",icon:"maki-shoe",imageURL:"https://graph.facebook.com/schuhmann.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133314",shop:"shoes"},addTags:{brand:"Schuh-Mann","brand:wikidata":"Q66133314",name:"Schuh-Mann",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Schuhkay":{name:"Schuhkay",icon:"maki-shoe",imageURL:"https://graph.facebook.com/134116200015210/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66009415",shop:"shoes"},addTags:{brand:"Schuhkay","brand:wikidata":"Q66009415",name:"Schuhkay",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Shoe Carnival":{name:"Shoe Carnival",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ShoeCarnival/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500007",shop:"shoes"},addTags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Shoe Zone":{name:"Shoe Zone",icon:"maki-shoe",imageURL:"https://graph.facebook.com/shoezone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500016",shop:"shoes"},addTags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Siemes Schuhcenter":{name:"Siemes Schuhcenter",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Schuhcenter.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2800720",shop:"shoes"},addTags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Skechers":{name:"Skechers",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SKECHERS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2945643",shop:"shoes"},addTags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"},terms:["sketchers"],matchScore:2,suggestion:true},"shop/shoes/Snipes":{name:"Snipes",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Snipes.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42306166",shop:"shoes"},addTags:{brand:"Snipes","brand:wikidata":"Q42306166","brand:wikipedia":"de:Snipes (Unternehmen)",name:"Snipes",shop:"shoes"},countryCodes:["at","ch","de","es","fr","it","nl","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Soft Moc":{name:"Soft Moc",icon:"maki-shoe",imageURL:"https://graph.facebook.com/softmocshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65012391",shop:"shoes"},addTags:{brand:"Soft Moc","brand:wikidata":"Q65012391",name:"Soft Moc",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Sperry":{name:"Sperry",icon:"maki-shoe",imageURL:"https://graph.facebook.com/sperry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7576421",shop:"shoes"},addTags:{brand:"Sperry","brand:wikidata":"Q7576421","brand:wikipedia":"en:Sperry Top-Sider",name:"Sperry",shop:"shoes"},countryCodes:["us"],terms:["sperry top sider"],matchScore:2,suggestion:true},"shop/shoes/Steve Madden":{name:"Steve Madden",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SteveMaddenShoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25352034",shop:"shoes"},addTags:{brand:"Steve Madden","brand:wikidata":"Q25352034","brand:wikipedia":"en:Steve Madden (company)",name:"Steve Madden",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Stride Rite":{name:"Stride Rite",icon:"maki-shoe",imageURL:"https://graph.facebook.com/striderite/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2356171",shop:"shoes"},addTags:{brand:"Stride Rite","brand:wikidata":"Q2356171","brand:wikipedia":"en:Stride Rite Corporation",name:"Stride Rite",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Stuart Weitzman":{name:"Stuart Weitzman",icon:"maki-shoe",imageURL:"https://graph.facebook.com/StuartWeitzman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q75244763",shop:"shoes"},addTags:{brand:"Stuart Weitzman","brand:wikidata":"Q75244763",name:"Stuart Weitzman",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Tamaris":{name:"Tamaris",icon:"maki-shoe",imageURL:"https://graph.facebook.com/tamarisinternational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994827",shop:"shoes"},addTags:{brand:"Tamaris","brand:wikidata":"Q61994827",name:"Tamaris",shop:"shoes"},countryCodes:["at","be","de","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/The Shoe Company":{name:"The Shoe Company",icon:"maki-shoe",imageURL:"https://graph.facebook.com/theshoeco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7763892",shop:"shoes"},addTags:{brand:"The Shoe Company","brand:wikidata":"Q7763892","brand:wikipedia":"en:The Shoe Company",name:"The Shoe Company",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/UGG":{name:"UGG",icon:"maki-shoe",imageURL:"https://graph.facebook.com/UGG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1138480",shop:"shoes"},addTags:{brand:"UGG","brand:wikidata":"Q1138480","brand:wikipedia":"en:UGG (brand)",name:"UGG",shop:"shoes"},countryCodes:["au","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Vans":{name:"Vans",icon:"maki-shoe",imageURL:"https://graph.facebook.com/VANS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1135366",shop:"shoes"},addTags:{brand:"Vans","brand:wikidata":"Q1135366","brand:wikipedia":"en:Vans",name:"Vans",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Walking on a Cloud":{name:"Walking on a Cloud",icon:"maki-shoe",imageURL:"https://graph.facebook.com/walkingonacloud/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65012662",shop:"shoes"},addTags:{brand:"Walking on a Cloud","brand:wikidata":"Q65012662",name:"Walking on a Cloud",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/tReds":{name:"tReds",icon:"maki-shoe",imageURL:"https://graph.facebook.com/tRedsOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81647338",shop:"shoes"},addTags:{brand:"tReds","brand:wikidata":"Q81647338",name:"tReds",shop:"shoes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/shoes/vanHaren":{name:"vanHaren",icon:"maki-shoe",imageURL:"https://graph.facebook.com/vanharenschoenen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390668",shop:"shoes"},addTags:{brand:"vanHaren","brand:wikidata":"Q62390668",name:"vanHaren",shop:"shoes"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Éram":{name:"Éram",icon:"maki-shoe",imageURL:"https://graph.facebook.com/eram.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16684192",shop:"shoes"},addTags:{brand:"Éram","brand:wikidata":"Q16684192","brand:wikipedia":"fr:Éram",name:"Éram",shop:"shoes"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/ЦентрОбувь":{name:"ЦентрОбувь",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Centrobuv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4504072",shop:"shoes"},addTags:{brand:"ЦентрОбувь","brand:wikidata":"Q4504072","brand:wikipedia":"ru:ЦентрОбувь",name:"ЦентрОбувь",shop:"shoes"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Юничел":{name:"Юничел",icon:"maki-shoe",imageURL:"https://graph.facebook.com/unichel.shoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390569",shop:"shoes"},addTags:{brand:"Юничел","brand:wikidata":"Q62390569",name:"Юничел",shop:"shoes"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/shoes/つるや":{name:"つるや",icon:"maki-shoe",imageURL:"https://graph.facebook.com/tsuruya.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11272578",shop:"shoes"},addTags:{brand:"つるや","brand:en":"Tsuruya","brand:ja":"つるや","brand:wikidata":"Q11272578","brand:wikipedia":"ja:つるや (靴屋)",name:"つるや","name:en":"Tsuruya","name:ja":"つるや",shop:"shoes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/shoes/東京靴流通センター":{name:"東京靴流通センター",icon:"maki-shoe",imageURL:"https://graph.facebook.com/chiyodafanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11318515",shop:"shoes"},addTags:{brand:"東京靴流通センター","brand:en":"Tokyo Shoes Retailing Center","brand:ja":"東京靴流通センター","brand:wikidata":"Q11318515","brand:wikipedia":"ja:チヨダ",name:"東京靴流通センター","name:en":"Tokyo Shoes Retailing Center","name:ja":"東京靴流通センター",shop:"shoes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/sports/Academy Sports + Outdoors":{name:"Academy Sports + Outdoors",icon:"fas-futbol",imageURL:"https://graph.facebook.com/Academy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4671380",shop:"sports"},addTags:{brand:"Academy Sports + Outdoors","brand:wikidata":"Q4671380","brand:wikipedia":"en:Academy Sports + Outdoors",name:"Academy Sports + Outdoors",shop:"sports"},countryCodes:["us"],terms:["academy","academy sports and outdoors"],matchScore:2,suggestion:true},"shop/sports/Adidas":{name:"Adidas",icon:"fas-futbol",imageURL:"https://graph.facebook.com/adidasUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3895",shop:"sports"},addTags:{brand:"Adidas","brand:wikidata":"Q3895","brand:wikipedia":"en:Adidas",name:"Adidas",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Aktiesport":{name:"Aktiesport",icon:"fas-futbol",imageURL:"https://graph.facebook.com/aktiesport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57546889",shop:"sports"},addTags:{brand:"Aktiesport","brand:wikidata":"Q57546889",name:"Aktiesport",shop:"sports"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/sports/American Golf":{name:"American Golf",icon:"fas-futbol",imageURL:"https://graph.facebook.com/americangolf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62657494",shop:"sports"},addTags:{brand:"American Golf","brand:wikidata":"Q62657494",name:"American Golf",shop:"sports",sport:"golf"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/sports/Big 5 Sporting Goods":{name:"Big 5 Sporting Goods",icon:"fas-futbol",imageURL:"https://graph.facebook.com/Big5SportingGoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4904902",shop:"sports"},addTags:{brand:"Big 5 Sporting Goods","brand:wikidata":"Q4904902","brand:wikipedia":"en:Big 5 Sporting Goods",name:"Big 5 Sporting Goods",shop:"sports"},countryCodes:["us"],terms:["big 5"],matchScore:2,suggestion:true},"shop/sports/Centauro":{name:"Centauro",icon:"fas-futbol",imageURL:"https://graph.facebook.com/centauroesporte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28679561",shop:"sports"},addTags:{brand:"Centauro","brand:wikidata":"Q28679561","brand:wikipedia":"pt:Lojas Centauro",name:"Centauro",shop:"sports"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/sports/Champs Sports":{name:"Champs Sports",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q2955924",shop:"sports"},addTags:{brand:"Champs Sports","brand:wikidata":"Q2955924","brand:wikipedia":"en:Champs Sports",name:"Champs Sports",shop:"sports"},countryCodes:["ca","pr","us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Decathlon":{name:"Decathlon",icon:"fas-futbol",imageURL:"https://graph.facebook.com/DecathlonSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q509349",shop:"sports"},addTags:{brand:"Decathlon","brand:wikidata":"Q509349","brand:wikipedia":"en:Decathlon Group",name:"Decathlon",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Dick's Sporting Goods":{name:"Dick's Sporting Goods",icon:"fas-futbol",imageURL:"https://graph.facebook.com/dickssportinggoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5272601",shop:"sports"},addTags:{brand:"Dick's Sporting Goods","brand:wikidata":"Q5272601","brand:wikipedia":"en:Dick's Sporting Goods",name:"Dick's Sporting Goods",shop:"sports"},countryCodes:["us"],terms:["dicks"],matchScore:2,suggestion:true},"shop/sports/Finish Line":{name:"Finish Line",icon:"fas-futbol",imageURL:"https://graph.facebook.com/finishline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5450341",shop:"sports"},addTags:{brand:"Finish Line","brand:wikidata":"Q5450341","brand:wikipedia":"en:Finish Line, Inc.",name:"Finish Line",shop:"sports"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Golf Galaxy":{name:"Golf Galaxy",icon:"fas-futbol",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGolf%20Galaxy%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q69364358",shop:"sports"},addTags:{brand:"Golf Galaxy","brand:wikidata":"Q69364358",name:"Golf Galaxy",shop:"sports",sport:"golf"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Hervis":{name:"Hervis",icon:"fas-futbol",imageURL:"https://graph.facebook.com/hervissports.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1614816",shop:"sports"},addTags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"},countryCodes:["at","cz","de","hr","hu","ro","si"],terms:["hervis sport","hervis sports"],matchScore:2,suggestion:true},"shop/sports/Hibbett Sports":{name:"Hibbett Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/HibbettSports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5750671",shop:"sports"},addTags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Intersport":{name:"Intersport",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q666888",shop:"sports"},addTags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/JD Sports":{name:"JD Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/2140630076185020/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6108019",shop:"sports"},addTags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"},countryCodes:["de","es","fr","gb","ie","nl"],terms:["jd"],matchScore:2,suggestion:true},"shop/sports/Marathon Sports":{name:"Marathon Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/marathonsports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3027516",shop:"sports"},addTags:{brand:"Marathon Sports","brand:wikidata":"Q3027516","brand:wikipedia":"es:Marathon Sports",name:"Marathon Sports",shop:"sports"},countryCodes:["bo","ec","pe"],terms:[],matchScore:2,suggestion:true},"shop/sports/Martes Sport":{name:"Martes Sport",icon:"fas-futbol",imageURL:"https://graph.facebook.com/sklepmartes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073490",shop:"sports"},addTags:{brand:"Martes Sport","brand:wikidata":"Q62073490",name:"Martes Sport",shop:"sports"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/sports/Modell's Sporting Goods":{name:"Modell's Sporting Goods",icon:"fas-futbol",imageURL:"https://graph.facebook.com/modells/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317844",shop:"sports"},addTags:{brand:"Modell's Sporting Goods","brand:wikidata":"Q3317844","brand:wikipedia":"en:Modell's Sporting Goods",name:"Modell's Sporting Goods",shop:"sports"},countryCodes:["us"],terms:["modells"],matchScore:2,suggestion:true},"shop/sports/Peloton":{name:"Peloton",icon:"fas-futbol",imageURL:"https://graph.facebook.com/onepeloton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56276186",shop:"sports"},addTags:{brand:"Peloton","brand:wikidata":"Q56276186","brand:wikipedia":"en:Peloton (company)",name:"Peloton",shop:"sports"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Planeta Sport":{name:"Planeta Sport",icon:"fas-futbol",imageURL:"https://graph.facebook.com/planetasportrs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q72193528",shop:"sports"},addTags:{brand:"Planeta Sport","brand:en":"Planeta Sport","brand:rs":"Planeta Sport","brand:wikidata":"Q72193528",name:"Planeta Sport",shop:"sports"},countryCodes:["rs"],terms:["planeta"],matchScore:2,suggestion:true},"shop/sports/Play It Again Sports":{name:"Play It Again Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/playitagainsports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7203029",shop:"sports"},addTags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Rebel":{name:"Rebel",icon:"fas-futbol",imageURL:"https://graph.facebook.com/RebelSport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18636397",shop:"sports"},addTags:{brand:"Rebel","brand:wikidata":"Q18636397","brand:wikipedia":"en:Rebel (company)",name:"Rebel",shop:"sports"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sport 2000":{name:"Sport 2000",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SPORT2000France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q262394",shop:"sports"},addTags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"},countryCodes:["at","de","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sport Chek":{name:"Sport Chek",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SportChekOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3494037",shop:"sports"},addTags:{brand:"Sport Chek","brand:wikidata":"Q3494037","brand:wikipedia":"en:Sport Chek",name:"Sport Chek",shop:"sports"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sport Zone":{name:"Sport Zone",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q18485899",shop:"sports"},addTags:{brand:"Sport Zone","brand:wikidata":"Q18485899","brand:wikipedia":"pt:Sport Zone",name:"Sport Zone",shop:"sports"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sporting Life":{name:"Sporting Life",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SportingLifeCan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579583",shop:"sports"},addTags:{brand:"Sporting Life","brand:wikidata":"Q7579583","brand:wikipedia":"en:Sporting Life (retailer)",name:"Sporting Life",shop:"sports"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sportisimo":{name:"Sportisimo",icon:"fas-futbol",imageURL:"https://graph.facebook.com/1463426373966592/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54974273",shop:"sports"},addTags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sports Authority":{name:"Sports Authority",icon:"fas-futbol",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSports%20Authority%20logo2011.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7579688",shop:"sports"},addTags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Sports Direct":{name:"Sports Direct",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SportsDirect/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579661",shop:"sports"},addTags:{brand:"Sports Direct","brand:wikidata":"Q7579661","brand:wikipedia":"en:SportsDirect.com",name:"Sports Direct",shop:"sports"},terms:["sportsdirect.com"],matchScore:2,suggestion:true},"shop/sports/Sprinter":{name:"Sprinter",icon:"fas-futbol",imageURL:"https://pbs.twimg.com/profile_images/718009864681885696/h9_BQE32_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6133465",shop:"sports"},addTags:{brand:"Sprinter","brand:wikidata":"Q6133465","brand:wikipedia":"es:Sprinter (tienda)",name:"Sprinter",shop:"sports"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/sports/Stadium":{name:"Stadium",icon:"fas-futbol",imageURL:"https://graph.facebook.com/stadium.finland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4993863",shop:"sports"},addTags:{brand:"Stadium","brand:wikidata":"Q4993863","brand:wikipedia":"sv:Stadium (detaljhandelskedja)",name:"Stadium",shop:"sports"},countryCodes:["de","dk","fi","se"],terms:[],matchScore:2,suggestion:true},"shop/sports/XXL":{name:"XXL",icon:"fas-futbol",imageURL:"https://graph.facebook.com/xxlnorge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12010840",shop:"sports"},addTags:{brand:"XXL","brand:wikidata":"Q12010840","brand:wikipedia":"no:XXL",name:"XXL",shop:"sports"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/sports/Декатлон":{name:"Декатлон",icon:"fas-futbol",imageURL:"https://graph.facebook.com/DecathlonSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q509349",shop:"sports"},addTags:{brand:"Декатлон","brand:en":"Decathlon","brand:ru":"Декатлон","brand:wikidata":"Q509349","brand:wikipedia":"ru:Decathlon",name:"Декатлон","name:en":"Decathlon","name:ru":"Декатлон",shop:"sports"},countryCodes:["bg","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/sports/Спортмастер":{name:"Спортмастер",icon:"fas-futbol",imageURL:"https://graph.facebook.com/sportmaster.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4438176",shop:"sports"},addTags:{brand:"Спортмастер","brand:en":"Sportmaster","brand:ru":"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер","name:en":"Sportmaster","name:ru":"Спортмастер",shop:"sports"},countryCodes:["by","kz","ru","ua"],terms:["спортмастер гипер"],matchScore:2,suggestion:true},"shop/stationery/Bureau Vallée":{name:"Bureau Vallée",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/BureauVallee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18385014",shop:"stationery"},addTags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/stationery/McPaper":{name:"McPaper",icon:"fas-paperclip",geometry:["point","area"],tags:{"brand:wikidata":"Q1915329",shop:"stationery"},addTags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"},countryCodes:["ch","de"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Office Depot":{name:"Office Depot",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/OfficeDepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1337797",shop:"stationery"},addTags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"},terms:[],matchScore:2,suggestion:true},"shop/stationery/OfficeMax":{name:"OfficeMax",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/OfficeDepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079111",shop:"stationery"},addTags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"},countryCodes:["mx","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Officeworks":{name:"Officeworks",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/officeworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079486",shop:"stationery"},addTags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Pagro":{name:"Pagro",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/pagro.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57550022",shop:"stationery"},addTags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Paper Source":{name:"Paper Source",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/PaperSource/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25000269",shop:"stationery"},addTags:{brand:"Paper Source","brand:wikidata":"Q25000269","brand:wikipedia":"en:Paper Source",name:"Paper Source",shop:"stationery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Paperchase":{name:"Paperchase",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/paperchase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7132739",shop:"stationery"},addTags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Ryman":{name:"Ryman",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/ryman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7385188",shop:"stationery"},addTags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Smiggle":{name:"Smiggle",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/smiggle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7544536",shop:"stationery"},addTags:{brand:"Smiggle","brand:wikidata":"Q7544536",name:"Smiggle",shop:"stationery"},countryCodes:["at","gb","hk","ie","my","nz","sg"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Staples":{name:"Staples",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/staples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q785943",shop:"stationery"},addTags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"},terms:[],matchScore:2,suggestion:true},"shop/stationery/Комус":{name:"Комус",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/komusclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4230314",shop:"stationery"},addTags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/storage_rental/Extra Space Storage":{name:"Extra Space Storage",icon:"temaki-storage_rental",imageURL:"https://graph.facebook.com/extraspace/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422162",shop:"storage_rental"},addTags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"},countryCodes:["us"],terms:["extra space"],matchScore:2,suggestion:true},"shop/storage_rental/Public Storage":{name:"Public Storage",icon:"temaki-storage_rental",imageURL:"https://graph.facebook.com/PublicStorage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1156045",shop:"storage_rental"},addTags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/storage_rental/U-Haul":{name:"U-Haul",icon:"temaki-storage_rental",imageURL:"https://graph.facebook.com/uhaul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7862902",shop:"storage_rental"},addTags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"storage_rental"},countryCodes:["ca","us"],terms:["uhaul neighborhood dealer"],matchScore:2,suggestion:true},"shop/supermarket/8 à Huit":{name:"8 à Huit",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fashion8a8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818601",shop:"supermarket"},addTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/99 Ranch Market":{name:"99 Ranch Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/99RanchMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4646307",shop:"supermarket"},addTags:{brand:"99 Ranch Market","brand:wikidata":"Q4646307","brand:wikipedia":"en:99 Ranch Market",cuisine:"asian",name:"99 Ranch Market","name:en":"99 Ranch Market","name:zh-Hans":"大华超级市场","name:zh-Hant":"大華超級市場",shop:"supermarket"},countryCodes:["us"],terms:["99 ranch","ranch 99"],matchScore:2,suggestion:true},"shop/supermarket/A&O":{name:"A&O",icon:"maki-grocery",imageURL:"https://graph.facebook.com/www.aeo.it/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3600279",shop:"supermarket"},addTags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/A101":{name:"A101",icon:"maki-grocery",imageURL:"https://graph.facebook.com/a101iletisim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6034496",shop:"supermarket"},addTags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/AD Delhaize":{name:"AD Delhaize",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delhaize/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1184173",shop:"supermarket"},addTags:{brand:"AD Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"AD Delhaize",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ADEG":{name:"ADEG",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mein.adeg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q290211",shop:"supermarket"},addTags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Acme":{name:"Acme",icon:"maki-grocery",imageURL:"https://graph.facebook.com/acmemarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q341975",shop:"supermarket"},addTags:{brand:"Acme","brand:wikidata":"Q341975","brand:wikipedia":"en:Acme Markets",name:"Acme",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ahorramás":{name:"Ahorramás",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Ahorramas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58221883",shop:"supermarket"},addTags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albert":{name:"Albert",icon:"maki-grocery",imageURL:"https://graph.facebook.com/albertceskarepublika/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9144241",shop:"supermarket"},addTags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albert Heijn":{name:"Albert Heijn",icon:"maki-grocery",imageURL:"https://graph.facebook.com/albertheijn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1653985",shop:"supermarket"},addTags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albert Heijn XL":{name:"Albert Heijn XL",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q78163765",shop:"supermarket"},addTags:{brand:"Albert Heijn XL","brand:wikidata":"Q78163765","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn XL",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albertsons":{name:"Albertsons",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Albertsons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4712282",shop:"supermarket"},addTags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"},countryCodes:["us"],terms:["albertsons supermarket"],matchScore:2,suggestion:true},"shop/supermarket/Alcampo":{name:"Alcampo",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1201778971089739776/TL0LpeEQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2832081",shop:"supermarket"},addTags:{brand:"Alcampo","brand:wikidata":"Q2832081","brand:wikipedia":"es:Alcampo",name:"Alcampo",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi":{name:"Aldi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ALDI.USA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q125054",shop:"supermarket"},addTags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi Nord":{name:"Aldi Nord",icon:"maki-grocery",imageURL:"https://graph.facebook.com/154533341244676/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41171373",shop:"supermarket"},addTags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi Süd":{name:"Aldi Süd",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ALDI.SUED/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41171672",shop:"supermarket"},addTags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alfamart":{name:"Alfamart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/alfamartku/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23745600",shop:"supermarket"},addTags:{brand:"Alfamart","brand:wikidata":"Q23745600","brand:wikipedia":"en:Alfamart",name:"Alfamart",shop:"supermarket"},countryCodes:["id","ph"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alimerka":{name:"Alimerka",icon:"maki-grocery",imageURL:"https://graph.facebook.com/alimerka.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16482738",shop:"supermarket"},addTags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alnatura":{name:"Alnatura",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Alnatura/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q876811",shop:"supermarket"},addTags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",organic:"only",shop:"supermarket"},countryCodes:["ch","de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Amigo":{name:"Amigo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/amigopuertorico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4746234",shop:"supermarket"},addTags:{alt_name:"Supermercados Amigo",brand:"Amigo","brand:wikidata":"Q4746234","brand:wikipedia":"en:Amigo Supermarkets",name:"Amigo",shop:"supermarket"},countryCodes:["us"],terms:["amigo puerto rico","amigo supermarket","supermercado amigo"],matchScore:2,suggestion:true},"shop/supermarket/Asda":{name:"Asda",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Asda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297410",shop:"supermarket"},addTags:{brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Atacadão":{name:"Atacadão",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Atacadaosa.Oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2868739",shop:"supermarket"},addTags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Auchan":{name:"Auchan",icon:"maki-grocery",imageURL:"https://graph.facebook.com/auchan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",shop:"supermarket"},addTags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/BI-LO":{name:"BI-LO",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BILOSuperSaver/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835620",shop:"supermarket"},addTags:{brand:"BI-LO","brand:wikidata":"Q4835620","brand:wikipedia":"en:BI-LO (United States)",name:"BI-LO",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/BM":{name:"BM",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BMSupermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073462",shop:"supermarket"},addTags:{brand:"BM","brand:wikidata":"Q62073462",name:"BM",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bashas'":{name:"Bashas'",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BashasSupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4866786",shop:"supermarket"},addTags:{brand:"Bashas'","brand:wikidata":"Q4866786","brand:wikipedia":"en:Bashas'",name:"Bashas'",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Biedronka":{name:"Biedronka",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BiedronkaCodziennie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q857182",shop:"supermarket"},addTags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"pl:Biedronka (sieć handlowa)",name:"Biedronka",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Big Bazaar":{name:"Big Bazaar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BigBazaar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3631008",shop:"supermarket"},addTags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"supermarket"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Big C":{name:"Big C",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BigCBigService/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q858665",shop:"supermarket"},addTags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"},countryCodes:["th","vn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Big-A":{name:"Big-A",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11330804",shop:"supermarket"},addTags:{brand:"Big-A","brand:en":"Big-A","brand:jp":"ビッグ・エー","brand:wikidata":"Q11330804","brand:wikipedia":"jp:ビッグ・エー",name:"Big-A","name:en":"Big-A","name:ja":"ビッグ・エー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Billa":{name:"Billa",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BILLA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q537781",shop:"supermarket"},addTags:{brand:"Billa","brand:wikidata":"Q537781","brand:wikipedia":"en:Billa (supermarket)",name:"Billa",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bim":{name:"Bim",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bimturkiye/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1022075",shop:"supermarket"},addTags:{brand:"Bim","brand:wikidata":"Q1022075","brand:wikipedia":"en:Bim (company)",name:"Bim",shop:"supermarket"},countryCodes:["ma","tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bingo":{name:"Bingo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bingotuzla/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16842066",shop:"supermarket"},addTags:{brand:"Bingo","brand:wikidata":"Q16842066","brand:wikipedia":"bs:Bingo (kompanija)",name:"Bingo",shop:"supermarket"},countryCodes:["ba"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bio C' Bon":{name:"Bio C' Bon",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogoBiocBon2.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q54312551",shop:"supermarket"},addTags:{brand:"Bio C' Bon","brand:wikidata":"Q54312551","brand:wikipedia":"fr:Bio c'bon",name:"Bio C' Bon",shop:"supermarket"},countryCodes:["es","fr","jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bio Company":{name:"Bio Company",icon:"maki-grocery",imageURL:"https://graph.facebook.com/biocompany.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q864179",shop:"supermarket"},addTags:{brand:"Bio Company","brand:wikidata":"Q864179","brand:wikipedia":"de:Bio Company",name:"Bio Company",organic:"only",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Biocoop":{name:"Biocoop",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Biocoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2904039",shop:"supermarket"},addTags:{brand:"Biocoop","brand:wikidata":"Q2904039","brand:wikipedia":"fr:Biocoop",name:"Biocoop",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bodega Aurrera":{name:"Bodega Aurrera",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BodegaAurrera/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3365858",shop:"supermarket"},addTags:{brand:"Bodega Aurrera","brand:wikidata":"Q3365858","brand:wikipedia":"en:Bodega Aurrerá",name:"Bodega Aurrera",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bravo":{name:"Bravo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bravo.supermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16985159",shop:"supermarket"},addTags:{brand:"Bravo","brand:wikidata":"Q16985159","brand:wikipedia":"en:Bravo (supermarket)",name:"Bravo",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Brookshire Brothers":{name:"Brookshire Brothers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BrookshireBros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4975084",shop:"supermarket"},addTags:{brand:"Brookshire Brothers","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",name:"Brookshire Brothers",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Brookshire's":{name:"Brookshire's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Brookshires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4975085",shop:"supermarket"},addTags:{brand:"Brookshire's","brand:wikidata":"Q4975085","brand:wikipedia":"en:Brookshire Grocery Company",name:"Brookshire's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Budgens":{name:"Budgens",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DiscoverBudgens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4985016",shop:"supermarket"},addTags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bulk Barn":{name:"Bulk Barn",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BulkBarnFoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4996466",shop:"supermarket"},addTags:{brand:"Bulk Barn","brand:wikidata":"Q4996466",name:"Bulk Barn",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bunnpris":{name:"Bunnpris",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bunnpris.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1774634",shop:"supermarket"},addTags:{brand:"Bunnpris","brand:wikidata":"Q1774634","brand:wikipedia":"en:Bunnpris",name:"Bunnpris",shop:"supermarket"},countryCodes:["no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bónus":{name:"Bónus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bonus.is/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3480158",shop:"supermarket"},addTags:{brand:"Bónus","brand:wikidata":"Q3480158","brand:wikipedia":"en:Bónus",name:"Bónus",shop:"supermarket"},countryCodes:["fo","is"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/C-Town Supermarkets":{name:"C-Town Supermarkets",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Ctown.supermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5005929",shop:"supermarket"},addTags:{brand:"C-Town Supermarkets","brand:wikidata":"Q5005929","brand:wikipedia":"en:C-Town Supermarkets",name:"C-Town",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/CAP-Markt":{name:"CAP-Markt",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCAP%20Markt%20K%C3%B6penick.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1022827",shop:"supermarket"},addTags:{brand:"CAP","brand:wikidata":"Q1022827","brand:wikipedia":"de:CAP (Markt)",name:"CAP-Markt",shop:"supermarket"},countryCodes:["de"],terms:["cap"],matchScore:2,suggestion:true},"shop/supermarket/CBA":{name:"CBA",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCBA%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q779845",shop:"supermarket"},addTags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/COOP Jednota":{name:"COOP Jednota",icon:"maki-grocery",imageURL:"https://graph.facebook.com/COOPJednota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41629254",shop:"supermarket"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"},countryCodes:["cz","sk"],terms:["jednota"],matchScore:2,suggestion:true},"shop/supermarket/Cactus":{name:"Cactus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mycactuslu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466918",shop:"supermarket"},addTags:{brand:"Cactus","brand:wikidata":"Q466918","brand:wikipedia":"lb:Cactus",name:"Cactus",shop:"supermarket"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Caprabo":{name:"Caprabo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Caprabo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1980781",shop:"supermarket"},addTags:{brand:"Caprabo","brand:wikidata":"Q1980781","brand:wikipedia":"en:Caprabo",name:"Caprabo",shop:"supermarket"},countryCodes:["ad","es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Cardenas":{name:"Cardenas",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CardenasMarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64149543",shop:"supermarket"},addTags:{brand:"Cardenas","brand:wikidata":"Q64149543","brand:wikipedia":"en:Cardenas (supermarket)",cuisine:"latin_american",name:"Cardenas",shop:"supermarket"},countryCodes:["us"],terms:["mi pueblo","mi pueblo food center"],matchScore:2,suggestion:true},"shop/supermarket/Cargills Food City (Sri Lanka)":{name:"Cargills Food City (Sri Lanka)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/cargillsfoodcity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58353955",shop:"supermarket"},addTags:{brand:"Cargills Food City","brand:wikidata":"Q58353955",name:"Cargills Food City",shop:"supermarket"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour":{name:"Carrefour",icon:"maki-grocery",imageURL:"https://graph.facebook.com/carrefour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",shop:"supermarket"},addTags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour City":{name:"Carrefour City",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CarrefourCity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940187",shop:"supermarket"},addTags:{brand:"Carrefour City","brand:wikidata":"Q2940187","brand:wikipedia":"fr:Carrefour City",name:"Carrefour City",shop:"supermarket"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour Contact":{name:"Carrefour Contact",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vieuxberquin59232/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940188",shop:"supermarket"},addTags:{brand:"Carrefour Contact","brand:wikidata":"Q2940188","brand:wikipedia":"fr:Carrefour Contact",name:"Carrefour Contact",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carrefour Market":{name:"Carrefour Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/carrefourmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2689639",shop:"supermarket"},addTags:{brand:"Carrefour Market","brand:wikidata":"Q2689639","brand:wikipedia":"fr:Carrefour Market",name:"Carrefour Market",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Carulla":{name:"Carulla",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupermercadosCarulla/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5047480",shop:"supermarket"},addTags:{brand:"Carulla","brand:wikidata":"Q5047480","brand:wikipedia":"en:Carulla",name:"Carulla",shop:"supermarket"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Centre Commercial E. Leclerc":{name:"Centre Commercial E. Leclerc",icon:"maki-grocery",imageURL:"https://graph.facebook.com/E.Leclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",shop:"supermarket"},addTags:{brand:"Centre Commercial E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Centre Commercial E. Leclerc",shop:"supermarket"},countryCodes:["fr","pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Chata Polska":{name:"Chata Polska",icon:"maki-grocery",imageURL:"https://graph.facebook.com/chatapolskasklepy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994406",shop:"supermarket"},addTags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Checkers":{name:"Checkers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/checkerssa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5089126",shop:"supermarket"},addTags:{brand:"Checkers","brand:wikidata":"Q5089126","brand:wikipedia":"en:Checkers (supermarket chain)",name:"Checkers",shop:"supermarket"},countryCodes:["bw","na","za"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Chedraui":{name:"Chedraui",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CHEDRAUIOFICIAL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2961952",shop:"supermarket"},addTags:{brand:"Chedraui","brand:wikidata":"Q2961952","brand:wikipedia":"en:Chedraui",name:"Chedraui",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/City Market":{name:"City Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CityMarketGrocery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5123299",shop:"supermarket"},addTags:{brand:"City Market","brand:wikidata":"Q5123299","brand:wikipedia":"en:City Market (US grocery store chain)",name:"City Market",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Co-op (Canada)":{name:"Co-op (Canada)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/CoopCRS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",shop:"supermarket"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coles":{name:"Coles",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1108172",shop:"supermarket"},addTags:{brand:"Coles","brand:wikidata":"Q1108172","brand:wikipedia":"en:Coles Supermarkets",name:"Coles",shop:"supermarket"},countryCodes:["au","gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Colruyt":{name:"Colruyt",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Colruyt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2363991",shop:"supermarket"},addTags:{brand:"Colruyt","brand:wikidata":"Q2363991","brand:wikipedia":"en:Colruyt (supermarket)",name:"Colruyt",shop:"supermarket"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Combi":{name:"Combi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Combi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1113618",shop:"supermarket"},addTags:{brand:"Combi","brand:wikidata":"Q1113618","brand:wikipedia":"de:Combi (Einkaufsmarkt)",name:"Combi",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Comercial Mexicana":{name:"Comercial Mexicana",icon:"maki-grocery",imageURL:"https://graph.facebook.com/209308192464395/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2985173",shop:"supermarket"},addTags:{brand:"Comercial Mexicana","brand:wikidata":"Q2985173","brand:wikipedia":"es:Comercial Mexicana",name:"Comercial Mexicana",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Conad":{name:"Conad",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Conad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q639075",shop:"supermarket"},addTags:{brand:"Conad","brand:wikidata":"Q639075","brand:wikipedia":"it:Conad",name:"Conad",shop:"supermarket"},countryCodes:["al","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Conad City":{name:"Conad City",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ConadCityQualiano/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57543102",shop:"supermarket"},addTags:{brand:"Conad City","brand:wikidata":"Q57543102",name:"Conad City",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Condis":{name:"Condis",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Condislife/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57417581",shop:"supermarket"},addTags:{brand:"Condis","brand:wikidata":"Q57417581",name:"Condis",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Consum":{name:"Consum",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermercadosconsum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8350308",shop:"supermarket"},addTags:{brand:"Consum","brand:wikidata":"Q8350308","brand:wikipedia":"es:Consum",name:"Consum",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Continente":{name:"Continente",icon:"maki-grocery",imageURL:"https://graph.facebook.com/continenteoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2995683",shop:"supermarket"},addTags:{brand:"Continente","brand:wikidata":"Q2995683","brand:wikipedia":"en:Continente (Supermarket)",name:"Continente",shop:"supermarket"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coop Prix":{name:"Coop Prix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coopprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5167705",shop:"supermarket"},addTags:{brand:"Coop Prix","brand:wikidata":"Q5167705","brand:wikipedia":"no:Coop Prix",name:"Coop Prix",shop:"supermarket"},countryCodes:["no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coop (Schweiz)":{name:"Coop (Schweiz)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coop.ch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q432564",shop:"supermarket"},addTags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"supermarket"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Cora":{name:"Cora",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coraBelgium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q686643",shop:"supermarket"},addTags:{brand:"Cora","brand:wikidata":"Q686643","brand:wikipedia":"en:Cora (hypermarket)",name:"Cora",shop:"supermarket"},countryCodes:["be","fr","lu","ro"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Costcutter":{name:"Costcutter",icon:"maki-grocery",imageURL:"https://graph.facebook.com/costcutter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175072",shop:"supermarket"},addTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coto":{name:"Coto",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175411",shop:"supermarket"},addTags:{brand:"Coto","brand:wikidata":"Q5175411","brand:wikipedia":"es:Coto (supermercado)",name:"Coto",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Countdown":{name:"Countdown",icon:"maki-grocery",imageURL:"https://graph.facebook.com/countdown/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5176845",shop:"supermarket"},addTags:{brand:"Countdown","brand:wikidata":"Q5176845","brand:wikipedia":"en:Countdown (supermarket)",name:"Countdown",shop:"supermarket"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Covirán":{name:"Covirán",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Coviran/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61070539",shop:"supermarket"},addTags:{brand:"Covirán","brand:wikidata":"Q61070539","brand:wikipedia":"eu:Covirán",name:"Covirán","name:pt":"Coviran",shop:"supermarket"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Cub Foods":{name:"Cub Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Cub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5191916",shop:"supermarket"},addTags:{brand:"Cub Foods","brand:wikidata":"Q5191916","brand:wikipedia":"en:Cub Foods",name:"Cub Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/D'Agostino":{name:"D'Agostino",icon:"maki-grocery",imageURL:"https://graph.facebook.com/yourdagnyc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20656844",shop:"supermarket"},addTags:{brand:"D'Agostino","brand:wikidata":"Q20656844","brand:wikipedia":"en:D'Agostino Supermarkets",name:"D'Agostino",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/D1":{name:"D1",icon:"maki-grocery",imageURL:"https://graph.facebook.com/427264640797493/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43403418",shop:"supermarket"},addTags:{brand:"D1","brand:wikidata":"Q43403418","brand:wikipedia":"es:Tiendas D1",name:"D1",shop:"supermarket"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dagli'Brugsen":{name:"Dagli'Brugsen",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DagliBrugsen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12307017",shop:"supermarket"},addTags:{brand:"Dagli'Brugsen","brand:wikidata":"Q12307017","brand:wikipedia":"en:Dagli'Brugsen",name:"Dagli'Brugsen",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Decò":{name:"Decò",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermercatideco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65127915",shop:"supermarket"},addTags:{brand:"Decò","brand:wikidata":"Q65127915","brand:wikipedia":"it:Decò",name:"Decò",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Deen":{name:"Deen",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DEENSupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13571727",shop:"supermarket"},addTags:{brand:"Deen","brand:wikidata":"Q13571727","brand:wikipedia":"nl:Deen (supermarkt)",name:"Deen",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Delhaize":{name:"Delhaize",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delhaize/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1184173",shop:"supermarket"},addTags:{brand:"Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"Delhaize",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Delikatesy Centrum":{name:"Delikatesy Centrum",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delikatesypl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11693824",shop:"supermarket"},addTags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Denner":{name:"Denner",icon:"maki-grocery",imageURL:"https://graph.facebook.com/denner.ch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q379911",shop:"supermarket"},addTags:{brand:"Denner","brand:wikidata":"Q379911","brand:wikipedia":"en:Denner (supermarket)",name:"Denner",shop:"supermarket"},countryCodes:["ch","li"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Despar":{name:"Despar",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"supermarket"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Despar",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Despensa Familiar":{name:"Despensa Familiar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DespensaFamiliarGuatemala/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994849",shop:"supermarket"},addTags:{brand:"Despensa Familiar","brand:wikidata":"Q61994849",name:"Despensa Familiar",shop:"supermarket"},countryCodes:["gt","hn","sv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dia":{name:"Dia",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DIAEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q925132",shop:"supermarket"},addTags:{brand:"Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia",shop:"supermarket"},terms:["supermercado dia"],matchScore:2,suggestion:true},"shop/supermarket/Dia Market":{name:"Dia Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DIAEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q925132",shop:"supermarket"},addTags:{brand:"Dia Market","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia Market",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dierbergs":{name:"Dierbergs",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Dierbergs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5274978",shop:"supermarket"},addTags:{brand:"Dierbergs","brand:wikidata":"Q5274978","brand:wikipedia":"en:Dierbergs Markets",name:"Dierbergs",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dino":{name:"Dino",icon:"maki-grocery",imageURL:"https://graph.facebook.com/marketdinobieniewice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11694239",shop:"supermarket"},addTags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dirk van den Broek":{name:"Dirk van den Broek",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Dirksupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17502722",shop:"supermarket"},addTags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Disco (Argentina)":{name:"Disco (Argentina)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DiscoArgentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6135978",shop:"supermarket"},addTags:{brand:"Disco","brand:wikidata":"Q6135978","brand:wikipedia":"es:Disco (supermercado de Argentina)",name:"Disco",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Disco (Uruguay)":{name:"Disco (Uruguay)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/discouruguay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16636819",shop:"supermarket"},addTags:{brand:"Disco","brand:wikidata":"Q16636819","brand:wikipedia":"es:Disco (supermercado de Uruguay)",name:"Disco",shop:"supermarket"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Diska":{name:"Diska",icon:"maki-grocery",imageURL:"https://graph.facebook.com/diskamarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390177",shop:"supermarket"},addTags:{brand:"Diska","brand:wikidata":"Q62390177",name:"Diska",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dollar General Market":{name:"Dollar General Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/dollargeneral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q145168",shop:"supermarket"},addTags:{brand:"Dollar General Market","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dunnes Stores":{name:"Dunnes Stores",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DunnesStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1266203",shop:"supermarket"},addTags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/E-Center":{name:"E-Center",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"E-Center","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"E-Center",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/E. Leclerc":{name:"E. Leclerc",icon:"maki-grocery",imageURL:"https://graph.facebook.com/E.Leclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",shop:"supermarket"},addTags:{brand:"E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"en:E.Leclerc",name:"E. Leclerc",shop:"supermarket"},countryCodes:["es","fr","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/E. Leclerc Drive":{name:"E. Leclerc Drive",icon:"maki-grocery",imageURL:"https://graph.facebook.com/E.Leclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",shop:"supermarket"},addTags:{brand:"E. Leclerc Drive","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"E. Leclerc Drive",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/EMTÉ":{name:"EMTÉ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FEmte%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3119122",shop:"supermarket"},addTags:{brand:"EMTÉ","brand:wikidata":"Q3119122","brand:wikipedia":"en:EMTÉ",name:"EMTÉ",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Edeka":{name:"Edeka",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Edeka",shop:"supermarket"},countryCodes:["de"],terms:["edeka neukauf"],matchScore:2,suggestion:true},"shop/supermarket/Edeka xpress":{name:"Edeka xpress",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Edeka xpress",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eko":{name:"Eko",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q9251859",shop:"supermarket"},addTags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ekom":{name:"Ekom",icon:"maki-grocery",imageURL:"https://graph.facebook.com/1013432382051351/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073442",shop:"supermarket"},addTags:{brand:"Ekom","brand:wikidata":"Q62073442",name:"Ekom",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ekono":{name:"Ekono",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogotipo%20Ekono.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2842729",shop:"supermarket"},addTags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eroski":{name:"Eroski",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Eroski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1361349",shop:"supermarket"},addTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"},countryCodes:["es","gi"],terms:["charter","eroski center"],matchScore:2,suggestion:true},"shop/supermarket/Eroski City":{name:"Eroski City",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Eroski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1361349",shop:"supermarket"},addTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski City",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Esselunga":{name:"Esselunga",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Esselunga/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1059636",shop:"supermarket"},addTags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/EuroSpin":{name:"EuroSpin",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EurospinItaliaSpa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1374674",shop:"supermarket"},addTags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:Eurospin",name:"EuroSpin",shop:"supermarket"},countryCodes:["it","si"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eurospar":{name:"Eurospar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EurosparIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12309283",shop:"supermarket"},addTags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Extra":{name:"Extra",icon:"maki-grocery",imageURL:"https://graph.facebook.com/extramorkved/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11964085",shop:"supermarket"},addTags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"},terms:["coop extra"],matchScore:2,suggestion:true},"shop/supermarket/Famila":{name:"Famila",icon:"maki-grocery",imageURL:"https://graph.facebook.com/1674632829509874/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1395108",shop:"supermarket"},addTags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"},countryCodes:["de","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Family Fare":{name:"Family Fare",icon:"maki-grocery",imageURL:"https://graph.facebook.com/shopfamilyfare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19868045",shop:"supermarket"},addTags:{brand:"Family Fare","brand:wikidata":"Q19868045","brand:wikipedia":"en:Family Fare",name:"Family Fare",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fareway":{name:"Fareway",icon:"maki-grocery",imageURL:"https://graph.facebook.com/farewaystores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5434998",shop:"supermarket"},addTags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Farm Boy":{name:"Farm Boy",icon:"maki-grocery",imageURL:"https://graph.facebook.com/farmboy.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435469",shop:"supermarket"},addTags:{brand:"Farm Boy","brand:wikidata":"Q5435469","brand:wikipedia":"en:Farm Boy",name:"Farm Boy",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Feneberg":{name:"Feneberg",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FenebergLebensmittel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5345378",shop:"supermarket"},addTags:{brand:"Feneberg","brand:wikidata":"Q5345378","brand:wikipedia":"de:Feneberg Lebensmittel",name:"Feneberg",shop:"supermarket"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food 4 Less":{name:"Food 4 Less",icon:"maki-grocery",imageURL:"https://graph.facebook.com/myfood4less/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465282",shop:"supermarket"},addTags:{brand:"Food 4 Less","brand:wikidata":"Q5465282","brand:wikipedia":"en:Food 4 Less",name:"Food 4 Less",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food Basics":{name:"Food Basics",icon:"maki-grocery",imageURL:"https://graph.facebook.com/foodbasics.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465300",shop:"supermarket"},addTags:{brand:"Food Basics","brand:wikidata":"Q5465300","brand:wikipedia":"en:Food Basics",name:"Food Basics",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food City (USA)":{name:"Food City (USA)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FoodCity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16981107",shop:"supermarket"},addTags:{brand:"Food City","brand:wikidata":"Q16981107","brand:wikipedia":"en:Food City (K-VA-T)",name:"Food City",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Food Lion":{name:"Food Lion",icon:"maki-grocery",imageURL:"https://graph.facebook.com/foodlion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1435950",shop:"supermarket"},addTags:{brand:"Food Lion","brand:wikidata":"Q1435950","brand:wikipedia":"en:Food Lion",name:"Food Lion",shop:"supermarket"},countryCodes:["es","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/FoodLand (USA)":{name:"FoodLand (USA)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5465271",shop:"supermarket"},addTags:{brand:"FoodLand","brand:wikidata":"Q5465271","brand:wikipedia":"en:FoodLand",name:"FoodLand",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/FoodMaxx":{name:"FoodMaxx",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Foodmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61894844",shop:"supermarket"},addTags:{brand:"FoodMaxx","brand:wikidata":"Q61894844",name:"FoodMaxx",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodland (Australia)":{name:"Foodland (Australia)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FoodlandSupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465555",shop:"supermarket"},addTags:{brand:"Foodland","brand:wikidata":"Q5465555","brand:wikipedia":"en:Foodland (South Australia)",name:"Foodland",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodland (Canada)":{name:"Foodland (Canada)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/dansFoodland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465554",shop:"supermarket"},addTags:{brand:"Foodland","brand:wikidata":"Q5465554","brand:wikipedia":"en:Foodland (Canada)",name:"Foodland",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodland (Hawaii)":{name:"Foodland (Hawaii)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FoodlandHawaii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465560",shop:"supermarket"},addTags:{brand:"Foodland","brand:wikidata":"Q5465560","brand:wikipedia":"en:Foodland Hawaii",name:"Foodland",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Foodworks":{name:"Foodworks",icon:"maki-grocery",imageURL:"https://graph.facebook.com/foodworksaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5465579",shop:"supermarket"},addTags:{brand:"Foodworks","brand:wikidata":"Q5465579","brand:wikipedia":"en:FoodWorks",name:"Foodworks",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fortinos":{name:"Fortinos",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fortinosgrocery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5472662",shop:"supermarket"},addTags:{brand:"Fortinos","brand:wikidata":"Q5472662","brand:wikipedia":"en:Fortinos",name:"Fortinos",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Four Square":{name:"Four Square",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FourSquareNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5475558",shop:"supermarket"},addTags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"supermarket"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fred Meyer":{name:"Fred Meyer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fredmeyer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5495932",shop:"supermarket"},addTags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fresh":{name:"Fresh",icon:"maki-grocery",imageURL:"https://graph.facebook.com/freshobchod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q50737403",shop:"supermarket"},addTags:{brand:"Fresh","brand:wikidata":"Q50737403","brand:wikipedia":"sk:Fresh",name:"Fresh",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fresh Thyme":{name:"Fresh Thyme",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FreshThymeFarmersMarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64132791",shop:"supermarket"},addTags:{brand:"Fresh Thyme","brand:wikidata":"Q64132791",name:"Fresh Thyme",shop:"supermarket"},countryCodes:["us"],terms:["fresh thyme farmers market"],matchScore:2,suggestion:true},"shop/supermarket/FreshCo":{name:"FreshCo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FreshCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5502915",shop:"supermarket"},addTags:{brand:"FreshCo","brand:wikidata":"Q5502915","brand:wikipedia":"en:FreshCo",name:"FreshCo",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Froiz":{name:"Froiz",icon:"maki-grocery",imageURL:"https://graph.facebook.com/158051157541336/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17070775",shop:"supermarket"},addTags:{brand:"Froiz","brand:wikidata":"Q17070775","brand:wikipedia":"en:Froiz",name:"Froiz",shop:"supermarket"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fry's Food and Drug":{name:"Fry's Food and Drug",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFry's%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5506547",shop:"supermarket"},addTags:{brand:"Fry's Food and Drug","brand:wikidata":"Q5506547","brand:wikipedia":"en:Fry's Food and Drug",name:"Fry's Food and Drug",shop:"supermarket"},countryCodes:["us"],terms:["frys"],matchScore:2,suggestion:true},"shop/supermarket/Føtex":{name:"Føtex",icon:"maki-grocery",imageURL:"https://graph.facebook.com/foetexdk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1480395",shop:"supermarket"},addTags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/G20":{name:"G20",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermarchesg20/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3504731",shop:"supermarket"},addTags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/GBarbosa":{name:"GBarbosa",icon:"maki-grocery",imageURL:"https://graph.facebook.com/oficialgbarbosa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10287817",shop:"supermarket"},addTags:{brand:"GBarbosa","brand:wikidata":"Q10287817","brand:wikipedia":"pt:GBarbosa",name:"GBarbosa",shop:"supermarket"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Gadis":{name:"Gadis",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Gadis.supermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12389151",shop:"supermarket"},addTags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant Eagle":{name:"Giant Eagle",icon:"maki-grocery",imageURL:"https://graph.facebook.com/gianteagleinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1522721",shop:"supermarket"},addTags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"},countryCodes:["us"],terms:["giant eagle supermarket"],matchScore:2,suggestion:true},"shop/supermarket/Giant Hypermarket":{name:"Giant Hypermarket",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20Giant%20Hypermarket.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4217013",shop:"supermarket"},addTags:{brand:"Giant Hypermarket","brand:wikidata":"Q4217013","brand:wikipedia":"en:Giant Hypermarket",name:"Giant Hypermarket",shop:"supermarket"},countryCodes:["id","my","sg","vn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant (Carlisle)":{name:"Giant (Carlisle)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/giantfoodstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558332",shop:"supermarket"},addTags:{brand:"Giant","brand:wikidata":"Q5558332","brand:wikipedia":"en:Giant Food Stores",name:"Giant",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant (Landover)":{name:"Giant (Landover)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GiantFood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558336",shop:"supermarket"},addTags:{brand:"Giant","brand:wikidata":"Q5558336","brand:wikipedia":"en:Giant Food (Landover)",name:"Giant",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Globus":{name:"Globus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Globus.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457503",shop:"supermarket"},addTags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Gordon Food Service":{name:"Gordon Food Service",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GordonFoodService/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1538006",shop:"supermarket"},addTags:{brand:"Gordon Food Service","brand:wikidata":"Q1538006","brand:wikipedia":"en:Gordon Food Service",name:"Gordon Food Service",shop:"supermarket"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Grand Frais":{name:"Grand Frais",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GrandFrais/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3114675",shop:"supermarket"},addTags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Grocery Outlet":{name:"Grocery Outlet",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GroceryOutletInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5609934",shop:"supermarket"},addTags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",official_name:"Grocery Outlet Bargain Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Groszek":{name:"Groszek",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Sklepy.Groszek/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9280965",shop:"supermarket"},addTags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Géant Casino":{name:"Géant Casino",icon:"maki-grocery",imageURL:"https://graph.facebook.com/geantcasino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1380537",shop:"supermarket"},addTags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"fr:Enseignes du groupe Casino",name:"Géant Casino",shop:"supermarket"},countryCodes:["cg","fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/H Mart":{name:"H Mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/hmartofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5636306",shop:"supermarket"},addTags:{"alt_name:ko":"H 마트",brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"H Mart","name:en":"H Mart","name:ko":"한아름","name:zh-Hans":"韩亚龙","name:zh-Hant":"韓亞龍",shop:"supermarket"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/H-E-B":{name:"H-E-B",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HEB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830621",shop:"supermarket"},addTags:{brand:"H-E-B","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B",shop:"supermarket"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/HIT":{name:"HIT",icon:"maki-grocery",imageURL:"https://graph.facebook.com/151789788189446/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1548713",shop:"supermarket"},addTags:{brand:"HIT","brand:wikidata":"Q1548713","brand:wikipedia":"de:HIT Handelsgruppe",name:"HIT",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/HalpaHalli":{name:"HalpaHalli",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HalpaHalli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11861256",shop:"supermarket"},addTags:{brand:"HalpaHalli","brand:wikidata":"Q11861256","brand:wikipedia":"fi:HalpaHalli",name:"HalpaHalli",shop:"supermarket"},countryCodes:["ee","fi","ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hannaford":{name:"Hannaford",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Hannaford/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5648760",shop:"supermarket"},addTags:{brand:"Hannaford","brand:wikidata":"Q5648760","brand:wikipedia":"en:Hannaford Brothers Company",name:"Hannaford",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Harris Teeter":{name:"Harris Teeter",icon:"maki-grocery",imageURL:"https://graph.facebook.com/harristeeter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5665067",shop:"supermarket"},addTags:{brand:"Harris Teeter","brand:wikidata":"Q5665067","brand:wikipedia":"en:Harris Teeter",name:"Harris Teeter",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hemköp":{name:"Hemköp",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Hemkop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10521746",shop:"supermarket"},addTags:{brand:"Hemköp","brand:wikidata":"Q10521746","brand:wikipedia":"sv:Hemköp",name:"Hemköp",shop:"supermarket"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hero Supermarket":{name:"Hero Supermarket",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHero%20Supermarket.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q12485604",shop:"supermarket"},addTags:{brand:"Hero Supermarket","brand:wikidata":"Q12485604","brand:wikipedia":"en:Hero Supermarket",name:"Hero Supermarket",shop:"supermarket"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Heron Foods":{name:"Heron Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/heronfoodslimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5743472",shop:"supermarket"},addTags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hofer":{name:"Hofer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HOFER.AT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15815751",shop:"supermarket"},addTags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"},countryCodes:["at","si"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hoogvliet":{name:"Hoogvliet",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Hoogvliet.supermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2770647",shop:"supermarket"},addTags:{brand:"Hoogvliet","brand:wikidata":"Q2770647","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hy-Vee":{name:"Hy-Vee",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HyVee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639719",shop:"supermarket"},addTags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hyper U":{name:"Hyper U",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"supermarket"},addTags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ICA":{name:"ICA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"},countryCodes:["no","se"],terms:["ica supermarket"],matchScore:2,suggestion:true},"shop/supermarket/ICA Kvantum":{name:"ICA Kvantum",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ICA Maxi":{name:"ICA Maxi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"},countryCodes:["no","se"],terms:["maxi"],matchScore:2,suggestion:true},"shop/supermarket/IDEA":{name:"IDEA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/IDEASrbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461622",shop:"supermarket"},addTags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"},countryCodes:["rs"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/IGA":{name:"IGA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/IGACorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3146662",shop:"supermarket"},addTags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"},countryCodes:["au","ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ingles":{name:"Ingles",icon:"maki-grocery",imageURL:"https://graph.facebook.com/inglesmarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6032595",shop:"supermarket"},addTags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Intermarché":{name:"Intermarché",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"supermarket"},addTags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Intermarché Super":{name:"Intermarché Super",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"supermarket"},addTags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"},countryCodes:["be","fr","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Interspar":{name:"Interspar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/INTERSPAR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15820339",shop:"supermarket"},addTags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Irma":{name:"Irma",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q797150",shop:"supermarket"},addTags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jack's":{name:"Jack's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/shopjacksuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60741213",shop:"supermarket"},addTags:{brand:"Jack's","brand:wikidata":"Q60741213","brand:wikipedia":"en:Jack's (store)",name:"Jack's",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jan Linders":{name:"Jan Linders",icon:"maki-grocery",imageURL:"https://graph.facebook.com/JanLindersSupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2200982",shop:"supermarket"},addTags:{brand:"Jan Linders","brand:wikidata":"Q2200982","brand:wikipedia":"nl:Jan Linders Supermarkten",name:"Jan Linders",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jewel-Osco":{name:"Jewel-Osco",icon:"maki-grocery",imageURL:"https://graph.facebook.com/JewelOsco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3178470",shop:"supermarket"},addTags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Jumbo":{name:"Jumbo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/jumbosupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2262314",shop:"supermarket"},addTags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/K+K":{name:"K+K",icon:"maki-grocery",imageURL:"https://graph.facebook.com/KlaasundKock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1718009",shop:"supermarket"},addTags:{brand:"K+K","brand:wikidata":"Q1718009","brand:wikipedia":"de:K+K Klaas & Kock",name:"K+K",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/K-Citymarket":{name:"K-Citymarket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/citymarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11868561",shop:"supermarket"},addTags:{brand:"K-Citymarket","brand:wikidata":"Q11868561","brand:wikipedia":"fi:K-Citymarket",name:"K-Citymarket",shop:"supermarket"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/K-Supermarket":{name:"K-Supermarket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/KSupermarketketju/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5408668",shop:"supermarket"},addTags:{brand:"K-Supermarket","brand:wikidata":"Q5408668","brand:wikipedia":"fi:K-Supermarket",name:"K-Supermarket",shop:"supermarket"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kaufland":{name:"Kaufland",icon:"maki-grocery",imageURL:"https://graph.facebook.com/132476996783723/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q685967",shop:"supermarket"},addTags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"},countryCodes:["bg","cz","de","hr","pl","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/King Soopers":{name:"King Soopers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/kingsoopers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6412065",shop:"supermarket"},addTags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kings":{name:"Kings",icon:"maki-grocery",imageURL:"https://graph.facebook.com/KingsFoodMarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6412914",shop:"supermarket"},addTags:{brand:"Kings","brand:wikidata":"Q6412914","brand:wikipedia":"en:Kings Food Markets",name:"Kings",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kiwi":{name:"Kiwi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/kiwiminipris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1613639",shop:"supermarket"},addTags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Konzum (Balkans)":{name:"Konzum (Balkans)",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKonzum%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q518563",shop:"supermarket"},addTags:{brand:"Konzum","brand:wikidata":"Q518563","brand:wikipedia":"hr:Konzum",name:"Konzum",shop:"supermarket"},countryCodes:["ba","hr","rs"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kroger":{name:"Kroger",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kroger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q153417",shop:"supermarket"},addTags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"},terms:["kroger food and drug","krogers"],matchScore:2,suggestion:true},"shop/supermarket/Kroger Marketplace":{name:"Kroger Marketplace",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kroger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q153417",shop:"supermarket"},addTags:{brand:"Kroger Marketplace","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger Marketplace",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Krónan":{name:"Krónan",icon:"maki-grocery",imageURL:"https://graph.facebook.com/kronan.is/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16419327",shop:"supermarket"},addTags:{brand:"Krónan","brand:wikidata":"Q16419327","brand:wikipedia":"is:Krónan (verslun)",name:"Krónan",shop:"supermarket"},countryCodes:["is"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kvickly":{name:"Kvickly",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kvickly/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7061148",shop:"supermarket"},addTags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Anónima":{name:"La Anónima",icon:"maki-grocery",imageURL:"https://graph.facebook.com/laanonimaoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6135985",shop:"supermarket"},addTags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Comer":{name:"La Comer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LaComerOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26765126",shop:"supermarket"},addTags:{brand:"La Comer","brand:wikidata":"Q26765126","brand:wikipedia":"es:La Comer",name:"La Comer",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Michoacana Meat Market":{name:"La Michoacana Meat Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lamichoacanameatmarket.officialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6463872",shop:"supermarket"},addTags:{brand:"La Michoacana Meat Market","brand:en":"La Michoacana Meat Market","brand:es":"La Michoacana","brand:wikidata":"Q6463872","brand:wikipedia":"en:La Michoacana Meat Market",cuisine:"latin_american",name:"La Michoacana Meat Market","name:en":"La Michoacana Meat Market","name:es":"La Michoacana",shop:"supermarket"},countryCodes:["us"],terms:["la michoacana"],matchScore:2,suggestion:true},"shop/supermarket/La Plaza de DIA":{name:"La Plaza de DIA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LaPlazadeDIA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58904673",shop:"supermarket"},addTags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Vie Claire":{name:"La Vie Claire",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Lavieclaire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3213589",shop:"supermarket"},addTags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"fr:La Vie Claire",name:"La Vie Claire",organic:"only",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Landi":{name:"Landi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/landivechigen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1803010",shop:"supermarket"},addTags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"de:Landi (Unternehmen)",name:"Landi",shop:"supermarket"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Leader Price":{name:"Leader Price",icon:"maki-grocery",imageURL:"https://graph.facebook.com/leaderpriceofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2181426",shop:"supermarket"},addTags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"fr:Leader Price",name:"Leader Price",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lewiatan":{name:"Lewiatan",icon:"maki-grocery",imageURL:"https://graph.facebook.com/psh.lewiatan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11755396",shop:"supermarket"},addTags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lider":{name:"Lider",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lidercl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6711261",shop:"supermarket"},addTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lider Express":{name:"Lider Express",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lidercl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6711261",shop:"supermarket"},addTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider Express",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lidl":{name:"Lidl",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lidl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151954",shop:"supermarket"},addTags:{brand:"Lidl","brand:wikidata":"Q151954","brand:wikipedia":"en:Lidl",name:"Lidl",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lincolnshire Co-op":{name:"Lincolnshire Co-op",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lincolnshirecoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6551231",shop:"supermarket"},addTags:{brand:"Lincolnshire Co-op","brand:wikidata":"Q6551231","brand:wikipedia":"en:Lincolnshire Co-operative",name:"Lincolnshire Co-op",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Linella":{name:"Linella",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61085990",shop:"supermarket"},addTags:{brand:"Linella","brand:wikidata":"Q61085990","brand:wikipedia":"ro:Linella",name:"Linella",shop:"supermarket"},countryCodes:["md"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Loblaws":{name:"Loblaws",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LoblawsON/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3257626",shop:"supermarket"},addTags:{brand:"Loblaws","brand:wikidata":"Q3257626","brand:wikipedia":"en:Loblaws",name:"Loblaws",shop:"supermarket"},countryCodes:["ca"],terms:["loblaws great food"],matchScore:2,suggestion:true},"shop/supermarket/Londis (Ireland)":{name:"Londis (Ireland)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/londisireland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21015800",shop:"supermarket"},addTags:{brand:"Londis","brand:wikidata":"Q21015800","brand:wikipedia":"en:Londis (Ireland)",name:"Londis",shop:"supermarket"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Londis (UK)":{name:"Londis (UK)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/102483611097059/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21008564",shop:"supermarket"},addTags:{brand:"Londis","brand:wikidata":"Q21008564","brand:wikipedia":"en:Londis (United Kingdom)",name:"Londis",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lotte Mart":{name:"Lotte Mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lottemart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q326715",shop:"supermarket"},addTags:{brand:"Lotte Mart","brand:wikidata":"Q326715","brand:wikipedia":"en:Lotte Mart",name:"Lotte Mart",shop:"supermarket"},countryCodes:["id","kr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lowe's Market":{name:"Lowe's Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LowesSupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6693107",shop:"supermarket"},addTags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lowes Foods":{name:"Lowes Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LowesFoodsStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6693991",shop:"supermarket"},addTags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Lucky":{name:"Lucky",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LuckySupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6698032",shop:"supermarket"},addTags:{brand:"Lucky","brand:wikidata":"Q6698032","brand:wikipedia":"en:Lucky Stores",name:"Lucky",shop:"supermarket"},countryCodes:["us"],terms:["luckys"],matchScore:2,suggestion:true},"shop/supermarket/Lupa":{name:"Lupa",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LupaSupermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58044048",shop:"supermarket"},addTags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/M&S Foodhall":{name:"M&S Foodhall",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MarksandSpencer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"supermarket"},addTags:{brand:"M&S Foodhall","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Foodhall",shop:"supermarket"},terms:["marks & spencer foodhall"],matchScore:2,suggestion:true},"shop/supermarket/M&S Simply Food":{name:"M&S Simply Food",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MarksandSpencer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"supermarket"},addTags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"supermarket"},terms:["marks & spencer simply food"],matchScore:2,suggestion:true},"shop/supermarket/MD":{name:"MD",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mdspa.it/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3841263",shop:"supermarket"},addTags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"},countryCodes:["it"],terms:["md discount"],matchScore:2,suggestion:true},"shop/supermarket/MPREIS":{name:"MPREIS",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MPREIS.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q873491",shop:"supermarket"},addTags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"},countryCodes:["at","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Marc's":{name:"Marc's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MarcsStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17080259",shop:"supermarket"},addTags:{brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",name:"Marc's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Markant":{name:"Markant",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57523365",shop:"supermarket"},addTags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Market Basket":{name:"Market Basket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/marketbasket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2079198",shop:"supermarket"},addTags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Marktkauf":{name:"Marktkauf",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMarktkauf.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1533254",shop:"supermarket"},addTags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Martin's Super Markets":{name:"Martin's Super Markets",icon:"maki-grocery",imageURL:"https://graph.facebook.com/martinssupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6774803",shop:"supermarket"},addTags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Masymas":{name:"Masymas",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMasymas%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6135987",shop:"supermarket"},addTags:{brand:"Masymas","brand:wikidata":"Q6135987","brand:wikipedia":"es:Supermercados Masymas",name:"Masymas",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Match":{name:"Match",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupermarchesMatch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q513977",shop:"supermarket"},addTags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"},countryCodes:["be","fr","hu","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxi Dia":{name:"Maxi Dia",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DIAEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q925132",shop:"supermarket"},addTags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Maxi Dia",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima X":{name:"Maxima X",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MaximaLV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"},countryCodes:["bg","ee","lt","lv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima XX":{name:"Maxima XX",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MaximaLV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"},countryCodes:["bg","ee","lt","lv","pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima XXX":{name:"Maxima XXX",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MaximaLV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XXX",shop:"supermarket"},countryCodes:["bg","ee","lt","lv","pl"],terms:["maxima"],matchScore:2,suggestion:true},"shop/supermarket/Maximarkt":{name:"Maximarkt",icon:"maki-grocery",imageURL:"https://graph.facebook.com/meinmaximarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55524814",shop:"supermarket"},addTags:{brand:"Maximarkt","brand:wikidata":"Q55524814","brand:wikipedia":"de:Maximarkt",name:"Maximarkt",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxi (Canada)":{name:"Maxi (Canada)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/maxi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3302441",shop:"supermarket"},addTags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"fr:Maxi (supermarché)",name:"Maxi",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxi (Serbia)":{name:"Maxi (Serbia)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Maxi.Srbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6795490",shop:"supermarket"},addTags:{brand:"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"en:Maxi (Serbian supermarket)",name:"Maxi",shop:"supermarket"},countryCodes:["rs"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mega Image":{name:"Mega Image",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MegaImageRomania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6808085",shop:"supermarket"},addTags:{brand:"Mega Image","brand:wikidata":"Q6808085","brand:wikipedia":"en:Mega Image",name:"Mega Image",shop:"supermarket"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mego":{name:"Mego",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mego.lv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16363314",shop:"supermarket"},addTags:{brand:"Mego","brand:wikidata":"Q16363314","brand:wikipedia":"lv:Mego",name:"Mego",shop:"supermarket"},countryCodes:["lv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Meijer":{name:"Meijer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/meijer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1917753",shop:"supermarket"},addTags:{brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Meny":{name:"Meny",icon:"maki-grocery",imageURL:"https://graph.facebook.com/meny/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10581720",shop:"supermarket"},addTags:{brand:"Meny","brand:wikidata":"Q10581720","brand:wikipedia":"en:Meny",name:"Meny",shop:"supermarket"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mercadona":{name:"Mercadona",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mercadona/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q377705",shop:"supermarket"},addTags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mercator":{name:"Mercator",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Mercator/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q738412",shop:"supermarket"},addTags:{brand:"Mercator","brand:wikidata":"Q738412","brand:wikipedia":"en:Mercator (retail)",name:"Mercator",shop:"supermarket"},countryCodes:["ba","hr","me","rs","si"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Merkur":{name:"Merkur",icon:"maki-grocery",imageURL:"https://graph.facebook.com/merkurmarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1921857",shop:"supermarket"},addTags:{brand:"Merkur","brand:wikidata":"Q1921857","brand:wikipedia":"de:Merkur (Österreich)",name:"Merkur",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Metro (Ontario)":{name:"Metro (Ontario)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/metro.ontario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1145669",shop:"supermarket"},addTags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"en:Metro Inc.",name:"Metro",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Metro (Peru)":{name:"Metro (Peru)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/metroperu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16640217",shop:"supermarket"},addTags:{brand:"Metro","brand:wikidata":"Q16640217","brand:wikipedia":"en:Tiendas Metro",name:"Metro",shop:"supermarket"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Metro (Quebec)":{name:"Metro (Quebec)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/metro.ontario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1145669",shop:"supermarket"},addTags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"fr:Metro (entreprise québécoise)",name:"Metro",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Migros":{name:"Migros",icon:"maki-grocery",imageURL:"https://graph.facebook.com/migros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q680727",shop:"supermarket"},addTags:{brand:"Migros","brand:wikidata":"Q680727","brand:wikipedia":"en:Migros",name:"Migros",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mila":{name:"Mila",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MilaDruciarniaSklep/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48844636",shop:"supermarket"},addTags:{brand:"Mila","brand:wikidata":"Q48844636","brand:wikipedia":"pl:Mila (sieć sklepów)",name:"Mila",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Minipreço":{name:"Minipreço",icon:"maki-grocery",imageURL:"https://graph.facebook.com/minipreco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3042224",shop:"supermarket"},addTags:{brand:"Minipreço","brand:wikidata":"Q3042224","brand:wikipedia":"en:Minipreço",name:"Minipreço",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mix Markt":{name:"Mix Markt",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mixmarkt.eu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q327854",shop:"supermarket"},addTags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Monoprix":{name:"Monoprix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Monoprix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3321241",shop:"supermarket"},addTags:{brand:"Monoprix","brand:wikidata":"Q3321241","brand:wikipedia":"en:Monoprix",name:"Monoprix",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/More":{name:"More",icon:"maki-grocery",imageURL:"https://graph.facebook.com/morestore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6910891",shop:"supermarket"},addTags:{brand:"More","brand:wikidata":"Q6910891","brand:wikipedia":"en:More (store)",name:"More",shop:"supermarket"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Morrisons":{name:"Morrisons",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Morrisons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q922344",shop:"supermarket"},addTags:{brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/NP":{name:"NP",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNP-Markt%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q15836148",shop:"supermarket"},addTags:{brand:"NP","brand:wikidata":"Q15836148","brand:wikipedia":"de:NP-Markt",name:"NP",shop:"supermarket"},terms:["np-markt"],matchScore:2,suggestion:true},"shop/supermarket/Nah & Frisch":{name:"Nah & Frisch",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nahundfrisch.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1963643",shop:"supermarket"},addTags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"},countryCodes:["at","de"],terms:["nah und frisch"],matchScore:2,suggestion:true},"shop/supermarket/Nahkauf":{name:"Nahkauf",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nahkauf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57515238",shop:"supermarket"},addTags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Naturalia":{name:"Naturalia",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Naturaliamagasinsbio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3337081",shop:"supermarket"},addTags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto Marken-Discount":{name:"Netto Marken-Discount",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nettomarkendiscount/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q879858",shop:"supermarket"},addTags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"de:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto (Les Mousquetaires)":{name:"Netto (Les Mousquetaires)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nettofrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2720988",shop:"supermarket"},addTags:{brand:"Netto","brand:wikidata":"Q2720988","brand:wikipedia":"fr:Netto",name:"Netto",shop:"supermarket"},countryCodes:["fr","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto (Salling)":{name:"Netto (Salling)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nettodk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q552652",shop:"supermarket"},addTags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"da:Netto (supermarkedskæde)",name:"Netto",shop:"supermarket"},countryCodes:["da","de","pl","se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Nettó (Iceland)":{name:"Nettó (Iceland)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/netto.is/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67205962",shop:"supermarket"},addTags:{brand:"Nettó","brand:wikidata":"Q67205962",name:"Nettó",shop:"supermarket"},countryCodes:["is"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/New World":{name:"New World",icon:"maki-grocery",imageURL:"https://graph.facebook.com/newworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7012488",shop:"supermarket"},addTags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Nisa Extra":{name:"Nisa Extra",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nisalocally/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16999069",shop:"supermarket"},addTags:{brand:"Nisa Extra","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Extra",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/No Frills":{name:"No Frills",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nofrillsCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3342407",shop:"supermarket"},addTags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Norfa XL":{name:"Norfa XL",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Norfalt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1998983",shop:"supermarket"},addTags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Norma":{name:"Norma",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNorma%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q450180",shop:"supermarket"},addTags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"},countryCodes:["at","cz","de","fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Northern Store":{name:"Northern Store",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TheNorthWestCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7754361",shop:"supermarket"},addTags:{brand:"Northern Store","brand:wikidata":"Q7754361","brand:wikipedia":"en:The North West Company",name:"Northern Store",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Okay":{name:"Okay",icon:"maki-grocery",imageURL:"https://graph.facebook.com/okaycompact/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2159701",shop:"supermarket"},addTags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Olímpica":{name:"Olímpica",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupertiendaOlimpica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24749847",shop:"supermarket"},addTags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Grupo Empresarial Olímpica",name:"Olímpica",shop:"supermarket"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/PLUS":{name:"PLUS",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PLUSsupermarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1978981",shop:"supermarket"},addTags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/POLOmarket":{name:"POLOmarket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/polomarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11821937",shop:"supermarket"},addTags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"pl:Polomarket",name:"POLOmarket",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Palí":{name:"Palí",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PaliCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1064887",shop:"supermarket"},addTags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"},countryCodes:["cr","ni"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pam":{name:"Pam",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pampanoramaufficiale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3777398",shop:"supermarket"},addTags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"},countryCodes:["ch","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Patel Brothers":{name:"Patel Brothers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pbrosfan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55641396",shop:"supermarket"},addTags:{brand:"Patel Brothers","brand:wikidata":"Q55641396","brand:wikipedia":"en:Patel Brothers",cuisine:"indian",name:"Patel Brothers",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pavilions":{name:"Pavilions",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pavilions/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7155886",shop:"supermarket"},addTags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Penny":{name:"Penny",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPenny-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q284688",shop:"supermarket"},addTags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"},countryCodes:["at","cz","de","hu","it","ro"],terms:["penny market","penny markt"],matchScore:2,suggestion:true},"shop/supermarket/Pick 'n Save":{name:"Pick 'n Save",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PickNSaveStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7371288",shop:"supermarket"},addTags:{brand:"Pick 'n Save","brand:wikidata":"Q7371288","brand:wikipedia":"en:Roundy's",name:"Pick 'n Save",shop:"supermarket"},countryCodes:["us","za"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pick n Pay":{name:"Pick n Pay",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Picknpay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7190735",shop:"supermarket"},addTags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Piggly Wiggly":{name:"Piggly Wiggly",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pigglywigglystores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3388303",shop:"supermarket"},addTags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pingo Doce":{name:"Pingo Doce",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pingodoce/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1575057",shop:"supermarket"},addTags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Piotr i Paweł":{name:"Piotr i Paweł",icon:"maki-grocery",imageURL:"https://graph.facebook.com/piotripawelstronaoficjalna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2096356",shop:"supermarket"},addTags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"pl:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Plaza Vea":{name:"Plaza Vea",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PlazaVeaOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7203672",shop:"supermarket"},addTags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Plodine":{name:"Plodine",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PlodineHrvatska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58040098",shop:"supermarket"},addTags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Poiesz":{name:"Poiesz",icon:"maki-grocery",imageURL:"https://graph.facebook.com/poieszsupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2521700",shop:"supermarket"},addTags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (Kansas City)":{name:"Price Chopper (Kansas City)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mypricechopper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242572",shop:"supermarket"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (New York)":{name:"Price Chopper (New York)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PriceChopper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242574",shop:"supermarket"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Prisma":{name:"Prisma",icon:"maki-grocery",imageURL:"https://graph.facebook.com/prisma.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12047031",shop:"supermarket"},addTags:{brand:"Prisma","brand:wikidata":"Q12047031","brand:wikipedia":"fi:Prisma (kauppaketju)",name:"Prisma",shop:"supermarket"},countryCodes:["ee","fi","ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Prix":{name:"Prix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/prixqualitaitaliana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994819",shop:"supermarket"},addTags:{brand:"Prix","brand:wikidata":"Q61994819",name:"Prix",shop:"supermarket"},countryCodes:["it"],terms:["prix quality"],matchScore:2,suggestion:true},"shop/supermarket/Profi":{name:"Profi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Profi.ro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q956664",shop:"supermarket"},addTags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"},countryCodes:["be","hu","ro"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Provigo":{name:"Provigo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ProvigoleMarcheTroisRivieres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3408306",shop:"supermarket"},addTags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"fr:Provigo",name:"Provigo",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Proxy Delhaize":{name:"Proxy Delhaize",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delhaize/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q14903417",shop:"supermarket"},addTags:{brand:"Proxy Delhaize","brand:wikidata":"Q14903417","brand:wikipedia":"en:Delhaize Group",name:"Proxy Delhaize",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Publix":{name:"Publix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/publix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q672170",shop:"supermarket"},addTags:{brand:"Publix","brand:wikidata":"Q672170","brand:wikipedia":"en:Publix",name:"Publix",shop:"supermarket"},countryCodes:["br","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pueblo":{name:"Pueblo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermercadospueblo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7258464",shop:"supermarket"},addTags:{brand:"Pueblo","brand:wikidata":"Q7258464","brand:wikipedia":"en:Pueblo Supermarkets",name:"Pueblo",official_name:"Supermercados Pueblo","official_name:en":"Pueblo Supermarkets","official_name:es":"Supermercados Pueblo",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Punto Simply":{name:"Punto Simply",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SDASUPERMERCATI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3484790",shop:"supermarket"},addTags:{brand:"Punto Simply","brand:wikidata":"Q3484790","brand:wikipedia":"it:Simply Market",name:"Punto Simply",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Puregold":{name:"Puregold",icon:"maki-grocery",imageURL:"https://graph.facebook.com/puregold.shopping/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7261170",shop:"supermarket"},addTags:{brand:"Puregold","brand:wikidata":"Q7261170","brand:wikipedia":"en:Puregold",name:"Puregold",shop:"supermarket"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pão de Açúcar":{name:"Pão de Açúcar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/paodeacucar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3411543",shop:"supermarket"},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"},countryCodes:["br","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/QFC":{name:"QFC",icon:"maki-grocery",imageURL:"https://graph.facebook.com/QFC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7265425",shop:"supermarket"},addTags:{brand:"QFC","brand:wikidata":"Q7265425","brand:wikipedia":"en:QFC",name:"QFC",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Raley's":{name:"Raley's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/raleys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7286970",shop:"supermarket"},addTags:{brand:"Raley's","brand:wikidata":"Q7286970","brand:wikipedia":"en:Raley's Supermarkets",name:"Raley's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ralphs":{name:"Ralphs",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Ralphs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3929820",shop:"supermarket"},addTags:{brand:"Ralphs","brand:wikidata":"Q3929820","brand:wikipedia":"en:Ralphs",name:"Ralphs",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Real":{name:"Real",icon:"maki-grocery",imageURL:"https://graph.facebook.com/real/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q698473",shop:"supermarket"},addTags:{brand:"Real","brand:wikidata":"Q698473","brand:wikipedia":"en:Real (hypermarket)",name:"Real",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Real Canadian Superstore":{name:"Real Canadian Superstore",icon:"maki-grocery",imageURL:"https://graph.facebook.com/RealCanadianSuperstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7300856",shop:"supermarket"},addTags:{brand:"Real Canadian Superstore","brand:wikidata":"Q7300856","brand:wikipedia":"en:Real Canadian Superstore",name:"Real Canadian Superstore",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Redner's":{name:"Redner's",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7306166",shop:"supermarket"},addTags:{brand:"Redner's","brand:wikidata":"Q7306166","brand:wikipedia":"en:Redner's Markets",name:"Redner's",shop:"supermarket"},countryCodes:["us"],terms:["redners warehouse market"],matchScore:2,suggestion:true},"shop/supermarket/Reliance Fresh":{name:"Reliance Fresh",icon:"maki-grocery",imageURL:"https://graph.facebook.com/RelianceFreshOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7311014",shop:"supermarket"},addTags:{brand:"Reliance Fresh","brand:wikidata":"Q7311014","brand:wikipedia":"en:Reliance Fresh",name:"Reliance Fresh",shop:"supermarket"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rema 1000":{name:"Rema 1000",icon:"maki-grocery",imageURL:"https://graph.facebook.com/REMA1000/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28459",shop:"supermarket"},addTags:{brand:"Rema 1000","brand:wikidata":"Q28459","brand:wikipedia":"en:REMA 1000",name:"Rema 1000",shop:"supermarket"},countryCodes:["dk","no"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rewe":{name:"Rewe",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Rewe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16968817",shop:"supermarket"},addTags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rewe City":{name:"Rewe City",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Rewe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16968817",shop:"supermarket"},addTags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Rimi":{name:"Rimi",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRimi%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7334456",shop:"supermarket"},addTags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"},countryCodes:["ee","lt","lv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/S-market":{name:"S-market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/smarketkemio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11891613",shop:"supermarket"},addTags:{brand:"S-market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-market",shop:"supermarket"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Safeway":{name:"Safeway",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Safeway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1508234",shop:"supermarket"},addTags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sainsbury's":{name:"Sainsbury's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/sainsburys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q152096",shop:"supermarket"},addTags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Santa Isabel":{name:"Santa Isabel",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SantaIsabelChile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7419620",shop:"supermarket"},addTags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Save-A-Lot":{name:"Save-A-Lot",icon:"maki-grocery",imageURL:"https://graph.facebook.com/savealot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7427972",shop:"supermarket"},addTags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Save-On-Foods":{name:"Save-On-Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SaveOnFoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7427974",shop:"supermarket"},addTags:{brand:"Save-On-Foods","brand:wikidata":"Q7427974","brand:wikipedia":"en:Save-On-Foods",name:"Save-On-Foods",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Schnucks":{name:"Schnucks",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Schnucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7431920",shop:"supermarket"},addTags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Shaw's":{name:"Shaw's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Shaws/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q578387",shop:"supermarket"},addTags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sheng Siong":{name:"Sheng Siong",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3481878",shop:"supermarket"},addTags:{brand:"Sheng Siong","brand:wikidata":"Q3481878","brand:wikipedia":"en:Sheng Siong",name:"Sheng Siong",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/ShopRite (USA)":{name:"ShopRite (USA)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/shoprite.supermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7501097",shop:"supermarket"},addTags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Shoprite (Africa)":{name:"Shoprite (Africa)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ShopriteSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1857639",shop:"supermarket"},addTags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:Shoprite (South Africa)",name:"Shoprite",shop:"supermarket"},countryCodes:["ao","bw","cd","gh","ls","mg","mu","mw","mz","na","ng","sz","ug","za","zm"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Shoprite (Isle of Man)":{name:"Shoprite (Isle of Man)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7501242",shop:"supermarket"},addTags:{brand:"Shoprite","brand:wikidata":"Q7501242","brand:wikipedia":"en:Shoprite (Isle of Man)",name:"Shoprite",shop:"supermarket"},countryCodes:["im"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sigma":{name:"Sigma",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermercatisigmaitalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3977979",shop:"supermarket"},addTags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Simply Market":{name:"Simply Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SDASUPERMERCATI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3484790",shop:"supermarket"},addTags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"},terms:["simply"],matchScore:2,suggestion:true},"shop/supermarket/Sky":{name:"Sky",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoop%20Deutschland%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1129779",shop:"supermarket"},addTags:{brand:"Sky","brand:wikidata":"Q1129779","brand:wikipedia":"de:Coop eG",name:"Sky",shop:"supermarket"},countryCodes:["de","lv","nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Smart & Final":{name:"Smart & Final",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SmartFinal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7543916",shop:"supermarket"},addTags:{brand:"Smart & Final","brand:wikidata":"Q7543916","brand:wikipedia":"en:Smart & Final",name:"Smart & Final",shop:"supermarket"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Smith's":{name:"Smith's",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSmithsFoodDrug-logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7544856",shop:"supermarket"},addTags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sobeys":{name:"Sobeys",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Sobeys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143340",shop:"supermarket"},addTags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Soriana":{name:"Soriana",icon:"maki-grocery",imageURL:"https://graph.facebook.com/sorianacom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735562",shop:"supermarket"},addTags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Spar":{name:"Spar",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"supermarket"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Społem":{name:"Społem",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SpolemSpoldzielczoscSpozywcow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11826043",shop:"supermarket"},addTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sprouts Farmers Market":{name:"Sprouts Farmers Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SproutsFarmersMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7581369",shop:"supermarket"},addTags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket",short_name:"Sprouts"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Stater Bros.":{name:"Stater Bros.",icon:"maki-grocery",imageURL:"https://graph.facebook.com/StaterBrosMarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7604016",shop:"supermarket"},addTags:{brand:"Stater Bros.","brand:wikidata":"Q7604016","brand:wikipedia":"en:Stater Bros.",name:"Stater Bros.",shop:"supermarket"},countryCodes:["us"],terms:["stater brothers"],matchScore:2,suggestion:true},"shop/supermarket/Stokrotka":{name:"Stokrotka",icon:"maki-grocery",imageURL:"https://graph.facebook.com/sklepy.stokrotka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9345945",shop:"supermarket"},addTags:{brand:"Stokrotka","brand:wikidata":"Q9345945","brand:wikipedia":"pl:Stokrotka (sieć handlowa)",name:"Stokrotka",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Stop & Shop":{name:"Stop & Shop",icon:"maki-grocery",imageURL:"https://graph.facebook.com/StopandShop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3658429",shop:"supermarket"},addTags:{brand:"Stop & Shop","brand:wikidata":"Q3658429","brand:wikipedia":"en:Stop & Shop",name:"Stop & Shop",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Suma":{name:"Suma",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58012362",shop:"supermarket"},addTags:{brand:"Suma","brand:wikidata":"Q58012362",name:"Suma",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Supabarn":{name:"Supabarn",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSupabarn%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7641883",shop:"supermarket"},addTags:{brand:"Supabarn","brand:wikidata":"Q7641883","brand:wikipedia":"en:Supabarn Supermarkets",name:"Supabarn",official_name:"Supabarn Supermarkets",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super C":{name:"Super C",icon:"maki-grocery",imageURL:"https://graph.facebook.com/superc.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3504127",shop:"supermarket"},addTags:{brand:"Super C","brand:wikidata":"Q3504127","brand:wikipedia":"fr:Super C (entreprise)",name:"Super C",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super H Mart":{name:"Super H Mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/hmartofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5636306",shop:"supermarket"},addTags:{brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"Super H Mart",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super One Foods":{name:"Super One Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SuperOneGrocery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17108733",shop:"supermarket"},addTags:{brand:"Super One Foods","brand:wikidata":"Q17108733","brand:wikipedia":"en:Super One Foods",name:"Super One Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Super U":{name:"Super U",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"supermarket"},addTags:{brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/SuperBrugsen":{name:"SuperBrugsen",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SuperBrugsen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12337746",shop:"supermarket"},addTags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/SuperValu":{name:"SuperValu",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SuperValuIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7642081",shop:"supermarket"},addTags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)",name:"SuperValu",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Superama":{name:"Superama",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1145720603724455942/zkMvSg5e_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6135762",shop:"supermarket"},addTags:{brand:"Superama","brand:wikidata":"Q6135762","brand:wikipedia":"es:Superama",name:"Superama",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Supercor":{name:"Supercor",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tusupercor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6135841",shop:"supermarket"},addTags:{brand:"Supercor","brand:wikidata":"Q6135841","brand:wikipedia":"es:Supercor",name:"Supercor",shop:"supermarket"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Supersol":{name:"Supersol",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupersolSupermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073427",shop:"supermarket"},addTags:{brand:"Supersol","brand:wikidata":"Q62073427",name:"Supersol",shop:"supermarket"},countryCodes:["ar","es","ma","uy"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Superspar":{name:"Superspar",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"supermarket"},addTags:{brand:"Superspar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Superspar",shop:"supermarket"},countryCodes:["es","za"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/T&T Supermarket":{name:"T&T Supermarket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TTSupermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q837893",shop:"supermarket"},addTags:{brand:"T&T Supermarket","brand:wikidata":"Q837893","brand:wikipedia":"en:T & T Supermarket",name:"T&T Supermarket",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tegut":{name:"Tegut",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tegut/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1547993",shop:"supermarket"},addTags:{brand:"Tegut","brand:wikidata":"Q1547993","brand:wikipedia":"en:Tegut",name:"Tegut",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco":{name:"Tesco",icon:"maki-grocery",imageURL:"https://graph.facebook.com/1183230681723205/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q487494",shop:"supermarket"},addTags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco Extra":{name:"Tesco Extra",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1168444842420187138/sBm0zlbM_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q25172225",shop:"supermarket"},addTags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco Lotus":{name:"Tesco Lotus",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2378901",shop:"supermarket"},addTags:{brand:"Tesco Lotus","brand:wikidata":"Q2378901","brand:wikipedia":"th:เทสโก้ โลตัส",name:"Tesco Lotus",shop:"supermarket"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tesco Metro":{name:"Tesco Metro",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1168444842420187138/sBm0zlbM_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q57551648",shop:"supermarket"},addTags:{brand:"Tesco Metro","brand:wikidata":"Q57551648",name:"Tesco Metro",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/The Co-operative Food (UK)":{name:"The Co-operative Food (UK)",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1034360565127409665/V4fCWHgw_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3277439",shop:"supermarket"},addTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"supermarket"},countryCodes:["gb"],terms:["coop","coop food","cooperative food","the cooperative"],matchScore:2,suggestion:true},"shop/supermarket/The Fresh Market":{name:"The Fresh Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TheFreshMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7735265",shop:"supermarket"},addTags:{brand:"The Fresh Market","brand:wikidata":"Q7735265","brand:wikipedia":"en:The Fresh Market",name:"The Fresh Market",shop:"supermarket"},countryCodes:["us"],terms:["fresh market"],matchScore:2,suggestion:true},"shop/supermarket/The Grocery Outlet":{name:"The Grocery Outlet",icon:"maki-grocery",imageURL:"https://graph.facebook.com/almostperfectinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16062155",shop:"supermarket"},addTags:{brand:"The Grocery Outlet","brand:wikidata":"Q16062155","brand:wikipedia":"en:The Grocery Outlet",name:"The Grocery Outlet",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tigros":{name:"Tigros",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Tigros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24935610",shop:"supermarket"},addTags:{brand:"Tigros","brand:wikidata":"Q24935610","brand:wikipedia":"it:Tigros",name:"Tigros",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Todis":{name:"Todis",icon:"maki-grocery",imageURL:"https://graph.facebook.com/todisbuongiornoconvenienza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3992174",shop:"supermarket"},addTags:{brand:"Todis","brand:wikidata":"Q3992174","brand:wikipedia":"it:Todis",name:"Todis",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tommy":{name:"Tommy",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tommyprodavaonice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12643718",shop:"supermarket"},addTags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"supermarket"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Top Market":{name:"Top Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/topmarketpolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9360044",shop:"supermarket"},addTags:{brand:"Top Market","brand:wikidata":"Q9360044","brand:wikipedia":"pl:Top Market",name:"Top Market",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tops":{name:"Tops",icon:"maki-grocery",imageURL:"https://graph.facebook.com/topsfriendlymarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7825137",shop:"supermarket"},addTags:{brand:"Tops","brand:wikidata":"Q7825137","brand:wikipedia":"en:Tops Friendly Markets",name:"Tops",official_name:"Tops Friendly Markets",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tottus":{name:"Tottus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TottusPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7828510",shop:"supermarket"},addTags:{brand:"Tottus","brand:wikidata":"Q7828510","brand:wikipedia":"en:Tottus",name:"Tottus",shop:"supermarket"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Trader Joe's":{name:"Trader Joe's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/156443021054392/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688825",shop:"supermarket"},addTags:{brand:"Trader Joe's","brand:wikidata":"Q688825","brand:wikipedia":"en:Trader Joe's",name:"Trader Joe's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Treff 3000":{name:"Treff 3000",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"Treff 3000","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Treff 3000",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Tuodì":{name:"Tuodì",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TUODI.it/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3706995",shop:"supermarket"},addTags:{brand:"Tuodì","brand:wikidata":"Q3706995","brand:wikipedia":"it:Tuodì",name:"Tuodì",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/U Express":{name:"U Express",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"supermarket"},addTags:{brand:"U Express","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"U Express",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Unimarc":{name:"Unimarc",icon:"maki-grocery",imageURL:"https://graph.facebook.com/unimarc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6156244",shop:"supermarket"},addTags:{brand:"Unimarc","brand:wikidata":"Q6156244","brand:wikipedia":"es:Unimarc",name:"Unimarc",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Unimarkt":{name:"Unimarkt",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Unimarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1169599",shop:"supermarket"},addTags:{brand:"Unimarkt","brand:wikidata":"Q1169599","brand:wikipedia":"de:Unimarkt",name:"Unimarkt",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vallarta":{name:"Vallarta",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vallarta.supermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7911833",shop:"supermarket"},addTags:{brand:"Vallarta","brand:wikidata":"Q7911833","brand:wikipedia":"en:Vallarta Supermarkets",cuisine:"latin_american",name:"Vallarta","name:es":"Vallarta",official_name:"Vallarta Supermarkets",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Valu-mart":{name:"Valu-mart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/valumartCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7912687",shop:"supermarket"},addTags:{brand:"Valu-mart","brand:wikidata":"Q7912687","brand:wikipedia":"en:Valu-mart",name:"Valu-mart",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vea":{name:"Vea",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/760081378868391936/qPOPFsTZ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5858167",shop:"supermarket"},addTags:{brand:"Vea","brand:wikidata":"Q5858167","brand:wikipedia":"es:Vea (supermercado)",name:"Vea",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/VinMart":{name:"VinMart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/sieuthivinmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60245505",shop:"supermarket"},addTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart",shop:"supermarket"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Volg":{name:"Volg",icon:"maki-grocery",imageURL:"https://graph.facebook.com/1953378021650189/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2530746",shop:"supermarket"},addTags:{brand:"Volg","brand:wikidata":"Q2530746","brand:wikipedia":"de:Volg",name:"Volg",shop:"supermarket"},countryCodes:["ch","li"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vomar":{name:"Vomar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vomarvoordeelmarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3202837",shop:"supermarket"},addTags:{brand:"Vomar","brand:wikidata":"Q3202837","brand:wikipedia":"nl:Vomar",name:"Vomar",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Vons":{name:"Vons",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7941609",shop:"supermarket"},addTags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Waitrose":{name:"Waitrose",icon:"maki-grocery",imageURL:"https://graph.facebook.com/waitroseandpartners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q771734",shop:"supermarket"},addTags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",official_name:"Waitrose & Partners",shop:"supermarket"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Walmart Neighborhood Market":{name:"Walmart Neighborhood Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"supermarket"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Neighborhood Market",shop:"supermarket"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Walmart Supercenter":{name:"Walmart Supercenter",icon:"maki-grocery",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"supermarket"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Supercenter",shop:"supermarket"},terms:["walmart supercentre"],matchScore:2,suggestion:true},"shop/supermarket/Wasgau":{name:"Wasgau",icon:"maki-grocery",imageURL:"https://graph.facebook.com/wasgau/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2536857",shop:"supermarket"},addTags:{brand:"Wasgau","brand:wikidata":"Q2536857","brand:wikipedia":"de:Wasgau (Unternehmen)",name:"Wasgau",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Wegmans":{name:"Wegmans",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Wegmans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11288478",shop:"supermarket"},addTags:{brand:"Wegmans","brand:wikidata":"Q11288478","brand:wikipedia":"en:Wegmans",name:"Wegmans",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Weis":{name:"Weis",icon:"maki-grocery",imageURL:"https://graph.facebook.com/WeisMarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7980370",shop:"supermarket"},addTags:{brand:"Weis","brand:wikidata":"Q7980370","brand:wikipedia":"en:Weis Markets",name:"Weis",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Whole Foods Market":{name:"Whole Foods Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/WholeFoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1809448",shop:"supermarket"},addTags:{brand:"Whole Foods Market","brand:wikidata":"Q1809448","brand:wikipedia":"en:Whole Foods Market",name:"Whole Foods Market",shop:"supermarket"},countryCodes:["ca","gb","us"],terms:["whole foods"],matchScore:2,suggestion:true},"shop/supermarket/Willys":{name:"Willys",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Willys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10720214",shop:"supermarket"},addTags:{brand:"Willys","brand:wikidata":"Q10720214","brand:wikipedia":"sv:Willys",name:"Willys",shop:"supermarket"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/WinCo Foods":{name:"WinCo Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/winco.official.page/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8023592",shop:"supermarket"},addTags:{brand:"WinCo Foods","brand:wikidata":"Q8023592","brand:wikipedia":"en:WinCo Foods",name:"WinCo Foods",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Winn-Dixie":{name:"Winn-Dixie",icon:"maki-grocery",imageURL:"https://graph.facebook.com/winndixie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1264366",shop:"supermarket"},addTags:{brand:"Winn-Dixie","brand:wikidata":"Q1264366","brand:wikipedia":"en:Winn-Dixie",name:"Winn-Dixie",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Woolworths":{name:"Woolworths",icon:"maki-grocery",imageURL:"https://graph.facebook.com/woolworths/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3249145",shop:"supermarket"},addTags:{brand:"Woolworths","brand:wikidata":"Q3249145","brand:wikipedia":"en:Woolworths Supermarkets",name:"Woolworths",shop:"supermarket"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Your Independent Grocer":{name:"Your Independent Grocer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/YourIndependentGrocer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8058833",shop:"supermarket"},addTags:{brand:"Your Independent Grocer","brand:wikidata":"Q8058833","brand:wikipedia":"en:Your Independent Grocer",name:"Your Independent Grocer",shop:"supermarket"},countryCodes:["ca"],terms:["independent"],matchScore:2,suggestion:true},"shop/supermarket/Zehrs":{name:"Zehrs",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ZehrsON/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8068546",shop:"supermarket"},addTags:{brand:"Zehrs","brand:wikidata":"Q8068546","brand:wikipedia":"en:Zehrs Markets",name:"Zehrs",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/basic":{name:"basic",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBasic%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q809994",shop:"supermarket"},addTags:{brand:"basic","brand:wikidata":"Q809994","brand:wikipedia":"de:Basic AG",name:"basic",organic:"only",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/denn's Biomarkt":{name:"denn's Biomarkt",icon:"maki-grocery",imageURL:"https://graph.facebook.com/dennsBiomarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48883773",shop:"supermarket"},addTags:{brand:"denn's Biomarkt","brand:wikidata":"Q48883773",name:"denn's Biomarkt",organic:"only",shop:"supermarket"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/fakta":{name:"fakta",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fakta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3172238",shop:"supermarket"},addTags:{brand:"fakta","brand:wikidata":"Q3172238","brand:wikipedia":"en:Fakta",name:"fakta",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/nah und gut":{name:"nah und gut",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"nah und gut","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"nah und gut",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Şok":{name:"Şok",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SokMarketler/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19613992",shop:"supermarket"},addTags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ΑΒ Βασιλόπουλος":{name:"ΑΒ Βασιλόπουλος",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ab.vassilopoulos.sa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4721807",shop:"supermarket"},addTags:{brand:"ΑΒ Βασιλόπουλος","brand:el":"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:el":"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Γαλαξίας":{name:"Γαλαξίας",icon:"maki-grocery",imageURL:"https://graph.facebook.com/galaxias.sm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5518063",shop:"supermarket"},addTags:{brand:"Γαλαξίας","brand:el":"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:el":"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Μασούτης":{name:"Μασούτης",icon:"maki-grocery",imageURL:"https://graph.facebook.com/masoutis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6783887",shop:"supermarket"},addTags:{brand:"Μασούτης","brand:el":"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:el":"Μασούτης","name:en":"Masoutis",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Σκλαβενίτης":{name:"Σκλαβενίτης",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Sklabenites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7536037",shop:"supermarket"},addTags:{brand:"Σκλαβενίτης","brand:el":"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:el":"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Абсолют (Russia)":{name:"Абсолют (Russia)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q62389597",shop:"supermarket"},addTags:{brand:"Абсолют","brand:wikidata":"Q62389597",name:"Абсолют",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Абсолют (Ukraine)":{name:"Абсолют (Ukraine)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q62389546",shop:"supermarket"},addTags:{brand:"Абсолют","brand:wikidata":"Q62389546",name:"Абсолют",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Азбука Вкуса":{name:"Азбука Вкуса",icon:"maki-grocery",imageURL:"https://graph.facebook.com/azbukavkusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4058209",shop:"supermarket"},addTags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Атак":{name:"Атак",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1565040269/logo_schiever_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2868738",shop:"supermarket"},addTags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ашан":{name:"Ашан",icon:"maki-grocery",imageURL:"https://graph.facebook.com/auchan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",shop:"supermarket"},addTags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Брусничка":{name:"Брусничка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/freshmarket.brusnichka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21656645",shop:"supermarket"},addTags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Булмаг":{name:"Булмаг",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BulMagSupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133376",shop:"supermarket"},addTags:{brand:"Булмаг","brand:en":"BulMag","brand:wikidata":"Q66133376",name:"Булмаг","name:en":"BulMag",shop:"supermarket"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Виктория":{name:"Виктория",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupermarketVictoria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4111046",shop:"supermarket"},addTags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Виталюр":{name:"Виталюр",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vitalur.by/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55663075",shop:"supermarket"},addTags:{brand:"Виталюр","brand:wikidata":"Q55663075","brand:wikipedia":"ru:Виталюр",name:"Виталюр",shop:"supermarket"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Вопак":{name:"Вопак",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vopak.com.ua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30966107",shop:"supermarket"},addTags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Гроздь":{name:"Гроздь",icon:"maki-grocery",imageURL:"https://graph.facebook.com/grozdmag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21638412",shop:"supermarket"},addTags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Гулливер":{name:"Гулливер",icon:"maki-grocery",imageURL:"https://graph.facebook.com/gullivermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58003470",shop:"supermarket"},addTags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Десяточка":{name:"Десяточка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61876182",shop:"supermarket"},addTags:{brand:"Десяточка","brand:en":"Desyatochka","brand:wikidata":"Q61876182",name:"Десяточка",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Дикси":{name:"Дикси",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Dixyclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4161561",shop:"supermarket"},addTags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Евроопт":{name:"Евроопт",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Eurooptby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2565040",shop:"supermarket"},addTags:{brand:"Евроопт","brand:en":"Euroopt","brand:ru":"Евроопт","brand:wikidata":"Q2565040","brand:wikipedia":"be:Еўрагандаль",name:"Евроопт","name:en":"Euroopt","name:ru":"Евроопт",shop:"supermarket"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Евроопт Hyper":{name:"Евроопт Hyper",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q65455975",shop:"supermarket"},addTags:{brand:"Евроопт Hyper","brand:wikidata":"Q65455975",name:"Евроопт Hyper",shop:"supermarket"},countryCodes:["by"],terms:["евроопт гипер"],matchScore:2,suggestion:true},"shop/supermarket/Евроопт Super":{name:"Евроопт Super",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q65455960",shop:"supermarket"},addTags:{brand:"Евроопт Super","brand:wikidata":"Q65455960",name:"Евроопт Super",shop:"supermarket"},countryCodes:["by"],terms:["евроопт супер"],matchScore:2,suggestion:true},"shop/supermarket/Карусель":{name:"Карусель",icon:"maki-grocery",imageURL:"https://graph.facebook.com/karuselgiper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4216307",shop:"supermarket"},addTags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Кировский":{name:"Кировский",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kirovskii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63301903",shop:"supermarket"},addTags:{brand:"Кировский","brand:wikidata":"Q63301903",name:"Кировский",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Командор":{name:"Командор",icon:"maki-grocery",imageURL:"https://graph.facebook.com/prkomandor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61876152",shop:"supermarket"},addTags:{brand:"Командор","brand:en":"Komandor","brand:wikidata":"Q61876152",name:"Командор",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Красный Яр":{name:"Красный Яр",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1786753",shop:"supermarket"},addTags:{brand:"Красный Яр","brand:en":"Krasnyj Jar","brand:wikidata":"Q1786753","brand:wikipedia":"ru:Красный Яр",name:"Красный Яр",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Лента":{name:"Лента",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lentacom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4258608",shop:"supermarket"},addTags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Магнит":{name:"Магнит",icon:"maki-grocery",imageURL:"https://graph.facebook.com/magnitretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"supermarket"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Мария-Ра":{name:"Мария-Ра",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mariarashop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4281631",shop:"supermarket"},addTags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Монетка":{name:"Монетка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4301704",shop:"supermarket"},addTags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Народная 7Я семьЯ":{name:"Народная 7Я семьЯ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F7Family.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4032436",shop:"supermarket"},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"},countryCodes:["ru"],terms:["семья"],matchScore:2,suggestion:true},"shop/supermarket/Перекрёсток":{name:"Перекрёсток",icon:"maki-grocery",imageURL:"https://graph.facebook.com/perekrestok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1684639",shop:"supermarket"},addTags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"},countryCodes:["ru"],terms:["перекресток"],matchScore:2,suggestion:true},"shop/supermarket/Покупочка":{name:"Покупочка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/121978851838251/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58003270",shop:"supermarket"},addTags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Полушка":{name:"Полушка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4371080",shop:"supermarket"},addTags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Пятёрочка":{name:"Пятёрочка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pyaterochka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1768969",shop:"supermarket"},addTags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"},countryCodes:["ru"],terms:["пятерочка"],matchScore:2,suggestion:true},"shop/supermarket/Радеж":{name:"Радеж",icon:"maki-grocery",imageURL:"https://graph.facebook.com/radezhshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4387165",shop:"supermarket"},addTags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Рукавичка":{name:"Рукавичка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/rukavychka.ua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20092568",shop:"supermarket"},addTags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Светофор":{name:"Светофор",icon:"maki-grocery",imageURL:"https://graph.facebook.com/svetoforkryj/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61875920",shop:"supermarket"},addTags:{brand:"Светофор","brand:en":"Svetofor","brand:wikidata":"Q61875920",name:"Светофор",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Семишагофф":{name:"Семишагофф",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58003374",shop:"supermarket"},addTags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Сільпо":{name:"Сільпо",icon:"maki-grocery",imageURL:"https://graph.facebook.com/silpo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4419434",shop:"supermarket"},addTags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Таврия В":{name:"Таврия В",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tavriavonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61823146",shop:"supermarket"},addTags:{brand:"Таврия В","brand:wikidata":"Q61823146","brand:wikipedia":"uk:Таврія В",name:"Таврия В",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Фора":{name:"Фора",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fora.ukraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12165977",shop:"supermarket"},addTags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Фуршет":{name:"Фуршет",icon:"maki-grocery",imageURL:"https://graph.facebook.com/furshetcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4493564",shop:"supermarket"},addTags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Эдельвейс":{name:"Эдельвейс",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57979368",shop:"supermarket"},addTags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/いなげや":{name:"いなげや",icon:"maki-grocery",imageURL:"https://graph.facebook.com/151131734909829/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17193392",shop:"supermarket"},addTags:{brand:"いなげや","brand:en":"Inageya","brand:ja":"いなげや","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya","name:ja":"いなげや",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/まいばすけっと":{name:"まいばすけっと",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mybasket.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11278154",shop:"supermarket"},addTags:{brand:"まいばすけっと","brand:en":"My Basket","brand:ja":"まいばすけっと","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket","name:ja":"まいばすけっと",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/アコレ":{name:"アコレ",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11283128",shop:"supermarket"},addTags:{"alt_name:en":"Acolle",brand:"アコレ","brand:en":"A・Colle","brand:ja":"アコレ","brand:wikidata":"Q11283128","brand:wikipedia":"ja:アコレ",name:"アコレ","name:en":"A・Colle","name:ja":"アコレ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/イオン":{name:"イオン",icon:"maki-grocery",imageURL:"https://graph.facebook.com/aeonretail.english/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11285951",shop:"supermarket"},addTags:{brand:"イオン","brand:en":"AEON","brand:ja":"イオン","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON","name:ja":"イオン",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/イズミヤ":{name:"イズミヤ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/izumiya.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11286632",shop:"supermarket"},addTags:{brand:"イズミヤ","brand:en":"Izumiya","brand:ja":"イズミヤ","brand:wikidata":"Q11286632","brand:wikipedia":"ja:イズミヤ",name:"イズミヤ","name:en":"Izumiya","name:ja":"イズミヤ",shop:"supermarket"},countryCodes:["jp"],terms:["いづみや"],matchScore:2,suggestion:true},"shop/supermarket/イトーヨーカドー":{name:"イトーヨーカドー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/itoyokado/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088746",shop:"supermarket"},addTags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:ja":"イトーヨーカドー","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado","name:ja":"イトーヨーカドー",shop:"supermarket"},countryCodes:["jp"],terms:["イトーヨーカ堂"],matchScore:2,suggestion:true},"shop/supermarket/オリンピック":{name:"オリンピック",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1113319986393518080/QC3um42C_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q11292764",shop:"supermarket"},addTags:{brand:"オリンピック","brand:en":"Olympic","brand:ja":"オリンピック","brand:wikidata":"Q11292764","brand:wikipedia":"ja:Olympicグループ",name:"オリンピック","name:en":"Olympic","name:ja":"オリンピック",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/カスミ":{name:"カスミ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/kasumi.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294160",shop:"supermarket"},addTags:{brand:"カスミ","brand:en":"Kasumi","brand:ja":"カスミ","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi","name:ja":"カスミ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/コープ":{name:"コープ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoop-Logo.PNG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11508615",shop:"supermarket"},addTags:{"alt_name:en":"Co-op",brand:"コープ","brand:en":"CO・OP","brand:ja":"コープ","brand:wikidata":"Q11508615","brand:wikipedia":"ja:日本生活協同組合連合会",name:"コープ","name:ja":"コープ",official_name:"日本生活協同組合連合会","official_name:en":"Japanese Consumers' Co-operative Union",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/コープこう":{name:"コープこう",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coopkobe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5137453",shop:"supermarket"},addTags:{"alt_name:en":"Co-op Kobe",brand:"コープこう","brand:en":"CO・OP Kobe","brand:ja":"コープこう","brand:wikidata":"Q5137453","brand:wikipedia":"ja:生活協同組合コープこうべ",name:"コープこう","name:en":"CO・OP Kobe","name:ja":"コープこう",official_name:"生活協同組合コープこうべ","official_name:en":"The Consumer Co-operative Kobe",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/サミット":{name:"サミット",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/877018274264883201/pgvUi2hw_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11305129",shop:"supermarket"},addTags:{brand:"サミット","brand:en":"Summit","brand:ja":"サミット","brand:wikidata":"Q11305129","brand:wikipedia":"ja:サミット (チェーンストア)",name:"サミット","name:en":"Summit","name:ja":"サミット",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/スーパーバリュー":{name:"スーパーバリュー",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11313802",shop:"supermarket"},addTags:{brand:"スーパーバリュー","brand:en":"Super Value","brand:ja":"スーパーバリュー","brand:wikidata":"Q11313802","brand:wikipedia":"ja:スーパーバリュー",name:"スーパーバリュー","name:en":"Super Value","name:ja":"スーパーバリュー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ダイエー":{name:"ダイエー",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1002058776394973184/9J-cu2yh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11316644",shop:"supermarket"},addTags:{brand:"ダイエー","brand:en":"daiei","brand:ja":"ダイエー","brand:wikidata":"Q11316644","brand:wikipedia":"ja:ダイエー (店舗ブランド)",name:"ダイエー","name:en":"Daiei","name:ja":"ダイエー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/トウズ":{name:"トウズ",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q53308796",shop:"supermarket"},addTags:{brand:"トウズ","brand:en":"Tou's","brand:ja":"トウズ","brand:wikidata":"Q53308796","brand:wikipedia":"ja:トウズ",name:"トウズ","name:en":"Tou's","name:ja":"トウズ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/バロー":{name:"バロー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/138259402886129/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11328346",shop:"supermarket"},addTags:{brand:"バロー","brand:en":"Valor","brand:ja":"バロー","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor","name:ja":"バロー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ベイシア":{name:"ベイシア",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11336776",shop:"supermarket"},addTags:{brand:"ベイシア","brand:en":"Beisia","brand:ja":"ベイシア","brand:wikidata":"Q11336776","brand:wikipedia":"ja:ベイシア",name:"ベイシア","name:en":"Beisia","name:ja":"ベイシア",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/マックスバリュ":{name:"マックスバリュ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/158243057524643/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1960109",shop:"supermarket"},addTags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:ja":"マックスバリュ","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai","name:ja":"マックスバリュ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/マルエツ":{name:"マルエツ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/maruetsu.rakuten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11341197",shop:"supermarket"},addTags:{brand:"マルエツ","brand:en":"Maruetsu","brand:ja":"マルエツ","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu","name:ja":"マルエツ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヤオコー":{name:"ヤオコー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/yaokococoro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11344967",shop:"supermarket"},addTags:{brand:"ヤオコー","brand:en":"Yaoko","brand:ja":"ヤオコー","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko","name:ja":"ヤオコー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヨークベニマル":{name:"ヨークベニマル",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ybfan89/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346199",shop:"supermarket"},addTags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:ja":"ヨークベニマル","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru","name:ja":"ヨークベニマル",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヨークマート":{name:"ヨークマート",icon:"maki-grocery",imageURL:"https://graph.facebook.com/137658762945673/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346201",shop:"supermarket"},addTags:{brand:"ヨークマート","brand:en":"YorkMart","brand:ja":"ヨークマート","brand:wikidata":"Q11346201","brand:wikipedia":"ja:ヨークマート",name:"ヨークマート","name:en":"YorkMart","name:ja":"ヨークマート",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ライフ":{name:"ライフ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lifecorp428/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346476",shop:"supermarket"},addTags:{brand:"ライフ","brand:en":"Life","brand:ja":"ライフ","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life","name:ja":"ライフ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ワイズマート":{name:"ワイズマート",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1025282426530975744/QlC5k-zI_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11351175",shop:"supermarket"},addTags:{brand:"ワイズマート","brand:en":"Y'smart","brand:ja":"ワイズマート","brand:wikidata":"Q11351175","brand:wikipedia":"ja:ワイズマート",name:"ワイズマート","name:en":"Y'smart","name:ja":"ワイズマート",shop:"supermarket"},countryCodes:["jp"],terms:["よしのぶっさん"],matchScore:2,suggestion:true},"shop/supermarket/全聯":{name:"全聯",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pxmartchannel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7262792",shop:"supermarket"},addTags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/全聯福利中心":{name:"全聯福利中心",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pxmartchannel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7262792",shop:"supermarket"},addTags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/家乐福":{name:"家乐福",icon:"maki-grocery",imageURL:"https://graph.facebook.com/carrefour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",shop:"supermarket"},addTags:{brand:"家乐福","brand:wikidata":"Q217599","brand:wikipedia":"wuu:家乐福",name:"家乐福",shop:"supermarket"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/惠康 Wellcome":{name:"惠康 Wellcome",icon:"maki-grocery",imageURL:"https://graph.facebook.com/wellcome.supermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706247",shop:"supermarket"},addTags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/東急ストア":{name:"東急ストア",icon:"maki-grocery",imageURL:"https://graph.facebook.com/255001091240615/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11526963",shop:"supermarket"},addTags:{brand:"東急ストア","brand:en":"Tokyu Store","brand:ja":"東急ストア","brand:wikidata":"Q11526963","brand:wikipedia":"ja:東急ストア",name:"東急ストア","name:en":"Tokyu Store","name:ja":"東急ストア",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/東武ストア":{name:"東武ストア",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11527478",shop:"supermarket"},addTags:{brand:"東武ストア","brand:en":"Tobu Store","brand:ja":"東武ストア","brand:wikidata":"Q11527478","brand:wikipedia":"ja:東武ストア",name:"東武ストア","name:en":"Tobu Store","name:ja":"東武ストア",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/業務スーパー":{name:"業務スーパー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/gsjdf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11590183",shop:"supermarket"},addTags:{brand:"業務スーパー","brand:en":"Gyomu Super","brand:ja":"業務スーパー","brand:wikidata":"Q11590183","brand:wikipedia":"ja:神戸物産",name:"業務スーパー","name:en":"Gyōmu sūpā","name:ja":"業務スーパー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/沃尔玛":{name:"沃尔玛",icon:"maki-grocery",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"supermarket"},addTags:{brand:"沃尔玛","brand:en":"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"wuu:沃尔玛",name:"沃尔玛","name:en":"Walmart",shop:"supermarket"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/美廉社":{name:"美廉社",icon:"maki-grocery",imageURL:"https://graph.facebook.com/simplemart1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15914017",shop:"supermarket"},addTags:{brand:"美廉社","brand:en":"Simple Mart","brand:wikidata":"Q15914017","brand:wikipedia":"zh:美廉社",name:"美廉社","name:en":"Simple Mart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/西友":{name:"西友",icon:"maki-grocery",imageURL:"https://graph.facebook.com/yourrepo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3108542",shop:"supermarket"},addTags:{brand:"西友","brand:en":"Seiyu","brand:wikidata":"Q3108542","brand:wikipedia":"en:Seiyu Group",name:"西友","name:en":"Seiyu",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/頂好":{name:"頂好",icon:"maki-grocery",imageURL:"https://graph.facebook.com/wellcome.supermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706247",shop:"supermarket"},addTags:{brand:"頂好","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好","name:en":"Wellcome",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/頂好超市":{name:"頂好超市",icon:"maki-grocery",imageURL:"https://graph.facebook.com/wellcome.supermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706247",shop:"supermarket"},addTags:{brand:"頂好超市","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好超市","name:en":"Wellcome",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/롯데마트":{name:"롯데마트",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lottemart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q326715",shop:"supermarket"},addTags:{brand:"롯데마트","brand:ko":"롯데마트","brand:wikidata":"Q326715","brand:wikipedia":"ko:롯데마트",name:"롯데마트","name:en":"Lotte Mart","name:ko":"롯데마트",shop:"supermarket"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/하나로마트":{name:"하나로마트",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q12590611",shop:"supermarket"},addTags:{brand:"하나로마트","brand:en":"Hanaro Mart","brand:ko":"하나로마트","brand:wikidata":"Q12590611","brand:wikipedia":"ko:농협유통",name:"하나로마트","name:ko":"하나로마트",shop:"supermarket"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/swimming_pool/Leslie's Pool Supplies":{name:"Leslie's Pool Supplies",icon:"fas-swimmer",imageURL:"https://graph.facebook.com/LesliesPoolSupplies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6530568",shop:"swimming_pool"},addTags:{brand:"Leslie's Pool Supplies","brand:wikidata":"Q6530568","brand:wikipedia":"en:Leslie's Poolmart",name:"Leslie's Pool Supplies",official_name:"Leslie's Pool Supplies Service & Repair",shop:"swimming_pool"},countryCodes:["us"],terms:["leslies pool supply","leslies swimming pool supplies"],matchScore:2,suggestion:true},"shop/tea/DavidsTea":{name:"DavidsTea",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/DAVIDsTEA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3019129",shop:"tea"},addTags:{brand:"DavidsTea","brand:wikidata":"Q3019129","brand:wikipedia":"en:DavidsTea",name:"DavidsTea",shop:"tea"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/tea/T2":{name:"T2",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/T2Tea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48802134",shop:"tea"},addTags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/tea/TeeGschwendner":{name:"TeeGschwendner",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/TeeGschwendner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2399969",shop:"tea"},addTags:{brand:"TeeGschwendner","brand:wikidata":"Q2399969","brand:wikipedia":"de:TeeGschwendner",name:"TeeGschwendner",shop:"tea"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/A1":{name:"A1",icon:"maki-telephone",imageURL:"https://graph.facebook.com/A1Fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688755",shop:"telecommunication"},addTags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"telecommunication"},countryCodes:["at","bg","by","hr","si"],terms:["velcom","velcom|a1","велком"],matchScore:2,suggestion:true},"shop/telecommunication/Bell":{name:"Bell",icon:"maki-telephone",imageURL:"https://graph.facebook.com/BellCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q815694",shop:"telecommunication"},addTags:{brand:"Bell","brand:wikidata":"Q815694","brand:wikipedia":"en:Bell Canada",name:"Bell",shop:"telecommunication"},countryCodes:["ca"],terms:["bell canada"],matchScore:2,suggestion:true},"shop/telecommunication/Malitel":{name:"Malitel",icon:"maki-telephone",geometry:["point","area"],tags:{"brand:wikidata":"Q6743829",shop:"telecommunication"},addTags:{brand:"Malitel","brand:wikidata":"Q6743829","brand:wikipedia":"en:Malitel",name:"Malitel",shop:"telecommunication"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Ooredoo":{name:"Ooredoo",icon:"maki-telephone",imageURL:"https://graph.facebook.com/ooredooqatar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q919935",shop:"telecommunication"},addTags:{brand:"Ooredoo","brand:wikidata":"Q919935","brand:wikipedia":"en:Ooredoo",name:"Ooredoo",shop:"telecommunication"},terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Orange Mali":{name:"Orange Mali",icon:"maki-telephone",imageURL:"https://pbs.twimg.com/profile_images/905755776660234248/CaXneU0v_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3355061",shop:"telecommunication"},addTags:{brand:"Orange Mali","brand:wikidata":"Q3355061","brand:wikipedia":"fr:Orange Mali",name:"Orange Mali",shop:"telecommunication"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Spectrum":{name:"Spectrum",icon:"maki-telephone",imageURL:"https://graph.facebook.com/Spectrum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7805197",shop:"telecommunication"},addTags:{brand:"Spectrum","brand:wikidata":"Q7805197","brand:wikipedia":"en:Spectrum (cable service)",name:"Spectrum",shop:"telecommunication"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Xfinity":{name:"Xfinity",icon:"maki-telephone",imageURL:"https://pbs.twimg.com/profile_images/1131771952828375040/wTv-dtEe_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5151002",shop:"telecommunication"},addTags:{brand:"Xfinity","brand:wikidata":"Q5151002","brand:wikipedia":"en:Xfinity",name:"Xfinity",shop:"telecommunication"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/МТС":{name:"МТС",icon:"maki-telephone",imageURL:"https://graph.facebook.com/mts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1368919",shop:"telecommunication"},addTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"telecommunication"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Ростелеком":{name:"Ростелеком",icon:"maki-telephone",imageURL:"https://graph.facebook.com/288785311160831/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1477012",shop:"telecommunication"},addTags:{brand:"Ростелеком","brand:wikidata":"Q1477012","brand:wikipedia":"en:Rostelecom",name:"Ростелеком",shop:"telecommunication"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Укртелеком":{name:"Укртелеком",icon:"maki-telephone",imageURL:"https://graph.facebook.com/Ukrtelecom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1505321",shop:"telecommunication"},addTags:{brand:"Укртелеком","brand:wikidata":"Q1505321","brand:wikipedia":"en:Ukrtelecom",name:"Укртелеком",shop:"telecommunication"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/中華電信":{name:"中華電信",icon:"maki-telephone",imageURL:"https://graph.facebook.com/684453775036802/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q717531",shop:"telecommunication"},addTags:{brand:"中華電信","brand:en":"Chunghwa Telecom","brand:wikidata":"Q717531","brand:wikipedia":"zh:中華電信","brand:zh":"中華電信",name:"中華電信","name:en":"Chunghwa Telecom","name:zh":"中華電信",shop:"telecommunication"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/遠傳電信":{name:"遠傳電信",icon:"maki-telephone",imageURL:"https://graph.facebook.com/fareastone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5434486",shop:"telecommunication"},addTags:{brand:"遠傳電信","brand:en":"FarEasTone","brand:wikidata":"Q5434486","brand:wikipedia":"zh:遠傳電信","brand:zh":"遠傳電信",name:"遠傳電信","name:en":"FarEasTone","name:zh":"遠傳電信",shop:"telecommunication"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/ticket/Boutique Grandes Lignes":{name:"Boutique Grandes Lignes",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/SNCFOFFICIEL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13646",shop:"ticket"},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"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/ticket/DB Reisezentrum":{name:"DB Reisezentrum",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/348950735250586/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15842100",shop:"ticket"},addTags:{brand:"DB Reisezentrum","brand:wikidata":"Q15842100","brand:wikipedia":"de:Reisezentrum",name:"DB Reisezentrum",shop:"ticket"},countryCodes:["de"],terms:["reisezentrum"],matchScore:2,suggestion:true},"shop/ticket/Guichet Transilien":{name:"Guichet Transilien",icon:"fas-ticket-alt",imageURL:"https://pbs.twimg.com/profile_images/1187367754988429313/HmyF6sUy_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q389554",shop:"ticket"},addTags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/tiles/Topps Tiles":{name:"Topps Tiles",icon:"maki-shop",imageURL:"https://graph.facebook.com/toppstiles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17026595",shop:"tiles"},addTags:{brand:"Topps Tiles","brand:wikidata":"Q17026595","brand:wikipedia":"en:Topps Tiles",name:"Topps Tiles",shop:"tiles"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/tobacco/Nemzeti Dohánybolt":{name:"Nemzeti Dohánybolt",icon:"temaki-pipe",imageURL:"https://graph.facebook.com/195460840603881/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20639040",shop:"tobacco"},addTags:{brand:"Nemzeti Dohánybolt","brand:wikidata":"Q20639040","brand:wikipedia":"en:Dohánybolt",name:"Nemzeti Dohánybolt",shop:"tobacco"},countryCodes:["hu"],terms:["dohánybolt"],matchScore:2,suggestion:true},"shop/tool_hire/HSS Hire":{name:"HSS Hire",icon:"temaki-tools",imageURL:"https://pbs.twimg.com/profile_images/1128980411504373760/yYZco9IU_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5636000",shop:"tool_hire"},addTags:{brand:"HSS Hire","brand:wikidata":"Q5636000","brand:wikipedia":"en:HSS Hire",name:"HSS Hire",shop:"tool_hire"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/toys/Build-A-Bear Workshop":{name:"Build-A-Bear Workshop",icon:"fas-rocket",imageURL:"https://graph.facebook.com/Buildabear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1002992",shop:"toys"},addTags:{brand:"Build-A-Bear Workshop","brand:wikidata":"Q1002992","brand:wikipedia":"en:Build-A-Bear Workshop",name:"Build-A-Bear Workshop",shop:"toys"},countryCodes:["ca","gb","us"],terms:["build a bear"],matchScore:2,suggestion:true},"shop/toys/Dráčik":{name:"Dráčik",icon:"fas-rocket",imageURL:"https://graph.facebook.com/2185187834828492/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57653669",shop:"toys"},addTags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/toys/Early Learning Centre":{name:"Early Learning Centre",icon:"fas-rocket",imageURL:"https://pbs.twimg.com/profile_images/1169193556151537664/rPFaBs5D_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5326681",shop:"toys"},addTags:{alt_name:"ELC",brand:"Early Learning Centre","brand:wikidata":"Q5326681","brand:wikipedia":"en:Early Learning Centre",name:"Early Learning Centre",shop:"toys"},terms:["early learning center"],matchScore:2,suggestion:true},"shop/toys/Hawkin's Bazaar":{name:"Hawkin's Bazaar",icon:"fas-rocket",imageURL:"https://graph.facebook.com/HawkinsBazaar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16983539",shop:"toys"},addTags:{brand:"Hawkin's Bazaar","brand:wikidata":"Q16983539",name:"Hawkin's Bazaar",shop:"toys"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/toys/Intertoys":{name:"Intertoys",icon:"fas-rocket",imageURL:"https://graph.facebook.com/Intertoys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1891407",shop:"toys"},addTags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"},countryCodes:["be","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/toys/JouéClub":{name:"JouéClub",icon:"fas-rocket",imageURL:"https://graph.facebook.com/JoueClubFr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3187152",shop:"toys"},addTags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"},countryCodes:["ad","fr","it","lb","ma","qa"],terms:[],matchScore:2,suggestion:true},"shop/toys/King Jouet":{name:"King Jouet",icon:"fas-rocket",imageURL:"https://graph.facebook.com/KingJouet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3197009",shop:"toys"},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"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/toys/La Grande Récré":{name:"La Grande Récré",icon:"fas-rocket",imageURL:"https://graph.facebook.com/lagranderecre/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3209556",shop:"toys"},addTags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"},countryCodes:["be","ci","es","fr","ma"],terms:[],matchScore:2,suggestion:true},"shop/toys/Lego":{name:"Lego",icon:"fas-rocket",imageURL:"https://graph.facebook.com/lego/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1063455",shop:"toys"},addTags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"},terms:["lego store"],matchScore:2,suggestion:true},"shop/toys/Lekia":{name:"Lekia",icon:"fas-rocket",imageURL:"https://graph.facebook.com/lekiasweden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56303274",shop:"toys"},addTags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"},countryCodes:["no","se"],terms:[],matchScore:2,suggestion:true},"shop/toys/Maxi Toys":{name:"Maxi Toys",icon:"fas-rocket",imageURL:"https://graph.facebook.com/MaxiToys.FR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16663879",shop:"toys"},addTags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"},countryCodes:["be","de","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/toys/Menkind":{name:"Menkind",icon:"fas-rocket",imageURL:"https://graph.facebook.com/Menkind/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66725844",shop:"toys"},addTags:{brand:"Menkind","brand:wikidata":"Q66725844",name:"Menkind",shop:"toys"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/toys/Ri Happy Brinquedos":{name:"Ri Happy Brinquedos",icon:"fas-rocket",geometry:["point","area"],tags:{"brand:wikidata":"Q10360441",shop:"toys"},addTags:{brand:"Ri Happy Brinquedos","brand:wikidata":"Q10360441","brand:wikipedia":"pt:Ri Happy Brinquedos",name:"Ri Happy Brinquedos",shop:"toys"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/toys/Smyths":{name:"Smyths",icon:"fas-rocket",imageURL:"https://pbs.twimg.com/profile_images/1201814536459898880/TC3S7JHH_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7546779",shop:"toys"},addTags:{brand:"Smyths","brand:wikidata":"Q7546779","brand:wikipedia":"en:Smyths",name:"Smyths",shop:"toys"},countryCodes:["at","ch","de","gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/toys/The Entertainer":{name:"The Entertainer",icon:"fas-rocket",imageURL:"https://graph.facebook.com/TheEntertainerToyShop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7732289",shop:"toys"},addTags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/toys/Toys R Us":{name:"Toys R Us",icon:"fas-rocket",imageURL:"https://graph.facebook.com/toysrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q696334",shop:"toys"},addTags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"},terms:[],matchScore:2,suggestion:true},"shop/toys/Детский мир":{name:"Детский мир",icon:"fas-rocket",imageURL:"https://graph.facebook.com/detmir/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16643324",shop:"toys"},addTags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/toys/Кораблик":{name:"Кораблик",icon:"fas-rocket",imageURL:"https://graph.facebook.com/korablik.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57653416",shop:"toys"},addTags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/trade/84 Lumber":{name:"84 Lumber",icon:"temaki-tools",imageURL:"https://graph.facebook.com/84lumber/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644779",shop:"trade"},addTags:{brand:"84 Lumber","brand:wikidata":"Q4644779","brand:wikipedia":"en:84 Lumber",name:"84 Lumber",shop:"trade",trade:"building_supplies"},countryCodes:["us"],terms:["84","eighty-four lumber"],matchScore:2,suggestion:true},"shop/trade/Caterpillar":{name:"Caterpillar",icon:"temaki-tools",imageURL:"https://graph.facebook.com/caterpillarinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q459965",shop:"trade"},addTags:{brand:"Caterpillar","brand:wikidata":"Q459965","brand:wikipedia":"en:Caterpillar Inc.",name:"Caterpillar",shop:"trade",short_name:"CAT",trade:"agricultural_equipment"},terms:[],matchScore:2,suggestion:true},"shop/trade/Fastenal":{name:"Fastenal",icon:"temaki-tools",imageURL:"https://graph.facebook.com/fastenalcompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3067119",shop:"trade"},addTags:{brand:"Fastenal","brand:wikidata":"Q3067119","brand:wikipedia":"en:Fastenal",name:"Fastenal",shop:"trade"},countryCodes:["ca","pa","us"],terms:[],matchScore:2,suggestion:true},"shop/trade/Grainger":{name:"Grainger",icon:"temaki-tools",imageURL:"https://graph.facebook.com/grainger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1627894",shop:"trade"},addTags:{brand:"Grainger","brand:wikidata":"Q1627894","brand:wikipedia":"en:W. W. Grainger",name:"Grainger",shop:"trade"},countryCodes:["ca","us"],terms:["granger","w. w. grainger"],matchScore:2,suggestion:true},"shop/trade/John Deere":{name:"John Deere",icon:"temaki-tools",imageURL:"https://graph.facebook.com/JohnDeereUSCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q496302",shop:"trade"},addTags:{brand:"John Deere","brand:wikidata":"Q496302","brand:wikipedia":"en:John Deere",name:"John Deere",shop:"trade",trade:"agricultural_equipment"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Alltours":{name:"Alltours",icon:"fas-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAlltours%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2649481",shop:"travel_agency"},addTags:{brand:"Alltours","brand:wikidata":"Q2649481","brand:wikipedia":"de:Alltours",name:"Alltours",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/American Automobile Association":{name:"American Automobile Association",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/AAAFanPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q463436",shop:"travel_agency"},addTags:{brand:"American Automobile Association","brand:wikidata":"Q463436","brand:wikipedia":"en:American Automobile Association",name:"American Automobile Association",shop:"travel_agency",short_name:"AAA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Coral Travel":{name:"Coral Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/coraltravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58011479",shop:"travel_agency"},addTags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"},countryCodes:["pl","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/D-reizen":{name:"D-reizen",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/dreizenvakanties/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2445498",shop:"travel_agency"},addTags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/DER Reisebüro":{name:"DER Reisebüro",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/DER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56729186",shop:"travel_agency"},addTags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"},countryCodes:["de"],terms:["der deutsches reisebüro"],matchScore:2,suggestion:true},"shop/travel_agency/Expedia CruiseShipCenters":{name:"Expedia CruiseShipCenters",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/ExpediaCSC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5189985",shop:"travel_agency"},addTags:{brand:"Expedia CruiseShipCenters","brand:wikidata":"Q5189985","brand:wikipedia":"en:Expedia CruiseShipCenters",name:"Expedia CruiseShipCenters",shop:"travel_agency"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/First Reisebüro":{name:"First Reisebüro",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/TUIDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573103",shop:"travel_agency"},addTags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"First Reisebüro",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Flight Centre":{name:"Flight Centre",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/flightcentreAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5459202",shop:"travel_agency"},addTags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Halcón Viajes":{name:"Halcón Viajes",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/halconviajes.oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57591939",shop:"travel_agency"},addTags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Havas Voyages":{name:"Havas Voyages",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/havas.voyages/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57628091",shop:"travel_agency"},addTags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Hays Travel":{name:"Hays Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/HaysTravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q70250954",shop:"travel_agency"},addTags:{brand:"Hays Travel","brand:wikidata":"Q70250954","brand:wikipedia":"en:Hays Travel",name:"Hays Travel",shop:"travel_agency"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/JTB":{name:"JTB",icon:"fas-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJTB%20Logo%20Japanese%20Tagline.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6109053",shop:"travel_agency"},addTags:{brand:"JTB","brand:wikidata":"Q6109053","brand:wikipedia":"ja:JTB",name:"JTB",official_name:"日本交通公社","official_name:en":"Japan Travel Bureau",shop:"travel_agency"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Kuoni":{name:"Kuoni",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/kuonitraveluk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q684355",shop:"travel_agency"},addTags:{brand:"Kuoni","brand:wikidata":"Q684355","brand:wikipedia":"en:Kuoni Travel",name:"Kuoni",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Liberty Travel":{name:"Liberty Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/LibertyTravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17031665",shop:"travel_agency"},addTags:{brand:"Liberty Travel","brand:wikidata":"Q17031665","brand:wikipedia":"en:Liberty Travel",name:"Liberty Travel",shop:"travel_agency"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Neckermann Reisen":{name:"Neckermann Reisen",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/neckermann.be/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17300280",shop:"travel_agency"},addTags:{brand:"Neckermann Reisen","brand:wikidata":"Q17300280",name:"Neckermann Reisen",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Reiseland":{name:"Reiseland",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/reiseland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40387610",shop:"travel_agency"},addTags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Selectour":{name:"Selectour",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/SelectourVoyages/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3478073",shop:"travel_agency"},addTags:{brand:"Selectour","brand:wikidata":"Q3478073","brand:wikipedia":"fr:Selectour",name:"Selectour",shop:"travel_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/TUI (Group)":{name:"TUI (Group)",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/TUIDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573103",shop:"travel_agency"},addTags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"TUI",shop:"travel_agency"},terms:["tui reisecenter"],matchScore:2,suggestion:true},"shop/travel_agency/TUI (UK)":{name:"TUI (UK)",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/worldofTUI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7795876",shop:"travel_agency"},addTags:{brand:"TUI","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"TUI",shop:"travel_agency"},countryCodes:["gb"],terms:["thomson"],matchScore:2,suggestion:true},"shop/travel_agency/The Co-operative Travel":{name:"The Co-operative Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/cooperativetraveluk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7726526",shop:"travel_agency"},addTags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Thomas Cook":{name:"Thomas Cook",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/thomascook/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2141800",shop:"travel_agency"},addTags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Turkish Airlines":{name:"Turkish Airlines",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/turkishairlines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4548",shop:"travel_agency"},addTags:{brand:"Turkish Airlines","brand:wikidata":"Q4548","brand:wikipedia":"en:Turkish Airlines",name:"Turkish Airlines",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/ltur":{name:"ltur",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/ltur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q519040",shop:"travel_agency"},addTags:{brand:"ltur","brand:wikidata":"Q519040","brand:wikipedia":"de:L’TUR",name:"ltur",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Поехали с нами":{name:"Поехали с нами",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/PoehaliSNamiua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25439141",shop:"travel_agency"},addTags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/エイチ・アイ・エス":{name:"エイチ・アイ・エス",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/H.I.S.Japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1452225",shop:"travel_agency"},addTags:{"alt_name:en":"HIS",brand:"エイチ・アイ・エス","brand:en":"H.I.S.","brand:ja":"エイチ・アイ・エス","brand:wikidata":"Q1452225","brand:wikipedia":"ja:エイチ・アイ・エス",name:"エイチ・アイ・エス","name:en":"H.I.S.","name:ja":"エイチ・アイ・エス",shop:"travel_agency"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/近畿日本ツーリスト":{name:"近畿日本ツーリスト",icon:"fas-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%E8%BF%91%E7%95%BF%E6%97%A5%E6%9C%AC%E3%83%84%E3%83%BC%E3%83%AA%E3%82%B9%E3%83%88%20%E7%9C%8B%E6%9D%BF.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11638632",shop:"travel_agency"},addTags:{brand:"近畿日本ツーリスト","brand:en":"KNT","brand:ja":"近畿日本ツーリスト","brand:wikidata":"Q11638632","brand:wikipedia":"ja:近畿日本ツーリスト",name:"近畿日本ツーリスト","name:en":"KNT","name:ja":"近畿日本ツーリスト","official_name:en":"Kinki Nippon Tourist",shop:"travel_agency"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Big O Tires":{name:"Big O Tires",icon:"temaki-tire",imageURL:"https://graph.facebook.com/BigOTires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906085",shop:"tyres"},addTags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Bridgestone":{name:"Bridgestone",icon:"temaki-tire",imageURL:"https://graph.facebook.com/BridgestoneTires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q179433",shop:"tyres"},addTags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/tyres/Discount Tire":{name:"Discount Tire",icon:"temaki-tire",imageURL:"https://graph.facebook.com/DiscountTire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5281735",shop:"tyres"},addTags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Express Oil Change & Tire Engineers":{name:"Express Oil Change & Tire Engineers",icon:"temaki-tire",imageURL:"https://graph.facebook.com/expressoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q39057654",shop:"tyres"},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"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Les Schwab Tire Center":{name:"Les Schwab Tire Center",icon:"temaki-tire",imageURL:"https://graph.facebook.com/lesschwab/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6529977",shop:"tyres"},addTags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"},countryCodes:["us"],terms:["les schwab"],matchScore:2,suggestion:true},"shop/tyres/Michelin":{name:"Michelin",icon:"temaki-tire",imageURL:"https://pbs.twimg.com/profile_images/1031457567963312128/I7Vnou9B_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q151107",shop:"tyres"},addTags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/tyres/Pneuhage":{name:"Pneuhage",icon:"temaki-tire",imageURL:"https://graph.facebook.com/pneuhage.reifendienste/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2099972",shop:"tyres"},addTags:{brand:"Pneuhage","brand:wikidata":"Q2099972","brand:wikipedia":"de:Pneuhage",name:"Pneuhage",shop:"tyres"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Tire Discounters":{name:"Tire Discounters",icon:"temaki-tire",imageURL:"https://graph.facebook.com/TireDiscounters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29093639",shop:"tyres"},addTags:{brand:"Tire Discounters","brand:wikidata":"Q29093639","brand:wikipedia":"en:Tire Discounters",name:"Tire Discounters",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Tires Plus":{name:"Tires Plus",icon:"temaki-tire",imageURL:"https://graph.facebook.com/TiresPlus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64015091",shop:"tyres"},addTags:{brand:"Tires Plus","brand:wikidata":"Q64015091",name:"Tires Plus",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Vianor":{name:"Vianor",icon:"temaki-tire",imageURL:"https://graph.facebook.com/VianorSuomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10714920",shop:"tyres"},addTags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/vacuum_cleaner/Oreck":{name:"Oreck",icon:"temaki-vacuum",imageURL:"https://graph.facebook.com/oreck/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57273844",shop:"vacuum_cleaner"},addTags:{brand:"Oreck","brand:wikidata":"Q57273844",name:"Oreck",shop:"vacuum_cleaner"},countryCodes:["us"],terms:["oreck vacuums"],matchScore:2,suggestion:true},"shop/variety_store/99 Cents Only Stores":{name:"99 Cents Only Stores",icon:"maki-shop",imageURL:"https://graph.facebook.com/99CentsOnly/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4646294",shop:"variety_store"},addTags:{brand:"99 Cents Only Stores","brand:wikidata":"Q4646294","brand:wikipedia":"en:99 Cents Only Stores",name:"99 Cents Only Stores",shop:"variety_store"},countryCodes:["us"],terms:["99 cent only stores","99 cents only"],matchScore:2,suggestion:true},"shop/variety_store/Action":{name:"Action",icon:"maki-shop",imageURL:"https://graph.facebook.com/actiondotcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2634111",shop:"variety_store"},addTags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"},countryCodes:["at","be","de","fr","lu","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/B&M Bargains":{name:"B&M Bargains",icon:"maki-shop",imageURL:"https://graph.facebook.com/bmstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4836931",shop:"variety_store"},addTags:{brand:"B&M Bargains","brand:wikidata":"Q4836931","brand:wikipedia":"en:B & M",name:"B&M Bargains",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Big Bazar":{name:"Big Bazar",icon:"maki-shop",imageURL:"https://graph.facebook.com/bigbazarbv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15873104",shop:"variety_store"},addTags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Daiso Japan":{name:"Daiso Japan",icon:"maki-shop",imageURL:"https://graph.facebook.com/daisojapanusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q866991",shop:"variety_store"},addTags:{brand:"Daiso","brand:wikidata":"Q866991","brand:wikipedia":"en:Daiso",name:"Daiso Japan",shop:"variety_store",short_name:"Daiso"},countryCodes:["au","us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dealz":{name:"Dealz",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/548442428512825344/G-L9AZ1f_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q16942585",shop:"variety_store"},addTags:{brand:"Dealz","brand:wikidata":"Q16942585","brand:wikipedia":"en:Dealz",name:"Dealz",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dollar General":{name:"Dollar General",icon:"maki-shop",imageURL:"https://graph.facebook.com/dollargeneral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q145168",shop:"variety_store"},addTags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dollar Tree":{name:"Dollar Tree",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/509405558898561024/27hmihjq_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5289230",shop:"variety_store"},addTags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Dollarama":{name:"Dollarama",icon:"maki-shop",imageURL:"https://graph.facebook.com/415845051799232/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3033947",shop:"variety_store"},addTags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/EuroShop":{name:"EuroShop",icon:"maki-shop",imageURL:"https://graph.facebook.com/schumeuroshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15846763",shop:"variety_store"},addTags:{brand:"EuroShop","brand:wikidata":"Q15846763","brand:wikipedia":"de:Schum EuroShop",name:"EuroShop",shop:"variety_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Family Dollar":{name:"Family Dollar",icon:"maki-shop",imageURL:"https://graph.facebook.com/familydollar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433101",shop:"variety_store"},addTags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Five Below":{name:"Five Below",icon:"maki-shop",imageURL:"https://graph.facebook.com/FiveBelow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5455836",shop:"variety_store"},addTags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Fix Price":{name:"Fix Price",icon:"maki-shop",imageURL:"https://graph.facebook.com/fixprice.russia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4038791",shop:"variety_store"},addTags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Flying Tiger Copenhagen":{name:"Flying Tiger Copenhagen",icon:"maki-shop",imageURL:"https://graph.facebook.com/flyingtigercph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2786319",shop:"variety_store"},addTags:{brand:"Flying Tiger Copenhagen","brand:wikidata":"Q2786319","brand:wikipedia":"en:Flying Tiger Copenhagen",name:"Flying Tiger Copenhagen",shop:"variety_store",short_name:"Flying Tiger"},terms:["tgr","tiger"],matchScore:2,suggestion:true},"shop/variety_store/GiFi":{name:"GiFi",icon:"maki-shop",imageURL:"https://graph.facebook.com/GiFi.Officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3105439",shop:"variety_store"},addTags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Home Bargains":{name:"Home Bargains",icon:"maki-shop",imageURL:"https://graph.facebook.com/homebargains/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5888229",shop:"variety_store"},addTags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/La Foir'Fouille":{name:"La Foir'Fouille",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q3209040",shop:"variety_store"},addTags:{brand:"La Foir'Fouille","brand:wikidata":"Q3209040","brand:wikipedia":"fr:La Foir'Fouille",name:"La Foir'Fouille",shop:"variety_store"},countryCodes:["be","fr","lu","mu","nc"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Miniso":{name:"Miniso",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMiniso%20international%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q20732498",shop:"variety_store"},addTags:{brand:"Miniso","brand:wikidata":"Q20732498","brand:wikipedia":"en:Miniso",name:"Miniso",shop:"variety_store"},terms:[],matchScore:2,suggestion:true},"shop/variety_store/Mäc-Geiz":{name:"Mäc-Geiz",icon:"maki-shop",imageURL:"https://graph.facebook.com/1652809328274529/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1957126",shop:"variety_store"},addTags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/NOZ":{name:"NOZ",icon:"maki-shop",imageURL:"https://graph.facebook.com/UniversNOZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3345688",shop:"variety_store"},addTags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Ocean State Job Lot":{name:"Ocean State Job Lot",icon:"maki-shop",imageURL:"https://graph.facebook.com/OceanStateJobLot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7076076",shop:"variety_store"},addTags:{brand:"Ocean State Job Lot","brand:wikidata":"Q7076076","brand:wikipedia":"en:Ocean State Job Lot",name:"Ocean State Job Lot",shop:"variety_store",short_name:"Job Lot"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Ollie's Bargain Outlet":{name:"Ollie's Bargain Outlet",icon:"maki-shop",imageURL:"https://graph.facebook.com/olliesbargainoutlet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7088304",shop:"variety_store"},addTags:{brand:"Ollie's Bargain Outlet","brand:wikidata":"Q7088304","brand:wikipedia":"en:Ollie's Bargain Outlet",name:"Ollie's Bargain Outlet",shop:"variety_store",short_name:"Ollie's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundland":{name:"Poundland",icon:"maki-shop",imageURL:"https://graph.facebook.com/Poundland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1434528",shop:"variety_store"},addTags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundstretcher":{name:"Poundstretcher",icon:"maki-shop",imageURL:"https://graph.facebook.com/Poundstretcher/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7235675",shop:"variety_store"},addTags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundworld":{name:"Poundworld",icon:"maki-shop",imageURL:"https://graph.facebook.com/PoundWorld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16967516",shop:"variety_store"},addTags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Roses":{name:"Roses",icon:"maki-shop",imageURL:"https://graph.facebook.com/rosesdiscountstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7368644",shop:"variety_store"},addTags:{brand:"Roses","brand:wikidata":"Q7368644","brand:wikipedia":"en:Roses (store)",name:"Roses",shop:"variety_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/TEDi":{name:"TEDi",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTEDi-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1364603",shop:"variety_store"},addTags:{brand:"TEDi","brand:wikidata":"Q1364603","brand:wikipedia":"de:TEDi",name:"TEDi",shop:"variety_store"},countryCodes:["at","de","es","hr","si","sk"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Tokmanni":{name:"Tokmanni",icon:"maki-shop",imageURL:"https://graph.facebook.com/Tokmanni.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13423470",shop:"variety_store"},addTags:{brand:"Tokmanni","brand:wikidata":"Q13423470","brand:wikipedia":"fi:Tokmanni",name:"Tokmanni",shop:"variety_store"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Wilko":{name:"Wilko",icon:"maki-shop",imageURL:"https://graph.facebook.com/LoveWilko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8002536",shop:"variety_store"},addTags:{brand:"Wilko","brand:wikidata":"Q8002536","brand:wikipedia":"en:Wilko (retailer)",name:"Wilko",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/キャンドゥ":{name:"キャンドゥ",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/986887047209091072/PPjs7xOK_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11297367",shop:"variety_store"},addTags:{brand:"キャンドゥ","brand:en":"CAN DO","brand:ja":"キャンドゥ","brand:wikidata":"Q11297367","brand:wikipedia":"ja:キャンドゥ",name:"キャンドゥ","name:en":"CAN DO","name:ja":"キャンドゥ",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/セリア":{name:"セリア",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSeria%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11314509",shop:"variety_store"},addTags:{brand:"セリア","brand:en":"Seria","brand:ja":"セリア","brand:wikidata":"Q11314509","brand:wikipedia":"ja:セリア (100円ショップ)",name:"セリア","name:en":"Seria","name:ja":"セリア",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/ダイソー":{name:"ダイソー",icon:"maki-shop",imageURL:"https://graph.facebook.com/daisojapanusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q866991",shop:"variety_store"},addTags:{brand:"ダイソー","brand:en":"Daiso","brand:ja":"ダイソー","brand:wikidata":"Q866991","brand:wikipedia":"ja:大創産業",name:"ダイソー","name:en":"Daiso","name:ja":"ダイソー",shop:"variety_store"},countryCodes:["jp"],terms:["ザ・ダイソー"],matchScore:2,suggestion:true},"shop/variety_store/ダイレックス":{name:"ダイレックス",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q11317051",shop:"variety_store"},addTags:{brand:"ダイレックス","brand:en":"Direx","brand:ja":"ダイレックス","brand:wikidata":"Q11317051","brand:wikipedia":"ja:ダイレックス (ディスカウントストア)",name:"ダイレックス","name:en":"Direx","name:ja":"ダイレックス",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/トライアル":{name:"トライアル",icon:"maki-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q11321723",shop:"variety_store"},addTags:{brand:"トライアル","brand:en":"Trial","brand:ja":"トライアル","brand:wikidata":"Q11321723","brand:wikipedia":"ja:トライアルカンパニー",name:"トライアル","name:en":"Trial","name:ja":"トライアル",shop:"variety_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/ドン・キホーテ":{name:"ドン・キホーテ",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1213996146042925057/jOUmAozd_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1185381",shop:"variety_store"},addTags:{brand:"ドン・キホーテ","brand:en":"Don Quijote","brand:ja":"ドン・キホーテ","brand:wikidata":"Q1185381","brand:wikipedia":"ja:ドン・キホーテ (企業)",name:"ドン・キホーテ","name:en":"Don Quijote","name:ja":"ドン・キホーテ",opening_hours:"24/7",shop:"variety_store",short_name:"ドンキ","short_name:en":"Donki","short_name:ja":"ドンキ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/video_games/EB Games":{name:"EB Games",icon:"maki-gaming",imageURL:"https://graph.facebook.com/ebgamescanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4993686",shop:"video_games"},addTags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"},countryCodes:["au","ca","nz"],terms:[],matchScore:2,suggestion:true},"shop/video_games/Game":{name:"Game",icon:"maki-gaming",imageURL:"https://graph.facebook.com/GAMEstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5519813",shop:"video_games"},addTags:{brand:"Game","brand:wikidata":"Q5519813","brand:wikipedia":"en:Game (retailer)",name:"Game",shop:"video_games"},countryCodes:["es","gb"],terms:[],matchScore:2,suggestion:true},"shop/video_games/Game Mania":{name:"Game Mania",icon:"maki-gaming",imageURL:"https://graph.facebook.com/GameManiaNederland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18069429",shop:"video_games"},addTags:{brand:"Game Mania","brand:wikidata":"Q18069429","brand:wikipedia":"nl:Game Mania",name:"Game Mania",shop:"video_games"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/video_games/GameStop":{name:"GameStop",icon:"maki-gaming",imageURL:"https://graph.facebook.com/GameStop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q202210",shop:"video_games"},addTags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"},terms:[],matchScore:2,suggestion:true},"shop/video_games/Micromania":{name:"Micromania",icon:"maki-gaming",imageURL:"https://graph.facebook.com/MicromaniaFr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312221",shop:"video_games"},addTags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/video/Blockbuster":{name:"Blockbuster",icon:"temaki-movie_rental",imageURL:"https://pbs.twimg.com/profile_images/378800000679852472/9ee706eca6f5d0b9fbc3a57d014ec807_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q884711",shop:"video"},addTags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"},terms:[],matchScore:2,suggestion:true},"shop/video/Family Video":{name:"Family Video",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/FamilyVideo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433297",shop:"video"},addTags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/video/TSUTAYA":{name:"TSUTAYA",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/TSUTAYA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"video"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"},terms:[],matchScore:2,suggestion:true},"shop/video/ゲオ":{name:"ゲオ",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/geomediashop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5533938",shop:"video"},addTags:{brand:"GEO","brand:ja":"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ","name:en":"GEO","name:ja":"ゲオ",shop:"video"},countryCodes:["jp"],terms:["geo"],matchScore:2,suggestion:true},"shop/watches/Fossil":{name:"Fossil",icon:"maki-watch",imageURL:"https://graph.facebook.com/Fossil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q356212",shop:"watches"},addTags:{brand:"Fossil","brand:wikidata":"Q356212","brand:wikipedia":"en:Fossil Group",name:"Fossil",shop:"watches"},countryCodes:["ca","de","us"],terms:[],matchScore:2,suggestion:true},"shop/watches/Omega":{name:"Omega",icon:"maki-watch",imageURL:"https://graph.facebook.com/omega/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q659224",shop:"watches"},addTags:{brand:"Omega","brand:wikidata":"Q659224","brand:wikipedia":"en:Omega SA",name:"Omega",shop:"watches"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/watches/Rolex":{name:"Rolex",icon:"maki-watch",imageURL:"https://graph.facebook.com/rolex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62288",shop:"watches"},addTags:{brand:"Rolex","brand:wikidata":"Q62288","brand:wikipedia":"en:Rolex",name:"Rolex",shop:"watches"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/watches/Swatch":{name:"Swatch",icon:"maki-watch",imageURL:"https://graph.facebook.com/SwatchUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573422",shop:"watches"},addTags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/BJ's Wholesale Club":{name:"BJ's Wholesale Club",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/bjswholesaleclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835754",shop:"wholesale"},addTags:{brand:"BJ's Wholesale Club","brand:wikidata":"Q4835754","brand:wikipedia":"en:BJ's Wholesale Club",name:"BJ's Wholesale Club",shop:"wholesale"},countryCodes:["us"],terms:["bjs","bjs wholesale"],matchScore:2,suggestion:true},"shop/wholesale/Costco":{name:"Costco",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",shop:"wholesale"},addTags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",shop:"wholesale"},terms:["costco wholesale"],matchScore:2,suggestion:true},"shop/wholesale/Makro":{name:"Makro",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/makrohipermayorista/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q704606",shop:"wholesale"},addTags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Metro":{name:"Metro",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/metro.deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13610282",shop:"wholesale"},addTags:{brand:"Metro","brand:wikidata":"Q13610282","brand:wikipedia":"en:Metro Cash & Carry",name:"Metro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Sam's Club":{name:"Sam's Club",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/samsclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1972120",shop:"wholesale"},addTags:{brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Sligro":{name:"Sligro",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/sligro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3170052",shop:"wholesale"},addTags:{brand:"Sligro","brand:wikidata":"Q3170052","brand:wikipedia":"nl:Sligro Food Group",name:"Sligro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/コストコ":{name:"コストコ",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",shop:"wholesale"},addTags:{brand:"コストコ","brand:en":"Costco","brand:ja":"コストコ","brand:wikidata":"Q715583","brand:wikipedia":"ja:コストコ",name:"コストコ","name:en":"Costco","name:ja":"コストコ",shop:"wholesale"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"tourism/caravan_site/Big 4 Holiday Parks":{name:"Big 4 Holiday Parks",icon:"temaki-rv_park",imageURL:"https://graph.facebook.com/BIG4HolidayParks/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q18636678",tourism:"caravan_site"},addTags:{brand:"Big 4 Holiday Parks","brand:wikidata":"Q18636678","brand:wikipedia":"en:BIG4 Holiday Parks",name:"BIG4 Holiday Parks",short_name:"Big4",tourism:"caravan_site"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"tourism/caravan_site/KOA Holiday":{name:"KOA Holiday",icon:"temaki-rv_park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q16988635",tourism:"caravan_site"},addTags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Holiday",short_name:"KOA",tourism:"caravan_site"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/caravan_site/KOA Journey":{name:"KOA Journey",icon:"temaki-rv_park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q16988635",tourism:"caravan_site"},addTags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Journey",short_name:"KOA",tourism:"caravan_site"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/caravan_site/KOA Kampground":{name:"KOA Kampground",icon:"temaki-rv_park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q16988635",tourism:"caravan_site"},addTags:{alt_name:"KOA Campground",brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Kampground",short_name:"KOA",tourism:"caravan_site"},countryCodes:["ca","us"],terms:["kampgrounds of america","koa"],matchScore:2,suggestion:true},"tourism/caravan_site/KOA Resort":{name:"KOA Resort",icon:"temaki-rv_park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q16988635",tourism:"caravan_site"},addTags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Resort",short_name:"KOA",tourism:"caravan_site"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/AC Hotel":{name:"AC Hotel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/achotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5653536",tourism:"hotel"},addTags:{brand:"AC Hotel","brand:wikidata":"Q5653536","brand:wikipedia":"en:AC Hotels",name:"AC Hotel",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Aloft":{name:"Aloft",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/alofthotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4734166",tourism:"hotel"},addTags:{brand:"Aloft","brand:wikidata":"Q4734166","brand:wikipedia":"en:Aloft Hotels",name:"Aloft",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/AmericInn":{name:"AmericInn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/americinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4742493",tourism:"hotel"},addTags:{brand:"AmericInn","brand:wikidata":"Q4742493","brand:wikipedia":"en:AmericInn",name:"AmericInn",official_name:"AmericInn by Wyndham",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/B&B Hôtel":{name:"B&B Hôtel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/bbhotels.france/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q794939",tourism:"hotel"},addTags:{brand:"B&B Hôtel","brand:wikidata":"Q794939","brand:wikipedia":"en:B&B Hotels",name:"B&B Hôtel",tourism:"hotel"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Baymont":{name:"Baymont",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/baymontinns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4874634",tourism:"hotel"},addTags:{brand:"Baymont","brand:wikidata":"Q4874634","brand:wikipedia":"en:Baymont Inn & Suites",name:"Baymont",official_name:"Baymont by Wyndham",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:["baymont inn","baymont inn & suites"],matchScore:2,suggestion:true},"tourism/hotel/Best Western":{name:"Best Western",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/BestWestern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830334",tourism:"hotel"},addTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Best Western Plus":{name:"Best Western Plus",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/BestWestern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830334",tourism:"hotel"},addTags:{brand:"Best Western Plus","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Best Western Premier":{name:"Best Western Premier",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/BestWestern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830334",tourism:"hotel"},addTags:{brand:"Best Western Premier","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Premier",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Campanile":{name:"Campanile",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/campanile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2412064",tourism:"hotel"},addTags:{brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",name:"Campanile",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Candlewood Suites":{name:"Candlewood Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/CandlewoodSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5032010",tourism:"hotel"},addTags:{brand:"Candlewood Suites","brand:wikidata":"Q5032010","brand:wikipedia":"en:Candlewood Suites",name:"Candlewood Suites",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Centro Hotels":{name:"Centro Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Hotels.Centro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q73645443",tourism:"hotel"},addTags:{brand:"Centro Hotels","brand:wikidata":"Q73645443",name:"Centro Hotel",tourism:"hotel"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Clarion":{name:"Clarion",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ClarionPhl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q78165540",tourism:"hotel"},addTags:{brand:"Clarion","brand:wikidata":"Q78165540",name:"Clarion",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Comfort Inn":{name:"Comfort Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Comfort Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn",tourism:"hotel"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Comfort Inn & Suites":{name:"Comfort Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Comfort Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn & Suites",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Comfort Suites":{name:"Comfort Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Comfort Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Country Inn & Suites":{name:"Country Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/countryinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5177332",tourism:"hotel"},addTags:{brand:"Country Inn & Suites","brand:wikidata":"Q5177332","brand:wikipedia":"en:Country Inns & Suites",name:"Country Inn & Suites",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Courtyard":{name:"Courtyard",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/courtyard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1053170",tourism:"hotel"},addTags:{brand:"Courtyard","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard",official_name:"Courtyard by Marriott",tourism:"hotel"},terms:["courtyard marriott"],matchScore:2,suggestion:true},"tourism/hotel/Crowne Plaza":{name:"Crowne Plaza",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/crowneplaza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2746220",tourism:"hotel"},addTags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Days Inn":{name:"Days Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/DaysInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1047239",tourism:"hotel"},addTags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",tourism:"hotel"},countryCodes:["ca","ch","gb","id","in","kr","mx","my","ph","sg","sn","th","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Delta Hotels":{name:"Delta Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/deltahotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5254663",tourism:"hotel"},addTags:{brand:"Delta Hotels","brand:wikidata":"Q5254663","brand:wikipedia":"en:Delta Hotels",name:"Delta Hotels",tourism:"hotel"},terms:["delta"],matchScore:2,suggestion:true},"tourism/hotel/DoubleTree":{name:"DoubleTree",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Doubletree/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2504643",tourism:"hotel"},addTags:{brand:"DoubleTree","brand:wikidata":"Q2504643","brand:wikipedia":"en:DoubleTree",name:"DoubleTree",official_name:"DoubleTree by Hilton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Drury Inn & Suites":{name:"Drury Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Druryhotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5309391",tourism:"hotel"},addTags:{brand:"Drury Inn & Suites","brand:wikidata":"Q5309391","brand:wikipedia":"en:Drury Hotels",name:"Drury Inn & Suites",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/EVEN Hotels":{name:"EVEN Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/EvenHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5416522",tourism:"hotel"},addTags:{brand:"EVEN Hotels","brand:wikidata":"Q5416522","brand:wikipedia":"en:Even Hotels",name:"EVEN Hotels",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Embassy Suites":{name:"Embassy Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/EmbassySuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5369524",tourism:"hotel"},addTags:{brand:"Embassy Suites","brand:wikidata":"Q5369524","brand:wikipedia":"en:Embassy Suites by Hilton",name:"Embassy Suites",official_name:"Embassy Suites by Hilton",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Extended Stay America":{name:"Extended Stay America",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ExtendedStayAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5421850",tourism:"hotel"},addTags:{brand:"Extended Stay America","brand:wikidata":"Q5421850","brand:wikipedia":"en:Extended Stay America",name:"Extended Stay America",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Fairfield Inn":{name:"Fairfield Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/fairfieldbymarriott/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5430314",tourism:"hotel"},addTags:{alt_name:"Fairfield by Marriott",brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"},countryCodes:["ca","cn","id","in","kr","mx","my","sv","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Fairfield Inn & Suites":{name:"Fairfield Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/fairfieldbymarriott/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5430314",tourism:"hotel"},addTags:{brand:"Fairfield Inn & Suites","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn & Suites",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Formule 1":{name:"Formule 1",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HotelF1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1630895",tourism:"hotel"},addTags:{brand:"Formule 1","brand:wikidata":"Q1630895","brand:wikipedia":"en:Hotel Formule 1",name:"Formule 1",tourism:"hotel"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Four Points by Sheraton":{name:"Four Points by Sheraton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/fourpoints/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1439966",tourism:"hotel"},addTags:{brand:"Four Points by Sheraton","brand:wikidata":"Q1439966","brand:wikipedia":"en:Four Points by Sheraton",name:"Four Points by Sheraton",short_name:"Four Points",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Gaylord":{name:"Gaylord",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q3099664",tourism:"hotel"},addTags:{brand:"Gaylord","brand:wikidata":"Q3099664","brand:wikipedia":"en:Gaylord Hotels",name:"Gaylord",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Grand Hyatt":{name:"Grand Hyatt",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Grand Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Grand Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Grupo Barceló":{name:"Grupo Barceló",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGrupo%20Barcel%C3%B3%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q15148996",tourism:"hotel"},addTags:{brand:"Grupo Barceló","brand:en":"Barceló Group","brand:es":"Grupo Barceló","brand:wikidata":"Q15148996","brand:wikipedia":"es:Grupo Barceló",name:"Grupo Barceló","name:en":"Barceló Group","name:es":"Grupo Barceló",tourism:"hotel"},countryCodes:["es","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hampton":{name:"Hampton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hamptonbyhilton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5646230",tourism:"hotel"},addTags:{alt_name:"Hampton Inn",brand:"Hampton","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton",official_name:"Hampton by Hilton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hampton Inn & Suites":{name:"Hampton Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hamptonbyhilton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5646230",tourism:"hotel"},addTags:{brand:"Hampton Inn & Suites","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton Inn & Suites",official_name:"Hampton Inn & Suites by Hilton",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hawthorn Suites":{name:"Hawthorn Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Hawthorn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5685511",tourism:"hotel"},addTags:{brand:"Hawthorn Suites","brand:wikidata":"Q5685511","brand:wikipedia":"en:Hawthorn Suites",name:"Hawthorn Suites",official_name:"Hawthorn Suites by Wyndham",short_name:"Hawthorn",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hilton":{name:"Hilton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hilton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q598884",tourism:"hotel"},addTags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hilton Garden Inn":{name:"Hilton Garden Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HiltonGardenInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1162859",tourism:"hotel"},addTags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn":{name:"Holiday Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HolidayInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2717882",tourism:"hotel"},addTags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express":{name:"Holiday Inn Express",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/holidayinnexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880423",tourism:"hotel"},addTags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express & Suites":{name:"Holiday Inn Express & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/holidayinnexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880423",tourism:"hotel"},addTags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Home2 Suites":{name:"Home2 Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Home2Suites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5887912",tourism:"hotel"},addTags:{brand:"Home2 Suites","brand:wikidata":"Q5887912","brand:wikipedia":"en:Home2 Suites by Hilton",name:"Home2 Suites",official_name:"Home2 Suites by Hilton",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:["home2"],matchScore:2,suggestion:true},"tourism/hotel/Homewood Suites":{name:"Homewood Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HomewoodSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5890701",tourism:"hotel"},addTags:{brand:"Homewood Suites","brand:wikidata":"Q5890701","brand:wikipedia":"en:Homewood Suites by Hilton",name:"Homewood Suites",official_name:"Homewood Suites by Hilton",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hotel Indigo":{name:"Hotel Indigo",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hotelindigo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5911596",tourism:"hotel"},addTags:{brand:"Hotel Indigo","brand:wikidata":"Q5911596","brand:wikipedia":"en:Hotel Indigo",name:"Hotel Indigo",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt":{name:"Hyatt",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt Centric":{name:"Hyatt Centric",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt Centric","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Centric",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt House":{name:"Hyatt House",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt House","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt House",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt Place":{name:"Hyatt Place",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHyatt%20Place%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q72629292",tourism:"hotel"},addTags:{brand:"Hyatt Place","brand:wikidata":"Q72629292",name:"Hyatt Place",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hyatt Regency":{name:"Hyatt Regency",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Hyatt Regency","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Regency",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Ibis":{name:"Ibis",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ibishotels.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q920166",tourism:"hotel"},addTags:{brand:"Ibis","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis",tourism:"hotel"},terms:["hotel ibis","ibis hotel"],matchScore:2,suggestion:true},"tourism/hotel/Ibis Budget":{name:"Ibis Budget",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ibisbudget.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1458135",tourism:"hotel"},addTags:{brand:"Ibis Budget","brand:wikidata":"Q1458135","brand:wikipedia":"en:Ibis Budget",name:"Ibis Budget",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Ibis Styles":{name:"Ibis Styles",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ibisstyles.fr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3147425",tourism:"hotel"},addTags:{brand:"Ibis Styles","brand:wikidata":"Q3147425","brand:wikipedia":"en:Ibis Styles",name:"Ibis Styles",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/InterContinental":{name:"InterContinental",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/intercontinental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1825730",tourism:"hotel"},addTags:{brand:"InterContinental","brand:wikidata":"Q1825730","brand:wikipedia":"en:InterContinental",name:"InterContinental",tourism:"hotel"},terms:["intercontinental hotels & resorts"],matchScore:2,suggestion:true},"tourism/hotel/Intercity Hotel":{name:"Intercity Hotel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/InterCityHotel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q73642490",tourism:"hotel"},addTags:{brand:"Intercity Hotel","brand:wikidata":"Q73642490",name:"Intercity Hotel",tourism:"hotel"},countryCodes:["at","cn","de","nl","om","sa"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/JW Marriott":{name:"JW Marriott",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/JWMarriott/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1067636",tourism:"hotel"},addTags:{brand:"JW Marriott","brand:wikidata":"Q1067636","brand:wikipedia":"en:JW Marriott Hotels",name:"JW Marriott",tourism:"hotel"},terms:["jw marriott hotels"],matchScore:2,suggestion:true},"tourism/hotel/Jurys Inn":{name:"Jurys Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/JurysInns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12060924",tourism:"hotel"},addTags:{brand:"Jurys Inn","brand:wikidata":"Q12060924","brand:wikipedia":"en:Jurys Inn",name:"Jurys Inn",tourism:"hotel"},countryCodes:["cz","gb","ie"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Kimpton":{name:"Kimpton",icon:"fas-concierge-bell",imageURL:"https://pbs.twimg.com/profile_images/1145777057021870081/XPPH34bU_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q6410248",tourism:"hotel"},addTags:{brand:"Kimpton","brand:wikidata":"Q6410248","brand:wikipedia":"en:Kimpton Hotels & Restaurants",name:"Kimpton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Kyriad":{name:"Kyriad",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/kyriadindia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11751808",tourism:"hotel"},addTags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/La Quinta Inn":{name:"La Quinta Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/laquinta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6464734",tourism:"hotel"},addTags:{brand:"La Quinta Inn","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn",official_name:"La Quinta Inn by Wyndham",tourism:"hotel"},countryCodes:["ca","cl","co","hn","mx","us"],terms:["la quinta"],matchScore:2,suggestion:true},"tourism/hotel/La Quinta Inn & Suites":{name:"La Quinta Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/laquinta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6464734",tourism:"hotel"},addTags:{brand:"La Quinta Inn & Suites","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn & Suites",official_name:"La Quinta Inn & Suites by Wyndham",tourism:"hotel"},countryCodes:["ca","us"],terms:["la quinta inns and suites"],matchScore:2,suggestion:true},"tourism/hotel/Le Méridien":{name:"Le Méridien",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/lemeridien/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q261077",tourism:"hotel"},addTags:{brand:"Le Méridien","brand:wikidata":"Q261077","brand:wikipedia":"en:Le Méridien",name:"Le Méridien",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Marriott":{name:"Marriott",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/marriottinternational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141173",tourism:"hotel"},addTags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Marriott Executive Apartments":{name:"Marriott Executive Apartments",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q72636824",tourism:"hotel"},addTags:{brand:"Marriott Executive Apartments","brand:wikidata":"Q72636824",name:"Marriott Executive Apartments",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Meininger":{name:"Meininger",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/MeiningerHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42773330",tourism:"hotel"},addTags:{brand:"Meininger","brand:wikidata":"Q42773330","brand:wikipedia":"de:Meininger Hotel Gruppe",name:"Meininger",official_name:"Meininger Hotels",tourism:"hotel"},terms:["hoteles meininger"],matchScore:2,suggestion:true},"tourism/hotel/Mercure":{name:"Mercure",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/MercureHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1709809",tourism:"hotel"},addTags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Microtel":{name:"Microtel",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMicrotel.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6840402",tourism:"hotel"},addTags:{brand:"Microtel","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel",official_name:"Microtel by Wyndham",tourism:"hotel"},countryCodes:["ca","cn","mx","ph","us"],terms:["microtel inn"],matchScore:2,suggestion:true},"tourism/hotel/Microtel Inn & Suites":{name:"Microtel Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMicrotel.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6840402",tourism:"hotel"},addTags:{brand:"Microtel Inn & Suites","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel Inn & Suites",official_name:"Microtel Inn & Suites by Wyndham",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Moxy":{name:"Moxy",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMoxy%20Hotels%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q70287020",tourism:"hotel"},addTags:{brand:"Moxy","brand:wikidata":"Q70287020","brand:wikipedia":"en:Marriott International",name:"Moxy",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Novotel":{name:"Novotel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Novotelhotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q420545",tourism:"hotel"},addTags:{brand:"Novotel","brand:wikidata":"Q420545","brand:wikipedia":"en:Novotel",name:"Novotel",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Park Hyatt":{name:"Park Hyatt",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hyatt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425063",tourism:"hotel"},addTags:{brand:"Park Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Park Hyatt",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Park Inn":{name:"Park Inn",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPark%20Inn%20by%20Radisson%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q60711675",tourism:"hotel"},addTags:{brand:"Park Inn","brand:wikidata":"Q60711675","brand:wikipedia":"ru:Park Inn by Radisson",name:"Park Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Park Plaza":{name:"Park Plaza",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q2052550",tourism:"hotel"},addTags:{brand:"Park Plaza","brand:wikidata":"Q2052550","brand:wikipedia":"en:Park Plaza Hotels & Resorts",name:"Park Plaza Hotels",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Premier Inn":{name:"Premier Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/premierinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2108626",tourism:"hotel"},addTags:{brand:"Premier Inn","brand:wikidata":"Q2108626","brand:wikipedia":"en:Premier Inn",name:"Premier Inn",tourism:"hotel"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Première Classe":{name:"Première Classe",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/PremiereClasseHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5964551",tourism:"hotel"},addTags:{brand:"Première Classe","brand:wikidata":"Q5964551","brand:wikipedia":"en:Hôtel Première Classe",name:"Première Classe",tourism:"hotel"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Protea Hotel":{name:"Protea Hotel",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ProteaHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17092570",tourism:"hotel"},addTags:{brand:"Protea Hotel","brand:wikidata":"Q17092570","brand:wikipedia":"en:Protea Hotels by Marriott",name:"Protea Hotel",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Quality Inn":{name:"Quality Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Quality Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Quality Inn & Suites":{name:"Quality Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Quality Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn & Suites",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Qubus":{name:"Qubus",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/QubusHotel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11832868",tourism:"hotel"},addTags:{brand:"Qubus","brand:wikidata":"Q11832868","brand:wikipedia":"pl:Qubus Hotel",name:"Qubus",official_name:"Qubus Hotel",tourism:"hotel"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Radisson":{name:"Radisson",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FRadissonRus.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1751979",tourism:"hotel"},addTags:{brand:"Radisson","brand:wikidata":"Q1751979","brand:wikipedia":"en:Radisson Hotels",name:"Radisson",tourism:"hotel"},terms:["radisson hotels"],matchScore:2,suggestion:true},"tourism/hotel/Radisson Blu":{name:"Radisson Blu",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/radissonblu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7281341",tourism:"hotel"},addTags:{brand:"Radisson Blu","brand:wikidata":"Q7281341","brand:wikipedia":"en:Radisson Blu",name:"Radisson Blu",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Ramada":{name:"Ramada",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ramada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1502859",tourism:"hotel"},addTags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Red Lion Hotels":{name:"Red Lion Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/redlionhotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25047720",tourism:"hotel"},addTags:{brand:"Red Lion Hotels","brand:wikidata":"Q25047720","brand:wikipedia":"en:Red Lion Hotels",name:"Red Lion Hotels",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Red Roof Inn":{name:"Red Roof Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/redroofinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7304949",tourism:"hotel"},addTags:{brand:"Red Roof Inn","brand:wikidata":"Q7304949","brand:wikipedia":"en:Red Roof Inn",name:"Red Roof Inn",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Renaissance":{name:"Renaissance",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/RenaissanceHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2143252",tourism:"hotel"},addTags:{brand:"Renaissance","brand:wikidata":"Q2143252","brand:wikipedia":"en:Renaissance Hotels",name:"Renaissance",tourism:"hotel"},terms:["renaissance hotel"],matchScore:2,suggestion:true},"tourism/hotel/Residence Inn":{name:"Residence Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/residenceinn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7315394",tourism:"hotel"},addTags:{brand:"Residence Inn","brand:wikidata":"Q7315394","brand:wikipedia":"en:Residence Inn by Marriott",name:"Residence Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Sheraton":{name:"Sheraton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Sheraton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q634831",tourism:"hotel"},addTags:{brand:"Sheraton","brand:wikidata":"Q634831","brand:wikipedia":"en:Sheraton Hotels and Resorts",name:"Sheraton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Sleep Inn":{name:"Sleep Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1075788",tourism:"hotel"},addTags:{brand:"Sleep Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Sleep Inn",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/SpringHill Suites":{name:"SpringHill Suites",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSpringHill%20Suites%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7580351",tourism:"hotel"},addTags:{brand:"SpringHill Suites","brand:wikidata":"Q7580351","brand:wikipedia":"en:SpringHill Suites",name:"SpringHill Suites",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/St. Regis":{name:"St. Regis",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/stregis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30715430",tourism:"hotel"},addTags:{alt_name:"Saint Regis",brand:"St. Regis","brand:wikidata":"Q30715430","brand:wikipedia":"en:St. Regis Hotels & Resorts",name:"St. Regis",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Staybridge Suites":{name:"Staybridge Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/StaybridgeSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605116",tourism:"hotel"},addTags:{brand:"Staybridge Suites","brand:wikidata":"Q7605116","brand:wikipedia":"en:Staybridge Suites",name:"Staybridge Suites",tourism:"hotel"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/TRYP":{name:"TRYP",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Tryp.Hotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6153452",tourism:"hotel"},addTags:{brand:"TRYP","brand:wikidata":"Q6153452","brand:wikipedia":"en:TRYP by Wyndham",name:"TRYP",official_name:"TRYP by Wyndham",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/The Ritz-Carlton":{name:"The Ritz-Carlton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ritzcarlton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q782200",tourism:"hotel"},addTags:{brand:"The Ritz-Carlton","brand:wikidata":"Q782200","brand:wikipedia":"en:The Ritz-Carlton Hotel Company",name:"The Ritz-Carlton",tourism:"hotel"},terms:["ritz","ritz carlton","the ritz"],matchScore:2,suggestion:true},"tourism/hotel/The Westin":{name:"The Westin",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWestin%20Hotels%20%26%20Resorts%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1969162",tourism:"hotel"},addTags:{brand:"Westin","brand:wikidata":"Q1969162","brand:wikipedia":"en:Westin Hotels & Resorts",name:"The Westin",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/TownePlace Suites":{name:"TownePlace Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/TownePlaceSuites/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7830092",tourism:"hotel"},addTags:{brand:"TownePlace Suites","brand:wikidata":"Q7830092","brand:wikipedia":"en:TownePlace Suites",name:"TownePlace Suites",official_name:"TownePlace Suites by Marriott",tourism:"hotel"},countryCodes:["ca","us"],terms:["towneplace marriott","towneplace suites marriott"],matchScore:2,suggestion:true},"tourism/hotel/Travelodge (AsiaOceania)":{name:"Travelodge (Asia/Oceania)",icon:"fas-concierge-bell",imageURL:"https://pbs.twimg.com/profile_images/665028491448991744/p_HszsSZ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q24997583",tourism:"hotel"},addTags:{brand:"Travelodge","brand:wikidata":"Q24997583","brand:wikipedia":"en:Travelodge Australia",name:"Travelodge",tourism:"hotel"},countryCodes:["au","hk","id","kr","my","nz","sg","th"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Travelodge (Europe)":{name:"Travelodge (Europe)",icon:"fas-concierge-bell",imageURL:"https://pbs.twimg.com/profile_images/936237069269196801/IRTs-ePs_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q9361374",tourism:"hotel"},addTags:{brand:"Travelodge","brand:wikidata":"Q9361374","brand:wikipedia":"en:Travelodge UK",name:"Travelodge",tourism:"hotel"},countryCodes:["es","gb","ie"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Travelodge (North America)":{name:"Travelodge (North America)",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Travelodge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7836087",tourism:"hotel"},addTags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Tru":{name:"Tru",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q24907770",tourism:"hotel"},addTags:{brand:"Tru","brand:wikidata":"Q24907770","brand:wikipedia":"en:Tru by Hilton",name:"Tru",official_name:"Tru by Hilton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Van der Valk Hotel":{name:"Van der Valk Hotel",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Van%20der%20Valk.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2802214",tourism:"hotel"},addTags:{brand:"Van der Valk","brand:wikidata":"Q2802214","brand:wikipedia":"en:Van der Valk (company)",name:"Van der Valk Hotel",tourism:"hotel"},countryCodes:["be","de","es","fr","nl","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/W Hotels":{name:"W Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/WHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7958488",tourism:"hotel"},addTags:{brand:"W Hotels","brand:wikidata":"Q7958488","brand:wikipedia":"en:W Hotels",name:"W Hotels",short_name:"W",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Wingate":{name:"Wingate",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/WingateHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8025144",tourism:"hotel"},addTags:{brand:"Wingate","brand:wikidata":"Q8025144","brand:wikipedia":"en:Wingate by Wyndham",name:"Wingate",official_name:"Wingate by Wyndham",tourism:"hotel"},countryCodes:["us"],terms:["wingate inn"],matchScore:2,suggestion:true},"tourism/hotel/easyHotel":{name:"easyHotel",icon:"fas-concierge-bell",imageURL:"https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q17011598",tourism:"hotel"},addTags:{brand:"easyHotel","brand:wikidata":"Q17011598","brand:wikipedia":"en:EasyHotel",name:"easyHotel",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/東横イン":{name:"東横イン",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/ToyokoInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1320541",tourism:"hotel"},addTags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:ja":"東横イン","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn","name:ja":"東横イン",tourism:"hotel"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Budget Host Inn":{name:"Budget Host Inn",icon:"maki-lodging",geometry:["point","area"],tags:{"brand:wikidata":"Q16954336",tourism:"motel"},addTags:{alt_name:"Budget Host",brand:"Budget Host Inn","brand:wikidata":"Q16954336","brand:wikipedia":"en:Budget Host",name:"Budget Host Inn",tourism:"motel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Econo Lodge":{name:"Econo Lodge",icon:"maki-lodging",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5333330",tourism:"motel"},addTags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"},terms:[],matchScore:2,suggestion:true},"tourism/motel/Knights Inn":{name:"Knights Inn",icon:"maki-lodging",geometry:["point","area"],tags:{"brand:wikidata":"Q6422409",tourism:"motel"},addTags:{brand:"Knights Inn","brand:wikidata":"Q6422409","brand:wikipedia":"en:Knights Inn",name:"Knights Inn",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Motel 6":{name:"Motel 6",icon:"maki-lodging",imageURL:"https://graph.facebook.com/motel6/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2188884",tourism:"motel"},addTags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Rodeway Inn":{name:"Rodeway Inn",icon:"maki-lodging",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7356709",tourism:"motel"},addTags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Super 8":{name:"Super 8",icon:"maki-lodging",imageURL:"https://graph.facebook.com/Super8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5364003",tourism:"motel"},addTags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true}};
26844
26845         var defaults = {area:["category-landuse","category-building","category-water","category-natural","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","area"],line:["category-road_major","category-road_minor","category-rail","category-path","category-waterway","category-barrier","category-natural","category-utility","line"],point:["category-natural","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","point"],relation:["category-route","category-restriction","public_transport/stop_area","type/boundary","type/waterway","type/multipolygon","type/enforcement","type/site","relation"]};
26846
26847         var categories = {"category-barrier":{icon:"maki-roadblock",name:"Barrier Features",members:["barrier/fence","barrier/wall","barrier/ditch","barrier/gate","barrier/hedge","barrier/kerb","barrier"]},"category-building":{icon:"maki-building",name:"Building Features",members:["building","building/house","building/apartments","building/garage","building/retail","building/commercial","building/industrial","building/residential"]},"category-golf":{icon:"maki-golf",name:"Golf Features",members:["golf/fairway","golf/green","golf/lateral_water_hazard","golf/rough","golf/bunker","golf/tee","golf/water_hazard","golf/driving_range","golf/hole","golf/cartpath","golf/path"]},"category-landuse":{icon:"maki-landuse",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":{icon:"maki-natural",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","natural/coastline","natural/tree_row","natural/peak","natural/cliff"]},"category-path":{icon:"temaki-pedestrian",name:"Paths",members:["highway/path","highway/footway","highway/footway/marked","highway/footway/sidewalk","highway/steps","highway/cycleway","highway/bridleway","highway/pedestrian_line"]},"category-rail":{icon:"iD-railway-rail",name:"Rails",members:["railway/rail","railway/disused","railway/tram","railway/subway","railway/narrow_gauge","railway/light_rail","railway/monorail","railway/funicular"]},"category-restriction":{icon:"iD-restriction",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_major":{icon:"iD-highway-unclassified",name:"Major Roads",members:["highway/motorway","highway/trunk","highway/primary","highway/secondary","highway/tertiary","highway/motorway_link","highway/trunk_link","highway/primary_link","highway/secondary_link","highway/tertiary_link"]},"category-road_minor":{icon:"iD-highway-unclassified",name:"Minor Roads",members:["highway/unclassified","highway/residential","highway/living_street","highway/service","highway/track"]},"category-road_service":{icon:"iD-highway-service",name:"Service Roads",members:["highway/service","highway/service/parking_aisle","highway/service/driveway","highway/service/alley","highway/service/emergency_access","highway/service/drive-through"]},"category-route":{icon:"iD-route",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-power-line",name:"Utility Features",members:["power/line","power/minor_line","man_made/pipeline","power/cable/underground"]},"category-water":{icon:"maki-water",name:"Water Bodies",members:["natural/water","natural/water/pond","natural/water/basin","natural/water/lake","natural/water/reservoir"]},"category-waterway":{icon:"iD-waterway-stream",name:"Waterways",members:["waterway/stream","waterway/drain","waterway/river","waterway/canal","waterway/ditch","natural/water/stream","natural/water/river","natural/water/canal"]}};
26848
26849         var fields = {access_aisle:{key:"access_aisle",type:"combo",label:"Type"},access_simple:{key:"access",type:"combo",label:"Allowed Access",options:["yes","permissive","private","customers","permit","no"],terms:["permitted","private","public"]},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"}}}},"addr/interpolation":{key:"addr:interpolation",type:"combo",label:"Type",strings:{options:{all:"All",even:"Even",odd:"Odd",alphabetic:"Alphabetic"}}},address:{type:"address",key:"addr",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"],icon:"address",label:"Address",strings:{placeholders:{block_number:"Block Number","block_number!jp":"Block No.",city:"City","city!cn":"City/Prefecture/League","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town",conscriptionnumber:"123",country:"Country",county:"County","county!jp":"District",district:"District","district!cn":"District/County/Banner","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!cn":"Province/Municipality/AR/SAR","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"}},terms:["location"]},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"},air_conditioning:{key:"air_conditioning",type:"check",label:"Air Conditioning",terms:["cooling system","refrigeration"]},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",terms:["building designer"]},"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"},baby_feeding:{key:"baby_feeding",type:"combo",label:"Baby Nursing Area",strings:{options:{room:"Dedicated Room",yes:"Marked Space",no:"None"}},terms:["baby feeding","breastfeeding","lactation","mothers","nursing"]},baby_seat:{key:"baby",type:"check",label:"Baby Seat"},backcountry:{key:"backcountry",type:"check",label:"Backcountry"},backrest:{key:"backrest",type:"check",label:"Backrest"},bar:{key:"bar",type:"check",label:"Bar"},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",terms:["seating"]},bicycle_parking:{key:"bicycle_parking",type:"combo",label:"Type"},bin:{key:"bin",type:"check",label:"Waste Bin",terms:["garbage can","trash can"]},blind:{key:"blind",type:"radio",strings:{options:{yes:"Yes",limited:"Limited",no:"No"}},label:"Blind Person Access",terms:["sight impairment","vision impairment"]},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"},bollard:{key:"bollard",type:"combo",label:"Type"},booth:{key:"booth",type:"combo",label:"Booth",caseSensitive:true},bottle:{key:"bottle",type:"check",label:"Bottle Filling"},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",terms:["on tap"]},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",terms:["structure"]},"building/levels_building":{key:"building:levels",type:"number",minValue:0,label:"Building Levels",placeholder:"2, 4, 6...",prerequisiteTag:{key:"building",valueNot:"no"}},"building/levels":{key:"building:levels",type:"number",minValue:0,label:"Levels",placeholder:"2, 4, 6..."},"building/levels/underground":{key:"building:levels:underground",type:"number",minValue:0,label:"Underground Levels",placeholder:"2, 4, 6...",terms:["basement levels"]},"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"},changing_table:{key:"changing_table",type:"check",label:"Diaper Changing Table"},charge_fee:{key:"charge",type:"text",label:"Fee Amount",placeholder:"1 EUR, 5 USD, 10 JPY…",prerequisiteTag:{key:"fee",valueNot:"no"}},charge_toll:{key:"charge",type:"text",label:"Toll Amount",placeholder:"1 EUR, 5 USD, 10 JPY…",prerequisiteTag:{key:"toll",valueNot:"no"}},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"},connectivity:{key:"connectivity",type:"text",label:"Connectivity"},construction:{key:"construction",type:"combo",label:"Type"},consulate:{key:"consulate",type:"combo",label:"Type"},consulting:{key:"consulting",type:"semiCombo",label:"Expertise"},"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_escalator:{key:"conveying",type:"check",label:"Escalator"},conveying:{key:"conveying",type:"typeCombo",label:"Movement Direction",strings:{options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}}},country_flag:{key:"country",type:"combo",label:"Flag Country",prerequisiteTag:{key:"flag:type",value:"national"}},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"},"crossing/island":{key:"crossing:island",type:"check",label:"Refuge Island"},cuisine:{key:"cuisine",type:"semiCombo",label:"Cuisines",terms:["fare","food types"]},currency_multi:{key:"currency:",type:"multiCombo",label:"Currency Types",terms:["bills","cash","coins","money"]},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",valueNot:"none"}},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,terms:["summary"]},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..."},diameter:{key:"diameter",type:"combo",label:"Diameter",snake_case:false,placeholder:"5 mm, 10 cm, 15 in…"},diet_multi:{key:"diet:",type:"multiCombo",label:"Diet Types",terms:["gluten free","fruitarian","halal","kosher","lactose free","meat","pescatarian","raw","vegan","vegetarian"]},diplomatic:{key:"diplomatic",type:"combo",label:"Type"},"diplomatic/services":{key:"diplomatic:services:",type:"multiCombo",label:"Services"},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 Affected",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"},"disused/railway":{key:"disused:railway",type:"typeCombo",label:"Type"},dock:{key:"dock",type:"combo",label:"Type"},dog:{key:"dog",type:"combo",label:"Dogs",strings:{options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}},terms:["animals","pets"]},door_type:{key:"door",type:"typeCombo",label:"Type"},door:{key:"door",type:"combo",label:"Door"},drink_multi:{key:"drink:",type:"multiCombo",label:"Drinks"},drinking_water:{key:"drinking_water",type:"check",label:"Drinkable",terms:["drinkworthy","potable"]},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",terms:["altitude"]},email:{key:"email",type:"email",placeholder:"example@example.com",label:"Email"},embankment:{key:"embankment",type:"typeCombo",label:"Type",placeholder:"Default"},embassy:{key:"embassy",type:"combo",label:"Type"},emergency_combo:{key:"emergency",type:"combo",label:"Type"},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"},expected_rcn_route_relations:{key:"expected_rcn_route_relations",type:"number",label:"Adjacent Cycling Nodes"},expected_rwn_route_relations:{key:"expected_rwn_route_relations",type:"number",label:"Adjacent Walking Nodes"},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"},fishing:{key:"fishing",type:"combo",label:"Fishing"},fitness_station:{key:"fitness_station",type:"typeCombo",label:"Equipment Type"},fixme:{key:"fixme",type:"textarea",label:"Fix Me",universal:true,terms:["help request"]},"flag/type":{key:"flag:type",type:"combo",label:"Flag Type"},floating:{key:"floating",type:"check",label:"Floating"},flood_prone:{key:"flood_prone",type:"check",label:"Flood Prone"},ford:{key:"ford",type:"typeCombo",label:"Type",placeholder:"Default"},fountain:{key:"fountain",type:"combo",label:"Type"},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"},gambling:{key:"gambling",type:"semiCombo",label:"Games"},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"}},terms:["access","female","male","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"},"geyser/height":{key:"geyser:height",type:"text",label:"Eruption Height"},"gnis/feature_id":{key:"gnis:feature_id",type:"identifier",label:"GNIS Feature ID",urlFormat:"https://geonames.usgs.gov/apex/f?p=gnispq:3:::NO::P3_FID:{value}",pattern:"^[0-9]{1,}$",countryCodes:["us"],terms:["Federal Geographic Names Information Service","United States Board on Geographic Names","USA"]},government:{key:"government",type:"typeCombo",label:"Type"},grape_variety:{key:"grape_variety",type:"semiCombo",label:"Grape Varieties"},group_only:{key:"group_only",type:"check",label:"Groups Only"},guest_house:{key:"guest_house",type:"combo",label:"Type"},handicap:{key:"handicap",type:"number",label:"Handicap",placeholder:"1-18"},handrail:{key:"handrail",type:"check",label:"Handrail"},hashtags:{key:"hashtags",type:"semiCombo",label:"Hashtags",placeholder:"#example"},healthcare:{key:"healthcare",type:"typeCombo",label:"Type"},"healthcare/speciality":{key:"healthcare:speciality",type:"semiCombo",reference:{key:"healthcare"},label:"Specialties"},height_building:{key:"height",minValue:0,type:"number",label:"Building Height (Meters)",prerequisiteTag:{key:"building",valueNot:"no"}},height:{key:"height",minValue:0,type:"number",label:"Height (Meters)"},highspeed:{key:"highspeed",type:"check",label:"High-Speed"},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"}},hot_water:{key:"hot_water",type:"check",label:"Hot Water"},iata:{key:"iata",type:"text",label:"IATA Airport Code"},icao:{key:"icao",type:"text",label:"ICAO Airport Code"},incline_steps:{key:"incline",type:"combo",label:"Incline",strings:{options:{up:"Up",down:"Down"}}},incline:{key:"incline",type:"combo",label:"Incline"},indoor_type:{key:"indoor",type:"typeCombo",label:"Type"},indoor:{key:"indoor",type:"check",label:"Indoor"},industrial:{key:"industrial",type:"combo",label:"Type"},informal:{key:"informal",type:"check",label:"Informal"},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"}},terms:["wifi","wlan"]},"internet_access/fee":{key:"internet_access:fee",type:"check",label:"Internet Access Fee",prerequisiteTag:{key:"internet_access",valueNot:"no"},terms:["wifi fee"]},"internet_access/ssid":{key:"internet_access:ssid",type:"text",label:"Wifi Network Name",prerequisiteTag:{key:"internet_access",valueNot:"no"},terms:["ssid"]},interval:{key:"interval",type:"text",label:"Interval"},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"},"kerb/height":{key:"kerb:height",type:"combo",snake_case:false,label:"Height"},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_semi:{key:"level",type:"semiCombo",label:"Levels",terms:["building floors","decks","stories","storeys","storys"]},level:{key:"level",type:"combo",label:"Level",terms:["building floor","deck","storey","story"],prerequisiteTag:{keyNot:"building"}},liaison:{key:"liaison",type:"combo",label:"Type"},line_attachment:{key:"line_attachment",type:"combo",label:"Line Attachment"},lit:{key:"lit",type:"check",label:"Lit",terms:["lamp","lighting"]},location_pool:{key:"location",type:"typeCombo",label:"Location",strings:{options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}}},location:{key:"location",type:"combo",label:"Location"},lock:{key:"lock",type:"check",label:"Lock"},lockable:{key:"lockable",type:"check",label:"Lockable"},man_made:{key:"man_made",type:"typeCombo",label:"Type"},manhole:{key:"manhole",type:"typeCombo",label:"Type"},manufacturer:{key:"manufacturer",type:"combo",snake_case:false,caseSensitive:true,label:"Manufacturer"},map_size:{key:"map_size",type:"typeCombo",label:"Coverage"},map_type:{key:"map_type",type:"typeCombo",label:"Type"},mapillary:{key:"mapillary",type:"identifier",label:"Mapillary Image ID",urlFormat:"https://mapillary.com/app/?focus=photo&pKey={value}",pattern:"^[a-zA-Z0-9-_]{1,}$",universal:true},marker:{key:"marker",type:"typeCombo",label:"Type"},material:{key:"material",type:"combo",label:"Material"},max_age:{key:"max_age",type:"number",minValue:0,label:"Maximum Age",terms:["upper age limit"]},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_bridge:{key:"maxweight",type:"combo",label:"Max Weight",snake_case:false,prerequisiteTag:{key:"bridge",valueNot:"no"}},maxweight:{key:"maxweight",type:"combo",label:"Max Weight",snake_case:false},memorial:{key:"memorial",type:"typeCombo",label:"Type"},microbrewery:{key:"microbrewery",type:"check",label:"Microbrewery",terms:["brewpub","craft beer"]},min_age:{key:"min_age",type:"number",minValue:0,label:"Minimum Age",terms:["lower age limit"]},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"}}},museum:{key:"museum",type:"combo",label:"Type"},name:{key:"name",type:"localized",label:"Name",universal:true,placeholder:"Common name (if any)",terms:["label","title"]},natural:{key:"natural",type:"typeCombo",label:"Natural"},network_bicycle:{key:"network",type:"combo",label:"Network Class",placeholder:"Local, Regional, National, International",strings:{options:{lcn:"Local",rcn:"Regional",ncn:"National",icn:"International"}}},network_foot:{key:"network",type:"combo",label:"Network Class",placeholder:"Local, Regional, National, International",strings:{options:{lwn:"Local",rwn:"Regional",nwn:"National",iwn:"International"}}},network_horse:{key:"network",type:"combo",label:"Network Class",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"},"network/type":{key:"network:type",type:"combo",label:"Network Type",prerequisiteTag:{key:"network"}},"not/name":{key:"not:name",type:"semiCombo",label:"Incorrect Names",terms:["common mistake names","wrong names"]},note:{key:"note",type:"textarea",universal:true,icon:"note",label:"Note",terms:["comment"]},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"}},openfire:{key:"openfire",type:"check",label:"Open Fires Allowed"},opening_date:{key:"opening_date",type:"text",label:"Expected Opening Date"},opening_hours:{key:"opening_hours",type:"combo",label:"Hours",placeholder:"Unknown",snake_case:false},operator:{key:"operator",type:"text",label:"Operator"},"operator/type":{key:"operator:type",type:"combo",label:"Operator Type",prerequisiteTag:{key:"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_fee:{key:"payment:",type:"multiCombo",label:"Payment Types",prerequisiteTag:{key:"fee",valueNot:"no"}},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",terms:["phone number"]},"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/method":{key:"plant:method",type:"combo",label:"Generation Method"},"plant/output/electricity":{key:"plant:output:electricity",type:"typeCombo",label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW...",snake_case:false},"plant/source":{key:"plant:source",type:"combo",label:"Energy Source"},playground:{key:"playground",type:"combo",label:"Type"},"playground/theme":{key:"playground:theme",type:"combo",label:"Theme"},polling_station:{key:"polling_station",type:"check",label:"Polling Place",terms:["voting place"]},population:{key:"population",type:"text",label:"Population"},post:{type:"address",key:"post",keys:["post:block_number","post:city","post:block_number","post:conscriptionnumber","post:county","post:country","post:county","post:district","post:floor","post:hamlet","post:housename","post:housenumber","post:neighbourhood","post:place","post:postcode","post:province","post:quarter","post:state","post:street","post:subdistrict","post:suburb","post:unit"],label:"Delivery Address"},power_supply:{key:"power_supply",type:"check",label:"Power Supply"},power:{key:"power",type:"typeCombo",label:"Type"},preschool:{key:"preschool",type:"check",label:"Preschool"},produce:{key:"produce",type:"semiCombo",label:"Produce"},product:{key:"product",type:"semiCombo",label:"Products"},"public_bookcase/type":{key:"public_bookcase:type",type:"combo",label:"Type"},pump:{key:"pump",type:"combo",label:"Pump",strings:{options:{yes:"Yes",manual:"Manual Hand Pump",powered:"Machine-Powered Pump",no:"None"}}},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 Affected",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},rating:{key:"rating",type:"combo",label:"Power Rating",snake_case:false},rcn_ref:{key:"rcn_ref",type:"text",label:"Cycling Code"},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_room_number:{key:"ref",type:"text",label:"Room 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"},"ref/vatin":{key:"ref:vatin",type:"identifier",label:"VAT ID Number",notCountryCodes:["ao","ai","bm","bt","io","vg","bn","ky","km","cu","dj","er","fk","gi","gg","hk","iq","ki","xk","kw","lr","ly","mo","mv","mh","fm","ms","mm","nr","kp","om","pw","pn","qa","sh","sm","st","sb","so","gs","ss","sr","sz","sy","tl","tc","tv","us","va","ye"],terms:["value added tax identification number","vatin"]},relation:{key:"type",type:"combo",label:"Type"},religion:{key:"religion",type:"combo",label:"Religion"},reservation:{key:"reservation",type:"combo",label:"Reservations",strings:{options:{yes:"Accepted",no:"Not Accepted",required:"Required",recommended:"Recommended"}}},residential:{key:"residential",type:"combo",label:"Type"},resort:{key:"resort",type:"combo",label:"Type"},resource:{key:"resource",type:"semiCombo",label:"Resources"},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"},room:{key:"room",type:"combo",label:"Type"},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"},rwn_ref:{key:"rwn_ref",type:"text",label:"Walking Code"},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",terms:["saline","salinated"]},sanitary_dump_station:{key:"sanitary_dump_station",type:"check",label:"Toilet Disposal"},screen:{key:"screen",type:"number",label:"Screens",placeholder:"1, 4, 8…",minValue:0},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",terms:["marine"]},"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"}}},segregated:{key:"segregated",type:"check",label:"Bicycle-Pedestrian Separation"},self_service:{key:"self_service",type:"check",label:"Self-Service"},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"},shower:{key:"shower",type:"check",label:"Showers"},"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"}}},sms:{key:"sms",type:"check",label:"SMS"},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"],terms:["reference"]},"species/wikidata":{key:"species:wikidata",keys:["species:wikidata","species:wikipedia"],type:"wikidata",label:"Species Wikidata"},sport_ice:{key:"sport",type:"semiCombo",label:"Sports",options:["ice_skating","ice_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",terms:["rating"]},start_date:{key:"start_date",type:"text",universal:true,label:"Start Date",terms:["inception"]},step_count:{key:"step_count",type:"number",minValue:0,label:"Number of Steps"},stile:{key:"stile",type:"combo",label:"Type"},stop:{key:"stop",type:"combo",label:"Stop Type",strings:{options:{all:"All Ways",minor:"Minor Road"}}},street_cabinet:{key:"street_cabinet",type:"combo",label:"Type"},stroller:{key:"stroller",type:"radio",strings:{options:{yes:"Yes",limited:"Limited",no:"No"}},label:"Stroller Access",terms:["baby carriage","perambulator","pram","pushchair"]},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",terms:["guarded","manned"]},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"}},terms:["take out","takeout"]},target:{key:"target",type:"combo",label:"Target"},tidal:{key:"tidal",type:"check",label:"Tidal"},to:{key:"to",type:"text",label:"To"},toilets:{key:"toilets",type:"check",label:"Toilets"},"toilets/disposal":{key:"toilets:disposal",type:"combo",label:"Disposal",strings:{options:{flush:"Flush",pitlatrine:"Pit Latrine",chemical:"Chemical",bucket:"Bucket"}}},"toilets/handwashing":{key:"toilets:handwashing",type:"check",label:"Handwashing"},"toilets/position":{key:"toilets:position",type:"semiCombo",label:"Positions"},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"},"townhall/type":{key:"townhall: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 Affected",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 Affected",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"},trench:{key:"trench",type:"combo",label:"Type"},trolley_wire:{key:"trolley_wire",type:"check",label:"Overhead Trolley Wires"},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"}}},utility_semi:{key:"utility",type:"semiCombo",label:"Utilities"},utility:{key:"utility",type:"typeCombo",label:"Utility"},valve:{key:"valve",type:"combo",label:"Type"},vending:{key:"vending",type:"semiCombo",label:"Types of Goods"},video_calls:{key:"video",type:"check",label:"Video Calls"},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"},waste:{key:"waste",type:"semiCombo",label:"Waste"},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",terms:["internet presence","uri","url","webpage"]},wetland:{key:"wetland",type:"combo",label:"Type"},wheelchair:{key:"wheelchair",type:"radio",strings:{options:{yes:"Yes",limited:"Limited",no:"No"}},icon:"maki-wheelchair",label:"Wheelchair Access",terms:["handicap access"]},wholesale:{key:"wholesale",type:"typeCombo",label:"Wholesale"},width:{key:"width",type:"number",minValue:0,label:"Width (Meters)"},wikidata:{key:"wikidata",keys:["wikidata","wikipedia"],type:"wikidata",icon:"wikipedia",universal:true,label:"Wikidata"},wikimedia_commons:{key:"wikimedia_commons",type:"identifier",label:"Wikimedia Commons Page",placeholder:"File:Example.jpg",urlFormat:"https://commons.wikimedia.org/wiki/{value}",pattern:"^(?:File|Category):.{1,}",universal:true},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"}}}};
26850
26851         var quickselect = createCommonjsModule(function (module, exports) {
26852         (function (global, factory) {
26853                  module.exports = factory() ;
26854         }(commonjsGlobal, (function () {
26855         function quickselect(arr, k, left, right, compare) {
26856             quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
26857         }
26858
26859         function quickselectStep(arr, k, left, right, compare) {
26860
26861             while (right > left) {
26862                 if (right - left > 600) {
26863                     var n = right - left + 1;
26864                     var m = k - left + 1;
26865                     var z = Math.log(n);
26866                     var s = 0.5 * Math.exp(2 * z / 3);
26867                     var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
26868                     var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
26869                     var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
26870                     quickselectStep(arr, k, newLeft, newRight, compare);
26871                 }
26872
26873                 var t = arr[k];
26874                 var i = left;
26875                 var j = right;
26876
26877                 swap(arr, left, k);
26878                 if (compare(arr[right], t) > 0) { swap(arr, left, right); }
26879
26880                 while (i < j) {
26881                     swap(arr, i, j);
26882                     i++;
26883                     j--;
26884                     while (compare(arr[i], t) < 0) { i++; }
26885                     while (compare(arr[j], t) > 0) { j--; }
26886                 }
26887
26888                 if (compare(arr[left], t) === 0) { swap(arr, left, j); }
26889                 else {
26890                     j++;
26891                     swap(arr, j, right);
26892                 }
26893
26894                 if (j <= k) { left = j + 1; }
26895                 if (k <= j) { right = j - 1; }
26896             }
26897         }
26898
26899         function swap(arr, i, j) {
26900             var tmp = arr[i];
26901             arr[i] = arr[j];
26902             arr[j] = tmp;
26903         }
26904
26905         function defaultCompare(a, b) {
26906             return a < b ? -1 : a > b ? 1 : 0;
26907         }
26908
26909         return quickselect;
26910
26911         })));
26912         });
26913
26914         var rbush_1 = rbush;
26915         var default_1 = rbush;
26916
26917
26918
26919         function rbush(maxEntries, format) {
26920             if (!(this instanceof rbush)) { return new rbush(maxEntries, format); }
26921
26922             // max entries in a node is 9 by default; min node fill is 40% for best performance
26923             this._maxEntries = Math.max(4, maxEntries || 9);
26924             this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
26925
26926             if (format) {
26927                 this._initFormat(format);
26928             }
26929
26930             this.clear();
26931         }
26932
26933         rbush.prototype = {
26934
26935             all: function () {
26936                 return this._all(this.data, []);
26937             },
26938
26939             search: function (bbox) {
26940
26941                 var node = this.data,
26942                     result = [],
26943                     toBBox = this.toBBox;
26944
26945                 if (!intersects$1(bbox, node)) { return result; }
26946
26947                 var nodesToSearch = [],
26948                     i, len, child, childBBox;
26949
26950                 while (node) {
26951                     for (i = 0, len = node.children.length; i < len; i++) {
26952
26953                         child = node.children[i];
26954                         childBBox = node.leaf ? toBBox(child) : child;
26955
26956                         if (intersects$1(bbox, childBBox)) {
26957                             if (node.leaf) { result.push(child); }
26958                             else if (contains$4(bbox, childBBox)) { this._all(child, result); }
26959                             else { nodesToSearch.push(child); }
26960                         }
26961                     }
26962                     node = nodesToSearch.pop();
26963                 }
26964
26965                 return result;
26966             },
26967
26968             collides: function (bbox) {
26969
26970                 var node = this.data,
26971                     toBBox = this.toBBox;
26972
26973                 if (!intersects$1(bbox, node)) { return false; }
26974
26975                 var nodesToSearch = [],
26976                     i, len, child, childBBox;
26977
26978                 while (node) {
26979                     for (i = 0, len = node.children.length; i < len; i++) {
26980
26981                         child = node.children[i];
26982                         childBBox = node.leaf ? toBBox(child) : child;
26983
26984                         if (intersects$1(bbox, childBBox)) {
26985                             if (node.leaf || contains$4(bbox, childBBox)) { return true; }
26986                             nodesToSearch.push(child);
26987                         }
26988                     }
26989                     node = nodesToSearch.pop();
26990                 }
26991
26992                 return false;
26993             },
26994
26995             load: function (data) {
26996                 if (!(data && data.length)) { return this; }
26997
26998                 if (data.length < this._minEntries) {
26999                     for (var i = 0, len = data.length; i < len; i++) {
27000                         this.insert(data[i]);
27001                     }
27002                     return this;
27003                 }
27004
27005                 // recursively build the tree with the given data from scratch using OMT algorithm
27006                 var node = this._build(data.slice(), 0, data.length - 1, 0);
27007
27008                 if (!this.data.children.length) {
27009                     // save as is if tree is empty
27010                     this.data = node;
27011
27012                 } else if (this.data.height === node.height) {
27013                     // split root if trees have the same height
27014                     this._splitRoot(this.data, node);
27015
27016                 } else {
27017                     if (this.data.height < node.height) {
27018                         // swap trees if inserted one is bigger
27019                         var tmpNode = this.data;
27020                         this.data = node;
27021                         node = tmpNode;
27022                     }
27023
27024                     // insert the small tree into the large tree at appropriate level
27025                     this._insert(node, this.data.height - node.height - 1, true);
27026                 }
27027
27028                 return this;
27029             },
27030
27031             insert: function (item) {
27032                 if (item) { this._insert(item, this.data.height - 1); }
27033                 return this;
27034             },
27035
27036             clear: function () {
27037                 this.data = createNode([]);
27038                 return this;
27039             },
27040
27041             remove: function (item, equalsFn) {
27042                 if (!item) { return this; }
27043
27044                 var node = this.data,
27045                     bbox = this.toBBox(item),
27046                     path = [],
27047                     indexes = [],
27048                     i, parent, index, goingUp;
27049
27050                 // depth-first iterative tree traversal
27051                 while (node || path.length) {
27052
27053                     if (!node) { // go up
27054                         node = path.pop();
27055                         parent = path[path.length - 1];
27056                         i = indexes.pop();
27057                         goingUp = true;
27058                     }
27059
27060                     if (node.leaf) { // check current node
27061                         index = findItem(item, node.children, equalsFn);
27062
27063                         if (index !== -1) {
27064                             // item found, remove the item and condense tree upwards
27065                             node.children.splice(index, 1);
27066                             path.push(node);
27067                             this._condense(path);
27068                             return this;
27069                         }
27070                     }
27071
27072                     if (!goingUp && !node.leaf && contains$4(node, bbox)) { // go down
27073                         path.push(node);
27074                         indexes.push(i);
27075                         i = 0;
27076                         parent = node;
27077                         node = node.children[0];
27078
27079                     } else if (parent) { // go right
27080                         i++;
27081                         node = parent.children[i];
27082                         goingUp = false;
27083
27084                     } else { node = null; } // nothing found
27085                 }
27086
27087                 return this;
27088             },
27089
27090             toBBox: function (item) { return item; },
27091
27092             compareMinX: compareNodeMinX,
27093             compareMinY: compareNodeMinY,
27094
27095             toJSON: function () { return this.data; },
27096
27097             fromJSON: function (data) {
27098                 this.data = data;
27099                 return this;
27100             },
27101
27102             _all: function (node, result) {
27103                 var nodesToSearch = [];
27104                 while (node) {
27105                     if (node.leaf) { result.push.apply(result, node.children); }
27106                     else { nodesToSearch.push.apply(nodesToSearch, node.children); }
27107
27108                     node = nodesToSearch.pop();
27109                 }
27110                 return result;
27111             },
27112
27113             _build: function (items, left, right, height) {
27114
27115                 var N = right - left + 1,
27116                     M = this._maxEntries,
27117                     node;
27118
27119                 if (N <= M) {
27120                     // reached leaf level; return leaf
27121                     node = createNode(items.slice(left, right + 1));
27122                     calcBBox(node, this.toBBox);
27123                     return node;
27124                 }
27125
27126                 if (!height) {
27127                     // target height of the bulk-loaded tree
27128                     height = Math.ceil(Math.log(N) / Math.log(M));
27129
27130                     // target number of root entries to maximize storage utilization
27131                     M = Math.ceil(N / Math.pow(M, height - 1));
27132                 }
27133
27134                 node = createNode([]);
27135                 node.leaf = false;
27136                 node.height = height;
27137
27138                 // split the items into M mostly square tiles
27139
27140                 var N2 = Math.ceil(N / M),
27141                     N1 = N2 * Math.ceil(Math.sqrt(M)),
27142                     i, j, right2, right3;
27143
27144                 multiSelect(items, left, right, N1, this.compareMinX);
27145
27146                 for (i = left; i <= right; i += N1) {
27147
27148                     right2 = Math.min(i + N1 - 1, right);
27149
27150                     multiSelect(items, i, right2, N2, this.compareMinY);
27151
27152                     for (j = i; j <= right2; j += N2) {
27153
27154                         right3 = Math.min(j + N2 - 1, right2);
27155
27156                         // pack each entry recursively
27157                         node.children.push(this._build(items, j, right3, height - 1));
27158                     }
27159                 }
27160
27161                 calcBBox(node, this.toBBox);
27162
27163                 return node;
27164             },
27165
27166             _chooseSubtree: function (bbox, node, level, path) {
27167
27168                 var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;
27169
27170                 while (true) {
27171                     path.push(node);
27172
27173                     if (node.leaf || path.length - 1 === level) { break; }
27174
27175                     minArea = minEnlargement = Infinity;
27176
27177                     for (i = 0, len = node.children.length; i < len; i++) {
27178                         child = node.children[i];
27179                         area = bboxArea(child);
27180                         enlargement = enlargedArea(bbox, child) - area;
27181
27182                         // choose entry with the least area enlargement
27183                         if (enlargement < minEnlargement) {
27184                             minEnlargement = enlargement;
27185                             minArea = area < minArea ? area : minArea;
27186                             targetNode = child;
27187
27188                         } else if (enlargement === minEnlargement) {
27189                             // otherwise choose one with the smallest area
27190                             if (area < minArea) {
27191                                 minArea = area;
27192                                 targetNode = child;
27193                             }
27194                         }
27195                     }
27196
27197                     node = targetNode || node.children[0];
27198                 }
27199
27200                 return node;
27201             },
27202
27203             _insert: function (item, level, isNode) {
27204
27205                 var toBBox = this.toBBox,
27206                     bbox = isNode ? item : toBBox(item),
27207                     insertPath = [];
27208
27209                 // find the best node for accommodating the item, saving all nodes along the path too
27210                 var node = this._chooseSubtree(bbox, this.data, level, insertPath);
27211
27212                 // put the item into the node
27213                 node.children.push(item);
27214                 extend$1(node, bbox);
27215
27216                 // split on node overflow; propagate upwards if necessary
27217                 while (level >= 0) {
27218                     if (insertPath[level].children.length > this._maxEntries) {
27219                         this._split(insertPath, level);
27220                         level--;
27221                     } else { break; }
27222                 }
27223
27224                 // adjust bboxes along the insertion path
27225                 this._adjustParentBBoxes(bbox, insertPath, level);
27226             },
27227
27228             // split overflowed node into two
27229             _split: function (insertPath, level) {
27230
27231                 var node = insertPath[level],
27232                     M = node.children.length,
27233                     m = this._minEntries;
27234
27235                 this._chooseSplitAxis(node, m, M);
27236
27237                 var splitIndex = this._chooseSplitIndex(node, m, M);
27238
27239                 var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));
27240                 newNode.height = node.height;
27241                 newNode.leaf = node.leaf;
27242
27243                 calcBBox(node, this.toBBox);
27244                 calcBBox(newNode, this.toBBox);
27245
27246                 if (level) { insertPath[level - 1].children.push(newNode); }
27247                 else { this._splitRoot(node, newNode); }
27248             },
27249
27250             _splitRoot: function (node, newNode) {
27251                 // split root node
27252                 this.data = createNode([node, newNode]);
27253                 this.data.height = node.height + 1;
27254                 this.data.leaf = false;
27255                 calcBBox(this.data, this.toBBox);
27256             },
27257
27258             _chooseSplitIndex: function (node, m, M) {
27259
27260                 var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
27261
27262                 minOverlap = minArea = Infinity;
27263
27264                 for (i = m; i <= M - m; i++) {
27265                     bbox1 = distBBox(node, 0, i, this.toBBox);
27266                     bbox2 = distBBox(node, i, M, this.toBBox);
27267
27268                     overlap = intersectionArea(bbox1, bbox2);
27269                     area = bboxArea(bbox1) + bboxArea(bbox2);
27270
27271                     // choose distribution with minimum overlap
27272                     if (overlap < minOverlap) {
27273                         minOverlap = overlap;
27274                         index = i;
27275
27276                         minArea = area < minArea ? area : minArea;
27277
27278                     } else if (overlap === minOverlap) {
27279                         // otherwise choose distribution with minimum area
27280                         if (area < minArea) {
27281                             minArea = area;
27282                             index = i;
27283                         }
27284                     }
27285                 }
27286
27287                 return index;
27288             },
27289
27290             // sorts node children by the best axis for split
27291             _chooseSplitAxis: function (node, m, M) {
27292
27293                 var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,
27294                     compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,
27295                     xMargin = this._allDistMargin(node, m, M, compareMinX),
27296                     yMargin = this._allDistMargin(node, m, M, compareMinY);
27297
27298                 // if total distributions margin value is minimal for x, sort by minX,
27299                 // otherwise it's already sorted by minY
27300                 if (xMargin < yMargin) { node.children.sort(compareMinX); }
27301             },
27302
27303             // total margin of all possible split distributions where each node is at least m full
27304             _allDistMargin: function (node, m, M, compare) {
27305
27306                 node.children.sort(compare);
27307
27308                 var toBBox = this.toBBox,
27309                     leftBBox = distBBox(node, 0, m, toBBox),
27310                     rightBBox = distBBox(node, M - m, M, toBBox),
27311                     margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),
27312                     i, child;
27313
27314                 for (i = m; i < M - m; i++) {
27315                     child = node.children[i];
27316                     extend$1(leftBBox, node.leaf ? toBBox(child) : child);
27317                     margin += bboxMargin(leftBBox);
27318                 }
27319
27320                 for (i = M - m - 1; i >= m; i--) {
27321                     child = node.children[i];
27322                     extend$1(rightBBox, node.leaf ? toBBox(child) : child);
27323                     margin += bboxMargin(rightBBox);
27324                 }
27325
27326                 return margin;
27327             },
27328
27329             _adjustParentBBoxes: function (bbox, path, level) {
27330                 // adjust bboxes along the given tree path
27331                 for (var i = level; i >= 0; i--) {
27332                     extend$1(path[i], bbox);
27333                 }
27334             },
27335
27336             _condense: function (path) {
27337                 // go through the path, removing empty nodes and updating bboxes
27338                 for (var i = path.length - 1, siblings; i >= 0; i--) {
27339                     if (path[i].children.length === 0) {
27340                         if (i > 0) {
27341                             siblings = path[i - 1].children;
27342                             siblings.splice(siblings.indexOf(path[i]), 1);
27343
27344                         } else { this.clear(); }
27345
27346                     } else { calcBBox(path[i], this.toBBox); }
27347                 }
27348             },
27349
27350             _initFormat: function (format) {
27351                 // data format (minX, minY, maxX, maxY accessors)
27352
27353                 // uses eval-type function compilation instead of just accepting a toBBox function
27354                 // because the algorithms are very sensitive to sorting functions performance,
27355                 // so they should be dead simple and without inner calls
27356
27357                 var compareArr = ['return a', ' - b', ';'];
27358
27359                 this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));
27360                 this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));
27361
27362                 this.toBBox = new Function('a',
27363                     'return {minX: a' + format[0] +
27364                     ', minY: a' + format[1] +
27365                     ', maxX: a' + format[2] +
27366                     ', maxY: a' + format[3] + '};');
27367             }
27368         };
27369
27370         function findItem(item, items, equalsFn) {
27371             if (!equalsFn) { return items.indexOf(item); }
27372
27373             for (var i = 0; i < items.length; i++) {
27374                 if (equalsFn(item, items[i])) { return i; }
27375             }
27376             return -1;
27377         }
27378
27379         // calculate node's bbox from bboxes of its children
27380         function calcBBox(node, toBBox) {
27381             distBBox(node, 0, node.children.length, toBBox, node);
27382         }
27383
27384         // min bounding rectangle of node children from k to p-1
27385         function distBBox(node, k, p, toBBox, destNode) {
27386             if (!destNode) { destNode = createNode(null); }
27387             destNode.minX = Infinity;
27388             destNode.minY = Infinity;
27389             destNode.maxX = -Infinity;
27390             destNode.maxY = -Infinity;
27391
27392             for (var i = k, child; i < p; i++) {
27393                 child = node.children[i];
27394                 extend$1(destNode, node.leaf ? toBBox(child) : child);
27395             }
27396
27397             return destNode;
27398         }
27399
27400         function extend$1(a, b) {
27401             a.minX = Math.min(a.minX, b.minX);
27402             a.minY = Math.min(a.minY, b.minY);
27403             a.maxX = Math.max(a.maxX, b.maxX);
27404             a.maxY = Math.max(a.maxY, b.maxY);
27405             return a;
27406         }
27407
27408         function compareNodeMinX(a, b) { return a.minX - b.minX; }
27409         function compareNodeMinY(a, b) { return a.minY - b.minY; }
27410
27411         function bboxArea(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }
27412         function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
27413
27414         function enlargedArea(a, b) {
27415             return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
27416                    (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
27417         }
27418
27419         function intersectionArea(a, b) {
27420             var minX = Math.max(a.minX, b.minX),
27421                 minY = Math.max(a.minY, b.minY),
27422                 maxX = Math.min(a.maxX, b.maxX),
27423                 maxY = Math.min(a.maxY, b.maxY);
27424
27425             return Math.max(0, maxX - minX) *
27426                    Math.max(0, maxY - minY);
27427         }
27428
27429         function contains$4(a, b) {
27430             return a.minX <= b.minX &&
27431                    a.minY <= b.minY &&
27432                    b.maxX <= a.maxX &&
27433                    b.maxY <= a.maxY;
27434         }
27435
27436         function intersects$1(a, b) {
27437             return b.minX <= a.maxX &&
27438                    b.minY <= a.maxY &&
27439                    b.maxX >= a.minX &&
27440                    b.maxY >= a.minY;
27441         }
27442
27443         function createNode(children) {
27444             return {
27445                 children: children,
27446                 height: 1,
27447                 leaf: true,
27448                 minX: Infinity,
27449                 minY: Infinity,
27450                 maxX: -Infinity,
27451                 maxY: -Infinity
27452             };
27453         }
27454
27455         // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
27456         // combines selection algorithm with binary divide & conquer approach
27457
27458         function multiSelect(arr, left, right, n, compare) {
27459             var stack = [left, right],
27460                 mid;
27461
27462             while (stack.length) {
27463                 right = stack.pop();
27464                 left = stack.pop();
27465
27466                 if (right - left <= n) { continue; }
27467
27468                 mid = left + Math.ceil((right - left) / n / 2) * n;
27469                 quickselect(arr, mid, left, right, compare);
27470
27471                 stack.push(left, mid, mid, right);
27472             }
27473         }
27474         rbush_1.default = default_1;
27475
27476         var lineclip_1 = lineclip;
27477
27478         lineclip.polyline = lineclip;
27479         lineclip.polygon = polygonclip;
27480
27481
27482         // Cohen-Sutherland line clippign algorithm, adapted to efficiently
27483         // handle polylines rather than just segments
27484
27485         function lineclip(points, bbox, result) {
27486
27487             var len = points.length,
27488                 codeA = bitCode(points[0], bbox),
27489                 part = [],
27490                 i, a, b, codeB, lastCode;
27491
27492             if (!result) { result = []; }
27493
27494             for (i = 1; i < len; i++) {
27495                 a = points[i - 1];
27496                 b = points[i];
27497                 codeB = lastCode = bitCode(b, bbox);
27498
27499                 while (true) {
27500
27501                     if (!(codeA | codeB)) { // accept
27502                         part.push(a);
27503
27504                         if (codeB !== lastCode) { // segment went outside
27505                             part.push(b);
27506
27507                             if (i < len - 1) { // start a new line
27508                                 result.push(part);
27509                                 part = [];
27510                             }
27511                         } else if (i === len - 1) {
27512                             part.push(b);
27513                         }
27514                         break;
27515
27516                     } else if (codeA & codeB) { // trivial reject
27517                         break;
27518
27519                     } else if (codeA) { // a outside, intersect with clip edge
27520                         a = intersect$1(a, b, codeA, bbox);
27521                         codeA = bitCode(a, bbox);
27522
27523                     } else { // b outside
27524                         b = intersect$1(a, b, codeB, bbox);
27525                         codeB = bitCode(b, bbox);
27526                     }
27527                 }
27528
27529                 codeA = lastCode;
27530             }
27531
27532             if (part.length) { result.push(part); }
27533
27534             return result;
27535         }
27536
27537         // Sutherland-Hodgeman polygon clipping algorithm
27538
27539         function polygonclip(points, bbox) {
27540
27541             var result, edge, prev, prevInside, i, p, inside;
27542
27543             // clip against each side of the clip rectangle
27544             for (edge = 1; edge <= 8; edge *= 2) {
27545                 result = [];
27546                 prev = points[points.length - 1];
27547                 prevInside = !(bitCode(prev, bbox) & edge);
27548
27549                 for (i = 0; i < points.length; i++) {
27550                     p = points[i];
27551                     inside = !(bitCode(p, bbox) & edge);
27552
27553                     // if segment goes through the clip window, add an intersection
27554                     if (inside !== prevInside) { result.push(intersect$1(prev, p, edge, bbox)); }
27555
27556                     if (inside) { result.push(p); } // add a point if it's inside
27557
27558                     prev = p;
27559                     prevInside = inside;
27560                 }
27561
27562                 points = result;
27563
27564                 if (!points.length) { break; }
27565             }
27566
27567             return result;
27568         }
27569
27570         // intersect a segment against one of the 4 lines that make up the bbox
27571
27572         function intersect$1(a, b, edge, bbox) {
27573             return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
27574                    edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
27575                    edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
27576                    edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
27577                    null;
27578         }
27579
27580         // bit code reflects the point position relative to the bbox:
27581
27582         //         left  mid  right
27583         //    top  1001  1000  1010
27584         //    mid  0001  0000  0010
27585         // bottom  0101  0100  0110
27586
27587         function bitCode(p, bbox) {
27588             var code = 0;
27589
27590             if (p[0] < bbox[0]) { code |= 1; } // left
27591             else if (p[0] > bbox[2]) { code |= 2; } // right
27592
27593             if (p[1] < bbox[1]) { code |= 4; } // bottom
27594             else if (p[1] > bbox[3]) { code |= 8; } // top
27595
27596             return code;
27597         }
27598
27599         var whichPolygon_1 = whichPolygon;
27600
27601         function whichPolygon(data) {
27602             var bboxes = [];
27603             for (var i = 0; i < data.features.length; i++) {
27604                 var feature = data.features[i];
27605                 var coords = feature.geometry.coordinates;
27606
27607                 if (feature.geometry.type === 'Polygon') {
27608                     bboxes.push(treeItem(coords, feature.properties));
27609
27610                 } else if (feature.geometry.type === 'MultiPolygon') {
27611                     for (var j = 0; j < coords.length; j++) {
27612                         bboxes.push(treeItem(coords[j], feature.properties));
27613                     }
27614                 }
27615             }
27616
27617             var tree = rbush_1().load(bboxes);
27618
27619             function query(p, multi) {
27620                 var output = [],
27621                     result = tree.search({
27622                         minX: p[0],
27623                         minY: p[1],
27624                         maxX: p[0],
27625                         maxY: p[1]
27626                     });
27627                 for (var i = 0; i < result.length; i++) {
27628                     if (insidePolygon(result[i].coords, p)) {
27629                         if (multi)
27630                             { output.push(result[i].props); }
27631                         else
27632                             { return result[i].props; }
27633                     }
27634                 }
27635                 return multi && output.length ? output : null;
27636             }
27637
27638             query.tree = tree;
27639             query.bbox = function queryBBox(bbox) {
27640                 var output = [];
27641                 var result = tree.search({
27642                     minX: bbox[0],
27643                     minY: bbox[1],
27644                     maxX: bbox[2],
27645                     maxY: bbox[3]
27646                 });
27647                 for (var i = 0; i < result.length; i++) {
27648                     if (polygonIntersectsBBox(result[i].coords, bbox)) {
27649                         output.push(result[i].props);
27650                     }
27651                 }
27652                 return output;
27653             };
27654
27655             return query;
27656         }
27657
27658         function polygonIntersectsBBox(polygon, bbox) {
27659             var bboxCenter = [
27660                 (bbox[0] + bbox[2]) / 2,
27661                 (bbox[1] + bbox[3]) / 2
27662             ];
27663             if (insidePolygon(polygon, bboxCenter)) { return true; }
27664             for (var i = 0; i < polygon.length; i++) {
27665                 if (lineclip_1(polygon[i], bbox).length > 0) { return true; }
27666             }
27667             return false;
27668         }
27669
27670         // ray casting algorithm for detecting if point is in polygon
27671         function insidePolygon(rings, p) {
27672             var inside = false;
27673             for (var i = 0, len = rings.length; i < len; i++) {
27674                 var ring = rings[i];
27675                 for (var j = 0, len2 = ring.length, k = len2 - 1; j < len2; k = j++) {
27676                     if (rayIntersect(p, ring[j], ring[k])) { inside = !inside; }
27677                 }
27678             }
27679             return inside;
27680         }
27681
27682         function rayIntersect(p, p1, p2) {
27683             return ((p1[1] > p[1]) !== (p2[1] > p[1])) && (p[0] < (p2[0] - p1[0]) * (p[1] - p1[1]) / (p2[1] - p1[1]) + p1[0]);
27684         }
27685
27686         function treeItem(coords, props) {
27687             var item = {
27688                 minX: Infinity,
27689                 minY: Infinity,
27690                 maxX: -Infinity,
27691                 maxY: -Infinity,
27692                 coords: coords,
27693                 props: props
27694             };
27695
27696             for (var i = 0; i < coords[0].length; i++) {
27697                 var p = coords[0][i];
27698                 item.minX = Math.min(item.minX, p[0]);
27699                 item.minY = Math.min(item.minY, p[1]);
27700                 item.maxX = Math.max(item.maxX, p[0]);
27701                 item.maxY = Math.max(item.maxY, p[1]);
27702             }
27703             return item;
27704         }
27705
27706         var type$1 = "FeatureCollection";
27707         var features$1 = [{type:"Feature",properties:{m49:"680",wikidata:"Q3405693",nameEn:"Sark",country:"GB",groups:["GG","830","154","150"],level:"subterritory",driveSide:"left",roadSpeedUnit:"mph",callingCodes:["44 01481"]},geometry:{type:"MultiPolygon",coordinates:[[[[-2.36485,49.48223],[-2.09454,49.46288],[-2.65349,49.15373],[-2.36485,49.48223]]]]}},{type:"Feature",properties:{m49:"001",wikidata:"Q2",nameEn:"World",aliases:["Earth","Planet"],level:"world"},geometry:null},{type:"Feature",properties:{m49:"142",wikidata:"Q48",nameEn:"Asia",level:"region"},geometry:null},{type:"Feature",properties:{m49:"143",wikidata:"Q27275",nameEn:"Central Asia",groups:["142"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"145",wikidata:"Q27293",nameEn:"Western Asia",groups:["142"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"150",wikidata:"Q46",nameEn:"Europe",level:"region"},geometry:null},{type:"Feature",properties:{m49:"151",wikidata:"Q27468",nameEn:"Eastern Europe",groups:["150"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"154",wikidata:"Q27479",nameEn:"Northern Europe",groups:["150"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"155",wikidata:"Q27496",nameEn:"Western Europe",groups:["150"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"202",wikidata:"Q132959",nameEn:"Sub-Saharan Africa",groups:["002"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"419",wikidata:"Q72829598",nameEn:"Latin America and the Caribbean",groups:["019"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"830",wikidata:"Q42314",nameEn:"Channel Islands",groups:["150","154"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"019",wikidata:"Q828",nameEn:"Americas",level:"region"},geometry:null},{type:"Feature",properties:{m49:"029",wikidata:"Q664609",nameEn:"Caribbean",groups:["419","019","003"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"034",wikidata:"Q771405",nameEn:"Southern Asia",groups:["142"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"002",wikidata:"Q15",nameEn:"Africa",level:"region"},geometry:null},{type:"Feature",properties:{m49:"003",wikidata:"Q49",nameEn:"North America",groups:["019"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"017",wikidata:"Q27433",nameEn:"Middle Africa",groups:["202","002"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"039",wikidata:"Q27449",nameEn:"Southern Europe",groups:["150"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"005",wikidata:"Q18",nameEn:"South America",groups:["419","019"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"009",wikidata:"Q538",nameEn:"Oceania",level:"region"},geometry:null},{type:"Feature",properties:{m49:"061",wikidata:"Q35942",nameEn:"Polynesia",groups:["009"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"014",wikidata:"Q27407",nameEn:"Eastern Africa",groups:["202","002"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"053",wikidata:"Q45256",nameEn:"Australia and New Zealand",aliases:["Australasia"],groups:["009"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"011",wikidata:"Q4412",nameEn:"Western Africa",groups:["202","002"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"013",wikidata:"Q27611",nameEn:"Central America",groups:["419","019","003"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"021",wikidata:"Q2017699",nameEn:"Northern America",groups:["019","003"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"035",wikidata:"Q11708",nameEn:"South-eastern Asia",groups:["142"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"018",wikidata:"Q27394",nameEn:"Southern Africa",groups:["202","002"],level:"intermediateRegion"},geometry:null},{type:"Feature",properties:{m49:"030",wikidata:"Q27231",nameEn:"Eastern Asia",groups:["142"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"015",wikidata:"Q27381",nameEn:"Northern Africa",groups:["002"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"054",wikidata:"Q37394",nameEn:"Melanesia",groups:["009"],level:"subregion"},geometry:null},{type:"Feature",properties:{m49:"057",wikidata:"Q3359409",nameEn:"Micronesia",groups:["009"],level:"subregion"},geometry:null},{type:"Feature",properties:{iso1A2:"AC",iso1A3:"ASC",wikidata:"Q46197",nameEn:"Ascension Island",country:"GB",groups:["SH","011","202","002"],isoStatus:"excRes",driveSide:"left",roadSpeedUnit:"mph",callingCodes:["247"]},geometry:{type:"MultiPolygon",coordinates:[[[[-14.82771,-8.70814],[-14.91926,-6.63386],[-13.33271,-8.07391],[-14.82771,-8.70814]]]]}},{type:"Feature",properties:{iso1A2:"AD",iso1A3:"AND",iso1N3:"020",wikidata:"Q228",nameEn:"Andorra",groups:["039","150"],callingCodes:["376"]},geometry:{type:"MultiPolygon",coordinates:[[[[1.72515,42.50338],[1.70571,42.48867],[1.66826,42.50779],[1.65674,42.47125],[1.58933,42.46275],[1.57953,42.44957],[1.55937,42.45808],[1.55073,42.43299],[1.5127,42.42959],[1.44529,42.43724],[1.43838,42.47848],[1.41648,42.48315],[1.46661,42.50949],[1.44759,42.54431],[1.41245,42.53539],[1.4234,42.55959],[1.44529,42.56722],[1.42512,42.58292],[1.44197,42.60217],[1.47986,42.61346],[1.46718,42.63296],[1.48043,42.65203],[1.50867,42.64483],[1.55418,42.65669],[1.60085,42.62703],[1.63485,42.62957],[1.6625,42.61982],[1.68267,42.62533],[1.73452,42.61515],[1.72588,42.59098],[1.7858,42.57698],[1.73683,42.55492],[1.72515,42.50338]]]]}},{type:"Feature",properties:{iso1A2:"AE",iso1A3:"ARE",iso1N3:"784",wikidata:"Q878",nameEn:"United Arab Emirates",groups:["145","142"],callingCodes:["971"]},geometry:{type:"MultiPolygon",coordinates:[[[[56.26534,25.62825],[56.82555,25.7713],[56.86325,25.03856],[56.3227,24.97284],[56.34873,24.93205],[56.30269,24.88334],[56.20568,24.85063],[56.20062,24.78565],[56.13684,24.73699],[56.06128,24.74457],[56.03535,24.81161],[55.97836,24.87673],[55.97467,24.89639],[56.05106,24.87461],[56.05715,24.95727],[55.96316,25.00857],[55.90849,24.96771],[55.85094,24.96858],[55.81116,24.9116],[55.81348,24.80102],[55.83408,24.77858],[55.83271,24.68567],[55.76461,24.5287],[55.83271,24.41521],[55.83395,24.32776],[55.80747,24.31069],[55.79145,24.27914],[55.76781,24.26209],[55.75939,24.26114],[55.75382,24.2466],[55.75257,24.23466],[55.76558,24.23227],[55.77658,24.23476],[55.83367,24.20193],[55.95472,24.2172],[56.01799,24.07426],[55.8308,24.01633],[55.73301,24.05994],[55.48677,23.94946],[55.57358,23.669],[55.22634,23.10378],[55.2137,22.71065],[55.13599,22.63334],[52.56622,22.94341],[51.59617,24.12041],[51.58871,24.27256],[51.41644,24.39615],[51.58834,24.66608],[51.83108,24.71675],[52.02277,24.75635],[52.35509,25.00368],[52.82259,25.51697],[53.97892,24.64436],[55.14145,25.62624],[55.81777,26.18798],[56.08666,26.05038],[56.15498,26.06828],[56.19334,25.9795],[56.13963,25.82765],[56.17416,25.77239],[56.13579,25.73524],[56.14826,25.66351],[56.18363,25.65508],[56.20473,25.61119],[56.25365,25.60211],[56.26636,25.60643],[56.25341,25.61443],[56.26534,25.62825]],[[56.26062,25.33108],[56.23362,25.31253],[56.25008,25.28843],[56.24465,25.27505],[56.20838,25.25668],[56.20872,25.24104],[56.24341,25.22867],[56.27628,25.23404],[56.34438,25.26653],[56.35172,25.30681],[56.3111,25.30107],[56.3005,25.31815],[56.26062,25.33108]]],[[[56.28423,25.26344],[56.27086,25.26128],[56.2716,25.27916],[56.28102,25.28486],[56.29379,25.2754],[56.28423,25.26344]]]]}},{type:"Feature",properties:{iso1A2:"AF",iso1A3:"AFG",iso1N3:"004",wikidata:"Q889",nameEn:"Afghanistan",groups:["034","142"],callingCodes:["93"]},geometry:{type:"MultiPolygon",coordinates:[[[[70.61526,38.34774],[70.64966,38.34999],[70.69189,38.37031],[70.6761,38.39144],[70.67438,38.40597],[70.69807,38.41861],[70.72485,38.4131],[70.75455,38.4252],[70.77132,38.45548],[70.78581,38.45502],[70.78702,38.45031],[70.79766,38.44944],[70.80521,38.44447],[70.81697,38.44507],[70.82538,38.45394],[70.84376,38.44688],[70.88719,38.46826],[70.92728,38.43021],[70.98693,38.48862],[71.03545,38.44779],[71.0556,38.40176],[71.09542,38.42517],[71.10592,38.42077],[71.10957,38.40671],[71.1451,38.40106],[71.21291,38.32797],[71.33114,38.30339],[71.33869,38.27335],[71.37803,38.25641],[71.36444,38.15358],[71.29878,38.04429],[71.28922,38.01272],[71.27622,37.99946],[71.27278,37.96496],[71.24969,37.93031],[71.2809,37.91995],[71.296,37.93403],[71.32871,37.88564],[71.51565,37.95349],[71.58843,37.92425],[71.59255,37.79956],[71.55752,37.78677],[71.54324,37.77104],[71.53053,37.76534],[71.55234,37.73209],[71.54186,37.69691],[71.51972,37.61945],[71.5065,37.60912],[71.49693,37.53527],[71.50616,37.50733],[71.5256,37.47971],[71.49612,37.4279],[71.47685,37.40281],[71.4862,37.33405],[71.49821,37.31975],[71.50674,37.31502],[71.48536,37.26017],[71.4824,37.24921],[71.48339,37.23937],[71.47386,37.2269],[71.4555,37.21418],[71.4494,37.18137],[71.44127,37.11856],[71.43097,37.05855],[71.45578,37.03094],[71.46923,36.99925],[71.48481,36.93218],[71.51502,36.89128],[71.57195,36.74943],[71.67083,36.67346],[71.83229,36.68084],[72.31676,36.98115],[72.54095,37.00007],[72.66381,37.02014],[72.79693,37.22222],[73.06884,37.31729],[73.29633,37.46495],[73.77197,37.4417],[73.76647,37.33913],[73.61129,37.27469],[73.64974,37.23643],[73.82552,37.22659],[73.8564,37.26158],[74.20308,37.34208],[74.23339,37.41116],[74.41055,37.3948],[74.56161,37.37734],[74.68383,37.3948],[74.8294,37.3435],[74.88887,37.23275],[74.80605,37.21565],[74.49981,37.24518],[74.56453,37.03023],[74.53739,36.96224],[74.43389,37.00977],[74.04856,36.82648],[73.82685,36.91421],[72.6323,36.84601],[72.18135,36.71838],[71.80267,36.49924],[71.60491,36.39429],[71.19505,36.04134],[71.37969,35.95865],[71.55273,35.71483],[71.49917,35.6267],[71.65435,35.4479],[71.54294,35.31037],[71.5541,35.28776],[71.67495,35.21262],[71.52938,35.09023],[71.55273,35.02615],[71.49917,35.00478],[71.50329,34.97328],[71.29472,34.87728],[71.28356,34.80882],[71.08718,34.69034],[71.11602,34.63047],[71.0089,34.54568],[71.02401,34.44835],[71.17662,34.36769],[71.12815,34.26619],[71.13078,34.16503],[71.09453,34.13524],[71.09307,34.11961],[71.06933,34.10564],[71.07345,34.06242],[70.88119,33.97933],[70.54336,33.9463],[69.90203,34.04194],[69.87307,33.9689],[69.85671,33.93719],[70.00503,33.73528],[70.14236,33.71701],[70.14785,33.6553],[70.20141,33.64387],[70.17062,33.53535],[70.32775,33.34496],[70.13686,33.21064],[70.07369,33.22557],[70.02563,33.14282],[69.85259,33.09451],[69.79766,33.13247],[69.71526,33.09911],[69.57656,33.09911],[69.49004,33.01509],[69.49854,32.88843],[69.5436,32.8768],[69.47082,32.85834],[69.38018,32.76601],[69.43649,32.7302],[69.44747,32.6678],[69.38155,32.56601],[69.2868,32.53938],[69.23599,32.45946],[69.27932,32.29119],[69.27032,32.14141],[69.3225,31.93186],[69.20577,31.85957],[69.11514,31.70782],[69.00939,31.62249],[68.95995,31.64822],[68.91078,31.59687],[68.79997,31.61665],[68.6956,31.75687],[68.57475,31.83158],[68.44222,31.76446],[68.27605,31.75863],[68.25614,31.80357],[68.1655,31.82691],[68.00071,31.6564],[67.86887,31.63536],[67.72056,31.52304],[67.58323,31.52772],[67.62374,31.40473],[67.7748,31.4188],[67.78854,31.33203],[67.29964,31.19586],[67.03323,31.24519],[67.04147,31.31561],[66.83273,31.26867],[66.72561,31.20526],[66.68166,31.07597],[66.58175,30.97532],[66.42645,30.95309],[66.39194,30.9408],[66.28413,30.57001],[66.34869,30.404],[66.23609,30.06321],[66.36042,29.9583],[66.24175,29.85181],[65.04005,29.53957],[64.62116,29.58903],[64.19796,29.50407],[64.12966,29.39157],[63.5876,29.50456],[62.47751,29.40782],[60.87231,29.86514],[61.80829,30.84224],[61.78268,30.92724],[61.8335,30.97669],[61.83257,31.0452],[61.80957,31.12576],[61.80569,31.16167],[61.70929,31.37391],[60.84541,31.49561],[60.86191,32.22565],[60.56485,33.12944],[60.88908,33.50219],[60.91133,33.55596],[60.69573,33.56054],[60.57762,33.59772],[60.5485,33.73422],[60.5838,33.80793],[60.50209,34.13992],[60.66502,34.31539],[60.91321,34.30411],[60.72316,34.52857],[60.99922,34.63064],[61.00197,34.70631],[61.06926,34.82139],[61.12831,35.09938],[61.0991,35.27845],[61.18187,35.30249],[61.27371,35.61482],[61.58742,35.43803],[61.77693,35.41341],[61.97743,35.4604],[62.05709,35.43803],[62.15871,35.33278],[62.29191,35.25964],[62.29878,35.13312],[62.48006,35.28796],[62.62288,35.22067],[62.74098,35.25432],[62.90853,35.37086],[63.0898,35.43131],[63.12276,35.53196],[63.10079,35.63024],[63.23262,35.67487],[63.10318,35.81782],[63.12276,35.86208],[63.29579,35.85985],[63.53475,35.90881],[63.56496,35.95106],[63.98519,36.03773],[64.05385,36.10433],[64.43288,36.24401],[64.57295,36.34362],[64.62514,36.44311],[64.61141,36.6351],[64.97945,37.21913],[65.51778,37.23881],[65.64263,37.34388],[65.64137,37.45061],[65.72274,37.55438],[66.30993,37.32409],[66.55743,37.35409],[66.64699,37.32958],[66.95598,37.40162],[67.08232,37.35469],[67.13039,37.27168],[67.2224,37.24545],[67.2581,37.17216],[67.51868,37.26102],[67.78329,37.1834],[67.7803,37.08978],[67.87917,37.0591],[68.02194,36.91923],[68.18542,37.02074],[68.27605,37.00977],[68.29253,37.10621],[68.41201,37.10402],[68.41888,37.13906],[68.61851,37.19815],[68.6798,37.27906],[68.81438,37.23862],[68.80889,37.32494],[68.91189,37.26704],[68.88168,37.33368],[68.96407,37.32603],[69.03274,37.25174],[69.25152,37.09426],[69.39529,37.16752],[69.45022,37.23315],[69.36645,37.40462],[69.44954,37.4869],[69.51888,37.5844],[69.80041,37.5746],[69.84435,37.60616],[69.93362,37.61378],[69.95971,37.5659],[70.15015,37.52519],[70.28243,37.66706],[70.27694,37.81258],[70.1863,37.84296],[70.17206,37.93276],[70.4898,38.12546],[70.54673,38.24541],[70.60407,38.28046],[70.61526,38.34774]]]]}},{type:"Feature",properties:{iso1A2:"AG",iso1A3:"ATG",iso1N3:"028",wikidata:"Q781",nameEn:"Antigua and Barbuda",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 268"]},geometry:{type:"MultiPolygon",coordinates:[[[[-62.12601,17.9235],[-61.45764,17.9187],[-61.44461,16.81958],[-61.83929,16.66647],[-62.14123,17.02632],[-62.52079,16.69392],[-62.62949,16.82364],[-62.27053,17.22145],[-62.12601,17.9235]]]]}},{type:"Feature",properties:{iso1A2:"AI",iso1A3:"AIA",iso1N3:"660",wikidata:"Q25228",nameEn:"Anguilla",country:"GB",groups:["029","003","419","019"],driveSide:"left",callingCodes:["1 264"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.83866,18.82518],[-62.46233,19.00569],[-62.75637,18.13489],[-62.86666,18.19278],[-63.35989,18.06012],[-63.83866,18.82518]]]]}},{type:"Feature",properties:{iso1A2:"AL",iso1A3:"ALB",iso1N3:"008",wikidata:"Q222",nameEn:"Albania",groups:["039","150"],callingCodes:["355"]},geometry:{type:"MultiPolygon",coordinates:[[[[20.07761,42.55582],[20.17127,42.50469],[20.21797,42.41237],[20.24399,42.32168],[20.34479,42.32656],[20.3819,42.3029],[20.48857,42.25444],[20.56955,42.12097],[20.55633,42.08173],[20.59434,42.03879],[20.63069,41.94913],[20.57946,41.91593],[20.59524,41.8818],[20.55976,41.87068],[20.57144,41.7897],[20.53405,41.78099],[20.51301,41.72433],[20.52937,41.69292],[20.51769,41.65975],[20.55508,41.58113],[20.52103,41.56473],[20.45809,41.5549],[20.45331,41.51436],[20.49039,41.49277],[20.51301,41.442],[20.55976,41.4087],[20.52119,41.34381],[20.49432,41.33679],[20.51068,41.2323],[20.59715,41.13644],[20.58546,41.11179],[20.59832,41.09066],[20.63454,41.0889],[20.65558,41.08009],[20.71634,40.91781],[20.73504,40.9081],[20.81567,40.89662],[20.83671,40.92752],[20.94305,40.92399],[20.97693,40.90103],[20.97887,40.85475],[20.98396,40.79109],[20.95752,40.76982],[20.98134,40.76046],[21.05833,40.66586],[21.03932,40.56299],[20.96908,40.51526],[20.94925,40.46625],[20.83688,40.47882],[20.7906,40.42726],[20.78234,40.35803],[20.71789,40.27739],[20.67162,40.09433],[20.62566,40.0897],[20.61081,40.07866],[20.55593,40.06524],[20.51297,40.08168],[20.48487,40.06271],[20.42373,40.06777],[20.37911,39.99058],[20.31135,39.99438],[20.41546,39.82832],[20.41475,39.81437],[20.38572,39.78516],[20.30804,39.81563],[20.29152,39.80421],[20.31961,39.72799],[20.27412,39.69884],[20.22707,39.67459],[20.22376,39.64532],[20.15988,39.652],[20.12956,39.65805],[20.05189,39.69112],[20.00957,39.69227],[19.98042,39.6504],[19.92466,39.69533],[19.97622,39.78684],[19.95905,39.82857],[19.0384,40.35325],[19.26406,41.74971],[19.37597,41.84849],[19.37451,41.8842],[19.33812,41.90669],[19.34601,41.95675],[19.37691,41.96977],[19.36867,42.02564],[19.37548,42.06835],[19.40687,42.10024],[19.28623,42.17745],[19.42,42.33019],[19.42352,42.36546],[19.4836,42.40831],[19.65972,42.62774],[19.73244,42.66299],[19.77375,42.58517],[19.74731,42.57422],[19.76549,42.50237],[19.82333,42.46581],[19.9324,42.51699],[20.00842,42.5109],[20.01834,42.54622],[20.07761,42.55582]]]]}},{type:"Feature",properties:{iso1A2:"AM",iso1A3:"ARM",iso1N3:"051",wikidata:"Q399",nameEn:"Armenia",groups:["145","142"],callingCodes:["374"]},geometry:{type:"MultiPolygon",coordinates:[[[[45.0133,41.29747],[45.05497,41.2464],[45.02932,41.2101],[45.05201,41.19211],[45.11811,41.19967],[45.1969,41.168],[45.19942,41.13299],[45.08028,41.10917],[45.06784,41.05379],[45.12923,41.06059],[45.1313,41.09369],[45.1634,41.08082],[45.16493,41.05068],[45.1994,41.04518],[45.25897,41.0027],[45.26162,41.0228],[45.28859,41.03757],[45.35677,40.99784],[45.39725,41.02603],[45.44083,41.01663],[45.40814,40.97904],[45.60584,40.87436],[45.55914,40.78366],[45.4206,40.7424],[45.35366,40.65979],[45.45484,40.57707],[45.42994,40.53804],[45.65098,40.37696],[45.95609,40.27846],[45.97944,40.181],[45.83779,39.98925],[45.78642,40.03218],[45.59806,40.0131],[45.60895,39.97733],[45.7833,39.9475],[45.82533,39.82925],[45.96543,39.78859],[46.18493,39.60533],[46.40286,39.63651],[46.42465,39.57534],[46.52117,39.58734],[46.57098,39.56694],[46.57721,39.54414],[46.51027,39.52373],[46.53051,39.47809],[46.4013,39.45405],[46.37795,39.42039],[46.43244,39.35181],[46.50093,39.33736],[46.56476,39.24942],[46.63481,39.23013],[46.58032,39.21204],[46.54141,39.15895],[46.52584,39.18912],[46.44022,39.19636],[46.54296,39.07078],[46.51805,38.94982],[46.53497,38.86548],[46.34059,38.92076],[46.20601,38.85262],[46.14785,38.84206],[46.06973,39.0744],[46.02303,39.09978],[45.99774,39.28931],[45.79225,39.3695],[45.83,39.46487],[45.80804,39.56716],[45.70547,39.60174],[45.46992,39.49888],[45.29606,39.57654],[45.30385,39.61373],[45.23535,39.61373],[45.21784,39.58074],[45.17464,39.58614],[45.18554,39.67846],[45.06604,39.79277],[44.92869,39.72157],[44.88354,39.74432],[44.75779,39.7148],[44.61845,39.8281],[44.46635,39.97733],[44.26973,40.04866],[44.1778,40.02845],[44.1057,40.03555],[43.92307,40.01787],[43.65688,40.11199],[43.65221,40.14889],[43.71136,40.16673],[43.59928,40.34019],[43.60862,40.43267],[43.54791,40.47413],[43.63664,40.54159],[43.7425,40.66805],[43.74872,40.7365],[43.67712,40.84846],[43.67712,40.93084],[43.58683,40.98961],[43.47319,41.02251],[43.44984,41.0988],[43.4717,41.12611],[43.67712,41.13398],[43.74717,41.1117],[43.84835,41.16329],[44.16591,41.19141],[44.18148,41.24644],[44.32139,41.2079],[44.34337,41.20312],[44.34417,41.2382],[44.46791,41.18204],[44.59322,41.1933],[44.61462,41.24018],[44.72814,41.20338],[44.82084,41.21513],[44.87887,41.20195],[44.89911,41.21366],[44.84358,41.23088],[44.81749,41.23488],[44.80053,41.25949],[44.81437,41.30371],[44.93493,41.25685],[45.0133,41.29747]],[[45.21324,40.9817],[45.23095,40.97828],[45.23487,41.00226],[45.20625,41.01484],[45.18382,41.0066],[45.19312,40.98998],[45.20518,40.99348],[45.21219,40.99001],[45.21324,40.9817]],[[45.00864,41.03411],[45.03792,41.03938],[45.04517,41.06653],[45.03406,41.07931],[45.00864,41.09407],[44.97169,41.09176],[44.95383,41.07553],[44.96031,41.06345],[44.9903,41.05657],[45.00864,41.03411]]],[[[45.50279,40.58424],[45.47927,40.65023],[45.51825,40.67382],[45.56071,40.64765],[45.50279,40.58424]]]]}},{type:"Feature",properties:{iso1A2:"AO",iso1A3:"AGO",iso1N3:"024",wikidata:"Q916",nameEn:"Angola",groups:["017","202","002"],callingCodes:["244"]},geometry:{type:"MultiPolygon",coordinates:[[[[16.55507,-5.85631],[16.96282,-7.21787],[17.5828,-8.13784],[18.33635,-8.00126],[19.33698,-7.99743],[19.5469,-7.00195],[20.30218,-6.98955],[20.31846,-6.91953],[20.61689,-6.90876],[20.56263,-7.28566],[21.79824,-7.29628],[21.84856,-9.59871],[22.19039,-9.94628],[22.32604,-10.76291],[22.17954,-10.85884],[22.25951,-11.24911],[22.54205,-11.05784],[23.16602,-11.10577],[23.45631,-10.946],[23.86868,-11.02856],[24.00027,-10.89356],[24.02603,-11.15368],[23.98804,-12.13149],[24.06672,-12.29058],[23.90937,-12.844],[24.03339,-12.99091],[21.97988,-13.00148],[22.00323,-16.18028],[22.17217,-16.50269],[23.20038,-17.47563],[23.47474,-17.62877],[21.42741,-18.02787],[21.14283,-17.94318],[18.84226,-17.80375],[18.39229,-17.38927],[14.28743,-17.38814],[13.95896,-17.43141],[13.36212,-16.98048],[12.97145,-16.98567],[12.52111,-17.24495],[12.07076,-17.15165],[11.75063,-17.25013],[10.5065,-17.25284],[11.50888,-5.33417],[12.00924,-5.02627],[12.16068,-4.90089],[12.20901,-4.75642],[12.25587,-4.79437],[12.32324,-4.78415],[12.40964,-4.60609],[12.64835,-4.55937],[12.76844,-4.38709],[12.87096,-4.40315],[12.91489,-4.47907],[13.09648,-4.63739],[13.11195,-4.67745],[12.8733,-4.74346],[12.70868,-4.95505],[12.63465,-4.94632],[12.60251,-5.01715],[12.46297,-5.09408],[12.49815,-5.14058],[12.51589,-5.1332],[12.53586,-5.14658],[12.53599,-5.1618],[12.52301,-5.17481],[12.52318,-5.74353],[12.26557,-5.74031],[12.20376,-5.76338],[11.95767,-5.94705],[12.42245,-6.07585],[13.04371,-5.87078],[16.55507,-5.85631]]]]}},{type:"Feature",properties:{iso1A2:"AQ",iso1A3:"ATA",iso1N3:"010",wikidata:"Q51",nameEn:"Antarctica",level:"region",callingCodes:["672"]},geometry:{type:"MultiPolygon",coordinates:[[[[180,-60],[180,-90],[-180,-90],[-180,-60],[180,-60]]]]}},{type:"Feature",properties:{iso1A2:"AR",iso1A3:"ARG",iso1N3:"032",wikidata:"Q414",nameEn:"Argentina",aliases:["RA"],groups:["005","419","019"],callingCodes:["54"]},geometry:{type:"MultiPolygon",coordinates:[[[[-72.31343,-50.58411],[-73.15765,-50.78337],[-73.55259,-49.92488],[-73.45156,-49.79461],[-73.09655,-49.14342],[-72.56894,-48.81116],[-72.54042,-48.52392],[-72.27662,-48.28727],[-72.50478,-47.80586],[-71.94152,-47.13595],[-71.68577,-46.55385],[-71.75614,-45.61611],[-71.35687,-45.22075],[-72.06985,-44.81756],[-71.26418,-44.75684],[-71.16436,-44.46244],[-71.81318,-44.38097],[-71.64206,-43.64774],[-72.14828,-42.85321],[-72.15541,-42.15941],[-71.74901,-42.11711],[-71.92726,-40.72714],[-71.37826,-38.91474],[-70.89532,-38.6923],[-71.24279,-37.20264],[-70.95047,-36.4321],[-70.38008,-36.02375],[-70.49416,-35.24145],[-69.87386,-34.13344],[-69.88099,-33.34489],[-70.55832,-31.51559],[-70.14479,-30.36595],[-69.8596,-30.26131],[-69.99507,-29.28351],[-69.80969,-29.07185],[-69.66709,-28.44055],[-69.22504,-27.95042],[-68.77586,-27.16029],[-68.43363,-27.08414],[-68.27677,-26.90626],[-68.59048,-26.49861],[-68.56909,-26.28146],[-68.38372,-26.15353],[-68.57622,-25.32505],[-68.38372,-25.08636],[-68.56909,-24.69831],[-68.24825,-24.42596],[-67.33563,-24.04237],[-66.99632,-22.99839],[-67.18382,-22.81525],[-66.7298,-22.23644],[-66.29714,-22.08741],[-66.24077,-21.77837],[-66.03836,-21.84829],[-66.04832,-21.9187],[-65.9261,-21.93335],[-65.7467,-22.10105],[-65.61166,-22.09504],[-65.58694,-22.09794],[-65.57743,-22.07675],[-65.47435,-22.08908],[-64.99524,-22.08255],[-64.90014,-22.12136],[-64.67174,-22.18957],[-64.58888,-22.25035],[-64.4176,-22.67692],[-64.35108,-22.73282],[-64.31489,-22.88824],[-64.22918,-22.55807],[-63.93287,-21.99934],[-63.70963,-21.99934],[-63.68113,-22.0544],[-63.66482,-21.99918],[-62.81124,-21.9987],[-62.8078,-22.12534],[-62.64455,-22.25091],[-62.51761,-22.37684],[-62.22768,-22.55807],[-61.9756,-23.0507],[-61.0782,-23.62932],[-60.99754,-23.80934],[-60.28163,-24.04436],[-60.03367,-24.00701],[-59.45482,-24.34787],[-59.33886,-24.49935],[-58.33055,-24.97099],[-58.25492,-24.92528],[-57.80821,-25.13863],[-57.57431,-25.47269],[-57.87176,-25.93604],[-58.1188,-26.16704],[-58.3198,-26.83443],[-58.65321,-27.14028],[-58.59549,-27.29973],[-58.04205,-27.2387],[-56.85337,-27.5165],[-56.18313,-27.29851],[-55.89195,-27.3467],[-55.74475,-27.44485],[-55.59094,-27.32444],[-55.62322,-27.1941],[-55.39611,-26.97679],[-55.25243,-26.93808],[-55.16948,-26.96068],[-55.06351,-26.80195],[-55.00584,-26.78754],[-54.80868,-26.55669],[-54.70732,-26.45099],[-54.69333,-26.37705],[-54.67359,-25.98607],[-54.60664,-25.9691],[-54.62063,-25.91213],[-54.59398,-25.59224],[-54.5502,-25.58915],[-54.52926,-25.62846],[-53.90831,-25.55513],[-53.83691,-25.94849],[-53.73511,-26.04211],[-53.73086,-26.05842],[-53.7264,-26.0664],[-53.73391,-26.07006],[-53.73968,-26.10012],[-53.65018,-26.19501],[-53.65237,-26.23289],[-53.63739,-26.2496],[-53.63881,-26.25075],[-53.64632,-26.24798],[-53.64186,-26.25976],[-53.64505,-26.28089],[-53.68269,-26.33359],[-53.73372,-26.6131],[-53.80144,-27.09844],[-54.15978,-27.2889],[-54.19062,-27.27639],[-54.19268,-27.30751],[-54.41888,-27.40882],[-54.50416,-27.48232],[-54.67657,-27.57214],[-54.90159,-27.63132],[-54.90805,-27.73149],[-55.1349,-27.89759],[-55.16872,-27.86224],[-55.33303,-27.94661],[-55.6262,-28.17124],[-55.65418,-28.18304],[-56.01729,-28.51223],[-56.00458,-28.60421],[-56.05265,-28.62651],[-56.54171,-29.11447],[-56.57295,-29.11357],[-56.62789,-29.18073],[-56.81251,-29.48154],[-57.09386,-29.74211],[-57.65132,-30.19229],[-57.61478,-30.25165],[-57.64859,-30.35095],[-57.89115,-30.49572],[-57.8024,-30.77193],[-57.89476,-30.95994],[-57.86729,-31.06352],[-57.9908,-31.34924],[-57.98127,-31.3872],[-58.07569,-31.44916],[-58.0023,-31.53084],[-58.00076,-31.65016],[-58.20252,-31.86966],[-58.10036,-32.25338],[-58.22362,-32.52416],[-58.1224,-32.98842],[-58.40475,-33.11777],[-58.44442,-33.84033],[-58.34425,-34.15035],[-57.83001,-34.69099],[-54.78916,-36.21945],[-63.67376,-55.11859],[-66.07313,-55.19618],[-67.11046,-54.94199],[-67.46182,-54.92205],[-68.01394,-54.8753],[-68.60733,-54.9125],[-68.60702,-52.65781],[-68.41683,-52.33516],[-69.97824,-52.00845],[-71.99889,-51.98018],[-72.33873,-51.59954],[-72.31343,-50.58411]]]]}},{type:"Feature",properties:{iso1A2:"AS",iso1A3:"ASM",iso1N3:"016",wikidata:"Q16641",nameEn:"American Samoa",country:"US",groups:["061","009"],roadSpeedUnit:"mph",callingCodes:["1 684"]},geometry:{type:"MultiPolygon",coordinates:[[[[-174.18596,-12.48057],[-174.17993,-10.13616],[-167.75195,-10.12005],[-167.73854,-14.92809],[-171.14262,-14.93704],[-171.14953,-12.4725],[-174.18596,-12.48057]]]]}},{type:"Feature",properties:{iso1A2:"AT",iso1A3:"AUT",iso1N3:"040",wikidata:"Q40",nameEn:"Austria",groups:["EU","155","150"],callingCodes:["43"]},geometry:{type:"MultiPolygon",coordinates:[[[[15.34823,48.98444],[15.48027,48.94481],[15.51357,48.91549],[15.61622,48.89541],[15.6921,48.85973],[15.75341,48.8516],[15.78087,48.87644],[15.84404,48.86921],[16.06034,48.75436],[16.37345,48.729],[16.40915,48.74576],[16.46134,48.80865],[16.67008,48.77699],[16.68518,48.7281],[16.71883,48.73806],[16.79779,48.70998],[16.90354,48.71541],[16.93955,48.60371],[16.94611,48.53614],[16.85204,48.44968],[16.8497,48.38321],[16.83588,48.3844],[16.83317,48.38138],[16.84243,48.35258],[16.90903,48.32519],[16.89461,48.31332],[16.97701,48.17385],[17.02919,48.13996],[17.05735,48.14179],[17.09168,48.09366],[17.07039,48.0317],[17.16001,48.00636],[17.09786,47.97336],[17.11022,47.92461],[17.08275,47.87719],[17.00997,47.86245],[17.07039,47.81129],[17.05048,47.79377],[17.08893,47.70928],[16.87538,47.68895],[16.86509,47.72268],[16.82938,47.68432],[16.7511,47.67878],[16.72089,47.73469],[16.65679,47.74197],[16.61183,47.76171],[16.54779,47.75074],[16.53514,47.73837],[16.55129,47.72268],[16.4222,47.66537],[16.58699,47.61772],[16.64193,47.63114],[16.71059,47.52692],[16.64821,47.50155],[16.6718,47.46139],[16.57152,47.40868],[16.52414,47.41007],[16.49908,47.39416],[16.45104,47.41181],[16.47782,47.25918],[16.44142,47.25079],[16.43663,47.21127],[16.41739,47.20649],[16.42801,47.18422],[16.4523,47.18812],[16.46442,47.16845],[16.44932,47.14418],[16.52863,47.13974],[16.46134,47.09395],[16.52176,47.05747],[16.43936,47.03548],[16.51369,47.00084],[16.28202,47.00159],[16.27594,46.9643],[16.22403,46.939],[16.19904,46.94134],[16.10983,46.867],[16.05786,46.83927],[15.99054,46.82772],[15.99126,46.78199],[15.98432,46.74991],[15.99769,46.7266],[16.02808,46.71094],[16.04347,46.68694],[16.04036,46.6549],[15.99988,46.67947],[15.98512,46.68463],[15.94864,46.68769],[15.87691,46.7211],[15.8162,46.71897],[15.78518,46.70712],[15.76771,46.69863],[15.73823,46.70011],[15.72279,46.69548],[15.69523,46.69823],[15.67411,46.70735],[15.6543,46.70616],[15.6543,46.69228],[15.6365,46.6894],[15.63255,46.68069],[15.62317,46.67947],[15.59826,46.68908],[15.54533,46.66985],[15.55333,46.64988],[15.54431,46.6312],[15.46906,46.61321],[15.45514,46.63697],[15.41235,46.65556],[15.23711,46.63994],[15.14215,46.66131],[15.01451,46.641],[14.98024,46.6009],[14.96002,46.63459],[14.92283,46.60848],[14.87129,46.61],[14.86419,46.59411],[14.83549,46.56614],[14.81836,46.51046],[14.72185,46.49974],[14.66892,46.44936],[14.5942,46.43434],[14.56463,46.37208],[14.52176,46.42617],[14.45877,46.41717],[14.42608,46.44614],[14.314,46.43327],[14.28326,46.44315],[14.15989,46.43327],[14.12097,46.47724],[14.04002,46.49117],[14.00422,46.48474],[13.89837,46.52331],[13.7148,46.5222],[13.64088,46.53438],[13.27627,46.56059],[12.94445,46.60401],[12.59992,46.6595],[12.38708,46.71529],[12.27591,46.88651],[12.2006,46.88854],[12.11675,47.01241],[12.21781,47.03996],[12.19254,47.09331],[11.74789,46.98484],[11.50739,47.00644],[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.54783,46.84505],[10.47197,46.85698],[10.48376,46.93891],[10.36933,47.00212],[10.30031,46.92093],[10.24128,46.93147],[10.22675,46.86942],[10.10715,46.84296],[9.98058,46.91434],[9.88266,46.93343],[9.87935,47.01337],[9.60717,47.06091],[9.61216,47.07732],[9.63395,47.08443],[9.62623,47.14685],[9.56539,47.17124],[9.58264,47.20673],[9.56981,47.21926],[9.55176,47.22585],[9.56766,47.24281],[9.53116,47.27029],[9.54773,47.2809],[9.55857,47.29919],[9.58513,47.31334],[9.59978,47.34671],[9.62476,47.36639],[9.65427,47.36824],[9.66243,47.37136],[9.6711,47.37824],[9.67445,47.38429],[9.67334,47.39191],[9.6629,47.39591],[9.65136,47.40504],[9.65043,47.41937],[9.6446,47.43233],[9.64483,47.43842],[9.65863,47.44847],[9.65728,47.45383],[9.6423,47.45599],[9.62475,47.45685],[9.62158,47.45858],[9.60841,47.47178],[9.60484,47.46358],[9.60205,47.46165],[9.59482,47.46305],[9.58208,47.48344],[9.56312,47.49495],[9.55125,47.53629],[9.72736,47.53457],[9.76748,47.5934],[9.80254,47.59419],[9.82591,47.58158],[9.8189,47.54688],[9.87499,47.52953],[9.87733,47.54688],[9.92407,47.53111],[9.96029,47.53899],[10.00003,47.48216],[10.03859,47.48927],[10.07131,47.45531],[10.09001,47.46005],[10.1052,47.4316],[10.06897,47.40709],[10.09819,47.35724],[10.11805,47.37228],[10.16362,47.36674],[10.17648,47.38889],[10.2127,47.38019],[10.22774,47.38904],[10.23757,47.37609],[10.19998,47.32832],[10.2147,47.31014],[10.17648,47.29149],[10.17531,47.27167],[10.23257,47.27088],[10.33424,47.30813],[10.39851,47.37623],[10.4324,47.38494],[10.4359,47.41183],[10.47446,47.43318],[10.46278,47.47901],[10.44291,47.48453],[10.4324,47.50111],[10.44992,47.5524],[10.43473,47.58394],[10.47329,47.58552],[10.48849,47.54057],[10.56912,47.53584],[10.60337,47.56755],[10.63456,47.5591],[10.68832,47.55752],[10.6965,47.54253],[10.7596,47.53228],[10.77596,47.51729],[10.88814,47.53701],[10.91268,47.51334],[10.86945,47.5015],[10.87061,47.4786],[10.90918,47.48571],[10.93839,47.48018],[10.92437,47.46991],[10.98513,47.42882],[10.97111,47.41617],[10.97111,47.39561],[11.11835,47.39719],[11.12536,47.41222],[11.20482,47.43198],[11.25157,47.43277],[11.22002,47.3964],[11.27844,47.39956],[11.29597,47.42566],[11.33804,47.44937],[11.4175,47.44621],[11.38128,47.47465],[11.4362,47.51413],[11.52618,47.50939],[11.58578,47.52281],[11.58811,47.55515],[11.60681,47.57881],[11.63934,47.59202],[11.84052,47.58354],[11.85572,47.60166],[12.0088,47.62451],[12.02282,47.61033],[12.05788,47.61742],[12.13734,47.60639],[12.17824,47.61506],[12.18145,47.61019],[12.17737,47.60121],[12.18568,47.6049],[12.20398,47.60667],[12.20801,47.61082],[12.19895,47.64085],[12.18507,47.65984],[12.18347,47.66663],[12.16769,47.68167],[12.16217,47.70105],[12.18303,47.70065],[12.22571,47.71776],[12.2542,47.7433],[12.26238,47.73544],[12.24017,47.69534],[12.26004,47.67725],[12.27991,47.68827],[12.336,47.69534],[12.37222,47.68433],[12.43883,47.6977],[12.44117,47.6741],[12.50076,47.62293],[12.53816,47.63553],[12.57438,47.63238],[12.6071,47.6741],[12.7357,47.6787],[12.77777,47.66689],[12.76492,47.64485],[12.82101,47.61493],[12.77427,47.58025],[12.80699,47.54477],[12.84672,47.54556],[12.85256,47.52741],[12.9624,47.47452],[12.98344,47.48716],[12.9998,47.46267],[13.04537,47.49426],[13.03252,47.53373],[13.05355,47.56291],[13.04537,47.58183],[13.06641,47.58577],[13.06407,47.60075],[13.09562,47.63304],[13.07692,47.68814],[13.01382,47.72116],[12.98578,47.7078],[12.92969,47.71094],[12.91333,47.7178],[12.90274,47.72513],[12.91711,47.74026],[12.9353,47.74788],[12.94371,47.76281],[12.93202,47.77302],[12.96311,47.79957],[12.98543,47.82896],[13.00588,47.84374],[12.94163,47.92927],[12.93886,47.94046],[12.93642,47.94436],[12.93419,47.94063],[12.92668,47.93879],[12.91985,47.94069],[12.9211,47.95135],[12.91683,47.95647],[12.87476,47.96195],[12.8549,48.01122],[12.76141,48.07373],[12.74973,48.10885],[12.7617,48.12796],[12.78595,48.12445],[12.80676,48.14979],[12.82673,48.15245],[12.8362,48.15876],[12.836,48.1647],[12.84475,48.16556],[12.87126,48.20318],[12.95306,48.20629],[13.02083,48.25689],[13.0851,48.27711],[13.126,48.27867],[13.18093,48.29577],[13.26039,48.29422],[13.30897,48.31575],[13.40709,48.37292],[13.43929,48.43386],[13.42527,48.45711],[13.45727,48.51092],[13.43695,48.55776],[13.45214,48.56472],[13.46967,48.55157],[13.50663,48.57506],[13.50131,48.58091],[13.51291,48.59023],[13.57535,48.55912],[13.59705,48.57013],[13.62508,48.55501],[13.65186,48.55092],[13.66113,48.53558],[13.72802,48.51208],[13.74816,48.53058],[13.7513,48.5624],[13.76921,48.55324],[13.80519,48.58026],[13.80038,48.59487],[13.82609,48.62345],[13.81901,48.6761],[13.81283,48.68426],[13.81791,48.69832],[13.79337,48.71375],[13.81863,48.73257],[13.82266,48.75544],[13.84023,48.76988],[14.06151,48.66873],[14.01482,48.63788],[14.09104,48.5943],[14.20691,48.5898],[14.33909,48.55852],[14.43076,48.58855],[14.4587,48.64695],[14.56139,48.60429],[14.60808,48.62881],[14.66762,48.58215],[14.71794,48.59794],[14.72756,48.69502],[14.80584,48.73489],[14.80821,48.77711],[14.81545,48.7874],[14.94773,48.76268],[14.95641,48.75915],[14.9758,48.76857],[14.98112,48.77524],[14.9782,48.7766],[14.98032,48.77959],[14.95072,48.79101],[14.98917,48.90082],[14.97612,48.96983],[14.99878,49.01444],[15.15534,48.99056],[15.16358,48.94278],[15.26177,48.95766],[15.28305,48.98831],[15.34823,48.98444]]]]}},{type:"Feature",properties:{iso1A2:"AU",iso1A3:"AUS",iso1N3:"036",wikidata:"Q408",nameEn:"Australia",groups:["053","009"],driveSide:"left",callingCodes:["61"]},geometry:{type:"MultiPolygon",coordinates:[[[[156.55918,-21.85134],[165.46901,-28.32101],[159.69067,-56.28945],[96.7091,-25.20343],[127.55165,-9.05052],[140.88922,-9.34945],[142.0601,-9.56571],[142.0953,-9.23534],[142.1462,-9.19923],[142.23304,-9.19253],[142.31447,-9.24611],[142.5723,-9.35994],[142.81927,-9.31709],[144.30183,-9.48146],[158.60851,-15.7108],[156.55918,-21.85134]]]]}},{type:"Feature",properties:{iso1A2:"AW",iso1A3:"ABW",iso1N3:"533",wikidata:"Q21203",nameEn:"Aruba",country:"NL",groups:["029","003","419","019"],callingCodes:["297"]},geometry:{type:"MultiPolygon",coordinates:[[[[-70.00823,12.98375],[-69.60231,12.17],[-70.35625,12.58277],[-70.00823,12.98375]]]]}},{type:"Feature",properties:{iso1A2:"AX",iso1A3:"ALA",iso1N3:"248",wikidata:"Q5689",nameEn:"Åland Islands",country:"FI",groups:["EU","154","150"],callingCodes:["358 18","358 457"]},geometry:{type:"MultiPolygon",coordinates:[[[[19.08191,60.19152],[19.23413,60.61414],[20.96741,60.71528],[21.15143,60.54555],[21.08159,60.20167],[21.02509,60.12142],[21.35468,59.67511],[20.5104,59.15546],[19.08191,60.19152]]]]}},{type:"Feature",properties:{iso1A2:"AZ",iso1A3:"AZE",iso1N3:"031",wikidata:"Q227",nameEn:"Azerbaijan",groups:["145","142"],callingCodes:["994"]},geometry:{type:"MultiPolygon",coordinates:[[[[46.42738,41.91323],[46.5332,41.87389],[46.58924,41.80547],[46.75269,41.8623],[46.8134,41.76252],[47.00955,41.63583],[46.99554,41.59743],[47.03757,41.55434],[47.10762,41.59044],[47.34579,41.27884],[47.49004,41.26366],[47.54504,41.20275],[47.62288,41.22969],[47.75831,41.19455],[47.87973,41.21798],[48.07587,41.49957],[48.22064,41.51472],[48.2878,41.56221],[48.40277,41.60441],[48.42301,41.65444],[48.55078,41.77917],[48.5867,41.84306],[48.80971,41.95365],[52.39847,39.43556],[48.88288,38.43975],[48.84969,38.45015],[48.81072,38.44853],[48.78979,38.45026],[48.70001,38.40564],[48.62217,38.40198],[48.58793,38.45076],[48.45084,38.61013],[48.3146,38.59958],[48.24773,38.71883],[48.02581,38.82705],[48.01409,38.90333],[48.07734,38.91616],[48.08627,38.94434],[48.28437,38.97186],[48.33884,39.03022],[48.31239,39.09278],[48.15361,39.19419],[48.12404,39.25208],[48.15984,39.30028],[48.37385,39.37584],[48.34264,39.42935],[47.98977,39.70999],[47.84774,39.66285],[47.50099,39.49615],[47.38978,39.45999],[47.31301,39.37492],[47.05927,39.24846],[47.05771,39.20143],[46.95341,39.13505],[46.92539,39.16644],[46.83822,39.13143],[46.75752,39.03231],[46.53497,38.86548],[46.51805,38.94982],[46.54296,39.07078],[46.44022,39.19636],[46.52584,39.18912],[46.54141,39.15895],[46.58032,39.21204],[46.63481,39.23013],[46.56476,39.24942],[46.50093,39.33736],[46.43244,39.35181],[46.37795,39.42039],[46.4013,39.45405],[46.53051,39.47809],[46.51027,39.52373],[46.57721,39.54414],[46.57098,39.56694],[46.52117,39.58734],[46.42465,39.57534],[46.40286,39.63651],[46.18493,39.60533],[45.96543,39.78859],[45.82533,39.82925],[45.7833,39.9475],[45.60895,39.97733],[45.59806,40.0131],[45.78642,40.03218],[45.83779,39.98925],[45.97944,40.181],[45.95609,40.27846],[45.65098,40.37696],[45.42994,40.53804],[45.45484,40.57707],[45.35366,40.65979],[45.4206,40.7424],[45.55914,40.78366],[45.60584,40.87436],[45.40814,40.97904],[45.44083,41.01663],[45.39725,41.02603],[45.35677,40.99784],[45.28859,41.03757],[45.26162,41.0228],[45.25897,41.0027],[45.1994,41.04518],[45.16493,41.05068],[45.1634,41.08082],[45.1313,41.09369],[45.12923,41.06059],[45.06784,41.05379],[45.08028,41.10917],[45.19942,41.13299],[45.1969,41.168],[45.11811,41.19967],[45.05201,41.19211],[45.02932,41.2101],[45.05497,41.2464],[45.0133,41.29747],[45.09867,41.34065],[45.1797,41.42231],[45.26285,41.46433],[45.31352,41.47168],[45.4006,41.42402],[45.45973,41.45898],[45.68389,41.3539],[45.71035,41.36208],[45.75705,41.35157],[45.69946,41.29545],[45.80842,41.2229],[45.95786,41.17956],[46.13221,41.19479],[46.27698,41.19011],[46.37661,41.10805],[46.456,41.09984],[46.48558,41.0576],[46.55096,41.1104],[46.63969,41.09515],[46.66148,41.20533],[46.72375,41.28609],[46.63658,41.37727],[46.4669,41.43331],[46.40307,41.48464],[46.33925,41.4963],[46.29794,41.5724],[46.34126,41.57454],[46.34039,41.5947],[46.3253,41.60912],[46.28182,41.60089],[46.26531,41.63339],[46.24429,41.59883],[46.19759,41.62327],[46.17891,41.72094],[46.20538,41.77205],[46.23962,41.75811],[46.30863,41.79133],[46.3984,41.84399],[46.42738,41.91323]],[[45.50279,40.58424],[45.56071,40.64765],[45.51825,40.67382],[45.47927,40.65023],[45.50279,40.58424]]],[[[45.00864,41.03411],[44.9903,41.05657],[44.96031,41.06345],[44.95383,41.07553],[44.97169,41.09176],[45.00864,41.09407],[45.03406,41.07931],[45.04517,41.06653],[45.03792,41.03938],[45.00864,41.03411]]],[[[45.21324,40.9817],[45.21219,40.99001],[45.20518,40.99348],[45.19312,40.98998],[45.18382,41.0066],[45.20625,41.01484],[45.23487,41.00226],[45.23095,40.97828],[45.21324,40.9817]]],[[[45.46992,39.49888],[45.70547,39.60174],[45.80804,39.56716],[45.83,39.46487],[45.79225,39.3695],[45.99774,39.28931],[46.02303,39.09978],[46.06973,39.0744],[46.14785,38.84206],[46.06766,38.87861],[46.00228,38.87376],[45.94624,38.89072],[45.90266,38.87739],[45.83883,38.90768],[45.65172,38.95199],[45.6155,38.94304],[45.6131,38.964],[45.44966,38.99243],[45.44811,39.04927],[45.40452,39.07224],[45.40148,39.09007],[45.30489,39.18333],[45.16168,39.21952],[45.08751,39.35052],[45.05932,39.36435],[44.96746,39.42998],[44.88916,39.59653],[44.81043,39.62677],[44.80977,39.65768],[44.75779,39.7148],[44.88354,39.74432],[44.92869,39.72157],[45.06604,39.79277],[45.18554,39.67846],[45.17464,39.58614],[45.21784,39.58074],[45.23535,39.61373],[45.30385,39.61373],[45.29606,39.57654],[45.46992,39.49888]]]]}},{type:"Feature",properties:{iso1A2:"BA",iso1A3:"BIH",iso1N3:"070",wikidata:"Q225",nameEn:"Bosnia and Herzegovina",groups:["039","150"],callingCodes:["387"]},geometry:{type:"MultiPolygon",coordinates:[[[[17.84826,45.04489],[17.87148,45.04645],[17.93706,45.08016],[17.97336,45.12245],[17.97834,45.13831],[17.99479,45.14958],[18.01594,45.15163],[18.03121,45.12632],[18.1624,45.07654],[18.24387,45.13699],[18.32077,45.1021],[18.41896,45.11083],[18.47939,45.05871],[18.65723,45.07544],[18.78357,44.97741],[18.80661,44.93561],[18.76369,44.93707],[18.76347,44.90669],[18.8704,44.85097],[19.01994,44.85493],[19.18183,44.92055],[19.36722,44.88164],[19.32543,44.74058],[19.26388,44.65412],[19.16699,44.52197],[19.13369,44.52521],[19.12278,44.50132],[19.14837,44.45253],[19.14681,44.41463],[19.11785,44.40313],[19.10749,44.39421],[19.10704,44.38249],[19.10365,44.37795],[19.10298,44.36924],[19.11865,44.36712],[19.1083,44.3558],[19.11547,44.34218],[19.13556,44.338],[19.13332,44.31492],[19.16741,44.28648],[19.18328,44.28383],[19.20508,44.2917],[19.23306,44.26097],[19.26945,44.26957],[19.32464,44.27185],[19.34773,44.23244],[19.3588,44.18353],[19.40927,44.16722],[19.43905,44.13088],[19.47338,44.15034],[19.48386,44.14332],[19.47321,44.1193],[19.51167,44.08158],[19.55999,44.06894],[19.57467,44.04716],[19.61991,44.05254],[19.61836,44.01464],[19.56498,43.99922],[19.52515,43.95573],[19.38439,43.96611],[19.24363,44.01502],[19.23465,43.98764],[19.3986,43.79668],[19.5176,43.71403],[19.50455,43.58385],[19.42696,43.57987],[19.41941,43.54056],[19.36653,43.60921],[19.33426,43.58833],[19.2553,43.5938],[19.24774,43.53061],[19.22807,43.5264],[19.15685,43.53943],[19.13933,43.5282],[19.04934,43.50384],[19.01078,43.55806],[18.91379,43.50299],[18.95469,43.49367],[18.96053,43.45042],[19.01078,43.43854],[19.04071,43.397],[19.08673,43.31453],[19.08206,43.29668],[19.04233,43.30008],[19.00844,43.24988],[18.95001,43.29327],[18.95819,43.32899],[18.90911,43.36383],[18.83912,43.34795],[18.84794,43.33735],[18.85342,43.32426],[18.76538,43.29838],[18.6976,43.25243],[18.71747,43.2286],[18.66605,43.2056],[18.64735,43.14766],[18.66254,43.03928],[18.52232,43.01451],[18.49076,42.95553],[18.49661,42.89306],[18.4935,42.86433],[18.47633,42.85829],[18.45921,42.81682],[18.47324,42.74992],[18.56789,42.72074],[18.55221,42.69045],[18.54603,42.69171],[18.54841,42.68328],[18.57373,42.64429],[18.52232,42.62279],[18.55504,42.58409],[18.53751,42.57376],[18.49778,42.58409],[18.43735,42.55921],[18.36197,42.61423],[18.24318,42.6112],[17.88201,42.83668],[17.80854,42.9182],[17.7948,42.89556],[17.68151,42.92725],[17.6444,42.88641],[17.5392,42.92787],[17.70879,42.97223],[17.64268,43.08595],[17.46986,43.16559],[17.286,43.33065],[17.25579,43.40353],[17.29699,43.44542],[17.24411,43.49376],[17.15828,43.49376],[17.00585,43.58037],[16.80736,43.76011],[16.75316,43.77157],[16.70922,43.84887],[16.55472,43.95326],[16.50528,44.0244],[16.43629,44.02826],[16.43662,44.07523],[16.36864,44.08263],[16.18688,44.27012],[16.21346,44.35231],[16.12969,44.38275],[16.16814,44.40679],[16.10566,44.52586],[16.03012,44.55572],[16.00884,44.58605],[16.05828,44.61538],[15.89348,44.74964],[15.8255,44.71501],[15.72584,44.82334],[15.79472,44.8455],[15.76096,44.87045],[15.74723,44.96818],[15.78568,44.97401],[15.74585,45.0638],[15.78842,45.11519],[15.76371,45.16508],[15.83512,45.22459],[15.98412,45.23088],[16.12153,45.09616],[16.29036,44.99732],[16.35404,45.00241],[16.35863,45.03529],[16.3749,45.05206],[16.38219,45.05139],[16.38309,45.05955],[16.40023,45.1147],[16.4634,45.14522],[16.49155,45.21153],[16.52982,45.22713],[16.5501,45.2212],[16.56559,45.22307],[16.60194,45.23042],[16.64962,45.20714],[16.74845,45.20393],[16.78219,45.19002],[16.81137,45.18434],[16.83804,45.18951],[16.92405,45.27607],[16.9385,45.22742],[17.0415,45.20759],[17.18438,45.14764],[17.24325,45.146],[17.25131,45.14957],[17.26815,45.18444],[17.32092,45.16246],[17.33573,45.14521],[17.41229,45.13335],[17.4498,45.16119],[17.45615,45.12523],[17.47589,45.12656],[17.51469,45.10791],[17.59104,45.10816],[17.66571,45.13408],[17.84826,45.04489]]]]}},{type:"Feature",properties:{iso1A2:"BB",iso1A3:"BRB",iso1N3:"052",wikidata:"Q244",nameEn:"Barbados",groups:["029","003","419","019"],driveSide:"left",callingCodes:["1 246"]},geometry:{type:"MultiPolygon",coordinates:[[[[-58.56442,13.24471],[-60.19227,12.37597],[-59.80731,13.87556],[-58.56442,13.24471]]]]}},{type:"Feature",properties:{iso1A2:"BD",iso1A3:"BGD",iso1N3:"050",wikidata:"Q902",nameEn:"Bangladesh",groups:["034","142"],driveSide:"left",callingCodes:["880"]},geometry:{type:"MultiPolygon",coordinates:[[[[89.15869,26.13708],[89.35953,26.0077],[89.53515,26.00382],[89.57101,25.9682],[89.63968,26.22595],[89.70201,26.15138],[89.73581,26.15818],[89.77865,26.08387],[89.77728,26.04254],[89.86592,25.93115],[89.80585,25.82489],[89.84388,25.70042],[89.86129,25.61714],[89.81208,25.37244],[89.84086,25.31854],[89.83371,25.29548],[89.87629,25.28337],[89.90478,25.31038],[90.1155,25.22686],[90.40034,25.1534],[90.65042,25.17788],[90.87427,25.15799],[91.25517,25.20677],[91.63648,25.12846],[92.0316,25.1834],[92.33957,25.07593],[92.39147,25.01471],[92.49887,24.88796],[92.38626,24.86055],[92.25854,24.9191],[92.15796,24.54435],[92.11662,24.38997],[91.96603,24.3799],[91.89258,24.14674],[91.82596,24.22345],[91.76004,24.23848],[91.73257,24.14703],[91.65292,24.22095],[91.63782,24.1132],[91.55542,24.08687],[91.37414,24.10693],[91.35741,23.99072],[91.29587,24.0041],[91.22308,23.89616],[91.25192,23.83463],[91.15579,23.6599],[91.28293,23.37538],[91.36453,23.06612],[91.40848,23.07117],[91.4035,23.27522],[91.46615,23.2328],[91.54993,23.01051],[91.61571,22.93929],[91.7324,23.00043],[91.81634,23.08001],[91.76417,23.26619],[91.84789,23.42235],[91.95642,23.47361],[91.95093,23.73284],[92.04706,23.64229],[92.15417,23.73409],[92.26541,23.70392],[92.38214,23.28705],[92.37665,22.9435],[92.5181,22.71441],[92.60029,22.1522],[92.56616,22.13554],[92.60949,21.97638],[92.62187,21.87037],[92.59775,21.6092],[92.68152,21.28454],[92.60187,21.24615],[92.55105,21.3856],[92.43158,21.37025],[92.37939,21.47764],[92.20087,21.337],[92.17752,21.17445],[92.26071,21.05697],[92.37665,20.72172],[92.28464,20.63179],[92.31348,20.57137],[92.4302,20.5688],[92.39837,20.38919],[89.13606,21.42955],[89.13927,21.60785],[89.03553,21.77397],[89.07114,22.15335],[88.9367,22.58527],[88.94614,22.66941],[88.9151,22.75228],[88.96713,22.83346],[88.87063,22.95235],[88.88327,23.03885],[88.86377,23.08759],[88.99148,23.21134],[88.71133,23.2492],[88.79254,23.46028],[88.79351,23.50535],[88.74841,23.47361],[88.56507,23.64044],[88.58087,23.87105],[88.66189,23.87607],[88.73743,23.91751],[88.6976,24.14703],[88.74841,24.1959],[88.68801,24.31464],[88.50934,24.32474],[88.12296,24.51301],[88.08786,24.63232],[88.00683,24.66477],[88.15515,24.85806],[88.14004,24.93529],[88.21832,24.96642],[88.27325,24.88796],[88.33917,24.86803],[88.46277,25.07468],[88.44766,25.20149],[88.94067,25.18534],[89.00463,25.26583],[89.01105,25.30303],[88.85278,25.34679],[88.81296,25.51546],[88.677,25.46959],[88.4559,25.59227],[88.45103,25.66245],[88.242,25.80811],[88.13138,25.78773],[88.08804,25.91334],[88.16581,26.0238],[88.1844,26.14417],[88.34757,26.22216],[88.35153,26.29123],[88.51649,26.35923],[88.48749,26.45855],[88.36938,26.48683],[88.35153,26.45241],[88.33093,26.48929],[88.41196,26.63837],[88.4298,26.54489],[88.62144,26.46783],[88.69485,26.38353],[88.67837,26.26291],[88.78961,26.31093],[88.85004,26.23211],[89.05328,26.2469],[88.91321,26.37984],[88.92357,26.40711],[88.95612,26.4564],[89.08899,26.38845],[89.15869,26.13708]]]]}},{type:"Feature",properties:{iso1A2:"BE",iso1A3:"BEL",iso1N3:"056",wikidata:"Q31",nameEn:"Belgium",groups:["EU","155","150"],callingCodes:["32"]},geometry:{type:"MultiPolygon",coordinates:[[[[4.93295,51.44945],[4.95244,51.45207],[4.9524,51.45014],[4.93909,51.44632],[4.93295,51.44945]]],[[[4.91493,51.4353],[4.91935,51.43634],[4.92227,51.44252],[4.91811,51.44621],[4.92287,51.44741],[4.92811,51.4437],[4.92566,51.44273],[4.92815,51.43856],[4.92879,51.44161],[4.93544,51.44634],[4.94025,51.44193],[4.93416,51.44185],[4.93471,51.43861],[4.94265,51.44003],[4.93986,51.43064],[4.92952,51.42984],[4.92652,51.43329],[4.91493,51.4353]]],[[[4.82946,51.4213],[4.78314,51.43319],[4.76577,51.43046],[4.77229,51.41337],[4.78941,51.41102],[4.84988,51.41502],[4.90016,51.41404],[4.92152,51.39487],[5.00393,51.44406],[5.0106,51.47167],[5.03281,51.48679],[5.04774,51.47022],[5.07891,51.4715],[5.10456,51.43163],[5.07102,51.39469],[5.13105,51.34791],[5.13377,51.31592],[5.16222,51.31035],[5.2002,51.32243],[5.24244,51.30495],[5.22542,51.26888],[5.23814,51.26064],[5.26461,51.26693],[5.29716,51.26104],[5.33886,51.26314],[5.347,51.27502],[5.41672,51.26248],[5.4407,51.28169],[5.46519,51.2849],[5.48476,51.30053],[5.515,51.29462],[5.5569,51.26544],[5.5603,51.22249],[5.65145,51.19788],[5.65528,51.18736],[5.70344,51.1829],[5.74617,51.18928],[5.77735,51.17845],[5.77697,51.1522],[5.82564,51.16753],[5.85508,51.14445],[5.80798,51.11661],[5.8109,51.10861],[5.83226,51.10585],[5.82921,51.09328],[5.79903,51.09371],[5.79835,51.05834],[5.77258,51.06196],[5.75961,51.03113],[5.77688,51.02483],[5.76242,50.99703],[5.71864,50.96092],[5.72875,50.95428],[5.74752,50.96202],[5.75927,50.95601],[5.74644,50.94723],[5.72545,50.92312],[5.72644,50.91167],[5.71626,50.90796],[5.69858,50.91046],[5.67886,50.88142],[5.64504,50.87107],[5.64009,50.84742],[5.65259,50.82309],[5.70118,50.80764],[5.68995,50.79641],[5.70107,50.7827],[5.68091,50.75804],[5.69469,50.75529],[5.72216,50.76398],[5.73904,50.75674],[5.74356,50.7691],[5.76533,50.78159],[5.77513,50.78308],[5.80673,50.7558],[5.84548,50.76542],[5.84888,50.75448],[5.88734,50.77092],[5.89129,50.75125],[5.89132,50.75124],[5.95942,50.7622],[5.97545,50.75441],[6.01976,50.75398],[6.03889,50.74618],[6.0326,50.72647],[6.0406,50.71848],[6.04428,50.72861],[6.11707,50.72231],[6.17852,50.6245],[6.26957,50.62444],[6.2476,50.60392],[6.24888,50.59869],[6.24005,50.58732],[6.22581,50.5907],[6.20281,50.56952],[6.17739,50.55875],[6.17802,50.54179],[6.19735,50.53576],[6.19579,50.5313],[6.18716,50.52653],[6.19193,50.5212],[6.20599,50.52089],[6.22335,50.49578],[6.26637,50.50272],[6.30809,50.50058],[6.3465,50.48833],[6.34005,50.46083],[6.37219,50.45397],[6.36852,50.40776],[6.34406,50.37994],[6.3688,50.35898],[6.40785,50.33557],[6.40641,50.32425],[6.35701,50.31139],[6.32488,50.32333],[6.29949,50.30887],[6.28797,50.27458],[6.208,50.25179],[6.16853,50.2234],[6.18364,50.20815],[6.18739,50.1822],[6.14588,50.17106],[6.14132,50.14971],[6.15298,50.14126],[6.1379,50.12964],[6.1137,50.13668],[6.12028,50.16374],[6.08577,50.17246],[6.06406,50.15344],[6.03093,50.16362],[6.02488,50.18283],[5.96453,50.17259],[5.95929,50.13295],[5.89488,50.11476],[5.8857,50.07824],[5.85474,50.06342],[5.86904,50.04614],[5.8551,50.02683],[5.81866,50.01286],[5.82331,49.99662],[5.83968,49.9892],[5.83467,49.97823],[5.81163,49.97142],[5.80833,49.96451],[5.77291,49.96056],[5.77314,49.93646],[5.73621,49.89796],[5.78415,49.87922],[5.75269,49.8711],[5.75861,49.85631],[5.74567,49.85368],[5.75884,49.84811],[5.74953,49.84709],[5.74975,49.83933],[5.74076,49.83823],[5.7404,49.83452],[5.74844,49.82435],[5.74364,49.82058],[5.74953,49.81428],[5.75409,49.79239],[5.78871,49.7962],[5.82245,49.75048],[5.83149,49.74729],[5.82562,49.72395],[5.84193,49.72161],[5.86503,49.72739],[5.88677,49.70951],[5.86527,49.69291],[5.86175,49.67862],[5.9069,49.66377],[5.90164,49.6511],[5.90599,49.63853],[5.88552,49.63507],[5.88393,49.62802],[5.87609,49.62047],[5.8762,49.60898],[5.84826,49.5969],[5.84971,49.58674],[5.86986,49.58756],[5.87256,49.57539],[5.8424,49.56082],[5.84692,49.55663],[5.84143,49.5533],[5.81838,49.54777],[5.79195,49.55228],[5.77435,49.56298],[5.7577,49.55915],[5.75649,49.54321],[5.64505,49.55146],[5.60909,49.51228],[5.55001,49.52729],[5.46541,49.49825],[5.46734,49.52648],[5.43713,49.5707],[5.3974,49.61596],[5.34837,49.62889],[5.33851,49.61599],[5.3137,49.61225],[5.30214,49.63055],[5.33039,49.6555],[5.31465,49.66846],[5.26232,49.69456],[5.14545,49.70287],[5.09249,49.76193],[4.96714,49.79872],[4.85464,49.78995],[4.86965,49.82271],[4.85134,49.86457],[4.88529,49.9236],[4.78827,49.95609],[4.8382,50.06738],[4.88602,50.15182],[4.83279,50.15331],[4.82438,50.16878],[4.75237,50.11314],[4.70064,50.09384],[4.68695,49.99685],[4.5414,49.96911],[4.51098,49.94659],[4.43488,49.94122],[4.35051,49.95315],[4.31963,49.97043],[4.20532,49.95803],[4.14239,49.98034],[4.13508,50.01976],[4.16294,50.04719],[4.23101,50.06945],[4.20147,50.13535],[4.13561,50.13078],[4.16014,50.19239],[4.15524,50.21103],[4.21945,50.25539],[4.20651,50.27333],[4.17861,50.27443],[4.17347,50.28838],[4.15524,50.2833],[4.16808,50.25786],[4.13665,50.25609],[4.11954,50.30425],[4.10957,50.30234],[4.10237,50.31247],[4.0689,50.3254],[4.0268,50.35793],[3.96771,50.34989],[3.90781,50.32814],[3.84314,50.35219],[3.73911,50.34809],[3.70987,50.3191],[3.71009,50.30305],[3.66976,50.34563],[3.65709,50.36873],[3.67262,50.38663],[3.67494,50.40239],[3.66153,50.45165],[3.64426,50.46275],[3.61014,50.49568],[3.58361,50.49049],[3.5683,50.50192],[3.49509,50.48885],[3.51564,50.5256],[3.47385,50.53397],[3.44629,50.51009],[3.37693,50.49538],[3.28575,50.52724],[3.2729,50.60718],[3.23951,50.6585],[3.264,50.67668],[3.2536,50.68977],[3.26141,50.69151],[3.26063,50.70086],[3.24593,50.71389],[3.22042,50.71019],[3.20845,50.71662],[3.19017,50.72569],[3.20064,50.73547],[3.18811,50.74025],[3.18339,50.74981],[3.16476,50.76843],[3.15017,50.79031],[3.1257,50.78603],[3.11987,50.79188],[3.11206,50.79416],[3.10614,50.78303],[3.09163,50.77717],[3.04314,50.77674],[3.00537,50.76588],[2.96778,50.75242],[2.95019,50.75138],[2.90873,50.702],[2.91036,50.6939],[2.90069,50.69263],[2.88504,50.70656],[2.87937,50.70298],[2.86985,50.7033],[2.8483,50.72276],[2.81056,50.71773],[2.71165,50.81295],[2.63331,50.81457],[2.59093,50.91751],[2.63074,50.94746],[2.57551,51.00326],[2.55904,51.07014],[2.18458,51.52087],[2.56575,51.85301],[3.36263,51.37112],[3.38696,51.33436],[3.35847,51.31572],[3.38289,51.27331],[3.41704,51.25933],[3.43488,51.24135],[3.52698,51.2458],[3.51502,51.28697],[3.58939,51.30064],[3.78999,51.25766],[3.78783,51.2151],[3.90125,51.20371],[3.97889,51.22537],[4.01957,51.24504],[4.05165,51.24171],[4.16721,51.29348],[4.24024,51.35371],[4.21923,51.37443],[4.33265,51.37687],[4.34086,51.35738],[4.39292,51.35547],[4.43777,51.36989],[4.38064,51.41965],[4.39747,51.43316],[4.38122,51.44905],[4.47736,51.4778],[4.5388,51.48184],[4.54675,51.47265],[4.52846,51.45002],[4.53521,51.4243],[4.57489,51.4324],[4.65442,51.42352],[4.72935,51.48424],[4.74578,51.48937],[4.77321,51.50529],[4.78803,51.50284],[4.84139,51.4799],[4.82409,51.44736],[4.82946,51.4213]]]]}},{type:"Feature",properties:{iso1A2:"BF",iso1A3:"BFA",iso1N3:"854",wikidata:"Q965",nameEn:"Burkina Faso",groups:["011","202","002"],callingCodes:["226"]},geometry:{type:"MultiPolygon",coordinates:[[[[0.23859,15.00135],[0.16936,14.51654],[0.38051,14.05575],[0.61924,13.68491],[0.77377,13.6866],[0.77637,13.64442],[0.99514,13.5668],[1.02813,13.46635],[1.20088,13.38951],[1.24429,13.39373],[1.28509,13.35488],[1.24516,13.33968],[1.21217,13.37853],[1.18873,13.31771],[0.99253,13.37515],[0.99167,13.10727],[2.26349,12.41915],[2.05785,12.35539],[2.39723,11.89473],[2.29983,11.68254],[2.00988,11.42227],[1.42823,11.46822],[1.03409,11.04719],[0.9813,11.08876],[0.91245,10.99597],[0.66104,10.99964],[0.4958,10.93269],[0.50521,10.98035],[0.48852,10.98561],[0.50388,11.01011],[-0.13493,11.14075],[-0.27374,11.17157],[-0.28566,11.12713],[-0.35955,11.07801],[-0.38219,11.12596],[-0.42391,11.11661],[-0.44298,11.04292],[-0.61937,10.91305],[-0.67143,10.99811],[-2.83373,11.0067],[-2.94232,10.64281],[-2.83108,10.40252],[-2.74174,9.83172],[-2.76534,9.56589],[-2.68802,9.49343],[-2.76494,9.40778],[-2.93012,9.57403],[-3.00765,9.74019],[-3.16609,9.85147],[-3.19306,9.93781],[-3.27228,9.84981],[-3.31779,9.91125],[-3.69703,9.94279],[-4.25999,9.76012],[-4.31392,9.60062],[-4.6426,9.70696],[-4.96621,9.89132],[-4.96453,9.99923],[-5.12465,10.29788],[-5.39602,10.2929],[-5.51058,10.43177],[-5.46643,10.56074],[-5.47083,10.75329],[-5.41579,10.84628],[-5.49284,11.07538],[-5.32994,11.13371],[-5.32553,11.21578],[-5.25949,11.24816],[-5.25509,11.36905],[-5.20665,11.43811],[-5.22867,11.60421],[-5.29251,11.61715],[-5.26389,11.75728],[-5.40258,11.8327],[-5.26389,11.84778],[-5.07897,11.97918],[-4.72893,12.01579],[-4.70692,12.06746],[-4.62987,12.06531],[-4.62546,12.13204],[-4.54841,12.1385],[-4.57703,12.19875],[-4.41412,12.31922],[-4.47356,12.71252],[-4.238,12.71467],[-4.21819,12.95722],[-4.34477,13.12927],[-3.96501,13.49778],[-3.90558,13.44375],[-3.96282,13.38164],[-3.7911,13.36665],[-3.54454,13.1781],[-3.4313,13.1588],[-3.43507,13.27272],[-3.23599,13.29035],[-3.28396,13.5422],[-3.26407,13.70699],[-2.88189,13.64921],[-2.90831,13.81174],[-2.84667,14.05532],[-2.66175,14.14713],[-2.47587,14.29671],[-2.10223,14.14878],[-1.9992,14.19011],[-1.97945,14.47709],[-1.68083,14.50023],[-1.32166,14.72774],[-1.05875,14.7921],[-0.72004,15.08655],[-0.24673,15.07805],[0.06588,14.96961],[0.23859,15.00135]]]]}},{type:"Feature",properties:{iso1A2:"BG",iso1A3:"BGR",iso1N3:"100",wikidata:"Q219",nameEn:"Bulgaria",groups:["EU","151","150"],callingCodes:["359"]},geometry:{type:"MultiPolygon",coordinates:[[[[23.05288,43.79494],[23.26772,43.84843],[23.4507,43.84936],[23.61687,43.79289],[23.73978,43.80627],[24.18149,43.68218],[24.35364,43.70211],[24.50264,43.76314],[24.62281,43.74082],[24.73542,43.68523],[24.96682,43.72693],[25.10718,43.6831],[25.17144,43.70261],[25.39528,43.61866],[25.72792,43.69263],[25.94911,43.85745],[26.05584,43.90925],[26.10115,43.96908],[26.38764,44.04356],[26.62712,44.05698],[26.95141,44.13555],[27.26845,44.12602],[27.39757,44.0141],[27.60834,44.01206],[27.64542,44.04958],[27.73468,43.95326],[27.92008,44.00761],[27.99558,43.84193],[28.23293,43.76],[29.24336,43.70874],[28.32297,41.98371],[28.02971,41.98066],[27.91479,41.97902],[27.83492,41.99709],[27.81235,41.94803],[27.69949,41.97515],[27.55191,41.90928],[27.52379,41.93756],[27.45478,41.96591],[27.27411,42.10409],[27.22376,42.10152],[27.19251,42.06028],[27.08486,42.08735],[27.03277,42.0809],[26.95638,42.00741],[26.79143,41.97386],[26.62996,41.97644],[26.56051,41.92995],[26.57961,41.90024],[26.53968,41.82653],[26.36952,41.82265],[26.33589,41.76802],[26.32952,41.73637],[26.35957,41.71149],[26.30255,41.70925],[26.2654,41.71544],[26.22888,41.74139],[26.21325,41.73223],[26.16841,41.74858],[26.06148,41.70345],[26.07083,41.64584],[26.15146,41.60828],[26.14328,41.55496],[26.17951,41.55409],[26.176,41.50072],[26.14796,41.47533],[26.20288,41.43943],[26.16548,41.42278],[26.12926,41.35878],[25.87919,41.30526],[25.8266,41.34563],[25.70507,41.29209],[25.66183,41.31316],[25.61042,41.30614],[25.55082,41.31667],[25.52394,41.2798],[25.48187,41.28506],[25.28322,41.23411],[25.11611,41.34212],[24.942,41.38685],[24.90928,41.40876],[24.86136,41.39298],[24.82514,41.4035],[24.8041,41.34913],[24.71529,41.41928],[24.61129,41.42278],[24.52599,41.56808],[24.30513,41.51297],[24.27124,41.57682],[24.18126,41.51735],[24.10063,41.54796],[24.06323,41.53222],[24.06908,41.46132],[23.96975,41.44118],[23.91483,41.47971],[23.89613,41.45257],[23.80148,41.43943],[23.76525,41.40175],[23.67644,41.41139],[23.63203,41.37632],[23.52453,41.40262],[23.40416,41.39999],[23.33639,41.36317],[23.31301,41.40525],[23.22771,41.37106],[23.21953,41.33773],[23.1833,41.31755],[22.93334,41.34104],[22.96331,41.35782],[22.95513,41.63265],[23.03342,41.71034],[23.01239,41.76527],[22.96682,41.77137],[22.90254,41.87587],[22.86749,42.02275],[22.67701,42.06614],[22.51224,42.15457],[22.50289,42.19527],[22.47251,42.20393],[22.38136,42.30339],[22.34773,42.31725],[22.45919,42.33822],[22.47498,42.3915],[22.51961,42.3991],[22.55669,42.50144],[22.43983,42.56851],[22.4997,42.74144],[22.43309,42.82057],[22.54302,42.87774],[22.74826,42.88701],[22.78397,42.98253],[22.89521,43.03625],[22.98104,43.11199],[23.00806,43.19279],[22.89727,43.22417],[22.82036,43.33665],[22.53397,43.47225],[22.47582,43.6558],[22.41043,43.69566],[22.35558,43.81281],[22.41449,44.00514],[22.61688,44.06534],[22.61711,44.16938],[22.67173,44.21564],[23.04988,44.07694],[23.01674,44.01946],[22.87873,43.9844],[22.83753,43.88055],[22.85314,43.84452],[23.05288,43.79494]]]]}},{type:"Feature",properties:{iso1A2:"BH",iso1A3:"BHR",iso1N3:"048",wikidata:"Q398",nameEn:"Bahrain",groups:["145","142"],callingCodes:["973"]},geometry:{type:"MultiPolygon",coordinates:[[[[50.93865,26.30758],[50.81266,25.88946],[50.86149,25.6965],[50.7801,25.595],[50.80824,25.54641],[50.57069,25.57887],[50.302,25.87592],[50.26923,26.08243],[50.38162,26.53976],[50.71771,26.73086],[50.93865,26.30758]]]]}},{type:"Feature",properties:{iso1A2:"BI",iso1A3:"BDI",iso1N3:"108",wikidata:"Q967",nameEn:"Burundi",groups:["014","202","002"],callingCodes:["257"]},geometry:{type:"MultiPolygon",coordinates:[[[[30.54501,-2.41404],[30.41789,-2.66266],[30.52747,-2.65841],[30.40662,-2.86151],[30.4987,-2.9573],[30.57926,-2.89791],[30.6675,-2.98987],[30.83823,-2.97837],[30.84165,-3.25152],[30.45915,-3.56532],[30.22042,-4.01738],[30.03323,-4.26631],[29.88172,-4.35743],[29.82885,-4.36153],[29.77289,-4.41733],[29.75109,-4.45836],[29.63827,-4.44681],[29.43673,-4.44845],[29.23708,-3.75856],[29.21463,-3.3514],[29.25633,-3.05471],[29.17258,-2.99385],[29.16037,-2.95457],[29.09797,-2.91935],[29.09119,-2.87871],[29.0505,-2.81774],[29.00404,-2.81978],[29.00167,-2.78523],[29.04081,-2.7416],[29.0562,-2.58632],[29.32234,-2.6483],[29.36805,-2.82933],[29.88237,-2.75105],[29.95911,-2.33348],[30.14034,-2.43626],[30.42933,-2.31064],[30.54501,-2.41404]]]]}},{type:"Feature",properties:{iso1A2:"BJ",iso1A3:"BEN",iso1N3:"204",wikidata:"Q962",nameEn:"Benin",aliases:["DY"],groups:["011","202","002"],callingCodes:["229"]},geometry:{type:"MultiPolygon",coordinates:[[[[3.59375,11.70269],[3.49175,11.29765],[3.71505,11.13015],[3.84243,10.59316],[3.78292,10.40538],[3.6844,10.46351],[3.57275,10.27185],[3.66908,10.18136],[3.54429,9.87739],[3.35383,9.83641],[3.32099,9.78032],[3.34726,9.70696],[3.25093,9.61632],[3.13928,9.47167],[3.14147,9.28375],[3.08017,9.10006],[2.77907,9.06924],[2.67523,7.87825],[2.73095,7.7755],[2.73405,7.5423],[2.78668,7.5116],[2.79442,7.43486],[2.74489,7.42565],[2.76965,7.13543],[2.71702,6.95722],[2.74024,6.92802],[2.73405,6.78508],[2.78823,6.76356],[2.78204,6.70514],[2.7325,6.64057],[2.74334,6.57291],[2.70464,6.50831],[2.70566,6.38038],[2.74181,6.13349],[1.67336,6.02702],[1.62913,6.24075],[1.79826,6.28221],[1.76906,6.43189],[1.58105,6.68619],[1.61812,6.74843],[1.55877,6.99737],[1.64249,6.99562],[1.61838,9.0527],[1.5649,9.16941],[1.41746,9.3226],[1.33675,9.54765],[1.36624,9.5951],[1.35507,9.99525],[0.77666,10.37665],[0.80358,10.71459],[0.8804,10.803],[0.91245,10.99597],[0.9813,11.08876],[1.03409,11.04719],[1.42823,11.46822],[2.00988,11.42227],[2.29983,11.68254],[2.39723,11.89473],[2.45824,11.98672],[2.39657,12.10952],[2.37783,12.24804],[2.6593,12.30631],[2.83978,12.40585],[3.25352,12.01467],[3.31613,11.88495],[3.48187,11.86092],[3.59375,11.70269]]]]}},{type:"Feature",properties:{iso1A2:"BL",iso1A3:"BLM",iso1N3:"652",wikidata:"Q25362",nameEn:"Saint-Barthélemy",country:"FR",groups:["029","003","419","019"],callingCodes:["590"]},geometry:{type:"MultiPolygon",coordinates:[[[[-62.75637,18.13489],[-62.54836,17.8636],[-62.76692,17.64353],[-63.07669,17.79659],[-62.93924,18.02904],[-62.75637,18.13489]]]]}},{type:"Feature",properties:{iso1A2:"BM",iso1A3:"BMU",iso1N3:"060",wikidata:"Q23635",nameEn:"Bermuda",country:"GB",groups:["021","003","019"],driveSide:"left",callingCodes:["1 441"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.20987,32.6953],[-65.63955,31.43417],[-65.31453,32.68437],[-63.20987,32.6953]]]]}},{type:"Feature",properties:{iso1A2:"BN",iso1A3:"BRN",iso1N3:"096",wikidata:"Q921",nameEn:"Brunei",groups:["035","142"],driveSide:"left",callingCodes:["673"]},geometry:{type:"MultiPolygon",coordinates:[[[[115.16236,5.01011],[115.15092,4.87604],[115.20737,4.8256],[115.27819,4.63661],[115.2851,4.42295],[115.36346,4.33563],[115.31275,4.30806],[115.09978,4.39123],[115.07737,4.53418],[115.04064,4.63706],[115.02278,4.74137],[115.02955,4.82087],[115.05038,4.90275],[114.99417,4.88201],[114.96982,4.81146],[114.88841,4.81905],[114.8266,4.75062],[114.77303,4.72871],[114.83189,4.42387],[114.88039,4.4257],[114.78539,4.12205],[114.64211,4.00694],[114.49922,4.13108],[114.4416,4.27588],[114.32176,4.2552],[114.32176,4.34942],[114.26876,4.49878],[114.15813,4.57],[114.07448,4.58441],[114.08532,4.64632],[115.02521,5.35005],[115.16236,5.01011]]]]}},{type:"Feature",properties:{iso1A2:"BO",iso1A3:"BOL",iso1N3:"068",wikidata:"Q750",nameEn:"Bolivia",groups:["005","419","019"],callingCodes:["591"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.90248,-12.52544],[-63.76259,-12.42952],[-61.81151,-13.49564],[-61.05527,-13.50054],[-60.48053,-13.77981],[-60.46037,-14.22496],[-60.27887,-14.63021],[-60.23968,-15.09515],[-60.58224,-15.09887],[-60.23797,-15.50267],[-60.16069,-16.26479],[-58.41506,-16.32636],[-58.32431,-16.25861],[-58.30918,-16.3699],[-58.5058,-16.80958],[-58.32935,-17.28195],[-57.99661,-17.5273],[-57.90082,-17.44555],[-57.73949,-17.56095],[-57.69877,-17.8431],[-57.48237,-18.24219],[-57.56807,-18.25655],[-57.76764,-18.90087],[-57.71995,-18.89573],[-57.71995,-18.97546],[-57.69134,-19.00544],[-57.71113,-19.03161],[-57.78463,-19.03259],[-58.14215,-19.76276],[-57.8496,-19.98346],[-58.16225,-20.16193],[-58.23216,-19.80058],[-59.06965,-19.29148],[-60.00638,-19.2981],[-61.73723,-19.63958],[-61.93912,-20.10053],[-62.26883,-20.55311],[-62.2757,-21.06657],[-62.64455,-22.25091],[-62.8078,-22.12534],[-62.81124,-21.9987],[-63.66482,-21.99918],[-63.68113,-22.0544],[-63.70963,-21.99934],[-63.93287,-21.99934],[-64.22918,-22.55807],[-64.31489,-22.88824],[-64.35108,-22.73282],[-64.4176,-22.67692],[-64.58888,-22.25035],[-64.67174,-22.18957],[-64.90014,-22.12136],[-64.99524,-22.08255],[-65.47435,-22.08908],[-65.57743,-22.07675],[-65.58694,-22.09794],[-65.61166,-22.09504],[-65.7467,-22.10105],[-65.9261,-21.93335],[-66.04832,-21.9187],[-66.03836,-21.84829],[-66.24077,-21.77837],[-66.29714,-22.08741],[-66.7298,-22.23644],[-67.18382,-22.81525],[-67.54284,-22.89771],[-67.85114,-22.87076],[-68.18816,-21.28614],[-68.40403,-20.94562],[-68.53957,-20.91542],[-68.55383,-20.7355],[-68.44023,-20.62701],[-68.7276,-20.46178],[-68.74273,-20.08817],[-68.57132,-20.03134],[-68.54611,-19.84651],[-68.66761,-19.72118],[-68.41218,-19.40499],[-68.61989,-19.27584],[-68.80602,-19.08355],[-68.87082,-19.06003],[-68.94987,-18.93302],[-69.07432,-18.28259],[-69.14807,-18.16893],[-69.07496,-18.03715],[-69.28671,-17.94844],[-69.34126,-17.72753],[-69.46623,-17.60518],[-69.46897,-17.4988],[-69.46863,-17.37466],[-69.62883,-17.28142],[-69.16896,-16.72233],[-69.00853,-16.66769],[-69.04027,-16.57214],[-68.98358,-16.42165],[-68.79464,-16.33272],[-68.96238,-16.194],[-69.09986,-16.22693],[-69.20291,-16.16668],[-69.40336,-15.61358],[-69.14856,-15.23478],[-69.36254,-14.94634],[-68.88135,-14.18639],[-69.05265,-13.68546],[-68.8864,-13.40792],[-68.85615,-12.87769],[-68.65044,-12.50689],[-68.98115,-11.8979],[-69.57156,-10.94555],[-69.47839,-10.95254],[-69.42792,-10.93451],[-68.74802,-11.00891],[-68.75265,-11.02383],[-68.75179,-11.03688],[-68.7651,-11.0496],[-68.71533,-11.14749],[-67.17784,-10.34016],[-65.68343,-9.75323],[-65.56244,-9.84266],[-65.40615,-9.63894],[-65.29019,-9.86253],[-65.37923,-10.35141],[-65.35402,-10.78685],[-65.28141,-10.86289],[-65.30027,-11.48749],[-64.99778,-11.98604],[-64.30708,-12.46398],[-64.22539,-12.45267],[-63.90248,-12.52544]]]]}},{type:"Feature",properties:{iso1A2:"BQ",iso1A3:"BES",iso1N3:"535",wikidata:"Q27561",nameEn:"Caribbean Netherlands",country:"NL",groups:["029","003","419","019"],callingCodes:["599 3","599 4","599 7"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.07669,17.79659],[-63.22932,17.32592],[-63.11114,17.23125],[-62.76692,17.64353],[-63.07669,17.79659]]],[[[-63.29212,17.90532],[-63.07669,17.79659],[-63.22932,17.32592],[-63.58819,17.61311],[-63.29212,17.90532]]],[[[-67.89186,12.4116],[-68.01417,11.77722],[-68.33524,11.78151],[-68.90012,12.62309],[-67.89186,12.4116]]]]}},{type:"Feature",properties:{iso1A2:"BR",iso1A3:"BRA",iso1N3:"076",wikidata:"Q155",nameEn:"Brazil",groups:["005","419","019"],callingCodes:["55"]},geometry:{type:"MultiPolygon",coordinates:[[[[-59.69361,4.34069],[-59.73353,4.20399],[-59.51963,3.91951],[-59.86899,3.57089],[-59.79769,3.37162],[-59.99733,2.92312],[-59.91177,2.36759],[-59.7264,2.27497],[-59.74066,1.87596],[-59.25583,1.40559],[-58.92072,1.31293],[-58.84229,1.17749],[-58.53571,1.29154],[-58.4858,1.48399],[-58.33887,1.58014],[-58.01873,1.51966],[-57.97336,1.64566],[-57.77281,1.73344],[-57.55743,1.69605],[-57.35073,1.98327],[-57.23981,1.95808],[-57.09109,2.01854],[-57.07092,1.95304],[-56.7659,1.89509],[-56.47045,1.95135],[-55.99278,1.83137],[-55.89863,1.89861],[-55.92159,2.05236],[-56.13054,2.27723],[-55.96292,2.53188],[-55.71493,2.40342],[-55.01919,2.564],[-54.6084,2.32856],[-54.16286,2.10779],[-53.78743,2.34412],[-52.96539,2.1881],[-52.6906,2.37298],[-52.31787,3.17896],[-51.85573,3.83427],[-51.82312,3.85825],[-51.79599,3.89336],[-51.61983,4.14596],[-51.63798,4.51394],[-51.35485,4.8383],[-28.99601,1.86593],[-28.34015,-20.99094],[-52.83257,-34.01481],[-53.37138,-33.74313],[-53.39593,-33.75169],[-53.44031,-33.69344],[-53.52794,-33.68908],[-53.53459,-33.16843],[-53.1111,-32.71147],[-53.37671,-32.57005],[-53.39572,-32.58596],[-53.76024,-32.0751],[-54.17384,-31.86168],[-55.50821,-30.91349],[-55.50841,-30.9027],[-55.51862,-30.89828],[-55.52712,-30.89997],[-55.53276,-30.90218],[-55.53431,-30.89714],[-55.54572,-30.89051],[-55.55218,-30.88193],[-55.55373,-30.8732],[-55.5634,-30.8686],[-55.58866,-30.84117],[-55.87388,-31.05053],[-56.4619,-30.38457],[-56.4795,-30.3899],[-56.49267,-30.39471],[-56.90236,-30.02578],[-57.22502,-30.26121],[-57.65132,-30.19229],[-57.09386,-29.74211],[-56.81251,-29.48154],[-56.62789,-29.18073],[-56.57295,-29.11357],[-56.54171,-29.11447],[-56.05265,-28.62651],[-56.00458,-28.60421],[-56.01729,-28.51223],[-55.65418,-28.18304],[-55.6262,-28.17124],[-55.33303,-27.94661],[-55.16872,-27.86224],[-55.1349,-27.89759],[-54.90805,-27.73149],[-54.90159,-27.63132],[-54.67657,-27.57214],[-54.50416,-27.48232],[-54.41888,-27.40882],[-54.19268,-27.30751],[-54.19062,-27.27639],[-54.15978,-27.2889],[-53.80144,-27.09844],[-53.73372,-26.6131],[-53.68269,-26.33359],[-53.64505,-26.28089],[-53.64186,-26.25976],[-53.64632,-26.24798],[-53.63881,-26.25075],[-53.63739,-26.2496],[-53.65237,-26.23289],[-53.65018,-26.19501],[-53.73968,-26.10012],[-53.73391,-26.07006],[-53.7264,-26.0664],[-53.73086,-26.05842],[-53.73511,-26.04211],[-53.83691,-25.94849],[-53.90831,-25.55513],[-54.52926,-25.62846],[-54.5502,-25.58915],[-54.59398,-25.59224],[-54.59509,-25.53696],[-54.60196,-25.48397],[-54.62033,-25.46026],[-54.4423,-25.13381],[-54.28207,-24.07305],[-54.32807,-24.01865],[-54.6238,-23.83078],[-55.02691,-23.97317],[-55.0518,-23.98666],[-55.12292,-23.99669],[-55.41784,-23.9657],[-55.44117,-23.9185],[-55.43585,-23.87157],[-55.5555,-23.28237],[-55.52288,-23.2595],[-55.5446,-23.22811],[-55.63849,-22.95122],[-55.62493,-22.62765],[-55.68742,-22.58407],[-55.6986,-22.56268],[-55.72366,-22.5519],[-55.741,-22.52018],[-55.74941,-22.46436],[-55.8331,-22.29008],[-56.23206,-22.25347],[-56.45893,-22.08072],[-56.5212,-22.11556],[-56.6508,-22.28387],[-57.98625,-22.09157],[-57.94642,-21.73799],[-57.88239,-21.6868],[-57.93492,-21.65505],[-57.84536,-20.93155],[-58.16225,-20.16193],[-57.8496,-19.98346],[-58.14215,-19.76276],[-57.78463,-19.03259],[-57.71113,-19.03161],[-57.69134,-19.00544],[-57.71995,-18.97546],[-57.71995,-18.89573],[-57.76764,-18.90087],[-57.56807,-18.25655],[-57.48237,-18.24219],[-57.69877,-17.8431],[-57.73949,-17.56095],[-57.90082,-17.44555],[-57.99661,-17.5273],[-58.32935,-17.28195],[-58.5058,-16.80958],[-58.30918,-16.3699],[-58.32431,-16.25861],[-58.41506,-16.32636],[-60.16069,-16.26479],[-60.23797,-15.50267],[-60.58224,-15.09887],[-60.23968,-15.09515],[-60.27887,-14.63021],[-60.46037,-14.22496],[-60.48053,-13.77981],[-61.05527,-13.50054],[-61.81151,-13.49564],[-63.76259,-12.42952],[-63.90248,-12.52544],[-64.22539,-12.45267],[-64.30708,-12.46398],[-64.99778,-11.98604],[-65.30027,-11.48749],[-65.28141,-10.86289],[-65.35402,-10.78685],[-65.37923,-10.35141],[-65.29019,-9.86253],[-65.40615,-9.63894],[-65.56244,-9.84266],[-65.68343,-9.75323],[-67.17784,-10.34016],[-68.71533,-11.14749],[-68.7651,-11.0496],[-68.75179,-11.03688],[-68.75265,-11.02383],[-68.74802,-11.00891],[-69.42792,-10.93451],[-69.47839,-10.95254],[-69.57156,-10.94555],[-69.57835,-10.94051],[-69.90896,-10.92744],[-70.38791,-11.07096],[-70.51395,-10.92249],[-70.64134,-11.0108],[-70.62487,-9.80666],[-70.55429,-9.76692],[-70.58453,-9.58303],[-70.53373,-9.42628],[-71.23394,-9.9668],[-72.14742,-9.98049],[-72.31883,-9.5184],[-72.72216,-9.41397],[-73.21498,-9.40904],[-72.92886,-9.04074],[-73.76576,-7.89884],[-73.65485,-7.77897],[-73.96938,-7.58465],[-73.77011,-7.28944],[-73.73986,-6.87919],[-73.12983,-6.43852],[-73.24579,-6.05764],[-72.83973,-5.14765],[-72.64391,-5.0391],[-71.87003,-4.51661],[-70.96814,-4.36915],[-70.77601,-4.15717],[-70.33236,-4.15214],[-70.19582,-4.3607],[-70.11305,-4.27281],[-70.00888,-4.37833],[-69.94708,-4.2431],[-69.43395,-1.42219],[-69.4215,-1.01853],[-69.59796,-0.75136],[-69.603,-0.51947],[-70.03658,-0.19681],[-70.04162,0.55437],[-69.47696,0.71065],[-69.20976,0.57958],[-69.14422,0.84172],[-69.26017,1.06856],[-69.82987,1.07864],[-69.83491,1.69353],[-69.53746,1.76408],[-69.38621,1.70865],[-68.18128,1.72881],[-68.26699,1.83463],[-68.18632,2.00091],[-67.9292,1.82455],[-67.40488,2.22258],[-67.299,1.87494],[-67.15784,1.80439],[-67.08222,1.17441],[-66.85795,1.22998],[-66.28507,0.74585],[-65.6727,1.01353],[-65.50158,0.92086],[-65.57288,0.62856],[-65.11657,1.12046],[-64.38932,1.5125],[-64.34654,1.35569],[-64.08274,1.64792],[-64.06135,1.94722],[-63.39827,2.16098],[-63.39114,2.4317],[-64.0257,2.48156],[-64.02908,2.79797],[-64.48379,3.7879],[-64.84028,4.24665],[-64.72977,4.28931],[-64.57648,4.12576],[-64.14512,4.12932],[-63.99183,3.90172],[-63.86082,3.94796],[-63.70218,3.91417],[-63.67099,4.01731],[-63.50611,3.83592],[-63.42233,3.89995],[-63.4464,3.9693],[-63.21111,3.96219],[-62.98296,3.59935],[-62.7655,3.73099],[-62.74411,4.03331],[-62.57656,4.04754],[-62.44822,4.18621],[-62.13094,4.08309],[-61.54629,4.2822],[-61.48569,4.43149],[-61.29675,4.44216],[-61.31457,4.54167],[-61.15703,4.49839],[-60.98303,4.54167],[-60.86539,4.70512],[-60.5802,4.94312],[-60.73204,5.20931],[-60.32352,5.21299],[-60.20944,5.28754],[-59.98129,5.07097],[-60.04189,4.69801],[-60.15953,4.53456],[-59.78878,4.45637],[-59.69361,4.34069]]]]}},{type:"Feature",properties:{iso1A2:"BS",iso1A3:"BHS",iso1N3:"044",wikidata:"Q778",nameEn:"The Bahamas",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 242"]},geometry:{type:"MultiPolygon",coordinates:[[[[-72.98446,20.4801],[-80.88924,23.80416],[-79.89631,24.6597],[-79.14818,27.83105],[-71.70065,25.7637],[-72.98446,20.4801]]]]}},{type:"Feature",properties:{iso1A2:"BT",iso1A3:"BTN",iso1N3:"064",wikidata:"Q917",nameEn:"Bhutan",groups:["034","142"],driveSide:"left",callingCodes:["975"]},geometry:{type:"MultiPolygon",coordinates:[[[[91.6469,27.76358],[91.55819,27.6144],[91.65007,27.48287],[92.01132,27.47352],[92.12019,27.27829],[92.04702,27.26861],[92.03457,27.07334],[92.11863,26.893],[92.05523,26.8692],[91.83181,26.87318],[91.50067,26.79223],[90.67715,26.77215],[90.48504,26.8594],[90.39271,26.90704],[90.30402,26.85098],[90.04535,26.72422],[89.86124,26.73307],[89.63369,26.74402],[89.42349,26.83727],[89.3901,26.84225],[89.38319,26.85963],[89.37913,26.86224],[89.1926,26.81329],[89.12825,26.81661],[89.09554,26.89089],[88.95807,26.92668],[88.92301,26.99286],[88.8714,26.97488],[88.86984,27.10937],[88.74219,27.144],[88.91901,27.32483],[88.93678,27.33777],[88.96947,27.30319],[89.00216,27.32532],[88.95355,27.4106],[88.97213,27.51671],[89.0582,27.60985],[89.12825,27.62502],[89.59525,28.16433],[89.79762,28.23979],[90.13387,28.19178],[90.58842,28.02838],[90.69894,28.07784],[91.20019,27.98715],[91.25779,28.07509],[91.46327,28.0064],[91.48973,27.93903],[91.5629,27.84823],[91.6469,27.76358]]]]}},{type:"Feature",properties:{iso1A2:"BV",iso1A3:"BVT",iso1N3:"074",wikidata:"Q23408",nameEn:"Bouvet Island",country:"NO",groups:["005","419","019"]},geometry:{type:"MultiPolygon",coordinates:[[[[4.54042,-54.0949],[3.35353,-55.17558],[2.28941,-54.13089],[4.54042,-54.0949]]]]}},{type:"Feature",properties:{iso1A2:"BW",iso1A3:"BWA",iso1N3:"072",wikidata:"Q963",nameEn:"Botswana",groups:["018","202","002"],driveSide:"left",callingCodes:["267"]},geometry:{type:"MultiPolygon",coordinates:[[[[25.26433,-17.79571],[25.23909,-17.90832],[25.31799,-18.07091],[25.39972,-18.12691],[25.53465,-18.39041],[25.68859,-18.56165],[25.79217,-18.6355],[25.82353,-18.82808],[25.94326,-18.90362],[25.99837,-19.02943],[25.96226,-19.08152],[26.17227,-19.53709],[26.72246,-19.92707],[27.21278,-20.08244],[27.29831,-20.28935],[27.28865,-20.49873],[27.69361,-20.48531],[27.72972,-20.51735],[27.69171,-21.08409],[27.91407,-21.31621],[28.01669,-21.57624],[28.29416,-21.59037],[28.49942,-21.66634],[28.58114,-21.63455],[29.07763,-21.81877],[29.04023,-21.85864],[29.02191,-21.90647],[29.02191,-21.95665],[29.04108,-22.00563],[29.08495,-22.04867],[29.14501,-22.07275],[29.1974,-22.07472],[29.24648,-22.05967],[29.3533,-22.18363],[29.37703,-22.19581],[29.21955,-22.17771],[29.18974,-22.18599],[29.15268,-22.21399],[29.10881,-22.21202],[29.0151,-22.22907],[28.91889,-22.44299],[28.63287,-22.55887],[28.34874,-22.5694],[28.04562,-22.8394],[28.04752,-22.90243],[27.93729,-22.96194],[27.93539,-23.04941],[27.74154,-23.2137],[27.6066,-23.21894],[27.52393,-23.37952],[27.33768,-23.40917],[26.99749,-23.65486],[26.84165,-24.24885],[26.51667,-24.47219],[26.46346,-24.60358],[26.39409,-24.63468],[25.8515,-24.75727],[25.84295,-24.78661],[25.88571,-24.87802],[25.72702,-25.25503],[25.69661,-25.29284],[25.6643,-25.4491],[25.58543,-25.6343],[25.33076,-25.76616],[25.12266,-25.75931],[25.01718,-25.72507],[24.8946,-25.80723],[24.67319,-25.81749],[24.44703,-25.73021],[24.36531,-25.773],[24.18287,-25.62916],[23.9244,-25.64286],[23.47588,-25.29971],[23.03497,-25.29971],[22.86012,-25.50572],[22.70808,-25.99186],[22.56365,-26.19668],[22.41921,-26.23078],[22.21206,-26.3773],[22.06192,-26.61882],[21.90703,-26.66808],[21.83291,-26.65959],[21.77114,-26.69015],[21.7854,-26.79199],[21.69322,-26.86152],[21.37869,-26.82083],[21.13353,-26.86661],[20.87031,-26.80047],[20.68596,-26.9039],[20.63275,-26.78181],[20.61754,-26.4692],[20.86081,-26.14892],[20.64795,-25.47827],[20.29826,-24.94869],[20.03678,-24.81004],[20.02809,-24.78725],[19.99817,-24.76768],[19.99912,-21.99991],[20.99751,-22.00026],[20.99904,-18.31743],[21.45556,-18.31795],[23.0996,-18.00075],[23.29618,-17.99855],[23.61088,-18.4881],[24.19416,-18.01919],[24.40577,-17.95726],[24.57485,-18.07151],[24.6303,-17.9863],[24.71887,-17.9218],[24.73364,-17.89338],[24.95586,-17.79674],[25.05895,-17.84452],[25.16882,-17.78253],[25.26433,-17.79571]]]]}},{type:"Feature",properties:{iso1A2:"BY",iso1A3:"BLR",iso1N3:"112",wikidata:"Q184",nameEn:"Belarus",groups:["151","150"],callingCodes:["375"]},geometry:{type:"MultiPolygon",coordinates:[[[[28.15217,56.16964],[28.30571,56.06035],[28.36888,56.05805],[28.37987,56.11399],[28.43068,56.09407],[28.5529,56.11705],[28.68337,56.10173],[28.63668,56.07262],[28.73418,55.97131],[29.08299,56.03427],[29.21717,55.98971],[29.44692,55.95978],[29.3604,55.75862],[29.51283,55.70294],[29.61446,55.77716],[29.80672,55.79569],[29.97975,55.87281],[30.12136,55.8358],[30.27776,55.86819],[30.30987,55.83592],[30.48257,55.81066],[30.51346,55.78982],[30.51037,55.76568],[30.63344,55.73079],[30.67464,55.64176],[30.72957,55.66268],[30.7845,55.58514],[30.86003,55.63169],[30.93419,55.6185],[30.95204,55.50667],[30.90123,55.46621],[30.93144,55.3914],[30.8257,55.3313],[30.81946,55.27931],[30.87944,55.28223],[30.97369,55.17134],[31.02071,55.06167],[31.00972,55.02783],[30.94243,55.03964],[30.9081,55.02232],[30.95754,54.98609],[30.93144,54.9585],[30.81759,54.94064],[30.8264,54.90062],[30.75165,54.80699],[30.95479,54.74346],[30.97127,54.71967],[31.0262,54.70698],[30.98226,54.68872],[30.99187,54.67046],[31.19339,54.66947],[31.21399,54.63113],[31.08543,54.50361],[31.22945,54.46585],[31.3177,54.34067],[31.30791,54.25315],[31.57002,54.14535],[31.89599,54.0837],[31.88744,54.03653],[31.85019,53.91801],[31.77028,53.80015],[31.89137,53.78099],[32.12621,53.81586],[32.36663,53.7166],[32.45717,53.74039],[32.50112,53.68594],[32.40499,53.6656],[32.47777,53.5548],[32.74968,53.45597],[32.73257,53.33494],[32.51725,53.28431],[32.40773,53.18856],[32.15368,53.07594],[31.82373,53.10042],[31.787,53.18033],[31.62496,53.22886],[31.56316,53.19432],[31.40523,53.21406],[31.36403,53.13504],[31.3915,53.09712],[31.33519,53.08805],[31.32283,53.04101],[31.24147,53.031],[31.35667,52.97854],[31.592,52.79011],[31.57277,52.71613],[31.50406,52.69707],[31.63869,52.55361],[31.56316,52.51518],[31.61397,52.48843],[31.62084,52.33849],[31.57971,52.32146],[31.70735,52.26711],[31.6895,52.1973],[31.77877,52.18636],[31.7822,52.11406],[31.38326,52.12991],[31.25142,52.04131],[31.13332,52.1004],[30.95589,52.07775],[30.90897,52.00699],[30.76443,51.89739],[30.68804,51.82806],[30.51946,51.59649],[30.64992,51.35014],[30.56203,51.25655],[30.36153,51.33984],[30.34642,51.42555],[30.17888,51.51025],[29.77376,51.4461],[29.7408,51.53417],[29.54372,51.48372],[29.49773,51.39814],[29.42357,51.4187],[29.32881,51.37843],[29.25191,51.49828],[29.25603,51.57089],[29.20659,51.56918],[29.16402,51.64679],[29.1187,51.65872],[28.99098,51.56833],[28.95528,51.59222],[28.81795,51.55552],[28.76027,51.48802],[28.78224,51.45294],[28.75615,51.41442],[28.73143,51.46236],[28.69161,51.44695],[28.64429,51.5664],[28.47051,51.59734],[28.37592,51.54505],[28.23452,51.66988],[28.10658,51.57857],[27.95827,51.56065],[27.91844,51.61952],[27.85253,51.62293],[27.76052,51.47604],[27.67125,51.50854],[27.71932,51.60672],[27.55727,51.63486],[27.51058,51.5854],[27.47212,51.61184],[27.24828,51.60161],[27.26613,51.65957],[27.20948,51.66713],[27.20602,51.77291],[26.99422,51.76933],[26.9489,51.73788],[26.80043,51.75777],[26.69759,51.82284],[26.46962,51.80501],[26.39367,51.87315],[26.19084,51.86781],[26.00408,51.92967],[25.83217,51.92587],[25.80574,51.94556],[25.73673,51.91973],[25.46163,51.92205],[25.20228,51.97143],[24.98784,51.91273],[24.37123,51.88222],[24.29021,51.80841],[24.3163,51.75063],[24.13075,51.66979],[23.99907,51.58369],[23.8741,51.59734],[23.91118,51.63316],[23.7766,51.66809],[23.60906,51.62122],[23.6736,51.50255],[23.62751,51.50512],[23.56236,51.53673],[23.57053,51.55938],[23.53198,51.74298],[23.62691,51.78208],[23.61523,51.92066],[23.68733,51.9906],[23.64066,52.07626],[23.61,52.11264],[23.54314,52.12148],[23.47859,52.18215],[23.20071,52.22848],[23.18196,52.28812],[23.34141,52.44845],[23.45112,52.53774],[23.58296,52.59868],[23.73615,52.6149],[23.93763,52.71332],[23.91805,52.94016],[23.94689,52.95919],[23.92184,53.02079],[23.87548,53.0831],[23.91393,53.16469],[23.85657,53.22923],[23.81995,53.24131],[23.62004,53.60942],[23.51284,53.95052],[23.61677,53.92691],[23.71726,53.93379],[23.80543,53.89558],[23.81309,53.94205],[23.95098,53.9613],[23.98837,53.92554],[24.19638,53.96405],[24.34128,53.90076],[24.44411,53.90076],[24.62275,54.00217],[24.69652,54.01901],[24.69185,53.96543],[24.74279,53.96663],[24.85311,54.02862],[24.77131,54.11091],[24.96894,54.17589],[24.991,54.14241],[25.0728,54.13419],[25.19199,54.219],[25.22705,54.26271],[25.35559,54.26544],[25.509,54.30267],[25.56823,54.25212],[25.51452,54.17799],[25.54724,54.14925],[25.64875,54.1259],[25.71084,54.16704],[25.78563,54.15747],[25.78553,54.23327],[25.68513,54.31727],[25.55425,54.31591],[25.5376,54.33158],[25.63371,54.42075],[25.62203,54.4656],[25.64813,54.48704],[25.68045,54.5321],[25.75977,54.57252],[25.74122,54.80108],[25.89462,54.93438],[25.99129,54.95705],[26.05907,54.94631],[26.13386,54.98924],[26.20397,54.99729],[26.26941,55.08032],[26.23202,55.10439],[26.30628,55.12536],[26.35121,55.1525],[26.46249,55.12814],[26.51481,55.16051],[26.54753,55.14181],[26.69243,55.16718],[26.68075,55.19787],[26.72983,55.21788],[26.73017,55.24226],[26.835,55.28182],[26.83266,55.30444],[26.80929,55.31642],[26.6714,55.33902],[26.5709,55.32572],[26.44937,55.34832],[26.5522,55.40277],[26.55094,55.5093],[26.63167,55.57887],[26.63231,55.67968],[26.64888,55.70515],[26.71802,55.70645],[26.76872,55.67658],[26.87448,55.7172],[26.97153,55.8102],[27.1559,55.85032],[27.27804,55.78299],[27.3541,55.8089],[27.61683,55.78558],[27.63065,55.89687],[27.97865,56.11849],[28.15217,56.16964]]]]}},{type:"Feature",properties:{iso1A2:"BZ",iso1A3:"BLZ",iso1N3:"084",wikidata:"Q242",nameEn:"Belize",groups:["013","003","419","019"],roadSpeedUnit:"mph",callingCodes:["501"]},geometry:{type:"MultiPolygon",coordinates:[[[[-88.3268,18.49048],[-88.29909,18.47591],[-88.26593,18.47617],[-88.03238,18.41778],[-88.03165,18.16657],[-87.90671,18.15213],[-87.87604,18.18313],[-87.86657,18.19971],[-87.85693,18.18266],[-87.84815,18.18511],[-86.92368,17.61462],[-88.40779,16.09624],[-88.95358,15.88698],[-89.02415,15.9063],[-89.17418,15.90898],[-89.22683,15.88619],[-89.15025,17.04813],[-89.14985,17.81563],[-89.15105,17.95104],[-89.03839,18.0067],[-88.8716,17.89535],[-88.71505,18.0707],[-88.48242,18.49164],[-88.3268,18.49048]]]]}},{type:"Feature",properties:{iso1A2:"CA",iso1A3:"CAN",iso1N3:"124",wikidata:"Q16",nameEn:"Canada",groups:["021","003","019"],callingCodes:["1"]},geometry:{type:"MultiPolygon",coordinates:[[[[-67.20349,45.1722],[-67.22751,45.16344],[-67.27039,45.1934],[-67.29748,45.18173],[-67.29754,45.14865],[-67.34927,45.122],[-67.48201,45.27351],[-67.42394,45.37969],[-67.50578,45.48971],[-67.42144,45.50584],[-67.43815,45.59162],[-67.6049,45.60725],[-67.80705,45.69528],[-67.80653,45.80022],[-67.75654,45.82324],[-67.80961,45.87531],[-67.75196,45.91814],[-67.78111,45.9392],[-67.78578,47.06473],[-67.87993,47.10377],[-67.94843,47.1925],[-68.23244,47.35712],[-68.37458,47.35851],[-68.38332,47.28723],[-68.57914,47.28431],[-68.60575,47.24659],[-68.70125,47.24399],[-68.89222,47.1807],[-69.05039,47.2456],[-69.05073,47.30076],[-69.05148,47.42012],[-69.22119,47.46461],[-69.99966,46.69543],[-70.05812,46.41768],[-70.18547,46.35357],[-70.29078,46.18832],[-70.23855,46.1453],[-70.31025,45.96424],[-70.24694,45.95138],[-70.25976,45.89675],[-70.41523,45.79497],[-70.38934,45.73215],[-70.54019,45.67291],[-70.68516,45.56964],[-70.72651,45.49771],[-70.62518,45.42286],[-70.65383,45.37592],[-70.78372,45.43269],[-70.82638,45.39828],[-70.80236,45.37444],[-70.84816,45.22698],[-70.89864,45.2398],[-70.91169,45.29849],[-70.95193,45.33895],[-71.0107,45.34819],[-71.01866,45.31573],[-71.08364,45.30623],[-71.14568,45.24128],[-71.19723,45.25438],[-71.22338,45.25184],[-71.29371,45.29996],[-71.37133,45.24624],[-71.44252,45.2361],[-71.40364,45.21382],[-71.42778,45.12624],[-71.48735,45.07784],[-71.50067,45.01357],[-73.35025,45.00942],[-74.32699,44.99029],[-74.66689,45.00646],[-74.8447,45.00606],[-74.99101,44.98051],[-75.01363,44.95608],[-75.2193,44.87821],[-75.41441,44.76614],[-75.76813,44.51537],[-75.8217,44.43176],[-75.95947,44.34463],[-76.00018,44.34896],[-76.16285,44.28262],[-76.1664,44.23051],[-76.244,44.19643],[-76.31222,44.19894],[-76.35324,44.13493],[-76.43859,44.09393],[-76.79706,43.63099],[-79.25796,43.54052],[-79.06921,43.26183],[-79.05512,43.25375],[-79.05544,43.21224],[-79.05002,43.20133],[-79.05384,43.17418],[-79.04652,43.16396],[-79.0427,43.13934],[-79.06881,43.12029],[-79.05671,43.10937],[-79.07486,43.07845],[-79.01055,43.06659],[-78.99941,43.05612],[-79.02424,43.01983],[-79.02074,42.98444],[-78.98126,42.97],[-78.96312,42.95509],[-78.93224,42.95229],[-78.90905,42.93022],[-78.90712,42.89733],[-78.93684,42.82887],[-82.67862,41.67615],[-83.11184,41.95671],[-83.14962,42.04089],[-83.12724,42.2376],[-83.09837,42.28877],[-83.07837,42.30978],[-83.02253,42.33045],[-82.82964,42.37355],[-82.64242,42.55594],[-82.58873,42.54984],[-82.57583,42.5718],[-82.51858,42.611],[-82.51063,42.66025],[-82.46613,42.76615],[-82.4826,42.8068],[-82.45331,42.93139],[-82.4253,42.95423],[-82.4146,42.97626],[-82.42469,42.992],[-82.48419,45.30225],[-83.59589,45.82131],[-83.43746,45.99749],[-83.57017,46.105],[-83.83329,46.12169],[-83.90453,46.05922],[-83.95399,46.05634],[-84.1096,46.23987],[-84.09756,46.25512],[-84.11615,46.2681],[-84.11254,46.32329],[-84.13451,46.39218],[-84.11196,46.50248],[-84.12885,46.53068],[-84.17723,46.52753],[-84.1945,46.54061],[-84.2264,46.53337],[-84.26351,46.49508],[-84.29893,46.49127],[-84.34174,46.50683],[-84.42101,46.49853],[-84.4481,46.48972],[-84.47607,46.45225],[-84.55635,46.45974],[-84.85871,46.88881],[-88.37033,48.30586],[-89.48837,48.01412],[-89.57972,48.00023],[-89.77248,48.02607],[-89.89974,47.98109],[-90.07418,48.11043],[-90.56312,48.09488],[-90.56444,48.12184],[-90.75045,48.09143],[-90.87588,48.2484],[-91.08016,48.18096],[-91.25025,48.08522],[-91.43248,48.04912],[-91.45829,48.07454],[-91.58025,48.04339],[-91.55649,48.10611],[-91.70451,48.11805],[-91.71231,48.19875],[-91.86125,48.21278],[-91.98929,48.25409],[-92.05339,48.35958],[-92.14732,48.36578],[-92.202,48.35252],[-92.26662,48.35651],[-92.30939,48.31251],[-92.27167,48.25046],[-92.37185,48.22259],[-92.48147,48.36609],[-92.45588,48.40624],[-92.50712,48.44921],[-92.65606,48.43471],[-92.71323,48.46081],[-92.69927,48.49573],[-92.62747,48.50278],[-92.6342,48.54133],[-92.7287,48.54005],[-92.94973,48.60866],[-93.25391,48.64266],[-93.33946,48.62787],[-93.3712,48.60599],[-93.39758,48.60364],[-93.40693,48.60948],[-93.44472,48.59147],[-93.47022,48.54357],[-93.66382,48.51845],[-93.79267,48.51631],[-93.80939,48.52439],[-93.80676,48.58232],[-93.83288,48.62745],[-93.85769,48.63284],[-94.23215,48.65202],[-94.25104,48.65729],[-94.25172,48.68404],[-94.27153,48.70232],[-94.4174,48.71049],[-94.44258,48.69223],[-94.53826,48.70216],[-94.54885,48.71543],[-94.58903,48.71803],[-94.69335,48.77883],[-94.69669,48.80918],[-94.70486,48.82365],[-94.70087,48.8339],[-94.687,48.84077],[-94.75017,49.09931],[-94.77355,49.11998],[-94.82487,49.29483],[-94.8159,49.32299],[-94.85381,49.32492],[-94.95681,49.37035],[-94.99532,49.36579],[-95.01419,49.35647],[-95.05825,49.35311],[-95.12903,49.37056],[-95.15357,49.384],[-95.15355,48.9996],[-97.24024,48.99952],[-101.36198,48.99935],[-104.05004,48.99925],[-110.0051,48.99901],[-114.0683,48.99885],[-116.04938,48.99999],[-117.03266,49.00056],[-123.32163,49.00419],[-123.0093,48.83186],[-123.0093,48.76586],[-123.26565,48.6959],[-123.15614,48.35395],[-123.50039,48.21223],[-125.03842,48.53282],[-133.36909,48.51151],[-133.92876,54.62289],[-130.61931,54.70835],[-130.64499,54.76912],[-130.44184,54.85377],[-130.27203,54.97174],[-130.18765,55.07744],[-130.08035,55.21556],[-129.97513,55.28029],[-130.15373,55.74895],[-130.00857,55.91344],[-130.00093,56.00325],[-130.10173,56.12178],[-130.33965,56.10849],[-130.77769,56.36185],[-131.8271,56.62247],[-133.38523,58.42773],[-133.84645,58.73543],[-134.27175,58.8634],[-134.48059,59.13231],[-134.55699,59.1297],[-134.7047,59.2458],[-135.00267,59.28745],[-135.03069,59.56208],[-135.48007,59.79937],[-136.31566,59.59083],[-136.22381,59.55526],[-136.33727,59.44466],[-136.47323,59.46617],[-136.52365,59.16752],[-136.82619,59.16198],[-137.4925,58.89415],[-137.60623,59.24465],[-138.62145,59.76431],[-138.71149,59.90728],[-139.05365,59.99655],[-139.20603,60.08896],[-139.05831,60.35205],[-139.68991,60.33693],[-139.98024,60.18027],[-140.45648,60.30919],[-140.5227,60.22077],[-141.00116,60.30648],[-140.97446,84.39275],[-45.47832,84.58738],[-68.21821,80.48551],[-76.75614,76.72014],[-46.37635,57.3249],[-53.12387,41.40385],[-56.27503,47.39728],[-61.98255,37.34815],[-67.16117,44.20069],[-66.93432,44.82597],[-66.96824,44.83078],[-66.98249,44.87071],[-66.96824,44.90965],[-67.0216,44.95333],[-67.11316,45.11176],[-67.15965,45.16179],[-67.19603,45.16771],[-67.20349,45.1722]]]]}},{type:"Feature",properties:{iso1A2:"CC",iso1A3:"CCK",iso1N3:"166",wikidata:"Q36004",nameEn:"Cocos (Keeling) Islands",country:"AU",groups:["053","009"],driveSide:"left",callingCodes:["61"]},geometry:{type:"MultiPolygon",coordinates:[[[[96.61846,-10.82438],[97.93979,-12.33309],[96.02343,-12.68334],[96.61846,-10.82438]]]]}},{type:"Feature",properties:{iso1A2:"CD",iso1A3:"COD",iso1N3:"180",wikidata:"Q974",nameEn:"Democratic Republic of the Congo",aliases:["ZR"],groups:["017","202","002"],callingCodes:["243"]},geometry:{type:"MultiPolygon",coordinates:[[[[27.44012,5.07349],[27.56656,4.89375],[27.65462,4.89375],[27.76469,4.79284],[27.79551,4.59976],[28.20719,4.35614],[28.6651,4.42638],[28.8126,4.48784],[29.03054,4.48784],[29.22207,4.34297],[29.43341,4.50101],[29.49726,4.7007],[29.82087,4.56246],[29.79666,4.37809],[30.06964,4.13221],[30.1621,4.10586],[30.22374,3.93896],[30.27658,3.95653],[30.47691,3.83353],[30.55396,3.84451],[30.57378,3.74567],[30.56277,3.62703],[30.78512,3.67097],[30.80713,3.60506],[30.85997,3.5743],[30.85153,3.48867],[30.94081,3.50847],[30.93486,3.40737],[30.84251,3.26908],[30.77101,3.04897],[30.8574,2.9508],[30.8857,2.83923],[30.75612,2.5863],[30.74271,2.43601],[30.83059,2.42559],[30.91102,2.33332],[30.96911,2.41071],[31.06593,2.35862],[31.07934,2.30207],[31.12104,2.27676],[31.1985,2.29462],[31.20148,2.2217],[31.28042,2.17853],[31.30127,2.11006],[30.48503,1.21675],[30.24671,1.14974],[30.22139,0.99635],[30.1484,0.89805],[29.98307,0.84295],[29.95477,0.64486],[29.97413,0.52124],[29.87284,0.39166],[29.81922,0.16824],[29.77454,0.16675],[29.7224,0.07291],[29.72687,-0.08051],[29.65091,-0.46777],[29.67474,-0.47969],[29.67176,-0.55714],[29.62708,-0.71055],[29.63006,-0.8997],[29.58388,-0.89821],[29.59061,-1.39016],[29.53062,-1.40499],[29.45038,-1.5054],[29.36322,-1.50887],[29.24323,-1.66826],[29.24458,-1.69663],[29.11847,-1.90576],[29.17562,-2.12278],[29.105,-2.27043],[29.00051,-2.29001],[28.95642,-2.37321],[28.89601,-2.37321],[28.86826,-2.41888],[28.86846,-2.44866],[28.89132,-2.47557],[28.89342,-2.49017],[28.88846,-2.50493],[28.87497,-2.50887],[28.86209,-2.5231],[28.86193,-2.53185],[28.87943,-2.55165],[28.89288,-2.55848],[28.90226,-2.62385],[28.89793,-2.66111],[28.94346,-2.69124],[29.00357,-2.70596],[29.04081,-2.7416],[29.00167,-2.78523],[29.00404,-2.81978],[29.0505,-2.81774],[29.09119,-2.87871],[29.09797,-2.91935],[29.16037,-2.95457],[29.17258,-2.99385],[29.25633,-3.05471],[29.21463,-3.3514],[29.23708,-3.75856],[29.43673,-4.44845],[29.52552,-6.2731],[30.2567,-7.14121],[30.79243,-8.27382],[28.88917,-8.4831],[28.9711,-8.66935],[28.38526,-9.23393],[28.36562,-9.30091],[28.52636,-9.35379],[28.51627,-9.44726],[28.56208,-9.49122],[28.68532,-9.78],[28.62795,-9.92942],[28.65032,-10.65133],[28.37241,-11.57848],[28.48357,-11.87532],[29.18592,-12.37921],[29.4992,-12.43843],[29.48404,-12.23604],[29.8139,-12.14898],[29.81551,-13.44683],[29.65078,-13.41844],[29.60531,-13.21685],[29.01918,-13.41353],[28.33199,-12.41375],[27.59932,-12.22123],[27.21025,-11.76157],[27.22541,-11.60323],[27.04351,-11.61312],[26.88687,-12.01868],[26.01777,-11.91488],[25.33058,-11.65767],[25.34069,-11.19707],[24.42612,-11.44975],[24.34528,-11.06816],[24.00027,-10.89356],[23.86868,-11.02856],[23.45631,-10.946],[23.16602,-11.10577],[22.54205,-11.05784],[22.25951,-11.24911],[22.17954,-10.85884],[22.32604,-10.76291],[22.19039,-9.94628],[21.84856,-9.59871],[21.79824,-7.29628],[20.56263,-7.28566],[20.61689,-6.90876],[20.31846,-6.91953],[20.30218,-6.98955],[19.5469,-7.00195],[19.33698,-7.99743],[18.33635,-8.00126],[17.5828,-8.13784],[16.96282,-7.21787],[16.55507,-5.85631],[13.04371,-5.87078],[12.42245,-6.07585],[11.95767,-5.94705],[12.20376,-5.76338],[12.26557,-5.74031],[12.52318,-5.74353],[12.52301,-5.17481],[12.53599,-5.1618],[12.53586,-5.14658],[12.51589,-5.1332],[12.49815,-5.14058],[12.46297,-5.09408],[12.60251,-5.01715],[12.63465,-4.94632],[12.70868,-4.95505],[12.8733,-4.74346],[13.11195,-4.67745],[13.09648,-4.63739],[13.11182,-4.5942],[13.41764,-4.89897],[13.50305,-4.77818],[13.70417,-4.72601],[13.71794,-4.44864],[13.81162,-4.41842],[13.9108,-4.50906],[14.40672,-4.28381],[14.3957,-4.36623],[14.47284,-4.42941],[14.37366,-4.56125],[14.41499,-4.8825],[14.5059,-4.84956],[14.67948,-4.92093],[14.83101,-4.80838],[15.1978,-4.32388],[15.25411,-4.31121],[15.32693,-4.27282],[15.41785,-4.28381],[15.48121,-4.22062],[15.53081,-4.042],[15.89448,-3.9513],[16.21407,-3.2969],[16.1755,-3.25014],[16.22785,-2.59528],[16.16173,-2.16586],[16.50336,-1.8795],[16.70724,-1.45815],[16.97999,-1.12762],[17.32438,-0.99265],[17.72112,-0.52707],[17.66051,-0.26535],[17.81204,0.23884],[17.93877,0.32424],[17.95255,0.48128],[17.86989,0.58873],[17.85887,1.04327],[18.08034,1.58553],[18.10683,2.26876],[18.63857,3.19342],[18.62755,3.47564],[20.60184,4.42394],[20.90383,4.44877],[21.08793,4.39603],[21.11214,4.33895],[21.21341,4.29285],[21.25744,4.33676],[21.55904,4.25553],[21.6405,4.317],[22.10721,4.20723],[22.27682,4.11347],[22.45504,4.13039],[22.5431,4.22041],[22.60915,4.48821],[22.6928,4.47285],[22.78526,4.71423],[22.84691,4.69887],[22.89094,4.79321],[22.94817,4.82392],[23.38847,4.60013],[24.46719,5.0915],[24.71816,4.90509],[25.31256,5.03668],[25.34558,5.29101],[25.53271,5.37431],[25.86073,5.19455],[26.13371,5.25594],[26.48595,5.04984],[26.74572,5.10685],[26.85579,5.03887],[26.93064,5.13535],[27.09575,5.22305],[27.44012,5.07349]]]]}},{type:"Feature",properties:{iso1A2:"CF",iso1A3:"CAF",iso1N3:"140",wikidata:"Q929",nameEn:"Central African Republic",groups:["017","202","002"],callingCodes:["236"]},geometry:{type:"MultiPolygon",coordinates:[[[[22.87758,10.91915],[23.02221,10.69235],[23.3128,10.45214],[23.67164,9.86923],[23.69155,9.67566],[23.62179,9.53823],[23.64981,9.44303],[23.64358,9.28637],[23.56263,9.19418],[23.4848,9.16959],[23.44744,8.99128],[23.59065,8.99743],[23.51905,8.71749],[24.25691,8.69288],[24.13238,8.36959],[24.35965,8.26177],[24.85156,8.16933],[24.98855,7.96588],[25.25319,7.8487],[25.29214,7.66675],[25.20649,7.61115],[25.20337,7.50312],[25.35281,7.42595],[25.37461,7.33024],[25.90076,7.09549],[26.38022,6.63493],[26.32729,6.36272],[26.58259,6.1987],[26.51721,6.09655],[27.22705,5.71254],[27.22705,5.62889],[27.28621,5.56382],[27.23017,5.37167],[27.26886,5.25876],[27.44012,5.07349],[27.09575,5.22305],[26.93064,5.13535],[26.85579,5.03887],[26.74572,5.10685],[26.48595,5.04984],[26.13371,5.25594],[25.86073,5.19455],[25.53271,5.37431],[25.34558,5.29101],[25.31256,5.03668],[24.71816,4.90509],[24.46719,5.0915],[23.38847,4.60013],[22.94817,4.82392],[22.89094,4.79321],[22.84691,4.69887],[22.78526,4.71423],[22.6928,4.47285],[22.60915,4.48821],[22.5431,4.22041],[22.45504,4.13039],[22.27682,4.11347],[22.10721,4.20723],[21.6405,4.317],[21.55904,4.25553],[21.25744,4.33676],[21.21341,4.29285],[21.11214,4.33895],[21.08793,4.39603],[20.90383,4.44877],[20.60184,4.42394],[18.62755,3.47564],[18.58711,3.49423],[18.49245,3.63924],[18.39558,3.58212],[18.2723,3.57992],[18.24148,3.50302],[18.17323,3.47665],[18.14902,3.54476],[18.05656,3.56893],[17.85842,3.53378],[17.83421,3.61068],[17.60966,3.63705],[17.46876,3.70515],[17.35649,3.63045],[17.01746,3.55136],[16.68283,3.54257],[16.57598,3.47999],[16.46701,2.92512],[16.50126,2.84739],[16.19357,2.21537],[16.08252,2.45708],[16.05449,3.02306],[15.77725,3.26835],[15.73522,3.24348],[15.07686,4.01805],[15.17482,4.05131],[15.10644,4.1362],[15.08609,4.30282],[15.00825,4.41458],[14.73383,4.6135],[14.65489,5.21343],[14.57083,5.23979],[14.52724,5.28319],[14.62531,5.51411],[14.58951,5.59777],[14.62375,5.70466],[14.60974,5.91838],[14.49455,5.91683],[14.42917,6.00508],[14.43073,6.08867],[14.56149,6.18928],[14.74206,6.26356],[14.80122,6.34866],[14.79966,6.39043],[14.96311,6.75693],[15.04717,6.77085],[15.23397,7.25135],[15.49743,7.52179],[15.73118,7.52006],[15.79942,7.44149],[16.40703,7.68809],[16.41583,7.77971],[16.58315,7.88657],[16.59415,7.76444],[16.658,7.75353],[16.6668,7.67281],[16.8143,7.53971],[17.67288,7.98905],[17.93926,7.95853],[18.02731,8.01085],[18.6085,8.05009],[18.64153,8.08714],[18.62612,8.14163],[18.67455,8.22226],[18.79783,8.25929],[19.11044,8.68172],[18.86388,8.87971],[19.06421,9.00367],[20.36748,9.11019],[20.82979,9.44696],[21.26348,9.97642],[21.34934,9.95907],[21.52766,10.2105],[21.63553,10.217],[21.71479,10.29932],[21.72139,10.64136],[22.45889,11.00246],[22.87758,10.91915]]]]}},{type:"Feature",properties:{iso1A2:"CG",iso1A3:"COG",iso1N3:"178",wikidata:"Q971",nameEn:"Republic of the Congo",groups:["017","202","002"],callingCodes:["242"]},geometry:{type:"MultiPolygon",coordinates:[[[[18.62755,3.47564],[18.63857,3.19342],[18.10683,2.26876],[18.08034,1.58553],[17.85887,1.04327],[17.86989,0.58873],[17.95255,0.48128],[17.93877,0.32424],[17.81204,0.23884],[17.66051,-0.26535],[17.72112,-0.52707],[17.32438,-0.99265],[16.97999,-1.12762],[16.70724,-1.45815],[16.50336,-1.8795],[16.16173,-2.16586],[16.22785,-2.59528],[16.1755,-3.25014],[16.21407,-3.2969],[15.89448,-3.9513],[15.53081,-4.042],[15.48121,-4.22062],[15.41785,-4.28381],[15.32693,-4.27282],[15.25411,-4.31121],[15.1978,-4.32388],[14.83101,-4.80838],[14.67948,-4.92093],[14.5059,-4.84956],[14.41499,-4.8825],[14.37366,-4.56125],[14.47284,-4.42941],[14.3957,-4.36623],[14.40672,-4.28381],[13.9108,-4.50906],[13.81162,-4.41842],[13.71794,-4.44864],[13.70417,-4.72601],[13.50305,-4.77818],[13.41764,-4.89897],[13.11182,-4.5942],[13.09648,-4.63739],[12.91489,-4.47907],[12.87096,-4.40315],[12.76844,-4.38709],[12.64835,-4.55937],[12.40964,-4.60609],[12.32324,-4.78415],[12.25587,-4.79437],[12.20901,-4.75642],[12.16068,-4.90089],[12.00924,-5.02627],[11.50888,-5.33417],[10.75913,-4.39519],[11.12647,-3.94169],[11.22301,-3.69888],[11.48764,-3.51089],[11.57949,-3.52798],[11.68608,-3.68942],[11.87083,-3.71571],[11.92719,-3.62768],[11.8318,-3.5812],[11.96554,-3.30267],[11.70227,-3.17465],[11.70558,-3.0773],[11.80365,-3.00424],[11.64798,-2.81146],[11.5359,-2.85654],[11.64487,-2.61865],[11.57637,-2.33379],[11.74605,-2.39936],[11.96866,-2.33559],[12.04895,-2.41704],[12.47925,-2.32626],[12.44656,-1.92025],[12.61312,-1.8129],[12.82172,-1.91091],[13.02759,-2.33098],[13.47977,-2.43224],[13.75884,-2.09293],[13.92073,-2.35581],[13.85846,-2.46935],[14.10442,-2.49268],[14.23829,-2.33715],[14.16202,-2.23916],[14.23518,-2.15671],[14.25932,-1.97624],[14.41838,-1.89412],[14.52569,-0.57818],[14.41887,-0.44799],[14.2165,-0.38261],[14.06862,-0.20826],[13.90632,-0.2287],[13.88648,0.26652],[14.10909,0.58563],[14.26066,0.57255],[14.48179,0.9152],[14.25186,1.39842],[13.89582,1.4261],[13.15519,1.23368],[13.25447,1.32339],[13.13461,1.57238],[13.29457,2.16106],[14.61145,2.17866],[15.00996,1.98887],[15.22634,2.03243],[15.34776,1.91264],[15.48942,1.98265],[16.02959,1.76483],[16.02647,1.65591],[16.14634,1.70259],[16.05294,1.9811],[16.08563,2.19733],[16.15568,2.18955],[16.19357,2.21537],[16.50126,2.84739],[16.46701,2.92512],[16.57598,3.47999],[16.68283,3.54257],[17.01746,3.55136],[17.35649,3.63045],[17.46876,3.70515],[17.60966,3.63705],[17.83421,3.61068],[17.85842,3.53378],[18.05656,3.56893],[18.14902,3.54476],[18.17323,3.47665],[18.24148,3.50302],[18.2723,3.57992],[18.39558,3.58212],[18.49245,3.63924],[18.58711,3.49423],[18.62755,3.47564]]]]}},{type:"Feature",properties:{iso1A2:"CH",iso1A3:"CHE",iso1N3:"756",wikidata:"Q39",nameEn:"Switzerland",groups:["155","150"],callingCodes:["41"]},geometry:{type:"MultiPolygon",coordinates:[[[[8.72809,47.69282],[8.75856,47.68969],[8.79511,47.67462],[8.79966,47.70222],[8.76965,47.7075],[8.77309,47.72059],[8.80663,47.73821],[8.82002,47.71458],[8.86989,47.70504],[8.85065,47.68209],[8.87383,47.67045],[8.87625,47.65441],[8.89946,47.64769],[8.94093,47.65596],[9.02093,47.6868],[9.09891,47.67801],[9.13845,47.66389],[9.15181,47.66904],[9.1705,47.65513],[9.1755,47.65584],[9.17593,47.65399],[9.18203,47.65598],[9.25619,47.65939],[9.55125,47.53629],[9.56312,47.49495],[9.58208,47.48344],[9.59482,47.46305],[9.60205,47.46165],[9.60484,47.46358],[9.60841,47.47178],[9.62158,47.45858],[9.62475,47.45685],[9.6423,47.45599],[9.65728,47.45383],[9.65863,47.44847],[9.64483,47.43842],[9.6446,47.43233],[9.65043,47.41937],[9.65136,47.40504],[9.6629,47.39591],[9.67334,47.39191],[9.67445,47.38429],[9.6711,47.37824],[9.66243,47.37136],[9.65427,47.36824],[9.62476,47.36639],[9.59978,47.34671],[9.58513,47.31334],[9.55857,47.29919],[9.54773,47.2809],[9.53116,47.27029],[9.52406,47.24959],[9.50318,47.22153],[9.4891,47.19346],[9.48774,47.17402],[9.51044,47.13727],[9.52089,47.10019],[9.51362,47.08505],[9.47139,47.06402],[9.47548,47.05257],[9.54041,47.06495],[9.55721,47.04762],[9.60717,47.06091],[9.87935,47.01337],[9.88266,46.93343],[9.98058,46.91434],[10.10715,46.84296],[10.22675,46.86942],[10.24128,46.93147],[10.30031,46.92093],[10.36933,47.00212],[10.48376,46.93891],[10.47197,46.85698],[10.38659,46.67847],[10.40475,46.63671],[10.44686,46.64162],[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.14439,46.22992],[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.25502,46.43743],[9.29226,46.32717],[9.24503,46.23616],[9.01618,46.04928],[8.99257,45.9698],[9.09065,45.89906],[9.06642,45.8761],[9.04546,45.84968],[9.04059,45.8464],[9.03505,45.83976],[9.03793,45.83548],[9.03279,45.82865],[9.0298,45.82127],[9.00324,45.82055],[8.99663,45.83466],[8.9621,45.83707],[8.94737,45.84285],[8.91129,45.8388],[8.93504,45.86245],[8.94372,45.86587],[8.93649,45.86775],[8.88904,45.95465],[8.86688,45.96135],[8.85121,45.97239],[8.8319,45.9879],[8.79362,45.99207],[8.78585,45.98973],[8.79414,46.00913],[8.85617,46.0748],[8.80778,46.10085],[8.75697,46.10395],[8.62242,46.12112],[8.45032,46.26869],[8.46317,46.43712],[8.42464,46.46367],[8.30648,46.41587],[8.31162,46.38044],[8.08814,46.26692],[8.16866,46.17817],[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],[7.00946,45.9944],[6.93862,46.06502],[6.87868,46.03855],[6.89321,46.12548],[6.78968,46.14058],[6.86052,46.28512],[6.77152,46.34784],[6.8024,46.39171],[6.82312,46.42661],[6.53358,46.45431],[6.25432,46.3632],[6.21981,46.31304],[6.24826,46.30175],[6.25137,46.29014],[6.23775,46.27822],[6.24952,46.26255],[6.26749,46.24745],[6.29474,46.26221],[6.31041,46.24417],[6.29663,46.22688],[6.27694,46.21566],[6.26007,46.21165],[6.24821,46.20531],[6.23913,46.20511],[6.23544,46.20714],[6.22175,46.20045],[6.22222,46.19888],[6.21844,46.19837],[6.21603,46.19507],[6.21273,46.19409],[6.21114,46.1927],[6.20539,46.19163],[6.19807,46.18369],[6.19552,46.18401],[6.18707,46.17999],[6.18871,46.16644],[6.18116,46.16187],[6.15305,46.15194],[6.13397,46.1406],[6.09926,46.14373],[6.09199,46.15191],[6.07491,46.14879],[6.05203,46.15191],[6.04564,46.14031],[6.03614,46.13712],[6.01791,46.14228],[5.9871,46.14499],[5.97893,46.13303],[5.95781,46.12925],[5.9641,46.14412],[5.97508,46.15863],[5.98188,46.17392],[5.98846,46.17046],[5.99573,46.18587],[5.96515,46.19638],[5.97542,46.21525],[6.02461,46.23313],[6.03342,46.2383],[6.04602,46.23127],[6.05029,46.23518],[6.0633,46.24583],[6.07072,46.24085],[6.08563,46.24651],[6.10071,46.23772],[6.12446,46.25059],[6.11926,46.2634],[6.1013,46.28512],[6.11697,46.29547],[6.1198,46.31157],[6.13876,46.33844],[6.15738,46.3491],[6.16987,46.36759],[6.15985,46.37721],[6.15016,46.3778],[6.09926,46.40768],[6.06407,46.41676],[6.08427,46.44305],[6.07269,46.46244],[6.1567,46.54402],[6.11084,46.57649],[6.27135,46.68251],[6.38351,46.73171],[6.45209,46.77502],[6.43216,46.80336],[6.46456,46.88865],[6.43341,46.92703],[6.71531,47.0494],[6.68823,47.06616],[6.76788,47.1208],[6.8489,47.15933],[6.9508,47.24338],[6.95108,47.26428],[6.94316,47.28747],[7.05305,47.33304],[7.0564,47.35134],[7.03125,47.36996],[6.87959,47.35335],[6.88542,47.37262],[6.93744,47.40714],[6.93953,47.43388],[7.0024,47.45264],[6.98425,47.49432],[7.0231,47.50522],[7.07425,47.48863],[7.12781,47.50371],[7.16249,47.49025],[7.19583,47.49455],[7.17026,47.44312],[7.24669,47.4205],[7.33526,47.44186],[7.35603,47.43432],[7.40308,47.43638],[7.43088,47.45846],[7.4462,47.46264],[7.4583,47.47216],[7.42923,47.48628],[7.43356,47.49712],[7.47534,47.47932],[7.51076,47.49651],[7.49804,47.51798],[7.5229,47.51644],[7.53199,47.5284],[7.51904,47.53515],[7.50588,47.52856],[7.49691,47.53821],[7.50873,47.54546],[7.51723,47.54578],[7.52831,47.55347],[7.53634,47.55553],[7.55652,47.56779],[7.55689,47.57232],[7.56548,47.57617],[7.56684,47.57785],[7.58386,47.57536],[7.58945,47.59017],[7.60523,47.58519],[7.60459,47.57869],[7.61929,47.57683],[7.64309,47.59151],[7.64213,47.5944],[7.64599,47.59695],[7.67395,47.59212],[7.68229,47.59905],[7.69385,47.60099],[7.68486,47.59601],[7.67115,47.5871],[7.68904,47.57133],[7.67655,47.56435],[7.63338,47.56256],[7.65083,47.54662],[7.66174,47.54554],[7.6656,47.53752],[7.68101,47.53232],[7.69642,47.53297],[7.71961,47.54219],[7.75261,47.54599],[7.79486,47.55691],[7.81901,47.58798],[7.84412,47.5841],[7.88664,47.58854],[7.90673,47.57674],[7.91251,47.55031],[7.94494,47.54511],[7.95682,47.55789],[7.97581,47.55493],[8.00113,47.55616],[8.02136,47.55096],[8.04383,47.55443],[8.06663,47.56374],[8.08557,47.55768],[8.10002,47.56504],[8.10395,47.57918],[8.11543,47.5841],[8.13662,47.58432],[8.13823,47.59147],[8.14947,47.59558],[8.1652,47.5945],[8.19378,47.61636],[8.20617,47.62141],[8.22011,47.6181],[8.22577,47.60385],[8.23809,47.61204],[8.25863,47.61571],[8.26313,47.6103],[8.2824,47.61225],[8.29722,47.60603],[8.29524,47.5919],[8.30277,47.58607],[8.32735,47.57133],[8.38273,47.56608],[8.39477,47.57826],[8.43235,47.56617],[8.49431,47.58107],[8.48949,47.588],[8.46637,47.58389],[8.45578,47.60121],[8.50747,47.61897],[8.51686,47.63476],[8.55756,47.62394],[8.57586,47.59537],[8.60348,47.61204],[8.59545,47.64298],[8.60701,47.65271],[8.61471,47.64514],[8.60412,47.63735],[8.62049,47.63757],[8.62884,47.65098],[8.61113,47.66332],[8.6052,47.67258],[8.57683,47.66158],[8.56141,47.67088],[8.52801,47.66059],[8.5322,47.64687],[8.49656,47.64709],[8.46605,47.64103],[8.4667,47.65747],[8.44711,47.65379],[8.42264,47.66667],[8.41346,47.66676],[8.40473,47.67499],[8.4211,47.68407],[8.40569,47.69855],[8.44807,47.72426],[8.45771,47.7493],[8.48868,47.77215],[8.56814,47.78001],[8.56415,47.80633],[8.61657,47.79998],[8.62408,47.7626],[8.64425,47.76398],[8.65292,47.80066],[8.68022,47.78599],[8.68985,47.75686],[8.71778,47.76571],[8.74251,47.75168],[8.70543,47.73121],[8.73671,47.7169],[8.72617,47.69651],[8.72809,47.69282]],[[8.95861,45.96485],[8.97604,45.96151],[8.97741,45.98317],[8.96668,45.98436],[8.95861,45.96485]],[[8.70847,47.68904],[8.71773,47.69088],[8.70237,47.71453],[8.66416,47.71367],[8.67508,47.6979],[8.65769,47.68928],[8.66837,47.68437],[8.68985,47.69552],[8.70847,47.68904]]]]}},{type:"Feature",properties:{iso1A2:"CI",iso1A3:"CIV",iso1N3:"384",wikidata:"Q1008",nameEn:"Côte d'Ivoire",groups:["011","202","002"],callingCodes:["225"]},geometry:{type:"MultiPolygon",coordinates:[[[[-7.52774,3.7105],[-7.53259,4.35145],[-7.59349,4.8909],[-7.53876,4.94294],[-7.55369,5.08667],[-7.48901,5.14118],[-7.46165,5.26256],[-7.36463,5.32944],[-7.43428,5.42355],[-7.37209,5.61173],[-7.43926,5.74787],[-7.43677,5.84687],[-7.46165,5.84934],[-7.48155,5.80974],[-7.67309,5.94337],[-7.70294,5.90625],[-7.78254,5.99037],[-7.79747,6.07696],[-7.8497,6.08932],[-7.83478,6.20309],[-7.90692,6.27728],[-8.00642,6.31684],[-8.17557,6.28222],[-8.3298,6.36381],[-8.38453,6.35887],[-8.45666,6.49977],[-8.48652,6.43797],[-8.59456,6.50612],[-8.31736,6.82837],[-8.29249,7.1691],[-8.37458,7.25794],[-8.41935,7.51203],[-8.47114,7.55676],[-8.4003,7.6285],[-8.21374,7.54466],[-8.09931,7.78626],[-8.13414,7.87991],[-8.06449,8.04989],[-7.94695,8.00925],[-7.99919,8.11023],[-7.98675,8.20134],[-8.062,8.16071],[-8.2411,8.24196],[-8.22991,8.48438],[-7.92518,8.50652],[-7.65653,8.36873],[-7.69882,8.66148],[-7.95503,8.81146],[-7.92518,8.99332],[-7.73862,9.08422],[-7.90777,9.20456],[-7.85056,9.41812],[-8.03463,9.39604],[-8.14657,9.55062],[-8.09434,9.86936],[-8.15652,9.94288],[-8.11921,10.04577],[-8.01225,10.1021],[-7.97971,10.17117],[-7.92107,10.15577],[-7.63048,10.46334],[-7.54462,10.40921],[-7.52261,10.4655],[-7.44555,10.44602],[-7.3707,10.24677],[-7.13331,10.24877],[-7.0603,10.14711],[-7.00966,10.15794],[-6.97444,10.21644],[-7.01186,10.25111],[-6.93921,10.35291],[-6.68164,10.35074],[-6.63541,10.66893],[-6.52974,10.59104],[-6.42847,10.5694],[-6.40646,10.69922],[-6.325,10.68624],[-6.24795,10.74248],[-6.1731,10.46983],[-6.18851,10.24244],[-5.99478,10.19694],[-5.78124,10.43952],[-5.65135,10.46767],[-5.51058,10.43177],[-5.39602,10.2929],[-5.12465,10.29788],[-4.96453,9.99923],[-4.96621,9.89132],[-4.6426,9.70696],[-4.31392,9.60062],[-4.25999,9.76012],[-3.69703,9.94279],[-3.31779,9.91125],[-3.27228,9.84981],[-3.19306,9.93781],[-3.16609,9.85147],[-3.00765,9.74019],[-2.93012,9.57403],[-2.76494,9.40778],[-2.68802,9.49343],[-2.69814,9.22717],[-2.77799,9.04949],[-2.66357,9.01771],[-2.58243,8.7789],[-2.49037,8.20872],[-2.62901,8.11495],[-2.61232,8.02645],[-2.67787,8.02055],[-2.74819,7.92613],[-2.78395,7.94974],[-2.79467,7.86002],[-2.92339,7.60847],[-2.97822,7.27165],[-2.95438,7.23737],[-3.23327,6.81744],[-3.21954,6.74407],[-3.25999,6.62521],[-3.01896,5.71697],[-2.95323,5.71865],[-2.96671,5.6415],[-2.93132,5.62137],[-2.85378,5.65156],[-2.76614,5.60963],[-2.72737,5.34789],[-2.77625,5.34621],[-2.73074,5.1364],[-2.75502,5.10657],[-2.95261,5.12477],[-2.96554,5.10397],[-3.063,5.13665],[-3.11073,5.12675],[-3.10675,5.08515],[-3.34019,4.17519],[-7.52774,3.7105]]]]}},{type:"Feature",properties:{iso1A2:"CK",iso1A3:"COK",iso1N3:"184",wikidata:"Q26988",nameEn:"Cook Islands",country:"NZ",groups:["061","009"],driveSide:"left",callingCodes:["682"]},geometry:{type:"MultiPolygon",coordinates:[[[[-167.73854,-14.92809],[-167.75195,-10.12005],[-167.75329,-7.52784],[-156.50903,-7.4975],[-156.4957,-12.32002],[-156.46451,-23.21255],[-167.73129,-23.22266],[-167.73854,-14.92809]]]]}},{type:"Feature",properties:{iso1A2:"CL",iso1A3:"CHL",iso1N3:"152",wikidata:"Q298",nameEn:"Chile",groups:["005","419","019"],callingCodes:["56"]},geometry:{type:"MultiPolygon",coordinates:[[[[-68.60702,-52.65781],[-68.60733,-54.9125],[-68.01394,-54.8753],[-67.46182,-54.92205],[-67.11046,-54.94199],[-66.07313,-55.19618],[-68.11646,-58.14883],[-113.52687,-26.52828],[-70.59118,-18.35072],[-70.378,-18.3495],[-70.31267,-18.31258],[-70.16394,-18.31737],[-69.96732,-18.25992],[-69.81607,-18.12582],[-69.75305,-17.94605],[-69.82868,-17.72048],[-69.79087,-17.65563],[-69.66483,-17.65083],[-69.46897,-17.4988],[-69.46623,-17.60518],[-69.34126,-17.72753],[-69.28671,-17.94844],[-69.07496,-18.03715],[-69.14807,-18.16893],[-69.07432,-18.28259],[-68.94987,-18.93302],[-68.87082,-19.06003],[-68.80602,-19.08355],[-68.61989,-19.27584],[-68.41218,-19.40499],[-68.66761,-19.72118],[-68.54611,-19.84651],[-68.57132,-20.03134],[-68.74273,-20.08817],[-68.7276,-20.46178],[-68.44023,-20.62701],[-68.55383,-20.7355],[-68.53957,-20.91542],[-68.40403,-20.94562],[-68.18816,-21.28614],[-67.85114,-22.87076],[-67.54284,-22.89771],[-67.18382,-22.81525],[-66.99632,-22.99839],[-67.33563,-24.04237],[-68.24825,-24.42596],[-68.56909,-24.69831],[-68.38372,-25.08636],[-68.57622,-25.32505],[-68.38372,-26.15353],[-68.56909,-26.28146],[-68.59048,-26.49861],[-68.27677,-26.90626],[-68.43363,-27.08414],[-68.77586,-27.16029],[-69.22504,-27.95042],[-69.66709,-28.44055],[-69.80969,-29.07185],[-69.99507,-29.28351],[-69.8596,-30.26131],[-70.14479,-30.36595],[-70.55832,-31.51559],[-69.88099,-33.34489],[-69.87386,-34.13344],[-70.49416,-35.24145],[-70.38008,-36.02375],[-70.95047,-36.4321],[-71.24279,-37.20264],[-70.89532,-38.6923],[-71.37826,-38.91474],[-71.92726,-40.72714],[-71.74901,-42.11711],[-72.15541,-42.15941],[-72.14828,-42.85321],[-71.64206,-43.64774],[-71.81318,-44.38097],[-71.16436,-44.46244],[-71.26418,-44.75684],[-72.06985,-44.81756],[-71.35687,-45.22075],[-71.75614,-45.61611],[-71.68577,-46.55385],[-71.94152,-47.13595],[-72.50478,-47.80586],[-72.27662,-48.28727],[-72.54042,-48.52392],[-72.56894,-48.81116],[-73.09655,-49.14342],[-73.45156,-49.79461],[-73.55259,-49.92488],[-73.15765,-50.78337],[-72.31343,-50.58411],[-72.33873,-51.59954],[-71.99889,-51.98018],[-69.97824,-52.00845],[-68.41683,-52.33516],[-68.60702,-52.65781]]]]}},{type:"Feature",properties:{iso1A2:"CM",iso1A3:"CMR",iso1N3:"120",wikidata:"Q1009",nameEn:"Cameroon",groups:["017","202","002"],callingCodes:["237"]},geometry:{type:"MultiPolygon",coordinates:[[[[14.83314,12.62963],[14.90827,12.3269],[14.89019,12.16593],[14.96952,12.0925],[15.00146,12.1223],[15.0349,12.10698],[15.05786,12.0608],[15.04808,11.8731],[15.11579,11.79313],[15.06595,11.71126],[15.13149,11.5537],[15.0585,11.40481],[15.10021,11.04101],[15.04957,11.02347],[15.09127,10.87431],[15.06737,10.80921],[15.15532,10.62846],[15.14936,10.53915],[15.23724,10.47764],[15.30874,10.31063],[15.50535,10.1098],[15.68761,9.99344],[15.41408,9.92876],[15.24618,9.99246],[15.14043,9.99246],[15.05999,9.94845],[14.95722,9.97926],[14.80082,9.93818],[14.4673,10.00264],[14.20411,10.00055],[14.1317,9.82413],[14.01793,9.73169],[13.97544,9.6365],[14.37094,9.2954],[14.35707,9.19611],[14.83566,8.80557],[15.09484,8.65982],[15.20426,8.50892],[15.50743,7.79302],[15.59272,7.7696],[15.56964,7.58936],[15.49743,7.52179],[15.23397,7.25135],[15.04717,6.77085],[14.96311,6.75693],[14.79966,6.39043],[14.80122,6.34866],[14.74206,6.26356],[14.56149,6.18928],[14.43073,6.08867],[14.42917,6.00508],[14.49455,5.91683],[14.60974,5.91838],[14.62375,5.70466],[14.58951,5.59777],[14.62531,5.51411],[14.52724,5.28319],[14.57083,5.23979],[14.65489,5.21343],[14.73383,4.6135],[15.00825,4.41458],[15.08609,4.30282],[15.10644,4.1362],[15.17482,4.05131],[15.07686,4.01805],[15.73522,3.24348],[15.77725,3.26835],[16.05449,3.02306],[16.08252,2.45708],[16.19357,2.21537],[16.15568,2.18955],[16.08563,2.19733],[16.05294,1.9811],[16.14634,1.70259],[16.02647,1.65591],[16.02959,1.76483],[15.48942,1.98265],[15.34776,1.91264],[15.22634,2.03243],[15.00996,1.98887],[14.61145,2.17866],[13.29457,2.16106],[13.28534,2.25716],[11.37116,2.29975],[11.3561,2.17217],[9.991,2.16561],[9.90749,2.20049],[9.89012,2.20457],[9.84716,2.24676],[9.83238,2.29079],[9.83754,2.32428],[9.82123,2.35097],[9.81162,2.33797],[9.22018,3.72052],[8.34397,4.30689],[8.60302,4.87353],[8.78027,5.1243],[8.92029,5.58403],[8.83687,5.68483],[8.88156,5.78857],[8.84209,5.82562],[9.51757,6.43874],[9.70674,6.51717],[9.77824,6.79088],[9.86314,6.77756],[10.15135,7.03781],[10.21466,6.88996],[10.53639,6.93432],[10.57214,7.16345],[10.59746,7.14719],[10.60789,7.06885],[10.83727,6.9358],[10.8179,6.83377],[10.94302,6.69325],[11.09644,6.68437],[11.09495,6.51717],[11.42041,6.53789],[11.42264,6.5882],[11.51499,6.60892],[11.57755,6.74059],[11.55818,6.86186],[11.63117,6.9905],[11.87396,7.09398],[11.84864,7.26098],[11.93205,7.47812],[12.01844,7.52981],[11.99908,7.67302],[12.20909,7.97553],[12.19271,8.10826],[12.24782,8.17904],[12.26123,8.43696],[12.4489,8.52536],[12.44146,8.6152],[12.68722,8.65938],[12.71701,8.7595],[12.79,8.75361],[12.81085,8.91992],[12.90022,9.11411],[12.91958,9.33905],[12.85628,9.36698],[13.02385,9.49334],[13.22642,9.57266],[13.25472,9.76795],[13.29941,9.8296],[13.25025,9.86042],[13.24132,9.91031],[13.27409,9.93232],[13.286,9.9822],[13.25323,10.00127],[13.25025,10.03647],[13.34111,10.12299],[13.43644,10.13326],[13.5705,10.53183],[13.54964,10.61236],[13.73434,10.9255],[13.70753,10.94451],[13.7403,11.00593],[13.78945,11.00154],[13.97489,11.30258],[14.17821,11.23831],[14.6124,11.51283],[14.64591,11.66166],[14.55207,11.72001],[14.61612,11.7798],[14.6474,12.17466],[14.4843,12.35223],[14.22215,12.36533],[14.17523,12.41916],[14.20204,12.53405],[14.08251,13.0797],[14.46881,13.08259],[14.56101,12.91036],[14.55058,12.78256],[14.83314,12.62963]]]]}},{type:"Feature",properties:{iso1A2:"CN",iso1A3:"CHN",iso1N3:"156",wikidata:"Q148",nameEn:"China",aliases:["RC"],groups:["030","142"],callingCodes:["86"]},geometry:{type:"MultiPolygon",coordinates:[[[[125.6131,53.07229],[126.558,52.13738],[126.44606,51.98254],[126.68349,51.70607],[126.90369,51.3238],[126.93135,51.0841],[127.14586,50.91152],[127.28165,50.72075],[127.36335,50.58306],[127.28765,50.46585],[127.36009,50.43787],[127.37384,50.28393],[127.60515,50.23503],[127.49299,50.01251],[127.53516,49.84306],[127.83476,49.5748],[128.72896,49.58676],[129.11153,49.36813],[129.23232,49.40353],[129.35317,49.3481],[129.40398,49.44194],[129.50685,49.42398],[129.67598,49.29596],[129.85416,49.11067],[130.2355,48.86741],[130.43232,48.90844],[130.66946,48.88251],[130.52147,48.61745],[130.84462,48.30942],[130.65103,48.10052],[130.90915,47.90623],[130.95985,47.6957],[131.09871,47.6852],[131.2635,47.73325],[131.90448,47.68011],[132.57309,47.71741],[132.66989,47.96491],[134.49516,48.42884],[134.75328,48.36763],[134.67098,48.1564],[134.55508,47.98651],[134.7671,47.72051],[134.50898,47.4812],[134.20016,47.33458],[134.03538,46.75668],[133.84104,46.46681],[133.91496,46.4274],[133.88097,46.25066],[133.68047,46.14697],[133.72695,46.05576],[133.67569,45.9759],[133.60442,45.90053],[133.48457,45.86203],[133.41083,45.57723],[133.19419,45.51913],[133.09279,45.25693],[133.12293,45.1332],[132.96373,45.0212],[132.83978,45.05916],[131.99417,45.2567],[131.86903,45.33636],[131.76532,45.22609],[131.66852,45.2196],[131.68466,45.12374],[131.48415,44.99513],[130.95639,44.85154],[131.1108,44.70266],[131.30365,44.04262],[131.25484,44.03131],[131.23583,43.96085],[131.26176,43.94011],[131.21105,43.82383],[131.19492,43.53047],[131.29402,43.46695],[131.30324,43.39498],[131.19031,43.21385],[131.20414,43.13654],[131.10274,43.04734],[131.135,42.94114],[131.02668,42.91246],[131.02438,42.86518],[130.66524,42.84753],[130.44361,42.76205],[130.40213,42.70788],[130.56576,42.68925],[130.62107,42.58413],[130.55143,42.52158],[130.50123,42.61636],[130.44361,42.54849],[130.41826,42.6011],[130.2385,42.71127],[130.23068,42.80125],[130.26095,42.9027],[130.09764,42.91425],[130.12957,42.98361],[129.96409,42.97306],[129.95082,43.01051],[129.8865,43.00395],[129.85261,42.96494],[129.83277,42.86746],[129.80719,42.79218],[129.7835,42.76521],[129.77183,42.69435],[129.75294,42.59409],[129.72541,42.43739],[129.60482,42.44461],[129.54701,42.37254],[129.42882,42.44702],[129.28541,42.41574],[129.22423,42.3553],[129.22285,42.26491],[129.15178,42.17224],[128.96068,42.06657],[128.94007,42.03537],[128.04487,42.01769],[128.15119,41.74568],[128.30716,41.60322],[128.20061,41.40895],[128.18546,41.41279],[128.12967,41.37931],[128.03311,41.39232],[128.02633,41.42103],[127.92943,41.44291],[127.29712,41.49473],[127.17841,41.59714],[126.90729,41.79955],[126.60631,41.65565],[126.53189,41.35206],[126.242,41.15454],[126.00335,40.92835],[125.76869,40.87908],[125.71172,40.85223],[124.86913,40.45387],[124.40719,40.13655],[124.38556,40.11047],[124.3322,40.05573],[124.37089,40.03004],[124.35029,39.95639],[124.23201,39.9248],[124.17532,39.8232],[123.90497,38.79949],[123.85601,37.49093],[122.80525,33.30571],[122.29378,31.76513],[123.5458,31.01942],[121.03532,26.8787],[120.49232,25.22863],[118.56434,24.49266],[118.42453,24.54644],[118.35291,24.51645],[118.28244,24.51231],[118.11703,24.39734],[118.41371,24.06775],[111.60491,13.57105],[108.00365,17.98159],[108.10003,21.47338],[108.0569,21.53604],[108.02926,21.54997],[107.97932,21.54503],[107.97383,21.53961],[107.97074,21.54072],[107.96774,21.53601],[107.95232,21.5388],[107.92652,21.58906],[107.90006,21.5905],[107.86114,21.65128],[107.80355,21.66141],[107.66967,21.60787],[107.56537,21.61945],[107.54047,21.5934],[107.49065,21.59774],[107.49532,21.62958],[107.47197,21.6672],[107.41593,21.64839],[107.38636,21.59774],[107.35989,21.60063],[107.35834,21.6672],[107.29296,21.74674],[107.24625,21.7077],[107.20734,21.71493],[107.10771,21.79879],[107.02615,21.81981],[107.00964,21.85948],[107.06101,21.88982],[107.05634,21.92303],[106.99252,21.95191],[106.97228,21.92592],[106.92714,21.93459],[106.9178,21.97357],[106.81038,21.97934],[106.74345,22.00965],[106.72551,21.97923],[106.69276,21.96013],[106.68274,21.99811],[106.70142,22.02409],[106.6983,22.15102],[106.67495,22.1885],[106.69986,22.22309],[106.6516,22.33977],[106.55976,22.34841],[106.57221,22.37],[106.55665,22.46498],[106.58395,22.474],[106.61269,22.60301],[106.65316,22.5757],[106.71698,22.58432],[106.72321,22.63606],[106.76293,22.73491],[106.82404,22.7881],[106.83685,22.8098],[106.81271,22.8226],[106.78422,22.81532],[106.71128,22.85982],[106.71387,22.88296],[106.6734,22.89587],[106.6516,22.86862],[106.60179,22.92884],[106.55976,22.92311],[106.51306,22.94891],[106.49749,22.91164],[106.34961,22.86718],[106.27022,22.87722],[106.19705,22.98475],[106.00179,22.99049],[105.99568,22.94178],[105.90119,22.94168],[105.8726,22.92756],[105.72382,23.06641],[105.57594,23.075],[105.56037,23.16806],[105.49966,23.20669],[105.42805,23.30824],[105.40782,23.28107],[105.32376,23.39684],[105.22569,23.27249],[105.17276,23.28679],[105.11672,23.25247],[105.07002,23.26248],[104.98712,23.19176],[104.96532,23.20463],[104.9486,23.17235],[104.91435,23.18666],[104.87992,23.17141],[104.87382,23.12854],[104.79478,23.12934],[104.8334,23.01484],[104.86765,22.95178],[104.84942,22.93631],[104.77114,22.90017],[104.72755,22.81984],[104.65283,22.83419],[104.60457,22.81841],[104.58122,22.85571],[104.47225,22.75813],[104.35593,22.69353],[104.25683,22.76534],[104.27084,22.8457],[104.11384,22.80363],[104.03734,22.72945],[104.01088,22.51823],[103.99247,22.51958],[103.97384,22.50634],[103.96783,22.51173],[103.96352,22.50584],[103.95191,22.5134],[103.94513,22.52553],[103.93286,22.52703],[103.87904,22.56683],[103.64506,22.79979],[103.56255,22.69499],[103.57812,22.65764],[103.52675,22.59155],[103.43646,22.70648],[103.43179,22.75816],[103.32282,22.8127],[103.28079,22.68063],[103.18895,22.64471],[103.15782,22.59873],[103.17961,22.55705],[103.07843,22.50097],[103.0722,22.44775],[102.9321,22.48659],[102.8636,22.60735],[102.60675,22.73376],[102.57095,22.7036],[102.51802,22.77969],[102.46665,22.77108],[102.42618,22.69212],[102.38415,22.67919],[102.41061,22.64184],[102.25339,22.4607],[102.26428,22.41321],[102.16621,22.43336],[102.14099,22.40092],[102.1245,22.43372],[102.03633,22.46164],[101.98487,22.42766],[101.91344,22.44417],[101.90714,22.38688],[101.86828,22.38397],[101.7685,22.50337],[101.68973,22.46843],[101.61306,22.27515],[101.56789,22.28876],[101.53638,22.24794],[101.60675,22.13513],[101.57525,22.13026],[101.62566,21.96574],[101.7791,21.83019],[101.74555,21.72852],[101.83257,21.61562],[101.80001,21.57461],[101.7475,21.5873],[101.7727,21.51794],[101.74224,21.48276],[101.74014,21.30967],[101.84412,21.25291],[101.83887,21.20983],[101.76745,21.21571],[101.79266,21.19025],[101.7622,21.14813],[101.70548,21.14911],[101.66977,21.20004],[101.60886,21.17947],[101.59491,21.18621],[101.6068,21.23329],[101.54563,21.25668],[101.29326,21.17254],[101.2229,21.23271],[101.26912,21.36482],[101.19349,21.41959],[101.2124,21.56422],[101.15156,21.56129],[101.11744,21.77659],[100.87265,21.67396],[100.72143,21.51898],[100.57861,21.45637],[100.4811,21.46148],[100.42892,21.54325],[100.35201,21.53176],[100.25863,21.47043],[100.18447,21.51898],[100.1625,21.48704],[100.12542,21.50365],[100.10757,21.59945],[100.17486,21.65306],[100.12679,21.70539],[100.04956,21.66843],[99.98654,21.71064],[99.94003,21.82782],[99.99084,21.97053],[99.96612,22.05965],[99.85351,22.04183],[99.47585,22.13345],[99.33166,22.09656],[99.1552,22.15874],[99.19176,22.16983],[99.17318,22.18025],[99.28771,22.4105],[99.37972,22.50188],[99.38247,22.57544],[99.31243,22.73893],[99.45654,22.85726],[99.43537,22.94086],[99.54218,22.90014],[99.52214,23.08218],[99.34127,23.13099],[99.25741,23.09025],[99.04601,23.12215],[99.05975,23.16382],[98.88597,23.18656],[98.92515,23.29535],[98.93958,23.31414],[98.87573,23.33038],[98.92104,23.36946],[98.87683,23.48995],[98.82877,23.47908],[98.80294,23.5345],[98.88396,23.59555],[98.81775,23.694],[98.82933,23.72921],[98.79607,23.77947],[98.68209,23.80492],[98.67797,23.9644],[98.89632,24.10612],[98.87998,24.15624],[98.85319,24.13042],[98.59256,24.08371],[98.54476,24.13119],[98.20666,24.11406],[98.07806,24.07988],[98.06703,24.08028],[98.0607,24.07812],[98.05671,24.07961],[98.05302,24.07408],[98.04709,24.07616],[97.99583,24.04932],[97.98691,24.03897],[97.93951,24.01953],[97.90998,24.02094],[97.88616,24.00463],[97.88414,23.99405],[97.88814,23.98605],[97.89683,23.98389],[97.89676,23.97931],[97.8955,23.97758],[97.88811,23.97446],[97.86545,23.97723],[97.84328,23.97603],[97.79416,23.95663],[97.79456,23.94836],[97.72302,23.89288],[97.64667,23.84574],[97.5247,23.94032],[97.62363,24.00506],[97.72903,24.12606],[97.75305,24.16902],[97.72799,24.18883],[97.72998,24.2302],[97.76799,24.26365],[97.71941,24.29652],[97.66723,24.30027],[97.65624,24.33781],[97.7098,24.35658],[97.66998,24.45288],[97.60029,24.4401],[97.52757,24.43748],[97.56286,24.54535],[97.56525,24.72838],[97.54675,24.74202],[97.5542,24.74943],[97.56383,24.75535],[97.56648,24.76475],[97.64354,24.79171],[97.70181,24.84557],[97.73127,24.83015],[97.76481,24.8289],[97.79949,24.85655],[97.72903,24.91332],[97.72216,25.08508],[97.77023,25.11492],[97.83614,25.2715],[97.92541,25.20815],[98.14925,25.41547],[98.12591,25.50722],[98.18084,25.56298],[98.16848,25.62739],[98.25774,25.6051],[98.31268,25.55307],[98.40606,25.61129],[98.54064,25.85129],[98.63128,25.79937],[98.70818,25.86241],[98.60763,26.01512],[98.57085,26.11547],[98.63128,26.15492],[98.66884,26.09165],[98.7329,26.17218],[98.67797,26.24487],[98.72741,26.36183],[98.77547,26.61994],[98.7333,26.85615],[98.69582,27.56499],[98.43353,27.67086],[98.42529,27.55404],[98.32641,27.51385],[98.13964,27.9478],[98.15337,28.12114],[97.90069,28.3776],[97.79632,28.33168],[97.70705,28.5056],[97.56835,28.55628],[97.50518,28.49716],[97.47085,28.2688],[97.41729,28.29783],[97.34547,28.21385],[97.1289,28.3619],[96.98882,28.32564],[96.88445,28.39452],[96.85561,28.4875],[96.6455,28.61657],[96.48895,28.42955],[96.40929,28.51526],[96.61391,28.72742],[96.3626,29.10607],[96.20467,29.02325],[96.18682,29.11087],[96.31316,29.18643],[96.05361,29.38167],[95.84899,29.31464],[95.75149,29.32063],[95.72086,29.20797],[95.50842,29.13487],[95.41091,29.13007],[95.3038,29.13847],[95.26122,29.07727],[95.2214,29.10727],[95.11291,29.09527],[95.0978,29.14446],[94.81353,29.17804],[94.69318,29.31739],[94.2752,29.11687],[94.35897,29.01965],[93.72797,28.68821],[93.44621,28.67189],[93.18069,28.50319],[93.14635,28.37035],[92.93075,28.25671],[92.67486,28.15018],[92.65472,28.07632],[92.73025,28.05814],[92.7275,27.98662],[92.42538,27.80092],[92.32101,27.79363],[92.27432,27.89077],[91.87057,27.7195],[91.84722,27.76325],[91.6469,27.76358],[91.5629,27.84823],[91.48973,27.93903],[91.46327,28.0064],[91.25779,28.07509],[91.20019,27.98715],[90.69894,28.07784],[90.58842,28.02838],[90.13387,28.19178],[89.79762,28.23979],[89.59525,28.16433],[89.12825,27.62502],[89.0582,27.60985],[88.97213,27.51671],[88.95355,27.4106],[89.00216,27.32532],[88.96947,27.30319],[88.93678,27.33777],[88.91901,27.32483],[88.82981,27.38814],[88.77517,27.45415],[88.88091,27.85192],[88.83559,28.01936],[88.63235,28.12356],[88.54858,28.06057],[88.25332,27.9478],[88.1278,27.95417],[88.13378,27.88015],[87.82681,27.95248],[87.72718,27.80938],[87.56996,27.84517],[87.11696,27.84104],[87.03757,27.94835],[86.75582,28.04182],[86.74181,28.10638],[86.56265,28.09569],[86.51609,27.96623],[86.42736,27.91122],[86.22966,27.9786],[86.18607,28.17364],[86.088,28.09264],[86.08333,28.02121],[86.12069,27.93047],[86.06309,27.90021],[85.94946,27.9401],[85.97813,27.99023],[85.90743,28.05144],[85.84672,28.18187],[85.74864,28.23126],[85.71907,28.38064],[85.69105,28.38475],[85.60854,28.25045],[85.59765,28.30529],[85.4233,28.32996],[85.38127,28.28336],[85.10729,28.34092],[85.18668,28.54076],[85.19135,28.62825],[85.06059,28.68562],[84.85511,28.58041],[84.62317,28.73887],[84.47528,28.74023],[84.2231,28.89571],[84.24801,29.02783],[84.18107,29.23451],[83.97559,29.33091],[83.82303,29.30513],[83.63156,29.16249],[83.44787,29.30513],[83.28131,29.56813],[83.07116,29.61957],[82.73024,29.81695],[82.5341,29.9735],[82.38622,30.02608],[82.16984,30.0692],[82.19475,30.16884],[82.10757,30.23745],[82.10135,30.35439],[81.99082,30.33423],[81.62033,30.44703],[81.41018,30.42153],[81.39928,30.21862],[81.33355,30.15303],[81.2623,30.14596],[81.29032,30.08806],[81.24362,30.0126],[81.12842,30.01395],[81.03953,30.20059],[80.83343,30.32023],[80.54504,30.44936],[80.20721,30.58541],[79.93255,30.88288],[79.59884,30.93943],[79.22805,31.34963],[79.14016,31.43403],[79.01931,31.42817],[78.77898,31.31209],[78.71032,31.50197],[78.84516,31.60631],[78.69933,31.78723],[78.78036,31.99478],[78.74404,32.00384],[78.68754,32.10256],[78.49609,32.2762],[78.4645,32.45367],[78.38897,32.53938],[78.73916,32.69438],[78.7831,32.46873],[78.96713,32.33655],[78.99322,32.37948],[79.0979,32.38051],[79.13174,32.47766],[79.26768,32.53277],[79.46562,32.69668],[79.14016,33.02545],[79.15252,33.17156],[78.73636,33.56521],[78.67599,33.66445],[78.77349,33.73871],[78.73367,34.01121],[78.65657,34.03195],[78.66225,34.08858],[78.91769,34.15452],[78.99802,34.3027],[79.05364,34.32482],[78.74465,34.45174],[78.56475,34.50835],[78.54964,34.57283],[78.27781,34.61484],[78.18435,34.7998],[78.22692,34.88771],[78.00033,35.23954],[78.03466,35.3785],[78.11664,35.48022],[77.80532,35.52058],[77.70232,35.46244],[77.44277,35.46132],[76.96624,35.5932],[76.84539,35.67356],[76.77323,35.66062],[76.50961,35.8908],[76.33453,35.84296],[76.14913,35.82848],[76.15325,35.9264],[75.93028,36.13136],[76.00906,36.17511],[76.0324,36.41198],[75.92391,36.56986],[75.72737,36.7529],[75.45562,36.71971],[75.40481,36.95382],[75.13839,37.02622],[74.56453,37.03023],[74.49981,37.24518],[74.80605,37.21565],[74.88887,37.23275],[75.12328,37.31839],[75.09719,37.37297],[75.15899,37.41443],[75.06011,37.52779],[74.94338,37.55501],[74.8912,37.67576],[75.00935,37.77486],[74.92416,37.83428],[74.9063,38.03033],[74.82665,38.07359],[74.80331,38.19889],[74.69894,38.22155],[74.69619,38.42947],[74.51217,38.47034],[74.17022,38.65504],[73.97933,38.52945],[73.79806,38.61106],[73.80656,38.66449],[73.7033,38.84782],[73.7445,38.93867],[73.82964,38.91517],[73.81728,39.04007],[73.75823,39.023],[73.60638,39.24534],[73.54572,39.27567],[73.55396,39.3543],[73.5004,39.38402],[73.59241,39.40843],[73.59831,39.46425],[73.87018,39.47879],[73.94683,39.60733],[73.92354,39.69565],[73.9051,39.75073],[73.83006,39.76136],[73.97049,40.04378],[74.25533,40.13191],[74.35063,40.09742],[74.69875,40.34668],[74.85996,40.32857],[74.78168,40.44886],[74.82013,40.52197],[75.08243,40.43945],[75.22834,40.45382],[75.5854,40.66874],[75.69663,40.28642],[75.91361,40.2948],[75.96168,40.38064],[76.33659,40.3482],[76.5261,40.46114],[76.75681,40.95354],[76.99302,41.0696],[77.28004,41.0033],[77.3693,41.0375],[77.52723,41.00227],[77.76206,41.01574],[77.81287,41.14307],[78.12873,41.23091],[78.15757,41.38565],[78.3732,41.39603],[79.92977,42.04113],[80.17842,42.03211],[80.17807,42.21166],[80.26841,42.23797],[80.16892,42.61137],[80.26886,42.8366],[80.38169,42.83142],[80.58999,42.9011],[80.3735,43.01557],[80.62913,43.141],[80.78817,43.14235],[80.77771,43.30065],[80.69718,43.32589],[80.75156,43.44948],[80.40031,44.10986],[80.40229,44.23319],[80.38384,44.63073],[79.8987,44.89957],[80.11169,45.03352],[81.73278,45.3504],[82.51374,45.1755],[82.58474,45.40027],[82.21792,45.56619],[83.04622,47.19053],[83.92184,46.98912],[84.73077,47.01394],[84.93995,46.87399],[85.22443,47.04816],[85.54294,47.06171],[85.69696,47.2898],[85.61067,47.49753],[85.5169,48.05493],[85.73581,48.3939],[86.38069,48.46064],[86.75343,48.70331],[86.73568,48.99918],[86.87238,49.12432],[87.28386,49.11626],[87.478,49.07403],[87.48983,49.13794],[87.81333,49.17354],[87.88171,48.95853],[87.73822,48.89582],[88.0788,48.71436],[87.96361,48.58478],[88.58939,48.34531],[88.58316,48.21893],[88.8011,48.11302],[88.93186,48.10263],[89.0711,47.98528],[89.55453,48.0423],[89.76624,47.82745],[90.06512,47.88177],[90.10871,47.7375],[90.33598,47.68303],[90.48854,47.41826],[90.48542,47.30438],[90.76108,46.99399],[90.84035,46.99525],[91.03649,46.72916],[91.0147,46.58171],[91.07696,46.57315],[90.89639,46.30711],[90.99672,46.14207],[91.03026,46.04194],[90.70907,45.73437],[90.65114,45.49314],[90.89169,45.19667],[91.64048,45.07408],[93.51161,44.95964],[94.10003,44.71016],[94.71959,44.35284],[95.01191,44.25274],[95.39772,44.2805],[95.32891,44.02407],[95.52594,43.99353],[95.89543,43.2528],[96.35658,42.90363],[96.37926,42.72055],[97.1777,42.7964],[99.50671,42.56535],[100.33297,42.68231],[100.84979,42.67087],[101.28833,42.58524],[101.80515,42.50074],[102.07645,42.22519],[102.42826,42.15137],[102.72403,42.14675],[103.3685,41.89696],[103.92804,41.78246],[104.52258,41.8706],[104.51667,41.66113],[104.91272,41.64619],[105.01119,41.58382],[105.24708,41.7442],[106.76517,42.28741],[107.24774,42.36107],[107.29755,42.41395],[107.49681,42.46221],[107.57258,42.40898],[108.23156,42.45532],[108.84489,42.40246],[109.00679,42.45302],[109.452,42.44842],[109.89402,42.63111],[110.08401,42.6411],[110.4327,42.78293],[111.0149,43.3289],[111.59087,43.51207],[111.79758,43.6637],[111.93776,43.68709],[111.96289,43.81596],[111.40498,44.3461],[111.76275,44.98032],[111.98695,45.09074],[112.4164,45.06858],[112.74662,44.86297],[113.63821,44.74326],[113.909,44.91444],[114.08071,44.92847],[114.5166,45.27189],[114.54801,45.38337],[114.74612,45.43585],[114.94546,45.37377],[115.35757,45.39106],[115.69688,45.45761],[115.91898,45.6227],[116.16989,45.68603],[116.27366,45.78637],[116.24012,45.8778],[116.26678,45.96479],[116.58612,46.30211],[116.75551,46.33083],[116.83166,46.38637],[117.07252,46.35818],[117.36609,46.36335],[117.41782,46.57862],[117.60748,46.59771],[117.69554,46.50991],[118.30534,46.73519],[118.78747,46.68689],[118.8337,46.77742],[118.89974,46.77139],[118.92616,46.72765],[119.00541,46.74273],[119.10448,46.65516],[119.24978,46.64761],[119.30261,46.6083],[119.37306,46.61132],[119.42827,46.63783],[119.65265,46.62342],[119.68127,46.59015],[119.77373,46.62947],[119.80455,46.67631],[119.89261,46.66423],[119.91242,46.90091],[119.85518,46.92196],[119.71209,47.19192],[119.62403,47.24575],[119.56019,47.24874],[119.54918,47.29505],[119.31964,47.42617],[119.35892,47.48104],[119.13995,47.53997],[119.12343,47.66458],[118.7564,47.76947],[118.55766,47.99277],[118.29654,48.00246],[118.22677,48.03853],[118.11009,48.04],[118.03676,48.00982],[117.80196,48.01661],[117.50181,47.77216],[117.37875,47.63627],[117.08918,47.82242],[116.87527,47.88836],[116.67405,47.89039],[116.4465,47.83662],[116.2527,47.87766],[116.08431,47.80693],[115.94296,47.67741],[115.57128,47.91988],[115.52082,48.15367],[115.811,48.25699],[115.78876,48.51781],[116.06565,48.81716],[116.03781,48.87014],[116.71193,49.83813],[117.07142,49.68482],[117.27597,49.62544],[117.48208,49.62324],[117.82343,49.52696],[118.61623,49.93809],[119.11003,50.00276],[119.27996,50.13348],[119.38598,50.35162],[119.13553,50.37412],[120.10963,51.671],[120.65907,51.93544],[120.77337,52.20805],[120.61346,52.32447],[120.71673,52.54099],[120.46454,52.63811],[120.04049,52.58773],[120.0451,52.7359],[120.85633,53.28499],[121.39213,53.31888],[122.35063,53.49565],[122.85966,53.47395],[123.26989,53.54843],[123.86158,53.49391],[124.46078,53.21881],[125.17522,53.20225],[125.6131,53.07229]],[[113.56865,22.20973],[113.57123,22.20416],[113.60504,22.20464],[113.63011,22.10782],[113.57191,22.07696],[113.54839,22.10909],[113.54942,22.14519],[113.54093,22.15497],[113.52659,22.18271],[113.53552,22.20607],[113.53301,22.21235],[113.53591,22.21369],[113.54093,22.21314],[113.54333,22.21688],[113.5508,22.21672],[113.56865,22.20973]],[[114.50148,22.15017],[113.92195,22.13873],[113.83338,22.1826],[113.81621,22.2163],[113.86771,22.42972],[114.03113,22.5065],[114.05438,22.5026],[114.05729,22.51104],[114.06272,22.51617],[114.07267,22.51855],[114.07817,22.52997],[114.08606,22.53276],[114.09048,22.53716],[114.09692,22.53435],[114.1034,22.5352],[114.11181,22.52878],[114.11656,22.53415],[114.12665,22.54003],[114.13823,22.54319],[114.1482,22.54091],[114.15123,22.55163],[114.1597,22.56041],[114.17247,22.55944],[114.18338,22.55444],[114.20655,22.55706],[114.22185,22.55343],[114.22888,22.5436],[114.25154,22.55977],[114.44998,22.55977],[114.50148,22.15017]]]]}},{type:"Feature",properties:{iso1A2:"CO",iso1A3:"COL",iso1N3:"170",wikidata:"Q739",nameEn:"Colombia",groups:["005","419","019"],callingCodes:["57"]},geometry:{type:"MultiPolygon",coordinates:[[[[-71.19849,12.65801],[-70.92579,11.96275],[-71.3275,11.85],[-71.9675,11.65536],[-72.24983,11.14138],[-72.4767,11.1117],[-72.88002,10.44309],[-72.98085,9.85253],[-73.36905,9.16636],[-73.02119,9.27584],[-72.94052,9.10663],[-72.77415,9.10165],[-72.65474,8.61428],[-72.4042,8.36513],[-72.36987,8.19976],[-72.35163,8.01163],[-72.39137,8.03534],[-72.47213,7.96106],[-72.48801,7.94329],[-72.48183,7.92909],[-72.47042,7.92306],[-72.45806,7.91141],[-72.46183,7.90682],[-72.44454,7.86031],[-72.46763,7.79518],[-72.47827,7.65604],[-72.45321,7.57232],[-72.47415,7.48928],[-72.43132,7.40034],[-72.19437,7.37034],[-72.04895,7.03837],[-71.82441,7.04314],[-71.44118,7.02116],[-71.42212,7.03854],[-71.37234,7.01588],[-71.03941,6.98163],[-70.7596,7.09799],[-70.10716,6.96516],[-69.41843,6.1072],[-67.60654,6.2891],[-67.4625,6.20625],[-67.43513,5.98835],[-67.58558,5.84537],[-67.63914,5.64963],[-67.59141,5.5369],[-67.83341,5.31104],[-67.85358,4.53249],[-67.62671,3.74303],[-67.50067,3.75812],[-67.30945,3.38393],[-67.85862,2.86727],[-67.85862,2.79173],[-67.65696,2.81691],[-67.21967,2.35778],[-66.85795,1.22998],[-67.08222,1.17441],[-67.15784,1.80439],[-67.299,1.87494],[-67.40488,2.22258],[-67.9292,1.82455],[-68.18632,2.00091],[-68.26699,1.83463],[-68.18128,1.72881],[-69.38621,1.70865],[-69.53746,1.76408],[-69.83491,1.69353],[-69.82987,1.07864],[-69.26017,1.06856],[-69.14422,0.84172],[-69.20976,0.57958],[-69.47696,0.71065],[-70.04162,0.55437],[-70.03658,-0.19681],[-69.603,-0.51947],[-69.59796,-0.75136],[-69.4215,-1.01853],[-69.43395,-1.42219],[-69.94708,-4.2431],[-70.3374,-3.79505],[-70.52393,-3.87553],[-70.71396,-3.7921],[-70.04609,-2.73906],[-70.94377,-2.23142],[-71.75223,-2.15058],[-72.92587,-2.44514],[-73.65312,-1.26222],[-74.26675,-0.97229],[-74.42701,-0.50218],[-75.18513,-0.0308],[-75.25764,-0.11943],[-75.82927,0.09578],[-76.23441,0.42294],[-76.41215,0.38228],[-76.4094,0.24015],[-76.89177,0.24736],[-77.52001,0.40782],[-77.49984,0.64476],[-77.67815,0.73863],[-77.66416,0.81604],[-77.68613,0.83029],[-77.7148,0.85003],[-77.85677,0.80197],[-78.42749,1.15389],[-78.87137,1.47457],[-82.12561,4.00341],[-78.06168,7.07793],[-77.89178,7.22681],[-77.81426,7.48319],[-77.72157,7.47612],[-77.72514,7.72348],[-77.57185,7.51147],[-77.17257,7.97422],[-77.45064,8.49991],[-77.32389,8.81247],[-77.58292,9.22278],[-78.79327,9.93766],[-82.56142,11.91792],[-82.06974,14.49418],[-81.58685,18.0025],[-71.19849,12.65801]]]]}},{type:"Feature",properties:{iso1A2:"CP",iso1A3:"CPT",wikidata:"Q161258",nameEn:"Clipperton Island",country:"FR",isoStatus:"excRes"},geometry:{type:"MultiPolygon",coordinates:[[[[-110.36279,9.79626],[-109.04145,11.13245],[-108.755,9.84085],[-110.36279,9.79626]]]]}},{type:"Feature",properties:{iso1A2:"CR",iso1A3:"CRI",iso1N3:"188",wikidata:"Q800",nameEn:"Costa Rica",groups:["013","003","419","019"],callingCodes:["506"]},geometry:{type:"MultiPolygon",coordinates:[[[[-83.68276,11.01562],[-83.54024,10.96805],[-82.51044,9.65379],[-82.56507,9.57279],[-82.61345,9.49881],[-82.66667,9.49746],[-82.77206,9.59573],[-82.87919,9.62645],[-82.84871,9.4973],[-82.93516,9.46741],[-82.93516,9.07687],[-82.72126,8.97125],[-82.88253,8.83331],[-82.91377,8.774],[-82.92068,8.74832],[-82.8794,8.6981],[-82.82739,8.60153],[-82.83975,8.54755],[-82.83322,8.52464],[-82.8382,8.48117],[-82.8679,8.44042],[-82.93056,8.43465],[-83.05209,8.33394],[-82.9388,8.26634],[-82.88641,8.10219],[-82.89137,8.05755],[-82.89978,8.04083],[-82.94503,7.93865],[-87.41779,5.02401],[-86.14524,11.09059],[-85.71223,11.06868],[-85.60529,11.22607],[-84.92439,10.9497],[-84.68197,11.07568],[-83.90838,10.71161],[-83.66597,10.79916],[-83.68276,11.01562]]]]}},{type:"Feature",properties:{iso1A2:"CU",iso1A3:"CUB",iso1N3:"192",wikidata:"Q241",nameEn:"Cuba",groups:["029","003","419","019"],callingCodes:["53"]},geometry:{type:"MultiPolygon",coordinates:[[[[-73.62304,20.6935],[-74.81171,18.82201],[-85.77883,21.92705],[-82.02215,24.23074],[-73.62304,20.6935]]]]}},{type:"Feature",properties:{iso1A2:"CV",iso1A3:"CPV",iso1N3:"132",wikidata:"Q1011",nameEn:"Cape Verde",groups:["011","202","002"],callingCodes:["238"]},geometry:{type:"MultiPolygon",coordinates:[[[[-28.81604,14.57305],[-23.37101,19.134],[-20.39702,14.12816],[-28.81604,14.57305]]]]}},{type:"Feature",properties:{iso1A2:"CW",iso1A3:"CUW",iso1N3:"531",wikidata:"Q25279",nameEn:"Curaçao",country:"NL",groups:["029","003","419","019"],callingCodes:["599"]},geometry:{type:"MultiPolygon",coordinates:[[[[-68.90012,12.62309],[-68.33524,11.78151],[-68.99639,11.79035],[-69.59009,12.46019],[-68.90012,12.62309]]]]}},{type:"Feature",properties:{iso1A2:"CX",iso1A3:"CXR",iso1N3:"162",wikidata:"Q31063",nameEn:"Christmas Island",country:"AU",groups:["053","009"],driveSide:"left",callingCodes:["61"]},geometry:{type:"MultiPolygon",coordinates:[[[[105.66835,-9.31927],[106.66176,-11.14349],[104.67494,-11.2566],[105.66835,-9.31927]]]]}},{type:"Feature",properties:{iso1A2:"CY",iso1A3:"CYP",iso1N3:"196",wikidata:"Q229",nameEn:"Cyprus",groups:["EU","145","142"],driveSide:"left",callingCodes:["357"]},geometry:{type:"MultiPolygon",coordinates:[[[[33.70639,34.99303],[33.70575,34.97947],[33.83531,34.73974],[33.26744,34.49942],[33.0138,34.64424],[32.96968,34.64046],[32.96718,34.63446],[32.95891,34.62919],[32.95323,34.64075],[32.95471,34.64528],[32.94976,34.65204],[32.94796,34.6587],[32.95325,34.66462],[32.97079,34.66112],[32.97736,34.65277],[32.99014,34.65518],[32.98668,34.67268],[32.99135,34.68061],[32.95539,34.68471],[32.94683,34.67907],[32.94379,34.67111],[32.93693,34.67027],[32.93449,34.66241],[32.92807,34.66736],[32.93043,34.67091],[32.91398,34.67343],[32.9068,34.66102],[32.86167,34.68734],[32.86014,34.70585],[32.82717,34.70622],[32.79433,34.67883],[32.76136,34.68318],[32.75515,34.64985],[32.74412,34.43926],[30.15137,34.08517],[32.82353,35.70297],[35.51152,36.10954],[35.48515,34.70851],[33.98684,34.76642],[33.90075,34.96623],[33.86432,34.97592],[33.84811,34.97075],[33.83505,34.98108],[33.85621,34.98956],[33.85891,35.001],[33.85216,35.00579],[33.84045,35.00616],[33.82875,35.01685],[33.83055,35.02865],[33.81524,35.04192],[33.8012,35.04786],[33.82051,35.0667],[33.8355,35.05777],[33.85261,35.0574],[33.88367,35.07877],[33.89485,35.06873],[33.90247,35.07686],[33.91299,35.07579],[33.91789,35.08688],[33.89853,35.11377],[33.88737,35.11408],[33.88943,35.12007],[33.88561,35.12449],[33.87224,35.12293],[33.87622,35.10457],[33.87097,35.09389],[33.87479,35.08881],[33.8541,35.07201],[33.84168,35.06823],[33.82067,35.07826],[33.78581,35.05104],[33.76106,35.04253],[33.73824,35.05321],[33.71482,35.03722],[33.70209,35.04882],[33.7161,35.07279],[33.70861,35.07644],[33.69095,35.06237],[33.68474,35.06602],[33.67742,35.05963],[33.67678,35.03866],[33.69938,35.03123],[33.69731,35.01754],[33.71514,35.00294],[33.70639,34.99303]]],[[[33.74144,35.01053],[33.7343,35.01178],[33.73781,35.02181],[33.74265,35.02329],[33.74983,35.02274],[33.7492,35.01319],[33.74144,35.01053]]],[[[33.77312,34.9976],[33.77553,34.99518],[33.78516,34.99582],[33.79191,34.98914],[33.78917,34.98854],[33.78571,34.98951],[33.78318,34.98699],[33.78149,34.98854],[33.77843,34.988],[33.7778,34.98981],[33.76738,34.99188],[33.76605,34.99543],[33.75682,34.99916],[33.75994,35.00113],[33.77312,34.9976]]]]}},{type:"Feature",properties:{iso1A2:"CZ",iso1A3:"CZE",iso1N3:"203",wikidata:"Q213",nameEn:"Czechia",groups:["EU","151","150"],callingCodes:["420"]},geometry:{type:"MultiPolygon",coordinates:[[[[14.82803,50.86966],[14.99852,50.86817],[15.01088,50.97984],[14.96419,50.99108],[15.02433,51.0242],[15.03895,51.0123],[15.06218,51.02269],[15.10152,51.01095],[15.11937,50.99021],[15.16744,51.01959],[15.1743,50.9833],[15.2361,50.99886],[15.27043,50.97724],[15.2773,50.8907],[15.36656,50.83956],[15.3803,50.77187],[15.43798,50.80833],[15.73186,50.73885],[15.81683,50.75666],[15.87331,50.67188],[15.97219,50.69799],[16.0175,50.63009],[15.98317,50.61528],[16.02437,50.60046],[16.10265,50.66405],[16.20839,50.63096],[16.23174,50.67101],[16.33611,50.66579],[16.44597,50.58041],[16.34572,50.49575],[16.31413,50.50274],[16.19526,50.43291],[16.21585,50.40627],[16.22821,50.41054],[16.28118,50.36891],[16.30289,50.38292],[16.36495,50.37679],[16.3622,50.34875],[16.39379,50.3207],[16.42674,50.32509],[16.56407,50.21009],[16.55446,50.16613],[16.63137,50.1142],[16.7014,50.09659],[16.8456,50.20834],[16.98018,50.24172],[17.00353,50.21449],[17.02825,50.23118],[16.99803,50.25753],[17.02138,50.27772],[16.99803,50.30316],[16.94448,50.31281],[16.90877,50.38642],[16.85933,50.41093],[16.89229,50.45117],[17.1224,50.39494],[17.14498,50.38117],[17.19579,50.38817],[17.19991,50.3654],[17.27681,50.32246],[17.34273,50.32947],[17.34548,50.2628],[17.3702,50.28123],[17.58889,50.27837],[17.67764,50.28977],[17.69292,50.32859],[17.74648,50.29966],[17.72176,50.25665],[17.76296,50.23382],[17.70528,50.18812],[17.59404,50.16437],[17.66683,50.10275],[17.6888,50.12037],[17.7506,50.07896],[17.77669,50.02253],[17.86886,49.97452],[18.00191,50.01723],[18.04585,50.01194],[18.04585,50.03311],[18.00396,50.04954],[18.03212,50.06574],[18.07898,50.04535],[18.10628,50.00223],[18.20241,49.99958],[18.21752,49.97309],[18.27107,49.96779],[18.27794,49.93863],[18.31914,49.91565],[18.33278,49.92415],[18.33562,49.94747],[18.41604,49.93498],[18.53423,49.89906],[18.54495,49.9079],[18.54299,49.92537],[18.57697,49.91565],[18.57045,49.87849],[18.60341,49.86256],[18.57183,49.83334],[18.61278,49.7618],[18.61368,49.75426],[18.62645,49.75002],[18.62943,49.74603],[18.62676,49.71983],[18.69817,49.70473],[18.72838,49.68163],[18.80479,49.6815],[18.84786,49.5446],[18.84521,49.51672],[18.74761,49.492],[18.67757,49.50895],[18.6144,49.49824],[18.57183,49.51162],[18.53063,49.49022],[18.54848,49.47059],[18.44686,49.39467],[18.4084,49.40003],[18.4139,49.36517],[18.36446,49.3267],[18.18456,49.28909],[18.15022,49.24518],[18.1104,49.08624],[18.06885,49.03157],[17.91814,49.01784],[17.87831,48.92679],[17.77944,48.92318],[17.73126,48.87885],[17.7094,48.86721],[17.5295,48.81117],[17.45671,48.85004],[17.3853,48.80936],[17.29054,48.85546],[17.19355,48.87602],[17.11202,48.82925],[17.00215,48.70887],[16.93955,48.60371],[16.90354,48.71541],[16.79779,48.70998],[16.71883,48.73806],[16.68518,48.7281],[16.67008,48.77699],[16.46134,48.80865],[16.40915,48.74576],[16.37345,48.729],[16.06034,48.75436],[15.84404,48.86921],[15.78087,48.87644],[15.75341,48.8516],[15.6921,48.85973],[15.61622,48.89541],[15.51357,48.91549],[15.48027,48.94481],[15.34823,48.98444],[15.28305,48.98831],[15.26177,48.95766],[15.16358,48.94278],[15.15534,48.99056],[14.99878,49.01444],[14.97612,48.96983],[14.98917,48.90082],[14.95072,48.79101],[14.98032,48.77959],[14.9782,48.7766],[14.98112,48.77524],[14.9758,48.76857],[14.95641,48.75915],[14.94773,48.76268],[14.81545,48.7874],[14.80821,48.77711],[14.80584,48.73489],[14.72756,48.69502],[14.71794,48.59794],[14.66762,48.58215],[14.60808,48.62881],[14.56139,48.60429],[14.4587,48.64695],[14.43076,48.58855],[14.33909,48.55852],[14.20691,48.5898],[14.09104,48.5943],[14.01482,48.63788],[14.06151,48.66873],[13.84023,48.76988],[13.8096,48.77877],[13.78977,48.83319],[13.76994,48.83537],[13.73854,48.88538],[13.67739,48.87886],[13.61624,48.9462],[13.58319,48.96899],[13.50552,48.97441],[13.50221,48.93752],[13.40802,48.98851],[13.39479,49.04812],[13.28242,49.1228],[13.23689,49.11412],[13.20405,49.12303],[13.17019,49.14339],[13.17665,49.16713],[13.05883,49.26259],[13.02957,49.27399],[13.03618,49.30417],[12.94859,49.34079],[12.88249,49.35479],[12.88414,49.33541],[12.78168,49.34618],[12.75854,49.3989],[12.71227,49.42363],[12.669,49.42935],[12.64121,49.47628],[12.64782,49.52565],[12.60155,49.52887],[12.56188,49.6146],[12.53544,49.61888],[12.52553,49.68415],[12.4462,49.70233],[12.40489,49.76321],[12.46603,49.78882],[12.48256,49.83575],[12.55197,49.92094],[12.47264,49.94222],[12.49908,49.97305],[12.30798,50.05719],[12.26111,50.06331],[12.27433,50.0771],[12.23709,50.10213],[12.2073,50.10315],[12.1917,50.13434],[12.21484,50.16399],[12.19335,50.19997],[12.09287,50.25032],[12.13716,50.27396],[12.10907,50.32041],[12.18013,50.32146],[12.20823,50.2729],[12.25119,50.27079],[12.26953,50.25189],[12.24791,50.25525],[12.23943,50.24594],[12.28755,50.22429],[12.28063,50.19544],[12.29232,50.17524],[12.32596,50.17146],[12.33847,50.19432],[12.32445,50.20442],[12.33263,50.24367],[12.35425,50.23993],[12.36594,50.28289],[12.40158,50.29521],[12.39924,50.32302],[12.43371,50.32506],[12.43722,50.33774],[12.46643,50.35527],[12.48256,50.34784],[12.49214,50.35228],[12.48747,50.37278],[12.51356,50.39694],[12.67261,50.41949],[12.70731,50.39948],[12.73044,50.42268],[12.73476,50.43237],[12.82465,50.45738],[12.94058,50.40944],[12.98433,50.42016],[13.02147,50.44763],[13.02038,50.4734],[13.0312,50.50944],[13.08301,50.50132],[13.13424,50.51709],[13.19043,50.50237],[13.25158,50.59268],[13.29454,50.57904],[13.32594,50.58009],[13.32264,50.60317],[13.37805,50.627],[13.37485,50.64931],[13.42189,50.61243],[13.46413,50.60102],[13.49742,50.63133],[13.5226,50.64721],[13.53748,50.67654],[13.52474,50.70394],[13.65977,50.73096],[13.70204,50.71771],[13.76316,50.73487],[13.82942,50.7251],[13.89444,50.74142],[13.89113,50.78533],[13.98864,50.8177],[14.02982,50.80662],[14.22331,50.86049],[14.24314,50.88761],[14.27123,50.89386],[14.30098,50.88448],[14.38691,50.89907],[14.39848,50.93866],[14.31422,50.95243],[14.30251,50.96606],[14.32793,50.97379],[14.32353,50.98556],[14.28776,50.97718],[14.25665,50.98935],[14.30098,51.05515],[14.41335,51.02086],[14.45827,51.03712],[14.49202,51.02286],[14.49154,51.04382],[14.49991,51.04692],[14.50809,51.0427],[14.49873,51.02242],[14.53321,51.01679],[14.53438,51.00374],[14.56432,51.01008],[14.58215,50.99306],[14.59908,50.98685],[14.59702,50.96148],[14.56374,50.922],[14.58024,50.91443],[14.64802,50.93241],[14.65259,50.90513],[14.63434,50.8883],[14.61993,50.86049],[14.70661,50.84096],[14.79139,50.81438],[14.82803,50.86966]]]]}},{type:"Feature",properties:{iso1A2:"DE",iso1A3:"DEU",iso1N3:"276",wikidata:"Q183",nameEn:"Germany",groups:["EU","155","150"],callingCodes:["49"]},geometry:{type:"MultiPolygon",coordinates:[[[[8.70847,47.68904],[8.68985,47.69552],[8.66837,47.68437],[8.65769,47.68928],[8.67508,47.6979],[8.66416,47.71367],[8.70237,47.71453],[8.71773,47.69088],[8.70847,47.68904]]],[[[8.72617,47.69651],[8.73671,47.7169],[8.70543,47.73121],[8.74251,47.75168],[8.71778,47.76571],[8.68985,47.75686],[8.68022,47.78599],[8.65292,47.80066],[8.64425,47.76398],[8.62408,47.7626],[8.61657,47.79998],[8.56415,47.80633],[8.56814,47.78001],[8.48868,47.77215],[8.45771,47.7493],[8.44807,47.72426],[8.40569,47.69855],[8.4211,47.68407],[8.40473,47.67499],[8.41346,47.66676],[8.42264,47.66667],[8.44711,47.65379],[8.4667,47.65747],[8.46605,47.64103],[8.49656,47.64709],[8.5322,47.64687],[8.52801,47.66059],[8.56141,47.67088],[8.57683,47.66158],[8.6052,47.67258],[8.61113,47.66332],[8.62884,47.65098],[8.62049,47.63757],[8.60412,47.63735],[8.61471,47.64514],[8.60701,47.65271],[8.59545,47.64298],[8.60348,47.61204],[8.57586,47.59537],[8.55756,47.62394],[8.51686,47.63476],[8.50747,47.61897],[8.45578,47.60121],[8.46637,47.58389],[8.48949,47.588],[8.49431,47.58107],[8.43235,47.56617],[8.39477,47.57826],[8.38273,47.56608],[8.35512,47.57014],[8.32735,47.57133],[8.30277,47.58607],[8.29524,47.5919],[8.29722,47.60603],[8.2824,47.61225],[8.26313,47.6103],[8.25863,47.61571],[8.23809,47.61204],[8.22577,47.60385],[8.22011,47.6181],[8.20617,47.62141],[8.19378,47.61636],[8.1652,47.5945],[8.14947,47.59558],[8.13823,47.59147],[8.13662,47.58432],[8.11543,47.5841],[8.10395,47.57918],[8.10002,47.56504],[8.08557,47.55768],[8.06663,47.56374],[8.04383,47.55443],[8.02136,47.55096],[8.00113,47.55616],[7.97581,47.55493],[7.95682,47.55789],[7.94494,47.54511],[7.91251,47.55031],[7.90673,47.57674],[7.88664,47.58854],[7.84412,47.5841],[7.81901,47.58798],[7.79486,47.55691],[7.75261,47.54599],[7.71961,47.54219],[7.69642,47.53297],[7.68101,47.53232],[7.6656,47.53752],[7.66174,47.54554],[7.65083,47.54662],[7.63338,47.56256],[7.67655,47.56435],[7.68904,47.57133],[7.67115,47.5871],[7.68486,47.59601],[7.69385,47.60099],[7.68229,47.59905],[7.67395,47.59212],[7.64599,47.59695],[7.64213,47.5944],[7.64309,47.59151],[7.61929,47.57683],[7.60459,47.57869],[7.60523,47.58519],[7.58945,47.59017],[7.59301,47.60058],[7.58851,47.60794],[7.57423,47.61628],[7.5591,47.63849],[7.53384,47.65115],[7.52067,47.66437],[7.51915,47.68335],[7.51266,47.70197],[7.53722,47.71635],[7.54761,47.72912],[7.52921,47.77747],[7.55673,47.87371],[7.62302,47.97898],[7.56966,48.03265],[7.57137,48.12292],[7.6648,48.22219],[7.69022,48.30018],[7.74562,48.32736],[7.73109,48.39192],[7.76833,48.48945],[7.80647,48.51239],[7.80167,48.54758],[7.80057,48.5857],[7.84098,48.64217],[7.89002,48.66317],[7.96812,48.72491],[7.96994,48.75606],[8.01534,48.76085],[8.0326,48.79017],[8.06802,48.78957],[8.10253,48.81829],[8.12813,48.87985],[8.19989,48.95825],[8.20031,48.95856],[8.22604,48.97352],[8.14189,48.97833],[7.97783,49.03161],[7.93641,49.05544],[7.86386,49.03499],[7.79557,49.06583],[7.75948,49.04562],[7.63618,49.05428],[7.62575,49.07654],[7.56416,49.08136],[7.53012,49.09818],[7.49172,49.13915],[7.49473,49.17],[7.44455,49.16765],[7.44052,49.18354],[7.3662,49.17308],[7.35995,49.14399],[7.3195,49.14231],[7.29514,49.11426],[7.23473,49.12971],[7.1593,49.1204],[7.1358,49.1282],[7.12504,49.14253],[7.10384,49.13787],[7.10715,49.15631],[7.07859,49.15031],[7.09007,49.13094],[7.07162,49.1255],[7.06642,49.11415],[7.05548,49.11185],[7.04843,49.11422],[7.04409,49.12123],[7.04662,49.13724],[7.03178,49.15734],[7.0274,49.17042],[7.03459,49.19096],[7.01318,49.19018],[6.97273,49.2099],[6.95963,49.203],[6.94028,49.21641],[6.93831,49.2223],[6.91875,49.22261],[6.89298,49.20863],[6.85939,49.22376],[6.83555,49.21249],[6.85119,49.20038],[6.85016,49.19354],[6.86225,49.18185],[6.84703,49.15734],[6.83385,49.15162],[6.78265,49.16793],[6.73765,49.16375],[6.71137,49.18808],[6.73256,49.20486],[6.71843,49.2208],[6.69274,49.21661],[6.66583,49.28065],[6.60186,49.31055],[6.572,49.35027],[6.58807,49.35358],[6.60091,49.36864],[6.533,49.40748],[6.55404,49.42464],[6.42432,49.47683],[6.40274,49.46546],[6.39168,49.4667],[6.38352,49.46463],[6.36778,49.46937],[6.36907,49.48931],[6.36788,49.50377],[6.35666,49.52931],[6.38072,49.55171],[6.38228,49.55855],[6.35825,49.57053],[6.36676,49.57813],[6.38024,49.57593],[6.38342,49.5799],[6.37464,49.58886],[6.385,49.59946],[6.39822,49.60081],[6.41861,49.61723],[6.4413,49.65722],[6.43768,49.66021],[6.42726,49.66078],[6.42937,49.66857],[6.44654,49.67799],[6.46048,49.69092],[6.48014,49.69767],[6.49785,49.71118],[6.50647,49.71353],[6.5042,49.71808],[6.49694,49.72205],[6.49535,49.72645],[6.50261,49.72718],[6.51397,49.72058],[6.51805,49.72425],[6.50193,49.73291],[6.50174,49.75292],[6.51646,49.75961],[6.51828,49.76855],[6.51056,49.77515],[6.51669,49.78336],[6.50534,49.78952],[6.52169,49.79787],[6.53122,49.80666],[6.52121,49.81338],[6.51215,49.80124],[6.50647,49.80916],[6.48718,49.81267],[6.47111,49.82263],[6.45425,49.81164],[6.44131,49.81443],[6.42905,49.81091],[6.42521,49.81591],[6.40022,49.82029],[6.36576,49.85032],[6.34267,49.84974],[6.33585,49.83785],[6.32098,49.83728],[6.32303,49.85133],[6.30963,49.87021],[6.29692,49.86685],[6.28874,49.87592],[6.26146,49.88203],[6.23496,49.89972],[6.22926,49.92096],[6.21882,49.92403],[6.22608,49.929],[6.22094,49.94955],[6.19856,49.95053],[6.19089,49.96991],[6.18045,49.96611],[6.18554,49.95622],[6.17872,49.9537],[6.16466,49.97086],[6.1701,49.98518],[6.14147,49.99563],[6.14948,50.00908],[6.13806,50.01056],[6.1295,50.01849],[6.13273,50.02019],[6.13794,50.01466],[6.14666,50.02207],[6.13044,50.02929],[6.13458,50.04141],[6.11274,50.05916],[6.12055,50.09171],[6.1379,50.12964],[6.15298,50.14126],[6.14132,50.14971],[6.14588,50.17106],[6.18739,50.1822],[6.18364,50.20815],[6.16853,50.2234],[6.208,50.25179],[6.28797,50.27458],[6.29949,50.30887],[6.32488,50.32333],[6.35701,50.31139],[6.40641,50.32425],[6.40785,50.33557],[6.3688,50.35898],[6.34406,50.37994],[6.36852,50.40776],[6.37219,50.45397],[6.34005,50.46083],[6.3465,50.48833],[6.30809,50.50058],[6.26637,50.50272],[6.22335,50.49578],[6.20599,50.52089],[6.19193,50.5212],[6.18716,50.52653],[6.19579,50.5313],[6.19735,50.53576],[6.17802,50.54179],[6.17739,50.55875],[6.20281,50.56952],[6.22581,50.5907],[6.24005,50.58732],[6.24888,50.59869],[6.2476,50.60392],[6.26957,50.62444],[6.17852,50.6245],[6.11707,50.72231],[6.04428,50.72861],[6.0406,50.71848],[6.0326,50.72647],[6.03889,50.74618],[6.01976,50.75398],[6.02624,50.77453],[5.97497,50.79992],[5.98404,50.80988],[6.00462,50.80065],[6.02328,50.81694],[6.01921,50.84435],[6.05623,50.8572],[6.05702,50.85179],[6.07431,50.84674],[6.07693,50.86025],[6.08805,50.87223],[6.07486,50.89307],[6.09297,50.92066],[6.01615,50.93367],[6.02697,50.98303],[5.95282,50.98728],[5.90296,50.97356],[5.90493,51.00198],[5.87849,51.01969],[5.86735,51.05182],[5.9134,51.06736],[5.9541,51.03496],[5.98292,51.07469],[6.16706,51.15677],[6.17384,51.19589],[6.07889,51.17038],[6.07889,51.24432],[6.16977,51.33169],[6.22674,51.36135],[6.22641,51.39948],[6.20654,51.40049],[6.21724,51.48568],[6.18017,51.54096],[6.09055,51.60564],[6.11759,51.65609],[6.02767,51.6742],[6.04091,51.71821],[5.95003,51.7493],[5.98665,51.76944],[5.94568,51.82786],[5.99848,51.83195],[6.06705,51.86136],[6.10337,51.84829],[6.16902,51.84094],[6.11551,51.89769],[6.15349,51.90439],[6.21443,51.86801],[6.29872,51.86801],[6.30593,51.84998],[6.40704,51.82771],[6.38815,51.87257],[6.47179,51.85395],[6.50231,51.86313],[6.58556,51.89386],[6.68386,51.91861],[6.72319,51.89518],[6.82357,51.96711],[6.83035,51.9905],[6.68128,52.05052],[6.76117,52.11895],[6.83984,52.11728],[6.97189,52.20329],[6.9897,52.2271],[7.03729,52.22695],[7.06365,52.23789],[7.02703,52.27941],[7.07044,52.37805],[7.03417,52.40237],[6.99041,52.47235],[6.94293,52.43597],[6.69507,52.488],[6.71641,52.62905],[6.77307,52.65375],[7.04557,52.63318],[7.07253,52.81083],[7.21694,53.00742],[7.17898,53.13817],[7.22681,53.18165],[7.21679,53.20058],[7.19052,53.31866],[7.00198,53.32672],[6.91025,53.44221],[5.45168,54.20039],[8.02459,55.09613],[8.45719,55.06747],[8.55769,54.91837],[8.63979,54.91069],[8.76387,54.8948],[8.81178,54.90518],[8.92795,54.90452],[9.04629,54.87249],[9.14275,54.87421],[9.20571,54.85841],[9.24631,54.84726],[9.23445,54.83432],[9.2474,54.8112],[9.32771,54.80602],[9.33849,54.80233],[9.36496,54.81749],[9.38532,54.83968],[9.41213,54.84254],[9.43155,54.82586],[9.4659,54.83131],[9.58937,54.88785],[9.62734,54.88057],[9.61187,54.85548],[9.73563,54.8247],[9.89314,54.84171],[10.16755,54.73883],[10.31111,54.65968],[11.00303,54.63689],[11.90309,54.38543],[12.85844,54.82438],[13.93395,54.84044],[14.20811,54.12784],[14.22634,53.9291],[14.20647,53.91671],[14.18544,53.91258],[14.20823,53.90776],[14.21323,53.8664],[14.27249,53.74464],[14.26782,53.69866],[14.2836,53.67721],[14.27133,53.66613],[14.28477,53.65955],[14.2853,53.63392],[14.31904,53.61581],[14.30416,53.55499],[14.3273,53.50587],[14.35209,53.49506],[14.4215,53.27724],[14.44133,53.27427],[14.45125,53.26241],[14.40662,53.21098],[14.37853,53.20405],[14.36696,53.16444],[14.38679,53.13669],[14.35044,53.05829],[14.25954,53.00264],[14.14056,52.95786],[14.15873,52.87715],[14.12256,52.84311],[14.13806,52.82392],[14.22071,52.81175],[14.61073,52.59847],[14.6289,52.57136],[14.60081,52.53116],[14.63056,52.48993],[14.54423,52.42568],[14.55228,52.35264],[14.56378,52.33838],[14.58149,52.28007],[14.70139,52.25038],[14.71319,52.22144],[14.68344,52.19612],[14.70616,52.16927],[14.67683,52.13936],[14.6917,52.10283],[14.72971,52.09167],[14.76026,52.06624],[14.71339,52.00337],[14.70488,51.97679],[14.7139,51.95643],[14.71836,51.95606],[14.72163,51.95188],[14.7177,51.94048],[14.70601,51.92944],[14.6933,51.9044],[14.6588,51.88359],[14.59089,51.83302],[14.60493,51.80473],[14.64625,51.79472],[14.66386,51.73282],[14.69065,51.70842],[14.75392,51.67445],[14.75759,51.62318],[14.7727,51.61263],[14.71125,51.56209],[14.73047,51.54606],[14.72652,51.53902],[14.73219,51.52922],[14.94749,51.47155],[14.9652,51.44793],[14.96899,51.38367],[14.98008,51.33449],[15.04288,51.28387],[15.01242,51.21285],[15.0047,51.16874],[14.99311,51.16249],[14.99414,51.15813],[15.00083,51.14974],[14.99646,51.14365],[14.99079,51.14284],[14.99689,51.12205],[14.98229,51.11354],[14.97938,51.07742],[14.95529,51.04552],[14.92942,50.99744],[14.89252,50.94999],[14.89681,50.9422],[14.81664,50.88148],[14.82803,50.86966],[14.79139,50.81438],[14.70661,50.84096],[14.61993,50.86049],[14.63434,50.8883],[14.65259,50.90513],[14.64802,50.93241],[14.58024,50.91443],[14.56374,50.922],[14.59702,50.96148],[14.59908,50.98685],[14.58215,50.99306],[14.56432,51.01008],[14.53438,51.00374],[14.53321,51.01679],[14.49873,51.02242],[14.50809,51.0427],[14.49991,51.04692],[14.49154,51.04382],[14.49202,51.02286],[14.45827,51.03712],[14.41335,51.02086],[14.30098,51.05515],[14.25665,50.98935],[14.28776,50.97718],[14.32353,50.98556],[14.32793,50.97379],[14.30251,50.96606],[14.31422,50.95243],[14.39848,50.93866],[14.38691,50.89907],[14.30098,50.88448],[14.27123,50.89386],[14.24314,50.88761],[14.22331,50.86049],[14.02982,50.80662],[13.98864,50.8177],[13.89113,50.78533],[13.89444,50.74142],[13.82942,50.7251],[13.76316,50.73487],[13.70204,50.71771],[13.65977,50.73096],[13.52474,50.70394],[13.53748,50.67654],[13.5226,50.64721],[13.49742,50.63133],[13.46413,50.60102],[13.42189,50.61243],[13.37485,50.64931],[13.37805,50.627],[13.32264,50.60317],[13.32594,50.58009],[13.29454,50.57904],[13.25158,50.59268],[13.19043,50.50237],[13.13424,50.51709],[13.08301,50.50132],[13.0312,50.50944],[13.02038,50.4734],[13.02147,50.44763],[12.98433,50.42016],[12.94058,50.40944],[12.82465,50.45738],[12.73476,50.43237],[12.73044,50.42268],[12.70731,50.39948],[12.67261,50.41949],[12.51356,50.39694],[12.48747,50.37278],[12.49214,50.35228],[12.48256,50.34784],[12.46643,50.35527],[12.43722,50.33774],[12.43371,50.32506],[12.39924,50.32302],[12.40158,50.29521],[12.36594,50.28289],[12.35425,50.23993],[12.33263,50.24367],[12.32445,50.20442],[12.33847,50.19432],[12.32596,50.17146],[12.29232,50.17524],[12.28063,50.19544],[12.28755,50.22429],[12.23943,50.24594],[12.24791,50.25525],[12.26953,50.25189],[12.25119,50.27079],[12.20823,50.2729],[12.18013,50.32146],[12.10907,50.32041],[12.13716,50.27396],[12.09287,50.25032],[12.19335,50.19997],[12.21484,50.16399],[12.1917,50.13434],[12.2073,50.10315],[12.23709,50.10213],[12.27433,50.0771],[12.26111,50.06331],[12.30798,50.05719],[12.49908,49.97305],[12.47264,49.94222],[12.55197,49.92094],[12.48256,49.83575],[12.46603,49.78882],[12.40489,49.76321],[12.4462,49.70233],[12.52553,49.68415],[12.53544,49.61888],[12.56188,49.6146],[12.60155,49.52887],[12.64782,49.52565],[12.64121,49.47628],[12.669,49.42935],[12.71227,49.42363],[12.75854,49.3989],[12.78168,49.34618],[12.88414,49.33541],[12.88249,49.35479],[12.94859,49.34079],[13.03618,49.30417],[13.02957,49.27399],[13.05883,49.26259],[13.17665,49.16713],[13.17019,49.14339],[13.20405,49.12303],[13.23689,49.11412],[13.28242,49.1228],[13.39479,49.04812],[13.40802,48.98851],[13.50221,48.93752],[13.50552,48.97441],[13.58319,48.96899],[13.61624,48.9462],[13.67739,48.87886],[13.73854,48.88538],[13.76994,48.83537],[13.78977,48.83319],[13.8096,48.77877],[13.84023,48.76988],[13.82266,48.75544],[13.81863,48.73257],[13.79337,48.71375],[13.81791,48.69832],[13.81283,48.68426],[13.81901,48.6761],[13.82609,48.62345],[13.80038,48.59487],[13.80519,48.58026],[13.76921,48.55324],[13.7513,48.5624],[13.74816,48.53058],[13.72802,48.51208],[13.66113,48.53558],[13.65186,48.55092],[13.62508,48.55501],[13.59705,48.57013],[13.57535,48.55912],[13.51291,48.59023],[13.50131,48.58091],[13.50663,48.57506],[13.46967,48.55157],[13.45214,48.56472],[13.43695,48.55776],[13.45727,48.51092],[13.42527,48.45711],[13.43929,48.43386],[13.40709,48.37292],[13.30897,48.31575],[13.26039,48.29422],[13.18093,48.29577],[13.126,48.27867],[13.0851,48.27711],[13.02083,48.25689],[12.95306,48.20629],[12.87126,48.20318],[12.84475,48.16556],[12.836,48.1647],[12.8362,48.15876],[12.82673,48.15245],[12.80676,48.14979],[12.78595,48.12445],[12.7617,48.12796],[12.74973,48.10885],[12.76141,48.07373],[12.8549,48.01122],[12.87476,47.96195],[12.91683,47.95647],[12.9211,47.95135],[12.91985,47.94069],[12.92668,47.93879],[12.93419,47.94063],[12.93642,47.94436],[12.93886,47.94046],[12.94163,47.92927],[13.00588,47.84374],[12.98543,47.82896],[12.96311,47.79957],[12.93202,47.77302],[12.94371,47.76281],[12.9353,47.74788],[12.91711,47.74026],[12.90274,47.72513],[12.91333,47.7178],[12.92969,47.71094],[12.98578,47.7078],[13.01382,47.72116],[13.07692,47.68814],[13.09562,47.63304],[13.06407,47.60075],[13.06641,47.58577],[13.04537,47.58183],[13.05355,47.56291],[13.03252,47.53373],[13.04537,47.49426],[12.9998,47.46267],[12.98344,47.48716],[12.9624,47.47452],[12.85256,47.52741],[12.84672,47.54556],[12.80699,47.54477],[12.77427,47.58025],[12.82101,47.61493],[12.76492,47.64485],[12.77777,47.66689],[12.7357,47.6787],[12.6071,47.6741],[12.57438,47.63238],[12.53816,47.63553],[12.50076,47.62293],[12.44117,47.6741],[12.43883,47.6977],[12.37222,47.68433],[12.336,47.69534],[12.27991,47.68827],[12.26004,47.67725],[12.24017,47.69534],[12.26238,47.73544],[12.2542,47.7433],[12.22571,47.71776],[12.18303,47.70065],[12.16217,47.70105],[12.16769,47.68167],[12.18347,47.66663],[12.18507,47.65984],[12.19895,47.64085],[12.20801,47.61082],[12.20398,47.60667],[12.18568,47.6049],[12.17737,47.60121],[12.18145,47.61019],[12.17824,47.61506],[12.13734,47.60639],[12.05788,47.61742],[12.02282,47.61033],[12.0088,47.62451],[11.85572,47.60166],[11.84052,47.58354],[11.63934,47.59202],[11.60681,47.57881],[11.58811,47.55515],[11.58578,47.52281],[11.52618,47.50939],[11.4362,47.51413],[11.38128,47.47465],[11.4175,47.44621],[11.33804,47.44937],[11.29597,47.42566],[11.27844,47.39956],[11.22002,47.3964],[11.25157,47.43277],[11.20482,47.43198],[11.12536,47.41222],[11.11835,47.39719],[10.97111,47.39561],[10.97111,47.41617],[10.98513,47.42882],[10.92437,47.46991],[10.93839,47.48018],[10.90918,47.48571],[10.87061,47.4786],[10.86945,47.5015],[10.91268,47.51334],[10.88814,47.53701],[10.77596,47.51729],[10.7596,47.53228],[10.6965,47.54253],[10.68832,47.55752],[10.63456,47.5591],[10.60337,47.56755],[10.56912,47.53584],[10.48849,47.54057],[10.47329,47.58552],[10.43473,47.58394],[10.44992,47.5524],[10.4324,47.50111],[10.44291,47.48453],[10.46278,47.47901],[10.47446,47.43318],[10.4359,47.41183],[10.4324,47.38494],[10.39851,47.37623],[10.33424,47.30813],[10.23257,47.27088],[10.17531,47.27167],[10.17648,47.29149],[10.2147,47.31014],[10.19998,47.32832],[10.23757,47.37609],[10.22774,47.38904],[10.2127,47.38019],[10.17648,47.38889],[10.16362,47.36674],[10.11805,47.37228],[10.09819,47.35724],[10.06897,47.40709],[10.1052,47.4316],[10.09001,47.46005],[10.07131,47.45531],[10.03859,47.48927],[10.00003,47.48216],[9.96029,47.53899],[9.92407,47.53111],[9.87733,47.54688],[9.87499,47.52953],[9.8189,47.54688],[9.82591,47.58158],[9.80254,47.59419],[9.76748,47.5934],[9.72736,47.53457],[9.55125,47.53629],[9.25619,47.65939],[9.18203,47.65598],[9.17593,47.65399],[9.1755,47.65584],[9.1705,47.65513],[9.15181,47.66904],[9.13845,47.66389],[9.09891,47.67801],[9.02093,47.6868],[8.94093,47.65596],[8.89946,47.64769],[8.87625,47.65441],[8.87383,47.67045],[8.85065,47.68209],[8.86989,47.70504],[8.82002,47.71458],[8.80663,47.73821],[8.77309,47.72059],[8.76965,47.7075],[8.79966,47.70222],[8.79511,47.67462],[8.75856,47.68969],[8.72809,47.69282],[8.72617,47.69651]]]]}},{type:"Feature",properties:{iso1A2:"DG",iso1A3:"DGA",wikidata:"Q184851",nameEn:"Diego Garcia",country:"GB",groups:["IO","014","202","002"],isoStatus:"excRes",callingCodes:["246"]},geometry:{type:"MultiPolygon",coordinates:[[[[73.14823,-7.76302],[73.09982,-6.07324],[71.43792,-7.73904],[73.14823,-7.76302]]]]}},{type:"Feature",properties:{iso1A2:"DJ",iso1A3:"DJI",iso1N3:"262",wikidata:"Q977",nameEn:"Djibouti",groups:["014","202","002"],callingCodes:["253"]},geometry:{type:"MultiPolygon",coordinates:[[[[43.42425,11.70983],[42.95776,10.98533],[42.79037,10.98493],[42.75111,11.06992],[42.62989,11.09711],[42.42669,10.98493],[42.13691,10.97586],[42.06302,10.92599],[41.80056,10.97127],[41.8096,11.33606],[41.77727,11.49902],[41.82878,11.72361],[41.95461,11.81157],[42.4037,12.46478],[42.46941,12.52661],[42.6957,12.36201],[42.7996,12.42629],[42.86195,12.58747],[43.29075,12.79154],[43.32909,12.59711],[43.90659,12.3823],[43.42425,11.70983]]]]}},{type:"Feature",properties:{iso1A2:"DK",iso1A3:"DNK",iso1N3:"208",wikidata:"Q35",nameEn:"Denmark",groups:["EU","154","150"],callingCodes:["45"]},geometry:{type:"MultiPolygon",coordinates:[[[[12.16597,56.60205],[12.07466,56.29488],[12.65312,56.04345],[12.6372,55.91371],[12.88472,55.63369],[12.60345,55.42675],[12.84405,55.13257],[14.28399,55.1553],[14.89259,55.5623],[15.79951,55.54655],[15.36991,54.73263],[13.93395,54.84044],[12.85844,54.82438],[11.90309,54.38543],[11.00303,54.63689],[10.31111,54.65968],[10.16755,54.73883],[9.89314,54.84171],[9.73563,54.8247],[9.61187,54.85548],[9.62734,54.88057],[9.58937,54.88785],[9.4659,54.83131],[9.43155,54.82586],[9.41213,54.84254],[9.38532,54.83968],[9.36496,54.81749],[9.33849,54.80233],[9.32771,54.80602],[9.2474,54.8112],[9.23445,54.83432],[9.24631,54.84726],[9.20571,54.85841],[9.14275,54.87421],[9.04629,54.87249],[8.92795,54.90452],[8.81178,54.90518],[8.76387,54.8948],[8.63979,54.91069],[8.55769,54.91837],[8.45719,55.06747],[8.02459,55.09613],[7.28637,57.35913],[10.40861,58.38489],[12.16597,56.60205]]]]}},{type:"Feature",properties:{iso1A2:"DM",iso1A3:"DMA",iso1N3:"212",wikidata:"Q784",nameEn:"Dominica",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 767"]},geometry:{type:"MultiPolygon",coordinates:[[[[-61.51867,14.96709],[-61.81728,15.58058],[-61.44899,15.79571],[-60.95725,15.70997],[-60.69955,15.22234],[-61.51867,14.96709]]]]}},{type:"Feature",properties:{iso1A2:"DO",iso1A3:"DOM",iso1N3:"214",wikidata:"Q786",nameEn:"Dominican Republic",groups:["029","003","419","019"],callingCodes:["1 809","1 829","1 849"]},geometry:{type:"MultiPolygon",coordinates:[[[[-67.87844,21.7938],[-68.39466,16.14167],[-72.29523,17.48026],[-71.75671,18.03456],[-71.73783,18.07177],[-71.74994,18.11115],[-71.75465,18.14405],[-71.78271,18.18302],[-71.69952,18.34101],[-71.90875,18.45821],[-71.88102,18.50125],[-72.00201,18.62312],[-71.95412,18.64939],[-71.82556,18.62551],[-71.71885,18.78423],[-71.72624,18.87802],[-71.77766,18.95007],[-71.88102,18.95007],[-71.74088,19.0437],[-71.71088,19.08353],[-71.69938,19.10916],[-71.65337,19.11759],[-71.62642,19.21212],[-71.73229,19.26686],[-71.77766,19.33823],[-71.69448,19.37866],[-71.6802,19.45008],[-71.71268,19.53374],[-71.71449,19.55364],[-71.7429,19.58445],[-71.75865,19.70231],[-71.77419,19.73128],[-72.38946,20.27111],[-67.87844,21.7938]]]]}},{type:"Feature",properties:{iso1A2:"DZ",iso1A3:"DZA",iso1N3:"012",wikidata:"Q262",nameEn:"Algeria",groups:["015","002"],callingCodes:["213"]},geometry:{type:"MultiPolygon",coordinates:[[[[8.59123,37.14286],[8.64044,36.9401],[8.62972,36.86499],[8.67706,36.8364],[8.57613,36.78062],[8.46537,36.7706],[8.47609,36.66607],[8.16167,36.48817],[8.18936,36.44939],[8.40731,36.42208],[8.2626,35.91733],[8.26472,35.73669],[8.35371,35.66373],[8.36086,35.47774],[8.30329,35.29884],[8.47318,35.23376],[8.3555,35.10007],[8.30727,34.95378],[8.25189,34.92009],[8.29655,34.72798],[8.20482,34.57575],[7.86264,34.3987],[7.81242,34.21841],[7.74207,34.16492],[7.66174,34.20167],[7.52851,34.06493],[7.54088,33.7726],[7.73687,33.42114],[7.83028,33.18851],[8.11433,33.10175],[8.1179,33.05086],[8.31895,32.83483],[8.35999,32.50101],[9.07483,32.07865],[9.55544,30.23971],[9.3876,30.16738],[9.78136,29.40961],[9.89569,26.57696],[9.51696,26.39148],[9.38834,26.19288],[10.03146,25.35635],[10.02432,24.98124],[10.33159,24.5465],[10.85323,24.5595],[11.41061,24.21456],[11.62498,24.26669],[11.96886,23.51735],[7.48273,20.87258],[7.38361,20.79165],[5.8153,19.45101],[4.26651,19.14224],[3.36082,18.9745],[3.12501,19.1366],[3.24648,19.81703],[1.20992,20.73533],[1.15698,21.12843],[-4.83423,24.99935],[-8.66674,27.31569],[-8.66879,27.6666],[-8.6715,28.71194],[-7.61585,29.36252],[-6.95824,29.50924],[-6.78351,29.44634],[-6.69965,29.51623],[-5.75616,29.61407],[-5.72121,29.52322],[-5.58831,29.48103],[-5.21671,29.95253],[-4.6058,30.28343],[-4.31774,30.53229],[-3.64735,30.67539],[-3.65418,30.85566],[-3.54944,31.0503],[-3.77103,31.14984],[-3.77647,31.31912],[-3.66386,31.39202],[-3.66314,31.6339],[-2.82784,31.79459],[-2.93873,32.06557],[-2.46166,32.16603],[-1.22829,32.07832],[-1.15735,32.12096],[-1.24453,32.1917],[-1.24998,32.32993],[-0.9912,32.52467],[-1.37794,32.73628],[-1.54244,32.95499],[-1.46249,33.0499],[-1.67067,33.27084],[-1.59508,33.59929],[-1.73494,33.71721],[-1.64666,34.10405],[-1.78042,34.39018],[-1.69788,34.48056],[-1.84569,34.61907],[-1.73707,34.74226],[-1.97469,34.886],[-1.97833,34.93218],[-2.04734,34.93218],[-2.21445,35.04378],[-2.21248,35.08532],[-2.27707,35.35051],[2.46645,37.97429],[8.59123,37.14286]]]]}},{type:"Feature",properties:{iso1A2:"EA",wikidata:"Q28868874",nameEn:"Ceuta, Melilla",country:"ES",groups:["015","002"],isoStatus:"excRes",callingCodes:["34"]},geometry:{type:"MultiPolygon",coordinates:[[[[-5.38491,35.92591],[-5.27635,35.91222],[-5.27056,35.88794],[-5.34379,35.8711],[-5.35844,35.87375],[-5.37338,35.88417],[-5.38491,35.92591]]],[[[-2.92224,35.3401],[-2.92181,35.28599],[-2.92674,35.27313],[-2.93893,35.26737],[-2.95065,35.26576],[-2.95431,35.2728],[-2.96516,35.27967],[-2.96826,35.28296],[-2.96507,35.28801],[-2.97035,35.28852],[-2.96978,35.29459],[-2.96648,35.30475],[-2.96038,35.31609],[-2.92224,35.3401]]]]}},{type:"Feature",properties:{iso1A2:"EC",iso1A3:"ECU",iso1N3:"218",wikidata:"Q736",nameEn:"Ecuador",groups:["005","419","019"],callingCodes:["593"]},geometry:{type:"MultiPolygon",coordinates:[[[[-75.25764,-0.11943],[-75.40192,-0.17196],[-75.61997,-0.10012],[-75.60169,-0.18708],[-75.53615,-0.19213],[-75.22862,-0.60048],[-75.22862,-0.95588],[-75.3872,-0.9374],[-75.57429,-1.55961],[-76.05203,-2.12179],[-76.6324,-2.58397],[-77.94147,-3.05454],[-78.19369,-3.36431],[-78.14324,-3.47653],[-78.22642,-3.51113],[-78.24589,-3.39907],[-78.34362,-3.38633],[-78.68394,-4.60754],[-78.85149,-4.66795],[-79.01659,-5.01481],[-79.1162,-4.97774],[-79.26248,-4.95167],[-79.59402,-4.46848],[-79.79722,-4.47558],[-80.13945,-4.29786],[-80.39256,-4.48269],[-80.46386,-4.41516],[-80.32114,-4.21323],[-80.45023,-4.20938],[-80.4822,-4.05477],[-80.46386,-4.01342],[-80.13232,-3.90317],[-80.19926,-3.68894],[-80.18741,-3.63994],[-80.19848,-3.59249],[-80.21642,-3.5888],[-80.20535,-3.51667],[-80.22629,-3.501],[-80.23651,-3.48652],[-80.24586,-3.48677],[-80.24475,-3.47846],[-80.24123,-3.46124],[-80.20647,-3.431],[-80.30602,-3.39149],[-92.46744,-2.52874],[-93.12365,2.64343],[-78.87137,1.47457],[-78.42749,1.15389],[-77.85677,0.80197],[-77.7148,0.85003],[-77.68613,0.83029],[-77.66416,0.81604],[-77.67815,0.73863],[-77.49984,0.64476],[-77.52001,0.40782],[-76.89177,0.24736],[-76.4094,0.24015],[-76.41215,0.38228],[-76.23441,0.42294],[-75.82927,0.09578],[-75.25764,-0.11943]]]]}},{type:"Feature",properties:{iso1A2:"EE",iso1A3:"EST",iso1N3:"233",wikidata:"Q191",nameEn:"Estonia",aliases:["EW"],groups:["EU","154","150"],callingCodes:["372"]},geometry:{type:"MultiPolygon",coordinates:[[[[26.32936,60.00121],[26.90044,59.63819],[27.85643,59.58538],[28.04187,59.47017],[28.19061,59.39962],[28.21137,59.38058],[28.20537,59.36491],[28.19284,59.35791],[28.14215,59.28934],[28.00689,59.28351],[27.90911,59.24353],[27.87978,59.18097],[27.80482,59.1116],[27.74429,58.98351],[27.36366,58.78381],[27.55489,58.39525],[27.48541,58.22615],[27.62393,58.09462],[27.67282,57.92627],[27.81841,57.89244],[27.78526,57.83963],[27.56689,57.83356],[27.50171,57.78842],[27.52615,57.72843],[27.3746,57.66834],[27.40393,57.62125],[27.31919,57.57672],[27.34698,57.52242],[26.90364,57.62823],[26.54675,57.51813],[26.46527,57.56885],[26.29253,57.59244],[26.1866,57.6849],[26.2029,57.7206],[26.08098,57.76619],[26.0543,57.76105],[26.03332,57.7718],[26.02415,57.76865],[26.02069,57.77169],[26.0266,57.77441],[26.027,57.78158],[26.02456,57.78342],[26.0324,57.79037],[26.05949,57.84744],[25.73499,57.90193],[25.29581,58.08288],[25.28237,57.98539],[25.19484,58.0831],[24.3579,57.87471],[24.26221,57.91787],[23.20055,57.56697],[22.80496,57.87798],[19.84909,57.57876],[20.5104,59.15546],[26.32936,60.00121]]]]}},{type:"Feature",properties:{iso1A2:"EG",iso1A3:"EGY",iso1N3:"818",wikidata:"Q79",nameEn:"Egypt",groups:["015","002"],callingCodes:["20"]},geometry:{type:"MultiPolygon",coordinates:[[[[33.62659,31.82938],[34.052,31.46619],[34.21853,31.32363],[34.23572,31.2966],[34.24012,31.29591],[34.26742,31.21998],[34.92298,29.45305],[34.88293,29.37455],[34.46254,27.99552],[34.51305,27.70027],[37.8565,22.00903],[34.0765,22.00501],[33.17563,22.00405],[24.99885,21.99535],[24.99968,29.24574],[24.71117,30.17441],[25.01077,30.73861],[24.83101,31.31921],[25.06041,31.57937],[25.14001,31.67534],[25.63787,31.9359],[33.62659,31.82938]]]]}},{type:"Feature",properties:{iso1A2:"EH",iso1A3:"ESH",iso1N3:"732",wikidata:"Q6250",nameEn:"Western Sahara",groups:["015","002"],callingCodes:["212"]},geometry:{type:"MultiPolygon",coordinates:[[[[-8.66879,27.6666],[-8.66674,27.31569],[-8.66721,25.99918],[-12.0002,25.9986],[-12.00251,23.4538],[-12.14969,23.41935],[-12.36213,23.3187],[-12.5741,23.28975],[-13.00412,23.02297],[-13.10753,22.89493],[-13.15313,22.75649],[-13.08438,22.53866],[-13.01525,21.33343],[-16.95474,21.33997],[-16.99806,21.12142],[-17.0357,21.05368],[-17.0396,20.9961],[-17.06781,20.92697],[-17.0695,20.85742],[-17.0471,20.76408],[-17.35589,20.80492],[-17.21511,21.34226],[-17.02707,21.34022],[-16.9978,21.36239],[-16.44269,21.39745],[-14.78487,21.36587],[-14.47329,21.63839],[-14.48112,22.00886],[-14.1291,22.41636],[-14.10361,22.75501],[-13.75627,23.77231],[-13.00628,24.01923],[-12.92147,24.39502],[-12.12281,25.13682],[-12.06001,26.04442],[-11.62052,26.05229],[-11.38635,26.611],[-11.23622,26.72023],[-11.35695,26.8505],[-10.68417,26.90984],[-9.81998,26.71379],[-9.56957,26.90042],[-9.08698,26.98639],[-8.71787,26.9898],[-8.77527,27.66663],[-8.66879,27.6666]]]]}},{type:"Feature",properties:{iso1A2:"ER",iso1A3:"ERI",iso1N3:"232",wikidata:"Q986",nameEn:"Eritrea",groups:["014","202","002"],callingCodes:["291"]},geometry:{type:"MultiPolygon",coordinates:[[[[41.37609,16.19728],[41.29956,15.565],[42.63806,13.58268],[43.29075,12.79154],[42.86195,12.58747],[42.7996,12.42629],[42.6957,12.36201],[42.46941,12.52661],[42.4037,12.46478],[42.2798,12.6355],[42.21469,12.75832],[42.05841,12.80912],[41.62864,13.38626],[41.25097,13.60787],[40.9167,14.11152],[40.25686,14.41445],[40.21128,14.39342],[40.14649,14.53969],[40.07236,14.54264],[39.9443,14.41024],[39.76632,14.54264],[39.58182,14.60987],[39.50585,14.55735],[39.52756,14.49011],[39.37685,14.54402],[39.2519,14.40393],[39.2302,14.44598],[39.26927,14.48801],[39.23888,14.56365],[39.19547,14.56996],[39.14772,14.61827],[39.16074,14.65187],[39.02834,14.63717],[38.98058,14.54895],[38.78306,14.4754],[38.45748,14.41445],[38.3533,14.51323],[38.25562,14.67287],[38.0364,14.72745],[37.91287,14.89447],[37.528,14.18413],[37.47319,14.2149],[37.3106,14.44657],[37.13206,14.40746],[37.09486,14.27155],[37.01622,14.2561],[36.85787,14.32201],[36.63364,14.31172],[36.55659,14.28237],[36.56536,14.26177],[36.54376,14.25597],[36.44337,15.14963],[36.54276,15.23478],[36.69761,15.75323],[36.76371,15.80831],[36.92193,16.23451],[36.99777,17.07172],[37.42694,17.04041],[37.50967,17.32199],[38.13362,17.53906],[38.37133,17.66269],[38.45916,17.87167],[38.57727,17.98125],[39.63762,18.37348],[41.37609,16.19728]]]]}},{type:"Feature",properties:{iso1A2:"ES",iso1A3:"ESP",iso1N3:"724",wikidata:"Q29",nameEn:"Spain",groups:["EU","039","150"],callingCodes:["34"]},geometry:{type:"MultiPolygon",coordinates:[[[[-2.41312,35.17111],[-2.44887,35.17075],[-2.44896,35.18777],[-2.41265,35.1877],[-2.41312,35.17111]]],[[[-3.90602,35.21494],[-3.90288,35.22024],[-3.88617,35.21406],[-3.88926,35.20841],[-3.90602,35.21494]]],[[[-4.30191,35.17419],[-4.29436,35.17149],[-4.30112,35.17058],[-4.30191,35.17419]]],[[[-7.27694,35.93599],[-7.37282,36.96896],[-7.39769,37.16868],[-7.41133,37.20314],[-7.41854,37.23813],[-7.43227,37.25152],[-7.43974,37.38913],[-7.46878,37.47127],[-7.51759,37.56119],[-7.41981,37.75729],[-7.33441,37.81193],[-7.27314,37.90145],[-7.24544,37.98884],[-7.12648,38.00296],[-7.10366,38.04404],[-7.05966,38.01966],[-7.00375,38.01914],[-6.93418,38.21454],[-7.09389,38.17227],[-7.15581,38.27597],[-7.32529,38.44336],[-7.265,38.61674],[-7.26174,38.72107],[-7.03848,38.87221],[-7.051,38.907],[-6.95211,39.0243],[-6.97004,39.07619],[-7.04011,39.11919],[-7.10692,39.10275],[-7.14929,39.11287],[-7.12811,39.17101],[-7.23566,39.20132],[-7.23403,39.27579],[-7.3149,39.34857],[-7.2927,39.45847],[-7.49477,39.58794],[-7.54121,39.66717],[-7.33507,39.64569],[-7.24707,39.66576],[-7.01613,39.66877],[-6.97492,39.81488],[-6.91463,39.86618],[-6.86737,40.01986],[-6.94233,40.10716],[-7.00589,40.12087],[-7.02544,40.18564],[-7.00426,40.23169],[-6.86085,40.26776],[-6.86085,40.2976],[-6.80218,40.33239],[-6.78426,40.36468],[-6.84618,40.42177],[-6.84944,40.46394],[-6.7973,40.51723],[-6.80218,40.55067],[-6.84292,40.56801],[-6.79567,40.65955],[-6.82826,40.74603],[-6.82337,40.84472],[-6.79892,40.84842],[-6.80707,40.88047],[-6.84292,40.89771],[-6.8527,40.93958],[-6.9357,41.02888],[-6.913,41.03922],[-6.88843,41.03027],[-6.84781,41.02692],[-6.80942,41.03629],[-6.79241,41.05397],[-6.75655,41.10187],[-6.77319,41.13049],[-6.69711,41.1858],[-6.68286,41.21641],[-6.65046,41.24725],[-6.55937,41.24417],[-6.38551,41.35274],[-6.38553,41.38655],[-6.3306,41.37677],[-6.26777,41.48796],[-6.19128,41.57638],[-6.29863,41.66432],[-6.44204,41.68258],[-6.49907,41.65823],[-6.54633,41.68623],[-6.56426,41.74219],[-6.51374,41.8758],[-6.56752,41.88429],[-6.5447,41.94371],[-6.58544,41.96674],[-6.61967,41.94008],[-6.75004,41.94129],[-6.76959,41.98734],[-6.81196,41.99097],[-6.82174,41.94493],[-6.94396,41.94403],[-6.95537,41.96553],[-6.98144,41.9728],[-7.01078,41.94977],[-7.07596,41.94977],[-7.08574,41.97401],[-7.14115,41.98855],[-7.18549,41.97515],[-7.18677,41.88793],[-7.32366,41.8406],[-7.37092,41.85031],[-7.42864,41.80589],[-7.42854,41.83262],[-7.44759,41.84451],[-7.45566,41.86488],[-7.49803,41.87095],[-7.52737,41.83939],[-7.62188,41.83089],[-7.58603,41.87944],[-7.65774,41.88308],[-7.69848,41.90977],[-7.84188,41.88065],[-7.88055,41.84571],[-7.88751,41.92553],[-7.90707,41.92432],[-7.92336,41.8758],[-7.9804,41.87337],[-8.01136,41.83453],[-8.0961,41.81024],[-8.16455,41.81753],[-8.16944,41.87944],[-8.19551,41.87459],[-8.2185,41.91237],[-8.16232,41.9828],[-8.08796,42.01398],[-8.08847,42.05767],[-8.11729,42.08537],[-8.18178,42.06436],[-8.19406,42.12141],[-8.18947,42.13853],[-8.1986,42.15402],[-8.22406,42.1328],[-8.24681,42.13993],[-8.2732,42.12396],[-8.29809,42.106],[-8.32161,42.10218],[-8.33912,42.08358],[-8.36353,42.09065],[-8.38323,42.07683],[-8.40143,42.08052],[-8.42512,42.07199],[-8.44123,42.08218],[-8.48185,42.0811],[-8.52837,42.07658],[-8.5252,42.06264],[-8.54563,42.0537],[-8.58086,42.05147],[-8.59493,42.05708],[-8.63791,42.04691],[-8.64626,42.03668],[-8.65832,42.02972],[-8.6681,41.99703],[-8.69071,41.98862],[-8.7478,41.96282],[-8.74606,41.9469],[-8.75712,41.92833],[-8.81794,41.90375],[-8.87157,41.86488],[-9.14112,41.86623],[-10.14298,44.17365],[-1.81005,43.59738],[-1.77289,43.38957],[-1.79319,43.37497],[-1.78332,43.36399],[-1.78714,43.35476],[-1.77068,43.34396],[-1.75334,43.34107],[-1.75079,43.3317],[-1.7397,43.32979],[-1.73074,43.29481],[-1.69407,43.31378],[-1.62481,43.30726],[-1.63052,43.28591],[-1.61341,43.25269],[-1.57674,43.25269],[-1.55963,43.28828],[-1.50992,43.29481],[-1.45289,43.27049],[-1.40942,43.27272],[-1.3758,43.24511],[-1.41562,43.12815],[-1.47555,43.08372],[-1.44067,43.047],[-1.35272,43.02658],[-1.34419,43.09665],[-1.32209,43.1127],[-1.27118,43.11961],[-1.30052,43.09581],[-1.30531,43.06859],[-1.25244,43.04164],[-1.22881,43.05534],[-1.10333,43.0059],[-1.00963,42.99279],[-0.97133,42.96239],[-0.81652,42.95166],[-0.75478,42.96916],[-0.72037,42.92541],[-0.73422,42.91228],[-0.72608,42.89318],[-0.69837,42.87945],[-0.67637,42.88303],[-0.55497,42.77846],[-0.50863,42.82713],[-0.44334,42.79939],[-0.41319,42.80776],[-0.38833,42.80132],[-0.3122,42.84788],[-0.17939,42.78974],[-0.16141,42.79535],[-0.10519,42.72761],[-0.02468,42.68513],[0.17569,42.73424],[0.25336,42.7174],[0.29407,42.67431],[0.36251,42.72282],[0.40214,42.69779],[0.67873,42.69458],[0.65421,42.75872],[0.66121,42.84021],[0.711,42.86372],[0.93089,42.79154],[0.96166,42.80629],[0.98292,42.78754],[1.0804,42.78569],[1.15928,42.71407],[1.35562,42.71944],[1.44197,42.60217],[1.42512,42.58292],[1.44529,42.56722],[1.4234,42.55959],[1.41245,42.53539],[1.44759,42.54431],[1.46661,42.50949],[1.41648,42.48315],[1.43838,42.47848],[1.44529,42.43724],[1.5127,42.42959],[1.55073,42.43299],[1.55937,42.45808],[1.57953,42.44957],[1.58933,42.46275],[1.65674,42.47125],[1.66826,42.50779],[1.70571,42.48867],[1.72515,42.50338],[1.76335,42.48863],[1.83037,42.48395],[1.88853,42.4501],[1.93663,42.45439],[1.94292,42.44316],[1.94061,42.43333],[1.94084,42.43039],[1.9574,42.42401],[1.96482,42.37787],[2.00488,42.35399],[2.06241,42.35906],[2.11621,42.38393],[2.12789,42.41291],[2.16599,42.42314],[2.20578,42.41633],[2.25551,42.43757],[2.38504,42.39977],[2.43299,42.39423],[2.43508,42.37568],[2.48457,42.33933],[2.54382,42.33406],[2.55516,42.35351],[2.57934,42.35808],[2.6747,42.33974],[2.65311,42.38771],[2.72056,42.42298],[2.75497,42.42578],[2.77464,42.41046],[2.84335,42.45724],[2.85675,42.45444],[2.86983,42.46843],[2.88413,42.45938],[2.92107,42.4573],[2.94283,42.48174],[2.96518,42.46692],[3.03734,42.47363],[3.08167,42.42748],[3.10027,42.42621],[3.11379,42.43646],[3.17156,42.43545],[3.4481,42.4358],[5.18061,39.43581],[2.46645,37.97429],[-2.27707,35.35051],[-2.85819,35.63219],[-5.10878,36.05227],[-5.64962,35.93752],[-7.27694,35.93599]],[[-5.28217,36.09907],[-5.27801,36.14942],[-5.33822,36.15272],[-5.34536,36.15501],[-5.36494,36.15496],[-5.38545,36.15481],[-5.40134,36.14896],[-5.39074,36.10278],[-5.36503,36.06205],[-5.32837,36.05935],[-5.3004,36.07439],[-5.28217,36.09907]]],[[[1.99838,42.44682],[1.98378,42.44697],[1.96125,42.45364],[1.95606,42.45785],[1.96215,42.47854],[1.97003,42.48081],[1.97227,42.48487],[1.97697,42.48568],[1.98022,42.49569],[1.98916,42.49351],[1.99766,42.4858],[1.98579,42.47486],[1.99216,42.46208],[2.01564,42.45171],[1.99838,42.44682]]]]}},{type:"Feature",properties:{iso1A2:"ET",iso1A3:"ETH",iso1N3:"231",wikidata:"Q115",nameEn:"Ethiopia",groups:["014","202","002"],callingCodes:["251"]},geometry:{type:"MultiPolygon",coordinates:[[[[42.4037,12.46478],[41.95461,11.81157],[41.82878,11.72361],[41.77727,11.49902],[41.8096,11.33606],[41.80056,10.97127],[42.06302,10.92599],[42.13691,10.97586],[42.42669,10.98493],[42.62989,11.09711],[42.75111,11.06992],[42.79037,10.98493],[42.95776,10.98533],[42.69452,10.62672],[42.87643,10.18441],[43.0937,9.90579],[43.23518,9.84605],[43.32613,9.59205],[44.19222,8.93028],[46.99339,7.9989],[47.92477,8.00111],[47.97917,8.00124],[44.98104,4.91821],[44.02436,4.9451],[43.40263,4.79289],[43.04177,4.57923],[42.97746,4.44032],[42.84526,4.28357],[42.55853,4.20518],[42.07619,4.17667],[41.89488,3.97375],[41.1754,3.94079],[40.77498,4.27683],[39.86043,3.86974],[39.76808,3.67058],[39.58339,3.47434],[39.55132,3.39634],[39.51551,3.40895],[39.49444,3.45521],[39.19954,3.47834],[39.07736,3.5267],[38.91938,3.51198],[38.52336,3.62551],[38.45812,3.60445],[38.14168,3.62487],[37.07724,4.33503],[36.84474,4.44518],[36.03924,4.44406],[35.95449,4.53244],[35.9419,4.61933],[35.82118,4.77382],[35.81968,5.10757],[35.8576,5.33413],[35.50792,5.42431],[35.29938,5.34042],[35.31188,5.50106],[35.13058,5.62118],[35.12611,5.68937],[35.00546,5.89387],[34.96227,6.26415],[35.01738,6.46991],[34.87736,6.60161],[34.77459,6.5957],[34.65096,6.72589],[34.53776,6.74808],[34.53925,6.82794],[34.47669,6.91076],[34.35753,6.91963],[34.19369,7.04382],[34.19369,7.12807],[34.01495,7.25664],[34.03878,7.27437],[34.02984,7.36449],[33.87642,7.5491],[33.71407,7.65983],[33.44745,7.7543],[33.32531,7.71297],[33.24637,7.77939],[33.04944,7.78989],[33.0006,7.90333],[33.08401,8.05822],[33.18083,8.13047],[33.1853,8.29264],[33.19721,8.40317],[33.3119,8.45474],[33.54575,8.47094],[33.66938,8.44442],[33.71407,8.3678],[33.87195,8.41938],[33.89579,8.4842],[34.01346,8.50041],[34.14453,8.60204],[34.14304,9.04654],[34.10229,9.50238],[34.08717,9.55243],[34.13186,9.7492],[34.20484,9.9033],[34.22718,10.02506],[34.32102,10.11599],[34.34783,10.23914],[34.2823,10.53508],[34.4372,10.781],[34.59062,10.89072],[34.77383,10.74588],[34.77532,10.69027],[34.86618,10.74588],[34.86916,10.78832],[34.97491,10.86147],[34.97789,10.91559],[34.93172,10.95946],[35.01215,11.19626],[34.95704,11.24448],[35.09556,11.56278],[35.05832,11.71158],[35.11492,11.85156],[35.24302,11.91132],[35.70476,12.67101],[36.01458,12.72478],[36.14268,12.70879],[36.16651,12.88019],[36.13374,12.92665],[36.24545,13.36759],[36.38993,13.56459],[36.48824,13.83954],[36.44653,13.95666],[36.54376,14.25597],[36.56536,14.26177],[36.55659,14.28237],[36.63364,14.31172],[36.85787,14.32201],[37.01622,14.2561],[37.09486,14.27155],[37.13206,14.40746],[37.3106,14.44657],[37.47319,14.2149],[37.528,14.18413],[37.91287,14.89447],[38.0364,14.72745],[38.25562,14.67287],[38.3533,14.51323],[38.45748,14.41445],[38.78306,14.4754],[38.98058,14.54895],[39.02834,14.63717],[39.16074,14.65187],[39.14772,14.61827],[39.19547,14.56996],[39.23888,14.56365],[39.26927,14.48801],[39.2302,14.44598],[39.2519,14.40393],[39.37685,14.54402],[39.52756,14.49011],[39.50585,14.55735],[39.58182,14.60987],[39.76632,14.54264],[39.9443,14.41024],[40.07236,14.54264],[40.14649,14.53969],[40.21128,14.39342],[40.25686,14.41445],[40.9167,14.11152],[41.25097,13.60787],[41.62864,13.38626],[42.05841,12.80912],[42.21469,12.75832],[42.2798,12.6355],[42.4037,12.46478]]]]}},{type:"Feature",properties:{iso1A2:"EU",iso1A3:"EUE",wikidata:"Q458",nameEn:"European Union",level:"union",isoStatus:"excRes"},geometry:null},{type:"Feature",properties:{iso1A2:"FI",iso1A3:"FIN",iso1N3:"246",wikidata:"Q33",nameEn:"Finland",aliases:["SF"],groups:["EU","154","150"],callingCodes:["358"]},geometry:{type:"MultiPolygon",coordinates:[[[[29.12697,69.69193],[29.31664,69.47994],[28.8629,69.22395],[28.81248,69.11997],[28.91738,69.04774],[28.45957,68.91417],[28.78224,68.86696],[28.43941,68.53366],[28.62982,68.19816],[29.34179,68.06655],[29.66955,67.79872],[30.02041,67.67523],[29.91155,67.51507],[28.9839,66.94139],[29.91155,66.13863],[30.16363,65.66935],[29.97205,65.70256],[29.74013,65.64025],[29.84096,65.56945],[29.68972,65.31803],[29.61914,65.23791],[29.8813,65.22101],[29.84096,65.1109],[29.61914,65.05993],[29.68972,64.80789],[30.05271,64.79072],[30.12329,64.64862],[30.01238,64.57513],[30.06279,64.35782],[30.4762,64.25728],[30.55687,64.09036],[30.25437,63.83364],[29.98213,63.75795],[30.49637,63.46666],[31.23244,63.22239],[31.29294,63.09035],[31.58535,62.91642],[31.38369,62.66284],[31.10136,62.43042],[29.01829,61.17448],[28.82816,61.1233],[28.47974,60.93365],[27.77352,60.52722],[27.71177,60.3893],[27.44953,60.22766],[26.32936,60.00121],[20.5104,59.15546],[21.35468,59.67511],[21.02509,60.12142],[21.08159,60.20167],[21.15143,60.54555],[20.96741,60.71528],[19.23413,60.61414],[20.15877,63.06556],[24.14112,65.39731],[24.15107,65.81427],[24.14798,65.83466],[24.15791,65.85385],[23.90497,66.15802],[23.71339,66.21299],[23.64982,66.30603],[23.67591,66.3862],[23.63776,66.43568],[23.85959,66.56434],[23.89488,66.772],[23.98059,66.79585],[23.98563,66.84149],[23.56214,67.17038],[23.58735,67.20752],[23.54701,67.25435],[23.75372,67.29914],[23.75372,67.43688],[23.39577,67.46974],[23.54701,67.59306],[23.45627,67.85297],[23.65793,67.9497],[23.40081,68.05545],[23.26469,68.15134],[23.15377,68.14759],[23.10336,68.26551],[22.73028,68.40881],[22.00429,68.50692],[21.03001,68.88969],[20.90649,68.89696],[20.85104,68.93142],[20.91658,68.96764],[20.78802,69.03087],[20.55258,69.06069],[20.72171,69.11874],[21.05775,69.0356],[21.11099,69.10291],[20.98641,69.18809],[21.00732,69.22755],[21.27827,69.31281],[21.63833,69.27485],[22.27276,68.89514],[22.38367,68.71561],[22.53321,68.74393],[23.13064,68.64684],[23.68017,68.70276],[23.781,68.84514],[24.02299,68.81601],[24.18432,68.73936],[24.74898,68.65143],[24.90023,68.55579],[24.93048,68.61102],[25.10189,68.63307],[25.12206,68.78684],[25.42455,68.90328],[25.61613,68.89602],[25.75729,68.99383],[25.69679,69.27039],[25.96904,69.68397],[26.40261,69.91377],[26.64461,69.96565],[27.05802,69.92069],[27.57226,70.06215],[27.95542,70.0965],[27.97558,69.99671],[28.32849,69.88605],[28.36883,69.81658],[29.12697,69.69193]]]]}},{type:"Feature",properties:{iso1A2:"FJ",iso1A3:"FJI",iso1N3:"242",wikidata:"Q712",nameEn:"Fiji",groups:["054","009"],driveSide:"left",callingCodes:["679"]},geometry:{type:"MultiPolygon",coordinates:[[[[174,-22.5],[174,-11.5],[179.99999,-11.5],[179.99999,-22.5],[174,-22.5]]],[[[-178.60161,-14.95666],[-176.76826,-14.95183],[-176.74538,-22.89767],[-180,-22.90585],[-180,-14.96041],[-178.60161,-14.95666]]]]}},{type:"Feature",properties:{iso1A2:"FK",iso1A3:"FLK",iso1N3:"238",wikidata:"Q9648",nameEn:"Falkland Islands",country:"GB",groups:["005","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["500"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.67376,-55.11859],[-61.26735,-50.63919],[-54.56126,-51.26248],[-63.67376,-55.11859]]]]}},{type:"Feature",properties:{iso1A2:"FM",iso1A3:"FSM",iso1N3:"583",wikidata:"Q702",nameEn:"Federated States of Micronesia",groups:["057","009"],roadSpeedUnit:"mph",callingCodes:["691"]},geometry:{type:"MultiPolygon",coordinates:[[[[136.04605,12.45908],[159.04653,10.59067],[165.35175,6.367],[156.88247,-1.39237],[136.27107,6.73747],[136.04605,12.45908]]]]}},{type:"Feature",properties:{iso1A2:"FO",iso1A3:"FRO",iso1N3:"234",wikidata:"Q4628",nameEn:"Faroe Islands",country:"DK",groups:["154","150"],callingCodes:["298"]},geometry:{type:"MultiPolygon",coordinates:[[[[-8.51774,62.35338],[-5.70102,62.77194],[-6.51083,60.95272],[-8.51774,62.35338]]]]}},{type:"Feature",properties:{iso1A2:"FR",iso1A3:"FRA",iso1N3:"250",wikidata:"Q142",nameEn:"France",groups:["EU","155","150"],callingCodes:["33"]},geometry:null},{type:"Feature",properties:{iso1A2:"FX",iso1A3:"FXX",iso1N3:"249",wikidata:"Q212429",nameEn:"Metropolitan France",country:"FR",groups:["EU","155","150"],isoStatus:"excRes",callingCodes:["33"]},geometry:{type:"MultiPolygon",coordinates:[[[[2.55904,51.07014],[2.57551,51.00326],[2.63074,50.94746],[2.59093,50.91751],[2.63331,50.81457],[2.71165,50.81295],[2.81056,50.71773],[2.8483,50.72276],[2.86985,50.7033],[2.87937,50.70298],[2.88504,50.70656],[2.90069,50.69263],[2.91036,50.6939],[2.90873,50.702],[2.95019,50.75138],[2.96778,50.75242],[3.00537,50.76588],[3.04314,50.77674],[3.09163,50.77717],[3.10614,50.78303],[3.11206,50.79416],[3.11987,50.79188],[3.1257,50.78603],[3.15017,50.79031],[3.16476,50.76843],[3.18339,50.74981],[3.18811,50.74025],[3.20064,50.73547],[3.19017,50.72569],[3.20845,50.71662],[3.22042,50.71019],[3.24593,50.71389],[3.26063,50.70086],[3.26141,50.69151],[3.2536,50.68977],[3.264,50.67668],[3.23951,50.6585],[3.2729,50.60718],[3.28575,50.52724],[3.37693,50.49538],[3.44629,50.51009],[3.47385,50.53397],[3.51564,50.5256],[3.49509,50.48885],[3.5683,50.50192],[3.58361,50.49049],[3.61014,50.49568],[3.64426,50.46275],[3.66153,50.45165],[3.67494,50.40239],[3.67262,50.38663],[3.65709,50.36873],[3.66976,50.34563],[3.71009,50.30305],[3.70987,50.3191],[3.73911,50.34809],[3.84314,50.35219],[3.90781,50.32814],[3.96771,50.34989],[4.0268,50.35793],[4.0689,50.3254],[4.10237,50.31247],[4.10957,50.30234],[4.11954,50.30425],[4.13665,50.25609],[4.16808,50.25786],[4.15524,50.2833],[4.17347,50.28838],[4.17861,50.27443],[4.20651,50.27333],[4.21945,50.25539],[4.15524,50.21103],[4.16014,50.19239],[4.13561,50.13078],[4.20147,50.13535],[4.23101,50.06945],[4.16294,50.04719],[4.13508,50.01976],[4.14239,49.98034],[4.20532,49.95803],[4.31963,49.97043],[4.35051,49.95315],[4.43488,49.94122],[4.51098,49.94659],[4.5414,49.96911],[4.68695,49.99685],[4.70064,50.09384],[4.75237,50.11314],[4.82438,50.16878],[4.83279,50.15331],[4.88602,50.15182],[4.8382,50.06738],[4.78827,49.95609],[4.88529,49.9236],[4.85134,49.86457],[4.86965,49.82271],[4.85464,49.78995],[4.96714,49.79872],[5.09249,49.76193],[5.14545,49.70287],[5.26232,49.69456],[5.31465,49.66846],[5.33039,49.6555],[5.30214,49.63055],[5.3137,49.61225],[5.33851,49.61599],[5.34837,49.62889],[5.3974,49.61596],[5.43713,49.5707],[5.46734,49.52648],[5.46541,49.49825],[5.55001,49.52729],[5.60909,49.51228],[5.64505,49.55146],[5.75649,49.54321],[5.7577,49.55915],[5.77435,49.56298],[5.79195,49.55228],[5.81838,49.54777],[5.80871,49.5425],[5.81664,49.53775],[5.83648,49.5425],[5.84466,49.53027],[5.83467,49.52717],[5.83389,49.52152],[5.86571,49.50015],[5.94128,49.50034],[5.94224,49.49608],[5.96876,49.49053],[5.97693,49.45513],[6.02648,49.45451],[6.02743,49.44845],[6.04176,49.44801],[6.05553,49.46663],[6.07887,49.46399],[6.08373,49.45594],[6.10072,49.45268],[6.09845,49.46351],[6.10325,49.4707],[6.12346,49.4735],[6.12814,49.49365],[6.14321,49.48796],[6.16115,49.49297],[6.15366,49.50226],[6.17386,49.50934],[6.19543,49.50536],[6.2409,49.51408],[6.25029,49.50609],[6.27875,49.503],[6.28818,49.48465],[6.3687,49.4593],[6.36778,49.46937],[6.38352,49.46463],[6.39168,49.4667],[6.40274,49.46546],[6.42432,49.47683],[6.55404,49.42464],[6.533,49.40748],[6.60091,49.36864],[6.58807,49.35358],[6.572,49.35027],[6.60186,49.31055],[6.66583,49.28065],[6.69274,49.21661],[6.71843,49.2208],[6.73256,49.20486],[6.71137,49.18808],[6.73765,49.16375],[6.78265,49.16793],[6.83385,49.15162],[6.84703,49.15734],[6.86225,49.18185],[6.85016,49.19354],[6.85119,49.20038],[6.83555,49.21249],[6.85939,49.22376],[6.89298,49.20863],[6.91875,49.22261],[6.93831,49.2223],[6.94028,49.21641],[6.95963,49.203],[6.97273,49.2099],[7.01318,49.19018],[7.03459,49.19096],[7.0274,49.17042],[7.03178,49.15734],[7.04662,49.13724],[7.04409,49.12123],[7.04843,49.11422],[7.05548,49.11185],[7.06642,49.11415],[7.07162,49.1255],[7.09007,49.13094],[7.07859,49.15031],[7.10715,49.15631],[7.10384,49.13787],[7.12504,49.14253],[7.1358,49.1282],[7.1593,49.1204],[7.23473,49.12971],[7.29514,49.11426],[7.3195,49.14231],[7.35995,49.14399],[7.3662,49.17308],[7.44052,49.18354],[7.44455,49.16765],[7.49473,49.17],[7.49172,49.13915],[7.53012,49.09818],[7.56416,49.08136],[7.62575,49.07654],[7.63618,49.05428],[7.75948,49.04562],[7.79557,49.06583],[7.86386,49.03499],[7.93641,49.05544],[7.97783,49.03161],[8.14189,48.97833],[8.22604,48.97352],[8.20031,48.95856],[8.19989,48.95825],[8.12813,48.87985],[8.10253,48.81829],[8.06802,48.78957],[8.0326,48.79017],[8.01534,48.76085],[7.96994,48.75606],[7.96812,48.72491],[7.89002,48.66317],[7.84098,48.64217],[7.80057,48.5857],[7.80167,48.54758],[7.80647,48.51239],[7.76833,48.48945],[7.73109,48.39192],[7.74562,48.32736],[7.69022,48.30018],[7.6648,48.22219],[7.57137,48.12292],[7.56966,48.03265],[7.62302,47.97898],[7.55673,47.87371],[7.52921,47.77747],[7.54761,47.72912],[7.53722,47.71635],[7.51266,47.70197],[7.51915,47.68335],[7.52067,47.66437],[7.53384,47.65115],[7.5591,47.63849],[7.57423,47.61628],[7.58851,47.60794],[7.59301,47.60058],[7.58945,47.59017],[7.58386,47.57536],[7.56684,47.57785],[7.56548,47.57617],[7.55689,47.57232],[7.55652,47.56779],[7.53634,47.55553],[7.52831,47.55347],[7.51723,47.54578],[7.50873,47.54546],[7.49691,47.53821],[7.50588,47.52856],[7.51904,47.53515],[7.53199,47.5284],[7.5229,47.51644],[7.49804,47.51798],[7.51076,47.49651],[7.47534,47.47932],[7.43356,47.49712],[7.42923,47.48628],[7.4583,47.47216],[7.4462,47.46264],[7.43088,47.45846],[7.40308,47.43638],[7.35603,47.43432],[7.33526,47.44186],[7.24669,47.4205],[7.17026,47.44312],[7.19583,47.49455],[7.16249,47.49025],[7.12781,47.50371],[7.07425,47.48863],[7.0231,47.50522],[6.98425,47.49432],[7.0024,47.45264],[6.93953,47.43388],[6.93744,47.40714],[6.88542,47.37262],[6.87959,47.35335],[7.03125,47.36996],[7.0564,47.35134],[7.05305,47.33304],[6.94316,47.28747],[6.95108,47.26428],[6.9508,47.24338],[6.8489,47.15933],[6.76788,47.1208],[6.68823,47.06616],[6.71531,47.0494],[6.43341,46.92703],[6.46456,46.88865],[6.43216,46.80336],[6.45209,46.77502],[6.38351,46.73171],[6.27135,46.68251],[6.11084,46.57649],[6.1567,46.54402],[6.07269,46.46244],[6.08427,46.44305],[6.06407,46.41676],[6.09926,46.40768],[6.15016,46.3778],[6.15985,46.37721],[6.16987,46.36759],[6.15738,46.3491],[6.13876,46.33844],[6.1198,46.31157],[6.11697,46.29547],[6.1013,46.28512],[6.11926,46.2634],[6.12446,46.25059],[6.10071,46.23772],[6.08563,46.24651],[6.07072,46.24085],[6.0633,46.24583],[6.05029,46.23518],[6.04602,46.23127],[6.03342,46.2383],[6.02461,46.23313],[5.97542,46.21525],[5.96515,46.19638],[5.99573,46.18587],[5.98846,46.17046],[5.98188,46.17392],[5.97508,46.15863],[5.9641,46.14412],[5.95781,46.12925],[5.97893,46.13303],[5.9871,46.14499],[6.01791,46.14228],[6.03614,46.13712],[6.04564,46.14031],[6.05203,46.15191],[6.07491,46.14879],[6.09199,46.15191],[6.09926,46.14373],[6.13397,46.1406],[6.15305,46.15194],[6.18116,46.16187],[6.18871,46.16644],[6.18707,46.17999],[6.19552,46.18401],[6.19807,46.18369],[6.20539,46.19163],[6.21114,46.1927],[6.21273,46.19409],[6.21603,46.19507],[6.21844,46.19837],[6.22222,46.19888],[6.22175,46.20045],[6.23544,46.20714],[6.23913,46.20511],[6.24821,46.20531],[6.26007,46.21165],[6.27694,46.21566],[6.29663,46.22688],[6.31041,46.24417],[6.29474,46.26221],[6.26749,46.24745],[6.24952,46.26255],[6.23775,46.27822],[6.25137,46.29014],[6.24826,46.30175],[6.21981,46.31304],[6.25432,46.3632],[6.53358,46.45431],[6.82312,46.42661],[6.8024,46.39171],[6.77152,46.34784],[6.86052,46.28512],[6.78968,46.14058],[6.89321,46.12548],[6.87868,46.03855],[6.93862,46.06502],[7.00946,45.9944],[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],[7.07074,45.21228],[6.96706,45.20841],[6.85144,45.13226],[6.7697,45.16044],[6.62803,45.11175],[6.66981,45.02324],[6.74791,45.01939],[6.74519,44.93661],[6.75518,44.89915],[6.90774,44.84322],[6.93499,44.8664],[7.02217,44.82519],[7.00401,44.78782],[7.07484,44.68073],[7.00582,44.69364],[6.95133,44.66264],[6.96042,44.62129],[6.85507,44.53072],[6.86233,44.49834],[6.94504,44.43112],[6.88784,44.42043],[6.89171,44.36637],[6.98221,44.28289],[7.00764,44.23736],[7.16929,44.20352],[7.27827,44.1462],[7.34547,44.14359],[7.36364,44.11882],[7.62155,44.14881],[7.63245,44.17877],[7.68694,44.17487],[7.66878,44.12795],[7.72508,44.07578],[7.6597,44.03009],[7.66848,43.99943],[7.65266,43.9763],[7.60771,43.95772],[7.56858,43.94506],[7.56075,43.89932],[7.51162,43.88301],[7.49355,43.86551],[7.50423,43.84345],[7.53006,43.78405],[7.47823,43.73341],[7.4379,43.74963],[7.4389,43.75151],[7.43708,43.75197],[7.43624,43.75014],[7.43013,43.74895],[7.42809,43.74396],[7.42443,43.74087],[7.42299,43.74176],[7.42062,43.73977],[7.41233,43.73439],[7.41298,43.73311],[7.41291,43.73168],[7.41113,43.73156],[7.40903,43.7296],[7.42422,43.72209],[7.50102,43.51859],[9.56115,43.20816],[10.09675,41.44089],[7.60802,41.05927],[3.4481,42.4358],[3.17156,42.43545],[3.11379,42.43646],[3.10027,42.42621],[3.08167,42.42748],[3.03734,42.47363],[2.96518,42.46692],[2.94283,42.48174],[2.92107,42.4573],[2.88413,42.45938],[2.86983,42.46843],[2.85675,42.45444],[2.84335,42.45724],[2.77464,42.41046],[2.75497,42.42578],[2.72056,42.42298],[2.65311,42.38771],[2.6747,42.33974],[2.57934,42.35808],[2.55516,42.35351],[2.54382,42.33406],[2.48457,42.33933],[2.43508,42.37568],[2.43299,42.39423],[2.38504,42.39977],[2.25551,42.43757],[2.20578,42.41633],[2.16599,42.42314],[2.12789,42.41291],[2.11621,42.38393],[2.06241,42.35906],[2.00488,42.35399],[1.96482,42.37787],[1.9574,42.42401],[1.94084,42.43039],[1.94061,42.43333],[1.94292,42.44316],[1.93663,42.45439],[1.88853,42.4501],[1.83037,42.48395],[1.76335,42.48863],[1.72515,42.50338],[1.73683,42.55492],[1.7858,42.57698],[1.72588,42.59098],[1.73452,42.61515],[1.68267,42.62533],[1.6625,42.61982],[1.63485,42.62957],[1.60085,42.62703],[1.55418,42.65669],[1.50867,42.64483],[1.48043,42.65203],[1.46718,42.63296],[1.47986,42.61346],[1.44197,42.60217],[1.35562,42.71944],[1.15928,42.71407],[1.0804,42.78569],[0.98292,42.78754],[0.96166,42.80629],[0.93089,42.79154],[0.711,42.86372],[0.66121,42.84021],[0.65421,42.75872],[0.67873,42.69458],[0.40214,42.69779],[0.36251,42.72282],[0.29407,42.67431],[0.25336,42.7174],[0.17569,42.73424],[-0.02468,42.68513],[-0.10519,42.72761],[-0.16141,42.79535],[-0.17939,42.78974],[-0.3122,42.84788],[-0.38833,42.80132],[-0.41319,42.80776],[-0.44334,42.79939],[-0.50863,42.82713],[-0.55497,42.77846],[-0.67637,42.88303],[-0.69837,42.87945],[-0.72608,42.89318],[-0.73422,42.91228],[-0.72037,42.92541],[-0.75478,42.96916],[-0.81652,42.95166],[-0.97133,42.96239],[-1.00963,42.99279],[-1.10333,43.0059],[-1.22881,43.05534],[-1.25244,43.04164],[-1.30531,43.06859],[-1.30052,43.09581],[-1.27118,43.11961],[-1.32209,43.1127],[-1.34419,43.09665],[-1.35272,43.02658],[-1.44067,43.047],[-1.47555,43.08372],[-1.41562,43.12815],[-1.3758,43.24511],[-1.40942,43.27272],[-1.45289,43.27049],[-1.50992,43.29481],[-1.55963,43.28828],[-1.57674,43.25269],[-1.61341,43.25269],[-1.63052,43.28591],[-1.62481,43.30726],[-1.69407,43.31378],[-1.73074,43.29481],[-1.7397,43.32979],[-1.75079,43.3317],[-1.75334,43.34107],[-1.77068,43.34396],[-1.78714,43.35476],[-1.78332,43.36399],[-1.79319,43.37497],[-1.77289,43.38957],[-1.81005,43.59738],[-6.13339,48.73907],[-2.65349,49.15373],[-2.00491,48.86706],[-1.83944,49.23037],[-2.09454,49.46288],[-2.02963,49.91866],[1.17405,50.74239],[2.18458,51.52087],[2.55904,51.07014]]]]}},{type:"Feature",properties:{iso1A2:"GA",iso1A3:"GAB",iso1N3:"266",wikidata:"Q1000",nameEn:"Gabon",groups:["017","202","002"],callingCodes:["241"]},geometry:{type:"MultiPolygon",coordinates:[[[[13.29457,2.16106],[13.13461,1.57238],[13.25447,1.32339],[13.15519,1.23368],[13.89582,1.4261],[14.25186,1.39842],[14.48179,0.9152],[14.26066,0.57255],[14.10909,0.58563],[13.88648,0.26652],[13.90632,-0.2287],[14.06862,-0.20826],[14.2165,-0.38261],[14.41887,-0.44799],[14.52569,-0.57818],[14.41838,-1.89412],[14.25932,-1.97624],[14.23518,-2.15671],[14.16202,-2.23916],[14.23829,-2.33715],[14.10442,-2.49268],[13.85846,-2.46935],[13.92073,-2.35581],[13.75884,-2.09293],[13.47977,-2.43224],[13.02759,-2.33098],[12.82172,-1.91091],[12.61312,-1.8129],[12.44656,-1.92025],[12.47925,-2.32626],[12.04895,-2.41704],[11.96866,-2.33559],[11.74605,-2.39936],[11.57637,-2.33379],[11.64487,-2.61865],[11.5359,-2.85654],[11.64798,-2.81146],[11.80365,-3.00424],[11.70558,-3.0773],[11.70227,-3.17465],[11.96554,-3.30267],[11.8318,-3.5812],[11.92719,-3.62768],[11.87083,-3.71571],[11.68608,-3.68942],[11.57949,-3.52798],[11.48764,-3.51089],[11.22301,-3.69888],[11.12647,-3.94169],[10.75913,-4.39519],[7.24416,-0.64092],[9.35563,0.84865],[9.51998,0.96418],[9.54793,1.0185],[9.62096,1.03039],[9.66092,1.05865],[9.68638,1.06836],[9.73014,1.06721],[9.76085,1.05949],[9.78058,1.03996],[9.79648,1.0019],[11.35307,1.00251],[11.3561,2.17217],[11.37116,2.29975],[13.28534,2.25716],[13.29457,2.16106]]]]}},{type:"Feature",properties:{iso1A2:"GB",iso1A3:"GBR",iso1N3:"826",wikidata:"Q145",nameEn:"United Kingdom",aliases:["UK","Britain","Great Britain"],groups:["154","150"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["44"]},geometry:{type:"MultiPolygon",coordinates:[[[[-5.83481,53.87749],[-6.26218,54.09785],[-6.29003,54.11278],[-6.32694,54.09337],[-6.36279,54.11248],[-6.36605,54.07234],[-6.47849,54.06947],[-6.62842,54.03503],[-6.66264,54.0666],[-6.6382,54.17071],[-6.70175,54.20218],[-6.74575,54.18788],[-6.81583,54.22791],[-6.85179,54.29176],[-6.87775,54.34682],[-7.02034,54.4212],[-7.19145,54.31296],[-7.14908,54.22732],[-7.25012,54.20063],[-7.26316,54.13863],[-7.29493,54.12013],[-7.29687,54.1354],[-7.28017,54.16714],[-7.29157,54.17191],[-7.34005,54.14698],[-7.30553,54.11869],[-7.32834,54.11475],[-7.44567,54.1539],[-7.4799,54.12239],[-7.55812,54.12239],[-7.69501,54.20731],[-7.81397,54.20159],[-7.8596,54.21779],[-7.87101,54.29299],[-8.04555,54.36292],[-8.179,54.46763],[-8.04538,54.48941],[-7.99812,54.54427],[-7.8596,54.53671],[-7.70315,54.62077],[-7.93293,54.66603],[-7.83352,54.73854],[-7.75041,54.7103],[-7.64449,54.75265],[-7.54671,54.74606],[-7.54508,54.79401],[-7.47626,54.83084],[-7.4473,54.87003],[-7.44404,54.9403],[-7.40004,54.94498],[-7.4033,55.00391],[-7.34464,55.04688],[-7.2471,55.06933],[-6.9734,55.19878],[-6.71944,55.27952],[-6.79943,55.54107],[-7.93366,55.84142],[-14.78497,57.60709],[-0.3751,61.32236],[2.56575,51.85301],[2.18458,51.52087],[1.17405,50.74239],[-7.74976,48.64773],[-5.79914,52.03902],[-5.37267,53.63269],[-3.64906,54.12723],[-4.1819,54.57861],[-5.83481,53.87749]]],[[[33.70575,34.97947],[33.70639,34.99303],[33.71514,35.00294],[33.69731,35.01754],[33.69938,35.03123],[33.67678,35.03866],[33.67742,35.05963],[33.68474,35.06602],[33.69095,35.06237],[33.70861,35.07644],[33.7161,35.07279],[33.70209,35.04882],[33.71482,35.03722],[33.73824,35.05321],[33.76106,35.04253],[33.78581,35.05104],[33.82067,35.07826],[33.84168,35.06823],[33.8541,35.07201],[33.87479,35.08881],[33.87097,35.09389],[33.87622,35.10457],[33.87224,35.12293],[33.88561,35.12449],[33.88943,35.12007],[33.88737,35.11408],[33.89853,35.11377],[33.91789,35.08688],[33.91299,35.07579],[33.90247,35.07686],[33.89485,35.06873],[33.88367,35.07877],[33.85261,35.0574],[33.8355,35.05777],[33.82051,35.0667],[33.8012,35.04786],[33.81524,35.04192],[33.83055,35.02865],[33.82875,35.01685],[33.84045,35.00616],[33.85216,35.00579],[33.85891,35.001],[33.85621,34.98956],[33.83505,34.98108],[33.84811,34.97075],[33.86432,34.97592],[33.90075,34.96623],[33.98684,34.76642],[33.83531,34.73974],[33.70575,34.97947]],[[33.77312,34.9976],[33.75994,35.00113],[33.75682,34.99916],[33.76605,34.99543],[33.76738,34.99188],[33.7778,34.98981],[33.77843,34.988],[33.78149,34.98854],[33.78318,34.98699],[33.78571,34.98951],[33.78917,34.98854],[33.79191,34.98914],[33.78516,34.99582],[33.77553,34.99518],[33.77312,34.9976]],[[33.74144,35.01053],[33.7492,35.01319],[33.74983,35.02274],[33.74265,35.02329],[33.73781,35.02181],[33.7343,35.01178],[33.74144,35.01053]]],[[[32.86014,34.70585],[32.86167,34.68734],[32.9068,34.66102],[32.91398,34.67343],[32.93043,34.67091],[32.92807,34.66736],[32.93449,34.66241],[32.93693,34.67027],[32.94379,34.67111],[32.94683,34.67907],[32.95539,34.68471],[32.99135,34.68061],[32.98668,34.67268],[32.99014,34.65518],[32.97736,34.65277],[32.97079,34.66112],[32.95325,34.66462],[32.94796,34.6587],[32.94976,34.65204],[32.95471,34.64528],[32.95323,34.64075],[32.95891,34.62919],[32.96718,34.63446],[32.96968,34.64046],[33.0138,34.64424],[33.26744,34.49942],[32.74412,34.43926],[32.75515,34.64985],[32.76136,34.68318],[32.79433,34.67883],[32.82717,34.70622],[32.86014,34.70585]]]]}},{type:"Feature",properties:{iso1A2:"GD",iso1A3:"GRD",iso1N3:"308",wikidata:"Q769",nameEn:"Grenada",aliases:["WG"],groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 473"]},geometry:{type:"MultiPolygon",coordinates:[[[[-62.14806,11.87638],[-61.73897,12.61191],[-61.38256,12.52991],[-61.13395,12.51526],[-61.57265,11.65795],[-62.14806,11.87638]]]]}},{type:"Feature",properties:{iso1A2:"GE",iso1A3:"GEO",iso1N3:"268",wikidata:"Q230",nameEn:"Georgia",groups:["145","142"],callingCodes:["995"]},geometry:{type:"MultiPolygon",coordinates:[[[[46.42738,41.91323],[46.3984,41.84399],[46.30863,41.79133],[46.23962,41.75811],[46.20538,41.77205],[46.17891,41.72094],[46.19759,41.62327],[46.24429,41.59883],[46.26531,41.63339],[46.28182,41.60089],[46.3253,41.60912],[46.34039,41.5947],[46.34126,41.57454],[46.29794,41.5724],[46.33925,41.4963],[46.40307,41.48464],[46.4669,41.43331],[46.63658,41.37727],[46.72375,41.28609],[46.66148,41.20533],[46.63969,41.09515],[46.55096,41.1104],[46.48558,41.0576],[46.456,41.09984],[46.37661,41.10805],[46.27698,41.19011],[46.13221,41.19479],[45.95786,41.17956],[45.80842,41.2229],[45.69946,41.29545],[45.75705,41.35157],[45.71035,41.36208],[45.68389,41.3539],[45.45973,41.45898],[45.4006,41.42402],[45.31352,41.47168],[45.26285,41.46433],[45.1797,41.42231],[45.09867,41.34065],[45.0133,41.29747],[44.93493,41.25685],[44.81437,41.30371],[44.80053,41.25949],[44.81749,41.23488],[44.84358,41.23088],[44.89911,41.21366],[44.87887,41.20195],[44.82084,41.21513],[44.72814,41.20338],[44.61462,41.24018],[44.59322,41.1933],[44.46791,41.18204],[44.34417,41.2382],[44.34337,41.20312],[44.32139,41.2079],[44.18148,41.24644],[44.16591,41.19141],[43.84835,41.16329],[43.74717,41.1117],[43.67712,41.13398],[43.4717,41.12611],[43.44973,41.17666],[43.36118,41.2028],[43.23096,41.17536],[43.1945,41.25242],[43.13373,41.25503],[43.21707,41.30331],[43.02956,41.37891],[42.8785,41.50516],[42.84899,41.47265],[42.78995,41.50126],[42.84471,41.58912],[42.72794,41.59714],[42.59202,41.58183],[42.51772,41.43606],[42.26387,41.49346],[41.95134,41.52466],[41.81939,41.43621],[41.7124,41.47417],[41.7148,41.4932],[41.54366,41.52185],[40.89217,41.72528],[39.81147,43.06294],[40.0078,43.38551],[40.00853,43.40578],[40.01552,43.42025],[40.01007,43.42411],[40.03312,43.44262],[40.04445,43.47776],[40.10657,43.57344],[40.65957,43.56212],[41.64935,43.22331],[42.40563,43.23226],[42.66667,43.13917],[42.75889,43.19651],[43.03322,43.08883],[43.0419,43.02413],[43.81453,42.74297],[43.73119,42.62043],[43.95517,42.55396],[44.54202,42.75699],[44.70002,42.74679],[44.80941,42.61277],[44.88754,42.74934],[45.15318,42.70598],[45.36501,42.55268],[45.78692,42.48358],[45.61676,42.20768],[46.42738,41.91323]]]]}},{type:"Feature",properties:{iso1A2:"GF",iso1A3:"GUF",iso1N3:"254",wikidata:"Q3769",nameEn:"French Guiana",country:"FR",groups:["EU","005","419","019"],callingCodes:["594"]},geometry:{type:"MultiPolygon",coordinates:[[[[-51.35485,4.8383],[-51.63798,4.51394],[-51.61983,4.14596],[-51.79599,3.89336],[-51.82312,3.85825],[-51.85573,3.83427],[-52.31787,3.17896],[-52.6906,2.37298],[-52.96539,2.1881],[-53.78743,2.34412],[-54.16286,2.10779],[-54.6084,2.32856],[-54.42864,2.42442],[-54.28534,2.67798],[-53.9849,3.58697],[-53.98914,3.627],[-54.05128,3.63557],[-54.19367,3.84387],[-54.38444,4.13222],[-54.4717,4.91964],[-54.26916,5.26909],[-54.01877,5.52789],[-54.01074,5.68785],[-53.7094,6.2264],[-51.35485,4.8383]]]]}},{type:"Feature",properties:{iso1A2:"GG",iso1A3:"GGY",iso1N3:"831",wikidata:"Q25230",nameEn:"Guernsey",country:"GB",groups:["830","154","150"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["44 01481"]},geometry:{type:"MultiPolygon",coordinates:[[[[-2.65349,49.15373],[-3.28154,49.57329],[-2.02963,49.91866],[-2.09454,49.46288],[-2.36485,49.48223],[-2.65349,49.15373]]]]}},{type:"Feature",properties:{iso1A2:"GH",iso1A3:"GHA",iso1N3:"288",wikidata:"Q117",nameEn:"Ghana",groups:["011","202","002"],callingCodes:["233"]},geometry:{type:"MultiPolygon",coordinates:[[[[-0.13493,11.14075],[-0.14462,11.10811],[-0.05733,11.08628],[-0.0275,11.11202],[-0.00514,11.10763],[0.00342,11.08317],[0.02395,11.06229],[0.03355,10.9807],[-0.0063,10.96417],[-0.00908,10.91644],[-0.02685,10.8783],[-0.0228,10.81916],[-0.07183,10.76794],[-0.07327,10.71845],[-0.09141,10.7147],[-0.05945,10.63458],[0.12886,10.53149],[0.18846,10.4096],[0.29453,10.41546],[0.33028,10.30408],[0.39584,10.31112],[0.35293,10.09412],[0.41371,10.06361],[0.41252,10.02018],[0.36366,10.03309],[0.32075,9.72781],[0.34816,9.71607],[0.34816,9.66907],[0.32313,9.6491],[0.28261,9.69022],[0.26712,9.66437],[0.29334,9.59387],[0.36008,9.6256],[0.38153,9.58682],[0.23851,9.57389],[0.2409,9.52335],[0.30406,9.521],[0.31241,9.50337],[0.2254,9.47869],[0.25758,9.42696],[0.33148,9.44812],[0.36485,9.49749],[0.49118,9.48339],[0.56388,9.40697],[0.45424,9.04581],[0.52455,8.87746],[0.37319,8.75262],[0.47211,8.59945],[0.64731,8.48866],[0.73432,8.29529],[0.63897,8.25873],[0.5913,8.19622],[0.61156,8.18324],[0.6056,8.13959],[0.58891,8.12779],[0.62943,7.85751],[0.58295,7.62368],[0.51979,7.58706],[0.52455,7.45354],[0.57223,7.39326],[0.62943,7.41099],[0.65327,7.31643],[0.59606,7.01252],[0.52217,6.9723],[0.52098,6.94391],[0.56508,6.92971],[0.52853,6.82921],[0.57406,6.80348],[0.58176,6.76049],[0.6497,6.73682],[0.63659,6.63857],[0.74862,6.56517],[0.71048,6.53083],[0.89283,6.33779],[0.99652,6.33779],[1.03108,6.24064],[1.05969,6.22998],[1.09187,6.17074],[1.19966,6.17069],[1.19771,6.11522],[1.27574,5.93551],[1.07031,5.15655],[-3.34019,4.17519],[-3.10675,5.08515],[-3.11073,5.12675],[-3.063,5.13665],[-2.96554,5.10397],[-2.95261,5.12477],[-2.75502,5.10657],[-2.73074,5.1364],[-2.77625,5.34621],[-2.72737,5.34789],[-2.76614,5.60963],[-2.85378,5.65156],[-2.93132,5.62137],[-2.96671,5.6415],[-2.95323,5.71865],[-3.01896,5.71697],[-3.25999,6.62521],[-3.21954,6.74407],[-3.23327,6.81744],[-2.95438,7.23737],[-2.97822,7.27165],[-2.92339,7.60847],[-2.79467,7.86002],[-2.78395,7.94974],[-2.74819,7.92613],[-2.67787,8.02055],[-2.61232,8.02645],[-2.62901,8.11495],[-2.49037,8.20872],[-2.58243,8.7789],[-2.66357,9.01771],[-2.77799,9.04949],[-2.69814,9.22717],[-2.68802,9.49343],[-2.76534,9.56589],[-2.74174,9.83172],[-2.83108,10.40252],[-2.94232,10.64281],[-2.83373,11.0067],[-0.67143,10.99811],[-0.61937,10.91305],[-0.44298,11.04292],[-0.42391,11.11661],[-0.38219,11.12596],[-0.35955,11.07801],[-0.28566,11.12713],[-0.27374,11.17157],[-0.13493,11.14075]]]]}},{type:"Feature",properties:{iso1A2:"GI",iso1A3:"GIB",iso1N3:"292",wikidata:"Q1410",nameEn:"Gibraltar",country:"GB",groups:["039","150"],callingCodes:["350"]},geometry:{type:"MultiPolygon",coordinates:[[[[-5.28217,36.09907],[-5.3004,36.07439],[-5.32837,36.05935],[-5.36503,36.06205],[-5.39074,36.10278],[-5.40134,36.14896],[-5.38545,36.15481],[-5.36494,36.15496],[-5.34536,36.15501],[-5.33822,36.15272],[-5.27801,36.14942],[-5.28217,36.09907]]]]}},{type:"Feature",properties:{iso1A2:"GL",iso1A3:"GRL",iso1N3:"304",wikidata:"Q223",nameEn:"Greenland",country:"DK",groups:["021","003","019"],callingCodes:["299"]},geometry:{type:"MultiPolygon",coordinates:[[[[-45.47832,84.58738],[-5.7106,84.28058],[-9.68082,72.73731],[-46.37635,57.3249],[-76.75614,76.72014],[-68.21821,80.48551],[-45.47832,84.58738]]]]}},{type:"Feature",properties:{iso1A2:"GM",iso1A3:"GMB",iso1N3:"270",wikidata:"Q1005",nameEn:"The Gambia",groups:["011","202","002"],callingCodes:["220"]},geometry:{type:"MultiPolygon",coordinates:[[[[-15.14917,13.57989],[-15.26908,13.37768],[-15.80478,13.34832],[-15.80355,13.16729],[-16.69343,13.16791],[-16.74676,13.06025],[-17.43966,13.04579],[-17.43598,13.59273],[-15.47902,13.58758],[-15.36504,13.79313],[-14.93719,13.80173],[-14.34721,13.46578],[-13.8955,13.59126],[-13.79409,13.34472],[-14.36795,13.23033],[-15.14917,13.57989]]]]}},{type:"Feature",properties:{iso1A2:"GN",iso1A3:"GIN",iso1N3:"324",wikidata:"Q1006",nameEn:"Guinea",groups:["011","202","002"],callingCodes:["224"]},geometry:{type:"MultiPolygon",coordinates:[[[[-11.37536,12.40788],[-11.50006,12.17826],[-11.24136,12.01286],[-10.99758,12.24634],[-10.80355,12.1053],[-10.71897,11.91552],[-10.30604,12.24634],[-9.714,12.0226],[-9.63938,12.18312],[-9.32097,12.29009],[-9.38067,12.48446],[-9.13689,12.50875],[-8.94784,12.34842],[-8.80854,11.66715],[-8.40058,11.37466],[-8.66923,10.99397],[-8.35083,11.06234],[-8.2667,10.91762],[-8.32614,10.69273],[-8.22711,10.41722],[-8.10207,10.44649],[-7.9578,10.2703],[-7.97971,10.17117],[-8.01225,10.1021],[-8.11921,10.04577],[-8.15652,9.94288],[-8.09434,9.86936],[-8.14657,9.55062],[-8.03463,9.39604],[-7.85056,9.41812],[-7.90777,9.20456],[-7.73862,9.08422],[-7.92518,8.99332],[-7.95503,8.81146],[-7.69882,8.66148],[-7.65653,8.36873],[-7.92518,8.50652],[-8.22991,8.48438],[-8.2411,8.24196],[-8.062,8.16071],[-7.98675,8.20134],[-7.99919,8.11023],[-7.94695,8.00925],[-8.06449,8.04989],[-8.13414,7.87991],[-8.09931,7.78626],[-8.21374,7.54466],[-8.4003,7.6285],[-8.47114,7.55676],[-8.55874,7.62525],[-8.55874,7.70167],[-8.67814,7.69428],[-8.72789,7.51429],[-8.8448,7.35149],[-8.85724,7.26019],[-8.93435,7.2824],[-9.09107,7.1985],[-9.18311,7.30461],[-9.20798,7.38109],[-9.305,7.42056],[-9.41943,7.41809],[-9.48161,7.37122],[-9.37465,7.62032],[-9.35724,7.74111],[-9.44928,7.9284],[-9.41445,8.02448],[-9.50898,8.18455],[-9.47415,8.35195],[-9.77763,8.54633],[-10.05873,8.42578],[-10.05375,8.50697],[-10.14579,8.52665],[-10.203,8.47991],[-10.27575,8.48711],[-10.37257,8.48941],[-10.54891,8.31174],[-10.63934,8.35326],[-10.70565,8.29235],[-10.61422,8.5314],[-10.47707,8.67669],[-10.56197,8.81225],[-10.5783,9.06386],[-10.74484,9.07998],[-10.6534,9.29919],[-11.2118,10.00098],[-11.89624,9.99763],[-11.91023,9.93927],[-12.12634,9.87203],[-12.24262,9.92386],[-12.47254,9.86834],[-12.76788,9.3133],[-12.94095,9.26335],[-13.08953,9.0409],[-13.18586,9.0925],[-13.29911,9.04245],[-14.36218,8.64107],[-15.96748,10.162],[-15.07174,10.89557],[-14.95993,10.99244],[-14.77786,11.36323],[-14.66677,11.51188],[-14.51173,11.49708],[-14.31513,11.60713],[-14.26623,11.67486],[-14.09799,11.63649],[-13.7039,11.70195],[-13.7039,12.00869],[-13.94589,12.16869],[-13.92745,12.24077],[-13.70851,12.24978],[-13.64168,12.42764],[-13.65089,12.49515],[-13.7039,12.60313],[-13.70523,12.68013],[-13.05296,12.64003],[-13.06603,12.49342],[-12.87336,12.51892],[-12.35415,12.32758],[-11.91331,12.42008],[-11.46267,12.44559],[-11.37536,12.40788]]]]}},{type:"Feature",properties:{iso1A2:"GP",iso1A3:"GLP",iso1N3:"312",wikidata:"Q17012",nameEn:"Guadeloupe",country:"FR",groups:["EU","029","003","419","019"],callingCodes:["590"]},geometry:{type:"MultiPolygon",coordinates:[[[[-60.95725,15.70997],[-61.44899,15.79571],[-61.81728,15.58058],[-62.17275,16.35721],[-61.83929,16.66647],[-61.44461,16.81958],[-60.71337,16.48911],[-60.95725,15.70997]]]]}},{type:"Feature",properties:{iso1A2:"GQ",iso1A3:"GNQ",iso1N3:"226",wikidata:"Q983",nameEn:"Equatorial Guinea",groups:["017","202","002"],callingCodes:["240"]},geometry:{type:"MultiPolygon",coordinates:[[[[9.22018,3.72052],[9.81162,2.33797],[9.82123,2.35097],[9.83754,2.32428],[9.83238,2.29079],[9.84716,2.24676],[9.89012,2.20457],[9.90749,2.20049],[9.991,2.16561],[11.3561,2.17217],[11.35307,1.00251],[9.79648,1.0019],[9.78058,1.03996],[9.76085,1.05949],[9.73014,1.06721],[9.68638,1.06836],[9.66092,1.05865],[9.62096,1.03039],[9.54793,1.0185],[9.51998,0.96418],[9.35563,0.84865],[7.24416,-0.64092],[5.3459,-2.30107],[5.38965,-1.19244],[6.69416,-0.53945],[8.0168,1.79377],[8.05799,3.48284],[8.34397,4.30689],[9.22018,3.72052]]]]}},{type:"Feature",properties:{iso1A2:"GR",iso1A3:"GRC",iso1N3:"300",wikidata:"Q41",nameEn:"Greece",aliases:["EL"],groups:["EU","039","150"],callingCodes:["30"]},geometry:{type:"MultiPolygon",coordinates:[[[[26.03489,40.73051],[25.94795,40.72797],[26.04292,40.3958],[25.61285,40.17161],[25.94257,39.39358],[26.43357,39.43096],[26.70773,39.0312],[26.61814,38.81372],[26.21136,38.65436],[26.32173,38.48731],[26.24183,38.44695],[26.21136,38.17558],[27.05537,37.9131],[27.16428,37.72343],[26.99377,37.69034],[26.95583,37.64989],[27.14757,37.32],[27.20312,36.94571],[27.45627,36.9008],[27.24613,36.71622],[27.46117,36.53789],[27.89482,36.69898],[27.95037,36.46155],[28.23708,36.56812],[29.30783,36.01033],[29.48192,36.18377],[29.61002,36.1731],[29.61805,36.14179],[29.69611,36.10365],[29.73302,35.92555],[22.5213,33.45682],[19.20409,39.7532],[19.0384,40.35325],[19.95905,39.82857],[19.97622,39.78684],[19.92466,39.69533],[19.98042,39.6504],[20.00957,39.69227],[20.05189,39.69112],[20.12956,39.65805],[20.15988,39.652],[20.22376,39.64532],[20.22707,39.67459],[20.27412,39.69884],[20.31961,39.72799],[20.29152,39.80421],[20.30804,39.81563],[20.38572,39.78516],[20.41475,39.81437],[20.41546,39.82832],[20.31135,39.99438],[20.37911,39.99058],[20.42373,40.06777],[20.48487,40.06271],[20.51297,40.08168],[20.55593,40.06524],[20.61081,40.07866],[20.62566,40.0897],[20.67162,40.09433],[20.71789,40.27739],[20.78234,40.35803],[20.7906,40.42726],[20.83688,40.47882],[20.94925,40.46625],[20.96908,40.51526],[21.03932,40.56299],[21.05833,40.66586],[20.98134,40.76046],[20.95752,40.76982],[20.98396,40.79109],[20.97887,40.85475],[21.15262,40.85546],[21.21105,40.8855],[21.25779,40.86165],[21.35595,40.87578],[21.41555,40.9173],[21.53007,40.90759],[21.57448,40.86076],[21.69601,40.9429],[21.7556,40.92525],[21.91102,41.04786],[21.90869,41.09191],[22.06527,41.15617],[22.1424,41.12449],[22.17629,41.15969],[22.26744,41.16409],[22.42285,41.11921],[22.5549,41.13065],[22.58295,41.11568],[22.62852,41.14385],[22.65306,41.18168],[22.71266,41.13945],[22.74538,41.16321],[22.76408,41.32225],[22.81199,41.3398],[22.93334,41.34104],[23.1833,41.31755],[23.21953,41.33773],[23.22771,41.37106],[23.31301,41.40525],[23.33639,41.36317],[23.40416,41.39999],[23.52453,41.40262],[23.63203,41.37632],[23.67644,41.41139],[23.76525,41.40175],[23.80148,41.43943],[23.89613,41.45257],[23.91483,41.47971],[23.96975,41.44118],[24.06908,41.46132],[24.06323,41.53222],[24.10063,41.54796],[24.18126,41.51735],[24.27124,41.57682],[24.30513,41.51297],[24.52599,41.56808],[24.61129,41.42278],[24.71529,41.41928],[24.8041,41.34913],[24.82514,41.4035],[24.86136,41.39298],[24.90928,41.40876],[24.942,41.38685],[25.11611,41.34212],[25.28322,41.23411],[25.48187,41.28506],[25.52394,41.2798],[25.55082,41.31667],[25.61042,41.30614],[25.66183,41.31316],[25.70507,41.29209],[25.8266,41.34563],[25.87919,41.30526],[26.12926,41.35878],[26.16548,41.42278],[26.20288,41.43943],[26.14796,41.47533],[26.176,41.50072],[26.17951,41.55409],[26.14328,41.55496],[26.15146,41.60828],[26.07083,41.64584],[26.06148,41.70345],[26.16841,41.74858],[26.21325,41.73223],[26.22888,41.74139],[26.2654,41.71544],[26.30255,41.70925],[26.35957,41.71149],[26.47958,41.67037],[26.5209,41.62592],[26.59196,41.60491],[26.59742,41.48058],[26.61767,41.42281],[26.62997,41.34613],[26.5837,41.32131],[26.5209,41.33993],[26.39861,41.25053],[26.32259,41.24929],[26.31928,41.07386],[26.3606,41.02027],[26.33297,40.98388],[26.35894,40.94292],[26.32259,40.94042],[26.28623,40.93005],[26.29441,40.89119],[26.26169,40.9168],[26.20856,40.86048],[26.21351,40.83298],[26.15685,40.80709],[26.12854,40.77339],[26.12495,40.74283],[26.08638,40.73214],[26.0754,40.72772],[26.03489,40.73051]]]]}},{type:"Feature",properties:{iso1A2:"GS",iso1A3:"SGS",iso1N3:"239",wikidata:"Q35086",nameEn:"South Georgia and South Sandwich Islands",country:"GB",groups:["005","419","019"],driveSide:"left",callingCodes:["500"]},geometry:{type:"MultiPolygon",coordinates:[[[[-35.26394,-43.68272],[-22.31757,-59.85974],[-53.39656,-59.87088],[-35.26394,-43.68272]]]]}},{type:"Feature",properties:{iso1A2:"GT",iso1A3:"GTM",iso1N3:"320",wikidata:"Q774",nameEn:"Guatemala",groups:["013","003","419","019"],callingCodes:["502"]},geometry:{type:"MultiPolygon",coordinates:[[[[-89.14985,17.81563],[-89.15025,17.04813],[-89.22683,15.88619],[-89.17418,15.90898],[-89.02415,15.9063],[-88.95358,15.88698],[-88.40779,16.09624],[-88.20359,16.03858],[-88.22552,15.72294],[-88.24022,15.69247],[-88.31459,15.66942],[-88.32467,15.63665],[-88.97343,15.14039],[-89.15149,15.07392],[-89.18048,14.99967],[-89.15149,14.97775],[-89.23467,14.85596],[-89.13132,14.71582],[-89.15653,14.57802],[-89.23719,14.58046],[-89.35189,14.47553],[-89.34776,14.43013],[-89.39028,14.44561],[-89.57441,14.41637],[-89.58814,14.33165],[-89.50614,14.26084],[-89.52397,14.22628],[-89.61844,14.21937],[-89.70756,14.1537],[-89.75569,14.07073],[-89.73251,14.04133],[-89.76103,14.02923],[-89.81807,14.07073],[-89.88937,14.0396],[-90.10505,13.85104],[-90.11344,13.73679],[-90.55276,12.8866],[-92.37213,14.39277],[-92.2261,14.53423],[-92.1454,14.6804],[-92.18161,14.84147],[-92.1423,14.88647],[-92.1454,14.98143],[-92.0621,15.07406],[-92.20983,15.26077],[-91.73182,16.07371],[-90.44567,16.07573],[-90.40499,16.40524],[-90.61212,16.49832],[-90.69064,16.70697],[-91.04436,16.92175],[-91.43809,17.25373],[-90.99199,17.25192],[-90.98678,17.81655],[-89.14985,17.81563]]]]}},{type:"Feature",properties:{iso1A2:"GU",iso1A3:"GUM",iso1N3:"316",wikidata:"Q16635",nameEn:"Guam",country:"US",groups:["057","009"],roadSpeedUnit:"mph",callingCodes:["1 671"]},geometry:{type:"MultiPolygon",coordinates:[[[[146.25931,13.85876],[144.61642,12.82462],[143.82485,13.92273],[146.25931,13.85876]]]]}},{type:"Feature",properties:{iso1A2:"GW",iso1A3:"GNB",iso1N3:"624",wikidata:"Q1007",nameEn:"Guinea-Bissau",groups:["011","202","002"],callingCodes:["245"]},geometry:{type:"MultiPolygon",coordinates:[[[[-14.31513,11.60713],[-14.51173,11.49708],[-14.66677,11.51188],[-14.77786,11.36323],[-14.95993,10.99244],[-15.07174,10.89557],[-15.96748,10.162],[-17.4623,11.92379],[-16.70562,12.34803],[-16.38191,12.36449],[-16.20591,12.46157],[-15.67302,12.42974],[-15.17582,12.6847],[-13.70523,12.68013],[-13.7039,12.60313],[-13.65089,12.49515],[-13.64168,12.42764],[-13.70851,12.24978],[-13.92745,12.24077],[-13.94589,12.16869],[-13.7039,12.00869],[-13.7039,11.70195],[-14.09799,11.63649],[-14.26623,11.67486],[-14.31513,11.60713]]]]}},{type:"Feature",properties:{iso1A2:"GY",iso1A3:"GUY",iso1N3:"328",wikidata:"Q734",nameEn:"Guyana",groups:["005","419","019"],driveSide:"left",callingCodes:["592"]},geometry:{type:"MultiPolygon",coordinates:[[[[-56.84822,6.73257],[-57.31629,5.33714],[-57.22536,5.15605],[-57.37442,5.0208],[-57.8699,4.89394],[-58.0307,3.95513],[-57.35891,3.32121],[-56.70519,2.02964],[-56.55439,2.02003],[-56.47045,1.95135],[-56.7659,1.89509],[-57.07092,1.95304],[-57.09109,2.01854],[-57.23981,1.95808],[-57.35073,1.98327],[-57.55743,1.69605],[-57.77281,1.73344],[-57.97336,1.64566],[-58.01873,1.51966],[-58.33887,1.58014],[-58.4858,1.48399],[-58.53571,1.29154],[-58.84229,1.17749],[-58.92072,1.31293],[-59.25583,1.40559],[-59.74066,1.87596],[-59.7264,2.27497],[-59.91177,2.36759],[-59.99733,2.92312],[-59.79769,3.37162],[-59.86899,3.57089],[-59.51963,3.91951],[-59.73353,4.20399],[-59.69361,4.34069],[-59.78878,4.45637],[-60.15953,4.53456],[-60.04189,4.69801],[-59.98129,5.07097],[-60.20944,5.28754],[-60.32352,5.21299],[-60.73204,5.20931],[-61.4041,5.95304],[-61.15058,6.19558],[-61.20762,6.58174],[-61.13632,6.70922],[-60.54873,6.8631],[-60.39419,6.94847],[-60.28074,7.1162],[-60.44116,7.20817],[-60.54098,7.14804],[-60.63367,7.25061],[-60.59802,7.33194],[-60.71923,7.55817],[-60.64793,7.56877],[-60.51959,7.83373],[-60.38056,7.8302],[-60.02407,8.04557],[-59.97059,8.20791],[-59.83156,8.23261],[-59.80661,8.28906],[-59.85562,8.35213],[-59.98508,8.53046],[-59.54058,8.6862],[-56.84822,6.73257]]]]}},{type:"Feature",properties:{iso1A2:"HK",iso1A3:"HKG",iso1N3:"344",wikidata:"Q8646",nameEn:"Hong Kong",country:"CN",groups:["030","142"],driveSide:"left",callingCodes:["852"]},geometry:{type:"MultiPolygon",coordinates:[[[[113.92195,22.13873],[113.83338,22.1826],[113.81621,22.2163],[113.86771,22.42972],[114.03113,22.5065],[114.05438,22.5026],[114.05729,22.51104],[114.06272,22.51617],[114.07267,22.51855],[114.07817,22.52997],[114.08606,22.53276],[114.09048,22.53716],[114.09692,22.53435],[114.1034,22.5352],[114.11181,22.52878],[114.11656,22.53415],[114.12665,22.54003],[114.13823,22.54319],[114.1482,22.54091],[114.15123,22.55163],[114.1597,22.56041],[114.17247,22.55944],[114.18338,22.55444],[114.20655,22.55706],[114.22185,22.55343],[114.22888,22.5436],[114.25154,22.55977],[114.44998,22.55977],[114.50148,22.15017],[113.92195,22.13873]]]]}},{type:"Feature",properties:{iso1A2:"HM",iso1A3:"HMD",iso1N3:"334",wikidata:"Q131198",nameEn:"Heard Island and McDonald Islands",country:"AU",groups:["053","009"],driveSide:"left"},geometry:{type:"MultiPolygon",coordinates:[[[[71.08716,-53.87687],[72.87012,-51.48322],[75.44182,-53.99822],[71.08716,-53.87687]]]]}},{type:"Feature",properties:{iso1A2:"HN",iso1A3:"HND",iso1N3:"340",wikidata:"Q783",nameEn:"Honduras",groups:["013","003","419","019"],callingCodes:["504"]},geometry:{type:"MultiPolygon",coordinates:[[[[-83.86109,17.73736],[-81.58685,18.0025],[-82.06974,14.49418],[-83.04763,15.03256],[-83.13724,15.00002],[-83.49268,15.01158],[-83.62101,14.89448],[-83.89551,14.76697],[-84.10584,14.76353],[-84.48373,14.63249],[-84.70119,14.68078],[-84.82596,14.82212],[-84.90082,14.80489],[-85.1575,14.53934],[-85.18602,14.24929],[-85.32149,14.2562],[-85.45762,14.11304],[-85.73964,13.9698],[-85.75477,13.8499],[-86.03458,13.99181],[-86.00685,14.08474],[-86.14801,14.04317],[-86.35219,13.77157],[-86.76812,13.79605],[-86.71267,13.30348],[-86.87066,13.30641],[-86.93383,13.18677],[-86.93197,13.05313],[-87.03785,12.98682],[-87.06306,13.00892],[-87.37107,12.98646],[-87.55124,13.12523],[-87.69751,13.25228],[-87.73714,13.32715],[-87.80177,13.35689],[-87.84675,13.41078],[-87.83467,13.44655],[-87.77354,13.45767],[-87.73841,13.44169],[-87.72115,13.46083],[-87.71657,13.50577],[-87.78148,13.52906],[-87.73106,13.75443],[-87.68821,13.80829],[-87.7966,13.91353],[-88.00331,13.86948],[-88.07641,13.98447],[-88.23018,13.99915],[-88.25791,13.91108],[-88.48982,13.86458],[-88.49738,13.97224],[-88.70661,14.04317],[-88.73182,14.10919],[-88.815,14.11652],[-88.85785,14.17763],[-88.94608,14.20207],[-89.04187,14.33644],[-89.34776,14.43013],[-89.35189,14.47553],[-89.23719,14.58046],[-89.15653,14.57802],[-89.13132,14.71582],[-89.23467,14.85596],[-89.15149,14.97775],[-89.18048,14.99967],[-89.15149,15.07392],[-88.97343,15.14039],[-88.32467,15.63665],[-88.31459,15.66942],[-88.24022,15.69247],[-88.22552,15.72294],[-88.20359,16.03858],[-83.86109,17.73736]]]]}},{type:"Feature",properties:{iso1A2:"HR",iso1A3:"HRV",iso1N3:"191",wikidata:"Q224",nameEn:"Croatia",groups:["EU","039","150"],callingCodes:["385"]},geometry:{type:"MultiPolygon",coordinates:[[[[17.6444,42.88641],[17.68151,42.92725],[17.7948,42.89556],[17.80854,42.9182],[17.88201,42.83668],[18.24318,42.6112],[18.36197,42.61423],[18.43735,42.55921],[18.44307,42.51077],[18.43588,42.48556],[18.52152,42.42302],[18.54128,42.39171],[18.45131,42.21682],[16.15283,42.18525],[13.12821,44.48877],[13.05142,45.33128],[13.45644,45.59464],[13.56979,45.4895],[13.62902,45.45898],[13.67398,45.4436],[13.7785,45.46787],[13.81742,45.43729],[13.88124,45.42637],[13.90771,45.45149],[13.97309,45.45258],[13.99488,45.47551],[13.96063,45.50825],[14.00578,45.52352],[14.07116,45.48752],[14.20348,45.46896],[14.22371,45.50388],[14.24239,45.50607],[14.26611,45.48239],[14.27681,45.4902],[14.32487,45.47142],[14.36693,45.48642],[14.49769,45.54424],[14.5008,45.60852],[14.53816,45.6205],[14.57397,45.67165],[14.60977,45.66403],[14.59576,45.62812],[14.69694,45.57366],[14.68605,45.53006],[14.71718,45.53442],[14.80124,45.49515],[14.81992,45.45913],[14.90554,45.47769],[14.92266,45.52788],[15.02385,45.48533],[15.05187,45.49079],[15.16862,45.42309],[15.27758,45.46678],[15.33051,45.45258],[15.38188,45.48752],[15.30249,45.53224],[15.29837,45.5841],[15.27747,45.60504],[15.31027,45.6303],[15.34695,45.63382],[15.34214,45.64702],[15.38952,45.63682],[15.4057,45.64727],[15.34919,45.71623],[15.30872,45.69014],[15.25423,45.72275],[15.40836,45.79491],[15.47531,45.79802],[15.47325,45.8253],[15.52234,45.82195],[15.57952,45.84953],[15.64185,45.82915],[15.66662,45.84085],[15.70411,45.8465],[15.68232,45.86819],[15.68383,45.88867],[15.67967,45.90455],[15.70636,45.92116],[15.70327,46.00015],[15.71246,46.01196],[15.72977,46.04682],[15.62317,46.09103],[15.6083,46.11992],[15.59909,46.14761],[15.64904,46.19229],[15.6434,46.21396],[15.67395,46.22478],[15.75436,46.21969],[15.75479,46.20336],[15.78817,46.21719],[15.79284,46.25811],[15.97965,46.30652],[16.07616,46.3463],[16.07314,46.36458],[16.05065,46.3833],[16.05281,46.39141],[16.14859,46.40547],[16.18824,46.38282],[16.30233,46.37837],[16.30162,46.40437],[16.27329,46.41467],[16.27398,46.42875],[16.25124,46.48067],[16.23961,46.49653],[16.26759,46.50566],[16.26733,46.51505],[16.29793,46.5121],[16.37193,46.55008],[16.38771,46.53608],[16.44036,46.5171],[16.5007,46.49644],[16.52604,46.47831],[16.59527,46.47524],[16.6639,46.45203],[16.7154,46.39523],[16.8541,46.36255],[16.8903,46.28122],[17.14592,46.16697],[17.35672,45.95209],[17.56821,45.93728],[17.66545,45.84207],[17.87377,45.78522],[17.99805,45.79671],[18.08869,45.76511],[18.12439,45.78905],[18.44368,45.73972],[18.57483,45.80772],[18.6792,45.92057],[18.80211,45.87995],[18.81394,45.91329],[18.85783,45.85493],[18.90305,45.71863],[18.96691,45.66731],[18.88776,45.57253],[18.94562,45.53712],[19.07471,45.53086],[19.08364,45.48804],[18.99918,45.49333],[18.97446,45.37528],[19.10774,45.29547],[19.28208,45.23813],[19.41941,45.23475],[19.43589,45.17137],[19.19144,45.17863],[19.14063,45.12972],[19.07952,45.14668],[19.1011,45.01191],[19.05205,44.97692],[19.15573,44.95409],[19.06853,44.89915],[19.02871,44.92541],[18.98957,44.90645],[19.01994,44.85493],[18.8704,44.85097],[18.76347,44.90669],[18.76369,44.93707],[18.80661,44.93561],[18.78357,44.97741],[18.65723,45.07544],[18.47939,45.05871],[18.41896,45.11083],[18.32077,45.1021],[18.24387,45.13699],[18.1624,45.07654],[18.03121,45.12632],[18.01594,45.15163],[17.99479,45.14958],[17.97834,45.13831],[17.97336,45.12245],[17.93706,45.08016],[17.87148,45.04645],[17.84826,45.04489],[17.66571,45.13408],[17.59104,45.10816],[17.51469,45.10791],[17.47589,45.12656],[17.45615,45.12523],[17.4498,45.16119],[17.41229,45.13335],[17.33573,45.14521],[17.32092,45.16246],[17.26815,45.18444],[17.25131,45.14957],[17.24325,45.146],[17.18438,45.14764],[17.0415,45.20759],[16.9385,45.22742],[16.92405,45.27607],[16.83804,45.18951],[16.81137,45.18434],[16.78219,45.19002],[16.74845,45.20393],[16.64962,45.20714],[16.60194,45.23042],[16.56559,45.22307],[16.5501,45.2212],[16.52982,45.22713],[16.49155,45.21153],[16.4634,45.14522],[16.40023,45.1147],[16.38309,45.05955],[16.38219,45.05139],[16.3749,45.05206],[16.35863,45.03529],[16.35404,45.00241],[16.29036,44.99732],[16.12153,45.09616],[15.98412,45.23088],[15.83512,45.22459],[15.76371,45.16508],[15.78842,45.11519],[15.74585,45.0638],[15.78568,44.97401],[15.74723,44.96818],[15.76096,44.87045],[15.79472,44.8455],[15.72584,44.82334],[15.8255,44.71501],[15.89348,44.74964],[16.05828,44.61538],[16.00884,44.58605],[16.03012,44.55572],[16.10566,44.52586],[16.16814,44.40679],[16.12969,44.38275],[16.21346,44.35231],[16.18688,44.27012],[16.36864,44.08263],[16.43662,44.07523],[16.43629,44.02826],[16.50528,44.0244],[16.55472,43.95326],[16.70922,43.84887],[16.75316,43.77157],[16.80736,43.76011],[17.00585,43.58037],[17.15828,43.49376],[17.24411,43.49376],[17.29699,43.44542],[17.25579,43.40353],[17.286,43.33065],[17.46986,43.16559],[17.64268,43.08595],[17.70879,42.97223],[17.5392,42.92787],[17.6444,42.88641]]]]}},{type:"Feature",properties:{iso1A2:"HT",iso1A3:"HTI",iso1N3:"332",wikidata:"Q790",nameEn:"Haiti",aliases:["RH"],groups:["029","003","419","019"],callingCodes:["509"]},geometry:{type:"MultiPolygon",coordinates:[[[[-71.71885,18.78423],[-71.82556,18.62551],[-71.95412,18.64939],[-72.00201,18.62312],[-71.88102,18.50125],[-71.90875,18.45821],[-71.69952,18.34101],[-71.78271,18.18302],[-71.75465,18.14405],[-71.74994,18.11115],[-71.73783,18.07177],[-71.75671,18.03456],[-72.29523,17.48026],[-74.76465,18.06252],[-74.7289,18.71009],[-73.37289,20.43199],[-72.38946,20.27111],[-71.77419,19.73128],[-71.75865,19.70231],[-71.7429,19.58445],[-71.71449,19.55364],[-71.71268,19.53374],[-71.6802,19.45008],[-71.69448,19.37866],[-71.77766,19.33823],[-71.73229,19.26686],[-71.62642,19.21212],[-71.65337,19.11759],[-71.69938,19.10916],[-71.71088,19.08353],[-71.74088,19.0437],[-71.88102,18.95007],[-71.77766,18.95007],[-71.72624,18.87802],[-71.71885,18.78423]]]]}},{type:"Feature",properties:{iso1A2:"HU",iso1A3:"HUN",iso1N3:"348",wikidata:"Q28",nameEn:"Hungary",groups:["EU","151","150"],callingCodes:["36"]},geometry:{type:"MultiPolygon",coordinates:[[[[21.72525,48.34628],[21.8279,48.33321],[21.83339,48.36242],[22.14689,48.4005],[22.2083,48.42534],[22.38133,48.23726],[22.49806,48.25189],[22.59007,48.15121],[22.58733,48.10813],[22.66835,48.09162],[22.73427,48.12005],[22.81804,48.11363],[22.87847,48.04665],[22.84276,47.98602],[22.89849,47.95851],[22.77991,47.87211],[22.76617,47.8417],[22.67247,47.7871],[22.46559,47.76583],[22.41979,47.7391],[22.31816,47.76126],[22.00917,47.50492],[22.03389,47.42508],[22.01055,47.37767],[21.94463,47.38046],[21.78395,47.11104],[21.648,47.03902],[21.68645,46.99595],[21.59581,46.91628],[21.59307,46.86935],[21.52028,46.84118],[21.48935,46.7577],[21.5151,46.72147],[21.43926,46.65109],[21.33214,46.63035],[21.26929,46.4993],[21.28061,46.44941],[21.16872,46.30118],[21.06572,46.24897],[20.86797,46.28884],[20.74574,46.25467],[20.76085,46.21002],[20.63863,46.12728],[20.49718,46.18721],[20.45377,46.14405],[20.35573,46.16629],[20.28324,46.1438],[20.26068,46.12332],[20.09713,46.17315],[20.03533,46.14509],[20.01816,46.17696],[19.93508,46.17553],[19.81491,46.1313],[19.66007,46.19005],[19.56113,46.16824],[19.52473,46.1171],[19.28826,45.99694],[19.14543,45.9998],[19.10388,46.04015],[19.0791,45.96458],[19.01284,45.96529],[18.99712,45.93537],[18.81394,45.91329],[18.80211,45.87995],[18.6792,45.92057],[18.57483,45.80772],[18.44368,45.73972],[18.12439,45.78905],[18.08869,45.76511],[17.99805,45.79671],[17.87377,45.78522],[17.66545,45.84207],[17.56821,45.93728],[17.35672,45.95209],[17.14592,46.16697],[16.8903,46.28122],[16.8541,46.36255],[16.7154,46.39523],[16.6639,46.45203],[16.59527,46.47524],[16.52604,46.5051],[16.52885,46.53303],[16.50139,46.56684],[16.39217,46.63673],[16.38594,46.6549],[16.41863,46.66238],[16.42641,46.69228],[16.37816,46.69975],[16.30966,46.7787],[16.31303,46.79838],[16.3408,46.80641],[16.34547,46.83836],[16.2941,46.87137],[16.2365,46.87775],[16.21892,46.86961],[16.15711,46.85434],[16.14365,46.8547],[16.10983,46.867],[16.19904,46.94134],[16.22403,46.939],[16.27594,46.9643],[16.28202,47.00159],[16.51369,47.00084],[16.43936,47.03548],[16.52176,47.05747],[16.46134,47.09395],[16.52863,47.13974],[16.44932,47.14418],[16.46442,47.16845],[16.4523,47.18812],[16.42801,47.18422],[16.41739,47.20649],[16.43663,47.21127],[16.44142,47.25079],[16.47782,47.25918],[16.45104,47.41181],[16.49908,47.39416],[16.52414,47.41007],[16.57152,47.40868],[16.6718,47.46139],[16.64821,47.50155],[16.71059,47.52692],[16.64193,47.63114],[16.58699,47.61772],[16.4222,47.66537],[16.55129,47.72268],[16.53514,47.73837],[16.54779,47.75074],[16.61183,47.76171],[16.65679,47.74197],[16.72089,47.73469],[16.7511,47.67878],[16.82938,47.68432],[16.86509,47.72268],[16.87538,47.68895],[17.08893,47.70928],[17.05048,47.79377],[17.07039,47.81129],[17.00997,47.86245],[17.08275,47.87719],[17.11022,47.92461],[17.09786,47.97336],[17.16001,48.00636],[17.23699,48.02094],[17.71215,47.7548],[18.02938,47.75665],[18.29305,47.73541],[18.56496,47.76588],[18.66521,47.76772],[18.74074,47.8157],[18.8506,47.82308],[18.76821,47.87469],[18.76134,47.97499],[18.82176,48.04206],[19.01952,48.07052],[19.23924,48.0595],[19.28182,48.08336],[19.47957,48.09437],[19.52489,48.19791],[19.63338,48.25006],[19.92452,48.1283],[20.24312,48.2784],[20.29943,48.26104],[20.5215,48.53336],[20.83248,48.5824],[21.11516,48.49546],[21.44063,48.58456],[21.6068,48.50365],[21.67134,48.3989],[21.72525,48.34628]]]]}},{type:"Feature",properties:{iso1A2:"IC",wikidata:"Q5813",nameEn:"Canary Islands",country:"ES",groups:["EU","039","150"],isoStatus:"excRes",callingCodes:["34"]},geometry:{type:"MultiPolygon",coordinates:[[[[-15.92339,29.50503],[-9.94494,32.97138],[-14.43883,27.02969],[-25.3475,27.87574],[-15.92339,29.50503]]]]}},{type:"Feature",properties:{iso1A2:"ID",iso1A3:"IDN",iso1N3:"360",wikidata:"Q252",nameEn:"Indonesia",aliases:["RI"],groups:["035","142"],driveSide:"left",callingCodes:["62"]},geometry:{type:"MultiPolygon",coordinates:[[[[141.02352,0.08993],[140.99813,-6.3233],[140.85295,-6.72996],[141.01763,-6.90181],[141.00782,-9.1242],[140.88922,-9.34945],[127.55165,-9.05052],[127.42116,-8.22471],[125.87691,-8.31789],[125.65946,-8.06136],[125.31127,-8.22976],[124.92337,-8.75859],[124.33472,-9.11416],[124.04628,-9.22671],[124.04286,-9.34243],[124.10539,-9.41206],[124.14517,-9.42324],[124.21247,-9.36904],[124.28115,-9.42189],[124.28115,-9.50453],[124.3535,-9.48493],[124.35258,-9.43002],[124.38554,-9.3582],[124.45971,-9.30263],[124.46701,-9.13002],[124.94011,-8.85617],[124.97742,-9.08128],[125.11764,-8.96359],[125.18632,-9.03142],[125.18907,-9.16434],[125.09434,-9.19669],[125.04044,-9.17093],[124.97892,-9.19281],[125.09025,-9.46406],[125.68138,-9.85176],[122.14954,-11.52517],[74.28481,-3.17525],[96.11174,6.69841],[103.03657,1.30383],[103.56591,1.19719],[103.66049,1.18825],[103.74084,1.12902],[104.03085,1.26954],[104.12282,1.27714],[104.34728,1.33529],[104.56723,1.44271],[105.01437,3.24936],[108.10426,5.42408],[109.71058,2.32059],[109.64506,2.08014],[109.62558,1.99182],[109.53794,1.91771],[109.57923,1.80624],[109.66397,1.79972],[109.66397,1.60425],[110.35354,0.98869],[110.49182,0.88088],[110.62374,0.873],[111.22979,1.08326],[111.55434,0.97864],[111.82846,0.99349],[111.94553,1.12016],[112.15679,1.17004],[112.2127,1.44135],[112.48648,1.56516],[113.021,1.57819],[113.01448,1.42832],[113.64677,1.23933],[114.03788,1.44787],[114.57892,1.5],[114.80706,1.92351],[114.80706,2.21665],[115.1721,2.49671],[115.11343,2.82879],[115.53713,3.14776],[115.58276,3.93499],[115.90217,4.37708],[117.25801,4.35108],[117.47313,4.18857],[117.67641,4.16535],[117.89538,4.16637],[118.07935,4.15511],[118.41402,3.99509],[124.97752,4.82064],[126.69413,6.02692],[128.97621,3.08804],[141.02352,0.08993]]]]}},{type:"Feature",properties:{iso1A2:"IE",iso1A3:"IRL",iso1N3:"372",wikidata:"Q27",nameEn:"Ireland",groups:["EU","154","150"],driveSide:"left",callingCodes:["353"]},geometry:{type:"MultiPolygon",coordinates:[[[[-6.26218,54.09785],[-5.83481,53.87749],[-5.37267,53.63269],[-5.79914,52.03902],[-22.01468,48.19557],[-7.93366,55.84142],[-6.79943,55.54107],[-6.71944,55.27952],[-6.9734,55.19878],[-7.2471,55.06933],[-7.34464,55.04688],[-7.4033,55.00391],[-7.40004,54.94498],[-7.44404,54.9403],[-7.4473,54.87003],[-7.47626,54.83084],[-7.54508,54.79401],[-7.54671,54.74606],[-7.64449,54.75265],[-7.75041,54.7103],[-7.83352,54.73854],[-7.93293,54.66603],[-7.70315,54.62077],[-7.8596,54.53671],[-7.99812,54.54427],[-8.04538,54.48941],[-8.179,54.46763],[-8.04555,54.36292],[-7.87101,54.29299],[-7.8596,54.21779],[-7.81397,54.20159],[-7.69501,54.20731],[-7.55812,54.12239],[-7.4799,54.12239],[-7.44567,54.1539],[-7.32834,54.11475],[-7.30553,54.11869],[-7.34005,54.14698],[-7.29157,54.17191],[-7.28017,54.16714],[-7.29687,54.1354],[-7.29493,54.12013],[-7.26316,54.13863],[-7.25012,54.20063],[-7.14908,54.22732],[-7.19145,54.31296],[-7.02034,54.4212],[-6.87775,54.34682],[-6.85179,54.29176],[-6.81583,54.22791],[-6.74575,54.18788],[-6.70175,54.20218],[-6.6382,54.17071],[-6.66264,54.0666],[-6.62842,54.03503],[-6.47849,54.06947],[-6.36605,54.07234],[-6.36279,54.11248],[-6.32694,54.09337],[-6.29003,54.11278],[-6.26218,54.09785]]]]}},{type:"Feature",properties:{iso1A2:"IL",iso1A3:"ISR",iso1N3:"376",wikidata:"Q801",nameEn:"Israel",groups:["145","142"],callingCodes:["972"]},geometry:{type:"MultiPolygon",coordinates:[[[[34.052,31.46619],[33.62659,31.82938],[34.78515,33.20368],[35.10645,33.09318],[35.1924,33.08743],[35.31429,33.10515],[35.35223,33.05617],[35.43059,33.06659],[35.448,33.09264],[35.50272,33.09056],[35.50335,33.114],[35.52573,33.11921],[35.54228,33.19865],[35.5362,33.23196],[35.54808,33.236],[35.54544,33.25513],[35.55555,33.25844],[35.56523,33.28969],[35.58326,33.28381],[35.58502,33.26653],[35.62283,33.24226],[35.62019,33.27278],[35.77477,33.33609],[35.813,33.3172],[35.77513,33.27342],[35.81295,33.24841],[35.81647,33.2028],[35.83846,33.19397],[35.84285,33.16673],[35.81911,33.1336],[35.81911,33.11077],[35.84802,33.1031],[35.87188,32.98028],[35.89298,32.9456],[35.87012,32.91976],[35.84021,32.8725],[35.83758,32.82817],[35.78745,32.77938],[35.75983,32.74803],[35.68467,32.70715],[35.66527,32.681],[35.61669,32.67999],[35.59813,32.65159],[35.56614,32.64393],[35.57485,32.48669],[35.55494,32.42687],[35.55807,32.38674],[35.42078,32.41562],[35.41048,32.43706],[35.41598,32.45593],[35.42034,32.46009],[35.40224,32.50136],[35.35212,32.52047],[35.30685,32.51024],[35.29306,32.50947],[35.25049,32.52453],[35.2244,32.55289],[35.15937,32.50466],[35.10882,32.4757],[35.10024,32.47856],[35.09236,32.47614],[35.08564,32.46948],[35.07059,32.4585],[35.05423,32.41754],[35.05311,32.4024],[35.0421,32.38242],[35.05142,32.3667],[35.04243,32.35008],[35.01772,32.33863],[35.01119,32.28684],[35.02939,32.2671],[35.01841,32.23981],[34.98885,32.20758],[34.95703,32.19522],[34.96009,32.17503],[34.99039,32.14626],[34.98507,32.12606],[34.99437,32.10962],[34.9863,32.09551],[35.00261,32.027],[34.98682,31.96935],[35.00124,31.93264],[35.03489,31.92448],[35.03978,31.89276],[35.03489,31.85919],[34.99712,31.85569],[34.9724,31.83352],[35.01978,31.82944],[35.05617,31.85685],[35.07677,31.85627],[35.14174,31.81325],[35.18603,31.80901],[35.18169,31.82542],[35.19461,31.82687],[35.21469,31.81835],[35.216,31.83894],[35.21128,31.863],[35.20381,31.86716],[35.20673,31.88151],[35.20791,31.8821],[35.20945,31.8815],[35.21016,31.88237],[35.21276,31.88153],[35.2136,31.88241],[35.22014,31.88264],[35.22294,31.87889],[35.22567,31.86745],[35.22817,31.8638],[35.2249,31.85433],[35.2304,31.84222],[35.24816,31.8458],[35.25753,31.8387],[35.251,31.83085],[35.26404,31.82567],[35.25573,31.81362],[35.26058,31.79064],[35.25225,31.7678],[35.26319,31.74846],[35.25182,31.73945],[35.24981,31.72543],[35.2438,31.7201],[35.24315,31.71244],[35.23972,31.70896],[35.22392,31.71899],[35.21937,31.71578],[35.20538,31.72388],[35.18023,31.72067],[35.16478,31.73242],[35.15474,31.73352],[35.15119,31.73634],[35.13931,31.73012],[35.12933,31.7325],[35.11895,31.71454],[35.10782,31.71594],[35.08226,31.69107],[35.00879,31.65426],[34.95249,31.59813],[34.9415,31.55601],[34.94356,31.50743],[34.93258,31.47816],[34.89756,31.43891],[34.87833,31.39321],[34.88932,31.37093],[34.92571,31.34337],[35.02459,31.35979],[35.13033,31.3551],[35.22921,31.37445],[35.39675,31.49572],[35.47672,31.49578],[35.40316,31.25535],[35.43658,31.12444],[35.41371,30.95565],[35.33984,30.8802],[35.33456,30.81224],[35.29311,30.71365],[35.21379,30.60401],[35.19595,30.50297],[35.16218,30.43535],[35.19183,30.34636],[35.14108,30.07374],[35.02147,29.66343],[34.98207,29.58147],[34.97718,29.54294],[34.92298,29.45305],[34.26742,31.21998],[34.29417,31.24194],[34.36523,31.28963],[34.37381,31.30598],[34.36505,31.36404],[34.40077,31.40926],[34.48892,31.48365],[34.56797,31.54197],[34.48681,31.59711],[34.29262,31.70393],[34.052,31.46619]]]]}},{type:"Feature",properties:{iso1A2:"IM",iso1A3:"IMN",iso1N3:"833",wikidata:"Q9676",nameEn:"Isle of Man",country:"GB",groups:["154","150"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["44 01624","44 07624","44 07524","44 07924"]},geometry:{type:"MultiPolygon",coordinates:[[[[-3.64906,54.12723],[-5.37267,53.63269],[-5.83481,53.87749],[-4.1819,54.57861],[-3.64906,54.12723]]]]}},{type:"Feature",properties:{iso1A2:"IN",iso1A3:"IND",iso1N3:"356",wikidata:"Q668",nameEn:"India",groups:["034","142"],driveSide:"left",callingCodes:["91"]},geometry:{type:"MultiPolygon",coordinates:[[[[78.11664,35.48022],[78.03466,35.3785],[78.00033,35.23954],[78.22692,34.88771],[78.18435,34.7998],[78.27781,34.61484],[78.54964,34.57283],[78.56475,34.50835],[78.74465,34.45174],[79.05364,34.32482],[78.99802,34.3027],[78.91769,34.15452],[78.66225,34.08858],[78.65657,34.03195],[78.73367,34.01121],[78.77349,33.73871],[78.67599,33.66445],[78.73636,33.56521],[79.15252,33.17156],[79.14016,33.02545],[79.46562,32.69668],[79.26768,32.53277],[79.13174,32.47766],[79.0979,32.38051],[78.99322,32.37948],[78.96713,32.33655],[78.7831,32.46873],[78.73916,32.69438],[78.38897,32.53938],[78.4645,32.45367],[78.49609,32.2762],[78.68754,32.10256],[78.74404,32.00384],[78.78036,31.99478],[78.69933,31.78723],[78.84516,31.60631],[78.71032,31.50197],[78.77898,31.31209],[79.01931,31.42817],[79.14016,31.43403],[79.22805,31.34963],[79.59884,30.93943],[79.93255,30.88288],[80.20721,30.58541],[80.54504,30.44936],[80.83343,30.32023],[81.03953,30.20059],[80.93695,30.18229],[80.8778,30.13384],[80.67076,29.95732],[80.60226,29.95732],[80.56957,29.88176],[80.56247,29.86661],[80.48997,29.79566],[80.43458,29.80466],[80.41554,29.79451],[80.36803,29.73865],[80.38428,29.68513],[80.41858,29.63581],[80.37939,29.57098],[80.24322,29.44299],[80.31428,29.30784],[80.28626,29.20327],[80.24112,29.21414],[80.26602,29.13938],[80.23178,29.11626],[80.18085,29.13649],[80.05743,28.91479],[80.06957,28.82763],[80.12125,28.82346],[80.37188,28.63371],[80.44504,28.63098],[80.52443,28.54897],[80.50575,28.6706],[80.55142,28.69182],[80.89648,28.47237],[81.08507,28.38346],[81.19847,28.36284],[81.32923,28.13521],[81.38683,28.17638],[81.48179,28.12148],[81.47867,28.08303],[81.91223,27.84995],[81.97214,27.93322],[82.06554,27.92222],[82.46405,27.6716],[82.70378,27.72122],[82.74119,27.49838],[82.93261,27.50328],[82.94938,27.46036],[83.19413,27.45632],[83.27197,27.38309],[83.2673,27.36235],[83.29999,27.32778],[83.35136,27.33885],[83.38872,27.39276],[83.39495,27.4798],[83.61288,27.47013],[83.85595,27.35797],[83.86182,27.4241],[83.93306,27.44939],[84.02229,27.43836],[84.10791,27.52399],[84.21376,27.45218],[84.25735,27.44941],[84.29315,27.39],[84.62161,27.33885],[84.69166,27.21294],[84.64496,27.04669],[84.793,26.9968],[84.82913,27.01989],[84.85754,26.98984],[84.96687,26.95599],[84.97186,26.9149],[85.00536,26.89523],[85.05592,26.88991],[85.02635,26.85381],[85.15883,26.86966],[85.19291,26.86909],[85.18046,26.80519],[85.21159,26.75933],[85.34302,26.74954],[85.47752,26.79292],[85.56471,26.84133],[85.5757,26.85955],[85.59461,26.85161],[85.61621,26.86721],[85.66239,26.84822],[85.73483,26.79613],[85.72315,26.67471],[85.76907,26.63076],[85.83126,26.61134],[85.85126,26.60866],[85.8492,26.56667],[86.02729,26.66756],[86.13596,26.60651],[86.22513,26.58863],[86.26235,26.61886],[86.31564,26.61925],[86.49726,26.54218],[86.54258,26.53819],[86.57073,26.49825],[86.61313,26.48658],[86.62686,26.46891],[86.69124,26.45169],[86.74025,26.42386],[86.76797,26.45892],[86.82898,26.43919],[86.94543,26.52076],[86.95912,26.52076],[87.01559,26.53228],[87.04691,26.58685],[87.0707,26.58571],[87.09147,26.45039],[87.14751,26.40542],[87.18863,26.40558],[87.24682,26.4143],[87.26587,26.40592],[87.26568,26.37294],[87.34568,26.34787],[87.37314,26.40815],[87.46566,26.44058],[87.51571,26.43106],[87.55274,26.40596],[87.59175,26.38342],[87.66803,26.40294],[87.67893,26.43501],[87.76004,26.40711],[87.7918,26.46737],[87.84193,26.43663],[87.89085,26.48565],[87.90115,26.44923],[88.00895,26.36029],[88.09414,26.43732],[88.09963,26.54195],[88.16452,26.64111],[88.1659,26.68177],[88.19107,26.75516],[88.12302,26.95324],[88.13422,26.98705],[88.11719,26.98758],[87.9887,27.11045],[88.01587,27.21388],[88.01646,27.21612],[88.07277,27.43007],[88.04008,27.49223],[88.19107,27.79285],[88.1973,27.85067],[88.13378,27.88015],[88.1278,27.95417],[88.25332,27.9478],[88.54858,28.06057],[88.63235,28.12356],[88.83559,28.01936],[88.88091,27.85192],[88.77517,27.45415],[88.82981,27.38814],[88.91901,27.32483],[88.74219,27.144],[88.86984,27.10937],[88.8714,26.97488],[88.92301,26.99286],[88.95807,26.92668],[89.09554,26.89089],[89.12825,26.81661],[89.1926,26.81329],[89.37913,26.86224],[89.38319,26.85963],[89.3901,26.84225],[89.42349,26.83727],[89.63369,26.74402],[89.86124,26.73307],[90.04535,26.72422],[90.30402,26.85098],[90.39271,26.90704],[90.48504,26.8594],[90.67715,26.77215],[91.50067,26.79223],[91.83181,26.87318],[92.05523,26.8692],[92.11863,26.893],[92.03457,27.07334],[92.04702,27.26861],[92.12019,27.27829],[92.01132,27.47352],[91.65007,27.48287],[91.55819,27.6144],[91.6469,27.76358],[91.84722,27.76325],[91.87057,27.7195],[92.27432,27.89077],[92.32101,27.79363],[92.42538,27.80092],[92.7275,27.98662],[92.73025,28.05814],[92.65472,28.07632],[92.67486,28.15018],[92.93075,28.25671],[93.14635,28.37035],[93.18069,28.50319],[93.44621,28.67189],[93.72797,28.68821],[94.35897,29.01965],[94.2752,29.11687],[94.69318,29.31739],[94.81353,29.17804],[95.0978,29.14446],[95.11291,29.09527],[95.2214,29.10727],[95.26122,29.07727],[95.3038,29.13847],[95.41091,29.13007],[95.50842,29.13487],[95.72086,29.20797],[95.75149,29.32063],[95.84899,29.31464],[96.05361,29.38167],[96.31316,29.18643],[96.18682,29.11087],[96.20467,29.02325],[96.3626,29.10607],[96.61391,28.72742],[96.40929,28.51526],[96.48895,28.42955],[96.6455,28.61657],[96.85561,28.4875],[96.88445,28.39452],[96.98882,28.32564],[97.1289,28.3619],[97.34547,28.21385],[97.31292,28.06784],[97.35412,28.06663],[97.38845,28.01329],[97.35824,27.87256],[97.29919,27.92233],[96.90112,27.62149],[96.91431,27.45752],[97.17422,27.14052],[97.14675,27.09041],[96.89132,27.17474],[96.85287,27.2065],[96.88445,27.25046],[96.73888,27.36638],[96.55761,27.29928],[96.40779,27.29818],[96.15591,27.24572],[96.04949,27.19428],[95.93002,27.04149],[95.81603,27.01335],[95.437,26.7083],[95.30339,26.65372],[95.23513,26.68499],[95.05798,26.45408],[95.12801,26.38397],[95.11428,26.1019],[95.18556,26.07338],[94.80117,25.49359],[94.68032,25.47003],[94.57458,25.20318],[94.74212,25.13606],[94.73937,25.00545],[94.60204,24.70889],[94.5526,24.70764],[94.50729,24.59281],[94.45279,24.56656],[94.32362,24.27692],[94.30215,24.23752],[94.14081,23.83333],[93.92089,23.95812],[93.80279,23.92549],[93.75952,24.0003],[93.62871,24.00922],[93.50616,23.94432],[93.46633,23.97067],[93.41415,24.07854],[93.34735,24.10151],[93.32351,24.04468],[93.36059,23.93176],[93.3908,23.92925],[93.3908,23.7622],[93.43475,23.68299],[93.38805,23.4728],[93.39981,23.38828],[93.38781,23.36139],[93.36862,23.35426],[93.38478,23.13698],[93.2878,23.00464],[93.12988,23.05772],[93.134,22.92498],[93.09417,22.69459],[93.134,22.59573],[93.11477,22.54374],[93.13537,22.45873],[93.18206,22.43716],[93.19991,22.25425],[93.14224,22.24535],[93.15734,22.18687],[93.04885,22.20595],[92.99255,22.05965],[92.99804,21.98964],[92.93899,22.02656],[92.89504,21.95143],[92.86208,22.05456],[92.70416,22.16017],[92.67532,22.03547],[92.60949,21.97638],[92.56616,22.13554],[92.60029,22.1522],[92.5181,22.71441],[92.37665,22.9435],[92.38214,23.28705],[92.26541,23.70392],[92.15417,23.73409],[92.04706,23.64229],[91.95093,23.73284],[91.95642,23.47361],[91.84789,23.42235],[91.76417,23.26619],[91.81634,23.08001],[91.7324,23.00043],[91.61571,22.93929],[91.54993,23.01051],[91.46615,23.2328],[91.4035,23.27522],[91.40848,23.07117],[91.36453,23.06612],[91.28293,23.37538],[91.15579,23.6599],[91.25192,23.83463],[91.22308,23.89616],[91.29587,24.0041],[91.35741,23.99072],[91.37414,24.10693],[91.55542,24.08687],[91.63782,24.1132],[91.65292,24.22095],[91.73257,24.14703],[91.76004,24.23848],[91.82596,24.22345],[91.89258,24.14674],[91.96603,24.3799],[92.11662,24.38997],[92.15796,24.54435],[92.25854,24.9191],[92.38626,24.86055],[92.49887,24.88796],[92.39147,25.01471],[92.33957,25.07593],[92.0316,25.1834],[91.63648,25.12846],[91.25517,25.20677],[90.87427,25.15799],[90.65042,25.17788],[90.40034,25.1534],[90.1155,25.22686],[89.90478,25.31038],[89.87629,25.28337],[89.83371,25.29548],[89.84086,25.31854],[89.81208,25.37244],[89.86129,25.61714],[89.84388,25.70042],[89.80585,25.82489],[89.86592,25.93115],[89.77728,26.04254],[89.77865,26.08387],[89.73581,26.15818],[89.70201,26.15138],[89.63968,26.22595],[89.57101,25.9682],[89.53515,26.00382],[89.35953,26.0077],[89.15869,26.13708],[89.08899,26.38845],[88.95612,26.4564],[88.92357,26.40711],[88.91321,26.37984],[89.05328,26.2469],[88.85004,26.23211],[88.78961,26.31093],[88.67837,26.26291],[88.69485,26.38353],[88.62144,26.46783],[88.4298,26.54489],[88.41196,26.63837],[88.33093,26.48929],[88.35153,26.45241],[88.36938,26.48683],[88.48749,26.45855],[88.51649,26.35923],[88.35153,26.29123],[88.34757,26.22216],[88.1844,26.14417],[88.16581,26.0238],[88.08804,25.91334],[88.13138,25.78773],[88.242,25.80811],[88.45103,25.66245],[88.4559,25.59227],[88.677,25.46959],[88.81296,25.51546],[88.85278,25.34679],[89.01105,25.30303],[89.00463,25.26583],[88.94067,25.18534],[88.44766,25.20149],[88.46277,25.07468],[88.33917,24.86803],[88.27325,24.88796],[88.21832,24.96642],[88.14004,24.93529],[88.15515,24.85806],[88.00683,24.66477],[88.08786,24.63232],[88.12296,24.51301],[88.50934,24.32474],[88.68801,24.31464],[88.74841,24.1959],[88.6976,24.14703],[88.73743,23.91751],[88.66189,23.87607],[88.58087,23.87105],[88.56507,23.64044],[88.74841,23.47361],[88.79351,23.50535],[88.79254,23.46028],[88.71133,23.2492],[88.99148,23.21134],[88.86377,23.08759],[88.88327,23.03885],[88.87063,22.95235],[88.96713,22.83346],[88.9151,22.75228],[88.94614,22.66941],[88.9367,22.58527],[89.07114,22.15335],[89.03553,21.77397],[89.13927,21.60785],[89.13606,21.42955],[92.61042,13.76986],[94.6371,13.81803],[94.53911,5.99016],[80.48418,10.20786],[79.42124,9.80115],[79.50447,8.91876],[78.52781,7.63099],[72.15131,7.6285],[68.11329,23.53945],[68.20763,23.85849],[68.39339,23.96838],[68.74643,23.97027],[68.7416,24.31904],[68.90914,24.33156],[68.97781,24.26021],[69.07806,24.29777],[69.19341,24.25646],[69.29778,24.28712],[69.59579,24.29777],[69.73335,24.17007],[70.03428,24.172],[70.11712,24.30915],[70.5667,24.43787],[70.57906,24.27774],[70.71502,24.23517],[70.88393,24.27398],[70.85784,24.30903],[70.94985,24.3791],[71.04461,24.34657],[71.12838,24.42662],[71.00341,24.46038],[70.97594,24.60904],[71.09405,24.69017],[70.94002,24.92843],[70.89148,25.15064],[70.66695,25.39314],[70.67382,25.68186],[70.60378,25.71898],[70.53649,25.68928],[70.37444,25.67443],[70.2687,25.71156],[70.0985,25.93238],[70.08193,26.08094],[70.17532,26.24118],[70.17532,26.55362],[70.05584,26.60398],[69.88555,26.56836],[69.50904,26.74892],[69.58519,27.18109],[70.03136,27.56627],[70.12502,27.8057],[70.37307,28.01208],[70.60927,28.02178],[70.79054,27.68423],[71.89921,27.96035],[71.9244,28.11555],[72.20329,28.3869],[72.29495,28.66367],[72.40402,28.78283],[72.94272,29.02487],[73.01337,29.16422],[73.05886,29.1878],[73.28094,29.56646],[73.3962,29.94707],[73.58665,30.01848],[73.80299,30.06969],[73.97225,30.19829],[73.95736,30.28466],[73.88993,30.36305],[74.5616,31.04153],[74.67971,31.05479],[74.6852,31.12771],[74.60006,31.13711],[74.60281,31.10419],[74.56023,31.08303],[74.51629,31.13829],[74.53223,31.30321],[74.59773,31.4136],[74.64713,31.45605],[74.59319,31.50197],[74.61517,31.55698],[74.57498,31.60382],[74.47771,31.72227],[74.58907,31.87824],[74.79919,31.95983],[74.86236,32.04485],[74.9269,32.0658],[75.00793,32.03786],[75.25649,32.10187],[75.38046,32.26836],[75.28259,32.36556],[75.03265,32.49538],[74.97634,32.45367],[74.84725,32.49075],[74.68362,32.49298],[74.67431,32.56676],[74.65251,32.56416],[74.64424,32.60985],[74.69542,32.66792],[74.65345,32.71225],[74.7113,32.84219],[74.64675,32.82604],[74.6289,32.75561],[74.45312,32.77755],[74.41467,32.90563],[74.31227,32.92795],[74.34875,32.97823],[74.31854,33.02891],[74.17571,33.07495],[74.15374,33.13477],[74.02144,33.18908],[74.01366,33.25199],[74.08782,33.26232],[74.17983,33.3679],[74.18121,33.4745],[74.10115,33.56392],[74.03576,33.56718],[73.97367,33.64061],[73.98968,33.66155],[73.96423,33.73071],[74.00891,33.75437],[74.05898,33.82089],[74.14001,33.83002],[74.26086,33.92237],[74.25262,34.01577],[74.21554,34.03853],[73.91341,34.01235],[73.88732,34.05105],[73.90677,34.10504],[73.98208,34.2522],[73.90517,34.35317],[73.8475,34.32935],[73.74862,34.34183],[73.74999,34.3781],[73.88732,34.48911],[73.89419,34.54568],[73.93951,34.57169],[73.93401,34.63386],[73.96423,34.68244],[74.12897,34.70073],[74.31239,34.79626],[74.58083,34.77386],[74.6663,34.703],[75.01479,34.64629],[75.38009,34.55021],[75.75438,34.51827],[76.04614,34.67566],[76.15463,34.6429],[76.47186,34.78965],[76.67648,34.76371],[76.74377,34.84039],[76.74514,34.92488],[76.87193,34.96906],[76.99251,34.93349],[77.11796,35.05419],[76.93465,35.39866],[76.85088,35.39754],[76.75475,35.52617],[76.77323,35.66062],[76.84539,35.67356],[76.96624,35.5932],[77.44277,35.46132],[77.70232,35.46244],[77.80532,35.52058],[78.11664,35.48022]]]]}},{type:"Feature",properties:{iso1A2:"IO",iso1A3:"IOT",iso1N3:"086",wikidata:"Q43448",nameEn:"British Indian Ocean Territory",country:"GB",groups:["014","202","002"],callingCodes:["246"]},geometry:{type:"MultiPolygon",coordinates:[[[[70.64754,-4.95745],[73.70488,-4.92492],[70.67958,-8.2663],[70.64754,-4.95745]]]]}},{type:"Feature",properties:{iso1A2:"IQ",iso1A3:"IRQ",iso1N3:"368",wikidata:"Q796",nameEn:"Iraq",groups:["145","142"],callingCodes:["964"]},geometry:{type:"MultiPolygon",coordinates:[[[[42.78887,37.38615],[42.93705,37.32015],[43.11403,37.37436],[43.30083,37.30629],[43.33508,37.33105],[43.50787,37.24436],[43.56702,37.25675],[43.63085,37.21957],[43.7009,37.23692],[43.8052,37.22825],[43.82699,37.19477],[43.84878,37.22205],[43.90949,37.22453],[44.02002,37.33229],[44.13521,37.32486],[44.2613,37.25055],[44.27998,37.16501],[44.22239,37.15756],[44.18503,37.09551],[44.25975,36.98119],[44.30645,36.97373],[44.35937,37.02843],[44.35315,37.04955],[44.38117,37.05825],[44.42631,37.05825],[44.63179,37.19229],[44.76698,37.16162],[44.78319,37.1431],[44.75229,37.11958],[44.81611,37.04383],[44.89862,37.01897],[44.91199,36.91468],[44.90173,36.86096],[44.83479,36.81362],[44.84725,36.77622],[45.01537,36.75128],[45.06985,36.6814],[45.06985,36.62645],[45.00759,36.5402],[45.11811,36.40751],[45.23953,36.43257],[45.27394,36.35846],[45.26261,36.3001],[45.30038,36.27769],[45.32235,36.17383],[45.37312,36.09917],[45.37652,36.06222],[45.33916,35.99424],[45.38275,35.97156],[45.46594,36.00042],[45.55245,35.99943],[45.60018,35.96069],[45.6645,35.92872],[45.76145,35.79898],[45.81442,35.82107],[45.89784,35.83708],[45.94711,35.82218],[46.08325,35.8581],[46.17198,35.8013],[46.32921,35.82655],[46.34166,35.78363],[46.23736,35.71414],[46.01631,35.69139],[46.0117,35.65059],[45.99452,35.63574],[46.0165,35.61501],[46.01307,35.59756],[46.03028,35.57416],[45.97584,35.58132],[46.01518,35.52012],[45.98453,35.49848],[46.05358,35.38568],[46.13152,35.32548],[46.15474,35.2883],[46.11367,35.23729],[46.18457,35.22561],[46.19738,35.18536],[46.16229,35.16984],[46.15642,35.1268],[46.19116,35.11097],[46.11763,35.07551],[46.07747,35.0838],[46.06508,35.03699],[45.94756,35.09188],[45.93108,35.08148],[45.92203,35.09538],[45.92173,35.0465],[45.87864,35.03441],[45.89477,34.95805],[45.86532,34.89858],[45.78904,34.91135],[45.79682,34.85133],[45.73641,34.83975],[45.70031,34.82322],[45.68284,34.76624],[45.65672,34.7222],[45.70031,34.69277],[45.73923,34.54416],[45.60224,34.55057],[45.59074,34.55558],[45.53219,34.60441],[45.51883,34.47692],[45.43879,34.45949],[45.46697,34.38221],[45.49171,34.3439],[45.53552,34.35148],[45.58667,34.30147],[45.56176,34.15088],[45.47264,34.03099],[45.41077,33.97421],[45.42789,33.9458],[45.50261,33.94968],[45.77814,33.60938],[45.89801,33.63661],[45.96183,33.55751],[45.86687,33.49263],[45.99919,33.5082],[46.20623,33.20395],[46.11905,33.11924],[46.05367,33.13097],[46.03966,33.09577],[46.15175,33.07229],[46.09103,32.98354],[46.17198,32.95612],[46.32298,32.9731],[46.46788,32.91992],[47.17218,32.45393],[47.37529,32.47808],[47.57144,32.20583],[47.52474,32.15972],[47.64771,32.07666],[47.86337,31.78422],[47.6804,31.39086],[47.68219,31.00004],[48.03221,30.9967],[48.02443,30.4789],[48.14585,30.44133],[48.18321,30.39703],[48.19425,30.32796],[48.21279,30.31644],[48.24385,30.33846],[48.26393,30.3408],[48.41117,30.19846],[48.41671,30.17254],[48.38714,30.13485],[48.38869,30.11062],[48.43384,30.08233],[48.4494,30.04456],[48.44785,30.00148],[48.51011,29.96238],[48.61441,29.93675],[48.83867,29.78572],[48.59531,29.66815],[48.40479,29.85763],[48.17332,30.02448],[48.06782,30.02906],[48.01114,29.98906],[47.7095,30.10453],[47.37192,30.10421],[47.15166,30.01044],[46.89695,29.50584],[46.5527,29.10283],[46.42415,29.05947],[44.72255,29.19736],[42.97796,30.48295],[42.97601,30.72204],[40.01521,32.05667],[39.29903,32.23259],[39.26157,32.35555],[39.04251,32.30203],[38.98762,32.47694],[39.08202,32.50304],[38.79171,33.37328],[40.64314,34.31604],[40.97676,34.39788],[41.12388,34.65742],[41.2345,34.80049],[41.21654,35.1508],[41.26569,35.42708],[41.38184,35.62502],[41.37027,35.84095],[41.2564,36.06012],[41.28864,36.35368],[41.40058,36.52502],[41.81736,36.58782],[42.36697,37.0627],[42.35724,37.10998],[42.56725,37.14878],[42.78887,37.38615]]]]}},{type:"Feature",properties:{iso1A2:"IR",iso1A3:"IRN",iso1N3:"364",wikidata:"Q794",nameEn:"Iran",groups:["034","142"],callingCodes:["98"]},geometry:{type:"MultiPolygon",coordinates:[[[[44.96746,39.42998],[45.05932,39.36435],[45.08751,39.35052],[45.16168,39.21952],[45.30489,39.18333],[45.40148,39.09007],[45.40452,39.07224],[45.44811,39.04927],[45.44966,38.99243],[45.6131,38.964],[45.6155,38.94304],[45.65172,38.95199],[45.83883,38.90768],[45.90266,38.87739],[45.94624,38.89072],[46.00228,38.87376],[46.06766,38.87861],[46.14785,38.84206],[46.20601,38.85262],[46.34059,38.92076],[46.53497,38.86548],[46.75752,39.03231],[46.83822,39.13143],[46.92539,39.16644],[46.95341,39.13505],[47.05771,39.20143],[47.05927,39.24846],[47.31301,39.37492],[47.38978,39.45999],[47.50099,39.49615],[47.84774,39.66285],[47.98977,39.70999],[48.34264,39.42935],[48.37385,39.37584],[48.15984,39.30028],[48.12404,39.25208],[48.15361,39.19419],[48.31239,39.09278],[48.33884,39.03022],[48.28437,38.97186],[48.08627,38.94434],[48.07734,38.91616],[48.01409,38.90333],[48.02581,38.82705],[48.24773,38.71883],[48.3146,38.59958],[48.45084,38.61013],[48.58793,38.45076],[48.62217,38.40198],[48.70001,38.40564],[48.78979,38.45026],[48.81072,38.44853],[48.84969,38.45015],[48.88288,38.43975],[53.89734,37.3464],[54.24565,37.32047],[54.36211,37.34912],[54.58664,37.45809],[54.67247,37.43532],[54.77822,37.51597],[54.81804,37.61285],[54.77684,37.62264],[54.851,37.75739],[55.13412,37.94705],[55.44152,38.08564],[55.76561,38.12238],[55.97847,38.08024],[56.33278,38.08132],[56.32454,38.18502],[56.43303,38.26054],[56.62255,38.24005],[56.73928,38.27887],[57.03453,38.18717],[57.21169,38.28965],[57.37236,38.09321],[57.35042,37.98546],[57.79534,37.89299],[58.21399,37.77281],[58.22999,37.6856],[58.39959,37.63134],[58.47786,37.6433],[58.5479,37.70526],[58.6921,37.64548],[58.9338,37.67374],[59.22905,37.51161],[59.33507,37.53146],[59.39797,37.47892],[59.39385,37.34257],[59.55178,37.13594],[59.74678,37.12499],[60.00768,37.04102],[60.34767,36.63214],[61.14516,36.64644],[61.18187,36.55348],[61.1393,36.38782],[61.22719,36.12759],[61.12007,35.95992],[61.22444,35.92879],[61.26152,35.80749],[61.22719,35.67038],[61.27371,35.61482],[61.18187,35.30249],[61.0991,35.27845],[61.12831,35.09938],[61.06926,34.82139],[61.00197,34.70631],[60.99922,34.63064],[60.72316,34.52857],[60.91321,34.30411],[60.66502,34.31539],[60.50209,34.13992],[60.5838,33.80793],[60.5485,33.73422],[60.57762,33.59772],[60.69573,33.56054],[60.91133,33.55596],[60.88908,33.50219],[60.56485,33.12944],[60.86191,32.22565],[60.84541,31.49561],[61.70929,31.37391],[61.80569,31.16167],[61.80957,31.12576],[61.83257,31.0452],[61.8335,30.97669],[61.78268,30.92724],[61.80829,30.84224],[60.87231,29.86514],[61.31508,29.38903],[61.53765,29.00507],[61.65978,28.77937],[61.93581,28.55284],[62.40259,28.42703],[62.59499,28.24842],[62.79412,28.28108],[62.7638,28.02992],[62.84905,27.47627],[62.79684,27.34381],[62.80604,27.22412],[63.19649,27.25674],[63.32283,27.14437],[63.25005,27.08692],[63.25005,26.84212],[63.18688,26.83844],[63.1889,26.65072],[62.77352,26.64099],[62.31484,26.528],[62.21304,26.26601],[62.05117,26.31647],[61.89391,26.26251],[61.83831,26.07249],[61.83968,25.7538],[61.683,25.66638],[61.6433,25.27541],[61.57592,25.0492],[61.5251,24.57287],[56.86325,25.03856],[56.82555,25.7713],[56.79239,26.41236],[56.68954,26.76645],[56.2644,26.58649],[55.81777,26.18798],[55.14145,25.62624],[54.39838,25.68383],[50.37726,27.89227],[49.98877,27.87827],[48.83867,29.78572],[48.61441,29.93675],[48.51011,29.96238],[48.44785,30.00148],[48.4494,30.04456],[48.43384,30.08233],[48.38869,30.11062],[48.38714,30.13485],[48.41671,30.17254],[48.41117,30.19846],[48.26393,30.3408],[48.24385,30.33846],[48.21279,30.31644],[48.19425,30.32796],[48.18321,30.39703],[48.14585,30.44133],[48.02443,30.4789],[48.03221,30.9967],[47.68219,31.00004],[47.6804,31.39086],[47.86337,31.78422],[47.64771,32.07666],[47.52474,32.15972],[47.57144,32.20583],[47.37529,32.47808],[47.17218,32.45393],[46.46788,32.91992],[46.32298,32.9731],[46.17198,32.95612],[46.09103,32.98354],[46.15175,33.07229],[46.03966,33.09577],[46.05367,33.13097],[46.11905,33.11924],[46.20623,33.20395],[45.99919,33.5082],[45.86687,33.49263],[45.96183,33.55751],[45.89801,33.63661],[45.77814,33.60938],[45.50261,33.94968],[45.42789,33.9458],[45.41077,33.97421],[45.47264,34.03099],[45.56176,34.15088],[45.58667,34.30147],[45.53552,34.35148],[45.49171,34.3439],[45.46697,34.38221],[45.43879,34.45949],[45.51883,34.47692],[45.53219,34.60441],[45.59074,34.55558],[45.60224,34.55057],[45.73923,34.54416],[45.70031,34.69277],[45.65672,34.7222],[45.68284,34.76624],[45.70031,34.82322],[45.73641,34.83975],[45.79682,34.85133],[45.78904,34.91135],[45.86532,34.89858],[45.89477,34.95805],[45.87864,35.03441],[45.92173,35.0465],[45.92203,35.09538],[45.93108,35.08148],[45.94756,35.09188],[46.06508,35.03699],[46.07747,35.0838],[46.11763,35.07551],[46.19116,35.11097],[46.15642,35.1268],[46.16229,35.16984],[46.19738,35.18536],[46.18457,35.22561],[46.11367,35.23729],[46.15474,35.2883],[46.13152,35.32548],[46.05358,35.38568],[45.98453,35.49848],[46.01518,35.52012],[45.97584,35.58132],[46.03028,35.57416],[46.01307,35.59756],[46.0165,35.61501],[45.99452,35.63574],[46.0117,35.65059],[46.01631,35.69139],[46.23736,35.71414],[46.34166,35.78363],[46.32921,35.82655],[46.17198,35.8013],[46.08325,35.8581],[45.94711,35.82218],[45.89784,35.83708],[45.81442,35.82107],[45.76145,35.79898],[45.6645,35.92872],[45.60018,35.96069],[45.55245,35.99943],[45.46594,36.00042],[45.38275,35.97156],[45.33916,35.99424],[45.37652,36.06222],[45.37312,36.09917],[45.32235,36.17383],[45.30038,36.27769],[45.26261,36.3001],[45.27394,36.35846],[45.23953,36.43257],[45.11811,36.40751],[45.00759,36.5402],[45.06985,36.62645],[45.06985,36.6814],[45.01537,36.75128],[44.84725,36.77622],[44.83479,36.81362],[44.90173,36.86096],[44.91199,36.91468],[44.89862,37.01897],[44.81611,37.04383],[44.75229,37.11958],[44.78319,37.1431],[44.7868,37.16644],[44.75986,37.21549],[44.81021,37.2915],[44.58449,37.45018],[44.61401,37.60165],[44.56887,37.6429],[44.62096,37.71985],[44.55498,37.783],[44.45948,37.77065],[44.3883,37.85433],[44.22509,37.88859],[44.42476,38.25763],[44.50115,38.33939],[44.44386,38.38295],[44.38309,38.36117],[44.3119,38.37887],[44.3207,38.49799],[44.32058,38.62752],[44.28065,38.6465],[44.26155,38.71427],[44.30322,38.81581],[44.18863,38.93881],[44.20946,39.13975],[44.1043,39.19842],[44.03667,39.39223],[44.22452,39.4169],[44.29818,39.378],[44.37921,39.4131],[44.42832,39.4131],[44.41849,39.56659],[44.48111,39.61579],[44.47298,39.68788],[44.6137,39.78393],[44.65422,39.72163],[44.71806,39.71124],[44.81043,39.62677],[44.88916,39.59653],[44.96746,39.42998]]]]}},{type:"Feature",properties:{iso1A2:"IS",iso1A3:"ISL",iso1N3:"352",wikidata:"Q189",nameEn:"Iceland",groups:["154","150"],callingCodes:["354"]},geometry:{type:"MultiPolygon",coordinates:[[[[-33.15676,62.62995],[-15.70914,69.67442],[-8.25539,63.0423],[-33.15676,62.62995]]]]}},{type:"Feature",properties:{iso1A2:"IT",iso1A3:"ITA",iso1N3:"380",wikidata:"Q38",nameEn:"Italy",groups:["EU","039","150"],callingCodes:["39"]},geometry:{type:"MultiPolygon",coordinates:[[[[8.95861,45.96485],[8.96668,45.98436],[8.97741,45.98317],[8.97604,45.96151],[8.95861,45.96485]]],[[[7.63035,43.57419],[7.53006,43.78405],[7.50423,43.84345],[7.49355,43.86551],[7.51162,43.88301],[7.56075,43.89932],[7.56858,43.94506],[7.60771,43.95772],[7.65266,43.9763],[7.66848,43.99943],[7.6597,44.03009],[7.72508,44.07578],[7.66878,44.12795],[7.68694,44.17487],[7.63245,44.17877],[7.62155,44.14881],[7.36364,44.11882],[7.34547,44.14359],[7.27827,44.1462],[7.16929,44.20352],[7.00764,44.23736],[6.98221,44.28289],[6.89171,44.36637],[6.88784,44.42043],[6.94504,44.43112],[6.86233,44.49834],[6.85507,44.53072],[6.96042,44.62129],[6.95133,44.66264],[7.00582,44.69364],[7.07484,44.68073],[7.00401,44.78782],[7.02217,44.82519],[6.93499,44.8664],[6.90774,44.84322],[6.75518,44.89915],[6.74519,44.93661],[6.74791,45.01939],[6.66981,45.02324],[6.62803,45.11175],[6.7697,45.16044],[6.85144,45.13226],[6.96706,45.20841],[7.07074,45.21228],[7.13115,45.25386],[7.10572,45.32924],[7.18019,45.40071],[7.00037,45.509],[6.98948,45.63869],[6.80785,45.71864],[6.80785,45.83265],[6.95315,45.85163],[7.04151,45.92435],[7.10685,45.85653],[7.56343,45.97421],[7.85949,45.91485],[7.9049,45.99945],[7.98881,45.99867],[8.02906,46.10331],[8.11383,46.11577],[8.16866,46.17817],[8.08814,46.26692],[8.31162,46.38044],[8.30648,46.41587],[8.42464,46.46367],[8.46317,46.43712],[8.45032,46.26869],[8.62242,46.12112],[8.75697,46.10395],[8.80778,46.10085],[8.85617,46.0748],[8.79414,46.00913],[8.78585,45.98973],[8.79362,45.99207],[8.8319,45.9879],[8.85121,45.97239],[8.86688,45.96135],[8.88904,45.95465],[8.93649,45.86775],[8.94372,45.86587],[8.93504,45.86245],[8.91129,45.8388],[8.94737,45.84285],[8.9621,45.83707],[8.99663,45.83466],[9.00324,45.82055],[9.0298,45.82127],[9.03279,45.82865],[9.03793,45.83548],[9.03505,45.83976],[9.04059,45.8464],[9.04546,45.84968],[9.06642,45.8761],[9.09065,45.89906],[8.99257,45.9698],[9.01618,46.04928],[9.24503,46.23616],[9.29226,46.32717],[9.25502,46.43743],[9.28136,46.49685],[9.36128,46.5081],[9.40487,46.46621],[9.45936,46.50873],[9.46117,46.37481],[9.57015,46.2958],[9.71273,46.29266],[9.73086,46.35071],[9.95249,46.38045],[10.07055,46.21668],[10.14439,46.22992],[10.17862,46.25626],[10.10506,46.3372],[10.165,46.41051],[10.03715,46.44479],[10.10307,46.61003],[10.23674,46.63484],[10.25309,46.57432],[10.46136,46.53164],[10.49375,46.62049],[10.44686,46.64162],[10.40475,46.63671],[10.38659,46.67847],[10.47197,46.85698],[10.54783,46.84505],[10.66405,46.87614],[10.75753,46.82258],[10.72974,46.78972],[11.00764,46.76896],[11.10618,46.92966],[11.33355,46.99862],[11.50739,47.00644],[11.74789,46.98484],[12.19254,47.09331],[12.21781,47.03996],[12.11675,47.01241],[12.2006,46.88854],[12.27591,46.88651],[12.38708,46.71529],[12.59992,46.6595],[12.94445,46.60401],[13.27627,46.56059],[13.64088,46.53438],[13.7148,46.5222],[13.68684,46.43881],[13.59777,46.44137],[13.5763,46.42613],[13.5763,46.40915],[13.47019,46.3621],[13.43418,46.35992],[13.44808,46.33507],[13.37671,46.29668],[13.42218,46.20758],[13.47587,46.22725],[13.56114,46.2054],[13.56682,46.18703],[13.64451,46.18966],[13.66472,46.17392],[13.64053,46.13587],[13.57072,46.09022],[13.50104,46.05986],[13.49568,46.04839],[13.50998,46.04498],[13.49702,46.01832],[13.47474,46.00546],[13.50104,45.98078],[13.52963,45.96588],[13.56759,45.96991],[13.58903,45.99009],[13.62074,45.98388],[13.63458,45.98947],[13.64307,45.98326],[13.6329,45.94894],[13.63815,45.93607],[13.61931,45.91782],[13.60857,45.89907],[13.59565,45.89446],[13.58644,45.88173],[13.57563,45.8425],[13.58858,45.83503],[13.59784,45.8072],[13.66986,45.79955],[13.8235,45.7176],[13.83332,45.70855],[13.83422,45.68703],[13.87933,45.65207],[13.9191,45.6322],[13.8695,45.60835],[13.86771,45.59898],[13.84106,45.58185],[13.78445,45.5825],[13.74587,45.59811],[13.7198,45.59352],[13.6076,45.64761],[13.45644,45.59464],[13.05142,45.33128],[13.12821,44.48877],[16.15283,42.18525],[18.83516,40.36999],[17.67657,35.68918],[14.02721,36.53141],[12.13667,34.20326],[11.2718,37.6713],[7.89009,38.19924],[7.60802,41.05927],[10.09675,41.44089],[9.56115,43.20816],[7.63035,43.57419]],[[12.45181,41.90056],[12.45446,41.90028],[12.45435,41.90143],[12.45626,41.90172],[12.45691,41.90125],[12.4577,41.90115],[12.45834,41.90174],[12.45826,41.90281],[12.45755,41.9033],[12.45762,41.9058],[12.45561,41.90629],[12.45543,41.90738],[12.45091,41.90625],[12.44984,41.90545],[12.44815,41.90326],[12.44582,41.90194],[12.44834,41.90095],[12.45181,41.90056]],[[12.45648,43.89369],[12.48771,43.89706],[12.49429,43.90973],[12.49247,43.91774],[12.49724,43.92248],[12.50269,43.92363],[12.50496,43.93017],[12.51553,43.94096],[12.51427,43.94897],[12.50655,43.95796],[12.50875,43.96198],[12.50622,43.97131],[12.51109,43.97201],[12.51064,43.98165],[12.5154,43.98508],[12.51463,43.99122],[12.50678,43.99113],[12.49406,43.98492],[12.47853,43.98052],[12.46205,43.97463],[12.44684,43.96597],[12.43662,43.95698],[12.42005,43.9578],[12.41414,43.95273],[12.40415,43.95485],[12.40506,43.94325],[12.41165,43.93769],[12.41551,43.92984],[12.40733,43.92379],[12.41233,43.90956],[12.40935,43.9024],[12.41641,43.89991],[12.44184,43.90498],[12.45648,43.89369]]]]}},{type:"Feature",properties:{iso1A2:"JE",iso1A3:"JEY",iso1N3:"832",wikidata:"Q785",nameEn:"Jersey",country:"GB",groups:["830","154","150"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["44 01534"]},geometry:{type:"MultiPolygon",coordinates:[[[[-2.00491,48.86706],[-2.65349,49.15373],[-2.09454,49.46288],[-1.83944,49.23037],[-2.00491,48.86706]]]]}},{type:"Feature",properties:{iso1A2:"JM",iso1A3:"JAM",iso1N3:"388",wikidata:"Q766",nameEn:"Jamaica",aliases:["JA"],groups:["029","003","419","019"],driveSide:"left",callingCodes:["1 876","1 658"]},geometry:{type:"MultiPolygon",coordinates:[[[[-75.50728,17.08879],[-78.34606,16.57862],[-78.75694,18.78765],[-76.34192,18.86145],[-75.50728,17.08879]]]]}},{type:"Feature",properties:{iso1A2:"JO",iso1A3:"JOR",iso1N3:"400",wikidata:"Q810",nameEn:"Jordan",groups:["145","142"],callingCodes:["962"]},geometry:{type:"MultiPolygon",coordinates:[[[[39.04251,32.30203],[39.26157,32.35555],[39.29903,32.23259],[38.99233,31.99721],[36.99791,31.50081],[37.99354,30.49998],[37.66395,30.33245],[37.4971,29.99949],[36.75083,29.86903],[36.50005,29.49696],[36.07081,29.18469],[34.95987,29.35727],[34.88293,29.37455],[34.92298,29.45305],[34.97718,29.54294],[34.98207,29.58147],[35.02147,29.66343],[35.14108,30.07374],[35.19183,30.34636],[35.16218,30.43535],[35.19595,30.50297],[35.21379,30.60401],[35.29311,30.71365],[35.33456,30.81224],[35.33984,30.8802],[35.41371,30.95565],[35.43658,31.12444],[35.40316,31.25535],[35.47672,31.49578],[35.55941,31.76535],[35.52758,31.9131],[35.54375,31.96587],[35.52012,32.04076],[35.57111,32.21877],[35.55807,32.38674],[35.55494,32.42687],[35.57485,32.48669],[35.56614,32.64393],[35.59813,32.65159],[35.61669,32.67999],[35.66527,32.681],[35.68467,32.70715],[35.75983,32.74803],[35.88405,32.71321],[35.93307,32.71966],[35.96633,32.66237],[36.02239,32.65911],[36.08074,32.51463],[36.20379,32.52751],[36.20875,32.49529],[36.23948,32.50108],[36.40959,32.37908],[36.83946,32.31293],[38.79171,33.37328],[39.08202,32.50304],[38.98762,32.47694],[39.04251,32.30203]]]]}},{type:"Feature",properties:{iso1A2:"JP",iso1A3:"JPN",iso1N3:"392",wikidata:"Q17",nameEn:"Japan",groups:["030","142"],driveSide:"left",callingCodes:["81"]},geometry:{type:"MultiPolygon",coordinates:[[[[145.82361,43.38904],[155.16731,23.60141],[123.92912,17.8782],[122.26612,25.98197],[129.2669,34.87122],[133.61399,37.41],[140.9182,45.92937],[145.82343,44.571],[145.23667,43.76813],[145.82361,43.38904]]]]}},{type:"Feature",properties:{iso1A2:"KE",iso1A3:"KEN",iso1N3:"404",wikidata:"Q114",nameEn:"Kenya",groups:["014","202","002"],driveSide:"left",callingCodes:["254"]},geometry:{type:"MultiPolygon",coordinates:[[[[35.9419,4.61933],[35.95449,4.53244],[36.03924,4.44406],[36.84474,4.44518],[37.07724,4.33503],[38.14168,3.62487],[38.45812,3.60445],[38.52336,3.62551],[38.91938,3.51198],[39.07736,3.5267],[39.19954,3.47834],[39.49444,3.45521],[39.51551,3.40895],[39.55132,3.39634],[39.58339,3.47434],[39.76808,3.67058],[39.86043,3.86974],[40.77498,4.27683],[41.1754,3.94079],[41.89488,3.97375],[41.31368,3.14314],[40.98767,2.82959],[41.00099,-0.83068],[41.56,-1.59812],[41.56362,-1.66375],[41.75542,-1.85308],[39.62121,-4.68136],[39.44306,-4.93877],[39.21631,-4.67835],[37.81321,-3.69179],[37.75036,-3.54243],[37.63099,-3.50723],[37.5903,-3.42735],[37.71745,-3.304],[37.67199,-3.06222],[34.0824,-1.02264],[34.03084,-1.05101],[34.02286,-1.00779],[33.93107,-0.99298],[33.9264,-0.54188],[33.98449,-0.13079],[33.90936,0.10581],[34.10067,0.36372],[34.08727,0.44713],[34.11408,0.48884],[34.13493,0.58118],[34.20196,0.62289],[34.27345,0.63182],[34.31516,0.75693],[34.40041,0.80266],[34.43349,0.85254],[34.52369,1.10692],[34.57427,1.09868],[34.58029,1.14712],[34.67562,1.21265],[34.80223,1.22754],[34.82606,1.26626],[34.82606,1.30944],[34.7918,1.36752],[34.87819,1.5596],[34.92734,1.56109],[34.9899,1.6668],[34.98692,1.97348],[34.90947,2.42447],[34.95267,2.47209],[34.77244,2.70272],[34.78137,2.76223],[34.73967,2.85447],[34.65774,2.8753],[34.60114,2.93034],[34.56242,3.11478],[34.45815,3.18319],[34.40006,3.37949],[34.41794,3.44342],[34.39112,3.48802],[34.44922,3.51627],[34.45815,3.67385],[34.15429,3.80464],[34.06046,4.15235],[33.9873,4.23316],[34.47601,4.72162],[35.34151,5.02364],[35.30992,4.90402],[35.47843,4.91872],[35.42366,4.76969],[35.51424,4.61643],[35.9419,4.61933]]]]}},{type:"Feature",properties:{iso1A2:"KG",iso1A3:"KGZ",iso1N3:"417",wikidata:"Q813",nameEn:"Kyrgyzstan",groups:["143","142"],callingCodes:["996"]},geometry:{type:"MultiPolygon",coordinates:[[[[74.88756,42.98612],[75.22619,42.85528],[75.29966,42.86183],[75.72174,42.79672],[75.82823,42.94848],[78.48469,42.89649],[78.91502,42.76839],[79.19763,42.804],[79.52921,42.44778],[79.97364,42.42816],[80.17807,42.21166],[80.17842,42.03211],[79.92977,42.04113],[78.3732,41.39603],[78.15757,41.38565],[78.12873,41.23091],[77.81287,41.14307],[77.76206,41.01574],[77.52723,41.00227],[77.3693,41.0375],[77.28004,41.0033],[76.99302,41.0696],[76.75681,40.95354],[76.5261,40.46114],[76.33659,40.3482],[75.96168,40.38064],[75.91361,40.2948],[75.69663,40.28642],[75.5854,40.66874],[75.22834,40.45382],[75.08243,40.43945],[74.82013,40.52197],[74.78168,40.44886],[74.85996,40.32857],[74.69875,40.34668],[74.35063,40.09742],[74.25533,40.13191],[73.97049,40.04378],[73.83006,39.76136],[73.9051,39.75073],[73.92354,39.69565],[73.94683,39.60733],[73.87018,39.47879],[73.59831,39.46425],[73.45096,39.46677],[73.31912,39.38615],[73.18454,39.35536],[72.85934,39.35116],[72.62027,39.39696],[72.33173,39.33093],[72.23834,39.17248],[72.17242,39.2661],[72.09689,39.26823],[72.04059,39.36704],[71.90601,39.27674],[71.79202,39.27355],[71.7522,39.32031],[71.80164,39.40631],[71.76816,39.45456],[71.62688,39.44056],[71.5517,39.45722],[71.55856,39.57588],[71.49814,39.61397],[71.08752,39.50704],[71.06418,39.41586],[70.7854,39.38933],[70.64087,39.58792],[70.44757,39.60128],[70.2869,39.53141],[70.11111,39.58223],[69.87491,39.53882],[69.68677,39.59281],[69.3594,39.52516],[69.26938,39.8127],[69.35649,40.01994],[69.43134,39.98431],[69.43557,39.92877],[69.53615,39.93991],[69.5057,40.03277],[69.53855,40.0887],[69.53794,40.11833],[69.55555,40.12296],[69.57615,40.10524],[69.64704,40.12165],[69.67001,40.10639],[70.01283,40.23288],[70.58297,40.00891],[70.57384,39.99394],[70.47557,39.93216],[70.55033,39.96619],[70.58912,39.95211],[70.65946,39.9878],[70.65827,40.0981],[70.7928,40.12797],[70.80495,40.16813],[70.9818,40.22392],[70.95789,40.28761],[71.05901,40.28765],[71.13042,40.34106],[71.36663,40.31593],[71.4246,40.28619],[71.51215,40.26943],[71.51549,40.22986],[71.61725,40.20615],[71.61931,40.26775],[71.68386,40.26984],[71.70569,40.20391],[71.69621,40.18492],[71.71719,40.17886],[71.73054,40.14818],[71.82646,40.21872],[71.85002,40.25647],[72.05464,40.27586],[71.96401,40.31907],[72.18648,40.49893],[72.24368,40.46091],[72.40346,40.4007],[72.44191,40.48222],[72.41513,40.50856],[72.38384,40.51535],[72.41714,40.55736],[72.34406,40.60144],[72.40517,40.61917],[72.47795,40.5532],[72.66713,40.5219],[72.66713,40.59076],[72.69579,40.59778],[72.73995,40.58409],[72.74768,40.58051],[72.74862,40.57131],[72.75982,40.57273],[72.74894,40.59592],[72.74866,40.60873],[72.80137,40.67856],[72.84754,40.67229],[72.85372,40.7116],[72.8722,40.71111],[72.93296,40.73089],[72.99133,40.76457],[73.0612,40.76678],[73.13412,40.79122],[73.13267,40.83512],[73.01869,40.84681],[72.94454,40.8094],[72.84291,40.85512],[72.68157,40.84942],[72.59136,40.86947],[72.55109,40.96046],[72.48742,40.97136],[72.45206,41.03018],[72.38511,41.02785],[72.36138,41.04384],[72.34757,41.06104],[72.34026,41.04539],[72.324,41.03381],[72.18339,40.99571],[72.17594,41.02377],[72.21061,41.05607],[72.1792,41.10621],[72.14864,41.13363],[72.17594,41.15522],[72.16433,41.16483],[72.10745,41.15483],[72.07249,41.11739],[71.85964,41.19081],[71.91457,41.2982],[71.83914,41.3546],[71.76625,41.4466],[71.71132,41.43012],[71.73054,41.54713],[71.65914,41.49599],[71.6787,41.42111],[71.57227,41.29175],[71.46688,41.31883],[71.43814,41.19644],[71.46148,41.13958],[71.40198,41.09436],[71.34877,41.16807],[71.27187,41.11015],[71.25813,41.18796],[71.11806,41.15359],[71.02193,41.19494],[70.9615,41.16393],[70.86263,41.23833],[70.77885,41.24813],[70.78572,41.36419],[70.67586,41.47953],[70.48909,41.40335],[70.17682,41.5455],[70.69777,41.92554],[71.28719,42.18033],[71.13263,42.28356],[70.94483,42.26238],[70.85973,42.30188],[70.97717,42.50147],[71.15232,42.60486],[71.17807,42.67381],[71.22785,42.69248],[71.2724,42.77853],[71.53272,42.8014],[71.62405,42.76613],[71.88792,42.83578],[73.44393,42.43098],[73.50992,42.82356],[73.55634,43.03071],[74.22489,43.24657],[74.57491,43.13702],[74.64615,43.05881],[74.70331,43.02519],[74.75,42.99029],[74.88756,42.98612]],[[70.74189,39.86319],[70.53651,39.89155],[70.52631,39.86989],[70.54998,39.85137],[70.59667,39.83542],[70.63105,39.77923],[70.74189,39.86319]],[[71.86463,39.98598],[71.78838,40.01404],[71.71511,39.96348],[71.7504,39.93701],[71.84316,39.95582],[71.86463,39.98598]],[[71.21139,40.03369],[71.12218,40.03052],[71.06305,40.1771],[71.00236,40.18154],[71.01035,40.05481],[71.11037,40.01984],[71.11668,39.99291],[71.09063,39.99],[71.10501,39.95568],[71.04979,39.89808],[71.10531,39.91354],[71.16101,39.88423],[71.23067,39.93581],[71.1427,39.95026],[71.21139,40.03369]]]]}},{type:"Feature",properties:{iso1A2:"KH",iso1A3:"KHM",iso1N3:"116",wikidata:"Q424",nameEn:"Cambodia",groups:["035","142"],callingCodes:["855"]},geometry:{type:"MultiPolygon",coordinates:[[[[105.87328,11.55953],[105.88962,11.43605],[105.86782,11.28343],[106.10444,11.07879],[106.1527,11.10476],[106.1757,11.07301],[106.20095,10.97795],[106.14301,10.98176],[106.18539,10.79451],[106.06708,10.8098],[105.94535,10.9168],[105.93403,10.83853],[105.84603,10.85873],[105.86376,10.89839],[105.77751,11.03671],[105.50045,10.94586],[105.42884,10.96878],[105.34011,10.86179],[105.11449,10.96332],[105.08326,10.95656],[105.02722,10.89236],[105.09571,10.72722],[104.95094,10.64003],[104.87933,10.52833],[104.59018,10.53073],[104.49869,10.4057],[104.47963,10.43046],[104.43778,10.42386],[103.99198,10.48391],[102.47649,9.66162],[102.52395,11.25257],[102.91449,11.65512],[102.90973,11.75613],[102.83957,11.8519],[102.78427,11.98746],[102.77026,12.06815],[102.70176,12.1686],[102.73134,12.37091],[102.78116,12.40284],[102.7796,12.43781],[102.57567,12.65358],[102.51963,12.66117],[102.4994,12.71736],[102.53053,12.77506],[102.49335,12.92711],[102.48694,12.97537],[102.52275,12.99813],[102.46011,13.08057],[102.43422,13.09061],[102.36146,13.26006],[102.36001,13.31142],[102.34611,13.35618],[102.35692,13.38274],[102.35563,13.47307],[102.361,13.50551],[102.33828,13.55613],[102.36859,13.57488],[102.44601,13.5637],[102.5358,13.56933],[102.57573,13.60461],[102.62483,13.60883],[102.58635,13.6286],[102.5481,13.6589],[102.56848,13.69366],[102.72727,13.77806],[102.77864,13.93374],[102.91251,14.01531],[102.93275,14.19044],[103.16469,14.33075],[103.39353,14.35639],[103.53518,14.42575],[103.71109,14.4348],[103.70175,14.38052],[103.93836,14.3398],[104.27616,14.39861],[104.55014,14.36091],[104.69335,14.42726],[104.97667,14.38806],[105.02804,14.23722],[105.08408,14.20402],[105.14012,14.23873],[105.17748,14.34432],[105.20894,14.34967],[105.2759,14.17496],[105.36775,14.09948],[105.44869,14.10703],[105.5561,14.15684],[105.78338,14.08438],[105.78182,14.02247],[105.90791,13.92881],[106.10405,13.9137],[106.10094,13.98471],[106.16632,14.01794],[106.18656,14.06324],[106.11962,14.11307],[106.10872,14.18401],[106.04801,14.20363],[106.02311,14.30623],[105.99509,14.32734],[106.00131,14.36957],[106.21302,14.36203],[106.25194,14.48415],[106.32355,14.44043],[106.40916,14.45249],[106.43874,14.52032],[106.47766,14.50977],[106.45898,14.55045],[106.50723,14.58963],[106.54148,14.59565],[106.57106,14.50525],[106.59908,14.50977],[106.63333,14.44194],[106.73762,14.42687],[106.80767,14.31226],[106.8497,14.29416],[106.90574,14.33639],[106.9649,14.3198],[106.98825,14.36806],[107.04585,14.41782],[107.03962,14.45099],[107.09722,14.3937],[107.17038,14.41782],[107.21241,14.48716],[107.256,14.48716],[107.26534,14.54292],[107.29803,14.58963],[107.3276,14.58812],[107.37897,14.54443],[107.44435,14.52785],[107.47238,14.61523],[107.54361,14.69092],[107.55371,14.628],[107.52102,14.59034],[107.52569,14.54665],[107.48521,14.40346],[107.44941,14.41552],[107.39493,14.32655],[107.40427,14.24509],[107.33577,14.11832],[107.37158,14.07906],[107.35757,14.02319],[107.38247,13.99147],[107.44318,13.99751],[107.46498,13.91593],[107.45252,13.78897],[107.53503,13.73908],[107.61909,13.52577],[107.62843,13.3668],[107.49144,13.01215],[107.49611,12.88926],[107.55993,12.7982],[107.5755,12.52177],[107.55059,12.36824],[107.4463,12.29373],[107.42917,12.24657],[107.34511,12.33327],[107.15831,12.27547],[106.99953,12.08983],[106.92325,12.06548],[106.79405,12.0807],[106.70687,11.96956],[106.4111,11.97413],[106.4687,11.86751],[106.44068,11.86294],[106.44535,11.8279],[106.41577,11.76999],[106.45158,11.68616],[106.44691,11.66787],[106.37219,11.69836],[106.30525,11.67549],[106.26478,11.72122],[106.18539,11.75171],[106.13158,11.73283],[106.06708,11.77761],[106.02038,11.77457],[106.00792,11.7197],[105.95188,11.63738],[105.88962,11.67854],[105.8507,11.66635],[105.80867,11.60536],[105.81645,11.56876],[105.87328,11.55953]]]]}},{type:"Feature",properties:{iso1A2:"KI",iso1A3:"KIR",iso1N3:"296",wikidata:"Q710",nameEn:"Kiribati",groups:["057","009"],driveSide:"left",callingCodes:["686"]},geometry:{type:"MultiPolygon",coordinates:[[[[169,3.9],[178,3.9],[178,-3.5],[169,-3.5],[169,3.9]]],[[[-158.62058,-1.35506],[-158.62734,1.1296],[-161.05669,1.11722],[-161.06795,5.2462],[-149.65979,5.27712],[-149.6249,-7.51261],[-149.61166,-12.30171],[-156.4957,-12.32002],[-156.50903,-7.4975],[-167.75329,-7.52784],[-174.18707,-7.54408],[-175.31804,-7.54825],[-175.33482,-1.40631],[-161.04969,-1.36251],[-158.62058,-1.35506]]]]}},{type:"Feature",properties:{iso1A2:"KM",iso1A3:"COM",iso1N3:"174",wikidata:"Q970",nameEn:"Comoros",groups:["014","202","002"],callingCodes:["269"]},geometry:{type:"MultiPolygon",coordinates:[[[[42.93552,-11.11413],[44.69407,-11.04481],[44.75722,-12.58368],[42.99868,-12.65261],[42.93552,-11.11413]]]]}},{type:"Feature",properties:{iso1A2:"KN",iso1A3:"KNA",iso1N3:"659",wikidata:"Q763",nameEn:"St. Kitts and Nevis",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 869"]},geometry:{type:"MultiPolygon",coordinates:[[[[-62.27053,17.22145],[-62.62949,16.82364],[-63.11114,17.23125],[-62.76692,17.64353],[-62.27053,17.22145]]]]}},{type:"Feature",properties:{iso1A2:"KP",iso1A3:"PRK",iso1N3:"408",wikidata:"Q423",nameEn:"North Korea",groups:["030","142"],callingCodes:["850"]},geometry:{type:"MultiPolygon",coordinates:[[[[130.26095,42.9027],[130.23068,42.80125],[130.2385,42.71127],[130.41826,42.6011],[130.44361,42.54849],[130.50123,42.61636],[130.55143,42.52158],[130.56835,42.43281],[130.60805,42.4317],[130.64181,42.41422],[130.66367,42.38024],[130.65022,42.32281],[131.95041,41.5445],[128.65655,38.61914],[128.37487,38.62345],[128.31105,38.58462],[128.27652,38.41657],[128.02917,38.31861],[127.55013,38.32257],[127.49672,38.30647],[127.38727,38.33227],[127.15749,38.30722],[127.04479,38.25518],[126.95338,38.17735],[126.95887,38.1347],[126.88106,38.10246],[126.84961,38.0344],[126.67023,37.95852],[126.68793,37.9175],[126.68793,37.83728],[126.66067,37.7897],[126.59918,37.76364],[126.56709,37.76857],[126.46818,37.80873],[126.43239,37.84095],[126.24402,37.83113],[126.19097,37.81462],[126.18776,37.74728],[126.13074,37.70512],[125.81159,37.72949],[125.37112,37.62643],[125.06408,37.66334],[124.87921,37.80827],[124.84224,37.977],[124.67666,38.05679],[123.85601,37.49093],[123.90497,38.79949],[124.17532,39.8232],[124.23201,39.9248],[124.35029,39.95639],[124.37089,40.03004],[124.3322,40.05573],[124.38556,40.11047],[124.40719,40.13655],[124.86913,40.45387],[125.71172,40.85223],[125.76869,40.87908],[126.00335,40.92835],[126.242,41.15454],[126.53189,41.35206],[126.60631,41.65565],[126.90729,41.79955],[127.17841,41.59714],[127.29712,41.49473],[127.92943,41.44291],[128.02633,41.42103],[128.03311,41.39232],[128.12967,41.37931],[128.18546,41.41279],[128.20061,41.40895],[128.30716,41.60322],[128.15119,41.74568],[128.04487,42.01769],[128.94007,42.03537],[128.96068,42.06657],[129.15178,42.17224],[129.22285,42.26491],[129.22423,42.3553],[129.28541,42.41574],[129.42882,42.44702],[129.54701,42.37254],[129.60482,42.44461],[129.72541,42.43739],[129.75294,42.59409],[129.77183,42.69435],[129.7835,42.76521],[129.80719,42.79218],[129.83277,42.86746],[129.85261,42.96494],[129.8865,43.00395],[129.95082,43.01051],[129.96409,42.97306],[130.12957,42.98361],[130.09764,42.91425],[130.26095,42.9027]]]]}},{type:"Feature",properties:{iso1A2:"KR",iso1A3:"KOR",iso1N3:"410",wikidata:"Q884",nameEn:"South Korea",groups:["030","142"],callingCodes:["82"]},geometry:{type:"MultiPolygon",coordinates:[[[[133.61399,37.41],[129.2669,34.87122],[125.99728,32.63328],[122.80525,33.30571],[123.85601,37.49093],[124.67666,38.05679],[124.84224,37.977],[124.87921,37.80827],[125.06408,37.66334],[125.37112,37.62643],[125.81159,37.72949],[126.13074,37.70512],[126.18776,37.74728],[126.19097,37.81462],[126.24402,37.83113],[126.43239,37.84095],[126.46818,37.80873],[126.56709,37.76857],[126.59918,37.76364],[126.66067,37.7897],[126.68793,37.83728],[126.68793,37.9175],[126.67023,37.95852],[126.84961,38.0344],[126.88106,38.10246],[126.95887,38.1347],[126.95338,38.17735],[127.04479,38.25518],[127.15749,38.30722],[127.38727,38.33227],[127.49672,38.30647],[127.55013,38.32257],[128.02917,38.31861],[128.27652,38.41657],[128.31105,38.58462],[128.37487,38.62345],[128.65655,38.61914],[133.61399,37.41]]]]}},{type:"Feature",properties:{iso1A2:"KW",iso1A3:"KWT",iso1N3:"414",wikidata:"Q817",nameEn:"Kuwait",groups:["145","142"],callingCodes:["965"]},geometry:{type:"MultiPolygon",coordinates:[[[[49.00421,28.81495],[48.42991,28.53628],[47.70561,28.5221],[47.59863,28.66798],[47.58376,28.83382],[47.46202,29.0014],[46.5527,29.10283],[46.89695,29.50584],[47.15166,30.01044],[47.37192,30.10421],[47.7095,30.10453],[48.01114,29.98906],[48.06782,30.02906],[48.17332,30.02448],[48.40479,29.85763],[48.59531,29.66815],[49.00421,28.81495]]]]}},{type:"Feature",properties:{iso1A2:"KY",iso1A3:"CYM",iso1N3:"136",wikidata:"Q5785",nameEn:"Cayman Islands",country:"GB",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 345"]},geometry:{type:"MultiPolygon",coordinates:[[[[-82.11509,19.60401],[-79.32727,20.06742],[-80.36068,18.11751],[-82.11509,19.60401]]]]}},{type:"Feature",properties:{iso1A2:"KZ",iso1A3:"KAZ",iso1N3:"398",wikidata:"Q232",nameEn:"Kazakhstan",groups:["143","142"],callingCodes:["7"]},geometry:{type:"MultiPolygon",coordinates:[[[[68.90865,55.38148],[69.34224,55.36344],[69.74917,55.35545],[70.19179,55.1476],[70.76493,55.3027],[70.96009,55.10558],[71.08288,54.71253],[71.24185,54.64965],[71.08706,54.33376],[71.10379,54.13326],[71.96141,54.17736],[72.17477,54.36303],[72.43415,53.92685],[72.71026,54.1161],[73.37963,53.96132],[73.74778,54.07194],[73.68921,53.86522],[73.25412,53.61532],[73.39218,53.44623],[75.07405,53.80831],[75.43398,53.98652],[75.3668,54.07439],[76.91052,54.4677],[76.82266,54.1798],[76.44076,54.16017],[76.54243,53.99329],[77.90383,53.29807],[79.11255,52.01171],[80.08138,50.77658],[80.4127,50.95581],[80.44819,51.20855],[80.80318,51.28262],[81.16999,51.15662],[81.06091,50.94833],[81.41248,50.97524],[81.46581,50.77658],[81.94999,50.79307],[82.55443,50.75412],[83.14607,51.00796],[83.8442,50.87375],[84.29385,50.27257],[84.99198,50.06793],[85.24047,49.60239],[86.18709,49.50259],[86.63674,49.80136],[86.79056,49.74787],[86.61307,49.60239],[86.82606,49.51796],[87.03071,49.25142],[87.31465,49.23603],[87.28386,49.11626],[86.87238,49.12432],[86.73568,48.99918],[86.75343,48.70331],[86.38069,48.46064],[85.73581,48.3939],[85.5169,48.05493],[85.61067,47.49753],[85.69696,47.2898],[85.54294,47.06171],[85.22443,47.04816],[84.93995,46.87399],[84.73077,47.01394],[83.92184,46.98912],[83.04622,47.19053],[82.21792,45.56619],[82.58474,45.40027],[82.51374,45.1755],[81.73278,45.3504],[80.11169,45.03352],[79.8987,44.89957],[80.38384,44.63073],[80.40229,44.23319],[80.40031,44.10986],[80.75156,43.44948],[80.69718,43.32589],[80.77771,43.30065],[80.78817,43.14235],[80.62913,43.141],[80.3735,43.01557],[80.58999,42.9011],[80.38169,42.83142],[80.26886,42.8366],[80.16892,42.61137],[80.26841,42.23797],[80.17807,42.21166],[79.97364,42.42816],[79.52921,42.44778],[79.19763,42.804],[78.91502,42.76839],[78.48469,42.89649],[75.82823,42.94848],[75.72174,42.79672],[75.29966,42.86183],[75.22619,42.85528],[74.88756,42.98612],[74.75,42.99029],[74.70331,43.02519],[74.64615,43.05881],[74.57491,43.13702],[74.22489,43.24657],[73.55634,43.03071],[73.50992,42.82356],[73.44393,42.43098],[71.88792,42.83578],[71.62405,42.76613],[71.53272,42.8014],[71.2724,42.77853],[71.22785,42.69248],[71.17807,42.67381],[71.15232,42.60486],[70.97717,42.50147],[70.85973,42.30188],[70.94483,42.26238],[69.49545,41.545],[69.45751,41.56863],[69.39485,41.51518],[69.45081,41.46246],[69.37468,41.46555],[69.35554,41.47211],[69.29778,41.43673],[69.25059,41.46693],[69.23332,41.45847],[69.22671,41.46298],[69.20439,41.45391],[69.18528,41.45175],[69.17701,41.43769],[69.15137,41.43078],[69.05006,41.36183],[69.01308,41.22804],[68.7217,41.05025],[68.73945,40.96989],[68.65662,40.93861],[68.62221,41.03019],[68.49983,40.99669],[68.58444,40.91447],[68.63,40.59358],[68.49983,40.56437],[67.96736,40.83798],[68.1271,41.0324],[68.08273,41.08148],[67.98511,41.02794],[67.9644,41.14611],[66.69129,41.1311],[66.53302,41.87388],[66.00546,41.94455],[66.09482,42.93426],[65.85194,42.85481],[65.53277,43.31856],[65.18666,43.48835],[64.96464,43.74748],[64.53885,43.56941],[63.34656,43.64003],[62.01711,43.51008],[61.01475,44.41383],[58.59711,45.58671],[55.97842,44.99622],[55.97832,44.99622],[55.97822,44.99617],[55.97811,44.99617],[55.97801,44.99612],[55.97801,44.99607],[55.97791,44.99607],[55.9778,44.99607],[55.9777,44.99601],[55.9777,44.99596],[55.9776,44.99591],[55.97749,44.99591],[55.97739,44.99591],[55.97739,44.99586],[55.97729,44.99586],[55.97718,44.99581],[55.97708,44.99576],[55.97698,44.9957],[55.97698,44.99565],[55.97687,44.9956],[55.97677,44.9956],[55.97677,44.99555],[55.97677,44.9955],[55.97667,44.99545],[55.97656,44.99539],[55.97646,44.99534],[55.97646,44.99529],[55.97636,44.99524],[55.97636,44.99519],[55.97625,44.99514],[55.97615,44.99508],[55.97615,44.99503],[55.97615,44.99498],[55.97615,44.99493],[55.97615,44.99483],[55.97615,44.99477],[55.97605,44.99477],[55.97605,44.99467],[55.97605,44.99462],[55.97605,44.99457],[55.97605,44.99452],[55.97594,44.99446],[55.97584,44.99441],[55.97584,44.99436],[55.97584,44.99431],[55.97584,44.99426],[55.97584,44.99421],[55.97584,44.99415],[55.97584,44.99405],[55.97584,44.994],[55.97584,44.9939],[55.97584,44.99384],[55.97584,44.99374],[55.97584,44.99369],[55.97584,44.99359],[55.97584,44.99353],[55.97584,44.99348],[55.97584,44.99343],[55.97584,44.99338],[55.97584,44.99328],[55.97584,44.99322],[56.00314,41.32584],[55.45471,41.25609],[54.95182,41.92424],[54.20635,42.38477],[52.97575,42.1308],[52.47884,41.78034],[52.26048,41.69249],[49.2134,44.84989],[49.88945,46.04554],[49.32259,46.26944],[49.16518,46.38542],[48.54988,46.56267],[48.51142,46.69268],[49.01136,46.72716],[48.52326,47.4102],[48.45173,47.40818],[48.15348,47.74545],[47.64973,47.76559],[47.41689,47.83687],[47.38731,47.68176],[47.12107,47.83687],[47.11516,48.27188],[46.49011,48.43019],[46.78392,48.95352],[46.91104,48.99715],[47.01458,49.07085],[47.04416,49.17152],[46.98795,49.23531],[46.78398,49.34026],[46.9078,49.86707],[47.18319,49.93721],[47.34589,50.09308],[47.30448,50.30894],[47.58551,50.47867],[48.10044,50.09242],[48.24519,49.86099],[48.42564,49.82283],[48.68352,49.89546],[48.90782,50.02281],[48.57946,50.63278],[48.86936,50.61589],[49.12673,50.78639],[49.41959,50.85927],[49.39001,51.09396],[49.76866,51.11067],[49.97277,51.2405],[50.26859,51.28677],[50.59695,51.61859],[51.26254,51.68466],[51.301,51.48799],[51.77431,51.49536],[51.8246,51.67916],[52.36119,51.74161],[52.54329,51.48444],[53.46165,51.49445],[53.69299,51.23466],[54.12248,51.11542],[54.46331,50.85554],[54.41894,50.61214],[54.55797,50.52006],[54.71476,50.61214],[54.56685,51.01958],[54.72067,51.03261],[55.67774,50.54508],[56.11398,50.7471],[56.17906,50.93204],[57.17302,51.11253],[57.44221,50.88354],[57.74986,50.93017],[57.75578,51.13852],[58.3208,51.15151],[58.87974,50.70852],[59.48928,50.64216],[59.51886,50.49937],[59.81172,50.54451],[60.01288,50.8163],[60.17262,50.83312],[60.31914,50.67705],[60.81833,50.6629],[61.4431,50.80679],[61.56889,51.23679],[61.6813,51.25716],[61.55114,51.32746],[61.50677,51.40687],[60.95655,51.48615],[60.92401,51.61124],[60.5424,51.61675],[60.36787,51.66815],[60.50986,51.7964],[60.09867,51.87135],[59.99809,51.98263],[60.19925,51.99173],[60.48915,52.15175],[60.72581,52.15538],[60.78201,52.22067],[61.05417,52.35096],[60.98021,52.50068],[60.84709,52.52228],[60.84118,52.63912],[60.71693,52.66245],[60.71989,52.75923],[61.05842,52.92217],[61.23462,53.03227],[62.0422,52.96105],[62.12799,52.99133],[62.14574,53.09626],[61.19024,53.30536],[61.14291,53.41481],[61.29082,53.50992],[61.37957,53.45887],[61.57185,53.50112],[61.55706,53.57144],[60.90626,53.62937],[61.22574,53.80268],[61.14283,53.90063],[60.99796,53.93699],[61.26863,53.92797],[61.3706,54.08464],[61.47603,54.08048],[61.56941,53.95703],[61.65318,54.02445],[62.03913,53.94768],[62.00966,54.04134],[62.38535,54.03961],[62.45931,53.90737],[62.56876,53.94047],[62.58651,54.05871],[63.80604,54.27079],[63.91224,54.20013],[64.02715,54.22679],[63.97686,54.29763],[64.97216,54.4212],[65.11033,54.33028],[65.24663,54.35721],[65.20174,54.55216],[68.21308,54.98645],[68.26661,55.09226],[68.19206,55.18823],[68.90865,55.38148]]]]}},{type:"Feature",properties:{iso1A2:"LA",iso1A3:"LAO",iso1N3:"418",wikidata:"Q819",nameEn:"Laos",groups:["035","142"],callingCodes:["856"]},geometry:{type:"MultiPolygon",coordinates:[[[[102.1245,22.43372],[102.14099,22.40092],[102.18712,22.30403],[102.51734,22.02676],[102.49092,21.99002],[102.62301,21.91447],[102.67145,21.65894],[102.74189,21.66713],[102.82115,21.73667],[102.81894,21.83888],[102.85637,21.84501],[102.86077,21.71213],[102.97965,21.74076],[102.98846,21.58936],[102.86297,21.4255],[102.94223,21.46034],[102.88939,21.3107],[102.80794,21.25736],[102.89825,21.24707],[102.97745,21.05821],[103.03469,21.05821],[103.12055,20.89994],[103.21497,20.89832],[103.38032,20.79501],[103.45737,20.82382],[103.68633,20.66324],[103.73478,20.6669],[103.82282,20.8732],[103.98024,20.91531],[104.11121,20.96779],[104.27412,20.91433],[104.63957,20.6653],[104.38199,20.47155],[104.40621,20.3849],[104.47886,20.37459],[104.66158,20.47774],[104.72102,20.40554],[104.62195,20.36633],[104.61315,20.24452],[104.86852,20.14121],[104.91695,20.15567],[104.9874,20.09573],[104.8465,19.91783],[104.8355,19.80395],[104.68359,19.72729],[104.64837,19.62365],[104.53169,19.61743],[104.41281,19.70035],[104.23229,19.70242],[104.06498,19.66926],[104.05617,19.61743],[104.10832,19.51575],[104.06058,19.43484],[103.87125,19.31854],[104.5361,18.97747],[104.64617,18.85668],[105.12829,18.70453],[105.19654,18.64196],[105.1327,18.58355],[105.10408,18.43533],[105.15942,18.38691],[105.38366,18.15315],[105.46292,18.22008],[105.64784,17.96687],[105.60381,17.89356],[105.76612,17.67147],[105.85744,17.63221],[106.09019,17.36399],[106.18991,17.28227],[106.24444,17.24714],[106.29287,17.3018],[106.31929,17.20509],[106.43597,17.01362],[106.50862,16.9673],[106.55045,17.0031],[106.54824,16.92729],[106.51963,16.92097],[106.52183,16.87884],[106.55265,16.86831],[106.55485,16.68704],[106.59013,16.62259],[106.58267,16.6012],[106.61477,16.60713],[106.66052,16.56892],[106.65832,16.47816],[106.74418,16.41904],[106.84104,16.55415],[106.88727,16.52671],[106.88067,16.43594],[106.96638,16.34938],[106.97385,16.30204],[107.02597,16.31132],[107.09091,16.3092],[107.15035,16.26271],[107.14595,16.17816],[107.25822,16.13587],[107.33968,16.05549],[107.44975,16.08511],[107.46296,16.01106],[107.39471,15.88829],[107.34188,15.89464],[107.21419,15.83747],[107.21859,15.74638],[107.27143,15.71459],[107.27583,15.62769],[107.34408,15.62345],[107.3815,15.49832],[107.50699,15.48771],[107.53341,15.40496],[107.62367,15.42193],[107.60605,15.37524],[107.62587,15.2266],[107.58844,15.20111],[107.61926,15.13949],[107.61486,15.0566],[107.46516,15.00982],[107.48277,14.93751],[107.59285,14.87795],[107.51579,14.79282],[107.54361,14.69092],[107.47238,14.61523],[107.44435,14.52785],[107.37897,14.54443],[107.3276,14.58812],[107.29803,14.58963],[107.26534,14.54292],[107.256,14.48716],[107.21241,14.48716],[107.17038,14.41782],[107.09722,14.3937],[107.03962,14.45099],[107.04585,14.41782],[106.98825,14.36806],[106.9649,14.3198],[106.90574,14.33639],[106.8497,14.29416],[106.80767,14.31226],[106.73762,14.42687],[106.63333,14.44194],[106.59908,14.50977],[106.57106,14.50525],[106.54148,14.59565],[106.50723,14.58963],[106.45898,14.55045],[106.47766,14.50977],[106.43874,14.52032],[106.40916,14.45249],[106.32355,14.44043],[106.25194,14.48415],[106.21302,14.36203],[106.00131,14.36957],[105.99509,14.32734],[106.02311,14.30623],[106.04801,14.20363],[106.10872,14.18401],[106.11962,14.11307],[106.18656,14.06324],[106.16632,14.01794],[106.10094,13.98471],[106.10405,13.9137],[105.90791,13.92881],[105.78182,14.02247],[105.78338,14.08438],[105.5561,14.15684],[105.44869,14.10703],[105.36775,14.09948],[105.2759,14.17496],[105.20894,14.34967],[105.43783,14.43865],[105.53864,14.55731],[105.5121,14.80802],[105.61162,15.00037],[105.46661,15.13132],[105.58043,15.32724],[105.50662,15.32054],[105.4692,15.33709],[105.47635,15.3796],[105.58191,15.41031],[105.60446,15.53301],[105.61756,15.68792],[105.46573,15.74742],[105.42285,15.76971],[105.37959,15.84074],[105.34115,15.92737],[105.38508,15.987],[105.42001,16.00657],[105.06204,16.09792],[105.00262,16.25627],[104.88057,16.37311],[104.73349,16.565],[104.76099,16.69302],[104.7397,16.81005],[104.76442,16.84752],[104.7373,16.91125],[104.73712,17.01404],[104.80716,17.19025],[104.80061,17.39367],[104.69867,17.53038],[104.45404,17.66788],[104.35432,17.82871],[104.2757,17.86139],[104.21776,17.99335],[104.10927,18.10826],[104.06533,18.21656],[103.97725,18.33631],[103.93916,18.33914],[103.85642,18.28666],[103.82449,18.33979],[103.699,18.34125],[103.60957,18.40528],[103.47773,18.42841],[103.41044,18.4486],[103.30977,18.4341],[103.24779,18.37807],[103.23818,18.34875],[103.29757,18.30475],[103.17093,18.2618],[103.14994,18.23172],[103.1493,18.17799],[103.07343,18.12351],[103.07823,18.03833],[103.0566,18.00144],[103.01998,17.97095],[102.9912,17.9949],[102.95812,18.0054],[102.86323,17.97531],[102.81988,17.94233],[102.79044,17.93612],[102.75954,17.89561],[102.68538,17.86653],[102.67543,17.84529],[102.69946,17.81686],[102.68194,17.80151],[102.59485,17.83537],[102.5896,17.84889],[102.61432,17.92273],[102.60971,17.95411],[102.59234,17.96127],[102.45523,17.97106],[102.11359,18.21532],[101.88485,18.02474],[101.78087,18.07559],[101.72294,17.92867],[101.44667,17.7392],[101.15108,17.47586],[100.96541,17.57926],[101.02185,17.87637],[101.1793,18.0544],[101.19118,18.2125],[101.15108,18.25624],[101.18227,18.34367],[101.06047,18.43247],[101.27585,18.68875],[101.22832,18.73377],[101.25803,18.89545],[101.35606,19.04716],[101.261,19.12717],[101.24911,19.33334],[101.20604,19.35296],[101.21347,19.46223],[101.26991,19.48324],[101.26545,19.59242],[101.08928,19.59748],[100.90302,19.61901],[100.77231,19.48324],[100.64606,19.55884],[100.58219,19.49164],[100.49604,19.53504],[100.398,19.75047],[100.5094,19.87904],[100.58808,20.15791],[100.55218,20.17741],[100.51052,20.14928],[100.47567,20.19133],[100.4537,20.19971],[100.44992,20.23644],[100.41473,20.25625],[100.37439,20.35156],[100.33383,20.4028],[100.25769,20.3992],[100.22076,20.31598],[100.16668,20.2986],[100.1712,20.24324],[100.11785,20.24787],[100.09337,20.26293],[100.09999,20.31614],[100.08404,20.36626],[100.1957,20.68247],[100.36375,20.82783],[100.51079,20.82194],[100.60112,20.8347],[100.64628,20.88279],[100.50974,20.88574],[100.55281,21.02796],[100.63578,21.05639],[100.72716,21.31786],[100.80173,21.2934],[101.00234,21.39612],[101.16198,21.52808],[101.15156,21.56129],[101.2124,21.56422],[101.19349,21.41959],[101.26912,21.36482],[101.2229,21.23271],[101.29326,21.17254],[101.54563,21.25668],[101.6068,21.23329],[101.59491,21.18621],[101.60886,21.17947],[101.66977,21.20004],[101.70548,21.14911],[101.7622,21.14813],[101.79266,21.19025],[101.76745,21.21571],[101.83887,21.20983],[101.84412,21.25291],[101.74014,21.30967],[101.74224,21.48276],[101.7727,21.51794],[101.7475,21.5873],[101.80001,21.57461],[101.83257,21.61562],[101.74555,21.72852],[101.7791,21.83019],[101.62566,21.96574],[101.57525,22.13026],[101.60675,22.13513],[101.53638,22.24794],[101.56789,22.28876],[101.61306,22.27515],[101.68973,22.46843],[101.7685,22.50337],[101.86828,22.38397],[101.90714,22.38688],[101.91344,22.44417],[101.98487,22.42766],[102.03633,22.46164],[102.1245,22.43372]]]]}},{type:"Feature",properties:{iso1A2:"LB",iso1A3:"LBN",iso1N3:"422",wikidata:"Q822",nameEn:"Lebanon",aliases:["RL"],groups:["145","142"],callingCodes:["961"]},geometry:{type:"MultiPolygon",coordinates:[[[[35.94816,33.47886],[35.88668,33.43183],[35.82577,33.40479],[35.81324,33.36354],[35.77477,33.33609],[35.62019,33.27278],[35.62283,33.24226],[35.58502,33.26653],[35.58326,33.28381],[35.56523,33.28969],[35.55555,33.25844],[35.54544,33.25513],[35.54808,33.236],[35.5362,33.23196],[35.54228,33.19865],[35.52573,33.11921],[35.50335,33.114],[35.50272,33.09056],[35.448,33.09264],[35.43059,33.06659],[35.35223,33.05617],[35.31429,33.10515],[35.1924,33.08743],[35.10645,33.09318],[34.78515,33.20368],[35.48515,34.70851],[35.97386,34.63322],[35.98718,34.64977],[36.29165,34.62991],[36.32399,34.69334],[36.35135,34.68516],[36.35384,34.65447],[36.42941,34.62505],[36.46003,34.6378],[36.45299,34.59438],[36.41429,34.61175],[36.39846,34.55672],[36.3369,34.52629],[36.34745,34.5002],[36.4442,34.50165],[36.46179,34.46541],[36.55853,34.41609],[36.53039,34.3798],[36.56556,34.31881],[36.60778,34.31009],[36.58667,34.27667],[36.59195,34.2316],[36.62537,34.20251],[36.5128,34.09916],[36.50576,34.05982],[36.41078,34.05253],[36.28589,33.91981],[36.38263,33.86579],[36.3967,33.83365],[36.14517,33.85118],[36.06778,33.82927],[35.9341,33.6596],[36.05723,33.57904],[35.94465,33.52774],[35.94816,33.47886]]]]}},{type:"Feature",properties:{iso1A2:"LC",iso1A3:"LCA",iso1N3:"662",wikidata:"Q760",nameEn:"St. Lucia",aliases:["WL"],groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 758"]},geometry:{type:"MultiPolygon",coordinates:[[[[-60.5958,14.23076],[-60.70539,13.41452],[-61.43129,13.68336],[-61.26561,14.25664],[-60.5958,14.23076]]]]}},{type:"Feature",properties:{iso1A2:"LI",iso1A3:"LIE",iso1N3:"438",wikidata:"Q347",nameEn:"Liechtenstein",aliases:["FL"],groups:["155","150"],callingCodes:["423"]},geometry:{type:"MultiPolygon",coordinates:[[[[9.60717,47.06091],[9.55721,47.04762],[9.54041,47.06495],[9.47548,47.05257],[9.47139,47.06402],[9.51362,47.08505],[9.52089,47.10019],[9.51044,47.13727],[9.48774,47.17402],[9.4891,47.19346],[9.50318,47.22153],[9.52406,47.24959],[9.53116,47.27029],[9.56766,47.24281],[9.55176,47.22585],[9.56981,47.21926],[9.58264,47.20673],[9.56539,47.17124],[9.62623,47.14685],[9.63395,47.08443],[9.61216,47.07732],[9.60717,47.06091]]]]}},{type:"Feature",properties:{iso1A2:"LK",iso1A3:"LKA",iso1N3:"144",wikidata:"Q854",nameEn:"Sri Lanka",groups:["034","142"],driveSide:"left",callingCodes:["94"]},geometry:{type:"MultiPolygon",coordinates:[[[[76.25812,4.62435],[79.50447,8.91876],[79.42124,9.80115],[80.48418,10.20786],[85.15017,5.21497],[76.25812,4.62435]]]]}},{type:"Feature",properties:{iso1A2:"LR",iso1A3:"LBR",iso1N3:"430",wikidata:"Q1014",nameEn:"Liberia",groups:["011","202","002"],callingCodes:["231"]},geometry:{type:"MultiPolygon",coordinates:[[[[-8.47114,7.55676],[-8.41935,7.51203],[-8.37458,7.25794],[-8.29249,7.1691],[-8.31736,6.82837],[-8.59456,6.50612],[-8.48652,6.43797],[-8.45666,6.49977],[-8.38453,6.35887],[-8.3298,6.36381],[-8.17557,6.28222],[-8.00642,6.31684],[-7.90692,6.27728],[-7.83478,6.20309],[-7.8497,6.08932],[-7.79747,6.07696],[-7.78254,5.99037],[-7.70294,5.90625],[-7.67309,5.94337],[-7.48155,5.80974],[-7.46165,5.84934],[-7.43677,5.84687],[-7.43926,5.74787],[-7.37209,5.61173],[-7.43428,5.42355],[-7.36463,5.32944],[-7.46165,5.26256],[-7.48901,5.14118],[-7.55369,5.08667],[-7.53876,4.94294],[-7.59349,4.8909],[-7.53259,4.35145],[-7.52774,3.7105],[-12.15048,6.15992],[-11.50429,6.92704],[-11.4027,6.97746],[-11.29417,7.21576],[-10.60422,7.7739],[-10.60492,8.04072],[-10.57523,8.04829],[-10.51554,8.1393],[-10.45023,8.15627],[-10.35227,8.15223],[-10.29839,8.21283],[-10.31635,8.28554],[-10.30084,8.30008],[-10.27575,8.48711],[-10.203,8.47991],[-10.14579,8.52665],[-10.05375,8.50697],[-10.05873,8.42578],[-9.77763,8.54633],[-9.47415,8.35195],[-9.50898,8.18455],[-9.41445,8.02448],[-9.44928,7.9284],[-9.35724,7.74111],[-9.37465,7.62032],[-9.48161,7.37122],[-9.41943,7.41809],[-9.305,7.42056],[-9.20798,7.38109],[-9.18311,7.30461],[-9.09107,7.1985],[-8.93435,7.2824],[-8.85724,7.26019],[-8.8448,7.35149],[-8.72789,7.51429],[-8.67814,7.69428],[-8.55874,7.70167],[-8.55874,7.62525],[-8.47114,7.55676]]]]}},{type:"Feature",properties:{iso1A2:"LS",iso1A3:"LSO",iso1N3:"426",wikidata:"Q1013",nameEn:"Lesotho",groups:["018","202","002"],driveSide:"left",callingCodes:["266"]},geometry:{type:"MultiPolygon",coordinates:[[[[29.33204,-29.45598],[29.28545,-29.58456],[29.12553,-29.76266],[29.16548,-29.91706],[28.9338,-30.05072],[28.80222,-30.10579],[28.68627,-30.12885],[28.399,-30.1592],[28.2319,-30.28476],[28.12073,-30.68072],[27.74814,-30.60635],[27.69467,-30.55862],[27.67819,-30.53437],[27.6521,-30.51707],[27.62137,-30.50509],[27.56781,-30.44562],[27.56901,-30.42504],[27.45452,-30.32239],[27.38108,-30.33456],[27.36649,-30.27246],[27.37293,-30.19401],[27.40778,-30.14577],[27.32555,-30.14785],[27.29603,-30.05473],[27.22719,-30.00718],[27.09489,-29.72796],[27.01016,-29.65439],[27.33464,-29.48161],[27.4358,-29.33465],[27.47254,-29.31968],[27.45125,-29.29708],[27.48679,-29.29349],[27.54258,-29.25575],[27.5158,-29.2261],[27.55974,-29.18954],[27.75458,-28.89839],[27.8907,-28.91612],[27.88933,-28.88156],[27.9392,-28.84864],[27.98675,-28.8787],[28.02503,-28.85991],[28.1317,-28.7293],[28.2348,-28.69471],[28.30518,-28.69531],[28.40612,-28.6215],[28.65091,-28.57025],[28.68043,-28.58744],[29.40524,-29.21246],[29.44883,-29.3772],[29.33204,-29.45598]]]]}},{type:"Feature",properties:{iso1A2:"LT",iso1A3:"LTU",iso1N3:"440",wikidata:"Q37",nameEn:"Lithuania",groups:["EU","154","150"],callingCodes:["370"]},geometry:{type:"MultiPolygon",coordinates:[[[[24.89005,56.46666],[25.05762,56.26742],[25.09325,56.1878],[25.23099,56.19147],[25.39751,56.15707],[25.53621,56.16663],[25.68588,56.14725],[25.69246,56.08892],[25.81773,56.05444],[25.85893,56.00188],[25.90047,56.0013],[26.03815,55.95884],[26.18509,55.86813],[26.39561,55.71156],[26.46661,55.70375],[26.58248,55.6754],[26.63231,55.67968],[26.63167,55.57887],[26.55094,55.5093],[26.5522,55.40277],[26.44937,55.34832],[26.5709,55.32572],[26.6714,55.33902],[26.80929,55.31642],[26.83266,55.30444],[26.835,55.28182],[26.73017,55.24226],[26.72983,55.21788],[26.68075,55.19787],[26.69243,55.16718],[26.54753,55.14181],[26.51481,55.16051],[26.46249,55.12814],[26.35121,55.1525],[26.30628,55.12536],[26.23202,55.10439],[26.26941,55.08032],[26.20397,54.99729],[26.13386,54.98924],[26.05907,54.94631],[25.99129,54.95705],[25.89462,54.93438],[25.74122,54.80108],[25.75977,54.57252],[25.68045,54.5321],[25.64813,54.48704],[25.62203,54.4656],[25.63371,54.42075],[25.5376,54.33158],[25.55425,54.31591],[25.68513,54.31727],[25.78553,54.23327],[25.78563,54.15747],[25.71084,54.16704],[25.64875,54.1259],[25.54724,54.14925],[25.51452,54.17799],[25.56823,54.25212],[25.509,54.30267],[25.35559,54.26544],[25.22705,54.26271],[25.19199,54.219],[25.0728,54.13419],[24.991,54.14241],[24.96894,54.17589],[24.77131,54.11091],[24.85311,54.02862],[24.74279,53.96663],[24.69185,53.96543],[24.69652,54.01901],[24.62275,54.00217],[24.44411,53.90076],[24.34128,53.90076],[24.19638,53.96405],[23.98837,53.92554],[23.95098,53.9613],[23.81309,53.94205],[23.80543,53.89558],[23.71726,53.93379],[23.61677,53.92691],[23.51284,53.95052],[23.48261,53.98855],[23.52702,54.04622],[23.49196,54.14764],[23.45223,54.17775],[23.42418,54.17911],[23.39525,54.21672],[23.3494,54.25155],[23.24656,54.25701],[23.15938,54.29894],[23.15526,54.31076],[23.13905,54.31567],[23.104,54.29794],[23.04323,54.31567],[23.05726,54.34565],[22.99649,54.35927],[23.00584,54.38514],[22.83756,54.40827],[22.79705,54.36264],[22.7253,54.41732],[22.70208,54.45312],[22.67788,54.532],[22.71293,54.56454],[22.68021,54.58486],[22.7522,54.63525],[22.74225,54.64339],[22.75467,54.6483],[22.73397,54.66604],[22.73631,54.72952],[22.87317,54.79492],[22.85083,54.88711],[22.76422,54.92521],[22.68723,54.9811],[22.65451,54.97037],[22.60075,55.01863],[22.58907,55.07085],[22.47688,55.04408],[22.31562,55.0655],[22.14267,55.05345],[22.11697,55.02131],[22.06087,55.02935],[22.02582,55.05078],[22.03984,55.07888],[21.99543,55.08691],[21.96505,55.07353],[21.85521,55.09493],[21.64954,55.1791],[21.55605,55.20311],[21.51095,55.18507],[21.46766,55.21115],[21.38446,55.29348],[21.35465,55.28427],[21.26425,55.24456],[20.95181,55.27994],[20.60454,55.40986],[20.68447,56.04073],[21.15016,56.07818],[21.24644,56.16917],[21.49736,56.29106],[21.57888,56.31406],[21.74558,56.33181],[22.00548,56.41508],[22.09728,56.42851],[22.3361,56.4016],[22.56441,56.39305],[22.69354,56.36284],[22.83048,56.367],[22.96988,56.41213],[23.09531,56.30511],[23.17312,56.36795],[23.31606,56.3827],[23.40486,56.37689],[23.49803,56.34307],[23.75726,56.37282],[24.02657,56.3231],[24.13139,56.24881],[24.32334,56.30226],[24.42746,56.26522],[24.58143,56.29125],[24.57353,56.31525],[24.70022,56.40483],[24.83686,56.41565],[24.89005,56.46666]]]]}},{type:"Feature",properties:{iso1A2:"LU",iso1A3:"LUX",iso1N3:"442",wikidata:"Q32",nameEn:"Luxembourg",groups:["EU","155","150"],callingCodes:["352"]},geometry:{type:"MultiPolygon",coordinates:[[[[6.1379,50.12964],[6.12055,50.09171],[6.11274,50.05916],[6.13458,50.04141],[6.13044,50.02929],[6.14666,50.02207],[6.13794,50.01466],[6.13273,50.02019],[6.1295,50.01849],[6.13806,50.01056],[6.14948,50.00908],[6.14147,49.99563],[6.1701,49.98518],[6.16466,49.97086],[6.17872,49.9537],[6.18554,49.95622],[6.18045,49.96611],[6.19089,49.96991],[6.19856,49.95053],[6.22094,49.94955],[6.22608,49.929],[6.21882,49.92403],[6.22926,49.92096],[6.23496,49.89972],[6.26146,49.88203],[6.28874,49.87592],[6.29692,49.86685],[6.30963,49.87021],[6.32303,49.85133],[6.32098,49.83728],[6.33585,49.83785],[6.34267,49.84974],[6.36576,49.85032],[6.40022,49.82029],[6.42521,49.81591],[6.42905,49.81091],[6.44131,49.81443],[6.45425,49.81164],[6.47111,49.82263],[6.48718,49.81267],[6.50647,49.80916],[6.51215,49.80124],[6.52121,49.81338],[6.53122,49.80666],[6.52169,49.79787],[6.50534,49.78952],[6.51669,49.78336],[6.51056,49.77515],[6.51828,49.76855],[6.51646,49.75961],[6.50174,49.75292],[6.50193,49.73291],[6.51805,49.72425],[6.51397,49.72058],[6.50261,49.72718],[6.49535,49.72645],[6.49694,49.72205],[6.5042,49.71808],[6.50647,49.71353],[6.49785,49.71118],[6.48014,49.69767],[6.46048,49.69092],[6.44654,49.67799],[6.42937,49.66857],[6.42726,49.66078],[6.43768,49.66021],[6.4413,49.65722],[6.41861,49.61723],[6.39822,49.60081],[6.385,49.59946],[6.37464,49.58886],[6.38342,49.5799],[6.38024,49.57593],[6.36676,49.57813],[6.35825,49.57053],[6.38228,49.55855],[6.38072,49.55171],[6.35666,49.52931],[6.36788,49.50377],[6.36907,49.48931],[6.36778,49.46937],[6.3687,49.4593],[6.28818,49.48465],[6.27875,49.503],[6.25029,49.50609],[6.2409,49.51408],[6.19543,49.50536],[6.17386,49.50934],[6.15366,49.50226],[6.16115,49.49297],[6.14321,49.48796],[6.12814,49.49365],[6.12346,49.4735],[6.10325,49.4707],[6.09845,49.46351],[6.10072,49.45268],[6.08373,49.45594],[6.07887,49.46399],[6.05553,49.46663],[6.04176,49.44801],[6.02743,49.44845],[6.02648,49.45451],[5.97693,49.45513],[5.96876,49.49053],[5.94224,49.49608],[5.94128,49.50034],[5.86571,49.50015],[5.83389,49.52152],[5.83467,49.52717],[5.84466,49.53027],[5.83648,49.5425],[5.81664,49.53775],[5.80871,49.5425],[5.81838,49.54777],[5.84143,49.5533],[5.84692,49.55663],[5.8424,49.56082],[5.87256,49.57539],[5.86986,49.58756],[5.84971,49.58674],[5.84826,49.5969],[5.8762,49.60898],[5.87609,49.62047],[5.88393,49.62802],[5.88552,49.63507],[5.90599,49.63853],[5.90164,49.6511],[5.9069,49.66377],[5.86175,49.67862],[5.86527,49.69291],[5.88677,49.70951],[5.86503,49.72739],[5.84193,49.72161],[5.82562,49.72395],[5.83149,49.74729],[5.82245,49.75048],[5.78871,49.7962],[5.75409,49.79239],[5.74953,49.81428],[5.74364,49.82058],[5.74844,49.82435],[5.7404,49.83452],[5.74076,49.83823],[5.74975,49.83933],[5.74953,49.84709],[5.75884,49.84811],[5.74567,49.85368],[5.75861,49.85631],[5.75269,49.8711],[5.78415,49.87922],[5.73621,49.89796],[5.77314,49.93646],[5.77291,49.96056],[5.80833,49.96451],[5.81163,49.97142],[5.83467,49.97823],[5.83968,49.9892],[5.82331,49.99662],[5.81866,50.01286],[5.8551,50.02683],[5.86904,50.04614],[5.85474,50.06342],[5.8857,50.07824],[5.89488,50.11476],[5.95929,50.13295],[5.96453,50.17259],[6.02488,50.18283],[6.03093,50.16362],[6.06406,50.15344],[6.08577,50.17246],[6.12028,50.16374],[6.1137,50.13668],[6.1379,50.12964]]]]}},{type:"Feature",properties:{iso1A2:"LV",iso1A3:"LVA",iso1N3:"428",wikidata:"Q211",nameEn:"Latvia",groups:["EU","154","150"],callingCodes:["371"]},geometry:{type:"MultiPolygon",coordinates:[[[[27.34698,57.52242],[27.56832,57.53728],[27.52453,57.42826],[27.86101,57.29402],[27.66511,56.83921],[27.86101,56.88204],[28.04768,56.59004],[28.13526,56.57989],[28.10069,56.524],[28.19057,56.44637],[28.16599,56.37806],[28.23716,56.27588],[28.15217,56.16964],[27.97865,56.11849],[27.63065,55.89687],[27.61683,55.78558],[27.3541,55.8089],[27.27804,55.78299],[27.1559,55.85032],[26.97153,55.8102],[26.87448,55.7172],[26.76872,55.67658],[26.71802,55.70645],[26.64888,55.70515],[26.63231,55.67968],[26.58248,55.6754],[26.46661,55.70375],[26.39561,55.71156],[26.18509,55.86813],[26.03815,55.95884],[25.90047,56.0013],[25.85893,56.00188],[25.81773,56.05444],[25.69246,56.08892],[25.68588,56.14725],[25.53621,56.16663],[25.39751,56.15707],[25.23099,56.19147],[25.09325,56.1878],[25.05762,56.26742],[24.89005,56.46666],[24.83686,56.41565],[24.70022,56.40483],[24.57353,56.31525],[24.58143,56.29125],[24.42746,56.26522],[24.32334,56.30226],[24.13139,56.24881],[24.02657,56.3231],[23.75726,56.37282],[23.49803,56.34307],[23.40486,56.37689],[23.31606,56.3827],[23.17312,56.36795],[23.09531,56.30511],[22.96988,56.41213],[22.83048,56.367],[22.69354,56.36284],[22.56441,56.39305],[22.3361,56.4016],[22.09728,56.42851],[22.00548,56.41508],[21.74558,56.33181],[21.57888,56.31406],[21.49736,56.29106],[21.24644,56.16917],[21.15016,56.07818],[20.68447,56.04073],[19.64795,57.06466],[19.84909,57.57876],[22.80496,57.87798],[23.20055,57.56697],[24.26221,57.91787],[24.3579,57.87471],[25.19484,58.0831],[25.28237,57.98539],[25.29581,58.08288],[25.73499,57.90193],[26.05949,57.84744],[26.0324,57.79037],[26.02456,57.78342],[26.027,57.78158],[26.0266,57.77441],[26.02069,57.77169],[26.02415,57.76865],[26.03332,57.7718],[26.0543,57.76105],[26.08098,57.76619],[26.2029,57.7206],[26.1866,57.6849],[26.29253,57.59244],[26.46527,57.56885],[26.54675,57.51813],[26.90364,57.62823],[27.34698,57.52242]]]]}},{type:"Feature",properties:{iso1A2:"LY",iso1A3:"LBY",iso1N3:"434",wikidata:"Q1016",nameEn:"Libya",groups:["015","002"],callingCodes:["218"]},geometry:{type:"MultiPolygon",coordinates:[[[[22.5213,33.45682],[25.63787,31.9359],[25.14001,31.67534],[25.06041,31.57937],[24.83101,31.31921],[25.01077,30.73861],[24.71117,30.17441],[24.99968,29.24574],[24.99885,21.99535],[24.99794,19.99661],[23.99715,20.00038],[23.99539,19.49944],[15.99566,23.49639],[14.99751,23.00539],[14.22918,22.61719],[13.5631,23.16574],[11.96886,23.51735],[11.62498,24.26669],[11.41061,24.21456],[10.85323,24.5595],[10.33159,24.5465],[10.02432,24.98124],[10.03146,25.35635],[9.38834,26.19288],[9.51696,26.39148],[9.89569,26.57696],[9.78136,29.40961],[9.3876,30.16738],[9.55544,30.23971],[9.76848,30.34366],[9.88152,30.34074],[10.29516,30.90337],[10.12239,31.42098],[10.31364,31.72648],[10.48497,31.72956],[10.62788,31.96629],[10.7315,31.97235],[11.04234,32.2145],[11.53898,32.4138],[11.57828,32.48013],[11.46037,32.6307],[11.51549,33.09826],[11.55852,33.1409],[11.56255,33.16754],[11.66543,33.34642],[22.5213,33.45682]]]]}},{type:"Feature",properties:{iso1A2:"MA",iso1A3:"MAR",iso1N3:"504",wikidata:"Q1028",nameEn:"Morocco",groups:["015","002"],callingCodes:["212"]},geometry:{type:"MultiPolygon",coordinates:[[[[-2.27707,35.35051],[-2.21248,35.08532],[-2.21445,35.04378],[-2.04734,34.93218],[-1.97833,34.93218],[-1.97469,34.886],[-1.73707,34.74226],[-1.84569,34.61907],[-1.69788,34.48056],[-1.78042,34.39018],[-1.64666,34.10405],[-1.73494,33.71721],[-1.59508,33.59929],[-1.67067,33.27084],[-1.46249,33.0499],[-1.54244,32.95499],[-1.37794,32.73628],[-0.9912,32.52467],[-1.24998,32.32993],[-1.24453,32.1917],[-1.15735,32.12096],[-1.22829,32.07832],[-2.46166,32.16603],[-2.93873,32.06557],[-2.82784,31.79459],[-3.66314,31.6339],[-3.66386,31.39202],[-3.77647,31.31912],[-3.77103,31.14984],[-3.54944,31.0503],[-3.65418,30.85566],[-3.64735,30.67539],[-4.31774,30.53229],[-4.6058,30.28343],[-5.21671,29.95253],[-5.58831,29.48103],[-5.72121,29.52322],[-5.75616,29.61407],[-6.69965,29.51623],[-6.78351,29.44634],[-6.95824,29.50924],[-7.61585,29.36252],[-8.6715,28.71194],[-8.66879,27.6666],[-8.77527,27.66663],[-8.71787,26.9898],[-9.08698,26.98639],[-9.56957,26.90042],[-9.81998,26.71379],[-10.68417,26.90984],[-11.35695,26.8505],[-11.23622,26.72023],[-11.38635,26.611],[-11.62052,26.05229],[-12.06001,26.04442],[-12.12281,25.13682],[-12.92147,24.39502],[-13.00628,24.01923],[-13.75627,23.77231],[-14.10361,22.75501],[-14.1291,22.41636],[-14.48112,22.00886],[-14.47329,21.63839],[-14.78487,21.36587],[-16.44269,21.39745],[-16.9978,21.36239],[-17.02707,21.34022],[-17.21511,21.34226],[-17.27295,21.93519],[-14.43883,27.02969],[-7.27694,35.93599],[-5.64962,35.93752],[-5.10878,36.05227],[-2.85819,35.63219],[-2.27707,35.35051]],[[-2.92224,35.3401],[-2.96038,35.31609],[-2.96648,35.30475],[-2.96978,35.29459],[-2.97035,35.28852],[-2.96507,35.28801],[-2.96826,35.28296],[-2.96516,35.27967],[-2.95431,35.2728],[-2.95065,35.26576],[-2.93893,35.26737],[-2.92674,35.27313],[-2.92181,35.28599],[-2.92224,35.3401]],[[-3.90602,35.21494],[-3.88926,35.20841],[-3.88617,35.21406],[-3.90288,35.22024],[-3.90602,35.21494]],[[-4.30191,35.17419],[-4.30112,35.17058],[-4.29436,35.17149],[-4.30191,35.17419]],[[-2.41312,35.17111],[-2.41265,35.1877],[-2.44896,35.18777],[-2.44887,35.17075],[-2.41312,35.17111]],[[-5.38491,35.92591],[-5.37338,35.88417],[-5.35844,35.87375],[-5.34379,35.8711],[-5.27056,35.88794],[-5.27635,35.91222],[-5.38491,35.92591]]]]}},{type:"Feature",properties:{iso1A2:"MC",iso1A3:"MCO",iso1N3:"492",wikidata:"Q235",nameEn:"Monaco",groups:["155","150"],callingCodes:["377"]},geometry:{type:"MultiPolygon",coordinates:[[[[7.47823,43.73341],[7.42422,43.72209],[7.40903,43.7296],[7.41113,43.73156],[7.41291,43.73168],[7.41298,43.73311],[7.41233,43.73439],[7.42062,43.73977],[7.42299,43.74176],[7.42443,43.74087],[7.42809,43.74396],[7.43013,43.74895],[7.43624,43.75014],[7.43708,43.75197],[7.4389,43.75151],[7.4379,43.74963],[7.47823,43.73341]]]]}},{type:"Feature",properties:{iso1A2:"MD",iso1A3:"MDA",iso1N3:"498",wikidata:"Q217",nameEn:"Moldova",groups:["151","150"],callingCodes:["373"]},geometry:{type:"MultiPolygon",coordinates:[[[[27.74422,48.45926],[27.79225,48.44244],[27.81902,48.41874],[27.87533,48.4037],[27.88391,48.36699],[27.95883,48.32368],[28.04527,48.32661],[28.09873,48.3124],[28.07504,48.23494],[28.17666,48.25963],[28.19314,48.20749],[28.2856,48.23202],[28.32508,48.23384],[28.35519,48.24957],[28.36996,48.20543],[28.34912,48.1787],[28.30586,48.1597],[28.30609,48.14018],[28.34009,48.13147],[28.38712,48.17567],[28.43701,48.15832],[28.42454,48.12047],[28.48428,48.0737],[28.53921,48.17453],[28.69896,48.13106],[28.85232,48.12506],[28.8414,48.03392],[28.9306,47.96255],[29.1723,47.99013],[29.19839,47.89261],[29.27804,47.88893],[29.20663,47.80367],[29.27255,47.79953],[29.22242,47.73607],[29.22414,47.60012],[29.11743,47.55001],[29.18603,47.43387],[29.3261,47.44664],[29.39889,47.30179],[29.47854,47.30366],[29.48678,47.36043],[29.5733,47.36508],[29.59665,47.25521],[29.54996,47.24962],[29.57696,47.13581],[29.49732,47.12878],[29.53044,47.07851],[29.61038,47.09932],[29.62137,47.05069],[29.57056,46.94766],[29.72986,46.92234],[29.75458,46.8604],[29.87405,46.88199],[29.98814,46.82358],[29.94522,46.80055],[29.9743,46.75325],[29.94409,46.56002],[29.88916,46.54302],[30.02511,46.45132],[30.16794,46.40967],[30.09103,46.38694],[29.94114,46.40114],[29.88329,46.35851],[29.74496,46.45605],[29.66359,46.4215],[29.6763,46.36041],[29.5939,46.35472],[29.49914,46.45889],[29.35357,46.49505],[29.24886,46.37912],[29.23547,46.55435],[29.02409,46.49582],[29.01241,46.46177],[28.9306,46.45699],[29.004,46.31495],[28.98478,46.31803],[28.94953,46.25852],[29.06656,46.19716],[28.94643,46.09176],[29.00613,46.04962],[28.98004,46.00385],[28.74383,45.96664],[28.78503,45.83475],[28.69852,45.81753],[28.70401,45.78019],[28.52823,45.73803],[28.47879,45.66994],[28.51587,45.6613],[28.54196,45.58062],[28.49252,45.56716],[28.51449,45.49982],[28.43072,45.48538],[28.41836,45.51715],[28.30201,45.54744],[28.21139,45.46895],[28.18741,45.47358],[28.08927,45.6051],[28.16568,45.6421],[28.13111,45.92819],[28.08612,46.01105],[28.13684,46.18099],[28.10937,46.22852],[28.19864,46.31869],[28.18902,46.35283],[28.25769,46.43334],[28.22281,46.50481],[28.24808,46.64305],[28.12173,46.82283],[28.09095,46.97621],[27.81892,47.1381],[27.73172,47.29248],[27.68706,47.28962],[27.60263,47.32507],[27.55731,47.46637],[27.47942,47.48113],[27.3979,47.59473],[27.32202,47.64009],[27.25519,47.71366],[27.29069,47.73722],[27.1618,47.92391],[27.15622,47.98538],[27.02985,48.09083],[27.04118,48.12522],[26.96119,48.13003],[26.98042,48.15752],[26.94265,48.1969],[26.87708,48.19919],[26.81161,48.25049],[26.62823,48.25804],[26.6839,48.35828],[26.79239,48.29071],[26.82809,48.31629],[26.71274,48.40388],[26.85556,48.41095],[26.93384,48.36558],[27.03821,48.37653],[27.0231,48.42485],[27.08078,48.43214],[27.13434,48.37288],[27.27855,48.37534],[27.32159,48.4434],[27.37604,48.44398],[27.37741,48.41026],[27.44333,48.41209],[27.46942,48.454],[27.5889,48.49224],[27.59027,48.46311],[27.6658,48.44034],[27.74422,48.45926]]]]}},{type:"Feature",properties:{iso1A2:"ME",iso1A3:"MNE",iso1N3:"499",wikidata:"Q236",nameEn:"Montenegro",groups:["039","150"],callingCodes:["382"]},geometry:{type:"MultiPolygon",coordinates:[[[[19.22807,43.5264],[19.22229,43.47926],[19.44315,43.38846],[19.48171,43.32644],[19.52962,43.31623],[19.54598,43.25158],[19.62661,43.2286],[19.64063,43.19027],[19.76918,43.16044],[19.79255,43.11951],[19.92576,43.08539],[19.96549,43.11098],[19.98887,43.0538],[20.04729,43.02732],[20.05431,42.99571],[20.12325,42.96237],[20.14896,42.99058],[20.16415,42.97177],[20.34528,42.90676],[20.35692,42.8335],[20.27869,42.81945],[20.2539,42.76245],[20.04898,42.77701],[20.02088,42.74789],[20.02915,42.71147],[20.0969,42.65559],[20.07761,42.55582],[20.01834,42.54622],[20.00842,42.5109],[19.9324,42.51699],[19.82333,42.46581],[19.76549,42.50237],[19.74731,42.57422],[19.77375,42.58517],[19.73244,42.66299],[19.65972,42.62774],[19.4836,42.40831],[19.42352,42.36546],[19.42,42.33019],[19.28623,42.17745],[19.40687,42.10024],[19.37548,42.06835],[19.36867,42.02564],[19.37691,41.96977],[19.34601,41.95675],[19.33812,41.90669],[19.37451,41.8842],[19.37597,41.84849],[19.26406,41.74971],[18.45131,42.21682],[18.54128,42.39171],[18.52152,42.42302],[18.43588,42.48556],[18.44307,42.51077],[18.43735,42.55921],[18.49778,42.58409],[18.53751,42.57376],[18.55504,42.58409],[18.52232,42.62279],[18.57373,42.64429],[18.54841,42.68328],[18.54603,42.69171],[18.55221,42.69045],[18.56789,42.72074],[18.47324,42.74992],[18.45921,42.81682],[18.47633,42.85829],[18.4935,42.86433],[18.49661,42.89306],[18.49076,42.95553],[18.52232,43.01451],[18.66254,43.03928],[18.64735,43.14766],[18.66605,43.2056],[18.71747,43.2286],[18.6976,43.25243],[18.76538,43.29838],[18.85342,43.32426],[18.84794,43.33735],[18.83912,43.34795],[18.90911,43.36383],[18.95819,43.32899],[18.95001,43.29327],[19.00844,43.24988],[19.04233,43.30008],[19.08206,43.29668],[19.08673,43.31453],[19.04071,43.397],[19.01078,43.43854],[18.96053,43.45042],[18.95469,43.49367],[18.91379,43.50299],[19.01078,43.55806],[19.04934,43.50384],[19.13933,43.5282],[19.15685,43.53943],[19.22807,43.5264]]]]}},{type:"Feature",properties:{iso1A2:"MF",iso1A3:"MAF",iso1N3:"663",wikidata:"Q126125",nameEn:"Saint-Martin",country:"FR",groups:["EU","029","003","419","019"],callingCodes:["590"]},geometry:{type:"MultiPolygon",coordinates:[[[[-62.93924,18.02904],[-63.02323,18.05757],[-63.04039,18.05619],[-63.0579,18.06614],[-63.07759,18.04943],[-63.09686,18.04608],[-63.11096,18.05368],[-63.13584,18.0541],[-63.33064,17.9615],[-63.35989,18.06012],[-62.86666,18.19278],[-62.75637,18.13489],[-62.93924,18.02904]]]]}},{type:"Feature",properties:{iso1A2:"MG",iso1A3:"MDG",iso1N3:"450",wikidata:"Q1019",nameEn:"Madagascar",aliases:["RM"],groups:["014","202","002"],callingCodes:["261"]},geometry:{type:"MultiPolygon",coordinates:[[[[51.94557,-12.74579],[45.90777,-29.77366],[40.40841,-23.17181],[43.72277,-16.09877],[49.10033,-10.96054],[51.94557,-12.74579]]]]}},{type:"Feature",properties:{iso1A2:"MH",iso1A3:"MHL",iso1N3:"584",wikidata:"Q709",nameEn:"Marshall Islands",groups:["057","009"],roadSpeedUnit:"mph",callingCodes:["692"]},geometry:{type:"MultiPolygon",coordinates:[[[[169,3.9],[159.04653,10.59067],[169.29099,15.77133],[173.53711,5.70687],[169,3.9]]]]}},{type:"Feature",properties:{iso1A2:"MK",iso1A3:"MKD",iso1N3:"807",wikidata:"Q221",nameEn:"North Macedonia",groups:["039","150"],callingCodes:["389"]},geometry:{type:"MultiPolygon",coordinates:[[[[22.34773,42.31725],[22.38136,42.30339],[22.47251,42.20393],[22.50289,42.19527],[22.51224,42.15457],[22.67701,42.06614],[22.86749,42.02275],[22.90254,41.87587],[22.96682,41.77137],[23.01239,41.76527],[23.03342,41.71034],[22.95513,41.63265],[22.96331,41.35782],[22.93334,41.34104],[22.81199,41.3398],[22.76408,41.32225],[22.74538,41.16321],[22.71266,41.13945],[22.65306,41.18168],[22.62852,41.14385],[22.58295,41.11568],[22.5549,41.13065],[22.42285,41.11921],[22.26744,41.16409],[22.17629,41.15969],[22.1424,41.12449],[22.06527,41.15617],[21.90869,41.09191],[21.91102,41.04786],[21.7556,40.92525],[21.69601,40.9429],[21.57448,40.86076],[21.53007,40.90759],[21.41555,40.9173],[21.35595,40.87578],[21.25779,40.86165],[21.21105,40.8855],[21.15262,40.85546],[20.97887,40.85475],[20.97693,40.90103],[20.94305,40.92399],[20.83671,40.92752],[20.81567,40.89662],[20.73504,40.9081],[20.71634,40.91781],[20.65558,41.08009],[20.63454,41.0889],[20.59832,41.09066],[20.58546,41.11179],[20.59715,41.13644],[20.51068,41.2323],[20.49432,41.33679],[20.52119,41.34381],[20.55976,41.4087],[20.51301,41.442],[20.49039,41.49277],[20.45331,41.51436],[20.45809,41.5549],[20.52103,41.56473],[20.55508,41.58113],[20.51769,41.65975],[20.52937,41.69292],[20.51301,41.72433],[20.53405,41.78099],[20.57144,41.7897],[20.55976,41.87068],[20.59524,41.8818],[20.68523,41.85318],[20.76786,41.91839],[20.75464,42.05229],[21.11491,42.20794],[21.16614,42.19815],[21.22728,42.08909],[21.31983,42.10993],[21.29913,42.13954],[21.30496,42.1418],[21.38428,42.24465],[21.43882,42.23609],[21.43882,42.2789],[21.50823,42.27156],[21.52145,42.24465],[21.58992,42.25915],[21.70111,42.23789],[21.77176,42.2648],[21.84654,42.3247],[21.91595,42.30392],[21.94405,42.34669],[22.02908,42.29848],[22.16384,42.32103],[22.29605,42.37477],[22.29275,42.34913],[22.34773,42.31725]]]]}},{type:"Feature",properties:{iso1A2:"ML",iso1A3:"MLI",iso1N3:"466",wikidata:"Q912",nameEn:"Mali",groups:["011","202","002"],callingCodes:["223"]},geometry:{type:"MultiPolygon",coordinates:[[[[-4.83423,24.99935],[1.15698,21.12843],[1.20992,20.73533],[3.24648,19.81703],[3.12501,19.1366],[3.36082,18.9745],[4.26651,19.14224],[4.26762,17.00432],[4.21787,17.00118],[4.19893,16.39923],[3.50368,15.35934],[3.03134,15.42221],[3.01806,15.34571],[1.31275,15.27978],[0.96711,14.98275],[0.72632,14.95898],[0.23859,15.00135],[0.06588,14.96961],[-0.24673,15.07805],[-0.72004,15.08655],[-1.05875,14.7921],[-1.32166,14.72774],[-1.68083,14.50023],[-1.97945,14.47709],[-1.9992,14.19011],[-2.10223,14.14878],[-2.47587,14.29671],[-2.66175,14.14713],[-2.84667,14.05532],[-2.90831,13.81174],[-2.88189,13.64921],[-3.26407,13.70699],[-3.28396,13.5422],[-3.23599,13.29035],[-3.43507,13.27272],[-3.4313,13.1588],[-3.54454,13.1781],[-3.7911,13.36665],[-3.96282,13.38164],[-3.90558,13.44375],[-3.96501,13.49778],[-4.34477,13.12927],[-4.21819,12.95722],[-4.238,12.71467],[-4.47356,12.71252],[-4.41412,12.31922],[-4.57703,12.19875],[-4.54841,12.1385],[-4.62546,12.13204],[-4.62987,12.06531],[-4.70692,12.06746],[-4.72893,12.01579],[-5.07897,11.97918],[-5.26389,11.84778],[-5.40258,11.8327],[-5.26389,11.75728],[-5.29251,11.61715],[-5.22867,11.60421],[-5.20665,11.43811],[-5.25509,11.36905],[-5.25949,11.24816],[-5.32553,11.21578],[-5.32994,11.13371],[-5.49284,11.07538],[-5.41579,10.84628],[-5.47083,10.75329],[-5.46643,10.56074],[-5.51058,10.43177],[-5.65135,10.46767],[-5.78124,10.43952],[-5.99478,10.19694],[-6.18851,10.24244],[-6.1731,10.46983],[-6.24795,10.74248],[-6.325,10.68624],[-6.40646,10.69922],[-6.42847,10.5694],[-6.52974,10.59104],[-6.63541,10.66893],[-6.68164,10.35074],[-6.93921,10.35291],[-7.01186,10.25111],[-6.97444,10.21644],[-7.00966,10.15794],[-7.0603,10.14711],[-7.13331,10.24877],[-7.3707,10.24677],[-7.44555,10.44602],[-7.52261,10.4655],[-7.54462,10.40921],[-7.63048,10.46334],[-7.92107,10.15577],[-7.97971,10.17117],[-7.9578,10.2703],[-8.10207,10.44649],[-8.22711,10.41722],[-8.32614,10.69273],[-8.2667,10.91762],[-8.35083,11.06234],[-8.66923,10.99397],[-8.40058,11.37466],[-8.80854,11.66715],[-8.94784,12.34842],[-9.13689,12.50875],[-9.38067,12.48446],[-9.32097,12.29009],[-9.63938,12.18312],[-9.714,12.0226],[-10.30604,12.24634],[-10.71897,11.91552],[-10.80355,12.1053],[-10.99758,12.24634],[-11.24136,12.01286],[-11.50006,12.17826],[-11.37536,12.40788],[-11.39935,12.97808],[-11.63025,13.39174],[-11.83345,13.33333],[-12.06897,13.71049],[-11.93043,13.84505],[-12.23936,14.76324],[-11.94903,14.76143],[-11.70705,15.51558],[-11.43483,15.62339],[-10.90932,15.11001],[-10.71721,15.4223],[-9.40447,15.4396],[-9.44673,15.60553],[-9.33314,15.7044],[-9.31106,15.69412],[-9.32979,15.50032],[-5.50165,15.50061],[-5.33435,16.33354],[-5.60725,16.49919],[-6.57191,25.0002],[-4.83423,24.99935]]]]}},{type:"Feature",properties:{iso1A2:"MM",iso1A3:"MMR",iso1N3:"104",wikidata:"Q836",nameEn:"Myanmar",aliases:["Burma","BU"],groups:["035","142"],callingCodes:["95"]},geometry:{type:"MultiPolygon",coordinates:[[[[92.62187,21.87037],[92.60949,21.97638],[92.67532,22.03547],[92.70416,22.16017],[92.86208,22.05456],[92.89504,21.95143],[92.93899,22.02656],[92.99804,21.98964],[92.99255,22.05965],[93.04885,22.20595],[93.15734,22.18687],[93.14224,22.24535],[93.19991,22.25425],[93.18206,22.43716],[93.13537,22.45873],[93.11477,22.54374],[93.134,22.59573],[93.09417,22.69459],[93.134,22.92498],[93.12988,23.05772],[93.2878,23.00464],[93.38478,23.13698],[93.36862,23.35426],[93.38781,23.36139],[93.39981,23.38828],[93.38805,23.4728],[93.43475,23.68299],[93.3908,23.7622],[93.3908,23.92925],[93.36059,23.93176],[93.32351,24.04468],[93.34735,24.10151],[93.41415,24.07854],[93.46633,23.97067],[93.50616,23.94432],[93.62871,24.00922],[93.75952,24.0003],[93.80279,23.92549],[93.92089,23.95812],[94.14081,23.83333],[94.30215,24.23752],[94.32362,24.27692],[94.45279,24.56656],[94.50729,24.59281],[94.5526,24.70764],[94.60204,24.70889],[94.73937,25.00545],[94.74212,25.13606],[94.57458,25.20318],[94.68032,25.47003],[94.80117,25.49359],[95.18556,26.07338],[95.11428,26.1019],[95.12801,26.38397],[95.05798,26.45408],[95.23513,26.68499],[95.30339,26.65372],[95.437,26.7083],[95.81603,27.01335],[95.93002,27.04149],[96.04949,27.19428],[96.15591,27.24572],[96.40779,27.29818],[96.55761,27.29928],[96.73888,27.36638],[96.88445,27.25046],[96.85287,27.2065],[96.89132,27.17474],[97.14675,27.09041],[97.17422,27.14052],[96.91431,27.45752],[96.90112,27.62149],[97.29919,27.92233],[97.35824,27.87256],[97.38845,28.01329],[97.35412,28.06663],[97.31292,28.06784],[97.34547,28.21385],[97.41729,28.29783],[97.47085,28.2688],[97.50518,28.49716],[97.56835,28.55628],[97.70705,28.5056],[97.79632,28.33168],[97.90069,28.3776],[98.15337,28.12114],[98.13964,27.9478],[98.32641,27.51385],[98.42529,27.55404],[98.43353,27.67086],[98.69582,27.56499],[98.7333,26.85615],[98.77547,26.61994],[98.72741,26.36183],[98.67797,26.24487],[98.7329,26.17218],[98.66884,26.09165],[98.63128,26.15492],[98.57085,26.11547],[98.60763,26.01512],[98.70818,25.86241],[98.63128,25.79937],[98.54064,25.85129],[98.40606,25.61129],[98.31268,25.55307],[98.25774,25.6051],[98.16848,25.62739],[98.18084,25.56298],[98.12591,25.50722],[98.14925,25.41547],[97.92541,25.20815],[97.83614,25.2715],[97.77023,25.11492],[97.72216,25.08508],[97.72903,24.91332],[97.79949,24.85655],[97.76481,24.8289],[97.73127,24.83015],[97.70181,24.84557],[97.64354,24.79171],[97.56648,24.76475],[97.56383,24.75535],[97.5542,24.74943],[97.54675,24.74202],[97.56525,24.72838],[97.56286,24.54535],[97.52757,24.43748],[97.60029,24.4401],[97.66998,24.45288],[97.7098,24.35658],[97.65624,24.33781],[97.66723,24.30027],[97.71941,24.29652],[97.76799,24.26365],[97.72998,24.2302],[97.72799,24.18883],[97.75305,24.16902],[97.72903,24.12606],[97.62363,24.00506],[97.5247,23.94032],[97.64667,23.84574],[97.72302,23.89288],[97.79456,23.94836],[97.79416,23.95663],[97.84328,23.97603],[97.86545,23.97723],[97.88811,23.97446],[97.8955,23.97758],[97.89676,23.97931],[97.89683,23.98389],[97.88814,23.98605],[97.88414,23.99405],[97.88616,24.00463],[97.90998,24.02094],[97.93951,24.01953],[97.98691,24.03897],[97.99583,24.04932],[98.04709,24.07616],[98.05302,24.07408],[98.05671,24.07961],[98.0607,24.07812],[98.06703,24.08028],[98.07806,24.07988],[98.20666,24.11406],[98.54476,24.13119],[98.59256,24.08371],[98.85319,24.13042],[98.87998,24.15624],[98.89632,24.10612],[98.67797,23.9644],[98.68209,23.80492],[98.79607,23.77947],[98.82933,23.72921],[98.81775,23.694],[98.88396,23.59555],[98.80294,23.5345],[98.82877,23.47908],[98.87683,23.48995],[98.92104,23.36946],[98.87573,23.33038],[98.93958,23.31414],[98.92515,23.29535],[98.88597,23.18656],[99.05975,23.16382],[99.04601,23.12215],[99.25741,23.09025],[99.34127,23.13099],[99.52214,23.08218],[99.54218,22.90014],[99.43537,22.94086],[99.45654,22.85726],[99.31243,22.73893],[99.38247,22.57544],[99.37972,22.50188],[99.28771,22.4105],[99.17318,22.18025],[99.19176,22.16983],[99.1552,22.15874],[99.33166,22.09656],[99.47585,22.13345],[99.85351,22.04183],[99.96612,22.05965],[99.99084,21.97053],[99.94003,21.82782],[99.98654,21.71064],[100.04956,21.66843],[100.12679,21.70539],[100.17486,21.65306],[100.10757,21.59945],[100.12542,21.50365],[100.1625,21.48704],[100.18447,21.51898],[100.25863,21.47043],[100.35201,21.53176],[100.42892,21.54325],[100.4811,21.46148],[100.57861,21.45637],[100.72143,21.51898],[100.87265,21.67396],[101.11744,21.77659],[101.15156,21.56129],[101.16198,21.52808],[101.00234,21.39612],[100.80173,21.2934],[100.72716,21.31786],[100.63578,21.05639],[100.55281,21.02796],[100.50974,20.88574],[100.64628,20.88279],[100.60112,20.8347],[100.51079,20.82194],[100.36375,20.82783],[100.1957,20.68247],[100.08404,20.36626],[99.95721,20.46301],[99.91616,20.44986],[99.90499,20.4487],[99.89692,20.44789],[99.89301,20.44311],[99.89168,20.44548],[99.88451,20.44596],[99.88211,20.44488],[99.86383,20.44371],[99.81096,20.33687],[99.68255,20.32077],[99.46008,20.39673],[99.46077,20.36198],[99.5569,20.20676],[99.52943,20.14811],[99.416,20.08614],[99.20328,20.12877],[99.0735,20.10298],[98.98679,19.7419],[98.83661,19.80931],[98.56065,19.67807],[98.51182,19.71303],[98.24884,19.67876],[98.13829,19.78541],[98.03314,19.80941],[98.04364,19.65755],[97.84715,19.55782],[97.88423,19.5041],[97.78769,19.39429],[97.84186,19.29526],[97.78606,19.26769],[97.84024,19.22217],[97.83479,19.09972],[97.73797,19.04261],[97.73654,18.9812],[97.66487,18.9371],[97.73836,18.88478],[97.76752,18.58097],[97.5258,18.4939],[97.36444,18.57138],[97.34522,18.54596],[97.50383,18.26844],[97.56219,18.33885],[97.64116,18.29778],[97.60841,18.23846],[97.73723,17.97912],[97.66794,17.88005],[97.76407,17.71595],[97.91829,17.54504],[98.11185,17.36829],[98.10439,17.33847],[98.34566,17.04822],[98.39441,17.06266],[98.52624,16.89979],[98.49603,16.8446],[98.53833,16.81934],[98.46994,16.73613],[98.50253,16.7139],[98.49713,16.69022],[98.51043,16.70107],[98.51579,16.69433],[98.51472,16.68521],[98.51833,16.676],[98.51113,16.64503],[98.5695,16.62826],[98.57912,16.55983],[98.63817,16.47424],[98.68074,16.27068],[98.84485,16.42354],[98.92656,16.36425],[98.8376,16.11706],[98.69585,16.13353],[98.57019,16.04578],[98.59853,15.87197],[98.541,15.65406],[98.58598,15.46821],[98.56027,15.33471],[98.4866,15.39154],[98.39351,15.34177],[98.41906,15.27103],[98.40522,15.25268],[98.30446,15.30667],[98.22,15.21327],[98.18821,15.13125],[98.24874,14.83013],[98.56762,14.37701],[98.97356,14.04868],[99.16695,13.72621],[99.20617,13.20575],[99.12225,13.19847],[99.10646,13.05804],[99.18748,12.9898],[99.18905,12.84799],[99.29254,12.68921],[99.409,12.60603],[99.47519,12.1353],[99.56445,12.14805],[99.53424,12.02317],[99.64891,11.82699],[99.64108,11.78948],[99.5672,11.62732],[99.47598,11.62434],[99.39485,11.3925],[99.31573,11.32081],[99.32756,11.28545],[99.06938,10.94857],[99.02337,10.97217],[98.99701,10.92962],[99.0069,10.85485],[98.86819,10.78336],[98.78511,10.68351],[98.77275,10.62548],[98.81944,10.52761],[98.7391,10.31488],[98.55174,9.92804],[98.52291,9.92389],[98.47298,9.95782],[98.33094,9.91973],[98.12555,9.44056],[97.63455,9.60854],[94.6371,13.81803],[92.61042,13.76986],[92.39837,20.38919],[92.4302,20.5688],[92.31348,20.57137],[92.28464,20.63179],[92.37665,20.72172],[92.26071,21.05697],[92.17752,21.17445],[92.20087,21.337],[92.37939,21.47764],[92.43158,21.37025],[92.55105,21.3856],[92.60187,21.24615],[92.68152,21.28454],[92.59775,21.6092],[92.62187,21.87037]]]]}},{type:"Feature",properties:{iso1A2:"MN",iso1A3:"MNG",iso1N3:"496",wikidata:"Q711",nameEn:"Mongolia",groups:["030","142"],callingCodes:["976"]},geometry:{type:"MultiPolygon",coordinates:[[[[102.14032,51.35566],[102.32194,50.67982],[102.71178,50.38873],[103.70343,50.13952],[105.32528,50.4648],[106.05562,50.40582],[106.07865,50.33474],[106.47156,50.31909],[106.49628,50.32436],[106.51122,50.34408],[106.58373,50.34044],[106.80326,50.30177],[107.00007,50.1977],[107.1174,50.04239],[107.36407,49.97612],[107.96116,49.93191],[107.95387,49.66659],[108.27937,49.53167],[108.53969,49.32325],[109.18017,49.34709],[109.51325,49.22859],[110.24373,49.16676],[110.39891,49.25083],[110.64493,49.1816],[113.02647,49.60772],[113.20216,49.83356],[114.325,50.28098],[114.9703,50.19254],[115.26068,49.97367],[115.73602,49.87688],[116.22402,50.04477],[116.62502,49.92919],[116.71193,49.83813],[116.03781,48.87014],[116.06565,48.81716],[115.78876,48.51781],[115.811,48.25699],[115.52082,48.15367],[115.57128,47.91988],[115.94296,47.67741],[116.08431,47.80693],[116.2527,47.87766],[116.4465,47.83662],[116.67405,47.89039],[116.87527,47.88836],[117.08918,47.82242],[117.37875,47.63627],[117.50181,47.77216],[117.80196,48.01661],[118.03676,48.00982],[118.11009,48.04],[118.22677,48.03853],[118.29654,48.00246],[118.55766,47.99277],[118.7564,47.76947],[119.12343,47.66458],[119.13995,47.53997],[119.35892,47.48104],[119.31964,47.42617],[119.54918,47.29505],[119.56019,47.24874],[119.62403,47.24575],[119.71209,47.19192],[119.85518,46.92196],[119.91242,46.90091],[119.89261,46.66423],[119.80455,46.67631],[119.77373,46.62947],[119.68127,46.59015],[119.65265,46.62342],[119.42827,46.63783],[119.37306,46.61132],[119.30261,46.6083],[119.24978,46.64761],[119.10448,46.65516],[119.00541,46.74273],[118.92616,46.72765],[118.89974,46.77139],[118.8337,46.77742],[118.78747,46.68689],[118.30534,46.73519],[117.69554,46.50991],[117.60748,46.59771],[117.41782,46.57862],[117.36609,46.36335],[117.07252,46.35818],[116.83166,46.38637],[116.75551,46.33083],[116.58612,46.30211],[116.26678,45.96479],[116.24012,45.8778],[116.27366,45.78637],[116.16989,45.68603],[115.91898,45.6227],[115.69688,45.45761],[115.35757,45.39106],[114.94546,45.37377],[114.74612,45.43585],[114.54801,45.38337],[114.5166,45.27189],[114.08071,44.92847],[113.909,44.91444],[113.63821,44.74326],[112.74662,44.86297],[112.4164,45.06858],[111.98695,45.09074],[111.76275,44.98032],[111.40498,44.3461],[111.96289,43.81596],[111.93776,43.68709],[111.79758,43.6637],[111.59087,43.51207],[111.0149,43.3289],[110.4327,42.78293],[110.08401,42.6411],[109.89402,42.63111],[109.452,42.44842],[109.00679,42.45302],[108.84489,42.40246],[108.23156,42.45532],[107.57258,42.40898],[107.49681,42.46221],[107.29755,42.41395],[107.24774,42.36107],[106.76517,42.28741],[105.24708,41.7442],[105.01119,41.58382],[104.91272,41.64619],[104.51667,41.66113],[104.52258,41.8706],[103.92804,41.78246],[103.3685,41.89696],[102.72403,42.14675],[102.42826,42.15137],[102.07645,42.22519],[101.80515,42.50074],[101.28833,42.58524],[100.84979,42.67087],[100.33297,42.68231],[99.50671,42.56535],[97.1777,42.7964],[96.37926,42.72055],[96.35658,42.90363],[95.89543,43.2528],[95.52594,43.99353],[95.32891,44.02407],[95.39772,44.2805],[95.01191,44.25274],[94.71959,44.35284],[94.10003,44.71016],[93.51161,44.95964],[91.64048,45.07408],[90.89169,45.19667],[90.65114,45.49314],[90.70907,45.73437],[91.03026,46.04194],[90.99672,46.14207],[90.89639,46.30711],[91.07696,46.57315],[91.0147,46.58171],[91.03649,46.72916],[90.84035,46.99525],[90.76108,46.99399],[90.48542,47.30438],[90.48854,47.41826],[90.33598,47.68303],[90.10871,47.7375],[90.06512,47.88177],[89.76624,47.82745],[89.55453,48.0423],[89.0711,47.98528],[88.93186,48.10263],[88.8011,48.11302],[88.58316,48.21893],[88.58939,48.34531],[87.96361,48.58478],[88.0788,48.71436],[87.73822,48.89582],[87.88171,48.95853],[87.81333,49.17354],[87.98977,49.18147],[88.15543,49.30314],[88.17223,49.46934],[88.42449,49.48821],[88.82499,49.44808],[89.70687,49.72535],[89.59711,49.90851],[91.86048,50.73734],[92.07173,50.69585],[92.44714,50.78762],[93.01109,50.79001],[92.99595,50.63183],[94.30823,50.57498],[94.39258,50.22193],[94.49477,50.17832],[94.6121,50.04239],[94.97166,50.04725],[95.02465,49.96941],[95.74757,49.97915],[95.80056,50.04239],[96.97388,49.88413],[97.24639,49.74737],[97.56811,49.84265],[97.56432,49.92801],[97.76871,49.99861],[97.85197,49.91339],[98.29481,50.33561],[98.31373,50.4996],[98.06393,50.61262],[97.9693,50.78044],[98.01472,50.86652],[97.83305,51.00248],[98.05257,51.46696],[98.22053,51.46579],[98.33222,51.71832],[98.74142,51.8637],[98.87768,52.14563],[99.27888,51.96876],[99.75578,51.90108],[99.89203,51.74903],[100.61116,51.73028],[101.39085,51.45753],[101.5044,51.50467],[102.14032,51.35566]]]]}},{type:"Feature",properties:{iso1A2:"MO",iso1A3:"MAC",iso1N3:"446",wikidata:"Q14773",nameEn:"Macau",aliases:["Macao"],country:"CN",groups:["030","142"],driveSide:"left",callingCodes:["853"]},geometry:{type:"MultiPolygon",coordinates:[[[[113.54942,22.14519],[113.54093,22.15497],[113.52659,22.18271],[113.53552,22.20607],[113.53301,22.21235],[113.53593,22.2137],[113.54093,22.21314],[113.54333,22.21688],[113.5508,22.21672],[113.56865,22.20973],[113.57123,22.20416],[113.60504,22.20464],[113.63011,22.10782],[113.57191,22.07696],[113.54839,22.10909],[113.54942,22.14519]]]]}},{type:"Feature",properties:{iso1A2:"MP",iso1A3:"MNP",iso1N3:"580",wikidata:"Q16644",nameEn:"Northern Mariana Islands",country:"US",groups:["057","009"],roadSpeedUnit:"mph",callingCodes:["1 670"]},geometry:{type:"MultiPolygon",coordinates:[[[[143.82485,13.92273],[144.18594,21.03576],[146.6755,21.00809],[146.25931,13.85876],[143.82485,13.92273]]]]}},{type:"Feature",properties:{iso1A2:"MQ",iso1A3:"MTQ",iso1N3:"474",wikidata:"Q17054",nameEn:"Martinique",country:"FR",groups:["EU","029","003","419","019"],callingCodes:["596"]},geometry:{type:"MultiPolygon",coordinates:[[[[-60.5958,14.23076],[-61.26561,14.25664],[-61.51867,14.96709],[-60.69955,15.22234],[-60.5958,14.23076]]]]}},{type:"Feature",properties:{iso1A2:"MR",iso1A3:"MRT",iso1N3:"478",wikidata:"Q1025",nameEn:"Mauritania",groups:["011","202","002"],callingCodes:["222"]},geometry:{type:"MultiPolygon",coordinates:[[[[-5.60725,16.49919],[-5.33435,16.33354],[-5.50165,15.50061],[-9.32979,15.50032],[-9.31106,15.69412],[-9.33314,15.7044],[-9.44673,15.60553],[-9.40447,15.4396],[-10.71721,15.4223],[-10.90932,15.11001],[-11.43483,15.62339],[-11.70705,15.51558],[-11.94903,14.76143],[-12.23936,14.76324],[-13.11029,15.52116],[-13.43135,16.09022],[-13.80075,16.13961],[-14.32144,16.61495],[-15.00557,16.64997],[-15.6509,16.50315],[-16.27016,16.51565],[-16.4429,16.20605],[-16.44814,16.09753],[-16.48967,16.0496],[-16.50854,16.09032],[-17.15288,16.07139],[-17.0471,20.76408],[-17.0695,20.85742],[-17.06781,20.92697],[-17.0396,20.9961],[-17.0357,21.05368],[-16.99806,21.12142],[-16.95474,21.33997],[-13.01525,21.33343],[-13.08438,22.53866],[-13.15313,22.75649],[-13.10753,22.89493],[-13.00412,23.02297],[-12.5741,23.28975],[-12.36213,23.3187],[-12.14969,23.41935],[-12.00251,23.4538],[-12.0002,25.9986],[-8.66721,25.99918],[-8.66674,27.31569],[-4.83423,24.99935],[-6.57191,25.0002],[-5.60725,16.49919]]]]}},{type:"Feature",properties:{iso1A2:"MS",iso1A3:"MSR",iso1N3:"500",wikidata:"Q13353",nameEn:"Montserrat",country:"GB",groups:["029","003","419","019"],driveSide:"left",callingCodes:["1 664"]},geometry:{type:"MultiPolygon",coordinates:[[[[-61.83929,16.66647],[-62.17275,16.35721],[-62.52079,16.69392],[-62.14123,17.02632],[-61.83929,16.66647]]]]}},{type:"Feature",properties:{iso1A2:"MT",iso1A3:"MLT",iso1N3:"470",wikidata:"Q233",nameEn:"Malta",groups:["EU","039","150"],driveSide:"left",callingCodes:["356"]},geometry:{type:"MultiPolygon",coordinates:[[[[15.70991,35.79901],[13.27636,35.20764],[14.07544,36.41525],[15.70991,35.79901]]]]}},{type:"Feature",properties:{iso1A2:"MU",iso1A3:"MUS",iso1N3:"480",wikidata:"Q1027",nameEn:"Mauritius",groups:["014","202","002"],driveSide:"left",callingCodes:["230"]},geometry:{type:"MultiPolygon",coordinates:[[[[56.73473,-21.9174],[56.09755,-9.55401],[63.47388,-9.1938],[64.11105,-21.5783],[56.73473,-21.9174]]]]}},{type:"Feature",properties:{iso1A2:"MV",iso1A3:"MDV",iso1N3:"462",wikidata:"Q826",nameEn:"Maldives",groups:["034","142"],driveSide:"left",callingCodes:["960"]},geometry:{type:"MultiPolygon",coordinates:[[[[71.27292,7.36038],[74.6203,7.39289],[73.37814,-3.88401],[71.27292,7.36038]]]]}},{type:"Feature",properties:{iso1A2:"MW",iso1A3:"MWI",iso1N3:"454",wikidata:"Q1020",nameEn:"Malawi",groups:["014","202","002"],driveSide:"left",callingCodes:["265"]},geometry:{type:"MultiPolygon",coordinates:[[[[33.48052,-9.62442],[33.76677,-9.58516],[33.93298,-9.71647],[33.9638,-9.62206],[33.95829,-9.54066],[34.03865,-9.49398],[34.54499,-10.0678],[34.51911,-10.12279],[34.57581,-10.56271],[34.65946,-10.6828],[34.67047,-10.93796],[34.61161,-11.01611],[34.63305,-11.11731],[34.79375,-11.32245],[34.91153,-11.39799],[34.96296,-11.57354],[34.64241,-11.57499],[34.57917,-11.87849],[34.82903,-12.04837],[34.70739,-12.15652],[34.46088,-12.0174],[34.37831,-12.17408],[34.60253,-13.48487],[34.86229,-13.48958],[35.47989,-14.15594],[35.5299,-14.27714],[35.86945,-14.67481],[35.87212,-14.89478],[35.91812,-14.89514],[35.78799,-15.17428],[35.85303,-15.41913],[35.80487,-16.03907],[35.70107,-16.10147],[35.52365,-16.15414],[35.43355,-16.11371],[35.30157,-16.2211],[35.25828,-16.4792],[35.14235,-16.56812],[35.27219,-16.69402],[35.30929,-16.82871],[35.27065,-16.93817],[35.3062,-17.1244],[35.0923,-17.13235],[35.04805,-17.00027],[35.17017,-16.93521],[35.13771,-16.81687],[35.04805,-16.83167],[34.40344,-16.20923],[34.43126,-16.04737],[34.25195,-15.90321],[34.44981,-15.60864],[34.43126,-15.44778],[34.57503,-15.30619],[34.61522,-14.99583],[34.567,-14.77345],[34.54503,-14.74672],[34.52057,-14.68263],[34.53516,-14.67782],[34.55112,-14.64494],[34.53962,-14.59776],[34.52366,-14.5667],[34.49636,-14.55091],[34.48932,-14.53646],[34.47628,-14.53363],[34.45053,-14.49873],[34.44641,-14.47746],[34.4192,-14.43191],[34.39277,-14.39467],[34.35843,-14.38652],[34.34453,-14.3985],[34.22355,-14.43607],[34.18733,-14.43823],[34.08588,-14.48893],[33.92898,-14.47929],[33.88503,-14.51652],[33.7247,-14.4989],[33.66677,-14.61306],[33.24249,-14.00019],[33.16749,-13.93992],[33.07568,-13.98447],[33.02977,-14.05022],[32.99042,-13.95689],[32.88985,-13.82956],[32.79015,-13.80755],[32.76962,-13.77224],[32.84528,-13.71576],[32.7828,-13.64805],[32.68654,-13.64268],[32.66468,-13.60019],[32.68436,-13.55769],[32.73683,-13.57682],[32.84176,-13.52794],[32.86113,-13.47292],[33.0078,-13.19492],[32.98289,-13.12671],[33.02181,-12.88707],[32.96733,-12.88251],[32.94397,-12.76868],[33.05917,-12.59554],[33.18837,-12.61377],[33.28177,-12.54692],[33.37517,-12.54085],[33.54485,-12.35996],[33.47636,-12.32498],[33.3705,-12.34931],[33.25998,-12.14242],[33.33937,-11.91252],[33.32692,-11.59248],[33.24252,-11.59302],[33.23663,-11.40637],[33.29267,-11.43536],[33.29267,-11.3789],[33.39697,-11.15296],[33.25998,-10.88862],[33.28022,-10.84428],[33.47636,-10.78465],[33.70675,-10.56896],[33.54797,-10.36077],[33.53863,-10.20148],[33.31297,-10.05133],[33.37902,-9.9104],[33.36581,-9.81063],[33.31517,-9.82364],[33.2095,-9.61099],[33.12144,-9.58929],[33.10163,-9.66525],[33.05485,-9.61316],[33.00256,-9.63053],[33.00476,-9.5133],[32.95389,-9.40138],[32.99397,-9.36712],[33.14925,-9.49322],[33.31581,-9.48554],[33.48052,-9.62442]]]]}},{type:"Feature",properties:{iso1A2:"MX",iso1A3:"MEX",iso1N3:"484",wikidata:"Q96",nameEn:"Mexico",groups:["013","003","419","019"],callingCodes:["52"]},geometry:{type:"MultiPolygon",coordinates:[[[[-117.1243,32.53427],[-115.88053,32.63624],[-114.71871,32.71894],[-114.76736,32.64094],[-114.80584,32.62028],[-114.81141,32.55543],[-114.79524,32.55731],[-114.82011,32.49609],[-112.34553,31.7357],[-111.07523,31.33232],[-109.05235,31.3333],[-108.20979,31.33316],[-108.20899,31.78534],[-106.529,31.784],[-106.52266,31.77509],[-106.51251,31.76922],[-106.50962,31.76155],[-106.50111,31.75714],[-106.48815,31.74769],[-106.47298,31.75054],[-106.46726,31.75998],[-106.45244,31.76523],[-106.43419,31.75478],[-106.41773,31.75196],[-106.38003,31.73151],[-106.3718,31.71165],[-106.34864,31.69663],[-106.33419,31.66303],[-106.30305,31.62154],[-106.28084,31.56173],[-106.24612,31.54193],[-106.23711,31.51262],[-106.20346,31.46305],[-106.09025,31.40569],[-106.00363,31.39181],[-104.77674,30.4236],[-104.5171,29.64671],[-104.3969,29.57105],[-104.39363,29.55396],[-104.37752,29.54255],[-103.15787,28.93865],[-102.60596,29.8192],[-101.47277,29.7744],[-101.05686,29.44738],[-101.01128,29.36947],[-100.96725,29.3477],[-100.94579,29.34523],[-100.94056,29.33371],[-100.87982,29.296],[-100.79696,29.24688],[-100.67294,29.09744],[-100.63689,28.90812],[-100.59809,28.88197],[-100.52313,28.75598],[-100.5075,28.74066],[-100.51222,28.70679],[-100.50029,28.66117],[-99.55409,27.61314],[-99.51478,27.55836],[-99.52955,27.49747],[-99.50208,27.50021],[-99.48045,27.49016],[-99.482,27.47128],[-99.49744,27.43746],[-99.53573,27.30926],[-99.08477,26.39849],[-99.03053,26.41249],[-99.00546,26.3925],[-98.35126,26.15129],[-98.30491,26.10475],[-98.27075,26.09457],[-98.24603,26.07191],[-97.97017,26.05232],[-97.95155,26.0625],[-97.66511,26.01708],[-97.52025,25.88518],[-97.49828,25.89877],[-97.45669,25.86874],[-97.42511,25.83969],[-97.37332,25.83854],[-97.35946,25.92189],[-97.13927,25.96583],[-96.92418,25.97377],[-85.9092,21.8218],[-86.92368,17.61462],[-87.84815,18.18511],[-87.85693,18.18266],[-87.86657,18.19971],[-87.87604,18.18313],[-87.90671,18.15213],[-88.03165,18.16657],[-88.03238,18.41778],[-88.26593,18.47617],[-88.29909,18.47591],[-88.3268,18.49048],[-88.48242,18.49164],[-88.71505,18.0707],[-88.8716,17.89535],[-89.03839,18.0067],[-89.15105,17.95104],[-89.14985,17.81563],[-90.98678,17.81655],[-90.99199,17.25192],[-91.43809,17.25373],[-91.04436,16.92175],[-90.69064,16.70697],[-90.61212,16.49832],[-90.40499,16.40524],[-90.44567,16.07573],[-91.73182,16.07371],[-92.20983,15.26077],[-92.0621,15.07406],[-92.1454,14.98143],[-92.1423,14.88647],[-92.18161,14.84147],[-92.1454,14.6804],[-92.2261,14.53423],[-92.37213,14.39277],[-120.12904,18.41089],[-118.48109,32.5991],[-117.1243,32.53427]]]]}},{type:"Feature",properties:{iso1A2:"MY",iso1A3:"MYS",iso1N3:"458",wikidata:"Q833",nameEn:"Malaysia",groups:["035","142"],driveSide:"left",callingCodes:["60"]},geometry:{type:"MultiPolygon",coordinates:[[[[114.08532,4.64632],[114.07448,4.58441],[114.15813,4.57],[114.26876,4.49878],[114.32176,4.34942],[114.32176,4.2552],[114.4416,4.27588],[114.49922,4.13108],[114.64211,4.00694],[114.78539,4.12205],[114.88039,4.4257],[114.83189,4.42387],[114.77303,4.72871],[114.8266,4.75062],[114.88841,4.81905],[114.96982,4.81146],[114.99417,4.88201],[115.05038,4.90275],[115.02955,4.82087],[115.02278,4.74137],[115.04064,4.63706],[115.07737,4.53418],[115.09978,4.39123],[115.31275,4.30806],[115.36346,4.33563],[115.2851,4.42295],[115.27819,4.63661],[115.20737,4.8256],[115.15092,4.87604],[115.16236,5.01011],[115.02521,5.35005],[116.79524,7.43869],[117.17735,7.52841],[117.43832,7.3895],[117.89159,6.25755],[119.34756,5.53889],[119.44841,5.09568],[118.75416,4.59798],[118.8663,4.44172],[118.07935,4.15511],[117.89538,4.16637],[117.67641,4.16535],[117.47313,4.18857],[117.25801,4.35108],[115.90217,4.37708],[115.58276,3.93499],[115.53713,3.14776],[115.11343,2.82879],[115.1721,2.49671],[114.80706,2.21665],[114.80706,1.92351],[114.57892,1.5],[114.03788,1.44787],[113.64677,1.23933],[113.01448,1.42832],[113.021,1.57819],[112.48648,1.56516],[112.2127,1.44135],[112.15679,1.17004],[111.94553,1.12016],[111.82846,0.99349],[111.55434,0.97864],[111.22979,1.08326],[110.62374,0.873],[110.49182,0.88088],[110.35354,0.98869],[109.66397,1.60425],[109.66397,1.79972],[109.57923,1.80624],[109.53794,1.91771],[109.62558,1.99182],[109.64506,2.08014],[109.71058,2.32059],[108.10426,5.42408],[105.01437,3.24936],[104.56723,1.44271],[104.34728,1.33529],[104.12282,1.27714],[104.08072,1.35998],[104.09162,1.39694],[104.08871,1.42015],[104.07348,1.43322],[104.04622,1.44691],[104.02277,1.4438],[104.00131,1.42405],[103.93384,1.42926],[103.89565,1.42841],[103.86383,1.46288],[103.81181,1.47953],[103.76395,1.45183],[103.74161,1.4502],[103.7219,1.46108],[103.67468,1.43166],[103.62738,1.35255],[103.56591,1.19719],[103.03657,1.30383],[99.75778,3.86466],[99.31854,5.99868],[99.50117,6.44501],[99.91873,6.50233],[100.0756,6.4045],[100.12,6.42105],[100.19511,6.72559],[100.29651,6.68439],[100.30828,6.66462],[100.31618,6.66781],[100.31884,6.66423],[100.32671,6.66526],[100.32607,6.65933],[100.31929,6.65413],[100.35413,6.54932],[100.41152,6.52299],[100.41791,6.5189],[100.42351,6.51762],[100.43027,6.52389],[100.66986,6.45086],[100.74361,6.50811],[100.74822,6.46231],[100.81045,6.45086],[100.85884,6.24929],[101.10313,6.25617],[101.12618,6.19431],[101.06165,6.14161],[101.12388,6.11411],[101.087,5.9193],[101.02708,5.91013],[100.98815,5.79464],[101.14062,5.61613],[101.25755,5.71065],[101.25524,5.78633],[101.58019,5.93534],[101.69773,5.75881],[101.75074,5.79091],[101.80144,5.74505],[101.89188,5.8386],[101.91776,5.84269],[101.92819,5.85511],[101.94712,5.98421],[101.9714,6.00575],[101.97114,6.01992],[101.99209,6.04075],[102.01835,6.05407],[102.09182,6.14161],[102.07732,6.193],[102.08127,6.22679],[102.09086,6.23546],[102.46318,7.22462],[104.81582,8.03101],[109.55486,8.10026],[114.08532,4.64632]]]]}},{type:"Feature",properties:{iso1A2:"MZ",iso1A3:"MOZ",iso1N3:"508",wikidata:"Q1029",nameEn:"Mozambique",groups:["014","202","002"],driveSide:"left",callingCodes:["258"]},geometry:{type:"MultiPolygon",coordinates:[[[[40.74206,-10.25691],[42.99868,-12.65261],[34.51034,-26.91792],[32.35222,-26.86027],[32.29584,-26.852],[32.22302,-26.84136],[32.19409,-26.84032],[32.13315,-26.84345],[32.13409,-26.5317],[32.07352,-26.40185],[32.10435,-26.15656],[32.08599,-26.00978],[32.00916,-25.999],[31.974,-25.95387],[31.92649,-25.84216],[32.00631,-25.65044],[31.97875,-25.46356],[32.01676,-25.38117],[32.03196,-25.10785],[31.9835,-24.29983],[31.90368,-24.18892],[31.87707,-23.95293],[31.77445,-23.90082],[31.70223,-23.72695],[31.67942,-23.60858],[31.56539,-23.47268],[31.55779,-23.176],[31.30611,-22.422],[31.38336,-22.36919],[32.41234,-21.31246],[32.48236,-21.32873],[32.37115,-21.133],[32.51644,-20.91929],[32.48122,-20.63319],[32.55167,-20.56312],[32.66174,-20.56106],[32.85987,-20.27841],[32.85987,-20.16686],[32.93032,-20.03868],[33.01178,-20.02007],[33.06461,-19.77787],[32.95013,-19.67219],[32.84666,-19.68462],[32.84446,-19.48343],[32.78282,-19.47513],[32.77966,-19.36098],[32.85107,-19.29238],[32.87088,-19.09279],[32.84006,-19.0262],[32.72118,-19.02204],[32.69917,-18.94293],[32.73439,-18.92628],[32.70137,-18.84712],[32.82465,-18.77419],[32.9017,-18.7992],[32.95013,-18.69079],[32.88629,-18.58023],[32.88629,-18.51344],[33.02278,-18.4696],[33.03159,-18.35054],[32.94133,-17.99705],[33.0492,-17.60298],[32.98536,-17.55891],[32.96554,-17.48964],[33.0426,-17.3468],[33.00517,-17.30477],[32.96554,-17.11971],[32.84113,-16.92259],[32.91051,-16.89446],[32.97655,-16.70689],[32.78943,-16.70267],[32.69917,-16.66893],[32.71017,-16.59932],[32.42838,-16.4727],[32.28529,-16.43892],[32.02772,-16.43892],[31.91324,-16.41569],[31.90223,-16.34388],[31.67988,-16.19595],[31.42451,-16.15154],[31.30563,-16.01193],[31.13171,-15.98019],[30.97761,-16.05848],[30.91597,-15.99924],[30.42568,-15.9962],[30.41902,-15.62269],[30.22098,-14.99447],[33.24249,-14.00019],[33.66677,-14.61306],[33.7247,-14.4989],[33.88503,-14.51652],[33.92898,-14.47929],[34.08588,-14.48893],[34.18733,-14.43823],[34.22355,-14.43607],[34.34453,-14.3985],[34.35843,-14.38652],[34.39277,-14.39467],[34.4192,-14.43191],[34.44641,-14.47746],[34.45053,-14.49873],[34.47628,-14.53363],[34.48932,-14.53646],[34.49636,-14.55091],[34.52366,-14.5667],[34.53962,-14.59776],[34.55112,-14.64494],[34.53516,-14.67782],[34.52057,-14.68263],[34.54503,-14.74672],[34.567,-14.77345],[34.61522,-14.99583],[34.57503,-15.30619],[34.43126,-15.44778],[34.44981,-15.60864],[34.25195,-15.90321],[34.43126,-16.04737],[34.40344,-16.20923],[35.04805,-16.83167],[35.13771,-16.81687],[35.17017,-16.93521],[35.04805,-17.00027],[35.0923,-17.13235],[35.3062,-17.1244],[35.27065,-16.93817],[35.30929,-16.82871],[35.27219,-16.69402],[35.14235,-16.56812],[35.25828,-16.4792],[35.30157,-16.2211],[35.43355,-16.11371],[35.52365,-16.15414],[35.70107,-16.10147],[35.80487,-16.03907],[35.85303,-15.41913],[35.78799,-15.17428],[35.91812,-14.89514],[35.87212,-14.89478],[35.86945,-14.67481],[35.5299,-14.27714],[35.47989,-14.15594],[34.86229,-13.48958],[34.60253,-13.48487],[34.37831,-12.17408],[34.46088,-12.0174],[34.70739,-12.15652],[34.82903,-12.04837],[34.57917,-11.87849],[34.64241,-11.57499],[34.96296,-11.57354],[35.63599,-11.55927],[35.82767,-11.41081],[36.19094,-11.57593],[36.19094,-11.70008],[36.62068,-11.72884],[36.80309,-11.56836],[37.3936,-11.68949],[37.76614,-11.53352],[37.8388,-11.3123],[37.93618,-11.26228],[38.21598,-11.27289],[38.47258,-11.4199],[38.88996,-11.16978],[39.24395,-11.17433],[39.58249,-10.96043],[40.00295,-10.80255],[40.44265,-10.4618],[40.74206,-10.25691]]]]}},{type:"Feature",properties:{iso1A2:"NA",iso1A3:"NAM",iso1N3:"516",wikidata:"Q1030",nameEn:"Namibia",groups:["018","202","002"],driveSide:"left",callingCodes:["264"]},geometry:{type:"MultiPolygon",coordinates:[[[[14.28743,-17.38814],[18.39229,-17.38927],[18.84226,-17.80375],[21.14283,-17.94318],[21.42741,-18.02787],[23.47474,-17.62877],[24.23619,-17.47489],[24.32811,-17.49082],[24.38712,-17.46818],[24.5621,-17.52963],[24.70864,-17.49501],[25.00198,-17.58221],[25.26433,-17.79571],[25.16882,-17.78253],[25.05895,-17.84452],[24.95586,-17.79674],[24.73364,-17.89338],[24.71887,-17.9218],[24.6303,-17.9863],[24.57485,-18.07151],[24.40577,-17.95726],[24.19416,-18.01919],[23.61088,-18.4881],[23.29618,-17.99855],[23.0996,-18.00075],[21.45556,-18.31795],[20.99904,-18.31743],[20.99751,-22.00026],[19.99912,-21.99991],[19.99817,-24.76768],[19.99882,-28.42622],[18.99885,-28.89165],[17.4579,-28.68718],[17.15405,-28.08573],[16.90446,-28.057],[16.59922,-28.53246],[16.46592,-28.57126],[16.45332,-28.63117],[12.51595,-32.27486],[10.5065,-17.25284],[11.75063,-17.25013],[12.07076,-17.15165],[12.52111,-17.24495],[12.97145,-16.98567],[13.36212,-16.98048],[13.95896,-17.43141],[14.28743,-17.38814]]]]}},{type:"Feature",properties:{iso1A2:"NC",iso1A3:"NCL",iso1N3:"540",wikidata:"Q33788",nameEn:"New Caledonia",country:"FR",groups:["054","009"],callingCodes:["687"]},geometry:{type:"MultiPolygon",coordinates:[[[[158.65519,-23.4036],[157.83842,-18.82563],[162.93363,-17.28904],[174.90025,-23.53966],[158.65519,-23.4036]]]]}},{type:"Feature",properties:{iso1A2:"NE",iso1A3:"NER",iso1N3:"562",wikidata:"Q1032",nameEn:"Niger",aliases:["RN"],groups:["011","202","002"],callingCodes:["227"]},geometry:{type:"MultiPolygon",coordinates:[[[[14.22918,22.61719],[14.99751,23.00539],[15.19692,21.99339],[15.20213,21.49365],[15.28332,21.44557],[15.62515,20.95395],[15.57248,20.92138],[15.55382,20.86507],[15.56004,20.79488],[15.59841,20.74039],[15.6721,20.70069],[15.99632,20.35364],[15.75098,19.93002],[15.6032,18.77402],[15.50373,16.89649],[14.37425,15.72591],[13.86301,15.04043],[13.78991,14.87519],[13.809,14.72915],[13.67878,14.64013],[13.68573,14.55276],[13.48259,14.46704],[13.47559,14.40881],[13.6302,13.71094],[13.33213,13.71195],[13.19844,13.52802],[13.05085,13.53984],[12.87376,13.48919],[12.6793,13.29157],[12.58033,13.27805],[12.47095,13.06673],[12.19315,13.12423],[12.16189,13.10056],[12.04209,13.14452],[11.88236,13.2527],[11.4535,13.37773],[10.66004,13.36422],[10.46731,13.28819],[10.19993,13.27129],[10.00373,13.18171],[9.65995,12.80614],[8.97413,12.83661],[8.64251,12.93985],[8.60431,13.01768],[8.49493,13.07519],[8.41853,13.06166],[8.25185,13.20369],[8.07997,13.30847],[7.81085,13.34902],[7.39241,13.09717],[7.22399,13.1293],[7.12676,13.02445],[7.0521,13.00076],[6.94445,12.99825],[6.69617,13.34057],[6.43053,13.6006],[6.27411,13.67835],[6.15771,13.64564],[5.52957,13.8845],[5.35437,13.83567],[5.27797,13.75474],[5.21026,13.73627],[5.07396,13.75052],[4.9368,13.7345],[4.87425,13.78],[4.4668,13.68286],[4.23456,13.47725],[4.14186,13.47586],[4.14367,13.17189],[4.10006,12.98862],[3.94339,12.74979],[3.65111,12.52223],[3.66364,12.25884],[3.63136,12.11826],[3.67775,11.97599],[3.61955,11.91847],[3.63063,11.83042],[3.67122,11.80865],[3.67988,11.75429],[3.61075,11.69181],[3.59375,11.70269],[3.48187,11.86092],[3.31613,11.88495],[3.25352,12.01467],[2.83978,12.40585],[2.6593,12.30631],[2.37783,12.24804],[2.39657,12.10952],[2.45824,11.98672],[2.39723,11.89473],[2.05785,12.35539],[2.26349,12.41915],[0.99167,13.10727],[0.99253,13.37515],[1.18873,13.31771],[1.21217,13.37853],[1.24516,13.33968],[1.28509,13.35488],[1.24429,13.39373],[1.20088,13.38951],[1.02813,13.46635],[0.99514,13.5668],[0.77637,13.64442],[0.77377,13.6866],[0.61924,13.68491],[0.38051,14.05575],[0.16936,14.51654],[0.23859,15.00135],[0.72632,14.95898],[0.96711,14.98275],[1.31275,15.27978],[3.01806,15.34571],[3.03134,15.42221],[3.50368,15.35934],[4.19893,16.39923],[4.21787,17.00118],[4.26762,17.00432],[4.26651,19.14224],[5.8153,19.45101],[7.38361,20.79165],[7.48273,20.87258],[11.96886,23.51735],[13.5631,23.16574],[14.22918,22.61719]]]]}},{type:"Feature",properties:{iso1A2:"NF",iso1A3:"NFK",iso1N3:"574",wikidata:"Q31057",nameEn:"Norfolk Island",country:"AU",groups:["053","009"],driveSide:"left",callingCodes:["672 3"]},geometry:{type:"MultiPolygon",coordinates:[[[[169.82316,-28.16667],[167.94076,-30.60745],[166.29505,-28.29175],[169.82316,-28.16667]]]]}},{type:"Feature",properties:{iso1A2:"NG",iso1A3:"NGA",iso1N3:"566",wikidata:"Q1033",nameEn:"Nigeria",groups:["011","202","002"],callingCodes:["234"]},geometry:{type:"MultiPolygon",coordinates:[[[[6.15771,13.64564],[6.27411,13.67835],[6.43053,13.6006],[6.69617,13.34057],[6.94445,12.99825],[7.0521,13.00076],[7.12676,13.02445],[7.22399,13.1293],[7.39241,13.09717],[7.81085,13.34902],[8.07997,13.30847],[8.25185,13.20369],[8.41853,13.06166],[8.49493,13.07519],[8.60431,13.01768],[8.64251,12.93985],[8.97413,12.83661],[9.65995,12.80614],[10.00373,13.18171],[10.19993,13.27129],[10.46731,13.28819],[10.66004,13.36422],[11.4535,13.37773],[11.88236,13.2527],[12.04209,13.14452],[12.16189,13.10056],[12.19315,13.12423],[12.47095,13.06673],[12.58033,13.27805],[12.6793,13.29157],[12.87376,13.48919],[13.05085,13.53984],[13.19844,13.52802],[13.33213,13.71195],[13.6302,13.71094],[14.08251,13.0797],[14.20204,12.53405],[14.17523,12.41916],[14.22215,12.36533],[14.4843,12.35223],[14.6474,12.17466],[14.61612,11.7798],[14.55207,11.72001],[14.64591,11.66166],[14.6124,11.51283],[14.17821,11.23831],[13.97489,11.30258],[13.78945,11.00154],[13.7403,11.00593],[13.70753,10.94451],[13.73434,10.9255],[13.54964,10.61236],[13.5705,10.53183],[13.43644,10.13326],[13.34111,10.12299],[13.25025,10.03647],[13.25323,10.00127],[13.286,9.9822],[13.27409,9.93232],[13.24132,9.91031],[13.25025,9.86042],[13.29941,9.8296],[13.25472,9.76795],[13.22642,9.57266],[13.02385,9.49334],[12.85628,9.36698],[12.91958,9.33905],[12.90022,9.11411],[12.81085,8.91992],[12.79,8.75361],[12.71701,8.7595],[12.68722,8.65938],[12.44146,8.6152],[12.4489,8.52536],[12.26123,8.43696],[12.24782,8.17904],[12.19271,8.10826],[12.20909,7.97553],[11.99908,7.67302],[12.01844,7.52981],[11.93205,7.47812],[11.84864,7.26098],[11.87396,7.09398],[11.63117,6.9905],[11.55818,6.86186],[11.57755,6.74059],[11.51499,6.60892],[11.42264,6.5882],[11.42041,6.53789],[11.09495,6.51717],[11.09644,6.68437],[10.94302,6.69325],[10.8179,6.83377],[10.83727,6.9358],[10.60789,7.06885],[10.59746,7.14719],[10.57214,7.16345],[10.53639,6.93432],[10.21466,6.88996],[10.15135,7.03781],[9.86314,6.77756],[9.77824,6.79088],[9.70674,6.51717],[9.51757,6.43874],[8.84209,5.82562],[8.88156,5.78857],[8.83687,5.68483],[8.92029,5.58403],[8.78027,5.1243],[8.60302,4.87353],[8.34397,4.30689],[5.87055,3.78489],[2.74181,6.13349],[2.70566,6.38038],[2.70464,6.50831],[2.74334,6.57291],[2.7325,6.64057],[2.78204,6.70514],[2.78823,6.76356],[2.73405,6.78508],[2.74024,6.92802],[2.71702,6.95722],[2.76965,7.13543],[2.74489,7.42565],[2.79442,7.43486],[2.78668,7.5116],[2.73405,7.5423],[2.73095,7.7755],[2.67523,7.87825],[2.77907,9.06924],[3.08017,9.10006],[3.14147,9.28375],[3.13928,9.47167],[3.25093,9.61632],[3.34726,9.70696],[3.32099,9.78032],[3.35383,9.83641],[3.54429,9.87739],[3.66908,10.18136],[3.57275,10.27185],[3.6844,10.46351],[3.78292,10.40538],[3.84243,10.59316],[3.71505,11.13015],[3.49175,11.29765],[3.59375,11.70269],[3.61075,11.69181],[3.67988,11.75429],[3.67122,11.80865],[3.63063,11.83042],[3.61955,11.91847],[3.67775,11.97599],[3.63136,12.11826],[3.66364,12.25884],[3.65111,12.52223],[3.94339,12.74979],[4.10006,12.98862],[4.14367,13.17189],[4.14186,13.47586],[4.23456,13.47725],[4.4668,13.68286],[4.87425,13.78],[4.9368,13.7345],[5.07396,13.75052],[5.21026,13.73627],[5.27797,13.75474],[5.35437,13.83567],[5.52957,13.8845],[6.15771,13.64564]]]]}},{type:"Feature",properties:{iso1A2:"NI",iso1A3:"NIC",iso1N3:"558",wikidata:"Q811",nameEn:"Nicaragua",groups:["013","003","419","019"],callingCodes:["505"]},geometry:{type:"MultiPolygon",coordinates:[[[[-83.13724,15.00002],[-83.04763,15.03256],[-82.06974,14.49418],[-82.56142,11.91792],[-83.68276,11.01562],[-83.66597,10.79916],[-83.90838,10.71161],[-84.68197,11.07568],[-84.92439,10.9497],[-85.60529,11.22607],[-85.71223,11.06868],[-86.14524,11.09059],[-88.11443,12.63306],[-87.7346,13.13228],[-87.55124,13.12523],[-87.37107,12.98646],[-87.06306,13.00892],[-87.03785,12.98682],[-86.93197,13.05313],[-86.93383,13.18677],[-86.87066,13.30641],[-86.71267,13.30348],[-86.76812,13.79605],[-86.35219,13.77157],[-86.14801,14.04317],[-86.00685,14.08474],[-86.03458,13.99181],[-85.75477,13.8499],[-85.73964,13.9698],[-85.45762,14.11304],[-85.32149,14.2562],[-85.18602,14.24929],[-85.1575,14.53934],[-84.90082,14.80489],[-84.82596,14.82212],[-84.70119,14.68078],[-84.48373,14.63249],[-84.10584,14.76353],[-83.89551,14.76697],[-83.62101,14.89448],[-83.49268,15.01158],[-83.13724,15.00002]]]]}},{type:"Feature",properties:{iso1A2:"NL",iso1A3:"NLD",iso1N3:"528",wikidata:"Q55",nameEn:"Netherlands",groups:["EU","155","150"],callingCodes:["31"]},geometry:{type:"MultiPolygon",coordinates:[[[[5.45168,54.20039],[6.91025,53.44221],[7.00198,53.32672],[7.19052,53.31866],[7.21679,53.20058],[7.22681,53.18165],[7.17898,53.13817],[7.21694,53.00742],[7.07253,52.81083],[7.04557,52.63318],[6.77307,52.65375],[6.71641,52.62905],[6.69507,52.488],[6.94293,52.43597],[6.99041,52.47235],[7.03417,52.40237],[7.07044,52.37805],[7.02703,52.27941],[7.06365,52.23789],[7.03729,52.22695],[6.9897,52.2271],[6.97189,52.20329],[6.83984,52.11728],[6.76117,52.11895],[6.68128,52.05052],[6.83035,51.9905],[6.82357,51.96711],[6.72319,51.89518],[6.68386,51.91861],[6.58556,51.89386],[6.50231,51.86313],[6.47179,51.85395],[6.38815,51.87257],[6.40704,51.82771],[6.30593,51.84998],[6.29872,51.86801],[6.21443,51.86801],[6.15349,51.90439],[6.11551,51.89769],[6.16902,51.84094],[6.10337,51.84829],[6.06705,51.86136],[5.99848,51.83195],[5.94568,51.82786],[5.98665,51.76944],[5.95003,51.7493],[6.04091,51.71821],[6.02767,51.6742],[6.11759,51.65609],[6.09055,51.60564],[6.18017,51.54096],[6.21724,51.48568],[6.20654,51.40049],[6.22641,51.39948],[6.22674,51.36135],[6.16977,51.33169],[6.07889,51.24432],[6.07889,51.17038],[6.17384,51.19589],[6.16706,51.15677],[5.98292,51.07469],[5.9541,51.03496],[5.9134,51.06736],[5.86735,51.05182],[5.87849,51.01969],[5.90493,51.00198],[5.90296,50.97356],[5.95282,50.98728],[6.02697,50.98303],[6.01615,50.93367],[6.09297,50.92066],[6.07486,50.89307],[6.08805,50.87223],[6.07693,50.86025],[6.07431,50.84674],[6.05702,50.85179],[6.05623,50.8572],[6.01921,50.84435],[6.02328,50.81694],[6.00462,50.80065],[5.98404,50.80988],[5.97497,50.79992],[6.02624,50.77453],[6.01976,50.75398],[5.97545,50.75441],[5.95942,50.7622],[5.89132,50.75124],[5.89129,50.75125],[5.88734,50.77092],[5.84888,50.75448],[5.84548,50.76542],[5.80673,50.7558],[5.77513,50.78308],[5.76533,50.78159],[5.74356,50.7691],[5.73904,50.75674],[5.72216,50.76398],[5.69469,50.75529],[5.68091,50.75804],[5.70107,50.7827],[5.68995,50.79641],[5.70118,50.80764],[5.65259,50.82309],[5.64009,50.84742],[5.64504,50.87107],[5.67886,50.88142],[5.69858,50.91046],[5.71626,50.90796],[5.72644,50.91167],[5.72545,50.92312],[5.74644,50.94723],[5.75927,50.95601],[5.74752,50.96202],[5.72875,50.95428],[5.71864,50.96092],[5.76242,50.99703],[5.77688,51.02483],[5.75961,51.03113],[5.77258,51.06196],[5.79835,51.05834],[5.79903,51.09371],[5.82921,51.09328],[5.83226,51.10585],[5.8109,51.10861],[5.80798,51.11661],[5.85508,51.14445],[5.82564,51.16753],[5.77697,51.1522],[5.77735,51.17845],[5.74617,51.18928],[5.70344,51.1829],[5.65528,51.18736],[5.65145,51.19788],[5.5603,51.22249],[5.5569,51.26544],[5.515,51.29462],[5.48476,51.30053],[5.46519,51.2849],[5.4407,51.28169],[5.41672,51.26248],[5.347,51.27502],[5.33886,51.26314],[5.29716,51.26104],[5.26461,51.26693],[5.23814,51.26064],[5.22542,51.26888],[5.24244,51.30495],[5.2002,51.32243],[5.16222,51.31035],[5.13377,51.31592],[5.13105,51.34791],[5.07102,51.39469],[5.10456,51.43163],[5.07891,51.4715],[5.04774,51.47022],[5.03281,51.48679],[5.0106,51.47167],[5.00393,51.44406],[4.92152,51.39487],[4.90016,51.41404],[4.84988,51.41502],[4.78941,51.41102],[4.77229,51.41337],[4.76577,51.43046],[4.78314,51.43319],[4.82946,51.4213],[4.82409,51.44736],[4.84139,51.4799],[4.78803,51.50284],[4.77321,51.50529],[4.74578,51.48937],[4.72935,51.48424],[4.65442,51.42352],[4.57489,51.4324],[4.53521,51.4243],[4.52846,51.45002],[4.54675,51.47265],[4.5388,51.48184],[4.47736,51.4778],[4.38122,51.44905],[4.39747,51.43316],[4.38064,51.41965],[4.43777,51.36989],[4.39292,51.35547],[4.34086,51.35738],[4.33265,51.37687],[4.21923,51.37443],[4.24024,51.35371],[4.16721,51.29348],[4.05165,51.24171],[4.01957,51.24504],[3.97889,51.22537],[3.90125,51.20371],[3.78783,51.2151],[3.78999,51.25766],[3.58939,51.30064],[3.51502,51.28697],[3.52698,51.2458],[3.43488,51.24135],[3.41704,51.25933],[3.38289,51.27331],[3.35847,51.31572],[3.38696,51.33436],[3.36263,51.37112],[2.56575,51.85301],[5.45168,54.20039]],[[4.93295,51.44945],[4.93909,51.44632],[4.9524,51.45014],[4.95244,51.45207],[4.93295,51.44945]],[[4.91493,51.4353],[4.92652,51.43329],[4.92952,51.42984],[4.93986,51.43064],[4.94265,51.44003],[4.93471,51.43861],[4.93416,51.44185],[4.94025,51.44193],[4.93544,51.44634],[4.92879,51.44161],[4.92815,51.43856],[4.92566,51.44273],[4.92811,51.4437],[4.92287,51.44741],[4.91811,51.44621],[4.92227,51.44252],[4.91935,51.43634],[4.91493,51.4353]]]]}},{type:"Feature",properties:{iso1A2:"NO",iso1A3:"NOR",iso1N3:"578",wikidata:"Q20",nameEn:"Norway",groups:["154","150"],callingCodes:["47"]},geometry:{type:"MultiPolygon",coordinates:[[[[10.40861,58.38489],[7.28637,57.35913],[-0.3751,61.32236],[18.46509,71.28681],[32.07813,72.01005],[31.59909,70.16571],[30.84095,69.80584],[30.95011,69.54699],[30.52662,69.54699],[30.16363,69.65244],[29.97205,69.41623],[29.27631,69.2811],[29.26623,69.13794],[29.0444,69.0119],[28.91738,69.04774],[28.81248,69.11997],[28.8629,69.22395],[29.31664,69.47994],[29.12697,69.69193],[28.36883,69.81658],[28.32849,69.88605],[27.97558,69.99671],[27.95542,70.0965],[27.57226,70.06215],[27.05802,69.92069],[26.64461,69.96565],[26.40261,69.91377],[25.96904,69.68397],[25.69679,69.27039],[25.75729,68.99383],[25.61613,68.89602],[25.42455,68.90328],[25.12206,68.78684],[25.10189,68.63307],[24.93048,68.61102],[24.90023,68.55579],[24.74898,68.65143],[24.18432,68.73936],[24.02299,68.81601],[23.781,68.84514],[23.68017,68.70276],[23.13064,68.64684],[22.53321,68.74393],[22.38367,68.71561],[22.27276,68.89514],[21.63833,69.27485],[21.27827,69.31281],[21.00732,69.22755],[20.98641,69.18809],[21.11099,69.10291],[21.05775,69.0356],[20.72171,69.11874],[20.55258,69.06069],[20.0695,69.04469],[20.28444,68.93283],[20.33435,68.80174],[20.22027,68.67246],[19.95647,68.55546],[20.22027,68.48759],[19.93508,68.35911],[18.97255,68.52416],[18.63032,68.50849],[18.39503,68.58672],[18.1241,68.53721],[18.13836,68.20874],[17.90787,67.96537],[17.30416,68.11591],[16.7409,67.91037],[16.38441,67.52923],[16.12774,67.52106],[16.09922,67.4364],[16.39154,67.21653],[16.35589,67.06419],[15.37197,66.48217],[15.49318,66.28509],[15.05113,66.15572],[14.53778,66.12399],[14.50926,65.31786],[13.64276,64.58402],[14.11117,64.46674],[14.16051,64.18725],[13.98222,64.00953],[13.23411,64.09087],[12.74105,64.02171],[12.14928,63.59373],[12.19919,63.47935],[11.98529,63.27487],[12.19919,63.00104],[12.07085,62.6297],[12.29187,62.25699],[12.14746,61.7147],[12.40595,61.57226],[12.57707,61.56547],[12.86939,61.35427],[12.69115,61.06584],[12.2277,61.02442],[12.59133,60.50559],[12.52003,60.13846],[12.36317,59.99259],[12.15641,59.8926],[11.87121,59.86039],[11.92112,59.69531],[11.69297,59.59442],[11.8213,59.24985],[11.65732,58.90177],[11.45199,58.89604],[11.4601,58.99022],[11.34459,59.11672],[11.15367,59.07862],[11.08911,58.98745],[10.64958,58.89391],[10.40861,58.38489]]]]}},{type:"Feature",properties:{iso1A2:"NP",iso1A3:"NPL",iso1N3:"524",wikidata:"Q837",nameEn:"Nepal",groups:["034","142"],driveSide:"left",callingCodes:["977"]},geometry:{type:"MultiPolygon",coordinates:[[[[88.13378,27.88015],[88.1973,27.85067],[88.19107,27.79285],[88.04008,27.49223],[88.07277,27.43007],[88.01646,27.21612],[88.01587,27.21388],[87.9887,27.11045],[88.11719,26.98758],[88.13422,26.98705],[88.12302,26.95324],[88.19107,26.75516],[88.1659,26.68177],[88.16452,26.64111],[88.09963,26.54195],[88.09414,26.43732],[88.00895,26.36029],[87.90115,26.44923],[87.89085,26.48565],[87.84193,26.43663],[87.7918,26.46737],[87.76004,26.40711],[87.67893,26.43501],[87.66803,26.40294],[87.59175,26.38342],[87.55274,26.40596],[87.51571,26.43106],[87.46566,26.44058],[87.37314,26.40815],[87.34568,26.34787],[87.26568,26.37294],[87.26587,26.40592],[87.24682,26.4143],[87.18863,26.40558],[87.14751,26.40542],[87.09147,26.45039],[87.0707,26.58571],[87.04691,26.58685],[87.01559,26.53228],[86.95912,26.52076],[86.94543,26.52076],[86.82898,26.43919],[86.76797,26.45892],[86.74025,26.42386],[86.69124,26.45169],[86.62686,26.46891],[86.61313,26.48658],[86.57073,26.49825],[86.54258,26.53819],[86.49726,26.54218],[86.31564,26.61925],[86.26235,26.61886],[86.22513,26.58863],[86.13596,26.60651],[86.02729,26.66756],[85.8492,26.56667],[85.85126,26.60866],[85.83126,26.61134],[85.76907,26.63076],[85.72315,26.67471],[85.73483,26.79613],[85.66239,26.84822],[85.61621,26.86721],[85.59461,26.85161],[85.5757,26.85955],[85.56471,26.84133],[85.47752,26.79292],[85.34302,26.74954],[85.21159,26.75933],[85.18046,26.80519],[85.19291,26.86909],[85.15883,26.86966],[85.02635,26.85381],[85.05592,26.88991],[85.00536,26.89523],[84.97186,26.9149],[84.96687,26.95599],[84.85754,26.98984],[84.82913,27.01989],[84.793,26.9968],[84.64496,27.04669],[84.69166,27.21294],[84.62161,27.33885],[84.29315,27.39],[84.25735,27.44941],[84.21376,27.45218],[84.10791,27.52399],[84.02229,27.43836],[83.93306,27.44939],[83.86182,27.4241],[83.85595,27.35797],[83.61288,27.47013],[83.39495,27.4798],[83.38872,27.39276],[83.35136,27.33885],[83.29999,27.32778],[83.2673,27.36235],[83.27197,27.38309],[83.19413,27.45632],[82.94938,27.46036],[82.93261,27.50328],[82.74119,27.49838],[82.70378,27.72122],[82.46405,27.6716],[82.06554,27.92222],[81.97214,27.93322],[81.91223,27.84995],[81.47867,28.08303],[81.48179,28.12148],[81.38683,28.17638],[81.32923,28.13521],[81.19847,28.36284],[81.08507,28.38346],[80.89648,28.47237],[80.55142,28.69182],[80.50575,28.6706],[80.52443,28.54897],[80.44504,28.63098],[80.37188,28.63371],[80.12125,28.82346],[80.06957,28.82763],[80.05743,28.91479],[80.18085,29.13649],[80.23178,29.11626],[80.26602,29.13938],[80.24112,29.21414],[80.28626,29.20327],[80.31428,29.30784],[80.24322,29.44299],[80.37939,29.57098],[80.41858,29.63581],[80.38428,29.68513],[80.36803,29.73865],[80.41554,29.79451],[80.43458,29.80466],[80.48997,29.79566],[80.56247,29.86661],[80.56957,29.88176],[80.60226,29.95732],[80.67076,29.95732],[80.8778,30.13384],[80.93695,30.18229],[81.03953,30.20059],[81.12842,30.01395],[81.24362,30.0126],[81.29032,30.08806],[81.2623,30.14596],[81.33355,30.15303],[81.39928,30.21862],[81.41018,30.42153],[81.62033,30.44703],[81.99082,30.33423],[82.10135,30.35439],[82.10757,30.23745],[82.19475,30.16884],[82.16984,30.0692],[82.38622,30.02608],[82.5341,29.9735],[82.73024,29.81695],[83.07116,29.61957],[83.28131,29.56813],[83.44787,29.30513],[83.63156,29.16249],[83.82303,29.30513],[83.97559,29.33091],[84.18107,29.23451],[84.24801,29.02783],[84.2231,28.89571],[84.47528,28.74023],[84.62317,28.73887],[84.85511,28.58041],[85.06059,28.68562],[85.19135,28.62825],[85.18668,28.54076],[85.10729,28.34092],[85.38127,28.28336],[85.4233,28.32996],[85.59765,28.30529],[85.60854,28.25045],[85.69105,28.38475],[85.71907,28.38064],[85.74864,28.23126],[85.84672,28.18187],[85.90743,28.05144],[85.97813,27.99023],[85.94946,27.9401],[86.06309,27.90021],[86.12069,27.93047],[86.08333,28.02121],[86.088,28.09264],[86.18607,28.17364],[86.22966,27.9786],[86.42736,27.91122],[86.51609,27.96623],[86.56265,28.09569],[86.74181,28.10638],[86.75582,28.04182],[87.03757,27.94835],[87.11696,27.84104],[87.56996,27.84517],[87.72718,27.80938],[87.82681,27.95248],[88.13378,27.88015]]]]}},{type:"Feature",properties:{iso1A2:"NR",iso1A3:"NRU",iso1N3:"520",wikidata:"Q697",nameEn:"Nauru",groups:["057","009"],driveSide:"left",callingCodes:["674"]},geometry:{type:"MultiPolygon",coordinates:[[[[166.95155,0.14829],[167.60042,-0.88259],[166.21778,-0.7977],[166.95155,0.14829]]]]}},{type:"Feature",properties:{iso1A2:"NU",iso1A3:"NIU",iso1N3:"570",wikidata:"Q34020",nameEn:"Niue",country:"NZ",groups:["061","009"],driveSide:"left",callingCodes:["683"]},geometry:{type:"MultiPolygon",coordinates:[[[[-173.13438,-14.94228],[-171.14262,-14.93704],[-167.73854,-14.92809],[-167.73129,-23.22266],[-173.11048,-23.23027],[-173.13438,-14.94228]]]]}},{type:"Feature",properties:{iso1A2:"NZ",iso1A3:"NZL",iso1N3:"554",wikidata:"Q664",nameEn:"New Zealand",groups:["053","009"],driveSide:"left",callingCodes:["64"]},geometry:{type:"MultiPolygon",coordinates:[[[[-180,-24.21376],[-155.99562,-45.16785],[-179.93224,-45.18423],[-180,-24.21376]]],[[[161.96603,-56.07661],[169.6687,-29.09191],[179.49541,-36.79303],[179.49541,-50.04657],[161.96603,-56.07661]]]]}},{type:"Feature",properties:{iso1A2:"OM",iso1A3:"OMN",iso1N3:"512",wikidata:"Q842",nameEn:"Oman",groups:["145","142"],callingCodes:["968"]},geometry:{type:"MultiPolygon",coordinates:[[[[56.82555,25.7713],[56.26534,25.62825],[56.25341,25.61443],[56.26636,25.60643],[56.25365,25.60211],[56.20473,25.61119],[56.18363,25.65508],[56.14826,25.66351],[56.13579,25.73524],[56.17416,25.77239],[56.13963,25.82765],[56.19334,25.9795],[56.15498,26.06828],[56.08666,26.05038],[55.81777,26.18798],[56.2644,26.58649],[56.68954,26.76645],[56.79239,26.41236],[56.82555,25.7713]]],[[[56.26062,25.33108],[56.3005,25.31815],[56.3111,25.30107],[56.35172,25.30681],[56.34438,25.26653],[56.27628,25.23404],[56.24341,25.22867],[56.20872,25.24104],[56.20838,25.25668],[56.24465,25.27505],[56.25008,25.28843],[56.23362,25.31253],[56.26062,25.33108]],[[56.28423,25.26344],[56.29379,25.2754],[56.28102,25.28486],[56.2716,25.27916],[56.27086,25.26128],[56.28423,25.26344]]],[[[61.45114,22.55394],[56.66759,17.24021],[53.32998,16.16312],[53.09917,16.67084],[52.81185,17.28568],[52.74267,17.29519],[52.78009,17.35124],[52.00311,19.00083],[54.99756,20.00083],[55.66469,21.99658],[55.2137,22.71065],[55.22634,23.10378],[55.57358,23.669],[55.48677,23.94946],[55.73301,24.05994],[55.8308,24.01633],[56.01799,24.07426],[55.95472,24.2172],[55.83367,24.20193],[55.77658,24.23476],[55.76558,24.23227],[55.75257,24.23466],[55.75382,24.2466],[55.75939,24.26114],[55.76781,24.26209],[55.79145,24.27914],[55.80747,24.31069],[55.83395,24.32776],[55.83271,24.41521],[55.76461,24.5287],[55.83271,24.68567],[55.83408,24.77858],[55.81348,24.80102],[55.81116,24.9116],[55.85094,24.96858],[55.90849,24.96771],[55.96316,25.00857],[56.05715,24.95727],[56.05106,24.87461],[55.97467,24.89639],[55.97836,24.87673],[56.03535,24.81161],[56.06128,24.74457],[56.13684,24.73699],[56.20062,24.78565],[56.20568,24.85063],[56.30269,24.88334],[56.34873,24.93205],[56.3227,24.97284],[56.86325,25.03856],[61.45114,22.55394]]]]}},{type:"Feature",properties:{iso1A2:"PA",iso1A3:"PAN",iso1N3:"591",wikidata:"Q804",nameEn:"Panama",groups:["013","003","419","019"],callingCodes:["507"]},geometry:{type:"MultiPolygon",coordinates:[[[[-77.32389,8.81247],[-77.45064,8.49991],[-77.17257,7.97422],[-77.57185,7.51147],[-77.72514,7.72348],[-77.72157,7.47612],[-77.81426,7.48319],[-77.89178,7.22681],[-78.06168,7.07793],[-82.13751,6.97312],[-82.94503,7.93865],[-82.89978,8.04083],[-82.89137,8.05755],[-82.88641,8.10219],[-82.9388,8.26634],[-83.05209,8.33394],[-82.93056,8.43465],[-82.8679,8.44042],[-82.8382,8.48117],[-82.83322,8.52464],[-82.83975,8.54755],[-82.82739,8.60153],[-82.8794,8.6981],[-82.92068,8.74832],[-82.91377,8.774],[-82.88253,8.83331],[-82.72126,8.97125],[-82.93516,9.07687],[-82.93516,9.46741],[-82.84871,9.4973],[-82.87919,9.62645],[-82.77206,9.59573],[-82.66667,9.49746],[-82.61345,9.49881],[-82.56507,9.57279],[-82.51044,9.65379],[-78.79327,9.93766],[-77.58292,9.22278],[-77.32389,8.81247]]]]}},{type:"Feature",properties:{iso1A2:"PE",iso1A3:"PER",iso1N3:"604",wikidata:"Q419",nameEn:"Peru",groups:["005","419","019"],callingCodes:["51"]},geometry:{type:"MultiPolygon",coordinates:[[[[-74.26675,-0.97229],[-73.65312,-1.26222],[-72.92587,-2.44514],[-71.75223,-2.15058],[-70.94377,-2.23142],[-70.04609,-2.73906],[-70.71396,-3.7921],[-70.52393,-3.87553],[-70.3374,-3.79505],[-69.94708,-4.2431],[-70.00888,-4.37833],[-70.11305,-4.27281],[-70.19582,-4.3607],[-70.33236,-4.15214],[-70.77601,-4.15717],[-70.96814,-4.36915],[-71.87003,-4.51661],[-72.64391,-5.0391],[-72.83973,-5.14765],[-73.24579,-6.05764],[-73.12983,-6.43852],[-73.73986,-6.87919],[-73.77011,-7.28944],[-73.96938,-7.58465],[-73.65485,-7.77897],[-73.76576,-7.89884],[-72.92886,-9.04074],[-73.21498,-9.40904],[-72.72216,-9.41397],[-72.31883,-9.5184],[-72.14742,-9.98049],[-71.23394,-9.9668],[-70.53373,-9.42628],[-70.58453,-9.58303],[-70.55429,-9.76692],[-70.62487,-9.80666],[-70.64134,-11.0108],[-70.51395,-10.92249],[-70.38791,-11.07096],[-69.90896,-10.92744],[-69.57835,-10.94051],[-69.57156,-10.94555],[-68.98115,-11.8979],[-68.65044,-12.50689],[-68.85615,-12.87769],[-68.8864,-13.40792],[-69.05265,-13.68546],[-68.88135,-14.18639],[-69.36254,-14.94634],[-69.14856,-15.23478],[-69.40336,-15.61358],[-69.20291,-16.16668],[-69.09986,-16.22693],[-68.96238,-16.194],[-68.79464,-16.33272],[-68.98358,-16.42165],[-69.04027,-16.57214],[-69.00853,-16.66769],[-69.16896,-16.72233],[-69.62883,-17.28142],[-69.46863,-17.37466],[-69.46897,-17.4988],[-69.66483,-17.65083],[-69.79087,-17.65563],[-69.82868,-17.72048],[-69.75305,-17.94605],[-69.81607,-18.12582],[-69.96732,-18.25992],[-70.16394,-18.31737],[-70.31267,-18.31258],[-70.378,-18.3495],[-70.59118,-18.35072],[-85.71054,-21.15413],[-84.52388,-3.36941],[-80.30602,-3.39149],[-80.20647,-3.431],[-80.24123,-3.46124],[-80.24475,-3.47846],[-80.24586,-3.48677],[-80.23651,-3.48652],[-80.22629,-3.501],[-80.20535,-3.51667],[-80.21642,-3.5888],[-80.19848,-3.59249],[-80.18741,-3.63994],[-80.19926,-3.68894],[-80.13232,-3.90317],[-80.46386,-4.01342],[-80.4822,-4.05477],[-80.45023,-4.20938],[-80.32114,-4.21323],[-80.46386,-4.41516],[-80.39256,-4.48269],[-80.13945,-4.29786],[-79.79722,-4.47558],[-79.59402,-4.46848],[-79.26248,-4.95167],[-79.1162,-4.97774],[-79.01659,-5.01481],[-78.85149,-4.66795],[-78.68394,-4.60754],[-78.34362,-3.38633],[-78.24589,-3.39907],[-78.22642,-3.51113],[-78.14324,-3.47653],[-78.19369,-3.36431],[-77.94147,-3.05454],[-76.6324,-2.58397],[-76.05203,-2.12179],[-75.57429,-1.55961],[-75.3872,-0.9374],[-75.22862,-0.95588],[-75.22862,-0.60048],[-75.53615,-0.19213],[-75.60169,-0.18708],[-75.61997,-0.10012],[-75.40192,-0.17196],[-75.25764,-0.11943],[-75.18513,-0.0308],[-74.42701,-0.50218],[-74.26675,-0.97229]]]]}},{type:"Feature",properties:{iso1A2:"PF",iso1A3:"PYF",iso1N3:"258",wikidata:"Q30971",nameEn:"French Polynesia",country:"FR",groups:["061","009"],callingCodes:["689"]},geometry:{type:"MultiPolygon",coordinates:[[[[-149.6249,-7.51261],[-133.65593,-7.46952],[-133.61511,-21.93325],[-133.59543,-28.4709],[-156.44843,-28.52556],[-156.46451,-23.21255],[-156.4957,-12.32002],[-149.61166,-12.30171],[-149.6249,-7.51261]]]]}},{type:"Feature",properties:{iso1A2:"PG",iso1A3:"PNG",iso1N3:"598",wikidata:"Q691",nameEn:"Papua New Guinea",groups:["054","009"],driveSide:"left",callingCodes:["675"]},geometry:{type:"MultiPolygon",coordinates:[[[[141.03157,2.12829],[160.43769,-4.17974],[156.03296,-6.55528],[156.03993,-6.65703],[155.92557,-6.84664],[155.69784,-6.92661],[155.60735,-6.92266],[154.74815,-7.33315],[155.22803,-12.9001],[144.30183,-9.48146],[142.81927,-9.31709],[142.5723,-9.35994],[142.31447,-9.24611],[142.23304,-9.19253],[142.1462,-9.19923],[142.0953,-9.23534],[142.0601,-9.56571],[140.88922,-9.34945],[141.00782,-9.1242],[141.01763,-6.90181],[140.85295,-6.72996],[140.99813,-6.3233],[141.03157,2.12829]]]]}},{type:"Feature",properties:{iso1A2:"PH",iso1A3:"PHL",iso1N3:"608",wikidata:"Q928",nameEn:"Philippines",aliases:["PI","RP"],groups:["035","142"],callingCodes:["63"]},geometry:{type:"MultiPolygon",coordinates:[[[[129.19694,7.84182],[124.97752,4.82064],[118.41402,3.99509],[118.07935,4.15511],[118.8663,4.44172],[118.75416,4.59798],[119.44841,5.09568],[119.34756,5.53889],[117.89159,6.25755],[117.43832,7.3895],[117.17735,7.52841],[116.79524,7.43869],[115.39742,10.92666],[118.82252,14.67191],[120.69238,21.52331],[121.8109,21.77688],[129.19694,7.84182]]]]}},{type:"Feature",properties:{iso1A2:"PK",iso1A3:"PAK",iso1N3:"586",wikidata:"Q843",nameEn:"Pakistan",groups:["034","142"],driveSide:"left",callingCodes:["92"]},geometry:{type:"MultiPolygon",coordinates:[[[[75.72737,36.7529],[75.92391,36.56986],[76.0324,36.41198],[76.00906,36.17511],[75.93028,36.13136],[76.15325,35.9264],[76.14913,35.82848],[76.33453,35.84296],[76.50961,35.8908],[76.77323,35.66062],[76.75475,35.52617],[76.85088,35.39754],[76.93465,35.39866],[77.11796,35.05419],[76.99251,34.93349],[76.87193,34.96906],[76.74514,34.92488],[76.74377,34.84039],[76.67648,34.76371],[76.47186,34.78965],[76.15463,34.6429],[76.04614,34.67566],[75.75438,34.51827],[75.38009,34.55021],[75.01479,34.64629],[74.6663,34.703],[74.58083,34.77386],[74.31239,34.79626],[74.12897,34.70073],[73.96423,34.68244],[73.93401,34.63386],[73.93951,34.57169],[73.89419,34.54568],[73.88732,34.48911],[73.74999,34.3781],[73.74862,34.34183],[73.8475,34.32935],[73.90517,34.35317],[73.98208,34.2522],[73.90677,34.10504],[73.88732,34.05105],[73.91341,34.01235],[74.21554,34.03853],[74.25262,34.01577],[74.26086,33.92237],[74.14001,33.83002],[74.05898,33.82089],[74.00891,33.75437],[73.96423,33.73071],[73.98968,33.66155],[73.97367,33.64061],[74.03576,33.56718],[74.10115,33.56392],[74.18121,33.4745],[74.17983,33.3679],[74.08782,33.26232],[74.01366,33.25199],[74.02144,33.18908],[74.15374,33.13477],[74.17571,33.07495],[74.31854,33.02891],[74.34875,32.97823],[74.31227,32.92795],[74.41467,32.90563],[74.45312,32.77755],[74.6289,32.75561],[74.64675,32.82604],[74.7113,32.84219],[74.65345,32.71225],[74.69542,32.66792],[74.64424,32.60985],[74.65251,32.56416],[74.67431,32.56676],[74.68362,32.49298],[74.84725,32.49075],[74.97634,32.45367],[75.03265,32.49538],[75.28259,32.36556],[75.38046,32.26836],[75.25649,32.10187],[75.00793,32.03786],[74.9269,32.0658],[74.86236,32.04485],[74.79919,31.95983],[74.58907,31.87824],[74.47771,31.72227],[74.57498,31.60382],[74.61517,31.55698],[74.59319,31.50197],[74.64713,31.45605],[74.59773,31.4136],[74.53223,31.30321],[74.51629,31.13829],[74.56023,31.08303],[74.60281,31.10419],[74.60006,31.13711],[74.6852,31.12771],[74.67971,31.05479],[74.5616,31.04153],[73.88993,30.36305],[73.95736,30.28466],[73.97225,30.19829],[73.80299,30.06969],[73.58665,30.01848],[73.3962,29.94707],[73.28094,29.56646],[73.05886,29.1878],[73.01337,29.16422],[72.94272,29.02487],[72.40402,28.78283],[72.29495,28.66367],[72.20329,28.3869],[71.9244,28.11555],[71.89921,27.96035],[70.79054,27.68423],[70.60927,28.02178],[70.37307,28.01208],[70.12502,27.8057],[70.03136,27.56627],[69.58519,27.18109],[69.50904,26.74892],[69.88555,26.56836],[70.05584,26.60398],[70.17532,26.55362],[70.17532,26.24118],[70.08193,26.08094],[70.0985,25.93238],[70.2687,25.71156],[70.37444,25.67443],[70.53649,25.68928],[70.60378,25.71898],[70.67382,25.68186],[70.66695,25.39314],[70.89148,25.15064],[70.94002,24.92843],[71.09405,24.69017],[70.97594,24.60904],[71.00341,24.46038],[71.12838,24.42662],[71.04461,24.34657],[70.94985,24.3791],[70.85784,24.30903],[70.88393,24.27398],[70.71502,24.23517],[70.57906,24.27774],[70.5667,24.43787],[70.11712,24.30915],[70.03428,24.172],[69.73335,24.17007],[69.59579,24.29777],[69.29778,24.28712],[69.19341,24.25646],[69.07806,24.29777],[68.97781,24.26021],[68.90914,24.33156],[68.7416,24.31904],[68.74643,23.97027],[68.39339,23.96838],[68.20763,23.85849],[68.11329,23.53945],[61.5251,24.57287],[61.57592,25.0492],[61.6433,25.27541],[61.683,25.66638],[61.83968,25.7538],[61.83831,26.07249],[61.89391,26.26251],[62.05117,26.31647],[62.21304,26.26601],[62.31484,26.528],[62.77352,26.64099],[63.1889,26.65072],[63.18688,26.83844],[63.25005,26.84212],[63.25005,27.08692],[63.32283,27.14437],[63.19649,27.25674],[62.80604,27.22412],[62.79684,27.34381],[62.84905,27.47627],[62.7638,28.02992],[62.79412,28.28108],[62.59499,28.24842],[62.40259,28.42703],[61.93581,28.55284],[61.65978,28.77937],[61.53765,29.00507],[61.31508,29.38903],[60.87231,29.86514],[62.47751,29.40782],[63.5876,29.50456],[64.12966,29.39157],[64.19796,29.50407],[64.62116,29.58903],[65.04005,29.53957],[66.24175,29.85181],[66.36042,29.9583],[66.23609,30.06321],[66.34869,30.404],[66.28413,30.57001],[66.39194,30.9408],[66.42645,30.95309],[66.58175,30.97532],[66.68166,31.07597],[66.72561,31.20526],[66.83273,31.26867],[67.04147,31.31561],[67.03323,31.24519],[67.29964,31.19586],[67.78854,31.33203],[67.7748,31.4188],[67.62374,31.40473],[67.58323,31.52772],[67.72056,31.52304],[67.86887,31.63536],[68.00071,31.6564],[68.1655,31.82691],[68.25614,31.80357],[68.27605,31.75863],[68.44222,31.76446],[68.57475,31.83158],[68.6956,31.75687],[68.79997,31.61665],[68.91078,31.59687],[68.95995,31.64822],[69.00939,31.62249],[69.11514,31.70782],[69.20577,31.85957],[69.3225,31.93186],[69.27032,32.14141],[69.27932,32.29119],[69.23599,32.45946],[69.2868,32.53938],[69.38155,32.56601],[69.44747,32.6678],[69.43649,32.7302],[69.38018,32.76601],[69.47082,32.85834],[69.5436,32.8768],[69.49854,32.88843],[69.49004,33.01509],[69.57656,33.09911],[69.71526,33.09911],[69.79766,33.13247],[69.85259,33.09451],[70.02563,33.14282],[70.07369,33.22557],[70.13686,33.21064],[70.32775,33.34496],[70.17062,33.53535],[70.20141,33.64387],[70.14785,33.6553],[70.14236,33.71701],[70.00503,33.73528],[69.85671,33.93719],[69.87307,33.9689],[69.90203,34.04194],[70.54336,33.9463],[70.88119,33.97933],[71.07345,34.06242],[71.06933,34.10564],[71.09307,34.11961],[71.09453,34.13524],[71.13078,34.16503],[71.12815,34.26619],[71.17662,34.36769],[71.02401,34.44835],[71.0089,34.54568],[71.11602,34.63047],[71.08718,34.69034],[71.28356,34.80882],[71.29472,34.87728],[71.50329,34.97328],[71.49917,35.00478],[71.55273,35.02615],[71.52938,35.09023],[71.67495,35.21262],[71.5541,35.28776],[71.54294,35.31037],[71.65435,35.4479],[71.49917,35.6267],[71.55273,35.71483],[71.37969,35.95865],[71.19505,36.04134],[71.60491,36.39429],[71.80267,36.49924],[72.18135,36.71838],[72.6323,36.84601],[73.82685,36.91421],[74.04856,36.82648],[74.43389,37.00977],[74.53739,36.96224],[74.56453,37.03023],[75.13839,37.02622],[75.40481,36.95382],[75.45562,36.71971],[75.72737,36.7529]]]]}},{type:"Feature",properties:{iso1A2:"PL",iso1A3:"POL",iso1N3:"616",wikidata:"Q36",nameEn:"Poland",groups:["EU","151","150"],callingCodes:["48"]},geometry:{type:"MultiPolygon",coordinates:[[[[18.57853,55.25302],[19.64312,54.45423],[19.8038,54.44203],[20.63871,54.3706],[21.41123,54.32395],[22.79705,54.36264],[22.83756,54.40827],[23.00584,54.38514],[22.99649,54.35927],[23.05726,54.34565],[23.04323,54.31567],[23.104,54.29794],[23.13905,54.31567],[23.15526,54.31076],[23.15938,54.29894],[23.24656,54.25701],[23.3494,54.25155],[23.39525,54.21672],[23.42418,54.17911],[23.45223,54.17775],[23.49196,54.14764],[23.52702,54.04622],[23.48261,53.98855],[23.51284,53.95052],[23.62004,53.60942],[23.81995,53.24131],[23.85657,53.22923],[23.91393,53.16469],[23.87548,53.0831],[23.92184,53.02079],[23.94689,52.95919],[23.91805,52.94016],[23.93763,52.71332],[23.73615,52.6149],[23.58296,52.59868],[23.45112,52.53774],[23.34141,52.44845],[23.18196,52.28812],[23.20071,52.22848],[23.47859,52.18215],[23.54314,52.12148],[23.61,52.11264],[23.64066,52.07626],[23.68733,51.9906],[23.61523,51.92066],[23.62691,51.78208],[23.53198,51.74298],[23.57053,51.55938],[23.56236,51.53673],[23.62751,51.50512],[23.69905,51.40871],[23.63858,51.32182],[23.80678,51.18405],[23.90376,51.07697],[23.92217,51.00836],[24.04576,50.90196],[24.14524,50.86128],[24.0952,50.83262],[23.99254,50.83847],[23.95925,50.79271],[24.0595,50.71625],[24.0996,50.60752],[24.07048,50.5071],[24.03668,50.44507],[23.99563,50.41289],[23.79445,50.40481],[23.71382,50.38248],[23.67635,50.33385],[23.28221,50.0957],[22.99329,49.84249],[22.83179,49.69875],[22.80261,49.69098],[22.78304,49.65543],[22.64534,49.53094],[22.69444,49.49378],[22.748,49.32759],[22.72009,49.20288],[22.86336,49.10513],[22.89122,49.00725],[22.56155,49.08865],[22.04427,49.22136],[21.96385,49.3437],[21.82927,49.39467],[21.77983,49.35443],[21.62328,49.4447],[21.43376,49.41433],[21.27858,49.45988],[21.19756,49.4054],[21.12477,49.43666],[21.041,49.41791],[21.09799,49.37176],[20.98733,49.30774],[20.9229,49.29626],[20.77971,49.35383],[20.72274,49.41813],[20.61666,49.41791],[20.5631,49.375],[20.46422,49.41612],[20.39939,49.3896],[20.31728,49.39914],[20.31453,49.34817],[20.21977,49.35265],[20.13738,49.31685],[20.08238,49.1813],[19.98494,49.22904],[19.90529,49.23532],[19.86409,49.19316],[19.75286,49.20751],[19.82237,49.27806],[19.78581,49.41701],[19.72127,49.39288],[19.6375,49.40897],[19.64162,49.45184],[19.57845,49.46077],[19.53313,49.52856],[19.52626,49.57311],[19.45348,49.61583],[19.37795,49.574],[19.36009,49.53747],[19.25435,49.53391],[19.18019,49.41165],[18.9742,49.39557],[18.97283,49.49914],[18.94536,49.52143],[18.84521,49.51672],[18.84786,49.5446],[18.80479,49.6815],[18.72838,49.68163],[18.69817,49.70473],[18.62676,49.71983],[18.62943,49.74603],[18.62645,49.75002],[18.61368,49.75426],[18.61278,49.7618],[18.57183,49.83334],[18.60341,49.86256],[18.57045,49.87849],[18.57697,49.91565],[18.54299,49.92537],[18.54495,49.9079],[18.53423,49.89906],[18.41604,49.93498],[18.33562,49.94747],[18.33278,49.92415],[18.31914,49.91565],[18.27794,49.93863],[18.27107,49.96779],[18.21752,49.97309],[18.20241,49.99958],[18.10628,50.00223],[18.07898,50.04535],[18.03212,50.06574],[18.00396,50.04954],[18.04585,50.03311],[18.04585,50.01194],[18.00191,50.01723],[17.86886,49.97452],[17.77669,50.02253],[17.7506,50.07896],[17.6888,50.12037],[17.66683,50.10275],[17.59404,50.16437],[17.70528,50.18812],[17.76296,50.23382],[17.72176,50.25665],[17.74648,50.29966],[17.69292,50.32859],[17.67764,50.28977],[17.58889,50.27837],[17.3702,50.28123],[17.34548,50.2628],[17.34273,50.32947],[17.27681,50.32246],[17.19991,50.3654],[17.19579,50.38817],[17.14498,50.38117],[17.1224,50.39494],[16.89229,50.45117],[16.85933,50.41093],[16.90877,50.38642],[16.94448,50.31281],[16.99803,50.30316],[17.02138,50.27772],[16.99803,50.25753],[17.02825,50.23118],[17.00353,50.21449],[16.98018,50.24172],[16.8456,50.20834],[16.7014,50.09659],[16.63137,50.1142],[16.55446,50.16613],[16.56407,50.21009],[16.42674,50.32509],[16.39379,50.3207],[16.3622,50.34875],[16.36495,50.37679],[16.30289,50.38292],[16.28118,50.36891],[16.22821,50.41054],[16.21585,50.40627],[16.19526,50.43291],[16.31413,50.50274],[16.34572,50.49575],[16.44597,50.58041],[16.33611,50.66579],[16.23174,50.67101],[16.20839,50.63096],[16.10265,50.66405],[16.02437,50.60046],[15.98317,50.61528],[16.0175,50.63009],[15.97219,50.69799],[15.87331,50.67188],[15.81683,50.75666],[15.73186,50.73885],[15.43798,50.80833],[15.3803,50.77187],[15.36656,50.83956],[15.2773,50.8907],[15.27043,50.97724],[15.2361,50.99886],[15.1743,50.9833],[15.16744,51.01959],[15.11937,50.99021],[15.10152,51.01095],[15.06218,51.02269],[15.03895,51.0123],[15.02433,51.0242],[14.96419,50.99108],[15.01088,50.97984],[14.99852,50.86817],[14.82803,50.86966],[14.81664,50.88148],[14.89681,50.9422],[14.89252,50.94999],[14.92942,50.99744],[14.95529,51.04552],[14.97938,51.07742],[14.98229,51.11354],[14.99689,51.12205],[14.99079,51.14284],[14.99646,51.14365],[15.00083,51.14974],[14.99414,51.15813],[14.99311,51.16249],[15.0047,51.16874],[15.01242,51.21285],[15.04288,51.28387],[14.98008,51.33449],[14.96899,51.38367],[14.9652,51.44793],[14.94749,51.47155],[14.73219,51.52922],[14.72652,51.53902],[14.73047,51.54606],[14.71125,51.56209],[14.7727,51.61263],[14.75759,51.62318],[14.75392,51.67445],[14.69065,51.70842],[14.66386,51.73282],[14.64625,51.79472],[14.60493,51.80473],[14.59089,51.83302],[14.6588,51.88359],[14.6933,51.9044],[14.70601,51.92944],[14.7177,51.94048],[14.72163,51.95188],[14.71836,51.95606],[14.7139,51.95643],[14.70488,51.97679],[14.71339,52.00337],[14.76026,52.06624],[14.72971,52.09167],[14.6917,52.10283],[14.67683,52.13936],[14.70616,52.16927],[14.68344,52.19612],[14.71319,52.22144],[14.70139,52.25038],[14.58149,52.28007],[14.56378,52.33838],[14.55228,52.35264],[14.54423,52.42568],[14.63056,52.48993],[14.60081,52.53116],[14.6289,52.57136],[14.61073,52.59847],[14.22071,52.81175],[14.13806,52.82392],[14.12256,52.84311],[14.15873,52.87715],[14.14056,52.95786],[14.25954,53.00264],[14.35044,53.05829],[14.38679,53.13669],[14.36696,53.16444],[14.37853,53.20405],[14.40662,53.21098],[14.45125,53.26241],[14.44133,53.27427],[14.4215,53.27724],[14.35209,53.49506],[14.3273,53.50587],[14.30416,53.55499],[14.31904,53.61581],[14.2853,53.63392],[14.28477,53.65955],[14.27133,53.66613],[14.2836,53.67721],[14.26782,53.69866],[14.27249,53.74464],[14.21323,53.8664],[14.20823,53.90776],[14.18544,53.91258],[14.20647,53.91671],[14.22634,53.9291],[14.20811,54.12784],[18.57853,55.25302]]]]}},{type:"Feature",properties:{iso1A2:"PM",iso1A3:"SPM",iso1N3:"666",wikidata:"Q34617",nameEn:"Saint Pierre and Miquelon",country:"FR",groups:["021","003","019"],callingCodes:["508"]},geometry:{type:"MultiPolygon",coordinates:[[[[-56.72993,46.65575],[-56.27503,47.39728],[-55.90758,46.6223],[-56.72993,46.65575]]]]}},{type:"Feature",properties:{iso1A2:"PN",iso1A3:"PCN",iso1N3:"612",wikidata:"Q35672",nameEn:"Pitcairn Islands",country:"GB",groups:["061","009"],driveSide:"left",callingCodes:["64"]},geometry:{type:"MultiPolygon",coordinates:[[[[-133.59543,-28.4709],[-133.61511,-21.93325],[-122.0366,-24.55017],[-133.59543,-28.4709]]]]}},{type:"Feature",properties:{iso1A2:"PR",iso1A3:"PRI",iso1N3:"630",wikidata:"Q1183",nameEn:"Puerto Rico",country:"US",groups:["029","003","419","019"],roadSpeedUnit:"mph",callingCodes:["1 787","1 939"]},geometry:{type:"MultiPolygon",coordinates:[[[[-65.27974,17.56928],[-68.20301,17.83927],[-67.99519,18.97186],[-65.02435,18.73231],[-65.27974,17.56928]]]]}},{type:"Feature",properties:{iso1A2:"PS",iso1A3:"PSE",iso1N3:"275",wikidata:"Q23792",nameEn:"Palestine",country:"IL",groups:["145","142"],callingCodes:["970"]},geometry:{type:"MultiPolygon",coordinates:[[[[34.052,31.46619],[34.29262,31.70393],[34.48681,31.59711],[34.56797,31.54197],[34.48892,31.48365],[34.40077,31.40926],[34.36505,31.36404],[34.37381,31.30598],[34.36523,31.28963],[34.29417,31.24194],[34.26742,31.21998],[34.24012,31.29591],[34.23572,31.2966],[34.21853,31.32363],[34.052,31.46619]]],[[[35.47672,31.49578],[35.39675,31.49572],[35.22921,31.37445],[35.13033,31.3551],[35.02459,31.35979],[34.92571,31.34337],[34.88932,31.37093],[34.87833,31.39321],[34.89756,31.43891],[34.93258,31.47816],[34.94356,31.50743],[34.9415,31.55601],[34.95249,31.59813],[35.00879,31.65426],[35.08226,31.69107],[35.10782,31.71594],[35.11895,31.71454],[35.12933,31.7325],[35.13931,31.73012],[35.15119,31.73634],[35.15474,31.73352],[35.16478,31.73242],[35.18023,31.72067],[35.20538,31.72388],[35.21937,31.71578],[35.22392,31.71899],[35.23972,31.70896],[35.24315,31.71244],[35.2438,31.7201],[35.24981,31.72543],[35.25182,31.73945],[35.26319,31.74846],[35.25225,31.7678],[35.26058,31.79064],[35.25573,31.81362],[35.26404,31.82567],[35.251,31.83085],[35.25753,31.8387],[35.24816,31.8458],[35.2304,31.84222],[35.2249,31.85433],[35.22817,31.8638],[35.22567,31.86745],[35.22294,31.87889],[35.22014,31.88264],[35.2136,31.88241],[35.21276,31.88153],[35.21016,31.88237],[35.20945,31.8815],[35.20791,31.8821],[35.20673,31.88151],[35.20381,31.86716],[35.21128,31.863],[35.216,31.83894],[35.21469,31.81835],[35.19461,31.82687],[35.18169,31.82542],[35.18603,31.80901],[35.14174,31.81325],[35.07677,31.85627],[35.05617,31.85685],[35.01978,31.82944],[34.9724,31.83352],[34.99712,31.85569],[35.03489,31.85919],[35.03978,31.89276],[35.03489,31.92448],[35.00124,31.93264],[34.98682,31.96935],[35.00261,32.027],[34.9863,32.09551],[34.99437,32.10962],[34.98507,32.12606],[34.99039,32.14626],[34.96009,32.17503],[34.95703,32.19522],[34.98885,32.20758],[35.01841,32.23981],[35.02939,32.2671],[35.01119,32.28684],[35.01772,32.33863],[35.04243,32.35008],[35.05142,32.3667],[35.0421,32.38242],[35.05311,32.4024],[35.05423,32.41754],[35.07059,32.4585],[35.08564,32.46948],[35.09236,32.47614],[35.10024,32.47856],[35.10882,32.4757],[35.15937,32.50466],[35.2244,32.55289],[35.25049,32.52453],[35.29306,32.50947],[35.30685,32.51024],[35.35212,32.52047],[35.40224,32.50136],[35.42034,32.46009],[35.41598,32.45593],[35.41048,32.43706],[35.42078,32.41562],[35.55807,32.38674],[35.57111,32.21877],[35.52012,32.04076],[35.54375,31.96587],[35.52758,31.9131],[35.55941,31.76535],[35.47672,31.49578]]]]}},{type:"Feature",properties:{iso1A2:"PT",iso1A3:"PRT",iso1N3:"620",wikidata:"Q45",nameEn:"Portugal",groups:["EU","039","150"],callingCodes:["351"]},geometry:{type:"MultiPolygon",coordinates:[[[[-6.19128,41.57638],[-6.26777,41.48796],[-6.3306,41.37677],[-6.38553,41.38655],[-6.38551,41.35274],[-6.55937,41.24417],[-6.65046,41.24725],[-6.68286,41.21641],[-6.69711,41.1858],[-6.77319,41.13049],[-6.75655,41.10187],[-6.79241,41.05397],[-6.80942,41.03629],[-6.84781,41.02692],[-6.88843,41.03027],[-6.913,41.03922],[-6.9357,41.02888],[-6.8527,40.93958],[-6.84292,40.89771],[-6.80707,40.88047],[-6.79892,40.84842],[-6.82337,40.84472],[-6.82826,40.74603],[-6.79567,40.65955],[-6.84292,40.56801],[-6.80218,40.55067],[-6.7973,40.51723],[-6.84944,40.46394],[-6.84618,40.42177],[-6.78426,40.36468],[-6.80218,40.33239],[-6.86085,40.2976],[-6.86085,40.26776],[-7.00426,40.23169],[-7.02544,40.18564],[-7.00589,40.12087],[-6.94233,40.10716],[-6.86737,40.01986],[-6.91463,39.86618],[-6.97492,39.81488],[-7.01613,39.66877],[-7.24707,39.66576],[-7.33507,39.64569],[-7.54121,39.66717],[-7.49477,39.58794],[-7.2927,39.45847],[-7.3149,39.34857],[-7.23403,39.27579],[-7.23566,39.20132],[-7.12811,39.17101],[-7.14929,39.11287],[-7.10692,39.10275],[-7.04011,39.11919],[-6.97004,39.07619],[-6.95211,39.0243],[-7.051,38.907],[-7.03848,38.87221],[-7.26174,38.72107],[-7.265,38.61674],[-7.32529,38.44336],[-7.15581,38.27597],[-7.09389,38.17227],[-6.93418,38.21454],[-7.00375,38.01914],[-7.05966,38.01966],[-7.10366,38.04404],[-7.12648,38.00296],[-7.24544,37.98884],[-7.27314,37.90145],[-7.33441,37.81193],[-7.41981,37.75729],[-7.51759,37.56119],[-7.46878,37.47127],[-7.43974,37.38913],[-7.43227,37.25152],[-7.41854,37.23813],[-7.41133,37.20314],[-7.39769,37.16868],[-7.37282,36.96896],[-15.92339,29.50503],[-36.43765,41.39418],[-9.14112,41.86623],[-8.87157,41.86488],[-8.81794,41.90375],[-8.75712,41.92833],[-8.74606,41.9469],[-8.7478,41.96282],[-8.69071,41.98862],[-8.6681,41.99703],[-8.65832,42.02972],[-8.64626,42.03668],[-8.63791,42.04691],[-8.59493,42.05708],[-8.58086,42.05147],[-8.54563,42.0537],[-8.5252,42.06264],[-8.52837,42.07658],[-8.48185,42.0811],[-8.44123,42.08218],[-8.42512,42.07199],[-8.40143,42.08052],[-8.38323,42.07683],[-8.36353,42.09065],[-8.33912,42.08358],[-8.32161,42.10218],[-8.29809,42.106],[-8.2732,42.12396],[-8.24681,42.13993],[-8.22406,42.1328],[-8.1986,42.15402],[-8.18947,42.13853],[-8.19406,42.12141],[-8.18178,42.06436],[-8.11729,42.08537],[-8.08847,42.05767],[-8.08796,42.01398],[-8.16232,41.9828],[-8.2185,41.91237],[-8.19551,41.87459],[-8.16944,41.87944],[-8.16455,41.81753],[-8.0961,41.81024],[-8.01136,41.83453],[-7.9804,41.87337],[-7.92336,41.8758],[-7.90707,41.92432],[-7.88751,41.92553],[-7.88055,41.84571],[-7.84188,41.88065],[-7.69848,41.90977],[-7.65774,41.88308],[-7.58603,41.87944],[-7.62188,41.83089],[-7.52737,41.83939],[-7.49803,41.87095],[-7.45566,41.86488],[-7.44759,41.84451],[-7.42854,41.83262],[-7.42864,41.80589],[-7.37092,41.85031],[-7.32366,41.8406],[-7.18677,41.88793],[-7.18549,41.97515],[-7.14115,41.98855],[-7.08574,41.97401],[-7.07596,41.94977],[-7.01078,41.94977],[-6.98144,41.9728],[-6.95537,41.96553],[-6.94396,41.94403],[-6.82174,41.94493],[-6.81196,41.99097],[-6.76959,41.98734],[-6.75004,41.94129],[-6.61967,41.94008],[-6.58544,41.96674],[-6.5447,41.94371],[-6.56752,41.88429],[-6.51374,41.8758],[-6.56426,41.74219],[-6.54633,41.68623],[-6.49907,41.65823],[-6.44204,41.68258],[-6.29863,41.66432],[-6.19128,41.57638]]]]}},{type:"Feature",properties:{iso1A2:"PW",iso1A3:"PLW",iso1N3:"585",wikidata:"Q695",nameEn:"Palau",groups:["057","009"],roadSpeedUnit:"mph",callingCodes:["680"]},geometry:{type:"MultiPolygon",coordinates:[[[[128.97621,3.08804],[136.04605,12.45908],[136.27107,6.73747],[134.40878,1.79674],[128.97621,3.08804]]]]}},{type:"Feature",properties:{iso1A2:"PY",iso1A3:"PRY",iso1N3:"600",wikidata:"Q733",nameEn:"Paraguay",groups:["005","419","019"],callingCodes:["595"]},geometry:{type:"MultiPolygon",coordinates:[[[[-58.16225,-20.16193],[-57.84536,-20.93155],[-57.93492,-21.65505],[-57.88239,-21.6868],[-57.94642,-21.73799],[-57.98625,-22.09157],[-56.6508,-22.28387],[-56.5212,-22.11556],[-56.45893,-22.08072],[-56.23206,-22.25347],[-55.8331,-22.29008],[-55.74941,-22.46436],[-55.741,-22.52018],[-55.72366,-22.5519],[-55.6986,-22.56268],[-55.68742,-22.58407],[-55.62493,-22.62765],[-55.63849,-22.95122],[-55.5446,-23.22811],[-55.52288,-23.2595],[-55.5555,-23.28237],[-55.43585,-23.87157],[-55.44117,-23.9185],[-55.41784,-23.9657],[-55.12292,-23.99669],[-55.0518,-23.98666],[-55.02691,-23.97317],[-54.6238,-23.83078],[-54.32807,-24.01865],[-54.28207,-24.07305],[-54.4423,-25.13381],[-54.62033,-25.46026],[-54.60196,-25.48397],[-54.59509,-25.53696],[-54.59398,-25.59224],[-54.62063,-25.91213],[-54.60664,-25.9691],[-54.67359,-25.98607],[-54.69333,-26.37705],[-54.70732,-26.45099],[-54.80868,-26.55669],[-55.00584,-26.78754],[-55.06351,-26.80195],[-55.16948,-26.96068],[-55.25243,-26.93808],[-55.39611,-26.97679],[-55.62322,-27.1941],[-55.59094,-27.32444],[-55.74475,-27.44485],[-55.89195,-27.3467],[-56.18313,-27.29851],[-56.85337,-27.5165],[-58.04205,-27.2387],[-58.59549,-27.29973],[-58.65321,-27.14028],[-58.3198,-26.83443],[-58.1188,-26.16704],[-57.87176,-25.93604],[-57.57431,-25.47269],[-57.80821,-25.13863],[-58.25492,-24.92528],[-58.33055,-24.97099],[-59.33886,-24.49935],[-59.45482,-24.34787],[-60.03367,-24.00701],[-60.28163,-24.04436],[-60.99754,-23.80934],[-61.0782,-23.62932],[-61.9756,-23.0507],[-62.22768,-22.55807],[-62.51761,-22.37684],[-62.64455,-22.25091],[-62.2757,-21.06657],[-62.26883,-20.55311],[-61.93912,-20.10053],[-61.73723,-19.63958],[-60.00638,-19.2981],[-59.06965,-19.29148],[-58.23216,-19.80058],[-58.16225,-20.16193]]]]}},{type:"Feature",properties:{iso1A2:"QA",iso1A3:"QAT",iso1N3:"634",wikidata:"Q846",nameEn:"Qatar",groups:["145","142"],callingCodes:["974"]},geometry:{type:"MultiPolygon",coordinates:[[[[50.92992,24.54396],[50.8133,24.74049],[50.57069,25.57887],[50.80824,25.54641],[50.7801,25.595],[50.86149,25.6965],[50.81266,25.88946],[50.93865,26.30758],[51.83682,26.70231],[51.83108,24.71675],[51.58834,24.66608],[51.39468,24.62785],[51.29972,24.50747],[51.09638,24.46907],[50.92992,24.54396]]]]}},{type:"Feature",properties:{iso1A2:"RE",iso1A3:"REU",iso1N3:"638",wikidata:"Q17070",nameEn:"Réunion",country:"FR",groups:["EU","014","202","002"],callingCodes:["262"]},geometry:{type:"MultiPolygon",coordinates:[[[[53.37984,-21.23941],[56.62373,-20.2711],[56.73473,-21.9174],[53.37984,-21.23941]]]]}},{type:"Feature",properties:{iso1A2:"RO",iso1A3:"ROU",iso1N3:"642",wikidata:"Q218",nameEn:"Romania",groups:["EU","151","150"],callingCodes:["40"]},geometry:{type:"MultiPolygon",coordinates:[[[[27.15622,47.98538],[27.1618,47.92391],[27.29069,47.73722],[27.25519,47.71366],[27.32202,47.64009],[27.3979,47.59473],[27.47942,47.48113],[27.55731,47.46637],[27.60263,47.32507],[27.68706,47.28962],[27.73172,47.29248],[27.81892,47.1381],[28.09095,46.97621],[28.12173,46.82283],[28.24808,46.64305],[28.22281,46.50481],[28.25769,46.43334],[28.18902,46.35283],[28.19864,46.31869],[28.10937,46.22852],[28.13684,46.18099],[28.08612,46.01105],[28.13111,45.92819],[28.16568,45.6421],[28.08927,45.6051],[28.18741,45.47358],[28.21139,45.46895],[28.28504,45.43907],[28.34554,45.32102],[28.5735,45.24759],[28.71358,45.22631],[28.78911,45.24179],[28.81383,45.3384],[28.94292,45.28045],[28.96077,45.33164],[29.24779,45.43388],[29.42632,45.44545],[29.59798,45.38857],[29.68175,45.26885],[29.65428,45.25629],[29.69272,45.19227],[30.04414,45.08461],[29.24336,43.70874],[28.23293,43.76],[27.99558,43.84193],[27.92008,44.00761],[27.73468,43.95326],[27.64542,44.04958],[27.60834,44.01206],[27.39757,44.0141],[27.26845,44.12602],[26.95141,44.13555],[26.62712,44.05698],[26.38764,44.04356],[26.10115,43.96908],[26.05584,43.90925],[25.94911,43.85745],[25.72792,43.69263],[25.39528,43.61866],[25.17144,43.70261],[25.10718,43.6831],[24.96682,43.72693],[24.73542,43.68523],[24.62281,43.74082],[24.50264,43.76314],[24.35364,43.70211],[24.18149,43.68218],[23.73978,43.80627],[23.61687,43.79289],[23.4507,43.84936],[23.26772,43.84843],[23.05288,43.79494],[22.85314,43.84452],[22.83753,43.88055],[22.87873,43.9844],[23.01674,44.01946],[23.04988,44.07694],[22.67173,44.21564],[22.68166,44.28206],[22.56012,44.30712],[22.45436,44.47258],[22.54021,44.47836],[22.56493,44.53419],[22.61368,44.55719],[22.70981,44.51852],[22.76749,44.54446],[22.69196,44.61587],[22.61917,44.61489],[22.45301,44.7194],[22.30844,44.6619],[22.18315,44.48179],[22.13234,44.47444],[22.08016,44.49844],[21.99364,44.63395],[21.7795,44.66165],[21.71692,44.65349],[21.67504,44.67107],[21.61942,44.67059],[21.60019,44.75208],[21.55007,44.77304],[21.38802,44.78133],[21.35643,44.86364],[21.44013,44.87613],[21.48202,44.87199],[21.56328,44.89502],[21.54938,44.9327],[21.35855,45.01941],[21.4505,45.04294],[21.51299,45.15345],[21.48278,45.19557],[21.29398,45.24148],[21.20392,45.2677],[21.17612,45.32566],[21.09894,45.30144],[20.87948,45.42743],[20.86026,45.47295],[20.77217,45.49788],[20.83321,45.53567],[20.76798,45.60969],[20.80361,45.65875],[20.82364,45.77738],[20.78446,45.78522],[20.77416,45.75601],[20.70069,45.7493],[20.65645,45.82801],[20.54818,45.89939],[20.35862,45.99356],[20.26068,46.12332],[20.28324,46.1438],[20.35573,46.16629],[20.45377,46.14405],[20.49718,46.18721],[20.63863,46.12728],[20.76085,46.21002],[20.74574,46.25467],[20.86797,46.28884],[21.06572,46.24897],[21.16872,46.30118],[21.28061,46.44941],[21.26929,46.4993],[21.33214,46.63035],[21.43926,46.65109],[21.5151,46.72147],[21.48935,46.7577],[21.52028,46.84118],[21.59307,46.86935],[21.59581,46.91628],[21.68645,46.99595],[21.648,47.03902],[21.78395,47.11104],[21.94463,47.38046],[22.01055,47.37767],[22.03389,47.42508],[22.00917,47.50492],[22.31816,47.76126],[22.41979,47.7391],[22.46559,47.76583],[22.67247,47.7871],[22.76617,47.8417],[22.77991,47.87211],[22.89849,47.95851],[22.94301,47.96672],[22.92241,48.02002],[23.0158,47.99338],[23.08858,48.00716],[23.1133,48.08061],[23.15999,48.12188],[23.27397,48.08245],[23.33577,48.0237],[23.4979,47.96858],[23.52803,48.01818],[23.5653,48.00499],[23.63894,48.00293],[23.66262,47.98786],[23.75188,47.99705],[23.80904,47.98142],[23.8602,47.9329],[23.89352,47.94512],[23.94192,47.94868],[23.96337,47.96672],[23.98553,47.96076],[24.00801,47.968],[24.02999,47.95087],[24.06466,47.95317],[24.11281,47.91487],[24.22566,47.90231],[24.34926,47.9244],[24.43578,47.97131],[24.61994,47.95062],[24.70632,47.84428],[24.81893,47.82031],[24.88896,47.7234],[25.11144,47.75203],[25.23778,47.89403],[25.63878,47.94924],[25.77723,47.93919],[26.05901,47.9897],[26.17711,47.99246],[26.33504,48.18418],[26.55202,48.22445],[26.62823,48.25804],[26.81161,48.25049],[26.87708,48.19919],[26.94265,48.1969],[26.98042,48.15752],[26.96119,48.13003],[27.04118,48.12522],[27.02985,48.09083],[27.15622,47.98538]]]]}},{type:"Feature",properties:{iso1A2:"RS",iso1A3:"SRB",iso1N3:"688",wikidata:"Q403",nameEn:"Serbia",groups:["039","150"],callingCodes:["381"]},geometry:{type:"MultiPolygon",coordinates:[[[[19.66007,46.19005],[19.81491,46.1313],[19.93508,46.17553],[20.01816,46.17696],[20.03533,46.14509],[20.09713,46.17315],[20.26068,46.12332],[20.35862,45.99356],[20.54818,45.89939],[20.65645,45.82801],[20.70069,45.7493],[20.77416,45.75601],[20.78446,45.78522],[20.82364,45.77738],[20.80361,45.65875],[20.76798,45.60969],[20.83321,45.53567],[20.77217,45.49788],[20.86026,45.47295],[20.87948,45.42743],[21.09894,45.30144],[21.17612,45.32566],[21.20392,45.2677],[21.29398,45.24148],[21.48278,45.19557],[21.51299,45.15345],[21.4505,45.04294],[21.35855,45.01941],[21.54938,44.9327],[21.56328,44.89502],[21.48202,44.87199],[21.44013,44.87613],[21.35643,44.86364],[21.38802,44.78133],[21.55007,44.77304],[21.60019,44.75208],[21.61942,44.67059],[21.67504,44.67107],[21.71692,44.65349],[21.7795,44.66165],[21.99364,44.63395],[22.08016,44.49844],[22.13234,44.47444],[22.18315,44.48179],[22.30844,44.6619],[22.45301,44.7194],[22.61917,44.61489],[22.69196,44.61587],[22.76749,44.54446],[22.70981,44.51852],[22.61368,44.55719],[22.56493,44.53419],[22.54021,44.47836],[22.45436,44.47258],[22.56012,44.30712],[22.68166,44.28206],[22.67173,44.21564],[22.61711,44.16938],[22.61688,44.06534],[22.41449,44.00514],[22.35558,43.81281],[22.41043,43.69566],[22.47582,43.6558],[22.53397,43.47225],[22.82036,43.33665],[22.89727,43.22417],[23.00806,43.19279],[22.98104,43.11199],[22.89521,43.03625],[22.78397,42.98253],[22.74826,42.88701],[22.54302,42.87774],[22.43309,42.82057],[22.4997,42.74144],[22.43983,42.56851],[22.55669,42.50144],[22.51961,42.3991],[22.47498,42.3915],[22.45919,42.33822],[22.34773,42.31725],[22.29275,42.34913],[22.29605,42.37477],[22.16384,42.32103],[22.02908,42.29848],[21.94405,42.34669],[21.91595,42.30392],[21.84654,42.3247],[21.77176,42.2648],[21.70111,42.23789],[21.58992,42.25915],[21.56772,42.30946],[21.5264,42.33634],[21.53467,42.36809],[21.57021,42.3647],[21.59029,42.38042],[21.62887,42.37664],[21.64209,42.41081],[21.62556,42.45106],[21.7035,42.51899],[21.70522,42.54176],[21.7327,42.55041],[21.75672,42.62695],[21.79413,42.65923],[21.75025,42.70125],[21.6626,42.67813],[21.58755,42.70418],[21.59154,42.72643],[21.47498,42.74695],[21.39045,42.74888],[21.44047,42.87276],[21.36941,42.87397],[21.32974,42.90424],[21.2719,42.8994],[21.23534,42.95523],[21.23877,43.00848],[21.2041,43.02277],[21.16734,42.99694],[21.14465,43.11089],[21.08952,43.13471],[21.05378,43.10707],[21.00749,43.13984],[20.96287,43.12416],[20.83727,43.17842],[20.88685,43.21697],[20.82145,43.26769],[20.73811,43.25068],[20.68688,43.21335],[20.59929,43.20492],[20.69515,43.09641],[20.64557,43.00826],[20.59929,43.01067],[20.48692,42.93208],[20.53484,42.8885],[20.43734,42.83157],[20.40594,42.84853],[20.35692,42.8335],[20.34528,42.90676],[20.16415,42.97177],[20.14896,42.99058],[20.12325,42.96237],[20.05431,42.99571],[20.04729,43.02732],[19.98887,43.0538],[19.96549,43.11098],[19.92576,43.08539],[19.79255,43.11951],[19.76918,43.16044],[19.64063,43.19027],[19.62661,43.2286],[19.54598,43.25158],[19.52962,43.31623],[19.48171,43.32644],[19.44315,43.38846],[19.22229,43.47926],[19.22807,43.5264],[19.24774,43.53061],[19.2553,43.5938],[19.33426,43.58833],[19.36653,43.60921],[19.41941,43.54056],[19.42696,43.57987],[19.50455,43.58385],[19.5176,43.71403],[19.3986,43.79668],[19.23465,43.98764],[19.24363,44.01502],[19.38439,43.96611],[19.52515,43.95573],[19.56498,43.99922],[19.61836,44.01464],[19.61991,44.05254],[19.57467,44.04716],[19.55999,44.06894],[19.51167,44.08158],[19.47321,44.1193],[19.48386,44.14332],[19.47338,44.15034],[19.43905,44.13088],[19.40927,44.16722],[19.3588,44.18353],[19.34773,44.23244],[19.32464,44.27185],[19.26945,44.26957],[19.23306,44.26097],[19.20508,44.2917],[19.18328,44.28383],[19.16741,44.28648],[19.13332,44.31492],[19.13556,44.338],[19.11547,44.34218],[19.1083,44.3558],[19.11865,44.36712],[19.10298,44.36924],[19.10365,44.37795],[19.10704,44.38249],[19.10749,44.39421],[19.11785,44.40313],[19.14681,44.41463],[19.14837,44.45253],[19.12278,44.50132],[19.13369,44.52521],[19.16699,44.52197],[19.26388,44.65412],[19.32543,44.74058],[19.36722,44.88164],[19.18183,44.92055],[19.01994,44.85493],[18.98957,44.90645],[19.02871,44.92541],[19.06853,44.89915],[19.15573,44.95409],[19.05205,44.97692],[19.1011,45.01191],[19.07952,45.14668],[19.14063,45.12972],[19.19144,45.17863],[19.43589,45.17137],[19.41941,45.23475],[19.28208,45.23813],[19.10774,45.29547],[18.97446,45.37528],[18.99918,45.49333],[19.08364,45.48804],[19.07471,45.53086],[18.94562,45.53712],[18.88776,45.57253],[18.96691,45.66731],[18.90305,45.71863],[18.85783,45.85493],[18.81394,45.91329],[18.99712,45.93537],[19.01284,45.96529],[19.0791,45.96458],[19.10388,46.04015],[19.14543,45.9998],[19.28826,45.99694],[19.52473,46.1171],[19.56113,46.16824],[19.66007,46.19005]]]]}},{type:"Feature",properties:{iso1A2:"RU",iso1A3:"RUS",iso1N3:"643",wikidata:"Q159",nameEn:"Russia",groups:["151","150"],callingCodes:["7"]},geometry:{type:"MultiPolygon",coordinates:[[[[-179.99933,64.74703],[-179.9843,71.90735],[-168.25765,71.99091],[-168.95635,65.98512],[-169.03888,65.48473],[-172.76104,63.77445],[-179.99933,64.74703]]],[[[39.81147,43.06294],[33.66142,43.9825],[32.99857,44.48323],[31.62627,45.50633],[33.54017,46.0123],[33.59087,46.06013],[33.57318,46.10317],[33.61467,46.13561],[33.63854,46.14147],[33.61517,46.22615],[33.646,46.23028],[33.74047,46.18555],[33.79715,46.20482],[33.85234,46.19863],[33.91549,46.15938],[34.05272,46.10838],[34.07311,46.11769],[34.12929,46.10494],[34.181,46.06804],[34.25111,46.0532],[34.33912,46.06114],[34.41221,46.00245],[34.44155,45.95995],[34.48729,45.94267],[34.52011,45.95097],[34.55889,45.99347],[34.60861,45.99347],[34.66679,45.97136],[34.75479,45.90705],[34.80153,45.90047],[34.79905,45.81009],[34.96015,45.75634],[35.23066,45.79231],[37.62608,46.82615],[38.12112,46.86078],[38.3384,46.98085],[38.22955,47.12069],[38.23049,47.2324],[38.32112,47.2585],[38.33074,47.30508],[38.22225,47.30788],[38.28954,47.39255],[38.28679,47.53552],[38.35062,47.61631],[38.76379,47.69346],[38.79628,47.81109],[38.87979,47.87719],[39.73935,47.82876],[39.82213,47.96396],[39.77544,48.04206],[39.88256,48.04482],[39.83724,48.06501],[39.94847,48.22811],[40.00752,48.22445],[39.99241,48.31768],[39.97325,48.31399],[39.9693,48.29904],[39.95248,48.29972],[39.91465,48.26743],[39.90041,48.3049],[39.84273,48.30947],[39.84136,48.33321],[39.94847,48.35055],[39.88794,48.44226],[39.86196,48.46633],[39.84548,48.57821],[39.79764,48.58668],[39.67226,48.59368],[39.71765,48.68673],[39.73104,48.7325],[39.79466,48.83739],[39.97182,48.79398],[40.08168,48.87443],[40.03636,48.91957],[39.98967,48.86901],[39.78368,48.91596],[39.74874,48.98675],[39.72649,48.9754],[39.71353,48.98959],[39.6683,48.99454],[39.6836,49.05121],[39.93437,49.05709],[40.01988,49.1761],[40.22176,49.25683],[40.18331,49.34996],[40.14912,49.37681],[40.1141,49.38798],[40.03087,49.45452],[40.03636,49.52321],[40.16683,49.56865],[40.13249,49.61672],[39.84548,49.56064],[39.65047,49.61761],[39.59142,49.73758],[39.44496,49.76067],[39.27968,49.75976],[39.1808,49.88911],[38.9391,49.79524],[38.90477,49.86787],[38.73311,49.90238],[38.68677,50.00904],[38.65688,49.97176],[38.35408,50.00664],[38.32524,50.08866],[38.18517,50.08161],[38.21675,49.98104],[38.02999,49.90592],[38.02999,49.94482],[37.90776,50.04194],[37.79515,50.08425],[37.75807,50.07896],[37.61113,50.21976],[37.62879,50.24481],[37.62486,50.29966],[37.47243,50.36277],[37.48204,50.46079],[37.08468,50.34935],[36.91762,50.34963],[36.69377,50.26982],[36.64571,50.218],[36.56655,50.2413],[36.58371,50.28563],[36.47817,50.31457],[36.30101,50.29088],[36.20763,50.3943],[36.06893,50.45205],[35.8926,50.43829],[35.80388,50.41356],[35.73659,50.35489],[35.61711,50.35707],[35.58003,50.45117],[35.47463,50.49247],[35.39464,50.64751],[35.48116,50.66405],[35.47704,50.77274],[35.41367,50.80227],[35.39307,50.92145],[35.32598,50.94524],[35.40837,51.04119],[35.31774,51.08434],[35.20375,51.04723],[35.12685,51.16191],[35.14058,51.23162],[34.97304,51.2342],[34.82472,51.17483],[34.6874,51.18],[34.6613,51.25053],[34.38802,51.2746],[34.31661,51.23936],[34.23009,51.26429],[34.33446,51.363],[34.22048,51.4187],[34.30562,51.5205],[34.17599,51.63253],[34.07765,51.67065],[34.42922,51.72852],[34.41136,51.82793],[34.09413,52.00835],[34.11199,52.14087],[34.05239,52.20132],[33.78789,52.37204],[33.55718,52.30324],[33.48027,52.31499],[33.51323,52.35779],[33.18913,52.3754],[32.89937,52.2461],[32.85405,52.27888],[32.69475,52.25535],[32.54781,52.32423],[32.3528,52.32842],[32.38988,52.24946],[32.33083,52.23685],[32.34044,52.1434],[32.2777,52.10266],[32.23331,52.08085],[32.08813,52.03319],[31.92159,52.05144],[31.96141,52.08015],[31.85018,52.11305],[31.81722,52.09955],[31.7822,52.11406],[31.77877,52.18636],[31.6895,52.1973],[31.70735,52.26711],[31.57971,52.32146],[31.62084,52.33849],[31.61397,52.48843],[31.56316,52.51518],[31.63869,52.55361],[31.50406,52.69707],[31.57277,52.71613],[31.592,52.79011],[31.35667,52.97854],[31.24147,53.031],[31.32283,53.04101],[31.33519,53.08805],[31.3915,53.09712],[31.36403,53.13504],[31.40523,53.21406],[31.56316,53.19432],[31.62496,53.22886],[31.787,53.18033],[31.82373,53.10042],[32.15368,53.07594],[32.40773,53.18856],[32.51725,53.28431],[32.73257,53.33494],[32.74968,53.45597],[32.47777,53.5548],[32.40499,53.6656],[32.50112,53.68594],[32.45717,53.74039],[32.36663,53.7166],[32.12621,53.81586],[31.89137,53.78099],[31.77028,53.80015],[31.85019,53.91801],[31.88744,54.03653],[31.89599,54.0837],[31.57002,54.14535],[31.30791,54.25315],[31.3177,54.34067],[31.22945,54.46585],[31.08543,54.50361],[31.21399,54.63113],[31.19339,54.66947],[30.99187,54.67046],[30.98226,54.68872],[31.0262,54.70698],[30.97127,54.71967],[30.95479,54.74346],[30.75165,54.80699],[30.8264,54.90062],[30.81759,54.94064],[30.93144,54.9585],[30.95754,54.98609],[30.9081,55.02232],[30.94243,55.03964],[31.00972,55.02783],[31.02071,55.06167],[30.97369,55.17134],[30.87944,55.28223],[30.81946,55.27931],[30.8257,55.3313],[30.93144,55.3914],[30.90123,55.46621],[30.95204,55.50667],[30.93419,55.6185],[30.86003,55.63169],[30.7845,55.58514],[30.72957,55.66268],[30.67464,55.64176],[30.63344,55.73079],[30.51037,55.76568],[30.51346,55.78982],[30.48257,55.81066],[30.30987,55.83592],[30.27776,55.86819],[30.12136,55.8358],[29.97975,55.87281],[29.80672,55.79569],[29.61446,55.77716],[29.51283,55.70294],[29.3604,55.75862],[29.44692,55.95978],[29.21717,55.98971],[29.08299,56.03427],[28.73418,55.97131],[28.63668,56.07262],[28.68337,56.10173],[28.5529,56.11705],[28.43068,56.09407],[28.37987,56.11399],[28.36888,56.05805],[28.30571,56.06035],[28.15217,56.16964],[28.23716,56.27588],[28.16599,56.37806],[28.19057,56.44637],[28.10069,56.524],[28.13526,56.57989],[28.04768,56.59004],[27.86101,56.88204],[27.66511,56.83921],[27.86101,57.29402],[27.52453,57.42826],[27.56832,57.53728],[27.34698,57.52242],[27.31919,57.57672],[27.40393,57.62125],[27.3746,57.66834],[27.52615,57.72843],[27.50171,57.78842],[27.56689,57.83356],[27.78526,57.83963],[27.81841,57.89244],[27.67282,57.92627],[27.62393,58.09462],[27.48541,58.22615],[27.55489,58.39525],[27.36366,58.78381],[27.74429,58.98351],[27.80482,59.1116],[27.87978,59.18097],[27.90911,59.24353],[28.00689,59.28351],[28.14215,59.28934],[28.19284,59.35791],[28.20537,59.36491],[28.21137,59.38058],[28.19061,59.39962],[28.04187,59.47017],[27.85643,59.58538],[26.90044,59.63819],[26.32936,60.00121],[27.44953,60.22766],[27.71177,60.3893],[27.77352,60.52722],[28.47974,60.93365],[28.82816,61.1233],[29.01829,61.17448],[31.10136,62.43042],[31.38369,62.66284],[31.58535,62.91642],[31.29294,63.09035],[31.23244,63.22239],[30.49637,63.46666],[29.98213,63.75795],[30.25437,63.83364],[30.55687,64.09036],[30.4762,64.25728],[30.06279,64.35782],[30.01238,64.57513],[30.12329,64.64862],[30.05271,64.79072],[29.68972,64.80789],[29.61914,65.05993],[29.84096,65.1109],[29.8813,65.22101],[29.61914,65.23791],[29.68972,65.31803],[29.84096,65.56945],[29.74013,65.64025],[29.97205,65.70256],[30.16363,65.66935],[29.91155,66.13863],[28.9839,66.94139],[29.91155,67.51507],[30.02041,67.67523],[29.66955,67.79872],[29.34179,68.06655],[28.62982,68.19816],[28.43941,68.53366],[28.78224,68.86696],[28.45957,68.91417],[28.91738,69.04774],[29.0444,69.0119],[29.26623,69.13794],[29.27631,69.2811],[29.97205,69.41623],[30.16363,69.65244],[30.52662,69.54699],[30.95011,69.54699],[30.84095,69.80584],[31.59909,70.16571],[32.07813,72.01005],[36.48095,82.16765],[155.31937,81.93282],[180,71.53642],[180,62.52334],[153.94307,38.42848],[145.23667,43.76813],[145.82343,44.571],[140.9182,45.92937],[131.95041,41.5445],[130.65022,42.32281],[130.66367,42.38024],[130.64181,42.41422],[130.60805,42.4317],[130.56835,42.43281],[130.55143,42.52158],[130.62107,42.58413],[130.56576,42.68925],[130.40213,42.70788],[130.44361,42.76205],[130.66524,42.84753],[131.02438,42.86518],[131.02668,42.91246],[131.135,42.94114],[131.10274,43.04734],[131.20414,43.13654],[131.19031,43.21385],[131.30324,43.39498],[131.29402,43.46695],[131.19492,43.53047],[131.21105,43.82383],[131.26176,43.94011],[131.23583,43.96085],[131.25484,44.03131],[131.30365,44.04262],[131.1108,44.70266],[130.95639,44.85154],[131.48415,44.99513],[131.68466,45.12374],[131.66852,45.2196],[131.76532,45.22609],[131.86903,45.33636],[131.99417,45.2567],[132.83978,45.05916],[132.96373,45.0212],[133.12293,45.1332],[133.09279,45.25693],[133.19419,45.51913],[133.41083,45.57723],[133.48457,45.86203],[133.60442,45.90053],[133.67569,45.9759],[133.72695,46.05576],[133.68047,46.14697],[133.88097,46.25066],[133.91496,46.4274],[133.84104,46.46681],[134.03538,46.75668],[134.20016,47.33458],[134.50898,47.4812],[134.7671,47.72051],[134.55508,47.98651],[134.67098,48.1564],[134.75328,48.36763],[134.49516,48.42884],[132.66989,47.96491],[132.57309,47.71741],[131.90448,47.68011],[131.2635,47.73325],[131.09871,47.6852],[130.95985,47.6957],[130.90915,47.90623],[130.65103,48.10052],[130.84462,48.30942],[130.52147,48.61745],[130.66946,48.88251],[130.43232,48.90844],[130.2355,48.86741],[129.85416,49.11067],[129.67598,49.29596],[129.50685,49.42398],[129.40398,49.44194],[129.35317,49.3481],[129.23232,49.40353],[129.11153,49.36813],[128.72896,49.58676],[127.83476,49.5748],[127.53516,49.84306],[127.49299,50.01251],[127.60515,50.23503],[127.37384,50.28393],[127.36009,50.43787],[127.28765,50.46585],[127.36335,50.58306],[127.28165,50.72075],[127.14586,50.91152],[126.93135,51.0841],[126.90369,51.3238],[126.68349,51.70607],[126.44606,51.98254],[126.558,52.13738],[125.6131,53.07229],[125.17522,53.20225],[124.46078,53.21881],[123.86158,53.49391],[123.26989,53.54843],[122.85966,53.47395],[122.35063,53.49565],[121.39213,53.31888],[120.85633,53.28499],[120.0451,52.7359],[120.04049,52.58773],[120.46454,52.63811],[120.71673,52.54099],[120.61346,52.32447],[120.77337,52.20805],[120.65907,51.93544],[120.10963,51.671],[119.13553,50.37412],[119.38598,50.35162],[119.27996,50.13348],[119.11003,50.00276],[118.61623,49.93809],[117.82343,49.52696],[117.48208,49.62324],[117.27597,49.62544],[117.07142,49.68482],[116.71193,49.83813],[116.62502,49.92919],[116.22402,50.04477],[115.73602,49.87688],[115.26068,49.97367],[114.9703,50.19254],[114.325,50.28098],[113.20216,49.83356],[113.02647,49.60772],[110.64493,49.1816],[110.39891,49.25083],[110.24373,49.16676],[109.51325,49.22859],[109.18017,49.34709],[108.53969,49.32325],[108.27937,49.53167],[107.95387,49.66659],[107.96116,49.93191],[107.36407,49.97612],[107.1174,50.04239],[107.00007,50.1977],[106.80326,50.30177],[106.58373,50.34044],[106.51122,50.34408],[106.49628,50.32436],[106.47156,50.31909],[106.07865,50.33474],[106.05562,50.40582],[105.32528,50.4648],[103.70343,50.13952],[102.71178,50.38873],[102.32194,50.67982],[102.14032,51.35566],[101.5044,51.50467],[101.39085,51.45753],[100.61116,51.73028],[99.89203,51.74903],[99.75578,51.90108],[99.27888,51.96876],[98.87768,52.14563],[98.74142,51.8637],[98.33222,51.71832],[98.22053,51.46579],[98.05257,51.46696],[97.83305,51.00248],[98.01472,50.86652],[97.9693,50.78044],[98.06393,50.61262],[98.31373,50.4996],[98.29481,50.33561],[97.85197,49.91339],[97.76871,49.99861],[97.56432,49.92801],[97.56811,49.84265],[97.24639,49.74737],[96.97388,49.88413],[95.80056,50.04239],[95.74757,49.97915],[95.02465,49.96941],[94.97166,50.04725],[94.6121,50.04239],[94.49477,50.17832],[94.39258,50.22193],[94.30823,50.57498],[92.99595,50.63183],[93.01109,50.79001],[92.44714,50.78762],[92.07173,50.69585],[91.86048,50.73734],[89.59711,49.90851],[89.70687,49.72535],[88.82499,49.44808],[88.42449,49.48821],[88.17223,49.46934],[88.15543,49.30314],[87.98977,49.18147],[87.81333,49.17354],[87.48983,49.13794],[87.478,49.07403],[87.28386,49.11626],[87.31465,49.23603],[87.03071,49.25142],[86.82606,49.51796],[86.61307,49.60239],[86.79056,49.74787],[86.63674,49.80136],[86.18709,49.50259],[85.24047,49.60239],[84.99198,50.06793],[84.29385,50.27257],[83.8442,50.87375],[83.14607,51.00796],[82.55443,50.75412],[81.94999,50.79307],[81.46581,50.77658],[81.41248,50.97524],[81.06091,50.94833],[81.16999,51.15662],[80.80318,51.28262],[80.44819,51.20855],[80.4127,50.95581],[80.08138,50.77658],[79.11255,52.01171],[77.90383,53.29807],[76.54243,53.99329],[76.44076,54.16017],[76.82266,54.1798],[76.91052,54.4677],[75.3668,54.07439],[75.43398,53.98652],[75.07405,53.80831],[73.39218,53.44623],[73.25412,53.61532],[73.68921,53.86522],[73.74778,54.07194],[73.37963,53.96132],[72.71026,54.1161],[72.43415,53.92685],[72.17477,54.36303],[71.96141,54.17736],[71.10379,54.13326],[71.08706,54.33376],[71.24185,54.64965],[71.08288,54.71253],[70.96009,55.10558],[70.76493,55.3027],[70.19179,55.1476],[69.74917,55.35545],[69.34224,55.36344],[68.90865,55.38148],[68.19206,55.18823],[68.26661,55.09226],[68.21308,54.98645],[65.20174,54.55216],[65.24663,54.35721],[65.11033,54.33028],[64.97216,54.4212],[63.97686,54.29763],[64.02715,54.22679],[63.91224,54.20013],[63.80604,54.27079],[62.58651,54.05871],[62.56876,53.94047],[62.45931,53.90737],[62.38535,54.03961],[62.00966,54.04134],[62.03913,53.94768],[61.65318,54.02445],[61.56941,53.95703],[61.47603,54.08048],[61.3706,54.08464],[61.26863,53.92797],[60.99796,53.93699],[61.14283,53.90063],[61.22574,53.80268],[60.90626,53.62937],[61.55706,53.57144],[61.57185,53.50112],[61.37957,53.45887],[61.29082,53.50992],[61.14291,53.41481],[61.19024,53.30536],[62.14574,53.09626],[62.12799,52.99133],[62.0422,52.96105],[61.23462,53.03227],[61.05842,52.92217],[60.71989,52.75923],[60.71693,52.66245],[60.84118,52.63912],[60.84709,52.52228],[60.98021,52.50068],[61.05417,52.35096],[60.78201,52.22067],[60.72581,52.15538],[60.48915,52.15175],[60.19925,51.99173],[59.99809,51.98263],[60.09867,51.87135],[60.50986,51.7964],[60.36787,51.66815],[60.5424,51.61675],[60.92401,51.61124],[60.95655,51.48615],[61.50677,51.40687],[61.55114,51.32746],[61.6813,51.25716],[61.56889,51.23679],[61.4431,50.80679],[60.81833,50.6629],[60.31914,50.67705],[60.17262,50.83312],[60.01288,50.8163],[59.81172,50.54451],[59.51886,50.49937],[59.48928,50.64216],[58.87974,50.70852],[58.3208,51.15151],[57.75578,51.13852],[57.74986,50.93017],[57.44221,50.88354],[57.17302,51.11253],[56.17906,50.93204],[56.11398,50.7471],[55.67774,50.54508],[54.72067,51.03261],[54.56685,51.01958],[54.71476,50.61214],[54.55797,50.52006],[54.41894,50.61214],[54.46331,50.85554],[54.12248,51.11542],[53.69299,51.23466],[53.46165,51.49445],[52.54329,51.48444],[52.36119,51.74161],[51.8246,51.67916],[51.77431,51.49536],[51.301,51.48799],[51.26254,51.68466],[50.59695,51.61859],[50.26859,51.28677],[49.97277,51.2405],[49.76866,51.11067],[49.39001,51.09396],[49.41959,50.85927],[49.12673,50.78639],[48.86936,50.61589],[48.57946,50.63278],[48.90782,50.02281],[48.68352,49.89546],[48.42564,49.82283],[48.24519,49.86099],[48.10044,50.09242],[47.58551,50.47867],[47.30448,50.30894],[47.34589,50.09308],[47.18319,49.93721],[46.9078,49.86707],[46.78398,49.34026],[46.98795,49.23531],[47.04416,49.17152],[47.01458,49.07085],[46.91104,48.99715],[46.78392,48.95352],[46.49011,48.43019],[47.11516,48.27188],[47.12107,47.83687],[47.38731,47.68176],[47.41689,47.83687],[47.64973,47.76559],[48.15348,47.74545],[48.45173,47.40818],[48.52326,47.4102],[49.01136,46.72716],[48.51142,46.69268],[48.54988,46.56267],[49.16518,46.38542],[49.32259,46.26944],[49.88945,46.04554],[49.2134,44.84989],[48.80971,41.95365],[48.5867,41.84306],[48.55078,41.77917],[48.42301,41.65444],[48.40277,41.60441],[48.2878,41.56221],[48.22064,41.51472],[48.07587,41.49957],[47.87973,41.21798],[47.75831,41.19455],[47.62288,41.22969],[47.54504,41.20275],[47.49004,41.26366],[47.34579,41.27884],[47.10762,41.59044],[47.03757,41.55434],[46.99554,41.59743],[47.00955,41.63583],[46.8134,41.76252],[46.75269,41.8623],[46.58924,41.80547],[46.5332,41.87389],[46.42738,41.91323],[45.61676,42.20768],[45.78692,42.48358],[45.36501,42.55268],[45.15318,42.70598],[44.88754,42.74934],[44.80941,42.61277],[44.70002,42.74679],[44.54202,42.75699],[43.95517,42.55396],[43.73119,42.62043],[43.81453,42.74297],[43.0419,43.02413],[43.03322,43.08883],[42.75889,43.19651],[42.66667,43.13917],[42.40563,43.23226],[41.64935,43.22331],[40.65957,43.56212],[40.10657,43.57344],[40.04445,43.47776],[40.03312,43.44262],[40.01007,43.42411],[40.01552,43.42025],[40.00853,43.40578],[40.0078,43.38551],[39.81147,43.06294]]],[[[21.46766,55.21115],[21.51095,55.18507],[21.55605,55.20311],[21.64954,55.1791],[21.85521,55.09493],[21.96505,55.07353],[21.99543,55.08691],[22.03984,55.07888],[22.02582,55.05078],[22.06087,55.02935],[22.11697,55.02131],[22.14267,55.05345],[22.31562,55.0655],[22.47688,55.04408],[22.58907,55.07085],[22.60075,55.01863],[22.65451,54.97037],[22.68723,54.9811],[22.76422,54.92521],[22.85083,54.88711],[22.87317,54.79492],[22.73631,54.72952],[22.73397,54.66604],[22.75467,54.6483],[22.74225,54.64339],[22.7522,54.63525],[22.68021,54.58486],[22.71293,54.56454],[22.67788,54.532],[22.70208,54.45312],[22.7253,54.41732],[22.79705,54.36264],[21.41123,54.32395],[20.63871,54.3706],[19.8038,54.44203],[19.64312,54.45423],[18.57853,55.25302],[20.60454,55.40986],[20.95181,55.27994],[21.26425,55.24456],[21.35465,55.28427],[21.38446,55.29348],[21.46766,55.21115]]]]}},{type:"Feature",properties:{iso1A2:"RW",iso1A3:"RWA",iso1N3:"646",wikidata:"Q1037",nameEn:"Rwanda",groups:["014","202","002"],callingCodes:["250"]},geometry:{type:"MultiPolygon",coordinates:[[[[30.47194,-1.0555],[30.45116,-1.10641],[30.50889,-1.16412],[30.57123,-1.33264],[30.71974,-1.43244],[30.84079,-1.64652],[30.80802,-1.91477],[30.89303,-2.08223],[30.83915,-2.35795],[30.54501,-2.41404],[30.42933,-2.31064],[30.14034,-2.43626],[29.95911,-2.33348],[29.88237,-2.75105],[29.36805,-2.82933],[29.32234,-2.6483],[29.0562,-2.58632],[29.04081,-2.7416],[29.00357,-2.70596],[28.94346,-2.69124],[28.89793,-2.66111],[28.90226,-2.62385],[28.89288,-2.55848],[28.87943,-2.55165],[28.86193,-2.53185],[28.86209,-2.5231],[28.87497,-2.50887],[28.88846,-2.50493],[28.89342,-2.49017],[28.89132,-2.47557],[28.86846,-2.44866],[28.86826,-2.41888],[28.89601,-2.37321],[28.95642,-2.37321],[29.00051,-2.29001],[29.105,-2.27043],[29.17562,-2.12278],[29.11847,-1.90576],[29.24458,-1.69663],[29.24323,-1.66826],[29.36322,-1.50887],[29.45038,-1.5054],[29.53062,-1.40499],[29.59061,-1.39016],[29.82657,-1.31187],[29.912,-1.48269],[30.16369,-1.34303],[30.35212,-1.06896],[30.47194,-1.0555]]]]}},{type:"Feature",properties:{iso1A2:"SA",iso1A3:"SAU",iso1N3:"682",wikidata:"Q851",nameEn:"Saudi Arabia",groups:["145","142"],callingCodes:["966"]},geometry:{type:"MultiPolygon",coordinates:[[[[40.01521,32.05667],[42.97601,30.72204],[42.97796,30.48295],[44.72255,29.19736],[46.42415,29.05947],[46.5527,29.10283],[47.46202,29.0014],[47.58376,28.83382],[47.59863,28.66798],[47.70561,28.5221],[48.42991,28.53628],[49.00421,28.81495],[49.98877,27.87827],[50.37726,27.89227],[50.71771,26.73086],[50.38162,26.53976],[50.26923,26.08243],[50.302,25.87592],[50.57069,25.57887],[50.8133,24.74049],[50.92992,24.54396],[51.09638,24.46907],[51.29972,24.50747],[51.39468,24.62785],[51.58834,24.66608],[51.41644,24.39615],[51.58871,24.27256],[51.59617,24.12041],[52.56622,22.94341],[55.13599,22.63334],[55.2137,22.71065],[55.66469,21.99658],[54.99756,20.00083],[52.00311,19.00083],[49.04884,18.59899],[48.19996,18.20584],[47.58351,17.50366],[47.48245,17.10808],[47.00571,16.94765],[46.76494,17.29151],[46.31018,17.20464],[44.50126,17.47475],[43.70631,17.35762],[43.43005,17.56148],[43.29185,17.53224],[43.22533,17.38343],[43.32653,17.31179],[43.20156,17.25901],[43.17787,17.14717],[43.23967,17.03428],[43.18233,17.02673],[43.1813,16.98438],[43.19328,16.94703],[43.1398,16.90696],[43.18338,16.84852],[43.22012,16.83932],[43.22956,16.80613],[43.24801,16.80613],[43.26303,16.79479],[43.25857,16.75304],[43.21325,16.74416],[43.22066,16.65179],[43.15274,16.67248],[43.11601,16.53166],[42.97215,16.51093],[42.94351,16.49467],[42.94625,16.39721],[42.76801,16.40371],[42.15205,16.40211],[41.37609,16.19728],[39.63762,18.37348],[37.8565,22.00903],[34.51305,27.70027],[34.46254,27.99552],[34.88293,29.37455],[34.95987,29.35727],[36.07081,29.18469],[36.50005,29.49696],[36.75083,29.86903],[37.4971,29.99949],[37.66395,30.33245],[37.99354,30.49998],[36.99791,31.50081],[38.99233,31.99721],[39.29903,32.23259],[40.01521,32.05667]]]]}},{type:"Feature",properties:{iso1A2:"SB",iso1A3:"SLB",iso1N3:"090",wikidata:"Q685",nameEn:"Solomon Islands",groups:["054","009"],driveSide:"left",callingCodes:["677"]},geometry:{type:"MultiPolygon",coordinates:[[[[174,-12.72535],[160.04026,-13.08769],[154.74815,-7.33315],[155.60735,-6.92266],[155.69784,-6.92661],[155.92557,-6.84664],[156.03993,-6.65703],[156.03296,-6.55528],[160.43769,-4.17974],[174,-12.72535]]]]}},{type:"Feature",properties:{iso1A2:"SC",iso1A3:"SYC",iso1N3:"690",wikidata:"Q1042",nameEn:"Seychelles",groups:["014","202","002"],driveSide:"left",callingCodes:["248"]},geometry:{type:"MultiPolygon",coordinates:[[[[43.75112,-10.38913],[66.3222,5.65313],[54.83239,-10.93575],[43.75112,-10.38913]]]]}},{type:"Feature",properties:{iso1A2:"SD",iso1A3:"SDN",iso1N3:"729",wikidata:"Q1049",nameEn:"Sudan",groups:["015","002"],callingCodes:["249"]},geometry:{type:"MultiPolygon",coordinates:[[[[37.8565,22.00903],[39.63762,18.37348],[38.57727,17.98125],[38.45916,17.87167],[38.37133,17.66269],[38.13362,17.53906],[37.50967,17.32199],[37.42694,17.04041],[36.99777,17.07172],[36.92193,16.23451],[36.76371,15.80831],[36.69761,15.75323],[36.54276,15.23478],[36.44337,15.14963],[36.54376,14.25597],[36.44653,13.95666],[36.48824,13.83954],[36.38993,13.56459],[36.24545,13.36759],[36.13374,12.92665],[36.16651,12.88019],[36.14268,12.70879],[36.01458,12.72478],[35.70476,12.67101],[35.24302,11.91132],[35.11492,11.85156],[35.05832,11.71158],[35.09556,11.56278],[34.95704,11.24448],[35.01215,11.19626],[34.93172,10.95946],[34.97789,10.91559],[34.97491,10.86147],[34.86916,10.78832],[34.86618,10.74588],[34.77532,10.69027],[34.77383,10.74588],[34.59062,10.89072],[34.4372,10.781],[34.2823,10.53508],[34.34783,10.23914],[34.32102,10.11599],[34.22718,10.02506],[34.20484,9.9033],[34.13186,9.7492],[34.08717,9.55243],[34.10229,9.50238],[33.87958,9.49937],[33.9082,9.762],[33.96323,9.80972],[33.99185,9.99623],[33.96984,10.15446],[33.90159,10.17179],[33.80913,10.32994],[33.66604,10.44254],[33.52294,10.64382],[33.24645,10.77913],[33.26977,10.83632],[33.13988,11.43248],[33.25876,12.22111],[32.73921,12.22757],[32.73921,11.95203],[32.10079,11.95203],[32.39578,11.70208],[32.39358,11.18207],[32.46967,11.04662],[31.99177,10.65065],[31.77539,10.28939],[31.28504,9.75287],[30.84605,9.7498],[30.82893,9.71451],[30.53005,9.95992],[30.00389,10.28633],[29.94629,10.29245],[29.54,10.07949],[29.53844,9.75133],[29.06988,9.74826],[28.99983,9.67155],[27.90704,9.61323],[27.14427,9.62858],[26.70685,9.48735],[26.35815,9.57946],[26.21338,9.91545],[25.93241,10.17941],[25.93163,10.38159],[25.78141,10.42599],[25.0918,10.33718],[25.05688,10.06776],[24.97739,9.9081],[24.84653,9.80643],[24.49389,9.79962],[24.12744,9.73784],[24.09319,9.66572],[23.69155,9.67566],[23.67164,9.86923],[23.3128,10.45214],[23.02221,10.69235],[22.87758,10.91915],[22.97249,11.21955],[22.93124,11.41645],[22.7997,11.40424],[22.54907,11.64372],[22.64092,12.07485],[22.48369,12.02766],[22.50548,12.16769],[22.38873,12.45514],[22.46345,12.61925],[22.22684,12.74682],[22.15679,12.66634],[21.98711,12.63292],[21.89371,12.68001],[21.81432,12.81362],[21.94819,13.05637],[22.02914,13.13976],[22.1599,13.19281],[22.29689,13.3731],[22.08674,13.77863],[22.22995,13.96754],[22.5553,14.11704],[22.55997,14.23024],[22.44944,14.24986],[22.38562,14.58907],[22.70474,14.69149],[22.66115,14.86308],[22.99584,15.22989],[22.99584,15.40105],[22.92579,15.47007],[22.93201,15.55107],[23.10792,15.71297],[23.38812,15.69649],[23.62785,15.7804],[23.99997,15.69575],[23.99539,19.49944],[23.99715,20.00038],[24.99794,19.99661],[24.99885,21.99535],[33.17563,22.00405],[33.57251,21.72406],[33.99686,21.76784],[34.0765,22.00501],[37.8565,22.00903]]]]}},{type:"Feature",properties:{iso1A2:"SE",iso1A3:"SWE",iso1N3:"752",wikidata:"Q34",nameEn:"Sweden",groups:["EU","154","150"],callingCodes:["46"]},geometry:{type:"MultiPolygon",coordinates:[[[[24.15791,65.85385],[24.14798,65.83466],[24.15107,65.81427],[24.14112,65.39731],[20.15877,63.06556],[19.23413,60.61414],[19.08191,60.19152],[20.5104,59.15546],[19.84909,57.57876],[19.64795,57.06466],[15.79951,55.54655],[14.89259,55.5623],[14.28399,55.1553],[12.84405,55.13257],[12.60345,55.42675],[12.88472,55.63369],[12.6372,55.91371],[12.65312,56.04345],[12.07466,56.29488],[12.16597,56.60205],[10.40861,58.38489],[10.64958,58.89391],[11.08911,58.98745],[11.15367,59.07862],[11.34459,59.11672],[11.4601,58.99022],[11.45199,58.89604],[11.65732,58.90177],[11.8213,59.24985],[11.69297,59.59442],[11.92112,59.69531],[11.87121,59.86039],[12.15641,59.8926],[12.36317,59.99259],[12.52003,60.13846],[12.59133,60.50559],[12.2277,61.02442],[12.69115,61.06584],[12.86939,61.35427],[12.57707,61.56547],[12.40595,61.57226],[12.14746,61.7147],[12.29187,62.25699],[12.07085,62.6297],[12.19919,63.00104],[11.98529,63.27487],[12.19919,63.47935],[12.14928,63.59373],[12.74105,64.02171],[13.23411,64.09087],[13.98222,64.00953],[14.16051,64.18725],[14.11117,64.46674],[13.64276,64.58402],[14.50926,65.31786],[14.53778,66.12399],[15.05113,66.15572],[15.49318,66.28509],[15.37197,66.48217],[16.35589,67.06419],[16.39154,67.21653],[16.09922,67.4364],[16.12774,67.52106],[16.38441,67.52923],[16.7409,67.91037],[17.30416,68.11591],[17.90787,67.96537],[18.13836,68.20874],[18.1241,68.53721],[18.39503,68.58672],[18.63032,68.50849],[18.97255,68.52416],[19.93508,68.35911],[20.22027,68.48759],[19.95647,68.55546],[20.22027,68.67246],[20.33435,68.80174],[20.28444,68.93283],[20.0695,69.04469],[20.55258,69.06069],[20.78802,69.03087],[20.91658,68.96764],[20.85104,68.93142],[20.90649,68.89696],[21.03001,68.88969],[22.00429,68.50692],[22.73028,68.40881],[23.10336,68.26551],[23.15377,68.14759],[23.26469,68.15134],[23.40081,68.05545],[23.65793,67.9497],[23.45627,67.85297],[23.54701,67.59306],[23.39577,67.46974],[23.75372,67.43688],[23.75372,67.29914],[23.54701,67.25435],[23.58735,67.20752],[23.56214,67.17038],[23.98563,66.84149],[23.98059,66.79585],[23.89488,66.772],[23.85959,66.56434],[23.63776,66.43568],[23.67591,66.3862],[23.64982,66.30603],[23.71339,66.21299],[23.90497,66.15802],[24.15791,65.85385]]]]}},{type:"Feature",properties:{iso1A2:"SG",iso1A3:"SGP",iso1N3:"702",wikidata:"Q334",nameEn:"Singapore",groups:["035","142"],driveSide:"left",callingCodes:["65"]},geometry:{type:"MultiPolygon",coordinates:[[[[104.00131,1.42405],[104.02277,1.4438],[104.04622,1.44691],[104.07348,1.43322],[104.08871,1.42015],[104.09162,1.39694],[104.08072,1.35998],[104.12282,1.27714],[104.03085,1.26954],[103.74084,1.12902],[103.66049,1.18825],[103.56591,1.19719],[103.62738,1.35255],[103.67468,1.43166],[103.7219,1.46108],[103.74161,1.4502],[103.76395,1.45183],[103.81181,1.47953],[103.86383,1.46288],[103.89565,1.42841],[103.93384,1.42926],[104.00131,1.42405]]]]}},{type:"Feature",properties:{iso1A2:"SH",iso1A3:"SHN",iso1N3:"654",wikidata:"Q34497",nameEn:"Saint Helena, Ascension and Tristan da Cunha",country:"GB",groups:["011","202","002"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["290"]},geometry:{type:"MultiPolygon",coordinates:[[[[-14.82771,-8.70814],[-13.33271,-8.07391],[-4.97086,-15.55882],[-9.34669,-41.00353],[-13.29655,-40.02846],[-13.41694,-37.88844],[-11.48092,-37.8367],[-11.55782,-36.60319],[-13.48367,-36.6746],[-14.82771,-8.70814]]]]}},{type:"Feature",properties:{iso1A2:"SI",iso1A3:"SVN",iso1N3:"705",wikidata:"Q215",nameEn:"Slovenia",groups:["EU","039","150"],callingCodes:["386"]},geometry:{type:"MultiPolygon",coordinates:[[[[16.50139,46.56684],[16.52885,46.53303],[16.52604,46.5051],[16.59527,46.47524],[16.52604,46.47831],[16.5007,46.49644],[16.44036,46.5171],[16.38771,46.53608],[16.37193,46.55008],[16.29793,46.5121],[16.26733,46.51505],[16.26759,46.50566],[16.23961,46.49653],[16.25124,46.48067],[16.27398,46.42875],[16.27329,46.41467],[16.30162,46.40437],[16.30233,46.37837],[16.18824,46.38282],[16.14859,46.40547],[16.05281,46.39141],[16.05065,46.3833],[16.07314,46.36458],[16.07616,46.3463],[15.97965,46.30652],[15.79284,46.25811],[15.78817,46.21719],[15.75479,46.20336],[15.75436,46.21969],[15.67395,46.22478],[15.6434,46.21396],[15.64904,46.19229],[15.59909,46.14761],[15.6083,46.11992],[15.62317,46.09103],[15.72977,46.04682],[15.71246,46.01196],[15.70327,46.00015],[15.70636,45.92116],[15.67967,45.90455],[15.68383,45.88867],[15.68232,45.86819],[15.70411,45.8465],[15.66662,45.84085],[15.64185,45.82915],[15.57952,45.84953],[15.52234,45.82195],[15.47325,45.8253],[15.47531,45.79802],[15.40836,45.79491],[15.25423,45.72275],[15.30872,45.69014],[15.34919,45.71623],[15.4057,45.64727],[15.38952,45.63682],[15.34214,45.64702],[15.34695,45.63382],[15.31027,45.6303],[15.27747,45.60504],[15.29837,45.5841],[15.30249,45.53224],[15.38188,45.48752],[15.33051,45.45258],[15.27758,45.46678],[15.16862,45.42309],[15.05187,45.49079],[15.02385,45.48533],[14.92266,45.52788],[14.90554,45.47769],[14.81992,45.45913],[14.80124,45.49515],[14.71718,45.53442],[14.68605,45.53006],[14.69694,45.57366],[14.59576,45.62812],[14.60977,45.66403],[14.57397,45.67165],[14.53816,45.6205],[14.5008,45.60852],[14.49769,45.54424],[14.36693,45.48642],[14.32487,45.47142],[14.27681,45.4902],[14.26611,45.48239],[14.24239,45.50607],[14.22371,45.50388],[14.20348,45.46896],[14.07116,45.48752],[14.00578,45.52352],[13.96063,45.50825],[13.99488,45.47551],[13.97309,45.45258],[13.90771,45.45149],[13.88124,45.42637],[13.81742,45.43729],[13.7785,45.46787],[13.67398,45.4436],[13.62902,45.45898],[13.56979,45.4895],[13.45644,45.59464],[13.6076,45.64761],[13.7198,45.59352],[13.74587,45.59811],[13.78445,45.5825],[13.84106,45.58185],[13.86771,45.59898],[13.8695,45.60835],[13.9191,45.6322],[13.87933,45.65207],[13.83422,45.68703],[13.83332,45.70855],[13.8235,45.7176],[13.66986,45.79955],[13.59784,45.8072],[13.58858,45.83503],[13.57563,45.8425],[13.58644,45.88173],[13.59565,45.89446],[13.60857,45.89907],[13.61931,45.91782],[13.63815,45.93607],[13.6329,45.94894],[13.64307,45.98326],[13.63458,45.98947],[13.62074,45.98388],[13.58903,45.99009],[13.56759,45.96991],[13.52963,45.96588],[13.50104,45.98078],[13.47474,46.00546],[13.49702,46.01832],[13.50998,46.04498],[13.49568,46.04839],[13.50104,46.05986],[13.57072,46.09022],[13.64053,46.13587],[13.66472,46.17392],[13.64451,46.18966],[13.56682,46.18703],[13.56114,46.2054],[13.47587,46.22725],[13.42218,46.20758],[13.37671,46.29668],[13.44808,46.33507],[13.43418,46.35992],[13.47019,46.3621],[13.5763,46.40915],[13.5763,46.42613],[13.59777,46.44137],[13.68684,46.43881],[13.7148,46.5222],[13.89837,46.52331],[14.00422,46.48474],[14.04002,46.49117],[14.12097,46.47724],[14.15989,46.43327],[14.28326,46.44315],[14.314,46.43327],[14.42608,46.44614],[14.45877,46.41717],[14.52176,46.42617],[14.56463,46.37208],[14.5942,46.43434],[14.66892,46.44936],[14.72185,46.49974],[14.81836,46.51046],[14.83549,46.56614],[14.86419,46.59411],[14.87129,46.61],[14.92283,46.60848],[14.96002,46.63459],[14.98024,46.6009],[15.01451,46.641],[15.14215,46.66131],[15.23711,46.63994],[15.41235,46.65556],[15.45514,46.63697],[15.46906,46.61321],[15.54431,46.6312],[15.55333,46.64988],[15.54533,46.66985],[15.59826,46.68908],[15.62317,46.67947],[15.63255,46.68069],[15.6365,46.6894],[15.6543,46.69228],[15.6543,46.70616],[15.67411,46.70735],[15.69523,46.69823],[15.72279,46.69548],[15.73823,46.70011],[15.76771,46.69863],[15.78518,46.70712],[15.8162,46.71897],[15.87691,46.7211],[15.94864,46.68769],[15.98512,46.68463],[15.99988,46.67947],[16.04036,46.6549],[16.04347,46.68694],[16.02808,46.71094],[15.99769,46.7266],[15.98432,46.74991],[15.99126,46.78199],[15.99054,46.82772],[16.05786,46.83927],[16.10983,46.867],[16.14365,46.8547],[16.15711,46.85434],[16.21892,46.86961],[16.2365,46.87775],[16.2941,46.87137],[16.34547,46.83836],[16.3408,46.80641],[16.31303,46.79838],[16.30966,46.7787],[16.37816,46.69975],[16.42641,46.69228],[16.41863,46.66238],[16.38594,46.6549],[16.39217,46.63673],[16.50139,46.56684]]]]}},{type:"Feature",properties:{iso1A2:"SJ",iso1A3:"SJM",iso1N3:"744",wikidata:"Q842829",nameEn:"Svalbard and Jan Mayen",country:"NO",groups:["154","150"],callingCodes:["47 79"]},geometry:{type:"MultiPolygon",coordinates:[[[[-7.49892,77.24208],[36.85549,84.09565],[32.07813,72.01005],[-7.49892,77.24208]]],[[[-9.18243,72.23144],[-5.93364,70.76368],[-10.71459,70.09565],[-9.18243,72.23144]]]]}},{type:"Feature",properties:{iso1A2:"SK",iso1A3:"SVK",iso1N3:"703",wikidata:"Q214",nameEn:"Slovakia",groups:["EU","151","150"],callingCodes:["421"]},geometry:{type:"MultiPolygon",coordinates:[[[[19.82237,49.27806],[19.75286,49.20751],[19.86409,49.19316],[19.90529,49.23532],[19.98494,49.22904],[20.08238,49.1813],[20.13738,49.31685],[20.21977,49.35265],[20.31453,49.34817],[20.31728,49.39914],[20.39939,49.3896],[20.46422,49.41612],[20.5631,49.375],[20.61666,49.41791],[20.72274,49.41813],[20.77971,49.35383],[20.9229,49.29626],[20.98733,49.30774],[21.09799,49.37176],[21.041,49.41791],[21.12477,49.43666],[21.19756,49.4054],[21.27858,49.45988],[21.43376,49.41433],[21.62328,49.4447],[21.77983,49.35443],[21.82927,49.39467],[21.96385,49.3437],[22.04427,49.22136],[22.56155,49.08865],[22.54338,49.01424],[22.48296,48.99172],[22.42934,48.92857],[22.34151,48.68893],[22.21379,48.6218],[22.16023,48.56548],[22.14689,48.4005],[21.83339,48.36242],[21.8279,48.33321],[21.72525,48.34628],[21.67134,48.3989],[21.6068,48.50365],[21.44063,48.58456],[21.11516,48.49546],[20.83248,48.5824],[20.5215,48.53336],[20.29943,48.26104],[20.24312,48.2784],[19.92452,48.1283],[19.63338,48.25006],[19.52489,48.19791],[19.47957,48.09437],[19.28182,48.08336],[19.23924,48.0595],[19.01952,48.07052],[18.82176,48.04206],[18.76134,47.97499],[18.76821,47.87469],[18.8506,47.82308],[18.74074,47.8157],[18.66521,47.76772],[18.56496,47.76588],[18.29305,47.73541],[18.02938,47.75665],[17.71215,47.7548],[17.23699,48.02094],[17.16001,48.00636],[17.07039,48.0317],[17.09168,48.09366],[17.05735,48.14179],[17.02919,48.13996],[16.97701,48.17385],[16.89461,48.31332],[16.90903,48.32519],[16.84243,48.35258],[16.83317,48.38138],[16.83588,48.3844],[16.8497,48.38321],[16.85204,48.44968],[16.94611,48.53614],[16.93955,48.60371],[17.00215,48.70887],[17.11202,48.82925],[17.19355,48.87602],[17.29054,48.85546],[17.3853,48.80936],[17.45671,48.85004],[17.5295,48.81117],[17.7094,48.86721],[17.73126,48.87885],[17.77944,48.92318],[17.87831,48.92679],[17.91814,49.01784],[18.06885,49.03157],[18.1104,49.08624],[18.15022,49.24518],[18.18456,49.28909],[18.36446,49.3267],[18.4139,49.36517],[18.4084,49.40003],[18.44686,49.39467],[18.54848,49.47059],[18.53063,49.49022],[18.57183,49.51162],[18.6144,49.49824],[18.67757,49.50895],[18.74761,49.492],[18.84521,49.51672],[18.94536,49.52143],[18.97283,49.49914],[18.9742,49.39557],[19.18019,49.41165],[19.25435,49.53391],[19.36009,49.53747],[19.37795,49.574],[19.45348,49.61583],[19.52626,49.57311],[19.53313,49.52856],[19.57845,49.46077],[19.64162,49.45184],[19.6375,49.40897],[19.72127,49.39288],[19.78581,49.41701],[19.82237,49.27806]]]]}},{type:"Feature",properties:{iso1A2:"SL",iso1A3:"SLE",iso1N3:"694",wikidata:"Q1044",nameEn:"Sierra Leone",groups:["011","202","002"],callingCodes:["232"]},geometry:{type:"MultiPolygon",coordinates:[[[[-10.27575,8.48711],[-10.30084,8.30008],[-10.31635,8.28554],[-10.29839,8.21283],[-10.35227,8.15223],[-10.45023,8.15627],[-10.51554,8.1393],[-10.57523,8.04829],[-10.60492,8.04072],[-10.60422,7.7739],[-11.29417,7.21576],[-11.4027,6.97746],[-11.50429,6.92704],[-12.15048,6.15992],[-14.36218,8.64107],[-13.29911,9.04245],[-13.18586,9.0925],[-13.08953,9.0409],[-12.94095,9.26335],[-12.76788,9.3133],[-12.47254,9.86834],[-12.24262,9.92386],[-12.12634,9.87203],[-11.91023,9.93927],[-11.89624,9.99763],[-11.2118,10.00098],[-10.6534,9.29919],[-10.74484,9.07998],[-10.5783,9.06386],[-10.56197,8.81225],[-10.47707,8.67669],[-10.61422,8.5314],[-10.70565,8.29235],[-10.63934,8.35326],[-10.54891,8.31174],[-10.37257,8.48941],[-10.27575,8.48711]]]]}},{type:"Feature",properties:{iso1A2:"SM",iso1A3:"SMR",iso1N3:"674",wikidata:"Q238",nameEn:"San Marino",groups:["039","150"],callingCodes:["378"]},geometry:{type:"MultiPolygon",coordinates:[[[[12.45648,43.89369],[12.44184,43.90498],[12.41641,43.89991],[12.40935,43.9024],[12.41233,43.90956],[12.40733,43.92379],[12.41551,43.92984],[12.41165,43.93769],[12.40506,43.94325],[12.40415,43.95485],[12.41414,43.95273],[12.42005,43.9578],[12.43662,43.95698],[12.44684,43.96597],[12.46205,43.97463],[12.47853,43.98052],[12.49406,43.98492],[12.50678,43.99113],[12.51463,43.99122],[12.5154,43.98508],[12.51064,43.98165],[12.51109,43.97201],[12.50622,43.97131],[12.50875,43.96198],[12.50655,43.95796],[12.51427,43.94897],[12.51553,43.94096],[12.50496,43.93017],[12.50269,43.92363],[12.49724,43.92248],[12.49247,43.91774],[12.49429,43.90973],[12.48771,43.89706],[12.45648,43.89369]]]]}},{type:"Feature",properties:{iso1A2:"SN",iso1A3:"SEN",iso1N3:"686",wikidata:"Q1041",nameEn:"Senegal",groups:["011","202","002"],callingCodes:["221"]},geometry:{type:"MultiPolygon",coordinates:[[[[-14.32144,16.61495],[-13.80075,16.13961],[-13.43135,16.09022],[-13.11029,15.52116],[-12.23936,14.76324],[-11.93043,13.84505],[-12.06897,13.71049],[-11.83345,13.33333],[-11.63025,13.39174],[-11.39935,12.97808],[-11.37536,12.40788],[-11.46267,12.44559],[-11.91331,12.42008],[-12.35415,12.32758],[-12.87336,12.51892],[-13.06603,12.49342],[-13.05296,12.64003],[-13.70523,12.68013],[-15.17582,12.6847],[-15.67302,12.42974],[-16.20591,12.46157],[-16.38191,12.36449],[-16.70562,12.34803],[-17.4623,11.92379],[-17.43966,13.04579],[-16.74676,13.06025],[-16.69343,13.16791],[-15.80355,13.16729],[-15.80478,13.34832],[-15.26908,13.37768],[-15.14917,13.57989],[-14.36795,13.23033],[-13.79409,13.34472],[-13.8955,13.59126],[-14.34721,13.46578],[-14.93719,13.80173],[-15.36504,13.79313],[-15.47902,13.58758],[-17.43598,13.59273],[-18.35085,14.63444],[-17.15288,16.07139],[-16.50854,16.09032],[-16.48967,16.0496],[-16.44814,16.09753],[-16.4429,16.20605],[-16.27016,16.51565],[-15.6509,16.50315],[-15.00557,16.64997],[-14.32144,16.61495]]]]}},{type:"Feature",properties:{iso1A2:"SO",iso1A3:"SOM",iso1N3:"706",wikidata:"Q1045",nameEn:"Somalia",groups:["014","202","002"],callingCodes:["252"]},geometry:{type:"MultiPolygon",coordinates:[[[[48.95249,11.56816],[51.12877,12.56479],[52.253,11.68582],[49.16337,2.78611],[41.75542,-1.85308],[41.56362,-1.66375],[41.56,-1.59812],[41.00099,-0.83068],[40.98767,2.82959],[41.31368,3.14314],[41.89488,3.97375],[42.07619,4.17667],[42.55853,4.20518],[42.84526,4.28357],[42.97746,4.44032],[43.04177,4.57923],[43.40263,4.79289],[44.02436,4.9451],[44.98104,4.91821],[47.97917,8.00124],[47.92477,8.00111],[46.99339,7.9989],[44.19222,8.93028],[43.32613,9.59205],[43.23518,9.84605],[43.0937,9.90579],[42.87643,10.18441],[42.69452,10.62672],[42.95776,10.98533],[43.42425,11.70983],[48.95249,11.56816]]]]}},{type:"Feature",properties:{iso1A2:"SR",iso1A3:"SUR",iso1N3:"740",wikidata:"Q730",nameEn:"Suriname",groups:["005","419","019"],driveSide:"left",callingCodes:["597"]},geometry:{type:"MultiPolygon",coordinates:[[[[-54.26916,5.26909],[-54.4717,4.91964],[-54.38444,4.13222],[-54.19367,3.84387],[-54.05128,3.63557],[-53.98914,3.627],[-53.9849,3.58697],[-54.28534,2.67798],[-54.42864,2.42442],[-54.6084,2.32856],[-55.01919,2.564],[-55.71493,2.40342],[-55.96292,2.53188],[-56.13054,2.27723],[-55.92159,2.05236],[-55.89863,1.89861],[-55.99278,1.83137],[-56.47045,1.95135],[-56.55439,2.02003],[-56.70519,2.02964],[-57.35891,3.32121],[-58.0307,3.95513],[-57.8699,4.89394],[-57.37442,5.0208],[-57.22536,5.15605],[-57.31629,5.33714],[-56.84822,6.73257],[-53.7094,6.2264],[-54.01074,5.68785],[-54.01877,5.52789],[-54.26916,5.26909]]]]}},{type:"Feature",properties:{iso1A2:"SS",iso1A3:"SSD",iso1N3:"728",wikidata:"Q958",nameEn:"South Sudan",groups:["014","202","002"],callingCodes:["211"]},geometry:{type:"MultiPolygon",coordinates:[[[[34.10229,9.50238],[34.14304,9.04654],[34.14453,8.60204],[34.01346,8.50041],[33.89579,8.4842],[33.87195,8.41938],[33.71407,8.3678],[33.66938,8.44442],[33.54575,8.47094],[33.3119,8.45474],[33.19721,8.40317],[33.1853,8.29264],[33.18083,8.13047],[33.08401,8.05822],[33.0006,7.90333],[33.04944,7.78989],[33.24637,7.77939],[33.32531,7.71297],[33.44745,7.7543],[33.71407,7.65983],[33.87642,7.5491],[34.02984,7.36449],[34.03878,7.27437],[34.01495,7.25664],[34.19369,7.12807],[34.19369,7.04382],[34.35753,6.91963],[34.47669,6.91076],[34.53925,6.82794],[34.53776,6.74808],[34.65096,6.72589],[34.77459,6.5957],[34.87736,6.60161],[35.01738,6.46991],[34.96227,6.26415],[35.00546,5.89387],[35.12611,5.68937],[35.13058,5.62118],[35.31188,5.50106],[35.29938,5.34042],[35.50792,5.42431],[35.8576,5.33413],[35.81968,5.10757],[35.82118,4.77382],[35.9419,4.61933],[35.51424,4.61643],[35.42366,4.76969],[35.47843,4.91872],[35.30992,4.90402],[35.34151,5.02364],[34.47601,4.72162],[33.9873,4.23316],[33.51264,3.75068],[33.18356,3.77812],[33.02852,3.89296],[32.89746,3.81339],[32.72021,3.77327],[32.41337,3.748],[32.20782,3.6053],[32.19888,3.50867],[32.08866,3.53543],[32.08491,3.56287],[32.05187,3.589],[31.95907,3.57408],[31.96205,3.6499],[31.86821,3.78664],[31.81459,3.82083],[31.72075,3.74354],[31.50776,3.63652],[31.50478,3.67814],[31.29476,3.8015],[31.16666,3.79853],[30.97601,3.693],[30.85153,3.48867],[30.85997,3.5743],[30.80713,3.60506],[30.78512,3.67097],[30.56277,3.62703],[30.57378,3.74567],[30.55396,3.84451],[30.47691,3.83353],[30.27658,3.95653],[30.22374,3.93896],[30.1621,4.10586],[30.06964,4.13221],[29.79666,4.37809],[29.82087,4.56246],[29.49726,4.7007],[29.43341,4.50101],[29.22207,4.34297],[29.03054,4.48784],[28.8126,4.48784],[28.6651,4.42638],[28.20719,4.35614],[27.79551,4.59976],[27.76469,4.79284],[27.65462,4.89375],[27.56656,4.89375],[27.44012,5.07349],[27.26886,5.25876],[27.23017,5.37167],[27.28621,5.56382],[27.22705,5.62889],[27.22705,5.71254],[26.51721,6.09655],[26.58259,6.1987],[26.32729,6.36272],[26.38022,6.63493],[25.90076,7.09549],[25.37461,7.33024],[25.35281,7.42595],[25.20337,7.50312],[25.20649,7.61115],[25.29214,7.66675],[25.25319,7.8487],[24.98855,7.96588],[24.85156,8.16933],[24.35965,8.26177],[24.13238,8.36959],[24.25691,8.69288],[23.51905,8.71749],[23.59065,8.99743],[23.44744,8.99128],[23.4848,9.16959],[23.56263,9.19418],[23.64358,9.28637],[23.64981,9.44303],[23.62179,9.53823],[23.69155,9.67566],[24.09319,9.66572],[24.12744,9.73784],[24.49389,9.79962],[24.84653,9.80643],[24.97739,9.9081],[25.05688,10.06776],[25.0918,10.33718],[25.78141,10.42599],[25.93163,10.38159],[25.93241,10.17941],[26.21338,9.91545],[26.35815,9.57946],[26.70685,9.48735],[27.14427,9.62858],[27.90704,9.61323],[28.99983,9.67155],[29.06988,9.74826],[29.53844,9.75133],[29.54,10.07949],[29.94629,10.29245],[30.00389,10.28633],[30.53005,9.95992],[30.82893,9.71451],[30.84605,9.7498],[31.28504,9.75287],[31.77539,10.28939],[31.99177,10.65065],[32.46967,11.04662],[32.39358,11.18207],[32.39578,11.70208],[32.10079,11.95203],[32.73921,11.95203],[32.73921,12.22757],[33.25876,12.22111],[33.13988,11.43248],[33.26977,10.83632],[33.24645,10.77913],[33.52294,10.64382],[33.66604,10.44254],[33.80913,10.32994],[33.90159,10.17179],[33.96984,10.15446],[33.99185,9.99623],[33.96323,9.80972],[33.9082,9.762],[33.87958,9.49937],[34.10229,9.50238]]]]}},{type:"Feature",properties:{iso1A2:"ST",iso1A3:"STP",iso1N3:"678",wikidata:"Q1039",nameEn:"São Tomé and Principe",groups:["017","202","002"],callingCodes:["239"]},geometry:{type:"MultiPolygon",coordinates:[[[[5.9107,-0.09539],[7.23334,2.23756],[8.0168,1.79377],[6.69416,-0.53945],[5.9107,-0.09539]]]]}},{type:"Feature",properties:{iso1A2:"SV",iso1A3:"SLV",iso1N3:"222",wikidata:"Q792",nameEn:"El Salvador",groups:["013","003","419","019"],callingCodes:["503"]},geometry:{type:"MultiPolygon",coordinates:[[[[-89.34776,14.43013],[-89.04187,14.33644],[-88.94608,14.20207],[-88.85785,14.17763],[-88.815,14.11652],[-88.73182,14.10919],[-88.70661,14.04317],[-88.49738,13.97224],[-88.48982,13.86458],[-88.25791,13.91108],[-88.23018,13.99915],[-88.07641,13.98447],[-88.00331,13.86948],[-87.7966,13.91353],[-87.68821,13.80829],[-87.73106,13.75443],[-87.78148,13.52906],[-87.71657,13.50577],[-87.72115,13.46083],[-87.73841,13.44169],[-87.77354,13.45767],[-87.83467,13.44655],[-87.84675,13.41078],[-87.80177,13.35689],[-87.73714,13.32715],[-87.69751,13.25228],[-87.55124,13.12523],[-87.7346,13.13228],[-88.11443,12.63306],[-90.55276,12.8866],[-90.11344,13.73679],[-90.10505,13.85104],[-89.88937,14.0396],[-89.81807,14.07073],[-89.76103,14.02923],[-89.73251,14.04133],[-89.75569,14.07073],[-89.70756,14.1537],[-89.61844,14.21937],[-89.52397,14.22628],[-89.50614,14.26084],[-89.58814,14.33165],[-89.57441,14.41637],[-89.39028,14.44561],[-89.34776,14.43013]]]]}},{type:"Feature",properties:{iso1A2:"SX",iso1A3:"SXM",iso1N3:"534",wikidata:"Q26273",nameEn:"Sint Maarten",country:"NL",groups:["029","003","419","019"],callingCodes:["1 721"]},geometry:{type:"MultiPolygon",coordinates:[[[[-63.29212,17.90532],[-63.33064,17.9615],[-63.13584,18.0541],[-63.11096,18.05368],[-63.09686,18.04608],[-63.07759,18.04943],[-63.0579,18.06614],[-63.04039,18.05619],[-63.02323,18.05757],[-62.93924,18.02904],[-63.07669,17.79659],[-63.29212,17.90532]]]]}},{type:"Feature",properties:{iso1A2:"SY",iso1A3:"SYR",iso1N3:"760",wikidata:"Q858",nameEn:"Syria",groups:["145","142"],callingCodes:["963"]},geometry:{type:"MultiPolygon",coordinates:[[[[42.23683,37.2863],[42.26039,37.27017],[42.2824,37.2798],[42.34735,37.22548],[42.32313,37.17814],[42.35724,37.10998],[42.36697,37.0627],[41.81736,36.58782],[41.40058,36.52502],[41.28864,36.35368],[41.2564,36.06012],[41.37027,35.84095],[41.38184,35.62502],[41.26569,35.42708],[41.21654,35.1508],[41.2345,34.80049],[41.12388,34.65742],[40.97676,34.39788],[40.64314,34.31604],[38.79171,33.37328],[36.83946,32.31293],[36.40959,32.37908],[36.23948,32.50108],[36.20875,32.49529],[36.20379,32.52751],[36.08074,32.51463],[36.02239,32.65911],[35.96633,32.66237],[35.93307,32.71966],[35.88405,32.71321],[35.75983,32.74803],[35.78745,32.77938],[35.83758,32.82817],[35.84021,32.8725],[35.87012,32.91976],[35.89298,32.9456],[35.87188,32.98028],[35.84802,33.1031],[35.81911,33.11077],[35.81911,33.1336],[35.84285,33.16673],[35.83846,33.19397],[35.81647,33.2028],[35.81295,33.24841],[35.77513,33.27342],[35.813,33.3172],[35.77477,33.33609],[35.81324,33.36354],[35.82577,33.40479],[35.88668,33.43183],[35.94816,33.47886],[35.94465,33.52774],[36.05723,33.57904],[35.9341,33.6596],[36.06778,33.82927],[36.14517,33.85118],[36.3967,33.83365],[36.38263,33.86579],[36.28589,33.91981],[36.41078,34.05253],[36.50576,34.05982],[36.5128,34.09916],[36.62537,34.20251],[36.59195,34.2316],[36.58667,34.27667],[36.60778,34.31009],[36.56556,34.31881],[36.53039,34.3798],[36.55853,34.41609],[36.46179,34.46541],[36.4442,34.50165],[36.34745,34.5002],[36.3369,34.52629],[36.39846,34.55672],[36.41429,34.61175],[36.45299,34.59438],[36.46003,34.6378],[36.42941,34.62505],[36.35384,34.65447],[36.35135,34.68516],[36.32399,34.69334],[36.29165,34.62991],[35.98718,34.64977],[35.97386,34.63322],[35.48515,34.70851],[35.51152,36.10954],[35.931,35.92109],[35.98499,35.94107],[36.00514,35.94113],[36.01844,35.92403],[35.99829,35.88242],[36.11827,35.85923],[36.13919,35.83692],[36.14029,35.81015],[36.1623,35.80925],[36.17441,35.92076],[36.19973,35.95195],[36.25366,35.96264],[36.27678,35.94839],[36.29769,35.96086],[36.28338,36.00273],[36.30099,36.00985],[36.33956,35.98687],[36.37474,36.01163],[36.39206,36.22088],[36.4617,36.20461],[36.50463,36.2419],[36.6125,36.22592],[36.68672,36.23677],[36.65653,36.33861],[36.6081,36.33772],[36.54206,36.49539],[36.58829,36.58295],[36.57398,36.65186],[36.62681,36.71189],[36.61581,36.74629],[36.66727,36.82901],[36.99557,36.75997],[36.99886,36.74012],[37.04399,36.73483],[37.04619,36.71101],[37.01647,36.69512],[37.02088,36.66422],[37.08279,36.63495],[37.10894,36.6704],[37.16177,36.66069],[37.21988,36.6736],[37.47253,36.63243],[37.49103,36.66904],[37.68048,36.75065],[37.81974,36.76055],[38.21064,36.91842],[38.38859,36.90064],[38.55908,36.84429],[38.74042,36.70629],[39.03217,36.70911],[39.21538,36.66834],[39.81589,36.75538],[40.69136,37.0996],[40.90856,37.13147],[41.21937,37.07665],[41.515,37.08084],[42.00894,37.17209],[42.18225,37.28569],[42.19301,37.31323],[42.2112,37.32491],[42.22257,37.31395],[42.22381,37.30238],[42.20454,37.28715],[42.21548,37.28026],[42.23683,37.2863]]]]}},{type:"Feature",properties:{iso1A2:"SZ",iso1A3:"SWZ",iso1N3:"748",wikidata:"Q1050",nameEn:"Eswatini",aliases:["Swaziland"],groups:["018","202","002"],driveSide:"left",callingCodes:["268"]},geometry:{type:"MultiPolygon",coordinates:[[[[31.86881,-25.99973],[31.974,-25.95387],[32.00916,-25.999],[32.08599,-26.00978],[32.10435,-26.15656],[32.07352,-26.40185],[32.13409,-26.5317],[32.13315,-26.84345],[32.09664,-26.80721],[32.00893,-26.8096],[31.97463,-27.11057],[31.97592,-27.31675],[31.49834,-27.31549],[31.15027,-27.20151],[30.96088,-27.0245],[30.97757,-26.92706],[30.88826,-26.79622],[30.81101,-26.84722],[30.78927,-26.48271],[30.95819,-26.26303],[31.13073,-25.91558],[31.31237,-25.7431],[31.4175,-25.71886],[31.86881,-25.99973]]]]}},{type:"Feature",properties:{iso1A2:"TA",iso1A3:"TAA",wikidata:"Q220982",nameEn:"Tristan da Cunha",country:"GB",groups:["SH","011","202","002"],isoStatus:"excRes",driveSide:"left",roadSpeedUnit:"mph",callingCodes:["290 8","44 20"]},geometry:{type:"MultiPolygon",coordinates:[[[[-13.48367,-36.6746],[-11.55782,-36.60319],[-11.48092,-37.8367],[-13.41694,-37.88844],[-13.48367,-36.6746]]]]}},{type:"Feature",properties:{iso1A2:"TC",iso1A3:"TCA",iso1N3:"796",wikidata:"Q18221",nameEn:"Turks and Caicos Islands",country:"GB",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 649"]},geometry:{type:"MultiPolygon",coordinates:[[[[-72.41726,22.40371],[-70.63262,21.53631],[-71.46138,20.64433],[-72.72017,21.48055],[-72.41726,22.40371]]]]}},{type:"Feature",properties:{iso1A2:"TD",iso1A3:"TCD",iso1N3:"148",wikidata:"Q657",nameEn:"Chad",groups:["017","202","002"],callingCodes:["235"]},geometry:{type:"MultiPolygon",coordinates:[[[[23.99539,19.49944],[23.99997,15.69575],[23.62785,15.7804],[23.38812,15.69649],[23.10792,15.71297],[22.93201,15.55107],[22.92579,15.47007],[22.99584,15.40105],[22.99584,15.22989],[22.66115,14.86308],[22.70474,14.69149],[22.38562,14.58907],[22.44944,14.24986],[22.55997,14.23024],[22.5553,14.11704],[22.22995,13.96754],[22.08674,13.77863],[22.29689,13.3731],[22.1599,13.19281],[22.02914,13.13976],[21.94819,13.05637],[21.81432,12.81362],[21.89371,12.68001],[21.98711,12.63292],[22.15679,12.66634],[22.22684,12.74682],[22.46345,12.61925],[22.38873,12.45514],[22.50548,12.16769],[22.48369,12.02766],[22.64092,12.07485],[22.54907,11.64372],[22.7997,11.40424],[22.93124,11.41645],[22.97249,11.21955],[22.87758,10.91915],[22.45889,11.00246],[21.72139,10.64136],[21.71479,10.29932],[21.63553,10.217],[21.52766,10.2105],[21.34934,9.95907],[21.26348,9.97642],[20.82979,9.44696],[20.36748,9.11019],[19.06421,9.00367],[18.86388,8.87971],[19.11044,8.68172],[18.79783,8.25929],[18.67455,8.22226],[18.62612,8.14163],[18.64153,8.08714],[18.6085,8.05009],[18.02731,8.01085],[17.93926,7.95853],[17.67288,7.98905],[16.8143,7.53971],[16.6668,7.67281],[16.658,7.75353],[16.59415,7.76444],[16.58315,7.88657],[16.41583,7.77971],[16.40703,7.68809],[15.79942,7.44149],[15.73118,7.52006],[15.49743,7.52179],[15.56964,7.58936],[15.59272,7.7696],[15.50743,7.79302],[15.20426,8.50892],[15.09484,8.65982],[14.83566,8.80557],[14.35707,9.19611],[14.37094,9.2954],[13.97544,9.6365],[14.01793,9.73169],[14.1317,9.82413],[14.20411,10.00055],[14.4673,10.00264],[14.80082,9.93818],[14.95722,9.97926],[15.05999,9.94845],[15.14043,9.99246],[15.24618,9.99246],[15.41408,9.92876],[15.68761,9.99344],[15.50535,10.1098],[15.30874,10.31063],[15.23724,10.47764],[15.14936,10.53915],[15.15532,10.62846],[15.06737,10.80921],[15.09127,10.87431],[15.04957,11.02347],[15.10021,11.04101],[15.0585,11.40481],[15.13149,11.5537],[15.06595,11.71126],[15.11579,11.79313],[15.04808,11.8731],[15.05786,12.0608],[15.0349,12.10698],[15.00146,12.1223],[14.96952,12.0925],[14.89019,12.16593],[14.90827,12.3269],[14.83314,12.62963],[14.55058,12.78256],[14.56101,12.91036],[14.46881,13.08259],[14.08251,13.0797],[13.6302,13.71094],[13.47559,14.40881],[13.48259,14.46704],[13.68573,14.55276],[13.67878,14.64013],[13.809,14.72915],[13.78991,14.87519],[13.86301,15.04043],[14.37425,15.72591],[15.50373,16.89649],[15.6032,18.77402],[15.75098,19.93002],[15.99632,20.35364],[15.6721,20.70069],[15.59841,20.74039],[15.56004,20.79488],[15.55382,20.86507],[15.57248,20.92138],[15.62515,20.95395],[15.28332,21.44557],[15.20213,21.49365],[15.19692,21.99339],[14.99751,23.00539],[15.99566,23.49639],[23.99539,19.49944]]]]}},{type:"Feature",properties:{iso1A2:"TF",iso1A3:"ATF",iso1N3:"260",wikidata:"Q129003",nameEn:"French Southern and Antarctic Lands",country:"FR",groups:["014","202","002"]},geometry:{type:"MultiPolygon",coordinates:[[[[53.53458,-16.36909],[54.61476,-15.02273],[54.96649,-16.28353],[53.53458,-16.36909]]],[[[39.10324,-21.48967],[41.06663,-17.08802],[43.72277,-16.09877],[40.40841,-23.17181],[39.10324,-21.48967]]],[[[46.52682,-10.83678],[48.86266,-10.8109],[47.29063,-12.45583],[46.52682,-10.83678]]],[[[80.15867,-36.04977],[70.67507,-51.14192],[46.31615,-46.28749],[80.15867,-36.04977]]]]}},{type:"Feature",properties:{iso1A2:"TG",iso1A3:"TGO",iso1N3:"768",wikidata:"Q945",nameEn:"Togo",groups:["011","202","002"],callingCodes:["228"]},geometry:{type:"MultiPolygon",coordinates:[[[[0.50388,11.01011],[0.48852,10.98561],[0.50521,10.98035],[0.4958,10.93269],[0.66104,10.99964],[0.91245,10.99597],[0.8804,10.803],[0.80358,10.71459],[0.77666,10.37665],[1.35507,9.99525],[1.36624,9.5951],[1.33675,9.54765],[1.41746,9.3226],[1.5649,9.16941],[1.61838,9.0527],[1.64249,6.99562],[1.55877,6.99737],[1.61812,6.74843],[1.58105,6.68619],[1.76906,6.43189],[1.79826,6.28221],[1.62913,6.24075],[1.67336,6.02702],[1.27574,5.93551],[1.19771,6.11522],[1.19966,6.17069],[1.09187,6.17074],[1.05969,6.22998],[1.03108,6.24064],[0.99652,6.33779],[0.89283,6.33779],[0.71048,6.53083],[0.74862,6.56517],[0.63659,6.63857],[0.6497,6.73682],[0.58176,6.76049],[0.57406,6.80348],[0.52853,6.82921],[0.56508,6.92971],[0.52098,6.94391],[0.52217,6.9723],[0.59606,7.01252],[0.65327,7.31643],[0.62943,7.41099],[0.57223,7.39326],[0.52455,7.45354],[0.51979,7.58706],[0.58295,7.62368],[0.62943,7.85751],[0.58891,8.12779],[0.6056,8.13959],[0.61156,8.18324],[0.5913,8.19622],[0.63897,8.25873],[0.73432,8.29529],[0.64731,8.48866],[0.47211,8.59945],[0.37319,8.75262],[0.52455,8.87746],[0.45424,9.04581],[0.56388,9.40697],[0.49118,9.48339],[0.36485,9.49749],[0.33148,9.44812],[0.25758,9.42696],[0.2254,9.47869],[0.31241,9.50337],[0.30406,9.521],[0.2409,9.52335],[0.23851,9.57389],[0.38153,9.58682],[0.36008,9.6256],[0.29334,9.59387],[0.26712,9.66437],[0.28261,9.69022],[0.32313,9.6491],[0.34816,9.66907],[0.34816,9.71607],[0.32075,9.72781],[0.36366,10.03309],[0.41252,10.02018],[0.41371,10.06361],[0.35293,10.09412],[0.39584,10.31112],[0.33028,10.30408],[0.29453,10.41546],[0.18846,10.4096],[0.12886,10.53149],[-0.05945,10.63458],[-0.09141,10.7147],[-0.07327,10.71845],[-0.07183,10.76794],[-0.0228,10.81916],[-0.02685,10.8783],[-0.00908,10.91644],[-0.0063,10.96417],[0.03355,10.9807],[0.02395,11.06229],[0.00342,11.08317],[-0.00514,11.10763],[-0.0275,11.11202],[-0.05733,11.08628],[-0.14462,11.10811],[-0.13493,11.14075],[0.50388,11.01011]]]]}},{type:"Feature",properties:{iso1A2:"TH",iso1A3:"THA",iso1N3:"764",wikidata:"Q869",nameEn:"Thailand",groups:["035","142"],driveSide:"left",callingCodes:["66"]},geometry:{type:"MultiPolygon",coordinates:[[[[100.08404,20.36626],[100.09999,20.31614],[100.09337,20.26293],[100.11785,20.24787],[100.1712,20.24324],[100.16668,20.2986],[100.22076,20.31598],[100.25769,20.3992],[100.33383,20.4028],[100.37439,20.35156],[100.41473,20.25625],[100.44992,20.23644],[100.4537,20.19971],[100.47567,20.19133],[100.51052,20.14928],[100.55218,20.17741],[100.58808,20.15791],[100.5094,19.87904],[100.398,19.75047],[100.49604,19.53504],[100.58219,19.49164],[100.64606,19.55884],[100.77231,19.48324],[100.90302,19.61901],[101.08928,19.59748],[101.26545,19.59242],[101.26991,19.48324],[101.21347,19.46223],[101.20604,19.35296],[101.24911,19.33334],[101.261,19.12717],[101.35606,19.04716],[101.25803,18.89545],[101.22832,18.73377],[101.27585,18.68875],[101.06047,18.43247],[101.18227,18.34367],[101.15108,18.25624],[101.19118,18.2125],[101.1793,18.0544],[101.02185,17.87637],[100.96541,17.57926],[101.15108,17.47586],[101.44667,17.7392],[101.72294,17.92867],[101.78087,18.07559],[101.88485,18.02474],[102.11359,18.21532],[102.45523,17.97106],[102.59234,17.96127],[102.60971,17.95411],[102.61432,17.92273],[102.5896,17.84889],[102.59485,17.83537],[102.68194,17.80151],[102.69946,17.81686],[102.67543,17.84529],[102.68538,17.86653],[102.75954,17.89561],[102.79044,17.93612],[102.81988,17.94233],[102.86323,17.97531],[102.95812,18.0054],[102.9912,17.9949],[103.01998,17.97095],[103.0566,18.00144],[103.07823,18.03833],[103.07343,18.12351],[103.1493,18.17799],[103.14994,18.23172],[103.17093,18.2618],[103.29757,18.30475],[103.23818,18.34875],[103.24779,18.37807],[103.30977,18.4341],[103.41044,18.4486],[103.47773,18.42841],[103.60957,18.40528],[103.699,18.34125],[103.82449,18.33979],[103.85642,18.28666],[103.93916,18.33914],[103.97725,18.33631],[104.06533,18.21656],[104.10927,18.10826],[104.21776,17.99335],[104.2757,17.86139],[104.35432,17.82871],[104.45404,17.66788],[104.69867,17.53038],[104.80061,17.39367],[104.80716,17.19025],[104.73712,17.01404],[104.7373,16.91125],[104.76442,16.84752],[104.7397,16.81005],[104.76099,16.69302],[104.73349,16.565],[104.88057,16.37311],[105.00262,16.25627],[105.06204,16.09792],[105.42001,16.00657],[105.38508,15.987],[105.34115,15.92737],[105.37959,15.84074],[105.42285,15.76971],[105.46573,15.74742],[105.61756,15.68792],[105.60446,15.53301],[105.58191,15.41031],[105.47635,15.3796],[105.4692,15.33709],[105.50662,15.32054],[105.58043,15.32724],[105.46661,15.13132],[105.61162,15.00037],[105.5121,14.80802],[105.53864,14.55731],[105.43783,14.43865],[105.20894,14.34967],[105.17748,14.34432],[105.14012,14.23873],[105.08408,14.20402],[105.02804,14.23722],[104.97667,14.38806],[104.69335,14.42726],[104.55014,14.36091],[104.27616,14.39861],[103.93836,14.3398],[103.70175,14.38052],[103.71109,14.4348],[103.53518,14.42575],[103.39353,14.35639],[103.16469,14.33075],[102.93275,14.19044],[102.91251,14.01531],[102.77864,13.93374],[102.72727,13.77806],[102.56848,13.69366],[102.5481,13.6589],[102.58635,13.6286],[102.62483,13.60883],[102.57573,13.60461],[102.5358,13.56933],[102.44601,13.5637],[102.36859,13.57488],[102.33828,13.55613],[102.361,13.50551],[102.35563,13.47307],[102.35692,13.38274],[102.34611,13.35618],[102.36001,13.31142],[102.36146,13.26006],[102.43422,13.09061],[102.46011,13.08057],[102.52275,12.99813],[102.48694,12.97537],[102.49335,12.92711],[102.53053,12.77506],[102.4994,12.71736],[102.51963,12.66117],[102.57567,12.65358],[102.7796,12.43781],[102.78116,12.40284],[102.73134,12.37091],[102.70176,12.1686],[102.77026,12.06815],[102.78427,11.98746],[102.83957,11.8519],[102.90973,11.75613],[102.91449,11.65512],[102.52395,11.25257],[102.47649,9.66162],[102.46318,7.22462],[102.09086,6.23546],[102.08127,6.22679],[102.07732,6.193],[102.09182,6.14161],[102.01835,6.05407],[101.99209,6.04075],[101.97114,6.01992],[101.9714,6.00575],[101.94712,5.98421],[101.92819,5.85511],[101.91776,5.84269],[101.89188,5.8386],[101.80144,5.74505],[101.75074,5.79091],[101.69773,5.75881],[101.58019,5.93534],[101.25524,5.78633],[101.25755,5.71065],[101.14062,5.61613],[100.98815,5.79464],[101.02708,5.91013],[101.087,5.9193],[101.12388,6.11411],[101.06165,6.14161],[101.12618,6.19431],[101.10313,6.25617],[100.85884,6.24929],[100.81045,6.45086],[100.74822,6.46231],[100.74361,6.50811],[100.66986,6.45086],[100.43027,6.52389],[100.42351,6.51762],[100.41791,6.5189],[100.41152,6.52299],[100.35413,6.54932],[100.31929,6.65413],[100.32607,6.65933],[100.32671,6.66526],[100.31884,6.66423],[100.31618,6.66781],[100.30828,6.66462],[100.29651,6.68439],[100.19511,6.72559],[100.12,6.42105],[100.0756,6.4045],[99.91873,6.50233],[99.50117,6.44501],[99.31854,5.99868],[97.19814,8.18901],[97.63455,9.60854],[98.12555,9.44056],[98.33094,9.91973],[98.47298,9.95782],[98.52291,9.92389],[98.55174,9.92804],[98.7391,10.31488],[98.81944,10.52761],[98.77275,10.62548],[98.78511,10.68351],[98.86819,10.78336],[99.0069,10.85485],[98.99701,10.92962],[99.02337,10.97217],[99.06938,10.94857],[99.32756,11.28545],[99.31573,11.32081],[99.39485,11.3925],[99.47598,11.62434],[99.5672,11.62732],[99.64108,11.78948],[99.64891,11.82699],[99.53424,12.02317],[99.56445,12.14805],[99.47519,12.1353],[99.409,12.60603],[99.29254,12.68921],[99.18905,12.84799],[99.18748,12.9898],[99.10646,13.05804],[99.12225,13.19847],[99.20617,13.20575],[99.16695,13.72621],[98.97356,14.04868],[98.56762,14.37701],[98.24874,14.83013],[98.18821,15.13125],[98.22,15.21327],[98.30446,15.30667],[98.40522,15.25268],[98.41906,15.27103],[98.39351,15.34177],[98.4866,15.39154],[98.56027,15.33471],[98.58598,15.46821],[98.541,15.65406],[98.59853,15.87197],[98.57019,16.04578],[98.69585,16.13353],[98.8376,16.11706],[98.92656,16.36425],[98.84485,16.42354],[98.68074,16.27068],[98.63817,16.47424],[98.57912,16.55983],[98.5695,16.62826],[98.51113,16.64503],[98.51833,16.676],[98.51472,16.68521],[98.51579,16.69433],[98.51043,16.70107],[98.49713,16.69022],[98.50253,16.7139],[98.46994,16.73613],[98.53833,16.81934],[98.49603,16.8446],[98.52624,16.89979],[98.39441,17.06266],[98.34566,17.04822],[98.10439,17.33847],[98.11185,17.36829],[97.91829,17.54504],[97.76407,17.71595],[97.66794,17.88005],[97.73723,17.97912],[97.60841,18.23846],[97.64116,18.29778],[97.56219,18.33885],[97.50383,18.26844],[97.34522,18.54596],[97.36444,18.57138],[97.5258,18.4939],[97.76752,18.58097],[97.73836,18.88478],[97.66487,18.9371],[97.73654,18.9812],[97.73797,19.04261],[97.83479,19.09972],[97.84024,19.22217],[97.78606,19.26769],[97.84186,19.29526],[97.78769,19.39429],[97.88423,19.5041],[97.84715,19.55782],[98.04364,19.65755],[98.03314,19.80941],[98.13829,19.78541],[98.24884,19.67876],[98.51182,19.71303],[98.56065,19.67807],[98.83661,19.80931],[98.98679,19.7419],[99.0735,20.10298],[99.20328,20.12877],[99.416,20.08614],[99.52943,20.14811],[99.5569,20.20676],[99.46077,20.36198],[99.46008,20.39673],[99.68255,20.32077],[99.81096,20.33687],[99.86383,20.44371],[99.88211,20.44488],[99.88451,20.44596],[99.89168,20.44548],[99.89301,20.44311],[99.89692,20.44789],[99.90499,20.4487],[99.91616,20.44986],[99.95721,20.46301],[100.08404,20.36626]]]]}},{type:"Feature",properties:{iso1A2:"TJ",iso1A3:"TJK",iso1N3:"762",wikidata:"Q863",nameEn:"Tajikistan",groups:["143","142"],callingCodes:["992"]},geometry:{type:"MultiPolygon",coordinates:[[[[70.45251,41.04438],[70.80009,40.72825],[70.49871,40.52503],[70.32626,40.45174],[70.37511,40.38605],[70.57149,40.3442],[70.56394,40.26421],[70.62342,40.17396],[70.8607,40.217],[70.9818,40.22392],[70.80495,40.16813],[70.7928,40.12797],[70.65827,40.0981],[70.65946,39.9878],[70.58912,39.95211],[70.55033,39.96619],[70.47557,39.93216],[70.57384,39.99394],[70.58297,40.00891],[70.01283,40.23288],[69.67001,40.10639],[69.64704,40.12165],[69.57615,40.10524],[69.55555,40.12296],[69.53794,40.11833],[69.53855,40.0887],[69.5057,40.03277],[69.53615,39.93991],[69.43557,39.92877],[69.43134,39.98431],[69.35649,40.01994],[69.26938,39.8127],[69.3594,39.52516],[69.68677,39.59281],[69.87491,39.53882],[70.11111,39.58223],[70.2869,39.53141],[70.44757,39.60128],[70.64087,39.58792],[70.7854,39.38933],[71.06418,39.41586],[71.08752,39.50704],[71.49814,39.61397],[71.55856,39.57588],[71.5517,39.45722],[71.62688,39.44056],[71.76816,39.45456],[71.80164,39.40631],[71.7522,39.32031],[71.79202,39.27355],[71.90601,39.27674],[72.04059,39.36704],[72.09689,39.26823],[72.17242,39.2661],[72.23834,39.17248],[72.33173,39.33093],[72.62027,39.39696],[72.85934,39.35116],[73.18454,39.35536],[73.31912,39.38615],[73.45096,39.46677],[73.59831,39.46425],[73.59241,39.40843],[73.5004,39.38402],[73.55396,39.3543],[73.54572,39.27567],[73.60638,39.24534],[73.75823,39.023],[73.81728,39.04007],[73.82964,38.91517],[73.7445,38.93867],[73.7033,38.84782],[73.80656,38.66449],[73.79806,38.61106],[73.97933,38.52945],[74.17022,38.65504],[74.51217,38.47034],[74.69619,38.42947],[74.69894,38.22155],[74.80331,38.19889],[74.82665,38.07359],[74.9063,38.03033],[74.92416,37.83428],[75.00935,37.77486],[74.8912,37.67576],[74.94338,37.55501],[75.06011,37.52779],[75.15899,37.41443],[75.09719,37.37297],[75.12328,37.31839],[74.88887,37.23275],[74.8294,37.3435],[74.68383,37.3948],[74.56161,37.37734],[74.41055,37.3948],[74.23339,37.41116],[74.20308,37.34208],[73.8564,37.26158],[73.82552,37.22659],[73.64974,37.23643],[73.61129,37.27469],[73.76647,37.33913],[73.77197,37.4417],[73.29633,37.46495],[73.06884,37.31729],[72.79693,37.22222],[72.66381,37.02014],[72.54095,37.00007],[72.31676,36.98115],[71.83229,36.68084],[71.67083,36.67346],[71.57195,36.74943],[71.51502,36.89128],[71.48481,36.93218],[71.46923,36.99925],[71.45578,37.03094],[71.43097,37.05855],[71.44127,37.11856],[71.4494,37.18137],[71.4555,37.21418],[71.47386,37.2269],[71.48339,37.23937],[71.4824,37.24921],[71.48536,37.26017],[71.50674,37.31502],[71.49821,37.31975],[71.4862,37.33405],[71.47685,37.40281],[71.49612,37.4279],[71.5256,37.47971],[71.50616,37.50733],[71.49693,37.53527],[71.5065,37.60912],[71.51972,37.61945],[71.54186,37.69691],[71.55234,37.73209],[71.53053,37.76534],[71.54324,37.77104],[71.55752,37.78677],[71.59255,37.79956],[71.58843,37.92425],[71.51565,37.95349],[71.32871,37.88564],[71.296,37.93403],[71.2809,37.91995],[71.24969,37.93031],[71.27278,37.96496],[71.27622,37.99946],[71.28922,38.01272],[71.29878,38.04429],[71.36444,38.15358],[71.37803,38.25641],[71.33869,38.27335],[71.33114,38.30339],[71.21291,38.32797],[71.1451,38.40106],[71.10957,38.40671],[71.10592,38.42077],[71.09542,38.42517],[71.0556,38.40176],[71.03545,38.44779],[70.98693,38.48862],[70.92728,38.43021],[70.88719,38.46826],[70.84376,38.44688],[70.82538,38.45394],[70.81697,38.44507],[70.80521,38.44447],[70.79766,38.44944],[70.78702,38.45031],[70.78581,38.45502],[70.77132,38.45548],[70.75455,38.4252],[70.72485,38.4131],[70.69807,38.41861],[70.67438,38.40597],[70.6761,38.39144],[70.69189,38.37031],[70.64966,38.34999],[70.61526,38.34774],[70.60407,38.28046],[70.54673,38.24541],[70.4898,38.12546],[70.17206,37.93276],[70.1863,37.84296],[70.27694,37.81258],[70.28243,37.66706],[70.15015,37.52519],[69.95971,37.5659],[69.93362,37.61378],[69.84435,37.60616],[69.80041,37.5746],[69.51888,37.5844],[69.44954,37.4869],[69.36645,37.40462],[69.45022,37.23315],[69.39529,37.16752],[69.25152,37.09426],[69.03274,37.25174],[68.96407,37.32603],[68.88168,37.33368],[68.91189,37.26704],[68.80889,37.32494],[68.81438,37.23862],[68.6798,37.27906],[68.61851,37.19815],[68.41888,37.13906],[68.41201,37.10402],[68.29253,37.10621],[68.27605,37.00977],[68.18542,37.02074],[68.02194,36.91923],[67.87917,37.0591],[67.7803,37.08978],[67.78329,37.1834],[67.8474,37.31594],[67.81566,37.43107],[68.12635,37.93],[68.27159,37.91477],[68.40343,38.19484],[68.13289,38.40822],[68.06274,38.39435],[68.11366,38.47169],[68.05873,38.56087],[68.0807,38.64136],[68.05598,38.71641],[68.12877,38.73677],[68.06948,38.82115],[68.19743,38.85985],[68.09704,39.02589],[67.68915,39.00775],[67.67833,39.14479],[67.33226,39.23739],[67.36522,39.31287],[67.45998,39.315],[67.46822,39.46146],[67.39681,39.52505],[67.46547,39.53564],[67.44899,39.57799],[67.62889,39.60234],[67.70992,39.66156],[68.12053,39.56317],[68.54166,39.53929],[68.61972,39.68905],[68.63071,39.85265],[68.88889,39.87163],[68.93695,39.91167],[68.84906,40.04952],[68.96579,40.06949],[69.01935,40.11466],[69.01523,40.15771],[68.62796,40.07789],[68.52771,40.11676],[68.5332,40.14826],[68.77902,40.20492],[68.79276,40.17555],[68.84357,40.18604],[68.85832,40.20885],[69.04544,40.22904],[69.15659,40.2162],[69.2074,40.21488],[69.30448,40.18774],[69.30104,40.24502],[69.25229,40.26362],[69.24817,40.30357],[69.30808,40.2821],[69.32833,40.29794],[69.33794,40.34819],[69.30774,40.36102],[69.28525,40.41894],[69.27066,40.49274],[69.21063,40.54469],[69.2643,40.57506],[69.3455,40.57988],[69.32834,40.70233],[69.38327,40.7918],[69.53021,40.77621],[69.59441,40.70181],[69.69434,40.62615],[70.36655,40.90296],[70.38028,41.02014],[70.45251,41.04438]]],[[[70.68112,40.90612],[70.6721,40.90555],[70.57501,40.98941],[70.54223,40.98787],[70.56077,41.00642],[70.6158,40.97661],[70.68112,40.90612]]],[[[70.74189,39.86319],[70.63105,39.77923],[70.59667,39.83542],[70.54998,39.85137],[70.52631,39.86989],[70.53651,39.89155],[70.74189,39.86319]]]]}},{type:"Feature",properties:{iso1A2:"TK",iso1A3:"TKL",iso1N3:"772",wikidata:"Q36823",nameEn:"Tokelau",country:"NZ",groups:["061","009"],driveSide:"left",callingCodes:["690"]},geometry:{type:"MultiPolygon",coordinates:[[[[-167.75195,-10.12005],[-174.17993,-10.13616],[-174.18707,-7.54408],[-167.75329,-7.52784],[-167.75195,-10.12005]]]]}},{type:"Feature",properties:{iso1A2:"TL",iso1A3:"TLS",iso1N3:"626",wikidata:"Q574",nameEn:"East Timor",aliases:["Timor-Leste","TP"],groups:["035","142"],driveSide:"left",callingCodes:["670"]},geometry:{type:"MultiPolygon",coordinates:[[[[124.46701,-9.13002],[124.45971,-9.30263],[124.38554,-9.3582],[124.35258,-9.43002],[124.3535,-9.48493],[124.28115,-9.50453],[124.28115,-9.42189],[124.21247,-9.36904],[124.14517,-9.42324],[124.10539,-9.41206],[124.04286,-9.34243],[124.04628,-9.22671],[124.33472,-9.11416],[124.92337,-8.75859],[125.31127,-8.22976],[125.65946,-8.06136],[125.87691,-8.31789],[127.42116,-8.22471],[127.55165,-9.05052],[125.68138,-9.85176],[125.09025,-9.46406],[124.97892,-9.19281],[125.04044,-9.17093],[125.09434,-9.19669],[125.18907,-9.16434],[125.18632,-9.03142],[125.11764,-8.96359],[124.97742,-9.08128],[124.94011,-8.85617],[124.46701,-9.13002]]]]}},{type:"Feature",properties:{iso1A2:"TM",iso1A3:"TKM",iso1N3:"795",wikidata:"Q874",nameEn:"Turkmenistan",groups:["143","142"],callingCodes:["993"]},geometry:{type:"MultiPolygon",coordinates:[[[[60.5078,41.21694],[61.03261,41.25691],[61.22212,41.14946],[61.33199,41.14946],[61.39732,41.19873],[61.4446,41.29407],[61.87856,41.12257],[62.11751,40.58242],[62.34273,40.43206],[62.43337,39.98528],[63.6913,39.27666],[63.70778,39.22349],[64.19086,38.95561],[64.32576,38.98691],[65.55873,38.29052],[65.83913,38.25733],[66.24013,38.16238],[66.41042,38.02403],[66.56697,38.0435],[66.67684,37.96776],[66.53676,37.80084],[66.52852,37.58568],[66.65761,37.45497],[66.52303,37.39827],[66.55743,37.35409],[66.30993,37.32409],[65.72274,37.55438],[65.64137,37.45061],[65.64263,37.34388],[65.51778,37.23881],[64.97945,37.21913],[64.61141,36.6351],[64.62514,36.44311],[64.57295,36.34362],[64.43288,36.24401],[64.05385,36.10433],[63.98519,36.03773],[63.56496,35.95106],[63.53475,35.90881],[63.29579,35.85985],[63.12276,35.86208],[63.10318,35.81782],[63.23262,35.67487],[63.10079,35.63024],[63.12276,35.53196],[63.0898,35.43131],[62.90853,35.37086],[62.74098,35.25432],[62.62288,35.22067],[62.48006,35.28796],[62.29878,35.13312],[62.29191,35.25964],[62.15871,35.33278],[62.05709,35.43803],[61.97743,35.4604],[61.77693,35.41341],[61.58742,35.43803],[61.27371,35.61482],[61.22719,35.67038],[61.26152,35.80749],[61.22444,35.92879],[61.12007,35.95992],[61.22719,36.12759],[61.1393,36.38782],[61.18187,36.55348],[61.14516,36.64644],[60.34767,36.63214],[60.00768,37.04102],[59.74678,37.12499],[59.55178,37.13594],[59.39385,37.34257],[59.39797,37.47892],[59.33507,37.53146],[59.22905,37.51161],[58.9338,37.67374],[58.6921,37.64548],[58.5479,37.70526],[58.47786,37.6433],[58.39959,37.63134],[58.22999,37.6856],[58.21399,37.77281],[57.79534,37.89299],[57.35042,37.98546],[57.37236,38.09321],[57.21169,38.28965],[57.03453,38.18717],[56.73928,38.27887],[56.62255,38.24005],[56.43303,38.26054],[56.32454,38.18502],[56.33278,38.08132],[55.97847,38.08024],[55.76561,38.12238],[55.44152,38.08564],[55.13412,37.94705],[54.851,37.75739],[54.77684,37.62264],[54.81804,37.61285],[54.77822,37.51597],[54.67247,37.43532],[54.58664,37.45809],[54.36211,37.34912],[54.24565,37.32047],[53.89734,37.3464],[51.7708,40.29239],[52.26048,41.69249],[52.47884,41.78034],[52.97575,42.1308],[54.20635,42.38477],[54.95182,41.92424],[55.45471,41.25609],[56.00314,41.32584],[57.03423,41.25435],[57.13796,41.36625],[57.03359,41.41777],[56.96218,41.80383],[57.03633,41.92043],[57.30275,42.14076],[57.6296,42.16519],[57.84932,42.18555],[57.92897,42.24047],[57.90975,42.4374],[57.99214,42.50021],[58.3492,42.43335],[58.40688,42.29535],[58.51674,42.30348],[58.29427,42.56497],[58.14321,42.62159],[58.27504,42.69632],[58.57991,42.64988],[58.6266,42.79314],[58.93422,42.5407],[59.17317,42.52248],[59.2955,42.37064],[59.4341,42.29738],[59.94633,42.27655],[60.00539,42.212],[59.96419,42.1428],[60.04659,42.08982],[60.0356,42.01028],[59.95046,41.97966],[60.33223,41.75058],[60.08504,41.80997],[60.06032,41.76287],[60.18117,41.60082],[60.06581,41.4363],[60.5078,41.21694]]]]}},{type:"Feature",properties:{iso1A2:"TN",iso1A3:"TUN",iso1N3:"788",wikidata:"Q948",nameEn:"Tunisia",groups:["015","002"],callingCodes:["216"]},geometry:{type:"MultiPolygon",coordinates:[[[[11.2718,37.6713],[11.66543,33.34642],[11.56255,33.16754],[11.55852,33.1409],[11.51549,33.09826],[11.46037,32.6307],[11.57828,32.48013],[11.53898,32.4138],[11.04234,32.2145],[10.7315,31.97235],[10.62788,31.96629],[10.48497,31.72956],[10.31364,31.72648],[10.12239,31.42098],[10.29516,30.90337],[9.88152,30.34074],[9.76848,30.34366],[9.55544,30.23971],[9.07483,32.07865],[8.35999,32.50101],[8.31895,32.83483],[8.1179,33.05086],[8.11433,33.10175],[7.83028,33.18851],[7.73687,33.42114],[7.54088,33.7726],[7.52851,34.06493],[7.66174,34.20167],[7.74207,34.16492],[7.81242,34.21841],[7.86264,34.3987],[8.20482,34.57575],[8.29655,34.72798],[8.25189,34.92009],[8.30727,34.95378],[8.3555,35.10007],[8.47318,35.23376],[8.30329,35.29884],[8.36086,35.47774],[8.35371,35.66373],[8.26472,35.73669],[8.2626,35.91733],[8.40731,36.42208],[8.18936,36.44939],[8.16167,36.48817],[8.47609,36.66607],[8.46537,36.7706],[8.57613,36.78062],[8.67706,36.8364],[8.62972,36.86499],[8.64044,36.9401],[8.59123,37.14286],[7.89009,38.19924],[11.2718,37.6713]]]]}},{type:"Feature",properties:{iso1A2:"TO",iso1A3:"TON",iso1N3:"776",wikidata:"Q678",nameEn:"Tonga",groups:["061","009"],driveSide:"left",callingCodes:["676"]},geometry:{type:"MultiPolygon",coordinates:[[[[-176.74538,-22.89767],[-176.76826,-14.95183],[-174.17905,-14.94502],[-173.13438,-14.94228],[-173.11048,-23.23027],[-173.10761,-24.19665],[-180,-24.21376],[-180,-22.90585],[-176.74538,-22.89767]]]]}},{type:"Feature",properties:{iso1A2:"TR",iso1A3:"TUR",iso1N3:"792",wikidata:"Q43",nameEn:"Turkey",groups:["145","142"],callingCodes:["90"]},geometry:{type:"MultiPolygon",coordinates:[[[[41.54366,41.52185],[41.7148,41.4932],[41.7124,41.47417],[41.81939,41.43621],[41.95134,41.52466],[42.26387,41.49346],[42.51772,41.43606],[42.59202,41.58183],[42.72794,41.59714],[42.84471,41.58912],[42.78995,41.50126],[42.84899,41.47265],[42.8785,41.50516],[43.02956,41.37891],[43.21707,41.30331],[43.13373,41.25503],[43.1945,41.25242],[43.23096,41.17536],[43.36118,41.2028],[43.44973,41.17666],[43.4717,41.12611],[43.44984,41.0988],[43.47319,41.02251],[43.58683,40.98961],[43.67712,40.93084],[43.67712,40.84846],[43.74872,40.7365],[43.7425,40.66805],[43.63664,40.54159],[43.54791,40.47413],[43.60862,40.43267],[43.59928,40.34019],[43.71136,40.16673],[43.65221,40.14889],[43.65688,40.11199],[43.92307,40.01787],[44.1057,40.03555],[44.1778,40.02845],[44.26973,40.04866],[44.46635,39.97733],[44.61845,39.8281],[44.75779,39.7148],[44.80977,39.65768],[44.81043,39.62677],[44.71806,39.71124],[44.65422,39.72163],[44.6137,39.78393],[44.47298,39.68788],[44.48111,39.61579],[44.41849,39.56659],[44.42832,39.4131],[44.37921,39.4131],[44.29818,39.378],[44.22452,39.4169],[44.03667,39.39223],[44.1043,39.19842],[44.20946,39.13975],[44.18863,38.93881],[44.30322,38.81581],[44.26155,38.71427],[44.28065,38.6465],[44.32058,38.62752],[44.3207,38.49799],[44.3119,38.37887],[44.38309,38.36117],[44.44386,38.38295],[44.50115,38.33939],[44.42476,38.25763],[44.22509,37.88859],[44.3883,37.85433],[44.45948,37.77065],[44.55498,37.783],[44.62096,37.71985],[44.56887,37.6429],[44.61401,37.60165],[44.58449,37.45018],[44.81021,37.2915],[44.75986,37.21549],[44.7868,37.16644],[44.78319,37.1431],[44.76698,37.16162],[44.63179,37.19229],[44.42631,37.05825],[44.38117,37.05825],[44.35315,37.04955],[44.35937,37.02843],[44.30645,36.97373],[44.25975,36.98119],[44.18503,37.09551],[44.22239,37.15756],[44.27998,37.16501],[44.2613,37.25055],[44.13521,37.32486],[44.02002,37.33229],[43.90949,37.22453],[43.84878,37.22205],[43.82699,37.19477],[43.8052,37.22825],[43.7009,37.23692],[43.63085,37.21957],[43.56702,37.25675],[43.50787,37.24436],[43.33508,37.33105],[43.30083,37.30629],[43.11403,37.37436],[42.93705,37.32015],[42.78887,37.38615],[42.56725,37.14878],[42.35724,37.10998],[42.32313,37.17814],[42.34735,37.22548],[42.2824,37.2798],[42.26039,37.27017],[42.23683,37.2863],[42.21548,37.28026],[42.20454,37.28715],[42.22381,37.30238],[42.22257,37.31395],[42.2112,37.32491],[42.19301,37.31323],[42.18225,37.28569],[42.00894,37.17209],[41.515,37.08084],[41.21937,37.07665],[40.90856,37.13147],[40.69136,37.0996],[39.81589,36.75538],[39.21538,36.66834],[39.03217,36.70911],[38.74042,36.70629],[38.55908,36.84429],[38.38859,36.90064],[38.21064,36.91842],[37.81974,36.76055],[37.68048,36.75065],[37.49103,36.66904],[37.47253,36.63243],[37.21988,36.6736],[37.16177,36.66069],[37.10894,36.6704],[37.08279,36.63495],[37.02088,36.66422],[37.01647,36.69512],[37.04619,36.71101],[37.04399,36.73483],[36.99886,36.74012],[36.99557,36.75997],[36.66727,36.82901],[36.61581,36.74629],[36.62681,36.71189],[36.57398,36.65186],[36.58829,36.58295],[36.54206,36.49539],[36.6081,36.33772],[36.65653,36.33861],[36.68672,36.23677],[36.6125,36.22592],[36.50463,36.2419],[36.4617,36.20461],[36.39206,36.22088],[36.37474,36.01163],[36.33956,35.98687],[36.30099,36.00985],[36.28338,36.00273],[36.29769,35.96086],[36.27678,35.94839],[36.25366,35.96264],[36.19973,35.95195],[36.17441,35.92076],[36.1623,35.80925],[36.14029,35.81015],[36.13919,35.83692],[36.11827,35.85923],[35.99829,35.88242],[36.01844,35.92403],[36.00514,35.94113],[35.98499,35.94107],[35.931,35.92109],[35.51152,36.10954],[32.82353,35.70297],[29.73302,35.92555],[29.69611,36.10365],[29.61805,36.14179],[29.61002,36.1731],[29.48192,36.18377],[29.30783,36.01033],[28.23708,36.56812],[27.95037,36.46155],[27.89482,36.69898],[27.46117,36.53789],[27.24613,36.71622],[27.45627,36.9008],[27.20312,36.94571],[27.14757,37.32],[26.95583,37.64989],[26.99377,37.69034],[27.16428,37.72343],[27.05537,37.9131],[26.21136,38.17558],[26.24183,38.44695],[26.32173,38.48731],[26.21136,38.65436],[26.61814,38.81372],[26.70773,39.0312],[26.43357,39.43096],[25.94257,39.39358],[25.61285,40.17161],[26.04292,40.3958],[25.94795,40.72797],[26.03489,40.73051],[26.0754,40.72772],[26.08638,40.73214],[26.12495,40.74283],[26.12854,40.77339],[26.15685,40.80709],[26.21351,40.83298],[26.20856,40.86048],[26.26169,40.9168],[26.29441,40.89119],[26.28623,40.93005],[26.32259,40.94042],[26.35894,40.94292],[26.33297,40.98388],[26.3606,41.02027],[26.31928,41.07386],[26.32259,41.24929],[26.39861,41.25053],[26.5209,41.33993],[26.5837,41.32131],[26.62997,41.34613],[26.61767,41.42281],[26.59742,41.48058],[26.59196,41.60491],[26.5209,41.62592],[26.47958,41.67037],[26.35957,41.71149],[26.32952,41.73637],[26.33589,41.76802],[26.36952,41.82265],[26.53968,41.82653],[26.57961,41.90024],[26.56051,41.92995],[26.62996,41.97644],[26.79143,41.97386],[26.95638,42.00741],[27.03277,42.0809],[27.08486,42.08735],[27.19251,42.06028],[27.22376,42.10152],[27.27411,42.10409],[27.45478,41.96591],[27.52379,41.93756],[27.55191,41.90928],[27.69949,41.97515],[27.81235,41.94803],[27.83492,41.99709],[27.91479,41.97902],[28.02971,41.98066],[28.32297,41.98371],[34.8305,42.4581],[40.89217,41.72528],[41.54366,41.52185]]]]}},{type:"Feature",properties:{iso1A2:"TT",iso1A3:"TTO",iso1N3:"780",wikidata:"Q754",nameEn:"Trinidad and Tobago",groups:["029","003","419","019"],driveSide:"left",callingCodes:["1 868"]},geometry:{type:"MultiPolygon",coordinates:[[[[-61.62505,11.18974],[-60.07172,11.77667],[-60.89962,9.81445],[-62.08693,10.04435],[-61.62505,11.18974]]]]}},{type:"Feature",properties:{iso1A2:"TV",iso1A3:"TUV",iso1N3:"798",wikidata:"Q672",nameEn:"Tuvalu",groups:["061","009"],driveSide:"left",callingCodes:["688"]},geometry:{type:"MultiPolygon",coordinates:[[[[174,-5],[179.99999,-5],[179.99999,-11.5],[174,-11.5],[174,-5]]]]}},{type:"Feature",properties:{iso1A2:"TW",iso1A3:"TWN",iso1N3:"158",wikidata:"Q865",nameEn:"Taiwan",groups:["030","142"],callingCodes:["886"]},geometry:{type:"MultiPolygon",coordinates:[[[[123.0791,22.07818],[120.69238,21.52331],[118.11703,24.39734],[118.28244,24.51231],[118.35291,24.51645],[118.42453,24.54644],[118.56434,24.49266],[120.49232,25.22863],[122.26612,25.98197],[123.0791,22.07818]]]]}},{type:"Feature",properties:{iso1A2:"TZ",iso1A3:"TZA",iso1N3:"834",wikidata:"Q924",nameEn:"Tanzania",groups:["014","202","002"],driveSide:"left",callingCodes:["255"]},geometry:{type:"MultiPolygon",coordinates:[[[[30.80408,-0.99911],[33.93107,-0.99298],[34.02286,-1.00779],[34.03084,-1.05101],[34.0824,-1.02264],[37.67199,-3.06222],[37.71745,-3.304],[37.5903,-3.42735],[37.63099,-3.50723],[37.75036,-3.54243],[37.81321,-3.69179],[39.21631,-4.67835],[39.44306,-4.93877],[39.62121,-4.68136],[40.14328,-4.64201],[40.74206,-10.25691],[40.44265,-10.4618],[40.00295,-10.80255],[39.58249,-10.96043],[39.24395,-11.17433],[38.88996,-11.16978],[38.47258,-11.4199],[38.21598,-11.27289],[37.93618,-11.26228],[37.8388,-11.3123],[37.76614,-11.53352],[37.3936,-11.68949],[36.80309,-11.56836],[36.62068,-11.72884],[36.19094,-11.70008],[36.19094,-11.57593],[35.82767,-11.41081],[35.63599,-11.55927],[34.96296,-11.57354],[34.91153,-11.39799],[34.79375,-11.32245],[34.63305,-11.11731],[34.61161,-11.01611],[34.67047,-10.93796],[34.65946,-10.6828],[34.57581,-10.56271],[34.51911,-10.12279],[34.54499,-10.0678],[34.03865,-9.49398],[33.95829,-9.54066],[33.9638,-9.62206],[33.93298,-9.71647],[33.76677,-9.58516],[33.48052,-9.62442],[33.31581,-9.48554],[33.14925,-9.49322],[32.99397,-9.36712],[32.95389,-9.40138],[32.76233,-9.31963],[32.75611,-9.28583],[32.53661,-9.24281],[32.49147,-9.14754],[32.43543,-9.11988],[32.25486,-9.13371],[32.16146,-9.05993],[32.08206,-9.04609],[31.98866,-9.07069],[31.94196,-9.02303],[31.94663,-8.93846],[31.81587,-8.88618],[31.71158,-8.91386],[31.57147,-8.81388],[31.57147,-8.70619],[31.37533,-8.60769],[31.00796,-8.58615],[30.79243,-8.27382],[30.2567,-7.14121],[29.52552,-6.2731],[29.43673,-4.44845],[29.63827,-4.44681],[29.75109,-4.45836],[29.77289,-4.41733],[29.82885,-4.36153],[29.88172,-4.35743],[30.03323,-4.26631],[30.22042,-4.01738],[30.45915,-3.56532],[30.84165,-3.25152],[30.83823,-2.97837],[30.6675,-2.98987],[30.57926,-2.89791],[30.4987,-2.9573],[30.40662,-2.86151],[30.52747,-2.65841],[30.41789,-2.66266],[30.54501,-2.41404],[30.83915,-2.35795],[30.89303,-2.08223],[30.80802,-1.91477],[30.84079,-1.64652],[30.71974,-1.43244],[30.57123,-1.33264],[30.50889,-1.16412],[30.45116,-1.10641],[30.47194,-1.0555],[30.64166,-1.06601],[30.70631,-1.01175],[30.76635,-0.9852],[30.80408,-0.99911]]]]}},{type:"Feature",properties:{iso1A2:"UA",iso1A3:"UKR",iso1N3:"804",wikidata:"Q212",nameEn:"Ukraine",groups:["151","150"],callingCodes:["380"]},geometry:{type:"MultiPolygon",coordinates:[[[[33.57318,46.10317],[33.59087,46.06013],[33.54017,46.0123],[31.62627,45.50633],[30.04414,45.08461],[29.69272,45.19227],[29.65428,45.25629],[29.68175,45.26885],[29.59798,45.38857],[29.42632,45.44545],[29.24779,45.43388],[28.96077,45.33164],[28.94292,45.28045],[28.81383,45.3384],[28.78911,45.24179],[28.71358,45.22631],[28.5735,45.24759],[28.34554,45.32102],[28.28504,45.43907],[28.21139,45.46895],[28.30201,45.54744],[28.41836,45.51715],[28.43072,45.48538],[28.51449,45.49982],[28.49252,45.56716],[28.54196,45.58062],[28.51587,45.6613],[28.47879,45.66994],[28.52823,45.73803],[28.70401,45.78019],[28.69852,45.81753],[28.78503,45.83475],[28.74383,45.96664],[28.98004,46.00385],[29.00613,46.04962],[28.94643,46.09176],[29.06656,46.19716],[28.94953,46.25852],[28.98478,46.31803],[29.004,46.31495],[28.9306,46.45699],[29.01241,46.46177],[29.02409,46.49582],[29.23547,46.55435],[29.24886,46.37912],[29.35357,46.49505],[29.49914,46.45889],[29.5939,46.35472],[29.6763,46.36041],[29.66359,46.4215],[29.74496,46.45605],[29.88329,46.35851],[29.94114,46.40114],[30.09103,46.38694],[30.16794,46.40967],[30.02511,46.45132],[29.88916,46.54302],[29.94409,46.56002],[29.9743,46.75325],[29.94522,46.80055],[29.98814,46.82358],[29.87405,46.88199],[29.75458,46.8604],[29.72986,46.92234],[29.57056,46.94766],[29.62137,47.05069],[29.61038,47.09932],[29.53044,47.07851],[29.49732,47.12878],[29.57696,47.13581],[29.54996,47.24962],[29.59665,47.25521],[29.5733,47.36508],[29.48678,47.36043],[29.47854,47.30366],[29.39889,47.30179],[29.3261,47.44664],[29.18603,47.43387],[29.11743,47.55001],[29.22414,47.60012],[29.22242,47.73607],[29.27255,47.79953],[29.20663,47.80367],[29.27804,47.88893],[29.19839,47.89261],[29.1723,47.99013],[28.9306,47.96255],[28.8414,48.03392],[28.85232,48.12506],[28.69896,48.13106],[28.53921,48.17453],[28.48428,48.0737],[28.42454,48.12047],[28.43701,48.15832],[28.38712,48.17567],[28.34009,48.13147],[28.30609,48.14018],[28.30586,48.1597],[28.34912,48.1787],[28.36996,48.20543],[28.35519,48.24957],[28.32508,48.23384],[28.2856,48.23202],[28.19314,48.20749],[28.17666,48.25963],[28.07504,48.23494],[28.09873,48.3124],[28.04527,48.32661],[27.95883,48.32368],[27.88391,48.36699],[27.87533,48.4037],[27.81902,48.41874],[27.79225,48.44244],[27.74422,48.45926],[27.6658,48.44034],[27.59027,48.46311],[27.5889,48.49224],[27.46942,48.454],[27.44333,48.41209],[27.37741,48.41026],[27.37604,48.44398],[27.32159,48.4434],[27.27855,48.37534],[27.13434,48.37288],[27.08078,48.43214],[27.0231,48.42485],[27.03821,48.37653],[26.93384,48.36558],[26.85556,48.41095],[26.71274,48.40388],[26.82809,48.31629],[26.79239,48.29071],[26.6839,48.35828],[26.62823,48.25804],[26.55202,48.22445],[26.33504,48.18418],[26.17711,47.99246],[26.05901,47.9897],[25.77723,47.93919],[25.63878,47.94924],[25.23778,47.89403],[25.11144,47.75203],[24.88896,47.7234],[24.81893,47.82031],[24.70632,47.84428],[24.61994,47.95062],[24.43578,47.97131],[24.34926,47.9244],[24.22566,47.90231],[24.11281,47.91487],[24.06466,47.95317],[24.02999,47.95087],[24.00801,47.968],[23.98553,47.96076],[23.96337,47.96672],[23.94192,47.94868],[23.89352,47.94512],[23.8602,47.9329],[23.80904,47.98142],[23.75188,47.99705],[23.66262,47.98786],[23.63894,48.00293],[23.5653,48.00499],[23.52803,48.01818],[23.4979,47.96858],[23.33577,48.0237],[23.27397,48.08245],[23.15999,48.12188],[23.1133,48.08061],[23.08858,48.00716],[23.0158,47.99338],[22.92241,48.02002],[22.94301,47.96672],[22.89849,47.95851],[22.84276,47.98602],[22.87847,48.04665],[22.81804,48.11363],[22.73427,48.12005],[22.66835,48.09162],[22.58733,48.10813],[22.59007,48.15121],[22.49806,48.25189],[22.38133,48.23726],[22.2083,48.42534],[22.14689,48.4005],[22.16023,48.56548],[22.21379,48.6218],[22.34151,48.68893],[22.42934,48.92857],[22.48296,48.99172],[22.54338,49.01424],[22.56155,49.08865],[22.89122,49.00725],[22.86336,49.10513],[22.72009,49.20288],[22.748,49.32759],[22.69444,49.49378],[22.64534,49.53094],[22.78304,49.65543],[22.80261,49.69098],[22.83179,49.69875],[22.99329,49.84249],[23.28221,50.0957],[23.67635,50.33385],[23.71382,50.38248],[23.79445,50.40481],[23.99563,50.41289],[24.03668,50.44507],[24.07048,50.5071],[24.0996,50.60752],[24.0595,50.71625],[23.95925,50.79271],[23.99254,50.83847],[24.0952,50.83262],[24.14524,50.86128],[24.04576,50.90196],[23.92217,51.00836],[23.90376,51.07697],[23.80678,51.18405],[23.63858,51.32182],[23.69905,51.40871],[23.62751,51.50512],[23.6736,51.50255],[23.60906,51.62122],[23.7766,51.66809],[23.91118,51.63316],[23.8741,51.59734],[23.99907,51.58369],[24.13075,51.66979],[24.3163,51.75063],[24.29021,51.80841],[24.37123,51.88222],[24.98784,51.91273],[25.20228,51.97143],[25.46163,51.92205],[25.73673,51.91973],[25.80574,51.94556],[25.83217,51.92587],[26.00408,51.92967],[26.19084,51.86781],[26.39367,51.87315],[26.46962,51.80501],[26.69759,51.82284],[26.80043,51.75777],[26.9489,51.73788],[26.99422,51.76933],[27.20602,51.77291],[27.20948,51.66713],[27.26613,51.65957],[27.24828,51.60161],[27.47212,51.61184],[27.51058,51.5854],[27.55727,51.63486],[27.71932,51.60672],[27.67125,51.50854],[27.76052,51.47604],[27.85253,51.62293],[27.91844,51.61952],[27.95827,51.56065],[28.10658,51.57857],[28.23452,51.66988],[28.37592,51.54505],[28.47051,51.59734],[28.64429,51.5664],[28.69161,51.44695],[28.73143,51.46236],[28.75615,51.41442],[28.78224,51.45294],[28.76027,51.48802],[28.81795,51.55552],[28.95528,51.59222],[28.99098,51.56833],[29.1187,51.65872],[29.16402,51.64679],[29.20659,51.56918],[29.25603,51.57089],[29.25191,51.49828],[29.32881,51.37843],[29.42357,51.4187],[29.49773,51.39814],[29.54372,51.48372],[29.7408,51.53417],[29.77376,51.4461],[30.17888,51.51025],[30.34642,51.42555],[30.36153,51.33984],[30.56203,51.25655],[30.64992,51.35014],[30.51946,51.59649],[30.68804,51.82806],[30.76443,51.89739],[30.90897,52.00699],[30.95589,52.07775],[31.13332,52.1004],[31.25142,52.04131],[31.38326,52.12991],[31.7822,52.11406],[31.81722,52.09955],[31.85018,52.11305],[31.96141,52.08015],[31.92159,52.05144],[32.08813,52.03319],[32.23331,52.08085],[32.2777,52.10266],[32.34044,52.1434],[32.33083,52.23685],[32.38988,52.24946],[32.3528,52.32842],[32.54781,52.32423],[32.69475,52.25535],[32.85405,52.27888],[32.89937,52.2461],[33.18913,52.3754],[33.51323,52.35779],[33.48027,52.31499],[33.55718,52.30324],[33.78789,52.37204],[34.05239,52.20132],[34.11199,52.14087],[34.09413,52.00835],[34.41136,51.82793],[34.42922,51.72852],[34.07765,51.67065],[34.17599,51.63253],[34.30562,51.5205],[34.22048,51.4187],[34.33446,51.363],[34.23009,51.26429],[34.31661,51.23936],[34.38802,51.2746],[34.6613,51.25053],[34.6874,51.18],[34.82472,51.17483],[34.97304,51.2342],[35.14058,51.23162],[35.12685,51.16191],[35.20375,51.04723],[35.31774,51.08434],[35.40837,51.04119],[35.32598,50.94524],[35.39307,50.92145],[35.41367,50.80227],[35.47704,50.77274],[35.48116,50.66405],[35.39464,50.64751],[35.47463,50.49247],[35.58003,50.45117],[35.61711,50.35707],[35.73659,50.35489],[35.80388,50.41356],[35.8926,50.43829],[36.06893,50.45205],[36.20763,50.3943],[36.30101,50.29088],[36.47817,50.31457],[36.58371,50.28563],[36.56655,50.2413],[36.64571,50.218],[36.69377,50.26982],[36.91762,50.34963],[37.08468,50.34935],[37.48204,50.46079],[37.47243,50.36277],[37.62486,50.29966],[37.62879,50.24481],[37.61113,50.21976],[37.75807,50.07896],[37.79515,50.08425],[37.90776,50.04194],[38.02999,49.94482],[38.02999,49.90592],[38.21675,49.98104],[38.18517,50.08161],[38.32524,50.08866],[38.35408,50.00664],[38.65688,49.97176],[38.68677,50.00904],[38.73311,49.90238],[38.90477,49.86787],[38.9391,49.79524],[39.1808,49.88911],[39.27968,49.75976],[39.44496,49.76067],[39.59142,49.73758],[39.65047,49.61761],[39.84548,49.56064],[40.13249,49.61672],[40.16683,49.56865],[40.03636,49.52321],[40.03087,49.45452],[40.1141,49.38798],[40.14912,49.37681],[40.18331,49.34996],[40.22176,49.25683],[40.01988,49.1761],[39.93437,49.05709],[39.6836,49.05121],[39.6683,48.99454],[39.71353,48.98959],[39.72649,48.9754],[39.74874,48.98675],[39.78368,48.91596],[39.98967,48.86901],[40.03636,48.91957],[40.08168,48.87443],[39.97182,48.79398],[39.79466,48.83739],[39.73104,48.7325],[39.71765,48.68673],[39.67226,48.59368],[39.79764,48.58668],[39.84548,48.57821],[39.86196,48.46633],[39.88794,48.44226],[39.94847,48.35055],[39.84136,48.33321],[39.84273,48.30947],[39.90041,48.3049],[39.91465,48.26743],[39.95248,48.29972],[39.9693,48.29904],[39.97325,48.31399],[39.99241,48.31768],[40.00752,48.22445],[39.94847,48.22811],[39.83724,48.06501],[39.88256,48.04482],[39.77544,48.04206],[39.82213,47.96396],[39.73935,47.82876],[38.87979,47.87719],[38.79628,47.81109],[38.76379,47.69346],[38.35062,47.61631],[38.28679,47.53552],[38.28954,47.39255],[38.22225,47.30788],[38.33074,47.30508],[38.32112,47.2585],[38.23049,47.2324],[38.22955,47.12069],[38.3384,46.98085],[38.12112,46.86078],[37.62608,46.82615],[35.23066,45.79231],[34.96015,45.75634],[34.79905,45.81009],[34.80153,45.90047],[34.75479,45.90705],[34.66679,45.97136],[34.60861,45.99347],[34.55889,45.99347],[34.52011,45.95097],[34.48729,45.94267],[34.44155,45.95995],[34.41221,46.00245],[34.33912,46.06114],[34.25111,46.0532],[34.181,46.06804],[34.12929,46.10494],[34.07311,46.11769],[34.05272,46.10838],[33.91549,46.15938],[33.85234,46.19863],[33.79715,46.20482],[33.74047,46.18555],[33.646,46.23028],[33.61517,46.22615],[33.63854,46.14147],[33.61467,46.13561],[33.57318,46.10317]]]]}},{type:"Feature",properties:{iso1A2:"UG",iso1A3:"UGA",iso1N3:"800",wikidata:"Q1036",nameEn:"Uganda",groups:["014","202","002"],driveSide:"left",callingCodes:["256"]},geometry:{type:"MultiPolygon",coordinates:[[[[33.93107,-0.99298],[30.80408,-0.99911],[30.76635,-0.9852],[30.70631,-1.01175],[30.64166,-1.06601],[30.47194,-1.0555],[30.35212,-1.06896],[30.16369,-1.34303],[29.912,-1.48269],[29.82657,-1.31187],[29.59061,-1.39016],[29.58388,-0.89821],[29.63006,-0.8997],[29.62708,-0.71055],[29.67176,-0.55714],[29.67474,-0.47969],[29.65091,-0.46777],[29.72687,-0.08051],[29.7224,0.07291],[29.77454,0.16675],[29.81922,0.16824],[29.87284,0.39166],[29.97413,0.52124],[29.95477,0.64486],[29.98307,0.84295],[30.1484,0.89805],[30.22139,0.99635],[30.24671,1.14974],[30.48503,1.21675],[31.30127,2.11006],[31.28042,2.17853],[31.20148,2.2217],[31.1985,2.29462],[31.12104,2.27676],[31.07934,2.30207],[31.06593,2.35862],[30.96911,2.41071],[30.91102,2.33332],[30.83059,2.42559],[30.74271,2.43601],[30.75612,2.5863],[30.8857,2.83923],[30.8574,2.9508],[30.77101,3.04897],[30.84251,3.26908],[30.93486,3.40737],[30.94081,3.50847],[30.85153,3.48867],[30.97601,3.693],[31.16666,3.79853],[31.29476,3.8015],[31.50478,3.67814],[31.50776,3.63652],[31.72075,3.74354],[31.81459,3.82083],[31.86821,3.78664],[31.96205,3.6499],[31.95907,3.57408],[32.05187,3.589],[32.08491,3.56287],[32.08866,3.53543],[32.19888,3.50867],[32.20782,3.6053],[32.41337,3.748],[32.72021,3.77327],[32.89746,3.81339],[33.02852,3.89296],[33.18356,3.77812],[33.51264,3.75068],[33.9873,4.23316],[34.06046,4.15235],[34.15429,3.80464],[34.45815,3.67385],[34.44922,3.51627],[34.39112,3.48802],[34.41794,3.44342],[34.40006,3.37949],[34.45815,3.18319],[34.56242,3.11478],[34.60114,2.93034],[34.65774,2.8753],[34.73967,2.85447],[34.78137,2.76223],[34.77244,2.70272],[34.95267,2.47209],[34.90947,2.42447],[34.98692,1.97348],[34.9899,1.6668],[34.92734,1.56109],[34.87819,1.5596],[34.7918,1.36752],[34.82606,1.30944],[34.82606,1.26626],[34.80223,1.22754],[34.67562,1.21265],[34.58029,1.14712],[34.57427,1.09868],[34.52369,1.10692],[34.43349,0.85254],[34.40041,0.80266],[34.31516,0.75693],[34.27345,0.63182],[34.20196,0.62289],[34.13493,0.58118],[34.11408,0.48884],[34.08727,0.44713],[34.10067,0.36372],[33.90936,0.10581],[33.98449,-0.13079],[33.9264,-0.54188],[33.93107,-0.99298]]]]}},{type:"Feature",properties:{iso1A2:"UM",iso1A3:"UMI",iso1N3:"581",wikidata:"Q16645",nameEn:"United States Minor Outlying Islands",country:"US",groups:["057","009"]},geometry:{type:"MultiPolygon",coordinates:[[[[-175.33482,-1.40631],[-177.43039,-1.43294],[-177.43928,1.65656],[-175.33167,1.67574],[-175.33482,-1.40631]]],[[[-161.04969,-1.36251],[-161.05669,1.11722],[-158.62734,1.1296],[-158.62058,-1.35506],[-161.04969,-1.36251]]],[[[-161.06795,5.2462],[-163.24478,5.24198],[-163.24994,7.12322],[-161.0731,7.1291],[-161.06795,5.2462]]],[[[-170.65691,16.57199],[-169.2329,17.4933],[-168.87689,16.01159],[-170.65691,16.57199]]],[[[-176.29741,29.09786],[-177.5224,27.7635],[-177.77531,29.29793],[-176.29741,29.09786]]],[[[-74.7289,18.71009],[-74.76465,18.06252],[-75.71816,18.46438],[-74.7289,18.71009]]],[[[167.34779,18.97692],[165.82549,18.97692],[166.67967,20.14834],[167.34779,18.97692]]]]}},{type:"Feature",properties:{iso1A2:"US",iso1A3:"USA",iso1N3:"840",wikidata:"Q30",nameEn:"United States of America",groups:["021","003","019"],roadSpeedUnit:"mph",callingCodes:["1"]},geometry:{type:"MultiPolygon",coordinates:[[[[-177.8563,29.18961],[-177.5224,27.7635],[-154.05867,45.51124],[-151.6784,9.55515],[-179.49839,27.86265],[-177.8563,29.18961]]],[[[169.34848,52.47228],[179.84401,55.10087],[180,51.0171],[169.34848,52.47228]]],[[[-168.95635,65.98512],[-168.25765,71.99091],[-140.97446,84.39275],[-141.00116,60.30648],[-140.5227,60.22077],[-140.45648,60.30919],[-139.98024,60.18027],[-139.68991,60.33693],[-139.05831,60.35205],[-139.20603,60.08896],[-139.05365,59.99655],[-138.71149,59.90728],[-138.62145,59.76431],[-137.60623,59.24465],[-137.4925,58.89415],[-136.82619,59.16198],[-136.52365,59.16752],[-136.47323,59.46617],[-136.33727,59.44466],[-136.22381,59.55526],[-136.31566,59.59083],[-135.48007,59.79937],[-135.03069,59.56208],[-135.00267,59.28745],[-134.7047,59.2458],[-134.55699,59.1297],[-134.48059,59.13231],[-134.27175,58.8634],[-133.84645,58.73543],[-133.38523,58.42773],[-131.8271,56.62247],[-130.77769,56.36185],[-130.33965,56.10849],[-130.10173,56.12178],[-130.00093,56.00325],[-130.00857,55.91344],[-130.15373,55.74895],[-129.97513,55.28029],[-130.08035,55.21556],[-130.18765,55.07744],[-130.27203,54.97174],[-130.44184,54.85377],[-130.64499,54.76912],[-130.61931,54.70835],[-133.92876,54.62289],[-179.55295,50.81807],[-179.55295,57.62081],[-172.76104,63.77445],[-169.03888,65.48473],[-168.95635,65.98512]]],[[[-97.13927,25.96583],[-97.35946,25.92189],[-97.37332,25.83854],[-97.42511,25.83969],[-97.45669,25.86874],[-97.49828,25.89877],[-97.52025,25.88518],[-97.66511,26.01708],[-97.95155,26.0625],[-97.97017,26.05232],[-98.24603,26.07191],[-98.27075,26.09457],[-98.30491,26.10475],[-98.35126,26.15129],[-99.00546,26.3925],[-99.03053,26.41249],[-99.08477,26.39849],[-99.53573,27.30926],[-99.49744,27.43746],[-99.482,27.47128],[-99.48045,27.49016],[-99.50208,27.50021],[-99.52955,27.49747],[-99.51478,27.55836],[-99.55409,27.61314],[-100.50029,28.66117],[-100.51222,28.70679],[-100.5075,28.74066],[-100.52313,28.75598],[-100.59809,28.88197],[-100.63689,28.90812],[-100.67294,29.09744],[-100.79696,29.24688],[-100.87982,29.296],[-100.94056,29.33371],[-100.94579,29.34523],[-100.96725,29.3477],[-101.01128,29.36947],[-101.05686,29.44738],[-101.47277,29.7744],[-102.60596,29.8192],[-103.15787,28.93865],[-104.37752,29.54255],[-104.39363,29.55396],[-104.3969,29.57105],[-104.5171,29.64671],[-104.77674,30.4236],[-106.00363,31.39181],[-106.09025,31.40569],[-106.20346,31.46305],[-106.23711,31.51262],[-106.24612,31.54193],[-106.28084,31.56173],[-106.30305,31.62154],[-106.33419,31.66303],[-106.34864,31.69663],[-106.3718,31.71165],[-106.38003,31.73151],[-106.41773,31.75196],[-106.43419,31.75478],[-106.45244,31.76523],[-106.46726,31.75998],[-106.47298,31.75054],[-106.48815,31.74769],[-106.50111,31.75714],[-106.50962,31.76155],[-106.51251,31.76922],[-106.52266,31.77509],[-106.529,31.784],[-108.20899,31.78534],[-108.20979,31.33316],[-109.05235,31.3333],[-111.07523,31.33232],[-112.34553,31.7357],[-114.82011,32.49609],[-114.79524,32.55731],[-114.81141,32.55543],[-114.80584,32.62028],[-114.76736,32.64094],[-114.71871,32.71894],[-115.88053,32.63624],[-117.1243,32.53427],[-118.48109,32.5991],[-133.98258,38.06389],[-125.03842,48.53282],[-123.50039,48.21223],[-123.15614,48.35395],[-123.26565,48.6959],[-123.0093,48.76586],[-123.0093,48.83186],[-123.32163,49.00419],[-117.03266,49.00056],[-116.04938,48.99999],[-114.0683,48.99885],[-110.0051,48.99901],[-104.05004,48.99925],[-101.36198,48.99935],[-97.24024,48.99952],[-95.15355,48.9996],[-95.15357,49.384],[-95.12903,49.37056],[-95.05825,49.35311],[-95.01419,49.35647],[-94.99532,49.36579],[-94.95681,49.37035],[-94.85381,49.32492],[-94.8159,49.32299],[-94.82487,49.29483],[-94.77355,49.11998],[-94.75017,49.09931],[-94.687,48.84077],[-94.70087,48.8339],[-94.70486,48.82365],[-94.69669,48.80918],[-94.69335,48.77883],[-94.58903,48.71803],[-94.54885,48.71543],[-94.53826,48.70216],[-94.44258,48.69223],[-94.4174,48.71049],[-94.27153,48.70232],[-94.25172,48.68404],[-94.25104,48.65729],[-94.23215,48.65202],[-93.85769,48.63284],[-93.83288,48.62745],[-93.80676,48.58232],[-93.80939,48.52439],[-93.79267,48.51631],[-93.66382,48.51845],[-93.47022,48.54357],[-93.44472,48.59147],[-93.40693,48.60948],[-93.39758,48.60364],[-93.3712,48.60599],[-93.33946,48.62787],[-93.25391,48.64266],[-92.94973,48.60866],[-92.7287,48.54005],[-92.6342,48.54133],[-92.62747,48.50278],[-92.69927,48.49573],[-92.71323,48.46081],[-92.65606,48.43471],[-92.50712,48.44921],[-92.45588,48.40624],[-92.48147,48.36609],[-92.37185,48.22259],[-92.27167,48.25046],[-92.30939,48.31251],[-92.26662,48.35651],[-92.202,48.35252],[-92.14732,48.36578],[-92.05339,48.35958],[-91.98929,48.25409],[-91.86125,48.21278],[-91.71231,48.19875],[-91.70451,48.11805],[-91.55649,48.10611],[-91.58025,48.04339],[-91.45829,48.07454],[-91.43248,48.04912],[-91.25025,48.08522],[-91.08016,48.18096],[-90.87588,48.2484],[-90.75045,48.09143],[-90.56444,48.12184],[-90.56312,48.09488],[-90.07418,48.11043],[-89.89974,47.98109],[-89.77248,48.02607],[-89.57972,48.00023],[-89.48837,48.01412],[-88.37033,48.30586],[-84.85871,46.88881],[-84.55635,46.45974],[-84.47607,46.45225],[-84.4481,46.48972],[-84.42101,46.49853],[-84.34174,46.50683],[-84.29893,46.49127],[-84.26351,46.49508],[-84.2264,46.53337],[-84.1945,46.54061],[-84.17723,46.52753],[-84.12885,46.53068],[-84.11196,46.50248],[-84.13451,46.39218],[-84.11254,46.32329],[-84.11615,46.2681],[-84.09756,46.25512],[-84.1096,46.23987],[-83.95399,46.05634],[-83.90453,46.05922],[-83.83329,46.12169],[-83.57017,46.105],[-83.43746,45.99749],[-83.59589,45.82131],[-82.48419,45.30225],[-82.42469,42.992],[-82.4146,42.97626],[-82.4253,42.95423],[-82.45331,42.93139],[-82.4826,42.8068],[-82.46613,42.76615],[-82.51063,42.66025],[-82.51858,42.611],[-82.57583,42.5718],[-82.58873,42.54984],[-82.64242,42.55594],[-82.82964,42.37355],[-83.02253,42.33045],[-83.07837,42.30978],[-83.09837,42.28877],[-83.12724,42.2376],[-83.14962,42.04089],[-83.11184,41.95671],[-82.67862,41.67615],[-78.93684,42.82887],[-78.90712,42.89733],[-78.90905,42.93022],[-78.93224,42.95229],[-78.96312,42.95509],[-78.98126,42.97],[-79.02074,42.98444],[-79.02424,43.01983],[-78.99941,43.05612],[-79.01055,43.06659],[-79.07486,43.07845],[-79.05671,43.10937],[-79.06881,43.12029],[-79.0427,43.13934],[-79.04652,43.16396],[-79.05384,43.17418],[-79.05002,43.20133],[-79.05544,43.21224],[-79.05512,43.25375],[-79.06921,43.26183],[-79.25796,43.54052],[-76.79706,43.63099],[-76.43859,44.09393],[-76.35324,44.13493],[-76.31222,44.19894],[-76.244,44.19643],[-76.1664,44.23051],[-76.16285,44.28262],[-76.00018,44.34896],[-75.95947,44.34463],[-75.8217,44.43176],[-75.76813,44.51537],[-75.41441,44.76614],[-75.2193,44.87821],[-75.01363,44.95608],[-74.99101,44.98051],[-74.8447,45.00606],[-74.66689,45.00646],[-74.32699,44.99029],[-73.35025,45.00942],[-71.50067,45.01357],[-71.48735,45.07784],[-71.42778,45.12624],[-71.40364,45.21382],[-71.44252,45.2361],[-71.37133,45.24624],[-71.29371,45.29996],[-71.22338,45.25184],[-71.19723,45.25438],[-71.14568,45.24128],[-71.08364,45.30623],[-71.01866,45.31573],[-71.0107,45.34819],[-70.95193,45.33895],[-70.91169,45.29849],[-70.89864,45.2398],[-70.84816,45.22698],[-70.80236,45.37444],[-70.82638,45.39828],[-70.78372,45.43269],[-70.65383,45.37592],[-70.62518,45.42286],[-70.72651,45.49771],[-70.68516,45.56964],[-70.54019,45.67291],[-70.38934,45.73215],[-70.41523,45.79497],[-70.25976,45.89675],[-70.24694,45.95138],[-70.31025,45.96424],[-70.23855,46.1453],[-70.29078,46.18832],[-70.18547,46.35357],[-70.05812,46.41768],[-69.99966,46.69543],[-69.22119,47.46461],[-69.05148,47.42012],[-69.05073,47.30076],[-69.05039,47.2456],[-68.89222,47.1807],[-68.70125,47.24399],[-68.60575,47.24659],[-68.57914,47.28431],[-68.38332,47.28723],[-68.37458,47.35851],[-68.23244,47.35712],[-67.94843,47.1925],[-67.87993,47.10377],[-67.78578,47.06473],[-67.78111,45.9392],[-67.75196,45.91814],[-67.80961,45.87531],[-67.75654,45.82324],[-67.80653,45.80022],[-67.80705,45.69528],[-67.6049,45.60725],[-67.43815,45.59162],[-67.42144,45.50584],[-67.50578,45.48971],[-67.42394,45.37969],[-67.48201,45.27351],[-67.34927,45.122],[-67.29754,45.14865],[-67.29748,45.18173],[-67.27039,45.1934],[-67.22751,45.16344],[-67.20349,45.1722],[-67.19603,45.16771],[-67.15965,45.16179],[-67.11316,45.11176],[-67.0216,44.95333],[-66.96824,44.90965],[-66.98249,44.87071],[-66.96824,44.83078],[-66.93432,44.82597],[-67.16117,44.20069],[-61.98255,37.34815],[-79.14818,27.83105],[-79.89631,24.6597],[-82.02215,24.23074],[-96.92418,25.97377],[-97.13927,25.96583]]]]}},{type:"Feature",properties:{iso1A2:"UY",iso1A3:"URY",iso1N3:"858",wikidata:"Q77",nameEn:"Uruguay",groups:["005","419","019"],callingCodes:["598"]},geometry:{type:"MultiPolygon",coordinates:[[[[-57.65132,-30.19229],[-57.22502,-30.26121],[-56.90236,-30.02578],[-56.49267,-30.39471],[-56.4795,-30.3899],[-56.4619,-30.38457],[-55.87388,-31.05053],[-55.58866,-30.84117],[-55.5634,-30.8686],[-55.55373,-30.8732],[-55.55218,-30.88193],[-55.54572,-30.89051],[-55.53431,-30.89714],[-55.53276,-30.90218],[-55.52712,-30.89997],[-55.51862,-30.89828],[-55.50841,-30.9027],[-55.50821,-30.91349],[-54.17384,-31.86168],[-53.76024,-32.0751],[-53.39572,-32.58596],[-53.37671,-32.57005],[-53.1111,-32.71147],[-53.53459,-33.16843],[-53.52794,-33.68908],[-53.44031,-33.69344],[-53.39593,-33.75169],[-53.37138,-33.74313],[-52.83257,-34.01481],[-54.78916,-36.21945],[-57.83001,-34.69099],[-58.34425,-34.15035],[-58.44442,-33.84033],[-58.40475,-33.11777],[-58.1224,-32.98842],[-58.22362,-32.52416],[-58.10036,-32.25338],[-58.20252,-31.86966],[-58.00076,-31.65016],[-58.0023,-31.53084],[-58.07569,-31.44916],[-57.98127,-31.3872],[-57.9908,-31.34924],[-57.86729,-31.06352],[-57.89476,-30.95994],[-57.8024,-30.77193],[-57.89115,-30.49572],[-57.64859,-30.35095],[-57.61478,-30.25165],[-57.65132,-30.19229]]]]}},{type:"Feature",properties:{iso1A2:"UZ",iso1A3:"UZB",iso1N3:"860",wikidata:"Q265",nameEn:"Uzbekistan",groups:["143","142"],callingCodes:["998"]},geometry:{type:"MultiPolygon",coordinates:[[[[65.85194,42.85481],[66.09482,42.93426],[66.00546,41.94455],[66.53302,41.87388],[66.69129,41.1311],[67.9644,41.14611],[67.98511,41.02794],[68.08273,41.08148],[68.1271,41.0324],[67.96736,40.83798],[68.49983,40.56437],[68.63,40.59358],[68.58444,40.91447],[68.49983,40.99669],[68.62221,41.03019],[68.65662,40.93861],[68.73945,40.96989],[68.7217,41.05025],[69.01308,41.22804],[69.05006,41.36183],[69.15137,41.43078],[69.17701,41.43769],[69.18528,41.45175],[69.20439,41.45391],[69.22671,41.46298],[69.23332,41.45847],[69.25059,41.46693],[69.29778,41.43673],[69.35554,41.47211],[69.37468,41.46555],[69.45081,41.46246],[69.39485,41.51518],[69.45751,41.56863],[69.49545,41.545],[70.94483,42.26238],[71.13263,42.28356],[71.28719,42.18033],[70.69777,41.92554],[70.17682,41.5455],[70.48909,41.40335],[70.67586,41.47953],[70.78572,41.36419],[70.77885,41.24813],[70.86263,41.23833],[70.9615,41.16393],[71.02193,41.19494],[71.11806,41.15359],[71.25813,41.18796],[71.27187,41.11015],[71.34877,41.16807],[71.40198,41.09436],[71.46148,41.13958],[71.43814,41.19644],[71.46688,41.31883],[71.57227,41.29175],[71.6787,41.42111],[71.65914,41.49599],[71.73054,41.54713],[71.71132,41.43012],[71.76625,41.4466],[71.83914,41.3546],[71.91457,41.2982],[71.85964,41.19081],[72.07249,41.11739],[72.10745,41.15483],[72.16433,41.16483],[72.17594,41.15522],[72.14864,41.13363],[72.1792,41.10621],[72.21061,41.05607],[72.17594,41.02377],[72.18339,40.99571],[72.324,41.03381],[72.34026,41.04539],[72.34757,41.06104],[72.36138,41.04384],[72.38511,41.02785],[72.45206,41.03018],[72.48742,40.97136],[72.55109,40.96046],[72.59136,40.86947],[72.68157,40.84942],[72.84291,40.85512],[72.94454,40.8094],[73.01869,40.84681],[73.13267,40.83512],[73.13412,40.79122],[73.0612,40.76678],[72.99133,40.76457],[72.93296,40.73089],[72.8722,40.71111],[72.85372,40.7116],[72.84754,40.67229],[72.80137,40.67856],[72.74866,40.60873],[72.74894,40.59592],[72.75982,40.57273],[72.74862,40.57131],[72.74768,40.58051],[72.73995,40.58409],[72.69579,40.59778],[72.66713,40.59076],[72.66713,40.5219],[72.47795,40.5532],[72.40517,40.61917],[72.34406,40.60144],[72.41714,40.55736],[72.38384,40.51535],[72.41513,40.50856],[72.44191,40.48222],[72.40346,40.4007],[72.24368,40.46091],[72.18648,40.49893],[71.96401,40.31907],[72.05464,40.27586],[71.85002,40.25647],[71.82646,40.21872],[71.73054,40.14818],[71.71719,40.17886],[71.69621,40.18492],[71.70569,40.20391],[71.68386,40.26984],[71.61931,40.26775],[71.61725,40.20615],[71.51549,40.22986],[71.51215,40.26943],[71.4246,40.28619],[71.36663,40.31593],[71.13042,40.34106],[71.05901,40.28765],[70.95789,40.28761],[70.9818,40.22392],[70.8607,40.217],[70.62342,40.17396],[70.56394,40.26421],[70.57149,40.3442],[70.37511,40.38605],[70.32626,40.45174],[70.49871,40.52503],[70.80009,40.72825],[70.45251,41.04438],[70.38028,41.02014],[70.36655,40.90296],[69.69434,40.62615],[69.59441,40.70181],[69.53021,40.77621],[69.38327,40.7918],[69.32834,40.70233],[69.3455,40.57988],[69.2643,40.57506],[69.21063,40.54469],[69.27066,40.49274],[69.28525,40.41894],[69.30774,40.36102],[69.33794,40.34819],[69.32833,40.29794],[69.30808,40.2821],[69.24817,40.30357],[69.25229,40.26362],[69.30104,40.24502],[69.30448,40.18774],[69.2074,40.21488],[69.15659,40.2162],[69.04544,40.22904],[68.85832,40.20885],[68.84357,40.18604],[68.79276,40.17555],[68.77902,40.20492],[68.5332,40.14826],[68.52771,40.11676],[68.62796,40.07789],[69.01523,40.15771],[69.01935,40.11466],[68.96579,40.06949],[68.84906,40.04952],[68.93695,39.91167],[68.88889,39.87163],[68.63071,39.85265],[68.61972,39.68905],[68.54166,39.53929],[68.12053,39.56317],[67.70992,39.66156],[67.62889,39.60234],[67.44899,39.57799],[67.46547,39.53564],[67.39681,39.52505],[67.46822,39.46146],[67.45998,39.315],[67.36522,39.31287],[67.33226,39.23739],[67.67833,39.14479],[67.68915,39.00775],[68.09704,39.02589],[68.19743,38.85985],[68.06948,38.82115],[68.12877,38.73677],[68.05598,38.71641],[68.0807,38.64136],[68.05873,38.56087],[68.11366,38.47169],[68.06274,38.39435],[68.13289,38.40822],[68.40343,38.19484],[68.27159,37.91477],[68.12635,37.93],[67.81566,37.43107],[67.8474,37.31594],[67.78329,37.1834],[67.51868,37.26102],[67.2581,37.17216],[67.2224,37.24545],[67.13039,37.27168],[67.08232,37.35469],[66.95598,37.40162],[66.64699,37.32958],[66.55743,37.35409],[66.52303,37.39827],[66.65761,37.45497],[66.52852,37.58568],[66.53676,37.80084],[66.67684,37.96776],[66.56697,38.0435],[66.41042,38.02403],[66.24013,38.16238],[65.83913,38.25733],[65.55873,38.29052],[64.32576,38.98691],[64.19086,38.95561],[63.70778,39.22349],[63.6913,39.27666],[62.43337,39.98528],[62.34273,40.43206],[62.11751,40.58242],[61.87856,41.12257],[61.4446,41.29407],[61.39732,41.19873],[61.33199,41.14946],[61.22212,41.14946],[61.03261,41.25691],[60.5078,41.21694],[60.06581,41.4363],[60.18117,41.60082],[60.06032,41.76287],[60.08504,41.80997],[60.33223,41.75058],[59.95046,41.97966],[60.0356,42.01028],[60.04659,42.08982],[59.96419,42.1428],[60.00539,42.212],[59.94633,42.27655],[59.4341,42.29738],[59.2955,42.37064],[59.17317,42.52248],[58.93422,42.5407],[58.6266,42.79314],[58.57991,42.64988],[58.27504,42.69632],[58.14321,42.62159],[58.29427,42.56497],[58.51674,42.30348],[58.40688,42.29535],[58.3492,42.43335],[57.99214,42.50021],[57.90975,42.4374],[57.92897,42.24047],[57.84932,42.18555],[57.6296,42.16519],[57.30275,42.14076],[57.03633,41.92043],[56.96218,41.80383],[57.03359,41.41777],[57.13796,41.36625],[57.03423,41.25435],[56.00314,41.32584],[55.97584,44.99322],[55.97584,44.99328],[55.97584,44.99338],[55.97584,44.99343],[55.97584,44.99348],[55.97584,44.99353],[55.97584,44.99359],[55.97584,44.99369],[55.97584,44.99374],[55.97584,44.99384],[55.97584,44.9939],[55.97584,44.994],[55.97584,44.99405],[55.97584,44.99415],[55.97584,44.99421],[55.97584,44.99426],[55.97584,44.99431],[55.97584,44.99436],[55.97584,44.99441],[55.97594,44.99446],[55.97605,44.99452],[55.97605,44.99457],[55.97605,44.99462],[55.97605,44.99467],[55.97605,44.99477],[55.97615,44.99477],[55.97615,44.99483],[55.97615,44.99493],[55.97615,44.99498],[55.97615,44.99503],[55.97615,44.99508],[55.97625,44.99514],[55.97636,44.99519],[55.97636,44.99524],[55.97646,44.99529],[55.97646,44.99534],[55.97656,44.99539],[55.97667,44.99545],[55.97677,44.9955],[55.97677,44.99555],[55.97677,44.9956],[55.97687,44.9956],[55.97698,44.99565],[55.97698,44.9957],[55.97708,44.99576],[55.97718,44.99581],[55.97729,44.99586],[55.97739,44.99586],[55.97739,44.99591],[55.97749,44.99591],[55.9776,44.99591],[55.9777,44.99596],[55.9777,44.99601],[55.9778,44.99607],[55.97791,44.99607],[55.97801,44.99607],[55.97801,44.99612],[55.97811,44.99617],[55.97822,44.99617],[55.97832,44.99622],[55.97842,44.99622],[58.59711,45.58671],[61.01475,44.41383],[62.01711,43.51008],[63.34656,43.64003],[64.53885,43.56941],[64.96464,43.74748],[65.18666,43.48835],[65.53277,43.31856],[65.85194,42.85481]],[[70.68112,40.90612],[70.6158,40.97661],[70.56077,41.00642],[70.54223,40.98787],[70.57501,40.98941],[70.6721,40.90555],[70.68112,40.90612]]],[[[71.21139,40.03369],[71.1427,39.95026],[71.23067,39.93581],[71.16101,39.88423],[71.10531,39.91354],[71.04979,39.89808],[71.10501,39.95568],[71.09063,39.99],[71.11668,39.99291],[71.11037,40.01984],[71.01035,40.05481],[71.00236,40.18154],[71.06305,40.1771],[71.12218,40.03052],[71.21139,40.03369]]],[[[71.86463,39.98598],[71.84316,39.95582],[71.7504,39.93701],[71.71511,39.96348],[71.78838,40.01404],[71.86463,39.98598]]]]}},{type:"Feature",properties:{iso1A2:"VA",iso1A3:"VAT",iso1N3:"336",wikidata:"Q237",nameEn:"Vatican City",aliases:["Holy See"],groups:["039","150"],callingCodes:["379","39 06"]},geometry:{type:"MultiPolygon",coordinates:[[[[12.45181,41.90056],[12.44834,41.90095],[12.44582,41.90194],[12.44815,41.90326],[12.44984,41.90545],[12.45091,41.90625],[12.45543,41.90738],[12.45561,41.90629],[12.45762,41.9058],[12.45755,41.9033],[12.45826,41.90281],[12.45834,41.90174],[12.4577,41.90115],[12.45691,41.90125],[12.45626,41.90172],[12.45435,41.90143],[12.45446,41.90028],[12.45181,41.90056]]]]}},{type:"Feature",properties:{iso1A2:"VC",iso1A3:"VCT",iso1N3:"670",wikidata:"Q757",nameEn:"St. Vincent and the Grenadines",aliases:["WV"],groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 784"]},geometry:{type:"MultiPolygon",coordinates:[[[[-61.73897,12.61191],[-61.43129,13.68336],[-60.70539,13.41452],[-61.13395,12.51526],[-61.38256,12.52991],[-61.73897,12.61191]]]]}},{type:"Feature",properties:{iso1A2:"VE",iso1A3:"VEN",iso1N3:"862",wikidata:"Q717",nameEn:"Venezuela",aliases:["YV"],groups:["005","419","019"],callingCodes:["58"]},geometry:{type:"MultiPolygon",coordinates:[[[[-71.22331,13.01387],[-68.99639,11.79035],[-68.33524,11.78151],[-68.01417,11.77722],[-67.89186,12.4116],[-63.19938,16.44103],[-63.73917,11.92623],[-61.62505,11.18974],[-62.08693,10.04435],[-60.89962,9.81445],[-59.54058,8.6862],[-59.98508,8.53046],[-59.85562,8.35213],[-59.80661,8.28906],[-59.83156,8.23261],[-59.97059,8.20791],[-60.02407,8.04557],[-60.38056,7.8302],[-60.51959,7.83373],[-60.64793,7.56877],[-60.71923,7.55817],[-60.59802,7.33194],[-60.63367,7.25061],[-60.54098,7.14804],[-60.44116,7.20817],[-60.28074,7.1162],[-60.39419,6.94847],[-60.54873,6.8631],[-61.13632,6.70922],[-61.20762,6.58174],[-61.15058,6.19558],[-61.4041,5.95304],[-60.73204,5.20931],[-60.5802,4.94312],[-60.86539,4.70512],[-60.98303,4.54167],[-61.15703,4.49839],[-61.31457,4.54167],[-61.29675,4.44216],[-61.48569,4.43149],[-61.54629,4.2822],[-62.13094,4.08309],[-62.44822,4.18621],[-62.57656,4.04754],[-62.74411,4.03331],[-62.7655,3.73099],[-62.98296,3.59935],[-63.21111,3.96219],[-63.4464,3.9693],[-63.42233,3.89995],[-63.50611,3.83592],[-63.67099,4.01731],[-63.70218,3.91417],[-63.86082,3.94796],[-63.99183,3.90172],[-64.14512,4.12932],[-64.57648,4.12576],[-64.72977,4.28931],[-64.84028,4.24665],[-64.48379,3.7879],[-64.02908,2.79797],[-64.0257,2.48156],[-63.39114,2.4317],[-63.39827,2.16098],[-64.06135,1.94722],[-64.08274,1.64792],[-64.34654,1.35569],[-64.38932,1.5125],[-65.11657,1.12046],[-65.57288,0.62856],[-65.50158,0.92086],[-65.6727,1.01353],[-66.28507,0.74585],[-66.85795,1.22998],[-67.21967,2.35778],[-67.65696,2.81691],[-67.85862,2.79173],[-67.85862,2.86727],[-67.30945,3.38393],[-67.50067,3.75812],[-67.62671,3.74303],[-67.85358,4.53249],[-67.83341,5.31104],[-67.59141,5.5369],[-67.63914,5.64963],[-67.58558,5.84537],[-67.43513,5.98835],[-67.4625,6.20625],[-67.60654,6.2891],[-69.41843,6.1072],[-70.10716,6.96516],[-70.7596,7.09799],[-71.03941,6.98163],[-71.37234,7.01588],[-71.42212,7.03854],[-71.44118,7.02116],[-71.82441,7.04314],[-72.04895,7.03837],[-72.19437,7.37034],[-72.43132,7.40034],[-72.47415,7.48928],[-72.45321,7.57232],[-72.47827,7.65604],[-72.46763,7.79518],[-72.44454,7.86031],[-72.46183,7.90682],[-72.45806,7.91141],[-72.47042,7.92306],[-72.48183,7.92909],[-72.48801,7.94329],[-72.47213,7.96106],[-72.39137,8.03534],[-72.35163,8.01163],[-72.36987,8.19976],[-72.4042,8.36513],[-72.65474,8.61428],[-72.77415,9.10165],[-72.94052,9.10663],[-73.02119,9.27584],[-73.36905,9.16636],[-72.98085,9.85253],[-72.88002,10.44309],[-72.4767,11.1117],[-72.24983,11.14138],[-71.9675,11.65536],[-71.3275,11.85],[-70.92579,11.96275],[-71.22331,13.01387]]]]}},{type:"Feature",properties:{iso1A2:"VG",iso1A3:"VGB",iso1N3:"092",wikidata:"Q25305",nameEn:"British Virgin Islands",country:"GB",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 284"]},geometry:{type:"MultiPolygon",coordinates:[[[[-64.03057,18.08241],[-64.646,18.10286],[-64.64067,18.36478],[-64.86027,18.39056],[-65.02435,18.73231],[-63.75633,19.39745],[-64.03057,18.08241]]]]}},{type:"Feature",properties:{iso1A2:"VI",iso1A3:"VIR",iso1N3:"850",wikidata:"Q11703",nameEn:"United States Virgin Islands",country:"US",groups:["029","003","419","019"],driveSide:"left",roadSpeedUnit:"mph",callingCodes:["1 340"]},geometry:{type:"MultiPolygon",coordinates:[[[[-65.02435,18.73231],[-64.86027,18.39056],[-64.64067,18.36478],[-64.646,18.10286],[-64.35558,17.48384],[-65.27974,17.56928],[-65.02435,18.73231]]]]}},{type:"Feature",properties:{iso1A2:"VN",iso1A3:"VNM",iso1N3:"704",wikidata:"Q881",nameEn:"Vietnam",groups:["035","142"],callingCodes:["84"]},geometry:{type:"MultiPolygon",coordinates:[[[[108.10003,21.47338],[108.00365,17.98159],[111.60491,13.57105],[109.55486,8.10026],[104.81582,8.03101],[102.47649,9.66162],[103.99198,10.48391],[104.43778,10.42386],[104.47963,10.43046],[104.49869,10.4057],[104.59018,10.53073],[104.87933,10.52833],[104.95094,10.64003],[105.09571,10.72722],[105.02722,10.89236],[105.08326,10.95656],[105.11449,10.96332],[105.34011,10.86179],[105.42884,10.96878],[105.50045,10.94586],[105.77751,11.03671],[105.86376,10.89839],[105.84603,10.85873],[105.93403,10.83853],[105.94535,10.9168],[106.06708,10.8098],[106.18539,10.79451],[106.14301,10.98176],[106.20095,10.97795],[106.1757,11.07301],[106.1527,11.10476],[106.10444,11.07879],[105.86782,11.28343],[105.88962,11.43605],[105.87328,11.55953],[105.81645,11.56876],[105.80867,11.60536],[105.8507,11.66635],[105.88962,11.67854],[105.95188,11.63738],[106.00792,11.7197],[106.02038,11.77457],[106.06708,11.77761],[106.13158,11.73283],[106.18539,11.75171],[106.26478,11.72122],[106.30525,11.67549],[106.37219,11.69836],[106.44691,11.66787],[106.45158,11.68616],[106.41577,11.76999],[106.44535,11.8279],[106.44068,11.86294],[106.4687,11.86751],[106.4111,11.97413],[106.70687,11.96956],[106.79405,12.0807],[106.92325,12.06548],[106.99953,12.08983],[107.15831,12.27547],[107.34511,12.33327],[107.42917,12.24657],[107.4463,12.29373],[107.55059,12.36824],[107.5755,12.52177],[107.55993,12.7982],[107.49611,12.88926],[107.49144,13.01215],[107.62843,13.3668],[107.61909,13.52577],[107.53503,13.73908],[107.45252,13.78897],[107.46498,13.91593],[107.44318,13.99751],[107.38247,13.99147],[107.35757,14.02319],[107.37158,14.07906],[107.33577,14.11832],[107.40427,14.24509],[107.39493,14.32655],[107.44941,14.41552],[107.48521,14.40346],[107.52569,14.54665],[107.52102,14.59034],[107.55371,14.628],[107.54361,14.69092],[107.51579,14.79282],[107.59285,14.87795],[107.48277,14.93751],[107.46516,15.00982],[107.61486,15.0566],[107.61926,15.13949],[107.58844,15.20111],[107.62587,15.2266],[107.60605,15.37524],[107.62367,15.42193],[107.53341,15.40496],[107.50699,15.48771],[107.3815,15.49832],[107.34408,15.62345],[107.27583,15.62769],[107.27143,15.71459],[107.21859,15.74638],[107.21419,15.83747],[107.34188,15.89464],[107.39471,15.88829],[107.46296,16.01106],[107.44975,16.08511],[107.33968,16.05549],[107.25822,16.13587],[107.14595,16.17816],[107.15035,16.26271],[107.09091,16.3092],[107.02597,16.31132],[106.97385,16.30204],[106.96638,16.34938],[106.88067,16.43594],[106.88727,16.52671],[106.84104,16.55415],[106.74418,16.41904],[106.65832,16.47816],[106.66052,16.56892],[106.61477,16.60713],[106.58267,16.6012],[106.59013,16.62259],[106.55485,16.68704],[106.55265,16.86831],[106.52183,16.87884],[106.51963,16.92097],[106.54824,16.92729],[106.55045,17.0031],[106.50862,16.9673],[106.43597,17.01362],[106.31929,17.20509],[106.29287,17.3018],[106.24444,17.24714],[106.18991,17.28227],[106.09019,17.36399],[105.85744,17.63221],[105.76612,17.67147],[105.60381,17.89356],[105.64784,17.96687],[105.46292,18.22008],[105.38366,18.15315],[105.15942,18.38691],[105.10408,18.43533],[105.1327,18.58355],[105.19654,18.64196],[105.12829,18.70453],[104.64617,18.85668],[104.5361,18.97747],[103.87125,19.31854],[104.06058,19.43484],[104.10832,19.51575],[104.05617,19.61743],[104.06498,19.66926],[104.23229,19.70242],[104.41281,19.70035],[104.53169,19.61743],[104.64837,19.62365],[104.68359,19.72729],[104.8355,19.80395],[104.8465,19.91783],[104.9874,20.09573],[104.91695,20.15567],[104.86852,20.14121],[104.61315,20.24452],[104.62195,20.36633],[104.72102,20.40554],[104.66158,20.47774],[104.47886,20.37459],[104.40621,20.3849],[104.38199,20.47155],[104.63957,20.6653],[104.27412,20.91433],[104.11121,20.96779],[103.98024,20.91531],[103.82282,20.8732],[103.73478,20.6669],[103.68633,20.66324],[103.45737,20.82382],[103.38032,20.79501],[103.21497,20.89832],[103.12055,20.89994],[103.03469,21.05821],[102.97745,21.05821],[102.89825,21.24707],[102.80794,21.25736],[102.88939,21.3107],[102.94223,21.46034],[102.86297,21.4255],[102.98846,21.58936],[102.97965,21.74076],[102.86077,21.71213],[102.85637,21.84501],[102.81894,21.83888],[102.82115,21.73667],[102.74189,21.66713],[102.67145,21.65894],[102.62301,21.91447],[102.49092,21.99002],[102.51734,22.02676],[102.18712,22.30403],[102.14099,22.40092],[102.16621,22.43336],[102.26428,22.41321],[102.25339,22.4607],[102.41061,22.64184],[102.38415,22.67919],[102.42618,22.69212],[102.46665,22.77108],[102.51802,22.77969],[102.57095,22.7036],[102.60675,22.73376],[102.8636,22.60735],[102.9321,22.48659],[103.0722,22.44775],[103.07843,22.50097],[103.17961,22.55705],[103.15782,22.59873],[103.18895,22.64471],[103.28079,22.68063],[103.32282,22.8127],[103.43179,22.75816],[103.43646,22.70648],[103.52675,22.59155],[103.57812,22.65764],[103.56255,22.69499],[103.64506,22.79979],[103.87904,22.56683],[103.93286,22.52703],[103.94513,22.52553],[103.95191,22.5134],[103.96352,22.50584],[103.96783,22.51173],[103.97384,22.50634],[103.99247,22.51958],[104.01088,22.51823],[104.03734,22.72945],[104.11384,22.80363],[104.27084,22.8457],[104.25683,22.76534],[104.35593,22.69353],[104.47225,22.75813],[104.58122,22.85571],[104.60457,22.81841],[104.65283,22.83419],[104.72755,22.81984],[104.77114,22.90017],[104.84942,22.93631],[104.86765,22.95178],[104.8334,23.01484],[104.79478,23.12934],[104.87382,23.12854],[104.87992,23.17141],[104.91435,23.18666],[104.9486,23.17235],[104.96532,23.20463],[104.98712,23.19176],[105.07002,23.26248],[105.11672,23.25247],[105.17276,23.28679],[105.22569,23.27249],[105.32376,23.39684],[105.40782,23.28107],[105.42805,23.30824],[105.49966,23.20669],[105.56037,23.16806],[105.57594,23.075],[105.72382,23.06641],[105.8726,22.92756],[105.90119,22.94168],[105.99568,22.94178],[106.00179,22.99049],[106.19705,22.98475],[106.27022,22.87722],[106.34961,22.86718],[106.49749,22.91164],[106.51306,22.94891],[106.55976,22.92311],[106.60179,22.92884],[106.6516,22.86862],[106.6734,22.89587],[106.71387,22.88296],[106.71128,22.85982],[106.78422,22.81532],[106.81271,22.8226],[106.83685,22.8098],[106.82404,22.7881],[106.76293,22.73491],[106.72321,22.63606],[106.71698,22.58432],[106.65316,22.5757],[106.61269,22.60301],[106.58395,22.474],[106.55665,22.46498],[106.57221,22.37],[106.55976,22.34841],[106.6516,22.33977],[106.69986,22.22309],[106.67495,22.1885],[106.6983,22.15102],[106.70142,22.02409],[106.68274,21.99811],[106.69276,21.96013],[106.72551,21.97923],[106.74345,22.00965],[106.81038,21.97934],[106.9178,21.97357],[106.92714,21.93459],[106.97228,21.92592],[106.99252,21.95191],[107.05634,21.92303],[107.06101,21.88982],[107.00964,21.85948],[107.02615,21.81981],[107.10771,21.79879],[107.20734,21.71493],[107.24625,21.7077],[107.29296,21.74674],[107.35834,21.6672],[107.35989,21.60063],[107.38636,21.59774],[107.41593,21.64839],[107.47197,21.6672],[107.49532,21.62958],[107.49065,21.59774],[107.54047,21.5934],[107.56537,21.61945],[107.66967,21.60787],[107.80355,21.66141],[107.86114,21.65128],[107.90006,21.5905],[107.92652,21.58906],[107.95232,21.5388],[107.96774,21.53601],[107.97074,21.54072],[107.97383,21.53961],[107.97932,21.54503],[108.02926,21.54997],[108.0569,21.53604],[108.10003,21.47338]]]]}},{type:"Feature",properties:{iso1A2:"VU",iso1A3:"VUT",iso1N3:"548",wikidata:"Q686",nameEn:"Vanuatu",groups:["054","009"],callingCodes:["678"]},geometry:{type:"MultiPolygon",coordinates:[[[[162.93363,-17.28904],[166.02864,-12.9396],[168.21179,-12.88558],[173.26254,-22.69968],[162.93363,-17.28904]]]]}},{type:"Feature",properties:{iso1A2:"WF",iso1A3:"WLF",iso1N3:"876",wikidata:"Q35555",nameEn:"Wallis and Futuna",country:"FR",groups:["061","009"],callingCodes:["681"]},geometry:{type:"MultiPolygon",coordinates:[[[[-178.60161,-14.95666],[-178.60852,-12.49232],[-174.18596,-12.48057],[-174.17905,-14.94502],[-176.76826,-14.95183],[-178.60161,-14.95666]]]]}},{type:"Feature",properties:{iso1A2:"WS",iso1A3:"WSM",iso1N3:"882",wikidata:"Q683",nameEn:"Samoa",groups:["061","009"],driveSide:"left",callingCodes:["685"]},geometry:{type:"MultiPolygon",coordinates:[[[[-174.17905,-14.94502],[-174.18596,-12.48057],[-171.14953,-12.4725],[-171.14262,-14.93704],[-173.13438,-14.94228],[-174.17905,-14.94502]]]]}},{type:"Feature",properties:{iso1A2:"XK",wikidata:"Q1246",nameEn:"Kosovo",groups:["039","150"],isoStatus:"usrAssn",callingCodes:["383"]},geometry:{type:"MultiPolygon",coordinates:[[[[21.39045,42.74888],[21.47498,42.74695],[21.59154,42.72643],[21.58755,42.70418],[21.6626,42.67813],[21.75025,42.70125],[21.79413,42.65923],[21.75672,42.62695],[21.7327,42.55041],[21.70522,42.54176],[21.7035,42.51899],[21.62556,42.45106],[21.64209,42.41081],[21.62887,42.37664],[21.59029,42.38042],[21.57021,42.3647],[21.53467,42.36809],[21.5264,42.33634],[21.56772,42.30946],[21.58992,42.25915],[21.52145,42.24465],[21.50823,42.27156],[21.43882,42.2789],[21.43882,42.23609],[21.38428,42.24465],[21.30496,42.1418],[21.29913,42.13954],[21.31983,42.10993],[21.22728,42.08909],[21.16614,42.19815],[21.11491,42.20794],[20.75464,42.05229],[20.76786,41.91839],[20.68523,41.85318],[20.59524,41.8818],[20.57946,41.91593],[20.63069,41.94913],[20.59434,42.03879],[20.55633,42.08173],[20.56955,42.12097],[20.48857,42.25444],[20.3819,42.3029],[20.34479,42.32656],[20.24399,42.32168],[20.21797,42.41237],[20.17127,42.50469],[20.07761,42.55582],[20.0969,42.65559],[20.02915,42.71147],[20.02088,42.74789],[20.04898,42.77701],[20.2539,42.76245],[20.27869,42.81945],[20.35692,42.8335],[20.40594,42.84853],[20.43734,42.83157],[20.53484,42.8885],[20.48692,42.93208],[20.59929,43.01067],[20.64557,43.00826],[20.69515,43.09641],[20.59929,43.20492],[20.68688,43.21335],[20.73811,43.25068],[20.82145,43.26769],[20.88685,43.21697],[20.83727,43.17842],[20.96287,43.12416],[21.00749,43.13984],[21.05378,43.10707],[21.08952,43.13471],[21.14465,43.11089],[21.16734,42.99694],[21.2041,43.02277],[21.23877,43.00848],[21.23534,42.95523],[21.2719,42.8994],[21.32974,42.90424],[21.36941,42.87397],[21.44047,42.87276],[21.39045,42.74888]]]]}},{type:"Feature",properties:{iso1A2:"YE",iso1A3:"YEM",iso1N3:"887",wikidata:"Q805",nameEn:"Yemen",groups:["145","142"],callingCodes:["967"]},geometry:{type:"MultiPolygon",coordinates:[[[[53.32998,16.16312],[55.69862,12.12478],[52.253,11.68582],[51.12877,12.56479],[50.51849,13.0483],[43.90659,12.3823],[43.32909,12.59711],[43.29075,12.79154],[42.63806,13.58268],[41.29956,15.565],[41.37609,16.19728],[42.15205,16.40211],[42.76801,16.40371],[42.94625,16.39721],[42.94351,16.49467],[42.97215,16.51093],[43.11601,16.53166],[43.15274,16.67248],[43.22066,16.65179],[43.21325,16.74416],[43.25857,16.75304],[43.26303,16.79479],[43.24801,16.80613],[43.22956,16.80613],[43.22012,16.83932],[43.18338,16.84852],[43.1398,16.90696],[43.19328,16.94703],[43.1813,16.98438],[43.18233,17.02673],[43.23967,17.03428],[43.17787,17.14717],[43.20156,17.25901],[43.32653,17.31179],[43.22533,17.38343],[43.29185,17.53224],[43.43005,17.56148],[43.70631,17.35762],[44.50126,17.47475],[46.31018,17.20464],[46.76494,17.29151],[47.00571,16.94765],[47.48245,17.10808],[47.58351,17.50366],[48.19996,18.20584],[49.04884,18.59899],[52.00311,19.00083],[52.78009,17.35124],[52.74267,17.29519],[52.81185,17.28568],[53.09917,16.67084],[53.32998,16.16312]]]]}},{type:"Feature",properties:{iso1A2:"YT",iso1A3:"MYT",iso1N3:"175",wikidata:"Q17063",nameEn:"Mayotte",country:"FR",groups:["EU","014","202","002"],callingCodes:["262"]},geometry:{type:"MultiPolygon",coordinates:[[[[43.83794,-13.66915],[45.50237,-11.90315],[45.54824,-13.22353],[43.83794,-13.66915]]]]}},{type:"Feature",properties:{iso1A2:"ZA",iso1A3:"ZAF",iso1N3:"710",wikidata:"Q258",nameEn:"South Africa",groups:["018","202","002"],driveSide:"left",callingCodes:["27"]},geometry:{type:"MultiPolygon",coordinates:[[[[31.30611,-22.422],[31.55779,-23.176],[31.56539,-23.47268],[31.67942,-23.60858],[31.70223,-23.72695],[31.77445,-23.90082],[31.87707,-23.95293],[31.90368,-24.18892],[31.9835,-24.29983],[32.03196,-25.10785],[32.01676,-25.38117],[31.97875,-25.46356],[32.00631,-25.65044],[31.92649,-25.84216],[31.974,-25.95387],[31.86881,-25.99973],[31.4175,-25.71886],[31.31237,-25.7431],[31.13073,-25.91558],[30.95819,-26.26303],[30.78927,-26.48271],[30.81101,-26.84722],[30.88826,-26.79622],[30.97757,-26.92706],[30.96088,-27.0245],[31.15027,-27.20151],[31.49834,-27.31549],[31.97592,-27.31675],[31.97463,-27.11057],[32.00893,-26.8096],[32.09664,-26.80721],[32.13315,-26.84345],[32.19409,-26.84032],[32.22302,-26.84136],[32.29584,-26.852],[32.35222,-26.86027],[34.51034,-26.91792],[38.88176,-48.03306],[12.51595,-32.27486],[16.45332,-28.63117],[16.46592,-28.57126],[16.59922,-28.53246],[16.90446,-28.057],[17.15405,-28.08573],[17.4579,-28.68718],[18.99885,-28.89165],[19.99882,-28.42622],[19.99817,-24.76768],[20.02809,-24.78725],[20.03678,-24.81004],[20.29826,-24.94869],[20.64795,-25.47827],[20.86081,-26.14892],[20.61754,-26.4692],[20.63275,-26.78181],[20.68596,-26.9039],[20.87031,-26.80047],[21.13353,-26.86661],[21.37869,-26.82083],[21.69322,-26.86152],[21.7854,-26.79199],[21.77114,-26.69015],[21.83291,-26.65959],[21.90703,-26.66808],[22.06192,-26.61882],[22.21206,-26.3773],[22.41921,-26.23078],[22.56365,-26.19668],[22.70808,-25.99186],[22.86012,-25.50572],[23.03497,-25.29971],[23.47588,-25.29971],[23.9244,-25.64286],[24.18287,-25.62916],[24.36531,-25.773],[24.44703,-25.73021],[24.67319,-25.81749],[24.8946,-25.80723],[25.01718,-25.72507],[25.12266,-25.75931],[25.33076,-25.76616],[25.58543,-25.6343],[25.6643,-25.4491],[25.69661,-25.29284],[25.72702,-25.25503],[25.88571,-24.87802],[25.84295,-24.78661],[25.8515,-24.75727],[26.39409,-24.63468],[26.46346,-24.60358],[26.51667,-24.47219],[26.84165,-24.24885],[26.99749,-23.65486],[27.33768,-23.40917],[27.52393,-23.37952],[27.6066,-23.21894],[27.74154,-23.2137],[27.93539,-23.04941],[27.93729,-22.96194],[28.04752,-22.90243],[28.04562,-22.8394],[28.34874,-22.5694],[28.63287,-22.55887],[28.91889,-22.44299],[29.0151,-22.22907],[29.10881,-22.21202],[29.15268,-22.21399],[29.18974,-22.18599],[29.21955,-22.17771],[29.37703,-22.19581],[29.64609,-22.12917],[29.76848,-22.14128],[29.92242,-22.19408],[30.13147,-22.30841],[30.2265,-22.2961],[30.28351,-22.35587],[30.38614,-22.34533],[30.48686,-22.31368],[30.6294,-22.32599],[30.86696,-22.28907],[31.08932,-22.34884],[31.16344,-22.32599],[31.30611,-22.422]],[[29.33204,-29.45598],[29.44883,-29.3772],[29.40524,-29.21246],[28.68043,-28.58744],[28.65091,-28.57025],[28.40612,-28.6215],[28.30518,-28.69531],[28.2348,-28.69471],[28.1317,-28.7293],[28.02503,-28.85991],[27.98675,-28.8787],[27.9392,-28.84864],[27.88933,-28.88156],[27.8907,-28.91612],[27.75458,-28.89839],[27.55974,-29.18954],[27.5158,-29.2261],[27.54258,-29.25575],[27.48679,-29.29349],[27.45125,-29.29708],[27.47254,-29.31968],[27.4358,-29.33465],[27.33464,-29.48161],[27.01016,-29.65439],[27.09489,-29.72796],[27.22719,-30.00718],[27.29603,-30.05473],[27.32555,-30.14785],[27.40778,-30.14577],[27.37293,-30.19401],[27.36649,-30.27246],[27.38108,-30.33456],[27.45452,-30.32239],[27.56901,-30.42504],[27.56781,-30.44562],[27.62137,-30.50509],[27.6521,-30.51707],[27.67819,-30.53437],[27.69467,-30.55862],[27.74814,-30.60635],[28.12073,-30.68072],[28.2319,-30.28476],[28.399,-30.1592],[28.68627,-30.12885],[28.80222,-30.10579],[28.9338,-30.05072],[29.16548,-29.91706],[29.12553,-29.76266],[29.28545,-29.58456],[29.33204,-29.45598]]]]}},{type:"Feature",properties:{iso1A2:"ZM",iso1A3:"ZMB",iso1N3:"894",wikidata:"Q953",nameEn:"Zambia",groups:["014","202","002"],driveSide:"left",callingCodes:["260"]},geometry:{type:"MultiPolygon",coordinates:[[[[32.95389,-9.40138],[33.00476,-9.5133],[33.00256,-9.63053],[33.05485,-9.61316],[33.10163,-9.66525],[33.12144,-9.58929],[33.2095,-9.61099],[33.31517,-9.82364],[33.36581,-9.81063],[33.37902,-9.9104],[33.31297,-10.05133],[33.53863,-10.20148],[33.54797,-10.36077],[33.70675,-10.56896],[33.47636,-10.78465],[33.28022,-10.84428],[33.25998,-10.88862],[33.39697,-11.15296],[33.29267,-11.3789],[33.29267,-11.43536],[33.23663,-11.40637],[33.24252,-11.59302],[33.32692,-11.59248],[33.33937,-11.91252],[33.25998,-12.14242],[33.3705,-12.34931],[33.47636,-12.32498],[33.54485,-12.35996],[33.37517,-12.54085],[33.28177,-12.54692],[33.18837,-12.61377],[33.05917,-12.59554],[32.94397,-12.76868],[32.96733,-12.88251],[33.02181,-12.88707],[32.98289,-13.12671],[33.0078,-13.19492],[32.86113,-13.47292],[32.84176,-13.52794],[32.73683,-13.57682],[32.68436,-13.55769],[32.66468,-13.60019],[32.68654,-13.64268],[32.7828,-13.64805],[32.84528,-13.71576],[32.76962,-13.77224],[32.79015,-13.80755],[32.88985,-13.82956],[32.99042,-13.95689],[33.02977,-14.05022],[33.07568,-13.98447],[33.16749,-13.93992],[33.24249,-14.00019],[30.22098,-14.99447],[30.41902,-15.62269],[30.35574,-15.6513],[29.8317,-15.6126],[29.4437,-15.68702],[29.21955,-15.76589],[29.01298,-15.93805],[28.9243,-15.93987],[28.8501,-16.04537],[28.81454,-16.48611],[28.76199,-16.51575],[28.73725,-16.5528],[27.83141,-16.96274],[27.62795,-17.24365],[27.61377,-17.34378],[27.30736,-17.60487],[27.14196,-17.81398],[26.89926,-17.98756],[26.74314,-18.0199],[26.68403,-18.07411],[26.55918,-17.99638],[26.21601,-17.88608],[26.0908,-17.93021],[26.08925,-17.98168],[25.85892,-17.97726],[25.85738,-17.91403],[25.6827,-17.81987],[25.51646,-17.86232],[25.26433,-17.79571],[25.00198,-17.58221],[24.70864,-17.49501],[24.5621,-17.52963],[24.38712,-17.46818],[24.32811,-17.49082],[24.23619,-17.47489],[23.47474,-17.62877],[23.20038,-17.47563],[22.17217,-16.50269],[22.00323,-16.18028],[21.97988,-13.00148],[24.03339,-12.99091],[23.90937,-12.844],[24.06672,-12.29058],[23.98804,-12.13149],[24.02603,-11.15368],[24.00027,-10.89356],[24.34528,-11.06816],[24.42612,-11.44975],[25.34069,-11.19707],[25.33058,-11.65767],[26.01777,-11.91488],[26.88687,-12.01868],[27.04351,-11.61312],[27.22541,-11.60323],[27.21025,-11.76157],[27.59932,-12.22123],[28.33199,-12.41375],[29.01918,-13.41353],[29.60531,-13.21685],[29.65078,-13.41844],[29.81551,-13.44683],[29.8139,-12.14898],[29.48404,-12.23604],[29.4992,-12.43843],[29.18592,-12.37921],[28.48357,-11.87532],[28.37241,-11.57848],[28.65032,-10.65133],[28.62795,-9.92942],[28.68532,-9.78],[28.56208,-9.49122],[28.51627,-9.44726],[28.52636,-9.35379],[28.36562,-9.30091],[28.38526,-9.23393],[28.9711,-8.66935],[28.88917,-8.4831],[30.79243,-8.27382],[31.00796,-8.58615],[31.37533,-8.60769],[31.57147,-8.70619],[31.57147,-8.81388],[31.71158,-8.91386],[31.81587,-8.88618],[31.94663,-8.93846],[31.94196,-9.02303],[31.98866,-9.07069],[32.08206,-9.04609],[32.16146,-9.05993],[32.25486,-9.13371],[32.43543,-9.11988],[32.49147,-9.14754],[32.53661,-9.24281],[32.75611,-9.28583],[32.76233,-9.31963],[32.95389,-9.40138]]]]}},{type:"Feature",properties:{iso1A2:"ZW",iso1A3:"ZWE",iso1N3:"716",wikidata:"Q954",nameEn:"Zimbabwe",groups:["014","202","002"],driveSide:"left",callingCodes:["263"]},geometry:{type:"MultiPolygon",coordinates:[[[[30.41902,-15.62269],[30.42568,-15.9962],[30.91597,-15.99924],[30.97761,-16.05848],[31.13171,-15.98019],[31.30563,-16.01193],[31.42451,-16.15154],[31.67988,-16.19595],[31.90223,-16.34388],[31.91324,-16.41569],[32.02772,-16.43892],[32.28529,-16.43892],[32.42838,-16.4727],[32.71017,-16.59932],[32.69917,-16.66893],[32.78943,-16.70267],[32.97655,-16.70689],[32.91051,-16.89446],[32.84113,-16.92259],[32.96554,-17.11971],[33.00517,-17.30477],[33.0426,-17.3468],[32.96554,-17.48964],[32.98536,-17.55891],[33.0492,-17.60298],[32.94133,-17.99705],[33.03159,-18.35054],[33.02278,-18.4696],[32.88629,-18.51344],[32.88629,-18.58023],[32.95013,-18.69079],[32.9017,-18.7992],[32.82465,-18.77419],[32.70137,-18.84712],[32.73439,-18.92628],[32.69917,-18.94293],[32.72118,-19.02204],[32.84006,-19.0262],[32.87088,-19.09279],[32.85107,-19.29238],[32.77966,-19.36098],[32.78282,-19.47513],[32.84446,-19.48343],[32.84666,-19.68462],[32.95013,-19.67219],[33.06461,-19.77787],[33.01178,-20.02007],[32.93032,-20.03868],[32.85987,-20.16686],[32.85987,-20.27841],[32.66174,-20.56106],[32.55167,-20.56312],[32.48122,-20.63319],[32.51644,-20.91929],[32.37115,-21.133],[32.48236,-21.32873],[32.41234,-21.31246],[31.38336,-22.36919],[31.30611,-22.422],[31.16344,-22.32599],[31.08932,-22.34884],[30.86696,-22.28907],[30.6294,-22.32599],[30.48686,-22.31368],[30.38614,-22.34533],[30.28351,-22.35587],[30.2265,-22.2961],[30.13147,-22.30841],[29.92242,-22.19408],[29.76848,-22.14128],[29.64609,-22.12917],[29.37703,-22.19581],[29.3533,-22.18363],[29.24648,-22.05967],[29.1974,-22.07472],[29.14501,-22.07275],[29.08495,-22.04867],[29.04108,-22.00563],[29.02191,-21.95665],[29.02191,-21.90647],[29.04023,-21.85864],[29.07763,-21.81877],[28.58114,-21.63455],[28.49942,-21.66634],[28.29416,-21.59037],[28.01669,-21.57624],[27.91407,-21.31621],[27.69171,-21.08409],[27.72972,-20.51735],[27.69361,-20.48531],[27.28865,-20.49873],[27.29831,-20.28935],[27.21278,-20.08244],[26.72246,-19.92707],[26.17227,-19.53709],[25.96226,-19.08152],[25.99837,-19.02943],[25.94326,-18.90362],[25.82353,-18.82808],[25.79217,-18.6355],[25.68859,-18.56165],[25.53465,-18.39041],[25.39972,-18.12691],[25.31799,-18.07091],[25.23909,-17.90832],[25.26433,-17.79571],[25.51646,-17.86232],[25.6827,-17.81987],[25.85738,-17.91403],[25.85892,-17.97726],[26.08925,-17.98168],[26.0908,-17.93021],[26.21601,-17.88608],[26.55918,-17.99638],[26.68403,-18.07411],[26.74314,-18.0199],[26.89926,-17.98756],[27.14196,-17.81398],[27.30736,-17.60487],[27.61377,-17.34378],[27.62795,-17.24365],[27.83141,-16.96274],[28.73725,-16.5528],[28.76199,-16.51575],[28.81454,-16.48611],[28.8501,-16.04537],[28.9243,-15.93987],[29.01298,-15.93805],[29.21955,-15.76589],[29.4437,-15.68702],[29.8317,-15.6126],[30.35574,-15.6513],[30.41902,-15.62269]]]]}}];
27708         var rawBorders = {
27709         type: type$1,
27710         features: features$1
27711         };
27712
27713         var borders = rawBorders;
27714         var whichPolygonGetter = {};
27715         var featuresByCode = {};
27716         var idFilterRegex = /\bThe\b|\bthe\b|\band\b|\bof\b|[-_ .,()&[\]/]/g;
27717         var levels = [
27718           'subterritory',
27719           'territory',
27720           'country',
27721           'intermediateRegion',
27722           'subregion',
27723           'region',
27724           'union',
27725           'world'
27726         ];
27727         loadDerivedDataAndCaches(borders);
27728         function loadDerivedDataAndCaches(borders) {
27729           var identifierProps = ['iso1A2', 'iso1A3', 'm49', 'wikidata', 'emojiFlag', 'nameEn'];
27730           var geometryFeatures = [];
27731           for (var i in borders.features) {
27732             var feature = borders.features[i];
27733             feature.properties.id = feature.properties.iso1A2 || feature.properties.m49;
27734             loadM49(feature);
27735             loadIsoStatus(feature);
27736             loadLevel(feature);
27737             loadGroups(feature);
27738             loadRoadSpeedUnit(feature);
27739             loadDriveSide(feature);
27740             loadFlag(feature);
27741             cacheFeatureByIDs(feature);
27742             if (feature.geometry) { geometryFeatures.push(feature); }
27743           }
27744           for (var i$1 in borders.features) {
27745             var feature$1 = borders.features[i$1];
27746             feature$1.properties.groups.sort(function(groupID1, groupID2) {
27747               return (
27748                 levels.indexOf(featuresByCode[groupID1].properties.level) -
27749                 levels.indexOf(featuresByCode[groupID2].properties.level)
27750               );
27751             });
27752             loadMembersForGroupsOf(feature$1);
27753           }
27754           var geometryOnlyCollection = {
27755             type: 'RegionFeatureCollection',
27756             features: geometryFeatures
27757           };
27758           whichPolygonGetter = whichPolygon_1(geometryOnlyCollection);
27759           function loadGroups(feature) {
27760             var props = feature.properties;
27761             if (!props.groups) {
27762               props.groups = [];
27763             }
27764             if (props.country) {
27765               props.groups.push(props.country);
27766             }
27767             if (props.m49 !== '001') {
27768               props.groups.push('001');
27769             }
27770           }
27771           function loadM49(feature) {
27772             var props = feature.properties;
27773             if (!props.m49 && props.iso1N3) {
27774               props.m49 = props.iso1N3;
27775             }
27776           }
27777           function loadIsoStatus(feature) {
27778             var props = feature.properties;
27779             if (!props.isoStatus && props.iso1A2) {
27780               props.isoStatus = 'official';
27781             }
27782           }
27783           function loadLevel(feature) {
27784             var props = feature.properties;
27785             if (props.level) { return; }
27786             if (!props.country) {
27787               props.level = 'country';
27788             } else if (props.isoStatus === 'official') {
27789               props.level = 'territory';
27790             } else {
27791               props.level = 'subterritory';
27792             }
27793           }
27794           function loadRoadSpeedUnit(feature) {
27795             var props = feature.properties;
27796             if (props.roadSpeedUnit === undefined && props.iso1A2 && props.iso1A2 !== 'EU') {
27797               props.roadSpeedUnit = 'km/h';
27798             }
27799           }
27800           function loadDriveSide(feature) {
27801             var props = feature.properties;
27802             if (props.driveSide === undefined && props.iso1A2 && props.iso1A2 !== 'EU') {
27803               props.driveSide = 'right';
27804             }
27805           }
27806           function loadFlag(feature) {
27807             if (!feature.properties.iso1A2) { return; }
27808             var flag = feature.properties.iso1A2.replace(/./g, function(char) {
27809               return String.fromCodePoint(char.charCodeAt(0) + 127397);
27810             });
27811             feature.properties.emojiFlag = flag;
27812           }
27813           function loadMembersForGroupsOf(feature) {
27814             var featureID = feature.properties.id;
27815             var standardizedGroupIDs = [];
27816             for (var j in feature.properties.groups) {
27817               var groupID = feature.properties.groups[j];
27818               var groupFeature = featuresByCode[groupID];
27819               standardizedGroupIDs.push(groupFeature.properties.id);
27820               if (groupFeature.properties.members) {
27821                 groupFeature.properties.members.push(featureID);
27822               } else {
27823                 groupFeature.properties.members = [featureID];
27824               }
27825             }
27826             feature.properties.groups = standardizedGroupIDs;
27827           }
27828           function cacheFeatureByIDs(feature) {
27829             for (var k in identifierProps) {
27830               var prop = identifierProps[k];
27831               var id = prop && feature.properties[prop];
27832               if (id) {
27833                 id = id.replace(idFilterRegex, '').toUpperCase();
27834                 featuresByCode[id] = feature;
27835               }
27836             }
27837             if (feature.properties.aliases) {
27838               for (var j in feature.properties.aliases) {
27839                 var alias = feature.properties.aliases[j].replace(idFilterRegex, '').toUpperCase();
27840                 featuresByCode[alias] = feature;
27841               }
27842             }
27843           }
27844         }
27845         function locArray(loc) {
27846           if (Array.isArray(loc)) {
27847             return loc;
27848           } else if (loc.coordinates) {
27849             return loc.coordinates;
27850           }
27851           return loc.geometry.coordinates;
27852         }
27853         function smallestFeature(loc) {
27854           var query = locArray(loc);
27855           var featureProperties = whichPolygonGetter(query);
27856           if (!featureProperties) { return null; }
27857           return featuresByCode[featureProperties.id];
27858         }
27859         function countryFeature(loc) {
27860           var feature = smallestFeature(loc);
27861           if (!feature) { return null; }
27862           var countryCode = feature.properties.country || feature.properties.iso1A2;
27863           return featuresByCode[countryCode];
27864         }
27865         function featureForLoc(loc, opts) {
27866           if (opts && opts.level && opts.level !== 'country') {
27867             var features = featuresContaining(loc);
27868             var targetLevel = opts.level;
27869             var targetLevelIndex = levels.indexOf(targetLevel);
27870             if (targetLevelIndex === -1) { return null; }
27871             for (var i in features) {
27872               var feature = features[i];
27873               if (
27874                 feature.properties.level === targetLevel ||
27875                 levels.indexOf(feature.properties.level) > targetLevelIndex
27876               ) {
27877                 return feature;
27878               }
27879             }
27880             return null;
27881           }
27882           return countryFeature(loc);
27883         }
27884         function featureForID(id) {
27885           var stringID;
27886           if (typeof id === 'number') {
27887             stringID = id.toString();
27888             if (stringID.length === 1) {
27889               stringID = '00' + stringID;
27890             } else if (stringID.length === 2) {
27891               stringID = '0' + stringID;
27892             }
27893           } else {
27894             stringID = id.replace(idFilterRegex, '').toUpperCase();
27895           }
27896           return featuresByCode[stringID] || null;
27897         }
27898         function smallestOrMatchingFeature(query) {
27899           if (typeof query === 'object') {
27900             return smallestFeature(query);
27901           }
27902           return featureForID(query);
27903         }
27904         function feature(query, opts) {
27905           if (typeof query === 'object') {
27906             return featureForLoc(query, opts);
27907           }
27908           return featureForID(query);
27909         }
27910         function iso1A2Code(query, opts) {
27911           var match = feature(query, opts);
27912           if (!match) { return null; }
27913           return match.properties.iso1A2 || null;
27914         }
27915         function featuresContaining(query, strict) {
27916           var feature = smallestOrMatchingFeature(query);
27917           if (!feature) { return []; }
27918           var features = [];
27919           if (!strict || typeof query === 'object') {
27920             features.push(feature);
27921           }
27922           var properties = feature.properties;
27923           for (var i in properties.groups) {
27924             var groupID = properties.groups[i];
27925             features.push(featuresByCode[groupID]);
27926           }
27927           return features;
27928         }
27929         function roadSpeedUnit(query) {
27930           var feature = smallestOrMatchingFeature(query);
27931           return (feature && feature.properties.roadSpeedUnit) || null;
27932         }
27933
27934         var RADIUS = 6378137;
27935         var FLATTENING = 1/298.257223563;
27936         var POLAR_RADIUS$1 = 6356752.3142;
27937
27938         var wgs84 = {
27939                 RADIUS: RADIUS,
27940                 FLATTENING: FLATTENING,
27941                 POLAR_RADIUS: POLAR_RADIUS$1
27942         };
27943
27944         var geometry_1 = geometry;
27945         var ring = ringArea;
27946
27947         function geometry(_) {
27948             var area = 0, i;
27949             switch (_.type) {
27950                 case 'Polygon':
27951                     return polygonArea(_.coordinates);
27952                 case 'MultiPolygon':
27953                     for (i = 0; i < _.coordinates.length; i++) {
27954                         area += polygonArea(_.coordinates[i]);
27955                     }
27956                     return area;
27957                 case 'Point':
27958                 case 'MultiPoint':
27959                 case 'LineString':
27960                 case 'MultiLineString':
27961                     return 0;
27962                 case 'GeometryCollection':
27963                     for (i = 0; i < _.geometries.length; i++) {
27964                         area += geometry(_.geometries[i]);
27965                     }
27966                     return area;
27967             }
27968         }
27969
27970         function polygonArea(coords) {
27971             var area = 0;
27972             if (coords && coords.length > 0) {
27973                 area += Math.abs(ringArea(coords[0]));
27974                 for (var i = 1; i < coords.length; i++) {
27975                     area -= Math.abs(ringArea(coords[i]));
27976                 }
27977             }
27978             return area;
27979         }
27980
27981         /**
27982          * Calculate the approximate area of the polygon were it projected onto
27983          *     the earth.  Note that this area will be positive if ring is oriented
27984          *     clockwise, otherwise it will be negative.
27985          *
27986          * Reference:
27987          * Robert. G. Chamberlain and William H. Duquette, "Some Algorithms for
27988          *     Polygons on a Sphere", JPL Publication 07-03, Jet Propulsion
27989          *     Laboratory, Pasadena, CA, June 2007 http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409
27990          *
27991          * Returns:
27992          * {float} The approximate signed geodesic area of the polygon in square
27993          *     meters.
27994          */
27995
27996         function ringArea(coords) {
27997             var p1, p2, p3, lowerIndex, middleIndex, upperIndex, i,
27998             area = 0,
27999             coordsLength = coords.length;
28000
28001             if (coordsLength > 2) {
28002                 for (i = 0; i < coordsLength; i++) {
28003                     if (i === coordsLength - 2) {// i = N-2
28004                         lowerIndex = coordsLength - 2;
28005                         middleIndex = coordsLength -1;
28006                         upperIndex = 0;
28007                     } else if (i === coordsLength - 1) {// i = N-1
28008                         lowerIndex = coordsLength - 1;
28009                         middleIndex = 0;
28010                         upperIndex = 1;
28011                     } else { // i = 0 to N-3
28012                         lowerIndex = i;
28013                         middleIndex = i+1;
28014                         upperIndex = i+2;
28015                     }
28016                     p1 = coords[lowerIndex];
28017                     p2 = coords[middleIndex];
28018                     p3 = coords[upperIndex];
28019                     area += ( rad(p3[0]) - rad(p1[0]) ) * Math.sin( rad(p2[1]));
28020                 }
28021
28022                 area = area * wgs84.RADIUS * wgs84.RADIUS / 2;
28023             }
28024
28025             return area;
28026         }
28027
28028         function rad(_) {
28029             return _ * Math.PI / 180;
28030         }
28031
28032         var geojsonArea = {
28033                 geometry: geometry_1,
28034                 ring: ring
28035         };
28036
28037         function toRadians(angleInDegrees) {
28038           return angleInDegrees * Math.PI / 180;
28039         }
28040
28041         function toDegrees(angleInRadians) {
28042           return angleInRadians * 180 / Math.PI;
28043         }
28044
28045         function offset(c1, distance, bearing) {
28046           var lat1 = toRadians(c1[1]);
28047           var lon1 = toRadians(c1[0]);
28048           var dByR = distance / 6378137; // distance divided by 6378137 (radius of the earth) wgs84
28049           var lat = Math.asin(
28050             Math.sin(lat1) * Math.cos(dByR) +
28051             Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
28052           var lon = lon1 + Math.atan2(
28053               Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),
28054               Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
28055           return [toDegrees(lon), toDegrees(lat)];
28056         }
28057
28058         var circleToPolygon = function circleToPolygon(center, radius, numberOfSegments) {
28059           var n = numberOfSegments ? numberOfSegments : 32;
28060           var flatCoordinates = [];
28061           var coordinates = [];
28062           for (var i = 0; i < n; ++i) {
28063             flatCoordinates.push.apply(flatCoordinates, offset(center, radius, 2 * Math.PI * i / n));
28064           }
28065           flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);
28066
28067           for (var i = 0, j = 0; j < flatCoordinates.length; j += 2) {
28068             coordinates[i++] = flatCoordinates.slice(j, j + 2);
28069           }
28070
28071           return {
28072             type: 'Polygon',
28073             coordinates: [coordinates.reverse()]
28074           };
28075         };
28076
28077         var geojsonPrecision = createCommonjsModule(function (module) {
28078         (function() {
28079
28080           function parse(t, precision) {
28081
28082             function point(p) {
28083               return p.map(function(e) {
28084                 return 1 * e.toFixed(precision);
28085               });
28086             }
28087
28088             function multi(l) {
28089               return l.map(point);
28090             }
28091
28092             function poly(p) {
28093               return p.map(multi);
28094             }
28095
28096             function multiPoly(m) {
28097               return m.map(poly);
28098             }
28099
28100             function geometry(obj) {
28101               if (!obj) {
28102                 return {};
28103               }
28104               
28105               switch (obj.type) {
28106                 case "Point":
28107                   obj.coordinates = point(obj.coordinates);
28108                   return obj;
28109                 case "LineString":
28110                 case "MultiPoint":
28111                   obj.coordinates = multi(obj.coordinates);
28112                   return obj;
28113                 case "Polygon":
28114                 case "MultiLineString":
28115                   obj.coordinates = poly(obj.coordinates);
28116                   return obj;
28117                 case "MultiPolygon":
28118                   obj.coordinates = multiPoly(obj.coordinates);
28119                   return obj;
28120                 case "GeometryCollection":
28121                   obj.geometries = obj.geometries.map(geometry);
28122                   return obj;
28123                 default :
28124                   return {};
28125               }
28126             }
28127
28128             function feature(obj) {
28129               obj.geometry = geometry(obj.geometry);
28130               return obj
28131             }
28132
28133             function featureCollection(f) {
28134               f.features = f.features.map(feature);
28135               return f;
28136             }
28137
28138             function geometryCollection(g) {
28139               g.geometries = g.geometries.map(geometry);
28140               return g;
28141             }
28142
28143             if (!t) {
28144               return t;
28145             }
28146
28147             switch (t.type) {
28148               case "Feature":
28149                 return feature(t);
28150               case "GeometryCollection" :
28151                 return geometryCollection(t);
28152               case "FeatureCollection" :
28153                 return featureCollection(t);
28154               case "Point":
28155               case "LineString":
28156               case "Polygon":
28157               case "MultiPoint":
28158               case "MultiPolygon":
28159               case "MultiLineString":
28160                 return geometry(t);
28161               default :
28162                 return t;
28163             }
28164               
28165           }
28166
28167           module.exports = parse;
28168           module.exports.parse = parse;
28169
28170         }());
28171         });
28172         var geojsonPrecision_1 = geojsonPrecision.parse;
28173
28174         /* Polyfill service v3.13.0
28175          * For detailed credits and licence information see http://github.com/financial-times/polyfill-service
28176          *
28177          * - Array.prototype.fill, License: CC0 */
28178
28179         if (!('fill' in Array.prototype)) {
28180           Object.defineProperty(Array.prototype, 'fill', {
28181             configurable: true,
28182             value: function fill (value) {
28183               if (this === undefined || this === null) {
28184                 throw new TypeError(this + ' is not an object')
28185               }
28186
28187               var arrayLike = Object(this);
28188
28189               var length = Math.max(Math.min(arrayLike.length, 9007199254740991), 0) || 0;
28190
28191               var relativeStart = 1 in arguments ? parseInt(Number(arguments[1]), 10) || 0 : 0;
28192
28193               relativeStart = relativeStart < 0 ? Math.max(length + relativeStart, 0) : Math.min(relativeStart, length);
28194
28195               var relativeEnd = 2 in arguments && arguments[2] !== undefined ? parseInt(Number(arguments[2]), 10) || 0 : length;
28196
28197               relativeEnd = relativeEnd < 0 ? Math.max(length + arguments[2], 0) : Math.min(relativeEnd, length);
28198
28199               while (relativeStart < relativeEnd) {
28200                 arrayLike[relativeStart] = value;
28201
28202                 ++relativeStart;
28203               }
28204
28205               return arrayLike
28206             },
28207             writable: true
28208           });
28209         }
28210
28211         /**
28212          * Polyfill for IE support
28213          */
28214         Number.isFinite = Number.isFinite || function (value) {
28215           return typeof value === 'number' && isFinite(value)
28216         };
28217
28218         Number.isInteger = Number.isInteger || function (val) {
28219           return typeof val === 'number' &&
28220           isFinite(val) &&
28221           Math.floor(val) === val
28222         };
28223
28224         Number.parseFloat = Number.parseFloat || parseFloat;
28225
28226         Number.isNaN = Number.isNaN || function (value) {
28227           return value !== value // eslint-disable-line
28228         };
28229
28230         /**
28231          * Polyfill for IE support
28232          */
28233         Math.trunc = Math.trunc || function (x) {
28234           return x < 0 ? Math.ceil(x) : Math.floor(x)
28235         };
28236
28237         var NumberUtil = function NumberUtil () {};
28238
28239         NumberUtil.prototype.interfaces_ = function interfaces_ () {
28240           return []
28241         };
28242         NumberUtil.prototype.getClass = function getClass () {
28243           return NumberUtil
28244         };
28245         NumberUtil.prototype.equalsWithTolerance = function equalsWithTolerance (x1, x2, tolerance) {
28246           return Math.abs(x1 - x2) <= tolerance
28247         };
28248
28249         var IllegalArgumentException = (function (Error) {
28250                 function IllegalArgumentException (message) {
28251                         Error.call(this, message);
28252                         this.name = 'IllegalArgumentException';
28253                         this.message = message;
28254                         this.stack = (new Error()).stack;
28255                 }
28256
28257                 if ( Error ) { IllegalArgumentException.__proto__ = Error; }
28258                 IllegalArgumentException.prototype = Object.create( Error && Error.prototype );
28259                 IllegalArgumentException.prototype.constructor = IllegalArgumentException;
28260
28261                 return IllegalArgumentException;
28262         }(Error));
28263
28264         var Double = function Double () {};
28265
28266         var staticAccessors$1 = { MAX_VALUE: { configurable: true } };
28267
28268         Double.isNaN = function isNaN (n) { return Number.isNaN(n) };
28269         Double.doubleToLongBits = function doubleToLongBits (n) { return n };
28270         Double.longBitsToDouble = function longBitsToDouble (n) { return n };
28271         Double.isInfinite = function isInfinite (n) { return !Number.isFinite(n) };
28272         staticAccessors$1.MAX_VALUE.get = function () { return Number.MAX_VALUE };
28273
28274         Object.defineProperties( Double, staticAccessors$1 );
28275
28276         var Comparable = function Comparable () {};
28277
28278         var Clonable = function Clonable () {};
28279
28280         var Comparator = function Comparator () {};
28281
28282         function Serializable () {}
28283
28284         // import Assert from '../util/Assert'
28285
28286         var Coordinate = function Coordinate () {
28287           this.x = null;
28288           this.y = null;
28289           this.z = null;
28290           if (arguments.length === 0) {
28291             this.x = 0.0;
28292             this.y = 0.0;
28293             this.z = Coordinate.NULL_ORDINATE;
28294           } else if (arguments.length === 1) {
28295             var c = arguments[0];
28296             this.x = c.x;
28297             this.y = c.y;
28298             this.z = c.z;
28299           } else if (arguments.length === 2) {
28300             this.x = arguments[0];
28301             this.y = arguments[1];
28302             this.z = Coordinate.NULL_ORDINATE;
28303           } else if (arguments.length === 3) {
28304             this.x = arguments[0];
28305             this.y = arguments[1];
28306             this.z = arguments[2];
28307           }
28308         };
28309
28310         var staticAccessors = { DimensionalComparator: { configurable: true },serialVersionUID: { configurable: true },NULL_ORDINATE: { configurable: true },X: { configurable: true },Y: { configurable: true },Z: { configurable: true } };
28311         Coordinate.prototype.setOrdinate = function setOrdinate (ordinateIndex, value) {
28312           switch (ordinateIndex) {
28313             case Coordinate.X:
28314               this.x = value;
28315               break
28316             case Coordinate.Y:
28317               this.y = value;
28318               break
28319             case Coordinate.Z:
28320               this.z = value;
28321               break
28322             default:
28323               throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)
28324           }
28325         };
28326         Coordinate.prototype.equals2D = function equals2D () {
28327           if (arguments.length === 1) {
28328             var other = arguments[0];
28329             if (this.x !== other.x) {
28330               return false
28331             }
28332             if (this.y !== other.y) {
28333               return false
28334             }
28335             return true
28336           } else if (arguments.length === 2) {
28337             var c = arguments[0];
28338             var tolerance = arguments[1];
28339             if (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance)) {
28340               return false
28341             }
28342             if (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance)) {
28343               return false
28344             }
28345             return true
28346           }
28347         };
28348         Coordinate.prototype.getOrdinate = function getOrdinate (ordinateIndex) {
28349           switch (ordinateIndex) {
28350             case Coordinate.X:
28351               return this.x
28352             case Coordinate.Y:
28353               return this.y
28354             case Coordinate.Z:
28355               return this.z
28356           }
28357           throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)
28358         };
28359         Coordinate.prototype.equals3D = function equals3D (other) {
28360           return this.x === other.x &&
28361                  this.y === other.y &&
28362                  ((this.z === other.z || Double.isNaN(this.z)) &&
28363                  Double.isNaN(other.z))
28364         };
28365         Coordinate.prototype.equals = function equals (other) {
28366           if (!(other instanceof Coordinate)) {
28367             return false
28368           }
28369           return this.equals2D(other)
28370         };
28371         Coordinate.prototype.equalInZ = function equalInZ (c, tolerance) {
28372           return NumberUtil.equalsWithTolerance(this.z, c.z, tolerance)
28373         };
28374         Coordinate.prototype.compareTo = function compareTo (o) {
28375           var other = o;
28376           if (this.x < other.x) { return -1 }
28377           if (this.x > other.x) { return 1 }
28378           if (this.y < other.y) { return -1 }
28379           if (this.y > other.y) { return 1 }
28380           return 0
28381         };
28382         Coordinate.prototype.clone = function clone () {
28383           // try {
28384           // var coord = null
28385           // return coord
28386           // } catch (e) {
28387           // if (e instanceof CloneNotSupportedException) {
28388           //   Assert.shouldNeverReachHere("this shouldn't happen because this class is Cloneable")
28389           //   return null
28390           // } else throw e
28391           // } finally {}
28392         };
28393         Coordinate.prototype.copy = function copy () {
28394           return new Coordinate(this)
28395         };
28396         Coordinate.prototype.toString = function toString () {
28397           return '(' + this.x + ', ' + this.y + ', ' + this.z + ')'
28398         };
28399         Coordinate.prototype.distance3D = function distance3D (c) {
28400           var dx = this.x - c.x;
28401           var dy = this.y - c.y;
28402           var dz = this.z - c.z;
28403           return Math.sqrt(dx * dx + dy * dy + dz * dz)
28404         };
28405         Coordinate.prototype.distance = function distance (c) {
28406           var dx = this.x - c.x;
28407           var dy = this.y - c.y;
28408           return Math.sqrt(dx * dx + dy * dy)
28409         };
28410         Coordinate.prototype.hashCode = function hashCode () {
28411           var result = 17;
28412           result = 37 * result + Coordinate.hashCode(this.x);
28413           result = 37 * result + Coordinate.hashCode(this.y);
28414           return result
28415         };
28416         Coordinate.prototype.setCoordinate = function setCoordinate (other) {
28417           this.x = other.x;
28418           this.y = other.y;
28419           this.z = other.z;
28420         };
28421         Coordinate.prototype.interfaces_ = function interfaces_ () {
28422           return [Comparable, Clonable, Serializable]
28423         };
28424         Coordinate.prototype.getClass = function getClass () {
28425           return Coordinate
28426         };
28427         Coordinate.hashCode = function hashCode () {
28428           if (arguments.length === 1) {
28429             var x = arguments[0];
28430             var f = Double.doubleToLongBits(x);
28431             return Math.trunc((f ^ f) >>> 32)
28432           }
28433         };
28434         staticAccessors.DimensionalComparator.get = function () { return DimensionalComparator };
28435         staticAccessors.serialVersionUID.get = function () { return 6683108902428366910 };
28436         staticAccessors.NULL_ORDINATE.get = function () { return Double.NaN };
28437         staticAccessors.X.get = function () { return 0 };
28438         staticAccessors.Y.get = function () { return 1 };
28439         staticAccessors.Z.get = function () { return 2 };
28440
28441         Object.defineProperties( Coordinate, staticAccessors );
28442
28443         var DimensionalComparator = function DimensionalComparator (dimensionsToTest) {
28444           this._dimensionsToTest = 2;
28445           if (arguments.length === 0) ; else if (arguments.length === 1) {
28446             var dimensionsToTest$1 = arguments[0];
28447             if (dimensionsToTest$1 !== 2 && dimensionsToTest$1 !== 3) { throw new IllegalArgumentException('only 2 or 3 dimensions may be specified') }
28448             this._dimensionsToTest = dimensionsToTest$1;
28449           }
28450         };
28451         DimensionalComparator.prototype.compare = function compare (o1, o2) {
28452           var c1 = o1;
28453           var c2 = o2;
28454           var compX = DimensionalComparator.compare(c1.x, c2.x);
28455           if (compX !== 0) { return compX }
28456           var compY = DimensionalComparator.compare(c1.y, c2.y);
28457           if (compY !== 0) { return compY }
28458           if (this._dimensionsToTest <= 2) { return 0 }
28459           var compZ = DimensionalComparator.compare(c1.z, c2.z);
28460           return compZ
28461         };
28462         DimensionalComparator.prototype.interfaces_ = function interfaces_ () {
28463           return [Comparator]
28464         };
28465         DimensionalComparator.prototype.getClass = function getClass () {
28466           return DimensionalComparator
28467         };
28468         DimensionalComparator.compare = function compare (a, b) {
28469           if (a < b) { return -1 }
28470           if (a > b) { return 1 }
28471           if (Double.isNaN(a)) {
28472             if (Double.isNaN(b)) { return 0 }
28473             return -1
28474           }
28475           if (Double.isNaN(b)) { return 1 }
28476           return 0
28477         };
28478
28479         // import hasInterface from '../../../../hasInterface'
28480         // import CoordinateSequence from './CoordinateSequence'
28481
28482         var CoordinateSequenceFactory = function CoordinateSequenceFactory () {};
28483
28484         CoordinateSequenceFactory.prototype.create = function create () {
28485           // if (arguments.length === 1) {
28486           // if (arguments[0] instanceof Array) {
28487           //   let coordinates = arguments[0]
28488           // } else if (hasInterface(arguments[0], CoordinateSequence)) {
28489           //   let coordSeq = arguments[0]
28490           // }
28491           // } else if (arguments.length === 2) {
28492           // let size = arguments[0]
28493           // let dimension = arguments[1]
28494           // }
28495         };
28496         CoordinateSequenceFactory.prototype.interfaces_ = function interfaces_ () {
28497           return []
28498         };
28499         CoordinateSequenceFactory.prototype.getClass = function getClass () {
28500           return CoordinateSequenceFactory
28501         };
28502
28503         var Location = function Location () {};
28504
28505         var staticAccessors$4 = { INTERIOR: { configurable: true },BOUNDARY: { configurable: true },EXTERIOR: { configurable: true },NONE: { configurable: true } };
28506
28507         Location.prototype.interfaces_ = function interfaces_ () {
28508           return []
28509         };
28510         Location.prototype.getClass = function getClass () {
28511           return Location
28512         };
28513         Location.toLocationSymbol = function toLocationSymbol (locationValue) {
28514           switch (locationValue) {
28515             case Location.EXTERIOR:
28516               return 'e'
28517             case Location.BOUNDARY:
28518               return 'b'
28519             case Location.INTERIOR:
28520               return 'i'
28521             case Location.NONE:
28522               return '-'
28523           }
28524           throw new IllegalArgumentException('Unknown location value: ' + locationValue)
28525         };
28526         staticAccessors$4.INTERIOR.get = function () { return 0 };
28527         staticAccessors$4.BOUNDARY.get = function () { return 1 };
28528         staticAccessors$4.EXTERIOR.get = function () { return 2 };
28529         staticAccessors$4.NONE.get = function () { return -1 };
28530
28531         Object.defineProperties( Location, staticAccessors$4 );
28532
28533         var hasInterface = function (o, i) {
28534           return o.interfaces_ && o.interfaces_().indexOf(i) > -1
28535         };
28536
28537         var MathUtil = function MathUtil () {};
28538
28539         var staticAccessors$5 = { LOG_10: { configurable: true } };
28540
28541         MathUtil.prototype.interfaces_ = function interfaces_ () {
28542           return []
28543         };
28544         MathUtil.prototype.getClass = function getClass () {
28545           return MathUtil
28546         };
28547         MathUtil.log10 = function log10 (x) {
28548           var ln = Math.log(x);
28549           if (Double.isInfinite(ln)) { return ln }
28550           if (Double.isNaN(ln)) { return ln }
28551           return ln / MathUtil.LOG_10
28552         };
28553         MathUtil.min = function min (v1, v2, v3, v4) {
28554           var min = v1;
28555           if (v2 < min) { min = v2; }
28556           if (v3 < min) { min = v3; }
28557           if (v4 < min) { min = v4; }
28558           return min
28559         };
28560         MathUtil.clamp = function clamp () {
28561           if (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number')) {
28562             var x = arguments[0];
28563             var min = arguments[1];
28564             var max = arguments[2];
28565             if (x < min) { return min }
28566             if (x > max) { return max }
28567             return x
28568           } else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {
28569             var x$1 = arguments[0];
28570             var min$1 = arguments[1];
28571             var max$1 = arguments[2];
28572             if (x$1 < min$1) { return min$1 }
28573             if (x$1 > max$1) { return max$1 }
28574             return x$1
28575           }
28576         };
28577         MathUtil.wrap = function wrap (index, max) {
28578           if (index < 0) {
28579             return max - -index % max
28580           }
28581           return index % max
28582         };
28583         MathUtil.max = function max () {
28584           if (arguments.length === 3) {
28585             var v1 = arguments[0];
28586             var v2 = arguments[1];
28587             var v3 = arguments[2];
28588             var max = v1;
28589             if (v2 > max) { max = v2; }
28590             if (v3 > max) { max = v3; }
28591             return max
28592           } else if (arguments.length === 4) {
28593             var v1$1 = arguments[0];
28594             var v2$1 = arguments[1];
28595             var v3$1 = arguments[2];
28596             var v4 = arguments[3];
28597             var max$1 = v1$1;
28598             if (v2$1 > max$1) { max$1 = v2$1; }
28599             if (v3$1 > max$1) { max$1 = v3$1; }
28600             if (v4 > max$1) { max$1 = v4; }
28601             return max$1
28602           }
28603         };
28604         MathUtil.average = function average (x1, x2) {
28605           return (x1 + x2) / 2.0
28606         };
28607         staticAccessors$5.LOG_10.get = function () { return Math.log(10) };
28608
28609         Object.defineProperties( MathUtil, staticAccessors$5 );
28610
28611         var StringBuffer = function StringBuffer (str) {
28612           this.str = str;
28613         };
28614         StringBuffer.prototype.append = function append (e) {
28615           this.str += e;
28616         };
28617
28618         StringBuffer.prototype.setCharAt = function setCharAt (i, c) {
28619           this.str = this.str.substr(0, i) + c + this.str.substr(i + 1);
28620         };
28621
28622         StringBuffer.prototype.toString = function toString (e) {
28623           return this.str
28624         };
28625
28626         var Integer = function Integer (value) {
28627           this.value = value;
28628         };
28629         Integer.prototype.intValue = function intValue () {
28630           return this.value
28631         };
28632         Integer.prototype.compareTo = function compareTo (o) {
28633           if (this.value < o) { return -1 }
28634           if (this.value > o) { return 1 }
28635           return 0
28636         };
28637         Integer.isNaN = function isNaN (n) { return Number.isNaN(n) };
28638
28639         var Character = function Character () {};
28640
28641         Character.isWhitespace = function isWhitespace (c) { return ((c <= 32 && c >= 0) || c === 127) };
28642         Character.toUpperCase = function toUpperCase (c) { return c.toUpperCase() };
28643
28644         var DD = function DD () {
28645           this._hi = 0.0;
28646           this._lo = 0.0;
28647           if (arguments.length === 0) {
28648             this.init(0.0);
28649           } else if (arguments.length === 1) {
28650             if (typeof arguments[0] === 'number') {
28651               var x = arguments[0];
28652               this.init(x);
28653             } else if (arguments[0] instanceof DD) {
28654               var dd = arguments[0];
28655               this.init(dd);
28656             } else if (typeof arguments[0] === 'string') {
28657               var str = arguments[0];
28658               DD.call(this, DD.parse(str));
28659             }
28660           } else if (arguments.length === 2) {
28661             var hi = arguments[0];
28662             var lo = arguments[1];
28663             this.init(hi, lo);
28664           }
28665         };
28666
28667         var staticAccessors$7 = { PI: { configurable: true },TWO_PI: { configurable: true },PI_2: { configurable: true },E: { configurable: true },NaN: { configurable: true },EPS: { configurable: true },SPLIT: { configurable: true },MAX_PRINT_DIGITS: { configurable: true },TEN: { configurable: true },ONE: { configurable: true },SCI_NOT_EXPONENT_CHAR: { configurable: true },SCI_NOT_ZERO: { configurable: true } };
28668         DD.prototype.le = function le (y) {
28669           return (this._hi < y._hi || this._hi === y._hi) && this._lo <= y._lo
28670         };
28671         DD.prototype.extractSignificantDigits = function extractSignificantDigits (insertDecimalPoint, magnitude) {
28672           var y = this.abs();
28673           var mag = DD.magnitude(y._hi);
28674           var scale = DD.TEN.pow(mag);
28675           y = y.divide(scale);
28676           if (y.gt(DD.TEN)) {
28677             y = y.divide(DD.TEN);
28678             mag += 1;
28679           } else if (y.lt(DD.ONE)) {
28680             y = y.multiply(DD.TEN);
28681             mag -= 1;
28682           }
28683           var decimalPointPos = mag + 1;
28684           var buf = new StringBuffer();
28685           var numDigits = DD.MAX_PRINT_DIGITS - 1;
28686           for (var i = 0; i <= numDigits; i++) {
28687             if (insertDecimalPoint && i === decimalPointPos) {
28688               buf.append('.');
28689             }
28690             var digit = Math.trunc(y._hi);
28691             if (digit < 0) {
28692               break
28693             }
28694             var rebiasBy10 = false;
28695             var digitChar = 0;
28696             if (digit > 9) {
28697               rebiasBy10 = true;
28698               digitChar = '9';
28699             } else {
28700               digitChar = '0' + digit;
28701             }
28702             buf.append(digitChar);
28703             y = y.subtract(DD.valueOf(digit)).multiply(DD.TEN);
28704             if (rebiasBy10) { y.selfAdd(DD.TEN); }
28705             var continueExtractingDigits = true;
28706             var remMag = DD.magnitude(y._hi);
28707             if (remMag < 0 && Math.abs(remMag) >= numDigits - i) { continueExtractingDigits = false; }
28708             if (!continueExtractingDigits) { break }
28709           }
28710           magnitude[0] = mag;
28711           return buf.toString()
28712         };
28713         DD.prototype.sqr = function sqr () {
28714           return this.multiply(this)
28715         };
28716         DD.prototype.doubleValue = function doubleValue () {
28717           return this._hi + this._lo
28718         };
28719         DD.prototype.subtract = function subtract () {
28720           if (arguments[0] instanceof DD) {
28721             var y = arguments[0];
28722             return this.add(y.negate())
28723           } else if (typeof arguments[0] === 'number') {
28724             var y$1 = arguments[0];
28725             return this.add(-y$1)
28726           }
28727         };
28728         DD.prototype.equals = function equals () {
28729           if (arguments.length === 1) {
28730             var y = arguments[0];
28731             return this._hi === y._hi && this._lo === y._lo
28732           }
28733         };
28734         DD.prototype.isZero = function isZero () {
28735           return this._hi === 0.0 && this._lo === 0.0
28736         };
28737         DD.prototype.selfSubtract = function selfSubtract () {
28738           if (arguments[0] instanceof DD) {
28739             var y = arguments[0];
28740             if (this.isNaN()) { return this }
28741             return this.selfAdd(-y._hi, -y._lo)
28742           } else if (typeof arguments[0] === 'number') {
28743             var y$1 = arguments[0];
28744             if (this.isNaN()) { return this }
28745             return this.selfAdd(-y$1, 0.0)
28746           }
28747         };
28748         DD.prototype.getSpecialNumberString = function getSpecialNumberString () {
28749           if (this.isZero()) { return '0.0' }
28750           if (this.isNaN()) { return 'NaN ' }
28751           return null
28752         };
28753         DD.prototype.min = function min (x) {
28754           if (this.le(x)) {
28755             return this
28756           } else {
28757             return x
28758           }
28759         };
28760         DD.prototype.selfDivide = function selfDivide () {
28761           if (arguments.length === 1) {
28762             if (arguments[0] instanceof DD) {
28763               var y = arguments[0];
28764               return this.selfDivide(y._hi, y._lo)
28765             } else if (typeof arguments[0] === 'number') {
28766               var y$1 = arguments[0];
28767               return this.selfDivide(y$1, 0.0)
28768             }
28769           } else if (arguments.length === 2) {
28770             var yhi = arguments[0];
28771             var ylo = arguments[1];
28772             var hc = null;
28773             var tc = null;
28774             var hy = null;
28775             var ty = null;
28776             var C = null;
28777             var c = null;
28778             var U = null;
28779             var u = null;
28780             C = this._hi / yhi;
28781             c = DD.SPLIT * C;
28782             hc = c - C;
28783             u = DD.SPLIT * yhi;
28784             hc = c - hc;
28785             tc = C - hc;
28786             hy = u - yhi;
28787             U = C * yhi;
28788             hy = u - hy;
28789             ty = yhi - hy;
28790             u = hc * hy - U + hc * ty + tc * hy + tc * ty;
28791             c = (this._hi - U - u + this._lo - C * ylo) / yhi;
28792             u = C + c;
28793             this._hi = u;
28794             this._lo = C - u + c;
28795             return this
28796           }
28797         };
28798         DD.prototype.dump = function dump () {
28799           return 'DD<' + this._hi + ', ' + this._lo + '>'
28800         };
28801         DD.prototype.divide = function divide () {
28802           if (arguments[0] instanceof DD) {
28803             var y = arguments[0];
28804             var hc = null;
28805             var tc = null;
28806             var hy = null;
28807             var ty = null;
28808             var C = null;
28809             var c = null;
28810             var U = null;
28811             var u = null;
28812             C = this._hi / y._hi;
28813             c = DD.SPLIT * C;
28814             hc = c - C;
28815             u = DD.SPLIT * y._hi;
28816             hc = c - hc;
28817             tc = C - hc;
28818             hy = u - y._hi;
28819             U = C * y._hi;
28820             hy = u - hy;
28821             ty = y._hi - hy;
28822             u = hc * hy - U + hc * ty + tc * hy + tc * ty;
28823             c = (this._hi - U - u + this._lo - C * y._lo) / y._hi;
28824             u = C + c;
28825             var zhi = u;
28826             var zlo = C - u + c;
28827             return new DD(zhi, zlo)
28828           } else if (typeof arguments[0] === 'number') {
28829             var y$1 = arguments[0];
28830             if (Double.isNaN(y$1)) { return DD.createNaN() }
28831             return DD.copy(this).selfDivide(y$1, 0.0)
28832           }
28833         };
28834         DD.prototype.ge = function ge (y) {
28835           return (this._hi > y._hi || this._hi === y._hi) && this._lo >= y._lo
28836         };
28837         DD.prototype.pow = function pow (exp) {
28838           if (exp === 0.0) { return DD.valueOf(1.0) }
28839           var r = new DD(this);
28840           var s = DD.valueOf(1.0);
28841           var n = Math.abs(exp);
28842           if (n > 1) {
28843             while (n > 0) {
28844               if (n % 2 === 1) {
28845                 s.selfMultiply(r);
28846               }
28847               n /= 2;
28848               if (n > 0) { r = r.sqr(); }
28849             }
28850           } else {
28851             s = r;
28852           }
28853           if (exp < 0) { return s.reciprocal() }
28854           return s
28855         };
28856         DD.prototype.ceil = function ceil () {
28857           if (this.isNaN()) { return DD.NaN }
28858           var fhi = Math.ceil(this._hi);
28859           var flo = 0.0;
28860           if (fhi === this._hi) {
28861             flo = Math.ceil(this._lo);
28862           }
28863           return new DD(fhi, flo)
28864         };
28865         DD.prototype.compareTo = function compareTo (o) {
28866           var other = o;
28867           if (this._hi < other._hi) { return -1 }
28868           if (this._hi > other._hi) { return 1 }
28869           if (this._lo < other._lo) { return -1 }
28870           if (this._lo > other._lo) { return 1 }
28871           return 0
28872         };
28873         DD.prototype.rint = function rint () {
28874           if (this.isNaN()) { return this }
28875           var plus5 = this.add(0.5);
28876           return plus5.floor()
28877         };
28878         DD.prototype.setValue = function setValue () {
28879           if (arguments[0] instanceof DD) {
28880             var value = arguments[0];
28881             this.init(value);
28882             return this
28883           } else if (typeof arguments[0] === 'number') {
28884             var value$1 = arguments[0];
28885             this.init(value$1);
28886             return this
28887           }
28888         };
28889         DD.prototype.max = function max (x) {
28890           if (this.ge(x)) {
28891             return this
28892           } else {
28893             return x
28894           }
28895         };
28896         DD.prototype.sqrt = function sqrt () {
28897           if (this.isZero()) { return DD.valueOf(0.0) }
28898           if (this.isNegative()) {
28899             return DD.NaN
28900           }
28901           var x = 1.0 / Math.sqrt(this._hi);
28902           var ax = this._hi * x;
28903           var axdd = DD.valueOf(ax);
28904           var diffSq = this.subtract(axdd.sqr());
28905           var d2 = diffSq._hi * (x * 0.5);
28906           return axdd.add(d2)
28907         };
28908         DD.prototype.selfAdd = function selfAdd () {
28909           if (arguments.length === 1) {
28910             if (arguments[0] instanceof DD) {
28911               var y = arguments[0];
28912               return this.selfAdd(y._hi, y._lo)
28913             } else if (typeof arguments[0] === 'number') {
28914               var y$1 = arguments[0];
28915               var H = null;
28916               var h = null;
28917               var S = null;
28918               var s = null;
28919               var e = null;
28920               var f = null;
28921               S = this._hi + y$1;
28922               e = S - this._hi;
28923               s = S - e;
28924               s = y$1 - e + (this._hi - s);
28925               f = s + this._lo;
28926               H = S + f;
28927               h = f + (S - H);
28928               this._hi = H + h;
28929               this._lo = h + (H - this._hi);
28930               return this
28931             }
28932           } else if (arguments.length === 2) {
28933             var yhi = arguments[0];
28934             var ylo = arguments[1];
28935             var H$1 = null;
28936             var h$1 = null;
28937             var T = null;
28938             var t = null;
28939             var S$1 = null;
28940             var s$1 = null;
28941             var e$1 = null;
28942             var f$1 = null;
28943             S$1 = this._hi + yhi;
28944             T = this._lo + ylo;
28945             e$1 = S$1 - this._hi;
28946             f$1 = T - this._lo;
28947             s$1 = S$1 - e$1;
28948             t = T - f$1;
28949             s$1 = yhi - e$1 + (this._hi - s$1);
28950             t = ylo - f$1 + (this._lo - t);
28951             e$1 = s$1 + T;
28952             H$1 = S$1 + e$1;
28953             h$1 = e$1 + (S$1 - H$1);
28954             e$1 = t + h$1;
28955             var zhi = H$1 + e$1;
28956             var zlo = e$1 + (H$1 - zhi);
28957             this._hi = zhi;
28958             this._lo = zlo;
28959             return this
28960           }
28961         };
28962         DD.prototype.selfMultiply = function selfMultiply () {
28963           if (arguments.length === 1) {
28964             if (arguments[0] instanceof DD) {
28965               var y = arguments[0];
28966               return this.selfMultiply(y._hi, y._lo)
28967             } else if (typeof arguments[0] === 'number') {
28968               var y$1 = arguments[0];
28969               return this.selfMultiply(y$1, 0.0)
28970             }
28971           } else if (arguments.length === 2) {
28972             var yhi = arguments[0];
28973             var ylo = arguments[1];
28974             var hx = null;
28975             var tx = null;
28976             var hy = null;
28977             var ty = null;
28978             var C = null;
28979             var c = null;
28980             C = DD.SPLIT * this._hi;
28981             hx = C - this._hi;
28982             c = DD.SPLIT * yhi;
28983             hx = C - hx;
28984             tx = this._hi - hx;
28985             hy = c - yhi;
28986             C = this._hi * yhi;
28987             hy = c - hy;
28988             ty = yhi - hy;
28989             c = hx * hy - C + hx * ty + tx * hy + tx * ty + (this._hi * ylo + this._lo * yhi);
28990             var zhi = C + c;
28991             hx = C - zhi;
28992             var zlo = c + hx;
28993             this._hi = zhi;
28994             this._lo = zlo;
28995             return this
28996           }
28997         };
28998         DD.prototype.selfSqr = function selfSqr () {
28999           return this.selfMultiply(this)
29000         };
29001         DD.prototype.floor = function floor () {
29002           if (this.isNaN()) { return DD.NaN }
29003           var fhi = Math.floor(this._hi);
29004           var flo = 0.0;
29005           if (fhi === this._hi) {
29006             flo = Math.floor(this._lo);
29007           }
29008           return new DD(fhi, flo)
29009         };
29010         DD.prototype.negate = function negate () {
29011           if (this.isNaN()) { return this }
29012           return new DD(-this._hi, -this._lo)
29013         };
29014         DD.prototype.clone = function clone () {
29015           // try {
29016           // return null
29017           // } catch (ex) {
29018           // if (ex instanceof CloneNotSupportedException) {
29019           //   return null
29020           // } else throw ex
29021           // } finally {}
29022         };
29023         DD.prototype.multiply = function multiply () {
29024           if (arguments[0] instanceof DD) {
29025             var y = arguments[0];
29026             if (y.isNaN()) { return DD.createNaN() }
29027             return DD.copy(this).selfMultiply(y)
29028           } else if (typeof arguments[0] === 'number') {
29029             var y$1 = arguments[0];
29030             if (Double.isNaN(y$1)) { return DD.createNaN() }
29031             return DD.copy(this).selfMultiply(y$1, 0.0)
29032           }
29033         };
29034         DD.prototype.isNaN = function isNaN () {
29035           return Double.isNaN(this._hi)
29036         };
29037         DD.prototype.intValue = function intValue () {
29038           return Math.trunc(this._hi)
29039         };
29040         DD.prototype.toString = function toString () {
29041           var mag = DD.magnitude(this._hi);
29042           if (mag >= -3 && mag <= 20) { return this.toStandardNotation() }
29043           return this.toSciNotation()
29044         };
29045         DD.prototype.toStandardNotation = function toStandardNotation () {
29046           var specialStr = this.getSpecialNumberString();
29047           if (specialStr !== null) { return specialStr }
29048           var magnitude = new Array(1).fill(null);
29049           var sigDigits = this.extractSignificantDigits(true, magnitude);
29050           var decimalPointPos = magnitude[0] + 1;
29051           var num = sigDigits;
29052           if (sigDigits.charAt(0) === '.') {
29053             num = '0' + sigDigits;
29054           } else if (decimalPointPos < 0) {
29055             num = '0.' + DD.stringOfChar('0', -decimalPointPos) + sigDigits;
29056           } else if (sigDigits.indexOf('.') === -1) {
29057             var numZeroes = decimalPointPos - sigDigits.length;
29058             var zeroes = DD.stringOfChar('0', numZeroes);
29059             num = sigDigits + zeroes + '.0';
29060           }
29061           if (this.isNegative()) { return '-' + num }
29062           return num
29063         };
29064         DD.prototype.reciprocal = function reciprocal () {
29065           var hc = null;
29066           var tc = null;
29067           var hy = null;
29068           var ty = null;
29069           var C = null;
29070           var c = null;
29071           var U = null;
29072           var u = null;
29073           C = 1.0 / this._hi;
29074           c = DD.SPLIT * C;
29075           hc = c - C;
29076           u = DD.SPLIT * this._hi;
29077           hc = c - hc;
29078           tc = C - hc;
29079           hy = u - this._hi;
29080           U = C * this._hi;
29081           hy = u - hy;
29082           ty = this._hi - hy;
29083           u = hc * hy - U + hc * ty + tc * hy + tc * ty;
29084           c = (1.0 - U - u - C * this._lo) / this._hi;
29085           var zhi = C + c;
29086           var zlo = C - zhi + c;
29087           return new DD(zhi, zlo)
29088         };
29089         DD.prototype.toSciNotation = function toSciNotation () {
29090           if (this.isZero()) { return DD.SCI_NOT_ZERO }
29091           var specialStr = this.getSpecialNumberString();
29092           if (specialStr !== null) { return specialStr }
29093           var magnitude = new Array(1).fill(null);
29094           var digits = this.extractSignificantDigits(false, magnitude);
29095           var expStr = DD.SCI_NOT_EXPONENT_CHAR + magnitude[0];
29096           if (digits.charAt(0) === '0') {
29097             throw new Error('Found leading zero: ' + digits)
29098           }
29099           var trailingDigits = '';
29100           if (digits.length > 1) { trailingDigits = digits.substring(1); }
29101           var digitsWithDecimal = digits.charAt(0) + '.' + trailingDigits;
29102           if (this.isNegative()) { return '-' + digitsWithDecimal + expStr }
29103           return digitsWithDecimal + expStr
29104         };
29105         DD.prototype.abs = function abs () {
29106           if (this.isNaN()) { return DD.NaN }
29107           if (this.isNegative()) { return this.negate() }
29108           return new DD(this)
29109         };
29110         DD.prototype.isPositive = function isPositive () {
29111           return (this._hi > 0.0 || this._hi === 0.0) && this._lo > 0.0
29112         };
29113         DD.prototype.lt = function lt (y) {
29114           return (this._hi < y._hi || this._hi === y._hi) && this._lo < y._lo
29115         };
29116         DD.prototype.add = function add () {
29117           if (arguments[0] instanceof DD) {
29118             var y = arguments[0];
29119             return DD.copy(this).selfAdd(y)
29120           } else if (typeof arguments[0] === 'number') {
29121             var y$1 = arguments[0];
29122             return DD.copy(this).selfAdd(y$1)
29123           }
29124         };
29125         DD.prototype.init = function init () {
29126           if (arguments.length === 1) {
29127             if (typeof arguments[0] === 'number') {
29128               var x = arguments[0];
29129               this._hi = x;
29130               this._lo = 0.0;
29131             } else if (arguments[0] instanceof DD) {
29132               var dd = arguments[0];
29133               this._hi = dd._hi;
29134               this._lo = dd._lo;
29135             }
29136           } else if (arguments.length === 2) {
29137             var hi = arguments[0];
29138             var lo = arguments[1];
29139             this._hi = hi;
29140             this._lo = lo;
29141           }
29142         };
29143         DD.prototype.gt = function gt (y) {
29144           return (this._hi > y._hi || this._hi === y._hi) && this._lo > y._lo
29145         };
29146         DD.prototype.isNegative = function isNegative () {
29147           return (this._hi < 0.0 || this._hi === 0.0) && this._lo < 0.0
29148         };
29149         DD.prototype.trunc = function trunc () {
29150           if (this.isNaN()) { return DD.NaN }
29151           if (this.isPositive()) { return this.floor(); } else { return this.ceil() }
29152         };
29153         DD.prototype.signum = function signum () {
29154           if (this._hi > 0) { return 1 }
29155           if (this._hi < 0) { return -1 }
29156           if (this._lo > 0) { return 1 }
29157           if (this._lo < 0) { return -1 }
29158           return 0
29159         };
29160         DD.prototype.interfaces_ = function interfaces_ () {
29161           return [Serializable, Comparable, Clonable]
29162         };
29163         DD.prototype.getClass = function getClass () {
29164           return DD
29165         };
29166         DD.sqr = function sqr (x) {
29167           return DD.valueOf(x).selfMultiply(x)
29168         };
29169         DD.valueOf = function valueOf () {
29170           if (typeof arguments[0] === 'string') {
29171             var str = arguments[0];
29172             return DD.parse(str)
29173           } else if (typeof arguments[0] === 'number') {
29174             var x = arguments[0];
29175             return new DD(x)
29176           }
29177         };
29178         DD.sqrt = function sqrt (x) {
29179           return DD.valueOf(x).sqrt()
29180         };
29181         DD.parse = function parse (str) {
29182           var i = 0;
29183           var strlen = str.length;
29184           while (Character.isWhitespace(str.charAt(i))) { i++; }
29185           var isNegative = false;
29186           if (i < strlen) {
29187             var signCh = str.charAt(i);
29188             if (signCh === '-' || signCh === '+') {
29189               i++;
29190               if (signCh === '-') { isNegative = true; }
29191             }
29192           }
29193           var val = new DD();
29194           var numDigits = 0;
29195           var numBeforeDec = 0;
29196           var exp = 0;
29197           while (true) {
29198             if (i >= strlen) { break }
29199             var ch = str.charAt(i);
29200             i++;
29201             if (Character.isDigit(ch)) {
29202               var d = ch - '0';
29203               val.selfMultiply(DD.TEN);
29204               val.selfAdd(d);
29205               numDigits++;
29206               continue
29207             }
29208             if (ch === '.') {
29209               numBeforeDec = numDigits;
29210               continue
29211             }
29212             if (ch === 'e' || ch === 'E') {
29213               var expStr = str.substring(i);
29214               try {
29215                 exp = Integer.parseInt(expStr);
29216               } catch (ex) {
29217                 if (ex instanceof Error) {
29218                   throw new Error('Invalid exponent ' + expStr + ' in string ' + str)
29219                 } else { throw ex }
29220               } finally {}
29221               break
29222             }
29223             throw new Error("Unexpected character '" + ch + "' at position " + i + ' in string ' + str)
29224           }
29225           var val2 = val;
29226           var numDecPlaces = numDigits - numBeforeDec - exp;
29227           if (numDecPlaces === 0) {
29228             val2 = val;
29229           } else if (numDecPlaces > 0) {
29230             var scale = DD.TEN.pow(numDecPlaces);
29231             val2 = val.divide(scale);
29232           } else if (numDecPlaces < 0) {
29233             var scale$1 = DD.TEN.pow(-numDecPlaces);
29234             val2 = val.multiply(scale$1);
29235           }
29236           if (isNegative) {
29237             return val2.negate()
29238           }
29239           return val2
29240         };
29241         DD.createNaN = function createNaN () {
29242           return new DD(Double.NaN, Double.NaN)
29243         };
29244         DD.copy = function copy (dd) {
29245           return new DD(dd)
29246         };
29247         DD.magnitude = function magnitude (x) {
29248           var xAbs = Math.abs(x);
29249           var xLog10 = Math.log(xAbs) / Math.log(10);
29250           var xMag = Math.trunc(Math.floor(xLog10));
29251           var xApprox = Math.pow(10, xMag);
29252           if (xApprox * 10 <= xAbs) { xMag += 1; }
29253           return xMag
29254         };
29255         DD.stringOfChar = function stringOfChar (ch, len) {
29256           var buf = new StringBuffer();
29257           for (var i = 0; i < len; i++) {
29258             buf.append(ch);
29259           }
29260           return buf.toString()
29261         };
29262         staticAccessors$7.PI.get = function () { return new DD(3.141592653589793116e+00, 1.224646799147353207e-16) };
29263         staticAccessors$7.TWO_PI.get = function () { return new DD(6.283185307179586232e+00, 2.449293598294706414e-16) };
29264         staticAccessors$7.PI_2.get = function () { return new DD(1.570796326794896558e+00, 6.123233995736766036e-17) };
29265         staticAccessors$7.E.get = function () { return new DD(2.718281828459045091e+00, 1.445646891729250158e-16) };
29266         staticAccessors$7.NaN.get = function () { return new DD(Double.NaN, Double.NaN) };
29267         staticAccessors$7.EPS.get = function () { return 1.23259516440783e-32 };
29268         staticAccessors$7.SPLIT.get = function () { return 134217729.0 };
29269         staticAccessors$7.MAX_PRINT_DIGITS.get = function () { return 32 };
29270         staticAccessors$7.TEN.get = function () { return DD.valueOf(10.0) };
29271         staticAccessors$7.ONE.get = function () { return DD.valueOf(1.0) };
29272         staticAccessors$7.SCI_NOT_EXPONENT_CHAR.get = function () { return 'E' };
29273         staticAccessors$7.SCI_NOT_ZERO.get = function () { return '0.0E0' };
29274
29275         Object.defineProperties( DD, staticAccessors$7 );
29276
29277         var CGAlgorithmsDD = function CGAlgorithmsDD () {};
29278
29279         var staticAccessors$6 = { DP_SAFE_EPSILON: { configurable: true } };
29280
29281         CGAlgorithmsDD.prototype.interfaces_ = function interfaces_ () {
29282           return []
29283         };
29284         CGAlgorithmsDD.prototype.getClass = function getClass () {
29285           return CGAlgorithmsDD
29286         };
29287         CGAlgorithmsDD.orientationIndex = function orientationIndex (p1, p2, q) {
29288           var index = CGAlgorithmsDD.orientationIndexFilter(p1, p2, q);
29289           if (index <= 1) { return index }
29290           var dx1 = DD.valueOf(p2.x).selfAdd(-p1.x);
29291           var dy1 = DD.valueOf(p2.y).selfAdd(-p1.y);
29292           var dx2 = DD.valueOf(q.x).selfAdd(-p2.x);
29293           var dy2 = DD.valueOf(q.y).selfAdd(-p2.y);
29294           return dx1.selfMultiply(dy2).selfSubtract(dy1.selfMultiply(dx2)).signum()
29295         };
29296         CGAlgorithmsDD.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {
29297           var det = x1.multiply(y2).selfSubtract(y1.multiply(x2));
29298           return det.signum()
29299         };
29300         CGAlgorithmsDD.intersection = function intersection (p1, p2, q1, q2) {
29301           var denom1 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p2.x).selfSubtract(p1.x));
29302           var denom2 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p2.y).selfSubtract(p1.y));
29303           var denom = denom1.subtract(denom2);
29304           var numx1 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));
29305           var numx2 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));
29306           var numx = numx1.subtract(numx2);
29307           var fracP = numx.selfDivide(denom).doubleValue();
29308           var x = DD.valueOf(p1.x).selfAdd(DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(fracP)).doubleValue();
29309           var numy1 = DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));
29310           var numy2 = DD.valueOf(p2.y).selfSubtract(p1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));
29311           var numy = numy1.subtract(numy2);
29312           var fracQ = numy.selfDivide(denom).doubleValue();
29313           var y = DD.valueOf(q1.y).selfAdd(DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(fracQ)).doubleValue();
29314           return new Coordinate(x, y)
29315         };
29316         CGAlgorithmsDD.orientationIndexFilter = function orientationIndexFilter (pa, pb, pc) {
29317           var detsum = null;
29318           var detleft = (pa.x - pc.x) * (pb.y - pc.y);
29319           var detright = (pa.y - pc.y) * (pb.x - pc.x);
29320           var det = detleft - detright;
29321           if (detleft > 0.0) {
29322             if (detright <= 0.0) {
29323               return CGAlgorithmsDD.signum(det)
29324             } else {
29325               detsum = detleft + detright;
29326             }
29327           } else if (detleft < 0.0) {
29328             if (detright >= 0.0) {
29329               return CGAlgorithmsDD.signum(det)
29330             } else {
29331               detsum = -detleft - detright;
29332             }
29333           } else {
29334             return CGAlgorithmsDD.signum(det)
29335           }
29336           var errbound = CGAlgorithmsDD.DP_SAFE_EPSILON * detsum;
29337           if (det >= errbound || -det >= errbound) {
29338             return CGAlgorithmsDD.signum(det)
29339           }
29340           return 2
29341         };
29342         CGAlgorithmsDD.signum = function signum (x) {
29343           if (x > 0) { return 1 }
29344           if (x < 0) { return -1 }
29345           return 0
29346         };
29347         staticAccessors$6.DP_SAFE_EPSILON.get = function () { return 1e-15 };
29348
29349         Object.defineProperties( CGAlgorithmsDD, staticAccessors$6 );
29350
29351         var CoordinateSequence = function CoordinateSequence () {};
29352
29353         var staticAccessors$8 = { X: { configurable: true },Y: { configurable: true },Z: { configurable: true },M: { configurable: true } };
29354
29355         staticAccessors$8.X.get = function () { return 0 };
29356         staticAccessors$8.Y.get = function () { return 1 };
29357         staticAccessors$8.Z.get = function () { return 2 };
29358         staticAccessors$8.M.get = function () { return 3 };
29359         CoordinateSequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {};
29360         CoordinateSequence.prototype.size = function size () {};
29361         CoordinateSequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {};
29362         CoordinateSequence.prototype.getCoordinate = function getCoordinate () {};
29363         CoordinateSequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {};
29364         CoordinateSequence.prototype.getDimension = function getDimension () {};
29365         CoordinateSequence.prototype.getX = function getX (index) {};
29366         CoordinateSequence.prototype.clone = function clone () {};
29367         CoordinateSequence.prototype.expandEnvelope = function expandEnvelope (env) {};
29368         CoordinateSequence.prototype.copy = function copy () {};
29369         CoordinateSequence.prototype.getY = function getY (index) {};
29370         CoordinateSequence.prototype.toCoordinateArray = function toCoordinateArray () {};
29371         CoordinateSequence.prototype.interfaces_ = function interfaces_ () {
29372           return [Clonable]
29373         };
29374         CoordinateSequence.prototype.getClass = function getClass () {
29375           return CoordinateSequence
29376         };
29377
29378         Object.defineProperties( CoordinateSequence, staticAccessors$8 );
29379
29380         var Exception = function Exception () {};
29381
29382         var NotRepresentableException = (function (Exception$$1) {
29383           function NotRepresentableException () {
29384             Exception$$1.call(this, 'Projective point not representable on the Cartesian plane.');
29385           }
29386
29387           if ( Exception$$1 ) { NotRepresentableException.__proto__ = Exception$$1; }
29388           NotRepresentableException.prototype = Object.create( Exception$$1 && Exception$$1.prototype );
29389           NotRepresentableException.prototype.constructor = NotRepresentableException;
29390           NotRepresentableException.prototype.interfaces_ = function interfaces_ () {
29391             return []
29392           };
29393           NotRepresentableException.prototype.getClass = function getClass () {
29394             return NotRepresentableException
29395           };
29396
29397           return NotRepresentableException;
29398         }(Exception));
29399
29400         var System = function System () {};
29401
29402         System.arraycopy = function arraycopy (src, srcPos, dest, destPos, len) {
29403           var c = 0;
29404           for (var i = srcPos; i < srcPos + len; i++) {
29405             dest[destPos + c] = src[i];
29406             c++;
29407           }
29408         };
29409
29410         System.getProperty = function getProperty (name) {
29411           return {
29412             'line.separator': '\n'
29413           }[name]
29414         };
29415
29416         var HCoordinate = function HCoordinate () {
29417           this.x = null;
29418           this.y = null;
29419           this.w = null;
29420           if (arguments.length === 0) {
29421             this.x = 0.0;
29422             this.y = 0.0;
29423             this.w = 1.0;
29424           } else if (arguments.length === 1) {
29425             var p = arguments[0];
29426             this.x = p.x;
29427             this.y = p.y;
29428             this.w = 1.0;
29429           } else if (arguments.length === 2) {
29430             if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
29431               var _x = arguments[0];
29432               var _y = arguments[1];
29433               this.x = _x;
29434               this.y = _y;
29435               this.w = 1.0;
29436             } else if (arguments[0] instanceof HCoordinate && arguments[1] instanceof HCoordinate) {
29437               var p1 = arguments[0];
29438               var p2 = arguments[1];
29439               this.x = p1.y * p2.w - p2.y * p1.w;
29440               this.y = p2.x * p1.w - p1.x * p2.w;
29441               this.w = p1.x * p2.y - p2.x * p1.y;
29442             } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
29443               var p1$1 = arguments[0];
29444               var p2$1 = arguments[1];
29445               this.x = p1$1.y - p2$1.y;
29446               this.y = p2$1.x - p1$1.x;
29447               this.w = p1$1.x * p2$1.y - p2$1.x * p1$1.y;
29448             }
29449           } else if (arguments.length === 3) {
29450             var _x$1 = arguments[0];
29451             var _y$1 = arguments[1];
29452             var _w = arguments[2];
29453             this.x = _x$1;
29454             this.y = _y$1;
29455             this.w = _w;
29456           } else if (arguments.length === 4) {
29457             var p1$2 = arguments[0];
29458             var p2$2 = arguments[1];
29459             var q1 = arguments[2];
29460             var q2 = arguments[3];
29461             var px = p1$2.y - p2$2.y;
29462             var py = p2$2.x - p1$2.x;
29463             var pw = p1$2.x * p2$2.y - p2$2.x * p1$2.y;
29464             var qx = q1.y - q2.y;
29465             var qy = q2.x - q1.x;
29466             var qw = q1.x * q2.y - q2.x * q1.y;
29467             this.x = py * qw - qy * pw;
29468             this.y = qx * pw - px * qw;
29469             this.w = px * qy - qx * py;
29470           }
29471         };
29472         HCoordinate.prototype.getY = function getY () {
29473           var a = this.y / this.w;
29474           if (Double.isNaN(a) || Double.isInfinite(a)) {
29475             throw new NotRepresentableException()
29476           }
29477           return a
29478         };
29479         HCoordinate.prototype.getX = function getX () {
29480           var a = this.x / this.w;
29481           if (Double.isNaN(a) || Double.isInfinite(a)) {
29482             throw new NotRepresentableException()
29483           }
29484           return a
29485         };
29486         HCoordinate.prototype.getCoordinate = function getCoordinate () {
29487           var p = new Coordinate();
29488           p.x = this.getX();
29489           p.y = this.getY();
29490           return p
29491         };
29492         HCoordinate.prototype.interfaces_ = function interfaces_ () {
29493           return []
29494         };
29495         HCoordinate.prototype.getClass = function getClass () {
29496           return HCoordinate
29497         };
29498         HCoordinate.intersection = function intersection (p1, p2, q1, q2) {
29499           var px = p1.y - p2.y;
29500           var py = p2.x - p1.x;
29501           var pw = p1.x * p2.y - p2.x * p1.y;
29502           var qx = q1.y - q2.y;
29503           var qy = q2.x - q1.x;
29504           var qw = q1.x * q2.y - q2.x * q1.y;
29505           var x = py * qw - qy * pw;
29506           var y = qx * pw - px * qw;
29507           var w = px * qy - qx * py;
29508           var xInt = x / w;
29509           var yInt = y / w;
29510           if (Double.isNaN(xInt) || (Double.isInfinite(xInt) || Double.isNaN(yInt)) || Double.isInfinite(yInt)) {
29511             throw new NotRepresentableException()
29512           }
29513           return new Coordinate(xInt, yInt)
29514         };
29515
29516         var Envelope = function Envelope () {
29517           this._minx = null;
29518           this._maxx = null;
29519           this._miny = null;
29520           this._maxy = null;
29521           if (arguments.length === 0) {
29522             this.init();
29523           } else if (arguments.length === 1) {
29524             if (arguments[0] instanceof Coordinate) {
29525               var p = arguments[0];
29526               this.init(p.x, p.x, p.y, p.y);
29527             } else if (arguments[0] instanceof Envelope) {
29528               var env = arguments[0];
29529               this.init(env);
29530             }
29531           } else if (arguments.length === 2) {
29532             var p1 = arguments[0];
29533             var p2 = arguments[1];
29534             this.init(p1.x, p2.x, p1.y, p2.y);
29535           } else if (arguments.length === 4) {
29536             var x1 = arguments[0];
29537             var x2 = arguments[1];
29538             var y1 = arguments[2];
29539             var y2 = arguments[3];
29540             this.init(x1, x2, y1, y2);
29541           }
29542         };
29543
29544         var staticAccessors$9 = { serialVersionUID: { configurable: true } };
29545         Envelope.prototype.getArea = function getArea () {
29546           return this.getWidth() * this.getHeight()
29547         };
29548         Envelope.prototype.equals = function equals (other) {
29549           if (!(other instanceof Envelope)) {
29550             return false
29551           }
29552           var otherEnvelope = other;
29553           if (this.isNull()) {
29554             return otherEnvelope.isNull()
29555           }
29556           return this._maxx === otherEnvelope.getMaxX() && this._maxy === otherEnvelope.getMaxY() && this._minx === otherEnvelope.getMinX() && this._miny === otherEnvelope.getMinY()
29557         };
29558         Envelope.prototype.intersection = function intersection (env) {
29559           if (this.isNull() || env.isNull() || !this.intersects(env)) { return new Envelope() }
29560           var intMinX = this._minx > env._minx ? this._minx : env._minx;
29561           var intMinY = this._miny > env._miny ? this._miny : env._miny;
29562           var intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx;
29563           var intMaxY = this._maxy < env._maxy ? this._maxy : env._maxy;
29564           return new Envelope(intMinX, intMaxX, intMinY, intMaxY)
29565         };
29566         Envelope.prototype.isNull = function isNull () {
29567           return this._maxx < this._minx
29568         };
29569         Envelope.prototype.getMaxX = function getMaxX () {
29570           return this._maxx
29571         };
29572         Envelope.prototype.covers = function covers () {
29573           if (arguments.length === 1) {
29574             if (arguments[0] instanceof Coordinate) {
29575               var p = arguments[0];
29576               return this.covers(p.x, p.y)
29577             } else if (arguments[0] instanceof Envelope) {
29578               var other = arguments[0];
29579               if (this.isNull() || other.isNull()) {
29580                 return false
29581               }
29582               return other.getMinX() >= this._minx && other.getMaxX() <= this._maxx && other.getMinY() >= this._miny && other.getMaxY() <= this._maxy
29583             }
29584           } else if (arguments.length === 2) {
29585             var x = arguments[0];
29586             var y = arguments[1];
29587             if (this.isNull()) { return false }
29588             return x >= this._minx && x <= this._maxx && y >= this._miny && y <= this._maxy
29589           }
29590         };
29591         Envelope.prototype.intersects = function intersects () {
29592           if (arguments.length === 1) {
29593             if (arguments[0] instanceof Envelope) {
29594               var other = arguments[0];
29595               if (this.isNull() || other.isNull()) {
29596                 return false
29597               }
29598               return !(other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny)
29599             } else if (arguments[0] instanceof Coordinate) {
29600               var p = arguments[0];
29601               return this.intersects(p.x, p.y)
29602             }
29603           } else if (arguments.length === 2) {
29604             var x = arguments[0];
29605             var y = arguments[1];
29606             if (this.isNull()) { return false }
29607             return !(x > this._maxx || x < this._minx || y > this._maxy || y < this._miny)
29608           }
29609         };
29610         Envelope.prototype.getMinY = function getMinY () {
29611           return this._miny
29612         };
29613         Envelope.prototype.getMinX = function getMinX () {
29614           return this._minx
29615         };
29616         Envelope.prototype.expandToInclude = function expandToInclude () {
29617           if (arguments.length === 1) {
29618             if (arguments[0] instanceof Coordinate) {
29619               var p = arguments[0];
29620               this.expandToInclude(p.x, p.y);
29621             } else if (arguments[0] instanceof Envelope) {
29622               var other = arguments[0];
29623               if (other.isNull()) {
29624                 return null
29625               }
29626               if (this.isNull()) {
29627                 this._minx = other.getMinX();
29628                 this._maxx = other.getMaxX();
29629                 this._miny = other.getMinY();
29630                 this._maxy = other.getMaxY();
29631               } else {
29632                 if (other._minx < this._minx) {
29633                   this._minx = other._minx;
29634                 }
29635                 if (other._maxx > this._maxx) {
29636                   this._maxx = other._maxx;
29637                 }
29638                 if (other._miny < this._miny) {
29639                   this._miny = other._miny;
29640                 }
29641                 if (other._maxy > this._maxy) {
29642                   this._maxy = other._maxy;
29643                 }
29644               }
29645             }
29646           } else if (arguments.length === 2) {
29647             var x = arguments[0];
29648             var y = arguments[1];
29649             if (this.isNull()) {
29650               this._minx = x;
29651               this._maxx = x;
29652               this._miny = y;
29653               this._maxy = y;
29654             } else {
29655               if (x < this._minx) {
29656                 this._minx = x;
29657               }
29658               if (x > this._maxx) {
29659                 this._maxx = x;
29660               }
29661               if (y < this._miny) {
29662                 this._miny = y;
29663               }
29664               if (y > this._maxy) {
29665                 this._maxy = y;
29666               }
29667             }
29668           }
29669         };
29670         Envelope.prototype.minExtent = function minExtent () {
29671           if (this.isNull()) { return 0.0 }
29672           var w = this.getWidth();
29673           var h = this.getHeight();
29674           if (w < h) { return w }
29675           return h
29676         };
29677         Envelope.prototype.getWidth = function getWidth () {
29678           if (this.isNull()) {
29679             return 0
29680           }
29681           return this._maxx - this._minx
29682         };
29683         Envelope.prototype.compareTo = function compareTo (o) {
29684           var env = o;
29685           if (this.isNull()) {
29686             if (env.isNull()) { return 0 }
29687             return -1
29688           } else {
29689             if (env.isNull()) { return 1 }
29690           }
29691           if (this._minx < env._minx) { return -1 }
29692           if (this._minx > env._minx) { return 1 }
29693           if (this._miny < env._miny) { return -1 }
29694           if (this._miny > env._miny) { return 1 }
29695           if (this._maxx < env._maxx) { return -1 }
29696           if (this._maxx > env._maxx) { return 1 }
29697           if (this._maxy < env._maxy) { return -1 }
29698           if (this._maxy > env._maxy) { return 1 }
29699           return 0
29700         };
29701         Envelope.prototype.translate = function translate (transX, transY) {
29702           if (this.isNull()) {
29703             return null
29704           }
29705           this.init(this.getMinX() + transX, this.getMaxX() + transX, this.getMinY() + transY, this.getMaxY() + transY);
29706         };
29707         Envelope.prototype.toString = function toString () {
29708           return 'Env[' + this._minx + ' : ' + this._maxx + ', ' + this._miny + ' : ' + this._maxy + ']'
29709         };
29710         Envelope.prototype.setToNull = function setToNull () {
29711           this._minx = 0;
29712           this._maxx = -1;
29713           this._miny = 0;
29714           this._maxy = -1;
29715         };
29716         Envelope.prototype.getHeight = function getHeight () {
29717           if (this.isNull()) {
29718             return 0
29719           }
29720           return this._maxy - this._miny
29721         };
29722         Envelope.prototype.maxExtent = function maxExtent () {
29723           if (this.isNull()) { return 0.0 }
29724           var w = this.getWidth();
29725           var h = this.getHeight();
29726           if (w > h) { return w }
29727           return h
29728         };
29729         Envelope.prototype.expandBy = function expandBy () {
29730           if (arguments.length === 1) {
29731             var distance = arguments[0];
29732             this.expandBy(distance, distance);
29733           } else if (arguments.length === 2) {
29734             var deltaX = arguments[0];
29735             var deltaY = arguments[1];
29736             if (this.isNull()) { return null }
29737             this._minx -= deltaX;
29738             this._maxx += deltaX;
29739             this._miny -= deltaY;
29740             this._maxy += deltaY;
29741             if (this._minx > this._maxx || this._miny > this._maxy) { this.setToNull(); }
29742           }
29743         };
29744         Envelope.prototype.contains = function contains () {
29745           if (arguments.length === 1) {
29746             if (arguments[0] instanceof Envelope) {
29747               var other = arguments[0];
29748               return this.covers(other)
29749             } else if (arguments[0] instanceof Coordinate) {
29750               var p = arguments[0];
29751               return this.covers(p)
29752             }
29753           } else if (arguments.length === 2) {
29754             var x = arguments[0];
29755             var y = arguments[1];
29756             return this.covers(x, y)
29757           }
29758         };
29759         Envelope.prototype.centre = function centre () {
29760           if (this.isNull()) { return null }
29761           return new Coordinate((this.getMinX() + this.getMaxX()) / 2.0, (this.getMinY() + this.getMaxY()) / 2.0)
29762         };
29763         Envelope.prototype.init = function init () {
29764           if (arguments.length === 0) {
29765             this.setToNull();
29766           } else if (arguments.length === 1) {
29767             if (arguments[0] instanceof Coordinate) {
29768               var p = arguments[0];
29769               this.init(p.x, p.x, p.y, p.y);
29770             } else if (arguments[0] instanceof Envelope) {
29771               var env = arguments[0];
29772               this._minx = env._minx;
29773               this._maxx = env._maxx;
29774               this._miny = env._miny;
29775               this._maxy = env._maxy;
29776             }
29777           } else if (arguments.length === 2) {
29778             var p1 = arguments[0];
29779             var p2 = arguments[1];
29780             this.init(p1.x, p2.x, p1.y, p2.y);
29781           } else if (arguments.length === 4) {
29782             var x1 = arguments[0];
29783             var x2 = arguments[1];
29784             var y1 = arguments[2];
29785             var y2 = arguments[3];
29786             if (x1 < x2) {
29787               this._minx = x1;
29788               this._maxx = x2;
29789             } else {
29790               this._minx = x2;
29791               this._maxx = x1;
29792             }
29793             if (y1 < y2) {
29794               this._miny = y1;
29795               this._maxy = y2;
29796             } else {
29797               this._miny = y2;
29798               this._maxy = y1;
29799             }
29800           }
29801         };
29802         Envelope.prototype.getMaxY = function getMaxY () {
29803           return this._maxy
29804         };
29805         Envelope.prototype.distance = function distance (env) {
29806           if (this.intersects(env)) { return 0 }
29807           var dx = 0.0;
29808           if (this._maxx < env._minx) { dx = env._minx - this._maxx; } else if (this._minx > env._maxx) { dx = this._minx - env._maxx; }
29809           var dy = 0.0;
29810           if (this._maxy < env._miny) { dy = env._miny - this._maxy; } else if (this._miny > env._maxy) { dy = this._miny - env._maxy; }
29811           if (dx === 0.0) { return dy }
29812           if (dy === 0.0) { return dx }
29813           return Math.sqrt(dx * dx + dy * dy)
29814         };
29815         Envelope.prototype.hashCode = function hashCode () {
29816           var result = 17;
29817           result = 37 * result + Coordinate.hashCode(this._minx);
29818           result = 37 * result + Coordinate.hashCode(this._maxx);
29819           result = 37 * result + Coordinate.hashCode(this._miny);
29820           result = 37 * result + Coordinate.hashCode(this._maxy);
29821           return result
29822         };
29823         Envelope.prototype.interfaces_ = function interfaces_ () {
29824           return [Comparable, Serializable]
29825         };
29826         Envelope.prototype.getClass = function getClass () {
29827           return Envelope
29828         };
29829         Envelope.intersects = function intersects () {
29830           if (arguments.length === 3) {
29831             var p1 = arguments[0];
29832             var p2 = arguments[1];
29833             var q = arguments[2];
29834             if (q.x >= (p1.x < p2.x ? p1.x : p2.x) && q.x <= (p1.x > p2.x ? p1.x : p2.x) && (q.y >= (p1.y < p2.y ? p1.y : p2.y) && q.y <= (p1.y > p2.y ? p1.y : p2.y))) {
29835               return true
29836             }
29837             return false
29838           } else if (arguments.length === 4) {
29839             var p1$1 = arguments[0];
29840             var p2$1 = arguments[1];
29841             var q1 = arguments[2];
29842             var q2 = arguments[3];
29843             var minq = Math.min(q1.x, q2.x);
29844             var maxq = Math.max(q1.x, q2.x);
29845             var minp = Math.min(p1$1.x, p2$1.x);
29846             var maxp = Math.max(p1$1.x, p2$1.x);
29847             if (minp > maxq) { return false }
29848             if (maxp < minq) { return false }
29849             minq = Math.min(q1.y, q2.y);
29850             maxq = Math.max(q1.y, q2.y);
29851             minp = Math.min(p1$1.y, p2$1.y);
29852             maxp = Math.max(p1$1.y, p2$1.y);
29853             if (minp > maxq) { return false }
29854             if (maxp < minq) { return false }
29855             return true
29856           }
29857         };
29858         staticAccessors$9.serialVersionUID.get = function () { return 5873921885273102420 };
29859
29860         Object.defineProperties( Envelope, staticAccessors$9 );
29861
29862         var regExes = {
29863           'typeStr': /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/,
29864           'emptyTypeStr': /^\s*(\w+)\s*EMPTY\s*$/,
29865           'spaces': /\s+/,
29866           'parenComma': /\)\s*,\s*\(/,
29867           'doubleParenComma': /\)\s*\)\s*,\s*\(\s*\(/, // can't use {2} here
29868           'trimParens': /^\s*\(?(.*?)\)?\s*$/
29869         };
29870
29871         /**
29872          * Class for reading and writing Well-Known Text.
29873          *
29874          * NOTE: Adapted from OpenLayers 2.11 implementation.
29875          */
29876
29877         /** Create a new parser for WKT
29878          *
29879          * @param {GeometryFactory} geometryFactory
29880          * @return An instance of WKTParser.
29881          * @constructor
29882          * @private
29883          */
29884         var WKTParser = function WKTParser (geometryFactory) {
29885           this.geometryFactory = geometryFactory || new GeometryFactory();
29886         };
29887         /**
29888          * Deserialize a WKT string and return a geometry. Supports WKT for POINT,
29889          * MULTIPOINT, LINESTRING, LINEARRING, MULTILINESTRING, POLYGON, MULTIPOLYGON,
29890          * and GEOMETRYCOLLECTION.
29891          *
29892          * @param {String} wkt A WKT string.
29893          * @return {Geometry} A geometry instance.
29894          * @private
29895          */
29896         WKTParser.prototype.read = function read (wkt) {
29897           var geometry, type, str;
29898           wkt = wkt.replace(/[\n\r]/g, ' ');
29899           var matches = regExes.typeStr.exec(wkt);
29900           if (wkt.search('EMPTY') !== -1) {
29901             matches = regExes.emptyTypeStr.exec(wkt);
29902             matches[2] = undefined;
29903           }
29904           if (matches) {
29905             type = matches[1].toLowerCase();
29906             str = matches[2];
29907             if (parse$1[type]) {
29908               geometry = parse$1[type].apply(this, [str]);
29909             }
29910           }
29911
29912           if (geometry === undefined) { throw new Error('Could not parse WKT ' + wkt) }
29913
29914           return geometry
29915         };
29916
29917         /**
29918          * Serialize a geometry into a WKT string.
29919          *
29920          * @param {Geometry} geometry A feature or array of features.
29921          * @return {String} The WKT string representation of the input geometries.
29922          * @private
29923          */
29924         WKTParser.prototype.write = function write (geometry) {
29925           return this.extractGeometry(geometry)
29926         };
29927
29928         /**
29929          * Entry point to construct the WKT for a single Geometry object.
29930          *
29931          * @param {Geometry} geometry
29932          * @return {String} A WKT string of representing the geometry.
29933          * @private
29934          */
29935         WKTParser.prototype.extractGeometry = function extractGeometry (geometry) {
29936           var type = geometry.getGeometryType().toLowerCase();
29937           if (!extract$1[type]) {
29938             return null
29939           }
29940           var wktType = type.toUpperCase();
29941           var data;
29942           if (geometry.isEmpty()) {
29943             data = wktType + ' EMPTY';
29944           } else {
29945             data = wktType + '(' + extract$1[type].apply(this, [geometry]) + ')';
29946           }
29947           return data
29948         };
29949
29950         /**
29951          * Object with properties corresponding to the geometry types. Property values
29952          * are functions that do the actual data extraction.
29953          * @private
29954          */
29955         var extract$1 = {
29956           coordinate: function coordinate (coordinate$1) {
29957             return coordinate$1.x + ' ' + coordinate$1.y
29958           },
29959
29960           /**
29961            * Return a space delimited string of point coordinates.
29962            *
29963            * @param {Point}
29964            *          point
29965            * @return {String} A string of coordinates representing the point.
29966            */
29967           point: function point (point$1) {
29968             return extract$1.coordinate.call(this, point$1._coordinates._coordinates[0])
29969           },
29970
29971           /**
29972            * Return a comma delimited string of point coordinates from a multipoint.
29973            *
29974            * @param {MultiPoint}
29975            *          multipoint
29976            * @return {String} A string of point coordinate strings representing the
29977            *         multipoint.
29978            */
29979           multipoint: function multipoint (multipoint$1) {
29980             var this$1 = this;
29981
29982             var array = [];
29983             for (var i = 0, len = multipoint$1._geometries.length; i < len; ++i) {
29984               array.push('(' + extract$1.point.apply(this$1, [multipoint$1._geometries[i]]) + ')');
29985             }
29986             return array.join(',')
29987           },
29988
29989           /**
29990            * Return a comma delimited string of point coordinates from a line.
29991            *
29992            * @param {LineString} linestring
29993            * @return {String} A string of point coordinate strings representing the linestring.
29994            */
29995           linestring: function linestring (linestring$1) {
29996             var this$1 = this;
29997
29998             var array = [];
29999             for (var i = 0, len = linestring$1._points._coordinates.length; i < len; ++i) {
30000               array.push(extract$1.coordinate.apply(this$1, [linestring$1._points._coordinates[i]]));
30001             }
30002             return array.join(',')
30003           },
30004
30005           linearring: function linearring (linearring$1) {
30006             var this$1 = this;
30007
30008             var array = [];
30009             for (var i = 0, len = linearring$1._points._coordinates.length; i < len; ++i) {
30010               array.push(extract$1.coordinate.apply(this$1, [linearring$1._points._coordinates[i]]));
30011             }
30012             return array.join(',')
30013           },
30014
30015           /**
30016            * Return a comma delimited string of linestring strings from a
30017            * multilinestring.
30018            *
30019            * @param {MultiLineString} multilinestring
30020            * @return {String} A string of of linestring strings representing the multilinestring.
30021            */
30022           multilinestring: function multilinestring (multilinestring$1) {
30023             var this$1 = this;
30024
30025             var array = [];
30026             for (var i = 0, len = multilinestring$1._geometries.length; i < len; ++i) {
30027               array.push('(' +
30028                 extract$1.linestring.apply(this$1, [multilinestring$1._geometries[i]]) +
30029                 ')');
30030             }
30031             return array.join(',')
30032           },
30033
30034           /**
30035            * Return a comma delimited string of linear ring arrays from a polygon.
30036            *
30037            * @param {Polygon} polygon
30038            * @return {String} An array of linear ring arrays representing the polygon.
30039            */
30040           polygon: function polygon (polygon$1) {
30041             var this$1 = this;
30042
30043             var array = [];
30044             array.push('(' + extract$1.linestring.apply(this, [polygon$1._shell]) + ')');
30045             for (var i = 0, len = polygon$1._holes.length; i < len; ++i) {
30046               array.push('(' + extract$1.linestring.apply(this$1, [polygon$1._holes[i]]) + ')');
30047             }
30048             return array.join(',')
30049           },
30050
30051           /**
30052            * Return an array of polygon arrays from a multipolygon.
30053            *
30054            * @param {MultiPolygon} multipolygon
30055            * @return {String} An array of polygon arrays representing the multipolygon.
30056            */
30057           multipolygon: function multipolygon (multipolygon$1) {
30058             var this$1 = this;
30059
30060             var array = [];
30061             for (var i = 0, len = multipolygon$1._geometries.length; i < len; ++i) {
30062               array.push('(' + extract$1.polygon.apply(this$1, [multipolygon$1._geometries[i]]) + ')');
30063             }
30064             return array.join(',')
30065           },
30066
30067           /**
30068            * Return the WKT portion between 'GEOMETRYCOLLECTION(' and ')' for an
30069            * geometrycollection.
30070            *
30071            * @param {GeometryCollection} collection
30072            * @return {String} internal WKT representation of the collection.
30073            */
30074           geometrycollection: function geometrycollection (collection) {
30075             var this$1 = this;
30076
30077             var array = [];
30078             for (var i = 0, len = collection._geometries.length; i < len; ++i) {
30079               array.push(this$1.extractGeometry(collection._geometries[i]));
30080             }
30081             return array.join(',')
30082           }
30083         };
30084
30085         /**
30086          * Object with properties corresponding to the geometry types. Property values
30087          * are functions that do the actual parsing.
30088          * @private
30089          */
30090         var parse$1 = {
30091           /**
30092            * Return point geometry given a point WKT fragment.
30093            *
30094            * @param {String} str A WKT fragment representing the point.
30095            * @return {Point} A point geometry.
30096            * @private
30097            */
30098           point: function point (str) {
30099             if (str === undefined) {
30100               return this.geometryFactory.createPoint()
30101             }
30102
30103             var coords = str.trim().split(regExes.spaces);
30104             return this.geometryFactory.createPoint(new Coordinate(Number.parseFloat(coords[0]),
30105               Number.parseFloat(coords[1])))
30106           },
30107
30108           /**
30109            * Return a multipoint geometry given a multipoint WKT fragment.
30110            *
30111            * @param {String} str A WKT fragment representing the multipoint.
30112            * @return {Point} A multipoint feature.
30113            * @private
30114            */
30115           multipoint: function multipoint (str) {
30116             var this$1 = this;
30117
30118             if (str === undefined) {
30119               return this.geometryFactory.createMultiPoint()
30120             }
30121
30122             var point;
30123             var points = str.trim().split(',');
30124             var components = [];
30125             for (var i = 0, len = points.length; i < len; ++i) {
30126               point = points[i].replace(regExes.trimParens, '$1');
30127               components.push(parse$1.point.apply(this$1, [point]));
30128             }
30129             return this.geometryFactory.createMultiPoint(components)
30130           },
30131
30132           /**
30133            * Return a linestring geometry given a linestring WKT fragment.
30134            *
30135            * @param {String} str A WKT fragment representing the linestring.
30136            * @return {LineString} A linestring geometry.
30137            * @private
30138            */
30139           linestring: function linestring (str) {
30140             if (str === undefined) {
30141               return this.geometryFactory.createLineString()
30142             }
30143
30144             var points = str.trim().split(',');
30145             var components = [];
30146             var coords;
30147             for (var i = 0, len = points.length; i < len; ++i) {
30148               coords = points[i].trim().split(regExes.spaces);
30149               components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));
30150             }
30151             return this.geometryFactory.createLineString(components)
30152           },
30153
30154           /**
30155            * Return a linearring geometry given a linearring WKT fragment.
30156            *
30157            * @param {String} str A WKT fragment representing the linearring.
30158            * @return {LinearRing} A linearring geometry.
30159            * @private
30160            */
30161           linearring: function linearring (str) {
30162             if (str === undefined) {
30163               return this.geometryFactory.createLinearRing()
30164             }
30165
30166             var points = str.trim().split(',');
30167             var components = [];
30168             var coords;
30169             for (var i = 0, len = points.length; i < len; ++i) {
30170               coords = points[i].trim().split(regExes.spaces);
30171               components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));
30172             }
30173             return this.geometryFactory.createLinearRing(components)
30174           },
30175
30176           /**
30177            * Return a multilinestring geometry given a multilinestring WKT fragment.
30178            *
30179            * @param {String} str A WKT fragment representing the multilinestring.
30180            * @return {MultiLineString} A multilinestring geometry.
30181            * @private
30182            */
30183           multilinestring: function multilinestring (str) {
30184             var this$1 = this;
30185
30186             if (str === undefined) {
30187               return this.geometryFactory.createMultiLineString()
30188             }
30189
30190             var line;
30191             var lines = str.trim().split(regExes.parenComma);
30192             var components = [];
30193             for (var i = 0, len = lines.length; i < len; ++i) {
30194               line = lines[i].replace(regExes.trimParens, '$1');
30195               components.push(parse$1.linestring.apply(this$1, [line]));
30196             }
30197             return this.geometryFactory.createMultiLineString(components)
30198           },
30199
30200           /**
30201            * Return a polygon geometry given a polygon WKT fragment.
30202            *
30203            * @param {String} str A WKT fragment representing the polygon.
30204            * @return {Polygon} A polygon geometry.
30205            * @private
30206            */
30207           polygon: function polygon (str) {
30208             var this$1 = this;
30209
30210             if (str === undefined) {
30211               return this.geometryFactory.createPolygon()
30212             }
30213
30214             var ring, linestring, linearring;
30215             var rings = str.trim().split(regExes.parenComma);
30216             var shell;
30217             var holes = [];
30218             for (var i = 0, len = rings.length; i < len; ++i) {
30219               ring = rings[i].replace(regExes.trimParens, '$1');
30220               linestring = parse$1.linestring.apply(this$1, [ring]);
30221               linearring = this$1.geometryFactory.createLinearRing(linestring._points);
30222               if (i === 0) {
30223                 shell = linearring;
30224               } else {
30225                 holes.push(linearring);
30226               }
30227             }
30228             return this.geometryFactory.createPolygon(shell, holes)
30229           },
30230
30231           /**
30232            * Return a multipolygon geometry given a multipolygon WKT fragment.
30233            *
30234            * @param {String} str A WKT fragment representing the multipolygon.
30235            * @return {MultiPolygon} A multipolygon geometry.
30236            * @private
30237            */
30238           multipolygon: function multipolygon (str) {
30239             var this$1 = this;
30240
30241             if (str === undefined) {
30242               return this.geometryFactory.createMultiPolygon()
30243             }
30244
30245             var polygon;
30246             var polygons = str.trim().split(regExes.doubleParenComma);
30247             var components = [];
30248             for (var i = 0, len = polygons.length; i < len; ++i) {
30249               polygon = polygons[i].replace(regExes.trimParens, '$1');
30250               components.push(parse$1.polygon.apply(this$1, [polygon]));
30251             }
30252             return this.geometryFactory.createMultiPolygon(components)
30253           },
30254
30255           /**
30256            * Return a geometrycollection given a geometrycollection WKT fragment.
30257            *
30258            * @param {String} str A WKT fragment representing the geometrycollection.
30259            * @return {GeometryCollection}
30260            * @private
30261            */
30262           geometrycollection: function geometrycollection (str) {
30263             var this$1 = this;
30264
30265             if (str === undefined) {
30266               return this.geometryFactory.createGeometryCollection()
30267             }
30268
30269             // separate components of the collection with |
30270             str = str.replace(/,\s*([A-Za-z])/g, '|$1');
30271             var wktArray = str.trim().split('|');
30272             var components = [];
30273             for (var i = 0, len = wktArray.length; i < len; ++i) {
30274               components.push(this$1.read(wktArray[i]));
30275             }
30276             return this.geometryFactory.createGeometryCollection(components)
30277           }
30278         };
30279
30280         /**
30281          * Writes the Well-Known Text representation of a {@link Geometry}. The
30282          * Well-Known Text format is defined in the <A
30283          * HREF="http://www.opengis.org/techno/specs.htm"> OGC Simple Features
30284          * Specification for SQL</A>.
30285          * <p>
30286          * The <code>WKTWriter</code> outputs coordinates rounded to the precision
30287          * model. Only the maximum number of decimal places necessary to represent the
30288          * ordinates to the required precision will be output.
30289          * <p>
30290          * The SFS WKT spec does not define a special tag for {@link LinearRing}s.
30291          * Under the spec, rings are output as <code>LINESTRING</code>s.
30292          */
30293
30294         /**
30295          * @param {GeometryFactory} geometryFactory
30296          * @constructor
30297          */
30298         var WKTWriter = function WKTWriter (geometryFactory) {
30299           this.parser = new WKTParser(geometryFactory);
30300         };
30301
30302         /**
30303          * Converts a <code>Geometry</code> to its Well-known Text representation.
30304          *
30305          * @param {Geometry} geometry a <code>Geometry</code> to process.
30306          * @return {string} a <Geometry Tagged Text> string (see the OpenGIS Simple
30307          *       Features Specification).
30308          * @memberof WKTWriter
30309          */
30310         WKTWriter.prototype.write = function write (geometry) {
30311           return this.parser.write(geometry)
30312         };
30313         /**
30314          * Generates the WKT for a <tt>LINESTRING</tt> specified by two
30315          * {@link Coordinate}s.
30316          *
30317          * @param p0 the first coordinate.
30318          * @param p1 the second coordinate.
30319          *
30320          * @return the WKT.
30321          * @private
30322          */
30323         WKTWriter.toLineString = function toLineString (p0, p1) {
30324           if (arguments.length !== 2) {
30325             throw new Error('Not implemented')
30326           }
30327           return 'LINESTRING ( ' + p0.x + ' ' + p0.y + ', ' + p1.x + ' ' + p1.y + ' )'
30328         };
30329
30330         var RuntimeException = (function (Error) {
30331           function RuntimeException (message) {
30332             Error.call(this, message);
30333             this.name = 'RuntimeException';
30334             this.message = message;
30335             this.stack = (new Error()).stack;
30336           }
30337
30338           if ( Error ) { RuntimeException.__proto__ = Error; }
30339           RuntimeException.prototype = Object.create( Error && Error.prototype );
30340           RuntimeException.prototype.constructor = RuntimeException;
30341
30342           return RuntimeException;
30343         }(Error));
30344
30345         var AssertionFailedException = (function (RuntimeException$$1) {
30346           function AssertionFailedException () {
30347             RuntimeException$$1.call(this);
30348             if (arguments.length === 0) {
30349               RuntimeException$$1.call(this);
30350             } else if (arguments.length === 1) {
30351               var message = arguments[0];
30352               RuntimeException$$1.call(this, message);
30353             }
30354           }
30355
30356           if ( RuntimeException$$1 ) { AssertionFailedException.__proto__ = RuntimeException$$1; }
30357           AssertionFailedException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );
30358           AssertionFailedException.prototype.constructor = AssertionFailedException;
30359           AssertionFailedException.prototype.interfaces_ = function interfaces_ () {
30360             return []
30361           };
30362           AssertionFailedException.prototype.getClass = function getClass () {
30363             return AssertionFailedException
30364           };
30365
30366           return AssertionFailedException;
30367         }(RuntimeException));
30368
30369         var Assert = function Assert () {};
30370
30371         Assert.prototype.interfaces_ = function interfaces_ () {
30372           return []
30373         };
30374         Assert.prototype.getClass = function getClass () {
30375           return Assert
30376         };
30377         Assert.shouldNeverReachHere = function shouldNeverReachHere () {
30378           if (arguments.length === 0) {
30379             Assert.shouldNeverReachHere(null);
30380           } else if (arguments.length === 1) {
30381             var message = arguments[0];
30382             throw new AssertionFailedException('Should never reach here' + (message !== null ? ': ' + message : ''))
30383           }
30384         };
30385         Assert.isTrue = function isTrue () {
30386           var assertion;
30387           var message;
30388           if (arguments.length === 1) {
30389             assertion = arguments[0];
30390             Assert.isTrue(assertion, null);
30391           } else if (arguments.length === 2) {
30392             assertion = arguments[0];
30393             message = arguments[1];
30394             if (!assertion) {
30395               if (message === null) {
30396                 throw new AssertionFailedException()
30397               } else {
30398                 throw new AssertionFailedException(message)
30399               }
30400             }
30401           }
30402         };
30403         Assert.equals = function equals () {
30404           var expectedValue;
30405           var actualValue;
30406           var message;
30407           if (arguments.length === 2) {
30408             expectedValue = arguments[0];
30409             actualValue = arguments[1];
30410             Assert.equals(expectedValue, actualValue, null);
30411           } else if (arguments.length === 3) {
30412             expectedValue = arguments[0];
30413             actualValue = arguments[1];
30414             message = arguments[2];
30415             if (!actualValue.equals(expectedValue)) {
30416               throw new AssertionFailedException('Expected ' + expectedValue + ' but encountered ' + actualValue + (message !== null ? ': ' + message : ''))
30417             }
30418           }
30419         };
30420
30421         var LineIntersector = function LineIntersector () {
30422           this._result = null;
30423           this._inputLines = Array(2).fill().map(function () { return Array(2); });
30424           this._intPt = new Array(2).fill(null);
30425           this._intLineIndex = null;
30426           this._isProper = null;
30427           this._pa = null;
30428           this._pb = null;
30429           this._precisionModel = null;
30430           this._intPt[0] = new Coordinate();
30431           this._intPt[1] = new Coordinate();
30432           this._pa = this._intPt[0];
30433           this._pb = this._intPt[1];
30434           this._result = 0;
30435         };
30436
30437         var staticAccessors$10 = { DONT_INTERSECT: { configurable: true },DO_INTERSECT: { configurable: true },COLLINEAR: { configurable: true },NO_INTERSECTION: { configurable: true },POINT_INTERSECTION: { configurable: true },COLLINEAR_INTERSECTION: { configurable: true } };
30438         LineIntersector.prototype.getIndexAlongSegment = function getIndexAlongSegment (segmentIndex, intIndex) {
30439           this.computeIntLineIndex();
30440           return this._intLineIndex[segmentIndex][intIndex]
30441         };
30442         LineIntersector.prototype.getTopologySummary = function getTopologySummary () {
30443           var catBuf = new StringBuffer();
30444           if (this.isEndPoint()) { catBuf.append(' endpoint'); }
30445           if (this._isProper) { catBuf.append(' proper'); }
30446           if (this.isCollinear()) { catBuf.append(' collinear'); }
30447           return catBuf.toString()
30448         };
30449         LineIntersector.prototype.computeIntersection = function computeIntersection (p1, p2, p3, p4) {
30450           this._inputLines[0][0] = p1;
30451           this._inputLines[0][1] = p2;
30452           this._inputLines[1][0] = p3;
30453           this._inputLines[1][1] = p4;
30454           this._result = this.computeIntersect(p1, p2, p3, p4);
30455         };
30456         LineIntersector.prototype.getIntersectionNum = function getIntersectionNum () {
30457           return this._result
30458         };
30459         LineIntersector.prototype.computeIntLineIndex = function computeIntLineIndex () {
30460           if (arguments.length === 0) {
30461             if (this._intLineIndex === null) {
30462               this._intLineIndex = Array(2).fill().map(function () { return Array(2); });
30463               this.computeIntLineIndex(0);
30464               this.computeIntLineIndex(1);
30465             }
30466           } else if (arguments.length === 1) {
30467             var segmentIndex = arguments[0];
30468             var dist0 = this.getEdgeDistance(segmentIndex, 0);
30469             var dist1 = this.getEdgeDistance(segmentIndex, 1);
30470             if (dist0 > dist1) {
30471               this._intLineIndex[segmentIndex][0] = 0;
30472               this._intLineIndex[segmentIndex][1] = 1;
30473             } else {
30474               this._intLineIndex[segmentIndex][0] = 1;
30475               this._intLineIndex[segmentIndex][1] = 0;
30476             }
30477           }
30478         };
30479         LineIntersector.prototype.isProper = function isProper () {
30480           return this.hasIntersection() && this._isProper
30481         };
30482         LineIntersector.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {
30483           this._precisionModel = precisionModel;
30484         };
30485         LineIntersector.prototype.isInteriorIntersection = function isInteriorIntersection () {
30486             var this$1 = this;
30487
30488           if (arguments.length === 0) {
30489             if (this.isInteriorIntersection(0)) { return true }
30490             if (this.isInteriorIntersection(1)) { return true }
30491             return false
30492           } else if (arguments.length === 1) {
30493             var inputLineIndex = arguments[0];
30494             for (var i = 0; i < this._result; i++) {
30495               if (!(this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][0]) || this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][1]))) {
30496                 return true
30497               }
30498             }
30499             return false
30500           }
30501         };
30502         LineIntersector.prototype.getIntersection = function getIntersection (intIndex) {
30503           return this._intPt[intIndex]
30504         };
30505         LineIntersector.prototype.isEndPoint = function isEndPoint () {
30506           return this.hasIntersection() && !this._isProper
30507         };
30508         LineIntersector.prototype.hasIntersection = function hasIntersection () {
30509           return this._result !== LineIntersector.NO_INTERSECTION
30510         };
30511         LineIntersector.prototype.getEdgeDistance = function getEdgeDistance (segmentIndex, intIndex) {
30512           var dist = LineIntersector.computeEdgeDistance(this._intPt[intIndex], this._inputLines[segmentIndex][0], this._inputLines[segmentIndex][1]);
30513           return dist
30514         };
30515         LineIntersector.prototype.isCollinear = function isCollinear () {
30516           return this._result === LineIntersector.COLLINEAR_INTERSECTION
30517         };
30518         LineIntersector.prototype.toString = function toString () {
30519           return WKTWriter.toLineString(this._inputLines[0][0], this._inputLines[0][1]) + ' - ' + WKTWriter.toLineString(this._inputLines[1][0], this._inputLines[1][1]) + this.getTopologySummary()
30520         };
30521         LineIntersector.prototype.getEndpoint = function getEndpoint (segmentIndex, ptIndex) {
30522           return this._inputLines[segmentIndex][ptIndex]
30523         };
30524         LineIntersector.prototype.isIntersection = function isIntersection (pt) {
30525             var this$1 = this;
30526
30527           for (var i = 0; i < this._result; i++) {
30528             if (this$1._intPt[i].equals2D(pt)) {
30529               return true
30530             }
30531           }
30532           return false
30533         };
30534         LineIntersector.prototype.getIntersectionAlongSegment = function getIntersectionAlongSegment (segmentIndex, intIndex) {
30535           this.computeIntLineIndex();
30536           return this._intPt[this._intLineIndex[segmentIndex][intIndex]]
30537         };
30538         LineIntersector.prototype.interfaces_ = function interfaces_ () {
30539           return []
30540         };
30541         LineIntersector.prototype.getClass = function getClass () {
30542           return LineIntersector
30543         };
30544         LineIntersector.computeEdgeDistance = function computeEdgeDistance (p, p0, p1) {
30545           var dx = Math.abs(p1.x - p0.x);
30546           var dy = Math.abs(p1.y - p0.y);
30547           var dist = -1.0;
30548           if (p.equals(p0)) {
30549             dist = 0.0;
30550           } else if (p.equals(p1)) {
30551             if (dx > dy) { dist = dx; } else { dist = dy; }
30552           } else {
30553             var pdx = Math.abs(p.x - p0.x);
30554             var pdy = Math.abs(p.y - p0.y);
30555             if (dx > dy) { dist = pdx; } else { dist = pdy; }
30556             if (dist === 0.0 && !p.equals(p0)) {
30557               dist = Math.max(pdx, pdy);
30558             }
30559           }
30560           Assert.isTrue(!(dist === 0.0 && !p.equals(p0)), 'Bad distance calculation');
30561           return dist
30562         };
30563         LineIntersector.nonRobustComputeEdgeDistance = function nonRobustComputeEdgeDistance (p, p1, p2) {
30564           var dx = p.x - p1.x;
30565           var dy = p.y - p1.y;
30566           var dist = Math.sqrt(dx * dx + dy * dy);
30567           Assert.isTrue(!(dist === 0.0 && !p.equals(p1)), 'Invalid distance calculation');
30568           return dist
30569         };
30570         staticAccessors$10.DONT_INTERSECT.get = function () { return 0 };
30571         staticAccessors$10.DO_INTERSECT.get = function () { return 1 };
30572         staticAccessors$10.COLLINEAR.get = function () { return 2 };
30573         staticAccessors$10.NO_INTERSECTION.get = function () { return 0 };
30574         staticAccessors$10.POINT_INTERSECTION.get = function () { return 1 };
30575         staticAccessors$10.COLLINEAR_INTERSECTION.get = function () { return 2 };
30576
30577         Object.defineProperties( LineIntersector, staticAccessors$10 );
30578
30579         var RobustLineIntersector = (function (LineIntersector$$1) {
30580           function RobustLineIntersector () {
30581             LineIntersector$$1.apply(this, arguments);
30582           }
30583
30584           if ( LineIntersector$$1 ) { RobustLineIntersector.__proto__ = LineIntersector$$1; }
30585           RobustLineIntersector.prototype = Object.create( LineIntersector$$1 && LineIntersector$$1.prototype );
30586           RobustLineIntersector.prototype.constructor = RobustLineIntersector;
30587
30588           RobustLineIntersector.prototype.isInSegmentEnvelopes = function isInSegmentEnvelopes (intPt) {
30589             var env0 = new Envelope(this._inputLines[0][0], this._inputLines[0][1]);
30590             var env1 = new Envelope(this._inputLines[1][0], this._inputLines[1][1]);
30591             return env0.contains(intPt) && env1.contains(intPt)
30592           };
30593           RobustLineIntersector.prototype.computeIntersection = function computeIntersection () {
30594             if (arguments.length === 3) {
30595               var p = arguments[0];
30596               var p1 = arguments[1];
30597               var p2 = arguments[2];
30598               this._isProper = false;
30599               if (Envelope.intersects(p1, p2, p)) {
30600                 if (CGAlgorithms.orientationIndex(p1, p2, p) === 0 && CGAlgorithms.orientationIndex(p2, p1, p) === 0) {
30601                   this._isProper = true;
30602                   if (p.equals(p1) || p.equals(p2)) {
30603                     this._isProper = false;
30604                   }
30605                   this._result = LineIntersector$$1.POINT_INTERSECTION;
30606                   return null
30607                 }
30608               }
30609               this._result = LineIntersector$$1.NO_INTERSECTION;
30610             } else { return LineIntersector$$1.prototype.computeIntersection.apply(this, arguments) }
30611           };
30612           RobustLineIntersector.prototype.normalizeToMinimum = function normalizeToMinimum (n1, n2, n3, n4, normPt) {
30613             normPt.x = this.smallestInAbsValue(n1.x, n2.x, n3.x, n4.x);
30614             normPt.y = this.smallestInAbsValue(n1.y, n2.y, n3.y, n4.y);
30615             n1.x -= normPt.x;
30616             n1.y -= normPt.y;
30617             n2.x -= normPt.x;
30618             n2.y -= normPt.y;
30619             n3.x -= normPt.x;
30620             n3.y -= normPt.y;
30621             n4.x -= normPt.x;
30622             n4.y -= normPt.y;
30623           };
30624           RobustLineIntersector.prototype.safeHCoordinateIntersection = function safeHCoordinateIntersection (p1, p2, q1, q2) {
30625             var intPt = null;
30626             try {
30627               intPt = HCoordinate.intersection(p1, p2, q1, q2);
30628             } catch (e) {
30629               if (e instanceof NotRepresentableException) {
30630                 intPt = RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2);
30631               } else { throw e }
30632             } finally {}
30633             return intPt
30634           };
30635           RobustLineIntersector.prototype.intersection = function intersection (p1, p2, q1, q2) {
30636             var intPt = this.intersectionWithNormalization(p1, p2, q1, q2);
30637             if (!this.isInSegmentEnvelopes(intPt)) {
30638               intPt = new Coordinate(RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2));
30639             }
30640             if (this._precisionModel !== null) {
30641               this._precisionModel.makePrecise(intPt);
30642             }
30643             return intPt
30644           };
30645           RobustLineIntersector.prototype.smallestInAbsValue = function smallestInAbsValue (x1, x2, x3, x4) {
30646             var x = x1;
30647             var xabs = Math.abs(x);
30648             if (Math.abs(x2) < xabs) {
30649               x = x2;
30650               xabs = Math.abs(x2);
30651             }
30652             if (Math.abs(x3) < xabs) {
30653               x = x3;
30654               xabs = Math.abs(x3);
30655             }
30656             if (Math.abs(x4) < xabs) {
30657               x = x4;
30658             }
30659             return x
30660           };
30661           RobustLineIntersector.prototype.checkDD = function checkDD (p1, p2, q1, q2, intPt) {
30662             var intPtDD = CGAlgorithmsDD.intersection(p1, p2, q1, q2);
30663             var isIn = this.isInSegmentEnvelopes(intPtDD);
30664             System.out.println('DD in env = ' + isIn + '  --------------------- ' + intPtDD);
30665             if (intPt.distance(intPtDD) > 0.0001) {
30666               System.out.println('Distance = ' + intPt.distance(intPtDD));
30667             }
30668           };
30669           RobustLineIntersector.prototype.intersectionWithNormalization = function intersectionWithNormalization (p1, p2, q1, q2) {
30670             var n1 = new Coordinate(p1);
30671             var n2 = new Coordinate(p2);
30672             var n3 = new Coordinate(q1);
30673             var n4 = new Coordinate(q2);
30674             var normPt = new Coordinate();
30675             this.normalizeToEnvCentre(n1, n2, n3, n4, normPt);
30676             var intPt = this.safeHCoordinateIntersection(n1, n2, n3, n4);
30677             intPt.x += normPt.x;
30678             intPt.y += normPt.y;
30679             return intPt
30680           };
30681           RobustLineIntersector.prototype.computeCollinearIntersection = function computeCollinearIntersection (p1, p2, q1, q2) {
30682             var p1q1p2 = Envelope.intersects(p1, p2, q1);
30683             var p1q2p2 = Envelope.intersects(p1, p2, q2);
30684             var q1p1q2 = Envelope.intersects(q1, q2, p1);
30685             var q1p2q2 = Envelope.intersects(q1, q2, p2);
30686             if (p1q1p2 && p1q2p2) {
30687               this._intPt[0] = q1;
30688               this._intPt[1] = q2;
30689               return LineIntersector$$1.COLLINEAR_INTERSECTION
30690             }
30691             if (q1p1q2 && q1p2q2) {
30692               this._intPt[0] = p1;
30693               this._intPt[1] = p2;
30694               return LineIntersector$$1.COLLINEAR_INTERSECTION
30695             }
30696             if (p1q1p2 && q1p1q2) {
30697               this._intPt[0] = q1;
30698               this._intPt[1] = p1;
30699               return q1.equals(p1) && !p1q2p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
30700             }
30701             if (p1q1p2 && q1p2q2) {
30702               this._intPt[0] = q1;
30703               this._intPt[1] = p2;
30704               return q1.equals(p2) && !p1q2p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
30705             }
30706             if (p1q2p2 && q1p1q2) {
30707               this._intPt[0] = q2;
30708               this._intPt[1] = p1;
30709               return q2.equals(p1) && !p1q1p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
30710             }
30711             if (p1q2p2 && q1p2q2) {
30712               this._intPt[0] = q2;
30713               this._intPt[1] = p2;
30714               return q2.equals(p2) && !p1q1p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
30715             }
30716             return LineIntersector$$1.NO_INTERSECTION
30717           };
30718           RobustLineIntersector.prototype.normalizeToEnvCentre = function normalizeToEnvCentre (n00, n01, n10, n11, normPt) {
30719             var minX0 = n00.x < n01.x ? n00.x : n01.x;
30720             var minY0 = n00.y < n01.y ? n00.y : n01.y;
30721             var maxX0 = n00.x > n01.x ? n00.x : n01.x;
30722             var maxY0 = n00.y > n01.y ? n00.y : n01.y;
30723             var minX1 = n10.x < n11.x ? n10.x : n11.x;
30724             var minY1 = n10.y < n11.y ? n10.y : n11.y;
30725             var maxX1 = n10.x > n11.x ? n10.x : n11.x;
30726             var maxY1 = n10.y > n11.y ? n10.y : n11.y;
30727             var intMinX = minX0 > minX1 ? minX0 : minX1;
30728             var intMaxX = maxX0 < maxX1 ? maxX0 : maxX1;
30729             var intMinY = minY0 > minY1 ? minY0 : minY1;
30730             var intMaxY = maxY0 < maxY1 ? maxY0 : maxY1;
30731             var intMidX = (intMinX + intMaxX) / 2.0;
30732             var intMidY = (intMinY + intMaxY) / 2.0;
30733             normPt.x = intMidX;
30734             normPt.y = intMidY;
30735             n00.x -= normPt.x;
30736             n00.y -= normPt.y;
30737             n01.x -= normPt.x;
30738             n01.y -= normPt.y;
30739             n10.x -= normPt.x;
30740             n10.y -= normPt.y;
30741             n11.x -= normPt.x;
30742             n11.y -= normPt.y;
30743           };
30744           RobustLineIntersector.prototype.computeIntersect = function computeIntersect (p1, p2, q1, q2) {
30745             this._isProper = false;
30746             if (!Envelope.intersects(p1, p2, q1, q2)) { return LineIntersector$$1.NO_INTERSECTION }
30747             var Pq1 = CGAlgorithms.orientationIndex(p1, p2, q1);
30748             var Pq2 = CGAlgorithms.orientationIndex(p1, p2, q2);
30749             if ((Pq1 > 0 && Pq2 > 0) || (Pq1 < 0 && Pq2 < 0)) {
30750               return LineIntersector$$1.NO_INTERSECTION
30751             }
30752             var Qp1 = CGAlgorithms.orientationIndex(q1, q2, p1);
30753             var Qp2 = CGAlgorithms.orientationIndex(q1, q2, p2);
30754             if ((Qp1 > 0 && Qp2 > 0) || (Qp1 < 0 && Qp2 < 0)) {
30755               return LineIntersector$$1.NO_INTERSECTION
30756             }
30757             var collinear = Pq1 === 0 && Pq2 === 0 && Qp1 === 0 && Qp2 === 0;
30758             if (collinear) {
30759               return this.computeCollinearIntersection(p1, p2, q1, q2)
30760             }
30761             if (Pq1 === 0 || Pq2 === 0 || Qp1 === 0 || Qp2 === 0) {
30762               this._isProper = false;
30763               if (p1.equals2D(q1) || p1.equals2D(q2)) {
30764                 this._intPt[0] = p1;
30765               } else if (p2.equals2D(q1) || p2.equals2D(q2)) {
30766                 this._intPt[0] = p2;
30767               } else if (Pq1 === 0) {
30768                 this._intPt[0] = new Coordinate(q1);
30769               } else if (Pq2 === 0) {
30770                 this._intPt[0] = new Coordinate(q2);
30771               } else if (Qp1 === 0) {
30772                 this._intPt[0] = new Coordinate(p1);
30773               } else if (Qp2 === 0) {
30774                 this._intPt[0] = new Coordinate(p2);
30775               }
30776             } else {
30777               this._isProper = true;
30778               this._intPt[0] = this.intersection(p1, p2, q1, q2);
30779             }
30780             return LineIntersector$$1.POINT_INTERSECTION
30781           };
30782           RobustLineIntersector.prototype.interfaces_ = function interfaces_ () {
30783             return []
30784           };
30785           RobustLineIntersector.prototype.getClass = function getClass () {
30786             return RobustLineIntersector
30787           };
30788           RobustLineIntersector.nearestEndpoint = function nearestEndpoint (p1, p2, q1, q2) {
30789             var nearestPt = p1;
30790             var minDist = CGAlgorithms.distancePointLine(p1, q1, q2);
30791             var dist = CGAlgorithms.distancePointLine(p2, q1, q2);
30792             if (dist < minDist) {
30793               minDist = dist;
30794               nearestPt = p2;
30795             }
30796             dist = CGAlgorithms.distancePointLine(q1, p1, p2);
30797             if (dist < minDist) {
30798               minDist = dist;
30799               nearestPt = q1;
30800             }
30801             dist = CGAlgorithms.distancePointLine(q2, p1, p2);
30802             if (dist < minDist) {
30803               minDist = dist;
30804               nearestPt = q2;
30805             }
30806             return nearestPt
30807           };
30808
30809           return RobustLineIntersector;
30810         }(LineIntersector));
30811
30812         var RobustDeterminant = function RobustDeterminant () {};
30813
30814         RobustDeterminant.prototype.interfaces_ = function interfaces_ () {
30815           return []
30816         };
30817         RobustDeterminant.prototype.getClass = function getClass () {
30818           return RobustDeterminant
30819         };
30820         RobustDeterminant.orientationIndex = function orientationIndex (p1, p2, q) {
30821           var dx1 = p2.x - p1.x;
30822           var dy1 = p2.y - p1.y;
30823           var dx2 = q.x - p2.x;
30824           var dy2 = q.y - p2.y;
30825           return RobustDeterminant.signOfDet2x2(dx1, dy1, dx2, dy2)
30826         };
30827         RobustDeterminant.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {
30828           var sign = null;
30829           var swap = null;
30830           var k = null;
30831           sign = 1;
30832           if (x1 === 0.0 || y2 === 0.0) {
30833             if (y1 === 0.0 || x2 === 0.0) {
30834               return 0
30835             } else if (y1 > 0) {
30836               if (x2 > 0) {
30837                 return -sign
30838               } else {
30839                 return sign
30840               }
30841             } else {
30842               if (x2 > 0) {
30843                 return sign
30844               } else {
30845                 return -sign
30846               }
30847             }
30848           }
30849           if (y1 === 0.0 || x2 === 0.0) {
30850             if (y2 > 0) {
30851               if (x1 > 0) {
30852                 return sign
30853               } else {
30854                 return -sign
30855               }
30856             } else {
30857               if (x1 > 0) {
30858                 return -sign
30859               } else {
30860                 return sign
30861               }
30862             }
30863           }
30864           if (y1 > 0.0) {
30865             if (y2 > 0.0) {
30866               if (y1 <= y2) ; else {
30867                 sign = -sign;
30868                 swap = x1;
30869                 x1 = x2;
30870                 x2 = swap;
30871                 swap = y1;
30872                 y1 = y2;
30873                 y2 = swap;
30874               }
30875             } else {
30876               if (y1 <= -y2) {
30877                 sign = -sign;
30878                 x2 = -x2;
30879                 y2 = -y2;
30880               } else {
30881                 swap = x1;
30882                 x1 = -x2;
30883                 x2 = swap;
30884                 swap = y1;
30885                 y1 = -y2;
30886                 y2 = swap;
30887               }
30888             }
30889           } else {
30890             if (y2 > 0.0) {
30891               if (-y1 <= y2) {
30892                 sign = -sign;
30893                 x1 = -x1;
30894                 y1 = -y1;
30895               } else {
30896                 swap = -x1;
30897                 x1 = x2;
30898                 x2 = swap;
30899                 swap = -y1;
30900                 y1 = y2;
30901                 y2 = swap;
30902               }
30903             } else {
30904               if (y1 >= y2) {
30905                 x1 = -x1;
30906                 y1 = -y1;
30907                 x2 = -x2;
30908                 y2 = -y2;
30909               } else {
30910                 sign = -sign;
30911                 swap = -x1;
30912                 x1 = -x2;
30913                 x2 = swap;
30914                 swap = -y1;
30915                 y1 = -y2;
30916                 y2 = swap;
30917               }
30918             }
30919           }
30920           if (x1 > 0.0) {
30921             if (x2 > 0.0) {
30922               if (x1 <= x2) ; else {
30923                 return sign
30924               }
30925             } else {
30926               return sign
30927             }
30928           } else {
30929             if (x2 > 0.0) {
30930               return -sign
30931             } else {
30932               if (x1 >= x2) {
30933                 sign = -sign;
30934                 x1 = -x1;
30935                 x2 = -x2;
30936               } else {
30937                 return -sign
30938               }
30939             }
30940           }
30941           while (true) {
30942             k = Math.floor(x2 / x1);
30943             x2 = x2 - k * x1;
30944             y2 = y2 - k * y1;
30945             if (y2 < 0.0) {
30946               return -sign
30947             }
30948             if (y2 > y1) {
30949               return sign
30950             }
30951             if (x1 > x2 + x2) {
30952               if (y1 < y2 + y2) {
30953                 return sign
30954               }
30955             } else {
30956               if (y1 > y2 + y2) {
30957                 return -sign
30958               } else {
30959                 x2 = x1 - x2;
30960                 y2 = y1 - y2;
30961                 sign = -sign;
30962               }
30963             }
30964             if (y2 === 0.0) {
30965               if (x2 === 0.0) {
30966                 return 0
30967               } else {
30968                 return -sign
30969               }
30970             }
30971             if (x2 === 0.0) {
30972               return sign
30973             }
30974             k = Math.floor(x1 / x2);
30975             x1 = x1 - k * x2;
30976             y1 = y1 - k * y2;
30977             if (y1 < 0.0) {
30978               return sign
30979             }
30980             if (y1 > y2) {
30981               return -sign
30982             }
30983             if (x2 > x1 + x1) {
30984               if (y2 < y1 + y1) {
30985                 return -sign
30986               }
30987             } else {
30988               if (y2 > y1 + y1) {
30989                 return sign
30990               } else {
30991                 x1 = x2 - x1;
30992                 y1 = y2 - y1;
30993                 sign = -sign;
30994               }
30995             }
30996             if (y1 === 0.0) {
30997               if (x1 === 0.0) {
30998                 return 0
30999               } else {
31000                 return sign
31001               }
31002             }
31003             if (x1 === 0.0) {
31004               return -sign
31005             }
31006           }
31007         };
31008
31009         var RayCrossingCounter = function RayCrossingCounter () {
31010           this._p = null;
31011           this._crossingCount = 0;
31012           this._isPointOnSegment = false;
31013           var p = arguments[0];
31014           this._p = p;
31015         };
31016         RayCrossingCounter.prototype.countSegment = function countSegment (p1, p2) {
31017           if (p1.x < this._p.x && p2.x < this._p.x) { return null }
31018           if (this._p.x === p2.x && this._p.y === p2.y) {
31019             this._isPointOnSegment = true;
31020             return null
31021           }
31022           if (p1.y === this._p.y && p2.y === this._p.y) {
31023             var minx = p1.x;
31024             var maxx = p2.x;
31025             if (minx > maxx) {
31026               minx = p2.x;
31027               maxx = p1.x;
31028             }
31029             if (this._p.x >= minx && this._p.x <= maxx) {
31030               this._isPointOnSegment = true;
31031             }
31032             return null
31033           }
31034           if ((p1.y > this._p.y && p2.y <= this._p.y) || (p2.y > this._p.y && p1.y <= this._p.y)) {
31035             var x1 = p1.x - this._p.x;
31036             var y1 = p1.y - this._p.y;
31037             var x2 = p2.x - this._p.x;
31038             var y2 = p2.y - this._p.y;
31039             var xIntSign = RobustDeterminant.signOfDet2x2(x1, y1, x2, y2);
31040             if (xIntSign === 0.0) {
31041               this._isPointOnSegment = true;
31042               return null
31043             }
31044             if (y2 < y1) { xIntSign = -xIntSign; }
31045             if (xIntSign > 0.0) {
31046               this._crossingCount++;
31047             }
31048           }
31049         };
31050         RayCrossingCounter.prototype.isPointInPolygon = function isPointInPolygon () {
31051           return this.getLocation() !== Location.EXTERIOR
31052         };
31053         RayCrossingCounter.prototype.getLocation = function getLocation () {
31054           if (this._isPointOnSegment) { return Location.BOUNDARY }
31055           if (this._crossingCount % 2 === 1) {
31056             return Location.INTERIOR
31057           }
31058           return Location.EXTERIOR
31059         };
31060         RayCrossingCounter.prototype.isOnSegment = function isOnSegment () {
31061           return this._isPointOnSegment
31062         };
31063         RayCrossingCounter.prototype.interfaces_ = function interfaces_ () {
31064           return []
31065         };
31066         RayCrossingCounter.prototype.getClass = function getClass () {
31067           return RayCrossingCounter
31068         };
31069         RayCrossingCounter.locatePointInRing = function locatePointInRing () {
31070           if (arguments[0] instanceof Coordinate && hasInterface(arguments[1], CoordinateSequence)) {
31071             var p = arguments[0];
31072             var ring = arguments[1];
31073             var counter = new RayCrossingCounter(p);
31074             var p1 = new Coordinate();
31075             var p2 = new Coordinate();
31076             for (var i = 1; i < ring.size(); i++) {
31077               ring.getCoordinate(i, p1);
31078               ring.getCoordinate(i - 1, p2);
31079               counter.countSegment(p1, p2);
31080               if (counter.isOnSegment()) { return counter.getLocation() }
31081             }
31082             return counter.getLocation()
31083           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Array) {
31084             var p$1 = arguments[0];
31085             var ring$1 = arguments[1];
31086             var counter$1 = new RayCrossingCounter(p$1);
31087             for (var i$1 = 1; i$1 < ring$1.length; i$1++) {
31088               var p1$1 = ring$1[i$1];
31089               var p2$1 = ring$1[i$1 - 1];
31090               counter$1.countSegment(p1$1, p2$1);
31091               if (counter$1.isOnSegment()) { return counter$1.getLocation() }
31092             }
31093             return counter$1.getLocation()
31094           }
31095         };
31096
31097         var CGAlgorithms = function CGAlgorithms () {};
31098
31099         var staticAccessors$3 = { CLOCKWISE: { configurable: true },RIGHT: { configurable: true },COUNTERCLOCKWISE: { configurable: true },LEFT: { configurable: true },COLLINEAR: { configurable: true },STRAIGHT: { configurable: true } };
31100
31101         CGAlgorithms.prototype.interfaces_ = function interfaces_ () {
31102           return []
31103         };
31104         CGAlgorithms.prototype.getClass = function getClass () {
31105           return CGAlgorithms
31106         };
31107         CGAlgorithms.orientationIndex = function orientationIndex (p1, p2, q) {
31108           return CGAlgorithmsDD.orientationIndex(p1, p2, q)
31109         };
31110         CGAlgorithms.signedArea = function signedArea () {
31111           if (arguments[0] instanceof Array) {
31112             var ring = arguments[0];
31113             if (ring.length < 3) { return 0.0 }
31114             var sum = 0.0;
31115             var x0 = ring[0].x;
31116             for (var i = 1; i < ring.length - 1; i++) {
31117               var x = ring[i].x - x0;
31118               var y1 = ring[i + 1].y;
31119               var y2 = ring[i - 1].y;
31120               sum += x * (y2 - y1);
31121             }
31122             return sum / 2.0
31123           } else if (hasInterface(arguments[0], CoordinateSequence)) {
31124             var ring$1 = arguments[0];
31125             var n = ring$1.size();
31126             if (n < 3) { return 0.0 }
31127             var p0 = new Coordinate();
31128             var p1 = new Coordinate();
31129             var p2 = new Coordinate();
31130             ring$1.getCoordinate(0, p1);
31131             ring$1.getCoordinate(1, p2);
31132             var x0$1 = p1.x;
31133             p2.x -= x0$1;
31134             var sum$1 = 0.0;
31135             for (var i$1 = 1; i$1 < n - 1; i$1++) {
31136               p0.y = p1.y;
31137               p1.x = p2.x;
31138               p1.y = p2.y;
31139               ring$1.getCoordinate(i$1 + 1, p2);
31140               p2.x -= x0$1;
31141               sum$1 += p1.x * (p0.y - p2.y);
31142             }
31143             return sum$1 / 2.0
31144           }
31145         };
31146         CGAlgorithms.distanceLineLine = function distanceLineLine (A, B, C, D) {
31147           if (A.equals(B)) { return CGAlgorithms.distancePointLine(A, C, D) }
31148           if (C.equals(D)) { return CGAlgorithms.distancePointLine(D, A, B) }
31149           var noIntersection = false;
31150           if (!Envelope.intersects(A, B, C, D)) {
31151             noIntersection = true;
31152           } else {
31153             var denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x);
31154             if (denom === 0) {
31155               noIntersection = true;
31156             } else {
31157               var rNumb = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y);
31158               var sNum = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y);
31159               var s = sNum / denom;
31160               var r = rNumb / denom;
31161               if (r < 0 || r > 1 || s < 0 || s > 1) {
31162                 noIntersection = true;
31163               }
31164             }
31165           }
31166           if (noIntersection) {
31167             return MathUtil.min(CGAlgorithms.distancePointLine(A, C, D), CGAlgorithms.distancePointLine(B, C, D), CGAlgorithms.distancePointLine(C, A, B), CGAlgorithms.distancePointLine(D, A, B))
31168           }
31169           return 0.0
31170         };
31171         CGAlgorithms.isPointInRing = function isPointInRing (p, ring) {
31172           return CGAlgorithms.locatePointInRing(p, ring) !== Location.EXTERIOR
31173         };
31174         CGAlgorithms.computeLength = function computeLength (pts) {
31175           var n = pts.size();
31176           if (n <= 1) { return 0.0 }
31177           var len = 0.0;
31178           var p = new Coordinate();
31179           pts.getCoordinate(0, p);
31180           var x0 = p.x;
31181           var y0 = p.y;
31182           for (var i = 1; i < n; i++) {
31183             pts.getCoordinate(i, p);
31184             var x1 = p.x;
31185             var y1 = p.y;
31186             var dx = x1 - x0;
31187             var dy = y1 - y0;
31188             len += Math.sqrt(dx * dx + dy * dy);
31189             x0 = x1;
31190             y0 = y1;
31191           }
31192           return len
31193         };
31194         CGAlgorithms.isCCW = function isCCW (ring) {
31195           var nPts = ring.length - 1;
31196           if (nPts < 3) { throw new IllegalArgumentException('Ring has fewer than 4 points, so orientation cannot be determined') }
31197           var hiPt = ring[0];
31198           var hiIndex = 0;
31199           for (var i = 1; i <= nPts; i++) {
31200             var p = ring[i];
31201             if (p.y > hiPt.y) {
31202               hiPt = p;
31203               hiIndex = i;
31204             }
31205           }
31206           var iPrev = hiIndex;
31207           do {
31208             iPrev = iPrev - 1;
31209             if (iPrev < 0) { iPrev = nPts; }
31210           } while (ring[iPrev].equals2D(hiPt) && iPrev !== hiIndex)
31211           var iNext = hiIndex;
31212           do {
31213             iNext = (iNext + 1) % nPts;
31214           } while (ring[iNext].equals2D(hiPt) && iNext !== hiIndex)
31215           var prev = ring[iPrev];
31216           var next = ring[iNext];
31217           if (prev.equals2D(hiPt) || next.equals2D(hiPt) || prev.equals2D(next)) { return false }
31218           var disc = CGAlgorithms.computeOrientation(prev, hiPt, next);
31219           var isCCW = false;
31220           if (disc === 0) {
31221             isCCW = prev.x > next.x;
31222           } else {
31223             isCCW = disc > 0;
31224           }
31225           return isCCW
31226         };
31227         CGAlgorithms.locatePointInRing = function locatePointInRing (p, ring) {
31228           return RayCrossingCounter.locatePointInRing(p, ring)
31229         };
31230         CGAlgorithms.distancePointLinePerpendicular = function distancePointLinePerpendicular (p, A, B) {
31231           var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);
31232           var s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2;
31233           return Math.abs(s) * Math.sqrt(len2)
31234         };
31235         CGAlgorithms.computeOrientation = function computeOrientation (p1, p2, q) {
31236           return CGAlgorithms.orientationIndex(p1, p2, q)
31237         };
31238         CGAlgorithms.distancePointLine = function distancePointLine () {
31239           if (arguments.length === 2) {
31240             var p = arguments[0];
31241             var line = arguments[1];
31242             if (line.length === 0) { throw new IllegalArgumentException('Line array must contain at least one vertex') }
31243             var minDistance = p.distance(line[0]);
31244             for (var i = 0; i < line.length - 1; i++) {
31245               var dist = CGAlgorithms.distancePointLine(p, line[i], line[i + 1]);
31246               if (dist < minDistance) {
31247                 minDistance = dist;
31248               }
31249             }
31250             return minDistance
31251           } else if (arguments.length === 3) {
31252             var p$1 = arguments[0];
31253             var A = arguments[1];
31254             var B = arguments[2];
31255             if (A.x === B.x && A.y === B.y) { return p$1.distance(A) }
31256             var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);
31257             var r = ((p$1.x - A.x) * (B.x - A.x) + (p$1.y - A.y) * (B.y - A.y)) / len2;
31258             if (r <= 0.0) { return p$1.distance(A) }
31259             if (r >= 1.0) { return p$1.distance(B) }
31260             var s = ((A.y - p$1.y) * (B.x - A.x) - (A.x - p$1.x) * (B.y - A.y)) / len2;
31261             return Math.abs(s) * Math.sqrt(len2)
31262           }
31263         };
31264         CGAlgorithms.isOnLine = function isOnLine (p, pt) {
31265           var lineIntersector = new RobustLineIntersector();
31266           for (var i = 1; i < pt.length; i++) {
31267             var p0 = pt[i - 1];
31268             var p1 = pt[i];
31269             lineIntersector.computeIntersection(p, p0, p1);
31270             if (lineIntersector.hasIntersection()) {
31271               return true
31272             }
31273           }
31274           return false
31275         };
31276         staticAccessors$3.CLOCKWISE.get = function () { return -1 };
31277         staticAccessors$3.RIGHT.get = function () { return CGAlgorithms.CLOCKWISE };
31278         staticAccessors$3.COUNTERCLOCKWISE.get = function () { return 1 };
31279         staticAccessors$3.LEFT.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };
31280         staticAccessors$3.COLLINEAR.get = function () { return 0 };
31281         staticAccessors$3.STRAIGHT.get = function () { return CGAlgorithms.COLLINEAR };
31282
31283         Object.defineProperties( CGAlgorithms, staticAccessors$3 );
31284
31285         var GeometryComponentFilter = function GeometryComponentFilter () {};
31286
31287         GeometryComponentFilter.prototype.filter = function filter (geom) {};
31288         GeometryComponentFilter.prototype.interfaces_ = function interfaces_ () {
31289           return []
31290         };
31291         GeometryComponentFilter.prototype.getClass = function getClass () {
31292           return GeometryComponentFilter
31293         };
31294
31295         var Geometry = function Geometry () {
31296           var factory = arguments[0];
31297
31298           this._envelope = null;
31299           this._factory = null;
31300           this._SRID = null;
31301           this._userData = null;
31302           this._factory = factory;
31303           this._SRID = factory.getSRID();
31304         };
31305
31306         var staticAccessors$11 = { serialVersionUID: { configurable: true },SORTINDEX_POINT: { configurable: true },SORTINDEX_MULTIPOINT: { configurable: true },SORTINDEX_LINESTRING: { configurable: true },SORTINDEX_LINEARRING: { configurable: true },SORTINDEX_MULTILINESTRING: { configurable: true },SORTINDEX_POLYGON: { configurable: true },SORTINDEX_MULTIPOLYGON: { configurable: true },SORTINDEX_GEOMETRYCOLLECTION: { configurable: true },geometryChangedFilter: { configurable: true } };
31307         Geometry.prototype.isGeometryCollection = function isGeometryCollection () {
31308           return this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION
31309         };
31310         Geometry.prototype.getFactory = function getFactory () {
31311           return this._factory
31312         };
31313         Geometry.prototype.getGeometryN = function getGeometryN (n) {
31314           return this
31315         };
31316         Geometry.prototype.getArea = function getArea () {
31317           return 0.0
31318         };
31319         Geometry.prototype.isRectangle = function isRectangle () {
31320           return false
31321         };
31322         Geometry.prototype.equals = function equals () {
31323           if (arguments[0] instanceof Geometry) {
31324             var g$1 = arguments[0];
31325             if (g$1 === null) { return false }
31326             return this.equalsTopo(g$1)
31327           } else if (arguments[0] instanceof Object) {
31328             var o = arguments[0];
31329             if (!(o instanceof Geometry)) { return false }
31330             var g = o;
31331             return this.equalsExact(g)
31332           }
31333         };
31334         Geometry.prototype.equalsExact = function equalsExact (other) {
31335           return this === other || this.equalsExact(other, 0)
31336         };
31337         Geometry.prototype.geometryChanged = function geometryChanged () {
31338           this.apply(Geometry.geometryChangedFilter);
31339         };
31340         Geometry.prototype.geometryChangedAction = function geometryChangedAction () {
31341           this._envelope = null;
31342         };
31343         Geometry.prototype.equalsNorm = function equalsNorm (g) {
31344           if (g === null) { return false }
31345           return this.norm().equalsExact(g.norm())
31346         };
31347         Geometry.prototype.getLength = function getLength () {
31348           return 0.0
31349         };
31350         Geometry.prototype.getNumGeometries = function getNumGeometries () {
31351           return 1
31352         };
31353         Geometry.prototype.compareTo = function compareTo () {
31354           if (arguments.length === 1) {
31355             var o = arguments[0];
31356             var other = o;
31357             if (this.getSortIndex() !== other.getSortIndex()) {
31358               return this.getSortIndex() - other.getSortIndex()
31359             }
31360             if (this.isEmpty() && other.isEmpty()) {
31361               return 0
31362             }
31363             if (this.isEmpty()) {
31364               return -1
31365             }
31366             if (other.isEmpty()) {
31367               return 1
31368             }
31369             return this.compareToSameClass(o)
31370           } else if (arguments.length === 2) {
31371             var other$1 = arguments[0];
31372             var comp = arguments[1];
31373             if (this.getSortIndex() !== other$1.getSortIndex()) {
31374               return this.getSortIndex() - other$1.getSortIndex()
31375             }
31376             if (this.isEmpty() && other$1.isEmpty()) {
31377               return 0
31378             }
31379             if (this.isEmpty()) {
31380               return -1
31381             }
31382             if (other$1.isEmpty()) {
31383               return 1
31384             }
31385             return this.compareToSameClass(other$1, comp)
31386           }
31387         };
31388         Geometry.prototype.getUserData = function getUserData () {
31389           return this._userData
31390         };
31391         Geometry.prototype.getSRID = function getSRID () {
31392           return this._SRID
31393         };
31394         Geometry.prototype.getEnvelope = function getEnvelope () {
31395           return this.getFactory().toGeometry(this.getEnvelopeInternal())
31396         };
31397         Geometry.prototype.checkNotGeometryCollection = function checkNotGeometryCollection (g) {
31398           if (g.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION) {
31399             throw new IllegalArgumentException('This method does not support GeometryCollection arguments')
31400           }
31401         };
31402         Geometry.prototype.equal = function equal (a, b, tolerance) {
31403           if (tolerance === 0) {
31404             return a.equals(b)
31405           }
31406           return a.distance(b) <= tolerance
31407         };
31408         Geometry.prototype.norm = function norm () {
31409           var copy = this.copy();
31410           copy.normalize();
31411           return copy
31412         };
31413         Geometry.prototype.getPrecisionModel = function getPrecisionModel () {
31414           return this._factory.getPrecisionModel()
31415         };
31416         Geometry.prototype.getEnvelopeInternal = function getEnvelopeInternal () {
31417           if (this._envelope === null) {
31418             this._envelope = this.computeEnvelopeInternal();
31419           }
31420           return new Envelope(this._envelope)
31421         };
31422         Geometry.prototype.setSRID = function setSRID (SRID) {
31423           this._SRID = SRID;
31424         };
31425         Geometry.prototype.setUserData = function setUserData (userData) {
31426           this._userData = userData;
31427         };
31428         Geometry.prototype.compare = function compare (a, b) {
31429           var i = a.iterator();
31430           var j = b.iterator();
31431           while (i.hasNext() && j.hasNext()) {
31432             var aElement = i.next();
31433             var bElement = j.next();
31434             var comparison = aElement.compareTo(bElement);
31435             if (comparison !== 0) {
31436               return comparison
31437             }
31438           }
31439           if (i.hasNext()) {
31440             return 1
31441           }
31442           if (j.hasNext()) {
31443             return -1
31444           }
31445           return 0
31446         };
31447         Geometry.prototype.hashCode = function hashCode () {
31448           return this.getEnvelopeInternal().hashCode()
31449         };
31450         Geometry.prototype.isGeometryCollectionOrDerived = function isGeometryCollectionOrDerived () {
31451           if (this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOINT || this.getSortIndex() === Geometry.SORTINDEX_MULTILINESTRING || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOLYGON) {
31452             return true
31453           }
31454           return false
31455         };
31456         Geometry.prototype.interfaces_ = function interfaces_ () {
31457           return [Clonable, Comparable, Serializable]
31458         };
31459         Geometry.prototype.getClass = function getClass () {
31460           return Geometry
31461         };
31462         Geometry.hasNonEmptyElements = function hasNonEmptyElements (geometries) {
31463           for (var i = 0; i < geometries.length; i++) {
31464             if (!geometries[i].isEmpty()) {
31465               return true
31466             }
31467           }
31468           return false
31469         };
31470         Geometry.hasNullElements = function hasNullElements (array) {
31471           for (var i = 0; i < array.length; i++) {
31472             if (array[i] === null) {
31473               return true
31474             }
31475           }
31476           return false
31477         };
31478         staticAccessors$11.serialVersionUID.get = function () { return 8763622679187376702 };
31479         staticAccessors$11.SORTINDEX_POINT.get = function () { return 0 };
31480         staticAccessors$11.SORTINDEX_MULTIPOINT.get = function () { return 1 };
31481         staticAccessors$11.SORTINDEX_LINESTRING.get = function () { return 2 };
31482         staticAccessors$11.SORTINDEX_LINEARRING.get = function () { return 3 };
31483         staticAccessors$11.SORTINDEX_MULTILINESTRING.get = function () { return 4 };
31484         staticAccessors$11.SORTINDEX_POLYGON.get = function () { return 5 };
31485         staticAccessors$11.SORTINDEX_MULTIPOLYGON.get = function () { return 6 };
31486         staticAccessors$11.SORTINDEX_GEOMETRYCOLLECTION.get = function () { return 7 };
31487         staticAccessors$11.geometryChangedFilter.get = function () { return geometryChangedFilter };
31488
31489         Object.defineProperties( Geometry, staticAccessors$11 );
31490
31491         var geometryChangedFilter = function geometryChangedFilter () {};
31492
31493         geometryChangedFilter.interfaces_ = function interfaces_ () {
31494           return [GeometryComponentFilter]
31495         };
31496         geometryChangedFilter.filter = function filter (geom) {
31497           geom.geometryChangedAction();
31498         };
31499
31500         var CoordinateFilter = function CoordinateFilter () {};
31501
31502         CoordinateFilter.prototype.filter = function filter (coord) {};
31503         CoordinateFilter.prototype.interfaces_ = function interfaces_ () {
31504           return []
31505         };
31506         CoordinateFilter.prototype.getClass = function getClass () {
31507           return CoordinateFilter
31508         };
31509
31510         var BoundaryNodeRule = function BoundaryNodeRule () {};
31511
31512         var staticAccessors$12 = { Mod2BoundaryNodeRule: { configurable: true },EndPointBoundaryNodeRule: { configurable: true },MultiValentEndPointBoundaryNodeRule: { configurable: true },MonoValentEndPointBoundaryNodeRule: { configurable: true },MOD2_BOUNDARY_RULE: { configurable: true },ENDPOINT_BOUNDARY_RULE: { configurable: true },MULTIVALENT_ENDPOINT_BOUNDARY_RULE: { configurable: true },MONOVALENT_ENDPOINT_BOUNDARY_RULE: { configurable: true },OGC_SFS_BOUNDARY_RULE: { configurable: true } };
31513
31514         BoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {};
31515         BoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
31516           return []
31517         };
31518         BoundaryNodeRule.prototype.getClass = function getClass () {
31519           return BoundaryNodeRule
31520         };
31521         staticAccessors$12.Mod2BoundaryNodeRule.get = function () { return Mod2BoundaryNodeRule };
31522         staticAccessors$12.EndPointBoundaryNodeRule.get = function () { return EndPointBoundaryNodeRule };
31523         staticAccessors$12.MultiValentEndPointBoundaryNodeRule.get = function () { return MultiValentEndPointBoundaryNodeRule };
31524         staticAccessors$12.MonoValentEndPointBoundaryNodeRule.get = function () { return MonoValentEndPointBoundaryNodeRule };
31525         staticAccessors$12.MOD2_BOUNDARY_RULE.get = function () { return new Mod2BoundaryNodeRule() };
31526         staticAccessors$12.ENDPOINT_BOUNDARY_RULE.get = function () { return new EndPointBoundaryNodeRule() };
31527         staticAccessors$12.MULTIVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MultiValentEndPointBoundaryNodeRule() };
31528         staticAccessors$12.MONOVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MonoValentEndPointBoundaryNodeRule() };
31529         staticAccessors$12.OGC_SFS_BOUNDARY_RULE.get = function () { return BoundaryNodeRule.MOD2_BOUNDARY_RULE };
31530
31531         Object.defineProperties( BoundaryNodeRule, staticAccessors$12 );
31532
31533         var Mod2BoundaryNodeRule = function Mod2BoundaryNodeRule () {};
31534
31535         Mod2BoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
31536           return boundaryCount % 2 === 1
31537         };
31538         Mod2BoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
31539           return [BoundaryNodeRule]
31540         };
31541         Mod2BoundaryNodeRule.prototype.getClass = function getClass () {
31542           return Mod2BoundaryNodeRule
31543         };
31544
31545         var EndPointBoundaryNodeRule = function EndPointBoundaryNodeRule () {};
31546
31547         EndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
31548           return boundaryCount > 0
31549         };
31550         EndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
31551           return [BoundaryNodeRule]
31552         };
31553         EndPointBoundaryNodeRule.prototype.getClass = function getClass () {
31554           return EndPointBoundaryNodeRule
31555         };
31556
31557         var MultiValentEndPointBoundaryNodeRule = function MultiValentEndPointBoundaryNodeRule () {};
31558
31559         MultiValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
31560           return boundaryCount > 1
31561         };
31562         MultiValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
31563           return [BoundaryNodeRule]
31564         };
31565         MultiValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {
31566           return MultiValentEndPointBoundaryNodeRule
31567         };
31568
31569         var MonoValentEndPointBoundaryNodeRule = function MonoValentEndPointBoundaryNodeRule () {};
31570
31571         MonoValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
31572           return boundaryCount === 1
31573         };
31574         MonoValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
31575           return [BoundaryNodeRule]
31576         };
31577         MonoValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {
31578           return MonoValentEndPointBoundaryNodeRule
31579         };
31580
31581         // import Iterator from './Iterator'
31582
31583         /**
31584          * @see http://download.oracle.com/javase/6/docs/api/java/util/Collection.html
31585          *
31586          * @constructor
31587          * @private
31588          */
31589         var Collection = function Collection () {};
31590
31591         Collection.prototype.add = function add () {};
31592
31593         /**
31594          * Appends all of the elements in the specified collection to the end of this
31595          * list, in the order that they are returned by the specified collection's
31596          * iterator (optional operation).
31597          * @param {javascript.util.Collection} c
31598          * @return {boolean}
31599          */
31600         Collection.prototype.addAll = function addAll () {};
31601
31602         /**
31603          * Returns true if this collection contains no elements.
31604          * @return {boolean}
31605          */
31606         Collection.prototype.isEmpty = function isEmpty () {};
31607
31608         /**
31609          * Returns an iterator over the elements in this collection.
31610          * @return {javascript.util.Iterator}
31611          */
31612         Collection.prototype.iterator = function iterator () {};
31613
31614         /**
31615          * Returns an iterator over the elements in this collection.
31616          * @return {number}
31617          */
31618         Collection.prototype.size = function size () {};
31619
31620         /**
31621          * Returns an array containing all of the elements in this collection.
31622          * @return {Array}
31623          */
31624         Collection.prototype.toArray = function toArray () {};
31625
31626         /**
31627          * Removes a single instance of the specified element from this collection if it
31628          * is present. (optional)
31629          * @param {Object} e
31630          * @return {boolean}
31631          */
31632         Collection.prototype.remove = function remove () {};
31633
31634         /**
31635          * @param {string=} message Optional message
31636          * @extends {Error}
31637          * @constructor
31638          * @private
31639          */
31640         function IndexOutOfBoundsException (message) {
31641           this.message = message || '';
31642         }
31643         IndexOutOfBoundsException.prototype = new Error();
31644
31645         /**
31646          * @type {string}
31647          */
31648         IndexOutOfBoundsException.prototype.name = 'IndexOutOfBoundsException';
31649
31650         /**
31651          * @see http://download.oracle.com/javase/6/docs/api/java/util/Iterator.html
31652          * @constructor
31653          * @private
31654          */
31655         var Iterator$1 = function Iterator () {};
31656
31657         Iterator$1.prototype.hasNext = function hasNext () {};
31658
31659         /**
31660          * Returns the next element in the iteration.
31661          * @return {Object}
31662          */
31663         Iterator$1.prototype.next = function next () {};
31664
31665         /**
31666          * Removes from the underlying collection the last element returned by the
31667          * iterator (optional operation).
31668          */
31669         Iterator$1.prototype.remove = function remove () {};
31670
31671         /**
31672          * @see http://download.oracle.com/javase/6/docs/api/java/util/List.html
31673          *
31674          * @extends {javascript.util.Collection}
31675          * @constructor
31676          * @private
31677          */
31678         var List = (function (Collection$$1) {
31679           function List () {
31680             Collection$$1.apply(this, arguments);
31681           }
31682
31683           if ( Collection$$1 ) { List.__proto__ = Collection$$1; }
31684           List.prototype = Object.create( Collection$$1 && Collection$$1.prototype );
31685           List.prototype.constructor = List;
31686
31687           List.prototype.get = function get () { };
31688
31689           /**
31690            * Replaces the element at the specified position in this list with the
31691            * specified element (optional operation).
31692            * @param {number} index
31693            * @param {Object} e
31694            * @return {Object}
31695            */
31696           List.prototype.set = function set () { };
31697
31698           /**
31699            * Returns true if this collection contains no elements.
31700            * @return {boolean}
31701            */
31702           List.prototype.isEmpty = function isEmpty () { };
31703
31704           return List;
31705         }(Collection));
31706
31707         /**
31708          * @param {string=} message Optional message
31709          * @extends {Error}
31710          * @constructor
31711          * @private
31712          */
31713         function NoSuchElementException (message) {
31714           this.message = message || '';
31715         }
31716         NoSuchElementException.prototype = new Error();
31717
31718         /**
31719          * @type {string}
31720          */
31721         NoSuchElementException.prototype.name = 'NoSuchElementException';
31722
31723         // import OperationNotSupported from './OperationNotSupported'
31724
31725         /**
31726          * @see http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html
31727          *
31728          * @extends List
31729          * @private
31730          */
31731         var ArrayList = (function (List$$1) {
31732           function ArrayList () {
31733             List$$1.call(this);
31734             this.array_ = [];
31735
31736             if (arguments[0] instanceof Collection) {
31737               this.addAll(arguments[0]);
31738             }
31739           }
31740
31741           if ( List$$1 ) { ArrayList.__proto__ = List$$1; }
31742           ArrayList.prototype = Object.create( List$$1 && List$$1.prototype );
31743           ArrayList.prototype.constructor = ArrayList;
31744
31745           ArrayList.prototype.ensureCapacity = function ensureCapacity () {};
31746           ArrayList.prototype.interfaces_ = function interfaces_ () { return [List$$1, Collection] };
31747
31748           /**
31749            * @override
31750            */
31751           ArrayList.prototype.add = function add (e) {
31752             if (arguments.length === 1) {
31753               this.array_.push(e);
31754             } else {
31755               this.array_.splice(arguments[0], arguments[1]);
31756             }
31757             return true
31758           };
31759
31760           ArrayList.prototype.clear = function clear () {
31761             this.array_ = [];
31762           };
31763
31764           /**
31765            * @override
31766            */
31767           ArrayList.prototype.addAll = function addAll (c) {
31768             var this$1 = this;
31769
31770             for (var i = c.iterator(); i.hasNext();) {
31771               this$1.add(i.next());
31772             }
31773             return true
31774           };
31775
31776           /**
31777            * @override
31778            */
31779           ArrayList.prototype.set = function set (index, element) {
31780             var oldElement = this.array_[index];
31781             this.array_[index] = element;
31782             return oldElement
31783           };
31784
31785           /**
31786            * @override
31787            */
31788           ArrayList.prototype.iterator = function iterator () {
31789             return new Iterator_(this)
31790           };
31791
31792           /**
31793            * @override
31794            */
31795           ArrayList.prototype.get = function get (index) {
31796             if (index < 0 || index >= this.size()) {
31797               throw new IndexOutOfBoundsException()
31798             }
31799
31800             return this.array_[index]
31801           };
31802
31803           /**
31804            * @override
31805            */
31806           ArrayList.prototype.isEmpty = function isEmpty () {
31807             return this.array_.length === 0
31808           };
31809
31810           /**
31811            * @override
31812            */
31813           ArrayList.prototype.size = function size () {
31814             return this.array_.length
31815           };
31816
31817           /**
31818            * @override
31819            */
31820           ArrayList.prototype.toArray = function toArray () {
31821             var this$1 = this;
31822
31823             var array = [];
31824
31825             for (var i = 0, len = this.array_.length; i < len; i++) {
31826               array.push(this$1.array_[i]);
31827             }
31828
31829             return array
31830           };
31831
31832           /**
31833            * @override
31834            */
31835           ArrayList.prototype.remove = function remove (o) {
31836             var this$1 = this;
31837
31838             var found = false;
31839
31840             for (var i = 0, len = this.array_.length; i < len; i++) {
31841               if (this$1.array_[i] === o) {
31842                 this$1.array_.splice(i, 1);
31843                 found = true;
31844                 break
31845               }
31846             }
31847
31848             return found
31849           };
31850
31851           return ArrayList;
31852         }(List));
31853
31854         /**
31855          * @extends {Iterator}
31856          * @param {ArrayList} arrayList
31857          * @constructor
31858          * @private
31859          */
31860         var Iterator_ = (function (Iterator$$1) {
31861           function Iterator_ (arrayList) {
31862             Iterator$$1.call(this);
31863             /**
31864              * @type {ArrayList}
31865              * @private
31866             */
31867             this.arrayList_ = arrayList;
31868             /**
31869              * @type {number}
31870              * @private
31871             */
31872             this.position_ = 0;
31873           }
31874
31875           if ( Iterator$$1 ) { Iterator_.__proto__ = Iterator$$1; }
31876           Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );
31877           Iterator_.prototype.constructor = Iterator_;
31878
31879           /**
31880            * @override
31881            */
31882           Iterator_.prototype.next = function next () {
31883             if (this.position_ === this.arrayList_.size()) {
31884               throw new NoSuchElementException()
31885             }
31886             return this.arrayList_.get(this.position_++)
31887           };
31888
31889           /**
31890            * @override
31891            */
31892           Iterator_.prototype.hasNext = function hasNext () {
31893             if (this.position_ < this.arrayList_.size()) {
31894               return true
31895             } else {
31896               return false
31897             }
31898           };
31899
31900           /**
31901            * TODO: should be in ListIterator
31902            * @override
31903            */
31904           Iterator_.prototype.set = function set (element) {
31905             return this.arrayList_.set(this.position_ - 1, element)
31906           };
31907
31908           /**
31909            * @override
31910            */
31911           Iterator_.prototype.remove = function remove () {
31912             this.arrayList_.remove(this.arrayList_.get(this.position_));
31913           };
31914
31915           return Iterator_;
31916         }(Iterator$1));
31917
31918         var CoordinateList = (function (ArrayList$$1) {
31919           function CoordinateList () {
31920             ArrayList$$1.call(this);
31921             if (arguments.length === 0) ; else if (arguments.length === 1) {
31922               var coord = arguments[0];
31923               this.ensureCapacity(coord.length);
31924               this.add(coord, true);
31925             } else if (arguments.length === 2) {
31926               var coord$1 = arguments[0];
31927               var allowRepeated = arguments[1];
31928               this.ensureCapacity(coord$1.length);
31929               this.add(coord$1, allowRepeated);
31930             }
31931           }
31932
31933           if ( ArrayList$$1 ) { CoordinateList.__proto__ = ArrayList$$1; }
31934           CoordinateList.prototype = Object.create( ArrayList$$1 && ArrayList$$1.prototype );
31935           CoordinateList.prototype.constructor = CoordinateList;
31936
31937           var staticAccessors = { coordArrayType: { configurable: true } };
31938           staticAccessors.coordArrayType.get = function () { return new Array(0).fill(null) };
31939           CoordinateList.prototype.getCoordinate = function getCoordinate (i) {
31940             return this.get(i)
31941           };
31942           CoordinateList.prototype.addAll = function addAll () {
31943             var this$1 = this;
31944
31945             if (arguments.length === 2) {
31946               var coll = arguments[0];
31947               var allowRepeated = arguments[1];
31948               var isChanged = false;
31949               for (var i = coll.iterator(); i.hasNext();) {
31950                 this$1.add(i.next(), allowRepeated);
31951                 isChanged = true;
31952               }
31953               return isChanged
31954             } else { return ArrayList$$1.prototype.addAll.apply(this, arguments) }
31955           };
31956           CoordinateList.prototype.clone = function clone () {
31957             var this$1 = this;
31958
31959             var clone = ArrayList$$1.prototype.clone.call(this);
31960             for (var i = 0; i < this.size(); i++) {
31961               clone.add(i, this$1.get(i).copy());
31962             }
31963             return clone
31964           };
31965           CoordinateList.prototype.toCoordinateArray = function toCoordinateArray () {
31966             return this.toArray(CoordinateList.coordArrayType)
31967           };
31968           CoordinateList.prototype.add = function add () {
31969             var this$1 = this;
31970
31971             if (arguments.length === 1) {
31972               var coord = arguments[0];
31973               ArrayList$$1.prototype.add.call(this, coord);
31974             } else if (arguments.length === 2) {
31975               if (arguments[0] instanceof Array && typeof arguments[1] === 'boolean') {
31976                 var coord$1 = arguments[0];
31977                 var allowRepeated = arguments[1];
31978                 this.add(coord$1, allowRepeated, true);
31979                 return true
31980               } else if (arguments[0] instanceof Coordinate && typeof arguments[1] === 'boolean') {
31981                 var coord$2 = arguments[0];
31982                 var allowRepeated$1 = arguments[1];
31983                 if (!allowRepeated$1) {
31984                   if (this.size() >= 1) {
31985                     var last = this.get(this.size() - 1);
31986                     if (last.equals2D(coord$2)) { return null }
31987                   }
31988                 }
31989                 ArrayList$$1.prototype.add.call(this, coord$2);
31990               } else if (arguments[0] instanceof Object && typeof arguments[1] === 'boolean') {
31991                 var obj = arguments[0];
31992                 var allowRepeated$2 = arguments[1];
31993                 this.add(obj, allowRepeated$2);
31994                 return true
31995               }
31996             } else if (arguments.length === 3) {
31997               if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Array && typeof arguments[1] === 'boolean')) {
31998                 var coord$3 = arguments[0];
31999                 var allowRepeated$3 = arguments[1];
32000                 var direction = arguments[2];
32001                 if (direction) {
32002                   for (var i$1 = 0; i$1 < coord$3.length; i$1++) {
32003                     this$1.add(coord$3[i$1], allowRepeated$3);
32004                   }
32005                 } else {
32006                   for (var i$2 = coord$3.length - 1; i$2 >= 0; i$2--) {
32007                     this$1.add(coord$3[i$2], allowRepeated$3);
32008                   }
32009                 }
32010                 return true
32011               } else if (typeof arguments[2] === 'boolean' && (Number.isInteger(arguments[0]) && arguments[1] instanceof Coordinate)) {
32012                 var i$3 = arguments[0];
32013                 var coord$4 = arguments[1];
32014                 var allowRepeated$4 = arguments[2];
32015                 if (!allowRepeated$4) {
32016                   var size = this.size();
32017                   if (size > 0) {
32018                     if (i$3 > 0) {
32019                       var prev = this.get(i$3 - 1);
32020                       if (prev.equals2D(coord$4)) { return null }
32021                     }
32022                     if (i$3 < size) {
32023                       var next = this.get(i$3);
32024                       if (next.equals2D(coord$4)) { return null }
32025                     }
32026                   }
32027                 }
32028                 ArrayList$$1.prototype.add.call(this, i$3, coord$4);
32029               }
32030             } else if (arguments.length === 4) {
32031               var coord$5 = arguments[0];
32032               var allowRepeated$5 = arguments[1];
32033               var start = arguments[2];
32034               var end = arguments[3];
32035               var inc = 1;
32036               if (start > end) { inc = -1; }
32037               for (var i = start; i !== end; i += inc) {
32038                 this$1.add(coord$5[i], allowRepeated$5);
32039               }
32040               return true
32041             }
32042           };
32043           CoordinateList.prototype.closeRing = function closeRing () {
32044             if (this.size() > 0) { this.add(new Coordinate(this.get(0)), false); }
32045           };
32046           CoordinateList.prototype.interfaces_ = function interfaces_ () {
32047             return []
32048           };
32049           CoordinateList.prototype.getClass = function getClass () {
32050             return CoordinateList
32051           };
32052
32053           Object.defineProperties( CoordinateList, staticAccessors );
32054
32055           return CoordinateList;
32056         }(ArrayList));
32057
32058         var CoordinateArrays = function CoordinateArrays () {};
32059
32060         var staticAccessors$13 = { ForwardComparator: { configurable: true },BidirectionalComparator: { configurable: true },coordArrayType: { configurable: true } };
32061
32062         staticAccessors$13.ForwardComparator.get = function () { return ForwardComparator };
32063         staticAccessors$13.BidirectionalComparator.get = function () { return BidirectionalComparator };
32064         staticAccessors$13.coordArrayType.get = function () { return new Array(0).fill(null) };
32065
32066         CoordinateArrays.prototype.interfaces_ = function interfaces_ () {
32067           return []
32068         };
32069         CoordinateArrays.prototype.getClass = function getClass () {
32070           return CoordinateArrays
32071         };
32072         CoordinateArrays.isRing = function isRing (pts) {
32073           if (pts.length < 4) { return false }
32074           if (!pts[0].equals2D(pts[pts.length - 1])) { return false }
32075           return true
32076         };
32077         CoordinateArrays.ptNotInList = function ptNotInList (testPts, pts) {
32078           for (var i = 0; i < testPts.length; i++) {
32079             var testPt = testPts[i];
32080             if (CoordinateArrays.indexOf(testPt, pts) < 0) { return testPt }
32081           }
32082           return null
32083         };
32084         CoordinateArrays.scroll = function scroll (coordinates, firstCoordinate) {
32085           var i = CoordinateArrays.indexOf(firstCoordinate, coordinates);
32086           if (i < 0) { return null }
32087           var newCoordinates = new Array(coordinates.length).fill(null);
32088           System.arraycopy(coordinates, i, newCoordinates, 0, coordinates.length - i);
32089           System.arraycopy(coordinates, 0, newCoordinates, coordinates.length - i, i);
32090           System.arraycopy(newCoordinates, 0, coordinates, 0, coordinates.length);
32091         };
32092         CoordinateArrays.equals = function equals () {
32093           if (arguments.length === 2) {
32094             var coord1 = arguments[0];
32095             var coord2 = arguments[1];
32096             if (coord1 === coord2) { return true }
32097             if (coord1 === null || coord2 === null) { return false }
32098             if (coord1.length !== coord2.length) { return false }
32099             for (var i = 0; i < coord1.length; i++) {
32100               if (!coord1[i].equals(coord2[i])) { return false }
32101             }
32102             return true
32103           } else if (arguments.length === 3) {
32104             var coord1$1 = arguments[0];
32105             var coord2$1 = arguments[1];
32106             var coordinateComparator = arguments[2];
32107             if (coord1$1 === coord2$1) { return true }
32108             if (coord1$1 === null || coord2$1 === null) { return false }
32109             if (coord1$1.length !== coord2$1.length) { return false }
32110             for (var i$1 = 0; i$1 < coord1$1.length; i$1++) {
32111               if (coordinateComparator.compare(coord1$1[i$1], coord2$1[i$1]) !== 0) { return false }
32112             }
32113             return true
32114           }
32115         };
32116         CoordinateArrays.intersection = function intersection (coordinates, env) {
32117           var coordList = new CoordinateList();
32118           for (var i = 0; i < coordinates.length; i++) {
32119             if (env.intersects(coordinates[i])) { coordList.add(coordinates[i], true); }
32120           }
32121           return coordList.toCoordinateArray()
32122         };
32123         CoordinateArrays.hasRepeatedPoints = function hasRepeatedPoints (coord) {
32124           for (var i = 1; i < coord.length; i++) {
32125             if (coord[i - 1].equals(coord[i])) {
32126               return true
32127             }
32128           }
32129           return false
32130         };
32131         CoordinateArrays.removeRepeatedPoints = function removeRepeatedPoints (coord) {
32132           if (!CoordinateArrays.hasRepeatedPoints(coord)) { return coord }
32133           var coordList = new CoordinateList(coord, false);
32134           return coordList.toCoordinateArray()
32135         };
32136         CoordinateArrays.reverse = function reverse (coord) {
32137           var last = coord.length - 1;
32138           var mid = Math.trunc(last / 2);
32139           for (var i = 0; i <= mid; i++) {
32140             var tmp = coord[i];
32141             coord[i] = coord[last - i];
32142             coord[last - i] = tmp;
32143           }
32144         };
32145         CoordinateArrays.removeNull = function removeNull (coord) {
32146           var nonNull = 0;
32147           for (var i = 0; i < coord.length; i++) {
32148             if (coord[i] !== null) { nonNull++; }
32149           }
32150           var newCoord = new Array(nonNull).fill(null);
32151           if (nonNull === 0) { return newCoord }
32152           var j = 0;
32153           for (var i$1 = 0; i$1 < coord.length; i$1++) {
32154             if (coord[i$1] !== null) { newCoord[j++] = coord[i$1]; }
32155           }
32156           return newCoord
32157         };
32158         CoordinateArrays.copyDeep = function copyDeep () {
32159           if (arguments.length === 1) {
32160             var coordinates = arguments[0];
32161             var copy = new Array(coordinates.length).fill(null);
32162             for (var i = 0; i < coordinates.length; i++) {
32163               copy[i] = new Coordinate(coordinates[i]);
32164             }
32165             return copy
32166           } else if (arguments.length === 5) {
32167             var src = arguments[0];
32168             var srcStart = arguments[1];
32169             var dest = arguments[2];
32170             var destStart = arguments[3];
32171             var length = arguments[4];
32172             for (var i$1 = 0; i$1 < length; i$1++) {
32173               dest[destStart + i$1] = new Coordinate(src[srcStart + i$1]);
32174             }
32175           }
32176         };
32177         CoordinateArrays.isEqualReversed = function isEqualReversed (pts1, pts2) {
32178           for (var i = 0; i < pts1.length; i++) {
32179             var p1 = pts1[i];
32180             var p2 = pts2[pts1.length - i - 1];
32181             if (p1.compareTo(p2) !== 0) { return false }
32182           }
32183           return true
32184         };
32185         CoordinateArrays.envelope = function envelope (coordinates) {
32186           var env = new Envelope();
32187           for (var i = 0; i < coordinates.length; i++) {
32188             env.expandToInclude(coordinates[i]);
32189           }
32190           return env
32191         };
32192         CoordinateArrays.toCoordinateArray = function toCoordinateArray (coordList) {
32193           return coordList.toArray(CoordinateArrays.coordArrayType)
32194         };
32195         CoordinateArrays.atLeastNCoordinatesOrNothing = function atLeastNCoordinatesOrNothing (n, c) {
32196           return c.length >= n ? c : []
32197         };
32198         CoordinateArrays.indexOf = function indexOf (coordinate, coordinates) {
32199           for (var i = 0; i < coordinates.length; i++) {
32200             if (coordinate.equals(coordinates[i])) {
32201               return i
32202             }
32203           }
32204           return -1
32205         };
32206         CoordinateArrays.increasingDirection = function increasingDirection (pts) {
32207           for (var i = 0; i < Math.trunc(pts.length / 2); i++) {
32208             var j = pts.length - 1 - i;
32209             var comp = pts[i].compareTo(pts[j]);
32210             if (comp !== 0) { return comp }
32211           }
32212           return 1
32213         };
32214         CoordinateArrays.compare = function compare (pts1, pts2) {
32215           var i = 0;
32216           while (i < pts1.length && i < pts2.length) {
32217             var compare = pts1[i].compareTo(pts2[i]);
32218             if (compare !== 0) { return compare }
32219             i++;
32220           }
32221           if (i < pts2.length) { return -1 }
32222           if (i < pts1.length) { return 1 }
32223           return 0
32224         };
32225         CoordinateArrays.minCoordinate = function minCoordinate (coordinates) {
32226           var minCoord = null;
32227           for (var i = 0; i < coordinates.length; i++) {
32228             if (minCoord === null || minCoord.compareTo(coordinates[i]) > 0) {
32229               minCoord = coordinates[i];
32230             }
32231           }
32232           return minCoord
32233         };
32234         CoordinateArrays.extract = function extract (pts, start, end) {
32235           start = MathUtil.clamp(start, 0, pts.length);
32236           end = MathUtil.clamp(end, -1, pts.length);
32237           var npts = end - start + 1;
32238           if (end < 0) { npts = 0; }
32239           if (start >= pts.length) { npts = 0; }
32240           if (end < start) { npts = 0; }
32241           var extractPts = new Array(npts).fill(null);
32242           if (npts === 0) { return extractPts }
32243           var iPts = 0;
32244           for (var i = start; i <= end; i++) {
32245             extractPts[iPts++] = pts[i];
32246           }
32247           return extractPts
32248         };
32249
32250         Object.defineProperties( CoordinateArrays, staticAccessors$13 );
32251
32252         var ForwardComparator = function ForwardComparator () {};
32253
32254         ForwardComparator.prototype.compare = function compare (o1, o2) {
32255           var pts1 = o1;
32256           var pts2 = o2;
32257           return CoordinateArrays.compare(pts1, pts2)
32258         };
32259         ForwardComparator.prototype.interfaces_ = function interfaces_ () {
32260           return [Comparator]
32261         };
32262         ForwardComparator.prototype.getClass = function getClass () {
32263           return ForwardComparator
32264         };
32265
32266         var BidirectionalComparator = function BidirectionalComparator () {};
32267
32268         BidirectionalComparator.prototype.compare = function compare (o1, o2) {
32269           var pts1 = o1;
32270           var pts2 = o2;
32271           if (pts1.length < pts2.length) { return -1 }
32272           if (pts1.length > pts2.length) { return 1 }
32273           if (pts1.length === 0) { return 0 }
32274           var forwardComp = CoordinateArrays.compare(pts1, pts2);
32275           var isEqualRev = CoordinateArrays.isEqualReversed(pts1, pts2);
32276           if (isEqualRev) { return 0 }
32277           return forwardComp
32278         };
32279         BidirectionalComparator.prototype.OLDcompare = function OLDcompare (o1, o2) {
32280           var pts1 = o1;
32281           var pts2 = o2;
32282           if (pts1.length < pts2.length) { return -1 }
32283           if (pts1.length > pts2.length) { return 1 }
32284           if (pts1.length === 0) { return 0 }
32285           var dir1 = CoordinateArrays.increasingDirection(pts1);
32286           var dir2 = CoordinateArrays.increasingDirection(pts2);
32287           var i1 = dir1 > 0 ? 0 : pts1.length - 1;
32288           var i2 = dir2 > 0 ? 0 : pts1.length - 1;
32289           for (var i = 0; i < pts1.length; i++) {
32290             var comparePt = pts1[i1].compareTo(pts2[i2]);
32291             if (comparePt !== 0) { return comparePt }
32292             i1 += dir1;
32293             i2 += dir2;
32294           }
32295           return 0
32296         };
32297         BidirectionalComparator.prototype.interfaces_ = function interfaces_ () {
32298           return [Comparator]
32299         };
32300         BidirectionalComparator.prototype.getClass = function getClass () {
32301           return BidirectionalComparator
32302         };
32303
32304         /**
32305          * @see http://download.oracle.com/javase/6/docs/api/java/util/Map.html
32306          *
32307          * @constructor
32308          * @private
32309          */
32310         var Map$1$1 = function Map () {};
32311
32312         Map$1$1.prototype.get = function get () {};
32313         /**
32314          * Associates the specified value with the specified key in this map (optional
32315          * operation).
32316          * @param {Object} key
32317          * @param {Object} value
32318          * @return {Object}
32319          */
32320         Map$1$1.prototype.put = function put () {};
32321
32322         /**
32323          * Returns the number of key-value mappings in this map.
32324          * @return {number}
32325          */
32326         Map$1$1.prototype.size = function size () {};
32327
32328         /**
32329          * Returns a Collection view of the values contained in this map.
32330          * @return {javascript.util.Collection}
32331          */
32332         Map$1$1.prototype.values = function values () {};
32333
32334         /**
32335          * Returns a {@link Set} view of the mappings contained in this map.
32336          * The set is backed by the map, so changes to the map are
32337          * reflected in the set, and vice-versa.If the map is modified
32338          * while an iteration over the set is in progress (except through
32339          * the iterator's own <tt>remove</tt> operation, or through the
32340          * <tt>setValue</tt> operation on a map entry returned by the
32341          * iterator) the results of the iteration are undefined.The set
32342          * supports element removal, which removes the corresponding
32343          * mapping from the map, via the <tt>Iterator.remove</tt>,
32344          * <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and
32345          * <tt>clear</tt> operations.It does not support the
32346          * <tt>add</tt> or <tt>addAll</tt> operations.
32347          *
32348          * @return {Set} a set view of the mappings contained in this map
32349          */
32350         Map$1$1.prototype.entrySet = function entrySet () {};
32351
32352         /**
32353          * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html
32354          *
32355          * @extends {Map}
32356          * @constructor
32357          * @private
32358          */
32359         var SortedMap = (function (Map) {
32360                 function SortedMap () {
32361                         Map.apply(this, arguments);
32362                 }if ( Map ) { SortedMap.__proto__ = Map; }
32363                 SortedMap.prototype = Object.create( Map && Map.prototype );
32364                 SortedMap.prototype.constructor = SortedMap;
32365
32366                 
32367
32368                 return SortedMap;
32369         }(Map$1$1));
32370
32371         /**
32372          * @param {string=} message Optional message
32373          * @extends {Error}
32374          * @constructor
32375          * @private
32376          */
32377         function OperationNotSupported (message) {
32378           this.message = message || '';
32379         }
32380         OperationNotSupported.prototype = new Error();
32381
32382         /**
32383          * @type {string}
32384          */
32385         OperationNotSupported.prototype.name = 'OperationNotSupported';
32386
32387         /**
32388          * @see http://download.oracle.com/javase/6/docs/api/java/util/Set.html
32389          *
32390          * @extends {Collection}
32391          * @constructor
32392          * @private
32393          */
32394         function Set$2() {}
32395         Set$2.prototype = new Collection();
32396
32397
32398         /**
32399          * Returns true if this set contains the specified element. More formally,
32400          * returns true if and only if this set contains an element e such that (o==null ?
32401          * e==null : o.equals(e)).
32402          * @param {Object} e
32403          * @return {boolean}
32404          */
32405         Set$2.prototype.contains = function() {};
32406
32407         /**
32408          * @see http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html
32409          *
32410          * @extends {javascript.util.Set}
32411          * @constructor
32412          * @private
32413          */
32414         var HashSet = (function (Set$$1) {
32415           function HashSet () {
32416             Set$$1.call(this);
32417             this.array_ = [];
32418
32419             if (arguments[0] instanceof Collection) {
32420               this.addAll(arguments[0]);
32421             }
32422           }
32423
32424           if ( Set$$1 ) { HashSet.__proto__ = Set$$1; }
32425           HashSet.prototype = Object.create( Set$$1 && Set$$1.prototype );
32426           HashSet.prototype.constructor = HashSet;
32427
32428           /**
32429            * @override
32430            */
32431           HashSet.prototype.contains = function contains (o) {
32432             var this$1 = this;
32433
32434             for (var i = 0, len = this.array_.length; i < len; i++) {
32435               var e = this$1.array_[i];
32436               if (e === o) {
32437                 return true
32438               }
32439             }
32440             return false
32441           };
32442
32443           /**
32444            * @override
32445            */
32446           HashSet.prototype.add = function add (o) {
32447             if (this.contains(o)) {
32448               return false
32449             }
32450
32451             this.array_.push(o);
32452
32453             return true
32454           };
32455
32456           /**
32457            * @override
32458            */
32459           HashSet.prototype.addAll = function addAll (c) {
32460             var this$1 = this;
32461
32462             for (var i = c.iterator(); i.hasNext();) {
32463               this$1.add(i.next());
32464             }
32465             return true
32466           };
32467
32468           /**
32469            * @override
32470            */
32471           HashSet.prototype.remove = function remove (o) {
32472             // throw new javascript.util.OperationNotSupported()
32473             throw new Error()
32474           };
32475
32476           /**
32477            * @override
32478            */
32479           HashSet.prototype.size = function size () {
32480             return this.array_.length
32481           };
32482
32483           /**
32484            * @override
32485            */
32486           HashSet.prototype.isEmpty = function isEmpty () {
32487             return this.array_.length === 0
32488           };
32489
32490           /**
32491            * @override
32492            */
32493           HashSet.prototype.toArray = function toArray () {
32494             var this$1 = this;
32495
32496             var array = [];
32497
32498             for (var i = 0, len = this.array_.length; i < len; i++) {
32499               array.push(this$1.array_[i]);
32500             }
32501
32502             return array
32503           };
32504
32505           /**
32506            * @override
32507            */
32508           HashSet.prototype.iterator = function iterator () {
32509             return new Iterator_$1(this)
32510           };
32511
32512           return HashSet;
32513         }(Set$2));
32514
32515         /**
32516            * @extends {Iterator}
32517            * @param {HashSet} hashSet
32518            * @constructor
32519            * @private
32520            */
32521         var Iterator_$1 = (function (Iterator$$1) {
32522           function Iterator_ (hashSet) {
32523             Iterator$$1.call(this);
32524             /**
32525              * @type {HashSet}
32526              * @private
32527              */
32528             this.hashSet_ = hashSet;
32529             /**
32530              * @type {number}
32531              * @private
32532              */
32533             this.position_ = 0;
32534           }
32535
32536           if ( Iterator$$1 ) { Iterator_.__proto__ = Iterator$$1; }
32537           Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );
32538           Iterator_.prototype.constructor = Iterator_;
32539
32540           /**
32541            * @override
32542            */
32543           Iterator_.prototype.next = function next () {
32544             if (this.position_ === this.hashSet_.size()) {
32545               throw new NoSuchElementException()
32546             }
32547             return this.hashSet_.array_[this.position_++]
32548           };
32549
32550           /**
32551            * @override
32552            */
32553           Iterator_.prototype.hasNext = function hasNext () {
32554             if (this.position_ < this.hashSet_.size()) {
32555               return true
32556             } else {
32557               return false
32558             }
32559           };
32560
32561           /**
32562            * @override
32563            */
32564           Iterator_.prototype.remove = function remove () {
32565             throw new OperationNotSupported()
32566           };
32567
32568           return Iterator_;
32569         }(Iterator$1));
32570
32571         var BLACK = 0;
32572         var RED = 1;
32573         function colorOf (p) { return (p === null ? BLACK : p.color) }
32574         function parentOf (p) { return (p === null ? null : p.parent) }
32575         function setColor (p, c) { if (p !== null) { p.color = c; } }
32576         function leftOf (p) { return (p === null ? null : p.left) }
32577         function rightOf (p) { return (p === null ? null : p.right) }
32578
32579         /**
32580          * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html
32581          *
32582          * @extends {SortedMap}
32583          * @constructor
32584          * @private
32585          */
32586         function TreeMap () {
32587           /**
32588            * @type {Object}
32589            * @private
32590            */
32591           this.root_ = null;
32592           /**
32593            * @type {number}
32594            * @private
32595           */
32596           this.size_ = 0;
32597         }
32598         TreeMap.prototype = new SortedMap();
32599
32600         /**
32601          * @override
32602          */
32603         TreeMap.prototype.get = function (key) {
32604           var p = this.root_;
32605           while (p !== null) {
32606             var cmp = key['compareTo'](p.key);
32607             if (cmp < 0) { p = p.left; }
32608             else if (cmp > 0) { p = p.right; }
32609             else { return p.value }
32610           }
32611           return null
32612         };
32613
32614         /**
32615          * @override
32616          */
32617         TreeMap.prototype.put = function (key, value) {
32618           if (this.root_ === null) {
32619             this.root_ = {
32620               key: key,
32621               value: value,
32622               left: null,
32623               right: null,
32624               parent: null,
32625               color: BLACK,
32626               getValue: function getValue () { return this.value },
32627               getKey: function getKey () { return this.key }
32628             };
32629             this.size_ = 1;
32630             return null
32631           }
32632           var t = this.root_;
32633           var parent;
32634           var cmp;
32635           do {
32636             parent = t;
32637             cmp = key['compareTo'](t.key);
32638             if (cmp < 0) {
32639               t = t.left;
32640             } else if (cmp > 0) {
32641               t = t.right;
32642             } else {
32643               var oldValue = t.value;
32644               t.value = value;
32645               return oldValue
32646             }
32647           } while (t !== null)
32648           var e = {
32649             key: key,
32650             left: null,
32651             right: null,
32652             value: value,
32653             parent: parent,
32654             color: BLACK,
32655             getValue: function getValue () { return this.value },
32656             getKey: function getKey () { return this.key }
32657           };
32658           if (cmp < 0) {
32659             parent.left = e;
32660           } else {
32661             parent.right = e;
32662           }
32663           this.fixAfterInsertion(e);
32664           this.size_++;
32665           return null
32666         };
32667
32668         /**
32669          * @param {Object} x
32670          */
32671         TreeMap.prototype.fixAfterInsertion = function (x) {
32672           var this$1 = this;
32673
32674           x.color = RED;
32675           while (x != null && x !== this.root_ && x.parent.color === RED) {
32676             if (parentOf(x) === leftOf(parentOf(parentOf(x)))) {
32677               var y = rightOf(parentOf(parentOf(x)));
32678               if (colorOf(y) === RED) {
32679                 setColor(parentOf(x), BLACK);
32680                 setColor(y, BLACK);
32681                 setColor(parentOf(parentOf(x)), RED);
32682                 x = parentOf(parentOf(x));
32683               } else {
32684                 if (x === rightOf(parentOf(x))) {
32685                   x = parentOf(x);
32686                   this$1.rotateLeft(x);
32687                 }
32688                 setColor(parentOf(x), BLACK);
32689                 setColor(parentOf(parentOf(x)), RED);
32690                 this$1.rotateRight(parentOf(parentOf(x)));
32691               }
32692             } else {
32693               var y$1 = leftOf(parentOf(parentOf(x)));
32694               if (colorOf(y$1) === RED) {
32695                 setColor(parentOf(x), BLACK);
32696                 setColor(y$1, BLACK);
32697                 setColor(parentOf(parentOf(x)), RED);
32698                 x = parentOf(parentOf(x));
32699               } else {
32700                 if (x === leftOf(parentOf(x))) {
32701                   x = parentOf(x);
32702                   this$1.rotateRight(x);
32703                 }
32704                 setColor(parentOf(x), BLACK);
32705                 setColor(parentOf(parentOf(x)), RED);
32706                 this$1.rotateLeft(parentOf(parentOf(x)));
32707               }
32708             }
32709           }
32710           this.root_.color = BLACK;
32711         };
32712
32713         /**
32714          * @override
32715          */
32716         TreeMap.prototype.values = function () {
32717           var arrayList = new ArrayList();
32718           var p = this.getFirstEntry();
32719           if (p !== null) {
32720             arrayList.add(p.value);
32721             while ((p = TreeMap.successor(p)) !== null) {
32722               arrayList.add(p.value);
32723             }
32724           }
32725           return arrayList
32726         };
32727
32728         /**
32729          * @override
32730          */
32731         TreeMap.prototype.entrySet = function () {
32732           var hashSet = new HashSet();
32733           var p = this.getFirstEntry();
32734           if (p !== null) {
32735             hashSet.add(p);
32736             while ((p = TreeMap.successor(p)) !== null) {
32737               hashSet.add(p);
32738             }
32739           }
32740           return hashSet
32741         };
32742
32743         /**
32744          * @param {Object} p
32745          */
32746         TreeMap.prototype.rotateLeft = function (p) {
32747           if (p != null) {
32748             var r = p.right;
32749             p.right = r.left;
32750             if (r.left != null) { r.left.parent = p; }
32751             r.parent = p.parent;
32752             if (p.parent === null) { this.root_ = r; } else if (p.parent.left === p) { p.parent.left = r; } else { p.parent.right = r; }
32753             r.left = p;
32754             p.parent = r;
32755           }
32756         };
32757
32758         /**
32759          * @param {Object} p
32760          */
32761         TreeMap.prototype.rotateRight = function (p) {
32762           if (p != null) {
32763             var l = p.left;
32764             p.left = l.right;
32765             if (l.right != null) { l.right.parent = p; }
32766             l.parent = p.parent;
32767             if (p.parent === null) { this.root_ = l; } else if (p.parent.right === p) { p.parent.right = l; } else { p.parent.left = l; }
32768             l.right = p;
32769             p.parent = l;
32770           }
32771         };
32772
32773         /**
32774          * @return {Object}
32775          */
32776         TreeMap.prototype.getFirstEntry = function () {
32777           var p = this.root_;
32778           if (p != null) {
32779             while (p.left != null) {
32780               p = p.left;
32781             }
32782           }
32783           return p
32784         };
32785
32786         /**
32787          * @param {Object} t
32788          * @return {Object}
32789          * @private
32790          */
32791         TreeMap.successor = function (t) {
32792           if (t === null) { return null } else if (t.right !== null) {
32793             var p = t.right;
32794             while (p.left !== null) {
32795               p = p.left;
32796             }
32797             return p
32798           } else {
32799             var p$1 = t.parent;
32800             var ch = t;
32801             while (p$1 !== null && ch === p$1.right) {
32802               ch = p$1;
32803               p$1 = p$1.parent;
32804             }
32805             return p$1
32806           }
32807         };
32808
32809         /**
32810          * @override
32811          */
32812         TreeMap.prototype.size = function () {
32813           return this.size_
32814         };
32815
32816         var Lineal = function Lineal () {};
32817
32818         Lineal.prototype.interfaces_ = function interfaces_ () {
32819           return []
32820         };
32821         Lineal.prototype.getClass = function getClass () {
32822           return Lineal
32823         };
32824
32825         /**
32826          * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html
32827          *
32828          * @extends {Set}
32829          * @constructor
32830          * @private
32831          */
32832         function SortedSet () {}
32833         SortedSet.prototype = new Set$2();
32834
32835         // import Iterator from './Iterator'
32836         /**
32837          * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html
32838          *
32839          * @extends {SortedSet}
32840          * @constructor
32841          * @private
32842          */
32843         function TreeSet () {
32844           /**
32845            * @type {Array}
32846            * @private
32847           */
32848           this.array_ = [];
32849
32850           if (arguments[0] instanceof Collection) {
32851             this.addAll(arguments[0]);
32852           }
32853         }
32854         TreeSet.prototype = new SortedSet();
32855
32856         /**
32857          * @override
32858          */
32859         TreeSet.prototype.contains = function (o) {
32860           var this$1 = this;
32861
32862           for (var i = 0, len = this.array_.length; i < len; i++) {
32863             var e = this$1.array_[i];
32864             if (e['compareTo'](o) === 0) {
32865               return true
32866             }
32867           }
32868           return false
32869         };
32870
32871         /**
32872          * @override
32873          */
32874         TreeSet.prototype.add = function (o) {
32875           var this$1 = this;
32876
32877           if (this.contains(o)) {
32878             return false
32879           }
32880
32881           for (var i = 0, len = this.array_.length; i < len; i++) {
32882             var e = this$1.array_[i];
32883             if (e['compareTo'](o) === 1) {
32884               this$1.array_.splice(i, 0, o);
32885               return true
32886             }
32887           }
32888
32889           this.array_.push(o);
32890
32891           return true
32892         };
32893
32894         /**
32895          * @override
32896          */
32897         TreeSet.prototype.addAll = function (c) {
32898           var this$1 = this;
32899
32900           for (var i = c.iterator(); i.hasNext();) {
32901             this$1.add(i.next());
32902           }
32903           return true
32904         };
32905
32906         /**
32907          * @override
32908          */
32909         TreeSet.prototype.remove = function (e) {
32910           throw new OperationNotSupported()
32911         };
32912
32913         /**
32914          * @override
32915          */
32916         TreeSet.prototype.size = function () {
32917           return this.array_.length
32918         };
32919
32920         /**
32921          * @override
32922          */
32923         TreeSet.prototype.isEmpty = function () {
32924           return this.array_.length === 0
32925         };
32926
32927         /**
32928          * @override
32929          */
32930         TreeSet.prototype.toArray = function () {
32931           var this$1 = this;
32932
32933           var array = [];
32934
32935           for (var i = 0, len = this.array_.length; i < len; i++) {
32936             array.push(this$1.array_[i]);
32937           }
32938
32939           return array
32940         };
32941
32942         /**
32943          * @override
32944          */
32945         TreeSet.prototype.iterator = function () {
32946           return new Iterator_$2(this)
32947         };
32948
32949         /**
32950          * @extends {javascript.util.Iterator}
32951          * @param {javascript.util.TreeSet} treeSet
32952          * @constructor
32953          * @private
32954          */
32955         var Iterator_$2 = function (treeSet) {
32956           /**
32957            * @type {javascript.util.TreeSet}
32958            * @private
32959            */
32960           this.treeSet_ = treeSet;
32961           /**
32962            * @type {number}
32963            * @private
32964            */
32965           this.position_ = 0;
32966         };
32967
32968         /**
32969          * @override
32970          */
32971         Iterator_$2.prototype.next = function () {
32972           if (this.position_ === this.treeSet_.size()) {
32973             throw new NoSuchElementException()
32974           }
32975           return this.treeSet_.array_[this.position_++]
32976         };
32977
32978         /**
32979          * @override
32980          */
32981         Iterator_$2.prototype.hasNext = function () {
32982           if (this.position_ < this.treeSet_.size()) {
32983             return true
32984           } else {
32985             return false
32986           }
32987         };
32988
32989         /**
32990          * @override
32991          */
32992         Iterator_$2.prototype.remove = function () {
32993           throw new OperationNotSupported()
32994         };
32995
32996         /**
32997          * @see http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html
32998          *
32999          * @constructor
33000          * @private
33001          */
33002         var Arrays = function Arrays () {};
33003
33004         Arrays.sort = function sort () {
33005           var a = arguments[0];
33006           var i;
33007           var t;
33008           var comparator;
33009           var compare;
33010           if (arguments.length === 1) {
33011             compare = function (a, b) {
33012               return a.compareTo(b)
33013             };
33014             a.sort(compare);
33015           } else if (arguments.length === 2) {
33016             comparator = arguments[1];
33017             compare = function (a, b) {
33018               return comparator['compare'](a, b)
33019             };
33020             a.sort(compare);
33021           } else if (arguments.length === 3) {
33022             t = a.slice(arguments[1], arguments[2]);
33023             t.sort();
33024             var r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));
33025             a.splice(0, a.length);
33026             for (i = 0; i < r.length; i++) {
33027               a.push(r[i]);
33028             }
33029           } else if (arguments.length === 4) {
33030             t = a.slice(arguments[1], arguments[2]);
33031             comparator = arguments[3];
33032             compare = function (a, b) {
33033               return comparator['compare'](a, b)
33034             };
33035             t.sort(compare);
33036             r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));
33037             a.splice(0, a.length);
33038             for (i = 0; i < r.length; i++) {
33039               a.push(r[i]);
33040             }
33041           }
33042         };
33043         /**
33044          * @param {Array} array
33045          * @return {ArrayList}
33046          */
33047         Arrays.asList = function asList (array) {
33048           var arrayList = new ArrayList();
33049           for (var i = 0, len = array.length; i < len; i++) {
33050             arrayList.add(array[i]);
33051           }
33052           return arrayList
33053         };
33054
33055         var Dimension = function Dimension () {};
33056
33057         var staticAccessors$14 = { P: { configurable: true },L: { configurable: true },A: { configurable: true },FALSE: { configurable: true },TRUE: { configurable: true },DONTCARE: { configurable: true },SYM_FALSE: { configurable: true },SYM_TRUE: { configurable: true },SYM_DONTCARE: { configurable: true },SYM_P: { configurable: true },SYM_L: { configurable: true },SYM_A: { configurable: true } };
33058
33059         staticAccessors$14.P.get = function () { return 0 };
33060         staticAccessors$14.L.get = function () { return 1 };
33061         staticAccessors$14.A.get = function () { return 2 };
33062         staticAccessors$14.FALSE.get = function () { return -1 };
33063         staticAccessors$14.TRUE.get = function () { return -2 };
33064         staticAccessors$14.DONTCARE.get = function () { return -3 };
33065         staticAccessors$14.SYM_FALSE.get = function () { return 'F' };
33066         staticAccessors$14.SYM_TRUE.get = function () { return 'T' };
33067         staticAccessors$14.SYM_DONTCARE.get = function () { return '*' };
33068         staticAccessors$14.SYM_P.get = function () { return '0' };
33069         staticAccessors$14.SYM_L.get = function () { return '1' };
33070         staticAccessors$14.SYM_A.get = function () { return '2' };
33071
33072         Dimension.prototype.interfaces_ = function interfaces_ () {
33073           return []
33074         };
33075         Dimension.prototype.getClass = function getClass () {
33076           return Dimension
33077         };
33078         Dimension.toDimensionSymbol = function toDimensionSymbol (dimensionValue) {
33079           switch (dimensionValue) {
33080             case Dimension.FALSE:
33081               return Dimension.SYM_FALSE
33082             case Dimension.TRUE:
33083               return Dimension.SYM_TRUE
33084             case Dimension.DONTCARE:
33085               return Dimension.SYM_DONTCARE
33086             case Dimension.P:
33087               return Dimension.SYM_P
33088             case Dimension.L:
33089               return Dimension.SYM_L
33090             case Dimension.A:
33091               return Dimension.SYM_A
33092           }
33093           throw new IllegalArgumentException('Unknown dimension value: ' + dimensionValue)
33094         };
33095         Dimension.toDimensionValue = function toDimensionValue (dimensionSymbol) {
33096           switch (Character.toUpperCase(dimensionSymbol)) {
33097             case Dimension.SYM_FALSE:
33098               return Dimension.FALSE
33099             case Dimension.SYM_TRUE:
33100               return Dimension.TRUE
33101             case Dimension.SYM_DONTCARE:
33102               return Dimension.DONTCARE
33103             case Dimension.SYM_P:
33104               return Dimension.P
33105             case Dimension.SYM_L:
33106               return Dimension.L
33107             case Dimension.SYM_A:
33108               return Dimension.A
33109           }
33110           throw new IllegalArgumentException('Unknown dimension symbol: ' + dimensionSymbol)
33111         };
33112
33113         Object.defineProperties( Dimension, staticAccessors$14 );
33114
33115         var GeometryFilter = function GeometryFilter () {};
33116
33117         GeometryFilter.prototype.filter = function filter (geom) {};
33118         GeometryFilter.prototype.interfaces_ = function interfaces_ () {
33119           return []
33120         };
33121         GeometryFilter.prototype.getClass = function getClass () {
33122           return GeometryFilter
33123         };
33124
33125         var CoordinateSequenceFilter = function CoordinateSequenceFilter () {};
33126
33127         CoordinateSequenceFilter.prototype.filter = function filter (seq, i) {};
33128         CoordinateSequenceFilter.prototype.isDone = function isDone () {};
33129         CoordinateSequenceFilter.prototype.isGeometryChanged = function isGeometryChanged () {};
33130         CoordinateSequenceFilter.prototype.interfaces_ = function interfaces_ () {
33131           return []
33132         };
33133         CoordinateSequenceFilter.prototype.getClass = function getClass () {
33134           return CoordinateSequenceFilter
33135         };
33136
33137         var GeometryCollection = (function (Geometry$$1) {
33138           function GeometryCollection (geometries, factory) {
33139             Geometry$$1.call(this, factory);
33140             this._geometries = geometries || [];
33141
33142             if (Geometry$$1.hasNullElements(this._geometries)) {
33143               throw new IllegalArgumentException('geometries must not contain null elements')
33144             }
33145           }
33146
33147           if ( Geometry$$1 ) { GeometryCollection.__proto__ = Geometry$$1; }
33148           GeometryCollection.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
33149           GeometryCollection.prototype.constructor = GeometryCollection;
33150
33151           var staticAccessors = { serialVersionUID: { configurable: true } };
33152           GeometryCollection.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
33153             var this$1 = this;
33154
33155             var envelope = new Envelope();
33156             for (var i = 0; i < this._geometries.length; i++) {
33157               envelope.expandToInclude(this$1._geometries[i].getEnvelopeInternal());
33158             }
33159             return envelope
33160           };
33161           GeometryCollection.prototype.getGeometryN = function getGeometryN (n) {
33162             return this._geometries[n]
33163           };
33164           GeometryCollection.prototype.getSortIndex = function getSortIndex () {
33165             return Geometry$$1.SORTINDEX_GEOMETRYCOLLECTION
33166           };
33167           GeometryCollection.prototype.getCoordinates = function getCoordinates () {
33168             var this$1 = this;
33169
33170             var coordinates = new Array(this.getNumPoints()).fill(null);
33171             var k = -1;
33172             for (var i = 0; i < this._geometries.length; i++) {
33173               var childCoordinates = this$1._geometries[i].getCoordinates();
33174               for (var j = 0; j < childCoordinates.length; j++) {
33175                 k++;
33176                 coordinates[k] = childCoordinates[j];
33177               }
33178             }
33179             return coordinates
33180           };
33181           GeometryCollection.prototype.getArea = function getArea () {
33182             var this$1 = this;
33183
33184             var area = 0.0;
33185             for (var i = 0; i < this._geometries.length; i++) {
33186               area += this$1._geometries[i].getArea();
33187             }
33188             return area
33189           };
33190           GeometryCollection.prototype.equalsExact = function equalsExact () {
33191             var this$1 = this;
33192
33193             if (arguments.length === 2) {
33194               var other = arguments[0];
33195               var tolerance = arguments[1];
33196               if (!this.isEquivalentClass(other)) {
33197                 return false
33198               }
33199               var otherCollection = other;
33200               if (this._geometries.length !== otherCollection._geometries.length) {
33201                 return false
33202               }
33203               for (var i = 0; i < this._geometries.length; i++) {
33204                 if (!this$1._geometries[i].equalsExact(otherCollection._geometries[i], tolerance)) {
33205                   return false
33206                 }
33207               }
33208               return true
33209             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
33210           };
33211           GeometryCollection.prototype.normalize = function normalize () {
33212             var this$1 = this;
33213
33214             for (var i = 0; i < this._geometries.length; i++) {
33215               this$1._geometries[i].normalize();
33216             }
33217             Arrays.sort(this._geometries);
33218           };
33219           GeometryCollection.prototype.getCoordinate = function getCoordinate () {
33220             if (this.isEmpty()) { return null }
33221             return this._geometries[0].getCoordinate()
33222           };
33223           GeometryCollection.prototype.getBoundaryDimension = function getBoundaryDimension () {
33224             var this$1 = this;
33225
33226             var dimension = Dimension.FALSE;
33227             for (var i = 0; i < this._geometries.length; i++) {
33228               dimension = Math.max(dimension, this$1._geometries[i].getBoundaryDimension());
33229             }
33230             return dimension
33231           };
33232           GeometryCollection.prototype.getDimension = function getDimension () {
33233             var this$1 = this;
33234
33235             var dimension = Dimension.FALSE;
33236             for (var i = 0; i < this._geometries.length; i++) {
33237               dimension = Math.max(dimension, this$1._geometries[i].getDimension());
33238             }
33239             return dimension
33240           };
33241           GeometryCollection.prototype.getLength = function getLength () {
33242             var this$1 = this;
33243
33244             var sum = 0.0;
33245             for (var i = 0; i < this._geometries.length; i++) {
33246               sum += this$1._geometries[i].getLength();
33247             }
33248             return sum
33249           };
33250           GeometryCollection.prototype.getNumPoints = function getNumPoints () {
33251             var this$1 = this;
33252
33253             var numPoints = 0;
33254             for (var i = 0; i < this._geometries.length; i++) {
33255               numPoints += this$1._geometries[i].getNumPoints();
33256             }
33257             return numPoints
33258           };
33259           GeometryCollection.prototype.getNumGeometries = function getNumGeometries () {
33260             return this._geometries.length
33261           };
33262           GeometryCollection.prototype.reverse = function reverse () {
33263             var this$1 = this;
33264
33265             var n = this._geometries.length;
33266             var revGeoms = new Array(n).fill(null);
33267             for (var i = 0; i < this._geometries.length; i++) {
33268               revGeoms[i] = this$1._geometries[i].reverse();
33269             }
33270             return this.getFactory().createGeometryCollection(revGeoms)
33271           };
33272           GeometryCollection.prototype.compareToSameClass = function compareToSameClass () {
33273             var this$1 = this;
33274
33275             if (arguments.length === 1) {
33276               var o = arguments[0];
33277               var theseElements = new TreeSet(Arrays.asList(this._geometries));
33278               var otherElements = new TreeSet(Arrays.asList(o._geometries));
33279               return this.compare(theseElements, otherElements)
33280             } else if (arguments.length === 2) {
33281               var o$1 = arguments[0];
33282               var comp = arguments[1];
33283               var gc = o$1;
33284               var n1 = this.getNumGeometries();
33285               var n2 = gc.getNumGeometries();
33286               var i = 0;
33287               while (i < n1 && i < n2) {
33288                 var thisGeom = this$1.getGeometryN(i);
33289                 var otherGeom = gc.getGeometryN(i);
33290                 var holeComp = thisGeom.compareToSameClass(otherGeom, comp);
33291                 if (holeComp !== 0) { return holeComp }
33292                 i++;
33293               }
33294               if (i < n1) { return 1 }
33295               if (i < n2) { return -1 }
33296               return 0
33297             }
33298           };
33299           GeometryCollection.prototype.apply = function apply () {
33300             var this$1 = this;
33301
33302             if (hasInterface(arguments[0], CoordinateFilter)) {
33303               var filter = arguments[0];
33304               for (var i = 0; i < this._geometries.length; i++) {
33305                 this$1._geometries[i].apply(filter);
33306               }
33307             } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
33308               var filter$1 = arguments[0];
33309               if (this._geometries.length === 0) { return null }
33310               for (var i$1 = 0; i$1 < this._geometries.length; i$1++) {
33311                 this$1._geometries[i$1].apply(filter$1);
33312                 if (filter$1.isDone()) {
33313                   break
33314                 }
33315               }
33316               if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
33317             } else if (hasInterface(arguments[0], GeometryFilter)) {
33318               var filter$2 = arguments[0];
33319               filter$2.filter(this);
33320               for (var i$2 = 0; i$2 < this._geometries.length; i$2++) {
33321                 this$1._geometries[i$2].apply(filter$2);
33322               }
33323             } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
33324               var filter$3 = arguments[0];
33325               filter$3.filter(this);
33326               for (var i$3 = 0; i$3 < this._geometries.length; i$3++) {
33327                 this$1._geometries[i$3].apply(filter$3);
33328               }
33329             }
33330           };
33331           GeometryCollection.prototype.getBoundary = function getBoundary () {
33332             this.checkNotGeometryCollection(this);
33333             Assert.shouldNeverReachHere();
33334             return null
33335           };
33336           GeometryCollection.prototype.clone = function clone () {
33337             var this$1 = this;
33338
33339             var gc = Geometry$$1.prototype.clone.call(this);
33340             gc._geometries = new Array(this._geometries.length).fill(null);
33341             for (var i = 0; i < this._geometries.length; i++) {
33342               gc._geometries[i] = this$1._geometries[i].clone();
33343             }
33344             return gc
33345           };
33346           GeometryCollection.prototype.getGeometryType = function getGeometryType () {
33347             return 'GeometryCollection'
33348           };
33349           GeometryCollection.prototype.copy = function copy () {
33350             var this$1 = this;
33351
33352             var geometries = new Array(this._geometries.length).fill(null);
33353             for (var i = 0; i < geometries.length; i++) {
33354               geometries[i] = this$1._geometries[i].copy();
33355             }
33356             return new GeometryCollection(geometries, this._factory)
33357           };
33358           GeometryCollection.prototype.isEmpty = function isEmpty () {
33359             var this$1 = this;
33360
33361             for (var i = 0; i < this._geometries.length; i++) {
33362               if (!this$1._geometries[i].isEmpty()) {
33363                 return false
33364               }
33365             }
33366             return true
33367           };
33368           GeometryCollection.prototype.interfaces_ = function interfaces_ () {
33369             return []
33370           };
33371           GeometryCollection.prototype.getClass = function getClass () {
33372             return GeometryCollection
33373           };
33374           staticAccessors.serialVersionUID.get = function () { return -5694727726395021467 };
33375
33376           Object.defineProperties( GeometryCollection, staticAccessors );
33377
33378           return GeometryCollection;
33379         }(Geometry));
33380
33381         var MultiLineString = (function (GeometryCollection$$1) {
33382           function MultiLineString () {
33383             GeometryCollection$$1.apply(this, arguments);
33384           }
33385
33386           if ( GeometryCollection$$1 ) { MultiLineString.__proto__ = GeometryCollection$$1; }
33387           MultiLineString.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
33388           MultiLineString.prototype.constructor = MultiLineString;
33389
33390           var staticAccessors = { serialVersionUID: { configurable: true } };
33391
33392           MultiLineString.prototype.getSortIndex = function getSortIndex () {
33393             return Geometry.SORTINDEX_MULTILINESTRING
33394           };
33395           MultiLineString.prototype.equalsExact = function equalsExact () {
33396             if (arguments.length === 2) {
33397               var other = arguments[0];
33398               var tolerance = arguments[1];
33399               if (!this.isEquivalentClass(other)) {
33400                 return false
33401               }
33402               return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
33403             } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
33404           };
33405           MultiLineString.prototype.getBoundaryDimension = function getBoundaryDimension () {
33406             if (this.isClosed()) {
33407               return Dimension.FALSE
33408             }
33409             return 0
33410           };
33411           MultiLineString.prototype.isClosed = function isClosed () {
33412             var this$1 = this;
33413
33414             if (this.isEmpty()) {
33415               return false
33416             }
33417             for (var i = 0; i < this._geometries.length; i++) {
33418               if (!this$1._geometries[i].isClosed()) {
33419                 return false
33420               }
33421             }
33422             return true
33423           };
33424           MultiLineString.prototype.getDimension = function getDimension () {
33425             return 1
33426           };
33427           MultiLineString.prototype.reverse = function reverse () {
33428             var this$1 = this;
33429
33430             var nLines = this._geometries.length;
33431             var revLines = new Array(nLines).fill(null);
33432             for (var i = 0; i < this._geometries.length; i++) {
33433               revLines[nLines - 1 - i] = this$1._geometries[i].reverse();
33434             }
33435             return this.getFactory().createMultiLineString(revLines)
33436           };
33437           MultiLineString.prototype.getBoundary = function getBoundary () {
33438             return new BoundaryOp(this).getBoundary()
33439           };
33440           MultiLineString.prototype.getGeometryType = function getGeometryType () {
33441             return 'MultiLineString'
33442           };
33443           MultiLineString.prototype.copy = function copy () {
33444             var this$1 = this;
33445
33446             var lineStrings = new Array(this._geometries.length).fill(null);
33447             for (var i = 0; i < lineStrings.length; i++) {
33448               lineStrings[i] = this$1._geometries[i].copy();
33449             }
33450             return new MultiLineString(lineStrings, this._factory)
33451           };
33452           MultiLineString.prototype.interfaces_ = function interfaces_ () {
33453             return [Lineal]
33454           };
33455           MultiLineString.prototype.getClass = function getClass () {
33456             return MultiLineString
33457           };
33458           staticAccessors.serialVersionUID.get = function () { return 8166665132445433741 };
33459
33460           Object.defineProperties( MultiLineString, staticAccessors );
33461
33462           return MultiLineString;
33463         }(GeometryCollection));
33464
33465         var BoundaryOp = function BoundaryOp () {
33466           this._geom = null;
33467           this._geomFact = null;
33468           this._bnRule = null;
33469           this._endpointMap = null;
33470           if (arguments.length === 1) {
33471             var geom = arguments[0];
33472             var bnRule = BoundaryNodeRule.MOD2_BOUNDARY_RULE;
33473             this._geom = geom;
33474             this._geomFact = geom.getFactory();
33475             this._bnRule = bnRule;
33476           } else if (arguments.length === 2) {
33477             var geom$1 = arguments[0];
33478             var bnRule$1 = arguments[1];
33479             this._geom = geom$1;
33480             this._geomFact = geom$1.getFactory();
33481             this._bnRule = bnRule$1;
33482           }
33483         };
33484         BoundaryOp.prototype.boundaryMultiLineString = function boundaryMultiLineString (mLine) {
33485           if (this._geom.isEmpty()) {
33486             return this.getEmptyMultiPoint()
33487           }
33488           var bdyPts = this.computeBoundaryCoordinates(mLine);
33489           if (bdyPts.length === 1) {
33490             return this._geomFact.createPoint(bdyPts[0])
33491           }
33492           return this._geomFact.createMultiPointFromCoords(bdyPts)
33493         };
33494         BoundaryOp.prototype.getBoundary = function getBoundary () {
33495           if (this._geom instanceof LineString) { return this.boundaryLineString(this._geom) }
33496           if (this._geom instanceof MultiLineString) { return this.boundaryMultiLineString(this._geom) }
33497           return this._geom.getBoundary()
33498         };
33499         BoundaryOp.prototype.boundaryLineString = function boundaryLineString (line) {
33500           if (this._geom.isEmpty()) {
33501             return this.getEmptyMultiPoint()
33502           }
33503           if (line.isClosed()) {
33504             var closedEndpointOnBoundary = this._bnRule.isInBoundary(2);
33505             if (closedEndpointOnBoundary) {
33506               return line.getStartPoint()
33507             } else {
33508               return this._geomFact.createMultiPoint()
33509             }
33510           }
33511           return this._geomFact.createMultiPoint([line.getStartPoint(), line.getEndPoint()])
33512         };
33513         BoundaryOp.prototype.getEmptyMultiPoint = function getEmptyMultiPoint () {
33514           return this._geomFact.createMultiPoint()
33515         };
33516         BoundaryOp.prototype.computeBoundaryCoordinates = function computeBoundaryCoordinates (mLine) {
33517             var this$1 = this;
33518
33519           var bdyPts = new ArrayList();
33520           this._endpointMap = new TreeMap();
33521           for (var i = 0; i < mLine.getNumGeometries(); i++) {
33522             var line = mLine.getGeometryN(i);
33523             if (line.getNumPoints() === 0) { continue }
33524             this$1.addEndpoint(line.getCoordinateN(0));
33525             this$1.addEndpoint(line.getCoordinateN(line.getNumPoints() - 1));
33526           }
33527           for (var it = this._endpointMap.entrySet().iterator(); it.hasNext();) {
33528             var entry = it.next();
33529             var counter = entry.getValue();
33530             var valence = counter.count;
33531             if (this$1._bnRule.isInBoundary(valence)) {
33532               bdyPts.add(entry.getKey());
33533             }
33534           }
33535           return CoordinateArrays.toCoordinateArray(bdyPts)
33536         };
33537         BoundaryOp.prototype.addEndpoint = function addEndpoint (pt) {
33538           var counter = this._endpointMap.get(pt);
33539           if (counter === null) {
33540             counter = new Counter();
33541             this._endpointMap.put(pt, counter);
33542           }
33543           counter.count++;
33544         };
33545         BoundaryOp.prototype.interfaces_ = function interfaces_ () {
33546           return []
33547         };
33548         BoundaryOp.prototype.getClass = function getClass () {
33549           return BoundaryOp
33550         };
33551         BoundaryOp.getBoundary = function getBoundary () {
33552           if (arguments.length === 1) {
33553             var g = arguments[0];
33554             var bop = new BoundaryOp(g);
33555             return bop.getBoundary()
33556           } else if (arguments.length === 2) {
33557             var g$1 = arguments[0];
33558             var bnRule = arguments[1];
33559             var bop$1 = new BoundaryOp(g$1, bnRule);
33560             return bop$1.getBoundary()
33561           }
33562         };
33563
33564         var Counter = function Counter () {
33565           this.count = null;
33566         };
33567         Counter.prototype.interfaces_ = function interfaces_ () {
33568           return []
33569         };
33570         Counter.prototype.getClass = function getClass () {
33571           return Counter
33572         };
33573
33574         // boundary
33575
33576         function PrintStream () {}
33577
33578         function StringReader () {}
33579
33580         var DecimalFormat = function DecimalFormat () {};
33581
33582         function ByteArrayOutputStream () {}
33583
33584         function IOException () {}
33585
33586         function LineNumberReader () {}
33587
33588         var StringUtil = function StringUtil () {};
33589
33590         var staticAccessors$15 = { NEWLINE: { configurable: true },SIMPLE_ORDINATE_FORMAT: { configurable: true } };
33591
33592         StringUtil.prototype.interfaces_ = function interfaces_ () {
33593           return []
33594         };
33595         StringUtil.prototype.getClass = function getClass () {
33596           return StringUtil
33597         };
33598         StringUtil.chars = function chars (c, n) {
33599           var ch = new Array(n).fill(null);
33600           for (var i = 0; i < n; i++) {
33601             ch[i] = c;
33602           }
33603           return String(ch)
33604         };
33605         StringUtil.getStackTrace = function getStackTrace () {
33606           if (arguments.length === 1) {
33607             var t = arguments[0];
33608             var os = new ByteArrayOutputStream();
33609             var ps = new PrintStream(os);
33610             t.printStackTrace(ps);
33611             return os.toString()
33612           } else if (arguments.length === 2) {
33613             var t$1 = arguments[0];
33614             var depth = arguments[1];
33615             var stackTrace = '';
33616             var stringReader = new StringReader(StringUtil.getStackTrace(t$1));
33617             var lineNumberReader = new LineNumberReader(stringReader);
33618             for (var i = 0; i < depth; i++) {
33619               try {
33620                 stackTrace += lineNumberReader.readLine() + StringUtil.NEWLINE;
33621               } catch (e) {
33622                 if (e instanceof IOException) {
33623                   Assert.shouldNeverReachHere();
33624                 } else { throw e }
33625               } finally {}
33626             }
33627             return stackTrace
33628           }
33629         };
33630         StringUtil.split = function split (s, separator) {
33631           var separatorlen = separator.length;
33632           var tokenList = new ArrayList();
33633           var tmpString = '' + s;
33634           var pos = tmpString.indexOf(separator);
33635           while (pos >= 0) {
33636             var token = tmpString.substring(0, pos);
33637             tokenList.add(token);
33638             tmpString = tmpString.substring(pos + separatorlen);
33639             pos = tmpString.indexOf(separator);
33640           }
33641           if (tmpString.length > 0) { tokenList.add(tmpString); }
33642           var res = new Array(tokenList.size()).fill(null);
33643           for (var i = 0; i < res.length; i++) {
33644             res[i] = tokenList.get(i);
33645           }
33646           return res
33647         };
33648         StringUtil.toString = function toString () {
33649           if (arguments.length === 1) {
33650             var d = arguments[0];
33651             return StringUtil.SIMPLE_ORDINATE_FORMAT.format(d)
33652           }
33653         };
33654         StringUtil.spaces = function spaces (n) {
33655           return StringUtil.chars(' ', n)
33656         };
33657         staticAccessors$15.NEWLINE.get = function () { return System.getProperty('line.separator') };
33658         staticAccessors$15.SIMPLE_ORDINATE_FORMAT.get = function () { return new DecimalFormat('0.#') };
33659
33660         Object.defineProperties( StringUtil, staticAccessors$15 );
33661
33662         var CoordinateSequences = function CoordinateSequences () {};
33663
33664         CoordinateSequences.prototype.interfaces_ = function interfaces_ () {
33665           return []
33666         };
33667         CoordinateSequences.prototype.getClass = function getClass () {
33668           return CoordinateSequences
33669         };
33670         CoordinateSequences.copyCoord = function copyCoord (src, srcPos, dest, destPos) {
33671           var minDim = Math.min(src.getDimension(), dest.getDimension());
33672           for (var dim = 0; dim < minDim; dim++) {
33673             dest.setOrdinate(destPos, dim, src.getOrdinate(srcPos, dim));
33674           }
33675         };
33676         CoordinateSequences.isRing = function isRing (seq) {
33677           var n = seq.size();
33678           if (n === 0) { return true }
33679           if (n <= 3) { return false }
33680           return seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y)
33681         };
33682         CoordinateSequences.isEqual = function isEqual (cs1, cs2) {
33683           var cs1Size = cs1.size();
33684           var cs2Size = cs2.size();
33685           if (cs1Size !== cs2Size) { return false }
33686           var dim = Math.min(cs1.getDimension(), cs2.getDimension());
33687           for (var i = 0; i < cs1Size; i++) {
33688             for (var d = 0; d < dim; d++) {
33689               var v1 = cs1.getOrdinate(i, d);
33690               var v2 = cs2.getOrdinate(i, d);
33691               if (cs1.getOrdinate(i, d) === cs2.getOrdinate(i, d)) { continue }
33692               if (Double.isNaN(v1) && Double.isNaN(v2)) { continue }
33693               return false
33694             }
33695           }
33696           return true
33697         };
33698         CoordinateSequences.extend = function extend (fact, seq, size) {
33699           var newseq = fact.create(size, seq.getDimension());
33700           var n = seq.size();
33701           CoordinateSequences.copy(seq, 0, newseq, 0, n);
33702           if (n > 0) {
33703             for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, n - 1, newseq, i, 1); }
33704           }
33705           return newseq
33706         };
33707         CoordinateSequences.reverse = function reverse (seq) {
33708           var last = seq.size() - 1;
33709           var mid = Math.trunc(last / 2);
33710           for (var i = 0; i <= mid; i++) {
33711             CoordinateSequences.swap(seq, i, last - i);
33712           }
33713         };
33714         CoordinateSequences.swap = function swap (seq, i, j) {
33715           if (i === j) { return null }
33716           for (var dim = 0; dim < seq.getDimension(); dim++) {
33717             var tmp = seq.getOrdinate(i, dim);
33718             seq.setOrdinate(i, dim, seq.getOrdinate(j, dim));
33719             seq.setOrdinate(j, dim, tmp);
33720           }
33721         };
33722         CoordinateSequences.copy = function copy (src, srcPos, dest, destPos, length) {
33723           for (var i = 0; i < length; i++) {
33724             CoordinateSequences.copyCoord(src, srcPos + i, dest, destPos + i);
33725           }
33726         };
33727         CoordinateSequences.toString = function toString () {
33728           if (arguments.length === 1) {
33729             var cs = arguments[0];
33730             var size = cs.size();
33731             if (size === 0) { return '()' }
33732             var dim = cs.getDimension();
33733             var buf = new StringBuffer();
33734             buf.append('(');
33735             for (var i = 0; i < size; i++) {
33736               if (i > 0) { buf.append(' '); }
33737               for (var d = 0; d < dim; d++) {
33738                 if (d > 0) { buf.append(','); }
33739                 buf.append(StringUtil.toString(cs.getOrdinate(i, d)));
33740               }
33741             }
33742             buf.append(')');
33743             return buf.toString()
33744           }
33745         };
33746         CoordinateSequences.ensureValidRing = function ensureValidRing (fact, seq) {
33747           var n = seq.size();
33748           if (n === 0) { return seq }
33749           if (n <= 3) { return CoordinateSequences.createClosedRing(fact, seq, 4) }
33750           var isClosed = seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y);
33751           if (isClosed) { return seq }
33752           return CoordinateSequences.createClosedRing(fact, seq, n + 1)
33753         };
33754         CoordinateSequences.createClosedRing = function createClosedRing (fact, seq, size) {
33755           var newseq = fact.create(size, seq.getDimension());
33756           var n = seq.size();
33757           CoordinateSequences.copy(seq, 0, newseq, 0, n);
33758           for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, 0, newseq, i, 1); }
33759           return newseq
33760         };
33761
33762         var LineString = (function (Geometry$$1) {
33763           function LineString (points, factory) {
33764             Geometry$$1.call(this, factory);
33765             this._points = null;
33766             this.init(points);
33767           }
33768
33769           if ( Geometry$$1 ) { LineString.__proto__ = Geometry$$1; }
33770           LineString.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
33771           LineString.prototype.constructor = LineString;
33772
33773           var staticAccessors = { serialVersionUID: { configurable: true } };
33774           LineString.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
33775             if (this.isEmpty()) {
33776               return new Envelope()
33777             }
33778             return this._points.expandEnvelope(new Envelope())
33779           };
33780           LineString.prototype.isRing = function isRing () {
33781             return this.isClosed() && this.isSimple()
33782           };
33783           LineString.prototype.getSortIndex = function getSortIndex () {
33784             return Geometry$$1.SORTINDEX_LINESTRING
33785           };
33786           LineString.prototype.getCoordinates = function getCoordinates () {
33787             return this._points.toCoordinateArray()
33788           };
33789           LineString.prototype.equalsExact = function equalsExact () {
33790             var this$1 = this;
33791
33792             if (arguments.length === 2) {
33793               var other = arguments[0];
33794               var tolerance = arguments[1];
33795               if (!this.isEquivalentClass(other)) {
33796                 return false
33797               }
33798               var otherLineString = other;
33799               if (this._points.size() !== otherLineString._points.size()) {
33800                 return false
33801               }
33802               for (var i = 0; i < this._points.size(); i++) {
33803                 if (!this$1.equal(this$1._points.getCoordinate(i), otherLineString._points.getCoordinate(i), tolerance)) {
33804                   return false
33805                 }
33806               }
33807               return true
33808             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
33809           };
33810           LineString.prototype.normalize = function normalize () {
33811             var this$1 = this;
33812
33813             for (var i = 0; i < Math.trunc(this._points.size() / 2); i++) {
33814               var j = this$1._points.size() - 1 - i;
33815               if (!this$1._points.getCoordinate(i).equals(this$1._points.getCoordinate(j))) {
33816                 if (this$1._points.getCoordinate(i).compareTo(this$1._points.getCoordinate(j)) > 0) {
33817                   CoordinateSequences.reverse(this$1._points);
33818                 }
33819                 return null
33820               }
33821             }
33822           };
33823           LineString.prototype.getCoordinate = function getCoordinate () {
33824             if (this.isEmpty()) { return null }
33825             return this._points.getCoordinate(0)
33826           };
33827           LineString.prototype.getBoundaryDimension = function getBoundaryDimension () {
33828             if (this.isClosed()) {
33829               return Dimension.FALSE
33830             }
33831             return 0
33832           };
33833           LineString.prototype.isClosed = function isClosed () {
33834             if (this.isEmpty()) {
33835               return false
33836             }
33837             return this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1))
33838           };
33839           LineString.prototype.getEndPoint = function getEndPoint () {
33840             if (this.isEmpty()) {
33841               return null
33842             }
33843             return this.getPointN(this.getNumPoints() - 1)
33844           };
33845           LineString.prototype.getDimension = function getDimension () {
33846             return 1
33847           };
33848           LineString.prototype.getLength = function getLength () {
33849             return CGAlgorithms.computeLength(this._points)
33850           };
33851           LineString.prototype.getNumPoints = function getNumPoints () {
33852             return this._points.size()
33853           };
33854           LineString.prototype.reverse = function reverse () {
33855             var seq = this._points.copy();
33856             CoordinateSequences.reverse(seq);
33857             var revLine = this.getFactory().createLineString(seq);
33858             return revLine
33859           };
33860           LineString.prototype.compareToSameClass = function compareToSameClass () {
33861             var this$1 = this;
33862
33863             if (arguments.length === 1) {
33864               var o = arguments[0];
33865               var line = o;
33866               var i = 0;
33867               var j = 0;
33868               while (i < this._points.size() && j < line._points.size()) {
33869                 var comparison = this$1._points.getCoordinate(i).compareTo(line._points.getCoordinate(j));
33870                 if (comparison !== 0) {
33871                   return comparison
33872                 }
33873                 i++;
33874                 j++;
33875               }
33876               if (i < this._points.size()) {
33877                 return 1
33878               }
33879               if (j < line._points.size()) {
33880                 return -1
33881               }
33882               return 0
33883             } else if (arguments.length === 2) {
33884               var o$1 = arguments[0];
33885               var comp = arguments[1];
33886               var line$1 = o$1;
33887               return comp.compare(this._points, line$1._points)
33888             }
33889           };
33890           LineString.prototype.apply = function apply () {
33891             var this$1 = this;
33892
33893             if (hasInterface(arguments[0], CoordinateFilter)) {
33894               var filter = arguments[0];
33895               for (var i = 0; i < this._points.size(); i++) {
33896                 filter.filter(this$1._points.getCoordinate(i));
33897               }
33898             } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
33899               var filter$1 = arguments[0];
33900               if (this._points.size() === 0) { return null }
33901               for (var i$1 = 0; i$1 < this._points.size(); i$1++) {
33902                 filter$1.filter(this$1._points, i$1);
33903                 if (filter$1.isDone()) { break }
33904               }
33905               if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
33906             } else if (hasInterface(arguments[0], GeometryFilter)) {
33907               var filter$2 = arguments[0];
33908               filter$2.filter(this);
33909             } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
33910               var filter$3 = arguments[0];
33911               filter$3.filter(this);
33912             }
33913           };
33914           LineString.prototype.getBoundary = function getBoundary () {
33915             return new BoundaryOp(this).getBoundary()
33916           };
33917           LineString.prototype.isEquivalentClass = function isEquivalentClass (other) {
33918             return other instanceof LineString
33919           };
33920           LineString.prototype.clone = function clone () {
33921             var ls = Geometry$$1.prototype.clone.call(this);
33922             ls._points = this._points.clone();
33923             return ls
33924           };
33925           LineString.prototype.getCoordinateN = function getCoordinateN (n) {
33926             return this._points.getCoordinate(n)
33927           };
33928           LineString.prototype.getGeometryType = function getGeometryType () {
33929             return 'LineString'
33930           };
33931           LineString.prototype.copy = function copy () {
33932             return new LineString(this._points.copy(), this._factory)
33933           };
33934           LineString.prototype.getCoordinateSequence = function getCoordinateSequence () {
33935             return this._points
33936           };
33937           LineString.prototype.isEmpty = function isEmpty () {
33938             return this._points.size() === 0
33939           };
33940           LineString.prototype.init = function init (points) {
33941             if (points === null) {
33942               points = this.getFactory().getCoordinateSequenceFactory().create([]);
33943             }
33944             if (points.size() === 1) {
33945               throw new IllegalArgumentException('Invalid number of points in LineString (found ' + points.size() + ' - must be 0 or >= 2)')
33946             }
33947             this._points = points;
33948           };
33949           LineString.prototype.isCoordinate = function isCoordinate (pt) {
33950             var this$1 = this;
33951
33952             for (var i = 0; i < this._points.size(); i++) {
33953               if (this$1._points.getCoordinate(i).equals(pt)) {
33954                 return true
33955               }
33956             }
33957             return false
33958           };
33959           LineString.prototype.getStartPoint = function getStartPoint () {
33960             if (this.isEmpty()) {
33961               return null
33962             }
33963             return this.getPointN(0)
33964           };
33965           LineString.prototype.getPointN = function getPointN (n) {
33966             return this.getFactory().createPoint(this._points.getCoordinate(n))
33967           };
33968           LineString.prototype.interfaces_ = function interfaces_ () {
33969             return [Lineal]
33970           };
33971           LineString.prototype.getClass = function getClass () {
33972             return LineString
33973           };
33974           staticAccessors.serialVersionUID.get = function () { return 3110669828065365560 };
33975
33976           Object.defineProperties( LineString, staticAccessors );
33977
33978           return LineString;
33979         }(Geometry));
33980
33981         var Puntal = function Puntal () {};
33982
33983         Puntal.prototype.interfaces_ = function interfaces_ () {
33984           return []
33985         };
33986         Puntal.prototype.getClass = function getClass () {
33987           return Puntal
33988         };
33989
33990         var Point = (function (Geometry$$1) {
33991           function Point (coordinates, factory) {
33992             Geometry$$1.call(this, factory);
33993             this._coordinates = coordinates || null;
33994             this.init(this._coordinates);
33995           }
33996
33997           if ( Geometry$$1 ) { Point.__proto__ = Geometry$$1; }
33998           Point.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
33999           Point.prototype.constructor = Point;
34000
34001           var staticAccessors = { serialVersionUID: { configurable: true } };
34002           Point.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
34003             if (this.isEmpty()) {
34004               return new Envelope()
34005             }
34006             var env = new Envelope();
34007             env.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0));
34008             return env
34009           };
34010           Point.prototype.getSortIndex = function getSortIndex () {
34011             return Geometry$$1.SORTINDEX_POINT
34012           };
34013           Point.prototype.getCoordinates = function getCoordinates () {
34014             return this.isEmpty() ? [] : [this.getCoordinate()]
34015           };
34016           Point.prototype.equalsExact = function equalsExact () {
34017             if (arguments.length === 2) {
34018               var other = arguments[0];
34019               var tolerance = arguments[1];
34020               if (!this.isEquivalentClass(other)) {
34021                 return false
34022               }
34023               if (this.isEmpty() && other.isEmpty()) {
34024                 return true
34025               }
34026               if (this.isEmpty() !== other.isEmpty()) {
34027                 return false
34028               }
34029               return this.equal(other.getCoordinate(), this.getCoordinate(), tolerance)
34030             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
34031           };
34032           Point.prototype.normalize = function normalize () {};
34033           Point.prototype.getCoordinate = function getCoordinate () {
34034             return this._coordinates.size() !== 0 ? this._coordinates.getCoordinate(0) : null
34035           };
34036           Point.prototype.getBoundaryDimension = function getBoundaryDimension () {
34037             return Dimension.FALSE
34038           };
34039           Point.prototype.getDimension = function getDimension () {
34040             return 0
34041           };
34042           Point.prototype.getNumPoints = function getNumPoints () {
34043             return this.isEmpty() ? 0 : 1
34044           };
34045           Point.prototype.reverse = function reverse () {
34046             return this.copy()
34047           };
34048           Point.prototype.getX = function getX () {
34049             if (this.getCoordinate() === null) {
34050               throw new Error('getX called on empty Point')
34051             }
34052             return this.getCoordinate().x
34053           };
34054           Point.prototype.compareToSameClass = function compareToSameClass () {
34055             if (arguments.length === 1) {
34056               var other = arguments[0];
34057               var point$1 = other;
34058               return this.getCoordinate().compareTo(point$1.getCoordinate())
34059             } else if (arguments.length === 2) {
34060               var other$1 = arguments[0];
34061               var comp = arguments[1];
34062               var point = other$1;
34063               return comp.compare(this._coordinates, point._coordinates)
34064             }
34065           };
34066           Point.prototype.apply = function apply () {
34067             if (hasInterface(arguments[0], CoordinateFilter)) {
34068               var filter = arguments[0];
34069               if (this.isEmpty()) {
34070                 return null
34071               }
34072               filter.filter(this.getCoordinate());
34073             } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
34074               var filter$1 = arguments[0];
34075               if (this.isEmpty()) { return null }
34076               filter$1.filter(this._coordinates, 0);
34077               if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
34078             } else if (hasInterface(arguments[0], GeometryFilter)) {
34079               var filter$2 = arguments[0];
34080               filter$2.filter(this);
34081             } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
34082               var filter$3 = arguments[0];
34083               filter$3.filter(this);
34084             }
34085           };
34086           Point.prototype.getBoundary = function getBoundary () {
34087             return this.getFactory().createGeometryCollection(null)
34088           };
34089           Point.prototype.clone = function clone () {
34090             var p = Geometry$$1.prototype.clone.call(this);
34091             p._coordinates = this._coordinates.clone();
34092             return p
34093           };
34094           Point.prototype.getGeometryType = function getGeometryType () {
34095             return 'Point'
34096           };
34097           Point.prototype.copy = function copy () {
34098             return new Point(this._coordinates.copy(), this._factory)
34099           };
34100           Point.prototype.getCoordinateSequence = function getCoordinateSequence () {
34101             return this._coordinates
34102           };
34103           Point.prototype.getY = function getY () {
34104             if (this.getCoordinate() === null) {
34105               throw new Error('getY called on empty Point')
34106             }
34107             return this.getCoordinate().y
34108           };
34109           Point.prototype.isEmpty = function isEmpty () {
34110             return this._coordinates.size() === 0
34111           };
34112           Point.prototype.init = function init (coordinates) {
34113             if (coordinates === null) {
34114               coordinates = this.getFactory().getCoordinateSequenceFactory().create([]);
34115             }
34116             Assert.isTrue(coordinates.size() <= 1);
34117             this._coordinates = coordinates;
34118           };
34119           Point.prototype.isSimple = function isSimple () {
34120             return true
34121           };
34122           Point.prototype.interfaces_ = function interfaces_ () {
34123             return [Puntal]
34124           };
34125           Point.prototype.getClass = function getClass () {
34126             return Point
34127           };
34128           staticAccessors.serialVersionUID.get = function () { return 4902022702746614570 };
34129
34130           Object.defineProperties( Point, staticAccessors );
34131
34132           return Point;
34133         }(Geometry));
34134
34135         var Polygonal = function Polygonal () {};
34136
34137         Polygonal.prototype.interfaces_ = function interfaces_ () {
34138           return []
34139         };
34140         Polygonal.prototype.getClass = function getClass () {
34141           return Polygonal
34142         };
34143
34144         var Polygon = (function (Geometry$$1) {
34145           function Polygon (shell, holes, factory) {
34146             Geometry$$1.call(this, factory);
34147             this._shell = null;
34148             this._holes = null;
34149             if (shell === null) {
34150               shell = this.getFactory().createLinearRing();
34151             }
34152             if (holes === null) {
34153               holes = [];
34154             }
34155             if (Geometry$$1.hasNullElements(holes)) {
34156               throw new IllegalArgumentException('holes must not contain null elements')
34157             }
34158             if (shell.isEmpty() && Geometry$$1.hasNonEmptyElements(holes)) {
34159               throw new IllegalArgumentException('shell is empty but holes are not')
34160             }
34161             this._shell = shell;
34162             this._holes = holes;
34163           }
34164
34165           if ( Geometry$$1 ) { Polygon.__proto__ = Geometry$$1; }
34166           Polygon.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
34167           Polygon.prototype.constructor = Polygon;
34168
34169           var staticAccessors = { serialVersionUID: { configurable: true } };
34170           Polygon.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
34171             return this._shell.getEnvelopeInternal()
34172           };
34173           Polygon.prototype.getSortIndex = function getSortIndex () {
34174             return Geometry$$1.SORTINDEX_POLYGON
34175           };
34176           Polygon.prototype.getCoordinates = function getCoordinates () {
34177             var this$1 = this;
34178
34179             if (this.isEmpty()) {
34180               return []
34181             }
34182             var coordinates = new Array(this.getNumPoints()).fill(null);
34183             var k = -1;
34184             var shellCoordinates = this._shell.getCoordinates();
34185             for (var x = 0; x < shellCoordinates.length; x++) {
34186               k++;
34187               coordinates[k] = shellCoordinates[x];
34188             }
34189             for (var i = 0; i < this._holes.length; i++) {
34190               var childCoordinates = this$1._holes[i].getCoordinates();
34191               for (var j = 0; j < childCoordinates.length; j++) {
34192                 k++;
34193                 coordinates[k] = childCoordinates[j];
34194               }
34195             }
34196             return coordinates
34197           };
34198           Polygon.prototype.getArea = function getArea () {
34199             var this$1 = this;
34200
34201             var area = 0.0;
34202             area += Math.abs(CGAlgorithms.signedArea(this._shell.getCoordinateSequence()));
34203             for (var i = 0; i < this._holes.length; i++) {
34204               area -= Math.abs(CGAlgorithms.signedArea(this$1._holes[i].getCoordinateSequence()));
34205             }
34206             return area
34207           };
34208           Polygon.prototype.isRectangle = function isRectangle () {
34209             if (this.getNumInteriorRing() !== 0) { return false }
34210             if (this._shell === null) { return false }
34211             if (this._shell.getNumPoints() !== 5) { return false }
34212             var seq = this._shell.getCoordinateSequence();
34213             var env = this.getEnvelopeInternal();
34214             for (var i = 0; i < 5; i++) {
34215               var x = seq.getX(i);
34216               if (!(x === env.getMinX() || x === env.getMaxX())) { return false }
34217               var y = seq.getY(i);
34218               if (!(y === env.getMinY() || y === env.getMaxY())) { return false }
34219             }
34220             var prevX = seq.getX(0);
34221             var prevY = seq.getY(0);
34222             for (var i$1 = 1; i$1 <= 4; i$1++) {
34223               var x$1 = seq.getX(i$1);
34224               var y$1 = seq.getY(i$1);
34225               var xChanged = x$1 !== prevX;
34226               var yChanged = y$1 !== prevY;
34227               if (xChanged === yChanged) { return false }
34228               prevX = x$1;
34229               prevY = y$1;
34230             }
34231             return true
34232           };
34233           Polygon.prototype.equalsExact = function equalsExact () {
34234             var this$1 = this;
34235
34236             if (arguments.length === 2) {
34237               var other = arguments[0];
34238               var tolerance = arguments[1];
34239               if (!this.isEquivalentClass(other)) {
34240                 return false
34241               }
34242               var otherPolygon = other;
34243               var thisShell = this._shell;
34244               var otherPolygonShell = otherPolygon._shell;
34245               if (!thisShell.equalsExact(otherPolygonShell, tolerance)) {
34246                 return false
34247               }
34248               if (this._holes.length !== otherPolygon._holes.length) {
34249                 return false
34250               }
34251               for (var i = 0; i < this._holes.length; i++) {
34252                 if (!this$1._holes[i].equalsExact(otherPolygon._holes[i], tolerance)) {
34253                   return false
34254                 }
34255               }
34256               return true
34257             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
34258           };
34259           Polygon.prototype.normalize = function normalize () {
34260             var this$1 = this;
34261
34262             if (arguments.length === 0) {
34263               this.normalize(this._shell, true);
34264               for (var i = 0; i < this._holes.length; i++) {
34265                 this$1.normalize(this$1._holes[i], false);
34266               }
34267               Arrays.sort(this._holes);
34268             } else if (arguments.length === 2) {
34269               var ring = arguments[0];
34270               var clockwise = arguments[1];
34271               if (ring.isEmpty()) {
34272                 return null
34273               }
34274               var uniqueCoordinates = new Array(ring.getCoordinates().length - 1).fill(null);
34275               System.arraycopy(ring.getCoordinates(), 0, uniqueCoordinates, 0, uniqueCoordinates.length);
34276               var minCoordinate = CoordinateArrays.minCoordinate(ring.getCoordinates());
34277               CoordinateArrays.scroll(uniqueCoordinates, minCoordinate);
34278               System.arraycopy(uniqueCoordinates, 0, ring.getCoordinates(), 0, uniqueCoordinates.length);
34279               ring.getCoordinates()[uniqueCoordinates.length] = uniqueCoordinates[0];
34280               if (CGAlgorithms.isCCW(ring.getCoordinates()) === clockwise) {
34281                 CoordinateArrays.reverse(ring.getCoordinates());
34282               }
34283             }
34284           };
34285           Polygon.prototype.getCoordinate = function getCoordinate () {
34286             return this._shell.getCoordinate()
34287           };
34288           Polygon.prototype.getNumInteriorRing = function getNumInteriorRing () {
34289             return this._holes.length
34290           };
34291           Polygon.prototype.getBoundaryDimension = function getBoundaryDimension () {
34292             return 1
34293           };
34294           Polygon.prototype.getDimension = function getDimension () {
34295             return 2
34296           };
34297           Polygon.prototype.getLength = function getLength () {
34298             var this$1 = this;
34299
34300             var len = 0.0;
34301             len += this._shell.getLength();
34302             for (var i = 0; i < this._holes.length; i++) {
34303               len += this$1._holes[i].getLength();
34304             }
34305             return len
34306           };
34307           Polygon.prototype.getNumPoints = function getNumPoints () {
34308             var this$1 = this;
34309
34310             var numPoints = this._shell.getNumPoints();
34311             for (var i = 0; i < this._holes.length; i++) {
34312               numPoints += this$1._holes[i].getNumPoints();
34313             }
34314             return numPoints
34315           };
34316           Polygon.prototype.reverse = function reverse () {
34317             var this$1 = this;
34318
34319             var poly = this.copy();
34320             poly._shell = this._shell.copy().reverse();
34321             poly._holes = new Array(this._holes.length).fill(null);
34322             for (var i = 0; i < this._holes.length; i++) {
34323               poly._holes[i] = this$1._holes[i].copy().reverse();
34324             }
34325             return poly
34326           };
34327           Polygon.prototype.convexHull = function convexHull () {
34328             return this.getExteriorRing().convexHull()
34329           };
34330           Polygon.prototype.compareToSameClass = function compareToSameClass () {
34331             var this$1 = this;
34332
34333             if (arguments.length === 1) {
34334               var o = arguments[0];
34335               var thisShell = this._shell;
34336               var otherShell = o._shell;
34337               return thisShell.compareToSameClass(otherShell)
34338             } else if (arguments.length === 2) {
34339               var o$1 = arguments[0];
34340               var comp = arguments[1];
34341               var poly = o$1;
34342               var thisShell$1 = this._shell;
34343               var otherShell$1 = poly._shell;
34344               var shellComp = thisShell$1.compareToSameClass(otherShell$1, comp);
34345               if (shellComp !== 0) { return shellComp }
34346               var nHole1 = this.getNumInteriorRing();
34347               var nHole2 = poly.getNumInteriorRing();
34348               var i = 0;
34349               while (i < nHole1 && i < nHole2) {
34350                 var thisHole = this$1.getInteriorRingN(i);
34351                 var otherHole = poly.getInteriorRingN(i);
34352                 var holeComp = thisHole.compareToSameClass(otherHole, comp);
34353                 if (holeComp !== 0) { return holeComp }
34354                 i++;
34355               }
34356               if (i < nHole1) { return 1 }
34357               if (i < nHole2) { return -1 }
34358               return 0
34359             }
34360           };
34361           Polygon.prototype.apply = function apply (filter) {
34362             var this$1 = this;
34363
34364             if (hasInterface(filter, CoordinateFilter)) {
34365               this._shell.apply(filter);
34366               for (var i$1 = 0; i$1 < this._holes.length; i$1++) {
34367                 this$1._holes[i$1].apply(filter);
34368               }
34369             } else if (hasInterface(filter, CoordinateSequenceFilter)) {
34370               this._shell.apply(filter);
34371               if (!filter.isDone()) {
34372                 for (var i$2 = 0; i$2 < this._holes.length; i$2++) {
34373                   this$1._holes[i$2].apply(filter);
34374                   if (filter.isDone()) { break }
34375                 }
34376               }
34377               if (filter.isGeometryChanged()) { this.geometryChanged(); }
34378             } else if (hasInterface(filter, GeometryFilter)) {
34379               filter.filter(this);
34380             } else if (hasInterface(filter, GeometryComponentFilter)) {
34381               filter.filter(this);
34382               this._shell.apply(filter);
34383               for (var i = 0; i < this._holes.length; i++) {
34384                 this$1._holes[i].apply(filter);
34385               }
34386             }
34387           };
34388           Polygon.prototype.getBoundary = function getBoundary () {
34389             var this$1 = this;
34390
34391             if (this.isEmpty()) {
34392               return this.getFactory().createMultiLineString()
34393             }
34394             var rings = new Array(this._holes.length + 1).fill(null);
34395             rings[0] = this._shell;
34396             for (var i = 0; i < this._holes.length; i++) {
34397               rings[i + 1] = this$1._holes[i];
34398             }
34399             if (rings.length <= 1) { return this.getFactory().createLinearRing(rings[0].getCoordinateSequence()) }
34400             return this.getFactory().createMultiLineString(rings)
34401           };
34402           Polygon.prototype.clone = function clone () {
34403             var this$1 = this;
34404
34405             var poly = Geometry$$1.prototype.clone.call(this);
34406             poly._shell = this._shell.clone();
34407             poly._holes = new Array(this._holes.length).fill(null);
34408             for (var i = 0; i < this._holes.length; i++) {
34409               poly._holes[i] = this$1._holes[i].clone();
34410             }
34411             return poly
34412           };
34413           Polygon.prototype.getGeometryType = function getGeometryType () {
34414             return 'Polygon'
34415           };
34416           Polygon.prototype.copy = function copy () {
34417             var this$1 = this;
34418
34419             var shell = this._shell.copy();
34420             var holes = new Array(this._holes.length).fill(null);
34421             for (var i = 0; i < holes.length; i++) {
34422               holes[i] = this$1._holes[i].copy();
34423             }
34424             return new Polygon(shell, holes, this._factory)
34425           };
34426           Polygon.prototype.getExteriorRing = function getExteriorRing () {
34427             return this._shell
34428           };
34429           Polygon.prototype.isEmpty = function isEmpty () {
34430             return this._shell.isEmpty()
34431           };
34432           Polygon.prototype.getInteriorRingN = function getInteriorRingN (n) {
34433             return this._holes[n]
34434           };
34435           Polygon.prototype.interfaces_ = function interfaces_ () {
34436             return [Polygonal]
34437           };
34438           Polygon.prototype.getClass = function getClass () {
34439             return Polygon
34440           };
34441           staticAccessors.serialVersionUID.get = function () { return -3494792200821764533 };
34442
34443           Object.defineProperties( Polygon, staticAccessors );
34444
34445           return Polygon;
34446         }(Geometry));
34447
34448         var MultiPoint = (function (GeometryCollection$$1) {
34449           function MultiPoint () {
34450             GeometryCollection$$1.apply(this, arguments);
34451           }
34452
34453           if ( GeometryCollection$$1 ) { MultiPoint.__proto__ = GeometryCollection$$1; }
34454           MultiPoint.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
34455           MultiPoint.prototype.constructor = MultiPoint;
34456
34457           var staticAccessors = { serialVersionUID: { configurable: true } };
34458
34459           MultiPoint.prototype.getSortIndex = function getSortIndex () {
34460             return Geometry.SORTINDEX_MULTIPOINT
34461           };
34462           MultiPoint.prototype.isValid = function isValid () {
34463             return true
34464           };
34465           MultiPoint.prototype.equalsExact = function equalsExact () {
34466             if (arguments.length === 2) {
34467               var other = arguments[0];
34468               var tolerance = arguments[1];
34469               if (!this.isEquivalentClass(other)) {
34470                 return false
34471               }
34472               return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
34473             } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
34474           };
34475           MultiPoint.prototype.getCoordinate = function getCoordinate () {
34476             if (arguments.length === 1) {
34477               var n = arguments[0];
34478               return this._geometries[n].getCoordinate()
34479             } else { return GeometryCollection$$1.prototype.getCoordinate.apply(this, arguments) }
34480           };
34481           MultiPoint.prototype.getBoundaryDimension = function getBoundaryDimension () {
34482             return Dimension.FALSE
34483           };
34484           MultiPoint.prototype.getDimension = function getDimension () {
34485             return 0
34486           };
34487           MultiPoint.prototype.getBoundary = function getBoundary () {
34488             return this.getFactory().createGeometryCollection(null)
34489           };
34490           MultiPoint.prototype.getGeometryType = function getGeometryType () {
34491             return 'MultiPoint'
34492           };
34493           MultiPoint.prototype.copy = function copy () {
34494             var this$1 = this;
34495
34496             var points = new Array(this._geometries.length).fill(null);
34497             for (var i = 0; i < points.length; i++) {
34498               points[i] = this$1._geometries[i].copy();
34499             }
34500             return new MultiPoint(points, this._factory)
34501           };
34502           MultiPoint.prototype.interfaces_ = function interfaces_ () {
34503             return [Puntal]
34504           };
34505           MultiPoint.prototype.getClass = function getClass () {
34506             return MultiPoint
34507           };
34508           staticAccessors.serialVersionUID.get = function () { return -8048474874175355449 };
34509
34510           Object.defineProperties( MultiPoint, staticAccessors );
34511
34512           return MultiPoint;
34513         }(GeometryCollection));
34514
34515         var LinearRing = (function (LineString$$1) {
34516           function LinearRing (points, factory) {
34517             if (points instanceof Coordinate && factory instanceof GeometryFactory) {
34518               points = factory.getCoordinateSequenceFactory().create(points);
34519             }
34520             LineString$$1.call(this, points, factory);
34521             this.validateConstruction();
34522           }
34523
34524           if ( LineString$$1 ) { LinearRing.__proto__ = LineString$$1; }
34525           LinearRing.prototype = Object.create( LineString$$1 && LineString$$1.prototype );
34526           LinearRing.prototype.constructor = LinearRing;
34527
34528           var staticAccessors = { MINIMUM_VALID_SIZE: { configurable: true },serialVersionUID: { configurable: true } };
34529           LinearRing.prototype.getSortIndex = function getSortIndex () {
34530             return Geometry.SORTINDEX_LINEARRING
34531           };
34532           LinearRing.prototype.getBoundaryDimension = function getBoundaryDimension () {
34533             return Dimension.FALSE
34534           };
34535           LinearRing.prototype.isClosed = function isClosed () {
34536             if (this.isEmpty()) {
34537               return true
34538             }
34539             return LineString$$1.prototype.isClosed.call(this)
34540           };
34541           LinearRing.prototype.reverse = function reverse () {
34542             var seq = this._points.copy();
34543             CoordinateSequences.reverse(seq);
34544             var rev = this.getFactory().createLinearRing(seq);
34545             return rev
34546           };
34547           LinearRing.prototype.validateConstruction = function validateConstruction () {
34548             if (!this.isEmpty() && !LineString$$1.prototype.isClosed.call(this)) {
34549               throw new IllegalArgumentException('Points of LinearRing do not form a closed linestring')
34550             }
34551             if (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < LinearRing.MINIMUM_VALID_SIZE) {
34552               throw new IllegalArgumentException('Invalid number of points in LinearRing (found ' + this.getCoordinateSequence().size() + ' - must be 0 or >= 4)')
34553             }
34554           };
34555           LinearRing.prototype.getGeometryType = function getGeometryType () {
34556             return 'LinearRing'
34557           };
34558           LinearRing.prototype.copy = function copy () {
34559             return new LinearRing(this._points.copy(), this._factory)
34560           };
34561           LinearRing.prototype.interfaces_ = function interfaces_ () {
34562             return []
34563           };
34564           LinearRing.prototype.getClass = function getClass () {
34565             return LinearRing
34566           };
34567           staticAccessors.MINIMUM_VALID_SIZE.get = function () { return 4 };
34568           staticAccessors.serialVersionUID.get = function () { return -4261142084085851829 };
34569
34570           Object.defineProperties( LinearRing, staticAccessors );
34571
34572           return LinearRing;
34573         }(LineString));
34574
34575         var MultiPolygon = (function (GeometryCollection$$1) {
34576           function MultiPolygon () {
34577             GeometryCollection$$1.apply(this, arguments);
34578           }
34579
34580           if ( GeometryCollection$$1 ) { MultiPolygon.__proto__ = GeometryCollection$$1; }
34581           MultiPolygon.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
34582           MultiPolygon.prototype.constructor = MultiPolygon;
34583
34584           var staticAccessors = { serialVersionUID: { configurable: true } };
34585
34586           MultiPolygon.prototype.getSortIndex = function getSortIndex () {
34587             return Geometry.SORTINDEX_MULTIPOLYGON
34588           };
34589           MultiPolygon.prototype.equalsExact = function equalsExact () {
34590             if (arguments.length === 2) {
34591               var other = arguments[0];
34592               var tolerance = arguments[1];
34593               if (!this.isEquivalentClass(other)) {
34594                 return false
34595               }
34596               return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
34597             } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
34598           };
34599           MultiPolygon.prototype.getBoundaryDimension = function getBoundaryDimension () {
34600             return 1
34601           };
34602           MultiPolygon.prototype.getDimension = function getDimension () {
34603             return 2
34604           };
34605           MultiPolygon.prototype.reverse = function reverse () {
34606             var this$1 = this;
34607
34608             var n = this._geometries.length;
34609             var revGeoms = new Array(n).fill(null);
34610             for (var i = 0; i < this._geometries.length; i++) {
34611               revGeoms[i] = this$1._geometries[i].reverse();
34612             }
34613             return this.getFactory().createMultiPolygon(revGeoms)
34614           };
34615           MultiPolygon.prototype.getBoundary = function getBoundary () {
34616             var this$1 = this;
34617
34618             if (this.isEmpty()) {
34619               return this.getFactory().createMultiLineString()
34620             }
34621             var allRings = new ArrayList();
34622             for (var i = 0; i < this._geometries.length; i++) {
34623               var polygon = this$1._geometries[i];
34624               var rings = polygon.getBoundary();
34625               for (var j = 0; j < rings.getNumGeometries(); j++) {
34626                 allRings.add(rings.getGeometryN(j));
34627               }
34628             }
34629             var allRingsArray = new Array(allRings.size()).fill(null);
34630             return this.getFactory().createMultiLineString(allRings.toArray(allRingsArray))
34631           };
34632           MultiPolygon.prototype.getGeometryType = function getGeometryType () {
34633             return 'MultiPolygon'
34634           };
34635           MultiPolygon.prototype.copy = function copy () {
34636             var this$1 = this;
34637
34638             var polygons = new Array(this._geometries.length).fill(null);
34639             for (var i = 0; i < polygons.length; i++) {
34640               polygons[i] = this$1._geometries[i].copy();
34641             }
34642             return new MultiPolygon(polygons, this._factory)
34643           };
34644           MultiPolygon.prototype.interfaces_ = function interfaces_ () {
34645             return [Polygonal]
34646           };
34647           MultiPolygon.prototype.getClass = function getClass () {
34648             return MultiPolygon
34649           };
34650           staticAccessors.serialVersionUID.get = function () { return -551033529766975875 };
34651
34652           Object.defineProperties( MultiPolygon, staticAccessors );
34653
34654           return MultiPolygon;
34655         }(GeometryCollection));
34656
34657         var GeometryEditor = function GeometryEditor (factory) {
34658           this._factory = factory || null;
34659           this._isUserDataCopied = false;
34660         };
34661
34662         var staticAccessors$16 = { NoOpGeometryOperation: { configurable: true },CoordinateOperation: { configurable: true },CoordinateSequenceOperation: { configurable: true } };
34663         GeometryEditor.prototype.setCopyUserData = function setCopyUserData (isUserDataCopied) {
34664           this._isUserDataCopied = isUserDataCopied;
34665         };
34666         GeometryEditor.prototype.edit = function edit (geometry, operation) {
34667           if (geometry === null) { return null }
34668           var result = this.editInternal(geometry, operation);
34669           if (this._isUserDataCopied) {
34670             result.setUserData(geometry.getUserData());
34671           }
34672           return result
34673         };
34674         GeometryEditor.prototype.editInternal = function editInternal (geometry, operation) {
34675           if (this._factory === null) { this._factory = geometry.getFactory(); }
34676           if (geometry instanceof GeometryCollection) {
34677             return this.editGeometryCollection(geometry, operation)
34678           }
34679           if (geometry instanceof Polygon) {
34680             return this.editPolygon(geometry, operation)
34681           }
34682           if (geometry instanceof Point) {
34683             return operation.edit(geometry, this._factory)
34684           }
34685           if (geometry instanceof LineString) {
34686             return operation.edit(geometry, this._factory)
34687           }
34688           Assert.shouldNeverReachHere('Unsupported Geometry class: ' + geometry.getClass().getName());
34689           return null
34690         };
34691         GeometryEditor.prototype.editGeometryCollection = function editGeometryCollection (collection, operation) {
34692             var this$1 = this;
34693
34694           var collectionForType = operation.edit(collection, this._factory);
34695           var geometries = new ArrayList();
34696           for (var i = 0; i < collectionForType.getNumGeometries(); i++) {
34697             var geometry = this$1.edit(collectionForType.getGeometryN(i), operation);
34698             if (geometry === null || geometry.isEmpty()) {
34699               continue
34700             }
34701             geometries.add(geometry);
34702           }
34703           if (collectionForType.getClass() === MultiPoint) {
34704             return this._factory.createMultiPoint(geometries.toArray([]))
34705           }
34706           if (collectionForType.getClass() === MultiLineString) {
34707             return this._factory.createMultiLineString(geometries.toArray([]))
34708           }
34709           if (collectionForType.getClass() === MultiPolygon) {
34710             return this._factory.createMultiPolygon(geometries.toArray([]))
34711           }
34712           return this._factory.createGeometryCollection(geometries.toArray([]))
34713         };
34714         GeometryEditor.prototype.editPolygon = function editPolygon (polygon, operation) {
34715             var this$1 = this;
34716
34717           var newPolygon = operation.edit(polygon, this._factory);
34718           if (newPolygon === null) { newPolygon = this._factory.createPolygon(null); }
34719           if (newPolygon.isEmpty()) {
34720             return newPolygon
34721           }
34722           var shell = this.edit(newPolygon.getExteriorRing(), operation);
34723           if (shell === null || shell.isEmpty()) {
34724             return this._factory.createPolygon()
34725           }
34726           var holes = new ArrayList();
34727           for (var i = 0; i < newPolygon.getNumInteriorRing(); i++) {
34728             var hole = this$1.edit(newPolygon.getInteriorRingN(i), operation);
34729             if (hole === null || hole.isEmpty()) {
34730               continue
34731             }
34732             holes.add(hole);
34733           }
34734           return this._factory.createPolygon(shell, holes.toArray([]))
34735         };
34736         GeometryEditor.prototype.interfaces_ = function interfaces_ () {
34737           return []
34738         };
34739         GeometryEditor.prototype.getClass = function getClass () {
34740           return GeometryEditor
34741         };
34742         GeometryEditor.GeometryEditorOperation = function GeometryEditorOperation () {};
34743         staticAccessors$16.NoOpGeometryOperation.get = function () { return NoOpGeometryOperation };
34744         staticAccessors$16.CoordinateOperation.get = function () { return CoordinateOperation };
34745         staticAccessors$16.CoordinateSequenceOperation.get = function () { return CoordinateSequenceOperation };
34746
34747         Object.defineProperties( GeometryEditor, staticAccessors$16 );
34748
34749         var NoOpGeometryOperation = function NoOpGeometryOperation () {};
34750
34751         NoOpGeometryOperation.prototype.edit = function edit (geometry, factory) {
34752           return geometry
34753         };
34754         NoOpGeometryOperation.prototype.interfaces_ = function interfaces_ () {
34755           return [GeometryEditor.GeometryEditorOperation]
34756         };
34757         NoOpGeometryOperation.prototype.getClass = function getClass () {
34758           return NoOpGeometryOperation
34759         };
34760
34761         var CoordinateOperation = function CoordinateOperation () {};
34762
34763         CoordinateOperation.prototype.edit = function edit (geometry, factory) {
34764           var coords = this.editCoordinates(geometry.getCoordinates(), geometry);
34765           if (coords === null) { return geometry }
34766           if (geometry instanceof LinearRing) {
34767             return factory.createLinearRing(coords)
34768           }
34769           if (geometry instanceof LineString) {
34770             return factory.createLineString(coords)
34771           }
34772           if (geometry instanceof Point) {
34773             if (coords.length > 0) {
34774               return factory.createPoint(coords[0])
34775             } else {
34776               return factory.createPoint()
34777             }
34778           }
34779           return geometry
34780         };
34781         CoordinateOperation.prototype.interfaces_ = function interfaces_ () {
34782           return [GeometryEditor.GeometryEditorOperation]
34783         };
34784         CoordinateOperation.prototype.getClass = function getClass () {
34785           return CoordinateOperation
34786         };
34787
34788         var CoordinateSequenceOperation = function CoordinateSequenceOperation () {};
34789
34790         CoordinateSequenceOperation.prototype.edit = function edit (geometry, factory) {
34791           if (geometry instanceof LinearRing) {
34792             return factory.createLinearRing(this.edit(geometry.getCoordinateSequence(), geometry))
34793           }
34794           if (geometry instanceof LineString) {
34795             return factory.createLineString(this.edit(geometry.getCoordinateSequence(), geometry))
34796           }
34797           if (geometry instanceof Point) {
34798             return factory.createPoint(this.edit(geometry.getCoordinateSequence(), geometry))
34799           }
34800           return geometry
34801         };
34802         CoordinateSequenceOperation.prototype.interfaces_ = function interfaces_ () {
34803           return [GeometryEditor.GeometryEditorOperation]
34804         };
34805         CoordinateSequenceOperation.prototype.getClass = function getClass () {
34806           return CoordinateSequenceOperation
34807         };
34808
34809         var CoordinateArraySequence = function CoordinateArraySequence () {
34810           var this$1 = this;
34811
34812           this._dimension = 3;
34813           this._coordinates = null;
34814           if (arguments.length === 1) {
34815             if (arguments[0] instanceof Array) {
34816               this._coordinates = arguments[0];
34817               this._dimension = 3;
34818             } else if (Number.isInteger(arguments[0])) {
34819               var size = arguments[0];
34820               this._coordinates = new Array(size).fill(null);
34821               for (var i = 0; i < size; i++) {
34822                 this$1._coordinates[i] = new Coordinate();
34823               }
34824             } else if (hasInterface(arguments[0], CoordinateSequence)) {
34825               var coordSeq = arguments[0];
34826               if (coordSeq === null) {
34827                 this._coordinates = new Array(0).fill(null);
34828                 return null
34829               }
34830               this._dimension = coordSeq.getDimension();
34831               this._coordinates = new Array(coordSeq.size()).fill(null);
34832               for (var i$1 = 0; i$1 < this._coordinates.length; i$1++) {
34833                 this$1._coordinates[i$1] = coordSeq.getCoordinateCopy(i$1);
34834               }
34835             }
34836           } else if (arguments.length === 2) {
34837             if (arguments[0] instanceof Array && Number.isInteger(arguments[1])) {
34838               var coordinates = arguments[0];
34839               var dimension = arguments[1];
34840               this._coordinates = coordinates;
34841               this._dimension = dimension;
34842               if (coordinates === null) { this._coordinates = new Array(0).fill(null); }
34843             } else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) {
34844               var size$1 = arguments[0];
34845               var dimension$1 = arguments[1];
34846               this._coordinates = new Array(size$1).fill(null);
34847               this._dimension = dimension$1;
34848               for (var i$2 = 0; i$2 < size$1; i$2++) {
34849                 this$1._coordinates[i$2] = new Coordinate();
34850               }
34851             }
34852           }
34853         };
34854
34855         var staticAccessors$18 = { serialVersionUID: { configurable: true } };
34856         CoordinateArraySequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {
34857           switch (ordinateIndex) {
34858             case CoordinateSequence.X:
34859               this._coordinates[index].x = value;
34860               break
34861             case CoordinateSequence.Y:
34862               this._coordinates[index].y = value;
34863               break
34864             case CoordinateSequence.Z:
34865               this._coordinates[index].z = value;
34866               break
34867             default:
34868               throw new IllegalArgumentException('invalid ordinateIndex')
34869           }
34870         };
34871         CoordinateArraySequence.prototype.size = function size () {
34872           return this._coordinates.length
34873         };
34874         CoordinateArraySequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {
34875           switch (ordinateIndex) {
34876             case CoordinateSequence.X:
34877               return this._coordinates[index].x
34878             case CoordinateSequence.Y:
34879               return this._coordinates[index].y
34880             case CoordinateSequence.Z:
34881               return this._coordinates[index].z
34882           }
34883           return Double.NaN
34884         };
34885         CoordinateArraySequence.prototype.getCoordinate = function getCoordinate () {
34886           if (arguments.length === 1) {
34887             var i = arguments[0];
34888             return this._coordinates[i]
34889           } else if (arguments.length === 2) {
34890             var index = arguments[0];
34891             var coord = arguments[1];
34892             coord.x = this._coordinates[index].x;
34893             coord.y = this._coordinates[index].y;
34894             coord.z = this._coordinates[index].z;
34895           }
34896         };
34897         CoordinateArraySequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {
34898           return new Coordinate(this._coordinates[i])
34899         };
34900         CoordinateArraySequence.prototype.getDimension = function getDimension () {
34901           return this._dimension
34902         };
34903         CoordinateArraySequence.prototype.getX = function getX (index) {
34904           return this._coordinates[index].x
34905         };
34906         CoordinateArraySequence.prototype.clone = function clone () {
34907             var this$1 = this;
34908
34909           var cloneCoordinates = new Array(this.size()).fill(null);
34910           for (var i = 0; i < this._coordinates.length; i++) {
34911             cloneCoordinates[i] = this$1._coordinates[i].clone();
34912           }
34913           return new CoordinateArraySequence(cloneCoordinates, this._dimension)
34914         };
34915         CoordinateArraySequence.prototype.expandEnvelope = function expandEnvelope (env) {
34916             var this$1 = this;
34917
34918           for (var i = 0; i < this._coordinates.length; i++) {
34919             env.expandToInclude(this$1._coordinates[i]);
34920           }
34921           return env
34922         };
34923         CoordinateArraySequence.prototype.copy = function copy () {
34924             var this$1 = this;
34925
34926           var cloneCoordinates = new Array(this.size()).fill(null);
34927           for (var i = 0; i < this._coordinates.length; i++) {
34928             cloneCoordinates[i] = this$1._coordinates[i].copy();
34929           }
34930           return new CoordinateArraySequence(cloneCoordinates, this._dimension)
34931         };
34932         CoordinateArraySequence.prototype.toString = function toString () {
34933             var this$1 = this;
34934
34935           if (this._coordinates.length > 0) {
34936             var strBuf = new StringBuffer(17 * this._coordinates.length);
34937             strBuf.append('(');
34938             strBuf.append(this._coordinates[0]);
34939             for (var i = 1; i < this._coordinates.length; i++) {
34940               strBuf.append(', ');
34941               strBuf.append(this$1._coordinates[i]);
34942             }
34943             strBuf.append(')');
34944             return strBuf.toString()
34945           } else {
34946             return '()'
34947           }
34948         };
34949         CoordinateArraySequence.prototype.getY = function getY (index) {
34950           return this._coordinates[index].y
34951         };
34952         CoordinateArraySequence.prototype.toCoordinateArray = function toCoordinateArray () {
34953           return this._coordinates
34954         };
34955         CoordinateArraySequence.prototype.interfaces_ = function interfaces_ () {
34956           return [CoordinateSequence, Serializable]
34957         };
34958         CoordinateArraySequence.prototype.getClass = function getClass () {
34959           return CoordinateArraySequence
34960         };
34961         staticAccessors$18.serialVersionUID.get = function () { return -915438501601840650 };
34962
34963         Object.defineProperties( CoordinateArraySequence, staticAccessors$18 );
34964
34965         var CoordinateArraySequenceFactory = function CoordinateArraySequenceFactory () {};
34966
34967         var staticAccessors$17 = { serialVersionUID: { configurable: true },instanceObject: { configurable: true } };
34968
34969         CoordinateArraySequenceFactory.prototype.readResolve = function readResolve () {
34970           return CoordinateArraySequenceFactory.instance()
34971         };
34972         CoordinateArraySequenceFactory.prototype.create = function create () {
34973           if (arguments.length === 1) {
34974             if (arguments[0] instanceof Array) {
34975               var coordinates = arguments[0];
34976               return new CoordinateArraySequence(coordinates)
34977             } else if (hasInterface(arguments[0], CoordinateSequence)) {
34978               var coordSeq = arguments[0];
34979               return new CoordinateArraySequence(coordSeq)
34980             }
34981           } else if (arguments.length === 2) {
34982             var size = arguments[0];
34983             var dimension = arguments[1];
34984             if (dimension > 3) { dimension = 3; }
34985             if (dimension < 2) { return new CoordinateArraySequence(size) }
34986             return new CoordinateArraySequence(size, dimension)
34987           }
34988         };
34989         CoordinateArraySequenceFactory.prototype.interfaces_ = function interfaces_ () {
34990           return [CoordinateSequenceFactory, Serializable]
34991         };
34992         CoordinateArraySequenceFactory.prototype.getClass = function getClass () {
34993           return CoordinateArraySequenceFactory
34994         };
34995         CoordinateArraySequenceFactory.instance = function instance () {
34996           return CoordinateArraySequenceFactory.instanceObject
34997         };
34998
34999         staticAccessors$17.serialVersionUID.get = function () { return -4099577099607551657 };
35000         staticAccessors$17.instanceObject.get = function () { return new CoordinateArraySequenceFactory() };
35001
35002         Object.defineProperties( CoordinateArraySequenceFactory, staticAccessors$17 );
35003
35004         /**
35005          * @see http://download.oracle.com/javase/6/docs/api/java/util/HashMap.html
35006          *
35007          * @extends {javascript.util.Map}
35008          * @constructor
35009          * @private
35010          */
35011         var HashMap = (function (MapInterface) {
35012           function HashMap () {
35013             MapInterface.call(this);
35014             this.map_ = new Map();
35015           }
35016
35017           if ( MapInterface ) { HashMap.__proto__ = MapInterface; }
35018           HashMap.prototype = Object.create( MapInterface && MapInterface.prototype );
35019           HashMap.prototype.constructor = HashMap;
35020           /**
35021            * @override
35022            */
35023           HashMap.prototype.get = function get (key) {
35024             return this.map_.get(key) || null
35025           };
35026
35027           /**
35028            * @override
35029            */
35030           HashMap.prototype.put = function put (key, value) {
35031             this.map_.set(key, value);
35032             return value
35033           };
35034
35035           /**
35036            * @override
35037            */
35038           HashMap.prototype.values = function values () {
35039             var arrayList = new ArrayList();
35040             var it = this.map_.values();
35041             var o = it.next();
35042             while (!o.done) {
35043               arrayList.add(o.value);
35044               o = it.next();
35045             }
35046             return arrayList
35047           };
35048
35049           /**
35050            * @override
35051            */
35052           HashMap.prototype.entrySet = function entrySet () {
35053             var hashSet = new HashSet();
35054             this.map_.entries().forEach(function (entry) { return hashSet.add(entry); });
35055             return hashSet
35056           };
35057
35058           /**
35059            * @override
35060            */
35061           HashMap.prototype.size = function size () {
35062             return this.map_.size()
35063           };
35064
35065           return HashMap;
35066         }(Map$1$1));
35067
35068         var PrecisionModel = function PrecisionModel () {
35069           this._modelType = null;
35070           this._scale = null;
35071           if (arguments.length === 0) {
35072             this._modelType = PrecisionModel.FLOATING;
35073           } else if (arguments.length === 1) {
35074             if (arguments[0] instanceof Type) {
35075               var modelType = arguments[0];
35076               this._modelType = modelType;
35077               if (modelType === PrecisionModel.FIXED) {
35078                 this.setScale(1.0);
35079               }
35080             } else if (typeof arguments[0] === 'number') {
35081               var scale = arguments[0];
35082               this._modelType = PrecisionModel.FIXED;
35083               this.setScale(scale);
35084             } else if (arguments[0] instanceof PrecisionModel) {
35085               var pm = arguments[0];
35086               this._modelType = pm._modelType;
35087               this._scale = pm._scale;
35088             }
35089           }
35090         };
35091
35092         var staticAccessors$19 = { serialVersionUID: { configurable: true },maximumPreciseValue: { configurable: true } };
35093         PrecisionModel.prototype.equals = function equals (other) {
35094           if (!(other instanceof PrecisionModel)) {
35095             return false
35096           }
35097           var otherPrecisionModel = other;
35098           return this._modelType === otherPrecisionModel._modelType && this._scale === otherPrecisionModel._scale
35099         };
35100         PrecisionModel.prototype.compareTo = function compareTo (o) {
35101           var other = o;
35102           var sigDigits = this.getMaximumSignificantDigits();
35103           var otherSigDigits = other.getMaximumSignificantDigits();
35104           return new Integer(sigDigits).compareTo(new Integer(otherSigDigits))
35105         };
35106         PrecisionModel.prototype.getScale = function getScale () {
35107           return this._scale
35108         };
35109         PrecisionModel.prototype.isFloating = function isFloating () {
35110           return this._modelType === PrecisionModel.FLOATING || this._modelType === PrecisionModel.FLOATING_SINGLE
35111         };
35112         PrecisionModel.prototype.getType = function getType () {
35113           return this._modelType
35114         };
35115         PrecisionModel.prototype.toString = function toString () {
35116           var description = 'UNKNOWN';
35117           if (this._modelType === PrecisionModel.FLOATING) {
35118             description = 'Floating';
35119           } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
35120             description = 'Floating-Single';
35121           } else if (this._modelType === PrecisionModel.FIXED) {
35122             description = 'Fixed (Scale=' + this.getScale() + ')';
35123           }
35124           return description
35125         };
35126         PrecisionModel.prototype.makePrecise = function makePrecise () {
35127           if (typeof arguments[0] === 'number') {
35128             var val = arguments[0];
35129             if (Double.isNaN(val)) { return val }
35130             if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
35131               var floatSingleVal = val;
35132               return floatSingleVal
35133             }
35134             if (this._modelType === PrecisionModel.FIXED) {
35135               return Math.round(val * this._scale) / this._scale
35136             }
35137             return val
35138           } else if (arguments[0] instanceof Coordinate) {
35139             var coord = arguments[0];
35140             if (this._modelType === PrecisionModel.FLOATING) { return null }
35141             coord.x = this.makePrecise(coord.x);
35142             coord.y = this.makePrecise(coord.y);
35143           }
35144         };
35145         PrecisionModel.prototype.getMaximumSignificantDigits = function getMaximumSignificantDigits () {
35146           var maxSigDigits = 16;
35147           if (this._modelType === PrecisionModel.FLOATING) {
35148             maxSigDigits = 16;
35149           } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
35150             maxSigDigits = 6;
35151           } else if (this._modelType === PrecisionModel.FIXED) {
35152             maxSigDigits = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)));
35153           }
35154           return maxSigDigits
35155         };
35156         PrecisionModel.prototype.setScale = function setScale (scale) {
35157           this._scale = Math.abs(scale);
35158         };
35159         PrecisionModel.prototype.interfaces_ = function interfaces_ () {
35160           return [Serializable, Comparable]
35161         };
35162         PrecisionModel.prototype.getClass = function getClass () {
35163           return PrecisionModel
35164         };
35165         PrecisionModel.mostPrecise = function mostPrecise (pm1, pm2) {
35166           if (pm1.compareTo(pm2) >= 0) { return pm1 }
35167           return pm2
35168         };
35169         staticAccessors$19.serialVersionUID.get = function () { return 7777263578777803835 };
35170         staticAccessors$19.maximumPreciseValue.get = function () { return 9007199254740992.0 };
35171
35172         Object.defineProperties( PrecisionModel, staticAccessors$19 );
35173
35174         var Type = function Type (name) {
35175           this._name = name || null;
35176           Type.nameToTypeMap.put(name, this);
35177         };
35178
35179         var staticAccessors$1$1 = { serialVersionUID: { configurable: true },nameToTypeMap: { configurable: true } };
35180         Type.prototype.readResolve = function readResolve () {
35181           return Type.nameToTypeMap.get(this._name)
35182         };
35183         Type.prototype.toString = function toString () {
35184           return this._name
35185         };
35186         Type.prototype.interfaces_ = function interfaces_ () {
35187           return [Serializable]
35188         };
35189         Type.prototype.getClass = function getClass () {
35190           return Type
35191         };
35192         staticAccessors$1$1.serialVersionUID.get = function () { return -5528602631731589822 };
35193         staticAccessors$1$1.nameToTypeMap.get = function () { return new HashMap() };
35194
35195         Object.defineProperties( Type, staticAccessors$1$1 );
35196
35197         PrecisionModel.Type = Type;
35198         PrecisionModel.FIXED = new Type('FIXED');
35199         PrecisionModel.FLOATING = new Type('FLOATING');
35200         PrecisionModel.FLOATING_SINGLE = new Type('FLOATING SINGLE');
35201
35202         var GeometryFactory = function GeometryFactory () {
35203           this._precisionModel = new PrecisionModel();
35204           this._SRID = 0;
35205           this._coordinateSequenceFactory = GeometryFactory.getDefaultCoordinateSequenceFactory();
35206
35207           if (arguments.length === 0) ; else if (arguments.length === 1) {
35208             if (hasInterface(arguments[0], CoordinateSequenceFactory)) {
35209               this._coordinateSequenceFactory = arguments[0];
35210             } else if (arguments[0] instanceof PrecisionModel) {
35211               this._precisionModel = arguments[0];
35212             }
35213           } else if (arguments.length === 2) {
35214             this._precisionModel = arguments[0];
35215             this._SRID = arguments[1];
35216           } else if (arguments.length === 3) {
35217             this._precisionModel = arguments[0];
35218             this._SRID = arguments[1];
35219             this._coordinateSequenceFactory = arguments[2];
35220           }
35221         };
35222
35223         var staticAccessors$2 = { serialVersionUID: { configurable: true } };
35224         GeometryFactory.prototype.toGeometry = function toGeometry (envelope) {
35225           if (envelope.isNull()) {
35226             return this.createPoint(null)
35227           }
35228           if (envelope.getMinX() === envelope.getMaxX() && envelope.getMinY() === envelope.getMaxY()) {
35229             return this.createPoint(new Coordinate(envelope.getMinX(), envelope.getMinY()))
35230           }
35231           if (envelope.getMinX() === envelope.getMaxX() || envelope.getMinY() === envelope.getMaxY()) {
35232             return this.createLineString([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY())])
35233           }
35234           return this.createPolygon(this.createLinearRing([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMinY())]), null)
35235         };
35236         GeometryFactory.prototype.createLineString = function createLineString (coordinates) {
35237           if (!coordinates) { return new LineString(this.getCoordinateSequenceFactory().create([]), this) }
35238           else if (coordinates instanceof Array) { return new LineString(this.getCoordinateSequenceFactory().create(coordinates), this) }
35239           else if (hasInterface(coordinates, CoordinateSequence)) { return new LineString(coordinates, this) }
35240         };
35241         GeometryFactory.prototype.createMultiLineString = function createMultiLineString () {
35242           if (arguments.length === 0) {
35243             return new MultiLineString(null, this)
35244           } else if (arguments.length === 1) {
35245             var lineStrings = arguments[0];
35246             return new MultiLineString(lineStrings, this)
35247           }
35248         };
35249         GeometryFactory.prototype.buildGeometry = function buildGeometry (geomList) {
35250           var geomClass = null;
35251           var isHeterogeneous = false;
35252           var hasGeometryCollection = false;
35253           for (var i = geomList.iterator(); i.hasNext();) {
35254             var geom = i.next();
35255             var partClass = geom.getClass();
35256             if (geomClass === null) {
35257               geomClass = partClass;
35258             }
35259             if (partClass !== geomClass) {
35260               isHeterogeneous = true;
35261             }
35262             if (geom.isGeometryCollectionOrDerived()) { hasGeometryCollection = true; }
35263           }
35264           if (geomClass === null) {
35265             return this.createGeometryCollection()
35266           }
35267           if (isHeterogeneous || hasGeometryCollection) {
35268             return this.createGeometryCollection(GeometryFactory.toGeometryArray(geomList))
35269           }
35270           var geom0 = geomList.iterator().next();
35271           var isCollection = geomList.size() > 1;
35272           if (isCollection) {
35273             if (geom0 instanceof Polygon) {
35274               return this.createMultiPolygon(GeometryFactory.toPolygonArray(geomList))
35275             } else if (geom0 instanceof LineString) {
35276               return this.createMultiLineString(GeometryFactory.toLineStringArray(geomList))
35277             } else if (geom0 instanceof Point) {
35278               return this.createMultiPoint(GeometryFactory.toPointArray(geomList))
35279             }
35280             Assert.shouldNeverReachHere('Unhandled class: ' + geom0.getClass().getName());
35281           }
35282           return geom0
35283         };
35284         GeometryFactory.prototype.createMultiPointFromCoords = function createMultiPointFromCoords (coordinates) {
35285           return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
35286         };
35287         GeometryFactory.prototype.createPoint = function createPoint () {
35288           if (arguments.length === 0) {
35289             return this.createPoint(this.getCoordinateSequenceFactory().create([]))
35290           } else if (arguments.length === 1) {
35291             if (arguments[0] instanceof Coordinate) {
35292               var coordinate = arguments[0];
35293               return this.createPoint(coordinate !== null ? this.getCoordinateSequenceFactory().create([coordinate]) : null)
35294             } else if (hasInterface(arguments[0], CoordinateSequence)) {
35295               var coordinates = arguments[0];
35296               return new Point(coordinates, this)
35297             }
35298           }
35299         };
35300         GeometryFactory.prototype.getCoordinateSequenceFactory = function getCoordinateSequenceFactory () {
35301           return this._coordinateSequenceFactory
35302         };
35303         GeometryFactory.prototype.createPolygon = function createPolygon () {
35304           if (arguments.length === 0) {
35305             return new Polygon(null, null, this)
35306           } else if (arguments.length === 1) {
35307             if (hasInterface(arguments[0], CoordinateSequence)) {
35308               var coordinates = arguments[0];
35309               return this.createPolygon(this.createLinearRing(coordinates))
35310             } else if (arguments[0] instanceof Array) {
35311               var coordinates$1 = arguments[0];
35312               return this.createPolygon(this.createLinearRing(coordinates$1))
35313             } else if (arguments[0] instanceof LinearRing) {
35314               var shell = arguments[0];
35315               return this.createPolygon(shell, null)
35316             }
35317           } else if (arguments.length === 2) {
35318             var shell$1 = arguments[0];
35319             var holes = arguments[1];
35320             return new Polygon(shell$1, holes, this)
35321           }
35322         };
35323         GeometryFactory.prototype.getSRID = function getSRID () {
35324           return this._SRID
35325         };
35326         GeometryFactory.prototype.createGeometryCollection = function createGeometryCollection () {
35327           if (arguments.length === 0) {
35328             return new GeometryCollection(null, this)
35329           } else if (arguments.length === 1) {
35330             var geometries = arguments[0];
35331             return new GeometryCollection(geometries, this)
35332           }
35333         };
35334         GeometryFactory.prototype.createGeometry = function createGeometry (g) {
35335           var editor = new GeometryEditor(this);
35336           return editor.edit(g, {
35337             edit: function () {
35338               if (arguments.length === 2) {
35339                 var coordSeq = arguments[0];
35340                 // const geometry = arguments[1]
35341                 return this._coordinateSequenceFactory.create(coordSeq)
35342               }
35343             }
35344           })
35345         };
35346         GeometryFactory.prototype.getPrecisionModel = function getPrecisionModel () {
35347           return this._precisionModel
35348         };
35349         GeometryFactory.prototype.createLinearRing = function createLinearRing () {
35350           if (arguments.length === 0) {
35351             return this.createLinearRing(this.getCoordinateSequenceFactory().create([]))
35352           } else if (arguments.length === 1) {
35353             if (arguments[0] instanceof Array) {
35354               var coordinates = arguments[0];
35355               return this.createLinearRing(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
35356             } else if (hasInterface(arguments[0], CoordinateSequence)) {
35357               var coordinates$1 = arguments[0];
35358               return new LinearRing(coordinates$1, this)
35359             }
35360           }
35361         };
35362         GeometryFactory.prototype.createMultiPolygon = function createMultiPolygon () {
35363           if (arguments.length === 0) {
35364             return new MultiPolygon(null, this)
35365           } else if (arguments.length === 1) {
35366             var polygons = arguments[0];
35367             return new MultiPolygon(polygons, this)
35368           }
35369         };
35370         GeometryFactory.prototype.createMultiPoint = function createMultiPoint () {
35371             var this$1 = this;
35372
35373           if (arguments.length === 0) {
35374             return new MultiPoint(null, this)
35375           } else if (arguments.length === 1) {
35376             if (arguments[0] instanceof Array) {
35377               var point = arguments[0];
35378               return new MultiPoint(point, this)
35379             } else if (arguments[0] instanceof Array) {
35380               var coordinates = arguments[0];
35381               return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
35382             } else if (hasInterface(arguments[0], CoordinateSequence)) {
35383               var coordinates$1 = arguments[0];
35384               if (coordinates$1 === null) {
35385                 return this.createMultiPoint(new Array(0).fill(null))
35386               }
35387               var points = new Array(coordinates$1.size()).fill(null);
35388               for (var i = 0; i < coordinates$1.size(); i++) {
35389                 var ptSeq = this$1.getCoordinateSequenceFactory().create(1, coordinates$1.getDimension());
35390                 CoordinateSequences.copy(coordinates$1, i, ptSeq, 0, 1);
35391                 points[i] = this$1.createPoint(ptSeq);
35392               }
35393               return this.createMultiPoint(points)
35394             }
35395           }
35396         };
35397         GeometryFactory.prototype.interfaces_ = function interfaces_ () {
35398           return [Serializable]
35399         };
35400         GeometryFactory.prototype.getClass = function getClass () {
35401           return GeometryFactory
35402         };
35403         GeometryFactory.toMultiPolygonArray = function toMultiPolygonArray (multiPolygons) {
35404           var multiPolygonArray = new Array(multiPolygons.size()).fill(null);
35405           return multiPolygons.toArray(multiPolygonArray)
35406         };
35407         GeometryFactory.toGeometryArray = function toGeometryArray (geometries) {
35408           if (geometries === null) { return null }
35409           var geometryArray = new Array(geometries.size()).fill(null);
35410           return geometries.toArray(geometryArray)
35411         };
35412         GeometryFactory.getDefaultCoordinateSequenceFactory = function getDefaultCoordinateSequenceFactory () {
35413           return CoordinateArraySequenceFactory.instance()
35414         };
35415         GeometryFactory.toMultiLineStringArray = function toMultiLineStringArray (multiLineStrings) {
35416           var multiLineStringArray = new Array(multiLineStrings.size()).fill(null);
35417           return multiLineStrings.toArray(multiLineStringArray)
35418         };
35419         GeometryFactory.toLineStringArray = function toLineStringArray (lineStrings) {
35420           var lineStringArray = new Array(lineStrings.size()).fill(null);
35421           return lineStrings.toArray(lineStringArray)
35422         };
35423         GeometryFactory.toMultiPointArray = function toMultiPointArray (multiPoints) {
35424           var multiPointArray = new Array(multiPoints.size()).fill(null);
35425           return multiPoints.toArray(multiPointArray)
35426         };
35427         GeometryFactory.toLinearRingArray = function toLinearRingArray (linearRings) {
35428           var linearRingArray = new Array(linearRings.size()).fill(null);
35429           return linearRings.toArray(linearRingArray)
35430         };
35431         GeometryFactory.toPointArray = function toPointArray (points) {
35432           var pointArray = new Array(points.size()).fill(null);
35433           return points.toArray(pointArray)
35434         };
35435         GeometryFactory.toPolygonArray = function toPolygonArray (polygons) {
35436           var polygonArray = new Array(polygons.size()).fill(null);
35437           return polygons.toArray(polygonArray)
35438         };
35439         GeometryFactory.createPointFromInternalCoord = function createPointFromInternalCoord (coord, exemplar) {
35440           exemplar.getPrecisionModel().makePrecise(coord);
35441           return exemplar.getFactory().createPoint(coord)
35442         };
35443         staticAccessors$2.serialVersionUID.get = function () { return -6820524753094095635 };
35444
35445         Object.defineProperties( GeometryFactory, staticAccessors$2 );
35446
35447         var geometryTypes = ['Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon'];
35448
35449         /**
35450          * Class for reading and writing Well-Known Text.Create a new parser for GeoJSON
35451          * NOTE: Adapted from OpenLayers 2.11 implementation.
35452          */
35453
35454         /**
35455          * Create a new parser for GeoJSON
35456          *
35457          * @param {GeometryFactory} geometryFactory
35458          * @return An instance of GeoJsonParser.
35459          * @constructor
35460          * @private
35461          */
35462         var GeoJSONParser = function GeoJSONParser (geometryFactory) {
35463           this.geometryFactory = geometryFactory || new GeometryFactory();
35464         };
35465         /**
35466          * Deserialize a GeoJSON object and return the Geometry or Feature(Collection) with JSTS Geometries
35467          *
35468          * @param {}
35469          *        A GeoJSON object.
35470          * @return {} A Geometry instance or object representing a Feature(Collection) with Geometry instances.
35471          * @private
35472          */
35473         GeoJSONParser.prototype.read = function read (json) {
35474           var obj;
35475           if (typeof json === 'string') {
35476             obj = JSON.parse(json);
35477           } else {
35478             obj = json;
35479           }
35480
35481           var type = obj.type;
35482
35483           if (!parse[type]) {
35484             throw new Error('Unknown GeoJSON type: ' + obj.type)
35485           }
35486
35487           if (geometryTypes.indexOf(type) !== -1) {
35488             return parse[type].apply(this, [obj.coordinates])
35489           } else if (type === 'GeometryCollection') {
35490             return parse[type].apply(this, [obj.geometries])
35491           }
35492
35493           // feature or feature collection
35494           return parse[type].apply(this, [obj])
35495         };
35496
35497         /**
35498          * Serialize a Geometry object into GeoJSON
35499          *
35500          * @param {Geometry}
35501          *        geometry A Geometry or array of Geometries.
35502          * @return {Object} A GeoJSON object represting the input Geometry/Geometries.
35503          * @private
35504          */
35505         GeoJSONParser.prototype.write = function write (geometry) {
35506           var type = geometry.getGeometryType();
35507
35508           if (!extract[type]) {
35509             throw new Error('Geometry is not supported')
35510           }
35511
35512           return extract[type].apply(this, [geometry])
35513         };
35514
35515         var parse = {
35516           /**
35517            * Parse a GeoJSON Feature object
35518            *
35519            * @param {Object}
35520            *          obj Object to parse.
35521            *
35522            * @return {Object} Feature with geometry/bbox converted to JSTS Geometries.
35523            */
35524           Feature: function (obj) {
35525             var feature = {};
35526
35527             // copy features
35528             for (var key in obj) {
35529               feature[key] = obj[key];
35530             }
35531
35532             // parse geometry
35533             if (obj.geometry) {
35534               var type = obj.geometry.type;
35535               if (!parse[type]) {
35536                 throw new Error('Unknown GeoJSON type: ' + obj.type)
35537               }
35538               feature.geometry = this.read(obj.geometry);
35539             }
35540
35541             // bbox
35542             if (obj.bbox) {
35543               feature.bbox = parse.bbox.apply(this, [obj.bbox]);
35544             }
35545
35546             return feature
35547           },
35548
35549           /**
35550            * Parse a GeoJSON FeatureCollection object
35551            *
35552            * @param {Object}
35553            *          obj Object to parse.
35554            *
35555            * @return {Object} FeatureCollection with geometry/bbox converted to JSTS Geometries.
35556            */
35557           FeatureCollection: function (obj) {
35558             var this$1 = this;
35559
35560             var featureCollection = {};
35561
35562             if (obj.features) {
35563               featureCollection.features = [];
35564
35565               for (var i = 0; i < obj.features.length; ++i) {
35566                 featureCollection.features.push(this$1.read(obj.features[i]));
35567               }
35568             }
35569
35570             if (obj.bbox) {
35571               featureCollection.bbox = this.parse.bbox.apply(this, [obj.bbox]);
35572             }
35573
35574             return featureCollection
35575           },
35576
35577           /**
35578            * Convert the ordinates in an array to an array of Coordinates
35579            *
35580            * @param {Array}
35581            *          array Array with {Number}s.
35582            *
35583            * @return {Array} Array with Coordinates.
35584            */
35585           coordinates: function (array) {
35586             var coordinates = [];
35587             for (var i = 0; i < array.length; ++i) {
35588               var sub = array[i];
35589               coordinates.push(new Coordinate(sub[0], sub[1]));
35590             }
35591             return coordinates
35592           },
35593
35594           /**
35595            * Convert the bbox to a LinearRing
35596            *
35597            * @param {Array}
35598            *          array Array with [xMin, yMin, xMax, yMax].
35599            *
35600            * @return {Array} Array with Coordinates.
35601            */
35602           bbox: function (array) {
35603             return this.geometryFactory.createLinearRing([
35604               new Coordinate(array[0], array[1]),
35605               new Coordinate(array[2], array[1]),
35606               new Coordinate(array[2], array[3]),
35607               new Coordinate(array[0], array[3]),
35608               new Coordinate(array[0], array[1])
35609             ])
35610           },
35611
35612           /**
35613            * Convert an Array with ordinates to a Point
35614            *
35615            * @param {Array}
35616            *          array Array with ordinates.
35617            *
35618            * @return {Point} Point.
35619            */
35620           Point: function (array) {
35621             var coordinate = new Coordinate(array[0], array[1]);
35622             return this.geometryFactory.createPoint(coordinate)
35623           },
35624
35625           /**
35626            * Convert an Array with coordinates to a MultiPoint
35627            *
35628            * @param {Array}
35629            *          array Array with coordinates.
35630            *
35631            * @return {MultiPoint} MultiPoint.
35632            */
35633           MultiPoint: function (array) {
35634             var this$1 = this;
35635
35636             var points = [];
35637             for (var i = 0; i < array.length; ++i) {
35638               points.push(parse.Point.apply(this$1, [array[i]]));
35639             }
35640             return this.geometryFactory.createMultiPoint(points)
35641           },
35642
35643           /**
35644            * Convert an Array with coordinates to a LineString
35645            *
35646            * @param {Array}
35647            *          array Array with coordinates.
35648            *
35649            * @return {LineString} LineString.
35650            */
35651           LineString: function (array) {
35652             var coordinates = parse.coordinates.apply(this, [array]);
35653             return this.geometryFactory.createLineString(coordinates)
35654           },
35655
35656           /**
35657            * Convert an Array with coordinates to a MultiLineString
35658            *
35659            * @param {Array}
35660            *          array Array with coordinates.
35661            *
35662            * @return {MultiLineString} MultiLineString.
35663            */
35664           MultiLineString: function (array) {
35665             var this$1 = this;
35666
35667             var lineStrings = [];
35668             for (var i = 0; i < array.length; ++i) {
35669               lineStrings.push(parse.LineString.apply(this$1, [array[i]]));
35670             }
35671             return this.geometryFactory.createMultiLineString(lineStrings)
35672           },
35673
35674           /**
35675            * Convert an Array to a Polygon
35676            *
35677            * @param {Array}
35678            *          array Array with shell and holes.
35679            *
35680            * @return {Polygon} Polygon.
35681            */
35682           Polygon: function (array) {
35683             var this$1 = this;
35684
35685             var shellCoordinates = parse.coordinates.apply(this, [array[0]]);
35686             var shell = this.geometryFactory.createLinearRing(shellCoordinates);
35687             var holes = [];
35688             for (var i = 1; i < array.length; ++i) {
35689               var hole = array[i];
35690               var coordinates = parse.coordinates.apply(this$1, [hole]);
35691               var linearRing = this$1.geometryFactory.createLinearRing(coordinates);
35692               holes.push(linearRing);
35693             }
35694             return this.geometryFactory.createPolygon(shell, holes)
35695           },
35696
35697           /**
35698            * Convert an Array to a MultiPolygon
35699            *
35700            * @param {Array}
35701            *          array Array of arrays with shell and rings.
35702            *
35703            * @return {MultiPolygon} MultiPolygon.
35704            */
35705           MultiPolygon: function (array) {
35706             var this$1 = this;
35707
35708             var polygons = [];
35709             for (var i = 0; i < array.length; ++i) {
35710               var polygon = array[i];
35711               polygons.push(parse.Polygon.apply(this$1, [polygon]));
35712             }
35713             return this.geometryFactory.createMultiPolygon(polygons)
35714           },
35715
35716           /**
35717            * Convert an Array to a GeometryCollection
35718            *
35719            * @param {Array}
35720            *          array Array of GeoJSON geometries.
35721            *
35722            * @return {GeometryCollection} GeometryCollection.
35723            */
35724           GeometryCollection: function (array) {
35725             var this$1 = this;
35726
35727             var geometries = [];
35728             for (var i = 0; i < array.length; ++i) {
35729               var geometry = array[i];
35730               geometries.push(this$1.read(geometry));
35731             }
35732             return this.geometryFactory.createGeometryCollection(geometries)
35733           }
35734         };
35735
35736         var extract = {
35737           /**
35738            * Convert a Coordinate to an Array
35739            *
35740            * @param {Coordinate}
35741            *          coordinate Coordinate to convert.
35742            *
35743            * @return {Array} Array of ordinates.
35744            */
35745           coordinate: function (coordinate) {
35746             return [coordinate.x, coordinate.y]
35747           },
35748
35749           /**
35750            * Convert a Point to a GeoJSON object
35751            *
35752            * @param {Point}
35753            *          point Point to convert.
35754            *
35755            * @return {Array} Array of 2 ordinates (paired to a coordinate).
35756            */
35757           Point: function (point) {
35758             var array = extract.coordinate.apply(this, [point.getCoordinate()]);
35759             return {
35760               type: 'Point',
35761               coordinates: array
35762             }
35763           },
35764
35765           /**
35766            * Convert a MultiPoint to a GeoJSON object
35767            *
35768            * @param {MultiPoint}
35769            *          multipoint MultiPoint to convert.
35770            *
35771            * @return {Array} Array of coordinates.
35772            */
35773           MultiPoint: function (multipoint) {
35774             var this$1 = this;
35775
35776             var array = [];
35777             for (var i = 0; i < multipoint._geometries.length; ++i) {
35778               var point = multipoint._geometries[i];
35779               var geoJson = extract.Point.apply(this$1, [point]);
35780               array.push(geoJson.coordinates);
35781             }
35782             return {
35783               type: 'MultiPoint',
35784               coordinates: array
35785             }
35786           },
35787
35788           /**
35789            * Convert a LineString to a GeoJSON object
35790            *
35791            * @param {LineString}
35792            *          linestring LineString to convert.
35793            *
35794            * @return {Array} Array of coordinates.
35795            */
35796           LineString: function (linestring) {
35797             var this$1 = this;
35798
35799             var array = [];
35800             var coordinates = linestring.getCoordinates();
35801             for (var i = 0; i < coordinates.length; ++i) {
35802               var coordinate = coordinates[i];
35803               array.push(extract.coordinate.apply(this$1, [coordinate]));
35804             }
35805             return {
35806               type: 'LineString',
35807               coordinates: array
35808             }
35809           },
35810
35811           /**
35812            * Convert a MultiLineString to a GeoJSON object
35813            *
35814            * @param {MultiLineString}
35815            *          multilinestring MultiLineString to convert.
35816            *
35817            * @return {Array} Array of Array of coordinates.
35818            */
35819           MultiLineString: function (multilinestring) {
35820             var this$1 = this;
35821
35822             var array = [];
35823             for (var i = 0; i < multilinestring._geometries.length; ++i) {
35824               var linestring = multilinestring._geometries[i];
35825               var geoJson = extract.LineString.apply(this$1, [linestring]);
35826               array.push(geoJson.coordinates);
35827             }
35828             return {
35829               type: 'MultiLineString',
35830               coordinates: array
35831             }
35832           },
35833
35834           /**
35835            * Convert a Polygon to a GeoJSON object
35836            *
35837            * @param {Polygon}
35838            *          polygon Polygon to convert.
35839            *
35840            * @return {Array} Array with shell, holes.
35841            */
35842           Polygon: function (polygon) {
35843             var this$1 = this;
35844
35845             var array = [];
35846             var shellGeoJson = extract.LineString.apply(this, [polygon._shell]);
35847             array.push(shellGeoJson.coordinates);
35848             for (var i = 0; i < polygon._holes.length; ++i) {
35849               var hole = polygon._holes[i];
35850               var holeGeoJson = extract.LineString.apply(this$1, [hole]);
35851               array.push(holeGeoJson.coordinates);
35852             }
35853             return {
35854               type: 'Polygon',
35855               coordinates: array
35856             }
35857           },
35858
35859           /**
35860            * Convert a MultiPolygon to a GeoJSON object
35861            *
35862            * @param {MultiPolygon}
35863            *          multipolygon MultiPolygon to convert.
35864            *
35865            * @return {Array} Array of polygons.
35866            */
35867           MultiPolygon: function (multipolygon) {
35868             var this$1 = this;
35869
35870             var array = [];
35871             for (var i = 0; i < multipolygon._geometries.length; ++i) {
35872               var polygon = multipolygon._geometries[i];
35873               var geoJson = extract.Polygon.apply(this$1, [polygon]);
35874               array.push(geoJson.coordinates);
35875             }
35876             return {
35877               type: 'MultiPolygon',
35878               coordinates: array
35879             }
35880           },
35881
35882           /**
35883            * Convert a GeometryCollection to a GeoJSON object
35884            *
35885            * @param {GeometryCollection}
35886            *          collection GeometryCollection to convert.
35887            *
35888            * @return {Array} Array of geometries.
35889            */
35890           GeometryCollection: function (collection) {
35891             var this$1 = this;
35892
35893             var array = [];
35894             for (var i = 0; i < collection._geometries.length; ++i) {
35895               var geometry = collection._geometries[i];
35896               var type = geometry.getGeometryType();
35897               array.push(extract[type].apply(this$1, [geometry]));
35898             }
35899             return {
35900               type: 'GeometryCollection',
35901               geometries: array
35902             }
35903           }
35904         };
35905
35906         /**
35907          * Converts a geometry in GeoJSON to a {@link Geometry}.
35908          */
35909
35910         /**
35911          * A <code>GeoJSONReader</code> is parameterized by a <code>GeometryFactory</code>,
35912          * to allow it to create <code>Geometry</code> objects of the appropriate
35913          * implementation. In particular, the <code>GeometryFactory</code> determines
35914          * the <code>PrecisionModel</code> and <code>SRID</code> that is used.
35915          *
35916          * @param {GeometryFactory} geometryFactory
35917          * @constructor
35918          */
35919         var GeoJSONReader = function GeoJSONReader (geometryFactory) {
35920           this.geometryFactory = geometryFactory || new GeometryFactory();
35921           this.precisionModel = this.geometryFactory.getPrecisionModel();
35922           this.parser = new GeoJSONParser(this.geometryFactory);
35923         };
35924         /**
35925          * Reads a GeoJSON representation of a {@link Geometry}
35926          *
35927          * Will also parse GeoJSON Features/FeatureCollections as custom objects.
35928          *
35929          * @param {Object|String} geoJson a GeoJSON Object or String.
35930          * @return {Geometry|Object} a <code>Geometry or Feature/FeatureCollection representation.</code>
35931          * @memberof GeoJSONReader
35932          */
35933         GeoJSONReader.prototype.read = function read (geoJson) {
35934           var geometry = this.parser.read(geoJson);
35935
35936           if (this.precisionModel.getType() === PrecisionModel.FIXED) {
35937             this.reducePrecision(geometry);
35938           }
35939
35940           return geometry
35941         };
35942
35943         // NOTE: this is a hack
35944         GeoJSONReader.prototype.reducePrecision = function reducePrecision (geometry) {
35945             var this$1 = this;
35946
35947           var i, len;
35948
35949           if (geometry.coordinate) {
35950             this.precisionModel.makePrecise(geometry.coordinate);
35951           } else if (geometry.points) {
35952             for (i = 0, len = geometry.points.length; i < len; i++) {
35953               this$1.precisionModel.makePrecise(geometry.points[i]);
35954             }
35955           } else if (geometry.geometries) {
35956             for (i = 0, len = geometry.geometries.length; i < len; i++) {
35957               this$1.reducePrecision(geometry.geometries[i]);
35958             }
35959           }
35960         };
35961
35962         /**
35963          * @module GeoJSONWriter
35964          */
35965
35966         /**
35967          * Writes the GeoJSON representation of a {@link Geometry}. The
35968          * The GeoJSON format is defined <A
35969          * HREF="http://geojson.org/geojson-spec.html">here</A>.
35970          */
35971
35972         /**
35973          * The <code>GeoJSONWriter</code> outputs coordinates rounded to the precision
35974          * model. Only the maximum number of decimal places necessary to represent the
35975          * ordinates to the required precision will be output.
35976          *
35977          * @param {GeometryFactory} geometryFactory
35978          * @constructor
35979          */
35980         var GeoJSONWriter = function GeoJSONWriter () {
35981           this.parser = new GeoJSONParser(this.geometryFactory);
35982         };
35983         /**
35984          * Converts a <code>Geometry</code> to its GeoJSON representation.
35985          *
35986          * @param {Geometry}
35987          *        geometry a <code>Geometry</code> to process.
35988          * @return {Object} The GeoJSON representation of the Geometry.
35989          * @memberof GeoJSONWriter
35990          */
35991         GeoJSONWriter.prototype.write = function write (geometry) {
35992           return this.parser.write(geometry)
35993         };
35994
35995         /* eslint-disable no-undef */
35996
35997         // io
35998
35999         var Position = function Position () {};
36000
36001         var staticAccessors$20 = { ON: { configurable: true },LEFT: { configurable: true },RIGHT: { configurable: true } };
36002
36003         Position.prototype.interfaces_ = function interfaces_ () {
36004           return []
36005         };
36006         Position.prototype.getClass = function getClass () {
36007           return Position
36008         };
36009         Position.opposite = function opposite (position) {
36010           if (position === Position.LEFT) { return Position.RIGHT }
36011           if (position === Position.RIGHT) { return Position.LEFT }
36012           return position
36013         };
36014         staticAccessors$20.ON.get = function () { return 0 };
36015         staticAccessors$20.LEFT.get = function () { return 1 };
36016         staticAccessors$20.RIGHT.get = function () { return 2 };
36017
36018         Object.defineProperties( Position, staticAccessors$20 );
36019
36020         /**
36021          * @param {string=} message Optional message
36022          * @extends {Error}
36023          * @constructor
36024          * @private
36025          */
36026         function EmptyStackException (message) {
36027           this.message = message || '';
36028         }
36029         EmptyStackException.prototype = new Error();
36030
36031         /**
36032          * @type {string}
36033          */
36034         EmptyStackException.prototype.name = 'EmptyStackException';
36035
36036         /**
36037          * @see http://download.oracle.com/javase/6/docs/api/java/util/Stack.html
36038          *
36039          * @extends {List}
36040          * @constructor
36041          * @private
36042          */
36043         function Stack () {
36044           /**
36045            * @type {Array}
36046            * @private
36047            */
36048           this.array_ = [];
36049         }
36050         Stack.prototype = new List();
36051
36052         /**
36053          * @override
36054          */
36055         Stack.prototype.add = function (e) {
36056           this.array_.push(e);
36057           return true
36058         };
36059
36060         /**
36061          * @override
36062          */
36063         Stack.prototype.get = function (index) {
36064           if (index < 0 || index >= this.size()) {
36065             throw new Error()
36066           }
36067
36068           return this.array_[index]
36069         };
36070
36071         /**
36072          * Pushes an item onto the top of this stack.
36073          * @param {Object} e
36074          * @return {Object}
36075          */
36076         Stack.prototype.push = function (e) {
36077           this.array_.push(e);
36078           return e
36079         };
36080
36081         /**
36082          * Pushes an item onto the top of this stack.
36083          * @param {Object} e
36084          * @return {Object}
36085          */
36086         Stack.prototype.pop = function (e) {
36087           if (this.array_.length === 0) {
36088             throw new EmptyStackException()
36089           }
36090
36091           return this.array_.pop()
36092         };
36093
36094         /**
36095          * Looks at the object at the top of this stack without removing it from the
36096          * stack.
36097          * @return {Object}
36098          */
36099         Stack.prototype.peek = function () {
36100           if (this.array_.length === 0) {
36101             throw new EmptyStackException()
36102           }
36103
36104           return this.array_[this.array_.length - 1]
36105         };
36106
36107         /**
36108          * Tests if this stack is empty.
36109          * @return {boolean} true if and only if this stack contains no items; false
36110          *         otherwise.
36111          */
36112         Stack.prototype.empty = function () {
36113           if (this.array_.length === 0) {
36114             return true
36115           } else {
36116             return false
36117           }
36118         };
36119
36120         /**
36121          * @return {boolean}
36122          */
36123         Stack.prototype.isEmpty = function () {
36124           return this.empty()
36125         };
36126
36127         /**
36128          * Returns the 1-based position where an object is on this stack. If the object
36129          * o occurs as an item in this stack, this method returns the distance from the
36130          * top of the stack of the occurrence nearest the top of the stack; the topmost
36131          * item on the stack is considered to be at distance 1. The equals method is
36132          * used to compare o to the items in this stack.
36133          *
36134          * NOTE: does not currently actually use equals. (=== is used)
36135          *
36136          * @param {Object} o
36137          * @return {number} the 1-based position from the top of the stack where the
36138          *         object is located; the return value -1 indicates that the object is
36139          *         not on the stack.
36140          */
36141         Stack.prototype.search = function (o) {
36142           return this.array_.indexOf(o)
36143         };
36144
36145         /**
36146          * @return {number}
36147          * @export
36148          */
36149         Stack.prototype.size = function () {
36150           return this.array_.length
36151         };
36152
36153         /**
36154          * @return {Array}
36155          */
36156         Stack.prototype.toArray = function () {
36157           var this$1 = this;
36158
36159           var array = [];
36160
36161           for (var i = 0, len = this.array_.length; i < len; i++) {
36162             array.push(this$1.array_[i]);
36163           }
36164
36165           return array
36166         };
36167
36168         var RightmostEdgeFinder = function RightmostEdgeFinder () {
36169           this._minIndex = -1;
36170           this._minCoord = null;
36171           this._minDe = null;
36172           this._orientedDe = null;
36173         };
36174         RightmostEdgeFinder.prototype.getCoordinate = function getCoordinate () {
36175           return this._minCoord
36176         };
36177         RightmostEdgeFinder.prototype.getRightmostSide = function getRightmostSide (de, index) {
36178           var side = this.getRightmostSideOfSegment(de, index);
36179           if (side < 0) { side = this.getRightmostSideOfSegment(de, index - 1); }
36180           if (side < 0) {
36181             this._minCoord = null;
36182             this.checkForRightmostCoordinate(de);
36183           }
36184           return side
36185         };
36186         RightmostEdgeFinder.prototype.findRightmostEdgeAtVertex = function findRightmostEdgeAtVertex () {
36187           var pts = this._minDe.getEdge().getCoordinates();
36188           Assert.isTrue(this._minIndex > 0 && this._minIndex < pts.length, 'rightmost point expected to be interior vertex of edge');
36189           var pPrev = pts[this._minIndex - 1];
36190           var pNext = pts[this._minIndex + 1];
36191           var orientation = CGAlgorithms.computeOrientation(this._minCoord, pNext, pPrev);
36192           var usePrev = false;
36193           if (pPrev.y < this._minCoord.y && pNext.y < this._minCoord.y && orientation === CGAlgorithms.COUNTERCLOCKWISE) {
36194             usePrev = true;
36195           } else if (pPrev.y > this._minCoord.y && pNext.y > this._minCoord.y && orientation === CGAlgorithms.CLOCKWISE) {
36196             usePrev = true;
36197           }
36198           if (usePrev) {
36199             this._minIndex = this._minIndex - 1;
36200           }
36201         };
36202         RightmostEdgeFinder.prototype.getRightmostSideOfSegment = function getRightmostSideOfSegment (de, i) {
36203           var e = de.getEdge();
36204           var coord = e.getCoordinates();
36205           if (i < 0 || i + 1 >= coord.length) { return -1 }
36206           if (coord[i].y === coord[i + 1].y) { return -1 }
36207           var pos = Position.LEFT;
36208           if (coord[i].y < coord[i + 1].y) { pos = Position.RIGHT; }
36209           return pos
36210         };
36211         RightmostEdgeFinder.prototype.getEdge = function getEdge () {
36212           return this._orientedDe
36213         };
36214         RightmostEdgeFinder.prototype.checkForRightmostCoordinate = function checkForRightmostCoordinate (de) {
36215             var this$1 = this;
36216
36217           var coord = de.getEdge().getCoordinates();
36218           for (var i = 0; i < coord.length - 1; i++) {
36219             if (this$1._minCoord === null || coord[i].x > this$1._minCoord.x) {
36220               this$1._minDe = de;
36221               this$1._minIndex = i;
36222               this$1._minCoord = coord[i];
36223             }
36224           }
36225         };
36226         RightmostEdgeFinder.prototype.findRightmostEdgeAtNode = function findRightmostEdgeAtNode () {
36227           var node = this._minDe.getNode();
36228           var star = node.getEdges();
36229           this._minDe = star.getRightmostEdge();
36230           if (!this._minDe.isForward()) {
36231             this._minDe = this._minDe.getSym();
36232             this._minIndex = this._minDe.getEdge().getCoordinates().length - 1;
36233           }
36234         };
36235         RightmostEdgeFinder.prototype.findEdge = function findEdge (dirEdgeList) {
36236             var this$1 = this;
36237
36238           for (var i = dirEdgeList.iterator(); i.hasNext();) {
36239             var de = i.next();
36240             if (!de.isForward()) { continue }
36241             this$1.checkForRightmostCoordinate(de);
36242           }
36243           Assert.isTrue(this._minIndex !== 0 || this._minCoord.equals(this._minDe.getCoordinate()), 'inconsistency in rightmost processing');
36244           if (this._minIndex === 0) {
36245             this.findRightmostEdgeAtNode();
36246           } else {
36247             this.findRightmostEdgeAtVertex();
36248           }
36249           this._orientedDe = this._minDe;
36250           var rightmostSide = this.getRightmostSide(this._minDe, this._minIndex);
36251           if (rightmostSide === Position.LEFT) {
36252             this._orientedDe = this._minDe.getSym();
36253           }
36254         };
36255         RightmostEdgeFinder.prototype.interfaces_ = function interfaces_ () {
36256           return []
36257         };
36258         RightmostEdgeFinder.prototype.getClass = function getClass () {
36259           return RightmostEdgeFinder
36260         };
36261
36262         var TopologyException = (function (RuntimeException$$1) {
36263           function TopologyException (msg, pt) {
36264             RuntimeException$$1.call(this, TopologyException.msgWithCoord(msg, pt));
36265             this.pt = pt ? new Coordinate(pt) : null;
36266             this.name = 'TopologyException';
36267           }
36268
36269           if ( RuntimeException$$1 ) { TopologyException.__proto__ = RuntimeException$$1; }
36270           TopologyException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );
36271           TopologyException.prototype.constructor = TopologyException;
36272           TopologyException.prototype.getCoordinate = function getCoordinate () {
36273             return this.pt
36274           };
36275           TopologyException.prototype.interfaces_ = function interfaces_ () {
36276             return []
36277           };
36278           TopologyException.prototype.getClass = function getClass () {
36279             return TopologyException
36280           };
36281           TopologyException.msgWithCoord = function msgWithCoord (msg, pt) {
36282             if (!pt) { return msg + ' [ ' + pt + ' ]' }
36283             return msg
36284           };
36285
36286           return TopologyException;
36287         }(RuntimeException));
36288
36289         var LinkedList = function LinkedList () {
36290           this.array_ = [];
36291         };
36292         LinkedList.prototype.addLast = function addLast (e) {
36293           this.array_.push(e);
36294         };
36295         LinkedList.prototype.removeFirst = function removeFirst () {
36296           return this.array_.shift()
36297         };
36298         LinkedList.prototype.isEmpty = function isEmpty () {
36299           return this.array_.length === 0
36300         };
36301
36302         var BufferSubgraph = function BufferSubgraph () {
36303           this._finder = null;
36304           this._dirEdgeList = new ArrayList();
36305           this._nodes = new ArrayList();
36306           this._rightMostCoord = null;
36307           this._env = null;
36308           this._finder = new RightmostEdgeFinder();
36309         };
36310         BufferSubgraph.prototype.clearVisitedEdges = function clearVisitedEdges () {
36311           for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
36312             var de = it.next();
36313             de.setVisited(false);
36314           }
36315         };
36316         BufferSubgraph.prototype.getRightmostCoordinate = function getRightmostCoordinate () {
36317           return this._rightMostCoord
36318         };
36319         BufferSubgraph.prototype.computeNodeDepth = function computeNodeDepth (n) {
36320             var this$1 = this;
36321
36322           var startEdge = null;
36323           for (var i = n.getEdges().iterator(); i.hasNext();) {
36324             var de = i.next();
36325             if (de.isVisited() || de.getSym().isVisited()) {
36326               startEdge = de;
36327               break
36328             }
36329           }
36330           if (startEdge === null) { throw new TopologyException('unable to find edge to compute depths at ' + n.getCoordinate()) }
36331           n.getEdges().computeDepths(startEdge);
36332           for (var i$1 = n.getEdges().iterator(); i$1.hasNext();) {
36333             var de$1 = i$1.next();
36334             de$1.setVisited(true);
36335             this$1.copySymDepths(de$1);
36336           }
36337         };
36338         BufferSubgraph.prototype.computeDepth = function computeDepth (outsideDepth) {
36339           this.clearVisitedEdges();
36340           var de = this._finder.getEdge();
36341           // const n = de.getNode()
36342           // const label = de.getLabel()
36343           de.setEdgeDepths(Position.RIGHT, outsideDepth);
36344           this.copySymDepths(de);
36345           this.computeDepths(de);
36346         };
36347         BufferSubgraph.prototype.create = function create (node) {
36348           this.addReachable(node);
36349           this._finder.findEdge(this._dirEdgeList);
36350           this._rightMostCoord = this._finder.getCoordinate();
36351         };
36352         BufferSubgraph.prototype.findResultEdges = function findResultEdges () {
36353           for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
36354             var de = it.next();
36355             if (de.getDepth(Position.RIGHT) >= 1 && de.getDepth(Position.LEFT) <= 0 && !de.isInteriorAreaEdge()) {
36356               de.setInResult(true);
36357             }
36358           }
36359         };
36360         BufferSubgraph.prototype.computeDepths = function computeDepths (startEdge) {
36361             var this$1 = this;
36362
36363           var nodesVisited = new HashSet();
36364           var nodeQueue = new LinkedList();
36365           var startNode = startEdge.getNode();
36366           nodeQueue.addLast(startNode);
36367           nodesVisited.add(startNode);
36368           startEdge.setVisited(true);
36369           while (!nodeQueue.isEmpty()) {
36370             var n = nodeQueue.removeFirst();
36371             nodesVisited.add(n);
36372             this$1.computeNodeDepth(n);
36373             for (var i = n.getEdges().iterator(); i.hasNext();) {
36374               var de = i.next();
36375               var sym = de.getSym();
36376               if (sym.isVisited()) { continue }
36377               var adjNode = sym.getNode();
36378               if (!nodesVisited.contains(adjNode)) {
36379                 nodeQueue.addLast(adjNode);
36380                 nodesVisited.add(adjNode);
36381               }
36382             }
36383           }
36384         };
36385         BufferSubgraph.prototype.compareTo = function compareTo (o) {
36386           var graph = o;
36387           if (this._rightMostCoord.x < graph._rightMostCoord.x) {
36388             return -1
36389           }
36390           if (this._rightMostCoord.x > graph._rightMostCoord.x) {
36391             return 1
36392           }
36393           return 0
36394         };
36395         BufferSubgraph.prototype.getEnvelope = function getEnvelope () {
36396           if (this._env === null) {
36397             var edgeEnv = new Envelope();
36398             for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
36399               var dirEdge = it.next();
36400               var pts = dirEdge.getEdge().getCoordinates();
36401               for (var i = 0; i < pts.length - 1; i++) {
36402                 edgeEnv.expandToInclude(pts[i]);
36403               }
36404             }
36405             this._env = edgeEnv;
36406           }
36407           return this._env
36408         };
36409         BufferSubgraph.prototype.addReachable = function addReachable (startNode) {
36410             var this$1 = this;
36411
36412           var nodeStack = new Stack();
36413           nodeStack.add(startNode);
36414           while (!nodeStack.empty()) {
36415             var node = nodeStack.pop();
36416             this$1.add(node, nodeStack);
36417           }
36418         };
36419         BufferSubgraph.prototype.copySymDepths = function copySymDepths (de) {
36420           var sym = de.getSym();
36421           sym.setDepth(Position.LEFT, de.getDepth(Position.RIGHT));
36422           sym.setDepth(Position.RIGHT, de.getDepth(Position.LEFT));
36423         };
36424         BufferSubgraph.prototype.add = function add (node, nodeStack) {
36425             var this$1 = this;
36426
36427           node.setVisited(true);
36428           this._nodes.add(node);
36429           for (var i = node.getEdges().iterator(); i.hasNext();) {
36430             var de = i.next();
36431             this$1._dirEdgeList.add(de);
36432             var sym = de.getSym();
36433             var symNode = sym.getNode();
36434             if (!symNode.isVisited()) { nodeStack.push(symNode); }
36435           }
36436         };
36437         BufferSubgraph.prototype.getNodes = function getNodes () {
36438           return this._nodes
36439         };
36440         BufferSubgraph.prototype.getDirectedEdges = function getDirectedEdges () {
36441           return this._dirEdgeList
36442         };
36443         BufferSubgraph.prototype.interfaces_ = function interfaces_ () {
36444           return [Comparable]
36445         };
36446         BufferSubgraph.prototype.getClass = function getClass () {
36447           return BufferSubgraph
36448         };
36449
36450         var TopologyLocation = function TopologyLocation () {
36451           var this$1 = this;
36452
36453           this.location = null;
36454           if (arguments.length === 1) {
36455             if (arguments[0] instanceof Array) {
36456               var location = arguments[0];
36457               this.init(location.length);
36458             } else if (Number.isInteger(arguments[0])) {
36459               var on = arguments[0];
36460               this.init(1);
36461               this.location[Position.ON] = on;
36462             } else if (arguments[0] instanceof TopologyLocation) {
36463               var gl = arguments[0];
36464               this.init(gl.location.length);
36465               if (gl !== null) {
36466                 for (var i = 0; i < this.location.length; i++) {
36467                   this$1.location[i] = gl.location[i];
36468                 }
36469               }
36470             }
36471           } else if (arguments.length === 3) {
36472             var on$1 = arguments[0];
36473             var left = arguments[1];
36474             var right = arguments[2];
36475             this.init(3);
36476             this.location[Position.ON] = on$1;
36477             this.location[Position.LEFT] = left;
36478             this.location[Position.RIGHT] = right;
36479           }
36480         };
36481         TopologyLocation.prototype.setAllLocations = function setAllLocations (locValue) {
36482             var this$1 = this;
36483
36484           for (var i = 0; i < this.location.length; i++) {
36485             this$1.location[i] = locValue;
36486           }
36487         };
36488         TopologyLocation.prototype.isNull = function isNull () {
36489             var this$1 = this;
36490
36491           for (var i = 0; i < this.location.length; i++) {
36492             if (this$1.location[i] !== Location.NONE) { return false }
36493           }
36494           return true
36495         };
36496         TopologyLocation.prototype.setAllLocationsIfNull = function setAllLocationsIfNull (locValue) {
36497             var this$1 = this;
36498
36499           for (var i = 0; i < this.location.length; i++) {
36500             if (this$1.location[i] === Location.NONE) { this$1.location[i] = locValue; }
36501           }
36502         };
36503         TopologyLocation.prototype.isLine = function isLine () {
36504           return this.location.length === 1
36505         };
36506         TopologyLocation.prototype.merge = function merge (gl) {
36507             var this$1 = this;
36508
36509           if (gl.location.length > this.location.length) {
36510             var newLoc = new Array(3).fill(null);
36511             newLoc[Position.ON] = this.location[Position.ON];
36512             newLoc[Position.LEFT] = Location.NONE;
36513             newLoc[Position.RIGHT] = Location.NONE;
36514             this.location = newLoc;
36515           }
36516           for (var i = 0; i < this.location.length; i++) {
36517             if (this$1.location[i] === Location.NONE && i < gl.location.length) { this$1.location[i] = gl.location[i]; }
36518           }
36519         };
36520         TopologyLocation.prototype.getLocations = function getLocations () {
36521           return this.location
36522         };
36523         TopologyLocation.prototype.flip = function flip () {
36524           if (this.location.length <= 1) { return null }
36525           var temp = this.location[Position.LEFT];
36526           this.location[Position.LEFT] = this.location[Position.RIGHT];
36527           this.location[Position.RIGHT] = temp;
36528         };
36529         TopologyLocation.prototype.toString = function toString () {
36530           var buf = new StringBuffer();
36531           if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.LEFT])); }
36532           buf.append(Location.toLocationSymbol(this.location[Position.ON]));
36533           if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.RIGHT])); }
36534           return buf.toString()
36535         };
36536         TopologyLocation.prototype.setLocations = function setLocations (on, left, right) {
36537           this.location[Position.ON] = on;
36538           this.location[Position.LEFT] = left;
36539           this.location[Position.RIGHT] = right;
36540         };
36541         TopologyLocation.prototype.get = function get (posIndex) {
36542           if (posIndex < this.location.length) { return this.location[posIndex] }
36543           return Location.NONE
36544         };
36545         TopologyLocation.prototype.isArea = function isArea () {
36546           return this.location.length > 1
36547         };
36548         TopologyLocation.prototype.isAnyNull = function isAnyNull () {
36549             var this$1 = this;
36550
36551           for (var i = 0; i < this.location.length; i++) {
36552             if (this$1.location[i] === Location.NONE) { return true }
36553           }
36554           return false
36555         };
36556         TopologyLocation.prototype.setLocation = function setLocation () {
36557           if (arguments.length === 1) {
36558             var locValue = arguments[0];
36559             this.setLocation(Position.ON, locValue);
36560           } else if (arguments.length === 2) {
36561             var locIndex = arguments[0];
36562             var locValue$1 = arguments[1];
36563             this.location[locIndex] = locValue$1;
36564           }
36565         };
36566         TopologyLocation.prototype.init = function init (size) {
36567           this.location = new Array(size).fill(null);
36568           this.setAllLocations(Location.NONE);
36569         };
36570         TopologyLocation.prototype.isEqualOnSide = function isEqualOnSide (le, locIndex) {
36571           return this.location[locIndex] === le.location[locIndex]
36572         };
36573         TopologyLocation.prototype.allPositionsEqual = function allPositionsEqual (loc) {
36574             var this$1 = this;
36575
36576           for (var i = 0; i < this.location.length; i++) {
36577             if (this$1.location[i] !== loc) { return false }
36578           }
36579           return true
36580         };
36581         TopologyLocation.prototype.interfaces_ = function interfaces_ () {
36582           return []
36583         };
36584         TopologyLocation.prototype.getClass = function getClass () {
36585           return TopologyLocation
36586         };
36587
36588         var Label = function Label () {
36589           this.elt = new Array(2).fill(null);
36590           if (arguments.length === 1) {
36591             if (Number.isInteger(arguments[0])) {
36592               var onLoc = arguments[0];
36593               this.elt[0] = new TopologyLocation(onLoc);
36594               this.elt[1] = new TopologyLocation(onLoc);
36595             } else if (arguments[0] instanceof Label) {
36596               var lbl = arguments[0];
36597               this.elt[0] = new TopologyLocation(lbl.elt[0]);
36598               this.elt[1] = new TopologyLocation(lbl.elt[1]);
36599             }
36600           } else if (arguments.length === 2) {
36601             var geomIndex = arguments[0];
36602             var onLoc$1 = arguments[1];
36603             this.elt[0] = new TopologyLocation(Location.NONE);
36604             this.elt[1] = new TopologyLocation(Location.NONE);
36605             this.elt[geomIndex].setLocation(onLoc$1);
36606           } else if (arguments.length === 3) {
36607             var onLoc$2 = arguments[0];
36608             var leftLoc = arguments[1];
36609             var rightLoc = arguments[2];
36610             this.elt[0] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);
36611             this.elt[1] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);
36612           } else if (arguments.length === 4) {
36613             var geomIndex$1 = arguments[0];
36614             var onLoc$3 = arguments[1];
36615             var leftLoc$1 = arguments[2];
36616             var rightLoc$1 = arguments[3];
36617             this.elt[0] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);
36618             this.elt[1] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);
36619             this.elt[geomIndex$1].setLocations(onLoc$3, leftLoc$1, rightLoc$1);
36620           }
36621         };
36622         Label.prototype.getGeometryCount = function getGeometryCount () {
36623           var count = 0;
36624           if (!this.elt[0].isNull()) { count++; }
36625           if (!this.elt[1].isNull()) { count++; }
36626           return count
36627         };
36628         Label.prototype.setAllLocations = function setAllLocations (geomIndex, location) {
36629           this.elt[geomIndex].setAllLocations(location);
36630         };
36631         Label.prototype.isNull = function isNull (geomIndex) {
36632           return this.elt[geomIndex].isNull()
36633         };
36634         Label.prototype.setAllLocationsIfNull = function setAllLocationsIfNull () {
36635           if (arguments.length === 1) {
36636             var location = arguments[0];
36637             this.setAllLocationsIfNull(0, location);
36638             this.setAllLocationsIfNull(1, location);
36639           } else if (arguments.length === 2) {
36640             var geomIndex = arguments[0];
36641             var location$1 = arguments[1];
36642             this.elt[geomIndex].setAllLocationsIfNull(location$1);
36643           }
36644         };
36645         Label.prototype.isLine = function isLine (geomIndex) {
36646           return this.elt[geomIndex].isLine()
36647         };
36648         Label.prototype.merge = function merge (lbl) {
36649             var this$1 = this;
36650
36651           for (var i = 0; i < 2; i++) {
36652             if (this$1.elt[i] === null && lbl.elt[i] !== null) {
36653               this$1.elt[i] = new TopologyLocation(lbl.elt[i]);
36654             } else {
36655               this$1.elt[i].merge(lbl.elt[i]);
36656             }
36657           }
36658         };
36659         Label.prototype.flip = function flip () {
36660           this.elt[0].flip();
36661           this.elt[1].flip();
36662         };
36663         Label.prototype.getLocation = function getLocation () {
36664           if (arguments.length === 1) {
36665             var geomIndex = arguments[0];
36666             return this.elt[geomIndex].get(Position.ON)
36667           } else if (arguments.length === 2) {
36668             var geomIndex$1 = arguments[0];
36669             var posIndex = arguments[1];
36670             return this.elt[geomIndex$1].get(posIndex)
36671           }
36672         };
36673         Label.prototype.toString = function toString () {
36674           var buf = new StringBuffer();
36675           if (this.elt[0] !== null) {
36676             buf.append('A:');
36677             buf.append(this.elt[0].toString());
36678           }
36679           if (this.elt[1] !== null) {
36680             buf.append(' B:');
36681             buf.append(this.elt[1].toString());
36682           }
36683           return buf.toString()
36684         };
36685         Label.prototype.isArea = function isArea () {
36686           if (arguments.length === 0) {
36687             return this.elt[0].isArea() || this.elt[1].isArea()
36688           } else if (arguments.length === 1) {
36689             var geomIndex = arguments[0];
36690             return this.elt[geomIndex].isArea()
36691           }
36692         };
36693         Label.prototype.isAnyNull = function isAnyNull (geomIndex) {
36694           return this.elt[geomIndex].isAnyNull()
36695         };
36696         Label.prototype.setLocation = function setLocation () {
36697           if (arguments.length === 2) {
36698             var geomIndex = arguments[0];
36699             var location = arguments[1];
36700             this.elt[geomIndex].setLocation(Position.ON, location);
36701           } else if (arguments.length === 3) {
36702             var geomIndex$1 = arguments[0];
36703             var posIndex = arguments[1];
36704             var location$1 = arguments[2];
36705             this.elt[geomIndex$1].setLocation(posIndex, location$1);
36706           }
36707         };
36708         Label.prototype.isEqualOnSide = function isEqualOnSide (lbl, side) {
36709           return this.elt[0].isEqualOnSide(lbl.elt[0], side) && this.elt[1].isEqualOnSide(lbl.elt[1], side)
36710         };
36711         Label.prototype.allPositionsEqual = function allPositionsEqual (geomIndex, loc) {
36712           return this.elt[geomIndex].allPositionsEqual(loc)
36713         };
36714         Label.prototype.toLine = function toLine (geomIndex) {
36715           if (this.elt[geomIndex].isArea()) { this.elt[geomIndex] = new TopologyLocation(this.elt[geomIndex].location[0]); }
36716         };
36717         Label.prototype.interfaces_ = function interfaces_ () {
36718           return []
36719         };
36720         Label.prototype.getClass = function getClass () {
36721           return Label
36722         };
36723         Label.toLineLabel = function toLineLabel (label) {
36724           var lineLabel = new Label(Location.NONE);
36725           for (var i = 0; i < 2; i++) {
36726             lineLabel.setLocation(i, label.getLocation(i));
36727           }
36728           return lineLabel
36729         };
36730
36731         var EdgeRing = function EdgeRing () {
36732           this._startDe = null;
36733           this._maxNodeDegree = -1;
36734           this._edges = new ArrayList();
36735           this._pts = new ArrayList();
36736           this._label = new Label(Location.NONE);
36737           this._ring = null;
36738           this._isHole = null;
36739           this._shell = null;
36740           this._holes = new ArrayList();
36741           this._geometryFactory = null;
36742           var start = arguments[0];
36743           var geometryFactory = arguments[1];
36744           this._geometryFactory = geometryFactory;
36745           this.computePoints(start);
36746           this.computeRing();
36747         };
36748         EdgeRing.prototype.computeRing = function computeRing () {
36749             var this$1 = this;
36750
36751           if (this._ring !== null) { return null }
36752           var coord = new Array(this._pts.size()).fill(null);
36753           for (var i = 0; i < this._pts.size(); i++) {
36754             coord[i] = this$1._pts.get(i);
36755           }
36756           this._ring = this._geometryFactory.createLinearRing(coord);
36757           this._isHole = CGAlgorithms.isCCW(this._ring.getCoordinates());
36758         };
36759         EdgeRing.prototype.isIsolated = function isIsolated () {
36760           return this._label.getGeometryCount() === 1
36761         };
36762         EdgeRing.prototype.computePoints = function computePoints (start) {
36763             var this$1 = this;
36764
36765           this._startDe = start;
36766           var de = start;
36767           var isFirstEdge = true;
36768           do {
36769             if (de === null) { throw new TopologyException('Found null DirectedEdge') }
36770             if (de.getEdgeRing() === this$1) { throw new TopologyException('Directed Edge visited twice during ring-building at ' + de.getCoordinate()) }
36771             this$1._edges.add(de);
36772             var label = de.getLabel();
36773             Assert.isTrue(label.isArea());
36774             this$1.mergeLabel(label);
36775             this$1.addPoints(de.getEdge(), de.isForward(), isFirstEdge);
36776             isFirstEdge = false;
36777             this$1.setEdgeRing(de, this$1);
36778             de = this$1.getNext(de);
36779           } while (de !== this._startDe)
36780         };
36781         EdgeRing.prototype.getLinearRing = function getLinearRing () {
36782           return this._ring
36783         };
36784         EdgeRing.prototype.getCoordinate = function getCoordinate (i) {
36785           return this._pts.get(i)
36786         };
36787         EdgeRing.prototype.computeMaxNodeDegree = function computeMaxNodeDegree () {
36788             var this$1 = this;
36789
36790           this._maxNodeDegree = 0;
36791           var de = this._startDe;
36792           do {
36793             var node = de.getNode();
36794             var degree = node.getEdges().getOutgoingDegree(this$1);
36795             if (degree > this$1._maxNodeDegree) { this$1._maxNodeDegree = degree; }
36796             de = this$1.getNext(de);
36797           } while (de !== this._startDe)
36798           this._maxNodeDegree *= 2;
36799         };
36800         EdgeRing.prototype.addPoints = function addPoints (edge, isForward, isFirstEdge) {
36801             var this$1 = this;
36802
36803           var edgePts = edge.getCoordinates();
36804           if (isForward) {
36805             var startIndex = 1;
36806             if (isFirstEdge) { startIndex = 0; }
36807             for (var i = startIndex; i < edgePts.length; i++) {
36808               this$1._pts.add(edgePts[i]);
36809             }
36810           } else {
36811             var startIndex$1 = edgePts.length - 2;
36812             if (isFirstEdge) { startIndex$1 = edgePts.length - 1; }
36813             for (var i$1 = startIndex$1; i$1 >= 0; i$1--) {
36814               this$1._pts.add(edgePts[i$1]);
36815             }
36816           }
36817         };
36818         EdgeRing.prototype.isHole = function isHole () {
36819           return this._isHole
36820         };
36821         EdgeRing.prototype.setInResult = function setInResult () {
36822           var de = this._startDe;
36823           do {
36824             de.getEdge().setInResult(true);
36825             de = de.getNext();
36826           } while (de !== this._startDe)
36827         };
36828         EdgeRing.prototype.containsPoint = function containsPoint (p) {
36829           var shell = this.getLinearRing();
36830           var env = shell.getEnvelopeInternal();
36831           if (!env.contains(p)) { return false }
36832           if (!CGAlgorithms.isPointInRing(p, shell.getCoordinates())) { return false }
36833           for (var i = this._holes.iterator(); i.hasNext();) {
36834             var hole = i.next();
36835             if (hole.containsPoint(p)) { return false }
36836           }
36837           return true
36838         };
36839         EdgeRing.prototype.addHole = function addHole (ring) {
36840           this._holes.add(ring);
36841         };
36842         EdgeRing.prototype.isShell = function isShell () {
36843           return this._shell === null
36844         };
36845         EdgeRing.prototype.getLabel = function getLabel () {
36846           return this._label
36847         };
36848         EdgeRing.prototype.getEdges = function getEdges () {
36849           return this._edges
36850         };
36851         EdgeRing.prototype.getMaxNodeDegree = function getMaxNodeDegree () {
36852           if (this._maxNodeDegree < 0) { this.computeMaxNodeDegree(); }
36853           return this._maxNodeDegree
36854         };
36855         EdgeRing.prototype.getShell = function getShell () {
36856           return this._shell
36857         };
36858         EdgeRing.prototype.mergeLabel = function mergeLabel () {
36859           if (arguments.length === 1) {
36860             var deLabel = arguments[0];
36861             this.mergeLabel(deLabel, 0);
36862             this.mergeLabel(deLabel, 1);
36863           } else if (arguments.length === 2) {
36864             var deLabel$1 = arguments[0];
36865             var geomIndex = arguments[1];
36866             var loc = deLabel$1.getLocation(geomIndex, Position.RIGHT);
36867             if (loc === Location.NONE) { return null }
36868             if (this._label.getLocation(geomIndex) === Location.NONE) {
36869               this._label.setLocation(geomIndex, loc);
36870               return null
36871             }
36872           }
36873         };
36874         EdgeRing.prototype.setShell = function setShell (shell) {
36875           this._shell = shell;
36876           if (shell !== null) { shell.addHole(this); }
36877         };
36878         EdgeRing.prototype.toPolygon = function toPolygon (geometryFactory) {
36879             var this$1 = this;
36880
36881           var holeLR = new Array(this._holes.size()).fill(null);
36882           for (var i = 0; i < this._holes.size(); i++) {
36883             holeLR[i] = this$1._holes.get(i).getLinearRing();
36884           }
36885           var poly = geometryFactory.createPolygon(this.getLinearRing(), holeLR);
36886           return poly
36887         };
36888         EdgeRing.prototype.interfaces_ = function interfaces_ () {
36889           return []
36890         };
36891         EdgeRing.prototype.getClass = function getClass () {
36892           return EdgeRing
36893         };
36894
36895         var MinimalEdgeRing = (function (EdgeRing$$1) {
36896           function MinimalEdgeRing () {
36897             var start = arguments[0];
36898             var geometryFactory = arguments[1];
36899             EdgeRing$$1.call(this, start, geometryFactory);
36900           }
36901
36902           if ( EdgeRing$$1 ) { MinimalEdgeRing.__proto__ = EdgeRing$$1; }
36903           MinimalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );
36904           MinimalEdgeRing.prototype.constructor = MinimalEdgeRing;
36905           MinimalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {
36906             de.setMinEdgeRing(er);
36907           };
36908           MinimalEdgeRing.prototype.getNext = function getNext (de) {
36909             return de.getNextMin()
36910           };
36911           MinimalEdgeRing.prototype.interfaces_ = function interfaces_ () {
36912             return []
36913           };
36914           MinimalEdgeRing.prototype.getClass = function getClass () {
36915             return MinimalEdgeRing
36916           };
36917
36918           return MinimalEdgeRing;
36919         }(EdgeRing));
36920
36921         var MaximalEdgeRing = (function (EdgeRing$$1) {
36922           function MaximalEdgeRing () {
36923             var start = arguments[0];
36924             var geometryFactory = arguments[1];
36925             EdgeRing$$1.call(this, start, geometryFactory);
36926           }
36927
36928           if ( EdgeRing$$1 ) { MaximalEdgeRing.__proto__ = EdgeRing$$1; }
36929           MaximalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );
36930           MaximalEdgeRing.prototype.constructor = MaximalEdgeRing;
36931           MaximalEdgeRing.prototype.buildMinimalRings = function buildMinimalRings () {
36932             var this$1 = this;
36933
36934             var minEdgeRings = new ArrayList();
36935             var de = this._startDe;
36936             do {
36937               if (de.getMinEdgeRing() === null) {
36938                 var minEr = new MinimalEdgeRing(de, this$1._geometryFactory);
36939                 minEdgeRings.add(minEr);
36940               }
36941               de = de.getNext();
36942             } while (de !== this._startDe)
36943             return minEdgeRings
36944           };
36945           MaximalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {
36946             de.setEdgeRing(er);
36947           };
36948           MaximalEdgeRing.prototype.linkDirectedEdgesForMinimalEdgeRings = function linkDirectedEdgesForMinimalEdgeRings () {
36949             var this$1 = this;
36950
36951             var de = this._startDe;
36952             do {
36953               var node = de.getNode();
36954               node.getEdges().linkMinimalDirectedEdges(this$1);
36955               de = de.getNext();
36956             } while (de !== this._startDe)
36957           };
36958           MaximalEdgeRing.prototype.getNext = function getNext (de) {
36959             return de.getNext()
36960           };
36961           MaximalEdgeRing.prototype.interfaces_ = function interfaces_ () {
36962             return []
36963           };
36964           MaximalEdgeRing.prototype.getClass = function getClass () {
36965             return MaximalEdgeRing
36966           };
36967
36968           return MaximalEdgeRing;
36969         }(EdgeRing));
36970
36971         var GraphComponent = function GraphComponent () {
36972           this._label = null;
36973           this._isInResult = false;
36974           this._isCovered = false;
36975           this._isCoveredSet = false;
36976           this._isVisited = false;
36977           if (arguments.length === 0) ; else if (arguments.length === 1) {
36978             var label = arguments[0];
36979             this._label = label;
36980           }
36981         };
36982         GraphComponent.prototype.setVisited = function setVisited (isVisited) {
36983           this._isVisited = isVisited;
36984         };
36985         GraphComponent.prototype.setInResult = function setInResult (isInResult) {
36986           this._isInResult = isInResult;
36987         };
36988         GraphComponent.prototype.isCovered = function isCovered () {
36989           return this._isCovered
36990         };
36991         GraphComponent.prototype.isCoveredSet = function isCoveredSet () {
36992           return this._isCoveredSet
36993         };
36994         GraphComponent.prototype.setLabel = function setLabel (label) {
36995           this._label = label;
36996         };
36997         GraphComponent.prototype.getLabel = function getLabel () {
36998           return this._label
36999         };
37000         GraphComponent.prototype.setCovered = function setCovered (isCovered) {
37001           this._isCovered = isCovered;
37002           this._isCoveredSet = true;
37003         };
37004         GraphComponent.prototype.updateIM = function updateIM (im) {
37005           Assert.isTrue(this._label.getGeometryCount() >= 2, 'found partial label');
37006           this.computeIM(im);
37007         };
37008         GraphComponent.prototype.isInResult = function isInResult () {
37009           return this._isInResult
37010         };
37011         GraphComponent.prototype.isVisited = function isVisited () {
37012           return this._isVisited
37013         };
37014         GraphComponent.prototype.interfaces_ = function interfaces_ () {
37015           return []
37016         };
37017         GraphComponent.prototype.getClass = function getClass () {
37018           return GraphComponent
37019         };
37020
37021         var Node$2 = (function (GraphComponent$$1) {
37022           function Node () {
37023             GraphComponent$$1.call(this);
37024             this._coord = null;
37025             this._edges = null;
37026             var coord = arguments[0];
37027             var edges = arguments[1];
37028             this._coord = coord;
37029             this._edges = edges;
37030             this._label = new Label(0, Location.NONE);
37031           }
37032
37033           if ( GraphComponent$$1 ) { Node.__proto__ = GraphComponent$$1; }
37034           Node.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );
37035           Node.prototype.constructor = Node;
37036           Node.prototype.isIncidentEdgeInResult = function isIncidentEdgeInResult () {
37037             for (var it = this.getEdges().getEdges().iterator(); it.hasNext();) {
37038               var de = it.next();
37039               if (de.getEdge().isInResult()) { return true }
37040             }
37041             return false
37042           };
37043           Node.prototype.isIsolated = function isIsolated () {
37044             return this._label.getGeometryCount() === 1
37045           };
37046           Node.prototype.getCoordinate = function getCoordinate () {
37047             return this._coord
37048           };
37049           Node.prototype.print = function print (out) {
37050             out.println('node ' + this._coord + ' lbl: ' + this._label);
37051           };
37052           Node.prototype.computeIM = function computeIM (im) {};
37053           Node.prototype.computeMergedLocation = function computeMergedLocation (label2, eltIndex) {
37054             var loc = Location.NONE;
37055             loc = this._label.getLocation(eltIndex);
37056             if (!label2.isNull(eltIndex)) {
37057               var nLoc = label2.getLocation(eltIndex);
37058               if (loc !== Location.BOUNDARY) { loc = nLoc; }
37059             }
37060             return loc
37061           };
37062           Node.prototype.setLabel = function setLabel () {
37063             if (arguments.length === 2) {
37064               var argIndex = arguments[0];
37065               var onLocation = arguments[1];
37066               if (this._label === null) {
37067                 this._label = new Label(argIndex, onLocation);
37068               } else { this._label.setLocation(argIndex, onLocation); }
37069             } else { return GraphComponent$$1.prototype.setLabel.apply(this, arguments) }
37070           };
37071           Node.prototype.getEdges = function getEdges () {
37072             return this._edges
37073           };
37074           Node.prototype.mergeLabel = function mergeLabel () {
37075             var this$1 = this;
37076
37077             if (arguments[0] instanceof Node) {
37078               var n = arguments[0];
37079               this.mergeLabel(n._label);
37080             } else if (arguments[0] instanceof Label) {
37081               var label2 = arguments[0];
37082               for (var i = 0; i < 2; i++) {
37083                 var loc = this$1.computeMergedLocation(label2, i);
37084                 var thisLoc = this$1._label.getLocation(i);
37085                 if (thisLoc === Location.NONE) { this$1._label.setLocation(i, loc); }
37086               }
37087             }
37088           };
37089           Node.prototype.add = function add (e) {
37090             this._edges.insert(e);
37091             e.setNode(this);
37092           };
37093           Node.prototype.setLabelBoundary = function setLabelBoundary (argIndex) {
37094             if (this._label === null) { return null }
37095             var loc = Location.NONE;
37096             if (this._label !== null) { loc = this._label.getLocation(argIndex); }
37097             var newLoc = null;
37098             switch (loc) {
37099               case Location.BOUNDARY:
37100                 newLoc = Location.INTERIOR;
37101                 break
37102               case Location.INTERIOR:
37103                 newLoc = Location.BOUNDARY;
37104                 break
37105               default:
37106                 newLoc = Location.BOUNDARY;
37107                 break
37108             }
37109             this._label.setLocation(argIndex, newLoc);
37110           };
37111           Node.prototype.interfaces_ = function interfaces_ () {
37112             return []
37113           };
37114           Node.prototype.getClass = function getClass () {
37115             return Node
37116           };
37117
37118           return Node;
37119         }(GraphComponent));
37120
37121         var NodeMap = function NodeMap () {
37122           this.nodeMap = new TreeMap();
37123           this.nodeFact = null;
37124           var nodeFact = arguments[0];
37125           this.nodeFact = nodeFact;
37126         };
37127         NodeMap.prototype.find = function find (coord) {
37128           return this.nodeMap.get(coord)
37129         };
37130         NodeMap.prototype.addNode = function addNode () {
37131           if (arguments[0] instanceof Coordinate) {
37132             var coord = arguments[0];
37133             var node = this.nodeMap.get(coord);
37134             if (node === null) {
37135               node = this.nodeFact.createNode(coord);
37136               this.nodeMap.put(coord, node);
37137             }
37138             return node
37139           } else if (arguments[0] instanceof Node$2) {
37140             var n = arguments[0];
37141             var node$1 = this.nodeMap.get(n.getCoordinate());
37142             if (node$1 === null) {
37143               this.nodeMap.put(n.getCoordinate(), n);
37144               return n
37145             }
37146             node$1.mergeLabel(n);
37147             return node$1
37148           }
37149         };
37150         NodeMap.prototype.print = function print (out) {
37151           for (var it = this.iterator(); it.hasNext();) {
37152             var n = it.next();
37153             n.print(out);
37154           }
37155         };
37156         NodeMap.prototype.iterator = function iterator () {
37157           return this.nodeMap.values().iterator()
37158         };
37159         NodeMap.prototype.values = function values () {
37160           return this.nodeMap.values()
37161         };
37162         NodeMap.prototype.getBoundaryNodes = function getBoundaryNodes (geomIndex) {
37163           var bdyNodes = new ArrayList();
37164           for (var i = this.iterator(); i.hasNext();) {
37165             var node = i.next();
37166             if (node.getLabel().getLocation(geomIndex) === Location.BOUNDARY) { bdyNodes.add(node); }
37167           }
37168           return bdyNodes
37169         };
37170         NodeMap.prototype.add = function add (e) {
37171           var p = e.getCoordinate();
37172           var n = this.addNode(p);
37173           n.add(e);
37174         };
37175         NodeMap.prototype.interfaces_ = function interfaces_ () {
37176           return []
37177         };
37178         NodeMap.prototype.getClass = function getClass () {
37179           return NodeMap
37180         };
37181
37182         var Quadrant = function Quadrant () {};
37183
37184         var staticAccessors$21 = { NE: { configurable: true },NW: { configurable: true },SW: { configurable: true },SE: { configurable: true } };
37185
37186         Quadrant.prototype.interfaces_ = function interfaces_ () {
37187           return []
37188         };
37189         Quadrant.prototype.getClass = function getClass () {
37190           return Quadrant
37191         };
37192         Quadrant.isNorthern = function isNorthern (quad) {
37193           return quad === Quadrant.NE || quad === Quadrant.NW
37194         };
37195         Quadrant.isOpposite = function isOpposite (quad1, quad2) {
37196           if (quad1 === quad2) { return false }
37197           var diff = (quad1 - quad2 + 4) % 4;
37198           if (diff === 2) { return true }
37199           return false
37200         };
37201         Quadrant.commonHalfPlane = function commonHalfPlane (quad1, quad2) {
37202           if (quad1 === quad2) { return quad1 }
37203           var diff = (quad1 - quad2 + 4) % 4;
37204           if (diff === 2) { return -1 }
37205           var min = quad1 < quad2 ? quad1 : quad2;
37206           var max = quad1 > quad2 ? quad1 : quad2;
37207           if (min === 0 && max === 3) { return 3 }
37208           return min
37209         };
37210         Quadrant.isInHalfPlane = function isInHalfPlane (quad, halfPlane) {
37211           if (halfPlane === Quadrant.SE) {
37212             return quad === Quadrant.SE || quad === Quadrant.SW
37213           }
37214           return quad === halfPlane || quad === halfPlane + 1
37215         };
37216         Quadrant.quadrant = function quadrant () {
37217           if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
37218             var dx = arguments[0];
37219             var dy = arguments[1];
37220             if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the quadrant for point ( ' + dx + ', ' + dy + ' )') }
37221             if (dx >= 0.0) {
37222               if (dy >= 0.0) { return Quadrant.NE; } else { return Quadrant.SE }
37223             } else {
37224               if (dy >= 0.0) { return Quadrant.NW; } else { return Quadrant.SW }
37225             }
37226           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
37227             var p0 = arguments[0];
37228             var p1 = arguments[1];
37229             if (p1.x === p0.x && p1.y === p0.y) { throw new IllegalArgumentException('Cannot compute the quadrant for two identical points ' + p0) }
37230             if (p1.x >= p0.x) {
37231               if (p1.y >= p0.y) { return Quadrant.NE; } else { return Quadrant.SE }
37232             } else {
37233               if (p1.y >= p0.y) { return Quadrant.NW; } else { return Quadrant.SW }
37234             }
37235           }
37236         };
37237         staticAccessors$21.NE.get = function () { return 0 };
37238         staticAccessors$21.NW.get = function () { return 1 };
37239         staticAccessors$21.SW.get = function () { return 2 };
37240         staticAccessors$21.SE.get = function () { return 3 };
37241
37242         Object.defineProperties( Quadrant, staticAccessors$21 );
37243
37244         var EdgeEnd = function EdgeEnd () {
37245           this._edge = null;
37246           this._label = null;
37247           this._node = null;
37248           this._p0 = null;
37249           this._p1 = null;
37250           this._dx = null;
37251           this._dy = null;
37252           this._quadrant = null;
37253           if (arguments.length === 1) {
37254             var edge = arguments[0];
37255             this._edge = edge;
37256           } else if (arguments.length === 3) {
37257             var edge$1 = arguments[0];
37258             var p0 = arguments[1];
37259             var p1 = arguments[2];
37260             var label = null;
37261             this._edge = edge$1;
37262             this.init(p0, p1);
37263             this._label = label;
37264           } else if (arguments.length === 4) {
37265             var edge$2 = arguments[0];
37266             var p0$1 = arguments[1];
37267             var p1$1 = arguments[2];
37268             var label$1 = arguments[3];
37269             this._edge = edge$2;
37270             this.init(p0$1, p1$1);
37271             this._label = label$1;
37272           }
37273         };
37274         EdgeEnd.prototype.compareDirection = function compareDirection (e) {
37275           if (this._dx === e._dx && this._dy === e._dy) { return 0 }
37276           if (this._quadrant > e._quadrant) { return 1 }
37277           if (this._quadrant < e._quadrant) { return -1 }
37278           return CGAlgorithms.computeOrientation(e._p0, e._p1, this._p1)
37279         };
37280         EdgeEnd.prototype.getDy = function getDy () {
37281           return this._dy
37282         };
37283         EdgeEnd.prototype.getCoordinate = function getCoordinate () {
37284           return this._p0
37285         };
37286         EdgeEnd.prototype.setNode = function setNode (node) {
37287           this._node = node;
37288         };
37289         EdgeEnd.prototype.print = function print (out) {
37290           var angle = Math.atan2(this._dy, this._dx);
37291           var className = this.getClass().getName();
37292           var lastDotPos = className.lastIndexOf('.');
37293           var name = className.substring(lastDotPos + 1);
37294           out.print('  ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + '   ' + this._label);
37295         };
37296         EdgeEnd.prototype.compareTo = function compareTo (obj) {
37297           var e = obj;
37298           return this.compareDirection(e)
37299         };
37300         EdgeEnd.prototype.getDirectedCoordinate = function getDirectedCoordinate () {
37301           return this._p1
37302         };
37303         EdgeEnd.prototype.getDx = function getDx () {
37304           return this._dx
37305         };
37306         EdgeEnd.prototype.getLabel = function getLabel () {
37307           return this._label
37308         };
37309         EdgeEnd.prototype.getEdge = function getEdge () {
37310           return this._edge
37311         };
37312         EdgeEnd.prototype.getQuadrant = function getQuadrant () {
37313           return this._quadrant
37314         };
37315         EdgeEnd.prototype.getNode = function getNode () {
37316           return this._node
37317         };
37318         EdgeEnd.prototype.toString = function toString () {
37319           var angle = Math.atan2(this._dy, this._dx);
37320           var className = this.getClass().getName();
37321           var lastDotPos = className.lastIndexOf('.');
37322           var name = className.substring(lastDotPos + 1);
37323           return '  ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + '   ' + this._label
37324         };
37325         EdgeEnd.prototype.computeLabel = function computeLabel (boundaryNodeRule) {};
37326         EdgeEnd.prototype.init = function init (p0, p1) {
37327           this._p0 = p0;
37328           this._p1 = p1;
37329           this._dx = p1.x - p0.x;
37330           this._dy = p1.y - p0.y;
37331           this._quadrant = Quadrant.quadrant(this._dx, this._dy);
37332           Assert.isTrue(!(this._dx === 0 && this._dy === 0), 'EdgeEnd with identical endpoints found');
37333         };
37334         EdgeEnd.prototype.interfaces_ = function interfaces_ () {
37335           return [Comparable]
37336         };
37337         EdgeEnd.prototype.getClass = function getClass () {
37338           return EdgeEnd
37339         };
37340
37341         var DirectedEdge = (function (EdgeEnd$$1) {
37342           function DirectedEdge () {
37343             var edge = arguments[0];
37344             var isForward = arguments[1];
37345             EdgeEnd$$1.call(this, edge);
37346             this._isForward = null;
37347             this._isInResult = false;
37348             this._isVisited = false;
37349             this._sym = null;
37350             this._next = null;
37351             this._nextMin = null;
37352             this._edgeRing = null;
37353             this._minEdgeRing = null;
37354             this._depth = [0, -999, -999];
37355             this._isForward = isForward;
37356             if (isForward) {
37357               this.init(edge.getCoordinate(0), edge.getCoordinate(1));
37358             } else {
37359               var n = edge.getNumPoints() - 1;
37360               this.init(edge.getCoordinate(n), edge.getCoordinate(n - 1));
37361             }
37362             this.computeDirectedLabel();
37363           }
37364
37365           if ( EdgeEnd$$1 ) { DirectedEdge.__proto__ = EdgeEnd$$1; }
37366           DirectedEdge.prototype = Object.create( EdgeEnd$$1 && EdgeEnd$$1.prototype );
37367           DirectedEdge.prototype.constructor = DirectedEdge;
37368           DirectedEdge.prototype.getNextMin = function getNextMin () {
37369             return this._nextMin
37370           };
37371           DirectedEdge.prototype.getDepth = function getDepth (position) {
37372             return this._depth[position]
37373           };
37374           DirectedEdge.prototype.setVisited = function setVisited (isVisited) {
37375             this._isVisited = isVisited;
37376           };
37377           DirectedEdge.prototype.computeDirectedLabel = function computeDirectedLabel () {
37378             this._label = new Label(this._edge.getLabel());
37379             if (!this._isForward) { this._label.flip(); }
37380           };
37381           DirectedEdge.prototype.getNext = function getNext () {
37382             return this._next
37383           };
37384           DirectedEdge.prototype.setDepth = function setDepth (position, depthVal) {
37385             if (this._depth[position] !== -999) {
37386               if (this._depth[position] !== depthVal) { throw new TopologyException('assigned depths do not match', this.getCoordinate()) }
37387             }
37388             this._depth[position] = depthVal;
37389           };
37390           DirectedEdge.prototype.isInteriorAreaEdge = function isInteriorAreaEdge () {
37391             var this$1 = this;
37392
37393             var isInteriorAreaEdge = true;
37394             for (var i = 0; i < 2; i++) {
37395               if (!(this$1._label.isArea(i) && this$1._label.getLocation(i, Position.LEFT) === Location.INTERIOR && this$1._label.getLocation(i, Position.RIGHT) === Location.INTERIOR)) {
37396                 isInteriorAreaEdge = false;
37397               }
37398             }
37399             return isInteriorAreaEdge
37400           };
37401           DirectedEdge.prototype.setNextMin = function setNextMin (nextMin) {
37402             this._nextMin = nextMin;
37403           };
37404           DirectedEdge.prototype.print = function print (out) {
37405             EdgeEnd$$1.prototype.print.call(this, out);
37406             out.print(' ' + this._depth[Position.LEFT] + '/' + this._depth[Position.RIGHT]);
37407             out.print(' (' + this.getDepthDelta() + ')');
37408             if (this._isInResult) { out.print(' inResult'); }
37409           };
37410           DirectedEdge.prototype.setMinEdgeRing = function setMinEdgeRing (minEdgeRing) {
37411             this._minEdgeRing = minEdgeRing;
37412           };
37413           DirectedEdge.prototype.isLineEdge = function isLineEdge () {
37414             var isLine = this._label.isLine(0) || this._label.isLine(1);
37415             var isExteriorIfArea0 = !this._label.isArea(0) || this._label.allPositionsEqual(0, Location.EXTERIOR);
37416             var isExteriorIfArea1 = !this._label.isArea(1) || this._label.allPositionsEqual(1, Location.EXTERIOR);
37417             return isLine && isExteriorIfArea0 && isExteriorIfArea1
37418           };
37419           DirectedEdge.prototype.setEdgeRing = function setEdgeRing (edgeRing) {
37420             this._edgeRing = edgeRing;
37421           };
37422           DirectedEdge.prototype.getMinEdgeRing = function getMinEdgeRing () {
37423             return this._minEdgeRing
37424           };
37425           DirectedEdge.prototype.getDepthDelta = function getDepthDelta () {
37426             var depthDelta = this._edge.getDepthDelta();
37427             if (!this._isForward) { depthDelta = -depthDelta; }
37428             return depthDelta
37429           };
37430           DirectedEdge.prototype.setInResult = function setInResult (isInResult) {
37431             this._isInResult = isInResult;
37432           };
37433           DirectedEdge.prototype.getSym = function getSym () {
37434             return this._sym
37435           };
37436           DirectedEdge.prototype.isForward = function isForward () {
37437             return this._isForward
37438           };
37439           DirectedEdge.prototype.getEdge = function getEdge () {
37440             return this._edge
37441           };
37442           DirectedEdge.prototype.printEdge = function printEdge (out) {
37443             this.print(out);
37444             out.print(' ');
37445             if (this._isForward) { this._edge.print(out); } else { this._edge.printReverse(out); }
37446           };
37447           DirectedEdge.prototype.setSym = function setSym (de) {
37448             this._sym = de;
37449           };
37450           DirectedEdge.prototype.setVisitedEdge = function setVisitedEdge (isVisited) {
37451             this.setVisited(isVisited);
37452             this._sym.setVisited(isVisited);
37453           };
37454           DirectedEdge.prototype.setEdgeDepths = function setEdgeDepths (position, depth) {
37455             var depthDelta = this.getEdge().getDepthDelta();
37456             if (!this._isForward) { depthDelta = -depthDelta; }
37457             var directionFactor = 1;
37458             if (position === Position.LEFT) { directionFactor = -1; }
37459             var oppositePos = Position.opposite(position);
37460             var delta = depthDelta * directionFactor;
37461             var oppositeDepth = depth + delta;
37462             this.setDepth(position, depth);
37463             this.setDepth(oppositePos, oppositeDepth);
37464           };
37465           DirectedEdge.prototype.getEdgeRing = function getEdgeRing () {
37466             return this._edgeRing
37467           };
37468           DirectedEdge.prototype.isInResult = function isInResult () {
37469             return this._isInResult
37470           };
37471           DirectedEdge.prototype.setNext = function setNext (next) {
37472             this._next = next;
37473           };
37474           DirectedEdge.prototype.isVisited = function isVisited () {
37475             return this._isVisited
37476           };
37477           DirectedEdge.prototype.interfaces_ = function interfaces_ () {
37478             return []
37479           };
37480           DirectedEdge.prototype.getClass = function getClass () {
37481             return DirectedEdge
37482           };
37483           DirectedEdge.depthFactor = function depthFactor (currLocation, nextLocation) {
37484             if (currLocation === Location.EXTERIOR && nextLocation === Location.INTERIOR) { return 1; } else if (currLocation === Location.INTERIOR && nextLocation === Location.EXTERIOR) { return -1 }
37485             return 0
37486           };
37487
37488           return DirectedEdge;
37489         }(EdgeEnd));
37490
37491         var NodeFactory = function NodeFactory () {};
37492
37493         NodeFactory.prototype.createNode = function createNode (coord) {
37494           return new Node$2(coord, null)
37495         };
37496         NodeFactory.prototype.interfaces_ = function interfaces_ () {
37497           return []
37498         };
37499         NodeFactory.prototype.getClass = function getClass () {
37500           return NodeFactory
37501         };
37502
37503         var PlanarGraph = function PlanarGraph () {
37504           this._edges = new ArrayList();
37505           this._nodes = null;
37506           this._edgeEndList = new ArrayList();
37507           if (arguments.length === 0) {
37508             this._nodes = new NodeMap(new NodeFactory());
37509           } else if (arguments.length === 1) {
37510             var nodeFact = arguments[0];
37511             this._nodes = new NodeMap(nodeFact);
37512           }
37513         };
37514         PlanarGraph.prototype.printEdges = function printEdges (out) {
37515             var this$1 = this;
37516
37517           out.println('Edges:');
37518           for (var i = 0; i < this._edges.size(); i++) {
37519             out.println('edge ' + i + ':');
37520             var e = this$1._edges.get(i);
37521             e.print(out);
37522             e.eiList.print(out);
37523           }
37524         };
37525         PlanarGraph.prototype.find = function find (coord) {
37526           return this._nodes.find(coord)
37527         };
37528         PlanarGraph.prototype.addNode = function addNode () {
37529           if (arguments[0] instanceof Node$2) {
37530             var node = arguments[0];
37531             return this._nodes.addNode(node)
37532           } else if (arguments[0] instanceof Coordinate) {
37533             var coord = arguments[0];
37534             return this._nodes.addNode(coord)
37535           }
37536         };
37537         PlanarGraph.prototype.getNodeIterator = function getNodeIterator () {
37538           return this._nodes.iterator()
37539         };
37540         PlanarGraph.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {
37541           for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {
37542             var node = nodeit.next();
37543             node.getEdges().linkResultDirectedEdges();
37544           }
37545         };
37546         PlanarGraph.prototype.debugPrintln = function debugPrintln (o) {
37547           System.out.println(o);
37548         };
37549         PlanarGraph.prototype.isBoundaryNode = function isBoundaryNode (geomIndex, coord) {
37550           var node = this._nodes.find(coord);
37551           if (node === null) { return false }
37552           var label = node.getLabel();
37553           if (label !== null && label.getLocation(geomIndex) === Location.BOUNDARY) { return true }
37554           return false
37555         };
37556         PlanarGraph.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {
37557           for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {
37558             var node = nodeit.next();
37559             node.getEdges().linkAllDirectedEdges();
37560           }
37561         };
37562         PlanarGraph.prototype.matchInSameDirection = function matchInSameDirection (p0, p1, ep0, ep1) {
37563           if (!p0.equals(ep0)) { return false }
37564           if (CGAlgorithms.computeOrientation(p0, p1, ep1) === CGAlgorithms.COLLINEAR && Quadrant.quadrant(p0, p1) === Quadrant.quadrant(ep0, ep1)) { return true }
37565           return false
37566         };
37567         PlanarGraph.prototype.getEdgeEnds = function getEdgeEnds () {
37568           return this._edgeEndList
37569         };
37570         PlanarGraph.prototype.debugPrint = function debugPrint (o) {
37571           System.out.print(o);
37572         };
37573         PlanarGraph.prototype.getEdgeIterator = function getEdgeIterator () {
37574           return this._edges.iterator()
37575         };
37576         PlanarGraph.prototype.findEdgeInSameDirection = function findEdgeInSameDirection (p0, p1) {
37577             var this$1 = this;
37578
37579           for (var i = 0; i < this._edges.size(); i++) {
37580             var e = this$1._edges.get(i);
37581             var eCoord = e.getCoordinates();
37582             if (this$1.matchInSameDirection(p0, p1, eCoord[0], eCoord[1])) { return e }
37583             if (this$1.matchInSameDirection(p0, p1, eCoord[eCoord.length - 1], eCoord[eCoord.length - 2])) { return e }
37584           }
37585           return null
37586         };
37587         PlanarGraph.prototype.insertEdge = function insertEdge (e) {
37588           this._edges.add(e);
37589         };
37590         PlanarGraph.prototype.findEdgeEnd = function findEdgeEnd (e) {
37591           for (var i = this.getEdgeEnds().iterator(); i.hasNext();) {
37592             var ee = i.next();
37593             if (ee.getEdge() === e) { return ee }
37594           }
37595           return null
37596         };
37597         PlanarGraph.prototype.addEdges = function addEdges (edgesToAdd) {
37598             var this$1 = this;
37599
37600           for (var it = edgesToAdd.iterator(); it.hasNext();) {
37601             var e = it.next();
37602             this$1._edges.add(e);
37603             var de1 = new DirectedEdge(e, true);
37604             var de2 = new DirectedEdge(e, false);
37605             de1.setSym(de2);
37606             de2.setSym(de1);
37607             this$1.add(de1);
37608             this$1.add(de2);
37609           }
37610         };
37611         PlanarGraph.prototype.add = function add (e) {
37612           this._nodes.add(e);
37613           this._edgeEndList.add(e);
37614         };
37615         PlanarGraph.prototype.getNodes = function getNodes () {
37616           return this._nodes.values()
37617         };
37618         PlanarGraph.prototype.findEdge = function findEdge (p0, p1) {
37619             var this$1 = this;
37620
37621           for (var i = 0; i < this._edges.size(); i++) {
37622             var e = this$1._edges.get(i);
37623             var eCoord = e.getCoordinates();
37624             if (p0.equals(eCoord[0]) && p1.equals(eCoord[1])) { return e }
37625           }
37626           return null
37627         };
37628         PlanarGraph.prototype.interfaces_ = function interfaces_ () {
37629           return []
37630         };
37631         PlanarGraph.prototype.getClass = function getClass () {
37632           return PlanarGraph
37633         };
37634         PlanarGraph.linkResultDirectedEdges = function linkResultDirectedEdges (nodes) {
37635           for (var nodeit = nodes.iterator(); nodeit.hasNext();) {
37636             var node = nodeit.next();
37637             node.getEdges().linkResultDirectedEdges();
37638           }
37639         };
37640
37641         var PolygonBuilder = function PolygonBuilder () {
37642           this._geometryFactory = null;
37643           this._shellList = new ArrayList();
37644           var geometryFactory = arguments[0];
37645           this._geometryFactory = geometryFactory;
37646         };
37647         PolygonBuilder.prototype.sortShellsAndHoles = function sortShellsAndHoles (edgeRings, shellList, freeHoleList) {
37648           for (var it = edgeRings.iterator(); it.hasNext();) {
37649             var er = it.next();
37650             if (er.isHole()) {
37651               freeHoleList.add(er);
37652             } else {
37653               shellList.add(er);
37654             }
37655           }
37656         };
37657         PolygonBuilder.prototype.computePolygons = function computePolygons (shellList) {
37658             var this$1 = this;
37659
37660           var resultPolyList = new ArrayList();
37661           for (var it = shellList.iterator(); it.hasNext();) {
37662             var er = it.next();
37663             var poly = er.toPolygon(this$1._geometryFactory);
37664             resultPolyList.add(poly);
37665           }
37666           return resultPolyList
37667         };
37668         PolygonBuilder.prototype.placeFreeHoles = function placeFreeHoles (shellList, freeHoleList) {
37669             var this$1 = this;
37670
37671           for (var it = freeHoleList.iterator(); it.hasNext();) {
37672             var hole = it.next();
37673             if (hole.getShell() === null) {
37674               var shell = this$1.findEdgeRingContaining(hole, shellList);
37675               if (shell === null) { throw new TopologyException('unable to assign hole to a shell', hole.getCoordinate(0)) }
37676               hole.setShell(shell);
37677             }
37678           }
37679         };
37680         PolygonBuilder.prototype.buildMinimalEdgeRings = function buildMinimalEdgeRings (maxEdgeRings, shellList, freeHoleList) {
37681             var this$1 = this;
37682
37683           var edgeRings = new ArrayList();
37684           for (var it = maxEdgeRings.iterator(); it.hasNext();) {
37685             var er = it.next();
37686             if (er.getMaxNodeDegree() > 2) {
37687               er.linkDirectedEdgesForMinimalEdgeRings();
37688               var minEdgeRings = er.buildMinimalRings();
37689               var shell = this$1.findShell(minEdgeRings);
37690               if (shell !== null) {
37691                 this$1.placePolygonHoles(shell, minEdgeRings);
37692                 shellList.add(shell);
37693               } else {
37694                 freeHoleList.addAll(minEdgeRings);
37695               }
37696             } else {
37697               edgeRings.add(er);
37698             }
37699           }
37700           return edgeRings
37701         };
37702         PolygonBuilder.prototype.containsPoint = function containsPoint (p) {
37703           for (var it = this._shellList.iterator(); it.hasNext();) {
37704             var er = it.next();
37705             if (er.containsPoint(p)) { return true }
37706           }
37707           return false
37708         };
37709         PolygonBuilder.prototype.buildMaximalEdgeRings = function buildMaximalEdgeRings (dirEdges) {
37710             var this$1 = this;
37711
37712           var maxEdgeRings = new ArrayList();
37713           for (var it = dirEdges.iterator(); it.hasNext();) {
37714             var de = it.next();
37715             if (de.isInResult() && de.getLabel().isArea()) {
37716               if (de.getEdgeRing() === null) {
37717                 var er = new MaximalEdgeRing(de, this$1._geometryFactory);
37718                 maxEdgeRings.add(er);
37719                 er.setInResult();
37720               }
37721             }
37722           }
37723           return maxEdgeRings
37724         };
37725         PolygonBuilder.prototype.placePolygonHoles = function placePolygonHoles (shell, minEdgeRings) {
37726           for (var it = minEdgeRings.iterator(); it.hasNext();) {
37727             var er = it.next();
37728             if (er.isHole()) {
37729               er.setShell(shell);
37730             }
37731           }
37732         };
37733         PolygonBuilder.prototype.getPolygons = function getPolygons () {
37734           var resultPolyList = this.computePolygons(this._shellList);
37735           return resultPolyList
37736         };
37737         PolygonBuilder.prototype.findEdgeRingContaining = function findEdgeRingContaining (testEr, shellList) {
37738           var testRing = testEr.getLinearRing();
37739           var testEnv = testRing.getEnvelopeInternal();
37740           var testPt = testRing.getCoordinateN(0);
37741           var minShell = null;
37742           var minEnv = null;
37743           for (var it = shellList.iterator(); it.hasNext();) {
37744             var tryShell = it.next();
37745             var tryRing = tryShell.getLinearRing();
37746             var tryEnv = tryRing.getEnvelopeInternal();
37747             if (minShell !== null) { minEnv = minShell.getLinearRing().getEnvelopeInternal(); }
37748             var isContained = false;
37749             if (tryEnv.contains(testEnv) && CGAlgorithms.isPointInRing(testPt, tryRing.getCoordinates())) { isContained = true; }
37750             if (isContained) {
37751               if (minShell === null || minEnv.contains(tryEnv)) {
37752                 minShell = tryShell;
37753               }
37754             }
37755           }
37756           return minShell
37757         };
37758         PolygonBuilder.prototype.findShell = function findShell (minEdgeRings) {
37759           var shellCount = 0;
37760           var shell = null;
37761           for (var it = minEdgeRings.iterator(); it.hasNext();) {
37762             var er = it.next();
37763             if (!er.isHole()) {
37764               shell = er;
37765               shellCount++;
37766             }
37767           }
37768           Assert.isTrue(shellCount <= 1, 'found two shells in MinimalEdgeRing list');
37769           return shell
37770         };
37771         PolygonBuilder.prototype.add = function add () {
37772           if (arguments.length === 1) {
37773             var graph = arguments[0];
37774             this.add(graph.getEdgeEnds(), graph.getNodes());
37775           } else if (arguments.length === 2) {
37776             var dirEdges = arguments[0];
37777             var nodes = arguments[1];
37778             PlanarGraph.linkResultDirectedEdges(nodes);
37779             var maxEdgeRings = this.buildMaximalEdgeRings(dirEdges);
37780             var freeHoleList = new ArrayList();
37781             var edgeRings = this.buildMinimalEdgeRings(maxEdgeRings, this._shellList, freeHoleList);
37782             this.sortShellsAndHoles(edgeRings, this._shellList, freeHoleList);
37783             this.placeFreeHoles(this._shellList, freeHoleList);
37784           }
37785         };
37786         PolygonBuilder.prototype.interfaces_ = function interfaces_ () {
37787           return []
37788         };
37789         PolygonBuilder.prototype.getClass = function getClass () {
37790           return PolygonBuilder
37791         };
37792
37793         var Boundable = function Boundable () {};
37794
37795         Boundable.prototype.getBounds = function getBounds () {};
37796         Boundable.prototype.interfaces_ = function interfaces_ () {
37797           return []
37798         };
37799         Boundable.prototype.getClass = function getClass () {
37800           return Boundable
37801         };
37802
37803         var ItemBoundable = function ItemBoundable () {
37804           this._bounds = null;
37805           this._item = null;
37806           var bounds = arguments[0];
37807           var item = arguments[1];
37808           this._bounds = bounds;
37809           this._item = item;
37810         };
37811         ItemBoundable.prototype.getItem = function getItem () {
37812           return this._item
37813         };
37814         ItemBoundable.prototype.getBounds = function getBounds () {
37815           return this._bounds
37816         };
37817         ItemBoundable.prototype.interfaces_ = function interfaces_ () {
37818           return [Boundable, Serializable]
37819         };
37820         ItemBoundable.prototype.getClass = function getClass () {
37821           return ItemBoundable
37822         };
37823
37824         var PriorityQueue = function PriorityQueue () {
37825           this._size = null;
37826           this._items = null;
37827           this._size = 0;
37828           this._items = new ArrayList();
37829           this._items.add(null);
37830         };
37831         PriorityQueue.prototype.poll = function poll () {
37832           if (this.isEmpty()) { return null }
37833           var minItem = this._items.get(1);
37834           this._items.set(1, this._items.get(this._size));
37835           this._size -= 1;
37836           this.reorder(1);
37837           return minItem
37838         };
37839         PriorityQueue.prototype.size = function size () {
37840           return this._size
37841         };
37842         PriorityQueue.prototype.reorder = function reorder (hole) {
37843             var this$1 = this;
37844
37845           var child = null;
37846           var tmp = this._items.get(hole);
37847           for (; hole * 2 <= this._size; hole = child) {
37848             child = hole * 2;
37849             if (child !== this$1._size && this$1._items.get(child + 1).compareTo(this$1._items.get(child)) < 0) { child++; }
37850             if (this$1._items.get(child).compareTo(tmp) < 0) { this$1._items.set(hole, this$1._items.get(child)); } else { break }
37851           }
37852           this._items.set(hole, tmp);
37853         };
37854         PriorityQueue.prototype.clear = function clear () {
37855           this._size = 0;
37856           this._items.clear();
37857         };
37858         PriorityQueue.prototype.isEmpty = function isEmpty () {
37859           return this._size === 0
37860         };
37861         PriorityQueue.prototype.add = function add (x) {
37862             var this$1 = this;
37863
37864           this._items.add(null);
37865           this._size += 1;
37866           var hole = this._size;
37867           this._items.set(0, x);
37868           for (; x.compareTo(this._items.get(Math.trunc(hole / 2))) < 0; hole /= 2) {
37869             this$1._items.set(hole, this$1._items.get(Math.trunc(hole / 2)));
37870           }
37871           this._items.set(hole, x);
37872         };
37873         PriorityQueue.prototype.interfaces_ = function interfaces_ () {
37874           return []
37875         };
37876         PriorityQueue.prototype.getClass = function getClass () {
37877           return PriorityQueue
37878         };
37879
37880         var ItemVisitor = function ItemVisitor () {};
37881
37882         ItemVisitor.prototype.visitItem = function visitItem (item) {};
37883         ItemVisitor.prototype.interfaces_ = function interfaces_ () {
37884           return []
37885         };
37886         ItemVisitor.prototype.getClass = function getClass () {
37887           return ItemVisitor
37888         };
37889
37890         var SpatialIndex = function SpatialIndex () {};
37891
37892         SpatialIndex.prototype.insert = function insert (itemEnv, item) {};
37893         SpatialIndex.prototype.remove = function remove (itemEnv, item) {};
37894         SpatialIndex.prototype.query = function query () {
37895           // if (arguments.length === 1) {
37896           // const searchEnv = arguments[0]
37897           // } else if (arguments.length === 2) {
37898           // const searchEnv = arguments[0]
37899           // const visitor = arguments[1]
37900           // }
37901         };
37902         SpatialIndex.prototype.interfaces_ = function interfaces_ () {
37903           return []
37904         };
37905         SpatialIndex.prototype.getClass = function getClass () {
37906           return SpatialIndex
37907         };
37908
37909         var AbstractNode = function AbstractNode () {
37910           this._childBoundables = new ArrayList();
37911           this._bounds = null;
37912           this._level = null;
37913           if (arguments.length === 0) ; else if (arguments.length === 1) {
37914             var level = arguments[0];
37915             this._level = level;
37916           }
37917         };
37918
37919         var staticAccessors$22 = { serialVersionUID: { configurable: true } };
37920         AbstractNode.prototype.getLevel = function getLevel () {
37921           return this._level
37922         };
37923         AbstractNode.prototype.size = function size () {
37924           return this._childBoundables.size()
37925         };
37926         AbstractNode.prototype.getChildBoundables = function getChildBoundables () {
37927           return this._childBoundables
37928         };
37929         AbstractNode.prototype.addChildBoundable = function addChildBoundable (childBoundable) {
37930           Assert.isTrue(this._bounds === null);
37931           this._childBoundables.add(childBoundable);
37932         };
37933         AbstractNode.prototype.isEmpty = function isEmpty () {
37934           return this._childBoundables.isEmpty()
37935         };
37936         AbstractNode.prototype.getBounds = function getBounds () {
37937           if (this._bounds === null) {
37938             this._bounds = this.computeBounds();
37939           }
37940           return this._bounds
37941         };
37942         AbstractNode.prototype.interfaces_ = function interfaces_ () {
37943           return [Boundable, Serializable]
37944         };
37945         AbstractNode.prototype.getClass = function getClass () {
37946           return AbstractNode
37947         };
37948         staticAccessors$22.serialVersionUID.get = function () { return 6493722185909573708 };
37949
37950         Object.defineProperties( AbstractNode, staticAccessors$22 );
37951
37952         var Collections = function Collections () {};
37953
37954         Collections.reverseOrder = function reverseOrder () {
37955           return {
37956             compare: function compare (a, b) {
37957               return b.compareTo(a)
37958             }
37959           }
37960         };
37961         Collections.min = function min (l) {
37962           Collections.sort(l);
37963           return l.get(0)
37964         };
37965         Collections.sort = function sort (l, c) {
37966           var a = l.toArray();
37967           if (c) {
37968             Arrays.sort(a, c);
37969           } else {
37970             Arrays.sort(a);
37971           }
37972           var i = l.iterator();
37973           for (var pos = 0, alen = a.length; pos < alen; pos++) {
37974             i.next();
37975             i.set(a[pos]);
37976           }
37977         };
37978         Collections.singletonList = function singletonList (o) {
37979           var arrayList = new ArrayList();
37980           arrayList.add(o);
37981           return arrayList
37982         };
37983
37984         var BoundablePair = function BoundablePair () {
37985           this._boundable1 = null;
37986           this._boundable2 = null;
37987           this._distance = null;
37988           this._itemDistance = null;
37989           var boundable1 = arguments[0];
37990           var boundable2 = arguments[1];
37991           var itemDistance = arguments[2];
37992           this._boundable1 = boundable1;
37993           this._boundable2 = boundable2;
37994           this._itemDistance = itemDistance;
37995           this._distance = this.distance();
37996         };
37997         BoundablePair.prototype.expandToQueue = function expandToQueue (priQ, minDistance) {
37998           var isComp1 = BoundablePair.isComposite(this._boundable1);
37999           var isComp2 = BoundablePair.isComposite(this._boundable2);
38000           if (isComp1 && isComp2) {
38001             if (BoundablePair.area(this._boundable1) > BoundablePair.area(this._boundable2)) {
38002               this.expand(this._boundable1, this._boundable2, priQ, minDistance);
38003               return null
38004             } else {
38005               this.expand(this._boundable2, this._boundable1, priQ, minDistance);
38006               return null
38007             }
38008           } else if (isComp1) {
38009             this.expand(this._boundable1, this._boundable2, priQ, minDistance);
38010             return null
38011           } else if (isComp2) {
38012             this.expand(this._boundable2, this._boundable1, priQ, minDistance);
38013             return null
38014           }
38015           throw new IllegalArgumentException('neither boundable is composite')
38016         };
38017         BoundablePair.prototype.isLeaves = function isLeaves () {
38018           return !(BoundablePair.isComposite(this._boundable1) || BoundablePair.isComposite(this._boundable2))
38019         };
38020         BoundablePair.prototype.compareTo = function compareTo (o) {
38021           var nd = o;
38022           if (this._distance < nd._distance) { return -1 }
38023           if (this._distance > nd._distance) { return 1 }
38024           return 0
38025         };
38026         BoundablePair.prototype.expand = function expand (bndComposite, bndOther, priQ, minDistance) {
38027             var this$1 = this;
38028
38029           var children = bndComposite.getChildBoundables();
38030           for (var i = children.iterator(); i.hasNext();) {
38031             var child = i.next();
38032             var bp = new BoundablePair(child, bndOther, this$1._itemDistance);
38033             if (bp.getDistance() < minDistance) {
38034               priQ.add(bp);
38035             }
38036           }
38037         };
38038         BoundablePair.prototype.getBoundable = function getBoundable (i) {
38039           if (i === 0) { return this._boundable1 }
38040           return this._boundable2
38041         };
38042         BoundablePair.prototype.getDistance = function getDistance () {
38043           return this._distance
38044         };
38045         BoundablePair.prototype.distance = function distance () {
38046           if (this.isLeaves()) {
38047             return this._itemDistance.distance(this._boundable1, this._boundable2)
38048           }
38049           return this._boundable1.getBounds().distance(this._boundable2.getBounds())
38050         };
38051         BoundablePair.prototype.interfaces_ = function interfaces_ () {
38052           return [Comparable]
38053         };
38054         BoundablePair.prototype.getClass = function getClass () {
38055           return BoundablePair
38056         };
38057         BoundablePair.area = function area (b) {
38058           return b.getBounds().getArea()
38059         };
38060         BoundablePair.isComposite = function isComposite (item) {
38061           return item instanceof AbstractNode
38062         };
38063
38064         var AbstractSTRtree = function AbstractSTRtree () {
38065           this._root = null;
38066           this._built = false;
38067           this._itemBoundables = new ArrayList();
38068           this._nodeCapacity = null;
38069           if (arguments.length === 0) {
38070             var nodeCapacity = AbstractSTRtree.DEFAULT_NODE_CAPACITY;
38071             this._nodeCapacity = nodeCapacity;
38072           } else if (arguments.length === 1) {
38073             var nodeCapacity$1 = arguments[0];
38074             Assert.isTrue(nodeCapacity$1 > 1, 'Node capacity must be greater than 1');
38075             this._nodeCapacity = nodeCapacity$1;
38076           }
38077         };
38078
38079         var staticAccessors$23 = { IntersectsOp: { configurable: true },serialVersionUID: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };
38080         AbstractSTRtree.prototype.getNodeCapacity = function getNodeCapacity () {
38081           return this._nodeCapacity
38082         };
38083         AbstractSTRtree.prototype.lastNode = function lastNode (nodes) {
38084           return nodes.get(nodes.size() - 1)
38085         };
38086         AbstractSTRtree.prototype.size = function size () {
38087             var this$1 = this;
38088
38089           if (arguments.length === 0) {
38090             if (this.isEmpty()) {
38091               return 0
38092             }
38093             this.build();
38094             return this.size(this._root)
38095           } else if (arguments.length === 1) {
38096             var node = arguments[0];
38097             var size = 0;
38098             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
38099               var childBoundable = i.next();
38100               if (childBoundable instanceof AbstractNode) {
38101                 size += this$1.size(childBoundable);
38102               } else if (childBoundable instanceof ItemBoundable) {
38103                 size += 1;
38104               }
38105             }
38106             return size
38107           }
38108         };
38109         AbstractSTRtree.prototype.removeItem = function removeItem (node, item) {
38110           var childToRemove = null;
38111           for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
38112             var childBoundable = i.next();
38113             if (childBoundable instanceof ItemBoundable) {
38114               if (childBoundable.getItem() === item) { childToRemove = childBoundable; }
38115             }
38116           }
38117           if (childToRemove !== null) {
38118             node.getChildBoundables().remove(childToRemove);
38119             return true
38120           }
38121           return false
38122         };
38123         AbstractSTRtree.prototype.itemsTree = function itemsTree () {
38124             var this$1 = this;
38125
38126           if (arguments.length === 0) {
38127             this.build();
38128             var valuesTree = this.itemsTree(this._root);
38129             if (valuesTree === null) { return new ArrayList() }
38130             return valuesTree
38131           } else if (arguments.length === 1) {
38132             var node = arguments[0];
38133             var valuesTreeForNode = new ArrayList();
38134             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
38135               var childBoundable = i.next();
38136               if (childBoundable instanceof AbstractNode) {
38137                 var valuesTreeForChild = this$1.itemsTree(childBoundable);
38138                 if (valuesTreeForChild !== null) { valuesTreeForNode.add(valuesTreeForChild); }
38139               } else if (childBoundable instanceof ItemBoundable) {
38140                 valuesTreeForNode.add(childBoundable.getItem());
38141               } else {
38142                 Assert.shouldNeverReachHere();
38143               }
38144             }
38145             if (valuesTreeForNode.size() <= 0) { return null }
38146             return valuesTreeForNode
38147           }
38148         };
38149         AbstractSTRtree.prototype.insert = function insert (bounds, item) {
38150           Assert.isTrue(!this._built, 'Cannot insert items into an STR packed R-tree after it has been built.');
38151           this._itemBoundables.add(new ItemBoundable(bounds, item));
38152         };
38153         AbstractSTRtree.prototype.boundablesAtLevel = function boundablesAtLevel () {
38154             var this$1 = this;
38155
38156           if (arguments.length === 1) {
38157             var level = arguments[0];
38158             var boundables = new ArrayList();
38159             this.boundablesAtLevel(level, this._root, boundables);
38160             return boundables
38161           } else if (arguments.length === 3) {
38162             var level$1 = arguments[0];
38163             var top = arguments[1];
38164             var boundables$1 = arguments[2];
38165             Assert.isTrue(level$1 > -2);
38166             if (top.getLevel() === level$1) {
38167               boundables$1.add(top);
38168               return null
38169             }
38170             for (var i = top.getChildBoundables().iterator(); i.hasNext();) {
38171               var boundable = i.next();
38172               if (boundable instanceof AbstractNode) {
38173                 this$1.boundablesAtLevel(level$1, boundable, boundables$1);
38174               } else {
38175                 Assert.isTrue(boundable instanceof ItemBoundable);
38176                 if (level$1 === -1) {
38177                   boundables$1.add(boundable);
38178                 }
38179               }
38180             }
38181             return null
38182           }
38183         };
38184         AbstractSTRtree.prototype.query = function query () {
38185             var this$1 = this;
38186
38187           if (arguments.length === 1) {
38188             var searchBounds = arguments[0];
38189             this.build();
38190             var matches = new ArrayList();
38191             if (this.isEmpty()) {
38192               return matches
38193             }
38194             if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {
38195               this.query(searchBounds, this._root, matches);
38196             }
38197             return matches
38198           } else if (arguments.length === 2) {
38199             var searchBounds$1 = arguments[0];
38200             var visitor = arguments[1];
38201             this.build();
38202             if (this.isEmpty()) {
38203               return null
38204             }
38205             if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds$1)) {
38206               this.query(searchBounds$1, this._root, visitor);
38207             }
38208           } else if (arguments.length === 3) {
38209             if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
38210               var searchBounds$2 = arguments[0];
38211               var node = arguments[1];
38212               var visitor$1 = arguments[2];
38213               var childBoundables = node.getChildBoundables();
38214               for (var i = 0; i < childBoundables.size(); i++) {
38215                 var childBoundable = childBoundables.get(i);
38216                 if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$2)) {
38217                   continue
38218                 }
38219                 if (childBoundable instanceof AbstractNode) {
38220                   this$1.query(searchBounds$2, childBoundable, visitor$1);
38221                 } else if (childBoundable instanceof ItemBoundable) {
38222                   visitor$1.visitItem(childBoundable.getItem());
38223                 } else {
38224                   Assert.shouldNeverReachHere();
38225                 }
38226               }
38227             } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
38228               var searchBounds$3 = arguments[0];
38229               var node$1 = arguments[1];
38230               var matches$1 = arguments[2];
38231               var childBoundables$1 = node$1.getChildBoundables();
38232               for (var i$1 = 0; i$1 < childBoundables$1.size(); i$1++) {
38233                 var childBoundable$1 = childBoundables$1.get(i$1);
38234                 if (!this$1.getIntersectsOp().intersects(childBoundable$1.getBounds(), searchBounds$3)) {
38235                   continue
38236                 }
38237                 if (childBoundable$1 instanceof AbstractNode) {
38238                   this$1.query(searchBounds$3, childBoundable$1, matches$1);
38239                 } else if (childBoundable$1 instanceof ItemBoundable) {
38240                   matches$1.add(childBoundable$1.getItem());
38241                 } else {
38242                   Assert.shouldNeverReachHere();
38243                 }
38244               }
38245             }
38246           }
38247         };
38248         AbstractSTRtree.prototype.build = function build () {
38249           if (this._built) { return null }
38250           this._root = this._itemBoundables.isEmpty() ? this.createNode(0) : this.createHigherLevels(this._itemBoundables, -1);
38251           this._itemBoundables = null;
38252           this._built = true;
38253         };
38254         AbstractSTRtree.prototype.getRoot = function getRoot () {
38255           this.build();
38256           return this._root
38257         };
38258         AbstractSTRtree.prototype.remove = function remove () {
38259             var this$1 = this;
38260
38261           if (arguments.length === 2) {
38262             var searchBounds = arguments[0];
38263             var item = arguments[1];
38264             this.build();
38265             if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {
38266               return this.remove(searchBounds, this._root, item)
38267             }
38268             return false
38269           } else if (arguments.length === 3) {
38270             var searchBounds$1 = arguments[0];
38271             var node = arguments[1];
38272             var item$1 = arguments[2];
38273             var found = this.removeItem(node, item$1);
38274             if (found) { return true }
38275             var childToPrune = null;
38276             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
38277               var childBoundable = i.next();
38278               if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$1)) {
38279                 continue
38280               }
38281               if (childBoundable instanceof AbstractNode) {
38282                 found = this$1.remove(searchBounds$1, childBoundable, item$1);
38283                 if (found) {
38284                   childToPrune = childBoundable;
38285                   break
38286                 }
38287               }
38288             }
38289             if (childToPrune !== null) {
38290               if (childToPrune.getChildBoundables().isEmpty()) {
38291                 node.getChildBoundables().remove(childToPrune);
38292               }
38293             }
38294             return found
38295           }
38296         };
38297         AbstractSTRtree.prototype.createHigherLevels = function createHigherLevels (boundablesOfALevel, level) {
38298           Assert.isTrue(!boundablesOfALevel.isEmpty());
38299           var parentBoundables = this.createParentBoundables(boundablesOfALevel, level + 1);
38300           if (parentBoundables.size() === 1) {
38301             return parentBoundables.get(0)
38302           }
38303           return this.createHigherLevels(parentBoundables, level + 1)
38304         };
38305         AbstractSTRtree.prototype.depth = function depth () {
38306             var this$1 = this;
38307
38308           if (arguments.length === 0) {
38309             if (this.isEmpty()) {
38310               return 0
38311             }
38312             this.build();
38313             return this.depth(this._root)
38314           } else if (arguments.length === 1) {
38315             var node = arguments[0];
38316             var maxChildDepth = 0;
38317             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
38318               var childBoundable = i.next();
38319               if (childBoundable instanceof AbstractNode) {
38320                 var childDepth = this$1.depth(childBoundable);
38321                 if (childDepth > maxChildDepth) { maxChildDepth = childDepth; }
38322               }
38323             }
38324             return maxChildDepth + 1
38325           }
38326         };
38327         AbstractSTRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {
38328             var this$1 = this;
38329
38330           Assert.isTrue(!childBoundables.isEmpty());
38331           var parentBoundables = new ArrayList();
38332           parentBoundables.add(this.createNode(newLevel));
38333           var sortedChildBoundables = new ArrayList(childBoundables);
38334           Collections.sort(sortedChildBoundables, this.getComparator());
38335           for (var i = sortedChildBoundables.iterator(); i.hasNext();) {
38336             var childBoundable = i.next();
38337             if (this$1.lastNode(parentBoundables).getChildBoundables().size() === this$1.getNodeCapacity()) {
38338               parentBoundables.add(this$1.createNode(newLevel));
38339             }
38340             this$1.lastNode(parentBoundables).addChildBoundable(childBoundable);
38341           }
38342           return parentBoundables
38343         };
38344         AbstractSTRtree.prototype.isEmpty = function isEmpty () {
38345           if (!this._built) { return this._itemBoundables.isEmpty() }
38346           return this._root.isEmpty()
38347         };
38348         AbstractSTRtree.prototype.interfaces_ = function interfaces_ () {
38349           return [Serializable]
38350         };
38351         AbstractSTRtree.prototype.getClass = function getClass () {
38352           return AbstractSTRtree
38353         };
38354         AbstractSTRtree.compareDoubles = function compareDoubles (a, b) {
38355           return a > b ? 1 : a < b ? -1 : 0
38356         };
38357         staticAccessors$23.IntersectsOp.get = function () { return IntersectsOp };
38358         staticAccessors$23.serialVersionUID.get = function () { return -3886435814360241337 };
38359         staticAccessors$23.DEFAULT_NODE_CAPACITY.get = function () { return 10 };
38360
38361         Object.defineProperties( AbstractSTRtree, staticAccessors$23 );
38362
38363         var IntersectsOp = function IntersectsOp () {};
38364
38365         var ItemDistance = function ItemDistance () {};
38366
38367         ItemDistance.prototype.distance = function distance (item1, item2) {};
38368         ItemDistance.prototype.interfaces_ = function interfaces_ () {
38369           return []
38370         };
38371         ItemDistance.prototype.getClass = function getClass () {
38372           return ItemDistance
38373         };
38374
38375         var STRtree = (function (AbstractSTRtree$$1) {
38376           function STRtree (nodeCapacity) {
38377             nodeCapacity = nodeCapacity || STRtree.DEFAULT_NODE_CAPACITY;
38378             AbstractSTRtree$$1.call(this, nodeCapacity);
38379           }
38380
38381           if ( AbstractSTRtree$$1 ) { STRtree.__proto__ = AbstractSTRtree$$1; }
38382           STRtree.prototype = Object.create( AbstractSTRtree$$1 && AbstractSTRtree$$1.prototype );
38383           STRtree.prototype.constructor = STRtree;
38384
38385           var staticAccessors = { STRtreeNode: { configurable: true },serialVersionUID: { configurable: true },xComparator: { configurable: true },yComparator: { configurable: true },intersectsOp: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };
38386           STRtree.prototype.createParentBoundablesFromVerticalSlices = function createParentBoundablesFromVerticalSlices (verticalSlices, newLevel) {
38387             var this$1 = this;
38388
38389             Assert.isTrue(verticalSlices.length > 0);
38390             var parentBoundables = new ArrayList();
38391             for (var i = 0; i < verticalSlices.length; i++) {
38392               parentBoundables.addAll(this$1.createParentBoundablesFromVerticalSlice(verticalSlices[i], newLevel));
38393             }
38394             return parentBoundables
38395           };
38396           STRtree.prototype.createNode = function createNode (level) {
38397             return new STRtreeNode(level)
38398           };
38399           STRtree.prototype.size = function size () {
38400             if (arguments.length === 0) {
38401               return AbstractSTRtree$$1.prototype.size.call(this)
38402             } else { return AbstractSTRtree$$1.prototype.size.apply(this, arguments) }
38403           };
38404           STRtree.prototype.insert = function insert () {
38405             if (arguments.length === 2) {
38406               var itemEnv = arguments[0];
38407               var item = arguments[1];
38408               if (itemEnv.isNull()) {
38409                 return null
38410               }
38411               AbstractSTRtree$$1.prototype.insert.call(this, itemEnv, item);
38412             } else { return AbstractSTRtree$$1.prototype.insert.apply(this, arguments) }
38413           };
38414           STRtree.prototype.getIntersectsOp = function getIntersectsOp () {
38415             return STRtree.intersectsOp
38416           };
38417           STRtree.prototype.verticalSlices = function verticalSlices (childBoundables, sliceCount) {
38418             var sliceCapacity = Math.trunc(Math.ceil(childBoundables.size() / sliceCount));
38419             var slices = new Array(sliceCount).fill(null);
38420             var i = childBoundables.iterator();
38421             for (var j = 0; j < sliceCount; j++) {
38422               slices[j] = new ArrayList();
38423               var boundablesAddedToSlice = 0;
38424               while (i.hasNext() && boundablesAddedToSlice < sliceCapacity) {
38425                 var childBoundable = i.next();
38426                 slices[j].add(childBoundable);
38427                 boundablesAddedToSlice++;
38428               }
38429             }
38430             return slices
38431           };
38432           STRtree.prototype.query = function query () {
38433             if (arguments.length === 1) {
38434               var searchEnv = arguments[0];
38435               return AbstractSTRtree$$1.prototype.query.call(this, searchEnv)
38436             } else if (arguments.length === 2) {
38437               var searchEnv$1 = arguments[0];
38438               var visitor = arguments[1];
38439               AbstractSTRtree$$1.prototype.query.call(this, searchEnv$1, visitor);
38440             } else if (arguments.length === 3) {
38441               if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
38442                 var searchBounds = arguments[0];
38443                 var node = arguments[1];
38444                 var visitor$1 = arguments[2];
38445                 AbstractSTRtree$$1.prototype.query.call(this, searchBounds, node, visitor$1);
38446               } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
38447                 var searchBounds$1 = arguments[0];
38448                 var node$1 = arguments[1];
38449                 var matches = arguments[2];
38450                 AbstractSTRtree$$1.prototype.query.call(this, searchBounds$1, node$1, matches);
38451               }
38452             }
38453           };
38454           STRtree.prototype.getComparator = function getComparator () {
38455             return STRtree.yComparator
38456           };
38457           STRtree.prototype.createParentBoundablesFromVerticalSlice = function createParentBoundablesFromVerticalSlice (childBoundables, newLevel) {
38458             return AbstractSTRtree$$1.prototype.createParentBoundables.call(this, childBoundables, newLevel)
38459           };
38460           STRtree.prototype.remove = function remove () {
38461             if (arguments.length === 2) {
38462               var itemEnv = arguments[0];
38463               var item = arguments[1];
38464               return AbstractSTRtree$$1.prototype.remove.call(this, itemEnv, item)
38465             } else { return AbstractSTRtree$$1.prototype.remove.apply(this, arguments) }
38466           };
38467           STRtree.prototype.depth = function depth () {
38468             if (arguments.length === 0) {
38469               return AbstractSTRtree$$1.prototype.depth.call(this)
38470             } else { return AbstractSTRtree$$1.prototype.depth.apply(this, arguments) }
38471           };
38472           STRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {
38473             Assert.isTrue(!childBoundables.isEmpty());
38474             var minLeafCount = Math.trunc(Math.ceil(childBoundables.size() / this.getNodeCapacity()));
38475             var sortedChildBoundables = new ArrayList(childBoundables);
38476             Collections.sort(sortedChildBoundables, STRtree.xComparator);
38477             var verticalSlices = this.verticalSlices(sortedChildBoundables, Math.trunc(Math.ceil(Math.sqrt(minLeafCount))));
38478             return this.createParentBoundablesFromVerticalSlices(verticalSlices, newLevel)
38479           };
38480           STRtree.prototype.nearestNeighbour = function nearestNeighbour () {
38481             if (arguments.length === 1) {
38482               if (hasInterface(arguments[0], ItemDistance)) {
38483                 var itemDist = arguments[0];
38484                 var bp = new BoundablePair(this.getRoot(), this.getRoot(), itemDist);
38485                 return this.nearestNeighbour(bp)
38486               } else if (arguments[0] instanceof BoundablePair) {
38487                 var initBndPair = arguments[0];
38488                 return this.nearestNeighbour(initBndPair, Double.POSITIVE_INFINITY)
38489               }
38490             } else if (arguments.length === 2) {
38491               if (arguments[0] instanceof STRtree && hasInterface(arguments[1], ItemDistance)) {
38492                 var tree = arguments[0];
38493                 var itemDist$1 = arguments[1];
38494                 var bp$1 = new BoundablePair(this.getRoot(), tree.getRoot(), itemDist$1);
38495                 return this.nearestNeighbour(bp$1)
38496               } else if (arguments[0] instanceof BoundablePair && typeof arguments[1] === 'number') {
38497                 var initBndPair$1 = arguments[0];
38498                 var maxDistance = arguments[1];
38499                 var distanceLowerBound = maxDistance;
38500                 var minPair = null;
38501                 var priQ = new PriorityQueue();
38502                 priQ.add(initBndPair$1);
38503                 while (!priQ.isEmpty() && distanceLowerBound > 0.0) {
38504                   var bndPair = priQ.poll();
38505                   var currentDistance = bndPair.getDistance();
38506                   if (currentDistance >= distanceLowerBound) { break }
38507                   if (bndPair.isLeaves()) {
38508                     distanceLowerBound = currentDistance;
38509                     minPair = bndPair;
38510                   } else {
38511                     bndPair.expandToQueue(priQ, distanceLowerBound);
38512                   }
38513                 }
38514                 return [minPair.getBoundable(0).getItem(), minPair.getBoundable(1).getItem()]
38515               }
38516             } else if (arguments.length === 3) {
38517               var env = arguments[0];
38518               var item = arguments[1];
38519               var itemDist$2 = arguments[2];
38520               var bnd = new ItemBoundable(env, item);
38521               var bp$2 = new BoundablePair(this.getRoot(), bnd, itemDist$2);
38522               return this.nearestNeighbour(bp$2)[0]
38523             }
38524           };
38525           STRtree.prototype.interfaces_ = function interfaces_ () {
38526             return [SpatialIndex, Serializable]
38527           };
38528           STRtree.prototype.getClass = function getClass () {
38529             return STRtree
38530           };
38531           STRtree.centreX = function centreX (e) {
38532             return STRtree.avg(e.getMinX(), e.getMaxX())
38533           };
38534           STRtree.avg = function avg (a, b) {
38535             return (a + b) / 2
38536           };
38537           STRtree.centreY = function centreY (e) {
38538             return STRtree.avg(e.getMinY(), e.getMaxY())
38539           };
38540           staticAccessors.STRtreeNode.get = function () { return STRtreeNode };
38541           staticAccessors.serialVersionUID.get = function () { return 259274702368956900 };
38542           staticAccessors.xComparator.get = function () {
38543             return {
38544               interfaces_: function () {
38545                 return [Comparator]
38546               },
38547               compare: function (o1, o2) {
38548                 return AbstractSTRtree$$1.compareDoubles(STRtree.centreX(o1.getBounds()), STRtree.centreX(o2.getBounds()))
38549               }
38550             }
38551           };
38552           staticAccessors.yComparator.get = function () {
38553             return {
38554               interfaces_: function () {
38555                 return [Comparator]
38556               },
38557               compare: function (o1, o2) {
38558                 return AbstractSTRtree$$1.compareDoubles(STRtree.centreY(o1.getBounds()), STRtree.centreY(o2.getBounds()))
38559               }
38560             }
38561           };
38562           staticAccessors.intersectsOp.get = function () {
38563             return {
38564               interfaces_: function () {
38565                 return [AbstractSTRtree$$1.IntersectsOp]
38566               },
38567               intersects: function (aBounds, bBounds) {
38568                 return aBounds.intersects(bBounds)
38569               }
38570             }
38571           };
38572           staticAccessors.DEFAULT_NODE_CAPACITY.get = function () { return 10 };
38573
38574           Object.defineProperties( STRtree, staticAccessors );
38575
38576           return STRtree;
38577         }(AbstractSTRtree));
38578
38579         var STRtreeNode = (function (AbstractNode$$1) {
38580           function STRtreeNode () {
38581             var level = arguments[0];
38582             AbstractNode$$1.call(this, level);
38583           }
38584
38585           if ( AbstractNode$$1 ) { STRtreeNode.__proto__ = AbstractNode$$1; }
38586           STRtreeNode.prototype = Object.create( AbstractNode$$1 && AbstractNode$$1.prototype );
38587           STRtreeNode.prototype.constructor = STRtreeNode;
38588           STRtreeNode.prototype.computeBounds = function computeBounds () {
38589             var bounds = null;
38590             for (var i = this.getChildBoundables().iterator(); i.hasNext();) {
38591               var childBoundable = i.next();
38592               if (bounds === null) {
38593                 bounds = new Envelope(childBoundable.getBounds());
38594               } else {
38595                 bounds.expandToInclude(childBoundable.getBounds());
38596               }
38597             }
38598             return bounds
38599           };
38600           STRtreeNode.prototype.interfaces_ = function interfaces_ () {
38601             return []
38602           };
38603           STRtreeNode.prototype.getClass = function getClass () {
38604             return STRtreeNode
38605           };
38606
38607           return STRtreeNode;
38608         }(AbstractNode));
38609
38610         var SegmentPointComparator = function SegmentPointComparator () {};
38611
38612         SegmentPointComparator.prototype.interfaces_ = function interfaces_ () {
38613           return []
38614         };
38615         SegmentPointComparator.prototype.getClass = function getClass () {
38616           return SegmentPointComparator
38617         };
38618         SegmentPointComparator.relativeSign = function relativeSign (x0, x1) {
38619           if (x0 < x1) { return -1 }
38620           if (x0 > x1) { return 1 }
38621           return 0
38622         };
38623         SegmentPointComparator.compare = function compare (octant, p0, p1) {
38624           if (p0.equals2D(p1)) { return 0 }
38625           var xSign = SegmentPointComparator.relativeSign(p0.x, p1.x);
38626           var ySign = SegmentPointComparator.relativeSign(p0.y, p1.y);
38627           switch (octant) {
38628             case 0:
38629               return SegmentPointComparator.compareValue(xSign, ySign)
38630             case 1:
38631               return SegmentPointComparator.compareValue(ySign, xSign)
38632             case 2:
38633               return SegmentPointComparator.compareValue(ySign, -xSign)
38634             case 3:
38635               return SegmentPointComparator.compareValue(-xSign, ySign)
38636             case 4:
38637               return SegmentPointComparator.compareValue(-xSign, -ySign)
38638             case 5:
38639               return SegmentPointComparator.compareValue(-ySign, -xSign)
38640             case 6:
38641               return SegmentPointComparator.compareValue(-ySign, xSign)
38642             case 7:
38643               return SegmentPointComparator.compareValue(xSign, -ySign)
38644           }
38645           Assert.shouldNeverReachHere('invalid octant value');
38646           return 0
38647         };
38648         SegmentPointComparator.compareValue = function compareValue (compareSign0, compareSign1) {
38649           if (compareSign0 < 0) { return -1 }
38650           if (compareSign0 > 0) { return 1 }
38651           if (compareSign1 < 0) { return -1 }
38652           if (compareSign1 > 0) { return 1 }
38653           return 0
38654         };
38655
38656         var SegmentNode = function SegmentNode () {
38657           this._segString = null;
38658           this.coord = null;
38659           this.segmentIndex = null;
38660           this._segmentOctant = null;
38661           this._isInterior = null;
38662           var segString = arguments[0];
38663           var coord = arguments[1];
38664           var segmentIndex = arguments[2];
38665           var segmentOctant = arguments[3];
38666           this._segString = segString;
38667           this.coord = new Coordinate(coord);
38668           this.segmentIndex = segmentIndex;
38669           this._segmentOctant = segmentOctant;
38670           this._isInterior = !coord.equals2D(segString.getCoordinate(segmentIndex));
38671         };
38672         SegmentNode.prototype.getCoordinate = function getCoordinate () {
38673           return this.coord
38674         };
38675         SegmentNode.prototype.print = function print (out) {
38676           out.print(this.coord);
38677           out.print(' seg # = ' + this.segmentIndex);
38678         };
38679         SegmentNode.prototype.compareTo = function compareTo (obj) {
38680           var other = obj;
38681           if (this.segmentIndex < other.segmentIndex) { return -1 }
38682           if (this.segmentIndex > other.segmentIndex) { return 1 }
38683           if (this.coord.equals2D(other.coord)) { return 0 }
38684           return SegmentPointComparator.compare(this._segmentOctant, this.coord, other.coord)
38685         };
38686         SegmentNode.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {
38687           if (this.segmentIndex === 0 && !this._isInterior) { return true }
38688           if (this.segmentIndex === maxSegmentIndex) { return true }
38689           return false
38690         };
38691         SegmentNode.prototype.isInterior = function isInterior () {
38692           return this._isInterior
38693         };
38694         SegmentNode.prototype.interfaces_ = function interfaces_ () {
38695           return [Comparable]
38696         };
38697         SegmentNode.prototype.getClass = function getClass () {
38698           return SegmentNode
38699         };
38700
38701         // import Iterator from '../../../../java/util/Iterator'
38702         var SegmentNodeList = function SegmentNodeList () {
38703           this._nodeMap = new TreeMap();
38704           this._edge = null;
38705           var edge = arguments[0];
38706           this._edge = edge;
38707         };
38708         SegmentNodeList.prototype.getSplitCoordinates = function getSplitCoordinates () {
38709             var this$1 = this;
38710
38711           var coordList = new CoordinateList();
38712           this.addEndpoints();
38713           var it = this.iterator();
38714           var eiPrev = it.next();
38715           while (it.hasNext()) {
38716             var ei = it.next();
38717             this$1.addEdgeCoordinates(eiPrev, ei, coordList);
38718             eiPrev = ei;
38719           }
38720           return coordList.toCoordinateArray()
38721         };
38722         SegmentNodeList.prototype.addCollapsedNodes = function addCollapsedNodes () {
38723             var this$1 = this;
38724
38725           var collapsedVertexIndexes = new ArrayList();
38726           this.findCollapsesFromInsertedNodes(collapsedVertexIndexes);
38727           this.findCollapsesFromExistingVertices(collapsedVertexIndexes);
38728           for (var it = collapsedVertexIndexes.iterator(); it.hasNext();) {
38729             var vertexIndex = it.next().intValue();
38730             this$1.add(this$1._edge.getCoordinate(vertexIndex), vertexIndex);
38731           }
38732         };
38733         SegmentNodeList.prototype.print = function print (out) {
38734           out.println('Intersections:');
38735           for (var it = this.iterator(); it.hasNext();) {
38736             var ei = it.next();
38737             ei.print(out);
38738           }
38739         };
38740         SegmentNodeList.prototype.findCollapsesFromExistingVertices = function findCollapsesFromExistingVertices (collapsedVertexIndexes) {
38741             var this$1 = this;
38742
38743           for (var i = 0; i < this._edge.size() - 2; i++) {
38744             var p0 = this$1._edge.getCoordinate(i);
38745             // const p1 = this._edge.getCoordinate(i + 1)
38746             var p2 = this$1._edge.getCoordinate(i + 2);
38747             if (p0.equals2D(p2)) {
38748               collapsedVertexIndexes.add(new Integer(i + 1));
38749             }
38750           }
38751         };
38752         SegmentNodeList.prototype.addEdgeCoordinates = function addEdgeCoordinates (ei0, ei1, coordList) {
38753             var this$1 = this;
38754
38755           // let npts = ei1.segmentIndex - ei0.segmentIndex + 2
38756           var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);
38757           var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);
38758           // if (!useIntPt1) {
38759           // npts--
38760           // }
38761           // const ipt = 0
38762           coordList.add(new Coordinate(ei0.coord), false);
38763           for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
38764             coordList.add(this$1._edge.getCoordinate(i));
38765           }
38766           if (useIntPt1) {
38767             coordList.add(new Coordinate(ei1.coord));
38768           }
38769         };
38770         SegmentNodeList.prototype.iterator = function iterator () {
38771           return this._nodeMap.values().iterator()
38772         };
38773         SegmentNodeList.prototype.addSplitEdges = function addSplitEdges (edgeList) {
38774             var this$1 = this;
38775
38776           this.addEndpoints();
38777           this.addCollapsedNodes();
38778           var it = this.iterator();
38779           var eiPrev = it.next();
38780           while (it.hasNext()) {
38781             var ei = it.next();
38782             var newEdge = this$1.createSplitEdge(eiPrev, ei);
38783             edgeList.add(newEdge);
38784             eiPrev = ei;
38785           }
38786         };
38787         SegmentNodeList.prototype.findCollapseIndex = function findCollapseIndex (ei0, ei1, collapsedVertexIndex) {
38788           if (!ei0.coord.equals2D(ei1.coord)) { return false }
38789           var numVerticesBetween = ei1.segmentIndex - ei0.segmentIndex;
38790           if (!ei1.isInterior()) {
38791             numVerticesBetween--;
38792           }
38793           if (numVerticesBetween === 1) {
38794             collapsedVertexIndex[0] = ei0.segmentIndex + 1;
38795             return true
38796           }
38797           return false
38798         };
38799         SegmentNodeList.prototype.findCollapsesFromInsertedNodes = function findCollapsesFromInsertedNodes (collapsedVertexIndexes) {
38800             var this$1 = this;
38801
38802           var collapsedVertexIndex = new Array(1).fill(null);
38803           var it = this.iterator();
38804           var eiPrev = it.next();
38805           while (it.hasNext()) {
38806             var ei = it.next();
38807             var isCollapsed = this$1.findCollapseIndex(eiPrev, ei, collapsedVertexIndex);
38808             if (isCollapsed) { collapsedVertexIndexes.add(new Integer(collapsedVertexIndex[0])); }
38809             eiPrev = ei;
38810           }
38811         };
38812         SegmentNodeList.prototype.getEdge = function getEdge () {
38813           return this._edge
38814         };
38815         SegmentNodeList.prototype.addEndpoints = function addEndpoints () {
38816           var maxSegIndex = this._edge.size() - 1;
38817           this.add(this._edge.getCoordinate(0), 0);
38818           this.add(this._edge.getCoordinate(maxSegIndex), maxSegIndex);
38819         };
38820         SegmentNodeList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {
38821             var this$1 = this;
38822
38823           var npts = ei1.segmentIndex - ei0.segmentIndex + 2;
38824           var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);
38825           var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);
38826           if (!useIntPt1) {
38827             npts--;
38828           }
38829           var pts = new Array(npts).fill(null);
38830           var ipt = 0;
38831           pts[ipt++] = new Coordinate(ei0.coord);
38832           for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
38833             pts[ipt++] = this$1._edge.getCoordinate(i);
38834           }
38835           if (useIntPt1) { pts[ipt] = new Coordinate(ei1.coord); }
38836           return new NodedSegmentString(pts, this._edge.getData())
38837         };
38838         SegmentNodeList.prototype.add = function add (intPt, segmentIndex) {
38839           var eiNew = new SegmentNode(this._edge, intPt, segmentIndex, this._edge.getSegmentOctant(segmentIndex));
38840           var ei = this._nodeMap.get(eiNew);
38841           if (ei !== null) {
38842             Assert.isTrue(ei.coord.equals2D(intPt), 'Found equal nodes with different coordinates');
38843             return ei
38844           }
38845           this._nodeMap.put(eiNew, eiNew);
38846           return eiNew
38847         };
38848         SegmentNodeList.prototype.checkSplitEdgesCorrectness = function checkSplitEdgesCorrectness (splitEdges) {
38849           var edgePts = this._edge.getCoordinates();
38850           var split0 = splitEdges.get(0);
38851           var pt0 = split0.getCoordinate(0);
38852           if (!pt0.equals2D(edgePts[0])) { throw new RuntimeException('bad split edge start point at ' + pt0) }
38853           var splitn = splitEdges.get(splitEdges.size() - 1);
38854           var splitnPts = splitn.getCoordinates();
38855           var ptn = splitnPts[splitnPts.length - 1];
38856           if (!ptn.equals2D(edgePts[edgePts.length - 1])) { throw new RuntimeException('bad split edge end point at ' + ptn) }
38857         };
38858         SegmentNodeList.prototype.interfaces_ = function interfaces_ () {
38859           return []
38860         };
38861         SegmentNodeList.prototype.getClass = function getClass () {
38862           return SegmentNodeList
38863         };
38864
38865
38866
38867         // class NodeVertexIterator {
38868         //   constructor () {
38869         //     this._nodeList = null
38870         //     this._edge = null
38871         //     this._nodeIt = null
38872         //     this._currNode = null
38873         //     this._nextNode = null
38874         //     this._currSegIndex = 0
38875         //     let nodeList = arguments[0]
38876         //     this._nodeList = nodeList
38877         //     this._edge = nodeList.getEdge()
38878         //     this._nodeIt = nodeList.iterator()
38879         //     this.readNextNode()
38880         //   }
38881         //   next () {
38882         //     if (this._currNode === null) {
38883         //       this._currNode = this._nextNode
38884         //       this._currSegIndex = this._currNode.segmentIndex
38885         //       this.readNextNode()
38886         //       return this._currNode
38887         //     }
38888         //     if (this._nextNode === null) return null
38889         //     if (this._nextNode.segmentIndex === this._currNode.segmentIndex) {
38890         //       this._currNode = this._nextNode
38891         //       this._currSegIndex = this._currNode.segmentIndex
38892         //       this.readNextNode()
38893         //       return this._currNode
38894         //     }
38895         //     if (this._nextNode.segmentIndex > this._currNode.segmentIndex) {}
38896         //     return null
38897         //   }
38898         //   remove () {
38899         //     // throw new UnsupportedOperationException(this.getClass().getName())
38900         //   }
38901         //   hasNext () {
38902         //     if (this._nextNode === null) return false
38903         //     return true
38904         //   }
38905         //   readNextNode () {
38906         //     if (this._nodeIt.hasNext()) this._nextNode = this._nodeIt.next(); else this._nextNode = null
38907         //   }
38908         //   interfaces_ () {
38909         //     return [Iterator]
38910         //   }
38911         //   getClass () {
38912         //     return NodeVertexIterator
38913         //   }
38914         // }
38915
38916         var Octant = function Octant () {};
38917
38918         Octant.prototype.interfaces_ = function interfaces_ () {
38919           return []
38920         };
38921         Octant.prototype.getClass = function getClass () {
38922           return Octant
38923         };
38924         Octant.octant = function octant () {
38925           if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
38926             var dx = arguments[0];
38927             var dy = arguments[1];
38928             if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for point ( ' + dx + ', ' + dy + ' )') }
38929             var adx = Math.abs(dx);
38930             var ady = Math.abs(dy);
38931             if (dx >= 0) {
38932               if (dy >= 0) {
38933                 if (adx >= ady) { return 0; } else { return 1 }
38934               } else {
38935                 if (adx >= ady) { return 7; } else { return 6 }
38936               }
38937             } else {
38938               if (dy >= 0) {
38939                 if (adx >= ady) { return 3; } else { return 2 }
38940               } else {
38941                 if (adx >= ady) { return 4; } else { return 5 }
38942               }
38943             }
38944           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
38945             var p0 = arguments[0];
38946             var p1 = arguments[1];
38947             var dx$1 = p1.x - p0.x;
38948             var dy$1 = p1.y - p0.y;
38949             if (dx$1 === 0.0 && dy$1 === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for two identical points ' + p0) }
38950             return Octant.octant(dx$1, dy$1)
38951           }
38952         };
38953
38954         var SegmentString = function SegmentString () {};
38955
38956         SegmentString.prototype.getCoordinates = function getCoordinates () {};
38957         SegmentString.prototype.size = function size () {};
38958         SegmentString.prototype.getCoordinate = function getCoordinate (i) {};
38959         SegmentString.prototype.isClosed = function isClosed () {};
38960         SegmentString.prototype.setData = function setData (data) {};
38961         SegmentString.prototype.getData = function getData () {};
38962         SegmentString.prototype.interfaces_ = function interfaces_ () {
38963           return []
38964         };
38965         SegmentString.prototype.getClass = function getClass () {
38966           return SegmentString
38967         };
38968
38969         var NodableSegmentString = function NodableSegmentString () {};
38970
38971         NodableSegmentString.prototype.addIntersection = function addIntersection (intPt, segmentIndex) {};
38972         NodableSegmentString.prototype.interfaces_ = function interfaces_ () {
38973           return [SegmentString]
38974         };
38975         NodableSegmentString.prototype.getClass = function getClass () {
38976           return NodableSegmentString
38977         };
38978
38979         var NodedSegmentString = function NodedSegmentString () {
38980           this._nodeList = new SegmentNodeList(this);
38981           this._pts = null;
38982           this._data = null;
38983           var pts = arguments[0];
38984           var data = arguments[1];
38985           this._pts = pts;
38986           this._data = data;
38987         };
38988         NodedSegmentString.prototype.getCoordinates = function getCoordinates () {
38989           return this._pts
38990         };
38991         NodedSegmentString.prototype.size = function size () {
38992           return this._pts.length
38993         };
38994         NodedSegmentString.prototype.getCoordinate = function getCoordinate (i) {
38995           return this._pts[i]
38996         };
38997         NodedSegmentString.prototype.isClosed = function isClosed () {
38998           return this._pts[0].equals(this._pts[this._pts.length - 1])
38999         };
39000         NodedSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {
39001           if (index === this._pts.length - 1) { return -1 }
39002           return this.safeOctant(this.getCoordinate(index), this.getCoordinate(index + 1))
39003         };
39004         NodedSegmentString.prototype.setData = function setData (data) {
39005           this._data = data;
39006         };
39007         NodedSegmentString.prototype.safeOctant = function safeOctant (p0, p1) {
39008           if (p0.equals2D(p1)) { return 0 }
39009           return Octant.octant(p0, p1)
39010         };
39011         NodedSegmentString.prototype.getData = function getData () {
39012           return this._data
39013         };
39014         NodedSegmentString.prototype.addIntersection = function addIntersection () {
39015           if (arguments.length === 2) {
39016             var intPt$1 = arguments[0];
39017             var segmentIndex = arguments[1];
39018             this.addIntersectionNode(intPt$1, segmentIndex);
39019           } else if (arguments.length === 4) {
39020             var li = arguments[0];
39021             var segmentIndex$1 = arguments[1];
39022             // const geomIndex = arguments[2]
39023             var intIndex = arguments[3];
39024             var intPt = new Coordinate(li.getIntersection(intIndex));
39025             this.addIntersection(intPt, segmentIndex$1);
39026           }
39027         };
39028         NodedSegmentString.prototype.toString = function toString () {
39029           return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))
39030         };
39031         NodedSegmentString.prototype.getNodeList = function getNodeList () {
39032           return this._nodeList
39033         };
39034         NodedSegmentString.prototype.addIntersectionNode = function addIntersectionNode (intPt, segmentIndex) {
39035           var normalizedSegmentIndex = segmentIndex;
39036           var nextSegIndex = normalizedSegmentIndex + 1;
39037           if (nextSegIndex < this._pts.length) {
39038             var nextPt = this._pts[nextSegIndex];
39039             if (intPt.equals2D(nextPt)) {
39040               normalizedSegmentIndex = nextSegIndex;
39041             }
39042           }
39043           var ei = this._nodeList.add(intPt, normalizedSegmentIndex);
39044           return ei
39045         };
39046         NodedSegmentString.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {
39047             var this$1 = this;
39048
39049           for (var i = 0; i < li.getIntersectionNum(); i++) {
39050             this$1.addIntersection(li, segmentIndex, geomIndex, i);
39051           }
39052         };
39053         NodedSegmentString.prototype.interfaces_ = function interfaces_ () {
39054           return [NodableSegmentString]
39055         };
39056         NodedSegmentString.prototype.getClass = function getClass () {
39057           return NodedSegmentString
39058         };
39059         NodedSegmentString.getNodedSubstrings = function getNodedSubstrings () {
39060           if (arguments.length === 1) {
39061             var segStrings = arguments[0];
39062             var resultEdgelist = new ArrayList();
39063             NodedSegmentString.getNodedSubstrings(segStrings, resultEdgelist);
39064             return resultEdgelist
39065           } else if (arguments.length === 2) {
39066             var segStrings$1 = arguments[0];
39067             var resultEdgelist$1 = arguments[1];
39068             for (var i = segStrings$1.iterator(); i.hasNext();) {
39069               var ss = i.next();
39070               ss.getNodeList().addSplitEdges(resultEdgelist$1);
39071             }
39072           }
39073         };
39074
39075         var LineSegment = function LineSegment () {
39076           this.p0 = null;
39077           this.p1 = null;
39078           if (arguments.length === 0) {
39079             this.p0 = new Coordinate();
39080             this.p1 = new Coordinate();
39081           } else if (arguments.length === 1) {
39082             var ls = arguments[0];
39083             this.p0 = new Coordinate(ls.p0);
39084             this.p1 = new Coordinate(ls.p1);
39085           } else if (arguments.length === 2) {
39086             this.p0 = arguments[0];
39087             this.p1 = arguments[1];
39088           } else if (arguments.length === 4) {
39089             var x0 = arguments[0];
39090             var y0 = arguments[1];
39091             var x1 = arguments[2];
39092             var y1 = arguments[3];
39093             this.p0 = new Coordinate(x0, y0);
39094             this.p1 = new Coordinate(x1, y1);
39095           }
39096         };
39097
39098         var staticAccessors$24 = { serialVersionUID: { configurable: true } };
39099         LineSegment.prototype.minX = function minX () {
39100           return Math.min(this.p0.x, this.p1.x)
39101         };
39102         LineSegment.prototype.orientationIndex = function orientationIndex () {
39103           if (arguments[0] instanceof LineSegment) {
39104             var seg = arguments[0];
39105             var orient0 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p0);
39106             var orient1 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p1);
39107             if (orient0 >= 0 && orient1 >= 0) { return Math.max(orient0, orient1) }
39108             if (orient0 <= 0 && orient1 <= 0) { return Math.max(orient0, orient1) }
39109             return 0
39110           } else if (arguments[0] instanceof Coordinate) {
39111             var p = arguments[0];
39112             return CGAlgorithms.orientationIndex(this.p0, this.p1, p)
39113           }
39114         };
39115         LineSegment.prototype.toGeometry = function toGeometry (geomFactory) {
39116           return geomFactory.createLineString([this.p0, this.p1])
39117         };
39118         LineSegment.prototype.isVertical = function isVertical () {
39119           return this.p0.x === this.p1.x
39120         };
39121         LineSegment.prototype.equals = function equals (o) {
39122           if (!(o instanceof LineSegment)) {
39123             return false
39124           }
39125           var other = o;
39126           return this.p0.equals(other.p0) && this.p1.equals(other.p1)
39127         };
39128         LineSegment.prototype.intersection = function intersection (line) {
39129           var li = new RobustLineIntersector();
39130           li.computeIntersection(this.p0, this.p1, line.p0, line.p1);
39131           if (li.hasIntersection()) { return li.getIntersection(0) }
39132           return null
39133         };
39134         LineSegment.prototype.project = function project () {
39135           if (arguments[0] instanceof Coordinate) {
39136             var p = arguments[0];
39137             if (p.equals(this.p0) || p.equals(this.p1)) { return new Coordinate(p) }
39138             var r = this.projectionFactor(p);
39139             var coord = new Coordinate();
39140             coord.x = this.p0.x + r * (this.p1.x - this.p0.x);
39141             coord.y = this.p0.y + r * (this.p1.y - this.p0.y);
39142             return coord
39143           } else if (arguments[0] instanceof LineSegment) {
39144             var seg = arguments[0];
39145             var pf0 = this.projectionFactor(seg.p0);
39146             var pf1 = this.projectionFactor(seg.p1);
39147             if (pf0 >= 1.0 && pf1 >= 1.0) { return null }
39148             if (pf0 <= 0.0 && pf1 <= 0.0) { return null }
39149             var newp0 = this.project(seg.p0);
39150             if (pf0 < 0.0) { newp0 = this.p0; }
39151             if (pf0 > 1.0) { newp0 = this.p1; }
39152             var newp1 = this.project(seg.p1);
39153             if (pf1 < 0.0) { newp1 = this.p0; }
39154             if (pf1 > 1.0) { newp1 = this.p1; }
39155             return new LineSegment(newp0, newp1)
39156           }
39157         };
39158         LineSegment.prototype.normalize = function normalize () {
39159           if (this.p1.compareTo(this.p0) < 0) { this.reverse(); }
39160         };
39161         LineSegment.prototype.angle = function angle () {
39162           return Math.atan2(this.p1.y - this.p0.y, this.p1.x - this.p0.x)
39163         };
39164         LineSegment.prototype.getCoordinate = function getCoordinate (i) {
39165           if (i === 0) { return this.p0 }
39166           return this.p1
39167         };
39168         LineSegment.prototype.distancePerpendicular = function distancePerpendicular (p) {
39169           return CGAlgorithms.distancePointLinePerpendicular(p, this.p0, this.p1)
39170         };
39171         LineSegment.prototype.minY = function minY () {
39172           return Math.min(this.p0.y, this.p1.y)
39173         };
39174         LineSegment.prototype.midPoint = function midPoint () {
39175           return LineSegment.midPoint(this.p0, this.p1)
39176         };
39177         LineSegment.prototype.projectionFactor = function projectionFactor (p) {
39178           if (p.equals(this.p0)) { return 0.0 }
39179           if (p.equals(this.p1)) { return 1.0 }
39180           var dx = this.p1.x - this.p0.x;
39181           var dy = this.p1.y - this.p0.y;
39182           var len = dx * dx + dy * dy;
39183           if (len <= 0.0) { return Double.NaN }
39184           var r = ((p.x - this.p0.x) * dx + (p.y - this.p0.y) * dy) / len;
39185           return r
39186         };
39187         LineSegment.prototype.closestPoints = function closestPoints (line) {
39188           var intPt = this.intersection(line);
39189           if (intPt !== null) {
39190             return [intPt, intPt]
39191           }
39192           var closestPt = new Array(2).fill(null);
39193           var minDistance = Double.MAX_VALUE;
39194           var dist = null;
39195           var close00 = this.closestPoint(line.p0);
39196           minDistance = close00.distance(line.p0);
39197           closestPt[0] = close00;
39198           closestPt[1] = line.p0;
39199           var close01 = this.closestPoint(line.p1);
39200           dist = close01.distance(line.p1);
39201           if (dist < minDistance) {
39202             minDistance = dist;
39203             closestPt[0] = close01;
39204             closestPt[1] = line.p1;
39205           }
39206           var close10 = line.closestPoint(this.p0);
39207           dist = close10.distance(this.p0);
39208           if (dist < minDistance) {
39209             minDistance = dist;
39210             closestPt[0] = this.p0;
39211             closestPt[1] = close10;
39212           }
39213           var close11 = line.closestPoint(this.p1);
39214           dist = close11.distance(this.p1);
39215           if (dist < minDistance) {
39216             minDistance = dist;
39217             closestPt[0] = this.p1;
39218             closestPt[1] = close11;
39219           }
39220           return closestPt
39221         };
39222         LineSegment.prototype.closestPoint = function closestPoint (p) {
39223           var factor = this.projectionFactor(p);
39224           if (factor > 0 && factor < 1) {
39225             return this.project(p)
39226           }
39227           var dist0 = this.p0.distance(p);
39228           var dist1 = this.p1.distance(p);
39229           if (dist0 < dist1) { return this.p0 }
39230           return this.p1
39231         };
39232         LineSegment.prototype.maxX = function maxX () {
39233           return Math.max(this.p0.x, this.p1.x)
39234         };
39235         LineSegment.prototype.getLength = function getLength () {
39236           return this.p0.distance(this.p1)
39237         };
39238         LineSegment.prototype.compareTo = function compareTo (o) {
39239           var other = o;
39240           var comp0 = this.p0.compareTo(other.p0);
39241           if (comp0 !== 0) { return comp0 }
39242           return this.p1.compareTo(other.p1)
39243         };
39244         LineSegment.prototype.reverse = function reverse () {
39245           var temp = this.p0;
39246           this.p0 = this.p1;
39247           this.p1 = temp;
39248         };
39249         LineSegment.prototype.equalsTopo = function equalsTopo (other) {
39250           return this.p0.equals(other.p0) &&
39251                 (this.p1.equals(other.p1) || this.p0.equals(other.p1)) &&
39252                  this.p1.equals(other.p0)
39253         };
39254         LineSegment.prototype.lineIntersection = function lineIntersection (line) {
39255           try {
39256             var intPt = HCoordinate.intersection(this.p0, this.p1, line.p0, line.p1);
39257             return intPt
39258           } catch (ex) {
39259             if (ex instanceof NotRepresentableException) ; else { throw ex }
39260           } finally {}
39261           return null
39262         };
39263         LineSegment.prototype.maxY = function maxY () {
39264           return Math.max(this.p0.y, this.p1.y)
39265         };
39266         LineSegment.prototype.pointAlongOffset = function pointAlongOffset (segmentLengthFraction, offsetDistance) {
39267           var segx = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);
39268           var segy = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);
39269           var dx = this.p1.x - this.p0.x;
39270           var dy = this.p1.y - this.p0.y;
39271           var len = Math.sqrt(dx * dx + dy * dy);
39272           var ux = 0.0;
39273           var uy = 0.0;
39274           if (offsetDistance !== 0.0) {
39275             if (len <= 0.0) { throw new Error('Cannot compute offset from zero-length line segment') }
39276             ux = offsetDistance * dx / len;
39277             uy = offsetDistance * dy / len;
39278           }
39279           var offsetx = segx - uy;
39280           var offsety = segy + ux;
39281           var coord = new Coordinate(offsetx, offsety);
39282           return coord
39283         };
39284         LineSegment.prototype.setCoordinates = function setCoordinates () {
39285           if (arguments.length === 1) {
39286             var ls = arguments[0];
39287             this.setCoordinates(ls.p0, ls.p1);
39288           } else if (arguments.length === 2) {
39289             var p0 = arguments[0];
39290             var p1 = arguments[1];
39291             this.p0.x = p0.x;
39292             this.p0.y = p0.y;
39293             this.p1.x = p1.x;
39294             this.p1.y = p1.y;
39295           }
39296         };
39297         LineSegment.prototype.segmentFraction = function segmentFraction (inputPt) {
39298           var segFrac = this.projectionFactor(inputPt);
39299           if (segFrac < 0.0) { segFrac = 0.0; } else if (segFrac > 1.0 || Double.isNaN(segFrac)) { segFrac = 1.0; }
39300           return segFrac
39301         };
39302         LineSegment.prototype.toString = function toString () {
39303           return 'LINESTRING( ' + this.p0.x + ' ' + this.p0.y + ', ' + this.p1.x + ' ' + this.p1.y + ')'
39304         };
39305         LineSegment.prototype.isHorizontal = function isHorizontal () {
39306           return this.p0.y === this.p1.y
39307         };
39308         LineSegment.prototype.distance = function distance () {
39309           if (arguments[0] instanceof LineSegment) {
39310             var ls = arguments[0];
39311             return CGAlgorithms.distanceLineLine(this.p0, this.p1, ls.p0, ls.p1)
39312           } else if (arguments[0] instanceof Coordinate) {
39313             var p = arguments[0];
39314             return CGAlgorithms.distancePointLine(p, this.p0, this.p1)
39315           }
39316         };
39317         LineSegment.prototype.pointAlong = function pointAlong (segmentLengthFraction) {
39318           var coord = new Coordinate();
39319           coord.x = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);
39320           coord.y = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);
39321           return coord
39322         };
39323         LineSegment.prototype.hashCode = function hashCode () {
39324           var bits0 = Double.doubleToLongBits(this.p0.x);
39325           bits0 ^= Double.doubleToLongBits(this.p0.y) * 31;
39326           var hash0 = Math.trunc(bits0) ^ Math.trunc(bits0 >> 32);
39327           var bits1 = Double.doubleToLongBits(this.p1.x);
39328           bits1 ^= Double.doubleToLongBits(this.p1.y) * 31;
39329           var hash1 = Math.trunc(bits1) ^ Math.trunc(bits1 >> 32);
39330           return hash0 ^ hash1
39331         };
39332         LineSegment.prototype.interfaces_ = function interfaces_ () {
39333           return [Comparable, Serializable]
39334         };
39335         LineSegment.prototype.getClass = function getClass () {
39336           return LineSegment
39337         };
39338         LineSegment.midPoint = function midPoint (p0, p1) {
39339           return new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2)
39340         };
39341         staticAccessors$24.serialVersionUID.get = function () { return 3252005833466256227 };
39342
39343         Object.defineProperties( LineSegment, staticAccessors$24 );
39344
39345         var MonotoneChainOverlapAction = function MonotoneChainOverlapAction () {
39346           this.tempEnv1 = new Envelope();
39347           this.tempEnv2 = new Envelope();
39348           this._overlapSeg1 = new LineSegment();
39349           this._overlapSeg2 = new LineSegment();
39350         };
39351         MonotoneChainOverlapAction.prototype.overlap = function overlap () {
39352           if (arguments.length === 2) ; else if (arguments.length === 4) {
39353             var mc1 = arguments[0];
39354             var start1 = arguments[1];
39355             var mc2 = arguments[2];
39356             var start2 = arguments[3];
39357             mc1.getLineSegment(start1, this._overlapSeg1);
39358             mc2.getLineSegment(start2, this._overlapSeg2);
39359             this.overlap(this._overlapSeg1, this._overlapSeg2);
39360           }
39361         };
39362         MonotoneChainOverlapAction.prototype.interfaces_ = function interfaces_ () {
39363           return []
39364         };
39365         MonotoneChainOverlapAction.prototype.getClass = function getClass () {
39366           return MonotoneChainOverlapAction
39367         };
39368
39369         var MonotoneChain = function MonotoneChain () {
39370           this._pts = null;
39371           this._start = null;
39372           this._end = null;
39373           this._env = null;
39374           this._context = null;
39375           this._id = null;
39376           var pts = arguments[0];
39377           var start = arguments[1];
39378           var end = arguments[2];
39379           var context = arguments[3];
39380           this._pts = pts;
39381           this._start = start;
39382           this._end = end;
39383           this._context = context;
39384         };
39385         MonotoneChain.prototype.getLineSegment = function getLineSegment (index, ls) {
39386           ls.p0 = this._pts[index];
39387           ls.p1 = this._pts[index + 1];
39388         };
39389         MonotoneChain.prototype.computeSelect = function computeSelect (searchEnv, start0, end0, mcs) {
39390           var p0 = this._pts[start0];
39391           var p1 = this._pts[end0];
39392           mcs.tempEnv1.init(p0, p1);
39393           if (end0 - start0 === 1) {
39394             mcs.select(this, start0);
39395             return null
39396           }
39397           if (!searchEnv.intersects(mcs.tempEnv1)) { return null }
39398           var mid = Math.trunc((start0 + end0) / 2);
39399           if (start0 < mid) {
39400             this.computeSelect(searchEnv, start0, mid, mcs);
39401           }
39402           if (mid < end0) {
39403             this.computeSelect(searchEnv, mid, end0, mcs);
39404           }
39405         };
39406         MonotoneChain.prototype.getCoordinates = function getCoordinates () {
39407             var this$1 = this;
39408
39409           var coord = new Array(this._end - this._start + 1).fill(null);
39410           var index = 0;
39411           for (var i = this._start; i <= this._end; i++) {
39412             coord[index++] = this$1._pts[i];
39413           }
39414           return coord
39415         };
39416         MonotoneChain.prototype.computeOverlaps = function computeOverlaps (mc, mco) {
39417           this.computeOverlapsInternal(this._start, this._end, mc, mc._start, mc._end, mco);
39418         };
39419         MonotoneChain.prototype.setId = function setId (id) {
39420           this._id = id;
39421         };
39422         MonotoneChain.prototype.select = function select (searchEnv, mcs) {
39423           this.computeSelect(searchEnv, this._start, this._end, mcs);
39424         };
39425         MonotoneChain.prototype.getEnvelope = function getEnvelope () {
39426           if (this._env === null) {
39427             var p0 = this._pts[this._start];
39428             var p1 = this._pts[this._end];
39429             this._env = new Envelope(p0, p1);
39430           }
39431           return this._env
39432         };
39433         MonotoneChain.prototype.getEndIndex = function getEndIndex () {
39434           return this._end
39435         };
39436         MonotoneChain.prototype.getStartIndex = function getStartIndex () {
39437           return this._start
39438         };
39439         MonotoneChain.prototype.getContext = function getContext () {
39440           return this._context
39441         };
39442         MonotoneChain.prototype.getId = function getId () {
39443           return this._id
39444         };
39445         MonotoneChain.prototype.computeOverlapsInternal = function computeOverlapsInternal (start0, end0, mc, start1, end1, mco) {
39446           var p00 = this._pts[start0];
39447           var p01 = this._pts[end0];
39448           var p10 = mc._pts[start1];
39449           var p11 = mc._pts[end1];
39450           if (end0 - start0 === 1 && end1 - start1 === 1) {
39451             mco.overlap(this, start0, mc, start1);
39452             return null
39453           }
39454           mco.tempEnv1.init(p00, p01);
39455           mco.tempEnv2.init(p10, p11);
39456           if (!mco.tempEnv1.intersects(mco.tempEnv2)) { return null }
39457           var mid0 = Math.trunc((start0 + end0) / 2);
39458           var mid1 = Math.trunc((start1 + end1) / 2);
39459           if (start0 < mid0) {
39460             if (start1 < mid1) { this.computeOverlapsInternal(start0, mid0, mc, start1, mid1, mco); }
39461             if (mid1 < end1) { this.computeOverlapsInternal(start0, mid0, mc, mid1, end1, mco); }
39462           }
39463           if (mid0 < end0) {
39464             if (start1 < mid1) { this.computeOverlapsInternal(mid0, end0, mc, start1, mid1, mco); }
39465             if (mid1 < end1) { this.computeOverlapsInternal(mid0, end0, mc, mid1, end1, mco); }
39466           }
39467         };
39468         MonotoneChain.prototype.interfaces_ = function interfaces_ () {
39469           return []
39470         };
39471         MonotoneChain.prototype.getClass = function getClass () {
39472           return MonotoneChain
39473         };
39474
39475         var MonotoneChainBuilder = function MonotoneChainBuilder () {};
39476
39477         MonotoneChainBuilder.prototype.interfaces_ = function interfaces_ () {
39478           return []
39479         };
39480         MonotoneChainBuilder.prototype.getClass = function getClass () {
39481           return MonotoneChainBuilder
39482         };
39483         MonotoneChainBuilder.getChainStartIndices = function getChainStartIndices (pts) {
39484           var start = 0;
39485           var startIndexList = new ArrayList();
39486           startIndexList.add(new Integer(start));
39487           do {
39488             var last = MonotoneChainBuilder.findChainEnd(pts, start);
39489             startIndexList.add(new Integer(last));
39490             start = last;
39491           } while (start < pts.length - 1)
39492           var startIndex = MonotoneChainBuilder.toIntArray(startIndexList);
39493           return startIndex
39494         };
39495         MonotoneChainBuilder.findChainEnd = function findChainEnd (pts, start) {
39496           var safeStart = start;
39497           while (safeStart < pts.length - 1 && pts[safeStart].equals2D(pts[safeStart + 1])) {
39498             safeStart++;
39499           }
39500           if (safeStart >= pts.length - 1) {
39501             return pts.length - 1
39502           }
39503           var chainQuad = Quadrant.quadrant(pts[safeStart], pts[safeStart + 1]);
39504           var last = start + 1;
39505           while (last < pts.length) {
39506             if (!pts[last - 1].equals2D(pts[last])) {
39507               var quad = Quadrant.quadrant(pts[last - 1], pts[last]);
39508               if (quad !== chainQuad) { break }
39509             }
39510             last++;
39511           }
39512           return last - 1
39513         };
39514         MonotoneChainBuilder.getChains = function getChains () {
39515           if (arguments.length === 1) {
39516             var pts = arguments[0];
39517             return MonotoneChainBuilder.getChains(pts, null)
39518           } else if (arguments.length === 2) {
39519             var pts$1 = arguments[0];
39520             var context = arguments[1];
39521             var mcList = new ArrayList();
39522             var startIndex = MonotoneChainBuilder.getChainStartIndices(pts$1);
39523             for (var i = 0; i < startIndex.length - 1; i++) {
39524               var mc = new MonotoneChain(pts$1, startIndex[i], startIndex[i + 1], context);
39525               mcList.add(mc);
39526             }
39527             return mcList
39528           }
39529         };
39530         MonotoneChainBuilder.toIntArray = function toIntArray (list) {
39531           var array = new Array(list.size()).fill(null);
39532           for (var i = 0; i < array.length; i++) {
39533             array[i] = list.get(i).intValue();
39534           }
39535           return array
39536         };
39537
39538         var Noder = function Noder () {};
39539
39540         Noder.prototype.computeNodes = function computeNodes (segStrings) {};
39541         Noder.prototype.getNodedSubstrings = function getNodedSubstrings () {};
39542         Noder.prototype.interfaces_ = function interfaces_ () {
39543           return []
39544         };
39545         Noder.prototype.getClass = function getClass () {
39546           return Noder
39547         };
39548
39549         var SinglePassNoder = function SinglePassNoder () {
39550           this._segInt = null;
39551           if (arguments.length === 0) ; else if (arguments.length === 1) {
39552             var segInt = arguments[0];
39553             this.setSegmentIntersector(segInt);
39554           }
39555         };
39556         SinglePassNoder.prototype.setSegmentIntersector = function setSegmentIntersector (segInt) {
39557           this._segInt = segInt;
39558         };
39559         SinglePassNoder.prototype.interfaces_ = function interfaces_ () {
39560           return [Noder]
39561         };
39562         SinglePassNoder.prototype.getClass = function getClass () {
39563           return SinglePassNoder
39564         };
39565
39566         var MCIndexNoder = (function (SinglePassNoder$$1) {
39567           function MCIndexNoder (si) {
39568             if (si) { SinglePassNoder$$1.call(this, si); }
39569             else { SinglePassNoder$$1.call(this); }
39570             this._monoChains = new ArrayList();
39571             this._index = new STRtree();
39572             this._idCounter = 0;
39573             this._nodedSegStrings = null;
39574             this._nOverlaps = 0;
39575           }
39576
39577           if ( SinglePassNoder$$1 ) { MCIndexNoder.__proto__ = SinglePassNoder$$1; }
39578           MCIndexNoder.prototype = Object.create( SinglePassNoder$$1 && SinglePassNoder$$1.prototype );
39579           MCIndexNoder.prototype.constructor = MCIndexNoder;
39580
39581           var staticAccessors = { SegmentOverlapAction: { configurable: true } };
39582           MCIndexNoder.prototype.getMonotoneChains = function getMonotoneChains () {
39583             return this._monoChains
39584           };
39585           MCIndexNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {
39586             return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)
39587           };
39588           MCIndexNoder.prototype.getIndex = function getIndex () {
39589             return this._index
39590           };
39591           MCIndexNoder.prototype.add = function add (segStr) {
39592             var this$1 = this;
39593
39594             var segChains = MonotoneChainBuilder.getChains(segStr.getCoordinates(), segStr);
39595             for (var i = segChains.iterator(); i.hasNext();) {
39596               var mc = i.next();
39597               mc.setId(this$1._idCounter++);
39598               this$1._index.insert(mc.getEnvelope(), mc);
39599               this$1._monoChains.add(mc);
39600             }
39601           };
39602           MCIndexNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {
39603             var this$1 = this;
39604
39605             this._nodedSegStrings = inputSegStrings;
39606             for (var i = inputSegStrings.iterator(); i.hasNext();) {
39607               this$1.add(i.next());
39608             }
39609             this.intersectChains();
39610           };
39611           MCIndexNoder.prototype.intersectChains = function intersectChains () {
39612             var this$1 = this;
39613
39614             var overlapAction = new SegmentOverlapAction(this._segInt);
39615             for (var i = this._monoChains.iterator(); i.hasNext();) {
39616               var queryChain = i.next();
39617               var overlapChains = this$1._index.query(queryChain.getEnvelope());
39618               for (var j = overlapChains.iterator(); j.hasNext();) {
39619                 var testChain = j.next();
39620                 if (testChain.getId() > queryChain.getId()) {
39621                   queryChain.computeOverlaps(testChain, overlapAction);
39622                   this$1._nOverlaps++;
39623                 }
39624                 if (this$1._segInt.isDone()) { return null }
39625               }
39626             }
39627           };
39628           MCIndexNoder.prototype.interfaces_ = function interfaces_ () {
39629             return []
39630           };
39631           MCIndexNoder.prototype.getClass = function getClass () {
39632             return MCIndexNoder
39633           };
39634           staticAccessors.SegmentOverlapAction.get = function () { return SegmentOverlapAction };
39635
39636           Object.defineProperties( MCIndexNoder, staticAccessors );
39637
39638           return MCIndexNoder;
39639         }(SinglePassNoder));
39640
39641         var SegmentOverlapAction = (function (MonotoneChainOverlapAction$$1) {
39642           function SegmentOverlapAction () {
39643             MonotoneChainOverlapAction$$1.call(this);
39644             this._si = null;
39645             var si = arguments[0];
39646             this._si = si;
39647           }
39648
39649           if ( MonotoneChainOverlapAction$$1 ) { SegmentOverlapAction.__proto__ = MonotoneChainOverlapAction$$1; }
39650           SegmentOverlapAction.prototype = Object.create( MonotoneChainOverlapAction$$1 && MonotoneChainOverlapAction$$1.prototype );
39651           SegmentOverlapAction.prototype.constructor = SegmentOverlapAction;
39652           SegmentOverlapAction.prototype.overlap = function overlap () {
39653             if (arguments.length === 4) {
39654               var mc1 = arguments[0];
39655               var start1 = arguments[1];
39656               var mc2 = arguments[2];
39657               var start2 = arguments[3];
39658               var ss1 = mc1.getContext();
39659               var ss2 = mc2.getContext();
39660               this._si.processIntersections(ss1, start1, ss2, start2);
39661             } else { return MonotoneChainOverlapAction$$1.prototype.overlap.apply(this, arguments) }
39662           };
39663           SegmentOverlapAction.prototype.interfaces_ = function interfaces_ () {
39664             return []
39665           };
39666           SegmentOverlapAction.prototype.getClass = function getClass () {
39667             return SegmentOverlapAction
39668           };
39669
39670           return SegmentOverlapAction;
39671         }(MonotoneChainOverlapAction));
39672
39673         var BufferParameters = function BufferParameters () {
39674           this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;
39675           this._endCapStyle = BufferParameters.CAP_ROUND;
39676           this._joinStyle = BufferParameters.JOIN_ROUND;
39677           this._mitreLimit = BufferParameters.DEFAULT_MITRE_LIMIT;
39678           this._isSingleSided = false;
39679           this._simplifyFactor = BufferParameters.DEFAULT_SIMPLIFY_FACTOR;
39680
39681           if (arguments.length === 0) ; else if (arguments.length === 1) {
39682             var quadrantSegments = arguments[0];
39683             this.setQuadrantSegments(quadrantSegments);
39684           } else if (arguments.length === 2) {
39685             var quadrantSegments$1 = arguments[0];
39686             var endCapStyle = arguments[1];
39687             this.setQuadrantSegments(quadrantSegments$1);
39688             this.setEndCapStyle(endCapStyle);
39689           } else if (arguments.length === 4) {
39690             var quadrantSegments$2 = arguments[0];
39691             var endCapStyle$1 = arguments[1];
39692             var joinStyle = arguments[2];
39693             var mitreLimit = arguments[3];
39694             this.setQuadrantSegments(quadrantSegments$2);
39695             this.setEndCapStyle(endCapStyle$1);
39696             this.setJoinStyle(joinStyle);
39697             this.setMitreLimit(mitreLimit);
39698           }
39699         };
39700
39701         var staticAccessors$25 = { CAP_ROUND: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },JOIN_ROUND: { configurable: true },JOIN_MITRE: { configurable: true },JOIN_BEVEL: { configurable: true },DEFAULT_QUADRANT_SEGMENTS: { configurable: true },DEFAULT_MITRE_LIMIT: { configurable: true },DEFAULT_SIMPLIFY_FACTOR: { configurable: true } };
39702         BufferParameters.prototype.getEndCapStyle = function getEndCapStyle () {
39703           return this._endCapStyle
39704         };
39705         BufferParameters.prototype.isSingleSided = function isSingleSided () {
39706           return this._isSingleSided
39707         };
39708         BufferParameters.prototype.setQuadrantSegments = function setQuadrantSegments (quadSegs) {
39709           this._quadrantSegments = quadSegs;
39710           if (this._quadrantSegments === 0) { this._joinStyle = BufferParameters.JOIN_BEVEL; }
39711           if (this._quadrantSegments < 0) {
39712             this._joinStyle = BufferParameters.JOIN_MITRE;
39713             this._mitreLimit = Math.abs(this._quadrantSegments);
39714           }
39715           if (quadSegs <= 0) {
39716             this._quadrantSegments = 1;
39717           }
39718           if (this._joinStyle !== BufferParameters.JOIN_ROUND) {
39719             this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;
39720           }
39721         };
39722         BufferParameters.prototype.getJoinStyle = function getJoinStyle () {
39723           return this._joinStyle
39724         };
39725         BufferParameters.prototype.setJoinStyle = function setJoinStyle (joinStyle) {
39726           this._joinStyle = joinStyle;
39727         };
39728         BufferParameters.prototype.setSimplifyFactor = function setSimplifyFactor (simplifyFactor) {
39729           this._simplifyFactor = simplifyFactor < 0 ? 0 : simplifyFactor;
39730         };
39731         BufferParameters.prototype.getSimplifyFactor = function getSimplifyFactor () {
39732           return this._simplifyFactor
39733         };
39734         BufferParameters.prototype.getQuadrantSegments = function getQuadrantSegments () {
39735           return this._quadrantSegments
39736         };
39737         BufferParameters.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {
39738           this._endCapStyle = endCapStyle;
39739         };
39740         BufferParameters.prototype.getMitreLimit = function getMitreLimit () {
39741           return this._mitreLimit
39742         };
39743         BufferParameters.prototype.setMitreLimit = function setMitreLimit (mitreLimit) {
39744           this._mitreLimit = mitreLimit;
39745         };
39746         BufferParameters.prototype.setSingleSided = function setSingleSided (isSingleSided) {
39747           this._isSingleSided = isSingleSided;
39748         };
39749         BufferParameters.prototype.interfaces_ = function interfaces_ () {
39750           return []
39751         };
39752         BufferParameters.prototype.getClass = function getClass () {
39753           return BufferParameters
39754         };
39755         BufferParameters.bufferDistanceError = function bufferDistanceError (quadSegs) {
39756           var alpha = Math.PI / 2.0 / quadSegs;
39757           return 1 - Math.cos(alpha / 2.0)
39758         };
39759         staticAccessors$25.CAP_ROUND.get = function () { return 1 };
39760         staticAccessors$25.CAP_FLAT.get = function () { return 2 };
39761         staticAccessors$25.CAP_SQUARE.get = function () { return 3 };
39762         staticAccessors$25.JOIN_ROUND.get = function () { return 1 };
39763         staticAccessors$25.JOIN_MITRE.get = function () { return 2 };
39764         staticAccessors$25.JOIN_BEVEL.get = function () { return 3 };
39765         staticAccessors$25.DEFAULT_QUADRANT_SEGMENTS.get = function () { return 8 };
39766         staticAccessors$25.DEFAULT_MITRE_LIMIT.get = function () { return 5.0 };
39767         staticAccessors$25.DEFAULT_SIMPLIFY_FACTOR.get = function () { return 0.01 };
39768
39769         Object.defineProperties( BufferParameters, staticAccessors$25 );
39770
39771         var BufferInputLineSimplifier = function BufferInputLineSimplifier (inputLine) {
39772           this._distanceTol = null;
39773           this._isDeleted = null;
39774           this._angleOrientation = CGAlgorithms.COUNTERCLOCKWISE;
39775           this._inputLine = inputLine || null;
39776         };
39777
39778         var staticAccessors$26 = { INIT: { configurable: true },DELETE: { configurable: true },KEEP: { configurable: true },NUM_PTS_TO_CHECK: { configurable: true } };
39779         BufferInputLineSimplifier.prototype.isDeletable = function isDeletable (i0, i1, i2, distanceTol) {
39780           var p0 = this._inputLine[i0];
39781           var p1 = this._inputLine[i1];
39782           var p2 = this._inputLine[i2];
39783           if (!this.isConcave(p0, p1, p2)) { return false }
39784           if (!this.isShallow(p0, p1, p2, distanceTol)) { return false }
39785           return this.isShallowSampled(p0, p1, i0, i2, distanceTol)
39786         };
39787         BufferInputLineSimplifier.prototype.deleteShallowConcavities = function deleteShallowConcavities () {
39788             var this$1 = this;
39789
39790           var index = 1;
39791           // const maxIndex = this._inputLine.length - 1
39792           var midIndex = this.findNextNonDeletedIndex(index);
39793           var lastIndex = this.findNextNonDeletedIndex(midIndex);
39794           var isChanged = false;
39795           while (lastIndex < this._inputLine.length) {
39796             var isMiddleVertexDeleted = false;
39797             if (this$1.isDeletable(index, midIndex, lastIndex, this$1._distanceTol)) {
39798               this$1._isDeleted[midIndex] = BufferInputLineSimplifier.DELETE;
39799               isMiddleVertexDeleted = true;
39800               isChanged = true;
39801             }
39802             if (isMiddleVertexDeleted) { index = lastIndex; } else { index = midIndex; }
39803             midIndex = this$1.findNextNonDeletedIndex(index);
39804             lastIndex = this$1.findNextNonDeletedIndex(midIndex);
39805           }
39806           return isChanged
39807         };
39808         BufferInputLineSimplifier.prototype.isShallowConcavity = function isShallowConcavity (p0, p1, p2, distanceTol) {
39809           var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);
39810           var isAngleToSimplify = orientation === this._angleOrientation;
39811           if (!isAngleToSimplify) { return false }
39812           var dist = CGAlgorithms.distancePointLine(p1, p0, p2);
39813           return dist < distanceTol
39814         };
39815         BufferInputLineSimplifier.prototype.isShallowSampled = function isShallowSampled (p0, p2, i0, i2, distanceTol) {
39816             var this$1 = this;
39817
39818           var inc = Math.trunc((i2 - i0) / BufferInputLineSimplifier.NUM_PTS_TO_CHECK);
39819           if (inc <= 0) { inc = 1; }
39820           for (var i = i0; i < i2; i += inc) {
39821             if (!this$1.isShallow(p0, p2, this$1._inputLine[i], distanceTol)) { return false }
39822           }
39823           return true
39824         };
39825         BufferInputLineSimplifier.prototype.isConcave = function isConcave (p0, p1, p2) {
39826           var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);
39827           var isConcave = orientation === this._angleOrientation;
39828           return isConcave
39829         };
39830         BufferInputLineSimplifier.prototype.simplify = function simplify (distanceTol) {
39831             var this$1 = this;
39832
39833           this._distanceTol = Math.abs(distanceTol);
39834           if (distanceTol < 0) { this._angleOrientation = CGAlgorithms.CLOCKWISE; }
39835           this._isDeleted = new Array(this._inputLine.length).fill(null);
39836           var isChanged = false;
39837           do {
39838             isChanged = this$1.deleteShallowConcavities();
39839           } while (isChanged)
39840           return this.collapseLine()
39841         };
39842         BufferInputLineSimplifier.prototype.findNextNonDeletedIndex = function findNextNonDeletedIndex (index) {
39843           var next = index + 1;
39844           while (next < this._inputLine.length && this._isDeleted[next] === BufferInputLineSimplifier.DELETE) { next++; }
39845           return next
39846         };
39847         BufferInputLineSimplifier.prototype.isShallow = function isShallow (p0, p1, p2, distanceTol) {
39848           var dist = CGAlgorithms.distancePointLine(p1, p0, p2);
39849           return dist < distanceTol
39850         };
39851         BufferInputLineSimplifier.prototype.collapseLine = function collapseLine () {
39852             var this$1 = this;
39853
39854           var coordList = new CoordinateList();
39855           for (var i = 0; i < this._inputLine.length; i++) {
39856             if (this$1._isDeleted[i] !== BufferInputLineSimplifier.DELETE) { coordList.add(this$1._inputLine[i]); }
39857           }
39858           return coordList.toCoordinateArray()
39859         };
39860         BufferInputLineSimplifier.prototype.interfaces_ = function interfaces_ () {
39861           return []
39862         };
39863         BufferInputLineSimplifier.prototype.getClass = function getClass () {
39864           return BufferInputLineSimplifier
39865         };
39866         BufferInputLineSimplifier.simplify = function simplify (inputLine, distanceTol) {
39867           var simp = new BufferInputLineSimplifier(inputLine);
39868           return simp.simplify(distanceTol)
39869         };
39870         staticAccessors$26.INIT.get = function () { return 0 };
39871         staticAccessors$26.DELETE.get = function () { return 1 };
39872         staticAccessors$26.KEEP.get = function () { return 1 };
39873         staticAccessors$26.NUM_PTS_TO_CHECK.get = function () { return 10 };
39874
39875         Object.defineProperties( BufferInputLineSimplifier, staticAccessors$26 );
39876
39877         var OffsetSegmentString = function OffsetSegmentString () {
39878           this._ptList = null;
39879           this._precisionModel = null;
39880           this._minimimVertexDistance = 0.0;
39881           this._ptList = new ArrayList();
39882         };
39883
39884         var staticAccessors$28 = { COORDINATE_ARRAY_TYPE: { configurable: true } };
39885         OffsetSegmentString.prototype.getCoordinates = function getCoordinates () {
39886           var coord = this._ptList.toArray(OffsetSegmentString.COORDINATE_ARRAY_TYPE);
39887           return coord
39888         };
39889         OffsetSegmentString.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {
39890           this._precisionModel = precisionModel;
39891         };
39892         OffsetSegmentString.prototype.addPt = function addPt (pt) {
39893           var bufPt = new Coordinate(pt);
39894           this._precisionModel.makePrecise(bufPt);
39895           if (this.isRedundant(bufPt)) { return null }
39896           this._ptList.add(bufPt);
39897         };
39898         OffsetSegmentString.prototype.revere = function revere () {};
39899         OffsetSegmentString.prototype.addPts = function addPts (pt, isForward) {
39900             var this$1 = this;
39901
39902           if (isForward) {
39903             for (var i = 0; i < pt.length; i++) {
39904               this$1.addPt(pt[i]);
39905             }
39906           } else {
39907             for (var i$1 = pt.length - 1; i$1 >= 0; i$1--) {
39908               this$1.addPt(pt[i$1]);
39909             }
39910           }
39911         };
39912         OffsetSegmentString.prototype.isRedundant = function isRedundant (pt) {
39913           if (this._ptList.size() < 1) { return false }
39914           var lastPt = this._ptList.get(this._ptList.size() - 1);
39915           var ptDist = pt.distance(lastPt);
39916           if (ptDist < this._minimimVertexDistance) { return true }
39917           return false
39918         };
39919         OffsetSegmentString.prototype.toString = function toString () {
39920           var fact = new GeometryFactory();
39921           var line = fact.createLineString(this.getCoordinates());
39922           return line.toString()
39923         };
39924         OffsetSegmentString.prototype.closeRing = function closeRing () {
39925           if (this._ptList.size() < 1) { return null }
39926           var startPt = new Coordinate(this._ptList.get(0));
39927           var lastPt = this._ptList.get(this._ptList.size() - 1);
39928           // const last2Pt = null
39929           // if (this._ptList.size() >= 2) last2Pt = this._ptList.get(this._ptList.size() - 2)
39930           if (startPt.equals(lastPt)) { return null }
39931           this._ptList.add(startPt);
39932         };
39933         OffsetSegmentString.prototype.setMinimumVertexDistance = function setMinimumVertexDistance (minimimVertexDistance) {
39934           this._minimimVertexDistance = minimimVertexDistance;
39935         };
39936         OffsetSegmentString.prototype.interfaces_ = function interfaces_ () {
39937           return []
39938         };
39939         OffsetSegmentString.prototype.getClass = function getClass () {
39940           return OffsetSegmentString
39941         };
39942         staticAccessors$28.COORDINATE_ARRAY_TYPE.get = function () { return new Array(0).fill(null) };
39943
39944         Object.defineProperties( OffsetSegmentString, staticAccessors$28 );
39945
39946         var Angle = function Angle () {};
39947
39948         var staticAccessors$29 = { PI_TIMES_2: { configurable: true },PI_OVER_2: { configurable: true },PI_OVER_4: { configurable: true },COUNTERCLOCKWISE: { configurable: true },CLOCKWISE: { configurable: true },NONE: { configurable: true } };
39949
39950         Angle.prototype.interfaces_ = function interfaces_ () {
39951           return []
39952         };
39953         Angle.prototype.getClass = function getClass () {
39954           return Angle
39955         };
39956         Angle.toDegrees = function toDegrees (radians) {
39957           return radians * 180 / Math.PI
39958         };
39959         Angle.normalize = function normalize (angle) {
39960           while (angle > Math.PI) { angle -= Angle.PI_TIMES_2; }
39961           while (angle <= -Math.PI) { angle += Angle.PI_TIMES_2; }
39962           return angle
39963         };
39964         Angle.angle = function angle () {
39965           if (arguments.length === 1) {
39966             var p = arguments[0];
39967             return Math.atan2(p.y, p.x)
39968           } else if (arguments.length === 2) {
39969             var p0 = arguments[0];
39970             var p1 = arguments[1];
39971             var dx = p1.x - p0.x;
39972             var dy = p1.y - p0.y;
39973             return Math.atan2(dy, dx)
39974           }
39975         };
39976         Angle.isAcute = function isAcute (p0, p1, p2) {
39977           var dx0 = p0.x - p1.x;
39978           var dy0 = p0.y - p1.y;
39979           var dx1 = p2.x - p1.x;
39980           var dy1 = p2.y - p1.y;
39981           var dotprod = dx0 * dx1 + dy0 * dy1;
39982           return dotprod > 0
39983         };
39984         Angle.isObtuse = function isObtuse (p0, p1, p2) {
39985           var dx0 = p0.x - p1.x;
39986           var dy0 = p0.y - p1.y;
39987           var dx1 = p2.x - p1.x;
39988           var dy1 = p2.y - p1.y;
39989           var dotprod = dx0 * dx1 + dy0 * dy1;
39990           return dotprod < 0
39991         };
39992         Angle.interiorAngle = function interiorAngle (p0, p1, p2) {
39993           var anglePrev = Angle.angle(p1, p0);
39994           var angleNext = Angle.angle(p1, p2);
39995           return Math.abs(angleNext - anglePrev)
39996         };
39997         Angle.normalizePositive = function normalizePositive (angle) {
39998           if (angle < 0.0) {
39999             while (angle < 0.0) { angle += Angle.PI_TIMES_2; }
40000             if (angle >= Angle.PI_TIMES_2) { angle = 0.0; }
40001           } else {
40002             while (angle >= Angle.PI_TIMES_2) { angle -= Angle.PI_TIMES_2; }
40003             if (angle < 0.0) { angle = 0.0; }
40004           }
40005           return angle
40006         };
40007         Angle.angleBetween = function angleBetween (tip1, tail, tip2) {
40008           var a1 = Angle.angle(tail, tip1);
40009           var a2 = Angle.angle(tail, tip2);
40010           return Angle.diff(a1, a2)
40011         };
40012         Angle.diff = function diff (ang1, ang2) {
40013           var delAngle = null;
40014           if (ang1 < ang2) {
40015             delAngle = ang2 - ang1;
40016           } else {
40017             delAngle = ang1 - ang2;
40018           }
40019           if (delAngle > Math.PI) {
40020             delAngle = 2 * Math.PI - delAngle;
40021           }
40022           return delAngle
40023         };
40024         Angle.toRadians = function toRadians (angleDegrees) {
40025           return angleDegrees * Math.PI / 180.0
40026         };
40027         Angle.getTurn = function getTurn (ang1, ang2) {
40028           var crossproduct = Math.sin(ang2 - ang1);
40029           if (crossproduct > 0) {
40030             return Angle.COUNTERCLOCKWISE
40031           }
40032           if (crossproduct < 0) {
40033             return Angle.CLOCKWISE
40034           }
40035           return Angle.NONE
40036         };
40037         Angle.angleBetweenOriented = function angleBetweenOriented (tip1, tail, tip2) {
40038           var a1 = Angle.angle(tail, tip1);
40039           var a2 = Angle.angle(tail, tip2);
40040           var angDel = a2 - a1;
40041           if (angDel <= -Math.PI) { return angDel + Angle.PI_TIMES_2 }
40042           if (angDel > Math.PI) { return angDel - Angle.PI_TIMES_2 }
40043           return angDel
40044         };
40045         staticAccessors$29.PI_TIMES_2.get = function () { return 2.0 * Math.PI };
40046         staticAccessors$29.PI_OVER_2.get = function () { return Math.PI / 2.0 };
40047         staticAccessors$29.PI_OVER_4.get = function () { return Math.PI / 4.0 };
40048         staticAccessors$29.COUNTERCLOCKWISE.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };
40049         staticAccessors$29.CLOCKWISE.get = function () { return CGAlgorithms.CLOCKWISE };
40050         staticAccessors$29.NONE.get = function () { return CGAlgorithms.COLLINEAR };
40051
40052         Object.defineProperties( Angle, staticAccessors$29 );
40053
40054         var OffsetSegmentGenerator = function OffsetSegmentGenerator () {
40055           this._maxCurveSegmentError = 0.0;
40056           this._filletAngleQuantum = null;
40057           this._closingSegLengthFactor = 1;
40058           this._segList = null;
40059           this._distance = 0.0;
40060           this._precisionModel = null;
40061           this._bufParams = null;
40062           this._li = null;
40063           this._s0 = null;
40064           this._s1 = null;
40065           this._s2 = null;
40066           this._seg0 = new LineSegment();
40067           this._seg1 = new LineSegment();
40068           this._offset0 = new LineSegment();
40069           this._offset1 = new LineSegment();
40070           this._side = 0;
40071           this._hasNarrowConcaveAngle = false;
40072           var precisionModel = arguments[0];
40073           var bufParams = arguments[1];
40074           var distance = arguments[2];
40075           this._precisionModel = precisionModel;
40076           this._bufParams = bufParams;
40077           this._li = new RobustLineIntersector();
40078           this._filletAngleQuantum = Math.PI / 2.0 / bufParams.getQuadrantSegments();
40079           if (bufParams.getQuadrantSegments() >= 8 && bufParams.getJoinStyle() === BufferParameters.JOIN_ROUND) { this._closingSegLengthFactor = OffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR; }
40080           this.init(distance);
40081         };
40082
40083         var staticAccessors$27 = { OFFSET_SEGMENT_SEPARATION_FACTOR: { configurable: true },INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR: { configurable: true },CURVE_VERTEX_SNAP_DISTANCE_FACTOR: { configurable: true },MAX_CLOSING_SEG_LEN_FACTOR: { configurable: true } };
40084         OffsetSegmentGenerator.prototype.addNextSegment = function addNextSegment (p, addStartPoint) {
40085           this._s0 = this._s1;
40086           this._s1 = this._s2;
40087           this._s2 = p;
40088           this._seg0.setCoordinates(this._s0, this._s1);
40089           this.computeOffsetSegment(this._seg0, this._side, this._distance, this._offset0);
40090           this._seg1.setCoordinates(this._s1, this._s2);
40091           this.computeOffsetSegment(this._seg1, this._side, this._distance, this._offset1);
40092           if (this._s1.equals(this._s2)) { return null }
40093           var orientation = CGAlgorithms.computeOrientation(this._s0, this._s1, this._s2);
40094           var outsideTurn = (orientation === CGAlgorithms.CLOCKWISE && this._side === Position.LEFT) || (orientation === CGAlgorithms.COUNTERCLOCKWISE && this._side === Position.RIGHT);
40095           if (orientation === 0) {
40096             this.addCollinear(addStartPoint);
40097           } else if (outsideTurn) {
40098             this.addOutsideTurn(orientation, addStartPoint);
40099           } else {
40100             this.addInsideTurn(orientation, addStartPoint);
40101           }
40102         };
40103         OffsetSegmentGenerator.prototype.addLineEndCap = function addLineEndCap (p0, p1) {
40104           var seg = new LineSegment(p0, p1);
40105           var offsetL = new LineSegment();
40106           this.computeOffsetSegment(seg, Position.LEFT, this._distance, offsetL);
40107           var offsetR = new LineSegment();
40108           this.computeOffsetSegment(seg, Position.RIGHT, this._distance, offsetR);
40109           var dx = p1.x - p0.x;
40110           var dy = p1.y - p0.y;
40111           var angle = Math.atan2(dy, dx);
40112           switch (this._bufParams.getEndCapStyle()) {
40113             case BufferParameters.CAP_ROUND:
40114               this._segList.addPt(offsetL.p1);
40115               this.addFilletArc(p1, angle + Math.PI / 2, angle - Math.PI / 2, CGAlgorithms.CLOCKWISE, this._distance);
40116               this._segList.addPt(offsetR.p1);
40117               break
40118             case BufferParameters.CAP_FLAT:
40119               this._segList.addPt(offsetL.p1);
40120               this._segList.addPt(offsetR.p1);
40121               break
40122             case BufferParameters.CAP_SQUARE:
40123               var squareCapSideOffset = new Coordinate();
40124               squareCapSideOffset.x = Math.abs(this._distance) * Math.cos(angle);
40125               squareCapSideOffset.y = Math.abs(this._distance) * Math.sin(angle);
40126               var squareCapLOffset = new Coordinate(offsetL.p1.x + squareCapSideOffset.x, offsetL.p1.y + squareCapSideOffset.y);
40127               var squareCapROffset = new Coordinate(offsetR.p1.x + squareCapSideOffset.x, offsetR.p1.y + squareCapSideOffset.y);
40128               this._segList.addPt(squareCapLOffset);
40129               this._segList.addPt(squareCapROffset);
40130               break
40131           }
40132         };
40133         OffsetSegmentGenerator.prototype.getCoordinates = function getCoordinates () {
40134           var pts = this._segList.getCoordinates();
40135           return pts
40136         };
40137         OffsetSegmentGenerator.prototype.addMitreJoin = function addMitreJoin (p, offset0, offset1, distance) {
40138           var isMitreWithinLimit = true;
40139           var intPt = null;
40140           try {
40141             intPt = HCoordinate.intersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1);
40142             var mitreRatio = distance <= 0.0 ? 1.0 : intPt.distance(p) / Math.abs(distance);
40143             if (mitreRatio > this._bufParams.getMitreLimit()) { isMitreWithinLimit = false; }
40144           } catch (ex) {
40145             if (ex instanceof NotRepresentableException) {
40146               intPt = new Coordinate(0, 0);
40147               isMitreWithinLimit = false;
40148             } else { throw ex }
40149           } finally {}
40150           if (isMitreWithinLimit) {
40151             this._segList.addPt(intPt);
40152           } else {
40153             this.addLimitedMitreJoin(offset0, offset1, distance, this._bufParams.getMitreLimit());
40154           }
40155         };
40156         OffsetSegmentGenerator.prototype.addFilletCorner = function addFilletCorner (p, p0, p1, direction, radius) {
40157           var dx0 = p0.x - p.x;
40158           var dy0 = p0.y - p.y;
40159           var startAngle = Math.atan2(dy0, dx0);
40160           var dx1 = p1.x - p.x;
40161           var dy1 = p1.y - p.y;
40162           var endAngle = Math.atan2(dy1, dx1);
40163           if (direction === CGAlgorithms.CLOCKWISE) {
40164             if (startAngle <= endAngle) { startAngle += 2.0 * Math.PI; }
40165           } else {
40166             if (startAngle >= endAngle) { startAngle -= 2.0 * Math.PI; }
40167           }
40168           this._segList.addPt(p0);
40169           this.addFilletArc(p, startAngle, endAngle, direction, radius);
40170           this._segList.addPt(p1);
40171         };
40172         OffsetSegmentGenerator.prototype.addOutsideTurn = function addOutsideTurn (orientation, addStartPoint) {
40173           if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR) {
40174             this._segList.addPt(this._offset0.p1);
40175             return null
40176           }
40177           if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {
40178             this.addMitreJoin(this._s1, this._offset0, this._offset1, this._distance);
40179           } else if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL) {
40180             this.addBevelJoin(this._offset0, this._offset1);
40181           } else {
40182             if (addStartPoint) { this._segList.addPt(this._offset0.p1); }
40183             this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, orientation, this._distance);
40184             this._segList.addPt(this._offset1.p0);
40185           }
40186         };
40187         OffsetSegmentGenerator.prototype.createSquare = function createSquare (p) {
40188           this._segList.addPt(new Coordinate(p.x + this._distance, p.y + this._distance));
40189           this._segList.addPt(new Coordinate(p.x + this._distance, p.y - this._distance));
40190           this._segList.addPt(new Coordinate(p.x - this._distance, p.y - this._distance));
40191           this._segList.addPt(new Coordinate(p.x - this._distance, p.y + this._distance));
40192           this._segList.closeRing();
40193         };
40194         OffsetSegmentGenerator.prototype.addSegments = function addSegments (pt, isForward) {
40195           this._segList.addPts(pt, isForward);
40196         };
40197         OffsetSegmentGenerator.prototype.addFirstSegment = function addFirstSegment () {
40198           this._segList.addPt(this._offset1.p0);
40199         };
40200         OffsetSegmentGenerator.prototype.addLastSegment = function addLastSegment () {
40201           this._segList.addPt(this._offset1.p1);
40202         };
40203         OffsetSegmentGenerator.prototype.initSideSegments = function initSideSegments (s1, s2, side) {
40204           this._s1 = s1;
40205           this._s2 = s2;
40206           this._side = side;
40207           this._seg1.setCoordinates(s1, s2);
40208           this.computeOffsetSegment(this._seg1, side, this._distance, this._offset1);
40209         };
40210         OffsetSegmentGenerator.prototype.addLimitedMitreJoin = function addLimitedMitreJoin (offset0, offset1, distance, mitreLimit) {
40211           var basePt = this._seg0.p1;
40212           var ang0 = Angle.angle(basePt, this._seg0.p0);
40213           // const ang1 = Angle.angle(basePt, this._seg1.p1)
40214           var angDiff = Angle.angleBetweenOriented(this._seg0.p0, basePt, this._seg1.p1);
40215           var angDiffHalf = angDiff / 2;
40216           var midAng = Angle.normalize(ang0 + angDiffHalf);
40217           var mitreMidAng = Angle.normalize(midAng + Math.PI);
40218           var mitreDist = mitreLimit * distance;
40219           var bevelDelta = mitreDist * Math.abs(Math.sin(angDiffHalf));
40220           var bevelHalfLen = distance - bevelDelta;
40221           var bevelMidX = basePt.x + mitreDist * Math.cos(mitreMidAng);
40222           var bevelMidY = basePt.y + mitreDist * Math.sin(mitreMidAng);
40223           var bevelMidPt = new Coordinate(bevelMidX, bevelMidY);
40224           var mitreMidLine = new LineSegment(basePt, bevelMidPt);
40225           var bevelEndLeft = mitreMidLine.pointAlongOffset(1.0, bevelHalfLen);
40226           var bevelEndRight = mitreMidLine.pointAlongOffset(1.0, -bevelHalfLen);
40227           if (this._side === Position.LEFT) {
40228             this._segList.addPt(bevelEndLeft);
40229             this._segList.addPt(bevelEndRight);
40230           } else {
40231             this._segList.addPt(bevelEndRight);
40232             this._segList.addPt(bevelEndLeft);
40233           }
40234         };
40235         OffsetSegmentGenerator.prototype.computeOffsetSegment = function computeOffsetSegment (seg, side, distance, offset) {
40236           var sideSign = side === Position.LEFT ? 1 : -1;
40237           var dx = seg.p1.x - seg.p0.x;
40238           var dy = seg.p1.y - seg.p0.y;
40239           var len = Math.sqrt(dx * dx + dy * dy);
40240           var ux = sideSign * distance * dx / len;
40241           var uy = sideSign * distance * dy / len;
40242           offset.p0.x = seg.p0.x - uy;
40243           offset.p0.y = seg.p0.y + ux;
40244           offset.p1.x = seg.p1.x - uy;
40245           offset.p1.y = seg.p1.y + ux;
40246         };
40247         OffsetSegmentGenerator.prototype.addFilletArc = function addFilletArc (p, startAngle, endAngle, direction, radius) {
40248             var this$1 = this;
40249
40250           var directionFactor = direction === CGAlgorithms.CLOCKWISE ? -1 : 1;
40251           var totalAngle = Math.abs(startAngle - endAngle);
40252           var nSegs = Math.trunc(totalAngle / this._filletAngleQuantum + 0.5);
40253           if (nSegs < 1) { return null }
40254           var initAngle = 0.0;
40255           var currAngleInc = totalAngle / nSegs;
40256           var currAngle = initAngle;
40257           var pt = new Coordinate();
40258           while (currAngle < totalAngle) {
40259             var angle = startAngle + directionFactor * currAngle;
40260             pt.x = p.x + radius * Math.cos(angle);
40261             pt.y = p.y + radius * Math.sin(angle);
40262             this$1._segList.addPt(pt);
40263             currAngle += currAngleInc;
40264           }
40265         };
40266         OffsetSegmentGenerator.prototype.addInsideTurn = function addInsideTurn (orientation, addStartPoint) {
40267           this._li.computeIntersection(this._offset0.p0, this._offset0.p1, this._offset1.p0, this._offset1.p1);
40268           if (this._li.hasIntersection()) {
40269             this._segList.addPt(this._li.getIntersection(0));
40270           } else {
40271             this._hasNarrowConcaveAngle = true;
40272             if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) {
40273               this._segList.addPt(this._offset0.p1);
40274             } else {
40275               this._segList.addPt(this._offset0.p1);
40276               if (this._closingSegLengthFactor > 0) {
40277                 var mid0 = new Coordinate((this._closingSegLengthFactor * this._offset0.p1.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset0.p1.y + this._s1.y) / (this._closingSegLengthFactor + 1));
40278                 this._segList.addPt(mid0);
40279                 var mid1 = new Coordinate((this._closingSegLengthFactor * this._offset1.p0.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset1.p0.y + this._s1.y) / (this._closingSegLengthFactor + 1));
40280                 this._segList.addPt(mid1);
40281               } else {
40282                 this._segList.addPt(this._s1);
40283               }
40284               this._segList.addPt(this._offset1.p0);
40285             }
40286           }
40287         };
40288         OffsetSegmentGenerator.prototype.createCircle = function createCircle (p) {
40289           var pt = new Coordinate(p.x + this._distance, p.y);
40290           this._segList.addPt(pt);
40291           this.addFilletArc(p, 0.0, 2.0 * Math.PI, -1, this._distance);
40292           this._segList.closeRing();
40293         };
40294         OffsetSegmentGenerator.prototype.addBevelJoin = function addBevelJoin (offset0, offset1) {
40295           this._segList.addPt(offset0.p1);
40296           this._segList.addPt(offset1.p0);
40297         };
40298         OffsetSegmentGenerator.prototype.init = function init (distance) {
40299           this._distance = distance;
40300           this._maxCurveSegmentError = distance * (1 - Math.cos(this._filletAngleQuantum / 2.0));
40301           this._segList = new OffsetSegmentString();
40302           this._segList.setPrecisionModel(this._precisionModel);
40303           this._segList.setMinimumVertexDistance(distance * OffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR);
40304         };
40305         OffsetSegmentGenerator.prototype.addCollinear = function addCollinear (addStartPoint) {
40306           this._li.computeIntersection(this._s0, this._s1, this._s1, this._s2);
40307           var numInt = this._li.getIntersectionNum();
40308           if (numInt >= 2) {
40309             if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL || this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {
40310               if (addStartPoint) { this._segList.addPt(this._offset0.p1); }
40311               this._segList.addPt(this._offset1.p0);
40312             } else {
40313               this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, CGAlgorithms.CLOCKWISE, this._distance);
40314             }
40315           }
40316         };
40317         OffsetSegmentGenerator.prototype.closeRing = function closeRing () {
40318           this._segList.closeRing();
40319         };
40320         OffsetSegmentGenerator.prototype.hasNarrowConcaveAngle = function hasNarrowConcaveAngle () {
40321           return this._hasNarrowConcaveAngle
40322         };
40323         OffsetSegmentGenerator.prototype.interfaces_ = function interfaces_ () {
40324           return []
40325         };
40326         OffsetSegmentGenerator.prototype.getClass = function getClass () {
40327           return OffsetSegmentGenerator
40328         };
40329         staticAccessors$27.OFFSET_SEGMENT_SEPARATION_FACTOR.get = function () { return 1.0E-3 };
40330         staticAccessors$27.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-3 };
40331         staticAccessors$27.CURVE_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-6 };
40332         staticAccessors$27.MAX_CLOSING_SEG_LEN_FACTOR.get = function () { return 80 };
40333
40334         Object.defineProperties( OffsetSegmentGenerator, staticAccessors$27 );
40335
40336         var OffsetCurveBuilder = function OffsetCurveBuilder () {
40337           this._distance = 0.0;
40338           this._precisionModel = null;
40339           this._bufParams = null;
40340           var precisionModel = arguments[0];
40341           var bufParams = arguments[1];
40342           this._precisionModel = precisionModel;
40343           this._bufParams = bufParams;
40344         };
40345         OffsetCurveBuilder.prototype.getOffsetCurve = function getOffsetCurve (inputPts, distance) {
40346           this._distance = distance;
40347           if (distance === 0.0) { return null }
40348           var isRightSide = distance < 0.0;
40349           var posDistance = Math.abs(distance);
40350           var segGen = this.getSegGen(posDistance);
40351           if (inputPts.length <= 1) {
40352             this.computePointCurve(inputPts[0], segGen);
40353           } else {
40354             this.computeOffsetCurve(inputPts, isRightSide, segGen);
40355           }
40356           var curvePts = segGen.getCoordinates();
40357           if (isRightSide) { CoordinateArrays.reverse(curvePts); }
40358           return curvePts
40359         };
40360         OffsetCurveBuilder.prototype.computeSingleSidedBufferCurve = function computeSingleSidedBufferCurve (inputPts, isRightSide, segGen) {
40361           var distTol = this.simplifyTolerance(this._distance);
40362           if (isRightSide) {
40363             segGen.addSegments(inputPts, true);
40364             var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
40365             var n2 = simp2.length - 1;
40366             segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
40367             segGen.addFirstSegment();
40368             for (var i = n2 - 2; i >= 0; i--) {
40369               segGen.addNextSegment(simp2[i], true);
40370             }
40371           } else {
40372             segGen.addSegments(inputPts, false);
40373             var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
40374             var n1 = simp1.length - 1;
40375             segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
40376             segGen.addFirstSegment();
40377             for (var i$1 = 2; i$1 <= n1; i$1++) {
40378               segGen.addNextSegment(simp1[i$1], true);
40379             }
40380           }
40381           segGen.addLastSegment();
40382           segGen.closeRing();
40383         };
40384         OffsetCurveBuilder.prototype.computeRingBufferCurve = function computeRingBufferCurve (inputPts, side, segGen) {
40385           var distTol = this.simplifyTolerance(this._distance);
40386           if (side === Position.RIGHT) { distTol = -distTol; }
40387           var simp = BufferInputLineSimplifier.simplify(inputPts, distTol);
40388           var n = simp.length - 1;
40389           segGen.initSideSegments(simp[n - 1], simp[0], side);
40390           for (var i = 1; i <= n; i++) {
40391             var addStartPoint = i !== 1;
40392             segGen.addNextSegment(simp[i], addStartPoint);
40393           }
40394           segGen.closeRing();
40395         };
40396         OffsetCurveBuilder.prototype.computeLineBufferCurve = function computeLineBufferCurve (inputPts, segGen) {
40397           var distTol = this.simplifyTolerance(this._distance);
40398           var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
40399           var n1 = simp1.length - 1;
40400           segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
40401           for (var i = 2; i <= n1; i++) {
40402             segGen.addNextSegment(simp1[i], true);
40403           }
40404           segGen.addLastSegment();
40405           segGen.addLineEndCap(simp1[n1 - 1], simp1[n1]);
40406           var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
40407           var n2 = simp2.length - 1;
40408           segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
40409           for (var i$1 = n2 - 2; i$1 >= 0; i$1--) {
40410             segGen.addNextSegment(simp2[i$1], true);
40411           }
40412           segGen.addLastSegment();
40413           segGen.addLineEndCap(simp2[1], simp2[0]);
40414           segGen.closeRing();
40415         };
40416         OffsetCurveBuilder.prototype.computePointCurve = function computePointCurve (pt, segGen) {
40417           switch (this._bufParams.getEndCapStyle()) {
40418             case BufferParameters.CAP_ROUND:
40419               segGen.createCircle(pt);
40420               break
40421             case BufferParameters.CAP_SQUARE:
40422               segGen.createSquare(pt);
40423               break
40424           }
40425         };
40426         OffsetCurveBuilder.prototype.getLineCurve = function getLineCurve (inputPts, distance) {
40427           this._distance = distance;
40428           if (distance < 0.0 && !this._bufParams.isSingleSided()) { return null }
40429           if (distance === 0.0) { return null }
40430           var posDistance = Math.abs(distance);
40431           var segGen = this.getSegGen(posDistance);
40432           if (inputPts.length <= 1) {
40433             this.computePointCurve(inputPts[0], segGen);
40434           } else {
40435             if (this._bufParams.isSingleSided()) {
40436               var isRightSide = distance < 0.0;
40437               this.computeSingleSidedBufferCurve(inputPts, isRightSide, segGen);
40438             } else { this.computeLineBufferCurve(inputPts, segGen); }
40439           }
40440           var lineCoord = segGen.getCoordinates();
40441           return lineCoord
40442         };
40443         OffsetCurveBuilder.prototype.getBufferParameters = function getBufferParameters () {
40444           return this._bufParams
40445         };
40446         OffsetCurveBuilder.prototype.simplifyTolerance = function simplifyTolerance (bufDistance) {
40447           return bufDistance * this._bufParams.getSimplifyFactor()
40448         };
40449         OffsetCurveBuilder.prototype.getRingCurve = function getRingCurve (inputPts, side, distance) {
40450           this._distance = distance;
40451           if (inputPts.length <= 2) { return this.getLineCurve(inputPts, distance) }
40452           if (distance === 0.0) {
40453             return OffsetCurveBuilder.copyCoordinates(inputPts)
40454           }
40455           var segGen = this.getSegGen(distance);
40456           this.computeRingBufferCurve(inputPts, side, segGen);
40457           return segGen.getCoordinates()
40458         };
40459         OffsetCurveBuilder.prototype.computeOffsetCurve = function computeOffsetCurve (inputPts, isRightSide, segGen) {
40460           var distTol = this.simplifyTolerance(this._distance);
40461           if (isRightSide) {
40462             var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
40463             var n2 = simp2.length - 1;
40464             segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
40465             segGen.addFirstSegment();
40466             for (var i = n2 - 2; i >= 0; i--) {
40467               segGen.addNextSegment(simp2[i], true);
40468             }
40469           } else {
40470             var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
40471             var n1 = simp1.length - 1;
40472             segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
40473             segGen.addFirstSegment();
40474             for (var i$1 = 2; i$1 <= n1; i$1++) {
40475               segGen.addNextSegment(simp1[i$1], true);
40476             }
40477           }
40478           segGen.addLastSegment();
40479         };
40480         OffsetCurveBuilder.prototype.getSegGen = function getSegGen (distance) {
40481           return new OffsetSegmentGenerator(this._precisionModel, this._bufParams, distance)
40482         };
40483         OffsetCurveBuilder.prototype.interfaces_ = function interfaces_ () {
40484           return []
40485         };
40486         OffsetCurveBuilder.prototype.getClass = function getClass () {
40487           return OffsetCurveBuilder
40488         };
40489         OffsetCurveBuilder.copyCoordinates = function copyCoordinates (pts) {
40490           var copy = new Array(pts.length).fill(null);
40491           for (var i = 0; i < copy.length; i++) {
40492             copy[i] = new Coordinate(pts[i]);
40493           }
40494           return copy
40495         };
40496
40497         var SubgraphDepthLocater = function SubgraphDepthLocater () {
40498           this._subgraphs = null;
40499           this._seg = new LineSegment();
40500           this._cga = new CGAlgorithms();
40501           var subgraphs = arguments[0];
40502           this._subgraphs = subgraphs;
40503         };
40504
40505         var staticAccessors$30 = { DepthSegment: { configurable: true } };
40506         SubgraphDepthLocater.prototype.findStabbedSegments = function findStabbedSegments () {
40507             var this$1 = this;
40508
40509           if (arguments.length === 1) {
40510             var stabbingRayLeftPt = arguments[0];
40511             var stabbedSegments = new ArrayList();
40512             for (var i = this._subgraphs.iterator(); i.hasNext();) {
40513               var bsg = i.next();
40514               var env = bsg.getEnvelope();
40515               if (stabbingRayLeftPt.y < env.getMinY() || stabbingRayLeftPt.y > env.getMaxY()) { continue }
40516               this$1.findStabbedSegments(stabbingRayLeftPt, bsg.getDirectedEdges(), stabbedSegments);
40517             }
40518             return stabbedSegments
40519           } else if (arguments.length === 3) {
40520             if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && arguments[1] instanceof DirectedEdge)) {
40521               var stabbingRayLeftPt$1 = arguments[0];
40522               var dirEdge = arguments[1];
40523               var stabbedSegments$1 = arguments[2];
40524               var pts = dirEdge.getEdge().getCoordinates();
40525               for (var i$1 = 0; i$1 < pts.length - 1; i$1++) {
40526                 this$1._seg.p0 = pts[i$1];
40527                 this$1._seg.p1 = pts[i$1 + 1];
40528                 if (this$1._seg.p0.y > this$1._seg.p1.y) { this$1._seg.reverse(); }
40529                 var maxx = Math.max(this$1._seg.p0.x, this$1._seg.p1.x);
40530                 if (maxx < stabbingRayLeftPt$1.x) { continue }
40531                 if (this$1._seg.isHorizontal()) { continue }
40532                 if (stabbingRayLeftPt$1.y < this$1._seg.p0.y || stabbingRayLeftPt$1.y > this$1._seg.p1.y) { continue }
40533                 if (CGAlgorithms.computeOrientation(this$1._seg.p0, this$1._seg.p1, stabbingRayLeftPt$1) === CGAlgorithms.RIGHT) { continue }
40534                 var depth = dirEdge.getDepth(Position.LEFT);
40535                 if (!this$1._seg.p0.equals(pts[i$1])) { depth = dirEdge.getDepth(Position.RIGHT); }
40536                 var ds = new DepthSegment(this$1._seg, depth);
40537                 stabbedSegments$1.add(ds);
40538               }
40539             } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && hasInterface(arguments[1], List))) {
40540               var stabbingRayLeftPt$2 = arguments[0];
40541               var dirEdges = arguments[1];
40542               var stabbedSegments$2 = arguments[2];
40543               for (var i$2 = dirEdges.iterator(); i$2.hasNext();) {
40544                 var de = i$2.next();
40545                 if (!de.isForward()) { continue }
40546                 this$1.findStabbedSegments(stabbingRayLeftPt$2, de, stabbedSegments$2);
40547               }
40548             }
40549           }
40550         };
40551         SubgraphDepthLocater.prototype.getDepth = function getDepth (p) {
40552           var stabbedSegments = this.findStabbedSegments(p);
40553           if (stabbedSegments.size() === 0) { return 0 }
40554           var ds = Collections.min(stabbedSegments);
40555           return ds._leftDepth
40556         };
40557         SubgraphDepthLocater.prototype.interfaces_ = function interfaces_ () {
40558           return []
40559         };
40560         SubgraphDepthLocater.prototype.getClass = function getClass () {
40561           return SubgraphDepthLocater
40562         };
40563         staticAccessors$30.DepthSegment.get = function () { return DepthSegment };
40564
40565         Object.defineProperties( SubgraphDepthLocater, staticAccessors$30 );
40566
40567         var DepthSegment = function DepthSegment () {
40568           this._upwardSeg = null;
40569           this._leftDepth = null;
40570           var seg = arguments[0];
40571           var depth = arguments[1];
40572           this._upwardSeg = new LineSegment(seg);
40573           this._leftDepth = depth;
40574         };
40575         DepthSegment.prototype.compareTo = function compareTo (obj) {
40576           var other = obj;
40577           if (this._upwardSeg.minX() >= other._upwardSeg.maxX()) { return 1 }
40578           if (this._upwardSeg.maxX() <= other._upwardSeg.minX()) { return -1 }
40579           var orientIndex = this._upwardSeg.orientationIndex(other._upwardSeg);
40580           if (orientIndex !== 0) { return orientIndex }
40581           orientIndex = -1 * other._upwardSeg.orientationIndex(this._upwardSeg);
40582           if (orientIndex !== 0) { return orientIndex }
40583           return this._upwardSeg.compareTo(other._upwardSeg)
40584         };
40585         DepthSegment.prototype.compareX = function compareX (seg0, seg1) {
40586           var compare0 = seg0.p0.compareTo(seg1.p0);
40587           if (compare0 !== 0) { return compare0 }
40588           return seg0.p1.compareTo(seg1.p1)
40589         };
40590         DepthSegment.prototype.toString = function toString () {
40591           return this._upwardSeg.toString()
40592         };
40593         DepthSegment.prototype.interfaces_ = function interfaces_ () {
40594           return [Comparable]
40595         };
40596         DepthSegment.prototype.getClass = function getClass () {
40597           return DepthSegment
40598         };
40599
40600         var Triangle = function Triangle (p0, p1, p2) {
40601           this.p0 = p0 || null;
40602           this.p1 = p1 || null;
40603           this.p2 = p2 || null;
40604         };
40605         Triangle.prototype.area = function area () {
40606           return Triangle.area(this.p0, this.p1, this.p2)
40607         };
40608         Triangle.prototype.signedArea = function signedArea () {
40609           return Triangle.signedArea(this.p0, this.p1, this.p2)
40610         };
40611         Triangle.prototype.interpolateZ = function interpolateZ (p) {
40612           if (p === null) { throw new IllegalArgumentException('Supplied point is null.') }
40613           return Triangle.interpolateZ(p, this.p0, this.p1, this.p2)
40614         };
40615         Triangle.prototype.longestSideLength = function longestSideLength () {
40616           return Triangle.longestSideLength(this.p0, this.p1, this.p2)
40617         };
40618         Triangle.prototype.isAcute = function isAcute () {
40619           return Triangle.isAcute(this.p0, this.p1, this.p2)
40620         };
40621         Triangle.prototype.circumcentre = function circumcentre () {
40622           return Triangle.circumcentre(this.p0, this.p1, this.p2)
40623         };
40624         Triangle.prototype.area3D = function area3D () {
40625           return Triangle.area3D(this.p0, this.p1, this.p2)
40626         };
40627         Triangle.prototype.centroid = function centroid () {
40628           return Triangle.centroid(this.p0, this.p1, this.p2)
40629         };
40630         Triangle.prototype.inCentre = function inCentre () {
40631           return Triangle.inCentre(this.p0, this.p1, this.p2)
40632         };
40633         Triangle.prototype.interfaces_ = function interfaces_ () {
40634           return []
40635         };
40636         Triangle.prototype.getClass = function getClass () {
40637           return Triangle
40638         };
40639         Triangle.area = function area (a, b, c) {
40640           return Math.abs(((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2)
40641         };
40642         Triangle.signedArea = function signedArea (a, b, c) {
40643           return ((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2
40644         };
40645         Triangle.det = function det (m00, m01, m10, m11) {
40646           return m00 * m11 - m01 * m10
40647         };
40648         Triangle.interpolateZ = function interpolateZ (p, v0, v1, v2) {
40649           var x0 = v0.x;
40650           var y0 = v0.y;
40651           var a = v1.x - x0;
40652           var b = v2.x - x0;
40653           var c = v1.y - y0;
40654           var d = v2.y - y0;
40655           var det = a * d - b * c;
40656           var dx = p.x - x0;
40657           var dy = p.y - y0;
40658           var t = (d * dx - b * dy) / det;
40659           var u = (-c * dx + a * dy) / det;
40660           var z = v0.z + t * (v1.z - v0.z) + u * (v2.z - v0.z);
40661           return z
40662         };
40663         Triangle.longestSideLength = function longestSideLength (a, b, c) {
40664           var lenAB = a.distance(b);
40665           var lenBC = b.distance(c);
40666           var lenCA = c.distance(a);
40667           var maxLen = lenAB;
40668           if (lenBC > maxLen) { maxLen = lenBC; }
40669           if (lenCA > maxLen) { maxLen = lenCA; }
40670           return maxLen
40671         };
40672         Triangle.isAcute = function isAcute (a, b, c) {
40673           if (!Angle.isAcute(a, b, c)) { return false }
40674           if (!Angle.isAcute(b, c, a)) { return false }
40675           if (!Angle.isAcute(c, a, b)) { return false }
40676           return true
40677         };
40678         Triangle.circumcentre = function circumcentre (a, b, c) {
40679           var cx = c.x;
40680           var cy = c.y;
40681           var ax = a.x - cx;
40682           var ay = a.y - cy;
40683           var bx = b.x - cx;
40684           var by = b.y - cy;
40685           var denom = 2 * Triangle.det(ax, ay, bx, by);
40686           var numx = Triangle.det(ay, ax * ax + ay * ay, by, bx * bx + by * by);
40687           var numy = Triangle.det(ax, ax * ax + ay * ay, bx, bx * bx + by * by);
40688           var ccx = cx - numx / denom;
40689           var ccy = cy + numy / denom;
40690           return new Coordinate(ccx, ccy)
40691         };
40692         Triangle.perpendicularBisector = function perpendicularBisector (a, b) {
40693           var dx = b.x - a.x;
40694           var dy = b.y - a.y;
40695           var l1 = new HCoordinate(a.x + dx / 2.0, a.y + dy / 2.0, 1.0);
40696           var l2 = new HCoordinate(a.x - dy + dx / 2.0, a.y + dx + dy / 2.0, 1.0);
40697           return new HCoordinate(l1, l2)
40698         };
40699         Triangle.angleBisector = function angleBisector (a, b, c) {
40700           var len0 = b.distance(a);
40701           var len2 = b.distance(c);
40702           var frac = len0 / (len0 + len2);
40703           var dx = c.x - a.x;
40704           var dy = c.y - a.y;
40705           var splitPt = new Coordinate(a.x + frac * dx, a.y + frac * dy);
40706           return splitPt
40707         };
40708         Triangle.area3D = function area3D (a, b, c) {
40709           var ux = b.x - a.x;
40710           var uy = b.y - a.y;
40711           var uz = b.z - a.z;
40712           var vx = c.x - a.x;
40713           var vy = c.y - a.y;
40714           var vz = c.z - a.z;
40715           var crossx = uy * vz - uz * vy;
40716           var crossy = uz * vx - ux * vz;
40717           var crossz = ux * vy - uy * vx;
40718           var absSq = crossx * crossx + crossy * crossy + crossz * crossz;
40719           var area3D = Math.sqrt(absSq) / 2;
40720           return area3D
40721         };
40722         Triangle.centroid = function centroid (a, b, c) {
40723           var x = (a.x + b.x + c.x) / 3;
40724           var y = (a.y + b.y + c.y) / 3;
40725           return new Coordinate(x, y)
40726         };
40727         Triangle.inCentre = function inCentre (a, b, c) {
40728           var len0 = b.distance(c);
40729           var len1 = a.distance(c);
40730           var len2 = a.distance(b);
40731           var circum = len0 + len1 + len2;
40732           var inCentreX = (len0 * a.x + len1 * b.x + len2 * c.x) / circum;
40733           var inCentreY = (len0 * a.y + len1 * b.y + len2 * c.y) / circum;
40734           return new Coordinate(inCentreX, inCentreY)
40735         };
40736
40737         var OffsetCurveSetBuilder = function OffsetCurveSetBuilder () {
40738           this._inputGeom = null;
40739           this._distance = null;
40740           this._curveBuilder = null;
40741           this._curveList = new ArrayList();
40742           var inputGeom = arguments[0];
40743           var distance = arguments[1];
40744           var curveBuilder = arguments[2];
40745           this._inputGeom = inputGeom;
40746           this._distance = distance;
40747           this._curveBuilder = curveBuilder;
40748         };
40749         OffsetCurveSetBuilder.prototype.addPoint = function addPoint (p) {
40750           if (this._distance <= 0.0) { return null }
40751           var coord = p.getCoordinates();
40752           var curve = this._curveBuilder.getLineCurve(coord, this._distance);
40753           this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);
40754         };
40755         OffsetCurveSetBuilder.prototype.addPolygon = function addPolygon (p) {
40756             var this$1 = this;
40757
40758           var offsetDistance = this._distance;
40759           var offsetSide = Position.LEFT;
40760           if (this._distance < 0.0) {
40761             offsetDistance = -this._distance;
40762             offsetSide = Position.RIGHT;
40763           }
40764           var shell = p.getExteriorRing();
40765           var shellCoord = CoordinateArrays.removeRepeatedPoints(shell.getCoordinates());
40766           if (this._distance < 0.0 && this.isErodedCompletely(shell, this._distance)) { return null }
40767           if (this._distance <= 0.0 && shellCoord.length < 3) { return null }
40768           this.addPolygonRing(shellCoord, offsetDistance, offsetSide, Location.EXTERIOR, Location.INTERIOR);
40769           for (var i = 0; i < p.getNumInteriorRing(); i++) {
40770             var hole = p.getInteriorRingN(i);
40771             var holeCoord = CoordinateArrays.removeRepeatedPoints(hole.getCoordinates());
40772             if (this$1._distance > 0.0 && this$1.isErodedCompletely(hole, -this$1._distance)) { continue }
40773             this$1.addPolygonRing(holeCoord, offsetDistance, Position.opposite(offsetSide), Location.INTERIOR, Location.EXTERIOR);
40774           }
40775         };
40776         OffsetCurveSetBuilder.prototype.isTriangleErodedCompletely = function isTriangleErodedCompletely (triangleCoord, bufferDistance) {
40777           var tri = new Triangle(triangleCoord[0], triangleCoord[1], triangleCoord[2]);
40778           var inCentre = tri.inCentre();
40779           var distToCentre = CGAlgorithms.distancePointLine(inCentre, tri.p0, tri.p1);
40780           return distToCentre < Math.abs(bufferDistance)
40781         };
40782         OffsetCurveSetBuilder.prototype.addLineString = function addLineString (line) {
40783           if (this._distance <= 0.0 && !this._curveBuilder.getBufferParameters().isSingleSided()) { return null }
40784           var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());
40785           var curve = this._curveBuilder.getLineCurve(coord, this._distance);
40786           this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);
40787         };
40788         OffsetCurveSetBuilder.prototype.addCurve = function addCurve (coord, leftLoc, rightLoc) {
40789           if (coord === null || coord.length < 2) { return null }
40790           var e = new NodedSegmentString(coord, new Label(0, Location.BOUNDARY, leftLoc, rightLoc));
40791           this._curveList.add(e);
40792         };
40793         OffsetCurveSetBuilder.prototype.getCurves = function getCurves () {
40794           this.add(this._inputGeom);
40795           return this._curveList
40796         };
40797         OffsetCurveSetBuilder.prototype.addPolygonRing = function addPolygonRing (coord, offsetDistance, side, cwLeftLoc, cwRightLoc) {
40798           if (offsetDistance === 0.0 && coord.length < LinearRing.MINIMUM_VALID_SIZE) { return null }
40799           var leftLoc = cwLeftLoc;
40800           var rightLoc = cwRightLoc;
40801           if (coord.length >= LinearRing.MINIMUM_VALID_SIZE && CGAlgorithms.isCCW(coord)) {
40802             leftLoc = cwRightLoc;
40803             rightLoc = cwLeftLoc;
40804             side = Position.opposite(side);
40805           }
40806           var curve = this._curveBuilder.getRingCurve(coord, side, offsetDistance);
40807           this.addCurve(curve, leftLoc, rightLoc);
40808         };
40809         OffsetCurveSetBuilder.prototype.add = function add (g) {
40810           if (g.isEmpty()) { return null }
40811           if (g instanceof Polygon) { this.addPolygon(g); }
40812           else if (g instanceof LineString) { this.addLineString(g); }
40813           else if (g instanceof Point) { this.addPoint(g); }
40814           else if (g instanceof MultiPoint) { this.addCollection(g); }
40815           else if (g instanceof MultiLineString) { this.addCollection(g); }
40816           else if (g instanceof MultiPolygon) { this.addCollection(g); }
40817           else if (g instanceof GeometryCollection) { this.addCollection(g); }
40818           // else throw new UnsupportedOperationException(g.getClass().getName())
40819         };
40820         OffsetCurveSetBuilder.prototype.isErodedCompletely = function isErodedCompletely (ring, bufferDistance) {
40821           var ringCoord = ring.getCoordinates();
40822           // const minDiam = 0.0
40823           if (ringCoord.length < 4) { return bufferDistance < 0 }
40824           if (ringCoord.length === 4) { return this.isTriangleErodedCompletely(ringCoord, bufferDistance) }
40825           var env = ring.getEnvelopeInternal();
40826           var envMinDimension = Math.min(env.getHeight(), env.getWidth());
40827           if (bufferDistance < 0.0 && 2 * Math.abs(bufferDistance) > envMinDimension) { return true }
40828           return false
40829         };
40830         OffsetCurveSetBuilder.prototype.addCollection = function addCollection (gc) {
40831             var this$1 = this;
40832
40833           for (var i = 0; i < gc.getNumGeometries(); i++) {
40834             var g = gc.getGeometryN(i);
40835             this$1.add(g);
40836           }
40837         };
40838         OffsetCurveSetBuilder.prototype.interfaces_ = function interfaces_ () {
40839           return []
40840         };
40841         OffsetCurveSetBuilder.prototype.getClass = function getClass () {
40842           return OffsetCurveSetBuilder
40843         };
40844
40845         var PointOnGeometryLocator = function PointOnGeometryLocator () {};
40846
40847         PointOnGeometryLocator.prototype.locate = function locate (p) {};
40848         PointOnGeometryLocator.prototype.interfaces_ = function interfaces_ () {
40849           return []
40850         };
40851         PointOnGeometryLocator.prototype.getClass = function getClass () {
40852           return PointOnGeometryLocator
40853         };
40854
40855         var GeometryCollectionIterator = function GeometryCollectionIterator () {
40856           this._parent = null;
40857           this._atStart = null;
40858           this._max = null;
40859           this._index = null;
40860           this._subcollectionIterator = null;
40861           var parent = arguments[0];
40862           this._parent = parent;
40863           this._atStart = true;
40864           this._index = 0;
40865           this._max = parent.getNumGeometries();
40866         };
40867         GeometryCollectionIterator.prototype.next = function next () {
40868           if (this._atStart) {
40869             this._atStart = false;
40870             if (GeometryCollectionIterator.isAtomic(this._parent)) { this._index++; }
40871             return this._parent
40872           }
40873           if (this._subcollectionIterator !== null) {
40874             if (this._subcollectionIterator.hasNext()) {
40875               return this._subcollectionIterator.next()
40876             } else {
40877               this._subcollectionIterator = null;
40878             }
40879           }
40880           if (this._index >= this._max) {
40881             throw new NoSuchElementException()
40882           }
40883           var obj = this._parent.getGeometryN(this._index++);
40884           if (obj instanceof GeometryCollection) {
40885             this._subcollectionIterator = new GeometryCollectionIterator(obj);
40886             return this._subcollectionIterator.next()
40887           }
40888           return obj
40889         };
40890         GeometryCollectionIterator.prototype.remove = function remove () {
40891           throw new Error(this.getClass().getName())
40892         };
40893         GeometryCollectionIterator.prototype.hasNext = function hasNext () {
40894           if (this._atStart) {
40895             return true
40896           }
40897           if (this._subcollectionIterator !== null) {
40898             if (this._subcollectionIterator.hasNext()) {
40899               return true
40900             }
40901             this._subcollectionIterator = null;
40902           }
40903           if (this._index >= this._max) {
40904             return false
40905           }
40906           return true
40907         };
40908         GeometryCollectionIterator.prototype.interfaces_ = function interfaces_ () {
40909           return [Iterator$1]
40910         };
40911         GeometryCollectionIterator.prototype.getClass = function getClass () {
40912           return GeometryCollectionIterator
40913         };
40914         GeometryCollectionIterator.isAtomic = function isAtomic (geom) {
40915           return !(geom instanceof GeometryCollection)
40916         };
40917
40918         var SimplePointInAreaLocator = function SimplePointInAreaLocator () {
40919           this._geom = null;
40920           var geom = arguments[0];
40921           this._geom = geom;
40922         };
40923         SimplePointInAreaLocator.prototype.locate = function locate (p) {
40924           return SimplePointInAreaLocator.locate(p, this._geom)
40925         };
40926         SimplePointInAreaLocator.prototype.interfaces_ = function interfaces_ () {
40927           return [PointOnGeometryLocator]
40928         };
40929         SimplePointInAreaLocator.prototype.getClass = function getClass () {
40930           return SimplePointInAreaLocator
40931         };
40932         SimplePointInAreaLocator.isPointInRing = function isPointInRing (p, ring) {
40933           if (!ring.getEnvelopeInternal().intersects(p)) { return false }
40934           return CGAlgorithms.isPointInRing(p, ring.getCoordinates())
40935         };
40936         SimplePointInAreaLocator.containsPointInPolygon = function containsPointInPolygon (p, poly) {
40937           if (poly.isEmpty()) { return false }
40938           var shell = poly.getExteriorRing();
40939           if (!SimplePointInAreaLocator.isPointInRing(p, shell)) { return false }
40940           for (var i = 0; i < poly.getNumInteriorRing(); i++) {
40941             var hole = poly.getInteriorRingN(i);
40942             if (SimplePointInAreaLocator.isPointInRing(p, hole)) { return false }
40943           }
40944           return true
40945         };
40946         SimplePointInAreaLocator.containsPoint = function containsPoint (p, geom) {
40947           if (geom instanceof Polygon) {
40948             return SimplePointInAreaLocator.containsPointInPolygon(p, geom)
40949           } else if (geom instanceof GeometryCollection) {
40950             var geomi = new GeometryCollectionIterator(geom);
40951             while (geomi.hasNext()) {
40952               var g2 = geomi.next();
40953               if (g2 !== geom) { if (SimplePointInAreaLocator.containsPoint(p, g2)) { return true } }
40954             }
40955           }
40956           return false
40957         };
40958         SimplePointInAreaLocator.locate = function locate (p, geom) {
40959           if (geom.isEmpty()) { return Location.EXTERIOR }
40960           if (SimplePointInAreaLocator.containsPoint(p, geom)) { return Location.INTERIOR }
40961           return Location.EXTERIOR
40962         };
40963
40964         var EdgeEndStar = function EdgeEndStar () {
40965           this._edgeMap = new TreeMap();
40966           this._edgeList = null;
40967           this._ptInAreaLocation = [Location.NONE, Location.NONE];
40968         };
40969         EdgeEndStar.prototype.getNextCW = function getNextCW (ee) {
40970           this.getEdges();
40971           var i = this._edgeList.indexOf(ee);
40972           var iNextCW = i - 1;
40973           if (i === 0) { iNextCW = this._edgeList.size() - 1; }
40974           return this._edgeList.get(iNextCW)
40975         };
40976         EdgeEndStar.prototype.propagateSideLabels = function propagateSideLabels (geomIndex) {
40977           var startLoc = Location.NONE;
40978           for (var it = this.iterator(); it.hasNext();) {
40979             var e = it.next();
40980             var label = e.getLabel();
40981             if (label.isArea(geomIndex) && label.getLocation(geomIndex, Position.LEFT) !== Location.NONE) { startLoc = label.getLocation(geomIndex, Position.LEFT); }
40982           }
40983           if (startLoc === Location.NONE) { return null }
40984           var currLoc = startLoc;
40985           for (var it$1 = this.iterator(); it$1.hasNext();) {
40986             var e$1 = it$1.next();
40987             var label$1 = e$1.getLabel();
40988             if (label$1.getLocation(geomIndex, Position.ON) === Location.NONE) { label$1.setLocation(geomIndex, Position.ON, currLoc); }
40989             if (label$1.isArea(geomIndex)) {
40990               var leftLoc = label$1.getLocation(geomIndex, Position.LEFT);
40991               var rightLoc = label$1.getLocation(geomIndex, Position.RIGHT);
40992               if (rightLoc !== Location.NONE) {
40993                 if (rightLoc !== currLoc) { throw new TopologyException('side location conflict', e$1.getCoordinate()) }
40994                 if (leftLoc === Location.NONE) {
40995                   Assert.shouldNeverReachHere('found single null side (at ' + e$1.getCoordinate() + ')');
40996                 }
40997                 currLoc = leftLoc;
40998               } else {
40999                 Assert.isTrue(label$1.getLocation(geomIndex, Position.LEFT) === Location.NONE, 'found single null side');
41000                 label$1.setLocation(geomIndex, Position.RIGHT, currLoc);
41001                 label$1.setLocation(geomIndex, Position.LEFT, currLoc);
41002               }
41003             }
41004           }
41005         };
41006         EdgeEndStar.prototype.getCoordinate = function getCoordinate () {
41007           var it = this.iterator();
41008           if (!it.hasNext()) { return null }
41009           var e = it.next();
41010           return e.getCoordinate()
41011         };
41012         EdgeEndStar.prototype.print = function print (out) {
41013           System.out.println('EdgeEndStar:   ' + this.getCoordinate());
41014           for (var it = this.iterator(); it.hasNext();) {
41015             var e = it.next();
41016             e.print(out);
41017           }
41018         };
41019         EdgeEndStar.prototype.isAreaLabelsConsistent = function isAreaLabelsConsistent (geomGraph) {
41020           this.computeEdgeEndLabels(geomGraph.getBoundaryNodeRule());
41021           return this.checkAreaLabelsConsistent(0)
41022         };
41023         EdgeEndStar.prototype.checkAreaLabelsConsistent = function checkAreaLabelsConsistent (geomIndex) {
41024           var edges = this.getEdges();
41025           if (edges.size() <= 0) { return true }
41026           var lastEdgeIndex = edges.size() - 1;
41027           var startLabel = edges.get(lastEdgeIndex).getLabel();
41028           var startLoc = startLabel.getLocation(geomIndex, Position.LEFT);
41029           Assert.isTrue(startLoc !== Location.NONE, 'Found unlabelled area edge');
41030           var currLoc = startLoc;
41031           for (var it = this.iterator(); it.hasNext();) {
41032             var e = it.next();
41033             var label = e.getLabel();
41034             Assert.isTrue(label.isArea(geomIndex), 'Found non-area edge');
41035             var leftLoc = label.getLocation(geomIndex, Position.LEFT);
41036             var rightLoc = label.getLocation(geomIndex, Position.RIGHT);
41037             if (leftLoc === rightLoc) {
41038               return false
41039             }
41040             if (rightLoc !== currLoc) {
41041               return false
41042             }
41043             currLoc = leftLoc;
41044           }
41045           return true
41046         };
41047         EdgeEndStar.prototype.findIndex = function findIndex (eSearch) {
41048             var this$1 = this;
41049
41050           this.iterator();
41051           for (var i = 0; i < this._edgeList.size(); i++) {
41052             var e = this$1._edgeList.get(i);
41053             if (e === eSearch) { return i }
41054           }
41055           return -1
41056         };
41057         EdgeEndStar.prototype.iterator = function iterator () {
41058           return this.getEdges().iterator()
41059         };
41060         EdgeEndStar.prototype.getEdges = function getEdges () {
41061           if (this._edgeList === null) {
41062             this._edgeList = new ArrayList(this._edgeMap.values());
41063           }
41064           return this._edgeList
41065         };
41066         EdgeEndStar.prototype.getLocation = function getLocation (geomIndex, p, geom) {
41067           if (this._ptInAreaLocation[geomIndex] === Location.NONE) {
41068             this._ptInAreaLocation[geomIndex] = SimplePointInAreaLocator.locate(p, geom[geomIndex].getGeometry());
41069           }
41070           return this._ptInAreaLocation[geomIndex]
41071         };
41072         EdgeEndStar.prototype.toString = function toString () {
41073           var buf = new StringBuffer();
41074           buf.append('EdgeEndStar:   ' + this.getCoordinate());
41075           buf.append('\n');
41076           for (var it = this.iterator(); it.hasNext();) {
41077             var e = it.next();
41078             buf.append(e);
41079             buf.append('\n');
41080           }
41081           return buf.toString()
41082         };
41083         EdgeEndStar.prototype.computeEdgeEndLabels = function computeEdgeEndLabels (boundaryNodeRule) {
41084           for (var it = this.iterator(); it.hasNext();) {
41085             var ee = it.next();
41086             ee.computeLabel(boundaryNodeRule);
41087           }
41088         };
41089         EdgeEndStar.prototype.computeLabelling = function computeLabelling (geomGraph) {
41090             var this$1 = this;
41091
41092           this.computeEdgeEndLabels(geomGraph[0].getBoundaryNodeRule());
41093           this.propagateSideLabels(0);
41094           this.propagateSideLabels(1);
41095           var hasDimensionalCollapseEdge = [false, false];
41096           for (var it = this.iterator(); it.hasNext();) {
41097             var e = it.next();
41098             var label = e.getLabel();
41099             for (var geomi = 0; geomi < 2; geomi++) {
41100               if (label.isLine(geomi) && label.getLocation(geomi) === Location.BOUNDARY) { hasDimensionalCollapseEdge[geomi] = true; }
41101             }
41102           }
41103           for (var it$1 = this.iterator(); it$1.hasNext();) {
41104             var e$1 = it$1.next();
41105             var label$1 = e$1.getLabel();
41106             for (var geomi$1 = 0; geomi$1 < 2; geomi$1++) {
41107               if (label$1.isAnyNull(geomi$1)) {
41108                 var loc = Location.NONE;
41109                 if (hasDimensionalCollapseEdge[geomi$1]) {
41110                   loc = Location.EXTERIOR;
41111                 } else {
41112                   var p = e$1.getCoordinate();
41113                   loc = this$1.getLocation(geomi$1, p, geomGraph);
41114                 }
41115                 label$1.setAllLocationsIfNull(geomi$1, loc);
41116               }
41117             }
41118           }
41119         };
41120         EdgeEndStar.prototype.getDegree = function getDegree () {
41121           return this._edgeMap.size()
41122         };
41123         EdgeEndStar.prototype.insertEdgeEnd = function insertEdgeEnd (e, obj) {
41124           this._edgeMap.put(e, obj);
41125           this._edgeList = null;
41126         };
41127         EdgeEndStar.prototype.interfaces_ = function interfaces_ () {
41128           return []
41129         };
41130         EdgeEndStar.prototype.getClass = function getClass () {
41131           return EdgeEndStar
41132         };
41133
41134         var DirectedEdgeStar = (function (EdgeEndStar$$1) {
41135           function DirectedEdgeStar () {
41136             EdgeEndStar$$1.call(this);
41137             this._resultAreaEdgeList = null;
41138             this._label = null;
41139             this._SCANNING_FOR_INCOMING = 1;
41140             this._LINKING_TO_OUTGOING = 2;
41141           }
41142
41143           if ( EdgeEndStar$$1 ) { DirectedEdgeStar.__proto__ = EdgeEndStar$$1; }
41144           DirectedEdgeStar.prototype = Object.create( EdgeEndStar$$1 && EdgeEndStar$$1.prototype );
41145           DirectedEdgeStar.prototype.constructor = DirectedEdgeStar;
41146           DirectedEdgeStar.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {
41147             var this$1 = this;
41148
41149             this.getResultAreaEdges();
41150             var firstOut = null;
41151             var incoming = null;
41152             var state = this._SCANNING_FOR_INCOMING;
41153             for (var i = 0; i < this._resultAreaEdgeList.size(); i++) {
41154               var nextOut = this$1._resultAreaEdgeList.get(i);
41155               var nextIn = nextOut.getSym();
41156               if (!nextOut.getLabel().isArea()) { continue }
41157               if (firstOut === null && nextOut.isInResult()) { firstOut = nextOut; }
41158               switch (state) {
41159                 case this$1._SCANNING_FOR_INCOMING:
41160                   if (!nextIn.isInResult()) { continue }
41161                   incoming = nextIn;
41162                   state = this$1._LINKING_TO_OUTGOING;
41163                   break
41164                 case this$1._LINKING_TO_OUTGOING:
41165                   if (!nextOut.isInResult()) { continue }
41166                   incoming.setNext(nextOut);
41167                   state = this$1._SCANNING_FOR_INCOMING;
41168                   break
41169               }
41170             }
41171             if (state === this._LINKING_TO_OUTGOING) {
41172               if (firstOut === null) { throw new TopologyException('no outgoing dirEdge found', this.getCoordinate()) }
41173               Assert.isTrue(firstOut.isInResult(), 'unable to link last incoming dirEdge');
41174               incoming.setNext(firstOut);
41175             }
41176           };
41177           DirectedEdgeStar.prototype.insert = function insert (ee) {
41178             var de = ee;
41179             this.insertEdgeEnd(de, de);
41180           };
41181           DirectedEdgeStar.prototype.getRightmostEdge = function getRightmostEdge () {
41182             var edges = this.getEdges();
41183             var size = edges.size();
41184             if (size < 1) { return null }
41185             var de0 = edges.get(0);
41186             if (size === 1) { return de0 }
41187             var deLast = edges.get(size - 1);
41188             var quad0 = de0.getQuadrant();
41189             var quad1 = deLast.getQuadrant();
41190             if (Quadrant.isNorthern(quad0) && Quadrant.isNorthern(quad1)) { return de0; } else if (!Quadrant.isNorthern(quad0) && !Quadrant.isNorthern(quad1)) { return deLast; } else {
41191               // const nonHorizontalEdge = null
41192               if (de0.getDy() !== 0) { return de0; } else if (deLast.getDy() !== 0) { return deLast }
41193             }
41194             Assert.shouldNeverReachHere('found two horizontal edges incident on node');
41195             return null
41196           };
41197           DirectedEdgeStar.prototype.print = function print (out) {
41198             System.out.println('DirectedEdgeStar: ' + this.getCoordinate());
41199             for (var it = this.iterator(); it.hasNext();) {
41200               var de = it.next();
41201               out.print('out ');
41202               de.print(out);
41203               out.println();
41204               out.print('in ');
41205               de.getSym().print(out);
41206               out.println();
41207             }
41208           };
41209           DirectedEdgeStar.prototype.getResultAreaEdges = function getResultAreaEdges () {
41210             var this$1 = this;
41211
41212             if (this._resultAreaEdgeList !== null) { return this._resultAreaEdgeList }
41213             this._resultAreaEdgeList = new ArrayList();
41214             for (var it = this.iterator(); it.hasNext();) {
41215               var de = it.next();
41216               if (de.isInResult() || de.getSym().isInResult()) { this$1._resultAreaEdgeList.add(de); }
41217             }
41218             return this._resultAreaEdgeList
41219           };
41220           DirectedEdgeStar.prototype.updateLabelling = function updateLabelling (nodeLabel) {
41221             for (var it = this.iterator(); it.hasNext();) {
41222               var de = it.next();
41223               var label = de.getLabel();
41224               label.setAllLocationsIfNull(0, nodeLabel.getLocation(0));
41225               label.setAllLocationsIfNull(1, nodeLabel.getLocation(1));
41226             }
41227           };
41228           DirectedEdgeStar.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {
41229             var this$1 = this;
41230
41231             this.getEdges();
41232             var prevOut = null;
41233             var firstIn = null;
41234             for (var i = this._edgeList.size() - 1; i >= 0; i--) {
41235               var nextOut = this$1._edgeList.get(i);
41236               var nextIn = nextOut.getSym();
41237               if (firstIn === null) { firstIn = nextIn; }
41238               if (prevOut !== null) { nextIn.setNext(prevOut); }
41239               prevOut = nextOut;
41240             }
41241             firstIn.setNext(prevOut);
41242           };
41243           DirectedEdgeStar.prototype.computeDepths = function computeDepths () {
41244             var this$1 = this;
41245
41246             if (arguments.length === 1) {
41247               var de = arguments[0];
41248               var edgeIndex = this.findIndex(de);
41249               // const label = de.getLabel()
41250               var startDepth = de.getDepth(Position.LEFT);
41251               var targetLastDepth = de.getDepth(Position.RIGHT);
41252               var nextDepth = this.computeDepths(edgeIndex + 1, this._edgeList.size(), startDepth);
41253               var lastDepth = this.computeDepths(0, edgeIndex, nextDepth);
41254               if (lastDepth !== targetLastDepth) { throw new TopologyException('depth mismatch at ' + de.getCoordinate()) }
41255             } else if (arguments.length === 3) {
41256               var startIndex = arguments[0];
41257               var endIndex = arguments[1];
41258               var startDepth$1 = arguments[2];
41259               var currDepth = startDepth$1;
41260               for (var i = startIndex; i < endIndex; i++) {
41261                 var nextDe = this$1._edgeList.get(i);
41262                 // const label = nextDe.getLabel()
41263                 nextDe.setEdgeDepths(Position.RIGHT, currDepth);
41264                 currDepth = nextDe.getDepth(Position.LEFT);
41265               }
41266               return currDepth
41267             }
41268           };
41269           DirectedEdgeStar.prototype.mergeSymLabels = function mergeSymLabels () {
41270             for (var it = this.iterator(); it.hasNext();) {
41271               var de = it.next();
41272               var label = de.getLabel();
41273               label.merge(de.getSym().getLabel());
41274             }
41275           };
41276           DirectedEdgeStar.prototype.linkMinimalDirectedEdges = function linkMinimalDirectedEdges (er) {
41277             var this$1 = this;
41278
41279             var firstOut = null;
41280             var incoming = null;
41281             var state = this._SCANNING_FOR_INCOMING;
41282             for (var i = this._resultAreaEdgeList.size() - 1; i >= 0; i--) {
41283               var nextOut = this$1._resultAreaEdgeList.get(i);
41284               var nextIn = nextOut.getSym();
41285               if (firstOut === null && nextOut.getEdgeRing() === er) { firstOut = nextOut; }
41286               switch (state) {
41287                 case this$1._SCANNING_FOR_INCOMING:
41288                   if (nextIn.getEdgeRing() !== er) { continue }
41289                   incoming = nextIn;
41290                   state = this$1._LINKING_TO_OUTGOING;
41291                   break
41292                 case this$1._LINKING_TO_OUTGOING:
41293                   if (nextOut.getEdgeRing() !== er) { continue }
41294                   incoming.setNextMin(nextOut);
41295                   state = this$1._SCANNING_FOR_INCOMING;
41296                   break
41297               }
41298             }
41299             if (state === this._LINKING_TO_OUTGOING) {
41300               Assert.isTrue(firstOut !== null, 'found null for first outgoing dirEdge');
41301               Assert.isTrue(firstOut.getEdgeRing() === er, 'unable to link last incoming dirEdge');
41302               incoming.setNextMin(firstOut);
41303             }
41304           };
41305           DirectedEdgeStar.prototype.getOutgoingDegree = function getOutgoingDegree () {
41306             if (arguments.length === 0) {
41307               var degree = 0;
41308               for (var it = this.iterator(); it.hasNext();) {
41309                 var de = it.next();
41310                 if (de.isInResult()) { degree++; }
41311               }
41312               return degree
41313             } else if (arguments.length === 1) {
41314               var er = arguments[0];
41315               var degree$1 = 0;
41316               for (var it$1 = this.iterator(); it$1.hasNext();) {
41317                 var de$1 = it$1.next();
41318                 if (de$1.getEdgeRing() === er) { degree$1++; }
41319               }
41320               return degree$1
41321             }
41322           };
41323           DirectedEdgeStar.prototype.getLabel = function getLabel () {
41324             return this._label
41325           };
41326           DirectedEdgeStar.prototype.findCoveredLineEdges = function findCoveredLineEdges () {
41327             var startLoc = Location.NONE;
41328             for (var it = this.iterator(); it.hasNext();) {
41329               var nextOut = it.next();
41330               var nextIn = nextOut.getSym();
41331               if (!nextOut.isLineEdge()) {
41332                 if (nextOut.isInResult()) {
41333                   startLoc = Location.INTERIOR;
41334                   break
41335                 }
41336                 if (nextIn.isInResult()) {
41337                   startLoc = Location.EXTERIOR;
41338                   break
41339                 }
41340               }
41341             }
41342             if (startLoc === Location.NONE) { return null }
41343             var currLoc = startLoc;
41344             for (var it$1 = this.iterator(); it$1.hasNext();) {
41345               var nextOut$1 = it$1.next();
41346               var nextIn$1 = nextOut$1.getSym();
41347               if (nextOut$1.isLineEdge()) {
41348                 nextOut$1.getEdge().setCovered(currLoc === Location.INTERIOR);
41349               } else {
41350                 if (nextOut$1.isInResult()) { currLoc = Location.EXTERIOR; }
41351                 if (nextIn$1.isInResult()) { currLoc = Location.INTERIOR; }
41352               }
41353             }
41354           };
41355           DirectedEdgeStar.prototype.computeLabelling = function computeLabelling (geom) {
41356             var this$1 = this;
41357
41358             EdgeEndStar$$1.prototype.computeLabelling.call(this, geom);
41359             this._label = new Label(Location.NONE);
41360             for (var it = this.iterator(); it.hasNext();) {
41361               var ee = it.next();
41362               var e = ee.getEdge();
41363               var eLabel = e.getLabel();
41364               for (var i = 0; i < 2; i++) {
41365                 var eLoc = eLabel.getLocation(i);
41366                 if (eLoc === Location.INTERIOR || eLoc === Location.BOUNDARY) { this$1._label.setLocation(i, Location.INTERIOR); }
41367               }
41368             }
41369           };
41370           DirectedEdgeStar.prototype.interfaces_ = function interfaces_ () {
41371             return []
41372           };
41373           DirectedEdgeStar.prototype.getClass = function getClass () {
41374             return DirectedEdgeStar
41375           };
41376
41377           return DirectedEdgeStar;
41378         }(EdgeEndStar));
41379
41380         var OverlayNodeFactory = (function (NodeFactory$$1) {
41381           function OverlayNodeFactory () {
41382             NodeFactory$$1.apply(this, arguments);
41383           }
41384
41385           if ( NodeFactory$$1 ) { OverlayNodeFactory.__proto__ = NodeFactory$$1; }
41386           OverlayNodeFactory.prototype = Object.create( NodeFactory$$1 && NodeFactory$$1.prototype );
41387           OverlayNodeFactory.prototype.constructor = OverlayNodeFactory;
41388
41389           OverlayNodeFactory.prototype.createNode = function createNode (coord) {
41390             return new Node$2(coord, new DirectedEdgeStar())
41391           };
41392           OverlayNodeFactory.prototype.interfaces_ = function interfaces_ () {
41393             return []
41394           };
41395           OverlayNodeFactory.prototype.getClass = function getClass () {
41396             return OverlayNodeFactory
41397           };
41398
41399           return OverlayNodeFactory;
41400         }(NodeFactory));
41401
41402         var OrientedCoordinateArray = function OrientedCoordinateArray () {
41403           this._pts = null;
41404           this._orientation = null;
41405           var pts = arguments[0];
41406           this._pts = pts;
41407           this._orientation = OrientedCoordinateArray.orientation(pts);
41408         };
41409         OrientedCoordinateArray.prototype.compareTo = function compareTo (o1) {
41410           var oca = o1;
41411           var comp = OrientedCoordinateArray.compareOriented(this._pts, this._orientation, oca._pts, oca._orientation);
41412           return comp
41413         };
41414         OrientedCoordinateArray.prototype.interfaces_ = function interfaces_ () {
41415           return [Comparable]
41416         };
41417         OrientedCoordinateArray.prototype.getClass = function getClass () {
41418           return OrientedCoordinateArray
41419         };
41420         OrientedCoordinateArray.orientation = function orientation (pts) {
41421           return CoordinateArrays.increasingDirection(pts) === 1
41422         };
41423         OrientedCoordinateArray.compareOriented = function compareOriented (pts1, orientation1, pts2, orientation2) {
41424           var dir1 = orientation1 ? 1 : -1;
41425           var dir2 = orientation2 ? 1 : -1;
41426           var limit1 = orientation1 ? pts1.length : -1;
41427           var limit2 = orientation2 ? pts2.length : -1;
41428           var i1 = orientation1 ? 0 : pts1.length - 1;
41429           var i2 = orientation2 ? 0 : pts2.length - 1;
41430           // const comp = 0
41431           while (true) {
41432             var compPt = pts1[i1].compareTo(pts2[i2]);
41433             if (compPt !== 0) { return compPt }
41434             i1 += dir1;
41435             i2 += dir2;
41436             var done1 = i1 === limit1;
41437             var done2 = i2 === limit2;
41438             if (done1 && !done2) { return -1 }
41439             if (!done1 && done2) { return 1 }
41440             if (done1 && done2) { return 0 }
41441           }
41442         };
41443
41444         var EdgeList = function EdgeList () {
41445           this._edges = new ArrayList();
41446           this._ocaMap = new TreeMap();
41447         };
41448         EdgeList.prototype.print = function print (out) {
41449             var this$1 = this;
41450
41451           out.print('MULTILINESTRING ( ');
41452           for (var j = 0; j < this._edges.size(); j++) {
41453             var e = this$1._edges.get(j);
41454             if (j > 0) { out.print(','); }
41455             out.print('(');
41456             var pts = e.getCoordinates();
41457             for (var i = 0; i < pts.length; i++) {
41458               if (i > 0) { out.print(','); }
41459               out.print(pts[i].x + ' ' + pts[i].y);
41460             }
41461             out.println(')');
41462           }
41463           out.print(')  ');
41464         };
41465         EdgeList.prototype.addAll = function addAll (edgeColl) {
41466             var this$1 = this;
41467
41468           for (var i = edgeColl.iterator(); i.hasNext();) {
41469             this$1.add(i.next());
41470           }
41471         };
41472         EdgeList.prototype.findEdgeIndex = function findEdgeIndex (e) {
41473             var this$1 = this;
41474
41475           for (var i = 0; i < this._edges.size(); i++) {
41476             if (this$1._edges.get(i).equals(e)) { return i }
41477           }
41478           return -1
41479         };
41480         EdgeList.prototype.iterator = function iterator () {
41481           return this._edges.iterator()
41482         };
41483         EdgeList.prototype.getEdges = function getEdges () {
41484           return this._edges
41485         };
41486         EdgeList.prototype.get = function get (i) {
41487           return this._edges.get(i)
41488         };
41489         EdgeList.prototype.findEqualEdge = function findEqualEdge (e) {
41490           var oca = new OrientedCoordinateArray(e.getCoordinates());
41491           var matchEdge = this._ocaMap.get(oca);
41492           return matchEdge
41493         };
41494         EdgeList.prototype.add = function add (e) {
41495           this._edges.add(e);
41496           var oca = new OrientedCoordinateArray(e.getCoordinates());
41497           this._ocaMap.put(oca, e);
41498         };
41499         EdgeList.prototype.interfaces_ = function interfaces_ () {
41500           return []
41501         };
41502         EdgeList.prototype.getClass = function getClass () {
41503           return EdgeList
41504         };
41505
41506         var SegmentIntersector = function SegmentIntersector () {};
41507
41508         SegmentIntersector.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {};
41509         SegmentIntersector.prototype.isDone = function isDone () {};
41510         SegmentIntersector.prototype.interfaces_ = function interfaces_ () {
41511           return []
41512         };
41513         SegmentIntersector.prototype.getClass = function getClass () {
41514           return SegmentIntersector
41515         };
41516
41517         var IntersectionAdder = function IntersectionAdder () {
41518           this._hasIntersection = false;
41519           this._hasProper = false;
41520           this._hasProperInterior = false;
41521           this._hasInterior = false;
41522           this._properIntersectionPoint = null;
41523           this._li = null;
41524           this._isSelfIntersection = null;
41525           this.numIntersections = 0;
41526           this.numInteriorIntersections = 0;
41527           this.numProperIntersections = 0;
41528           this.numTests = 0;
41529           var li = arguments[0];
41530           this._li = li;
41531         };
41532         IntersectionAdder.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {
41533           if (e0 === e1) {
41534             if (this._li.getIntersectionNum() === 1) {
41535               if (IntersectionAdder.isAdjacentSegments(segIndex0, segIndex1)) { return true }
41536               if (e0.isClosed()) {
41537                 var maxSegIndex = e0.size() - 1;
41538                 if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||
41539                     (segIndex1 === 0 && segIndex0 === maxSegIndex)) {
41540                   return true
41541                 }
41542               }
41543             }
41544           }
41545           return false
41546         };
41547         IntersectionAdder.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {
41548           return this._properIntersectionPoint
41549         };
41550         IntersectionAdder.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {
41551           return this._hasProperInterior
41552         };
41553         IntersectionAdder.prototype.getLineIntersector = function getLineIntersector () {
41554           return this._li
41555         };
41556         IntersectionAdder.prototype.hasProperIntersection = function hasProperIntersection () {
41557           return this._hasProper
41558         };
41559         IntersectionAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
41560           if (e0 === e1 && segIndex0 === segIndex1) { return null }
41561           this.numTests++;
41562           var p00 = e0.getCoordinates()[segIndex0];
41563           var p01 = e0.getCoordinates()[segIndex0 + 1];
41564           var p10 = e1.getCoordinates()[segIndex1];
41565           var p11 = e1.getCoordinates()[segIndex1 + 1];
41566           this._li.computeIntersection(p00, p01, p10, p11);
41567           if (this._li.hasIntersection()) {
41568             this.numIntersections++;
41569             if (this._li.isInteriorIntersection()) {
41570               this.numInteriorIntersections++;
41571               this._hasInterior = true;
41572             }
41573             if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {
41574               this._hasIntersection = true;
41575               e0.addIntersections(this._li, segIndex0, 0);
41576               e1.addIntersections(this._li, segIndex1, 1);
41577               if (this._li.isProper()) {
41578                 this.numProperIntersections++;
41579                 this._hasProper = true;
41580                 this._hasProperInterior = true;
41581               }
41582             }
41583           }
41584         };
41585         IntersectionAdder.prototype.hasIntersection = function hasIntersection () {
41586           return this._hasIntersection
41587         };
41588         IntersectionAdder.prototype.isDone = function isDone () {
41589           return false
41590         };
41591         IntersectionAdder.prototype.hasInteriorIntersection = function hasInteriorIntersection () {
41592           return this._hasInterior
41593         };
41594         IntersectionAdder.prototype.interfaces_ = function interfaces_ () {
41595           return [SegmentIntersector]
41596         };
41597         IntersectionAdder.prototype.getClass = function getClass () {
41598           return IntersectionAdder
41599         };
41600         IntersectionAdder.isAdjacentSegments = function isAdjacentSegments (i1, i2) {
41601           return Math.abs(i1 - i2) === 1
41602         };
41603
41604         var EdgeIntersection = function EdgeIntersection () {
41605           this.coord = null;
41606           this.segmentIndex = null;
41607           this.dist = null;
41608           var coord = arguments[0];
41609           var segmentIndex = arguments[1];
41610           var dist = arguments[2];
41611           this.coord = new Coordinate(coord);
41612           this.segmentIndex = segmentIndex;
41613           this.dist = dist;
41614         };
41615         EdgeIntersection.prototype.getSegmentIndex = function getSegmentIndex () {
41616           return this.segmentIndex
41617         };
41618         EdgeIntersection.prototype.getCoordinate = function getCoordinate () {
41619           return this.coord
41620         };
41621         EdgeIntersection.prototype.print = function print (out) {
41622           out.print(this.coord);
41623           out.print(' seg # = ' + this.segmentIndex);
41624           out.println(' dist = ' + this.dist);
41625         };
41626         EdgeIntersection.prototype.compareTo = function compareTo (obj) {
41627           var other = obj;
41628           return this.compare(other.segmentIndex, other.dist)
41629         };
41630         EdgeIntersection.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {
41631           if (this.segmentIndex === 0 && this.dist === 0.0) { return true }
41632           if (this.segmentIndex === maxSegmentIndex) { return true }
41633           return false
41634         };
41635         EdgeIntersection.prototype.toString = function toString () {
41636           return this.coord + ' seg # = ' + this.segmentIndex + ' dist = ' + this.dist
41637         };
41638         EdgeIntersection.prototype.getDistance = function getDistance () {
41639           return this.dist
41640         };
41641         EdgeIntersection.prototype.compare = function compare (segmentIndex, dist) {
41642           if (this.segmentIndex < segmentIndex) { return -1 }
41643           if (this.segmentIndex > segmentIndex) { return 1 }
41644           if (this.dist < dist) { return -1 }
41645           if (this.dist > dist) { return 1 }
41646           return 0
41647         };
41648         EdgeIntersection.prototype.interfaces_ = function interfaces_ () {
41649           return [Comparable]
41650         };
41651         EdgeIntersection.prototype.getClass = function getClass () {
41652           return EdgeIntersection
41653         };
41654
41655         var EdgeIntersectionList = function EdgeIntersectionList () {
41656           this._nodeMap = new TreeMap();
41657           this.edge = null;
41658           var edge = arguments[0];
41659           this.edge = edge;
41660         };
41661         EdgeIntersectionList.prototype.print = function print (out) {
41662           out.println('Intersections:');
41663           for (var it = this.iterator(); it.hasNext();) {
41664             var ei = it.next();
41665             ei.print(out);
41666           }
41667         };
41668         EdgeIntersectionList.prototype.iterator = function iterator () {
41669           return this._nodeMap.values().iterator()
41670         };
41671         EdgeIntersectionList.prototype.addSplitEdges = function addSplitEdges (edgeList) {
41672             var this$1 = this;
41673
41674           this.addEndpoints();
41675           var it = this.iterator();
41676           var eiPrev = it.next();
41677           while (it.hasNext()) {
41678             var ei = it.next();
41679             var newEdge = this$1.createSplitEdge(eiPrev, ei);
41680             edgeList.add(newEdge);
41681             eiPrev = ei;
41682           }
41683         };
41684         EdgeIntersectionList.prototype.addEndpoints = function addEndpoints () {
41685           var maxSegIndex = this.edge.pts.length - 1;
41686           this.add(this.edge.pts[0], 0, 0.0);
41687           this.add(this.edge.pts[maxSegIndex], maxSegIndex, 0.0);
41688         };
41689         EdgeIntersectionList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {
41690             var this$1 = this;
41691
41692           var npts = ei1.segmentIndex - ei0.segmentIndex + 2;
41693           var lastSegStartPt = this.edge.pts[ei1.segmentIndex];
41694           var useIntPt1 = ei1.dist > 0.0 || !ei1.coord.equals2D(lastSegStartPt);
41695           if (!useIntPt1) {
41696             npts--;
41697           }
41698           var pts = new Array(npts).fill(null);
41699           var ipt = 0;
41700           pts[ipt++] = new Coordinate(ei0.coord);
41701           for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
41702             pts[ipt++] = this$1.edge.pts[i];
41703           }
41704           if (useIntPt1) { pts[ipt] = ei1.coord; }
41705           return new Edge(pts, new Label(this.edge._label))
41706         };
41707         EdgeIntersectionList.prototype.add = function add (intPt, segmentIndex, dist) {
41708           var eiNew = new EdgeIntersection(intPt, segmentIndex, dist);
41709           var ei = this._nodeMap.get(eiNew);
41710           if (ei !== null) {
41711             return ei
41712           }
41713           this._nodeMap.put(eiNew, eiNew);
41714           return eiNew
41715         };
41716         EdgeIntersectionList.prototype.isIntersection = function isIntersection (pt) {
41717           for (var it = this.iterator(); it.hasNext();) {
41718             var ei = it.next();
41719             if (ei.coord.equals(pt)) { return true }
41720           }
41721           return false
41722         };
41723         EdgeIntersectionList.prototype.interfaces_ = function interfaces_ () {
41724           return []
41725         };
41726         EdgeIntersectionList.prototype.getClass = function getClass () {
41727           return EdgeIntersectionList
41728         };
41729
41730         var MonotoneChainIndexer = function MonotoneChainIndexer () {};
41731
41732         MonotoneChainIndexer.prototype.getChainStartIndices = function getChainStartIndices (pts) {
41733             var this$1 = this;
41734
41735           var start = 0;
41736           var startIndexList = new ArrayList();
41737           startIndexList.add(new Integer(start));
41738           do {
41739             var last = this$1.findChainEnd(pts, start);
41740             startIndexList.add(new Integer(last));
41741             start = last;
41742           } while (start < pts.length - 1)
41743           var startIndex = MonotoneChainIndexer.toIntArray(startIndexList);
41744           return startIndex
41745         };
41746         MonotoneChainIndexer.prototype.findChainEnd = function findChainEnd (pts, start) {
41747           var chainQuad = Quadrant.quadrant(pts[start], pts[start + 1]);
41748           var last = start + 1;
41749           while (last < pts.length) {
41750             var quad = Quadrant.quadrant(pts[last - 1], pts[last]);
41751             if (quad !== chainQuad) { break }
41752             last++;
41753           }
41754           return last - 1
41755         };
41756         MonotoneChainIndexer.prototype.interfaces_ = function interfaces_ () {
41757           return []
41758         };
41759         MonotoneChainIndexer.prototype.getClass = function getClass () {
41760           return MonotoneChainIndexer
41761         };
41762         MonotoneChainIndexer.toIntArray = function toIntArray (list) {
41763           var array = new Array(list.size()).fill(null);
41764           for (var i = 0; i < array.length; i++) {
41765             array[i] = list.get(i).intValue();
41766           }
41767           return array
41768         };
41769
41770         var MonotoneChainEdge = function MonotoneChainEdge () {
41771           this.e = null;
41772           this.pts = null;
41773           this.startIndex = null;
41774           this.env1 = new Envelope();
41775           this.env2 = new Envelope();
41776           var e = arguments[0];
41777           this.e = e;
41778           this.pts = e.getCoordinates();
41779           var mcb = new MonotoneChainIndexer();
41780           this.startIndex = mcb.getChainStartIndices(this.pts);
41781         };
41782         MonotoneChainEdge.prototype.getCoordinates = function getCoordinates () {
41783           return this.pts
41784         };
41785         MonotoneChainEdge.prototype.getMaxX = function getMaxX (chainIndex) {
41786           var x1 = this.pts[this.startIndex[chainIndex]].x;
41787           var x2 = this.pts[this.startIndex[chainIndex + 1]].x;
41788           return x1 > x2 ? x1 : x2
41789         };
41790         MonotoneChainEdge.prototype.getMinX = function getMinX (chainIndex) {
41791           var x1 = this.pts[this.startIndex[chainIndex]].x;
41792           var x2 = this.pts[this.startIndex[chainIndex + 1]].x;
41793           return x1 < x2 ? x1 : x2
41794         };
41795         MonotoneChainEdge.prototype.computeIntersectsForChain = function computeIntersectsForChain () {
41796           if (arguments.length === 4) {
41797             var chainIndex0 = arguments[0];
41798             var mce = arguments[1];
41799             var chainIndex1 = arguments[2];
41800             var si = arguments[3];
41801             this.computeIntersectsForChain(this.startIndex[chainIndex0], this.startIndex[chainIndex0 + 1], mce, mce.startIndex[chainIndex1], mce.startIndex[chainIndex1 + 1], si);
41802           } else if (arguments.length === 6) {
41803             var start0 = arguments[0];
41804             var end0 = arguments[1];
41805             var mce$1 = arguments[2];
41806             var start1 = arguments[3];
41807             var end1 = arguments[4];
41808             var ei = arguments[5];
41809             var p00 = this.pts[start0];
41810             var p01 = this.pts[end0];
41811             var p10 = mce$1.pts[start1];
41812             var p11 = mce$1.pts[end1];
41813             if (end0 - start0 === 1 && end1 - start1 === 1) {
41814               ei.addIntersections(this.e, start0, mce$1.e, start1);
41815               return null
41816             }
41817             this.env1.init(p00, p01);
41818             this.env2.init(p10, p11);
41819             if (!this.env1.intersects(this.env2)) { return null }
41820             var mid0 = Math.trunc((start0 + end0) / 2);
41821             var mid1 = Math.trunc((start1 + end1) / 2);
41822             if (start0 < mid0) {
41823               if (start1 < mid1) { this.computeIntersectsForChain(start0, mid0, mce$1, start1, mid1, ei); }
41824               if (mid1 < end1) { this.computeIntersectsForChain(start0, mid0, mce$1, mid1, end1, ei); }
41825             }
41826             if (mid0 < end0) {
41827               if (start1 < mid1) { this.computeIntersectsForChain(mid0, end0, mce$1, start1, mid1, ei); }
41828               if (mid1 < end1) { this.computeIntersectsForChain(mid0, end0, mce$1, mid1, end1, ei); }
41829             }
41830           }
41831         };
41832         MonotoneChainEdge.prototype.getStartIndexes = function getStartIndexes () {
41833           return this.startIndex
41834         };
41835         MonotoneChainEdge.prototype.computeIntersects = function computeIntersects (mce, si) {
41836             var this$1 = this;
41837
41838           for (var i = 0; i < this.startIndex.length - 1; i++) {
41839             for (var j = 0; j < mce.startIndex.length - 1; j++) {
41840               this$1.computeIntersectsForChain(i, mce, j, si);
41841             }
41842           }
41843         };
41844         MonotoneChainEdge.prototype.interfaces_ = function interfaces_ () {
41845           return []
41846         };
41847         MonotoneChainEdge.prototype.getClass = function getClass () {
41848           return MonotoneChainEdge
41849         };
41850
41851         var Depth = function Depth () {
41852           var this$1 = this;
41853
41854           this._depth = Array(2).fill().map(function () { return Array(3); });
41855           for (var i = 0; i < 2; i++) {
41856             for (var j = 0; j < 3; j++) {
41857               this$1._depth[i][j] = Depth.NULL_VALUE;
41858             }
41859           }
41860         };
41861
41862         var staticAccessors$31 = { NULL_VALUE: { configurable: true } };
41863         Depth.prototype.getDepth = function getDepth (geomIndex, posIndex) {
41864           return this._depth[geomIndex][posIndex]
41865         };
41866         Depth.prototype.setDepth = function setDepth (geomIndex, posIndex, depthValue) {
41867           this._depth[geomIndex][posIndex] = depthValue;
41868         };
41869         Depth.prototype.isNull = function isNull () {
41870             var this$1 = this;
41871
41872           if (arguments.length === 0) {
41873             for (var i = 0; i < 2; i++) {
41874               for (var j = 0; j < 3; j++) {
41875                 if (this$1._depth[i][j] !== Depth.NULL_VALUE) { return false }
41876               }
41877             }
41878             return true
41879           } else if (arguments.length === 1) {
41880             var geomIndex = arguments[0];
41881             return this._depth[geomIndex][1] === Depth.NULL_VALUE
41882           } else if (arguments.length === 2) {
41883             var geomIndex$1 = arguments[0];
41884             var posIndex = arguments[1];
41885             return this._depth[geomIndex$1][posIndex] === Depth.NULL_VALUE
41886           }
41887         };
41888         Depth.prototype.normalize = function normalize () {
41889             var this$1 = this;
41890
41891           for (var i = 0; i < 2; i++) {
41892             if (!this$1.isNull(i)) {
41893               var minDepth = this$1._depth[i][1];
41894               if (this$1._depth[i][2] < minDepth) { minDepth = this$1._depth[i][2]; }
41895               if (minDepth < 0) { minDepth = 0; }
41896               for (var j = 1; j < 3; j++) {
41897                 var newValue = 0;
41898                 if (this$1._depth[i][j] > minDepth) { newValue = 1; }
41899                 this$1._depth[i][j] = newValue;
41900               }
41901             }
41902           }
41903         };
41904         Depth.prototype.getDelta = function getDelta (geomIndex) {
41905           return this._depth[geomIndex][Position.RIGHT] - this._depth[geomIndex][Position.LEFT]
41906         };
41907         Depth.prototype.getLocation = function getLocation (geomIndex, posIndex) {
41908           if (this._depth[geomIndex][posIndex] <= 0) { return Location.EXTERIOR }
41909           return Location.INTERIOR
41910         };
41911         Depth.prototype.toString = function toString () {
41912           return 'A: ' + this._depth[0][1] + ',' + this._depth[0][2] + ' B: ' + this._depth[1][1] + ',' + this._depth[1][2]
41913         };
41914         Depth.prototype.add = function add () {
41915             var this$1 = this;
41916
41917           if (arguments.length === 1) {
41918             var lbl = arguments[0];
41919             for (var i = 0; i < 2; i++) {
41920               for (var j = 1; j < 3; j++) {
41921                 var loc = lbl.getLocation(i, j);
41922                 if (loc === Location.EXTERIOR || loc === Location.INTERIOR) {
41923                   if (this$1.isNull(i, j)) {
41924                     this$1._depth[i][j] = Depth.depthAtLocation(loc);
41925                   } else { this$1._depth[i][j] += Depth.depthAtLocation(loc); }
41926                 }
41927               }
41928             }
41929           } else if (arguments.length === 3) {
41930             var geomIndex = arguments[0];
41931             var posIndex = arguments[1];
41932             var location = arguments[2];
41933             if (location === Location.INTERIOR) { this._depth[geomIndex][posIndex]++; }
41934           }
41935         };
41936         Depth.prototype.interfaces_ = function interfaces_ () {
41937           return []
41938         };
41939         Depth.prototype.getClass = function getClass () {
41940           return Depth
41941         };
41942         Depth.depthAtLocation = function depthAtLocation (location) {
41943           if (location === Location.EXTERIOR) { return 0 }
41944           if (location === Location.INTERIOR) { return 1 }
41945           return Depth.NULL_VALUE
41946         };
41947         staticAccessors$31.NULL_VALUE.get = function () { return -1 };
41948
41949         Object.defineProperties( Depth, staticAccessors$31 );
41950
41951         var Edge = (function (GraphComponent$$1) {
41952           function Edge () {
41953             GraphComponent$$1.call(this);
41954             this.pts = null;
41955             this._env = null;
41956             this.eiList = new EdgeIntersectionList(this);
41957             this._name = null;
41958             this._mce = null;
41959             this._isIsolated = true;
41960             this._depth = new Depth();
41961             this._depthDelta = 0;
41962             if (arguments.length === 1) {
41963               var pts = arguments[0];
41964               Edge.call(this, pts, null);
41965             } else if (arguments.length === 2) {
41966               var pts$1 = arguments[0];
41967               var label = arguments[1];
41968               this.pts = pts$1;
41969               this._label = label;
41970             }
41971           }
41972
41973           if ( GraphComponent$$1 ) { Edge.__proto__ = GraphComponent$$1; }
41974           Edge.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );
41975           Edge.prototype.constructor = Edge;
41976           Edge.prototype.getDepth = function getDepth () {
41977             return this._depth
41978           };
41979           Edge.prototype.getCollapsedEdge = function getCollapsedEdge () {
41980             var newPts = new Array(2).fill(null);
41981             newPts[0] = this.pts[0];
41982             newPts[1] = this.pts[1];
41983             var newe = new Edge(newPts, Label.toLineLabel(this._label));
41984             return newe
41985           };
41986           Edge.prototype.isIsolated = function isIsolated () {
41987             return this._isIsolated
41988           };
41989           Edge.prototype.getCoordinates = function getCoordinates () {
41990             return this.pts
41991           };
41992           Edge.prototype.setIsolated = function setIsolated (isIsolated) {
41993             this._isIsolated = isIsolated;
41994           };
41995           Edge.prototype.setName = function setName (name) {
41996             this._name = name;
41997           };
41998           Edge.prototype.equals = function equals (o) {
41999             var this$1 = this;
42000
42001             if (!(o instanceof Edge)) { return false }
42002             var e = o;
42003             if (this.pts.length !== e.pts.length) { return false }
42004             var isEqualForward = true;
42005             var isEqualReverse = true;
42006             var iRev = this.pts.length;
42007             for (var i = 0; i < this.pts.length; i++) {
42008               if (!this$1.pts[i].equals2D(e.pts[i])) {
42009                 isEqualForward = false;
42010               }
42011               if (!this$1.pts[i].equals2D(e.pts[--iRev])) {
42012                 isEqualReverse = false;
42013               }
42014               if (!isEqualForward && !isEqualReverse) { return false }
42015             }
42016             return true
42017           };
42018           Edge.prototype.getCoordinate = function getCoordinate () {
42019             if (arguments.length === 0) {
42020               if (this.pts.length > 0) { return this.pts[0] }
42021               return null
42022             } else if (arguments.length === 1) {
42023               var i = arguments[0];
42024               return this.pts[i]
42025             }
42026           };
42027           Edge.prototype.print = function print (out) {
42028             var this$1 = this;
42029
42030             out.print('edge ' + this._name + ': ');
42031             out.print('LINESTRING (');
42032             for (var i = 0; i < this.pts.length; i++) {
42033               if (i > 0) { out.print(','); }
42034               out.print(this$1.pts[i].x + ' ' + this$1.pts[i].y);
42035             }
42036             out.print(')  ' + this._label + ' ' + this._depthDelta);
42037           };
42038           Edge.prototype.computeIM = function computeIM (im) {
42039             Edge.updateIM(this._label, im);
42040           };
42041           Edge.prototype.isCollapsed = function isCollapsed () {
42042             if (!this._label.isArea()) { return false }
42043             if (this.pts.length !== 3) { return false }
42044             if (this.pts[0].equals(this.pts[2])) { return true }
42045             return false
42046           };
42047           Edge.prototype.isClosed = function isClosed () {
42048             return this.pts[0].equals(this.pts[this.pts.length - 1])
42049           };
42050           Edge.prototype.getMaximumSegmentIndex = function getMaximumSegmentIndex () {
42051             return this.pts.length - 1
42052           };
42053           Edge.prototype.getDepthDelta = function getDepthDelta () {
42054             return this._depthDelta
42055           };
42056           Edge.prototype.getNumPoints = function getNumPoints () {
42057             return this.pts.length
42058           };
42059           Edge.prototype.printReverse = function printReverse (out) {
42060             var this$1 = this;
42061
42062             out.print('edge ' + this._name + ': ');
42063             for (var i = this.pts.length - 1; i >= 0; i--) {
42064               out.print(this$1.pts[i] + ' ');
42065             }
42066             out.println('');
42067           };
42068           Edge.prototype.getMonotoneChainEdge = function getMonotoneChainEdge () {
42069             if (this._mce === null) { this._mce = new MonotoneChainEdge(this); }
42070             return this._mce
42071           };
42072           Edge.prototype.getEnvelope = function getEnvelope () {
42073             var this$1 = this;
42074
42075             if (this._env === null) {
42076               this._env = new Envelope();
42077               for (var i = 0; i < this.pts.length; i++) {
42078                 this$1._env.expandToInclude(this$1.pts[i]);
42079               }
42080             }
42081             return this._env
42082           };
42083           Edge.prototype.addIntersection = function addIntersection (li, segmentIndex, geomIndex, intIndex) {
42084             var intPt = new Coordinate(li.getIntersection(intIndex));
42085             var normalizedSegmentIndex = segmentIndex;
42086             var dist = li.getEdgeDistance(geomIndex, intIndex);
42087             var nextSegIndex = normalizedSegmentIndex + 1;
42088             if (nextSegIndex < this.pts.length) {
42089               var nextPt = this.pts[nextSegIndex];
42090               if (intPt.equals2D(nextPt)) {
42091                 normalizedSegmentIndex = nextSegIndex;
42092                 dist = 0.0;
42093               }
42094             }
42095             this.eiList.add(intPt, normalizedSegmentIndex, dist);
42096           };
42097           Edge.prototype.toString = function toString () {
42098             var this$1 = this;
42099
42100             var buf = new StringBuffer();
42101             buf.append('edge ' + this._name + ': ');
42102             buf.append('LINESTRING (');
42103             for (var i = 0; i < this.pts.length; i++) {
42104               if (i > 0) { buf.append(','); }
42105               buf.append(this$1.pts[i].x + ' ' + this$1.pts[i].y);
42106             }
42107             buf.append(')  ' + this._label + ' ' + this._depthDelta);
42108             return buf.toString()
42109           };
42110           Edge.prototype.isPointwiseEqual = function isPointwiseEqual (e) {
42111             var this$1 = this;
42112
42113             if (this.pts.length !== e.pts.length) { return false }
42114             for (var i = 0; i < this.pts.length; i++) {
42115               if (!this$1.pts[i].equals2D(e.pts[i])) {
42116                 return false
42117               }
42118             }
42119             return true
42120           };
42121           Edge.prototype.setDepthDelta = function setDepthDelta (depthDelta) {
42122             this._depthDelta = depthDelta;
42123           };
42124           Edge.prototype.getEdgeIntersectionList = function getEdgeIntersectionList () {
42125             return this.eiList
42126           };
42127           Edge.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {
42128             var this$1 = this;
42129
42130             for (var i = 0; i < li.getIntersectionNum(); i++) {
42131               this$1.addIntersection(li, segmentIndex, geomIndex, i);
42132             }
42133           };
42134           Edge.prototype.interfaces_ = function interfaces_ () {
42135             return []
42136           };
42137           Edge.prototype.getClass = function getClass () {
42138             return Edge
42139           };
42140           Edge.updateIM = function updateIM () {
42141             if (arguments.length === 2) {
42142               var label = arguments[0];
42143               var im = arguments[1];
42144               im.setAtLeastIfValid(label.getLocation(0, Position.ON), label.getLocation(1, Position.ON), 1);
42145               if (label.isArea()) {
42146                 im.setAtLeastIfValid(label.getLocation(0, Position.LEFT), label.getLocation(1, Position.LEFT), 2);
42147                 im.setAtLeastIfValid(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), 2);
42148               }
42149             } else { return GraphComponent$$1.prototype.updateIM.apply(this, arguments) }
42150           };
42151
42152           return Edge;
42153         }(GraphComponent));
42154
42155         var BufferBuilder = function BufferBuilder (bufParams) {
42156           this._workingPrecisionModel = null;
42157           this._workingNoder = null;
42158           this._geomFact = null;
42159           this._graph = null;
42160           this._edgeList = new EdgeList();
42161           this._bufParams = bufParams || null;
42162         };
42163         BufferBuilder.prototype.setWorkingPrecisionModel = function setWorkingPrecisionModel (pm) {
42164           this._workingPrecisionModel = pm;
42165         };
42166         BufferBuilder.prototype.insertUniqueEdge = function insertUniqueEdge (e) {
42167           var existingEdge = this._edgeList.findEqualEdge(e);
42168           if (existingEdge !== null) {
42169             var existingLabel = existingEdge.getLabel();
42170             var labelToMerge = e.getLabel();
42171             if (!existingEdge.isPointwiseEqual(e)) {
42172               labelToMerge = new Label(e.getLabel());
42173               labelToMerge.flip();
42174             }
42175             existingLabel.merge(labelToMerge);
42176             var mergeDelta = BufferBuilder.depthDelta(labelToMerge);
42177             var existingDelta = existingEdge.getDepthDelta();
42178             var newDelta = existingDelta + mergeDelta;
42179             existingEdge.setDepthDelta(newDelta);
42180           } else {
42181             this._edgeList.add(e);
42182             e.setDepthDelta(BufferBuilder.depthDelta(e.getLabel()));
42183           }
42184         };
42185         BufferBuilder.prototype.buildSubgraphs = function buildSubgraphs (subgraphList, polyBuilder) {
42186           var processedGraphs = new ArrayList();
42187           for (var i = subgraphList.iterator(); i.hasNext();) {
42188             var subgraph = i.next();
42189             var p = subgraph.getRightmostCoordinate();
42190             var locater = new SubgraphDepthLocater(processedGraphs);
42191             var outsideDepth = locater.getDepth(p);
42192             subgraph.computeDepth(outsideDepth);
42193             subgraph.findResultEdges();
42194             processedGraphs.add(subgraph);
42195             polyBuilder.add(subgraph.getDirectedEdges(), subgraph.getNodes());
42196           }
42197         };
42198         BufferBuilder.prototype.createSubgraphs = function createSubgraphs (graph) {
42199           var subgraphList = new ArrayList();
42200           for (var i = graph.getNodes().iterator(); i.hasNext();) {
42201             var node = i.next();
42202             if (!node.isVisited()) {
42203               var subgraph = new BufferSubgraph();
42204               subgraph.create(node);
42205               subgraphList.add(subgraph);
42206             }
42207           }
42208           Collections.sort(subgraphList, Collections.reverseOrder());
42209           return subgraphList
42210         };
42211         BufferBuilder.prototype.createEmptyResultGeometry = function createEmptyResultGeometry () {
42212           var emptyGeom = this._geomFact.createPolygon();
42213           return emptyGeom
42214         };
42215         BufferBuilder.prototype.getNoder = function getNoder (precisionModel) {
42216           if (this._workingNoder !== null) { return this._workingNoder }
42217           var noder = new MCIndexNoder();
42218           var li = new RobustLineIntersector();
42219           li.setPrecisionModel(precisionModel);
42220           noder.setSegmentIntersector(new IntersectionAdder(li));
42221           return noder
42222         };
42223         BufferBuilder.prototype.buffer = function buffer (g, distance) {
42224           var precisionModel = this._workingPrecisionModel;
42225           if (precisionModel === null) { precisionModel = g.getPrecisionModel(); }
42226           this._geomFact = g.getFactory();
42227           var curveBuilder = new OffsetCurveBuilder(precisionModel, this._bufParams);
42228           var curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder);
42229           var bufferSegStrList = curveSetBuilder.getCurves();
42230           if (bufferSegStrList.size() <= 0) {
42231             return this.createEmptyResultGeometry()
42232           }
42233           this.computeNodedEdges(bufferSegStrList, precisionModel);
42234           this._graph = new PlanarGraph(new OverlayNodeFactory());
42235           this._graph.addEdges(this._edgeList.getEdges());
42236           var subgraphList = this.createSubgraphs(this._graph);
42237           var polyBuilder = new PolygonBuilder(this._geomFact);
42238           this.buildSubgraphs(subgraphList, polyBuilder);
42239           var resultPolyList = polyBuilder.getPolygons();
42240           if (resultPolyList.size() <= 0) {
42241             return this.createEmptyResultGeometry()
42242           }
42243           var resultGeom = this._geomFact.buildGeometry(resultPolyList);
42244           return resultGeom
42245         };
42246         BufferBuilder.prototype.computeNodedEdges = function computeNodedEdges (bufferSegStrList, precisionModel) {
42247             var this$1 = this;
42248
42249           var noder = this.getNoder(precisionModel);
42250           noder.computeNodes(bufferSegStrList);
42251           var nodedSegStrings = noder.getNodedSubstrings();
42252           for (var i = nodedSegStrings.iterator(); i.hasNext();) {
42253             var segStr = i.next();
42254             var pts = segStr.getCoordinates();
42255             if (pts.length === 2 && pts[0].equals2D(pts[1])) { continue }
42256             var oldLabel = segStr.getData();
42257             var edge = new Edge(segStr.getCoordinates(), new Label(oldLabel));
42258             this$1.insertUniqueEdge(edge);
42259           }
42260         };
42261         BufferBuilder.prototype.setNoder = function setNoder (noder) {
42262           this._workingNoder = noder;
42263         };
42264         BufferBuilder.prototype.interfaces_ = function interfaces_ () {
42265           return []
42266         };
42267         BufferBuilder.prototype.getClass = function getClass () {
42268           return BufferBuilder
42269         };
42270         BufferBuilder.depthDelta = function depthDelta (label) {
42271           var lLoc = label.getLocation(0, Position.LEFT);
42272           var rLoc = label.getLocation(0, Position.RIGHT);
42273           if (lLoc === Location.INTERIOR && rLoc === Location.EXTERIOR) { return 1; } else if (lLoc === Location.EXTERIOR && rLoc === Location.INTERIOR) { return -1 }
42274           return 0
42275         };
42276         BufferBuilder.convertSegStrings = function convertSegStrings (it) {
42277           var fact = new GeometryFactory();
42278           var lines = new ArrayList();
42279           while (it.hasNext()) {
42280             var ss = it.next();
42281             var line = fact.createLineString(ss.getCoordinates());
42282             lines.add(line);
42283           }
42284           return fact.buildGeometry(lines)
42285         };
42286
42287         var ScaledNoder = function ScaledNoder () {
42288           this._noder = null;
42289           this._scaleFactor = null;
42290           this._offsetX = null;
42291           this._offsetY = null;
42292           this._isScaled = false;
42293           if (arguments.length === 2) {
42294             var noder = arguments[0];
42295             var scaleFactor = arguments[1];
42296             this._noder = noder;
42297             this._scaleFactor = scaleFactor;
42298             this._offsetX = 0.0;
42299             this._offsetY = 0.0;
42300             this._isScaled = !this.isIntegerPrecision();
42301           } else if (arguments.length === 4) {
42302             var noder$1 = arguments[0];
42303             var scaleFactor$1 = arguments[1];
42304             var offsetX = arguments[2];
42305             var offsetY = arguments[3];
42306             this._noder = noder$1;
42307             this._scaleFactor = scaleFactor$1;
42308             this._offsetX = offsetX;
42309             this._offsetY = offsetY;
42310             this._isScaled = !this.isIntegerPrecision();
42311           }
42312         };
42313         ScaledNoder.prototype.rescale = function rescale () {
42314             var this$1 = this;
42315
42316           if (hasInterface(arguments[0], Collection)) {
42317             var segStrings = arguments[0];
42318             for (var i = segStrings.iterator(); i.hasNext();) {
42319               var ss = i.next();
42320               this$1.rescale(ss.getCoordinates());
42321             }
42322           } else if (arguments[0] instanceof Array) {
42323             var pts = arguments[0];
42324             // let p0 = null
42325             // let p1 = null
42326             // if (pts.length === 2) {
42327             // p0 = new Coordinate(pts[0])
42328             // p1 = new Coordinate(pts[1])
42329             // }
42330             for (var i$1 = 0; i$1 < pts.length; i$1++) {
42331               pts[i$1].x = pts[i$1].x / this$1._scaleFactor + this$1._offsetX;
42332               pts[i$1].y = pts[i$1].y / this$1._scaleFactor + this$1._offsetY;
42333             }
42334             if (pts.length === 2 && pts[0].equals2D(pts[1])) {
42335               System.out.println(pts);
42336             }
42337           }
42338         };
42339         ScaledNoder.prototype.scale = function scale () {
42340             var this$1 = this;
42341
42342           if (hasInterface(arguments[0], Collection)) {
42343             var segStrings = arguments[0];
42344             var nodedSegmentStrings = new ArrayList();
42345             for (var i = segStrings.iterator(); i.hasNext();) {
42346               var ss = i.next();
42347               nodedSegmentStrings.add(new NodedSegmentString(this$1.scale(ss.getCoordinates()), ss.getData()));
42348             }
42349             return nodedSegmentStrings
42350           } else if (arguments[0] instanceof Array) {
42351             var pts = arguments[0];
42352             var roundPts = new Array(pts.length).fill(null);
42353             for (var i$1 = 0; i$1 < pts.length; i$1++) {
42354               roundPts[i$1] = new Coordinate(Math.round((pts[i$1].x - this$1._offsetX) * this$1._scaleFactor), Math.round((pts[i$1].y - this$1._offsetY) * this$1._scaleFactor), pts[i$1].z);
42355             }
42356             var roundPtsNoDup = CoordinateArrays.removeRepeatedPoints(roundPts);
42357             return roundPtsNoDup
42358           }
42359         };
42360         ScaledNoder.prototype.isIntegerPrecision = function isIntegerPrecision () {
42361           return this._scaleFactor === 1.0
42362         };
42363         ScaledNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {
42364           var splitSS = this._noder.getNodedSubstrings();
42365           if (this._isScaled) { this.rescale(splitSS); }
42366           return splitSS
42367         };
42368         ScaledNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {
42369           var intSegStrings = inputSegStrings;
42370           if (this._isScaled) { intSegStrings = this.scale(inputSegStrings); }
42371           this._noder.computeNodes(intSegStrings);
42372         };
42373         ScaledNoder.prototype.interfaces_ = function interfaces_ () {
42374           return [Noder]
42375         };
42376         ScaledNoder.prototype.getClass = function getClass () {
42377           return ScaledNoder
42378         };
42379
42380         var NodingValidator = function NodingValidator () {
42381           this._li = new RobustLineIntersector();
42382           this._segStrings = null;
42383           var segStrings = arguments[0];
42384           this._segStrings = segStrings;
42385         };
42386
42387         var staticAccessors$33 = { fact: { configurable: true } };
42388         NodingValidator.prototype.checkEndPtVertexIntersections = function checkEndPtVertexIntersections () {
42389             var this$1 = this;
42390
42391           if (arguments.length === 0) {
42392             for (var i = this._segStrings.iterator(); i.hasNext();) {
42393               var ss = i.next();
42394               var pts = ss.getCoordinates();
42395               this$1.checkEndPtVertexIntersections(pts[0], this$1._segStrings);
42396               this$1.checkEndPtVertexIntersections(pts[pts.length - 1], this$1._segStrings);
42397             }
42398           } else if (arguments.length === 2) {
42399             var testPt = arguments[0];
42400             var segStrings = arguments[1];
42401             for (var i$1 = segStrings.iterator(); i$1.hasNext();) {
42402               var ss$1 = i$1.next();
42403               var pts$1 = ss$1.getCoordinates();
42404               for (var j = 1; j < pts$1.length - 1; j++) {
42405                 if (pts$1[j].equals(testPt)) { throw new RuntimeException('found endpt/interior pt intersection at index ' + j + ' :pt ' + testPt) }
42406               }
42407             }
42408           }
42409         };
42410         NodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {
42411             var this$1 = this;
42412
42413           if (arguments.length === 0) {
42414             for (var i = this._segStrings.iterator(); i.hasNext();) {
42415               var ss0 = i.next();
42416               for (var j = this._segStrings.iterator(); j.hasNext();) {
42417                 var ss1 = j.next();
42418                 this$1.checkInteriorIntersections(ss0, ss1);
42419               }
42420             }
42421           } else if (arguments.length === 2) {
42422             var ss0$1 = arguments[0];
42423             var ss1$1 = arguments[1];
42424             var pts0 = ss0$1.getCoordinates();
42425             var pts1 = ss1$1.getCoordinates();
42426             for (var i0 = 0; i0 < pts0.length - 1; i0++) {
42427               for (var i1 = 0; i1 < pts1.length - 1; i1++) {
42428                 this$1.checkInteriorIntersections(ss0$1, i0, ss1$1, i1);
42429               }
42430             }
42431           } else if (arguments.length === 4) {
42432             var e0 = arguments[0];
42433             var segIndex0 = arguments[1];
42434             var e1 = arguments[2];
42435             var segIndex1 = arguments[3];
42436             if (e0 === e1 && segIndex0 === segIndex1) { return null }
42437             var p00 = e0.getCoordinates()[segIndex0];
42438             var p01 = e0.getCoordinates()[segIndex0 + 1];
42439             var p10 = e1.getCoordinates()[segIndex1];
42440             var p11 = e1.getCoordinates()[segIndex1 + 1];
42441             this._li.computeIntersection(p00, p01, p10, p11);
42442             if (this._li.hasIntersection()) {
42443               if (this._li.isProper() || this.hasInteriorIntersection(this._li, p00, p01) || this.hasInteriorIntersection(this._li, p10, p11)) {
42444                 throw new RuntimeException('found non-noded intersection at ' + p00 + '-' + p01 + ' and ' + p10 + '-' + p11)
42445               }
42446             }
42447           }
42448         };
42449         NodingValidator.prototype.checkValid = function checkValid () {
42450           this.checkEndPtVertexIntersections();
42451           this.checkInteriorIntersections();
42452           this.checkCollapses();
42453         };
42454         NodingValidator.prototype.checkCollapses = function checkCollapses () {
42455             var this$1 = this;
42456
42457           if (arguments.length === 0) {
42458             for (var i = this._segStrings.iterator(); i.hasNext();) {
42459               var ss = i.next();
42460               this$1.checkCollapses(ss);
42461             }
42462           } else if (arguments.length === 1) {
42463             var ss$1 = arguments[0];
42464             var pts = ss$1.getCoordinates();
42465             for (var i$1 = 0; i$1 < pts.length - 2; i$1++) {
42466               this$1.checkCollapse(pts[i$1], pts[i$1 + 1], pts[i$1 + 2]);
42467             }
42468           }
42469         };
42470         NodingValidator.prototype.hasInteriorIntersection = function hasInteriorIntersection (li, p0, p1) {
42471           for (var i = 0; i < li.getIntersectionNum(); i++) {
42472             var intPt = li.getIntersection(i);
42473             if (!(intPt.equals(p0) || intPt.equals(p1))) { return true }
42474           }
42475           return false
42476         };
42477         NodingValidator.prototype.checkCollapse = function checkCollapse (p0, p1, p2) {
42478           if (p0.equals(p2)) { throw new RuntimeException('found non-noded collapse at ' + NodingValidator.fact.createLineString([p0, p1, p2])) }
42479         };
42480         NodingValidator.prototype.interfaces_ = function interfaces_ () {
42481           return []
42482         };
42483         NodingValidator.prototype.getClass = function getClass () {
42484           return NodingValidator
42485         };
42486         staticAccessors$33.fact.get = function () { return new GeometryFactory() };
42487
42488         Object.defineProperties( NodingValidator, staticAccessors$33 );
42489
42490         var HotPixel = function HotPixel () {
42491           this._li = null;
42492           this._pt = null;
42493           this._originalPt = null;
42494           this._ptScaled = null;
42495           this._p0Scaled = null;
42496           this._p1Scaled = null;
42497           this._scaleFactor = null;
42498           this._minx = null;
42499           this._maxx = null;
42500           this._miny = null;
42501           this._maxy = null;
42502           this._corner = new Array(4).fill(null);
42503           this._safeEnv = null;
42504           var pt = arguments[0];
42505           var scaleFactor = arguments[1];
42506           var li = arguments[2];
42507           this._originalPt = pt;
42508           this._pt = pt;
42509           this._scaleFactor = scaleFactor;
42510           this._li = li;
42511           if (scaleFactor <= 0) { throw new IllegalArgumentException('Scale factor must be non-zero') }
42512           if (scaleFactor !== 1.0) {
42513             this._pt = new Coordinate(this.scale(pt.x), this.scale(pt.y));
42514             this._p0Scaled = new Coordinate();
42515             this._p1Scaled = new Coordinate();
42516           }
42517           this.initCorners(this._pt);
42518         };
42519
42520         var staticAccessors$34 = { SAFE_ENV_EXPANSION_FACTOR: { configurable: true } };
42521         HotPixel.prototype.intersectsScaled = function intersectsScaled (p0, p1) {
42522           var segMinx = Math.min(p0.x, p1.x);
42523           var segMaxx = Math.max(p0.x, p1.x);
42524           var segMiny = Math.min(p0.y, p1.y);
42525           var segMaxy = Math.max(p0.y, p1.y);
42526           var isOutsidePixelEnv = this._maxx < segMinx || this._minx > segMaxx || this._maxy < segMiny || this._miny > segMaxy;
42527           if (isOutsidePixelEnv) { return false }
42528           var intersects = this.intersectsToleranceSquare(p0, p1);
42529           Assert.isTrue(!(isOutsidePixelEnv && intersects), 'Found bad envelope test');
42530           return intersects
42531         };
42532         HotPixel.prototype.initCorners = function initCorners (pt) {
42533           var tolerance = 0.5;
42534           this._minx = pt.x - tolerance;
42535           this._maxx = pt.x + tolerance;
42536           this._miny = pt.y - tolerance;
42537           this._maxy = pt.y + tolerance;
42538           this._corner[0] = new Coordinate(this._maxx, this._maxy);
42539           this._corner[1] = new Coordinate(this._minx, this._maxy);
42540           this._corner[2] = new Coordinate(this._minx, this._miny);
42541           this._corner[3] = new Coordinate(this._maxx, this._miny);
42542         };
42543         HotPixel.prototype.intersects = function intersects (p0, p1) {
42544           if (this._scaleFactor === 1.0) { return this.intersectsScaled(p0, p1) }
42545           this.copyScaled(p0, this._p0Scaled);
42546           this.copyScaled(p1, this._p1Scaled);
42547           return this.intersectsScaled(this._p0Scaled, this._p1Scaled)
42548         };
42549         HotPixel.prototype.scale = function scale (val) {
42550           return Math.round(val * this._scaleFactor)
42551         };
42552         HotPixel.prototype.getCoordinate = function getCoordinate () {
42553           return this._originalPt
42554         };
42555         HotPixel.prototype.copyScaled = function copyScaled (p, pScaled) {
42556           pScaled.x = this.scale(p.x);
42557           pScaled.y = this.scale(p.y);
42558         };
42559         HotPixel.prototype.getSafeEnvelope = function getSafeEnvelope () {
42560           if (this._safeEnv === null) {
42561             var safeTolerance = HotPixel.SAFE_ENV_EXPANSION_FACTOR / this._scaleFactor;
42562             this._safeEnv = new Envelope(this._originalPt.x - safeTolerance, this._originalPt.x + safeTolerance, this._originalPt.y - safeTolerance, this._originalPt.y + safeTolerance);
42563           }
42564           return this._safeEnv
42565         };
42566         HotPixel.prototype.intersectsPixelClosure = function intersectsPixelClosure (p0, p1) {
42567           this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);
42568           if (this._li.hasIntersection()) { return true }
42569           this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);
42570           if (this._li.hasIntersection()) { return true }
42571           this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);
42572           if (this._li.hasIntersection()) { return true }
42573           this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);
42574           if (this._li.hasIntersection()) { return true }
42575           return false
42576         };
42577         HotPixel.prototype.intersectsToleranceSquare = function intersectsToleranceSquare (p0, p1) {
42578           var intersectsLeft = false;
42579           var intersectsBottom = false;
42580           this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);
42581           if (this._li.isProper()) { return true }
42582           this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);
42583           if (this._li.isProper()) { return true }
42584           if (this._li.hasIntersection()) { intersectsLeft = true; }
42585           this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);
42586           if (this._li.isProper()) { return true }
42587           if (this._li.hasIntersection()) { intersectsBottom = true; }
42588           this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);
42589           if (this._li.isProper()) { return true }
42590           if (intersectsLeft && intersectsBottom) { return true }
42591           if (p0.equals(this._pt)) { return true }
42592           if (p1.equals(this._pt)) { return true }
42593           return false
42594         };
42595         HotPixel.prototype.addSnappedNode = function addSnappedNode (segStr, segIndex) {
42596           var p0 = segStr.getCoordinate(segIndex);
42597           var p1 = segStr.getCoordinate(segIndex + 1);
42598           if (this.intersects(p0, p1)) {
42599             segStr.addIntersection(this.getCoordinate(), segIndex);
42600             return true
42601           }
42602           return false
42603         };
42604         HotPixel.prototype.interfaces_ = function interfaces_ () {
42605           return []
42606         };
42607         HotPixel.prototype.getClass = function getClass () {
42608           return HotPixel
42609         };
42610         staticAccessors$34.SAFE_ENV_EXPANSION_FACTOR.get = function () { return 0.75 };
42611
42612         Object.defineProperties( HotPixel, staticAccessors$34 );
42613
42614         var MonotoneChainSelectAction = function MonotoneChainSelectAction () {
42615           this.tempEnv1 = new Envelope();
42616           this.selectedSegment = new LineSegment();
42617         };
42618         MonotoneChainSelectAction.prototype.select = function select () {
42619           if (arguments.length === 1) ; else if (arguments.length === 2) {
42620             var mc = arguments[0];
42621             var startIndex = arguments[1];
42622             mc.getLineSegment(startIndex, this.selectedSegment);
42623             this.select(this.selectedSegment);
42624           }
42625         };
42626         MonotoneChainSelectAction.prototype.interfaces_ = function interfaces_ () {
42627           return []
42628         };
42629         MonotoneChainSelectAction.prototype.getClass = function getClass () {
42630           return MonotoneChainSelectAction
42631         };
42632
42633         var MCIndexPointSnapper = function MCIndexPointSnapper () {
42634           this._index = null;
42635           var index = arguments[0];
42636           this._index = index;
42637         };
42638
42639         var staticAccessors$35 = { HotPixelSnapAction: { configurable: true } };
42640         MCIndexPointSnapper.prototype.snap = function snap () {
42641           if (arguments.length === 1) {
42642             var hotPixel = arguments[0];
42643             return this.snap(hotPixel, null, -1)
42644           } else if (arguments.length === 3) {
42645             var hotPixel$1 = arguments[0];
42646             var parentEdge = arguments[1];
42647             var hotPixelVertexIndex = arguments[2];
42648             var pixelEnv = hotPixel$1.getSafeEnvelope();
42649             var hotPixelSnapAction = new HotPixelSnapAction(hotPixel$1, parentEdge, hotPixelVertexIndex);
42650             this._index.query(pixelEnv, {
42651               interfaces_: function () {
42652                 return [ItemVisitor]
42653               },
42654               visitItem: function (item) {
42655                 var testChain = item;
42656                 testChain.select(pixelEnv, hotPixelSnapAction);
42657               }
42658             });
42659             return hotPixelSnapAction.isNodeAdded()
42660           }
42661         };
42662         MCIndexPointSnapper.prototype.interfaces_ = function interfaces_ () {
42663           return []
42664         };
42665         MCIndexPointSnapper.prototype.getClass = function getClass () {
42666           return MCIndexPointSnapper
42667         };
42668         staticAccessors$35.HotPixelSnapAction.get = function () { return HotPixelSnapAction };
42669
42670         Object.defineProperties( MCIndexPointSnapper, staticAccessors$35 );
42671
42672         var HotPixelSnapAction = (function (MonotoneChainSelectAction$$1) {
42673           function HotPixelSnapAction () {
42674             MonotoneChainSelectAction$$1.call(this);
42675             this._hotPixel = null;
42676             this._parentEdge = null;
42677             this._hotPixelVertexIndex = null;
42678             this._isNodeAdded = false;
42679             var hotPixel = arguments[0];
42680             var parentEdge = arguments[1];
42681             var hotPixelVertexIndex = arguments[2];
42682             this._hotPixel = hotPixel;
42683             this._parentEdge = parentEdge;
42684             this._hotPixelVertexIndex = hotPixelVertexIndex;
42685           }
42686
42687           if ( MonotoneChainSelectAction$$1 ) { HotPixelSnapAction.__proto__ = MonotoneChainSelectAction$$1; }
42688           HotPixelSnapAction.prototype = Object.create( MonotoneChainSelectAction$$1 && MonotoneChainSelectAction$$1.prototype );
42689           HotPixelSnapAction.prototype.constructor = HotPixelSnapAction;
42690           HotPixelSnapAction.prototype.isNodeAdded = function isNodeAdded () {
42691             return this._isNodeAdded
42692           };
42693           HotPixelSnapAction.prototype.select = function select () {
42694             if (arguments.length === 2) {
42695               var mc = arguments[0];
42696               var startIndex = arguments[1];
42697               var ss = mc.getContext();
42698               if (this._parentEdge !== null) {
42699                 if (ss === this._parentEdge && startIndex === this._hotPixelVertexIndex) { return null }
42700               }
42701               this._isNodeAdded = this._hotPixel.addSnappedNode(ss, startIndex);
42702             } else { return MonotoneChainSelectAction$$1.prototype.select.apply(this, arguments) }
42703           };
42704           HotPixelSnapAction.prototype.interfaces_ = function interfaces_ () {
42705             return []
42706           };
42707           HotPixelSnapAction.prototype.getClass = function getClass () {
42708             return HotPixelSnapAction
42709           };
42710
42711           return HotPixelSnapAction;
42712         }(MonotoneChainSelectAction));
42713
42714         var InteriorIntersectionFinderAdder = function InteriorIntersectionFinderAdder () {
42715           this._li = null;
42716           this._interiorIntersections = null;
42717           var li = arguments[0];
42718           this._li = li;
42719           this._interiorIntersections = new ArrayList();
42720         };
42721         InteriorIntersectionFinderAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
42722             var this$1 = this;
42723
42724           if (e0 === e1 && segIndex0 === segIndex1) { return null }
42725           var p00 = e0.getCoordinates()[segIndex0];
42726           var p01 = e0.getCoordinates()[segIndex0 + 1];
42727           var p10 = e1.getCoordinates()[segIndex1];
42728           var p11 = e1.getCoordinates()[segIndex1 + 1];
42729           this._li.computeIntersection(p00, p01, p10, p11);
42730           if (this._li.hasIntersection()) {
42731             if (this._li.isInteriorIntersection()) {
42732               for (var intIndex = 0; intIndex < this._li.getIntersectionNum(); intIndex++) {
42733                 this$1._interiorIntersections.add(this$1._li.getIntersection(intIndex));
42734               }
42735               e0.addIntersections(this._li, segIndex0, 0);
42736               e1.addIntersections(this._li, segIndex1, 1);
42737             }
42738           }
42739         };
42740         InteriorIntersectionFinderAdder.prototype.isDone = function isDone () {
42741           return false
42742         };
42743         InteriorIntersectionFinderAdder.prototype.getInteriorIntersections = function getInteriorIntersections () {
42744           return this._interiorIntersections
42745         };
42746         InteriorIntersectionFinderAdder.prototype.interfaces_ = function interfaces_ () {
42747           return [SegmentIntersector]
42748         };
42749         InteriorIntersectionFinderAdder.prototype.getClass = function getClass () {
42750           return InteriorIntersectionFinderAdder
42751         };
42752
42753         var MCIndexSnapRounder = function MCIndexSnapRounder () {
42754           this._pm = null;
42755           this._li = null;
42756           this._scaleFactor = null;
42757           this._noder = null;
42758           this._pointSnapper = null;
42759           this._nodedSegStrings = null;
42760           var pm = arguments[0];
42761           this._pm = pm;
42762           this._li = new RobustLineIntersector();
42763           this._li.setPrecisionModel(pm);
42764           this._scaleFactor = pm.getScale();
42765         };
42766         MCIndexSnapRounder.prototype.checkCorrectness = function checkCorrectness (inputSegmentStrings) {
42767           var resultSegStrings = NodedSegmentString.getNodedSubstrings(inputSegmentStrings);
42768           var nv = new NodingValidator(resultSegStrings);
42769           try {
42770             nv.checkValid();
42771           } catch (ex) {
42772             if (ex instanceof Exception) {
42773               ex.printStackTrace();
42774             } else { throw ex }
42775           } finally {}
42776         };
42777         MCIndexSnapRounder.prototype.getNodedSubstrings = function getNodedSubstrings () {
42778           return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)
42779         };
42780         MCIndexSnapRounder.prototype.snapRound = function snapRound (segStrings, li) {
42781           var intersections = this.findInteriorIntersections(segStrings, li);
42782           this.computeIntersectionSnaps(intersections);
42783           this.computeVertexSnaps(segStrings);
42784         };
42785         MCIndexSnapRounder.prototype.findInteriorIntersections = function findInteriorIntersections (segStrings, li) {
42786           var intFinderAdder = new InteriorIntersectionFinderAdder(li);
42787           this._noder.setSegmentIntersector(intFinderAdder);
42788           this._noder.computeNodes(segStrings);
42789           return intFinderAdder.getInteriorIntersections()
42790         };
42791         MCIndexSnapRounder.prototype.computeVertexSnaps = function computeVertexSnaps () {
42792             var this$1 = this;
42793
42794           if (hasInterface(arguments[0], Collection)) {
42795             var edges = arguments[0];
42796             for (var i0 = edges.iterator(); i0.hasNext();) {
42797               var edge0 = i0.next();
42798               this$1.computeVertexSnaps(edge0);
42799             }
42800           } else if (arguments[0] instanceof NodedSegmentString) {
42801             var e = arguments[0];
42802             var pts0 = e.getCoordinates();
42803             for (var i = 0; i < pts0.length; i++) {
42804               var hotPixel = new HotPixel(pts0[i], this$1._scaleFactor, this$1._li);
42805               var isNodeAdded = this$1._pointSnapper.snap(hotPixel, e, i);
42806               if (isNodeAdded) {
42807                 e.addIntersection(pts0[i], i);
42808               }
42809             }
42810           }
42811         };
42812         MCIndexSnapRounder.prototype.computeNodes = function computeNodes (inputSegmentStrings) {
42813           this._nodedSegStrings = inputSegmentStrings;
42814           this._noder = new MCIndexNoder();
42815           this._pointSnapper = new MCIndexPointSnapper(this._noder.getIndex());
42816           this.snapRound(inputSegmentStrings, this._li);
42817         };
42818         MCIndexSnapRounder.prototype.computeIntersectionSnaps = function computeIntersectionSnaps (snapPts) {
42819             var this$1 = this;
42820
42821           for (var it = snapPts.iterator(); it.hasNext();) {
42822             var snapPt = it.next();
42823             var hotPixel = new HotPixel(snapPt, this$1._scaleFactor, this$1._li);
42824             this$1._pointSnapper.snap(hotPixel);
42825           }
42826         };
42827         MCIndexSnapRounder.prototype.interfaces_ = function interfaces_ () {
42828           return [Noder]
42829         };
42830         MCIndexSnapRounder.prototype.getClass = function getClass () {
42831           return MCIndexSnapRounder
42832         };
42833
42834         var BufferOp = function BufferOp () {
42835           this._argGeom = null;
42836           this._distance = null;
42837           this._bufParams = new BufferParameters();
42838           this._resultGeometry = null;
42839           this._saveException = null;
42840           if (arguments.length === 1) {
42841             var g = arguments[0];
42842             this._argGeom = g;
42843           } else if (arguments.length === 2) {
42844             var g$1 = arguments[0];
42845             var bufParams = arguments[1];
42846             this._argGeom = g$1;
42847             this._bufParams = bufParams;
42848           }
42849         };
42850
42851         var staticAccessors$32 = { CAP_ROUND: { configurable: true },CAP_BUTT: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },MAX_PRECISION_DIGITS: { configurable: true } };
42852         BufferOp.prototype.bufferFixedPrecision = function bufferFixedPrecision (fixedPM) {
42853           var noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.getScale());
42854           var bufBuilder = new BufferBuilder(this._bufParams);
42855           bufBuilder.setWorkingPrecisionModel(fixedPM);
42856           bufBuilder.setNoder(noder);
42857           this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);
42858         };
42859         BufferOp.prototype.bufferReducedPrecision = function bufferReducedPrecision () {
42860             var this$1 = this;
42861
42862           if (arguments.length === 0) {
42863             for (var precDigits = BufferOp.MAX_PRECISION_DIGITS; precDigits >= 0; precDigits--) {
42864               try {
42865                 this$1.bufferReducedPrecision(precDigits);
42866               } catch (ex) {
42867                 if (ex instanceof TopologyException) {
42868                   this$1._saveException = ex;
42869                 } else { throw ex }
42870               } finally {}
42871               if (this$1._resultGeometry !== null) { return null }
42872             }
42873             throw this._saveException
42874           } else if (arguments.length === 1) {
42875             var precisionDigits = arguments[0];
42876             var sizeBasedScaleFactor = BufferOp.precisionScaleFactor(this._argGeom, this._distance, precisionDigits);
42877             var fixedPM = new PrecisionModel(sizeBasedScaleFactor);
42878             this.bufferFixedPrecision(fixedPM);
42879           }
42880         };
42881         BufferOp.prototype.computeGeometry = function computeGeometry () {
42882           this.bufferOriginalPrecision();
42883           if (this._resultGeometry !== null) { return null }
42884           var argPM = this._argGeom.getFactory().getPrecisionModel();
42885           if (argPM.getType() === PrecisionModel.FIXED) { this.bufferFixedPrecision(argPM); } else { this.bufferReducedPrecision(); }
42886         };
42887         BufferOp.prototype.setQuadrantSegments = function setQuadrantSegments (quadrantSegments) {
42888           this._bufParams.setQuadrantSegments(quadrantSegments);
42889         };
42890         BufferOp.prototype.bufferOriginalPrecision = function bufferOriginalPrecision () {
42891           try {
42892             var bufBuilder = new BufferBuilder(this._bufParams);
42893             this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);
42894           } catch (ex) {
42895             if (ex instanceof RuntimeException) {
42896               this._saveException = ex;
42897             } else { throw ex }
42898           } finally {}
42899         };
42900         BufferOp.prototype.getResultGeometry = function getResultGeometry (distance) {
42901           this._distance = distance;
42902           this.computeGeometry();
42903           return this._resultGeometry
42904         };
42905         BufferOp.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {
42906           this._bufParams.setEndCapStyle(endCapStyle);
42907         };
42908         BufferOp.prototype.interfaces_ = function interfaces_ () {
42909           return []
42910         };
42911         BufferOp.prototype.getClass = function getClass () {
42912           return BufferOp
42913         };
42914         BufferOp.bufferOp = function bufferOp () {
42915           if (arguments.length === 2) {
42916             var g = arguments[0];
42917             var distance = arguments[1];
42918             var gBuf = new BufferOp(g);
42919             var geomBuf = gBuf.getResultGeometry(distance);
42920             return geomBuf
42921           } else if (arguments.length === 3) {
42922             if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {
42923               var g$1 = arguments[0];
42924               var distance$1 = arguments[1];
42925               var quadrantSegments = arguments[2];
42926               var bufOp = new BufferOp(g$1);
42927               bufOp.setQuadrantSegments(quadrantSegments);
42928               var geomBuf$1 = bufOp.getResultGeometry(distance$1);
42929               return geomBuf$1
42930             } else if (arguments[2] instanceof BufferParameters && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {
42931               var g$2 = arguments[0];
42932               var distance$2 = arguments[1];
42933               var params = arguments[2];
42934               var bufOp$1 = new BufferOp(g$2, params);
42935               var geomBuf$2 = bufOp$1.getResultGeometry(distance$2);
42936               return geomBuf$2
42937             }
42938           } else if (arguments.length === 4) {
42939             var g$3 = arguments[0];
42940             var distance$3 = arguments[1];
42941             var quadrantSegments$1 = arguments[2];
42942             var endCapStyle = arguments[3];
42943             var bufOp$2 = new BufferOp(g$3);
42944             bufOp$2.setQuadrantSegments(quadrantSegments$1);
42945             bufOp$2.setEndCapStyle(endCapStyle);
42946             var geomBuf$3 = bufOp$2.getResultGeometry(distance$3);
42947             return geomBuf$3
42948           }
42949         };
42950         BufferOp.precisionScaleFactor = function precisionScaleFactor (g, distance, maxPrecisionDigits) {
42951           var env = g.getEnvelopeInternal();
42952           var envMax = MathUtil.max(Math.abs(env.getMaxX()), Math.abs(env.getMaxY()), Math.abs(env.getMinX()), Math.abs(env.getMinY()));
42953           var expandByDistance = distance > 0.0 ? distance : 0.0;
42954           var bufEnvMax = envMax + 2 * expandByDistance;
42955           var bufEnvPrecisionDigits = Math.trunc(Math.log(bufEnvMax) / Math.log(10) + 1.0);
42956           var minUnitLog10 = maxPrecisionDigits - bufEnvPrecisionDigits;
42957           var scaleFactor = Math.pow(10.0, minUnitLog10);
42958           return scaleFactor
42959         };
42960         staticAccessors$32.CAP_ROUND.get = function () { return BufferParameters.CAP_ROUND };
42961         staticAccessors$32.CAP_BUTT.get = function () { return BufferParameters.CAP_FLAT };
42962         staticAccessors$32.CAP_FLAT.get = function () { return BufferParameters.CAP_FLAT };
42963         staticAccessors$32.CAP_SQUARE.get = function () { return BufferParameters.CAP_SQUARE };
42964         staticAccessors$32.MAX_PRECISION_DIGITS.get = function () { return 12 };
42965
42966         Object.defineProperties( BufferOp, staticAccessors$32 );
42967
42968         var PointPairDistance = function PointPairDistance () {
42969           this._pt = [new Coordinate(), new Coordinate()];
42970           this._distance = Double.NaN;
42971           this._isNull = true;
42972         };
42973         PointPairDistance.prototype.getCoordinates = function getCoordinates () {
42974           return this._pt
42975         };
42976         PointPairDistance.prototype.getCoordinate = function getCoordinate (i) {
42977           return this._pt[i]
42978         };
42979         PointPairDistance.prototype.setMinimum = function setMinimum () {
42980           if (arguments.length === 1) {
42981             var ptDist = arguments[0];
42982             this.setMinimum(ptDist._pt[0], ptDist._pt[1]);
42983           } else if (arguments.length === 2) {
42984             var p0 = arguments[0];
42985             var p1 = arguments[1];
42986             if (this._isNull) {
42987               this.initialize(p0, p1);
42988               return null
42989             }
42990             var dist = p0.distance(p1);
42991             if (dist < this._distance) { this.initialize(p0, p1, dist); }
42992           }
42993         };
42994         PointPairDistance.prototype.initialize = function initialize () {
42995           if (arguments.length === 0) {
42996             this._isNull = true;
42997           } else if (arguments.length === 2) {
42998             var p0 = arguments[0];
42999             var p1 = arguments[1];
43000             this._pt[0].setCoordinate(p0);
43001             this._pt[1].setCoordinate(p1);
43002             this._distance = p0.distance(p1);
43003             this._isNull = false;
43004           } else if (arguments.length === 3) {
43005             var p0$1 = arguments[0];
43006             var p1$1 = arguments[1];
43007             var distance = arguments[2];
43008             this._pt[0].setCoordinate(p0$1);
43009             this._pt[1].setCoordinate(p1$1);
43010             this._distance = distance;
43011             this._isNull = false;
43012           }
43013         };
43014         PointPairDistance.prototype.getDistance = function getDistance () {
43015           return this._distance
43016         };
43017         PointPairDistance.prototype.setMaximum = function setMaximum () {
43018           if (arguments.length === 1) {
43019             var ptDist = arguments[0];
43020             this.setMaximum(ptDist._pt[0], ptDist._pt[1]);
43021           } else if (arguments.length === 2) {
43022             var p0 = arguments[0];
43023             var p1 = arguments[1];
43024             if (this._isNull) {
43025               this.initialize(p0, p1);
43026               return null
43027             }
43028             var dist = p0.distance(p1);
43029             if (dist > this._distance) { this.initialize(p0, p1, dist); }
43030           }
43031         };
43032         PointPairDistance.prototype.interfaces_ = function interfaces_ () {
43033           return []
43034         };
43035         PointPairDistance.prototype.getClass = function getClass () {
43036           return PointPairDistance
43037         };
43038
43039         var DistanceToPointFinder = function DistanceToPointFinder () {};
43040
43041         DistanceToPointFinder.prototype.interfaces_ = function interfaces_ () {
43042           return []
43043         };
43044         DistanceToPointFinder.prototype.getClass = function getClass () {
43045           return DistanceToPointFinder
43046         };
43047         DistanceToPointFinder.computeDistance = function computeDistance () {
43048           if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {
43049             var line = arguments[0];
43050             var pt = arguments[1];
43051             var ptDist = arguments[2];
43052             var coords = line.getCoordinates();
43053             var tempSegment = new LineSegment();
43054             for (var i = 0; i < coords.length - 1; i++) {
43055               tempSegment.setCoordinates(coords[i], coords[i + 1]);
43056               var closestPt = tempSegment.closestPoint(pt);
43057               ptDist.setMinimum(closestPt, pt);
43058             }
43059           } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {
43060             var poly = arguments[0];
43061             var pt$1 = arguments[1];
43062             var ptDist$1 = arguments[2];
43063             DistanceToPointFinder.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);
43064             for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {
43065               DistanceToPointFinder.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);
43066             }
43067           } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {
43068             var geom = arguments[0];
43069             var pt$2 = arguments[1];
43070             var ptDist$2 = arguments[2];
43071             if (geom instanceof LineString) {
43072               DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);
43073             } else if (geom instanceof Polygon) {
43074               DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);
43075             } else if (geom instanceof GeometryCollection) {
43076               var gc = geom;
43077               for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {
43078                 var g = gc.getGeometryN(i$2);
43079                 DistanceToPointFinder.computeDistance(g, pt$2, ptDist$2);
43080               }
43081             } else {
43082               ptDist$2.setMinimum(geom.getCoordinate(), pt$2);
43083             }
43084           } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {
43085             var segment = arguments[0];
43086             var pt$3 = arguments[1];
43087             var ptDist$3 = arguments[2];
43088             var closestPt$1 = segment.closestPoint(pt$3);
43089             ptDist$3.setMinimum(closestPt$1, pt$3);
43090           }
43091         };
43092
43093         var BufferCurveMaximumDistanceFinder = function BufferCurveMaximumDistanceFinder (inputGeom) {
43094           this._maxPtDist = new PointPairDistance();
43095           this._inputGeom = inputGeom || null;
43096         };
43097
43098         var staticAccessors$36 = { MaxPointDistanceFilter: { configurable: true },MaxMidpointDistanceFilter: { configurable: true } };
43099         BufferCurveMaximumDistanceFinder.prototype.computeMaxMidpointDistance = function computeMaxMidpointDistance (curve) {
43100           var distFilter = new MaxMidpointDistanceFilter(this._inputGeom);
43101           curve.apply(distFilter);
43102           this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());
43103         };
43104         BufferCurveMaximumDistanceFinder.prototype.computeMaxVertexDistance = function computeMaxVertexDistance (curve) {
43105           var distFilter = new MaxPointDistanceFilter(this._inputGeom);
43106           curve.apply(distFilter);
43107           this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());
43108         };
43109         BufferCurveMaximumDistanceFinder.prototype.findDistance = function findDistance (bufferCurve) {
43110           this.computeMaxVertexDistance(bufferCurve);
43111           this.computeMaxMidpointDistance(bufferCurve);
43112           return this._maxPtDist.getDistance()
43113         };
43114         BufferCurveMaximumDistanceFinder.prototype.getDistancePoints = function getDistancePoints () {
43115           return this._maxPtDist
43116         };
43117         BufferCurveMaximumDistanceFinder.prototype.interfaces_ = function interfaces_ () {
43118           return []
43119         };
43120         BufferCurveMaximumDistanceFinder.prototype.getClass = function getClass () {
43121           return BufferCurveMaximumDistanceFinder
43122         };
43123         staticAccessors$36.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter };
43124         staticAccessors$36.MaxMidpointDistanceFilter.get = function () { return MaxMidpointDistanceFilter };
43125
43126         Object.defineProperties( BufferCurveMaximumDistanceFinder, staticAccessors$36 );
43127
43128         var MaxPointDistanceFilter = function MaxPointDistanceFilter (geom) {
43129           this._maxPtDist = new PointPairDistance();
43130           this._minPtDist = new PointPairDistance();
43131           this._geom = geom || null;
43132         };
43133         MaxPointDistanceFilter.prototype.filter = function filter (pt) {
43134           this._minPtDist.initialize();
43135           DistanceToPointFinder.computeDistance(this._geom, pt, this._minPtDist);
43136           this._maxPtDist.setMaximum(this._minPtDist);
43137         };
43138         MaxPointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
43139           return this._maxPtDist
43140         };
43141         MaxPointDistanceFilter.prototype.interfaces_ = function interfaces_ () {
43142           return [CoordinateFilter]
43143         };
43144         MaxPointDistanceFilter.prototype.getClass = function getClass () {
43145           return MaxPointDistanceFilter
43146         };
43147
43148         var MaxMidpointDistanceFilter = function MaxMidpointDistanceFilter (geom) {
43149           this._maxPtDist = new PointPairDistance();
43150           this._minPtDist = new PointPairDistance();
43151           this._geom = geom || null;
43152         };
43153         MaxMidpointDistanceFilter.prototype.filter = function filter (seq, index) {
43154           if (index === 0) { return null }
43155           var p0 = seq.getCoordinate(index - 1);
43156           var p1 = seq.getCoordinate(index);
43157           var midPt = new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2);
43158           this._minPtDist.initialize();
43159           DistanceToPointFinder.computeDistance(this._geom, midPt, this._minPtDist);
43160           this._maxPtDist.setMaximum(this._minPtDist);
43161         };
43162         MaxMidpointDistanceFilter.prototype.isDone = function isDone () {
43163           return false
43164         };
43165         MaxMidpointDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {
43166           return false
43167         };
43168         MaxMidpointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
43169           return this._maxPtDist
43170         };
43171         MaxMidpointDistanceFilter.prototype.interfaces_ = function interfaces_ () {
43172           return [CoordinateSequenceFilter]
43173         };
43174         MaxMidpointDistanceFilter.prototype.getClass = function getClass () {
43175           return MaxMidpointDistanceFilter
43176         };
43177
43178         var PolygonExtracter = function PolygonExtracter (comps) {
43179           this._comps = comps || null;
43180         };
43181         PolygonExtracter.prototype.filter = function filter (geom) {
43182           if (geom instanceof Polygon) { this._comps.add(geom); }
43183         };
43184         PolygonExtracter.prototype.interfaces_ = function interfaces_ () {
43185           return [GeometryFilter]
43186         };
43187         PolygonExtracter.prototype.getClass = function getClass () {
43188           return PolygonExtracter
43189         };
43190         PolygonExtracter.getPolygons = function getPolygons () {
43191           if (arguments.length === 1) {
43192             var geom = arguments[0];
43193             return PolygonExtracter.getPolygons(geom, new ArrayList())
43194           } else if (arguments.length === 2) {
43195             var geom$1 = arguments[0];
43196             var list = arguments[1];
43197             if (geom$1 instanceof Polygon) {
43198               list.add(geom$1);
43199             } else if (geom$1 instanceof GeometryCollection) {
43200               geom$1.apply(new PolygonExtracter(list));
43201             }
43202             return list
43203           }
43204         };
43205
43206         var LinearComponentExtracter = function LinearComponentExtracter () {
43207           this._lines = null;
43208           this._isForcedToLineString = false;
43209           if (arguments.length === 1) {
43210             var lines = arguments[0];
43211             this._lines = lines;
43212           } else if (arguments.length === 2) {
43213             var lines$1 = arguments[0];
43214             var isForcedToLineString = arguments[1];
43215             this._lines = lines$1;
43216             this._isForcedToLineString = isForcedToLineString;
43217           }
43218         };
43219         LinearComponentExtracter.prototype.filter = function filter (geom) {
43220           if (this._isForcedToLineString && geom instanceof LinearRing) {
43221             var line = geom.getFactory().createLineString(geom.getCoordinateSequence());
43222             this._lines.add(line);
43223             return null
43224           }
43225           if (geom instanceof LineString) { this._lines.add(geom); }
43226         };
43227         LinearComponentExtracter.prototype.setForceToLineString = function setForceToLineString (isForcedToLineString) {
43228           this._isForcedToLineString = isForcedToLineString;
43229         };
43230         LinearComponentExtracter.prototype.interfaces_ = function interfaces_ () {
43231           return [GeometryComponentFilter]
43232         };
43233         LinearComponentExtracter.prototype.getClass = function getClass () {
43234           return LinearComponentExtracter
43235         };
43236         LinearComponentExtracter.getGeometry = function getGeometry () {
43237           if (arguments.length === 1) {
43238             var geom = arguments[0];
43239             return geom.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom))
43240           } else if (arguments.length === 2) {
43241             var geom$1 = arguments[0];
43242             var forceToLineString = arguments[1];
43243             return geom$1.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom$1, forceToLineString))
43244           }
43245         };
43246         LinearComponentExtracter.getLines = function getLines () {
43247           if (arguments.length === 1) {
43248             var geom = arguments[0];
43249             return LinearComponentExtracter.getLines(geom, false)
43250           } else if (arguments.length === 2) {
43251             if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection)) {
43252               var geoms = arguments[0];
43253               var lines$1 = arguments[1];
43254               for (var i = geoms.iterator(); i.hasNext();) {
43255                 var g = i.next();
43256                 LinearComponentExtracter.getLines(g, lines$1);
43257               }
43258               return lines$1
43259             } else if (arguments[0] instanceof Geometry && typeof arguments[1] === 'boolean') {
43260               var geom$1 = arguments[0];
43261               var forceToLineString = arguments[1];
43262               var lines = new ArrayList();
43263               geom$1.apply(new LinearComponentExtracter(lines, forceToLineString));
43264               return lines
43265             } else if (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection)) {
43266               var geom$2 = arguments[0];
43267               var lines$2 = arguments[1];
43268               if (geom$2 instanceof LineString) {
43269                 lines$2.add(geom$2);
43270               } else {
43271                 geom$2.apply(new LinearComponentExtracter(lines$2));
43272               }
43273               return lines$2
43274             }
43275           } else if (arguments.length === 3) {
43276             if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection))) {
43277               var geoms$1 = arguments[0];
43278               var lines$3 = arguments[1];
43279               var forceToLineString$1 = arguments[2];
43280               for (var i$1 = geoms$1.iterator(); i$1.hasNext();) {
43281                 var g$1 = i$1.next();
43282                 LinearComponentExtracter.getLines(g$1, lines$3, forceToLineString$1);
43283               }
43284               return lines$3
43285             } else if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection))) {
43286               var geom$3 = arguments[0];
43287               var lines$4 = arguments[1];
43288               var forceToLineString$2 = arguments[2];
43289               geom$3.apply(new LinearComponentExtracter(lines$4, forceToLineString$2));
43290               return lines$4
43291             }
43292           }
43293         };
43294
43295         var PointLocator = function PointLocator () {
43296           this._boundaryRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
43297           this._isIn = null;
43298           this._numBoundaries = null;
43299           if (arguments.length === 0) ; else if (arguments.length === 1) {
43300             var boundaryRule = arguments[0];
43301             if (boundaryRule === null) { throw new IllegalArgumentException('Rule must be non-null') }
43302             this._boundaryRule = boundaryRule;
43303           }
43304         };
43305         PointLocator.prototype.locateInternal = function locateInternal () {
43306             var this$1 = this;
43307
43308           if (arguments[0] instanceof Coordinate && arguments[1] instanceof Polygon) {
43309             var p = arguments[0];
43310             var poly = arguments[1];
43311             if (poly.isEmpty()) { return Location.EXTERIOR }
43312             var shell = poly.getExteriorRing();
43313             var shellLoc = this.locateInPolygonRing(p, shell);
43314             if (shellLoc === Location.EXTERIOR) { return Location.EXTERIOR }
43315             if (shellLoc === Location.BOUNDARY) { return Location.BOUNDARY }
43316             for (var i = 0; i < poly.getNumInteriorRing(); i++) {
43317               var hole = poly.getInteriorRingN(i);
43318               var holeLoc = this$1.locateInPolygonRing(p, hole);
43319               if (holeLoc === Location.INTERIOR) { return Location.EXTERIOR }
43320               if (holeLoc === Location.BOUNDARY) { return Location.BOUNDARY }
43321             }
43322             return Location.INTERIOR
43323           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof LineString) {
43324             var p$1 = arguments[0];
43325             var l = arguments[1];
43326             if (!l.getEnvelopeInternal().intersects(p$1)) { return Location.EXTERIOR }
43327             var pt = l.getCoordinates();
43328             if (!l.isClosed()) {
43329               if (p$1.equals(pt[0]) || p$1.equals(pt[pt.length - 1])) {
43330                 return Location.BOUNDARY
43331               }
43332             }
43333             if (CGAlgorithms.isOnLine(p$1, pt)) { return Location.INTERIOR }
43334             return Location.EXTERIOR
43335           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Point) {
43336             var p$2 = arguments[0];
43337             var pt$1 = arguments[1];
43338             var ptCoord = pt$1.getCoordinate();
43339             if (ptCoord.equals2D(p$2)) { return Location.INTERIOR }
43340             return Location.EXTERIOR
43341           }
43342         };
43343         PointLocator.prototype.locateInPolygonRing = function locateInPolygonRing (p, ring) {
43344           if (!ring.getEnvelopeInternal().intersects(p)) { return Location.EXTERIOR }
43345           return CGAlgorithms.locatePointInRing(p, ring.getCoordinates())
43346         };
43347         PointLocator.prototype.intersects = function intersects (p, geom) {
43348           return this.locate(p, geom) !== Location.EXTERIOR
43349         };
43350         PointLocator.prototype.updateLocationInfo = function updateLocationInfo (loc) {
43351           if (loc === Location.INTERIOR) { this._isIn = true; }
43352           if (loc === Location.BOUNDARY) { this._numBoundaries++; }
43353         };
43354         PointLocator.prototype.computeLocation = function computeLocation (p, geom) {
43355             var this$1 = this;
43356
43357           if (geom instanceof Point) {
43358             this.updateLocationInfo(this.locateInternal(p, geom));
43359           }
43360           if (geom instanceof LineString) {
43361             this.updateLocationInfo(this.locateInternal(p, geom));
43362           } else if (geom instanceof Polygon) {
43363             this.updateLocationInfo(this.locateInternal(p, geom));
43364           } else if (geom instanceof MultiLineString) {
43365             var ml = geom;
43366             for (var i = 0; i < ml.getNumGeometries(); i++) {
43367               var l = ml.getGeometryN(i);
43368               this$1.updateLocationInfo(this$1.locateInternal(p, l));
43369             }
43370           } else if (geom instanceof MultiPolygon) {
43371             var mpoly = geom;
43372             for (var i$1 = 0; i$1 < mpoly.getNumGeometries(); i$1++) {
43373               var poly = mpoly.getGeometryN(i$1);
43374               this$1.updateLocationInfo(this$1.locateInternal(p, poly));
43375             }
43376           } else if (geom instanceof GeometryCollection) {
43377             var geomi = new GeometryCollectionIterator(geom);
43378             while (geomi.hasNext()) {
43379               var g2 = geomi.next();
43380               if (g2 !== geom) { this$1.computeLocation(p, g2); }
43381             }
43382           }
43383         };
43384         PointLocator.prototype.locate = function locate (p, geom) {
43385           if (geom.isEmpty()) { return Location.EXTERIOR }
43386           if (geom instanceof LineString) {
43387             return this.locateInternal(p, geom)
43388           } else if (geom instanceof Polygon) {
43389             return this.locateInternal(p, geom)
43390           }
43391           this._isIn = false;
43392           this._numBoundaries = 0;
43393           this.computeLocation(p, geom);
43394           if (this._boundaryRule.isInBoundary(this._numBoundaries)) { return Location.BOUNDARY }
43395           if (this._numBoundaries > 0 || this._isIn) { return Location.INTERIOR }
43396           return Location.EXTERIOR
43397         };
43398         PointLocator.prototype.interfaces_ = function interfaces_ () {
43399           return []
43400         };
43401         PointLocator.prototype.getClass = function getClass () {
43402           return PointLocator
43403         };
43404
43405         var GeometryLocation = function GeometryLocation () {
43406           this._component = null;
43407           this._segIndex = null;
43408           this._pt = null;
43409           if (arguments.length === 2) {
43410             var component = arguments[0];
43411             var pt = arguments[1];
43412             GeometryLocation.call(this, component, GeometryLocation.INSIDE_AREA, pt);
43413           } else if (arguments.length === 3) {
43414             var component$1 = arguments[0];
43415             var segIndex = arguments[1];
43416             var pt$1 = arguments[2];
43417             this._component = component$1;
43418             this._segIndex = segIndex;
43419             this._pt = pt$1;
43420           }
43421         };
43422
43423         var staticAccessors$38 = { INSIDE_AREA: { configurable: true } };
43424         GeometryLocation.prototype.isInsideArea = function isInsideArea () {
43425           return this._segIndex === GeometryLocation.INSIDE_AREA
43426         };
43427         GeometryLocation.prototype.getCoordinate = function getCoordinate () {
43428           return this._pt
43429         };
43430         GeometryLocation.prototype.getGeometryComponent = function getGeometryComponent () {
43431           return this._component
43432         };
43433         GeometryLocation.prototype.getSegmentIndex = function getSegmentIndex () {
43434           return this._segIndex
43435         };
43436         GeometryLocation.prototype.interfaces_ = function interfaces_ () {
43437           return []
43438         };
43439         GeometryLocation.prototype.getClass = function getClass () {
43440           return GeometryLocation
43441         };
43442         staticAccessors$38.INSIDE_AREA.get = function () { return -1 };
43443
43444         Object.defineProperties( GeometryLocation, staticAccessors$38 );
43445
43446         var PointExtracter = function PointExtracter (pts) {
43447           this._pts = pts || null;
43448         };
43449         PointExtracter.prototype.filter = function filter (geom) {
43450           if (geom instanceof Point) { this._pts.add(geom); }
43451         };
43452         PointExtracter.prototype.interfaces_ = function interfaces_ () {
43453           return [GeometryFilter]
43454         };
43455         PointExtracter.prototype.getClass = function getClass () {
43456           return PointExtracter
43457         };
43458         PointExtracter.getPoints = function getPoints () {
43459           if (arguments.length === 1) {
43460             var geom = arguments[0];
43461             if (geom instanceof Point) {
43462               return Collections.singletonList(geom)
43463             }
43464             return PointExtracter.getPoints(geom, new ArrayList())
43465           } else if (arguments.length === 2) {
43466             var geom$1 = arguments[0];
43467             var list = arguments[1];
43468             if (geom$1 instanceof Point) {
43469               list.add(geom$1);
43470             } else if (geom$1 instanceof GeometryCollection) {
43471               geom$1.apply(new PointExtracter(list));
43472             }
43473             return list
43474           }
43475         };
43476
43477         var ConnectedElementLocationFilter = function ConnectedElementLocationFilter () {
43478           this._locations = null;
43479           var locations = arguments[0];
43480           this._locations = locations;
43481         };
43482         ConnectedElementLocationFilter.prototype.filter = function filter (geom) {
43483           if (geom instanceof Point || geom instanceof LineString || geom instanceof Polygon) { this._locations.add(new GeometryLocation(geom, 0, geom.getCoordinate())); }
43484         };
43485         ConnectedElementLocationFilter.prototype.interfaces_ = function interfaces_ () {
43486           return [GeometryFilter]
43487         };
43488         ConnectedElementLocationFilter.prototype.getClass = function getClass () {
43489           return ConnectedElementLocationFilter
43490         };
43491         ConnectedElementLocationFilter.getLocations = function getLocations (geom) {
43492           var locations = new ArrayList();
43493           geom.apply(new ConnectedElementLocationFilter(locations));
43494           return locations
43495         };
43496
43497         var DistanceOp = function DistanceOp () {
43498           this._geom = null;
43499           this._terminateDistance = 0.0;
43500           this._ptLocator = new PointLocator();
43501           this._minDistanceLocation = null;
43502           this._minDistance = Double.MAX_VALUE;
43503           if (arguments.length === 2) {
43504             var g0 = arguments[0];
43505             var g1 = arguments[1];
43506             this._geom = [g0, g1];
43507             this._terminateDistance = 0.0;
43508           } else if (arguments.length === 3) {
43509             var g0$1 = arguments[0];
43510             var g1$1 = arguments[1];
43511             var terminateDistance = arguments[2];
43512             this._geom = new Array(2).fill(null);
43513             this._geom[0] = g0$1;
43514             this._geom[1] = g1$1;
43515             this._terminateDistance = terminateDistance;
43516           }
43517         };
43518         DistanceOp.prototype.computeContainmentDistance = function computeContainmentDistance () {
43519             var this$1 = this;
43520
43521           if (arguments.length === 0) {
43522             var locPtPoly = new Array(2).fill(null);
43523             this.computeContainmentDistance(0, locPtPoly);
43524             if (this._minDistance <= this._terminateDistance) { return null }
43525             this.computeContainmentDistance(1, locPtPoly);
43526           } else if (arguments.length === 2) {
43527             var polyGeomIndex = arguments[0];
43528             var locPtPoly$1 = arguments[1];
43529             var locationsIndex = 1 - polyGeomIndex;
43530             var polys = PolygonExtracter.getPolygons(this._geom[polyGeomIndex]);
43531             if (polys.size() > 0) {
43532               var insideLocs = ConnectedElementLocationFilter.getLocations(this._geom[locationsIndex]);
43533               this.computeContainmentDistance(insideLocs, polys, locPtPoly$1);
43534               if (this._minDistance <= this._terminateDistance) {
43535                 this._minDistanceLocation[locationsIndex] = locPtPoly$1[0];
43536                 this._minDistanceLocation[polyGeomIndex] = locPtPoly$1[1];
43537                 return null
43538               }
43539             }
43540           } else if (arguments.length === 3) {
43541             if (arguments[2] instanceof Array && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {
43542               var locs = arguments[0];
43543               var polys$1 = arguments[1];
43544               var locPtPoly$2 = arguments[2];
43545               for (var i = 0; i < locs.size(); i++) {
43546                 var loc = locs.get(i);
43547                 for (var j = 0; j < polys$1.size(); j++) {
43548                   this$1.computeContainmentDistance(loc, polys$1.get(j), locPtPoly$2);
43549                   if (this$1._minDistance <= this$1._terminateDistance) { return null }
43550                 }
43551               }
43552             } else if (arguments[2] instanceof Array && (arguments[0] instanceof GeometryLocation && arguments[1] instanceof Polygon)) {
43553               var ptLoc = arguments[0];
43554               var poly = arguments[1];
43555               var locPtPoly$3 = arguments[2];
43556               var pt = ptLoc.getCoordinate();
43557               if (Location.EXTERIOR !== this._ptLocator.locate(pt, poly)) {
43558                 this._minDistance = 0.0;
43559                 locPtPoly$3[0] = ptLoc;
43560                 locPtPoly$3[1] = new GeometryLocation(poly, pt);
43561
43562                 return null
43563               }
43564             }
43565           }
43566         };
43567         DistanceOp.prototype.computeMinDistanceLinesPoints = function computeMinDistanceLinesPoints (lines, points, locGeom) {
43568             var this$1 = this;
43569
43570           for (var i = 0; i < lines.size(); i++) {
43571             var line = lines.get(i);
43572             for (var j = 0; j < points.size(); j++) {
43573               var pt = points.get(j);
43574               this$1.computeMinDistance(line, pt, locGeom);
43575               if (this$1._minDistance <= this$1._terminateDistance) { return null }
43576             }
43577           }
43578         };
43579         DistanceOp.prototype.computeFacetDistance = function computeFacetDistance () {
43580           var locGeom = new Array(2).fill(null);
43581           var lines0 = LinearComponentExtracter.getLines(this._geom[0]);
43582           var lines1 = LinearComponentExtracter.getLines(this._geom[1]);
43583           var pts0 = PointExtracter.getPoints(this._geom[0]);
43584           var pts1 = PointExtracter.getPoints(this._geom[1]);
43585           this.computeMinDistanceLines(lines0, lines1, locGeom);
43586           this.updateMinDistance(locGeom, false);
43587           if (this._minDistance <= this._terminateDistance) { return null }
43588           locGeom[0] = null;
43589           locGeom[1] = null;
43590           this.computeMinDistanceLinesPoints(lines0, pts1, locGeom);
43591           this.updateMinDistance(locGeom, false);
43592           if (this._minDistance <= this._terminateDistance) { return null }
43593           locGeom[0] = null;
43594           locGeom[1] = null;
43595           this.computeMinDistanceLinesPoints(lines1, pts0, locGeom);
43596           this.updateMinDistance(locGeom, true);
43597           if (this._minDistance <= this._terminateDistance) { return null }
43598           locGeom[0] = null;
43599           locGeom[1] = null;
43600           this.computeMinDistancePoints(pts0, pts1, locGeom);
43601           this.updateMinDistance(locGeom, false);
43602         };
43603         DistanceOp.prototype.nearestLocations = function nearestLocations () {
43604           this.computeMinDistance();
43605           return this._minDistanceLocation
43606         };
43607         DistanceOp.prototype.updateMinDistance = function updateMinDistance (locGeom, flip) {
43608           if (locGeom[0] === null) { return null }
43609           if (flip) {
43610             this._minDistanceLocation[0] = locGeom[1];
43611             this._minDistanceLocation[1] = locGeom[0];
43612           } else {
43613             this._minDistanceLocation[0] = locGeom[0];
43614             this._minDistanceLocation[1] = locGeom[1];
43615           }
43616         };
43617         DistanceOp.prototype.nearestPoints = function nearestPoints () {
43618           this.computeMinDistance();
43619           var nearestPts = [this._minDistanceLocation[0].getCoordinate(), this._minDistanceLocation[1].getCoordinate()];
43620           return nearestPts
43621         };
43622         DistanceOp.prototype.computeMinDistance = function computeMinDistance () {
43623             var this$1 = this;
43624
43625           if (arguments.length === 0) {
43626             if (this._minDistanceLocation !== null) { return null }
43627             this._minDistanceLocation = new Array(2).fill(null);
43628             this.computeContainmentDistance();
43629             if (this._minDistance <= this._terminateDistance) { return null }
43630             this.computeFacetDistance();
43631           } else if (arguments.length === 3) {
43632             if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof Point)) {
43633               var line = arguments[0];
43634               var pt = arguments[1];
43635               var locGeom = arguments[2];
43636               if (line.getEnvelopeInternal().distance(pt.getEnvelopeInternal()) > this._minDistance) { return null }
43637               var coord0 = line.getCoordinates();
43638               var coord = pt.getCoordinate();
43639               for (var i = 0; i < coord0.length - 1; i++) {
43640                 var dist = CGAlgorithms.distancePointLine(coord, coord0[i], coord0[i + 1]);
43641                 if (dist < this$1._minDistance) {
43642                   this$1._minDistance = dist;
43643                   var seg = new LineSegment(coord0[i], coord0[i + 1]);
43644                   var segClosestPoint = seg.closestPoint(coord);
43645                   locGeom[0] = new GeometryLocation(line, i, segClosestPoint);
43646                   locGeom[1] = new GeometryLocation(pt, 0, coord);
43647                 }
43648                 if (this$1._minDistance <= this$1._terminateDistance) { return null }
43649               }
43650             } else if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof LineString)) {
43651               var line0 = arguments[0];
43652               var line1 = arguments[1];
43653               var locGeom$1 = arguments[2];
43654               if (line0.getEnvelopeInternal().distance(line1.getEnvelopeInternal()) > this._minDistance) { return null }
43655               var coord0$1 = line0.getCoordinates();
43656               var coord1 = line1.getCoordinates();
43657               for (var i$1 = 0; i$1 < coord0$1.length - 1; i$1++) {
43658                 for (var j = 0; j < coord1.length - 1; j++) {
43659                   var dist$1 = CGAlgorithms.distanceLineLine(coord0$1[i$1], coord0$1[i$1 + 1], coord1[j], coord1[j + 1]);
43660                   if (dist$1 < this$1._minDistance) {
43661                     this$1._minDistance = dist$1;
43662                     var seg0 = new LineSegment(coord0$1[i$1], coord0$1[i$1 + 1]);
43663                     var seg1 = new LineSegment(coord1[j], coord1[j + 1]);
43664                     var closestPt = seg0.closestPoints(seg1);
43665                     locGeom$1[0] = new GeometryLocation(line0, i$1, closestPt[0]);
43666                     locGeom$1[1] = new GeometryLocation(line1, j, closestPt[1]);
43667                   }
43668                   if (this$1._minDistance <= this$1._terminateDistance) { return null }
43669                 }
43670               }
43671             }
43672           }
43673         };
43674         DistanceOp.prototype.computeMinDistancePoints = function computeMinDistancePoints (points0, points1, locGeom) {
43675             var this$1 = this;
43676
43677           for (var i = 0; i < points0.size(); i++) {
43678             var pt0 = points0.get(i);
43679             for (var j = 0; j < points1.size(); j++) {
43680               var pt1 = points1.get(j);
43681               var dist = pt0.getCoordinate().distance(pt1.getCoordinate());
43682               if (dist < this$1._minDistance) {
43683                 this$1._minDistance = dist;
43684                 locGeom[0] = new GeometryLocation(pt0, 0, pt0.getCoordinate());
43685                 locGeom[1] = new GeometryLocation(pt1, 0, pt1.getCoordinate());
43686               }
43687               if (this$1._minDistance <= this$1._terminateDistance) { return null }
43688             }
43689           }
43690         };
43691         DistanceOp.prototype.distance = function distance () {
43692           if (this._geom[0] === null || this._geom[1] === null) { throw new IllegalArgumentException('null geometries are not supported') }
43693           if (this._geom[0].isEmpty() || this._geom[1].isEmpty()) { return 0.0 }
43694           this.computeMinDistance();
43695           return this._minDistance
43696         };
43697         DistanceOp.prototype.computeMinDistanceLines = function computeMinDistanceLines (lines0, lines1, locGeom) {
43698             var this$1 = this;
43699
43700           for (var i = 0; i < lines0.size(); i++) {
43701             var line0 = lines0.get(i);
43702             for (var j = 0; j < lines1.size(); j++) {
43703               var line1 = lines1.get(j);
43704               this$1.computeMinDistance(line0, line1, locGeom);
43705               if (this$1._minDistance <= this$1._terminateDistance) { return null }
43706             }
43707           }
43708         };
43709         DistanceOp.prototype.interfaces_ = function interfaces_ () {
43710           return []
43711         };
43712         DistanceOp.prototype.getClass = function getClass () {
43713           return DistanceOp
43714         };
43715         DistanceOp.distance = function distance (g0, g1) {
43716           var distOp = new DistanceOp(g0, g1);
43717           return distOp.distance()
43718         };
43719         DistanceOp.isWithinDistance = function isWithinDistance (g0, g1, distance) {
43720           var distOp = new DistanceOp(g0, g1, distance);
43721           return distOp.distance() <= distance
43722         };
43723         DistanceOp.nearestPoints = function nearestPoints (g0, g1) {
43724           var distOp = new DistanceOp(g0, g1);
43725           return distOp.nearestPoints()
43726         };
43727
43728         var PointPairDistance$2 = function PointPairDistance () {
43729           this._pt = [new Coordinate(), new Coordinate()];
43730           this._distance = Double.NaN;
43731           this._isNull = true;
43732         };
43733         PointPairDistance$2.prototype.getCoordinates = function getCoordinates () {
43734           return this._pt
43735         };
43736         PointPairDistance$2.prototype.getCoordinate = function getCoordinate (i) {
43737           return this._pt[i]
43738         };
43739         PointPairDistance$2.prototype.setMinimum = function setMinimum () {
43740           if (arguments.length === 1) {
43741             var ptDist = arguments[0];
43742             this.setMinimum(ptDist._pt[0], ptDist._pt[1]);
43743           } else if (arguments.length === 2) {
43744             var p0 = arguments[0];
43745             var p1 = arguments[1];
43746             if (this._isNull) {
43747               this.initialize(p0, p1);
43748               return null
43749             }
43750             var dist = p0.distance(p1);
43751             if (dist < this._distance) { this.initialize(p0, p1, dist); }
43752           }
43753         };
43754         PointPairDistance$2.prototype.initialize = function initialize () {
43755           if (arguments.length === 0) {
43756             this._isNull = true;
43757           } else if (arguments.length === 2) {
43758             var p0 = arguments[0];
43759             var p1 = arguments[1];
43760             this._pt[0].setCoordinate(p0);
43761             this._pt[1].setCoordinate(p1);
43762             this._distance = p0.distance(p1);
43763             this._isNull = false;
43764           } else if (arguments.length === 3) {
43765             var p0$1 = arguments[0];
43766             var p1$1 = arguments[1];
43767             var distance = arguments[2];
43768             this._pt[0].setCoordinate(p0$1);
43769             this._pt[1].setCoordinate(p1$1);
43770             this._distance = distance;
43771             this._isNull = false;
43772           }
43773         };
43774         PointPairDistance$2.prototype.toString = function toString () {
43775           return WKTWriter.toLineString(this._pt[0], this._pt[1])
43776         };
43777         PointPairDistance$2.prototype.getDistance = function getDistance () {
43778           return this._distance
43779         };
43780         PointPairDistance$2.prototype.setMaximum = function setMaximum () {
43781           if (arguments.length === 1) {
43782             var ptDist = arguments[0];
43783             this.setMaximum(ptDist._pt[0], ptDist._pt[1]);
43784           } else if (arguments.length === 2) {
43785             var p0 = arguments[0];
43786             var p1 = arguments[1];
43787             if (this._isNull) {
43788               this.initialize(p0, p1);
43789               return null
43790             }
43791             var dist = p0.distance(p1);
43792             if (dist > this._distance) { this.initialize(p0, p1, dist); }
43793           }
43794         };
43795         PointPairDistance$2.prototype.interfaces_ = function interfaces_ () {
43796           return []
43797         };
43798         PointPairDistance$2.prototype.getClass = function getClass () {
43799           return PointPairDistance$2
43800         };
43801
43802         var DistanceToPoint = function DistanceToPoint () {};
43803
43804         DistanceToPoint.prototype.interfaces_ = function interfaces_ () {
43805           return []
43806         };
43807         DistanceToPoint.prototype.getClass = function getClass () {
43808           return DistanceToPoint
43809         };
43810         DistanceToPoint.computeDistance = function computeDistance () {
43811           if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {
43812             var line = arguments[0];
43813             var pt = arguments[1];
43814             var ptDist = arguments[2];
43815             var tempSegment = new LineSegment();
43816             var coords = line.getCoordinates();
43817             for (var i = 0; i < coords.length - 1; i++) {
43818               tempSegment.setCoordinates(coords[i], coords[i + 1]);
43819               var closestPt = tempSegment.closestPoint(pt);
43820               ptDist.setMinimum(closestPt, pt);
43821             }
43822           } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {
43823             var poly = arguments[0];
43824             var pt$1 = arguments[1];
43825             var ptDist$1 = arguments[2];
43826             DistanceToPoint.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);
43827             for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {
43828               DistanceToPoint.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);
43829             }
43830           } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {
43831             var geom = arguments[0];
43832             var pt$2 = arguments[1];
43833             var ptDist$2 = arguments[2];
43834             if (geom instanceof LineString) {
43835               DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);
43836             } else if (geom instanceof Polygon) {
43837               DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);
43838             } else if (geom instanceof GeometryCollection) {
43839               var gc = geom;
43840               for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {
43841                 var g = gc.getGeometryN(i$2);
43842                 DistanceToPoint.computeDistance(g, pt$2, ptDist$2);
43843               }
43844             } else {
43845               ptDist$2.setMinimum(geom.getCoordinate(), pt$2);
43846             }
43847           } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {
43848             var segment = arguments[0];
43849             var pt$3 = arguments[1];
43850             var ptDist$3 = arguments[2];
43851             var closestPt$1 = segment.closestPoint(pt$3);
43852             ptDist$3.setMinimum(closestPt$1, pt$3);
43853           }
43854         };
43855
43856         var DiscreteHausdorffDistance = function DiscreteHausdorffDistance () {
43857           this._g0 = null;
43858           this._g1 = null;
43859           this._ptDist = new PointPairDistance$2();
43860           this._densifyFrac = 0.0;
43861           var g0 = arguments[0];
43862           var g1 = arguments[1];
43863           this._g0 = g0;
43864           this._g1 = g1;
43865         };
43866
43867         var staticAccessors$39 = { MaxPointDistanceFilter: { configurable: true },MaxDensifiedByFractionDistanceFilter: { configurable: true } };
43868         DiscreteHausdorffDistance.prototype.getCoordinates = function getCoordinates () {
43869           return this._ptDist.getCoordinates()
43870         };
43871         DiscreteHausdorffDistance.prototype.setDensifyFraction = function setDensifyFraction (densifyFrac) {
43872           if (densifyFrac > 1.0 || densifyFrac <= 0.0) { throw new IllegalArgumentException('Fraction is not in range (0.0 - 1.0]') }
43873           this._densifyFrac = densifyFrac;
43874         };
43875         DiscreteHausdorffDistance.prototype.compute = function compute (g0, g1) {
43876           this.computeOrientedDistance(g0, g1, this._ptDist);
43877           this.computeOrientedDistance(g1, g0, this._ptDist);
43878         };
43879         DiscreteHausdorffDistance.prototype.distance = function distance () {
43880           this.compute(this._g0, this._g1);
43881           return this._ptDist.getDistance()
43882         };
43883         DiscreteHausdorffDistance.prototype.computeOrientedDistance = function computeOrientedDistance (discreteGeom, geom, ptDist) {
43884           var distFilter = new MaxPointDistanceFilter$1(geom);
43885           discreteGeom.apply(distFilter);
43886           ptDist.setMaximum(distFilter.getMaxPointDistance());
43887           if (this._densifyFrac > 0) {
43888             var fracFilter = new MaxDensifiedByFractionDistanceFilter(geom, this._densifyFrac);
43889             discreteGeom.apply(fracFilter);
43890             ptDist.setMaximum(fracFilter.getMaxPointDistance());
43891           }
43892         };
43893         DiscreteHausdorffDistance.prototype.orientedDistance = function orientedDistance () {
43894           this.computeOrientedDistance(this._g0, this._g1, this._ptDist);
43895           return this._ptDist.getDistance()
43896         };
43897         DiscreteHausdorffDistance.prototype.interfaces_ = function interfaces_ () {
43898           return []
43899         };
43900         DiscreteHausdorffDistance.prototype.getClass = function getClass () {
43901           return DiscreteHausdorffDistance
43902         };
43903         DiscreteHausdorffDistance.distance = function distance () {
43904           if (arguments.length === 2) {
43905             var g0 = arguments[0];
43906             var g1 = arguments[1];
43907             var dist = new DiscreteHausdorffDistance(g0, g1);
43908             return dist.distance()
43909           } else if (arguments.length === 3) {
43910             var g0$1 = arguments[0];
43911             var g1$1 = arguments[1];
43912             var densifyFrac = arguments[2];
43913             var dist$1 = new DiscreteHausdorffDistance(g0$1, g1$1);
43914             dist$1.setDensifyFraction(densifyFrac);
43915             return dist$1.distance()
43916           }
43917         };
43918         staticAccessors$39.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter$1 };
43919         staticAccessors$39.MaxDensifiedByFractionDistanceFilter.get = function () { return MaxDensifiedByFractionDistanceFilter };
43920
43921         Object.defineProperties( DiscreteHausdorffDistance, staticAccessors$39 );
43922
43923         var MaxPointDistanceFilter$1 = function MaxPointDistanceFilter () {
43924           this._maxPtDist = new PointPairDistance$2();
43925           this._minPtDist = new PointPairDistance$2();
43926           this._euclideanDist = new DistanceToPoint();
43927           this._geom = null;
43928           var geom = arguments[0];
43929           this._geom = geom;
43930         };
43931         MaxPointDistanceFilter$1.prototype.filter = function filter (pt) {
43932           this._minPtDist.initialize();
43933           DistanceToPoint.computeDistance(this._geom, pt, this._minPtDist);
43934           this._maxPtDist.setMaximum(this._minPtDist);
43935         };
43936         MaxPointDistanceFilter$1.prototype.getMaxPointDistance = function getMaxPointDistance () {
43937           return this._maxPtDist
43938         };
43939         MaxPointDistanceFilter$1.prototype.interfaces_ = function interfaces_ () {
43940           return [CoordinateFilter]
43941         };
43942         MaxPointDistanceFilter$1.prototype.getClass = function getClass () {
43943           return MaxPointDistanceFilter$1
43944         };
43945
43946         var MaxDensifiedByFractionDistanceFilter = function MaxDensifiedByFractionDistanceFilter () {
43947           this._maxPtDist = new PointPairDistance$2();
43948           this._minPtDist = new PointPairDistance$2();
43949           this._geom = null;
43950           this._numSubSegs = 0;
43951           var geom = arguments[0];
43952           var fraction = arguments[1];
43953           this._geom = geom;
43954           this._numSubSegs = Math.trunc(Math.round(1.0 / fraction));
43955         };
43956         MaxDensifiedByFractionDistanceFilter.prototype.filter = function filter (seq, index) {
43957             var this$1 = this;
43958
43959           if (index === 0) { return null }
43960           var p0 = seq.getCoordinate(index - 1);
43961           var p1 = seq.getCoordinate(index);
43962           var delx = (p1.x - p0.x) / this._numSubSegs;
43963           var dely = (p1.y - p0.y) / this._numSubSegs;
43964           for (var i = 0; i < this._numSubSegs; i++) {
43965             var x = p0.x + i * delx;
43966             var y = p0.y + i * dely;
43967             var pt = new Coordinate(x, y);
43968             this$1._minPtDist.initialize();
43969             DistanceToPoint.computeDistance(this$1._geom, pt, this$1._minPtDist);
43970             this$1._maxPtDist.setMaximum(this$1._minPtDist);
43971           }
43972         };
43973         MaxDensifiedByFractionDistanceFilter.prototype.isDone = function isDone () {
43974           return false
43975         };
43976         MaxDensifiedByFractionDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {
43977           return false
43978         };
43979         MaxDensifiedByFractionDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
43980           return this._maxPtDist
43981         };
43982         MaxDensifiedByFractionDistanceFilter.prototype.interfaces_ = function interfaces_ () {
43983           return [CoordinateSequenceFilter]
43984         };
43985         MaxDensifiedByFractionDistanceFilter.prototype.getClass = function getClass () {
43986           return MaxDensifiedByFractionDistanceFilter
43987         };
43988
43989         var BufferDistanceValidator = function BufferDistanceValidator (input, bufDistance, result) {
43990           this._minValidDistance = null;
43991           this._maxValidDistance = null;
43992           this._minDistanceFound = null;
43993           this._maxDistanceFound = null;
43994           this._isValid = true;
43995           this._errMsg = null;
43996           this._errorLocation = null;
43997           this._errorIndicator = null;
43998           this._input = input || null;
43999           this._bufDistance = bufDistance || null;
44000           this._result = result || null;
44001         };
44002
44003         var staticAccessors$37 = { VERBOSE: { configurable: true },MAX_DISTANCE_DIFF_FRAC: { configurable: true } };
44004         BufferDistanceValidator.prototype.checkMaximumDistance = function checkMaximumDistance (input, bufCurve, maxDist) {
44005           var haus = new DiscreteHausdorffDistance(bufCurve, input);
44006           haus.setDensifyFraction(0.25);
44007           this._maxDistanceFound = haus.orientedDistance();
44008           if (this._maxDistanceFound > maxDist) {
44009             this._isValid = false;
44010             var pts = haus.getCoordinates();
44011             this._errorLocation = pts[1];
44012             this._errorIndicator = input.getFactory().createLineString(pts);
44013             this._errMsg = 'Distance between buffer curve and input is too large (' + this._maxDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ')';
44014           }
44015         };
44016         BufferDistanceValidator.prototype.isValid = function isValid () {
44017           var posDistance = Math.abs(this._bufDistance);
44018           var distDelta = BufferDistanceValidator.MAX_DISTANCE_DIFF_FRAC * posDistance;
44019           this._minValidDistance = posDistance - distDelta;
44020           this._maxValidDistance = posDistance + distDelta;
44021           if (this._input.isEmpty() || this._result.isEmpty()) { return true }
44022           if (this._bufDistance > 0.0) {
44023             this.checkPositiveValid();
44024           } else {
44025             this.checkNegativeValid();
44026           }
44027           if (BufferDistanceValidator.VERBOSE) {
44028             System.out.println('Min Dist= ' + this._minDistanceFound + '  err= ' + (1.0 - this._minDistanceFound / this._bufDistance) + '  Max Dist= ' + this._maxDistanceFound + '  err= ' + (this._maxDistanceFound / this._bufDistance - 1.0));
44029           }
44030           return this._isValid
44031         };
44032         BufferDistanceValidator.prototype.checkNegativeValid = function checkNegativeValid () {
44033           if (!(this._input instanceof Polygon || this._input instanceof MultiPolygon || this._input instanceof GeometryCollection)) {
44034             return null
44035           }
44036           var inputCurve = this.getPolygonLines(this._input);
44037           this.checkMinimumDistance(inputCurve, this._result, this._minValidDistance);
44038           if (!this._isValid) { return null }
44039           this.checkMaximumDistance(inputCurve, this._result, this._maxValidDistance);
44040         };
44041         BufferDistanceValidator.prototype.getErrorIndicator = function getErrorIndicator () {
44042           return this._errorIndicator
44043         };
44044         BufferDistanceValidator.prototype.checkMinimumDistance = function checkMinimumDistance (g1, g2, minDist) {
44045           var distOp = new DistanceOp(g1, g2, minDist);
44046           this._minDistanceFound = distOp.distance();
44047           if (this._minDistanceFound < minDist) {
44048             this._isValid = false;
44049             var pts = distOp.nearestPoints();
44050             this._errorLocation = distOp.nearestPoints()[1];
44051             this._errorIndicator = g1.getFactory().createLineString(pts);
44052             this._errMsg = 'Distance between buffer curve and input is too small (' + this._minDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ' )';
44053           }
44054         };
44055         BufferDistanceValidator.prototype.checkPositiveValid = function checkPositiveValid () {
44056           var bufCurve = this._result.getBoundary();
44057           this.checkMinimumDistance(this._input, bufCurve, this._minValidDistance);
44058           if (!this._isValid) { return null }
44059           this.checkMaximumDistance(this._input, bufCurve, this._maxValidDistance);
44060         };
44061         BufferDistanceValidator.prototype.getErrorLocation = function getErrorLocation () {
44062           return this._errorLocation
44063         };
44064         BufferDistanceValidator.prototype.getPolygonLines = function getPolygonLines (g) {
44065           var lines = new ArrayList();
44066           var lineExtracter = new LinearComponentExtracter(lines);
44067           var polys = PolygonExtracter.getPolygons(g);
44068           for (var i = polys.iterator(); i.hasNext();) {
44069             var poly = i.next();
44070             poly.apply(lineExtracter);
44071           }
44072           return g.getFactory().buildGeometry(lines)
44073         };
44074         BufferDistanceValidator.prototype.getErrorMessage = function getErrorMessage () {
44075           return this._errMsg
44076         };
44077         BufferDistanceValidator.prototype.interfaces_ = function interfaces_ () {
44078           return []
44079         };
44080         BufferDistanceValidator.prototype.getClass = function getClass () {
44081           return BufferDistanceValidator
44082         };
44083         staticAccessors$37.VERBOSE.get = function () { return false };
44084         staticAccessors$37.MAX_DISTANCE_DIFF_FRAC.get = function () { return 0.012 };
44085
44086         Object.defineProperties( BufferDistanceValidator, staticAccessors$37 );
44087
44088         var BufferResultValidator = function BufferResultValidator (input, distance, result) {
44089           this._isValid = true;
44090           this._errorMsg = null;
44091           this._errorLocation = null;
44092           this._errorIndicator = null;
44093           this._input = input || null;
44094           this._distance = distance || null;
44095           this._result = result || null;
44096         };
44097
44098         var staticAccessors$40 = { VERBOSE: { configurable: true },MAX_ENV_DIFF_FRAC: { configurable: true } };
44099         BufferResultValidator.prototype.isValid = function isValid () {
44100           this.checkPolygonal();
44101           if (!this._isValid) { return this._isValid }
44102           this.checkExpectedEmpty();
44103           if (!this._isValid) { return this._isValid }
44104           this.checkEnvelope();
44105           if (!this._isValid) { return this._isValid }
44106           this.checkArea();
44107           if (!this._isValid) { return this._isValid }
44108           this.checkDistance();
44109           return this._isValid
44110         };
44111         BufferResultValidator.prototype.checkEnvelope = function checkEnvelope () {
44112           if (this._distance < 0.0) { return null }
44113           var padding = this._distance * BufferResultValidator.MAX_ENV_DIFF_FRAC;
44114           if (padding === 0.0) { padding = 0.001; }
44115           var expectedEnv = new Envelope(this._input.getEnvelopeInternal());
44116           expectedEnv.expandBy(this._distance);
44117           var bufEnv = new Envelope(this._result.getEnvelopeInternal());
44118           bufEnv.expandBy(padding);
44119           if (!bufEnv.contains(expectedEnv)) {
44120             this._isValid = false;
44121             this._errorMsg = 'Buffer envelope is incorrect';
44122             this._errorIndicator = this._input.getFactory().toGeometry(bufEnv);
44123           }
44124           this.report('Envelope');
44125         };
44126         BufferResultValidator.prototype.checkDistance = function checkDistance () {
44127           var distValid = new BufferDistanceValidator(this._input, this._distance, this._result);
44128           if (!distValid.isValid()) {
44129             this._isValid = false;
44130             this._errorMsg = distValid.getErrorMessage();
44131             this._errorLocation = distValid.getErrorLocation();
44132             this._errorIndicator = distValid.getErrorIndicator();
44133           }
44134           this.report('Distance');
44135         };
44136         BufferResultValidator.prototype.checkArea = function checkArea () {
44137           var inputArea = this._input.getArea();
44138           var resultArea = this._result.getArea();
44139           if (this._distance > 0.0 && inputArea > resultArea) {
44140             this._isValid = false;
44141             this._errorMsg = 'Area of positive buffer is smaller than input';
44142             this._errorIndicator = this._result;
44143           }
44144           if (this._distance < 0.0 && inputArea < resultArea) {
44145             this._isValid = false;
44146             this._errorMsg = 'Area of negative buffer is larger than input';
44147             this._errorIndicator = this._result;
44148           }
44149           this.report('Area');
44150         };
44151         BufferResultValidator.prototype.checkPolygonal = function checkPolygonal () {
44152           if (!(this._result instanceof Polygon || this._result instanceof MultiPolygon)) { this._isValid = false; }
44153           this._errorMsg = 'Result is not polygonal';
44154           this._errorIndicator = this._result;
44155           this.report('Polygonal');
44156         };
44157         BufferResultValidator.prototype.getErrorIndicator = function getErrorIndicator () {
44158           return this._errorIndicator
44159         };
44160         BufferResultValidator.prototype.getErrorLocation = function getErrorLocation () {
44161           return this._errorLocation
44162         };
44163         BufferResultValidator.prototype.checkExpectedEmpty = function checkExpectedEmpty () {
44164           if (this._input.getDimension() >= 2) { return null }
44165           if (this._distance > 0.0) { return null }
44166           if (!this._result.isEmpty()) {
44167             this._isValid = false;
44168             this._errorMsg = 'Result is non-empty';
44169             this._errorIndicator = this._result;
44170           }
44171           this.report('ExpectedEmpty');
44172         };
44173         BufferResultValidator.prototype.report = function report (checkName) {
44174           if (!BufferResultValidator.VERBOSE) { return null }
44175           System.out.println('Check ' + checkName + ': ' + (this._isValid ? 'passed' : 'FAILED'));
44176         };
44177         BufferResultValidator.prototype.getErrorMessage = function getErrorMessage () {
44178           return this._errorMsg
44179         };
44180         BufferResultValidator.prototype.interfaces_ = function interfaces_ () {
44181           return []
44182         };
44183         BufferResultValidator.prototype.getClass = function getClass () {
44184           return BufferResultValidator
44185         };
44186         BufferResultValidator.isValidMsg = function isValidMsg (g, distance, result) {
44187           var validator = new BufferResultValidator(g, distance, result);
44188           if (!validator.isValid()) { return validator.getErrorMessage() }
44189           return null
44190         };
44191         BufferResultValidator.isValid = function isValid (g, distance, result) {
44192           var validator = new BufferResultValidator(g, distance, result);
44193           if (validator.isValid()) { return true }
44194           return false
44195         };
44196         staticAccessors$40.VERBOSE.get = function () { return false };
44197         staticAccessors$40.MAX_ENV_DIFF_FRAC.get = function () { return 0.012 };
44198
44199         Object.defineProperties( BufferResultValidator, staticAccessors$40 );
44200
44201         // operation.buffer
44202
44203         var BasicSegmentString = function BasicSegmentString () {
44204           this._pts = null;
44205           this._data = null;
44206           var pts = arguments[0];
44207           var data = arguments[1];
44208           this._pts = pts;
44209           this._data = data;
44210         };
44211         BasicSegmentString.prototype.getCoordinates = function getCoordinates () {
44212           return this._pts
44213         };
44214         BasicSegmentString.prototype.size = function size () {
44215           return this._pts.length
44216         };
44217         BasicSegmentString.prototype.getCoordinate = function getCoordinate (i) {
44218           return this._pts[i]
44219         };
44220         BasicSegmentString.prototype.isClosed = function isClosed () {
44221           return this._pts[0].equals(this._pts[this._pts.length - 1])
44222         };
44223         BasicSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {
44224           if (index === this._pts.length - 1) { return -1 }
44225           return Octant.octant(this.getCoordinate(index), this.getCoordinate(index + 1))
44226         };
44227         BasicSegmentString.prototype.setData = function setData (data) {
44228           this._data = data;
44229         };
44230         BasicSegmentString.prototype.getData = function getData () {
44231           return this._data
44232         };
44233         BasicSegmentString.prototype.toString = function toString () {
44234           return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))
44235         };
44236         BasicSegmentString.prototype.interfaces_ = function interfaces_ () {
44237           return [SegmentString]
44238         };
44239         BasicSegmentString.prototype.getClass = function getClass () {
44240           return BasicSegmentString
44241         };
44242
44243         var InteriorIntersectionFinder = function InteriorIntersectionFinder () {
44244           this._findAllIntersections = false;
44245           this._isCheckEndSegmentsOnly = false;
44246           this._li = null;
44247           this._interiorIntersection = null;
44248           this._intSegments = null;
44249           this._intersections = new ArrayList();
44250           this._intersectionCount = 0;
44251           this._keepIntersections = true;
44252           var li = arguments[0];
44253           this._li = li;
44254           this._interiorIntersection = null;
44255         };
44256         InteriorIntersectionFinder.prototype.getInteriorIntersection = function getInteriorIntersection () {
44257           return this._interiorIntersection
44258         };
44259         InteriorIntersectionFinder.prototype.setCheckEndSegmentsOnly = function setCheckEndSegmentsOnly (isCheckEndSegmentsOnly) {
44260           this._isCheckEndSegmentsOnly = isCheckEndSegmentsOnly;
44261         };
44262         InteriorIntersectionFinder.prototype.getIntersectionSegments = function getIntersectionSegments () {
44263           return this._intSegments
44264         };
44265         InteriorIntersectionFinder.prototype.count = function count () {
44266           return this._intersectionCount
44267         };
44268         InteriorIntersectionFinder.prototype.getIntersections = function getIntersections () {
44269           return this._intersections
44270         };
44271         InteriorIntersectionFinder.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {
44272           this._findAllIntersections = findAllIntersections;
44273         };
44274         InteriorIntersectionFinder.prototype.setKeepIntersections = function setKeepIntersections (keepIntersections) {
44275           this._keepIntersections = keepIntersections;
44276         };
44277         InteriorIntersectionFinder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
44278           if (!this._findAllIntersections && this.hasIntersection()) { return null }
44279           if (e0 === e1 && segIndex0 === segIndex1) { return null }
44280           if (this._isCheckEndSegmentsOnly) {
44281             var isEndSegPresent = this.isEndSegment(e0, segIndex0) || this.isEndSegment(e1, segIndex1);
44282             if (!isEndSegPresent) { return null }
44283           }
44284           var p00 = e0.getCoordinates()[segIndex0];
44285           var p01 = e0.getCoordinates()[segIndex0 + 1];
44286           var p10 = e1.getCoordinates()[segIndex1];
44287           var p11 = e1.getCoordinates()[segIndex1 + 1];
44288           this._li.computeIntersection(p00, p01, p10, p11);
44289           if (this._li.hasIntersection()) {
44290             if (this._li.isInteriorIntersection()) {
44291               this._intSegments = new Array(4).fill(null);
44292               this._intSegments[0] = p00;
44293               this._intSegments[1] = p01;
44294               this._intSegments[2] = p10;
44295               this._intSegments[3] = p11;
44296               this._interiorIntersection = this._li.getIntersection(0);
44297               if (this._keepIntersections) { this._intersections.add(this._interiorIntersection); }
44298               this._intersectionCount++;
44299             }
44300           }
44301         };
44302         InteriorIntersectionFinder.prototype.isEndSegment = function isEndSegment (segStr, index) {
44303           if (index === 0) { return true }
44304           if (index >= segStr.size() - 2) { return true }
44305           return false
44306         };
44307         InteriorIntersectionFinder.prototype.hasIntersection = function hasIntersection () {
44308           return this._interiorIntersection !== null
44309         };
44310         InteriorIntersectionFinder.prototype.isDone = function isDone () {
44311           if (this._findAllIntersections) { return false }
44312           return this._interiorIntersection !== null
44313         };
44314         InteriorIntersectionFinder.prototype.interfaces_ = function interfaces_ () {
44315           return [SegmentIntersector]
44316         };
44317         InteriorIntersectionFinder.prototype.getClass = function getClass () {
44318           return InteriorIntersectionFinder
44319         };
44320         InteriorIntersectionFinder.createAllIntersectionsFinder = function createAllIntersectionsFinder (li) {
44321           var finder = new InteriorIntersectionFinder(li);
44322           finder.setFindAllIntersections(true);
44323           return finder
44324         };
44325         InteriorIntersectionFinder.createAnyIntersectionFinder = function createAnyIntersectionFinder (li) {
44326           return new InteriorIntersectionFinder(li)
44327         };
44328         InteriorIntersectionFinder.createIntersectionCounter = function createIntersectionCounter (li) {
44329           var finder = new InteriorIntersectionFinder(li);
44330           finder.setFindAllIntersections(true);
44331           finder.setKeepIntersections(false);
44332           return finder
44333         };
44334
44335         var FastNodingValidator = function FastNodingValidator () {
44336           this._li = new RobustLineIntersector();
44337           this._segStrings = null;
44338           this._findAllIntersections = false;
44339           this._segInt = null;
44340           this._isValid = true;
44341           var segStrings = arguments[0];
44342           this._segStrings = segStrings;
44343         };
44344         FastNodingValidator.prototype.execute = function execute () {
44345           if (this._segInt !== null) { return null }
44346           this.checkInteriorIntersections();
44347         };
44348         FastNodingValidator.prototype.getIntersections = function getIntersections () {
44349           return this._segInt.getIntersections()
44350         };
44351         FastNodingValidator.prototype.isValid = function isValid () {
44352           this.execute();
44353           return this._isValid
44354         };
44355         FastNodingValidator.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {
44356           this._findAllIntersections = findAllIntersections;
44357         };
44358         FastNodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {
44359           this._isValid = true;
44360           this._segInt = new InteriorIntersectionFinder(this._li);
44361           this._segInt.setFindAllIntersections(this._findAllIntersections);
44362           var noder = new MCIndexNoder();
44363           noder.setSegmentIntersector(this._segInt);
44364           noder.computeNodes(this._segStrings);
44365           if (this._segInt.hasIntersection()) {
44366             this._isValid = false;
44367             return null
44368           }
44369         };
44370         FastNodingValidator.prototype.checkValid = function checkValid () {
44371           this.execute();
44372           if (!this._isValid) { throw new TopologyException(this.getErrorMessage(), this._segInt.getInteriorIntersection()) }
44373         };
44374         FastNodingValidator.prototype.getErrorMessage = function getErrorMessage () {
44375           if (this._isValid) { return 'no intersections found' }
44376           var intSegs = this._segInt.getIntersectionSegments();
44377           return 'found non-noded intersection between ' + WKTWriter.toLineString(intSegs[0], intSegs[1]) + ' and ' + WKTWriter.toLineString(intSegs[2], intSegs[3])
44378         };
44379         FastNodingValidator.prototype.interfaces_ = function interfaces_ () {
44380           return []
44381         };
44382         FastNodingValidator.prototype.getClass = function getClass () {
44383           return FastNodingValidator
44384         };
44385         FastNodingValidator.computeIntersections = function computeIntersections (segStrings) {
44386           var nv = new FastNodingValidator(segStrings);
44387           nv.setFindAllIntersections(true);
44388           nv.isValid();
44389           return nv.getIntersections()
44390         };
44391
44392         var EdgeNodingValidator = function EdgeNodingValidator () {
44393           this._nv = null;
44394           var edges = arguments[0];
44395           this._nv = new FastNodingValidator(EdgeNodingValidator.toSegmentStrings(edges));
44396         };
44397         EdgeNodingValidator.prototype.checkValid = function checkValid () {
44398           this._nv.checkValid();
44399         };
44400         EdgeNodingValidator.prototype.interfaces_ = function interfaces_ () {
44401           return []
44402         };
44403         EdgeNodingValidator.prototype.getClass = function getClass () {
44404           return EdgeNodingValidator
44405         };
44406         EdgeNodingValidator.toSegmentStrings = function toSegmentStrings (edges) {
44407           var segStrings = new ArrayList();
44408           for (var i = edges.iterator(); i.hasNext();) {
44409             var e = i.next();
44410             segStrings.add(new BasicSegmentString(e.getCoordinates(), e));
44411           }
44412           return segStrings
44413         };
44414         EdgeNodingValidator.checkValid = function checkValid (edges) {
44415           var validator = new EdgeNodingValidator(edges);
44416           validator.checkValid();
44417         };
44418
44419         var GeometryCollectionMapper = function GeometryCollectionMapper (mapOp) {
44420           this._mapOp = mapOp;
44421         };
44422         GeometryCollectionMapper.prototype.map = function map (gc) {
44423             var this$1 = this;
44424
44425           var mapped = new ArrayList();
44426           for (var i = 0; i < gc.getNumGeometries(); i++) {
44427             var g = this$1._mapOp.map(gc.getGeometryN(i));
44428             if (!g.isEmpty()) { mapped.add(g); }
44429           }
44430           return gc.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(mapped))
44431         };
44432         GeometryCollectionMapper.prototype.interfaces_ = function interfaces_ () {
44433           return []
44434         };
44435         GeometryCollectionMapper.prototype.getClass = function getClass () {
44436           return GeometryCollectionMapper
44437         };
44438         GeometryCollectionMapper.map = function map (gc, op) {
44439           var mapper = new GeometryCollectionMapper(op);
44440           return mapper.map(gc)
44441         };
44442
44443         var LineBuilder = function LineBuilder () {
44444           this._op = null;
44445           this._geometryFactory = null;
44446           this._ptLocator = null;
44447           this._lineEdgesList = new ArrayList();
44448           this._resultLineList = new ArrayList();
44449           var op = arguments[0];
44450           var geometryFactory = arguments[1];
44451           var ptLocator = arguments[2];
44452           this._op = op;
44453           this._geometryFactory = geometryFactory;
44454           this._ptLocator = ptLocator;
44455         };
44456         LineBuilder.prototype.collectLines = function collectLines (opCode) {
44457             var this$1 = this;
44458
44459           for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {
44460             var de = it.next();
44461             this$1.collectLineEdge(de, opCode, this$1._lineEdgesList);
44462             this$1.collectBoundaryTouchEdge(de, opCode, this$1._lineEdgesList);
44463           }
44464         };
44465         LineBuilder.prototype.labelIsolatedLine = function labelIsolatedLine (e, targetIndex) {
44466           var loc = this._ptLocator.locate(e.getCoordinate(), this._op.getArgGeometry(targetIndex));
44467           e.getLabel().setLocation(targetIndex, loc);
44468         };
44469         LineBuilder.prototype.build = function build (opCode) {
44470           this.findCoveredLineEdges();
44471           this.collectLines(opCode);
44472           this.buildLines(opCode);
44473           return this._resultLineList
44474         };
44475         LineBuilder.prototype.collectLineEdge = function collectLineEdge (de, opCode, edges) {
44476           var label = de.getLabel();
44477           var e = de.getEdge();
44478           if (de.isLineEdge()) {
44479             if (!de.isVisited() && OverlayOp.isResultOfOp(label, opCode) && !e.isCovered()) {
44480               edges.add(e);
44481               de.setVisitedEdge(true);
44482             }
44483           }
44484         };
44485         LineBuilder.prototype.findCoveredLineEdges = function findCoveredLineEdges () {
44486             var this$1 = this;
44487
44488           for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {
44489             var node = nodeit.next();
44490             node.getEdges().findCoveredLineEdges();
44491           }
44492           for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {
44493             var de = it.next();
44494             var e = de.getEdge();
44495             if (de.isLineEdge() && !e.isCoveredSet()) {
44496               var isCovered = this$1._op.isCoveredByA(de.getCoordinate());
44497               e.setCovered(isCovered);
44498             }
44499           }
44500         };
44501         LineBuilder.prototype.labelIsolatedLines = function labelIsolatedLines (edgesList) {
44502             var this$1 = this;
44503
44504           for (var it = edgesList.iterator(); it.hasNext();) {
44505             var e = it.next();
44506             var label = e.getLabel();
44507             if (e.isIsolated()) {
44508               if (label.isNull(0)) { this$1.labelIsolatedLine(e, 0); } else { this$1.labelIsolatedLine(e, 1); }
44509             }
44510           }
44511         };
44512         LineBuilder.prototype.buildLines = function buildLines (opCode) {
44513             var this$1 = this;
44514
44515           for (var it = this._lineEdgesList.iterator(); it.hasNext();) {
44516             var e = it.next();
44517             // const label = e.getLabel()
44518             var line = this$1._geometryFactory.createLineString(e.getCoordinates());
44519             this$1._resultLineList.add(line);
44520             e.setInResult(true);
44521           }
44522         };
44523         LineBuilder.prototype.collectBoundaryTouchEdge = function collectBoundaryTouchEdge (de, opCode, edges) {
44524           var label = de.getLabel();
44525           if (de.isLineEdge()) { return null }
44526           if (de.isVisited()) { return null }
44527           if (de.isInteriorAreaEdge()) { return null }
44528           if (de.getEdge().isInResult()) { return null }
44529           Assert.isTrue(!(de.isInResult() || de.getSym().isInResult()) || !de.getEdge().isInResult());
44530           if (OverlayOp.isResultOfOp(label, opCode) && opCode === OverlayOp.INTERSECTION) {
44531             edges.add(de.getEdge());
44532             de.setVisitedEdge(true);
44533           }
44534         };
44535         LineBuilder.prototype.interfaces_ = function interfaces_ () {
44536           return []
44537         };
44538         LineBuilder.prototype.getClass = function getClass () {
44539           return LineBuilder
44540         };
44541
44542         var PointBuilder = function PointBuilder () {
44543           this._op = null;
44544           this._geometryFactory = null;
44545           this._resultPointList = new ArrayList();
44546           var op = arguments[0];
44547           var geometryFactory = arguments[1];
44548           // const ptLocator = arguments[2]
44549           this._op = op;
44550           this._geometryFactory = geometryFactory;
44551         };
44552         PointBuilder.prototype.filterCoveredNodeToPoint = function filterCoveredNodeToPoint (n) {
44553           var coord = n.getCoordinate();
44554           if (!this._op.isCoveredByLA(coord)) {
44555             var pt = this._geometryFactory.createPoint(coord);
44556             this._resultPointList.add(pt);
44557           }
44558         };
44559         PointBuilder.prototype.extractNonCoveredResultNodes = function extractNonCoveredResultNodes (opCode) {
44560             var this$1 = this;
44561
44562           for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {
44563             var n = nodeit.next();
44564             if (n.isInResult()) { continue }
44565             if (n.isIncidentEdgeInResult()) { continue }
44566             if (n.getEdges().getDegree() === 0 || opCode === OverlayOp.INTERSECTION) {
44567               var label = n.getLabel();
44568               if (OverlayOp.isResultOfOp(label, opCode)) {
44569                 this$1.filterCoveredNodeToPoint(n);
44570               }
44571             }
44572           }
44573         };
44574         PointBuilder.prototype.build = function build (opCode) {
44575           this.extractNonCoveredResultNodes(opCode);
44576           return this._resultPointList
44577         };
44578         PointBuilder.prototype.interfaces_ = function interfaces_ () {
44579           return []
44580         };
44581         PointBuilder.prototype.getClass = function getClass () {
44582           return PointBuilder
44583         };
44584
44585         var GeometryTransformer = function GeometryTransformer () {
44586           this._inputGeom = null;
44587           this._factory = null;
44588           this._pruneEmptyGeometry = true;
44589           this._preserveGeometryCollectionType = true;
44590           this._preserveCollections = false;
44591           this._preserveType = false;
44592         };
44593         GeometryTransformer.prototype.transformPoint = function transformPoint (geom, parent) {
44594           return this._factory.createPoint(this.transformCoordinates(geom.getCoordinateSequence(), geom))
44595         };
44596         GeometryTransformer.prototype.transformPolygon = function transformPolygon (geom, parent) {
44597             var this$1 = this;
44598
44599           var isAllValidLinearRings = true;
44600           var shell = this.transformLinearRing(geom.getExteriorRing(), geom);
44601           if (shell === null || !(shell instanceof LinearRing) || shell.isEmpty()) { isAllValidLinearRings = false; }
44602           var holes = new ArrayList();
44603           for (var i = 0; i < geom.getNumInteriorRing(); i++) {
44604             var hole = this$1.transformLinearRing(geom.getInteriorRingN(i), geom);
44605             if (hole === null || hole.isEmpty()) {
44606               continue
44607             }
44608             if (!(hole instanceof LinearRing)) { isAllValidLinearRings = false; }
44609             holes.add(hole);
44610           }
44611           if (isAllValidLinearRings) { return this._factory.createPolygon(shell, holes.toArray([])); } else {
44612             var components = new ArrayList();
44613             if (shell !== null) { components.add(shell); }
44614             components.addAll(holes);
44615             return this._factory.buildGeometry(components)
44616           }
44617         };
44618         GeometryTransformer.prototype.createCoordinateSequence = function createCoordinateSequence (coords) {
44619           return this._factory.getCoordinateSequenceFactory().create(coords)
44620         };
44621         GeometryTransformer.prototype.getInputGeometry = function getInputGeometry () {
44622           return this._inputGeom
44623         };
44624         GeometryTransformer.prototype.transformMultiLineString = function transformMultiLineString (geom, parent) {
44625             var this$1 = this;
44626
44627           var transGeomList = new ArrayList();
44628           for (var i = 0; i < geom.getNumGeometries(); i++) {
44629             var transformGeom = this$1.transformLineString(geom.getGeometryN(i), geom);
44630             if (transformGeom === null) { continue }
44631             if (transformGeom.isEmpty()) { continue }
44632             transGeomList.add(transformGeom);
44633           }
44634           return this._factory.buildGeometry(transGeomList)
44635         };
44636         GeometryTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {
44637           return this.copy(coords)
44638         };
44639         GeometryTransformer.prototype.transformLineString = function transformLineString (geom, parent) {
44640           return this._factory.createLineString(this.transformCoordinates(geom.getCoordinateSequence(), geom))
44641         };
44642         GeometryTransformer.prototype.transformMultiPoint = function transformMultiPoint (geom, parent) {
44643             var this$1 = this;
44644
44645           var transGeomList = new ArrayList();
44646           for (var i = 0; i < geom.getNumGeometries(); i++) {
44647             var transformGeom = this$1.transformPoint(geom.getGeometryN(i), geom);
44648             if (transformGeom === null) { continue }
44649             if (transformGeom.isEmpty()) { continue }
44650             transGeomList.add(transformGeom);
44651           }
44652           return this._factory.buildGeometry(transGeomList)
44653         };
44654         GeometryTransformer.prototype.transformMultiPolygon = function transformMultiPolygon (geom, parent) {
44655             var this$1 = this;
44656
44657           var transGeomList = new ArrayList();
44658           for (var i = 0; i < geom.getNumGeometries(); i++) {
44659             var transformGeom = this$1.transformPolygon(geom.getGeometryN(i), geom);
44660             if (transformGeom === null) { continue }
44661             if (transformGeom.isEmpty()) { continue }
44662             transGeomList.add(transformGeom);
44663           }
44664           return this._factory.buildGeometry(transGeomList)
44665         };
44666         GeometryTransformer.prototype.copy = function copy (seq) {
44667           return seq.copy()
44668         };
44669         GeometryTransformer.prototype.transformGeometryCollection = function transformGeometryCollection (geom, parent) {
44670             var this$1 = this;
44671
44672           var transGeomList = new ArrayList();
44673           for (var i = 0; i < geom.getNumGeometries(); i++) {
44674             var transformGeom = this$1.transform(geom.getGeometryN(i));
44675             if (transformGeom === null) { continue }
44676             if (this$1._pruneEmptyGeometry && transformGeom.isEmpty()) { continue }
44677             transGeomList.add(transformGeom);
44678           }
44679           if (this._preserveGeometryCollectionType) { return this._factory.createGeometryCollection(GeometryFactory.toGeometryArray(transGeomList)) }
44680           return this._factory.buildGeometry(transGeomList)
44681         };
44682         GeometryTransformer.prototype.transform = function transform (inputGeom) {
44683           this._inputGeom = inputGeom;
44684           this._factory = inputGeom.getFactory();
44685           if (inputGeom instanceof Point) { return this.transformPoint(inputGeom, null) }
44686           if (inputGeom instanceof MultiPoint) { return this.transformMultiPoint(inputGeom, null) }
44687           if (inputGeom instanceof LinearRing) { return this.transformLinearRing(inputGeom, null) }
44688           if (inputGeom instanceof LineString) { return this.transformLineString(inputGeom, null) }
44689           if (inputGeom instanceof MultiLineString) { return this.transformMultiLineString(inputGeom, null) }
44690           if (inputGeom instanceof Polygon) { return this.transformPolygon(inputGeom, null) }
44691           if (inputGeom instanceof MultiPolygon) { return this.transformMultiPolygon(inputGeom, null) }
44692           if (inputGeom instanceof GeometryCollection) { return this.transformGeometryCollection(inputGeom, null) }
44693           throw new IllegalArgumentException('Unknown Geometry subtype: ' + inputGeom.getClass().getName())
44694         };
44695         GeometryTransformer.prototype.transformLinearRing = function transformLinearRing (geom, parent) {
44696           var seq = this.transformCoordinates(geom.getCoordinateSequence(), geom);
44697           if (seq === null) { return this._factory.createLinearRing(null) }
44698           var seqSize = seq.size();
44699           if (seqSize > 0 && seqSize < 4 && !this._preserveType) { return this._factory.createLineString(seq) }
44700           return this._factory.createLinearRing(seq)
44701         };
44702         GeometryTransformer.prototype.interfaces_ = function interfaces_ () {
44703           return []
44704         };
44705         GeometryTransformer.prototype.getClass = function getClass () {
44706           return GeometryTransformer
44707         };
44708
44709         var LineStringSnapper = function LineStringSnapper () {
44710           this._snapTolerance = 0.0;
44711           this._srcPts = null;
44712           this._seg = new LineSegment();
44713           this._allowSnappingToSourceVertices = false;
44714           this._isClosed = false;
44715           if (arguments[0] instanceof LineString && typeof arguments[1] === 'number') {
44716             var srcLine = arguments[0];
44717             var snapTolerance = arguments[1];
44718             LineStringSnapper.call(this, srcLine.getCoordinates(), snapTolerance);
44719           } else if (arguments[0] instanceof Array && typeof arguments[1] === 'number') {
44720             var srcPts = arguments[0];
44721             var snapTolerance$1 = arguments[1];
44722             this._srcPts = srcPts;
44723             this._isClosed = LineStringSnapper.isClosed(srcPts);
44724             this._snapTolerance = snapTolerance$1;
44725           }
44726         };
44727         LineStringSnapper.prototype.snapVertices = function snapVertices (srcCoords, snapPts) {
44728             var this$1 = this;
44729
44730           var end = this._isClosed ? srcCoords.size() - 1 : srcCoords.size();
44731           for (var i = 0; i < end; i++) {
44732             var srcPt = srcCoords.get(i);
44733             var snapVert = this$1.findSnapForVertex(srcPt, snapPts);
44734             if (snapVert !== null) {
44735               srcCoords.set(i, new Coordinate(snapVert));
44736               if (i === 0 && this$1._isClosed) { srcCoords.set(srcCoords.size() - 1, new Coordinate(snapVert)); }
44737             }
44738           }
44739         };
44740         LineStringSnapper.prototype.findSnapForVertex = function findSnapForVertex (pt, snapPts) {
44741             var this$1 = this;
44742
44743           for (var i = 0; i < snapPts.length; i++) {
44744             if (pt.equals2D(snapPts[i])) { return null }
44745             if (pt.distance(snapPts[i]) < this$1._snapTolerance) { return snapPts[i] }
44746           }
44747           return null
44748         };
44749         LineStringSnapper.prototype.snapTo = function snapTo (snapPts) {
44750           var coordList = new CoordinateList(this._srcPts);
44751           this.snapVertices(coordList, snapPts);
44752           this.snapSegments(coordList, snapPts);
44753           var newPts = coordList.toCoordinateArray();
44754           return newPts
44755         };
44756         LineStringSnapper.prototype.snapSegments = function snapSegments (srcCoords, snapPts) {
44757             var this$1 = this;
44758
44759           if (snapPts.length === 0) { return null }
44760           var distinctPtCount = snapPts.length;
44761           if (snapPts[0].equals2D(snapPts[snapPts.length - 1])) { distinctPtCount = snapPts.length - 1; }
44762           for (var i = 0; i < distinctPtCount; i++) {
44763             var snapPt = snapPts[i];
44764             var index = this$1.findSegmentIndexToSnap(snapPt, srcCoords);
44765             if (index >= 0) {
44766               srcCoords.add(index + 1, new Coordinate(snapPt), false);
44767             }
44768           }
44769         };
44770         LineStringSnapper.prototype.findSegmentIndexToSnap = function findSegmentIndexToSnap (snapPt, srcCoords) {
44771             var this$1 = this;
44772
44773           var minDist = Double.MAX_VALUE;
44774           var snapIndex = -1;
44775           for (var i = 0; i < srcCoords.size() - 1; i++) {
44776             this$1._seg.p0 = srcCoords.get(i);
44777             this$1._seg.p1 = srcCoords.get(i + 1);
44778             if (this$1._seg.p0.equals2D(snapPt) || this$1._seg.p1.equals2D(snapPt)) {
44779               if (this$1._allowSnappingToSourceVertices) { continue; } else { return -1 }
44780             }
44781             var dist = this$1._seg.distance(snapPt);
44782             if (dist < this$1._snapTolerance && dist < minDist) {
44783               minDist = dist;
44784               snapIndex = i;
44785             }
44786           }
44787           return snapIndex
44788         };
44789         LineStringSnapper.prototype.setAllowSnappingToSourceVertices = function setAllowSnappingToSourceVertices (allowSnappingToSourceVertices) {
44790           this._allowSnappingToSourceVertices = allowSnappingToSourceVertices;
44791         };
44792         LineStringSnapper.prototype.interfaces_ = function interfaces_ () {
44793           return []
44794         };
44795         LineStringSnapper.prototype.getClass = function getClass () {
44796           return LineStringSnapper
44797         };
44798         LineStringSnapper.isClosed = function isClosed (pts) {
44799           if (pts.length <= 1) { return false }
44800           return pts[0].equals2D(pts[pts.length - 1])
44801         };
44802
44803         var GeometrySnapper = function GeometrySnapper (srcGeom) {
44804           this._srcGeom = srcGeom || null;
44805         };
44806
44807         var staticAccessors$41 = { SNAP_PRECISION_FACTOR: { configurable: true } };
44808         GeometrySnapper.prototype.snapTo = function snapTo (snapGeom, snapTolerance) {
44809           var snapPts = this.extractTargetCoordinates(snapGeom);
44810           var snapTrans = new SnapTransformer(snapTolerance, snapPts);
44811           return snapTrans.transform(this._srcGeom)
44812         };
44813         GeometrySnapper.prototype.snapToSelf = function snapToSelf (snapTolerance, cleanResult) {
44814           var snapPts = this.extractTargetCoordinates(this._srcGeom);
44815           var snapTrans = new SnapTransformer(snapTolerance, snapPts, true);
44816           var snappedGeom = snapTrans.transform(this._srcGeom);
44817           var result = snappedGeom;
44818           if (cleanResult && hasInterface(result, Polygonal)) {
44819             result = snappedGeom.buffer(0);
44820           }
44821           return result
44822         };
44823         GeometrySnapper.prototype.computeSnapTolerance = function computeSnapTolerance (ringPts) {
44824           var minSegLen = this.computeMinimumSegmentLength(ringPts);
44825           var snapTol = minSegLen / 10;
44826           return snapTol
44827         };
44828         GeometrySnapper.prototype.extractTargetCoordinates = function extractTargetCoordinates (g) {
44829           var ptSet = new TreeSet();
44830           var pts = g.getCoordinates();
44831           for (var i = 0; i < pts.length; i++) {
44832             ptSet.add(pts[i]);
44833           }
44834           return ptSet.toArray(new Array(0).fill(null))
44835         };
44836         GeometrySnapper.prototype.computeMinimumSegmentLength = function computeMinimumSegmentLength (pts) {
44837           var minSegLen = Double.MAX_VALUE;
44838           for (var i = 0; i < pts.length - 1; i++) {
44839             var segLen = pts[i].distance(pts[i + 1]);
44840             if (segLen < minSegLen) { minSegLen = segLen; }
44841           }
44842           return minSegLen
44843         };
44844         GeometrySnapper.prototype.interfaces_ = function interfaces_ () {
44845           return []
44846         };
44847         GeometrySnapper.prototype.getClass = function getClass () {
44848           return GeometrySnapper
44849         };
44850         GeometrySnapper.snap = function snap (g0, g1, snapTolerance) {
44851           var snapGeom = new Array(2).fill(null);
44852           var snapper0 = new GeometrySnapper(g0);
44853           snapGeom[0] = snapper0.snapTo(g1, snapTolerance);
44854           var snapper1 = new GeometrySnapper(g1);
44855           snapGeom[1] = snapper1.snapTo(snapGeom[0], snapTolerance);
44856           return snapGeom
44857         };
44858         GeometrySnapper.computeOverlaySnapTolerance = function computeOverlaySnapTolerance () {
44859           if (arguments.length === 1) {
44860             var g = arguments[0];
44861             var snapTolerance = GeometrySnapper.computeSizeBasedSnapTolerance(g);
44862             var pm = g.getPrecisionModel();
44863             if (pm.getType() === PrecisionModel.FIXED) {
44864               var fixedSnapTol = 1 / pm.getScale() * 2 / 1.415;
44865               if (fixedSnapTol > snapTolerance) { snapTolerance = fixedSnapTol; }
44866             }
44867             return snapTolerance
44868           } else if (arguments.length === 2) {
44869             var g0 = arguments[0];
44870             var g1 = arguments[1];
44871             return Math.min(GeometrySnapper.computeOverlaySnapTolerance(g0), GeometrySnapper.computeOverlaySnapTolerance(g1))
44872           }
44873         };
44874         GeometrySnapper.computeSizeBasedSnapTolerance = function computeSizeBasedSnapTolerance (g) {
44875           var env = g.getEnvelopeInternal();
44876           var minDimension = Math.min(env.getHeight(), env.getWidth());
44877           var snapTol = minDimension * GeometrySnapper.SNAP_PRECISION_FACTOR;
44878           return snapTol
44879         };
44880         GeometrySnapper.snapToSelf = function snapToSelf (geom, snapTolerance, cleanResult) {
44881           var snapper0 = new GeometrySnapper(geom);
44882           return snapper0.snapToSelf(snapTolerance, cleanResult)
44883         };
44884         staticAccessors$41.SNAP_PRECISION_FACTOR.get = function () { return 1e-9 };
44885
44886         Object.defineProperties( GeometrySnapper, staticAccessors$41 );
44887
44888         var SnapTransformer = (function (GeometryTransformer$$1) {
44889           function SnapTransformer (snapTolerance, snapPts, isSelfSnap) {
44890             GeometryTransformer$$1.call(this);
44891             this._snapTolerance = snapTolerance || null;
44892             this._snapPts = snapPts || null;
44893             this._isSelfSnap = (isSelfSnap !== undefined) ? isSelfSnap : false;
44894           }
44895
44896           if ( GeometryTransformer$$1 ) { SnapTransformer.__proto__ = GeometryTransformer$$1; }
44897           SnapTransformer.prototype = Object.create( GeometryTransformer$$1 && GeometryTransformer$$1.prototype );
44898           SnapTransformer.prototype.constructor = SnapTransformer;
44899           SnapTransformer.prototype.snapLine = function snapLine (srcPts, snapPts) {
44900             var snapper = new LineStringSnapper(srcPts, this._snapTolerance);
44901             snapper.setAllowSnappingToSourceVertices(this._isSelfSnap);
44902             return snapper.snapTo(snapPts)
44903           };
44904           SnapTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {
44905             var srcPts = coords.toCoordinateArray();
44906             var newPts = this.snapLine(srcPts, this._snapPts);
44907             return this._factory.getCoordinateSequenceFactory().create(newPts)
44908           };
44909           SnapTransformer.prototype.interfaces_ = function interfaces_ () {
44910             return []
44911           };
44912           SnapTransformer.prototype.getClass = function getClass () {
44913             return SnapTransformer
44914           };
44915
44916           return SnapTransformer;
44917         }(GeometryTransformer));
44918
44919         var CommonBits = function CommonBits () {
44920           this._isFirst = true;
44921           this._commonMantissaBitsCount = 53;
44922           this._commonBits = 0;
44923           this._commonSignExp = null;
44924         };
44925         CommonBits.prototype.getCommon = function getCommon () {
44926           return Double.longBitsToDouble(this._commonBits)
44927         };
44928         CommonBits.prototype.add = function add (num) {
44929           var numBits = Double.doubleToLongBits(num);
44930           if (this._isFirst) {
44931             this._commonBits = numBits;
44932             this._commonSignExp = CommonBits.signExpBits(this._commonBits);
44933             this._isFirst = false;
44934             return null
44935           }
44936           var numSignExp = CommonBits.signExpBits(numBits);
44937           if (numSignExp !== this._commonSignExp) {
44938             this._commonBits = 0;
44939             return null
44940           }
44941           this._commonMantissaBitsCount = CommonBits.numCommonMostSigMantissaBits(this._commonBits, numBits);
44942           this._commonBits = CommonBits.zeroLowerBits(this._commonBits, 64 - (12 + this._commonMantissaBitsCount));
44943         };
44944         CommonBits.prototype.toString = function toString () {
44945           if (arguments.length === 1) {
44946             var bits = arguments[0];
44947             var x = Double.longBitsToDouble(bits);
44948             var numStr = Double.toBinaryString(bits);
44949             var padStr = '0000000000000000000000000000000000000000000000000000000000000000' + numStr;
44950             var bitStr = padStr.substring(padStr.length - 64);
44951             var str = bitStr.substring(0, 1) + '  ' + bitStr.substring(1, 12) + '(exp) ' + bitStr.substring(12) + ' [ ' + x + ' ]';
44952             return str
44953           }
44954         };
44955         CommonBits.prototype.interfaces_ = function interfaces_ () {
44956           return []
44957         };
44958         CommonBits.prototype.getClass = function getClass () {
44959           return CommonBits
44960         };
44961         CommonBits.getBit = function getBit (bits, i) {
44962           var mask = 1 << i;
44963           return (bits & mask) !== 0 ? 1 : 0
44964         };
44965         CommonBits.signExpBits = function signExpBits (num) {
44966           return num >> 52
44967         };
44968         CommonBits.zeroLowerBits = function zeroLowerBits (bits, nBits) {
44969           var invMask = (1 << nBits) - 1;
44970           var mask = ~invMask;
44971           var zeroed = bits & mask;
44972           return zeroed
44973         };
44974         CommonBits.numCommonMostSigMantissaBits = function numCommonMostSigMantissaBits (num1, num2) {
44975           var count = 0;
44976           for (var i = 52; i >= 0; i--) {
44977             if (CommonBits.getBit(num1, i) !== CommonBits.getBit(num2, i)) { return count }
44978             count++;
44979           }
44980           return 52
44981         };
44982
44983         var CommonBitsRemover = function CommonBitsRemover () {
44984           this._commonCoord = null;
44985           this._ccFilter = new CommonCoordinateFilter();
44986         };
44987
44988         var staticAccessors$42 = { CommonCoordinateFilter: { configurable: true },Translater: { configurable: true } };
44989         CommonBitsRemover.prototype.addCommonBits = function addCommonBits (geom) {
44990           var trans = new Translater(this._commonCoord);
44991           geom.apply(trans);
44992           geom.geometryChanged();
44993         };
44994         CommonBitsRemover.prototype.removeCommonBits = function removeCommonBits (geom) {
44995           if (this._commonCoord.x === 0.0 && this._commonCoord.y === 0.0) { return geom }
44996           var invCoord = new Coordinate(this._commonCoord);
44997           invCoord.x = -invCoord.x;
44998           invCoord.y = -invCoord.y;
44999           var trans = new Translater(invCoord);
45000           geom.apply(trans);
45001           geom.geometryChanged();
45002           return geom
45003         };
45004         CommonBitsRemover.prototype.getCommonCoordinate = function getCommonCoordinate () {
45005           return this._commonCoord
45006         };
45007         CommonBitsRemover.prototype.add = function add (geom) {
45008           geom.apply(this._ccFilter);
45009           this._commonCoord = this._ccFilter.getCommonCoordinate();
45010         };
45011         CommonBitsRemover.prototype.interfaces_ = function interfaces_ () {
45012           return []
45013         };
45014         CommonBitsRemover.prototype.getClass = function getClass () {
45015           return CommonBitsRemover
45016         };
45017         staticAccessors$42.CommonCoordinateFilter.get = function () { return CommonCoordinateFilter };
45018         staticAccessors$42.Translater.get = function () { return Translater };
45019
45020         Object.defineProperties( CommonBitsRemover, staticAccessors$42 );
45021
45022         var CommonCoordinateFilter = function CommonCoordinateFilter () {
45023           this._commonBitsX = new CommonBits();
45024           this._commonBitsY = new CommonBits();
45025         };
45026         CommonCoordinateFilter.prototype.filter = function filter (coord) {
45027           this._commonBitsX.add(coord.x);
45028           this._commonBitsY.add(coord.y);
45029         };
45030         CommonCoordinateFilter.prototype.getCommonCoordinate = function getCommonCoordinate () {
45031           return new Coordinate(this._commonBitsX.getCommon(), this._commonBitsY.getCommon())
45032         };
45033         CommonCoordinateFilter.prototype.interfaces_ = function interfaces_ () {
45034           return [CoordinateFilter]
45035         };
45036         CommonCoordinateFilter.prototype.getClass = function getClass () {
45037           return CommonCoordinateFilter
45038         };
45039
45040         var Translater = function Translater () {
45041           this.trans = null;
45042           var trans = arguments[0];
45043           this.trans = trans;
45044         };
45045         Translater.prototype.filter = function filter (seq, i) {
45046           var xp = seq.getOrdinate(i, 0) + this.trans.x;
45047           var yp = seq.getOrdinate(i, 1) + this.trans.y;
45048           seq.setOrdinate(i, 0, xp);
45049           seq.setOrdinate(i, 1, yp);
45050         };
45051         Translater.prototype.isDone = function isDone () {
45052           return false
45053         };
45054         Translater.prototype.isGeometryChanged = function isGeometryChanged () {
45055           return true
45056         };
45057         Translater.prototype.interfaces_ = function interfaces_ () {
45058           return [CoordinateSequenceFilter]
45059         };
45060         Translater.prototype.getClass = function getClass () {
45061           return Translater
45062         };
45063
45064         var SnapOverlayOp = function SnapOverlayOp (g1, g2) {
45065           this._geom = new Array(2).fill(null);
45066           this._snapTolerance = null;
45067           this._cbr = null;
45068           this._geom[0] = g1;
45069           this._geom[1] = g2;
45070           this.computeSnapTolerance();
45071         };
45072         SnapOverlayOp.prototype.selfSnap = function selfSnap (geom) {
45073           var snapper0 = new GeometrySnapper(geom);
45074           var snapGeom = snapper0.snapTo(geom, this._snapTolerance);
45075           return snapGeom
45076         };
45077         SnapOverlayOp.prototype.removeCommonBits = function removeCommonBits (geom) {
45078           this._cbr = new CommonBitsRemover();
45079           this._cbr.add(geom[0]);
45080           this._cbr.add(geom[1]);
45081           var remGeom = new Array(2).fill(null);
45082           remGeom[0] = this._cbr.removeCommonBits(geom[0].copy());
45083           remGeom[1] = this._cbr.removeCommonBits(geom[1].copy());
45084           return remGeom
45085         };
45086         SnapOverlayOp.prototype.prepareResult = function prepareResult (geom) {
45087           this._cbr.addCommonBits(geom);
45088           return geom
45089         };
45090         SnapOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {
45091           var prepGeom = this.snap(this._geom);
45092           var result = OverlayOp.overlayOp(prepGeom[0], prepGeom[1], opCode);
45093           return this.prepareResult(result)
45094         };
45095         SnapOverlayOp.prototype.checkValid = function checkValid (g) {
45096           if (!g.isValid()) {
45097             System.out.println('Snapped geometry is invalid');
45098           }
45099         };
45100         SnapOverlayOp.prototype.computeSnapTolerance = function computeSnapTolerance () {
45101           this._snapTolerance = GeometrySnapper.computeOverlaySnapTolerance(this._geom[0], this._geom[1]);
45102         };
45103         SnapOverlayOp.prototype.snap = function snap (geom) {
45104           var remGeom = this.removeCommonBits(geom);
45105           var snapGeom = GeometrySnapper.snap(remGeom[0], remGeom[1], this._snapTolerance);
45106           return snapGeom
45107         };
45108         SnapOverlayOp.prototype.interfaces_ = function interfaces_ () {
45109           return []
45110         };
45111         SnapOverlayOp.prototype.getClass = function getClass () {
45112           return SnapOverlayOp
45113         };
45114         SnapOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {
45115           var op = new SnapOverlayOp(g0, g1);
45116           return op.getResultGeometry(opCode)
45117         };
45118         SnapOverlayOp.union = function union (g0, g1) {
45119           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)
45120         };
45121         SnapOverlayOp.intersection = function intersection (g0, g1) {
45122           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)
45123         };
45124         SnapOverlayOp.symDifference = function symDifference (g0, g1) {
45125           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)
45126         };
45127         SnapOverlayOp.difference = function difference (g0, g1) {
45128           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)
45129         };
45130
45131         var SnapIfNeededOverlayOp = function SnapIfNeededOverlayOp (g1, g2) {
45132           this._geom = new Array(2).fill(null);
45133           this._geom[0] = g1;
45134           this._geom[1] = g2;
45135         };
45136         SnapIfNeededOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {
45137           var result = null;
45138           var isSuccess = false;
45139           var savedException = null;
45140           try {
45141             result = OverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);
45142             var isValid = true;
45143             if (isValid) { isSuccess = true; }
45144           } catch (ex) {
45145             if (ex instanceof RuntimeException) {
45146               savedException = ex;
45147             } else { throw ex }
45148           } finally {}
45149           if (!isSuccess) {
45150             try {
45151               result = SnapOverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);
45152             } catch (ex) {
45153               if (ex instanceof RuntimeException) {
45154                 throw savedException
45155               } else { throw ex }
45156             } finally {}
45157           }
45158           return result
45159         };
45160         SnapIfNeededOverlayOp.prototype.interfaces_ = function interfaces_ () {
45161           return []
45162         };
45163         SnapIfNeededOverlayOp.prototype.getClass = function getClass () {
45164           return SnapIfNeededOverlayOp
45165         };
45166         SnapIfNeededOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {
45167           var op = new SnapIfNeededOverlayOp(g0, g1);
45168           return op.getResultGeometry(opCode)
45169         };
45170         SnapIfNeededOverlayOp.union = function union (g0, g1) {
45171           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)
45172         };
45173         SnapIfNeededOverlayOp.intersection = function intersection (g0, g1) {
45174           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)
45175         };
45176         SnapIfNeededOverlayOp.symDifference = function symDifference (g0, g1) {
45177           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)
45178         };
45179         SnapIfNeededOverlayOp.difference = function difference (g0, g1) {
45180           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)
45181         };
45182
45183         var MonotoneChain$2 = function MonotoneChain () {
45184           this.mce = null;
45185           this.chainIndex = null;
45186           var mce = arguments[0];
45187           var chainIndex = arguments[1];
45188           this.mce = mce;
45189           this.chainIndex = chainIndex;
45190         };
45191         MonotoneChain$2.prototype.computeIntersections = function computeIntersections (mc, si) {
45192           this.mce.computeIntersectsForChain(this.chainIndex, mc.mce, mc.chainIndex, si);
45193         };
45194         MonotoneChain$2.prototype.interfaces_ = function interfaces_ () {
45195           return []
45196         };
45197         MonotoneChain$2.prototype.getClass = function getClass () {
45198           return MonotoneChain$2
45199         };
45200
45201         var SweepLineEvent = function SweepLineEvent () {
45202           this._label = null;
45203           this._xValue = null;
45204           this._eventType = null;
45205           this._insertEvent = null;
45206           this._deleteEventIndex = null;
45207           this._obj = null;
45208           if (arguments.length === 2) {
45209             var x = arguments[0];
45210             var insertEvent = arguments[1];
45211             this._eventType = SweepLineEvent.DELETE;
45212             this._xValue = x;
45213             this._insertEvent = insertEvent;
45214           } else if (arguments.length === 3) {
45215             var label = arguments[0];
45216             var x$1 = arguments[1];
45217             var obj = arguments[2];
45218             this._eventType = SweepLineEvent.INSERT;
45219             this._label = label;
45220             this._xValue = x$1;
45221             this._obj = obj;
45222           }
45223         };
45224
45225         var staticAccessors$43 = { INSERT: { configurable: true },DELETE: { configurable: true } };
45226         SweepLineEvent.prototype.isDelete = function isDelete () {
45227           return this._eventType === SweepLineEvent.DELETE
45228         };
45229         SweepLineEvent.prototype.setDeleteEventIndex = function setDeleteEventIndex (deleteEventIndex) {
45230           this._deleteEventIndex = deleteEventIndex;
45231         };
45232         SweepLineEvent.prototype.getObject = function getObject () {
45233           return this._obj
45234         };
45235         SweepLineEvent.prototype.compareTo = function compareTo (o) {
45236           var pe = o;
45237           if (this._xValue < pe._xValue) { return -1 }
45238           if (this._xValue > pe._xValue) { return 1 }
45239           if (this._eventType < pe._eventType) { return -1 }
45240           if (this._eventType > pe._eventType) { return 1 }
45241           return 0
45242         };
45243         SweepLineEvent.prototype.getInsertEvent = function getInsertEvent () {
45244           return this._insertEvent
45245         };
45246         SweepLineEvent.prototype.isInsert = function isInsert () {
45247           return this._eventType === SweepLineEvent.INSERT
45248         };
45249         SweepLineEvent.prototype.isSameLabel = function isSameLabel (ev) {
45250           if (this._label === null) { return false }
45251           return this._label === ev._label
45252         };
45253         SweepLineEvent.prototype.getDeleteEventIndex = function getDeleteEventIndex () {
45254           return this._deleteEventIndex
45255         };
45256         SweepLineEvent.prototype.interfaces_ = function interfaces_ () {
45257           return [Comparable]
45258         };
45259         SweepLineEvent.prototype.getClass = function getClass () {
45260           return SweepLineEvent
45261         };
45262         staticAccessors$43.INSERT.get = function () { return 1 };
45263         staticAccessors$43.DELETE.get = function () { return 2 };
45264
45265         Object.defineProperties( SweepLineEvent, staticAccessors$43 );
45266
45267         var EdgeSetIntersector = function EdgeSetIntersector () {};
45268
45269         EdgeSetIntersector.prototype.interfaces_ = function interfaces_ () {
45270           return []
45271         };
45272         EdgeSetIntersector.prototype.getClass = function getClass () {
45273           return EdgeSetIntersector
45274         };
45275
45276         var SegmentIntersector$2 = function SegmentIntersector () {
45277           this._hasIntersection = false;
45278           this._hasProper = false;
45279           this._hasProperInterior = false;
45280           this._properIntersectionPoint = null;
45281           this._li = null;
45282           this._includeProper = null;
45283           this._recordIsolated = null;
45284           this._isSelfIntersection = null;
45285           this._numIntersections = 0;
45286           this.numTests = 0;
45287           this._bdyNodes = null;
45288           this._isDone = false;
45289           this._isDoneWhenProperInt = false;
45290           var li = arguments[0];
45291           var includeProper = arguments[1];
45292           var recordIsolated = arguments[2];
45293           this._li = li;
45294           this._includeProper = includeProper;
45295           this._recordIsolated = recordIsolated;
45296         };
45297         SegmentIntersector$2.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {
45298           if (e0 === e1) {
45299             if (this._li.getIntersectionNum() === 1) {
45300               if (SegmentIntersector$2.isAdjacentSegments(segIndex0, segIndex1)) { return true }
45301               if (e0.isClosed()) {
45302                 var maxSegIndex = e0.getNumPoints() - 1;
45303                 if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||
45304                     (segIndex1 === 0 && segIndex0 === maxSegIndex)) {
45305                   return true
45306                 }
45307               }
45308             }
45309           }
45310           return false
45311         };
45312         SegmentIntersector$2.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {
45313           return this._properIntersectionPoint
45314         };
45315         SegmentIntersector$2.prototype.setIsDoneIfProperInt = function setIsDoneIfProperInt (isDoneWhenProperInt) {
45316           this._isDoneWhenProperInt = isDoneWhenProperInt;
45317         };
45318         SegmentIntersector$2.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {
45319           return this._hasProperInterior
45320         };
45321         SegmentIntersector$2.prototype.isBoundaryPointInternal = function isBoundaryPointInternal (li, bdyNodes) {
45322           for (var i = bdyNodes.iterator(); i.hasNext();) {
45323             var node = i.next();
45324             var pt = node.getCoordinate();
45325             if (li.isIntersection(pt)) { return true }
45326           }
45327           return false
45328         };
45329         SegmentIntersector$2.prototype.hasProperIntersection = function hasProperIntersection () {
45330           return this._hasProper
45331         };
45332         SegmentIntersector$2.prototype.hasIntersection = function hasIntersection () {
45333           return this._hasIntersection
45334         };
45335         SegmentIntersector$2.prototype.isDone = function isDone () {
45336           return this._isDone
45337         };
45338         SegmentIntersector$2.prototype.isBoundaryPoint = function isBoundaryPoint (li, bdyNodes) {
45339           if (bdyNodes === null) { return false }
45340           if (this.isBoundaryPointInternal(li, bdyNodes[0])) { return true }
45341           if (this.isBoundaryPointInternal(li, bdyNodes[1])) { return true }
45342           return false
45343         };
45344         SegmentIntersector$2.prototype.setBoundaryNodes = function setBoundaryNodes (bdyNodes0, bdyNodes1) {
45345           this._bdyNodes = new Array(2).fill(null);
45346           this._bdyNodes[0] = bdyNodes0;
45347           this._bdyNodes[1] = bdyNodes1;
45348         };
45349         SegmentIntersector$2.prototype.addIntersections = function addIntersections (e0, segIndex0, e1, segIndex1) {
45350           if (e0 === e1 && segIndex0 === segIndex1) { return null }
45351           this.numTests++;
45352           var p00 = e0.getCoordinates()[segIndex0];
45353           var p01 = e0.getCoordinates()[segIndex0 + 1];
45354           var p10 = e1.getCoordinates()[segIndex1];
45355           var p11 = e1.getCoordinates()[segIndex1 + 1];
45356           this._li.computeIntersection(p00, p01, p10, p11);
45357           if (this._li.hasIntersection()) {
45358             if (this._recordIsolated) {
45359               e0.setIsolated(false);
45360               e1.setIsolated(false);
45361             }
45362             this._numIntersections++;
45363             if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {
45364               this._hasIntersection = true;
45365               if (this._includeProper || !this._li.isProper()) {
45366                 e0.addIntersections(this._li, segIndex0, 0);
45367                 e1.addIntersections(this._li, segIndex1, 1);
45368               }
45369               if (this._li.isProper()) {
45370                 this._properIntersectionPoint = this._li.getIntersection(0).copy();
45371                 this._hasProper = true;
45372                 if (this._isDoneWhenProperInt) {
45373                   this._isDone = true;
45374                 }
45375                 if (!this.isBoundaryPoint(this._li, this._bdyNodes)) { this._hasProperInterior = true; }
45376               }
45377             }
45378           }
45379         };
45380         SegmentIntersector$2.prototype.interfaces_ = function interfaces_ () {
45381           return []
45382         };
45383         SegmentIntersector$2.prototype.getClass = function getClass () {
45384           return SegmentIntersector$2
45385         };
45386         SegmentIntersector$2.isAdjacentSegments = function isAdjacentSegments (i1, i2) {
45387           return Math.abs(i1 - i2) === 1
45388         };
45389
45390         var SimpleMCSweepLineIntersector = (function (EdgeSetIntersector$$1) {
45391           function SimpleMCSweepLineIntersector () {
45392             EdgeSetIntersector$$1.call(this);
45393             this.events = new ArrayList();
45394             this.nOverlaps = null;
45395           }
45396
45397           if ( EdgeSetIntersector$$1 ) { SimpleMCSweepLineIntersector.__proto__ = EdgeSetIntersector$$1; }
45398           SimpleMCSweepLineIntersector.prototype = Object.create( EdgeSetIntersector$$1 && EdgeSetIntersector$$1.prototype );
45399           SimpleMCSweepLineIntersector.prototype.constructor = SimpleMCSweepLineIntersector;
45400           SimpleMCSweepLineIntersector.prototype.prepareEvents = function prepareEvents () {
45401             var this$1 = this;
45402
45403             Collections.sort(this.events);
45404             for (var i = 0; i < this.events.size(); i++) {
45405               var ev = this$1.events.get(i);
45406               if (ev.isDelete()) {
45407                 ev.getInsertEvent().setDeleteEventIndex(i);
45408               }
45409             }
45410           };
45411           SimpleMCSweepLineIntersector.prototype.computeIntersections = function computeIntersections () {
45412             var this$1 = this;
45413
45414             if (arguments.length === 1) {
45415               var si = arguments[0];
45416               this.nOverlaps = 0;
45417               this.prepareEvents();
45418               for (var i = 0; i < this.events.size(); i++) {
45419                 var ev = this$1.events.get(i);
45420                 if (ev.isInsert()) {
45421                   this$1.processOverlaps(i, ev.getDeleteEventIndex(), ev, si);
45422                 }
45423                 if (si.isDone()) {
45424                   break
45425                 }
45426               }
45427             } else if (arguments.length === 3) {
45428               if (arguments[2] instanceof SegmentIntersector$2 && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {
45429                 var edges0 = arguments[0];
45430                 var edges1 = arguments[1];
45431                 var si$1 = arguments[2];
45432                 this.addEdges(edges0, edges0);
45433                 this.addEdges(edges1, edges1);
45434                 this.computeIntersections(si$1);
45435               } else if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], List) && arguments[1] instanceof SegmentIntersector$2)) {
45436                 var edges = arguments[0];
45437                 var si$2 = arguments[1];
45438                 var testAllSegments = arguments[2];
45439                 if (testAllSegments) { this.addEdges(edges, null); } else { this.addEdges(edges); }
45440                 this.computeIntersections(si$2);
45441               }
45442             }
45443           };
45444           SimpleMCSweepLineIntersector.prototype.addEdge = function addEdge (edge, edgeSet) {
45445             var this$1 = this;
45446
45447             var mce = edge.getMonotoneChainEdge();
45448             var startIndex = mce.getStartIndexes();
45449             for (var i = 0; i < startIndex.length - 1; i++) {
45450               var mc = new MonotoneChain$2(mce, i);
45451               var insertEvent = new SweepLineEvent(edgeSet, mce.getMinX(i), mc);
45452               this$1.events.add(insertEvent);
45453               this$1.events.add(new SweepLineEvent(mce.getMaxX(i), insertEvent));
45454             }
45455           };
45456           SimpleMCSweepLineIntersector.prototype.processOverlaps = function processOverlaps (start, end, ev0, si) {
45457             var this$1 = this;
45458
45459             var mc0 = ev0.getObject();
45460             for (var i = start; i < end; i++) {
45461               var ev1 = this$1.events.get(i);
45462               if (ev1.isInsert()) {
45463                 var mc1 = ev1.getObject();
45464                 if (!ev0.isSameLabel(ev1)) {
45465                   mc0.computeIntersections(mc1, si);
45466                   this$1.nOverlaps++;
45467                 }
45468               }
45469             }
45470           };
45471           SimpleMCSweepLineIntersector.prototype.addEdges = function addEdges () {
45472             var this$1 = this;
45473
45474             if (arguments.length === 1) {
45475               var edges = arguments[0];
45476               for (var i = edges.iterator(); i.hasNext();) {
45477                 var edge = i.next();
45478                 this$1.addEdge(edge, edge);
45479               }
45480             } else if (arguments.length === 2) {
45481               var edges$1 = arguments[0];
45482               var edgeSet = arguments[1];
45483               for (var i$1 = edges$1.iterator(); i$1.hasNext();) {
45484                 var edge$1 = i$1.next();
45485                 this$1.addEdge(edge$1, edgeSet);
45486               }
45487             }
45488           };
45489           SimpleMCSweepLineIntersector.prototype.interfaces_ = function interfaces_ () {
45490             return []
45491           };
45492           SimpleMCSweepLineIntersector.prototype.getClass = function getClass () {
45493             return SimpleMCSweepLineIntersector
45494           };
45495
45496           return SimpleMCSweepLineIntersector;
45497         }(EdgeSetIntersector));
45498
45499         var IntervalRTreeNode = function IntervalRTreeNode () {
45500           this._min = Double.POSITIVE_INFINITY;
45501           this._max = Double.NEGATIVE_INFINITY;
45502         };
45503
45504         var staticAccessors$45 = { NodeComparator: { configurable: true } };
45505         IntervalRTreeNode.prototype.getMin = function getMin () {
45506           return this._min
45507         };
45508         IntervalRTreeNode.prototype.intersects = function intersects (queryMin, queryMax) {
45509           if (this._min > queryMax || this._max < queryMin) { return false }
45510           return true
45511         };
45512         IntervalRTreeNode.prototype.getMax = function getMax () {
45513           return this._max
45514         };
45515         IntervalRTreeNode.prototype.toString = function toString () {
45516           return WKTWriter.toLineString(new Coordinate(this._min, 0), new Coordinate(this._max, 0))
45517         };
45518         IntervalRTreeNode.prototype.interfaces_ = function interfaces_ () {
45519           return []
45520         };
45521         IntervalRTreeNode.prototype.getClass = function getClass () {
45522           return IntervalRTreeNode
45523         };
45524         staticAccessors$45.NodeComparator.get = function () { return NodeComparator };
45525
45526         Object.defineProperties( IntervalRTreeNode, staticAccessors$45 );
45527
45528         var NodeComparator = function NodeComparator () {};
45529
45530         NodeComparator.prototype.compare = function compare (o1, o2) {
45531           var n1 = o1;
45532           var n2 = o2;
45533           var mid1 = (n1._min + n1._max) / 2;
45534           var mid2 = (n2._min + n2._max) / 2;
45535           if (mid1 < mid2) { return -1 }
45536           if (mid1 > mid2) { return 1 }
45537           return 0
45538         };
45539         NodeComparator.prototype.interfaces_ = function interfaces_ () {
45540           return [Comparator]
45541         };
45542         NodeComparator.prototype.getClass = function getClass () {
45543           return NodeComparator
45544         };
45545
45546         var IntervalRTreeLeafNode = (function (IntervalRTreeNode$$1) {
45547           function IntervalRTreeLeafNode () {
45548             IntervalRTreeNode$$1.call(this);
45549             this._item = null;
45550             var min = arguments[0];
45551             var max = arguments[1];
45552             var item = arguments[2];
45553             this._min = min;
45554             this._max = max;
45555             this._item = item;
45556           }
45557
45558           if ( IntervalRTreeNode$$1 ) { IntervalRTreeLeafNode.__proto__ = IntervalRTreeNode$$1; }
45559           IntervalRTreeLeafNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );
45560           IntervalRTreeLeafNode.prototype.constructor = IntervalRTreeLeafNode;
45561           IntervalRTreeLeafNode.prototype.query = function query (queryMin, queryMax, visitor) {
45562             if (!this.intersects(queryMin, queryMax)) { return null }
45563             visitor.visitItem(this._item);
45564           };
45565           IntervalRTreeLeafNode.prototype.interfaces_ = function interfaces_ () {
45566             return []
45567           };
45568           IntervalRTreeLeafNode.prototype.getClass = function getClass () {
45569             return IntervalRTreeLeafNode
45570           };
45571
45572           return IntervalRTreeLeafNode;
45573         }(IntervalRTreeNode));
45574
45575         var IntervalRTreeBranchNode = (function (IntervalRTreeNode$$1) {
45576           function IntervalRTreeBranchNode () {
45577             IntervalRTreeNode$$1.call(this);
45578             this._node1 = null;
45579             this._node2 = null;
45580             var n1 = arguments[0];
45581             var n2 = arguments[1];
45582             this._node1 = n1;
45583             this._node2 = n2;
45584             this.buildExtent(this._node1, this._node2);
45585           }
45586
45587           if ( IntervalRTreeNode$$1 ) { IntervalRTreeBranchNode.__proto__ = IntervalRTreeNode$$1; }
45588           IntervalRTreeBranchNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );
45589           IntervalRTreeBranchNode.prototype.constructor = IntervalRTreeBranchNode;
45590           IntervalRTreeBranchNode.prototype.buildExtent = function buildExtent (n1, n2) {
45591             this._min = Math.min(n1._min, n2._min);
45592             this._max = Math.max(n1._max, n2._max);
45593           };
45594           IntervalRTreeBranchNode.prototype.query = function query (queryMin, queryMax, visitor) {
45595             if (!this.intersects(queryMin, queryMax)) {
45596               return null
45597             }
45598             if (this._node1 !== null) { this._node1.query(queryMin, queryMax, visitor); }
45599             if (this._node2 !== null) { this._node2.query(queryMin, queryMax, visitor); }
45600           };
45601           IntervalRTreeBranchNode.prototype.interfaces_ = function interfaces_ () {
45602             return []
45603           };
45604           IntervalRTreeBranchNode.prototype.getClass = function getClass () {
45605             return IntervalRTreeBranchNode
45606           };
45607
45608           return IntervalRTreeBranchNode;
45609         }(IntervalRTreeNode));
45610
45611         var SortedPackedIntervalRTree = function SortedPackedIntervalRTree () {
45612           this._leaves = new ArrayList();
45613           this._root = null;
45614           this._level = 0;
45615         };
45616         SortedPackedIntervalRTree.prototype.buildTree = function buildTree () {
45617             var this$1 = this;
45618
45619           Collections.sort(this._leaves, new IntervalRTreeNode.NodeComparator());
45620           var src = this._leaves;
45621           var temp = null;
45622           var dest = new ArrayList();
45623           while (true) {
45624             this$1.buildLevel(src, dest);
45625             if (dest.size() === 1) { return dest.get(0) }
45626             temp = src;
45627             src = dest;
45628             dest = temp;
45629           }
45630         };
45631         SortedPackedIntervalRTree.prototype.insert = function insert (min, max, item) {
45632           if (this._root !== null) { throw new Error('Index cannot be added to once it has been queried') }
45633           this._leaves.add(new IntervalRTreeLeafNode(min, max, item));
45634         };
45635         SortedPackedIntervalRTree.prototype.query = function query (min, max, visitor) {
45636           this.init();
45637           this._root.query(min, max, visitor);
45638         };
45639         SortedPackedIntervalRTree.prototype.buildRoot = function buildRoot () {
45640           if (this._root !== null) { return null }
45641           this._root = this.buildTree();
45642         };
45643         SortedPackedIntervalRTree.prototype.printNode = function printNode (node) {
45644           System.out.println(WKTWriter.toLineString(new Coordinate(node._min, this._level), new Coordinate(node._max, this._level)));
45645         };
45646         SortedPackedIntervalRTree.prototype.init = function init () {
45647           if (this._root !== null) { return null }
45648           this.buildRoot();
45649         };
45650         SortedPackedIntervalRTree.prototype.buildLevel = function buildLevel (src, dest) {
45651           this._level++;
45652           dest.clear();
45653           for (var i = 0; i < src.size(); i += 2) {
45654             var n1 = src.get(i);
45655             var n2 = i + 1 < src.size() ? src.get(i) : null;
45656             if (n2 === null) {
45657               dest.add(n1);
45658             } else {
45659               var node = new IntervalRTreeBranchNode(src.get(i), src.get(i + 1));
45660               dest.add(node);
45661             }
45662           }
45663         };
45664         SortedPackedIntervalRTree.prototype.interfaces_ = function interfaces_ () {
45665           return []
45666         };
45667         SortedPackedIntervalRTree.prototype.getClass = function getClass () {
45668           return SortedPackedIntervalRTree
45669         };
45670
45671         var ArrayListVisitor = function ArrayListVisitor () {
45672           this._items = new ArrayList();
45673         };
45674         ArrayListVisitor.prototype.visitItem = function visitItem (item) {
45675           this._items.add(item);
45676         };
45677         ArrayListVisitor.prototype.getItems = function getItems () {
45678           return this._items
45679         };
45680         ArrayListVisitor.prototype.interfaces_ = function interfaces_ () {
45681           return [ItemVisitor]
45682         };
45683         ArrayListVisitor.prototype.getClass = function getClass () {
45684           return ArrayListVisitor
45685         };
45686
45687         var IndexedPointInAreaLocator = function IndexedPointInAreaLocator () {
45688           this._index = null;
45689           var g = arguments[0];
45690           if (!hasInterface(g, Polygonal)) { throw new IllegalArgumentException('Argument must be Polygonal') }
45691           this._index = new IntervalIndexedGeometry(g);
45692         };
45693
45694         var staticAccessors$44 = { SegmentVisitor: { configurable: true },IntervalIndexedGeometry: { configurable: true } };
45695         IndexedPointInAreaLocator.prototype.locate = function locate (p) {
45696           var rcc = new RayCrossingCounter(p);
45697           var visitor = new SegmentVisitor(rcc);
45698           this._index.query(p.y, p.y, visitor);
45699           return rcc.getLocation()
45700         };
45701         IndexedPointInAreaLocator.prototype.interfaces_ = function interfaces_ () {
45702           return [PointOnGeometryLocator]
45703         };
45704         IndexedPointInAreaLocator.prototype.getClass = function getClass () {
45705           return IndexedPointInAreaLocator
45706         };
45707         staticAccessors$44.SegmentVisitor.get = function () { return SegmentVisitor };
45708         staticAccessors$44.IntervalIndexedGeometry.get = function () { return IntervalIndexedGeometry };
45709
45710         Object.defineProperties( IndexedPointInAreaLocator, staticAccessors$44 );
45711
45712         var SegmentVisitor = function SegmentVisitor () {
45713           this._counter = null;
45714           var counter = arguments[0];
45715           this._counter = counter;
45716         };
45717         SegmentVisitor.prototype.visitItem = function visitItem (item) {
45718           var seg = item;
45719           this._counter.countSegment(seg.getCoordinate(0), seg.getCoordinate(1));
45720         };
45721         SegmentVisitor.prototype.interfaces_ = function interfaces_ () {
45722           return [ItemVisitor]
45723         };
45724         SegmentVisitor.prototype.getClass = function getClass () {
45725           return SegmentVisitor
45726         };
45727
45728         var IntervalIndexedGeometry = function IntervalIndexedGeometry () {
45729           this._index = new SortedPackedIntervalRTree();
45730           var geom = arguments[0];
45731           this.init(geom);
45732         };
45733         IntervalIndexedGeometry.prototype.init = function init (geom) {
45734             var this$1 = this;
45735
45736           var lines = LinearComponentExtracter.getLines(geom);
45737           for (var i = lines.iterator(); i.hasNext();) {
45738             var line = i.next();
45739             var pts = line.getCoordinates();
45740             this$1.addLine(pts);
45741           }
45742         };
45743         IntervalIndexedGeometry.prototype.addLine = function addLine (pts) {
45744             var this$1 = this;
45745
45746           for (var i = 1; i < pts.length; i++) {
45747             var seg = new LineSegment(pts[i - 1], pts[i]);
45748             var min = Math.min(seg.p0.y, seg.p1.y);
45749             var max = Math.max(seg.p0.y, seg.p1.y);
45750             this$1._index.insert(min, max, seg);
45751           }
45752         };
45753         IntervalIndexedGeometry.prototype.query = function query () {
45754           if (arguments.length === 2) {
45755             var min = arguments[0];
45756             var max = arguments[1];
45757             var visitor = new ArrayListVisitor();
45758             this._index.query(min, max, visitor);
45759             return visitor.getItems()
45760           } else if (arguments.length === 3) {
45761             var min$1 = arguments[0];
45762             var max$1 = arguments[1];
45763             var visitor$1 = arguments[2];
45764             this._index.query(min$1, max$1, visitor$1);
45765           }
45766         };
45767         IntervalIndexedGeometry.prototype.interfaces_ = function interfaces_ () {
45768           return []
45769         };
45770         IntervalIndexedGeometry.prototype.getClass = function getClass () {
45771           return IntervalIndexedGeometry
45772         };
45773
45774         var GeometryGraph = (function (PlanarGraph$$1) {
45775           function GeometryGraph () {
45776             PlanarGraph$$1.call(this);
45777             this._parentGeom = null;
45778             this._lineEdgeMap = new HashMap();
45779             this._boundaryNodeRule = null;
45780             this._useBoundaryDeterminationRule = true;
45781             this._argIndex = null;
45782             this._boundaryNodes = null;
45783             this._hasTooFewPoints = false;
45784             this._invalidPoint = null;
45785             this._areaPtLocator = null;
45786             this._ptLocator = new PointLocator();
45787             if (arguments.length === 2) {
45788               var argIndex = arguments[0];
45789               var parentGeom = arguments[1];
45790               var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
45791               this._argIndex = argIndex;
45792               this._parentGeom = parentGeom;
45793               this._boundaryNodeRule = boundaryNodeRule;
45794               if (parentGeom !== null) {
45795                 this.add(parentGeom);
45796               }
45797             } else if (arguments.length === 3) {
45798               var argIndex$1 = arguments[0];
45799               var parentGeom$1 = arguments[1];
45800               var boundaryNodeRule$1 = arguments[2];
45801               this._argIndex = argIndex$1;
45802               this._parentGeom = parentGeom$1;
45803               this._boundaryNodeRule = boundaryNodeRule$1;
45804               if (parentGeom$1 !== null) {
45805                 this.add(parentGeom$1);
45806               }
45807             }
45808           }
45809
45810           if ( PlanarGraph$$1 ) { GeometryGraph.__proto__ = PlanarGraph$$1; }
45811           GeometryGraph.prototype = Object.create( PlanarGraph$$1 && PlanarGraph$$1.prototype );
45812           GeometryGraph.prototype.constructor = GeometryGraph;
45813           GeometryGraph.prototype.insertBoundaryPoint = function insertBoundaryPoint (argIndex, coord) {
45814             var n = this._nodes.addNode(coord);
45815             var lbl = n.getLabel();
45816             var boundaryCount = 1;
45817             var loc = Location.NONE;
45818             loc = lbl.getLocation(argIndex, Position.ON);
45819             if (loc === Location.BOUNDARY) { boundaryCount++; }
45820             var newLoc = GeometryGraph.determineBoundary(this._boundaryNodeRule, boundaryCount);
45821             lbl.setLocation(argIndex, newLoc);
45822           };
45823           GeometryGraph.prototype.computeSelfNodes = function computeSelfNodes () {
45824             if (arguments.length === 2) {
45825               var li = arguments[0];
45826               var computeRingSelfNodes = arguments[1];
45827               return this.computeSelfNodes(li, computeRingSelfNodes, false)
45828             } else if (arguments.length === 3) {
45829               var li$1 = arguments[0];
45830               var computeRingSelfNodes$1 = arguments[1];
45831               var isDoneIfProperInt = arguments[2];
45832               var si = new SegmentIntersector$2(li$1, true, false);
45833               si.setIsDoneIfProperInt(isDoneIfProperInt);
45834               var esi = this.createEdgeSetIntersector();
45835               var isRings = this._parentGeom instanceof LinearRing || this._parentGeom instanceof Polygon || this._parentGeom instanceof MultiPolygon;
45836               var computeAllSegments = computeRingSelfNodes$1 || !isRings;
45837               esi.computeIntersections(this._edges, si, computeAllSegments);
45838               this.addSelfIntersectionNodes(this._argIndex);
45839               return si
45840             }
45841           };
45842           GeometryGraph.prototype.computeSplitEdges = function computeSplitEdges (edgelist) {
45843             for (var i = this._edges.iterator(); i.hasNext();) {
45844               var e = i.next();
45845               e.eiList.addSplitEdges(edgelist);
45846             }
45847           };
45848           GeometryGraph.prototype.computeEdgeIntersections = function computeEdgeIntersections (g, li, includeProper) {
45849             var si = new SegmentIntersector$2(li, includeProper, true);
45850             si.setBoundaryNodes(this.getBoundaryNodes(), g.getBoundaryNodes());
45851             var esi = this.createEdgeSetIntersector();
45852             esi.computeIntersections(this._edges, g._edges, si);
45853             return si
45854           };
45855           GeometryGraph.prototype.getGeometry = function getGeometry () {
45856             return this._parentGeom
45857           };
45858           GeometryGraph.prototype.getBoundaryNodeRule = function getBoundaryNodeRule () {
45859             return this._boundaryNodeRule
45860           };
45861           GeometryGraph.prototype.hasTooFewPoints = function hasTooFewPoints () {
45862             return this._hasTooFewPoints
45863           };
45864           GeometryGraph.prototype.addPoint = function addPoint () {
45865             if (arguments[0] instanceof Point) {
45866               var p = arguments[0];
45867               var coord = p.getCoordinate();
45868               this.insertPoint(this._argIndex, coord, Location.INTERIOR);
45869             } else if (arguments[0] instanceof Coordinate) {
45870               var pt = arguments[0];
45871               this.insertPoint(this._argIndex, pt, Location.INTERIOR);
45872             }
45873           };
45874           GeometryGraph.prototype.addPolygon = function addPolygon (p) {
45875             var this$1 = this;
45876
45877             this.addPolygonRing(p.getExteriorRing(), Location.EXTERIOR, Location.INTERIOR);
45878             for (var i = 0; i < p.getNumInteriorRing(); i++) {
45879               var hole = p.getInteriorRingN(i);
45880               this$1.addPolygonRing(hole, Location.INTERIOR, Location.EXTERIOR);
45881             }
45882           };
45883           GeometryGraph.prototype.addEdge = function addEdge (e) {
45884             this.insertEdge(e);
45885             var coord = e.getCoordinates();
45886             this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);
45887             this.insertPoint(this._argIndex, coord[coord.length - 1], Location.BOUNDARY);
45888           };
45889           GeometryGraph.prototype.addLineString = function addLineString (line) {
45890             var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());
45891             if (coord.length < 2) {
45892               this._hasTooFewPoints = true;
45893               this._invalidPoint = coord[0];
45894               return null
45895             }
45896             var e = new Edge(coord, new Label(this._argIndex, Location.INTERIOR));
45897             this._lineEdgeMap.put(line, e);
45898             this.insertEdge(e);
45899             Assert.isTrue(coord.length >= 2, 'found LineString with single point');
45900             this.insertBoundaryPoint(this._argIndex, coord[0]);
45901             this.insertBoundaryPoint(this._argIndex, coord[coord.length - 1]);
45902           };
45903           GeometryGraph.prototype.getInvalidPoint = function getInvalidPoint () {
45904             return this._invalidPoint
45905           };
45906           GeometryGraph.prototype.getBoundaryPoints = function getBoundaryPoints () {
45907             var coll = this.getBoundaryNodes();
45908             var pts = new Array(coll.size()).fill(null);
45909             var i = 0;
45910             for (var it = coll.iterator(); it.hasNext();) {
45911               var node = it.next();
45912               pts[i++] = node.getCoordinate().copy();
45913             }
45914             return pts
45915           };
45916           GeometryGraph.prototype.getBoundaryNodes = function getBoundaryNodes () {
45917             if (this._boundaryNodes === null) { this._boundaryNodes = this._nodes.getBoundaryNodes(this._argIndex); }
45918             return this._boundaryNodes
45919           };
45920           GeometryGraph.prototype.addSelfIntersectionNode = function addSelfIntersectionNode (argIndex, coord, loc) {
45921             if (this.isBoundaryNode(argIndex, coord)) { return null }
45922             if (loc === Location.BOUNDARY && this._useBoundaryDeterminationRule) { this.insertBoundaryPoint(argIndex, coord); } else { this.insertPoint(argIndex, coord, loc); }
45923           };
45924           GeometryGraph.prototype.addPolygonRing = function addPolygonRing (lr, cwLeft, cwRight) {
45925             if (lr.isEmpty()) { return null }
45926             var coord = CoordinateArrays.removeRepeatedPoints(lr.getCoordinates());
45927             if (coord.length < 4) {
45928               this._hasTooFewPoints = true;
45929               this._invalidPoint = coord[0];
45930               return null
45931             }
45932             var left = cwLeft;
45933             var right = cwRight;
45934             if (CGAlgorithms.isCCW(coord)) {
45935               left = cwRight;
45936               right = cwLeft;
45937             }
45938             var e = new Edge(coord, new Label(this._argIndex, Location.BOUNDARY, left, right));
45939             this._lineEdgeMap.put(lr, e);
45940             this.insertEdge(e);
45941             this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);
45942           };
45943           GeometryGraph.prototype.insertPoint = function insertPoint (argIndex, coord, onLocation) {
45944             var n = this._nodes.addNode(coord);
45945             var lbl = n.getLabel();
45946             if (lbl === null) {
45947               n._label = new Label(argIndex, onLocation);
45948             } else { lbl.setLocation(argIndex, onLocation); }
45949           };
45950           GeometryGraph.prototype.createEdgeSetIntersector = function createEdgeSetIntersector () {
45951             return new SimpleMCSweepLineIntersector()
45952           };
45953           GeometryGraph.prototype.addSelfIntersectionNodes = function addSelfIntersectionNodes (argIndex) {
45954             var this$1 = this;
45955
45956             for (var i = this._edges.iterator(); i.hasNext();) {
45957               var e = i.next();
45958               var eLoc = e.getLabel().getLocation(argIndex);
45959               for (var eiIt = e.eiList.iterator(); eiIt.hasNext();) {
45960                 var ei = eiIt.next();
45961                 this$1.addSelfIntersectionNode(argIndex, ei.coord, eLoc);
45962               }
45963             }
45964           };
45965           GeometryGraph.prototype.add = function add () {
45966             if (arguments.length === 1) {
45967               var g = arguments[0];
45968               if (g.isEmpty()) { return null }
45969               if (g instanceof MultiPolygon) { this._useBoundaryDeterminationRule = false; }
45970               if (g instanceof Polygon) { this.addPolygon(g); }
45971               else if (g instanceof LineString) { this.addLineString(g); }
45972               else if (g instanceof Point) { this.addPoint(g); }
45973               else if (g instanceof MultiPoint) { this.addCollection(g); }
45974               else if (g instanceof MultiLineString) { this.addCollection(g); }
45975               else if (g instanceof MultiPolygon) { this.addCollection(g); }
45976               else if (g instanceof GeometryCollection) { this.addCollection(g); }
45977               else { throw new Error(g.getClass().getName()) }
45978             } else { return PlanarGraph$$1.prototype.add.apply(this, arguments) }
45979           };
45980           GeometryGraph.prototype.addCollection = function addCollection (gc) {
45981             var this$1 = this;
45982
45983             for (var i = 0; i < gc.getNumGeometries(); i++) {
45984               var g = gc.getGeometryN(i);
45985               this$1.add(g);
45986             }
45987           };
45988           GeometryGraph.prototype.locate = function locate (pt) {
45989             if (hasInterface(this._parentGeom, Polygonal) && this._parentGeom.getNumGeometries() > 50) {
45990               if (this._areaPtLocator === null) {
45991                 this._areaPtLocator = new IndexedPointInAreaLocator(this._parentGeom);
45992               }
45993               return this._areaPtLocator.locate(pt)
45994             }
45995             return this._ptLocator.locate(pt, this._parentGeom)
45996           };
45997           GeometryGraph.prototype.findEdge = function findEdge () {
45998             if (arguments.length === 1) {
45999               var line = arguments[0];
46000               return this._lineEdgeMap.get(line)
46001             } else { return PlanarGraph$$1.prototype.findEdge.apply(this, arguments) }
46002           };
46003           GeometryGraph.prototype.interfaces_ = function interfaces_ () {
46004             return []
46005           };
46006           GeometryGraph.prototype.getClass = function getClass () {
46007             return GeometryGraph
46008           };
46009           GeometryGraph.determineBoundary = function determineBoundary (boundaryNodeRule, boundaryCount) {
46010             return boundaryNodeRule.isInBoundary(boundaryCount) ? Location.BOUNDARY : Location.INTERIOR
46011           };
46012
46013           return GeometryGraph;
46014         }(PlanarGraph));
46015
46016         var GeometryGraphOp = function GeometryGraphOp () {
46017           this._li = new RobustLineIntersector();
46018           this._resultPrecisionModel = null;
46019           this._arg = null;
46020           if (arguments.length === 1) {
46021             var g0 = arguments[0];
46022             this.setComputationPrecision(g0.getPrecisionModel());
46023             this._arg = new Array(1).fill(null);
46024             this._arg[0] = new GeometryGraph(0, g0);
46025           } else if (arguments.length === 2) {
46026             var g0$1 = arguments[0];
46027             var g1 = arguments[1];
46028             var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
46029             if (g0$1.getPrecisionModel().compareTo(g1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$1.getPrecisionModel()); } else { this.setComputationPrecision(g1.getPrecisionModel()); }
46030             this._arg = new Array(2).fill(null);
46031             this._arg[0] = new GeometryGraph(0, g0$1, boundaryNodeRule);
46032             this._arg[1] = new GeometryGraph(1, g1, boundaryNodeRule);
46033           } else if (arguments.length === 3) {
46034             var g0$2 = arguments[0];
46035             var g1$1 = arguments[1];
46036             var boundaryNodeRule$1 = arguments[2];
46037             if (g0$2.getPrecisionModel().compareTo(g1$1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$2.getPrecisionModel()); } else { this.setComputationPrecision(g1$1.getPrecisionModel()); }
46038             this._arg = new Array(2).fill(null);
46039             this._arg[0] = new GeometryGraph(0, g0$2, boundaryNodeRule$1);
46040             this._arg[1] = new GeometryGraph(1, g1$1, boundaryNodeRule$1);
46041           }
46042         };
46043         GeometryGraphOp.prototype.getArgGeometry = function getArgGeometry (i) {
46044           return this._arg[i].getGeometry()
46045         };
46046         GeometryGraphOp.prototype.setComputationPrecision = function setComputationPrecision (pm) {
46047           this._resultPrecisionModel = pm;
46048           this._li.setPrecisionModel(this._resultPrecisionModel);
46049         };
46050         GeometryGraphOp.prototype.interfaces_ = function interfaces_ () {
46051           return []
46052         };
46053         GeometryGraphOp.prototype.getClass = function getClass () {
46054           return GeometryGraphOp
46055         };
46056
46057         // operation.geometrygraph
46058
46059         var GeometryMapper = function GeometryMapper () {};
46060
46061         GeometryMapper.prototype.interfaces_ = function interfaces_ () {
46062           return []
46063         };
46064         GeometryMapper.prototype.getClass = function getClass () {
46065           return GeometryMapper
46066         };
46067         GeometryMapper.map = function map () {
46068           if (arguments[0] instanceof Geometry && hasInterface(arguments[1], GeometryMapper.MapOp)) {
46069             var geom = arguments[0];
46070             var op = arguments[1];
46071             var mapped = new ArrayList();
46072             for (var i = 0; i < geom.getNumGeometries(); i++) {
46073               var g = op.map(geom.getGeometryN(i));
46074               if (g !== null) { mapped.add(g); }
46075             }
46076             return geom.getFactory().buildGeometry(mapped)
46077           } else if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], GeometryMapper.MapOp)) {
46078             var geoms = arguments[0];
46079             var op$1 = arguments[1];
46080             var mapped$1 = new ArrayList();
46081             for (var i$1 = geoms.iterator(); i$1.hasNext();) {
46082               var g$1 = i$1.next();
46083               var gr = op$1.map(g$1);
46084               if (gr !== null) { mapped$1.add(gr); }
46085             }
46086             return mapped$1
46087           }
46088         };
46089         GeometryMapper.MapOp = function MapOp () {};
46090
46091         var OverlayOp = (function (GeometryGraphOp) {
46092           function OverlayOp () {
46093             var g0 = arguments[0];
46094             var g1 = arguments[1];
46095             GeometryGraphOp.call(this, g0, g1);
46096             this._ptLocator = new PointLocator();
46097             this._geomFact = null;
46098             this._resultGeom = null;
46099             this._graph = null;
46100             this._edgeList = new EdgeList();
46101             this._resultPolyList = new ArrayList();
46102             this._resultLineList = new ArrayList();
46103             this._resultPointList = new ArrayList();
46104             this._graph = new PlanarGraph(new OverlayNodeFactory());
46105             this._geomFact = g0.getFactory();
46106           }
46107
46108           if ( GeometryGraphOp ) { OverlayOp.__proto__ = GeometryGraphOp; }
46109           OverlayOp.prototype = Object.create( GeometryGraphOp && GeometryGraphOp.prototype );
46110           OverlayOp.prototype.constructor = OverlayOp;
46111           OverlayOp.prototype.insertUniqueEdge = function insertUniqueEdge (e) {
46112             var existingEdge = this._edgeList.findEqualEdge(e);
46113             if (existingEdge !== null) {
46114               var existingLabel = existingEdge.getLabel();
46115               var labelToMerge = e.getLabel();
46116               if (!existingEdge.isPointwiseEqual(e)) {
46117                 labelToMerge = new Label(e.getLabel());
46118                 labelToMerge.flip();
46119               }
46120               var depth = existingEdge.getDepth();
46121               if (depth.isNull()) {
46122                 depth.add(existingLabel);
46123               }
46124               depth.add(labelToMerge);
46125               existingLabel.merge(labelToMerge);
46126             } else {
46127               this._edgeList.add(e);
46128             }
46129           };
46130           OverlayOp.prototype.getGraph = function getGraph () {
46131             return this._graph
46132           };
46133           OverlayOp.prototype.cancelDuplicateResultEdges = function cancelDuplicateResultEdges () {
46134             for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {
46135               var de = it.next();
46136               var sym = de.getSym();
46137               if (de.isInResult() && sym.isInResult()) {
46138                 de.setInResult(false);
46139                 sym.setInResult(false);
46140               }
46141             }
46142           };
46143           OverlayOp.prototype.isCoveredByLA = function isCoveredByLA (coord) {
46144             if (this.isCovered(coord, this._resultLineList)) { return true }
46145             if (this.isCovered(coord, this._resultPolyList)) { return true }
46146             return false
46147           };
46148           OverlayOp.prototype.computeGeometry = function computeGeometry (resultPointList, resultLineList, resultPolyList, opcode) {
46149             var geomList = new ArrayList();
46150             geomList.addAll(resultPointList);
46151             geomList.addAll(resultLineList);
46152             geomList.addAll(resultPolyList);
46153             if (geomList.isEmpty()) { return OverlayOp.createEmptyResult(opcode, this._arg[0].getGeometry(), this._arg[1].getGeometry(), this._geomFact) }
46154             return this._geomFact.buildGeometry(geomList)
46155           };
46156           OverlayOp.prototype.mergeSymLabels = function mergeSymLabels () {
46157             for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
46158               var node = nodeit.next();
46159               node.getEdges().mergeSymLabels();
46160             }
46161           };
46162           OverlayOp.prototype.isCovered = function isCovered (coord, geomList) {
46163             var this$1 = this;
46164
46165             for (var it = geomList.iterator(); it.hasNext();) {
46166               var geom = it.next();
46167               var loc = this$1._ptLocator.locate(coord, geom);
46168               if (loc !== Location.EXTERIOR) { return true }
46169             }
46170             return false
46171           };
46172           OverlayOp.prototype.replaceCollapsedEdges = function replaceCollapsedEdges () {
46173             var newEdges = new ArrayList();
46174             for (var it = this._edgeList.iterator(); it.hasNext();) {
46175               var e = it.next();
46176               if (e.isCollapsed()) {
46177                 it.remove();
46178                 newEdges.add(e.getCollapsedEdge());
46179               }
46180             }
46181             this._edgeList.addAll(newEdges);
46182           };
46183           OverlayOp.prototype.updateNodeLabelling = function updateNodeLabelling () {
46184             for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
46185               var node = nodeit.next();
46186               var lbl = node.getEdges().getLabel();
46187               node.getLabel().merge(lbl);
46188             }
46189           };
46190           OverlayOp.prototype.getResultGeometry = function getResultGeometry (overlayOpCode) {
46191             this.computeOverlay(overlayOpCode);
46192             return this._resultGeom
46193           };
46194           OverlayOp.prototype.insertUniqueEdges = function insertUniqueEdges (edges) {
46195             var this$1 = this;
46196
46197             for (var i = edges.iterator(); i.hasNext();) {
46198               var e = i.next();
46199               this$1.insertUniqueEdge(e);
46200             }
46201           };
46202           OverlayOp.prototype.computeOverlay = function computeOverlay (opCode) {
46203             this.copyPoints(0);
46204             this.copyPoints(1);
46205             this._arg[0].computeSelfNodes(this._li, false);
46206             this._arg[1].computeSelfNodes(this._li, false);
46207             this._arg[0].computeEdgeIntersections(this._arg[1], this._li, true);
46208             var baseSplitEdges = new ArrayList();
46209             this._arg[0].computeSplitEdges(baseSplitEdges);
46210             this._arg[1].computeSplitEdges(baseSplitEdges);
46211             // const splitEdges = baseSplitEdges
46212             this.insertUniqueEdges(baseSplitEdges);
46213             this.computeLabelsFromDepths();
46214             this.replaceCollapsedEdges();
46215             EdgeNodingValidator.checkValid(this._edgeList.getEdges());
46216             this._graph.addEdges(this._edgeList.getEdges());
46217             this.computeLabelling();
46218             this.labelIncompleteNodes();
46219             this.findResultAreaEdges(opCode);
46220             this.cancelDuplicateResultEdges();
46221             var polyBuilder = new PolygonBuilder(this._geomFact);
46222             polyBuilder.add(this._graph);
46223             this._resultPolyList = polyBuilder.getPolygons();
46224             var lineBuilder = new LineBuilder(this, this._geomFact, this._ptLocator);
46225             this._resultLineList = lineBuilder.build(opCode);
46226             var pointBuilder = new PointBuilder(this, this._geomFact, this._ptLocator);
46227             this._resultPointList = pointBuilder.build(opCode);
46228             this._resultGeom = this.computeGeometry(this._resultPointList, this._resultLineList, this._resultPolyList, opCode);
46229           };
46230           OverlayOp.prototype.labelIncompleteNode = function labelIncompleteNode (n, targetIndex) {
46231             var loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry());
46232             n.getLabel().setLocation(targetIndex, loc);
46233           };
46234           OverlayOp.prototype.copyPoints = function copyPoints (argIndex) {
46235             var this$1 = this;
46236
46237             for (var i = this._arg[argIndex].getNodeIterator(); i.hasNext();) {
46238               var graphNode = i.next();
46239               var newNode = this$1._graph.addNode(graphNode.getCoordinate());
46240               newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex));
46241             }
46242           };
46243           OverlayOp.prototype.findResultAreaEdges = function findResultAreaEdges (opCode) {
46244             for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {
46245               var de = it.next();
46246               var label = de.getLabel();
46247               if (label.isArea() && !de.isInteriorAreaEdge() && OverlayOp.isResultOfOp(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), opCode)) {
46248                 de.setInResult(true);
46249               }
46250             }
46251           };
46252           OverlayOp.prototype.computeLabelsFromDepths = function computeLabelsFromDepths () {
46253             for (var it = this._edgeList.iterator(); it.hasNext();) {
46254               var e = it.next();
46255               var lbl = e.getLabel();
46256               var depth = e.getDepth();
46257               if (!depth.isNull()) {
46258                 depth.normalize();
46259                 for (var i = 0; i < 2; i++) {
46260                   if (!lbl.isNull(i) && lbl.isArea() && !depth.isNull(i)) {
46261                     if (depth.getDelta(i) === 0) {
46262                       lbl.toLine(i);
46263                     } else {
46264                       Assert.isTrue(!depth.isNull(i, Position.LEFT), 'depth of LEFT side has not been initialized');
46265                       lbl.setLocation(i, Position.LEFT, depth.getLocation(i, Position.LEFT));
46266                       Assert.isTrue(!depth.isNull(i, Position.RIGHT), 'depth of RIGHT side has not been initialized');
46267                       lbl.setLocation(i, Position.RIGHT, depth.getLocation(i, Position.RIGHT));
46268                     }
46269                   }
46270                 }
46271               }
46272             }
46273           };
46274           OverlayOp.prototype.computeLabelling = function computeLabelling () {
46275             var this$1 = this;
46276
46277             for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
46278               var node = nodeit.next();
46279               node.getEdges().computeLabelling(this$1._arg);
46280             }
46281             this.mergeSymLabels();
46282             this.updateNodeLabelling();
46283           };
46284           OverlayOp.prototype.labelIncompleteNodes = function labelIncompleteNodes () {
46285             var this$1 = this;
46286
46287             // let nodeCount = 0
46288             for (var ni = this._graph.getNodes().iterator(); ni.hasNext();) {
46289               var n = ni.next();
46290               var label = n.getLabel();
46291               if (n.isIsolated()) {
46292                 // nodeCount++
46293                 if (label.isNull(0)) { this$1.labelIncompleteNode(n, 0); } else { this$1.labelIncompleteNode(n, 1); }
46294               }
46295               n.getEdges().updateLabelling(label);
46296             }
46297           };
46298           OverlayOp.prototype.isCoveredByA = function isCoveredByA (coord) {
46299             if (this.isCovered(coord, this._resultPolyList)) { return true }
46300             return false
46301           };
46302           OverlayOp.prototype.interfaces_ = function interfaces_ () {
46303             return []
46304           };
46305           OverlayOp.prototype.getClass = function getClass () {
46306             return OverlayOp
46307           };
46308
46309           return OverlayOp;
46310         }(GeometryGraphOp));
46311
46312         OverlayOp.overlayOp = function (geom0, geom1, opCode) {
46313           var gov = new OverlayOp(geom0, geom1);
46314           var geomOv = gov.getResultGeometry(opCode);
46315           return geomOv
46316         };
46317         OverlayOp.intersection = function (g, other) {
46318           if (g.isEmpty() || other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.INTERSECTION, g, other, g.getFactory()) }
46319           if (g.isGeometryCollection()) {
46320             var g2 = other;
46321             return GeometryCollectionMapper.map(g, {
46322               interfaces_: function () {
46323                 return [GeometryMapper.MapOp]
46324               },
46325               map: function (g) {
46326                 return g.intersection(g2)
46327               }
46328             })
46329           }
46330           g.checkNotGeometryCollection(g);
46331           g.checkNotGeometryCollection(other);
46332           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.INTERSECTION)
46333         };
46334         OverlayOp.symDifference = function (g, other) {
46335           if (g.isEmpty() || other.isEmpty()) {
46336             if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.SYMDIFFERENCE, g, other, g.getFactory()) }
46337             if (g.isEmpty()) { return other.copy() }
46338             if (other.isEmpty()) { return g.copy() }
46339           }
46340           g.checkNotGeometryCollection(g);
46341           g.checkNotGeometryCollection(other);
46342           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.SYMDIFFERENCE)
46343         };
46344         OverlayOp.resultDimension = function (opCode, g0, g1) {
46345           var dim0 = g0.getDimension();
46346           var dim1 = g1.getDimension();
46347           var resultDimension = -1;
46348           switch (opCode) {
46349             case OverlayOp.INTERSECTION:
46350               resultDimension = Math.min(dim0, dim1);
46351               break
46352             case OverlayOp.UNION:
46353               resultDimension = Math.max(dim0, dim1);
46354               break
46355             case OverlayOp.DIFFERENCE:
46356               resultDimension = dim0;
46357               break
46358             case OverlayOp.SYMDIFFERENCE:
46359               resultDimension = Math.max(dim0, dim1);
46360               break
46361           }
46362           return resultDimension
46363         };
46364         OverlayOp.createEmptyResult = function (overlayOpCode, a, b, geomFact) {
46365           var result = null;
46366           switch (OverlayOp.resultDimension(overlayOpCode, a, b)) {
46367             case -1:
46368               result = geomFact.createGeometryCollection(new Array(0).fill(null));
46369               break
46370             case 0:
46371               result = geomFact.createPoint();
46372               break
46373             case 1:
46374               result = geomFact.createLineString();
46375               break
46376             case 2:
46377               result = geomFact.createPolygon();
46378               break
46379           }
46380           return result
46381         };
46382         OverlayOp.difference = function (g, other) {
46383           if (g.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.DIFFERENCE, g, other, g.getFactory()) }
46384           if (other.isEmpty()) { return g.copy() }
46385           g.checkNotGeometryCollection(g);
46386           g.checkNotGeometryCollection(other);
46387           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.DIFFERENCE)
46388         };
46389         OverlayOp.isResultOfOp = function () {
46390           if (arguments.length === 2) {
46391             var label = arguments[0];
46392             var opCode = arguments[1];
46393             var loc0 = label.getLocation(0);
46394             var loc1 = label.getLocation(1);
46395             return OverlayOp.isResultOfOp(loc0, loc1, opCode)
46396           } else if (arguments.length === 3) {
46397             var loc0$1 = arguments[0];
46398             var loc1$1 = arguments[1];
46399             var overlayOpCode = arguments[2];
46400             if (loc0$1 === Location.BOUNDARY) { loc0$1 = Location.INTERIOR; }
46401             if (loc1$1 === Location.BOUNDARY) { loc1$1 = Location.INTERIOR; }
46402             switch (overlayOpCode) {
46403               case OverlayOp.INTERSECTION:
46404                 return loc0$1 === Location.INTERIOR && loc1$1 === Location.INTERIOR
46405               case OverlayOp.UNION:
46406                 return loc0$1 === Location.INTERIOR || loc1$1 === Location.INTERIOR
46407               case OverlayOp.DIFFERENCE:
46408                 return loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR
46409               case OverlayOp.SYMDIFFERENCE:
46410                 return (loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR) || (loc0$1 !== Location.INTERIOR && loc1$1 === Location.INTERIOR)
46411             }
46412             return false
46413           }
46414         };
46415         OverlayOp.INTERSECTION = 1;
46416         OverlayOp.UNION = 2;
46417         OverlayOp.DIFFERENCE = 3;
46418         OverlayOp.SYMDIFFERENCE = 4;
46419
46420         var FuzzyPointLocator = function FuzzyPointLocator () {
46421           this._g = null;
46422           this._boundaryDistanceTolerance = null;
46423           this._linework = null;
46424           this._ptLocator = new PointLocator();
46425           this._seg = new LineSegment();
46426           var g = arguments[0];
46427           var boundaryDistanceTolerance = arguments[1];
46428           this._g = g;
46429           this._boundaryDistanceTolerance = boundaryDistanceTolerance;
46430           this._linework = this.extractLinework(g);
46431         };
46432         FuzzyPointLocator.prototype.isWithinToleranceOfBoundary = function isWithinToleranceOfBoundary (pt) {
46433             var this$1 = this;
46434
46435           for (var i = 0; i < this._linework.getNumGeometries(); i++) {
46436             var line = this$1._linework.getGeometryN(i);
46437             var seq = line.getCoordinateSequence();
46438             for (var j = 0; j < seq.size() - 1; j++) {
46439               seq.getCoordinate(j, this$1._seg.p0);
46440               seq.getCoordinate(j + 1, this$1._seg.p1);
46441               var dist = this$1._seg.distance(pt);
46442               if (dist <= this$1._boundaryDistanceTolerance) { return true }
46443             }
46444           }
46445           return false
46446         };
46447         FuzzyPointLocator.prototype.getLocation = function getLocation (pt) {
46448           if (this.isWithinToleranceOfBoundary(pt)) { return Location.BOUNDARY }
46449           return this._ptLocator.locate(pt, this._g)
46450         };
46451         FuzzyPointLocator.prototype.extractLinework = function extractLinework (g) {
46452           var extracter = new PolygonalLineworkExtracter();
46453           g.apply(extracter);
46454           var linework = extracter.getLinework();
46455           var lines = GeometryFactory.toLineStringArray(linework);
46456           return g.getFactory().createMultiLineString(lines)
46457         };
46458         FuzzyPointLocator.prototype.interfaces_ = function interfaces_ () {
46459           return []
46460         };
46461         FuzzyPointLocator.prototype.getClass = function getClass () {
46462           return FuzzyPointLocator
46463         };
46464
46465         var PolygonalLineworkExtracter = function PolygonalLineworkExtracter () {
46466           this._linework = null;
46467           this._linework = new ArrayList();
46468         };
46469         PolygonalLineworkExtracter.prototype.getLinework = function getLinework () {
46470           return this._linework
46471         };
46472         PolygonalLineworkExtracter.prototype.filter = function filter (g) {
46473             var this$1 = this;
46474
46475           if (g instanceof Polygon) {
46476             var poly = g;
46477             this._linework.add(poly.getExteriorRing());
46478             for (var i = 0; i < poly.getNumInteriorRing(); i++) {
46479               this$1._linework.add(poly.getInteriorRingN(i));
46480             }
46481           }
46482         };
46483         PolygonalLineworkExtracter.prototype.interfaces_ = function interfaces_ () {
46484           return [GeometryFilter]
46485         };
46486         PolygonalLineworkExtracter.prototype.getClass = function getClass () {
46487           return PolygonalLineworkExtracter
46488         };
46489
46490         var OffsetPointGenerator = function OffsetPointGenerator () {
46491           this._g = null;
46492           this._doLeft = true;
46493           this._doRight = true;
46494           var g = arguments[0];
46495           this._g = g;
46496         };
46497         OffsetPointGenerator.prototype.extractPoints = function extractPoints (line, offsetDistance, offsetPts) {
46498             var this$1 = this;
46499
46500           var pts = line.getCoordinates();
46501           for (var i = 0; i < pts.length - 1; i++) {
46502             this$1.computeOffsetPoints(pts[i], pts[i + 1], offsetDistance, offsetPts);
46503           }
46504         };
46505         OffsetPointGenerator.prototype.setSidesToGenerate = function setSidesToGenerate (doLeft, doRight) {
46506           this._doLeft = doLeft;
46507           this._doRight = doRight;
46508         };
46509         OffsetPointGenerator.prototype.getPoints = function getPoints (offsetDistance) {
46510             var this$1 = this;
46511
46512           var offsetPts = new ArrayList();
46513           var lines = LinearComponentExtracter.getLines(this._g);
46514           for (var i = lines.iterator(); i.hasNext();) {
46515             var line = i.next();
46516             this$1.extractPoints(line, offsetDistance, offsetPts);
46517           }
46518           return offsetPts
46519         };
46520         OffsetPointGenerator.prototype.computeOffsetPoints = function computeOffsetPoints (p0, p1, offsetDistance, offsetPts) {
46521           var dx = p1.x - p0.x;
46522           var dy = p1.y - p0.y;
46523           var len = Math.sqrt(dx * dx + dy * dy);
46524           var ux = offsetDistance * dx / len;
46525           var uy = offsetDistance * dy / len;
46526           var midX = (p1.x + p0.x) / 2;
46527           var midY = (p1.y + p0.y) / 2;
46528           if (this._doLeft) {
46529             var offsetLeft = new Coordinate(midX - uy, midY + ux);
46530             offsetPts.add(offsetLeft);
46531           }
46532           if (this._doRight) {
46533             var offsetRight = new Coordinate(midX + uy, midY - ux);
46534             offsetPts.add(offsetRight);
46535           }
46536         };
46537         OffsetPointGenerator.prototype.interfaces_ = function interfaces_ () {
46538           return []
46539         };
46540         OffsetPointGenerator.prototype.getClass = function getClass () {
46541           return OffsetPointGenerator
46542         };
46543
46544         var OverlayResultValidator = function OverlayResultValidator () {
46545           this._geom = null;
46546           this._locFinder = null;
46547           this._location = new Array(3).fill(null);
46548           this._invalidLocation = null;
46549           this._boundaryDistanceTolerance = OverlayResultValidator.TOLERANCE;
46550           this._testCoords = new ArrayList();
46551           var a = arguments[0];
46552           var b = arguments[1];
46553           var result = arguments[2];
46554           this._boundaryDistanceTolerance = OverlayResultValidator.computeBoundaryDistanceTolerance(a, b);
46555           this._geom = [a, b, result];
46556           this._locFinder = [new FuzzyPointLocator(this._geom[0], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[1], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[2], this._boundaryDistanceTolerance)];
46557         };
46558
46559         var staticAccessors$46 = { TOLERANCE: { configurable: true } };
46560         OverlayResultValidator.prototype.reportResult = function reportResult (overlayOp, location, expectedInterior) {
46561           System.out.println('Overlay result invalid - A:' + Location.toLocationSymbol(location[0]) + ' B:' + Location.toLocationSymbol(location[1]) + ' expected:' + (expectedInterior ? 'i' : 'e') + ' actual:' + Location.toLocationSymbol(location[2]));
46562         };
46563         OverlayResultValidator.prototype.isValid = function isValid (overlayOp) {
46564           this.addTestPts(this._geom[0]);
46565           this.addTestPts(this._geom[1]);
46566           var isValid = this.checkValid(overlayOp);
46567           return isValid
46568         };
46569         OverlayResultValidator.prototype.checkValid = function checkValid () {
46570             var this$1 = this;
46571
46572           if (arguments.length === 1) {
46573             var overlayOp = arguments[0];
46574             for (var i = 0; i < this._testCoords.size(); i++) {
46575               var pt = this$1._testCoords.get(i);
46576               if (!this$1.checkValid(overlayOp, pt)) {
46577                 this$1._invalidLocation = pt;
46578                 return false
46579               }
46580             }
46581             return true
46582           } else if (arguments.length === 2) {
46583             var overlayOp$1 = arguments[0];
46584             var pt$1 = arguments[1];
46585             this._location[0] = this._locFinder[0].getLocation(pt$1);
46586             this._location[1] = this._locFinder[1].getLocation(pt$1);
46587             this._location[2] = this._locFinder[2].getLocation(pt$1);
46588             if (OverlayResultValidator.hasLocation(this._location, Location.BOUNDARY)) { return true }
46589             return this.isValidResult(overlayOp$1, this._location)
46590           }
46591         };
46592         OverlayResultValidator.prototype.addTestPts = function addTestPts (g) {
46593           var ptGen = new OffsetPointGenerator(g);
46594           this._testCoords.addAll(ptGen.getPoints(5 * this._boundaryDistanceTolerance));
46595         };
46596         OverlayResultValidator.prototype.isValidResult = function isValidResult (overlayOp, location) {
46597           var expectedInterior = OverlayOp.isResultOfOp(location[0], location[1], overlayOp);
46598           var resultInInterior = location[2] === Location.INTERIOR;
46599           var isValid = !(expectedInterior ^ resultInInterior);
46600           if (!isValid) { this.reportResult(overlayOp, location, expectedInterior); }
46601           return isValid
46602         };
46603         OverlayResultValidator.prototype.getInvalidLocation = function getInvalidLocation () {
46604           return this._invalidLocation
46605         };
46606         OverlayResultValidator.prototype.interfaces_ = function interfaces_ () {
46607           return []
46608         };
46609         OverlayResultValidator.prototype.getClass = function getClass () {
46610           return OverlayResultValidator
46611         };
46612         OverlayResultValidator.hasLocation = function hasLocation (location, loc) {
46613           for (var i = 0; i < 3; i++) {
46614             if (location[i] === loc) { return true }
46615           }
46616           return false
46617         };
46618         OverlayResultValidator.computeBoundaryDistanceTolerance = function computeBoundaryDistanceTolerance (g0, g1) {
46619           return Math.min(GeometrySnapper.computeSizeBasedSnapTolerance(g0), GeometrySnapper.computeSizeBasedSnapTolerance(g1))
46620         };
46621         OverlayResultValidator.isValid = function isValid (a, b, overlayOp, result) {
46622           var validator = new OverlayResultValidator(a, b, result);
46623           return validator.isValid(overlayOp)
46624         };
46625         staticAccessors$46.TOLERANCE.get = function () { return 0.000001 };
46626
46627         Object.defineProperties( OverlayResultValidator, staticAccessors$46 );
46628
46629         // operation.overlay
46630
46631         var GeometryCombiner = function GeometryCombiner (geoms) {
46632           this._geomFactory = null;
46633           this._skipEmpty = false;
46634           this._inputGeoms = null;
46635           this._geomFactory = GeometryCombiner.extractFactory(geoms);
46636           this._inputGeoms = geoms;
46637         };
46638         GeometryCombiner.prototype.extractElements = function extractElements (geom, elems) {
46639             var this$1 = this;
46640
46641           if (geom === null) { return null }
46642           for (var i = 0; i < geom.getNumGeometries(); i++) {
46643             var elemGeom = geom.getGeometryN(i);
46644             if (this$1._skipEmpty && elemGeom.isEmpty()) { continue }
46645             elems.add(elemGeom);
46646           }
46647         };
46648         GeometryCombiner.prototype.combine = function combine () {
46649             var this$1 = this;
46650
46651           var elems = new ArrayList();
46652           for (var i = this._inputGeoms.iterator(); i.hasNext();) {
46653             var g = i.next();
46654             this$1.extractElements(g, elems);
46655           }
46656           if (elems.size() === 0) {
46657             if (this._geomFactory !== null) {
46658               return this._geomFactory.createGeometryCollection(null)
46659             }
46660             return null
46661           }
46662           return this._geomFactory.buildGeometry(elems)
46663         };
46664         GeometryCombiner.prototype.interfaces_ = function interfaces_ () {
46665           return []
46666         };
46667         GeometryCombiner.prototype.getClass = function getClass () {
46668           return GeometryCombiner
46669         };
46670         GeometryCombiner.combine = function combine () {
46671           if (arguments.length === 1) {
46672             var geoms = arguments[0];
46673             var combiner = new GeometryCombiner(geoms);
46674             return combiner.combine()
46675           } else if (arguments.length === 2) {
46676             var g0 = arguments[0];
46677             var g1 = arguments[1];
46678             var combiner$1 = new GeometryCombiner(GeometryCombiner.createList(g0, g1));
46679             return combiner$1.combine()
46680           } else if (arguments.length === 3) {
46681             var g0$1 = arguments[0];
46682             var g1$1 = arguments[1];
46683             var g2 = arguments[2];
46684             var combiner$2 = new GeometryCombiner(GeometryCombiner.createList(g0$1, g1$1, g2));
46685             return combiner$2.combine()
46686           }
46687         };
46688         GeometryCombiner.extractFactory = function extractFactory (geoms) {
46689           if (geoms.isEmpty()) { return null }
46690           return geoms.iterator().next().getFactory()
46691         };
46692         GeometryCombiner.createList = function createList () {
46693           if (arguments.length === 2) {
46694             var obj0 = arguments[0];
46695             var obj1 = arguments[1];
46696             var list = new ArrayList();
46697             list.add(obj0);
46698             list.add(obj1);
46699             return list
46700           } else if (arguments.length === 3) {
46701             var obj0$1 = arguments[0];
46702             var obj1$1 = arguments[1];
46703             var obj2 = arguments[2];
46704             var list$1 = new ArrayList();
46705             list$1.add(obj0$1);
46706             list$1.add(obj1$1);
46707             list$1.add(obj2);
46708             return list$1
46709           }
46710         };
46711
46712         var CascadedPolygonUnion = function CascadedPolygonUnion () {
46713           this._inputPolys = null;
46714           this._geomFactory = null;
46715           var polys = arguments[0];
46716           this._inputPolys = polys;
46717           if (this._inputPolys === null) { this._inputPolys = new ArrayList(); }
46718         };
46719
46720         var staticAccessors$47 = { STRTREE_NODE_CAPACITY: { configurable: true } };
46721         CascadedPolygonUnion.prototype.reduceToGeometries = function reduceToGeometries (geomTree) {
46722             var this$1 = this;
46723
46724           var geoms = new ArrayList();
46725           for (var i = geomTree.iterator(); i.hasNext();) {
46726             var o = i.next();
46727             var geom = null;
46728             if (hasInterface(o, List)) {
46729               geom = this$1.unionTree(o);
46730             } else if (o instanceof Geometry) {
46731               geom = o;
46732             }
46733             geoms.add(geom);
46734           }
46735           return geoms
46736         };
46737         CascadedPolygonUnion.prototype.extractByEnvelope = function extractByEnvelope (env, geom, disjointGeoms) {
46738           var intersectingGeoms = new ArrayList();
46739           for (var i = 0; i < geom.getNumGeometries(); i++) {
46740             var elem = geom.getGeometryN(i);
46741             if (elem.getEnvelopeInternal().intersects(env)) { intersectingGeoms.add(elem); } else { disjointGeoms.add(elem); }
46742           }
46743           return this._geomFactory.buildGeometry(intersectingGeoms)
46744         };
46745         CascadedPolygonUnion.prototype.unionOptimized = function unionOptimized (g0, g1) {
46746           var g0Env = g0.getEnvelopeInternal();
46747           var g1Env = g1.getEnvelopeInternal();
46748           if (!g0Env.intersects(g1Env)) {
46749             var combo = GeometryCombiner.combine(g0, g1);
46750             return combo
46751           }
46752           if (g0.getNumGeometries() <= 1 && g1.getNumGeometries() <= 1) { return this.unionActual(g0, g1) }
46753           var commonEnv = g0Env.intersection(g1Env);
46754           return this.unionUsingEnvelopeIntersection(g0, g1, commonEnv)
46755         };
46756         CascadedPolygonUnion.prototype.union = function union () {
46757           if (this._inputPolys === null) { throw new Error('union() method cannot be called twice') }
46758           if (this._inputPolys.isEmpty()) { return null }
46759           this._geomFactory = this._inputPolys.iterator().next().getFactory();
46760           var index = new STRtree(CascadedPolygonUnion.STRTREE_NODE_CAPACITY);
46761           for (var i = this._inputPolys.iterator(); i.hasNext();) {
46762             var item = i.next();
46763             index.insert(item.getEnvelopeInternal(), item);
46764           }
46765           this._inputPolys = null;
46766           var itemTree = index.itemsTree();
46767           var unionAll = this.unionTree(itemTree);
46768           return unionAll
46769         };
46770         CascadedPolygonUnion.prototype.binaryUnion = function binaryUnion () {
46771           if (arguments.length === 1) {
46772             var geoms = arguments[0];
46773             return this.binaryUnion(geoms, 0, geoms.size())
46774           } else if (arguments.length === 3) {
46775             var geoms$1 = arguments[0];
46776             var start = arguments[1];
46777             var end = arguments[2];
46778             if (end - start <= 1) {
46779               var g0 = CascadedPolygonUnion.getGeometry(geoms$1, start);
46780               return this.unionSafe(g0, null)
46781             } else if (end - start === 2) {
46782               return this.unionSafe(CascadedPolygonUnion.getGeometry(geoms$1, start), CascadedPolygonUnion.getGeometry(geoms$1, start + 1))
46783             } else {
46784               var mid = Math.trunc((end + start) / 2);
46785               var g0$1 = this.binaryUnion(geoms$1, start, mid);
46786               var g1 = this.binaryUnion(geoms$1, mid, end);
46787               return this.unionSafe(g0$1, g1)
46788             }
46789           }
46790         };
46791         CascadedPolygonUnion.prototype.repeatedUnion = function repeatedUnion (geoms) {
46792           var union = null;
46793           for (var i = geoms.iterator(); i.hasNext();) {
46794             var g = i.next();
46795             if (union === null) { union = g.copy(); } else { union = union.union(g); }
46796           }
46797           return union
46798         };
46799         CascadedPolygonUnion.prototype.unionSafe = function unionSafe (g0, g1) {
46800           if (g0 === null && g1 === null) { return null }
46801           if (g0 === null) { return g1.copy() }
46802           if (g1 === null) { return g0.copy() }
46803           return this.unionOptimized(g0, g1)
46804         };
46805         CascadedPolygonUnion.prototype.unionActual = function unionActual (g0, g1) {
46806           return CascadedPolygonUnion.restrictToPolygons(g0.union(g1))
46807         };
46808         CascadedPolygonUnion.prototype.unionTree = function unionTree (geomTree) {
46809           var geoms = this.reduceToGeometries(geomTree);
46810           var union = this.binaryUnion(geoms);
46811           return union
46812         };
46813         CascadedPolygonUnion.prototype.unionUsingEnvelopeIntersection = function unionUsingEnvelopeIntersection (g0, g1, common) {
46814           var disjointPolys = new ArrayList();
46815           var g0Int = this.extractByEnvelope(common, g0, disjointPolys);
46816           var g1Int = this.extractByEnvelope(common, g1, disjointPolys);
46817           var union = this.unionActual(g0Int, g1Int);
46818           disjointPolys.add(union);
46819           var overallUnion = GeometryCombiner.combine(disjointPolys);
46820           return overallUnion
46821         };
46822         CascadedPolygonUnion.prototype.bufferUnion = function bufferUnion () {
46823           if (arguments.length === 1) {
46824             var geoms = arguments[0];
46825             var factory = geoms.get(0).getFactory();
46826             var gColl = factory.buildGeometry(geoms);
46827             var unionAll = gColl.buffer(0.0);
46828             return unionAll
46829           } else if (arguments.length === 2) {
46830             var g0 = arguments[0];
46831             var g1 = arguments[1];
46832             var factory$1 = g0.getFactory();
46833             var gColl$1 = factory$1.createGeometryCollection([g0, g1]);
46834             var unionAll$1 = gColl$1.buffer(0.0);
46835             return unionAll$1
46836           }
46837         };
46838         CascadedPolygonUnion.prototype.interfaces_ = function interfaces_ () {
46839           return []
46840         };
46841         CascadedPolygonUnion.prototype.getClass = function getClass () {
46842           return CascadedPolygonUnion
46843         };
46844         CascadedPolygonUnion.restrictToPolygons = function restrictToPolygons (g) {
46845           if (hasInterface(g, Polygonal)) {
46846             return g
46847           }
46848           var polygons = PolygonExtracter.getPolygons(g);
46849           if (polygons.size() === 1) { return polygons.get(0) }
46850           return g.getFactory().createMultiPolygon(GeometryFactory.toPolygonArray(polygons))
46851         };
46852         CascadedPolygonUnion.getGeometry = function getGeometry (list, index) {
46853           if (index >= list.size()) { return null }
46854           return list.get(index)
46855         };
46856         CascadedPolygonUnion.union = function union (polys) {
46857           var op = new CascadedPolygonUnion(polys);
46858           return op.union()
46859         };
46860         staticAccessors$47.STRTREE_NODE_CAPACITY.get = function () { return 4 };
46861
46862         Object.defineProperties( CascadedPolygonUnion, staticAccessors$47 );
46863
46864         var UnionOp = function UnionOp () {};
46865
46866         UnionOp.prototype.interfaces_ = function interfaces_ () {
46867           return []
46868         };
46869         UnionOp.prototype.getClass = function getClass () {
46870           return UnionOp
46871         };
46872         UnionOp.union = function union (g, other) {
46873           if (g.isEmpty() || other.isEmpty()) {
46874             if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.UNION, g, other, g.getFactory()) }
46875             if (g.isEmpty()) { return other.copy() }
46876             if (other.isEmpty()) { return g.copy() }
46877           }
46878           g.checkNotGeometryCollection(g);
46879           g.checkNotGeometryCollection(other);
46880           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.UNION)
46881         };
46882
46883         /**
46884          * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
46885          */
46886
46887         /**
46888          * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
46889          *
46890          * @name feature
46891          * @param {Geometry} geometry input geometry
46892          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
46893          * @param {Object} [options={}] Optional Parameters
46894          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
46895          * @param {string|number} [options.id] Identifier associated with the Feature
46896          * @returns {Feature} a GeoJSON Feature
46897          * @example
46898          * var geometry = {
46899          *   "type": "Point",
46900          *   "coordinates": [110, 50]
46901          * };
46902          *
46903          * var feature = turf.feature(geometry);
46904          *
46905          * //=feature
46906          */
46907         function feature$1(geometry, properties, options) {
46908             // Optional Parameters
46909             options = options || {};
46910             if (!isObject$1(options)) { throw new Error('options is invalid'); }
46911             var bbox = options.bbox;
46912             var id = options.id;
46913
46914             // Validation
46915             if (geometry === undefined) { throw new Error('geometry is required'); }
46916             if (properties && properties.constructor !== Object) { throw new Error('properties must be an Object'); }
46917             if (bbox) { validateBBox(bbox); }
46918             if (id) { validateId(id); }
46919
46920             // Main
46921             var feat = {type: 'Feature'};
46922             if (id) { feat.id = id; }
46923             if (bbox) { feat.bbox = bbox; }
46924             feat.properties = properties || {};
46925             feat.geometry = geometry;
46926             return feat;
46927         }
46928
46929         /**
46930          * isNumber
46931          *
46932          * @param {*} num Number to validate
46933          * @returns {boolean} true/false
46934          * @example
46935          * turf.isNumber(123)
46936          * //=true
46937          * turf.isNumber('foo')
46938          * //=false
46939          */
46940         function isNumber(num) {
46941             return !isNaN(num) && num !== null && !Array.isArray(num);
46942         }
46943
46944         /**
46945          * isObject
46946          *
46947          * @param {*} input variable to validate
46948          * @returns {boolean} true/false
46949          * @example
46950          * turf.isObject({elevation: 10})
46951          * //=true
46952          * turf.isObject('foo')
46953          * //=false
46954          */
46955         function isObject$1(input) {
46956             return (!!input) && (input.constructor === Object);
46957         }
46958
46959         /**
46960          * Validate BBox
46961          *
46962          * @private
46963          * @param {Array<number>} bbox BBox to validate
46964          * @returns {void}
46965          * @throws Error if BBox is not valid
46966          * @example
46967          * validateBBox([-180, -40, 110, 50])
46968          * //=OK
46969          * validateBBox([-180, -40])
46970          * //=Error
46971          * validateBBox('Foo')
46972          * //=Error
46973          * validateBBox(5)
46974          * //=Error
46975          * validateBBox(null)
46976          * //=Error
46977          * validateBBox(undefined)
46978          * //=Error
46979          */
46980         function validateBBox(bbox) {
46981             if (!bbox) { throw new Error('bbox is required'); }
46982             if (!Array.isArray(bbox)) { throw new Error('bbox must be an Array'); }
46983             if (bbox.length !== 4 && bbox.length !== 6) { throw new Error('bbox must be an Array of 4 or 6 numbers'); }
46984             bbox.forEach(function (num) {
46985                 if (!isNumber(num)) { throw new Error('bbox must only contain numbers'); }
46986             });
46987         }
46988
46989         /**
46990          * Validate Id
46991          *
46992          * @private
46993          * @param {string|number} id Id to validate
46994          * @returns {void}
46995          * @throws Error if Id is not valid
46996          * @example
46997          * validateId([-180, -40, 110, 50])
46998          * //=Error
46999          * validateId([-180, -40])
47000          * //=Error
47001          * validateId('Foo')
47002          * //=OK
47003          * validateId(5)
47004          * //=OK
47005          * validateId(null)
47006          * //=Error
47007          * validateId(undefined)
47008          * //=Error
47009          */
47010         function validateId(id) {
47011             if (!id) { throw new Error('id is required'); }
47012             if (['string', 'number'].indexOf(typeof id) === -1) { throw new Error('id must be a number or a string'); }
47013         }
47014
47015         /**
47016          * Callback for geomEach
47017          *
47018          * @callback geomEachCallback
47019          * @param {Geometry} currentGeometry The current Geometry being processed.
47020          * @param {number} featureIndex The current index of the Feature being processed.
47021          * @param {Object} featureProperties The current Feature Properties being processed.
47022          * @param {Array<number>} featureBBox The current Feature BBox being processed.
47023          * @param {number|string} featureId The current Feature Id being processed.
47024          */
47025
47026         /**
47027          * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()
47028          *
47029          * @name geomEach
47030          * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
47031          * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)
47032          * @returns {void}
47033          * @example
47034          * var features = turf.featureCollection([
47035          *     turf.point([26, 37], {foo: 'bar'}),
47036          *     turf.point([36, 53], {hello: 'world'})
47037          * ]);
47038          *
47039          * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
47040          *   //=currentGeometry
47041          *   //=featureIndex
47042          *   //=featureProperties
47043          *   //=featureBBox
47044          *   //=featureId
47045          * });
47046          */
47047         function geomEach(geojson, callback) {
47048             var i, j, g, geometry, stopG,
47049                 geometryMaybeCollection,
47050                 isGeometryCollection,
47051                 featureProperties,
47052                 featureBBox,
47053                 featureId,
47054                 featureIndex = 0,
47055                 isFeatureCollection = geojson.type === 'FeatureCollection',
47056                 isFeature = geojson.type === 'Feature',
47057                 stop = isFeatureCollection ? geojson.features.length : 1;
47058
47059             // This logic may look a little weird. The reason why it is that way
47060             // is because it's trying to be fast. GeoJSON supports multiple kinds
47061             // of objects at its root: FeatureCollection, Features, Geometries.
47062             // This function has the responsibility of handling all of them, and that
47063             // means that some of the `for` loops you see below actually just don't apply
47064             // to certain inputs. For instance, if you give this just a
47065             // Point geometry, then both loops are short-circuited and all we do
47066             // is gradually rename the input until it's called 'geometry'.
47067             //
47068             // This also aims to allocate as few resources as possible: just a
47069             // few numbers and booleans, rather than any temporary arrays as would
47070             // be required with the normalization approach.
47071             for (i = 0; i < stop; i++) {
47072
47073                 geometryMaybeCollection = (isFeatureCollection ? geojson.features[i].geometry :
47074                     (isFeature ? geojson.geometry : geojson));
47075                 featureProperties = (isFeatureCollection ? geojson.features[i].properties :
47076                     (isFeature ? geojson.properties : {}));
47077                 featureBBox = (isFeatureCollection ? geojson.features[i].bbox :
47078                     (isFeature ? geojson.bbox : undefined));
47079                 featureId = (isFeatureCollection ? geojson.features[i].id :
47080                     (isFeature ? geojson.id : undefined));
47081                 isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;
47082                 stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;
47083
47084                 for (g = 0; g < stopG; g++) {
47085                     geometry = isGeometryCollection ?
47086                         geometryMaybeCollection.geometries[g] : geometryMaybeCollection;
47087
47088                     // Handle null Geometry
47089                     if (geometry === null) {
47090                         if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) { return false; }
47091                         continue;
47092                     }
47093                     switch (geometry.type) {
47094                     case 'Point':
47095                     case 'LineString':
47096                     case 'MultiPoint':
47097                     case 'Polygon':
47098                     case 'MultiLineString':
47099                     case 'MultiPolygon': {
47100                         if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) { return false; }
47101                         break;
47102                     }
47103                     case 'GeometryCollection': {
47104                         for (j = 0; j < geometry.geometries.length; j++) {
47105                             if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) { return false; }
47106                         }
47107                         break;
47108                     }
47109                     default:
47110                         throw new Error('Unknown Geometry Type');
47111                     }
47112                 }
47113                 // Only increase `featureIndex` per each feature
47114                 featureIndex++;
47115             }
47116         }
47117
47118         /**
47119          * Callback for geomReduce
47120          *
47121          * The first time the callback function is called, the values provided as arguments depend
47122          * on whether the reduce method has an initialValue argument.
47123          *
47124          * If an initialValue is provided to the reduce method:
47125          *  - The previousValue argument is initialValue.
47126          *  - The currentValue argument is the value of the first element present in the array.
47127          *
47128          * If an initialValue is not provided:
47129          *  - The previousValue argument is the value of the first element present in the array.
47130          *  - The currentValue argument is the value of the second element present in the array.
47131          *
47132          * @callback geomReduceCallback
47133          * @param {*} previousValue The accumulated value previously returned in the last invocation
47134          * of the callback, or initialValue, if supplied.
47135          * @param {Geometry} currentGeometry The current Geometry being processed.
47136          * @param {number} featureIndex The current index of the Feature being processed.
47137          * @param {Object} featureProperties The current Feature Properties being processed.
47138          * @param {Array<number>} featureBBox The current Feature BBox being processed.
47139          * @param {number|string} featureId The current Feature Id being processed.
47140          */
47141
47142         /**
47143          * Reduce geometry in any GeoJSON object, similar to Array.reduce().
47144          *
47145          * @name geomReduce
47146          * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
47147          * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)
47148          * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
47149          * @returns {*} The value that results from the reduction.
47150          * @example
47151          * var features = turf.featureCollection([
47152          *     turf.point([26, 37], {foo: 'bar'}),
47153          *     turf.point([36, 53], {hello: 'world'})
47154          * ]);
47155          *
47156          * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
47157          *   //=previousValue
47158          *   //=currentGeometry
47159          *   //=featureIndex
47160          *   //=featureProperties
47161          *   //=featureBBox
47162          *   //=featureId
47163          *   return currentGeometry
47164          * });
47165          */
47166         function geomReduce(geojson, callback, initialValue) {
47167             var previousValue = initialValue;
47168             geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
47169                 if (featureIndex === 0 && initialValue === undefined) { previousValue = currentGeometry; }
47170                 else { previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId); }
47171             });
47172             return previousValue;
47173         }
47174
47175         /**
47176          * Callback for flattenEach
47177          *
47178          * @callback flattenEachCallback
47179          * @param {Feature} currentFeature The current flattened feature being processed.
47180          * @param {number} featureIndex The current index of the Feature being processed.
47181          * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
47182          */
47183
47184         /**
47185          * Iterate over flattened features in any GeoJSON object, similar to
47186          * Array.forEach.
47187          *
47188          * @name flattenEach
47189          * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
47190          * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)
47191          * @example
47192          * var features = turf.featureCollection([
47193          *     turf.point([26, 37], {foo: 'bar'}),
47194          *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})
47195          * ]);
47196          *
47197          * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {
47198          *   //=currentFeature
47199          *   //=featureIndex
47200          *   //=multiFeatureIndex
47201          * });
47202          */
47203         function flattenEach(geojson, callback) {
47204             geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {
47205                 // Callback for single geometry
47206                 var type = (geometry === null) ? null : geometry.type;
47207                 switch (type) {
47208                 case null:
47209                 case 'Point':
47210                 case 'LineString':
47211                 case 'Polygon':
47212                     if (callback(feature$1(geometry, properties, {bbox: bbox, id: id}), featureIndex, 0) === false) { return false; }
47213                     return;
47214                 }
47215
47216                 var geomType;
47217
47218                 // Callback for multi-geometry
47219                 switch (type) {
47220                 case 'MultiPoint':
47221                     geomType = 'Point';
47222                     break;
47223                 case 'MultiLineString':
47224                     geomType = 'LineString';
47225                     break;
47226                 case 'MultiPolygon':
47227                     geomType = 'Polygon';
47228                     break;
47229                 }
47230
47231                 for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {
47232                     var coordinate = geometry.coordinates[multiFeatureIndex];
47233                     var geom = {
47234                         type: geomType,
47235                         coordinates: coordinate
47236                     };
47237                     if (callback(feature$1(geom, properties), featureIndex, multiFeatureIndex) === false) { return false; }
47238                 }
47239             });
47240         }
47241
47242         /**
47243          * Takes one or more features and returns their area in square meters.
47244          *
47245          * @name area
47246          * @param {GeoJSON} geojson input GeoJSON feature(s)
47247          * @returns {number} area in square meters
47248          * @example
47249          * var polygon = turf.polygon([[[125, -15], [113, -22], [154, -27], [144, -15], [125, -15]]]);
47250          *
47251          * var area = turf.area(polygon);
47252          *
47253          * //addToMap
47254          * var addToMap = [polygon]
47255          * polygon.properties.area = area
47256          */
47257         function area$2(geojson) {
47258             return geomReduce(geojson, function (value, geom) {
47259                 return value + calculateArea(geom);
47260             }, 0);
47261         }
47262
47263         var RADIUS$1 = 6378137;
47264         // var FLATTENING_DENOM = 298.257223563;
47265         // var FLATTENING = 1 / FLATTENING_DENOM;
47266         // var POLAR_RADIUS = RADIUS * (1 - FLATTENING);
47267
47268         /**
47269          * Calculate Area
47270          *
47271          * @private
47272          * @param {GeoJSON} geojson GeoJSON
47273          * @returns {number} area
47274          */
47275         function calculateArea(geojson) {
47276             var area = 0, i;
47277             switch (geojson.type) {
47278             case 'Polygon':
47279                 return polygonArea$1(geojson.coordinates);
47280             case 'MultiPolygon':
47281                 for (i = 0; i < geojson.coordinates.length; i++) {
47282                     area += polygonArea$1(geojson.coordinates[i]);
47283                 }
47284                 return area;
47285             case 'Point':
47286             case 'MultiPoint':
47287             case 'LineString':
47288             case 'MultiLineString':
47289                 return 0;
47290             case 'GeometryCollection':
47291                 for (i = 0; i < geojson.geometries.length; i++) {
47292                     area += calculateArea(geojson.geometries[i]);
47293                 }
47294                 return area;
47295             }
47296         }
47297
47298         function polygonArea$1(coords) {
47299             var area = 0;
47300             if (coords && coords.length > 0) {
47301                 area += Math.abs(ringArea$1(coords[0]));
47302                 for (var i = 1; i < coords.length; i++) {
47303                     area -= Math.abs(ringArea$1(coords[i]));
47304                 }
47305             }
47306             return area;
47307         }
47308
47309         /**
47310          * @private
47311          * Calculate the approximate area of the polygon were it projected onto the earth.
47312          * Note that this area will be positive if ring is oriented clockwise, otherwise it will be negative.
47313          *
47314          * Reference:
47315          * Robert. G. Chamberlain and William H. Duquette, "Some Algorithms for Polygons on a Sphere", JPL Publication 07-03, Jet Propulsion
47316          * Laboratory, Pasadena, CA, June 2007 http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409
47317          *
47318          * @param {Array<Array<number>>} coords Ring Coordinates
47319          * @returns {number} The approximate signed geodesic area of the polygon in square meters.
47320          */
47321         function ringArea$1(coords) {
47322             var p1;
47323             var p2;
47324             var p3;
47325             var lowerIndex;
47326             var middleIndex;
47327             var upperIndex;
47328             var i;
47329             var area = 0;
47330             var coordsLength = coords.length;
47331
47332             if (coordsLength > 2) {
47333                 for (i = 0; i < coordsLength; i++) {
47334                     if (i === coordsLength - 2) { // i = N-2
47335                         lowerIndex = coordsLength - 2;
47336                         middleIndex = coordsLength - 1;
47337                         upperIndex = 0;
47338                     } else if (i === coordsLength - 1) { // i = N-1
47339                         lowerIndex = coordsLength - 1;
47340                         middleIndex = 0;
47341                         upperIndex = 1;
47342                     } else { // i = 0 to N-3
47343                         lowerIndex = i;
47344                         middleIndex = i + 1;
47345                         upperIndex = i + 2;
47346                     }
47347                     p1 = coords[lowerIndex];
47348                     p2 = coords[middleIndex];
47349                     p3 = coords[upperIndex];
47350                     area += (rad$1(p3[0]) - rad$1(p1[0])) * Math.sin(rad$1(p2[1]));
47351                 }
47352
47353                 area = area * RADIUS$1 * RADIUS$1 / 2;
47354             }
47355
47356             return area;
47357         }
47358
47359         function rad$1(_) {
47360             return _ * Math.PI / 180;
47361         }
47362
47363         /**
47364          * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
47365          */
47366
47367         /**
47368          * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
47369          *
47370          * @name feature
47371          * @param {Geometry} geometry input geometry
47372          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
47373          * @param {Object} [options={}] Optional Parameters
47374          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
47375          * @param {string|number} [options.id] Identifier associated with the Feature
47376          * @returns {Feature} a GeoJSON Feature
47377          * @example
47378          * var geometry = {
47379          *   "type": "Point",
47380          *   "coordinates": [110, 50]
47381          * };
47382          *
47383          * var feature = turf.feature(geometry);
47384          *
47385          * //=feature
47386          */
47387         function feature$2(geometry, properties, options) {
47388             // Optional Parameters
47389             options = options || {};
47390             if (!isObject$2(options)) { throw new Error('options is invalid'); }
47391             var bbox = options.bbox;
47392             var id = options.id;
47393
47394             // Validation
47395             if (geometry === undefined) { throw new Error('geometry is required'); }
47396             if (properties && properties.constructor !== Object) { throw new Error('properties must be an Object'); }
47397             if (bbox) { validateBBox$1(bbox); }
47398             if (id) { validateId$1(id); }
47399
47400             // Main
47401             var feat = {type: 'Feature'};
47402             if (id) { feat.id = id; }
47403             if (bbox) { feat.bbox = bbox; }
47404             feat.properties = properties || {};
47405             feat.geometry = geometry;
47406             return feat;
47407         }
47408
47409         /**
47410          * isNumber
47411          *
47412          * @param {*} num Number to validate
47413          * @returns {boolean} true/false
47414          * @example
47415          * turf.isNumber(123)
47416          * //=true
47417          * turf.isNumber('foo')
47418          * //=false
47419          */
47420         function isNumber$1(num) {
47421             return !isNaN(num) && num !== null && !Array.isArray(num);
47422         }
47423
47424         /**
47425          * isObject
47426          *
47427          * @param {*} input variable to validate
47428          * @returns {boolean} true/false
47429          * @example
47430          * turf.isObject({elevation: 10})
47431          * //=true
47432          * turf.isObject('foo')
47433          * //=false
47434          */
47435         function isObject$2(input) {
47436             return (!!input) && (input.constructor === Object);
47437         }
47438
47439         /**
47440          * Validate BBox
47441          *
47442          * @private
47443          * @param {Array<number>} bbox BBox to validate
47444          * @returns {void}
47445          * @throws Error if BBox is not valid
47446          * @example
47447          * validateBBox([-180, -40, 110, 50])
47448          * //=OK
47449          * validateBBox([-180, -40])
47450          * //=Error
47451          * validateBBox('Foo')
47452          * //=Error
47453          * validateBBox(5)
47454          * //=Error
47455          * validateBBox(null)
47456          * //=Error
47457          * validateBBox(undefined)
47458          * //=Error
47459          */
47460         function validateBBox$1(bbox) {
47461             if (!bbox) { throw new Error('bbox is required'); }
47462             if (!Array.isArray(bbox)) { throw new Error('bbox must be an Array'); }
47463             if (bbox.length !== 4 && bbox.length !== 6) { throw new Error('bbox must be an Array of 4 or 6 numbers'); }
47464             bbox.forEach(function (num) {
47465                 if (!isNumber$1(num)) { throw new Error('bbox must only contain numbers'); }
47466             });
47467         }
47468
47469         /**
47470          * Validate Id
47471          *
47472          * @private
47473          * @param {string|number} id Id to validate
47474          * @returns {void}
47475          * @throws Error if Id is not valid
47476          * @example
47477          * validateId([-180, -40, 110, 50])
47478          * //=Error
47479          * validateId([-180, -40])
47480          * //=Error
47481          * validateId('Foo')
47482          * //=OK
47483          * validateId(5)
47484          * //=OK
47485          * validateId(null)
47486          * //=Error
47487          * validateId(undefined)
47488          * //=Error
47489          */
47490         function validateId$1(id) {
47491             if (!id) { throw new Error('id is required'); }
47492             if (['string', 'number'].indexOf(typeof id) === -1) { throw new Error('id must be a number or a string'); }
47493         }
47494
47495         /**
47496          * Get Geometry from Feature or Geometry Object
47497          *
47498          * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
47499          * @returns {Geometry|null} GeoJSON Geometry Object
47500          * @throws {Error} if geojson is not a Feature or Geometry Object
47501          * @example
47502          * var point = {
47503          *   "type": "Feature",
47504          *   "properties": {},
47505          *   "geometry": {
47506          *     "type": "Point",
47507          *     "coordinates": [110, 40]
47508          *   }
47509          * }
47510          * var geom = turf.getGeom(point)
47511          * //={"type": "Point", "coordinates": [110, 40]}
47512          */
47513         function getGeom(geojson) {
47514             if (!geojson) { throw new Error('geojson is required'); }
47515             if (geojson.geometry !== undefined) { return geojson.geometry; }
47516             if (geojson.coordinates || geojson.geometries) { return geojson; }
47517             throw new Error('geojson must be a valid Feature or Geometry Object');
47518         }
47519
47520         /**
47521          * Finds the difference between two {@link Polygon|polygons} by clipping the second polygon from the first.
47522          *
47523          * @name difference
47524          * @param {Feature<Polygon|MultiPolygon>} polygon1 input Polygon feature
47525          * @param {Feature<Polygon|MultiPolygon>} polygon2 Polygon feature to difference from polygon1
47526          * @returns {Feature<Polygon|MultiPolygon>|null} a Polygon or MultiPolygon feature showing the area of `polygon1` excluding the area of `polygon2` (if empty returns `null`)
47527          * @example
47528          * var polygon1 = turf.polygon([[
47529          *   [128, -26],
47530          *   [141, -26],
47531          *   [141, -21],
47532          *   [128, -21],
47533          *   [128, -26]
47534          * ]], {
47535          *   "fill": "#F00",
47536          *   "fill-opacity": 0.1
47537          * });
47538          * var polygon2 = turf.polygon([[
47539          *   [126, -28],
47540          *   [140, -28],
47541          *   [140, -20],
47542          *   [126, -20],
47543          *   [126, -28]
47544          * ]], {
47545          *   "fill": "#00F",
47546          *   "fill-opacity": 0.1
47547          * });
47548          *
47549          * var difference = turf.difference(polygon1, polygon2);
47550          *
47551          * //addToMap
47552          * var addToMap = [polygon1, polygon2, difference];
47553          */
47554         function difference(polygon1, polygon2) {
47555             var geom1 = getGeom(polygon1);
47556             var geom2 = getGeom(polygon2);
47557             var properties = polygon1.properties || {};
47558
47559             // Issue #721 - JSTS can't handle empty polygons
47560             geom1 = removeEmptyPolygon(geom1);
47561             geom2 = removeEmptyPolygon(geom2);
47562             if (!geom1) { return null; }
47563             if (!geom2) { return feature$2(geom1, properties); }
47564
47565             // JSTS difference operation
47566             var reader = new GeoJSONReader();
47567             var a = reader.read(geom1);
47568             var b = reader.read(geom2);
47569             var differenced = OverlayOp.difference(a, b);
47570             if (differenced.isEmpty()) { return null; }
47571             var writer = new GeoJSONWriter();
47572             var geom = writer.write(differenced);
47573
47574             return feature$2(geom, properties);
47575         }
47576
47577         /**
47578          * Detect Empty Polygon
47579          *
47580          * @private
47581          * @param {Geometry<Polygon|MultiPolygon>} geom Geometry Object
47582          * @returns {Geometry<Polygon|MultiPolygon>|null} removed any polygons with no areas
47583          */
47584         function removeEmptyPolygon(geom) {
47585             switch (geom.type) {
47586             case 'Polygon':
47587                 if (area$2(geom) > 1) { return geom; }
47588                 return null;
47589             case 'MultiPolygon':
47590                 var coordinates = [];
47591                 flattenEach(geom, function (feature$$1) {
47592                     if (area$2(feature$$1) > 1) { coordinates.push(feature$$1.geometry.coordinates); }
47593                 });
47594                 if (coordinates.length) { return {type: 'MultiPolygon', coordinates: coordinates}; }
47595             }
47596         }
47597
47598         /**
47599          * Takes two or more {@link Polygon|polygons} and returns a combined polygon. If the input polygons are not contiguous, this function returns a {@link MultiPolygon} feature.
47600          *
47601          * @name union
47602          * @param {...Feature<Polygon>} A polygon to combine
47603          * @returns {Feature<(Polygon|MultiPolygon)>} a combined {@link Polygon} or {@link MultiPolygon} feature
47604          * @example
47605          * var poly1 = turf.polygon([[
47606          *     [-82.574787, 35.594087],
47607          *     [-82.574787, 35.615581],
47608          *     [-82.545261, 35.615581],
47609          *     [-82.545261, 35.594087],
47610          *     [-82.574787, 35.594087]
47611          * ]], {"fill": "#0f0"});
47612          * var poly2 = turf.polygon([[
47613          *     [-82.560024, 35.585153],
47614          *     [-82.560024, 35.602602],
47615          *     [-82.52964, 35.602602],
47616          *     [-82.52964, 35.585153],
47617          *     [-82.560024, 35.585153]
47618          * ]], {"fill": "#00f"});
47619          *
47620          * var union = turf.union(poly1, poly2);
47621          *
47622          * //addToMap
47623          * var addToMap = [poly1, poly2, union];
47624          */
47625         function union() {
47626             var arguments$1 = arguments;
47627
47628             var reader = new GeoJSONReader();
47629             var result = reader.read(JSON.stringify(arguments[0].geometry));
47630
47631             for (var i = 1; i < arguments.length; i++) {
47632                 result = UnionOp.union(result, reader.read(JSON.stringify(arguments$1[i].geometry)));
47633             }
47634
47635             var writer = new GeoJSONWriter();
47636             result = writer.write(result);
47637
47638             return {
47639                 type: 'Feature',
47640                 geometry: result,
47641                 properties: arguments[0].properties
47642             };
47643         }
47644
47645         // Reduce an array of locations into a single GeoJSON feature
47646         function _locationReducer(accumulator, location) {
47647           var result = this.locationToFeature(location);   // eslint-disable-line no-invalid-this
47648           if (!result || !result.feature) {
47649             console.warn(("Warning:  Couldn't resolve location \"" + location + "\""));  // eslint-disable-line no-console
47650             return accumulator;
47651           }
47652           return !accumulator ? result.feature : union(accumulator, result.feature);
47653         }
47654
47655
47656         // It's ok to sort location lists because they all end up unioned together.
47657         function _locationSorter(a, b) {
47658           var rank = { countrycoder: 1, geojson: 2, point: 3 };
47659           var aRank = rank[this.isValidLocation(a)] || 4;   // eslint-disable-line no-invalid-this
47660           var bRank = rank[this.isValidLocation(b)] || 4;   // eslint-disable-line no-invalid-this
47661
47662           if (aRank > bRank) { return 1; }
47663           if (aRank < bRank) { return -1; }
47664
47665           // numeric sort point [lon,lat] locations
47666           if (aRank === 3 && bRank === 3) {
47667             return (a[0] - b[0] > 0) ? 1
47668               : (a[0] - b[0] < 0) ? -1
47669               : (a[1] - b[1]);
47670           }
47671
47672           // lexical sort other identifiers
47673           return a.localeCompare(b);
47674         }
47675
47676
47677
47678         var defaultExport = function defaultExport(fc) {
47679           var this$1 = this;
47680
47681           this._cache = {};
47682           this._features = {};
47683
47684           // process input FeatureCollection
47685           if (fc && fc.type === 'FeatureCollection' && Array.isArray(fc.features)) {
47686             fc.features.forEach(function (feature) {
47687               feature.properties = feature.properties || {};
47688               var props = feature.properties;
47689
47690               // get `id` from either `id` or `properties`
47691               var id = feature.id || props.id;
47692               if (!id || !/^\S+\.geojson$/i.test(id)) { return; }
47693
47694               // ensure id
47695               feature.id = id;
47696               props.id = id;
47697
47698               // ensure area property
47699               if (!props.area) {
47700                 var area = geojsonArea.geometry(feature.geometry) / 1e6;// m² to km²
47701                 props.area = Number(area.toFixed(2));
47702               }
47703
47704               this$1._features[id] = feature;
47705             });
47706           }
47707
47708           // Update CountryCoder world geometry to be a polygon covering the world.
47709           // (yes, modifying the internal CountryCoder geometry is hacky, but seems safe)
47710           var world = feature('001');
47711           world.geometry = {
47712             type: 'Polygon',
47713             coordinates: [[[-180, -90], [-180, 90], [180, 90], [180, -90], [-180, -90]]]
47714           };
47715         };
47716
47717
47718         // isValidLocation
47719         //
47720         // Pass a `location` identifier
47721         // Returns 'point', 'geojson', or 'countrycoder' if valid, false otherwise
47722         defaultExport.prototype.isValidLocation = function isValidLocation (location) {
47723           if (Array.isArray(location)) { // a [lon,lat] coordinate pair?
47724             return !!(
47725               location.length === 2 && Number.isFinite(location[0]) && Number.isFinite(location[1]) &&
47726               location[0] >= -180 && location[0] <= 180 && location[1] >= -90 && location[1] <= 90
47727             ) && 'point';
47728
47729           } else if (/^\S+\.geojson$/i.test(location)) { // a .geojson filename?
47730             return !!this._features[location] && 'geojson';
47731
47732           } else {  // a country-coder string?
47733             var ccmatch = feature(location);
47734             return !!ccmatch && 'countrycoder';
47735           }
47736         };
47737
47738
47739         // locationToFeature
47740         //
47741         // Pass a `location` identifier
47742         // Returns a GeoJSON feature
47743         defaultExport.prototype.locationToFeature = function locationToFeature (location) {
47744           // a [lon,lat] coordinate pair?
47745           if (Array.isArray(location)) {
47746             if (location.length === 2 && Number.isFinite(location[0]) && Number.isFinite(location[1]) &&
47747               location[0] >= -180 && location[0] <= 180 && location[1] >= -90 && location[1] <= 90
47748             ) {
47749               var RADIUS = 25000;// meters
47750               var EDGES = 10;
47751               var PRECISION = 3;
47752               var id = 'point:' + location.toString();
47753               var area = Math.PI * RADIUS * RADIUS / 1e6;   // m² to km²
47754
47755               var feature$1 = this._cache[id];
47756               if (!feature$1) {
47757                 feature$1 = this._cache[id] = geojsonPrecision({
47758                   type: 'Feature',
47759                   id: id,
47760                   properties: { id: id, area: Number(area.toFixed(2)) },
47761                   geometry: circleToPolygon(location, RADIUS, EDGES)
47762                 }, PRECISION);
47763               }
47764               return { type: 'point', feature: feature$1 };
47765
47766             } else {
47767               return null;
47768             }
47769
47770            // a .geojson filename?
47771            } else if (/^\S+\.geojson$/i.test(location)) {
47772             var feature$1$1 = this._features[location];
47773             if (feature$1$1) {
47774               return { type: 'geojson', feature: feature$1$1 };
47775             } else {
47776               return null;
47777             }
47778
47779           // a country-coder string?
47780           } else {
47781             var feature$2 = feature(location);
47782             if (feature$2) {
47783               feature$2.properties = feature$2.properties || {};
47784               var props = feature$2.properties;
47785
47786               // -> This block of code is weird and requires some explanation. <-
47787               // CountryCoder includes higher level features which are made up of members.
47788               // These features don't have their own geometry, but CountryCoder provides an
47789               // `aggregateFeature` method to combine these members into a MultiPolygon.
47790               // BUT, when we try to actually work with these aggregated MultiPolygons,
47791               // Turf/JSTS gets crashy because of topography bugs.
47792               // SO, we'll aggregate the features ourselves by unioning them together,
47793               // then store the resulting geometry back in the CountryCoder feature itself.
47794               // This approach also has the benefit of removing all the internal boaders and
47795               // simplifying the regional polygons a lot.
47796               // (yes, modifying the internal CountryCoder geometry is hacky, but seems safe)
47797               if (!feature$2.geometry) {
47798                 var aggregate = props.members.reduce(_locationReducer.bind(this), null);
47799                 feature$2.geometry = aggregate.geometry;
47800               }
47801
47802               // ensure area property
47803               if (!props.area) {
47804                 var area$1 = geojsonArea.geometry(feature$2.geometry) / 1e6;// m² to km²
47805                 props.area = Number(area$1.toFixed(2));
47806               }
47807
47808               // ensure id
47809               var id$1 = (props.iso1A2 || props.iso1N3 || props.m49 || props.M49).toString();
47810               feature$2.id = id$1;
47811               props.id = id$1;
47812
47813               return { type: 'countrycoder', feature: feature$2 };
47814
47815             } else {
47816               return null;
47817             }
47818           }
47819         };
47820
47821
47822         // resolveLocationSet
47823         //
47824         // Pass a `locationSet` Object like:
47825         // `{ include: [ Array ], exclude: [ Array ] }`
47826         // Returns a stable identifier string of the form:
47827         // "+[included]-[excluded]"
47828         //
47829         defaultExport.prototype.resolveLocationSet = function resolveLocationSet (locationSet) {
47830             var this$1 = this;
47831
47832           locationSet = locationSet || {};
47833           var include = (locationSet.include || []).filter(function (l) { return this$1.isValidLocation(l); });
47834           var exclude = (locationSet.exclude || []).filter(function (l) { return this$1.isValidLocation(l); });
47835
47836           if (include.length) {
47837             include.sort(_locationSorter.bind(this));
47838           } else {
47839             include = ['001']; // default to 'the world'
47840           }
47841
47842           // return quickly if it's a single included location..
47843           if (include.length === 1 && exclude.length === 0) {
47844             var result = this.locationToFeature(include[0]);
47845             return result && result.feature;
47846           }
47847
47848           // generate stable identifier
47849           var id = '+' + toIdString(include);
47850           if (exclude.length) {
47851             exclude.sort(_locationSorter.bind(this));
47852             id += '-' + toIdString(exclude);
47853           }
47854
47855           // return cached?
47856           if (this._cache[id]) {
47857             return this._cache[id];
47858           }
47859
47860           // resolve lists
47861           var includeGeoJSON = include.reduce(_locationReducer.bind(this), null);
47862           var excludeGeoJSON = exclude.reduce(_locationReducer.bind(this), null);
47863
47864           // calculate include-exclude, recalc area and return result
47865           var resultGeoJSON = excludeGeoJSON ? difference(includeGeoJSON, excludeGeoJSON) : includeGeoJSON;
47866           var area = geojsonArea.geometry(resultGeoJSON.geometry) / 1e6;// m² to km²
47867
47868           resultGeoJSON.id = id;
47869           resultGeoJSON.properties = { id: id, area: Number(area.toFixed(2)) };
47870           this._cache[id] = resultGeoJSON;
47871
47872           return resultGeoJSON;
47873
47874
47875           function toIdString(arr) {
47876             return JSON.stringify(arr).replace(/"/g,'').toLowerCase();
47877           }
47878         };
47879
47880         // index the osm-community-index
47881         var ociFeatures = {};
47882         var loco = new defaultExport({ type: 'FeatureCollection', features: features });
47883
47884         Object.values(resources).forEach(function (resource) {
47885           var feature = loco.resolveLocationSet(resource.locationSet);
47886           var ociFeature = ociFeatures[feature.id];
47887           if (!ociFeature) {
47888             ociFeature = JSON.parse(JSON.stringify(feature));  // deep clone
47889             ociFeature.properties.resourceIDs = new Set();
47890             ociFeatures[feature.id] = ociFeature;
47891           }
47892           ociFeature.properties.resourceIDs.add(resource.id);
47893         });
47894
47895
47896         var data = {
47897           community: {
47898             features: ociFeatures,
47899             resources: resources,
47900             query: whichPolygon_1({ type: 'FeatureCollection', features: Object.values(ociFeatures) })
47901           },
47902           imagery: dataImagery,  //legacy
47903           presets: {
47904             presets: presets,
47905             defaults: defaults,
47906             categories: categories,
47907             fields: fields
47908           }
47909         };
47910
47911         var aesJs = createCommonjsModule(function (module, exports) {
47912         /*! MIT License. Copyright 2015-2018 Richard Moore <me@ricmoo.com>. See LICENSE.txt. */
47913         (function(root) {
47914
47915             function checkInt(value) {
47916                 return (parseInt(value) === value);
47917             }
47918
47919             function checkInts(arrayish) {
47920                 if (!checkInt(arrayish.length)) { return false; }
47921
47922                 for (var i = 0; i < arrayish.length; i++) {
47923                     if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {
47924                         return false;
47925                     }
47926                 }
47927
47928                 return true;
47929             }
47930
47931             function coerceArray(arg, copy) {
47932
47933                 // ArrayBuffer view
47934                 if (arg.buffer && arg.name === 'Uint8Array') {
47935
47936                     if (copy) {
47937                         if (arg.slice) {
47938                             arg = arg.slice();
47939                         } else {
47940                             arg = Array.prototype.slice.call(arg);
47941                         }
47942                     }
47943
47944                     return arg;
47945                 }
47946
47947                 // It's an array; check it is a valid representation of a byte
47948                 if (Array.isArray(arg)) {
47949                     if (!checkInts(arg)) {
47950                         throw new Error('Array contains invalid value: ' + arg);
47951                     }
47952
47953                     return new Uint8Array(arg);
47954                 }
47955
47956                 // Something else, but behaves like an array (maybe a Buffer? Arguments?)
47957                 if (checkInt(arg.length) && checkInts(arg)) {
47958                     return new Uint8Array(arg);
47959                 }
47960
47961                 throw new Error('unsupported array-like object');
47962             }
47963
47964             function createArray(length) {
47965                 return new Uint8Array(length);
47966             }
47967
47968             function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {
47969                 if (sourceStart != null || sourceEnd != null) {
47970                     if (sourceArray.slice) {
47971                         sourceArray = sourceArray.slice(sourceStart, sourceEnd);
47972                     } else {
47973                         sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);
47974                     }
47975                 }
47976                 targetArray.set(sourceArray, targetStart);
47977             }
47978
47979
47980
47981             var convertUtf8 = (function() {
47982                 function toBytes(text) {
47983                     var result = [], i = 0;
47984                     text = encodeURI(text);
47985                     while (i < text.length) {
47986                         var c = text.charCodeAt(i++);
47987
47988                         // if it is a % sign, encode the following 2 bytes as a hex value
47989                         if (c === 37) {
47990                             result.push(parseInt(text.substr(i, 2), 16));
47991                             i += 2;
47992
47993                         // otherwise, just the actual byte
47994                         } else {
47995                             result.push(c);
47996                         }
47997                     }
47998
47999                     return coerceArray(result);
48000                 }
48001
48002                 function fromBytes(bytes) {
48003                     var result = [], i = 0;
48004
48005                     while (i < bytes.length) {
48006                         var c = bytes[i];
48007
48008                         if (c < 128) {
48009                             result.push(String.fromCharCode(c));
48010                             i++;
48011                         } else if (c > 191 && c < 224) {
48012                             result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));
48013                             i += 2;
48014                         } else {
48015                             result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));
48016                             i += 3;
48017                         }
48018                     }
48019
48020                     return result.join('');
48021                 }
48022
48023                 return {
48024                     toBytes: toBytes,
48025                     fromBytes: fromBytes,
48026                 }
48027             })();
48028
48029             var convertHex = (function() {
48030                 function toBytes(text) {
48031                     var result = [];
48032                     for (var i = 0; i < text.length; i += 2) {
48033                         result.push(parseInt(text.substr(i, 2), 16));
48034                     }
48035
48036                     return result;
48037                 }
48038
48039                 // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html
48040                 var Hex = '0123456789abcdef';
48041
48042                 function fromBytes(bytes) {
48043                         var result = [];
48044                         for (var i = 0; i < bytes.length; i++) {
48045                             var v = bytes[i];
48046                             result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);
48047                         }
48048                         return result.join('');
48049                 }
48050
48051                 return {
48052                     toBytes: toBytes,
48053                     fromBytes: fromBytes,
48054                 }
48055             })();
48056
48057
48058             // Number of rounds by keysize
48059             var numberOfRounds = {16: 10, 24: 12, 32: 14};
48060
48061             // Round constant words
48062             var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];
48063
48064             // S-box and Inverse S-box (S is for Substitution)
48065             var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];
48066             var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];
48067
48068             // Transformations for encryption
48069             var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];
48070             var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];
48071             var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];
48072             var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];
48073
48074             // Transformations for decryption
48075             var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];
48076             var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];
48077             var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];
48078             var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];
48079
48080             // Transformations for decryption key expansion
48081             var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];
48082             var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];
48083             var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];
48084             var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];
48085
48086             function convertToInt32(bytes) {
48087                 var result = [];
48088                 for (var i = 0; i < bytes.length; i += 4) {
48089                     result.push(
48090                         (bytes[i    ] << 24) |
48091                         (bytes[i + 1] << 16) |
48092                         (bytes[i + 2] <<  8) |
48093                          bytes[i + 3]
48094                     );
48095                 }
48096                 return result;
48097             }
48098
48099             var AES = function(key) {
48100                 if (!(this instanceof AES)) {
48101                     throw Error('AES must be instanitated with `new`');
48102                 }
48103
48104                 Object.defineProperty(this, 'key', {
48105                     value: coerceArray(key, true)
48106                 });
48107
48108                 this._prepare();
48109             };
48110
48111
48112             AES.prototype._prepare = function() {
48113
48114                 var rounds = numberOfRounds[this.key.length];
48115                 if (rounds == null) {
48116                     throw new Error('invalid key size (must be 16, 24 or 32 bytes)');
48117                 }
48118
48119                 // encryption round keys
48120                 this._Ke = [];
48121
48122                 // decryption round keys
48123                 this._Kd = [];
48124
48125                 for (var i = 0; i <= rounds; i++) {
48126                     this._Ke.push([0, 0, 0, 0]);
48127                     this._Kd.push([0, 0, 0, 0]);
48128                 }
48129
48130                 var roundKeyCount = (rounds + 1) * 4;
48131                 var KC = this.key.length / 4;
48132
48133                 // convert the key into ints
48134                 var tk = convertToInt32(this.key);
48135
48136                 // copy values into round key arrays
48137                 var index;
48138                 for (var i = 0; i < KC; i++) {
48139                     index = i >> 2;
48140                     this._Ke[index][i % 4] = tk[i];
48141                     this._Kd[rounds - index][i % 4] = tk[i];
48142                 }
48143
48144                 // key expansion (fips-197 section 5.2)
48145                 var rconpointer = 0;
48146                 var t = KC, tt;
48147                 while (t < roundKeyCount) {
48148                     tt = tk[KC - 1];
48149                     tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^
48150                               (S[(tt >>  8) & 0xFF] << 16) ^
48151                               (S[ tt        & 0xFF] <<  8) ^
48152                                S[(tt >> 24) & 0xFF]        ^
48153                               (rcon[rconpointer] << 24));
48154                     rconpointer += 1;
48155
48156                     // key expansion (for non-256 bit)
48157                     if (KC != 8) {
48158                         for (var i = 1; i < KC; i++) {
48159                             tk[i] ^= tk[i - 1];
48160                         }
48161
48162                     // key expansion for 256-bit keys is "slightly different" (fips-197)
48163                     } else {
48164                         for (var i = 1; i < (KC / 2); i++) {
48165                             tk[i] ^= tk[i - 1];
48166                         }
48167                         tt = tk[(KC / 2) - 1];
48168
48169                         tk[KC / 2] ^= (S[ tt        & 0xFF]        ^
48170                                       (S[(tt >>  8) & 0xFF] <<  8) ^
48171                                       (S[(tt >> 16) & 0xFF] << 16) ^
48172                                       (S[(tt >> 24) & 0xFF] << 24));
48173
48174                         for (var i = (KC / 2) + 1; i < KC; i++) {
48175                             tk[i] ^= tk[i - 1];
48176                         }
48177                     }
48178
48179                     // copy values into round key arrays
48180                     var i = 0, r, c;
48181                     while (i < KC && t < roundKeyCount) {
48182                         r = t >> 2;
48183                         c = t % 4;
48184                         this._Ke[r][c] = tk[i];
48185                         this._Kd[rounds - r][c] = tk[i++];
48186                         t++;
48187                     }
48188                 }
48189
48190                 // inverse-cipher-ify the decryption round key (fips-197 section 5.3)
48191                 for (var r = 1; r < rounds; r++) {
48192                     for (var c = 0; c < 4; c++) {
48193                         tt = this._Kd[r][c];
48194                         this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^
48195                                           U2[(tt >> 16) & 0xFF] ^
48196                                           U3[(tt >>  8) & 0xFF] ^
48197                                           U4[ tt        & 0xFF]);
48198                     }
48199                 }
48200             };
48201
48202             AES.prototype.encrypt = function(plaintext) {
48203                 if (plaintext.length != 16) {
48204                     throw new Error('invalid plaintext size (must be 16 bytes)');
48205                 }
48206
48207                 var rounds = this._Ke.length - 1;
48208                 var a = [0, 0, 0, 0];
48209
48210                 // convert plaintext to (ints ^ key)
48211                 var t = convertToInt32(plaintext);
48212                 for (var i = 0; i < 4; i++) {
48213                     t[i] ^= this._Ke[0][i];
48214                 }
48215
48216                 // apply round transforms
48217                 for (var r = 1; r < rounds; r++) {
48218                     for (var i = 0; i < 4; i++) {
48219                         a[i] = (T1[(t[ i         ] >> 24) & 0xff] ^
48220                                 T2[(t[(i + 1) % 4] >> 16) & 0xff] ^
48221                                 T3[(t[(i + 2) % 4] >>  8) & 0xff] ^
48222                                 T4[ t[(i + 3) % 4]        & 0xff] ^
48223                                 this._Ke[r][i]);
48224                     }
48225                     t = a.slice();
48226                 }
48227
48228                 // the last round is special
48229                 var result = createArray(16), tt;
48230                 for (var i = 0; i < 4; i++) {
48231                     tt = this._Ke[rounds][i];
48232                     result[4 * i    ] = (S[(t[ i         ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;
48233                     result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;
48234                     result[4 * i + 2] = (S[(t[(i + 2) % 4] >>  8) & 0xff] ^ (tt >>  8)) & 0xff;
48235                     result[4 * i + 3] = (S[ t[(i + 3) % 4]        & 0xff] ^  tt       ) & 0xff;
48236                 }
48237
48238                 return result;
48239             };
48240
48241             AES.prototype.decrypt = function(ciphertext) {
48242                 if (ciphertext.length != 16) {
48243                     throw new Error('invalid ciphertext size (must be 16 bytes)');
48244                 }
48245
48246                 var rounds = this._Kd.length - 1;
48247                 var a = [0, 0, 0, 0];
48248
48249                 // convert plaintext to (ints ^ key)
48250                 var t = convertToInt32(ciphertext);
48251                 for (var i = 0; i < 4; i++) {
48252                     t[i] ^= this._Kd[0][i];
48253                 }
48254
48255                 // apply round transforms
48256                 for (var r = 1; r < rounds; r++) {
48257                     for (var i = 0; i < 4; i++) {
48258                         a[i] = (T5[(t[ i          ] >> 24) & 0xff] ^
48259                                 T6[(t[(i + 3) % 4] >> 16) & 0xff] ^
48260                                 T7[(t[(i + 2) % 4] >>  8) & 0xff] ^
48261                                 T8[ t[(i + 1) % 4]        & 0xff] ^
48262                                 this._Kd[r][i]);
48263                     }
48264                     t = a.slice();
48265                 }
48266
48267                 // the last round is special
48268                 var result = createArray(16), tt;
48269                 for (var i = 0; i < 4; i++) {
48270                     tt = this._Kd[rounds][i];
48271                     result[4 * i    ] = (Si[(t[ i         ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;
48272                     result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;
48273                     result[4 * i + 2] = (Si[(t[(i + 2) % 4] >>  8) & 0xff] ^ (tt >>  8)) & 0xff;
48274                     result[4 * i + 3] = (Si[ t[(i + 1) % 4]        & 0xff] ^  tt       ) & 0xff;
48275                 }
48276
48277                 return result;
48278             };
48279
48280
48281             /**
48282              *  Mode Of Operation - Electonic Codebook (ECB)
48283              */
48284             var ModeOfOperationECB = function(key) {
48285                 if (!(this instanceof ModeOfOperationECB)) {
48286                     throw Error('AES must be instanitated with `new`');
48287                 }
48288
48289                 this.description = "Electronic Code Block";
48290                 this.name = "ecb";
48291
48292                 this._aes = new AES(key);
48293             };
48294
48295             ModeOfOperationECB.prototype.encrypt = function(plaintext) {
48296                 plaintext = coerceArray(plaintext);
48297
48298                 if ((plaintext.length % 16) !== 0) {
48299                     throw new Error('invalid plaintext size (must be multiple of 16 bytes)');
48300                 }
48301
48302                 var ciphertext = createArray(plaintext.length);
48303                 var block = createArray(16);
48304
48305                 for (var i = 0; i < plaintext.length; i += 16) {
48306                     copyArray(plaintext, block, 0, i, i + 16);
48307                     block = this._aes.encrypt(block);
48308                     copyArray(block, ciphertext, i);
48309                 }
48310
48311                 return ciphertext;
48312             };
48313
48314             ModeOfOperationECB.prototype.decrypt = function(ciphertext) {
48315                 ciphertext = coerceArray(ciphertext);
48316
48317                 if ((ciphertext.length % 16) !== 0) {
48318                     throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');
48319                 }
48320
48321                 var plaintext = createArray(ciphertext.length);
48322                 var block = createArray(16);
48323
48324                 for (var i = 0; i < ciphertext.length; i += 16) {
48325                     copyArray(ciphertext, block, 0, i, i + 16);
48326                     block = this._aes.decrypt(block);
48327                     copyArray(block, plaintext, i);
48328                 }
48329
48330                 return plaintext;
48331             };
48332
48333
48334             /**
48335              *  Mode Of Operation - Cipher Block Chaining (CBC)
48336              */
48337             var ModeOfOperationCBC = function(key, iv) {
48338                 if (!(this instanceof ModeOfOperationCBC)) {
48339                     throw Error('AES must be instanitated with `new`');
48340                 }
48341
48342                 this.description = "Cipher Block Chaining";
48343                 this.name = "cbc";
48344
48345                 if (!iv) {
48346                     iv = createArray(16);
48347
48348                 } else if (iv.length != 16) {
48349                     throw new Error('invalid initialation vector size (must be 16 bytes)');
48350                 }
48351
48352                 this._lastCipherblock = coerceArray(iv, true);
48353
48354                 this._aes = new AES(key);
48355             };
48356
48357             ModeOfOperationCBC.prototype.encrypt = function(plaintext) {
48358                 plaintext = coerceArray(plaintext);
48359
48360                 if ((plaintext.length % 16) !== 0) {
48361                     throw new Error('invalid plaintext size (must be multiple of 16 bytes)');
48362                 }
48363
48364                 var ciphertext = createArray(plaintext.length);
48365                 var block = createArray(16);
48366
48367                 for (var i = 0; i < plaintext.length; i += 16) {
48368                     copyArray(plaintext, block, 0, i, i + 16);
48369
48370                     for (var j = 0; j < 16; j++) {
48371                         block[j] ^= this._lastCipherblock[j];
48372                     }
48373
48374                     this._lastCipherblock = this._aes.encrypt(block);
48375                     copyArray(this._lastCipherblock, ciphertext, i);
48376                 }
48377
48378                 return ciphertext;
48379             };
48380
48381             ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {
48382                 ciphertext = coerceArray(ciphertext);
48383
48384                 if ((ciphertext.length % 16) !== 0) {
48385                     throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');
48386                 }
48387
48388                 var plaintext = createArray(ciphertext.length);
48389                 var block = createArray(16);
48390
48391                 for (var i = 0; i < ciphertext.length; i += 16) {
48392                     copyArray(ciphertext, block, 0, i, i + 16);
48393                     block = this._aes.decrypt(block);
48394
48395                     for (var j = 0; j < 16; j++) {
48396                         plaintext[i + j] = block[j] ^ this._lastCipherblock[j];
48397                     }
48398
48399                     copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);
48400                 }
48401
48402                 return plaintext;
48403             };
48404
48405
48406             /**
48407              *  Mode Of Operation - Cipher Feedback (CFB)
48408              */
48409             var ModeOfOperationCFB = function(key, iv, segmentSize) {
48410                 if (!(this instanceof ModeOfOperationCFB)) {
48411                     throw Error('AES must be instanitated with `new`');
48412                 }
48413
48414                 this.description = "Cipher Feedback";
48415                 this.name = "cfb";
48416
48417                 if (!iv) {
48418                     iv = createArray(16);
48419
48420                 } else if (iv.length != 16) {
48421                     throw new Error('invalid initialation vector size (must be 16 size)');
48422                 }
48423
48424                 if (!segmentSize) { segmentSize = 1; }
48425
48426                 this.segmentSize = segmentSize;
48427
48428                 this._shiftRegister = coerceArray(iv, true);
48429
48430                 this._aes = new AES(key);
48431             };
48432
48433             ModeOfOperationCFB.prototype.encrypt = function(plaintext) {
48434                 if ((plaintext.length % this.segmentSize) != 0) {
48435                     throw new Error('invalid plaintext size (must be segmentSize bytes)');
48436                 }
48437
48438                 var encrypted = coerceArray(plaintext, true);
48439
48440                 var xorSegment;
48441                 for (var i = 0; i < encrypted.length; i += this.segmentSize) {
48442                     xorSegment = this._aes.encrypt(this._shiftRegister);
48443                     for (var j = 0; j < this.segmentSize; j++) {
48444                         encrypted[i + j] ^= xorSegment[j];
48445                     }
48446
48447                     // Shift the register
48448                     copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
48449                     copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);
48450                 }
48451
48452                 return encrypted;
48453             };
48454
48455             ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {
48456                 if ((ciphertext.length % this.segmentSize) != 0) {
48457                     throw new Error('invalid ciphertext size (must be segmentSize bytes)');
48458                 }
48459
48460                 var plaintext = coerceArray(ciphertext, true);
48461
48462                 var xorSegment;
48463                 for (var i = 0; i < plaintext.length; i += this.segmentSize) {
48464                     xorSegment = this._aes.encrypt(this._shiftRegister);
48465
48466                     for (var j = 0; j < this.segmentSize; j++) {
48467                         plaintext[i + j] ^= xorSegment[j];
48468                     }
48469
48470                     // Shift the register
48471                     copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
48472                     copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);
48473                 }
48474
48475                 return plaintext;
48476             };
48477
48478             /**
48479              *  Mode Of Operation - Output Feedback (OFB)
48480              */
48481             var ModeOfOperationOFB = function(key, iv) {
48482                 if (!(this instanceof ModeOfOperationOFB)) {
48483                     throw Error('AES must be instanitated with `new`');
48484                 }
48485
48486                 this.description = "Output Feedback";
48487                 this.name = "ofb";
48488
48489                 if (!iv) {
48490                     iv = createArray(16);
48491
48492                 } else if (iv.length != 16) {
48493                     throw new Error('invalid initialation vector size (must be 16 bytes)');
48494                 }
48495
48496                 this._lastPrecipher = coerceArray(iv, true);
48497                 this._lastPrecipherIndex = 16;
48498
48499                 this._aes = new AES(key);
48500             };
48501
48502             ModeOfOperationOFB.prototype.encrypt = function(plaintext) {
48503                 var encrypted = coerceArray(plaintext, true);
48504
48505                 for (var i = 0; i < encrypted.length; i++) {
48506                     if (this._lastPrecipherIndex === 16) {
48507                         this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);
48508                         this._lastPrecipherIndex = 0;
48509                     }
48510                     encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];
48511                 }
48512
48513                 return encrypted;
48514             };
48515
48516             // Decryption is symetric
48517             ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;
48518
48519
48520             /**
48521              *  Counter object for CTR common mode of operation
48522              */
48523             var Counter = function(initialValue) {
48524                 if (!(this instanceof Counter)) {
48525                     throw Error('Counter must be instanitated with `new`');
48526                 }
48527
48528                 // We allow 0, but anything false-ish uses the default 1
48529                 if (initialValue !== 0 && !initialValue) { initialValue = 1; }
48530
48531                 if (typeof(initialValue) === 'number') {
48532                     this._counter = createArray(16);
48533                     this.setValue(initialValue);
48534
48535                 } else {
48536                     this.setBytes(initialValue);
48537                 }
48538             };
48539
48540             Counter.prototype.setValue = function(value) {
48541                 if (typeof(value) !== 'number' || parseInt(value) != value) {
48542                     throw new Error('invalid counter value (must be an integer)');
48543                 }
48544
48545                 // We cannot safely handle numbers beyond the safe range for integers
48546                 if (value > Number.MAX_SAFE_INTEGER) {
48547                     throw new Error('integer value out of safe range');
48548                 }
48549
48550                 for (var index = 15; index >= 0; --index) {
48551                     this._counter[index] = value % 256;
48552                     value = parseInt(value / 256);
48553                 }
48554             };
48555
48556             Counter.prototype.setBytes = function(bytes) {
48557                 bytes = coerceArray(bytes, true);
48558
48559                 if (bytes.length != 16) {
48560                     throw new Error('invalid counter bytes size (must be 16 bytes)');
48561                 }
48562
48563                 this._counter = bytes;
48564             };
48565
48566             Counter.prototype.increment = function() {
48567                 for (var i = 15; i >= 0; i--) {
48568                     if (this._counter[i] === 255) {
48569                         this._counter[i] = 0;
48570                     } else {
48571                         this._counter[i]++;
48572                         break;
48573                     }
48574                 }
48575             };
48576
48577
48578             /**
48579              *  Mode Of Operation - Counter (CTR)
48580              */
48581             var ModeOfOperationCTR = function(key, counter) {
48582                 if (!(this instanceof ModeOfOperationCTR)) {
48583                     throw Error('AES must be instanitated with `new`');
48584                 }
48585
48586                 this.description = "Counter";
48587                 this.name = "ctr";
48588
48589                 if (!(counter instanceof Counter)) {
48590                     counter = new Counter(counter);
48591                 }
48592
48593                 this._counter = counter;
48594
48595                 this._remainingCounter = null;
48596                 this._remainingCounterIndex = 16;
48597
48598                 this._aes = new AES(key);
48599             };
48600
48601             ModeOfOperationCTR.prototype.encrypt = function(plaintext) {
48602                 var encrypted = coerceArray(plaintext, true);
48603
48604                 for (var i = 0; i < encrypted.length; i++) {
48605                     if (this._remainingCounterIndex === 16) {
48606                         this._remainingCounter = this._aes.encrypt(this._counter._counter);
48607                         this._remainingCounterIndex = 0;
48608                         this._counter.increment();
48609                     }
48610                     encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];
48611                 }
48612
48613                 return encrypted;
48614             };
48615
48616             // Decryption is symetric
48617             ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;
48618
48619
48620             ///////////////////////
48621             // Padding
48622
48623             // See:https://tools.ietf.org/html/rfc2315
48624             function pkcs7pad(data) {
48625                 data = coerceArray(data, true);
48626                 var padder = 16 - (data.length % 16);
48627                 var result = createArray(data.length + padder);
48628                 copyArray(data, result);
48629                 for (var i = data.length; i < result.length; i++) {
48630                     result[i] = padder;
48631                 }
48632                 return result;
48633             }
48634
48635             function pkcs7strip(data) {
48636                 data = coerceArray(data, true);
48637                 if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }
48638
48639                 var padder = data[data.length - 1];
48640                 if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }
48641
48642                 var length = data.length - padder;
48643                 for (var i = 0; i < padder; i++) {
48644                     if (data[length + i] !== padder) {
48645                         throw new Error('PKCS#7 invalid padding byte');
48646                     }
48647                 }
48648
48649                 var result = createArray(length);
48650                 copyArray(data, result, 0, 0, length);
48651                 return result;
48652             }
48653
48654             ///////////////////////
48655             // Exporting
48656
48657
48658             // The block cipher
48659             var aesjs = {
48660                 AES: AES,
48661                 Counter: Counter,
48662
48663                 ModeOfOperation: {
48664                     ecb: ModeOfOperationECB,
48665                     cbc: ModeOfOperationCBC,
48666                     cfb: ModeOfOperationCFB,
48667                     ofb: ModeOfOperationOFB,
48668                     ctr: ModeOfOperationCTR
48669                 },
48670
48671                 utils: {
48672                     hex: convertHex,
48673                     utf8: convertUtf8
48674                 },
48675
48676                 padding: {
48677                     pkcs7: {
48678                         pad: pkcs7pad,
48679                         strip: pkcs7strip
48680                     }
48681                 },
48682
48683                 _arrayTest: {
48684                     coerceArray: coerceArray,
48685                     createArray: createArray,
48686                     copyArray: copyArray,
48687                 }
48688             };
48689
48690
48691             // node.js
48692             {
48693                 module.exports = aesjs;
48694
48695             // RequireJS/AMD
48696             // http://www.requirejs.org/docs/api.html
48697             // https://github.com/amdjs/amdjs-api/wiki/AMD
48698             }
48699
48700
48701         })();
48702         });
48703
48704         // See https://github.com/ricmoo/aes-js
48705         // We can use keys that are 128 bits (16 bytes), 192 bits (24 bytes) or 256 bits (32 bytes).
48706         // To generate a random key:  window.crypto.getRandomValues(new Uint8Array(16));
48707
48708         // This default signing key is built into iD and can be used to mask/unmask sensitive values.
48709         var DEFAULT_128 = [250, 157, 60, 79, 142, 134, 229, 129, 138, 126, 210, 129, 29, 71, 160, 208];
48710
48711
48712         function utilAesEncrypt(text, key) {
48713           key = key || DEFAULT_128;
48714           var textBytes = aesJs.utils.utf8.toBytes(text);
48715           var aesCtr = new aesJs.ModeOfOperation.ctr(key);
48716           var encryptedBytes = aesCtr.encrypt(textBytes);
48717           var encryptedHex = aesJs.utils.hex.fromBytes(encryptedBytes);
48718           return encryptedHex;
48719         }
48720
48721
48722         function utilAesDecrypt(encryptedHex, key) {
48723           key = key || DEFAULT_128;
48724           var encryptedBytes = aesJs.utils.hex.toBytes(encryptedHex);
48725           var aesCtr = new aesJs.ModeOfOperation.ctr(key);
48726           var decryptedBytes = aesCtr.decrypt(encryptedBytes);
48727           var text = aesJs.utils.utf8.fromBytes(decryptedBytes);
48728           return text;
48729         }
48730
48731         // http://2ality.com/2015/01/es6-set-operations.html
48732
48733         // Difference (a \ b): create a set that contains those elements of set a that are not in set b.
48734         // This operation is also sometimes called minus (-).
48735         // var a = [1,2,3];
48736         // var b = [4,3,2];
48737         // utilArrayDifference(a, b)
48738         //   [1]
48739         // utilArrayDifference(b, a)
48740         //   [4]
48741         function utilArrayDifference(a, b) {
48742             var other = new Set(b);
48743             return Array.from(new Set(a))
48744                 .filter(function(v) { return !other.has(v); });
48745         }
48746
48747         // Intersection (a ∩ b): create a set that contains those elements of set a that are also in set b.
48748         // var a = [1,2,3];
48749         // var b = [4,3,2];
48750         // utilArrayIntersection(a, b)
48751         //   [2,3]
48752         function utilArrayIntersection(a, b) {
48753             var other = new Set(b);
48754             return Array.from(new Set(a))
48755                 .filter(function(v) { return other.has(v); });
48756         }
48757
48758         // Union (a ∪ b): create a set that contains the elements of both set a and set b.
48759         // var a = [1,2,3];
48760         // var b = [4,3,2];
48761         // utilArrayUnion(a, b)
48762         //   [1,2,3,4]
48763         function utilArrayUnion(a, b) {
48764             var result = new Set(a);
48765             b.forEach(function(v) { result.add(v); });
48766             return Array.from(result);
48767         }
48768
48769         // Returns an Array with all the duplicates removed
48770         // var a = [1,1,2,3,3];
48771         // utilArrayUniq(a)
48772         //   [1,2,3]
48773         function utilArrayUniq(a) {
48774             return Array.from(new Set(a));
48775         }
48776
48777
48778         // Splits array into chunks of given chunk size
48779         // var a = [1,2,3,4,5,6,7];
48780         // utilArrayChunk(a, 3);
48781         //   [[1,2,3],[4,5,6],[7]];
48782         function utilArrayChunk(a, chunkSize) {
48783             if (!chunkSize || chunkSize < 0) { return [a.slice()]; }
48784
48785             var result = new Array(Math.ceil(a.length / chunkSize));
48786             return Array.from(result, function(item, i) {
48787                 return a.slice(i * chunkSize, i * chunkSize + chunkSize);
48788             });
48789         }
48790
48791
48792         // Flattens two level array into a single level
48793         // var a = [[1,2,3],[4,5,6],[7]];
48794         // utilArrayFlatten(a);
48795         //   [1,2,3,4,5,6,7];
48796         function utilArrayFlatten(a) {
48797             return a.reduce(function(acc, val) {
48798                 return acc.concat(val);
48799             }, []);
48800         }
48801
48802
48803         // Groups the items of the Array according to the given key
48804         // `key` can be passed as a property or as a key function
48805         //
48806         // var pets = [
48807         //     { type: 'Dog', name: 'Spot' },
48808         //     { type: 'Cat', name: 'Tiger' },
48809         //     { type: 'Dog', name: 'Rover' },
48810         //     { type: 'Cat', name: 'Leo' }
48811         // ];
48812         //
48813         // utilArrayGroupBy(pets, 'type')
48814         //   {
48815         //     'Dog': [{type: 'Dog', name: 'Spot'}, {type: 'Dog', name: 'Rover'}],
48816         //     'Cat': [{type: 'Cat', name: 'Tiger'}, {type: 'Cat', name: 'Leo'}]
48817         //   }
48818         //
48819         // utilArrayGroupBy(pets, function(item) { return item.name.length; })
48820         //   {
48821         //     3: [{type: 'Cat', name: 'Leo'}],
48822         //     4: [{type: 'Dog', name: 'Spot'}],
48823         //     5: [{type: 'Cat', name: 'Tiger'}, {type: 'Dog', name: 'Rover'}]
48824         //   }
48825         function utilArrayGroupBy(a, key) {
48826             return a.reduce(function(acc, item) {
48827                 var group = (typeof key === 'function') ? key(item) : item[key];
48828                 (acc[group] = acc[group] || []).push(item);
48829                 return acc;
48830             }, {});
48831         }
48832
48833
48834         // Returns an Array with all the duplicates removed
48835         // where uniqueness determined by the given key
48836         // `key` can be passed as a property or as a key function
48837         //
48838         // var pets = [
48839         //     { type: 'Dog', name: 'Spot' },
48840         //     { type: 'Cat', name: 'Tiger' },
48841         //     { type: 'Dog', name: 'Rover' },
48842         //     { type: 'Cat', name: 'Leo' }
48843         // ];
48844         //
48845         // utilArrayUniqBy(pets, 'type')
48846         //   [
48847         //     { type: 'Dog', name: 'Spot' },
48848         //     { type: 'Cat', name: 'Tiger' }
48849         //   ]
48850         //
48851         // utilArrayUniqBy(pets, function(item) { return item.name.length; })
48852         //   [
48853         //     { type: 'Dog', name: 'Spot' },
48854         //     { type: 'Cat', name: 'Tiger' },
48855         //     { type: 'Cat', name: 'Leo' }
48856         //   }
48857         function utilArrayUniqBy(a, key) {
48858             var seen = new Set();
48859             return a.reduce(function(acc, item) {
48860                 var val = (typeof key === 'function') ? key(item) : item[key];
48861                 if (val && !seen.has(val)) {
48862                     seen.add(val);
48863                     acc.push(item);
48864                 }
48865                 return acc;
48866             }, []);
48867         }
48868
48869         var remove$1 = removeDiacritics;
48870
48871         var replacementList = [
48872           {
48873             base: ' ',
48874             chars: "\u00A0",
48875           }, {
48876             base: '0',
48877             chars: "\u07C0",
48878           }, {
48879             base: 'A',
48880             chars: "\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F",
48881           }, {
48882             base: 'AA',
48883             chars: "\uA732",
48884           }, {
48885             base: 'AE',
48886             chars: "\u00C6\u01FC\u01E2",
48887           }, {
48888             base: 'AO',
48889             chars: "\uA734",
48890           }, {
48891             base: 'AU',
48892             chars: "\uA736",
48893           }, {
48894             base: 'AV',
48895             chars: "\uA738\uA73A",
48896           }, {
48897             base: 'AY',
48898             chars: "\uA73C",
48899           }, {
48900             base: 'B',
48901             chars: "\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0181",
48902           }, {
48903             base: 'C',
48904             chars: "\u24b8\uff23\uA73E\u1E08\u0106\u0043\u0108\u010A\u010C\u00C7\u0187\u023B",
48905           }, {
48906             base: 'D',
48907             chars: "\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018A\u0189\u1D05\uA779",
48908           }, {
48909             base: 'Dh',
48910             chars: "\u00D0",
48911           }, {
48912             base: 'DZ',
48913             chars: "\u01F1\u01C4",
48914           }, {
48915             base: 'Dz',
48916             chars: "\u01F2\u01C5",
48917           }, {
48918             base: 'E',
48919             chars: "\u025B\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E\u1D07",
48920           }, {
48921             base: 'F',
48922             chars: "\uA77C\u24BB\uFF26\u1E1E\u0191\uA77B",
48923           }, {
48924             base: 'G',
48925             chars: "\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E\u0262",
48926           }, {
48927             base: 'H',
48928             chars: "\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D",
48929           }, {
48930             base: 'I',
48931             chars: "\u24BE\uFF29\xCC\xCD\xCE\u0128\u012A\u012C\u0130\xCF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197",
48932           }, {
48933             base: 'J',
48934             chars: "\u24BF\uFF2A\u0134\u0248\u0237",
48935           }, {
48936             base: 'K',
48937             chars: "\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2",
48938           }, {
48939             base: 'L',
48940             chars: "\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780",
48941           }, {
48942             base: 'LJ',
48943             chars: "\u01C7",
48944           }, {
48945             base: 'Lj',
48946             chars: "\u01C8",
48947           }, {
48948             base: 'M',
48949             chars: "\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C\u03FB",
48950           }, {
48951             base: 'N',
48952             chars: "\uA7A4\u0220\u24C3\uFF2E\u01F8\u0143\xD1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u019D\uA790\u1D0E",
48953           }, {
48954             base: 'NJ',
48955             chars: "\u01CA",
48956           }, {
48957             base: 'Nj',
48958             chars: "\u01CB",
48959           }, {
48960             base: 'O',
48961             chars: "\u24C4\uFF2F\xD2\xD3\xD4\u1ED2\u1ED0\u1ED6\u1ED4\xD5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\xD6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\xD8\u01FE\u0186\u019F\uA74A\uA74C",
48962           }, {
48963             base: 'OE',
48964             chars: "\u0152",
48965           }, {
48966             base: 'OI',
48967             chars: "\u01A2",
48968           }, {
48969             base: 'OO',
48970             chars: "\uA74E",
48971           }, {
48972             base: 'OU',
48973             chars: "\u0222",
48974           }, {
48975             base: 'P',
48976             chars: "\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754",
48977           }, {
48978             base: 'Q',
48979             chars: "\u24C6\uFF31\uA756\uA758\u024A",
48980           }, {
48981             base: 'R',
48982             chars: "\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782",
48983           }, {
48984             base: 'S',
48985             chars: "\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784",
48986           }, {
48987             base: 'T',
48988             chars: "\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786",
48989           }, {
48990             base: 'Th',
48991             chars: "\u00DE",
48992           }, {
48993             base: 'TZ',
48994             chars: "\uA728",
48995           }, {
48996             base: 'U',
48997             chars: "\u24CA\uFF35\xD9\xDA\xDB\u0168\u1E78\u016A\u1E7A\u016C\xDC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244",
48998           }, {
48999             base: 'V',
49000             chars: "\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245",
49001           }, {
49002             base: 'VY',
49003             chars: "\uA760",
49004           }, {
49005             base: 'W',
49006             chars: "\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72",
49007           }, {
49008             base: 'X',
49009             chars: "\u24CD\uFF38\u1E8A\u1E8C",
49010           }, {
49011             base: 'Y',
49012             chars: "\u24CE\uFF39\u1EF2\xDD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE",
49013           }, {
49014             base: 'Z',
49015             chars: "\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762",
49016           }, {
49017             base: 'a',
49018             chars: "\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u0251",
49019           }, {
49020             base: 'aa',
49021             chars: "\uA733",
49022           }, {
49023             base: 'ae',
49024             chars: "\u00E6\u01FD\u01E3",
49025           }, {
49026             base: 'ao',
49027             chars: "\uA735",
49028           }, {
49029             base: 'au',
49030             chars: "\uA737",
49031           }, {
49032             base: 'av',
49033             chars: "\uA739\uA73B",
49034           }, {
49035             base: 'ay',
49036             chars: "\uA73D",
49037           }, {
49038             base: 'b',
49039             chars: "\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253\u0182",
49040           }, {
49041             base: 'c',
49042             chars: "\uFF43\u24D2\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184",
49043           }, {
49044             base: 'd',
49045             chars: "\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u018B\u13E7\u0501\uA7AA",
49046           }, {
49047             base: 'dh',
49048             chars: "\u00F0",
49049           }, {
49050             base: 'dz',
49051             chars: "\u01F3\u01C6",
49052           }, {
49053             base: 'e',
49054             chars: "\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u01DD",
49055           }, {
49056             base: 'f',
49057             chars: "\u24D5\uFF46\u1E1F\u0192",
49058           }, {
49059             base: 'ff',
49060             chars: "\uFB00",
49061           }, {
49062             base: 'fi',
49063             chars: "\uFB01",
49064           }, {
49065             base: 'fl',
49066             chars: "\uFB02",
49067           }, {
49068             base: 'ffi',
49069             chars: "\uFB03",
49070           }, {
49071             base: 'ffl',
49072             chars: "\uFB04",
49073           }, {
49074             base: 'g',
49075             chars: "\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\uA77F\u1D79",
49076           }, {
49077             base: 'h',
49078             chars: "\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265",
49079           }, {
49080             base: 'hv',
49081             chars: "\u0195",
49082           }, {
49083             base: 'i',
49084             chars: "\u24D8\uFF49\xEC\xED\xEE\u0129\u012B\u012D\xEF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131",
49085           }, {
49086             base: 'j',
49087             chars: "\u24D9\uFF4A\u0135\u01F0\u0249",
49088           }, {
49089             base: 'k',
49090             chars: "\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3",
49091           }, {
49092             base: 'l',
49093             chars: "\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747\u026D",
49094           }, {
49095             base: 'lj',
49096             chars: "\u01C9",
49097           }, {
49098             base: 'm',
49099             chars: "\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F",
49100           }, {
49101             base: 'n',
49102             chars: "\u24DD\uFF4E\u01F9\u0144\xF1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u043B\u0509",
49103           }, {
49104             base: 'nj',
49105             chars: "\u01CC",
49106           }, {
49107             base: 'o',
49108             chars: "\u24DE\uFF4F\xF2\xF3\xF4\u1ED3\u1ED1\u1ED7\u1ED5\xF5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\xF6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\xF8\u01FF\uA74B\uA74D\u0275\u0254\u1D11",
49109           }, {
49110             base: 'oe',
49111             chars: "\u0153",
49112           }, {
49113             base: 'oi',
49114             chars: "\u01A3",
49115           }, {
49116             base: 'oo',
49117             chars: "\uA74F",
49118           }, {
49119             base: 'ou',
49120             chars: "\u0223",
49121           }, {
49122             base: 'p',
49123             chars: "\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755\u03C1",
49124           }, {
49125             base: 'q',
49126             chars: "\u24E0\uFF51\u024B\uA757\uA759",
49127           }, {
49128             base: 'r',
49129             chars: "\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783",
49130           }, {
49131             base: 's',
49132             chars: "\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u0282",
49133           }, {
49134             base: 'ss',
49135             chars: "\xDF",
49136           }, {
49137             base: 't',
49138             chars: "\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787",
49139           }, {
49140             base: 'th',
49141             chars: "\u00FE",
49142           }, {
49143             base: 'tz',
49144             chars: "\uA729",
49145           }, {
49146             base: 'u',
49147             chars: "\u24E4\uFF55\xF9\xFA\xFB\u0169\u1E79\u016B\u1E7B\u016D\xFC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289",
49148           }, {
49149             base: 'v',
49150             chars: "\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C",
49151           }, {
49152             base: 'vy',
49153             chars: "\uA761",
49154           }, {
49155             base: 'w',
49156             chars: "\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73",
49157           }, {
49158             base: 'x',
49159             chars: "\u24E7\uFF58\u1E8B\u1E8D",
49160           }, {
49161             base: 'y',
49162             chars: "\u24E8\uFF59\u1EF3\xFD\u0177\u1EF9\u0233\u1E8F\xFF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF",
49163           }, {
49164             base: 'z',
49165             chars: "\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763",
49166           }
49167         ];
49168
49169         var diacriticsMap = {};
49170         for (var i$1 = 0; i$1 < replacementList.length; i$1 += 1) {
49171           var chars = replacementList[i$1].chars;
49172           for (var j = 0; j < chars.length; j += 1) {
49173             diacriticsMap[chars[j]] = replacementList[i$1].base;
49174           }
49175         }
49176
49177         function removeDiacritics(str) {
49178           return str.replace(/[^\u0000-\u007e]/g, function(c) {
49179             return diacriticsMap[c] || c;
49180           });
49181         }
49182
49183         var replacementList_1 = replacementList;
49184         var diacriticsMap_1 = diacriticsMap;
49185
49186         var diacritics = {
49187                 remove: remove$1,
49188                 replacementList: replacementList_1,
49189                 diacriticsMap: diacriticsMap_1
49190         };
49191
49192         var isArabic_1 = createCommonjsModule(function (module, exports) {
49193         Object.defineProperty(exports, "__esModule", { value: true });
49194         var arabicBlocks = [
49195             [0x0600, 0x06FF],
49196             [0x0750, 0x077F],
49197             [0x08A0, 0x08FF],
49198             [0xFB50, 0xFDFF],
49199             [0xFE70, 0xFEFF],
49200             [0x10E60, 0x10E7F],
49201             [0x1EC70, 0x1ECBF],
49202             [0x1EE00, 0x1EEFF] // Mathematical Alphabetic symbols https://www.unicode.org/charts/PDF/U1EE00.pdf
49203         ];
49204         function isArabic(char) {
49205             if (char.length > 1) {
49206                 // allow the newer chars?
49207                 throw new Error('isArabic works on only one-character strings');
49208             }
49209             var code = char.charCodeAt(0);
49210             for (var i = 0; i < arabicBlocks.length; i++) {
49211                 var block = arabicBlocks[i];
49212                 if (code >= block[0] && code <= block[1]) {
49213                     return true;
49214                 }
49215             }
49216             return false;
49217         }
49218         exports.isArabic = isArabic;
49219         function isMath(char) {
49220             if (char.length > 2) {
49221                 // allow the newer chars?
49222                 throw new Error('isMath works on only one-character strings');
49223             }
49224             var code = char.charCodeAt(0);
49225             return ((code >= 0x660 && code <= 0x66C) || (code >= 0x6F0 && code <= 0x6F9));
49226         }
49227         exports.isMath = isMath;
49228         });
49229
49230         unwrapExports(isArabic_1);
49231         var isArabic_2 = isArabic_1.isArabic;
49232         var isArabic_3 = isArabic_1.isMath;
49233
49234         var unicodeArabic = createCommonjsModule(function (module, exports) {
49235         Object.defineProperty(exports, "__esModule", { value: true });
49236         var arabicReference = {
49237             "alef": {
49238                 "normal": [
49239                     "\u0627"
49240                 ],
49241                 "madda_above": {
49242                     "normal": [
49243                         "\u0627\u0653",
49244                         "\u0622"
49245                     ],
49246                     "isolated": "\uFE81",
49247                     "final": "\uFE82"
49248                 },
49249                 "hamza_above": {
49250                     "normal": [
49251                         "\u0627\u0654",
49252                         "\u0623"
49253                     ],
49254                     "isolated": "\uFE83",
49255                     "final": "\uFE84"
49256                 },
49257                 "hamza_below": {
49258                     "normal": [
49259                         "\u0627\u0655",
49260                         "\u0625"
49261                     ],
49262                     "isolated": "\uFE87",
49263                     "final": "\uFE88"
49264                 },
49265                 "wasla": {
49266                     "normal": "\u0671",
49267                     "isolated": "\uFB50",
49268                     "final": "\uFB51"
49269                 },
49270                 "wavy_hamza_above": [
49271                     "\u0672"
49272                 ],
49273                 "wavy_hamza_below": [
49274                     "\u0627\u065F",
49275                     "\u0673"
49276                 ],
49277                 "high_hamza": [
49278                     "\u0675",
49279                     "\u0627\u0674"
49280                 ],
49281                 "indic_two_above": [
49282                     "\u0773"
49283                 ],
49284                 "indic_three_above": [
49285                     "\u0774"
49286                 ],
49287                 "fathatan": {
49288                     "normal": [
49289                         "\u0627\u064B"
49290                     ],
49291                     "final": "\uFD3C",
49292                     "isolated": "\uFD3D"
49293                 },
49294                 "isolated": "\uFE8D",
49295                 "final": "\uFE8E"
49296             },
49297             "beh": {
49298                 "normal": [
49299                     "\u0628"
49300                 ],
49301                 "dotless": [
49302                     "\u066E"
49303                 ],
49304                 "three_dots_horizontally_below": [
49305                     "\u0750"
49306                 ],
49307                 "dot_below_three_dots_above": [
49308                     "\u0751"
49309                 ],
49310                 "three_dots_pointing_upwards_below": [
49311                     "\u0752"
49312                 ],
49313                 "three_dots_pointing_upwards_below_two_dots_above": [
49314                     "\u0753"
49315                 ],
49316                 "two_dots_below_dot_above": [
49317                     "\u0754"
49318                 ],
49319                 "inverted_small_v_below": [
49320                     "\u0755"
49321                 ],
49322                 "small_v": [
49323                     "\u0756"
49324                 ],
49325                 "small_v_below": [
49326                     "\u08A0"
49327                 ],
49328                 "hamza_above": [
49329                     "\u08A1"
49330                 ],
49331                 "small_meem_above": [
49332                     "\u08B6"
49333                 ],
49334                 "isolated": "\uFE8F",
49335                 "final": "\uFE90",
49336                 "initial": "\uFE91",
49337                 "medial": "\uFE92"
49338             },
49339             "teh marbuta": {
49340                 "normal": [
49341                     "\u0629"
49342                 ],
49343                 "isolated": "\uFE93",
49344                 "final": "\uFE94"
49345             },
49346             "teh": {
49347                 "normal": [
49348                     "\u062A"
49349                 ],
49350                 "ring": [
49351                     "\u067C"
49352                 ],
49353                 "three_dots_above_downwards": [
49354                     "\u067D"
49355                 ],
49356                 "small_teh_above": [
49357                     "\u08B8"
49358                 ],
49359                 "isolated": "\uFE95",
49360                 "final": "\uFE96",
49361                 "initial": "\uFE97",
49362                 "medial": "\uFE98"
49363             },
49364             "theh": {
49365                 "normal": [
49366                     "\u062B"
49367                 ],
49368                 "isolated": "\uFE99",
49369                 "final": "\uFE9A",
49370                 "initial": "\uFE9B",
49371                 "medial": "\uFE9C"
49372             },
49373             "jeem": {
49374                 "normal": [
49375                     "\u062C"
49376                 ],
49377                 "two_dots_above": [
49378                     "\u08A2"
49379                 ],
49380                 "isolated": "\uFE9D",
49381                 "final": "\uFE9E",
49382                 "initial": "\uFE9F",
49383                 "medial": "\uFEA0"
49384             },
49385             "hah": {
49386                 "normal": [
49387                     "\u062D"
49388                 ],
49389                 "hamza_above": [
49390                     "\u0681"
49391                 ],
49392                 "two_dots_vertical_above": [
49393                     "\u0682"
49394                 ],
49395                 "three_dots_above": [
49396                     "\u0685"
49397                 ],
49398                 "two_dots_above": [
49399                     "\u0757"
49400                 ],
49401                 "three_dots_pointing_upwards_below": [
49402                     "\u0758"
49403                 ],
49404                 "small_tah_below": [
49405                     "\u076E"
49406                 ],
49407                 "small_tah_two_dots": [
49408                     "\u076F"
49409                 ],
49410                 "small_tah_above": [
49411                     "\u0772"
49412                 ],
49413                 "indic_four_below": [
49414                     "\u077C"
49415                 ],
49416                 "isolated": "\uFEA1",
49417                 "final": "\uFEA2",
49418                 "initial": "\uFEA3",
49419                 "medial": "\uFEA4"
49420             },
49421             "khah": {
49422                 "normal": [
49423                     "\u062E"
49424                 ],
49425                 "isolated": "\uFEA5",
49426                 "final": "\uFEA6",
49427                 "initial": "\uFEA7",
49428                 "medial": "\uFEA8"
49429             },
49430             "dal": {
49431                 "normal": [
49432                     "\u062F"
49433                 ],
49434                 "ring": [
49435                     "\u0689"
49436                 ],
49437                 "dot_below": [
49438                     "\u068A"
49439                 ],
49440                 "dot_below_small_tah": [
49441                     "\u068B"
49442                 ],
49443                 "three_dots_above_downwards": [
49444                     "\u068F"
49445                 ],
49446                 "four_dots_above": [
49447                     "\u0690"
49448                 ],
49449                 "inverted_v": [
49450                     "\u06EE"
49451                 ],
49452                 "two_dots_vertically_below_small_tah": [
49453                     "\u0759"
49454                 ],
49455                 "inverted_small_v_below": [
49456                     "\u075A"
49457                 ],
49458                 "three_dots_below": [
49459                     "\u08AE"
49460                 ],
49461                 "isolated": "\uFEA9",
49462                 "final": "\uFEAA"
49463             },
49464             "thal": {
49465                 "normal": [
49466                     "\u0630"
49467                 ],
49468                 "isolated": "\uFEAB",
49469                 "final": "\uFEAC"
49470             },
49471             "reh": {
49472                 "normal": [
49473                     "\u0631"
49474                 ],
49475                 "small_v": [
49476                     "\u0692"
49477                 ],
49478                 "ring": [
49479                     "\u0693"
49480                 ],
49481                 "dot_below": [
49482                     "\u0694"
49483                 ],
49484                 "small_v_below": [
49485                     "\u0695"
49486                 ],
49487                 "dot_below_dot_above": [
49488                     "\u0696"
49489                 ],
49490                 "two_dots_above": [
49491                     "\u0697"
49492                 ],
49493                 "four_dots_above": [
49494                     "\u0699"
49495                 ],
49496                 "inverted_v": [
49497                     "\u06EF"
49498                 ],
49499                 "stroke": [
49500                     "\u075B"
49501                 ],
49502                 "two_dots_vertically_above": [
49503                     "\u076B"
49504                 ],
49505                 "hamza_above": [
49506                     "\u076C"
49507                 ],
49508                 "small_tah_two_dots": [
49509                     "\u0771"
49510                 ],
49511                 "loop": [
49512                     "\u08AA"
49513                 ],
49514                 "small_noon_above": [
49515                     "\u08B9"
49516                 ],
49517                 "isolated": "\uFEAD",
49518                 "final": "\uFEAE"
49519             },
49520             "zain": {
49521                 "normal": [
49522                     "\u0632"
49523                 ],
49524                 "inverted_v_above": [
49525                     "\u08B2"
49526                 ],
49527                 "isolated": "\uFEAF",
49528                 "final": "\uFEB0"
49529             },
49530             "seen": {
49531                 "normal": [
49532                     "\u0633"
49533                 ],
49534                 "dot_below_dot_above": [
49535                     "\u069A"
49536                 ],
49537                 "three_dots_below": [
49538                     "\u069B"
49539                 ],
49540                 "three_dots_below_three_dots_above": [
49541                     "\u069C"
49542                 ],
49543                 "four_dots_above": [
49544                     "\u075C"
49545                 ],
49546                 "two_dots_vertically_above": [
49547                     "\u076D"
49548                 ],
49549                 "small_tah_two_dots": [
49550                     "\u0770"
49551                 ],
49552                 "indic_four_above": [
49553                     "\u077D"
49554                 ],
49555                 "inverted_v": [
49556                     "\u077E"
49557                 ],
49558                 "isolated": "\uFEB1",
49559                 "final": "\uFEB2",
49560                 "initial": "\uFEB3",
49561                 "medial": "\uFEB4"
49562             },
49563             "sheen": {
49564                 "normal": [
49565                     "\u0634"
49566                 ],
49567                 "dot_below": [
49568                     "\u06FA"
49569                 ],
49570                 "isolated": "\uFEB5",
49571                 "final": "\uFEB6",
49572                 "initial": "\uFEB7",
49573                 "medial": "\uFEB8"
49574             },
49575             "sad": {
49576                 "normal": [
49577                     "\u0635"
49578                 ],
49579                 "two_dots_below": [
49580                     "\u069D"
49581                 ],
49582                 "three_dots_above": [
49583                     "\u069E"
49584                 ],
49585                 "three_dots_below": [
49586                     "\u08AF"
49587                 ],
49588                 "isolated": "\uFEB9",
49589                 "final": "\uFEBA",
49590                 "initial": "\uFEBB",
49591                 "medial": "\uFEBC"
49592             },
49593             "dad": {
49594                 "normal": [
49595                     "\u0636"
49596                 ],
49597                 "dot_below": [
49598                     "\u06FB"
49599                 ],
49600                 "isolated": "\uFEBD",
49601                 "final": "\uFEBE",
49602                 "initial": "\uFEBF",
49603                 "medial": "\uFEC0"
49604             },
49605             "tah": {
49606                 "normal": [
49607                     "\u0637"
49608                 ],
49609                 "three_dots_above": [
49610                     "\u069F"
49611                 ],
49612                 "two_dots_above": [
49613                     "\u08A3"
49614                 ],
49615                 "isolated": "\uFEC1",
49616                 "final": "\uFEC2",
49617                 "initial": "\uFEC3",
49618                 "medial": "\uFEC4"
49619             },
49620             "zah": {
49621                 "normal": [
49622                     "\u0638"
49623                 ],
49624                 "isolated": "\uFEC5",
49625                 "final": "\uFEC6",
49626                 "initial": "\uFEC7",
49627                 "medial": "\uFEC8"
49628             },
49629             "ain": {
49630                 "normal": [
49631                     "\u0639"
49632                 ],
49633                 "three_dots_above": [
49634                     "\u06A0"
49635                 ],
49636                 "two_dots_above": [
49637                     "\u075D"
49638                 ],
49639                 "three_dots_pointing_downwards_above": [
49640                     "\u075E"
49641                 ],
49642                 "two_dots_vertically_above": [
49643                     "\u075F"
49644                 ],
49645                 "three_dots_below": [
49646                     "\u08B3"
49647                 ],
49648                 "isolated": "\uFEC9",
49649                 "final": "\uFECA",
49650                 "initial": "\uFECB",
49651                 "medial": "\uFECC"
49652             },
49653             "ghain": {
49654                 "normal": [
49655                     "\u063A"
49656                 ],
49657                 "dot_below": [
49658                     "\u06FC"
49659                 ],
49660                 "isolated": "\uFECD",
49661                 "final": "\uFECE",
49662                 "initial": "\uFECF",
49663                 "medial": "\uFED0"
49664             },
49665             "feh": {
49666                 "normal": [
49667                     "\u0641"
49668                 ],
49669                 "dotless": [
49670                     "\u06A1"
49671                 ],
49672                 "dot_moved_below": [
49673                     "\u06A2"
49674                 ],
49675                 "dot_below": [
49676                     "\u06A3"
49677                 ],
49678                 "three_dots_below": [
49679                     "\u06A5"
49680                 ],
49681                 "two_dots_below": [
49682                     "\u0760"
49683                 ],
49684                 "three_dots_pointing_upwards_below": [
49685                     "\u0761"
49686                 ],
49687                 "dot_below_three_dots_above": [
49688                     "\u08A4"
49689                 ],
49690                 "isolated": "\uFED1",
49691                 "final": "\uFED2",
49692                 "initial": "\uFED3",
49693                 "medial": "\uFED4"
49694             },
49695             "qaf": {
49696                 "normal": [
49697                     "\u0642"
49698                 ],
49699                 "dotless": [
49700                     "\u066F"
49701                 ],
49702                 "dot_above": [
49703                     "\u06A7"
49704                 ],
49705                 "three_dots_above": [
49706                     "\u06A8"
49707                 ],
49708                 "dot_below": [
49709                     "\u08A5"
49710                 ],
49711                 "isolated": "\uFED5",
49712                 "final": "\uFED6",
49713                 "initial": "\uFED7",
49714                 "medial": "\uFED8"
49715             },
49716             "kaf": {
49717                 "normal": [
49718                     "\u0643"
49719                 ],
49720                 "swash": [
49721                     "\u06AA"
49722                 ],
49723                 "ring": [
49724                     "\u06AB"
49725                 ],
49726                 "dot_above": [
49727                     "\u06AC"
49728                 ],
49729                 "three_dots_below": [
49730                     "\u06AE"
49731                 ],
49732                 "two_dots_above": [
49733                     "\u077F"
49734                 ],
49735                 "dot_below": [
49736                     "\u08B4"
49737                 ],
49738                 "isolated": "\uFED9",
49739                 "final": "\uFEDA",
49740                 "initial": "\uFEDB",
49741                 "medial": "\uFEDC"
49742             },
49743             "lam": {
49744                 "normal": [
49745                     "\u0644"
49746                 ],
49747                 "small_v": [
49748                     "\u06B5"
49749                 ],
49750                 "dot_above": [
49751                     "\u06B6"
49752                 ],
49753                 "three_dots_above": [
49754                     "\u06B7"
49755                 ],
49756                 "three_dots_below": [
49757                     "\u06B8"
49758                 ],
49759                 "bar": [
49760                     "\u076A"
49761                 ],
49762                 "double_bar": [
49763                     "\u08A6"
49764                 ],
49765                 "isolated": "\uFEDD",
49766                 "final": "\uFEDE",
49767                 "initial": "\uFEDF",
49768                 "medial": "\uFEE0"
49769             },
49770             "meem": {
49771                 "normal": [
49772                     "\u0645"
49773                 ],
49774                 "dot_above": [
49775                     "\u0765"
49776                 ],
49777                 "dot_below": [
49778                     "\u0766"
49779                 ],
49780                 "three_dots_above": [
49781                     "\u08A7"
49782                 ],
49783                 "isolated": "\uFEE1",
49784                 "final": "\uFEE2",
49785                 "initial": "\uFEE3",
49786                 "medial": "\uFEE4"
49787             },
49788             "noon": {
49789                 "normal": [
49790                     "\u0646"
49791                 ],
49792                 "dot_below": [
49793                     "\u06B9"
49794                 ],
49795                 "ring": [
49796                     "\u06BC"
49797                 ],
49798                 "three_dots_above": [
49799                     "\u06BD"
49800                 ],
49801                 "two_dots_below": [
49802                     "\u0767"
49803                 ],
49804                 "small_tah": [
49805                     "\u0768"
49806                 ],
49807                 "small_v": [
49808                     "\u0769"
49809                 ],
49810                 "isolated": "\uFEE5",
49811                 "final": "\uFEE6",
49812                 "initial": "\uFEE7",
49813                 "medial": "\uFEE8"
49814             },
49815             "heh": {
49816                 "normal": [
49817                     "\u0647"
49818                 ],
49819                 "isolated": "\uFEE9",
49820                 "final": "\uFEEA",
49821                 "initial": "\uFEEB",
49822                 "medial": "\uFEEC"
49823             },
49824             "waw": {
49825                 "normal": [
49826                     "\u0648"
49827                 ],
49828                 "hamza_above": {
49829                     "normal": [
49830                         "\u0624",
49831                         "\u0648\u0654"
49832                     ],
49833                     "isolated": "\uFE85",
49834                     "final": "\uFE86"
49835                 },
49836                 "high_hamza": [
49837                     "\u0676",
49838                     "\u0648\u0674"
49839                 ],
49840                 "ring": [
49841                     "\u06C4"
49842                 ],
49843                 "two_dots_above": [
49844                     "\u06CA"
49845                 ],
49846                 "dot_above": [
49847                     "\u06CF"
49848                 ],
49849                 "indic_two_above": [
49850                     "\u0778"
49851                 ],
49852                 "indic_three_above": [
49853                     "\u0779"
49854                 ],
49855                 "dot_within": [
49856                     "\u08AB"
49857                 ],
49858                 "isolated": "\uFEED",
49859                 "final": "\uFEEE"
49860             },
49861             "alef_maksura": {
49862                 "normal": [
49863                     "\u0649"
49864                 ],
49865                 "hamza_above": [
49866                     "\u0626",
49867                     "\u064A\u0654"
49868                 ],
49869                 "initial": "\uFBE8",
49870                 "medial": "\uFBE9",
49871                 "isolated": "\uFEEF",
49872                 "final": "\uFEF0"
49873             },
49874             "yeh": {
49875                 "normal": [
49876                     "\u064A"
49877                 ],
49878                 "hamza_above": {
49879                     "normal": [
49880                         "\u0626",
49881                         "\u0649\u0654"
49882                     ],
49883                     "isolated": "\uFE89",
49884                     "final": "\uFE8A",
49885                     "initial": "\uFE8B",
49886                     "medial": "\uFE8C"
49887                 },
49888                 "two_dots_below_hamza_above": [
49889                     "\u08A8"
49890                 ],
49891                 "high_hamza": [
49892                     "\u0678",
49893                     "\u064A\u0674"
49894                 ],
49895                 "tail": [
49896                     "\u06CD"
49897                 ],
49898                 "small_v": [
49899                     "\u06CE"
49900                 ],
49901                 "three_dots_below": [
49902                     "\u06D1"
49903                 ],
49904                 "two_dots_below_dot_above": [
49905                     "\u08A9"
49906                 ],
49907                 "two_dots_below_small_noon_above": [
49908                     "\u08BA"
49909                 ],
49910                 "isolated": "\uFEF1",
49911                 "final": "\uFEF2",
49912                 "initial": "\uFEF3",
49913                 "medial": "\uFEF4"
49914             },
49915             "tteh": {
49916                 "normal": [
49917                     "\u0679"
49918                 ],
49919                 "isolated": "\uFB66",
49920                 "final": "\uFB67",
49921                 "initial": "\uFB68",
49922                 "medial": "\uFB69"
49923             },
49924             "tteheh": {
49925                 "normal": [
49926                     "\u067A"
49927                 ],
49928                 "isolated": "\uFB5E",
49929                 "final": "\uFB5F",
49930                 "initial": "\uFB60",
49931                 "medial": "\uFB61"
49932             },
49933             "beeh": {
49934                 "normal": [
49935                     "\u067B"
49936                 ],
49937                 "isolated": "\uFB52",
49938                 "final": "\uFB53",
49939                 "initial": "\uFB54",
49940                 "medial": "\uFB55"
49941             },
49942             "peh": {
49943                 "normal": [
49944                     "\u067E"
49945                 ],
49946                 "small_meem_above": [
49947                     "\u08B7"
49948                 ],
49949                 "isolated": "\uFB56",
49950                 "final": "\uFB57",
49951                 "initial": "\uFB58",
49952                 "medial": "\uFB59"
49953             },
49954             "teheh": {
49955                 "normal": [
49956                     "\u067F"
49957                 ],
49958                 "isolated": "\uFB62",
49959                 "final": "\uFB63",
49960                 "initial": "\uFB64",
49961                 "medial": "\uFB65"
49962             },
49963             "beheh": {
49964                 "normal": [
49965                     "\u0680"
49966                 ],
49967                 "isolated": "\uFB5A",
49968                 "final": "\uFB5B",
49969                 "initial": "\uFB5C",
49970                 "medial": "\uFB5D"
49971             },
49972             "nyeh": {
49973                 "normal": [
49974                     "\u0683"
49975                 ],
49976                 "isolated": "\uFB76",
49977                 "final": "\uFB77",
49978                 "initial": "\uFB78",
49979                 "medial": "\uFB79"
49980             },
49981             "dyeh": {
49982                 "normal": [
49983                     "\u0684"
49984                 ],
49985                 "isolated": "\uFB72",
49986                 "final": "\uFB73",
49987                 "initial": "\uFB74",
49988                 "medial": "\uFB75"
49989             },
49990             "tcheh": {
49991                 "normal": [
49992                     "\u0686"
49993                 ],
49994                 "dot_above": [
49995                     "\u06BF"
49996                 ],
49997                 "isolated": "\uFB7A",
49998                 "final": "\uFB7B",
49999                 "initial": "\uFB7C",
50000                 "medial": "\uFB7D"
50001             },
50002             "tcheheh": {
50003                 "normal": [
50004                     "\u0687"
50005                 ],
50006                 "isolated": "\uFB7E",
50007                 "final": "\uFB7F",
50008                 "initial": "\uFB80",
50009                 "medial": "\uFB81"
50010             },
50011             "ddal": {
50012                 "normal": [
50013                     "\u0688"
50014                 ],
50015                 "isolated": "\uFB88",
50016                 "final": "\uFB89"
50017             },
50018             "dahal": {
50019                 "normal": [
50020                     "\u068C"
50021                 ],
50022                 "isolated": "\uFB84",
50023                 "final": "\uFB85"
50024             },
50025             "ddahal": {
50026                 "normal": [
50027                     "\u068D"
50028                 ],
50029                 "isolated": "\uFB82",
50030                 "final": "\uFB83"
50031             },
50032             "dul": {
50033                 "normal": [
50034                     "\u068F",
50035                     "\u068E"
50036                 ],
50037                 "isolated": "\uFB86",
50038                 "final": "\uFB87"
50039             },
50040             "rreh": {
50041                 "normal": [
50042                     "\u0691"
50043                 ],
50044                 "isolated": "\uFB8C",
50045                 "final": "\uFB8D"
50046             },
50047             "jeh": {
50048                 "normal": [
50049                     "\u0698"
50050                 ],
50051                 "isolated": "\uFB8A",
50052                 "final": "\uFB8B"
50053             },
50054             "veh": {
50055                 "normal": [
50056                     "\u06A4"
50057                 ],
50058                 "isolated": "\uFB6A",
50059                 "final": "\uFB6B",
50060                 "initial": "\uFB6C",
50061                 "medial": "\uFB6D"
50062             },
50063             "peheh": {
50064                 "normal": [
50065                     "\u06A6"
50066                 ],
50067                 "isolated": "\uFB6E",
50068                 "final": "\uFB6F",
50069                 "initial": "\uFB70",
50070                 "medial": "\uFB71"
50071             },
50072             "keheh": {
50073                 "normal": [
50074                     "\u06A9"
50075                 ],
50076                 "dot_above": [
50077                     "\u0762"
50078                 ],
50079                 "three_dots_above": [
50080                     "\u0763"
50081                 ],
50082                 "three_dots_pointing_upwards_below": [
50083                     "\u0764"
50084                 ],
50085                 "isolated": "\uFB8E",
50086                 "final": "\uFB8F",
50087                 "initial": "\uFB90",
50088                 "medial": "\uFB91"
50089             },
50090             "ng": {
50091                 "normal": [
50092                     "\u06AD"
50093                 ],
50094                 "isolated": "\uFBD3",
50095                 "final": "\uFBD4",
50096                 "initial": "\uFBD5",
50097                 "medial": "\uFBD6"
50098             },
50099             "gaf": {
50100                 "normal": [
50101                     "\u06AF"
50102                 ],
50103                 "ring": [
50104                     "\u06B0"
50105                 ],
50106                 "two_dots_below": [
50107                     "\u06B2"
50108                 ],
50109                 "three_dots_above": [
50110                     "\u06B4"
50111                 ],
50112                 "inverted_stroke": [
50113                     "\u08B0"
50114                 ],
50115                 "isolated": "\uFB92",
50116                 "final": "\uFB93",
50117                 "initial": "\uFB94",
50118                 "medial": "\uFB95"
50119             },
50120             "ngoeh": {
50121                 "normal": [
50122                     "\u06B1"
50123                 ],
50124                 "isolated": "\uFB9A",
50125                 "final": "\uFB9B",
50126                 "initial": "\uFB9C",
50127                 "medial": "\uFB9D"
50128             },
50129             "gueh": {
50130                 "normal": [
50131                     "\u06B3"
50132                 ],
50133                 "isolated": "\uFB96",
50134                 "final": "\uFB97",
50135                 "initial": "\uFB98",
50136                 "medial": "\uFB99"
50137             },
50138             "noon ghunna": {
50139                 "normal": [
50140                     "\u06BA"
50141                 ],
50142                 "isolated": "\uFB9E",
50143                 "final": "\uFB9F"
50144             },
50145             "rnoon": {
50146                 "normal": [
50147                     "\u06BB"
50148                 ],
50149                 "isolated": "\uFBA0",
50150                 "final": "\uFBA1",
50151                 "initial": "\uFBA2",
50152                 "medial": "\uFBA3"
50153             },
50154             "heh doachashmee": {
50155                 "normal": [
50156                     "\u06BE"
50157                 ],
50158                 "isolated": "\uFBAA",
50159                 "final": "\uFBAB",
50160                 "initial": "\uFBAC",
50161                 "medial": "\uFBAD"
50162             },
50163             "heh goal": {
50164                 "normal": [
50165                     "\u06C1"
50166                 ],
50167                 "hamza_above": [
50168                     "\u06C1\u0654",
50169                     "\u06C2"
50170                 ],
50171                 "isolated": "\uFBA6",
50172                 "final": "\uFBA7",
50173                 "initial": "\uFBA8",
50174                 "medial": "\uFBA9"
50175             },
50176             "teh marbuta goal": {
50177                 "normal": [
50178                     "\u06C3"
50179                 ]
50180             },
50181             "kirghiz oe": {
50182                 "normal": [
50183                     "\u06C5"
50184                 ],
50185                 "isolated": "\uFBE0",
50186                 "final": "\uFBE1"
50187             },
50188             "oe": {
50189                 "normal": [
50190                     "\u06C6"
50191                 ],
50192                 "isolated": "\uFBD9",
50193                 "final": "\uFBDA"
50194             },
50195             "u": {
50196                 "normal": [
50197                     "\u06C7"
50198                 ],
50199                 "hamza_above": {
50200                     "normal": [
50201                         "\u0677",
50202                         "\u06C7\u0674"
50203                     ],
50204                     "isolated": "\uFBDD"
50205                 },
50206                 "isolated": "\uFBD7",
50207                 "final": "\uFBD8"
50208             },
50209             "yu": {
50210                 "normal": [
50211                     "\u06C8"
50212                 ],
50213                 "isolated": "\uFBDB",
50214                 "final": "\uFBDC"
50215             },
50216             "kirghiz yu": {
50217                 "normal": [
50218                     "\u06C9"
50219                 ],
50220                 "isolated": "\uFBE2",
50221                 "final": "\uFBE3"
50222             },
50223             "ve": {
50224                 "normal": [
50225                     "\u06CB"
50226                 ],
50227                 "isolated": "\uFBDE",
50228                 "final": "\uFBDF"
50229             },
50230             "farsi yeh": {
50231                 "normal": [
50232                     "\u06CC"
50233                 ],
50234                 "indic_two_above": [
50235                     "\u0775"
50236                 ],
50237                 "indic_three_above": [
50238                     "\u0776"
50239                 ],
50240                 "indic_four_above": [
50241                     "\u0777"
50242                 ],
50243                 "isolated": "\uFBFC",
50244                 "final": "\uFBFD",
50245                 "initial": "\uFBFE",
50246                 "medial": "\uFBFF"
50247             },
50248             "e": {
50249                 "normal": [
50250                     "\u06D0"
50251                 ],
50252                 "isolated": "\uFBE4",
50253                 "final": "\uFBE5",
50254                 "initial": "\uFBE6",
50255                 "medial": "\uFBE7"
50256             },
50257             "yeh barree": {
50258                 "normal": [
50259                     "\u06D2"
50260                 ],
50261                 "hamza_above": {
50262                     "normal": [
50263                         "\u06D2\u0654",
50264                         "\u06D3"
50265                     ],
50266                     "isolated": "\uFBB0",
50267                     "final": "\uFBB1"
50268                 },
50269                 "indic_two_above": [
50270                     "\u077A"
50271                 ],
50272                 "indic_three_above": [
50273                     "\u077B"
50274                 ],
50275                 "isolated": "\uFBAE",
50276                 "final": "\uFBAF"
50277             },
50278             "ae": {
50279                 "normal": [
50280                     "\u06D5"
50281                 ],
50282                 "isolated": "\u06D5",
50283                 "final": "\uFEEA",
50284                 "yeh_above": {
50285                     "normal": [
50286                         "\u06C0",
50287                         "\u06D5\u0654"
50288                     ],
50289                     "isolated": "\uFBA4",
50290                     "final": "\uFBA5"
50291                 }
50292             },
50293             "rohingya yeh": {
50294                 "normal": [
50295                     "\u08AC"
50296                 ]
50297             },
50298             "low alef": {
50299                 "normal": [
50300                     "\u08AD"
50301                 ]
50302             },
50303             "straight waw": {
50304                 "normal": [
50305                     "\u08B1"
50306                 ]
50307             },
50308             "african feh": {
50309                 "normal": [
50310                     "\u08BB"
50311                 ]
50312             },
50313             "african qaf": {
50314                 "normal": [
50315                     "\u08BC"
50316                 ]
50317             },
50318             "african noon": {
50319                 "normal": [
50320                     "\u08BD"
50321                 ]
50322             }
50323         };
50324         exports.default = arabicReference;
50325         });
50326
50327         unwrapExports(unicodeArabic);
50328
50329         var unicodeLigatures = createCommonjsModule(function (module, exports) {
50330         Object.defineProperty(exports, "__esModule", { value: true });
50331         var ligatureReference = {
50332             "\u0626\u0627": {
50333                 "isolated": "\uFBEA",
50334                 "final": "\uFBEB"
50335             },
50336             "\u0626\u06D5": {
50337                 "isolated": "\uFBEC",
50338                 "final": "\uFBED"
50339             },
50340             "\u0626\u0648": {
50341                 "isolated": "\uFBEE",
50342                 "final": "\uFBEF"
50343             },
50344             "\u0626\u06C7": {
50345                 "isolated": "\uFBF0",
50346                 "final": "\uFBF1"
50347             },
50348             "\u0626\u06C6": {
50349                 "isolated": "\uFBF2",
50350                 "final": "\uFBF3"
50351             },
50352             "\u0626\u06C8": {
50353                 "isolated": "\uFBF4",
50354                 "final": "\uFBF5"
50355             },
50356             "\u0626\u06D0": {
50357                 "isolated": "\uFBF6",
50358                 "final": "\uFBF7",
50359                 "initial": "\uFBF8"
50360             },
50361             "\u0626\u0649": {
50362                 "uighur_kirghiz": {
50363                     "isolated": "\uFBF9",
50364                     "final": "\uFBFA",
50365                     "initial": "\uFBFB"
50366                 },
50367                 "isolated": "\uFC03",
50368                 "final": "\uFC68"
50369             },
50370             "\u0626\u062C": {
50371                 "isolated": "\uFC00",
50372                 "initial": "\uFC97"
50373             },
50374             "\u0626\u062D": {
50375                 "isolated": "\uFC01",
50376                 "initial": "\uFC98"
50377             },
50378             "\u0626\u0645": {
50379                 "isolated": "\uFC02",
50380                 "final": "\uFC66",
50381                 "initial": "\uFC9A",
50382                 "medial": "\uFCDF"
50383             },
50384             "\u0626\u064A": {
50385                 "isolated": "\uFC04",
50386                 "final": "\uFC69"
50387             },
50388             "\u0628\u062C": {
50389                 "isolated": "\uFC05",
50390                 "initial": "\uFC9C"
50391             },
50392             "\u0628\u062D": {
50393                 "isolated": "\uFC06",
50394                 "initial": "\uFC9D"
50395             },
50396             "\u0628\u062E": {
50397                 "isolated": "\uFC07",
50398                 "initial": "\uFC9E"
50399             },
50400             "\u0628\u0645": {
50401                 "isolated": "\uFC08",
50402                 "final": "\uFC6C",
50403                 "initial": "\uFC9F",
50404                 "medial": "\uFCE1"
50405             },
50406             "\u0628\u0649": {
50407                 "isolated": "\uFC09",
50408                 "final": "\uFC6E"
50409             },
50410             "\u0628\u064A": {
50411                 "isolated": "\uFC0A",
50412                 "final": "\uFC6F"
50413             },
50414             "\u062A\u062C": {
50415                 "isolated": "\uFC0B",
50416                 "initial": "\uFCA1"
50417             },
50418             "\u062A\u062D": {
50419                 "isolated": "\uFC0C",
50420                 "initial": "\uFCA2"
50421             },
50422             "\u062A\u062E": {
50423                 "isolated": "\uFC0D",
50424                 "initial": "\uFCA3"
50425             },
50426             "\u062A\u0645": {
50427                 "isolated": "\uFC0E",
50428                 "final": "\uFC72",
50429                 "initial": "\uFCA4",
50430                 "medial": "\uFCE3"
50431             },
50432             "\u062A\u0649": {
50433                 "isolated": "\uFC0F",
50434                 "final": "\uFC74"
50435             },
50436             "\u062A\u064A": {
50437                 "isolated": "\uFC10",
50438                 "final": "\uFC75"
50439             },
50440             "\u062B\u062C": {
50441                 "isolated": "\uFC11"
50442             },
50443             "\u062B\u0645": {
50444                 "isolated": "\uFC12",
50445                 "final": "\uFC78",
50446                 "initial": "\uFCA6",
50447                 "medial": "\uFCE5"
50448             },
50449             "\u062B\u0649": {
50450                 "isolated": "\uFC13",
50451                 "final": "\uFC7A"
50452             },
50453             "\u062B\u0648": {
50454                 "isolated": "\uFC14"
50455             },
50456             "\u062C\u062D": {
50457                 "isolated": "\uFC15",
50458                 "initial": "\uFCA7"
50459             },
50460             "\u062C\u0645": {
50461                 "isolated": "\uFC16",
50462                 "initial": "\uFCA8"
50463             },
50464             "\u062D\u062C": {
50465                 "isolated": "\uFC17",
50466                 "initial": "\uFCA9"
50467             },
50468             "\u062D\u0645": {
50469                 "isolated": "\uFC18",
50470                 "initial": "\uFCAA"
50471             },
50472             "\u062E\u062C": {
50473                 "isolated": "\uFC19",
50474                 "initial": "\uFCAB"
50475             },
50476             "\u062E\u062D": {
50477                 "isolated": "\uFC1A"
50478             },
50479             "\u062E\u0645": {
50480                 "isolated": "\uFC1B",
50481                 "initial": "\uFCAC"
50482             },
50483             "\u0633\u062C": {
50484                 "isolated": "\uFC1C",
50485                 "initial": "\uFCAD",
50486                 "medial": "\uFD34"
50487             },
50488             "\u0633\u062D": {
50489                 "isolated": "\uFC1D",
50490                 "initial": "\uFCAE",
50491                 "medial": "\uFD35"
50492             },
50493             "\u0633\u062E": {
50494                 "isolated": "\uFC1E",
50495                 "initial": "\uFCAF",
50496                 "medial": "\uFD36"
50497             },
50498             "\u0633\u0645": {
50499                 "isolated": "\uFC1F",
50500                 "initial": "\uFCB0",
50501                 "medial": "\uFCE7"
50502             },
50503             "\u0635\u062D": {
50504                 "isolated": "\uFC20",
50505                 "initial": "\uFCB1"
50506             },
50507             "\u0635\u0645": {
50508                 "isolated": "\uFC21",
50509                 "initial": "\uFCB3"
50510             },
50511             "\u0636\u062C": {
50512                 "isolated": "\uFC22",
50513                 "initial": "\uFCB4"
50514             },
50515             "\u0636\u062D": {
50516                 "isolated": "\uFC23",
50517                 "initial": "\uFCB5"
50518             },
50519             "\u0636\u062E": {
50520                 "isolated": "\uFC24",
50521                 "initial": "\uFCB6"
50522             },
50523             "\u0636\u0645": {
50524                 "isolated": "\uFC25",
50525                 "initial": "\uFCB7"
50526             },
50527             "\u0637\u062D": {
50528                 "isolated": "\uFC26",
50529                 "initial": "\uFCB8"
50530             },
50531             "\u0637\u0645": {
50532                 "isolated": "\uFC27",
50533                 "initial": "\uFD33",
50534                 "medial": "\uFD3A"
50535             },
50536             "\u0638\u0645": {
50537                 "isolated": "\uFC28",
50538                 "initial": "\uFCB9",
50539                 "medial": "\uFD3B"
50540             },
50541             "\u0639\u062C": {
50542                 "isolated": "\uFC29",
50543                 "initial": "\uFCBA"
50544             },
50545             "\u0639\u0645": {
50546                 "isolated": "\uFC2A",
50547                 "initial": "\uFCBB"
50548             },
50549             "\u063A\u062C": {
50550                 "isolated": "\uFC2B",
50551                 "initial": "\uFCBC"
50552             },
50553             "\u063A\u0645": {
50554                 "isolated": "\uFC2C",
50555                 "initial": "\uFCBD"
50556             },
50557             "\u0641\u062C": {
50558                 "isolated": "\uFC2D",
50559                 "initial": "\uFCBE"
50560             },
50561             "\u0641\u062D": {
50562                 "isolated": "\uFC2E",
50563                 "initial": "\uFCBF"
50564             },
50565             "\u0641\u062E": {
50566                 "isolated": "\uFC2F",
50567                 "initial": "\uFCC0"
50568             },
50569             "\u0641\u0645": {
50570                 "isolated": "\uFC30",
50571                 "initial": "\uFCC1"
50572             },
50573             "\u0641\u0649": {
50574                 "isolated": "\uFC31",
50575                 "final": "\uFC7C"
50576             },
50577             "\u0641\u064A": {
50578                 "isolated": "\uFC32",
50579                 "final": "\uFC7D"
50580             },
50581             "\u0642\u062D": {
50582                 "isolated": "\uFC33",
50583                 "initial": "\uFCC2"
50584             },
50585             "\u0642\u0645": {
50586                 "isolated": "\uFC34",
50587                 "initial": "\uFCC3"
50588             },
50589             "\u0642\u0649": {
50590                 "isolated": "\uFC35",
50591                 "final": "\uFC7E"
50592             },
50593             "\u0642\u064A": {
50594                 "isolated": "\uFC36",
50595                 "final": "\uFC7F"
50596             },
50597             "\u0643\u0627": {
50598                 "isolated": "\uFC37",
50599                 "final": "\uFC80"
50600             },
50601             "\u0643\u062C": {
50602                 "isolated": "\uFC38",
50603                 "initial": "\uFCC4"
50604             },
50605             "\u0643\u062D": {
50606                 "isolated": "\uFC39",
50607                 "initial": "\uFCC5"
50608             },
50609             "\u0643\u062E": {
50610                 "isolated": "\uFC3A",
50611                 "initial": "\uFCC6"
50612             },
50613             "\u0643\u0644": {
50614                 "isolated": "\uFC3B",
50615                 "final": "\uFC81",
50616                 "initial": "\uFCC7",
50617                 "medial": "\uFCEB"
50618             },
50619             "\u0643\u0645": {
50620                 "isolated": "\uFC3C",
50621                 "final": "\uFC82",
50622                 "initial": "\uFCC8",
50623                 "medial": "\uFCEC"
50624             },
50625             "\u0643\u0649": {
50626                 "isolated": "\uFC3D",
50627                 "final": "\uFC83"
50628             },
50629             "\u0643\u064A": {
50630                 "isolated": "\uFC3E",
50631                 "final": "\uFC84"
50632             },
50633             "\u0644\u062C": {
50634                 "isolated": "\uFC3F",
50635                 "initial": "\uFCC9"
50636             },
50637             "\u0644\u062D": {
50638                 "isolated": "\uFC40",
50639                 "initial": "\uFCCA"
50640             },
50641             "\u0644\u062E": {
50642                 "isolated": "\uFC41",
50643                 "initial": "\uFCCB"
50644             },
50645             "\u0644\u0645": {
50646                 "isolated": "\uFC42",
50647                 "final": "\uFC85",
50648                 "initial": "\uFCCC",
50649                 "medial": "\uFCED"
50650             },
50651             "\u0644\u0649": {
50652                 "isolated": "\uFC43",
50653                 "final": "\uFC86"
50654             },
50655             "\u0644\u064A": {
50656                 "isolated": "\uFC44",
50657                 "final": "\uFC87"
50658             },
50659             "\u0645\u062C": {
50660                 "isolated": "\uFC45",
50661                 "initial": "\uFCCE"
50662             },
50663             "\u0645\u062D": {
50664                 "isolated": "\uFC46",
50665                 "initial": "\uFCCF"
50666             },
50667             "\u0645\u062E": {
50668                 "isolated": "\uFC47",
50669                 "initial": "\uFCD0"
50670             },
50671             "\u0645\u0645": {
50672                 "isolated": "\uFC48",
50673                 "final": "\uFC89",
50674                 "initial": "\uFCD1"
50675             },
50676             "\u0645\u0649": {
50677                 "isolated": "\uFC49"
50678             },
50679             "\u0645\u064A": {
50680                 "isolated": "\uFC4A"
50681             },
50682             "\u0646\u062C": {
50683                 "isolated": "\uFC4B",
50684                 "initial": "\uFCD2"
50685             },
50686             "\u0646\u062D": {
50687                 "isolated": "\uFC4C",
50688                 "initial": "\uFCD3"
50689             },
50690             "\u0646\u062E": {
50691                 "isolated": "\uFC4D",
50692                 "initial": "\uFCD4"
50693             },
50694             "\u0646\u0645": {
50695                 "isolated": "\uFC4E",
50696                 "final": "\uFC8C",
50697                 "initial": "\uFCD5",
50698                 "medial": "\uFCEE"
50699             },
50700             "\u0646\u0649": {
50701                 "isolated": "\uFC4F",
50702                 "final": "\uFC8E"
50703             },
50704             "\u0646\u064A": {
50705                 "isolated": "\uFC50",
50706                 "final": "\uFC8F"
50707             },
50708             "\u0647\u062C": {
50709                 "isolated": "\uFC51",
50710                 "initial": "\uFCD7"
50711             },
50712             "\u0647\u0645": {
50713                 "isolated": "\uFC52",
50714                 "initial": "\uFCD8"
50715             },
50716             "\u0647\u0649": {
50717                 "isolated": "\uFC53"
50718             },
50719             "\u0647\u064A": {
50720                 "isolated": "\uFC54"
50721             },
50722             "\u064A\u062C": {
50723                 "isolated": "\uFC55",
50724                 "initial": "\uFCDA"
50725             },
50726             "\u064A\u062D": {
50727                 "isolated": "\uFC56",
50728                 "initial": "\uFCDB"
50729             },
50730             "\u064A\u062E": {
50731                 "isolated": "\uFC57",
50732                 "initial": "\uFCDC"
50733             },
50734             "\u064A\u0645": {
50735                 "isolated": "\uFC58",
50736                 "final": "\uFC93",
50737                 "initial": "\uFCDD",
50738                 "medial": "\uFCF0"
50739             },
50740             "\u064A\u0649": {
50741                 "isolated": "\uFC59",
50742                 "final": "\uFC95"
50743             },
50744             "\u064A\u064A": {
50745                 "isolated": "\uFC5A",
50746                 "final": "\uFC96"
50747             },
50748             "\u0630\u0670": {
50749                 "isolated": "\uFC5B"
50750             },
50751             "\u0631\u0670": {
50752                 "isolated": "\uFC5C"
50753             },
50754             "\u0649\u0670": {
50755                 "isolated": "\uFC5D",
50756                 "final": "\uFC90"
50757             },
50758             "\u064C\u0651": {
50759                 "isolated": "\uFC5E"
50760             },
50761             "\u064D\u0651": {
50762                 "isolated": "\uFC5F"
50763             },
50764             "\u064E\u0651": {
50765                 "isolated": "\uFC60"
50766             },
50767             "\u064F\u0651": {
50768                 "isolated": "\uFC61"
50769             },
50770             "\u0650\u0651": {
50771                 "isolated": "\uFC62"
50772             },
50773             "\u0651\u0670": {
50774                 "isolated": "\uFC63"
50775             },
50776             "\u0626\u0631": {
50777                 "final": "\uFC64"
50778             },
50779             "\u0626\u0632": {
50780                 "final": "\uFC65"
50781             },
50782             "\u0626\u0646": {
50783                 "final": "\uFC67"
50784             },
50785             "\u0628\u0631": {
50786                 "final": "\uFC6A"
50787             },
50788             "\u0628\u0632": {
50789                 "final": "\uFC6B"
50790             },
50791             "\u0628\u0646": {
50792                 "final": "\uFC6D"
50793             },
50794             "\u062A\u0631": {
50795                 "final": "\uFC70"
50796             },
50797             "\u062A\u0632": {
50798                 "final": "\uFC71"
50799             },
50800             "\u062A\u0646": {
50801                 "final": "\uFC73"
50802             },
50803             "\u062B\u0631": {
50804                 "final": "\uFC76"
50805             },
50806             "\u062B\u0632": {
50807                 "final": "\uFC77"
50808             },
50809             "\u062B\u0646": {
50810                 "final": "\uFC79"
50811             },
50812             "\u062B\u064A": {
50813                 "final": "\uFC7B"
50814             },
50815             "\u0645\u0627": {
50816                 "final": "\uFC88"
50817             },
50818             "\u0646\u0631": {
50819                 "final": "\uFC8A"
50820             },
50821             "\u0646\u0632": {
50822                 "final": "\uFC8B"
50823             },
50824             "\u0646\u0646": {
50825                 "final": "\uFC8D"
50826             },
50827             "\u064A\u0631": {
50828                 "final": "\uFC91"
50829             },
50830             "\u064A\u0632": {
50831                 "final": "\uFC92"
50832             },
50833             "\u064A\u0646": {
50834                 "final": "\uFC94"
50835             },
50836             "\u0626\u062E": {
50837                 "initial": "\uFC99"
50838             },
50839             "\u0626\u0647": {
50840                 "initial": "\uFC9B",
50841                 "medial": "\uFCE0"
50842             },
50843             "\u0628\u0647": {
50844                 "initial": "\uFCA0",
50845                 "medial": "\uFCE2"
50846             },
50847             "\u062A\u0647": {
50848                 "initial": "\uFCA5",
50849                 "medial": "\uFCE4"
50850             },
50851             "\u0635\u062E": {
50852                 "initial": "\uFCB2"
50853             },
50854             "\u0644\u0647": {
50855                 "initial": "\uFCCD"
50856             },
50857             "\u0646\u0647": {
50858                 "initial": "\uFCD6",
50859                 "medial": "\uFCEF"
50860             },
50861             "\u0647\u0670": {
50862                 "initial": "\uFCD9"
50863             },
50864             "\u064A\u0647": {
50865                 "initial": "\uFCDE",
50866                 "medial": "\uFCF1"
50867             },
50868             "\u062B\u0647": {
50869                 "medial": "\uFCE6"
50870             },
50871             "\u0633\u0647": {
50872                 "medial": "\uFCE8",
50873                 "initial": "\uFD31"
50874             },
50875             "\u0634\u0645": {
50876                 "medial": "\uFCE9",
50877                 "isolated": "\uFD0C",
50878                 "final": "\uFD28",
50879                 "initial": "\uFD30"
50880             },
50881             "\u0634\u0647": {
50882                 "medial": "\uFCEA",
50883                 "initial": "\uFD32"
50884             },
50885             "\u0640\u064E\u0651": {
50886                 "medial": "\uFCF2"
50887             },
50888             "\u0640\u064F\u0651": {
50889                 "medial": "\uFCF3"
50890             },
50891             "\u0640\u0650\u0651": {
50892                 "medial": "\uFCF4"
50893             },
50894             "\u0637\u0649": {
50895                 "isolated": "\uFCF5",
50896                 "final": "\uFD11"
50897             },
50898             "\u0637\u064A": {
50899                 "isolated": "\uFCF6",
50900                 "final": "\uFD12"
50901             },
50902             "\u0639\u0649": {
50903                 "isolated": "\uFCF7",
50904                 "final": "\uFD13"
50905             },
50906             "\u0639\u064A": {
50907                 "isolated": "\uFCF8",
50908                 "final": "\uFD14"
50909             },
50910             "\u063A\u0649": {
50911                 "isolated": "\uFCF9",
50912                 "final": "\uFD15"
50913             },
50914             "\u063A\u064A": {
50915                 "isolated": "\uFCFA",
50916                 "final": "\uFD16"
50917             },
50918             "\u0633\u0649": {
50919                 "isolated": "\uFCFB"
50920             },
50921             "\u0633\u064A": {
50922                 "isolated": "\uFCFC",
50923                 "final": "\uFD18"
50924             },
50925             "\u0634\u0649": {
50926                 "isolated": "\uFCFD",
50927                 "final": "\uFD19"
50928             },
50929             "\u0634\u064A": {
50930                 "isolated": "\uFCFE",
50931                 "final": "\uFD1A"
50932             },
50933             "\u062D\u0649": {
50934                 "isolated": "\uFCFF",
50935                 "final": "\uFD1B"
50936             },
50937             "\u062D\u064A": {
50938                 "isolated": "\uFD00",
50939                 "final": "\uFD1C"
50940             },
50941             "\u062C\u0649": {
50942                 "isolated": "\uFD01",
50943                 "final": "\uFD1D"
50944             },
50945             "\u062C\u064A": {
50946                 "isolated": "\uFD02",
50947                 "final": "\uFD1E"
50948             },
50949             "\u062E\u0649": {
50950                 "isolated": "\uFD03",
50951                 "final": "\uFD1F"
50952             },
50953             "\u062E\u064A": {
50954                 "isolated": "\uFD04",
50955                 "final": "\uFD20"
50956             },
50957             "\u0635\u0649": {
50958                 "isolated": "\uFD05",
50959                 "final": "\uFD21"
50960             },
50961             "\u0635\u064A": {
50962                 "isolated": "\uFD06",
50963                 "final": "\uFD22"
50964             },
50965             "\u0636\u0649": {
50966                 "isolated": "\uFD07",
50967                 "final": "\uFD23"
50968             },
50969             "\u0636\u064A": {
50970                 "isolated": "\uFD08",
50971                 "final": "\uFD24"
50972             },
50973             "\u0634\u062C": {
50974                 "isolated": "\uFD09",
50975                 "final": "\uFD25",
50976                 "initial": "\uFD2D",
50977                 "medial": "\uFD37"
50978             },
50979             "\u0634\u062D": {
50980                 "isolated": "\uFD0A",
50981                 "final": "\uFD26",
50982                 "initial": "\uFD2E",
50983                 "medial": "\uFD38"
50984             },
50985             "\u0634\u062E": {
50986                 "isolated": "\uFD0B",
50987                 "final": "\uFD27",
50988                 "initial": "\uFD2F",
50989                 "medial": "\uFD39"
50990             },
50991             "\u0634\u0631": {
50992                 "isolated": "\uFD0D",
50993                 "final": "\uFD29"
50994             },
50995             "\u0633\u0631": {
50996                 "isolated": "\uFD0E",
50997                 "final": "\uFD2A"
50998             },
50999             "\u0635\u0631": {
51000                 "isolated": "\uFD0F",
51001                 "final": "\uFD2B"
51002             },
51003             "\u0636\u0631": {
51004                 "isolated": "\uFD10",
51005                 "final": "\uFD2C"
51006             },
51007             "\u0633\u0639": {
51008                 "final": "\uFD17"
51009             },
51010             "\u062A\u062C\u0645": {
51011                 "initial": "\uFD50"
51012             },
51013             "\u062A\u062D\u062C": {
51014                 "final": "\uFD51",
51015                 "initial": "\uFD52"
51016             },
51017             "\u062A\u062D\u0645": {
51018                 "initial": "\uFD53"
51019             },
51020             "\u062A\u062E\u0645": {
51021                 "initial": "\uFD54"
51022             },
51023             "\u062A\u0645\u062C": {
51024                 "initial": "\uFD55"
51025             },
51026             "\u062A\u0645\u062D": {
51027                 "initial": "\uFD56"
51028             },
51029             "\u062A\u0645\u062E": {
51030                 "initial": "\uFD57"
51031             },
51032             "\u062C\u0645\u062D": {
51033                 "final": "\uFD58",
51034                 "initial": "\uFD59"
51035             },
51036             "\u062D\u0645\u064A": {
51037                 "final": "\uFD5A"
51038             },
51039             "\u062D\u0645\u0649": {
51040                 "final": "\uFD5B"
51041             },
51042             "\u0633\u062D\u062C": {
51043                 "initial": "\uFD5C"
51044             },
51045             "\u0633\u062C\u062D": {
51046                 "initial": "\uFD5D"
51047             },
51048             "\u0633\u062C\u0649": {
51049                 "final": "\uFD5E"
51050             },
51051             "\u0633\u0645\u062D": {
51052                 "final": "\uFD5F",
51053                 "initial": "\uFD60"
51054             },
51055             "\u0633\u0645\u062C": {
51056                 "initial": "\uFD61"
51057             },
51058             "\u0633\u0645\u0645": {
51059                 "final": "\uFD62",
51060                 "initial": "\uFD63"
51061             },
51062             "\u0635\u062D\u062D": {
51063                 "final": "\uFD64",
51064                 "initial": "\uFD65"
51065             },
51066             "\u0635\u0645\u0645": {
51067                 "final": "\uFD66",
51068                 "initial": "\uFDC5"
51069             },
51070             "\u0634\u062D\u0645": {
51071                 "final": "\uFD67",
51072                 "initial": "\uFD68"
51073             },
51074             "\u0634\u062C\u064A": {
51075                 "final": "\uFD69"
51076             },
51077             "\u0634\u0645\u062E": {
51078                 "final": "\uFD6A",
51079                 "initial": "\uFD6B"
51080             },
51081             "\u0634\u0645\u0645": {
51082                 "final": "\uFD6C",
51083                 "initial": "\uFD6D"
51084             },
51085             "\u0636\u062D\u0649": {
51086                 "final": "\uFD6E"
51087             },
51088             "\u0636\u062E\u0645": {
51089                 "final": "\uFD6F",
51090                 "initial": "\uFD70"
51091             },
51092             "\u0636\u0645\u062D": {
51093                 "final": "\uFD71"
51094             },
51095             "\u0637\u0645\u062D": {
51096                 "initial": "\uFD72"
51097             },
51098             "\u0637\u0645\u0645": {
51099                 "initial": "\uFD73"
51100             },
51101             "\u0637\u0645\u064A": {
51102                 "final": "\uFD74"
51103             },
51104             "\u0639\u062C\u0645": {
51105                 "final": "\uFD75",
51106                 "initial": "\uFDC4"
51107             },
51108             "\u0639\u0645\u0645": {
51109                 "final": "\uFD76",
51110                 "initial": "\uFD77"
51111             },
51112             "\u0639\u0645\u0649": {
51113                 "final": "\uFD78"
51114             },
51115             "\u063A\u0645\u0645": {
51116                 "final": "\uFD79"
51117             },
51118             "\u063A\u0645\u064A": {
51119                 "final": "\uFD7A"
51120             },
51121             "\u063A\u0645\u0649": {
51122                 "final": "\uFD7B"
51123             },
51124             "\u0641\u062E\u0645": {
51125                 "final": "\uFD7C",
51126                 "initial": "\uFD7D"
51127             },
51128             "\u0642\u0645\u062D": {
51129                 "final": "\uFD7E",
51130                 "initial": "\uFDB4"
51131             },
51132             "\u0642\u0645\u0645": {
51133                 "final": "\uFD7F"
51134             },
51135             "\u0644\u062D\u0645": {
51136                 "final": "\uFD80",
51137                 "initial": "\uFDB5"
51138             },
51139             "\u0644\u062D\u064A": {
51140                 "final": "\uFD81"
51141             },
51142             "\u0644\u062D\u0649": {
51143                 "final": "\uFD82"
51144             },
51145             "\u0644\u062C\u062C": {
51146                 "initial": "\uFD83",
51147                 "final": "\uFD84"
51148             },
51149             "\u0644\u062E\u0645": {
51150                 "final": "\uFD85",
51151                 "initial": "\uFD86"
51152             },
51153             "\u0644\u0645\u062D": {
51154                 "final": "\uFD87",
51155                 "initial": "\uFD88"
51156             },
51157             "\u0645\u062D\u062C": {
51158                 "initial": "\uFD89"
51159             },
51160             "\u0645\u062D\u0645": {
51161                 "initial": "\uFD8A"
51162             },
51163             "\u0645\u062D\u064A": {
51164                 "final": "\uFD8B"
51165             },
51166             "\u0645\u062C\u062D": {
51167                 "initial": "\uFD8C"
51168             },
51169             "\u0645\u062C\u0645": {
51170                 "initial": "\uFD8D"
51171             },
51172             "\u0645\u062E\u062C": {
51173                 "initial": "\uFD8E"
51174             },
51175             "\u0645\u062E\u0645": {
51176                 "initial": "\uFD8F"
51177             },
51178             "\u0645\u062C\u062E": {
51179                 "initial": "\uFD92"
51180             },
51181             "\u0647\u0645\u062C": {
51182                 "initial": "\uFD93"
51183             },
51184             "\u0647\u0645\u0645": {
51185                 "initial": "\uFD94"
51186             },
51187             "\u0646\u062D\u0645": {
51188                 "initial": "\uFD95"
51189             },
51190             "\u0646\u062D\u0649": {
51191                 "final": "\uFD96"
51192             },
51193             "\u0646\u062C\u0645": {
51194                 "final": "\uFD97",
51195                 "initial": "\uFD98"
51196             },
51197             "\u0646\u062C\u0649": {
51198                 "final": "\uFD99"
51199             },
51200             "\u0646\u0645\u064A": {
51201                 "final": "\uFD9A"
51202             },
51203             "\u0646\u0645\u0649": {
51204                 "final": "\uFD9B"
51205             },
51206             "\u064A\u0645\u0645": {
51207                 "final": "\uFD9C",
51208                 "initial": "\uFD9D"
51209             },
51210             "\u0628\u062E\u064A": {
51211                 "final": "\uFD9E"
51212             },
51213             "\u062A\u062C\u064A": {
51214                 "final": "\uFD9F"
51215             },
51216             "\u062A\u062C\u0649": {
51217                 "final": "\uFDA0"
51218             },
51219             "\u062A\u062E\u064A": {
51220                 "final": "\uFDA1"
51221             },
51222             "\u062A\u062E\u0649": {
51223                 "final": "\uFDA2"
51224             },
51225             "\u062A\u0645\u064A": {
51226                 "final": "\uFDA3"
51227             },
51228             "\u062A\u0645\u0649": {
51229                 "final": "\uFDA4"
51230             },
51231             "\u062C\u0645\u064A": {
51232                 "final": "\uFDA5"
51233             },
51234             "\u062C\u062D\u0649": {
51235                 "final": "\uFDA6"
51236             },
51237             "\u062C\u0645\u0649": {
51238                 "final": "\uFDA7"
51239             },
51240             "\u0633\u062E\u0649": {
51241                 "final": "\uFDA8"
51242             },
51243             "\u0635\u062D\u064A": {
51244                 "final": "\uFDA9"
51245             },
51246             "\u0634\u062D\u064A": {
51247                 "final": "\uFDAA"
51248             },
51249             "\u0636\u062D\u064A": {
51250                 "final": "\uFDAB"
51251             },
51252             "\u0644\u062C\u064A": {
51253                 "final": "\uFDAC"
51254             },
51255             "\u0644\u0645\u064A": {
51256                 "final": "\uFDAD"
51257             },
51258             "\u064A\u062D\u064A": {
51259                 "final": "\uFDAE"
51260             },
51261             "\u064A\u062C\u064A": {
51262                 "final": "\uFDAF"
51263             },
51264             "\u064A\u0645\u064A": {
51265                 "final": "\uFDB0"
51266             },
51267             "\u0645\u0645\u064A": {
51268                 "final": "\uFDB1"
51269             },
51270             "\u0642\u0645\u064A": {
51271                 "final": "\uFDB2"
51272             },
51273             "\u0646\u062D\u064A": {
51274                 "final": "\uFDB3"
51275             },
51276             "\u0639\u0645\u064A": {
51277                 "final": "\uFDB6"
51278             },
51279             "\u0643\u0645\u064A": {
51280                 "final": "\uFDB7"
51281             },
51282             "\u0646\u062C\u062D": {
51283                 "initial": "\uFDB8",
51284                 "final": "\uFDBD"
51285             },
51286             "\u0645\u062E\u064A": {
51287                 "final": "\uFDB9"
51288             },
51289             "\u0644\u062C\u0645": {
51290                 "initial": "\uFDBA",
51291                 "final": "\uFDBC"
51292             },
51293             "\u0643\u0645\u0645": {
51294                 "final": "\uFDBB",
51295                 "initial": "\uFDC3"
51296             },
51297             "\u062C\u062D\u064A": {
51298                 "final": "\uFDBE"
51299             },
51300             "\u062D\u062C\u064A": {
51301                 "final": "\uFDBF"
51302             },
51303             "\u0645\u062C\u064A": {
51304                 "final": "\uFDC0"
51305             },
51306             "\u0641\u0645\u064A": {
51307                 "final": "\uFDC1"
51308             },
51309             "\u0628\u062D\u064A": {
51310                 "final": "\uFDC2"
51311             },
51312             "\u0633\u062E\u064A": {
51313                 "final": "\uFDC6"
51314             },
51315             "\u0646\u062C\u064A": {
51316                 "final": "\uFDC7"
51317             },
51318             "\u0644\u0622": {
51319                 "isolated": "\uFEF5",
51320                 "final": "\uFEF6"
51321             },
51322             "\u0644\u0623": {
51323                 "isolated": "\uFEF7",
51324                 "final": "\uFEF8"
51325             },
51326             "\u0644\u0625": {
51327                 "isolated": "\uFEF9",
51328                 "final": "\uFEFA"
51329             },
51330             "\u0644\u0627": {
51331                 "isolated": "\uFEFB",
51332                 "final": "\uFEFC"
51333             },
51334             "words": {
51335                 "\u0635\u0644\u06D2": "\uFDF0",
51336                 "\u0642\u0644\u06D2": "\uFDF1",
51337                 "\u0627\u0644\u0644\u0647": "\uFDF2",
51338                 "\u0627\u0643\u0628\u0631": "\uFDF3",
51339                 "\u0645\u062D\u0645\u062F": "\uFDF4",
51340                 "\u0635\u0644\u0639\u0645": "\uFDF5",
51341                 "\u0631\u0633\u0648\u0644": "\uFDF6",
51342                 "\u0639\u0644\u064A\u0647": "\uFDF7",
51343                 "\u0648\u0633\u0644\u0645": "\uFDF8",
51344                 "\u0635\u0644\u0649": "\uFDF9",
51345                 "\u0635\u0644\u0649\u0627\u0644\u0644\u0647\u0639\u0644\u064A\u0647\u0648\u0633\u0644\u0645": "\uFDFA",
51346                 "\u062C\u0644\u062C\u0644\u0627\u0644\u0647": "\uFDFB",
51347                 "\u0631\u06CC\u0627\u0644": "\uFDFC"
51348             }
51349         };
51350         exports.default = ligatureReference;
51351         });
51352
51353         unwrapExports(unicodeLigatures);
51354
51355         var reference = createCommonjsModule(function (module, exports) {
51356         Object.defineProperty(exports, "__esModule", { value: true });
51357
51358
51359         var letterList = Object.keys(unicodeArabic.default);
51360         exports.letterList = letterList;
51361         var ligatureList = Object.keys(unicodeLigatures.default);
51362         exports.ligatureList = ligatureList;
51363         var ligatureWordList = Object.keys(unicodeLigatures.default.words);
51364         exports.ligatureWordList = ligatureWordList;
51365         var lams = '\u0644\u06B5\u06B6\u06B7\u06B8';
51366         exports.lams = lams;
51367         var alefs = '\u0627\u0622\u0623\u0625\u0671\u0672\u0673\u0675\u0773\u0774';
51368         exports.alefs = alefs;
51369         // for (var l = 1; l < lams.length; l++) {
51370         //   console.log('-');
51371         //   for (var a = 0; a < alefs.length; a++) {
51372         //     console.log(a + ': ' + lams[l] + alefs[a]);
51373         //   }
51374         // }
51375         var tashkeel = '\u0605\u0640\u0670\u0674\u06DF\u06E7\u06E8';
51376         exports.tashkeel = tashkeel;
51377         function addToTashkeel(start, finish) {
51378             for (var i = start; i <= finish; i++) {
51379                 exports.tashkeel = tashkeel += String.fromCharCode(i);
51380             }
51381         }
51382         addToTashkeel(0x0610, 0x061A);
51383         addToTashkeel(0x064B, 0x065F);
51384         addToTashkeel(0x06D6, 0x06DC);
51385         addToTashkeel(0x06E0, 0x06E4);
51386         addToTashkeel(0x06EA, 0x06ED);
51387         addToTashkeel(0x08D3, 0x08E1);
51388         addToTashkeel(0x08E3, 0x08FF);
51389         addToTashkeel(0xFE70, 0xFE7F);
51390         var lineBreakers = '\u0627\u0629\u0648\u06C0\u06CF\u06FD\u06FE\u076B\u076C\u0771\u0773\u0774\u0778\u0779\u08E2\u08B1\u08B2\u08B9';
51391         exports.lineBreakers = lineBreakers;
51392         function addToLineBreakers(start, finish) {
51393             for (var i = start; i <= finish; i++) {
51394                 exports.lineBreakers = lineBreakers += String.fromCharCode(i);
51395             }
51396         }
51397         addToLineBreakers(0x0600, 0x061F); // it's OK to include tashkeel in this range as it is ignored
51398         addToLineBreakers(0x0621, 0x0625);
51399         addToLineBreakers(0x062F, 0x0632);
51400         addToLineBreakers(0x0660, 0x066D); // numerals, math
51401         addToLineBreakers(0x0671, 0x0677);
51402         addToLineBreakers(0x0688, 0x0699);
51403         addToLineBreakers(0x06C3, 0x06CB);
51404         addToLineBreakers(0x06D2, 0x06F9);
51405         addToLineBreakers(0x0759, 0x075B);
51406         addToLineBreakers(0x08AA, 0x08AE);
51407         addToLineBreakers(0xFB50, 0xFDFD); // presentation forms look like they could connect, but never do
51408         // Presentation Forms A includes diacritics but they are meant to stand alone
51409         addToLineBreakers(0xFE80, 0xFEFC); // presentation forms look like they could connect, but never do
51410         // numerals, math
51411         addToLineBreakers(0x10E60, 0x10E7F);
51412         addToLineBreakers(0x1EC70, 0x1ECBF);
51413         addToLineBreakers(0x1EE00, 0x1EEFF);
51414         });
51415
51416         unwrapExports(reference);
51417         var reference_1 = reference.letterList;
51418         var reference_2 = reference.ligatureList;
51419         var reference_3 = reference.ligatureWordList;
51420         var reference_4 = reference.lams;
51421         var reference_5 = reference.alefs;
51422         var reference_6 = reference.tashkeel;
51423         var reference_7 = reference.lineBreakers;
51424
51425         var GlyphSplitter_1 = createCommonjsModule(function (module, exports) {
51426         Object.defineProperty(exports, "__esModule", { value: true });
51427
51428
51429         function GlyphSplitter(word) {
51430             var letters = [];
51431             var lastLetter = '';
51432             word.split('').forEach(function (letter) {
51433                 if (isArabic_1.isArabic(letter)) {
51434                     if (reference.tashkeel.indexOf(letter) > -1) {
51435                         letters[letters.length - 1] += letter;
51436                     }
51437                     else if (lastLetter.length && ((reference.lams.indexOf(lastLetter) === 0 && reference.alefs.indexOf(letter) > -1) || (reference.lams.indexOf(lastLetter) > 0 && reference.alefs.indexOf(letter) === 0))) {
51438                         // valid LA forms
51439                         letters[letters.length - 1] += letter;
51440                     }
51441                     else {
51442                         letters.push(letter);
51443                     }
51444                 }
51445                 else {
51446                     letters.push(letter);
51447                 }
51448                 if (reference.tashkeel.indexOf(letter) === -1) {
51449                     lastLetter = letter;
51450                 }
51451             });
51452             return letters;
51453         }
51454         exports.GlyphSplitter = GlyphSplitter;
51455         });
51456
51457         unwrapExports(GlyphSplitter_1);
51458         var GlyphSplitter_2 = GlyphSplitter_1.GlyphSplitter;
51459
51460         var BaselineSplitter_1 = createCommonjsModule(function (module, exports) {
51461         Object.defineProperty(exports, "__esModule", { value: true });
51462
51463
51464         function BaselineSplitter(word) {
51465             var letters = [];
51466             var lastLetter = '';
51467             word.split('').forEach(function (letter) {
51468                 if (isArabic_1.isArabic(letter) && isArabic_1.isArabic(lastLetter)) {
51469                     if (lastLetter.length && reference.tashkeel.indexOf(letter) > -1) {
51470                         letters[letters.length - 1] += letter;
51471                     }
51472                     else if (reference.lineBreakers.indexOf(lastLetter) > -1) {
51473                         letters.push(letter);
51474                     }
51475                     else {
51476                         letters[letters.length - 1] += letter;
51477                     }
51478                 }
51479                 else {
51480                     letters.push(letter);
51481                 }
51482                 if (reference.tashkeel.indexOf(letter) === -1) {
51483                     // don't allow tashkeel to hide line break
51484                     lastLetter = letter;
51485                 }
51486             });
51487             return letters;
51488         }
51489         exports.BaselineSplitter = BaselineSplitter;
51490         });
51491
51492         unwrapExports(BaselineSplitter_1);
51493         var BaselineSplitter_2 = BaselineSplitter_1.BaselineSplitter;
51494
51495         var Normalization = createCommonjsModule(function (module, exports) {
51496         Object.defineProperty(exports, "__esModule", { value: true });
51497
51498
51499
51500
51501         function Normal(word, breakPresentationForm) {
51502             // default is to turn initial/isolated/medial/final presentation form to generic
51503             if (typeof breakPresentationForm === 'undefined') {
51504                 breakPresentationForm = true;
51505             }
51506             var returnable = '';
51507             word.split('').forEach(function (letter) {
51508                 if (!isArabic_1.isArabic(letter)) {
51509                     returnable += letter;
51510                     return;
51511                 }
51512                 for (var w = 0; w < reference.letterList.length; w++) {
51513                     // ok so we are checking this potential lettertron
51514                     var letterForms = unicodeArabic.default[reference.letterList[w]];
51515                     var versions = Object.keys(letterForms);
51516                     for (var v = 0; v < versions.length; v++) {
51517                         var localVersion = letterForms[versions[v]];
51518                         if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
51519                             // look at this embedded object
51520                             var embeddedForms = Object.keys(localVersion);
51521                             for (var ef = 0; ef < embeddedForms.length; ef++) {
51522                                 var form = localVersion[embeddedForms[ef]];
51523                                 if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
51524                                     // match
51525                                     // console.log('embedded match');
51526                                     if (form === letter) {
51527                                         // match exact
51528                                         if (breakPresentationForm && localVersion['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(embeddedForms[ef]) > -1) {
51529                                             // replace presentation form
51530                                             // console.log('keeping normal form of the letter');
51531                                             if (typeof localVersion['normal'] === 'object') {
51532                                                 returnable += localVersion['normal'][0];
51533                                             }
51534                                             else {
51535                                                 returnable += localVersion['normal'];
51536                                             }
51537                                             return;
51538                                         }
51539                                         // console.log('keeping this letter');
51540                                         returnable += letter;
51541                                         return;
51542                                     }
51543                                     else if (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1) {
51544                                         // match
51545                                         returnable += form[0];
51546                                         // console.log('added the first letter from the same array');
51547                                         return;
51548                                     }
51549                                 }
51550                             }
51551                         }
51552                         else if (localVersion === letter) {
51553                             // match exact
51554                             if (breakPresentationForm && letterForms['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(versions[v]) > -1) {
51555                                 // replace presentation form
51556                                 // console.log('keeping normal form of the letter');
51557                                 if (typeof letterForms['normal'] === 'object') {
51558                                     returnable += letterForms['normal'][0];
51559                                 }
51560                                 else {
51561                                     returnable += letterForms['normal'];
51562                                 }
51563                                 return;
51564                             }
51565                             // console.log('keeping this letter');
51566                             returnable += letter;
51567                             return;
51568                         }
51569                         else if (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1) {
51570                             // match
51571                             returnable += localVersion[0];
51572                             // console.log('added the first letter from the same array');
51573                             return;
51574                         }
51575                     }
51576                 }
51577                 // try ligatures
51578                 for (var v2 = 0; v2 < reference.ligatureList.length; v2++) {
51579                     var normalForm = reference.ligatureList[v2];
51580                     if (normalForm !== 'words') {
51581                         var ligForms = Object.keys(unicodeLigatures.default[normalForm]);
51582                         for (var f = 0; f < ligForms.length; f++) {
51583                             if (unicodeLigatures.default[normalForm][ligForms[f]] === letter) {
51584                                 returnable += normalForm;
51585                                 return;
51586                             }
51587                         }
51588                     }
51589                 }
51590                 // try words ligatures
51591                 for (var v3 = 0; v3 < reference.ligatureWordList.length; v3++) {
51592                     var normalForm = reference.ligatureWordList[v3];
51593                     if (unicodeLigatures.default.words[normalForm] === letter) {
51594                         returnable += normalForm;
51595                         return;
51596                     }
51597                 }
51598                 returnable += letter;
51599                 // console.log('kept the letter')
51600             });
51601             return returnable;
51602         }
51603         exports.Normal = Normal;
51604         });
51605
51606         unwrapExports(Normalization);
51607         var Normalization_1 = Normalization.Normal;
51608
51609         var CharShaper_1 = createCommonjsModule(function (module, exports) {
51610         Object.defineProperty(exports, "__esModule", { value: true });
51611
51612
51613
51614         function CharShaper(letter, form) {
51615             if (!isArabic_1.isArabic(letter)) {
51616                 // fail not Arabic
51617                 throw new Error('Not Arabic');
51618             }
51619             if (letter === "\u0621") {
51620                 // hamza alone
51621                 return "\u0621";
51622             }
51623             for (var w = 0; w < reference.letterList.length; w++) {
51624                 // ok so we are checking this potential lettertron
51625                 var letterForms = unicodeArabic.default[reference.letterList[w]];
51626                 var versions = Object.keys(letterForms);
51627                 for (var v = 0; v < versions.length; v++) {
51628                     var localVersion = letterForms[versions[v]];
51629                     if ((localVersion === letter) ||
51630                         (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
51631                         if (versions.indexOf(form) > -1) {
51632                             return letterForms[form];
51633                         }
51634                     }
51635                     else if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
51636                         // check embedded
51637                         var embeddedVersions = Object.keys(localVersion);
51638                         for (var ev = 0; ev < embeddedVersions.length; ev++) {
51639                             if ((localVersion[embeddedVersions[ev]] === letter) ||
51640                                 (typeof localVersion[embeddedVersions[ev]] === 'object' && localVersion[embeddedVersions[ev]].indexOf && localVersion[embeddedVersions[ev]].indexOf(letter) > -1)) {
51641                                 if (embeddedVersions.indexOf(form) > -1) {
51642                                     return localVersion[form];
51643                                 }
51644                             }
51645                         }
51646                     }
51647                 }
51648             }
51649         }
51650         exports.CharShaper = CharShaper;
51651         });
51652
51653         unwrapExports(CharShaper_1);
51654         var CharShaper_2 = CharShaper_1.CharShaper;
51655
51656         var WordShaper_1 = createCommonjsModule(function (module, exports) {
51657         Object.defineProperty(exports, "__esModule", { value: true });
51658
51659
51660
51661
51662         function WordShaper(word) {
51663             var state = 'initial';
51664             var output = '';
51665             for (var w = 0; w < word.length; w++) {
51666                 var nextLetter = ' ';
51667                 for (var nxw = w + 1; nxw < word.length; nxw++) {
51668                     if (!isArabic_1.isArabic(word[nxw])) {
51669                         break;
51670                     }
51671                     if (reference.tashkeel.indexOf(word[nxw]) === -1) {
51672                         nextLetter = word[nxw];
51673                         break;
51674                     }
51675                 }
51676                 if (!isArabic_1.isArabic(word[w]) || isArabic_1.isMath(word[w])) {
51677                     // space or other non-Arabic
51678                     output += word[w];
51679                     state = 'initial';
51680                 }
51681                 else if (reference.tashkeel.indexOf(word[w]) > -1) {
51682                     // tashkeel - add without changing state
51683                     output += word[w];
51684                 }
51685                 else if ((nextLetter === ' ') // last Arabic letter in this word
51686                     || (reference.lineBreakers.indexOf(word[w]) > -1)) { // the current letter is known to break lines
51687                     output += CharShaper_1.CharShaper(word[w], state === 'initial' ? 'isolated' : 'final');
51688                     state = 'initial';
51689                 }
51690                 else if (reference.lams.indexOf(word[w]) > -1 && reference.alefs.indexOf(nextLetter) > -1) {
51691                     // LA letters - advance an additional letter after this
51692                     output += unicodeLigatures.default[word[w] + nextLetter][(state === 'initial' ? 'isolated' : 'final')];
51693                     while (word[w] !== nextLetter) {
51694                         w++;
51695                     }
51696                     state = 'initial';
51697                 }
51698                 else {
51699                     output += CharShaper_1.CharShaper(word[w], state);
51700                     state = 'medial';
51701                 }
51702             }
51703             return output;
51704         }
51705         exports.WordShaper = WordShaper;
51706         });
51707
51708         unwrapExports(WordShaper_1);
51709         var WordShaper_2 = WordShaper_1.WordShaper;
51710
51711         var ParentLetter_1 = createCommonjsModule(function (module, exports) {
51712         Object.defineProperty(exports, "__esModule", { value: true });
51713
51714
51715
51716         function ParentLetter(letter) {
51717             if (!isArabic_1.isArabic(letter)) {
51718                 throw new Error('Not an Arabic letter');
51719             }
51720             for (var w = 0; w < reference.letterList.length; w++) {
51721                 // ok so we are checking this potential lettertron
51722                 var letterForms = unicodeArabic.default[reference.letterList[w]];
51723                 var versions = Object.keys(letterForms);
51724                 for (var v = 0; v < versions.length; v++) {
51725                     var localVersion = letterForms[versions[v]];
51726                     if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
51727                         // look at this embedded object
51728                         var embeddedForms = Object.keys(localVersion);
51729                         for (var ef = 0; ef < embeddedForms.length; ef++) {
51730                             var form = localVersion[embeddedForms[ef]];
51731                             if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
51732                                 // match
51733                                 return localVersion;
51734                             }
51735                         }
51736                     }
51737                     else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
51738                         // match
51739                         return letterForms;
51740                     }
51741                 }
51742                 return null;
51743             }
51744         }
51745         exports.ParentLetter = ParentLetter;
51746         function GrandparentLetter(letter) {
51747             if (!isArabic_1.isArabic(letter)) {
51748                 throw new Error('Not an Arabic letter');
51749             }
51750             for (var w = 0; w < reference.letterList.length; w++) {
51751                 // ok so we are checking this potential lettertron
51752                 var letterForms = unicodeArabic.default[reference.letterList[w]];
51753                 var versions = Object.keys(letterForms);
51754                 for (var v = 0; v < versions.length; v++) {
51755                     var localVersion = letterForms[versions[v]];
51756                     if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
51757                         // look at this embedded object
51758                         var embeddedForms = Object.keys(localVersion);
51759                         for (var ef = 0; ef < embeddedForms.length; ef++) {
51760                             var form = localVersion[embeddedForms[ef]];
51761                             if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
51762                                 // match
51763                                 return letterForms;
51764                             }
51765                         }
51766                     }
51767                     else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
51768                         // match
51769                         return letterForms;
51770                     }
51771                 }
51772                 return null;
51773             }
51774         }
51775         exports.GrandparentLetter = GrandparentLetter;
51776         });
51777
51778         unwrapExports(ParentLetter_1);
51779         var ParentLetter_2 = ParentLetter_1.ParentLetter;
51780         var ParentLetter_3 = ParentLetter_1.GrandparentLetter;
51781
51782         var lib$1 = createCommonjsModule(function (module, exports) {
51783         Object.defineProperty(exports, "__esModule", { value: true });
51784
51785         exports.isArabic = isArabic_1.isArabic;
51786
51787         exports.GlyphSplitter = GlyphSplitter_1.GlyphSplitter;
51788
51789         exports.BaselineSplitter = BaselineSplitter_1.BaselineSplitter;
51790
51791         exports.Normal = Normalization.Normal;
51792
51793         exports.CharShaper = CharShaper_1.CharShaper;
51794
51795         exports.WordShaper = WordShaper_1.WordShaper;
51796
51797         exports.ParentLetter = ParentLetter_1.ParentLetter;
51798         exports.GrandparentLetter = ParentLetter_1.GrandparentLetter;
51799         });
51800
51801         unwrapExports(lib$1);
51802         var lib_1 = lib$1.isArabic;
51803         var lib_2 = lib$1.GlyphSplitter;
51804         var lib_3 = lib$1.BaselineSplitter;
51805         var lib_4 = lib$1.Normal;
51806         var lib_5 = lib$1.CharShaper;
51807         var lib_6 = lib$1.WordShaper;
51808         var lib_7 = lib$1.ParentLetter;
51809         var lib_8 = lib$1.GrandparentLetter;
51810
51811         // see https://github.com/openstreetmap/iD/pull/3707
51812
51813         var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u07BF\u08A0–\u08BF]/;
51814
51815         function fixRTLTextForSvg(inputText) {
51816             var ret = '', rtlBuffer = [];
51817             var arabicRegex = /[\u0600-\u06FF]/g;
51818             var arabicDiacritics = /[\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06ED]/g;
51819             var arabicMath = /[\u0660-\u066C\u06F0-\u06F9]+/g;
51820             var thaanaVowel = /[\u07A6-\u07B0]/;
51821             var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/;
51822
51823             // Arabic word shaping
51824             if (arabicRegex.test(inputText)) {
51825                 inputText = lib_6(inputText);
51826             }
51827
51828             for (var n = 0; n < inputText.length; n++) {
51829                 var c = inputText[n];
51830                 if (arabicMath.test(c)) {
51831                     // Arabic numbers go LTR
51832                     ret += rtlBuffer.reverse().join('');
51833                     rtlBuffer = [c];
51834                 } else {
51835                     if (rtlBuffer.length && arabicMath.test(rtlBuffer[rtlBuffer.length - 1])) {
51836                         ret += rtlBuffer.reverse().join('');
51837                         rtlBuffer = [];
51838                     }
51839                     if ((thaanaVowel.test(c) || hebrewSign.test(c) || arabicDiacritics.test(c)) && rtlBuffer.length) {
51840                         rtlBuffer[rtlBuffer.length - 1] += c;
51841                     } else if (rtlRegex.test(c)
51842                         // include Arabic presentation forms
51843                         || (c.charCodeAt(0) >= 64336 && c.charCodeAt(0) <= 65023)
51844                         || (c.charCodeAt(0) >= 65136 && c.charCodeAt(0) <= 65279)) {
51845                         rtlBuffer.push(c);
51846                     } else if (c === ' ' && rtlBuffer.length) {
51847                         // whitespace within RTL text
51848                         rtlBuffer = [rtlBuffer.reverse().join('') + ' '];
51849                     } else {
51850                         // non-RTL character
51851                         ret += rtlBuffer.reverse().join('') + c;
51852                         rtlBuffer = [];
51853                     }
51854                 }
51855             }
51856             ret += rtlBuffer.reverse().join('');
51857             return ret;
51858         }
51859
51860         var translations = Object.create(null);
51861
51862         var currentLocale = 'en';
51863         var textDirection = 'ltr';
51864         var languageNames = {};
51865         var scriptNames = {};
51866
51867         function setLocale(val) {
51868             if (translations[val] !== undefined) {
51869                 currentLocale = val;
51870             } else if (translations[val.split('-')[0]]) {
51871                 currentLocale = val.split('-')[0];
51872             }
51873         }
51874
51875         function addTranslation(id, value) {
51876             translations[id] = value;
51877         }
51878
51879         /**
51880          * Given a string identifier, try to find that string in the current
51881          * language, and return it.  This function will be called recursively
51882          * with locale `en` if a string can not be found in the requested language.
51883          *
51884          * @param {string}   s   string identifier
51885          * @param {object?}  o   object of token replacements and default string
51886          * @param {string?}  loc locale to use
51887          * @returns {string?} locale string
51888          */
51889         function t(s, o, loc) {
51890             loc = loc || currentLocale;
51891
51892             var path = s
51893                 .split('.')
51894                 .map(function (s) { return s.replace(/<TX_DOT>/g, '.'); })
51895                 .reverse();
51896
51897             var rep = translations[loc];
51898
51899             while (rep !== undefined && path.length) {
51900                 rep = rep[path.pop()];
51901             }
51902
51903             if (rep !== undefined) {
51904                 if (o) {
51905                     for (var k in o) {
51906                         var variable = '{' + k + '}';
51907                         var re = new RegExp(variable, 'g'); // check globally for variables
51908                         rep = rep.replace(re, o[k]);
51909                     }
51910                 }
51911                 return rep;
51912             }
51913
51914             if (loc !== 'en') {
51915                 return t(s, o, 'en');
51916             }
51917
51918             if (o && 'default' in o) {
51919                 return o.default;
51920             }
51921
51922             var missing = 'Missing ' + loc + ' translation: ' + s;
51923             if (typeof console !== 'undefined') { console.error(missing); } // eslint-disable-line
51924
51925             return missing;
51926         }
51927
51928         /**
51929          * Given string 'ltr' or 'rtl', save that setting
51930          *
51931          * @param {string} dir ltr or rtl
51932          */
51933
51934         function setTextDirection(dir) {
51935             textDirection = dir;
51936         }
51937
51938         function setLanguageNames(obj) {
51939             languageNames = obj;
51940         }
51941
51942         function setScriptNames(obj) {
51943             scriptNames = obj;
51944         }
51945
51946         function languageName(code, options) {
51947             if (languageNames[code]) { // name in locale langauge
51948
51949                 // e.g. German
51950                 return languageNames[code];
51951             }
51952             // sometimes we only want the local name
51953             if (options && options.localOnly) { return null; }
51954
51955             var langInfo = dataLanguages[code];
51956
51957             if (langInfo) {
51958                 if (langInfo.nativeName) { // name in native language
51959
51960                     // e.g. Deutsch (de)
51961                     return t('translate.language_and_code', { language: langInfo.nativeName, code: code });
51962
51963                 } else if (langInfo.base && langInfo.script) {
51964
51965                     var base = langInfo.base; // the code of the langauge this is based on
51966
51967                     if (languageNames[base]) { // base language name in locale langauge
51968                         var scriptCode = langInfo.script;
51969                         var script = scriptNames[scriptCode] || scriptCode;
51970
51971                         // e.g. Serbian (Cyrillic)
51972                         return t('translate.language_and_code', { language: languageNames[base], code: script });
51973
51974                     } else if (dataLanguages[base] && dataLanguages[base].nativeName) {
51975
51976                         // e.g. српски (sr-Cyrl)
51977                         return t('translate.language_and_code', { language: dataLanguages[base].nativeName, code: code });
51978                     }
51979                 }
51980             }
51981             return code; // if not found, use the code
51982         }
51983
51984         var detected;
51985
51986         function utilDetect(force) {
51987             if (detected && !force) { return detected; }
51988             detected = {};
51989
51990             var ua = navigator.userAgent,
51991                 m = null,
51992                 q = utilStringQs(window.location.hash.substring(1));
51993
51994             m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i);   // Edge
51995             if (m !== null) {
51996                 detected.browser = m[1];
51997                 detected.version = m[2];
51998             }
51999             if (!detected.browser) {
52000                 m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i);   // IE11
52001                 if (m !== null) {
52002                     detected.browser = 'msie';
52003                     detected.version = m[1];
52004                 }
52005             }
52006             if (!detected.browser) {
52007                 m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i);   // Opera 15+
52008                 if (m !== null) {
52009                     detected.browser = 'Opera';
52010                     detected.version = m[2];
52011                 }
52012             }
52013             if (!detected.browser) {
52014                 m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
52015                 if (m !== null) {
52016                     detected.browser = m[1];
52017                     detected.version = m[2];
52018                     m = ua.match(/version\/([\.\d]+)/i);
52019                     if (m !== null) { detected.version = m[1]; }
52020                 }
52021             }
52022             if (!detected.browser) {
52023                 detected.browser = navigator.appName;
52024                 detected.version = navigator.appVersion;
52025             }
52026
52027             // keep major.minor version only..
52028             detected.version = detected.version.split(/\W/).slice(0,2).join('.');
52029
52030             if (detected.browser.toLowerCase() === 'msie') {
52031                 detected.ie = true;
52032                 detected.browser = 'Internet Explorer';
52033                 detected.support = parseFloat(detected.version) >= 11;
52034             } else {
52035                 detected.ie = false;
52036                 detected.support = true;
52037             }
52038
52039             // Added due to incomplete svg style support. See #715
52040             detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 );
52041
52042             // Set locale based on url param (format 'en-US') or browser lang (default)
52043             if (q.hasOwnProperty('locale')) {
52044                 detected.locale = q.locale;
52045                 detected.language = q.locale.split('-')[0];
52046             } else {
52047                 detected.locale = (navigator.language || navigator.userLanguage || 'en-US');
52048                 detected.language = detected.locale.split('-')[0];
52049
52050                 // Search `navigator.languages` for a better locale. Prefer the first language,
52051                 // unless the second language is a culture-specific version of the first one, see #3842
52052                 if (navigator.languages && navigator.languages.length > 0) {
52053                     var code0 = navigator.languages[0],
52054                         parts0 = code0.split('-');
52055
52056                     detected.locale = code0;
52057                     detected.language = parts0[0];
52058
52059                     if (navigator.languages.length > 1 && parts0.length === 1) {
52060                         var code1 = navigator.languages[1],
52061                             parts1 = code1.split('-');
52062
52063                         if (parts1[0] === parts0[0]) {
52064                             detected.locale = code1;
52065                         }
52066                     }
52067                 }
52068             }
52069
52070             // Loaded locale is stored in currentLocale
52071             // return that instead (except in the situation where 'en' might override 'en-US')
52072             var loadedLocale = currentLocale || 'en';
52073             if (loadedLocale !== 'en') {
52074                 detected.locale = loadedLocale;
52075                 detected.language = detected.locale.split('-')[0];
52076             }
52077
52078             // detect text direction
52079             var lang = dataLocales[detected.locale] || dataLocales[detected.language];
52080             if ((lang && lang.rtl) || (q.rtl === 'true')) {
52081                 detected.textDirection = 'rtl';
52082             } else {
52083                 detected.textDirection = 'ltr';
52084             }
52085             setTextDirection(detected.textDirection);
52086             setLanguageNames((lang && lang.languageNames) || {});
52087             setScriptNames((lang && lang.scriptNames) || {});
52088
52089             // detect host
52090             var loc = window.top.location;
52091             var origin = loc.origin;
52092             if (!origin) {  // for unpatched IE11
52093                 origin = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port: '');
52094             }
52095
52096             detected.host = origin + loc.pathname;
52097
52098             detected.filedrop = (window.FileReader && 'ondrop' in window);
52099
52100             detected.download = !(detected.ie || detected.browser.toLowerCase() === 'edge');
52101
52102             detected.cssfilters = !(detected.ie || detected.browser.toLowerCase() === 'edge');
52103
52104             function nav(x) {
52105                 return navigator.userAgent.indexOf(x) !== -1;
52106             }
52107
52108             if (nav('Win')) {
52109                 detected.os = 'win';
52110                 detected.platform = 'Windows';
52111             }
52112             else if (nav('Mac')) {
52113                 detected.os = 'mac';
52114                 detected.platform = 'Macintosh';
52115             }
52116             else if (nav('X11') || nav('Linux')) {
52117                 detected.os = 'linux';
52118                 detected.platform = 'Linux';
52119             }
52120             else {
52121                 detected.os = 'win';
52122                 detected.platform = 'Unknown';
52123             }
52124
52125             return detected;
52126         }
52127
52128         function utilTagText(entity) {
52129             var obj = (entity && entity.tags) || {};
52130             return Object.keys(obj)
52131                 .map(function(k) { return k + '=' + obj[k]; })
52132                 .join(', ');
52133         }
52134
52135
52136         function utilTagDiff(oldTags, newTags) {
52137             var tagDiff = [];
52138             var keys = utilArrayUnion(Object.keys(oldTags), Object.keys(newTags)).sort();
52139             keys.forEach(function(k) {
52140                 var oldVal = oldTags[k];
52141                 var newVal = newTags[k];
52142
52143                 if (oldVal && (!newVal || newVal !== oldVal)) {
52144                     tagDiff.push({
52145                         type: '-',
52146                         key: k,
52147                         oldVal: oldVal,
52148                         newVal: newVal,
52149                         display: '- ' + k + '=' + oldVal
52150                     });
52151                 }
52152                 if (newVal && (!oldVal || newVal !== oldVal)) {
52153                     tagDiff.push({
52154                         type: '+',
52155                         key: k,
52156                         oldVal: oldVal,
52157                         newVal: newVal,
52158                         display: '+ ' + k + '=' + newVal
52159                     });
52160                 }
52161             });
52162             return tagDiff;
52163         }
52164
52165
52166         function utilEntitySelector(ids) {
52167             return ids.length ? '.' + ids.join(',.') : 'nothing';
52168         }
52169
52170
52171         // returns an selector to select entity ids for:
52172         //  - entityIDs passed in
52173         //  - shallow descendant entityIDs for any of those entities that are relations
52174         function utilEntityOrMemberSelector(ids, graph) {
52175             var seen = new Set(ids);
52176             ids.forEach(collectShallowDescendants);
52177             return utilEntitySelector(Array.from(seen));
52178
52179             function collectShallowDescendants(id) {
52180                 var entity = graph.hasEntity(id);
52181                 if (!entity || entity.type !== 'relation') { return; }
52182
52183                 entity.members
52184                     .map(function(member) { return member.id; })
52185                     .forEach(function(id) { seen.add(id); });
52186             }
52187         }
52188
52189
52190         // returns an selector to select entity ids for:
52191         //  - entityIDs passed in
52192         //  - deep descendant entityIDs for any of those entities that are relations
52193         function utilEntityOrDeepMemberSelector(ids, graph) {
52194             return utilEntitySelector(utilEntityAndDeepMemberIDs(ids, graph));
52195         }
52196
52197
52198         // returns an selector to select entity ids for:
52199         //  - entityIDs passed in
52200         //  - deep descendant entityIDs for any of those entities that are relations
52201         function utilEntityAndDeepMemberIDs(ids, graph) {
52202             var seen = new Set();
52203             ids.forEach(collectDeepDescendants);
52204             return Array.from(seen);
52205
52206             function collectDeepDescendants(id) {
52207                 if (seen.has(id)) { return; }
52208                 seen.add(id);
52209
52210                 var entity = graph.hasEntity(id);
52211                 if (!entity || entity.type !== 'relation') { return; }
52212
52213                 entity.members
52214                     .map(function(member) { return member.id; })
52215                     .forEach(collectDeepDescendants);   // recurse
52216             }
52217         }
52218
52219         // returns an selector to select entity ids for:
52220         //  - deep descendant entityIDs for any of those entities that are relations
52221         function utilDeepMemberSelector(ids, graph, skipMultipolgonMembers) {
52222             var idsSet = new Set(ids);
52223             var seen = new Set();
52224             var returners = new Set();
52225             ids.forEach(collectDeepDescendants);
52226             return utilEntitySelector(Array.from(returners));
52227
52228             function collectDeepDescendants(id) {
52229                 if (seen.has(id)) { return; }
52230                 seen.add(id);
52231
52232                 if (!idsSet.has(id)) {
52233                     returners.add(id);
52234                 }
52235
52236                 var entity = graph.hasEntity(id);
52237                 if (!entity || entity.type !== 'relation') { return; }
52238                 if (skipMultipolgonMembers && entity.isMultipolygon()) { return; }
52239                 entity.members
52240                     .map(function(member) { return member.id; })
52241                     .forEach(collectDeepDescendants);   // recurse
52242             }
52243         }
52244
52245
52246         // Adds or removes highlight styling for the specified entities
52247         function utilHighlightEntities(ids, highlighted, context) {
52248             context.surface()
52249                 .selectAll(utilEntityOrDeepMemberSelector(ids, context.graph()))
52250                 .classed('highlighted', highlighted);
52251         }
52252
52253
52254         // returns an Array that is the union of:
52255         //  - nodes for any nodeIDs passed in
52256         //  - child nodes of any wayIDs passed in
52257         //  - descendant member and child nodes of relationIDs passed in
52258         function utilGetAllNodes(ids, graph) {
52259             var seen = new Set();
52260             var nodes = new Set();
52261
52262             ids.forEach(collectNodes);
52263             return Array.from(nodes);
52264
52265             function collectNodes(id) {
52266                 if (seen.has(id)) { return; }
52267                 seen.add(id);
52268
52269                 var entity = graph.hasEntity(id);
52270                 if (!entity) { return; }
52271
52272                 if (entity.type === 'node') {
52273                     nodes.add(entity);
52274                 } else if (entity.type === 'way') {
52275                     entity.nodes.forEach(collectNodes);
52276                 } else {
52277                     entity.members
52278                         .map(function(member) { return member.id; })
52279                         .forEach(collectNodes);   // recurse
52280                 }
52281             }
52282         }
52283
52284
52285         function utilDisplayName(entity) {
52286             var localizedNameKey = 'name:' + utilDetect().locale.toLowerCase().split('-')[0];
52287             var name = entity.tags[localizedNameKey] || entity.tags.name || '';
52288             var network = entity.tags.cycle_network || entity.tags.network;
52289
52290             if (!name && entity.tags.ref) {
52291                 name = entity.tags.ref;
52292                 if (network) {
52293                     name = network + ' ' + name;
52294                 }
52295             }
52296
52297             return name;
52298         }
52299
52300
52301         function utilDisplayNameForPath(entity) {
52302             var name = utilDisplayName(entity);
52303             var isFirefox = utilDetect().browser.toLowerCase().indexOf('firefox') > -1;
52304
52305             if (!isFirefox && name && rtlRegex.test(name)) {
52306                 name = fixRTLTextForSvg(name);
52307             }
52308
52309             return name;
52310         }
52311
52312
52313         function utilDisplayType(id) {
52314             return {
52315                 n: t('inspector.node'),
52316                 w: t('inspector.way'),
52317                 r: t('inspector.relation')
52318             }[id.charAt(0)];
52319         }
52320
52321
52322         function utilDisplayLabel(entity, context) {
52323             var displayName = utilDisplayName(entity);
52324             if (displayName) {
52325                 // use the display name if there is one
52326                 return displayName;
52327             }
52328             var preset = utilPreset(entity, context);
52329             if (preset && preset.name()) {
52330                 // use the preset name if there is a match
52331                 return preset.name();
52332             }
52333             // fallback to the display type (node/way/relation)
52334             return utilDisplayType(entity.id);
52335         }
52336
52337
52338         function utilPreset(entity, context) {
52339             return context.presets().match(entity, context.graph());
52340         }
52341
52342
52343         function utilEntityRoot(entityType) {
52344             return {
52345                 node: 'n',
52346                 way: 'w',
52347                 relation: 'r'
52348             }[entityType];
52349         }
52350
52351
52352         function utilStringQs(str) {
52353             return str.split('&').reduce(function(obj, pair){
52354                 var parts = pair.split('=');
52355                 if (parts.length === 2) {
52356                     obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]);
52357                 }
52358                 return obj;
52359             }, {});
52360         }
52361
52362
52363         function utilQsString(obj, noencode) {
52364             // encode everything except special characters used in certain hash parameters:
52365             // "/" in map states, ":", ",", {" and "}" in background
52366             function softEncode(s) {
52367                 return encodeURIComponent(s).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent);
52368             }
52369
52370             return Object.keys(obj).sort().map(function(key) {
52371                 return encodeURIComponent(key) + '=' + (
52372                     noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key]));
52373             }).join('&');
52374         }
52375
52376
52377         function utilPrefixDOMProperty(property) {
52378             var prefixes = ['webkit', 'ms', 'moz', 'o'];
52379             var i = -1;
52380             var n = prefixes.length;
52381             var s = document.body;
52382
52383             if (property in s)
52384                 { return property; }
52385
52386             property = property.substr(0, 1).toUpperCase() + property.substr(1);
52387
52388             while (++i < n) {
52389                 if (prefixes[i] + property in s) {
52390                     return prefixes[i] + property;
52391                 }
52392             }
52393
52394             return false;
52395         }
52396
52397
52398         function utilPrefixCSSProperty(property) {
52399             var prefixes = ['webkit', 'ms', 'Moz', 'O'];
52400             var i = -1;
52401             var n = prefixes.length;
52402             var s = document.body.style;
52403
52404             if (property.toLowerCase() in s) {
52405                 return property.toLowerCase();
52406             }
52407
52408             while (++i < n) {
52409                 if (prefixes[i] + property in s) {
52410                     return '-' + prefixes[i].toLowerCase() + property.replace(/([A-Z])/g, '-$1').toLowerCase();
52411                 }
52412             }
52413
52414             return false;
52415         }
52416
52417
52418         var transformProperty;
52419         function utilSetTransform(el, x, y, scale) {
52420             var prop = transformProperty = transformProperty || utilPrefixCSSProperty('Transform');
52421             var translate = utilDetect().opera ? 'translate('   + x + 'px,' + y + 'px)'
52422                 : 'translate3d(' + x + 'px,' + y + 'px,0)';
52423             return el.style(prop, translate + (scale ? ' scale(' + scale + ')' : ''));
52424         }
52425
52426
52427         // Calculates Levenshtein distance between two strings
52428         // see:  https://en.wikipedia.org/wiki/Levenshtein_distance
52429         // first converts the strings to lowercase and replaces diacritic marks with ascii equivalents.
52430         function utilEditDistance(a, b) {
52431             a = remove$1(a.toLowerCase());
52432             b = remove$1(b.toLowerCase());
52433             if (a.length === 0) { return b.length; }
52434             if (b.length === 0) { return a.length; }
52435             var matrix = [];
52436             for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; }
52437             for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; }
52438             for (i = 1; i <= b.length; i++) {
52439                 for (j = 1; j <= a.length; j++) {
52440                     if (b.charAt(i-1) === a.charAt(j-1)) {
52441                         matrix[i][j] = matrix[i-1][j-1];
52442                     } else {
52443                         matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
52444                             Math.min(matrix[i][j-1] + 1, // insertion
52445                             matrix[i-1][j] + 1)); // deletion
52446                     }
52447                 }
52448             }
52449             return matrix[b.length][a.length];
52450         }
52451
52452
52453         // a d3.mouse-alike which
52454         // 1. Only works on HTML elements, not SVG
52455         // 2. Does not cause style recalculation
52456         function utilFastMouse(container) {
52457             var rect = container.getBoundingClientRect();
52458             var rectLeft = rect.left;
52459             var rectTop = rect.top;
52460             var clientLeft = +container.clientLeft;
52461             var clientTop = +container.clientTop;
52462
52463             if (textDirection === 'rtl') {
52464                 rectLeft = 0;
52465             }
52466             return function(e) {
52467                 return [
52468                     e.clientX - rectLeft - clientLeft,
52469                     e.clientY - rectTop - clientTop];
52470             };
52471         }
52472
52473
52474         function utilAsyncMap(inputs, func, callback) {
52475             var remaining = inputs.length;
52476             var results = [];
52477             var errors = [];
52478
52479             inputs.forEach(function(d, i) {
52480                 func(d, function done(err, data) {
52481                     errors[i] = err;
52482                     results[i] = data;
52483                     remaining--;
52484                     if (!remaining) { callback(errors, results); }
52485                 });
52486             });
52487         }
52488
52489
52490         // wraps an index to an interval [0..length-1]
52491         function utilWrap(index, length) {
52492             if (index < 0) {
52493                 index += Math.ceil(-index/length)*length;
52494             }
52495             return index % length;
52496         }
52497
52498
52499         /**
52500          * a replacement for functor
52501          *
52502          * @param {*} value any value
52503          * @returns {Function} a function that returns that value or the value if it's a function
52504          */
52505         function utilFunctor(value) {
52506             if (typeof value === 'function') { return value; }
52507             return function() {
52508                 return value;
52509             };
52510         }
52511
52512
52513         function utilNoAuto(selection) {
52514             var isText = (selection.size() && selection.node().tagName.toLowerCase() === 'textarea');
52515
52516             return selection
52517                 // assign 'new-password' even for non-password fields to prevent browsers (Chrome) ignoring 'off'
52518                 .attr('autocomplete', 'new-password')
52519                 .attr('autocorrect', 'off')
52520                 .attr('autocapitalize', 'off')
52521                 .attr('spellcheck', isText ? 'true' : 'false');
52522         }
52523
52524
52525         // https://stackoverflow.com/questions/194846/is-there-any-kind-of-hash-code-function-in-javascript
52526         // https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
52527         function utilHashcode(str) {
52528             var hash = 0;
52529             if (str.length === 0) {
52530                 return hash;
52531             }
52532             for (var i = 0; i < str.length; i++) {
52533                 var char = str.charCodeAt(i);
52534                 hash = ((hash << 5) - hash) + char;
52535                 hash = hash & hash; // Convert to 32bit integer
52536             }
52537             return hash;
52538         }
52539
52540         // returns version of `str` with all runs of special characters replaced by `_`;
52541         // suitable for HTML ids, classes, selectors, etc.
52542         function utilSafeClassName(str) {
52543             return str.toLowerCase().replace(/[^a-z0-9]+/g, '_');
52544         }
52545
52546         function utilCleanTags(tags) {
52547             var out = {};
52548             for (var k in tags) {
52549                 if (!k) { continue; }
52550                 var v = tags[k];
52551                 if (v !== undefined) {
52552                     out[k] = cleanValue(k, v);
52553                 }
52554             }
52555
52556             return out;
52557
52558
52559             function cleanValue(k, v) {
52560                 function keepSpaces(k) {
52561                     return /_hours|_times|:conditional$/.test(k);
52562                 }
52563
52564                 function skip(k) {
52565                     return /^(description|note|fixme)$/.test(k);
52566                 }
52567
52568                 if (skip(k)) { return v; }
52569
52570                 var cleaned = v
52571                     .split(';')
52572                     .map(function(s) { return s.trim(); })
52573                     .join(keepSpaces(k) ? '; ' : ';');
52574
52575                 // The code below is not intended to validate websites and emails.
52576                 // It is only intended to prevent obvious copy-paste errors. (#2323)
52577                 // clean website- and email-like tags
52578                 if (k.indexOf('website') !== -1 ||
52579                     k.indexOf('email') !== -1 ||
52580                     cleaned.indexOf('http') === 0) {
52581                     cleaned = cleaned
52582                         .replace(/[\u200B-\u200F\uFEFF]/g, '');  // strip LRM and other zero width chars
52583
52584                 }
52585
52586                 return cleaned;
52587             }
52588         }
52589
52590         // Like selection.property('value', ...), but avoids no-op value sets,
52591         // which can result in layout/repaint thrashing in some situations.
52592         function utilGetSetValue(selection, value) {
52593             function d3_selection_value(value) {
52594                 function valueNull() {
52595                     delete this.value;
52596                 }
52597
52598                 function valueConstant() {
52599                     if (this.value !== value) {
52600                         this.value = value;
52601                     }
52602                 }
52603
52604                 function valueFunction() {
52605                     var x = value.apply(this, arguments);
52606                     if (x == null) {
52607                         delete this.value;
52608                     } else if (this.value !== x) {
52609                         this.value = x;
52610                     }
52611                 }
52612
52613                 return value == null
52614                     ? valueNull : (typeof value === 'function'
52615                     ? valueFunction : valueConstant);
52616             }
52617
52618             if (arguments.length === 1) {
52619                 return selection.property('value');
52620             }
52621
52622             return selection.each(d3_selection_value(value));
52623         }
52624
52625         function utilKeybinding(namespace) {
52626             var _keybindings = {};
52627
52628
52629             function testBindings(isCapturing) {
52630                 var didMatch = false;
52631                 var bindings = Object.keys(_keybindings).map(function(id) { return _keybindings[id]; });
52632                 var i, binding;
52633
52634                 // Most key shortcuts will accept either lower or uppercase ('h' or 'H'),
52635                 // so we don't strictly match on the shift key, but we prioritize
52636                 // shifted keybindings first, and fallback to unshifted only if no match.
52637                 // (This lets us differentiate between '←'/'⇧←' or '⌘Z'/'⌘⇧Z')
52638
52639                 // priority match shifted keybindings first
52640                 for (i = 0; i < bindings.length; i++) {
52641                     binding = bindings[i];
52642                     if (!binding.event.modifiers.shiftKey) { continue; }  // no shift
52643                     if (!!binding.capture !== isCapturing) { continue; }
52644                     if (matches(binding, true)) {
52645                         binding.callback();
52646                         didMatch = true;
52647                     }
52648                 }
52649
52650                 // then unshifted keybindings
52651                 if (didMatch) { return; }
52652                 for (i = 0; i < bindings.length; i++) {
52653                     binding = bindings[i];
52654                     if (binding.event.modifiers.shiftKey) { continue; }   // shift
52655                     if (!!binding.capture !== isCapturing) { continue; }
52656                     if (matches(binding, false)) {
52657                         binding.callback();
52658                     }
52659                 }
52660
52661
52662                 function matches(binding, testShift) {
52663                     var event$1 = event;
52664                     var isMatch = false;
52665                     var tryKeyCode = true;
52666
52667                     // Prefer a match on `KeyboardEvent.key`
52668                     if (event$1.key !== undefined) {
52669                         tryKeyCode = (event$1.key.charCodeAt(0) > 255);  // outside ISO-Latin-1
52670                         isMatch = true;
52671
52672                         if (binding.event.key === undefined) {
52673                             isMatch = false;
52674                         } else if (Array.isArray(binding.event.key)) {
52675                             if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$1.key.toLowerCase()) === -1)
52676                                 { isMatch = false; }
52677                         } else {
52678                             if (event$1.key.toLowerCase() !== binding.event.key.toLowerCase())
52679                                 { isMatch = false; }
52680                         }
52681                     }
52682
52683                     // Fallback match on `KeyboardEvent.keyCode`, can happen if:
52684                     // - browser doesn't support `KeyboardEvent.key`
52685                     // - `KeyboardEvent.key` is outside ISO-Latin-1 range (cyrillic?)
52686                     if (!isMatch && tryKeyCode) {
52687                         isMatch = (event$1.keyCode === binding.event.keyCode);
52688                     }
52689
52690                     if (!isMatch) { return false; }
52691
52692                     // test modifier keys
52693                     if (!(event$1.ctrlKey && event$1.altKey)) {  // if both are set, assume AltGr and skip it - #4096
52694                         if (event$1.ctrlKey !== binding.event.modifiers.ctrlKey) { return false; }
52695                         if (event$1.altKey !== binding.event.modifiers.altKey) { return false; }
52696                     }
52697                     if (event$1.metaKey !== binding.event.modifiers.metaKey) { return false; }
52698                     if (testShift && event$1.shiftKey !== binding.event.modifiers.shiftKey) { return false; }
52699
52700                     return true;
52701                 }
52702             }
52703
52704
52705             function capture() {
52706                 testBindings(true);
52707             }
52708
52709
52710             function bubble() {
52711                 var tagName = d3_select(event.target).node().tagName;
52712                 if (tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') {
52713                     return;
52714                 }
52715                 testBindings(false);
52716             }
52717
52718
52719             function keybinding(selection) {
52720                 selection = selection || d3_select(document);
52721                 selection.on('keydown.capture.' + namespace, capture, true);
52722                 selection.on('keydown.bubble.' + namespace, bubble, false);
52723                 return keybinding;
52724             }
52725
52726             // was: keybinding.off()
52727             keybinding.unbind = function(selection) {
52728                 _keybindings = [];
52729                 selection = selection || d3_select(document);
52730                 selection.on('keydown.capture.' + namespace, null);
52731                 selection.on('keydown.bubble.' + namespace, null);
52732                 return keybinding;
52733             };
52734
52735
52736             keybinding.clear = function() {
52737                 _keybindings = {};
52738                 return keybinding;
52739             };
52740
52741
52742             // Remove one or more keycode bindings.
52743             keybinding.off = function(codes, capture) {
52744                 var arr = utilArrayUniq([].concat(codes));
52745
52746                 for (var i = 0; i < arr.length; i++) {
52747                     var id = arr[i] + (capture ? '-capture' : '-bubble');
52748                     delete _keybindings[id];
52749                 }
52750                 return keybinding;
52751             };
52752
52753
52754             // Add one or more keycode bindings.
52755             keybinding.on = function(codes, callback, capture) {
52756                 if (typeof callback !== 'function') {
52757                     return keybinding.off(codes, capture);
52758                 }
52759
52760                 var arr = utilArrayUniq([].concat(codes));
52761
52762                 for (var i = 0; i < arr.length; i++) {
52763                     var id = arr[i] + (capture ? '-capture' : '-bubble');
52764                     var binding = {
52765                         id: id,
52766                         capture: capture,
52767                         callback: callback,
52768                         event: {
52769                             key: undefined,  // preferred
52770                             keyCode: 0,      // fallback
52771                             modifiers: {
52772                                 shiftKey: false,
52773                                 ctrlKey: false,
52774                                 altKey: false,
52775                                 metaKey: false
52776                             }
52777                         }
52778                     };
52779
52780                     if (_keybindings[id]) {
52781                         console.warn('warning: duplicate keybinding for "' + id + '"'); // eslint-disable-line no-console
52782                     }
52783
52784                     _keybindings[id] = binding;
52785
52786                     var matches = arr[i].toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g);
52787                     for (var j = 0; j < matches.length; j++) {
52788                         // Normalise matching errors
52789                         if (matches[j] === '++') { matches[j] = '+'; }
52790
52791                         if (matches[j] in utilKeybinding.modifierCodes) {
52792                             var prop = utilKeybinding.modifierProperties[utilKeybinding.modifierCodes[matches[j]]];
52793                             binding.event.modifiers[prop] = true;
52794                         } else {
52795                             binding.event.key = utilKeybinding.keys[matches[j]] || matches[j];
52796                             if (matches[j] in utilKeybinding.keyCodes) {
52797                                 binding.event.keyCode = utilKeybinding.keyCodes[matches[j]];
52798                             }
52799                         }
52800                     }
52801                 }
52802
52803                 return keybinding;
52804             };
52805
52806
52807             return keybinding;
52808         }
52809
52810
52811         /*
52812          * See https://github.com/keithamus/jwerty
52813          */
52814
52815         utilKeybinding.modifierCodes = {
52816             // Shift key, ⇧
52817             '⇧': 16, shift: 16,
52818             // CTRL key, on Mac: ⌃
52819             '⌃': 17, ctrl: 17,
52820             // ALT key, on Mac: ⌥ (Alt)
52821             '⌥': 18, alt: 18, option: 18,
52822             // META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super)
52823             '⌘': 91, meta: 91, cmd: 91, 'super': 91, win: 91
52824         };
52825
52826         utilKeybinding.modifierProperties = {
52827             16: 'shiftKey',
52828             17: 'ctrlKey',
52829             18: 'altKey',
52830             91: 'metaKey'
52831         };
52832
52833         utilKeybinding.keys = {
52834             // Backspace key, on Mac: ⌫ (Backspace)
52835             '⌫': 'Backspace', backspace: 'Backspace',
52836             // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
52837             '⇥': 'Tab', '⇆': 'Tab', tab: 'Tab',
52838             // Return key, ↩
52839             '↩': 'Enter', 'return': 'Enter', enter: 'Enter', '⌅': 'Enter',
52840             // Pause/Break key
52841             'pause': 'Pause', 'pause-break': 'Pause',
52842             // Caps Lock key, ⇪
52843             '⇪': 'CapsLock', caps: 'CapsLock', 'caps-lock': 'CapsLock',
52844             // Escape key, on Mac: ⎋, on Windows: Esc
52845             '⎋': ['Escape', 'Esc'], escape: ['Escape', 'Esc'], esc: ['Escape', 'Esc'],
52846             // Space key
52847             space: [' ', 'Spacebar'],
52848             // Page-Up key, or pgup, on Mac: ↖
52849             '↖': 'PageUp', pgup: 'PageUp', 'page-up': 'PageUp',
52850             // Page-Down key, or pgdown, on Mac: ↘
52851             '↘': 'PageDown', pgdown: 'PageDown', 'page-down': 'PageDown',
52852             // END key, on Mac: ⇟
52853             '⇟': 'End', end: 'End',
52854             // HOME key, on Mac: ⇞
52855             '⇞': 'Home', home: 'Home',
52856             // Insert key, or ins
52857             ins: 'Insert', insert: 'Insert',
52858             // Delete key, on Mac: ⌦ (Delete)
52859             '⌦': ['Delete', 'Del'], del: ['Delete', 'Del'], 'delete': ['Delete', 'Del'],
52860             // Left Arrow Key, or ←
52861             '←': ['ArrowLeft', 'Left'], left: ['ArrowLeft', 'Left'], 'arrow-left': ['ArrowLeft', 'Left'],
52862             // Up Arrow Key, or ↑
52863             '↑': ['ArrowUp', 'Up'], up: ['ArrowUp', 'Up'], 'arrow-up': ['ArrowUp', 'Up'],
52864             // Right Arrow Key, or →
52865             '→': ['ArrowRight', 'Right'], right: ['ArrowRight', 'Right'], 'arrow-right': ['ArrowRight', 'Right'],
52866             // Up Arrow Key, or ↓
52867             '↓': ['ArrowDown', 'Down'], down: ['ArrowDown', 'Down'], 'arrow-down': ['ArrowDown', 'Down'],
52868             // odities, stuff for backward compatibility (browsers and code):
52869             // Num-Multiply, or *
52870             '*': ['*', 'Multiply'], star: ['*', 'Multiply'], asterisk: ['*', 'Multiply'], multiply: ['*', 'Multiply'],
52871             // Num-Plus or +
52872             '+': ['+', 'Add'], 'plus': ['+', 'Add'],
52873             // Num-Subtract, or -
52874             '-': ['-', 'Subtract'], subtract: ['-', 'Subtract'], 'dash': ['-', 'Subtract'],
52875             // Semicolon
52876             semicolon: ';',
52877             // = or equals
52878             equals: '=',
52879             // Comma, or ,
52880             comma: ',',
52881             // Period, or ., or full-stop
52882             period: '.', 'full-stop': '.',
52883             // Slash, or /, or forward-slash
52884             slash: '/', 'forward-slash': '/',
52885             // Tick, or `, or back-quote
52886             tick: '`', 'back-quote': '`',
52887             // Open bracket, or [
52888             'open-bracket': '[',
52889             // Back slash, or \
52890             'back-slash': '\\',
52891             // Close backet, or ]
52892             'close-bracket': ']',
52893             // Apostrophe, or Quote, or '
52894             quote: '\'', apostrophe: '\'',
52895             // NUMPAD 0-9
52896             'num-0': '0',
52897             'num-1': '1',
52898             'num-2': '2',
52899             'num-3': '3',
52900             'num-4': '4',
52901             'num-5': '5',
52902             'num-6': '6',
52903             'num-7': '7',
52904             'num-8': '8',
52905             'num-9': '9',
52906             // F1-F25
52907             f1: 'F1',
52908             f2: 'F2',
52909             f3: 'F3',
52910             f4: 'F4',
52911             f5: 'F5',
52912             f6: 'F6',
52913             f7: 'F7',
52914             f8: 'F8',
52915             f9: 'F9',
52916             f10: 'F10',
52917             f11: 'F11',
52918             f12: 'F12',
52919             f13: 'F13',
52920             f14: 'F14',
52921             f15: 'F15',
52922             f16: 'F16',
52923             f17: 'F17',
52924             f18: 'F18',
52925             f19: 'F19',
52926             f20: 'F20',
52927             f21: 'F21',
52928             f22: 'F22',
52929             f23: 'F23',
52930             f24: 'F24',
52931             f25: 'F25'
52932         };
52933
52934         utilKeybinding.keyCodes = {
52935             // Backspace key, on Mac: ⌫ (Backspace)
52936             '⌫': 8, backspace: 8,
52937             // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
52938             '⇥': 9, '⇆': 9, tab: 9,
52939             // Return key, ↩
52940             '↩': 13, 'return': 13, enter: 13, '⌅': 13,
52941             // Pause/Break key
52942             'pause': 19, 'pause-break': 19,
52943             // Caps Lock key, ⇪
52944             '⇪': 20, caps: 20, 'caps-lock': 20,
52945             // Escape key, on Mac: ⎋, on Windows: Esc
52946             '⎋': 27, escape: 27, esc: 27,
52947             // Space key
52948             space: 32,
52949             // Page-Up key, or pgup, on Mac: ↖
52950             '↖': 33, pgup: 33, 'page-up': 33,
52951             // Page-Down key, or pgdown, on Mac: ↘
52952             '↘': 34, pgdown: 34, 'page-down': 34,
52953             // END key, on Mac: ⇟
52954             '⇟': 35, end: 35,
52955             // HOME key, on Mac: ⇞
52956             '⇞': 36, home: 36,
52957             // Insert key, or ins
52958             ins: 45, insert: 45,
52959             // Delete key, on Mac: ⌦ (Delete)
52960             '⌦': 46, del: 46, 'delete': 46,
52961             // Left Arrow Key, or ←
52962             '←': 37, left: 37, 'arrow-left': 37,
52963             // Up Arrow Key, or ↑
52964             '↑': 38, up: 38, 'arrow-up': 38,
52965             // Right Arrow Key, or →
52966             '→': 39, right: 39, 'arrow-right': 39,
52967             // Up Arrow Key, or ↓
52968             '↓': 40, down: 40, 'arrow-down': 40,
52969             // odities, printing characters that come out wrong:
52970             // Firefox Equals
52971             'ffequals': 61,
52972             // Num-Multiply, or *
52973             '*': 106, star: 106, asterisk: 106, multiply: 106,
52974             // Num-Plus or +
52975             '+': 107, 'plus': 107,
52976             // Num-Subtract, or -
52977             '-': 109, subtract: 109,
52978             // Firefox Plus
52979             'ffplus': 171,
52980             // Firefox Minus
52981             'ffminus': 173,
52982             // Semicolon
52983             ';': 186, semicolon: 186,
52984             // = or equals
52985             '=': 187, 'equals': 187,
52986             // Comma, or ,
52987             ',': 188, comma: 188,
52988             // Dash / Underscore key
52989             'dash': 189,
52990             // Period, or ., or full-stop
52991             '.': 190, period: 190, 'full-stop': 190,
52992             // Slash, or /, or forward-slash
52993             '/': 191, slash: 191, 'forward-slash': 191,
52994             // Tick, or `, or back-quote
52995             '`': 192, tick: 192, 'back-quote': 192,
52996             // Open bracket, or [
52997             '[': 219, 'open-bracket': 219,
52998             // Back slash, or \
52999             '\\': 220, 'back-slash': 220,
53000             // Close backet, or ]
53001             ']': 221, 'close-bracket': 221,
53002             // Apostrophe, or Quote, or '
53003             '\'': 222, quote: 222, apostrophe: 222
53004         };
53005
53006         // NUMPAD 0-9
53007         var i$2 = 95, n = 0;
53008         while (++i$2 < 106) {
53009             utilKeybinding.keyCodes['num-' + n] = i$2;
53010             ++n;
53011         }
53012
53013         // 0-9
53014         i$2 = 47; n = 0;
53015         while (++i$2 < 58) {
53016             utilKeybinding.keyCodes[n] = i$2;
53017             ++n;
53018         }
53019
53020         // F1-F25
53021         i$2 = 111; n = 1;
53022         while (++i$2 < 136) {
53023             utilKeybinding.keyCodes['f' + n] = i$2;
53024             ++n;
53025         }
53026
53027         // a-z
53028         i$2 = 64;
53029         while (++i$2 < 91) {
53030             utilKeybinding.keyCodes[String.fromCharCode(i$2).toLowerCase()] = i$2;
53031         }
53032
53033         function utilObjectOmit(obj, omitKeys) {
53034             return Object.keys(obj).reduce(function(result, key) {
53035                 if (omitKeys.indexOf(key) === -1) {
53036                     result[key] = obj[key];  // keep
53037                 }
53038                 return result;
53039             }, {});
53040         }
53041
53042         // Copies a variable number of methods from source to target.
53043         function utilRebind(target, source) {
53044             var arguments$1 = arguments;
53045
53046             var i = 1, n = arguments.length, method;
53047             while (++i < n) {
53048                 target[method = arguments$1[i]] = d3_rebind(target, source, source[method]);
53049             }
53050             return target;
53051         }
53052
53053         // Method is assumed to be a standard D3 getter-setter:
53054         // If passed with no arguments, gets the value.
53055         // If passed with arguments, sets the value and returns the target.
53056         function d3_rebind(target, source, method) {
53057             return function() {
53058                 var value = method.apply(source, arguments);
53059                 return value === source ? target : value;
53060             };
53061         }
53062
53063         // A per-domain session mutex backed by a cookie and dead man's
53064         // switch. If the session crashes, the mutex will auto-release
53065         // after 5 seconds.
53066
53067         // This accepts a string and returns an object that complies with utilSessionMutexType
53068         function utilSessionMutex(name) {
53069             var mutex = {};
53070             var intervalID;
53071
53072             function renew() {
53073                 var expires = new Date();
53074                 expires.setSeconds(expires.getSeconds() + 5);
53075                 document.cookie = name + '=1; expires=' + expires.toUTCString();
53076             }
53077
53078             mutex.lock = function () {
53079                 if (intervalID) { return true; }
53080                 var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1');
53081                 if (cookie) { return false; }
53082                 renew();
53083                 intervalID = window.setInterval(renew, 4000);
53084                 return true;
53085             };
53086
53087             mutex.unlock = function () {
53088                 if (!intervalID) { return; }
53089                 document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT';
53090                 clearInterval(intervalID);
53091                 intervalID = null;
53092             };
53093
53094             mutex.locked = function () {
53095                 return !!intervalID;
53096             };
53097
53098             return mutex;
53099         }
53100
53101         function utilTiler() {
53102             var _size = [256, 256];
53103             var _scale = 256;
53104             var _tileSize = 256;
53105             var _zoomExtent = [0, 20];
53106             var _translate = [_size[0] / 2, _size[1] / 2];
53107             var _margin = 0;
53108             var _skipNullIsland = false;
53109
53110
53111             function clamp(num, min, max) {
53112                 return Math.max(min, Math.min(num, max));
53113             }
53114
53115
53116             function nearNullIsland(tile) {
53117                 var x = tile[0];
53118                 var y = tile[1];
53119                 var z = tile[2];
53120                 if (z >= 7) {
53121                     var center = Math.pow(2, z - 1);
53122                     var width = Math.pow(2, z - 6);
53123                     var min = center - (width / 2);
53124                     var max = center + (width / 2) - 1;
53125                     return x >= min && x <= max && y >= min && y <= max;
53126                 }
53127                 return false;
53128             }
53129
53130
53131             function tiler() {
53132                 var z = geoScaleToZoom(_scale / (2 * Math.PI), _tileSize);
53133                 var z0 = clamp(Math.round(z), _zoomExtent[0], _zoomExtent[1]);
53134                 var tileMin = 0;
53135                 var tileMax = Math.pow(2, z0) - 1;
53136                 var log2ts = Math.log(_tileSize) * Math.LOG2E;
53137                 var k = Math.pow(2, z - z0 + log2ts);
53138                 var origin = [
53139                     (_translate[0] - _scale / 2) / k,
53140                     (_translate[1] - _scale / 2) / k
53141                 ];
53142
53143                 var cols = d3_range(
53144                     clamp(Math.floor(-origin[0]) - _margin,               tileMin, tileMax + 1),
53145                     clamp(Math.ceil(_size[0] / k - origin[0]) + _margin,  tileMin, tileMax + 1)
53146                 );
53147                 var rows = d3_range(
53148                     clamp(Math.floor(-origin[1]) - _margin,               tileMin, tileMax + 1),
53149                     clamp(Math.ceil(_size[1] / k - origin[1]) + _margin,  tileMin, tileMax + 1)
53150                 );
53151
53152                 var tiles = [];
53153                 for (var i = 0; i < rows.length; i++) {
53154                     var y = rows[i];
53155                     for (var j = 0; j < cols.length; j++) {
53156                         var x = cols[j];
53157
53158                         if (i >= _margin && i <= rows.length - _margin &&
53159                             j >= _margin && j <= cols.length - _margin) {
53160                             tiles.unshift([x, y, z0]);  // tiles in view at beginning
53161                         } else {
53162                             tiles.push([x, y, z0]);     // tiles in margin at the end
53163                         }
53164                     }
53165                 }
53166
53167                 tiles.translate = origin;
53168                 tiles.scale = k;
53169
53170                 return tiles;
53171             }
53172
53173
53174             /**
53175              * getTiles() returns an array of tiles that cover the map view
53176              */
53177             tiler.getTiles = function(projection) {
53178                 var origin = [
53179                     projection.scale() * Math.PI - projection.translate()[0],
53180                     projection.scale() * Math.PI - projection.translate()[1]
53181                 ];
53182
53183                 this
53184                     .size(projection.clipExtent()[1])
53185                     .scale(projection.scale() * 2 * Math.PI)
53186                     .translate(projection.translate());
53187
53188                 var tiles = tiler();
53189                 var ts = tiles.scale;
53190
53191                 return tiles
53192                     .map(function(tile) {
53193                         if (_skipNullIsland && nearNullIsland(tile)) {
53194                             return false;
53195                         }
53196                         var x = tile[0] * ts - origin[0];
53197                         var y = tile[1] * ts - origin[1];
53198                         return {
53199                             id: tile.toString(),
53200                             xyz: tile,
53201                             extent: geoExtent(
53202                                 projection.invert([x, y + ts]),
53203                                 projection.invert([x + ts, y])
53204                             )
53205                         };
53206                     }).filter(Boolean);
53207             };
53208
53209
53210             /**
53211              * getGeoJSON() returns a FeatureCollection for debugging tiles
53212              */
53213             tiler.getGeoJSON = function(projection) {
53214                 var features = tiler.getTiles(projection).map(function(tile) {
53215                     return {
53216                         type: 'Feature',
53217                         properties: {
53218                             id: tile.id,
53219                             name: tile.id
53220                         },
53221                         geometry: {
53222                             type: 'Polygon',
53223                             coordinates: [ tile.extent.polygon() ]
53224                         }
53225                     };
53226                 });
53227
53228                 return {
53229                     type: 'FeatureCollection',
53230                     features: features
53231                 };
53232             };
53233
53234
53235             tiler.tileSize = function(val) {
53236                 if (!arguments.length) { return _tileSize; }
53237                 _tileSize = val;
53238                 return tiler;
53239             };
53240
53241
53242             tiler.zoomExtent = function(val) {
53243                 if (!arguments.length) { return _zoomExtent; }
53244                 _zoomExtent = val;
53245                 return tiler;
53246             };
53247
53248
53249             tiler.size = function(val) {
53250                 if (!arguments.length) { return _size; }
53251                 _size = val;
53252                 return tiler;
53253             };
53254
53255
53256             tiler.scale = function(val) {
53257                 if (!arguments.length) { return _scale; }
53258                 _scale = val;
53259                 return tiler;
53260             };
53261
53262
53263             tiler.translate = function(val) {
53264                 if (!arguments.length) { return _translate; }
53265                 _translate = val;
53266                 return tiler;
53267             };
53268
53269
53270             // number to extend the rows/columns beyond those covering the viewport
53271             tiler.margin = function(val) {
53272                 if (!arguments.length) { return _margin; }
53273                 _margin = +val;
53274                 return tiler;
53275             };
53276
53277
53278             tiler.skipNullIsland = function(val) {
53279                 if (!arguments.length) { return _skipNullIsland; }
53280                 _skipNullIsland = val;
53281                 return tiler;
53282             };
53283
53284
53285             return tiler;
53286         }
53287
53288         function utilTriggerEvent(target, type) {
53289             target.each(function() {
53290                 var evt = document.createEvent('HTMLEvents');
53291                 evt.initEvent(type, true, true);
53292                 this.dispatchEvent(evt);
53293             });
53294         }
53295
53296         function osmEntity(attrs) {
53297             // For prototypal inheritance.
53298             if (this instanceof osmEntity) { return; }
53299
53300             // Create the appropriate subtype.
53301             if (attrs && attrs.type) {
53302                 return osmEntity[attrs.type].apply(this, arguments);
53303             } else if (attrs && attrs.id) {
53304                 return osmEntity[osmEntity.id.type(attrs.id)].apply(this, arguments);
53305             }
53306
53307             // Initialize a generic Entity (used only in tests).
53308             return (new osmEntity()).initialize(arguments);
53309         }
53310
53311
53312         osmEntity.id = function(type) {
53313             return osmEntity.id.fromOSM(type, osmEntity.id.next[type]--);
53314         };
53315
53316
53317         osmEntity.id.next = {
53318             changeset: -1, node: -1, way: -1, relation: -1
53319         };
53320
53321
53322         osmEntity.id.fromOSM = function(type, id) {
53323             return type[0] + id;
53324         };
53325
53326
53327         osmEntity.id.toOSM = function(id) {
53328             return id.slice(1);
53329         };
53330
53331
53332         osmEntity.id.type = function(id) {
53333             return { 'c': 'changeset', 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]];
53334         };
53335
53336
53337         // A function suitable for use as the second argument to d3.selection#data().
53338         osmEntity.key = function(entity) {
53339             return entity.id + 'v' + (entity.v || 0);
53340         };
53341
53342         var _deprecatedTagValuesByKey;
53343
53344         osmEntity.deprecatedTagValuesByKey = function() {
53345             if (!_deprecatedTagValuesByKey) {
53346                 _deprecatedTagValuesByKey = {};
53347                 dataDeprecated.forEach(function(d) {
53348                     var oldKeys = Object.keys(d.old);
53349                     if (oldKeys.length === 1) {
53350                         var oldKey = oldKeys[0];
53351                         var oldValue = d.old[oldKey];
53352                         if (oldValue !== '*') {
53353                             if (!_deprecatedTagValuesByKey[oldKey]) {
53354                                 _deprecatedTagValuesByKey[oldKey] = [oldValue];
53355                             } else {
53356                                 _deprecatedTagValuesByKey[oldKey].push(oldValue);
53357                             }
53358                         }
53359                     }
53360                 });
53361             }
53362             return _deprecatedTagValuesByKey;
53363         };
53364
53365
53366         osmEntity.prototype = {
53367
53368             tags: {},
53369
53370
53371             initialize: function(sources) {
53372                 for (var i = 0; i < sources.length; ++i) {
53373                     var source = sources[i];
53374                     for (var prop in source) {
53375                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
53376                             if (source[prop] === undefined) {
53377                                 delete this[prop];
53378                             } else {
53379                                 this[prop] = source[prop];
53380                             }
53381                         }
53382                     }
53383                 }
53384
53385                 if (!this.id && this.type) {
53386                     this.id = osmEntity.id(this.type);
53387                 }
53388                 if (!this.hasOwnProperty('visible')) {
53389                     this.visible = true;
53390                 }
53391
53392                 return this;
53393             },
53394
53395
53396             copy: function(resolver, copies) {
53397                 if (copies[this.id])
53398                     { return copies[this.id]; }
53399
53400                 var copy = osmEntity(this, { id: undefined, user: undefined, version: undefined });
53401                 copies[this.id] = copy;
53402
53403                 return copy;
53404             },
53405
53406
53407             osmId: function() {
53408                 return osmEntity.id.toOSM(this.id);
53409             },
53410
53411
53412             isNew: function() {
53413                 return this.osmId() < 0;
53414             },
53415
53416
53417             update: function(attrs) {
53418                 return osmEntity(this, attrs, { v: 1 + (this.v || 0) });
53419             },
53420
53421
53422             mergeTags: function(tags) {
53423                 var merged = Object.assign({}, this.tags);   // shallow copy
53424                 var changed = false;
53425                 for (var k in tags) {
53426                     var t1 = merged[k];
53427                     var t2 = tags[k];
53428                     if (!t1) {
53429                         changed = true;
53430                         merged[k] = t2;
53431                     } else if (t1 !== t2) {
53432                         changed = true;
53433                         merged[k] = utilArrayUnion(t1.split(/;\s*/), t2.split(/;\s*/)).join(';');
53434                     }
53435                 }
53436                 return changed ? this.update({ tags: merged }) : this;
53437             },
53438
53439
53440             intersects: function(extent, resolver) {
53441                 return this.extent(resolver).intersects(extent);
53442             },
53443
53444
53445             hasNonGeometryTags: function() {
53446                 return Object.keys(this.tags).some(function(k) { return k !== 'area'; });
53447             },
53448
53449             hasParentRelations: function(resolver) {
53450                 return resolver.parentRelations(this).length > 0;
53451             },
53452
53453             hasInterestingTags: function() {
53454                 return Object.keys(this.tags).some(osmIsInterestingTag);
53455             },
53456
53457             hasWikidata: function() {
53458                 return !!this.tags.wikidata || !!this.tags['brand:wikidata'];
53459             },
53460
53461             isHighwayIntersection: function() {
53462                 return false;
53463             },
53464
53465             isDegenerate: function() {
53466                 return true;
53467             },
53468
53469             deprecatedTags: function() {
53470                 var tags = this.tags;
53471
53472                 // if there are no tags, none can be deprecated
53473                 if (Object.keys(tags).length === 0) { return []; }
53474
53475                 var deprecated = [];
53476                 dataDeprecated.forEach(function(d) {
53477                     var oldKeys = Object.keys(d.old);
53478                     var matchesDeprecatedTags = oldKeys.every(function(oldKey) {
53479                         if (!tags[oldKey]) { return false; }
53480                         if (d.old[oldKey] === '*') { return true; }
53481
53482                         var vals = tags[oldKey].split(';').filter(Boolean);
53483                         if (vals.length === 0) {
53484                             return false;
53485                         } else if (vals.length > 1) {
53486                             return vals.indexOf(d.old[oldKey]) !== -1;
53487                         } else {
53488                             if (tags[oldKey] === d.old[oldKey]) {
53489                                 if (d.replace && d.old[oldKey] === d.replace[oldKey]) {
53490                                     var replaceKeys = Object.keys(d.replace);
53491                                     return !replaceKeys.every(function(replaceKey) {
53492                                         return tags[replaceKey] === d.replace[replaceKey];
53493                                     });
53494                                 } else {
53495                                     return true;
53496                                 }
53497                             }
53498                         }
53499                         return false;
53500                     });
53501                     if (matchesDeprecatedTags) {
53502                         deprecated.push(d);
53503                     }
53504                 });
53505
53506                 return deprecated;
53507             }
53508         };
53509
53510         function osmLanes(entity) {
53511             if (entity.type !== 'way') { return null; }
53512             if (!entity.tags.highway) { return null; }
53513
53514             var tags = entity.tags;
53515             var isOneWay = entity.isOneWay();
53516             var laneCount = getLaneCount(tags, isOneWay);
53517             var maxspeed = parseMaxspeed(tags);
53518
53519             var laneDirections = parseLaneDirections(tags, isOneWay, laneCount);
53520             var forward = laneDirections.forward;
53521             var backward = laneDirections.backward;
53522             var bothways = laneDirections.bothways;
53523
53524             // parse the piped string 'x|y|z' format
53525             var turnLanes = {};
53526             turnLanes.unspecified = parseTurnLanes(tags['turn:lanes']);
53527             turnLanes.forward = parseTurnLanes(tags['turn:lanes:forward']);
53528             turnLanes.backward = parseTurnLanes(tags['turn:lanes:backward']);
53529
53530             var maxspeedLanes = {};
53531             maxspeedLanes.unspecified = parseMaxspeedLanes(tags['maxspeed:lanes'], maxspeed);
53532             maxspeedLanes.forward = parseMaxspeedLanes(tags['maxspeed:lanes:forward'], maxspeed);
53533             maxspeedLanes.backward = parseMaxspeedLanes(tags['maxspeed:lanes:backward'], maxspeed);
53534
53535             var psvLanes = {};
53536             psvLanes.unspecified = parseMiscLanes(tags['psv:lanes']);
53537             psvLanes.forward = parseMiscLanes(tags['psv:lanes:forward']);
53538             psvLanes.backward = parseMiscLanes(tags['psv:lanes:backward']);
53539
53540             var busLanes = {};
53541             busLanes.unspecified = parseMiscLanes(tags['bus:lanes']);
53542             busLanes.forward = parseMiscLanes(tags['bus:lanes:forward']);
53543             busLanes.backward = parseMiscLanes(tags['bus:lanes:backward']);
53544
53545             var taxiLanes = {};
53546             taxiLanes.unspecified = parseMiscLanes(tags['taxi:lanes']);
53547             taxiLanes.forward = parseMiscLanes(tags['taxi:lanes:forward']);
53548             taxiLanes.backward = parseMiscLanes(tags['taxi:lanes:backward']);
53549
53550             var hovLanes = {};
53551             hovLanes.unspecified = parseMiscLanes(tags['hov:lanes']);
53552             hovLanes.forward = parseMiscLanes(tags['hov:lanes:forward']);
53553             hovLanes.backward = parseMiscLanes(tags['hov:lanes:backward']);
53554
53555             var hgvLanes = {};
53556             hgvLanes.unspecified = parseMiscLanes(tags['hgv:lanes']);
53557             hgvLanes.forward = parseMiscLanes(tags['hgv:lanes:forward']);
53558             hgvLanes.backward = parseMiscLanes(tags['hgv:lanes:backward']);
53559
53560             var bicyclewayLanes = {};
53561             bicyclewayLanes.unspecified = parseBicycleWay(tags['bicycleway:lanes']);
53562             bicyclewayLanes.forward = parseBicycleWay(tags['bicycleway:lanes:forward']);
53563             bicyclewayLanes.backward = parseBicycleWay(tags['bicycleway:lanes:backward']);
53564
53565             var lanesObj = {
53566                 forward: [],
53567                 backward: [],
53568                 unspecified: []
53569             };
53570
53571             // map forward/backward/unspecified of each lane type to lanesObj
53572             mapToLanesObj(lanesObj, turnLanes, 'turnLane');
53573             mapToLanesObj(lanesObj, maxspeedLanes, 'maxspeed');
53574             mapToLanesObj(lanesObj, psvLanes, 'psv');
53575             mapToLanesObj(lanesObj, busLanes, 'bus');
53576             mapToLanesObj(lanesObj, taxiLanes, 'taxi');
53577             mapToLanesObj(lanesObj, hovLanes, 'hov');
53578             mapToLanesObj(lanesObj, hgvLanes, 'hgv');
53579             mapToLanesObj(lanesObj, bicyclewayLanes, 'bicycleway');
53580
53581             return {
53582                 metadata: {
53583                     count: laneCount,
53584                     oneway: isOneWay,
53585                     forward: forward,
53586                     backward: backward,
53587                     bothways: bothways,
53588                     turnLanes: turnLanes,
53589                     maxspeed: maxspeed,
53590                     maxspeedLanes: maxspeedLanes,
53591                     psvLanes: psvLanes,
53592                     busLanes: busLanes,
53593                     taxiLanes: taxiLanes,
53594                     hovLanes: hovLanes,
53595                     hgvLanes: hgvLanes,
53596                     bicyclewayLanes: bicyclewayLanes
53597                 },
53598                 lanes: lanesObj
53599             };
53600         }
53601
53602
53603         function getLaneCount(tags, isOneWay) {
53604             var count;
53605             if (tags.lanes) {
53606                 count = parseInt(tags.lanes, 10);
53607                 if (count > 0) {
53608                     return count;
53609                 }
53610             }
53611
53612
53613             switch (tags.highway) {
53614                 case 'trunk':
53615                 case 'motorway':
53616                     count = isOneWay ? 2 : 4;
53617                     break;
53618                 default:
53619                     count = isOneWay ? 1 : 2;
53620                     break;
53621             }
53622
53623             return count;
53624         }
53625
53626
53627         function parseMaxspeed(tags) {
53628             var maxspeed = tags.maxspeed;
53629             if (!maxspeed) { return; }
53630
53631             var maxspeedRegex = /^([0-9][\.0-9]+?)(?:[ ]?(?:km\/h|kmh|kph|mph|knots))?$/;
53632             if (!maxspeedRegex.test(maxspeed)) { return; }
53633
53634             return parseInt(maxspeed, 10);
53635         }
53636
53637
53638         function parseLaneDirections(tags, isOneWay, laneCount) {
53639             var forward = parseInt(tags['lanes:forward'], 10);
53640             var backward = parseInt(tags['lanes:backward'], 10);
53641             var bothways = parseInt(tags['lanes:both_ways'], 10) > 0 ? 1 : 0;
53642
53643             if (parseInt(tags.oneway, 10) === -1) {
53644                 forward = 0;
53645                 bothways = 0;
53646                 backward = laneCount;
53647             }
53648             else if (isOneWay) {
53649                 forward = laneCount;
53650                 bothways = 0;
53651                 backward = 0;
53652             }
53653             else if (isNaN(forward) && isNaN(backward)) {
53654                 backward = Math.floor((laneCount - bothways) / 2);
53655                 forward = laneCount - bothways - backward;
53656             }
53657             else if (isNaN(forward)) {
53658                 if (backward > laneCount - bothways) {
53659                     backward = laneCount - bothways;
53660                 }
53661                 forward = laneCount - bothways - backward;
53662             }
53663             else if (isNaN(backward)) {
53664                 if (forward > laneCount - bothways) {
53665                     forward = laneCount - bothways;
53666                 }
53667                 backward = laneCount - bothways - forward;
53668             }
53669             return {
53670                 forward: forward,
53671                 backward: backward,
53672                 bothways: bothways
53673             };
53674         }
53675
53676
53677         function parseTurnLanes(tag){
53678             if (!tag) { return; }
53679
53680             var validValues = [
53681                 'left', 'slight_left', 'sharp_left', 'through', 'right', 'slight_right',
53682                 'sharp_right', 'reverse', 'merge_to_left', 'merge_to_right', 'none'
53683             ];
53684
53685             return tag.split('|')
53686                 .map(function (s) {
53687                     if (s === '') { s = 'none'; }
53688                     return s.split(';')
53689                         .map(function (d) {
53690                             return validValues.indexOf(d) === -1 ? 'unknown': d;
53691                         });
53692                 });
53693         }
53694
53695
53696         function parseMaxspeedLanes(tag, maxspeed) {
53697             if (!tag) { return; }
53698
53699             return tag.split('|')
53700                 .map(function (s) {
53701                     if (s === 'none') { return s; }
53702                     var m = parseInt(s, 10);
53703                     if (s === '' || m === maxspeed) { return null; }
53704                     return isNaN(m) ? 'unknown': m;
53705                 });
53706         }
53707
53708
53709         function parseMiscLanes(tag) {
53710             if (!tag) { return; }
53711
53712             var validValues = [
53713                 'yes', 'no', 'designated'
53714             ];
53715
53716             return tag.split('|')
53717                 .map(function (s) {
53718                     if (s === '') { s = 'no'; }
53719                     return validValues.indexOf(s) === -1 ? 'unknown': s;
53720                 });
53721         }
53722
53723
53724         function parseBicycleWay(tag) {
53725             if (!tag) { return; }
53726
53727             var validValues = [
53728                 'yes', 'no', 'designated', 'lane'
53729             ];
53730
53731             return tag.split('|')
53732                 .map(function (s) {
53733                     if (s === '') { s = 'no'; }
53734                     return validValues.indexOf(s) === -1 ? 'unknown': s;
53735                 });
53736         }
53737
53738
53739         function mapToLanesObj(lanesObj, data, key) {
53740             if (data.forward) { data.forward.forEach(function(l, i) {
53741                 if (!lanesObj.forward[i]) { lanesObj.forward[i] = {}; }
53742                 lanesObj.forward[i][key] = l;
53743             }); }
53744             if (data.backward) { data.backward.forEach(function(l, i) {
53745                 if (!lanesObj.backward[i]) { lanesObj.backward[i] = {}; }
53746                 lanesObj.backward[i][key] = l;
53747             }); }
53748             if (data.unspecified) { data.unspecified.forEach(function(l, i) {
53749                 if (!lanesObj.unspecified[i]) { lanesObj.unspecified[i] = {}; }
53750                 lanesObj.unspecified[i][key] = l;
53751             }); }
53752         }
53753
53754         function osmWay() {
53755             if (!(this instanceof osmWay)) {
53756                 return (new osmWay()).initialize(arguments);
53757             } else if (arguments.length) {
53758                 this.initialize(arguments);
53759             }
53760         }
53761
53762
53763         osmEntity.way = osmWay;
53764
53765         osmWay.prototype = Object.create(osmEntity.prototype);
53766
53767
53768         Object.assign(osmWay.prototype, {
53769             type: 'way',
53770             nodes: [],
53771
53772
53773             copy: function(resolver, copies) {
53774                 if (copies[this.id]) { return copies[this.id]; }
53775
53776                 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
53777
53778                 var nodes = this.nodes.map(function(id) {
53779                     return resolver.entity(id).copy(resolver, copies).id;
53780                 });
53781
53782                 copy = copy.update({ nodes: nodes });
53783                 copies[this.id] = copy;
53784
53785                 return copy;
53786             },
53787
53788
53789             extent: function(resolver) {
53790                 return resolver.transient(this, 'extent', function() {
53791                     var extent = geoExtent();
53792                     for (var i = 0; i < this.nodes.length; i++) {
53793                         var node = resolver.hasEntity(this.nodes[i]);
53794                         if (node) {
53795                             extent._extend(node.extent());
53796                         }
53797                     }
53798                     return extent;
53799                 });
53800             },
53801
53802
53803             first: function() {
53804                 return this.nodes[0];
53805             },
53806
53807
53808             last: function() {
53809                 return this.nodes[this.nodes.length - 1];
53810             },
53811
53812
53813             contains: function(node) {
53814                 return this.nodes.indexOf(node) >= 0;
53815             },
53816
53817
53818             affix: function(node) {
53819                 if (this.nodes[0] === node) { return 'prefix'; }
53820                 if (this.nodes[this.nodes.length - 1] === node) { return 'suffix'; }
53821             },
53822
53823
53824             layer: function() {
53825                 // explicit layer tag, clamp between -10, 10..
53826                 if (isFinite(this.tags.layer)) {
53827                     return Math.max(-10, Math.min(+(this.tags.layer), 10));
53828                 }
53829
53830                 // implied layer tag..
53831                 if (this.tags.covered === 'yes') { return -1; }
53832                 if (this.tags.location === 'overground') { return 1; }
53833                 if (this.tags.location === 'underground') { return -1; }
53834                 if (this.tags.location === 'underwater') { return -10; }
53835
53836                 if (this.tags.power === 'line') { return 10; }
53837                 if (this.tags.power === 'minor_line') { return 10; }
53838                 if (this.tags.aerialway) { return 10; }
53839                 if (this.tags.bridge) { return 1; }
53840                 if (this.tags.cutting) { return -1; }
53841                 if (this.tags.tunnel) { return -1; }
53842                 if (this.tags.waterway) { return -1; }
53843                 if (this.tags.man_made === 'pipeline') { return -10; }
53844                 if (this.tags.boundary) { return -10; }
53845                 return 0;
53846             },
53847
53848
53849             // the approximate width of the line based on its tags except its `width` tag
53850             impliedLineWidthMeters: function() {
53851                 var averageWidths = {
53852                     highway: { // width is for single lane
53853                         motorway: 5, motorway_link: 5, trunk: 4.5, trunk_link: 4.5,
53854                         primary: 4, secondary: 4, tertiary: 4,
53855                         primary_link: 4, secondary_link: 4, tertiary_link: 4,
53856                         unclassified: 4, road: 4, living_street: 4, bus_guideway: 4, pedestrian: 4,
53857                         residential: 3.5, service: 3.5, track: 3, cycleway: 2.5,
53858                         bridleway: 2, corridor: 2, steps: 2, path: 1.5, footway: 1.5
53859                     },
53860                     railway: { // width includes ties and rail bed, not just track gauge
53861                         rail: 2.5, light_rail: 2.5, tram: 2.5, subway: 2.5,
53862                         monorail: 2.5, funicular: 2.5, disused: 2.5, preserved: 2.5,
53863                         miniature: 1.5, narrow_gauge: 1.5
53864                     },
53865                     waterway: {
53866                         river: 50, canal: 25, stream: 5, tidal_channel: 5, fish_pass: 2.5, drain: 2.5, ditch: 1.5
53867                     }
53868                 };
53869                 for (var key in averageWidths) {
53870                     if (this.tags[key] && averageWidths[key][this.tags[key]]) {
53871                         var width = averageWidths[key][this.tags[key]];
53872                         if (key === 'highway') {
53873                             var laneCount = this.tags.lanes && parseInt(this.tags.lanes, 10);
53874                             if (!laneCount) { laneCount = this.isOneWay() ? 1 : 2; }
53875
53876                             return width * laneCount;
53877                         }
53878                         return width;
53879                     }
53880                 }
53881                 return null;
53882             },
53883
53884
53885             isOneWay: function() {
53886                 // explicit oneway tag..
53887                 var values = {
53888                     'yes': true,
53889                     '1': true,
53890                     '-1': true,
53891                     'reversible': true,
53892                     'alternating': true,
53893                     'no': false,
53894                     '0': false
53895                 };
53896                 if (values[this.tags.oneway] !== undefined) {
53897                     return values[this.tags.oneway];
53898                 }
53899
53900                 // implied oneway tag..
53901                 for (var key in this.tags) {
53902                     if (key in osmOneWayTags && (this.tags[key] in osmOneWayTags[key]))
53903                         { return true; }
53904                 }
53905                 return false;
53906             },
53907
53908             // Some identifier for tag that implies that this way is "sided",
53909             // i.e. the right side is the 'inside' (e.g. the right side of a
53910             // natural=cliff is lower).
53911             sidednessIdentifier: function() {
53912                 for (var key in this.tags) {
53913                     var value = this.tags[key];
53914                     if (key in osmRightSideIsInsideTags && (value in osmRightSideIsInsideTags[key])) {
53915                         if (osmRightSideIsInsideTags[key][value] === true) {
53916                             return key;
53917                         } else {
53918                             // if the map's value is something other than a
53919                             // literal true, we should use it so we can
53920                             // special case some keys (e.g. natural=coastline
53921                             // is handled differently to other naturals).
53922                             return osmRightSideIsInsideTags[key][value];
53923                         }
53924                     }
53925                 }
53926
53927                 return null;
53928             },
53929
53930             isSided: function() {
53931                 if (this.tags.two_sided === 'yes') {
53932                     return false;
53933                 }
53934
53935                 return this.sidednessIdentifier() !== null;
53936             },
53937
53938             lanes: function() {
53939                 return osmLanes(this);
53940             },
53941
53942
53943             isClosed: function() {
53944                 return this.nodes.length > 1 && this.first() === this.last();
53945             },
53946
53947
53948             isConvex: function(resolver) {
53949                 if (!this.isClosed() || this.isDegenerate()) { return null; }
53950
53951                 var nodes = utilArrayUniq(resolver.childNodes(this));
53952                 var coords = nodes.map(function(n) { return n.loc; });
53953                 var curr = 0;
53954                 var prev = 0;
53955
53956                 for (var i = 0; i < coords.length; i++) {
53957                     var o = coords[(i+1) % coords.length];
53958                     var a = coords[i];
53959                     var b = coords[(i+2) % coords.length];
53960                     var res = geoVecCross(a, b, o);
53961
53962                     curr = (res > 0) ? 1 : (res < 0) ? -1 : 0;
53963                     if (curr === 0) {
53964                         continue;
53965                     } else if (prev && curr !== prev) {
53966                         return false;
53967                     }
53968                     prev = curr;
53969                 }
53970                 return true;
53971             },
53972
53973             // returns an object with the tag that implies this is an area, if any
53974             tagSuggestingArea: function() {
53975                 if (this.tags.area === 'yes') { return { area: 'yes' }; }
53976                 if (this.tags.area === 'no') { return null; }
53977
53978                 // `highway` and `railway` are typically linear features, but there
53979                 // are a few exceptions that should be treated as areas, even in the
53980                 // absence of a proper `area=yes` or `areaKeys` tag.. see #4194
53981                 var lineKeys = {
53982                     highway: {
53983                         rest_area: true,
53984                         services: true
53985                     },
53986                     railway: {
53987                         roundhouse: true,
53988                         station: true,
53989                         traverser: true,
53990                         turntable: true,
53991                         wash: true
53992                     }
53993                 };
53994                 var returnTags = {};
53995                 for (var key in this.tags) {
53996                     if (key in osmAreaKeys && !(this.tags[key] in osmAreaKeys[key])) {
53997                         returnTags[key] = this.tags[key];
53998                         return returnTags;
53999                     }
54000                     if (key in lineKeys && this.tags[key] in lineKeys[key]) {
54001                         returnTags[key] = this.tags[key];
54002                         return returnTags;
54003                     }
54004                 }
54005                 return null;
54006             },
54007
54008             isArea: function() {
54009                 if (this.tags.area === 'yes')
54010                     { return true; }
54011                 if (!this.isClosed() || this.tags.area === 'no')
54012                     { return false; }
54013                 return this.tagSuggestingArea() !== null;
54014             },
54015
54016
54017             isDegenerate: function() {
54018                 return (new Set(this.nodes).size < (this.isArea() ? 3 : 2));
54019             },
54020
54021
54022             areAdjacent: function(n1, n2) {
54023                 for (var i = 0; i < this.nodes.length; i++) {
54024                     if (this.nodes[i] === n1) {
54025                         if (this.nodes[i - 1] === n2) { return true; }
54026                         if (this.nodes[i + 1] === n2) { return true; }
54027                     }
54028                 }
54029                 return false;
54030             },
54031
54032
54033             geometry: function(graph) {
54034                 return graph.transient(this, 'geometry', function() {
54035                     return this.isArea() ? 'area' : 'line';
54036                 });
54037             },
54038
54039
54040             // If this way is not closed, append the beginning node to the end of the nodelist to close it.
54041             close: function() {
54042                 if (this.isClosed() || !this.nodes.length) { return this; }
54043
54044                 var nodes = this.nodes.slice();
54045                 nodes = nodes.filter(noRepeatNodes);
54046                 nodes.push(nodes[0]);
54047                 return this.update({ nodes: nodes });
54048             },
54049
54050
54051             // If this way is closed, remove any connector nodes from the end of the nodelist to unclose it.
54052             unclose: function() {
54053                 if (!this.isClosed()) { return this; }
54054
54055                 var nodes = this.nodes.slice();
54056                 var connector = this.first();
54057                 var i = nodes.length - 1;
54058
54059                 // remove trailing connectors..
54060                 while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
54061                     nodes.splice(i, 1);
54062                     i = nodes.length - 1;
54063                 }
54064
54065                 nodes = nodes.filter(noRepeatNodes);
54066                 return this.update({ nodes: nodes });
54067             },
54068
54069
54070             // Adds a node (id) in front of the node which is currently at position index.
54071             // If index is undefined, the node will be added to the end of the way for linear ways,
54072             //   or just before the final connecting node for circular ways.
54073             // Consecutive duplicates are eliminated including existing ones.
54074             // Circularity is always preserved when adding a node.
54075             addNode: function(id, index) {
54076                 var nodes = this.nodes.slice();
54077                 var isClosed = this.isClosed();
54078                 var max = isClosed ? nodes.length - 1 : nodes.length;
54079
54080                 if (index === undefined) {
54081                     index = max;
54082                 }
54083
54084                 if (index < 0 || index > max) {
54085                     throw new RangeError('index ' + index + ' out of range 0..' + max);
54086                 }
54087
54088                 // If this is a closed way, remove all connector nodes except the first one
54089                 // (there may be duplicates) and adjust index if necessary..
54090                 if (isClosed) {
54091                     var connector = this.first();
54092
54093                     // leading connectors..
54094                     var i = 1;
54095                     while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
54096                         nodes.splice(i, 1);
54097                         if (index > i) { index--; }
54098                     }
54099
54100                     // trailing connectors..
54101                     i = nodes.length - 1;
54102                     while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
54103                         nodes.splice(i, 1);
54104                         if (index > i) { index--; }
54105                         i = nodes.length - 1;
54106                     }
54107                 }
54108
54109                 nodes.splice(index, 0, id);
54110                 nodes = nodes.filter(noRepeatNodes);
54111
54112                 // If the way was closed before, append a connector node to keep it closed..
54113                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
54114                     nodes.push(nodes[0]);
54115                 }
54116
54117                 return this.update({ nodes: nodes });
54118             },
54119
54120
54121             // Replaces the node which is currently at position index with the given node (id).
54122             // Consecutive duplicates are eliminated including existing ones.
54123             // Circularity is preserved when updating a node.
54124             updateNode: function(id, index) {
54125                 var nodes = this.nodes.slice();
54126                 var isClosed = this.isClosed();
54127                 var max = nodes.length - 1;
54128
54129                 if (index === undefined || index < 0 || index > max) {
54130                     throw new RangeError('index ' + index + ' out of range 0..' + max);
54131                 }
54132
54133                 // If this is a closed way, remove all connector nodes except the first one
54134                 // (there may be duplicates) and adjust index if necessary..
54135                 if (isClosed) {
54136                     var connector = this.first();
54137
54138                     // leading connectors..
54139                     var i = 1;
54140                     while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
54141                         nodes.splice(i, 1);
54142                         if (index > i) { index--; }
54143                     }
54144
54145                     // trailing connectors..
54146                     i = nodes.length - 1;
54147                     while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
54148                         nodes.splice(i, 1);
54149                         if (index === i) { index = 0; }  // update leading connector instead
54150                         i = nodes.length - 1;
54151                     }
54152                 }
54153
54154                 nodes.splice(index, 1, id);
54155                 nodes = nodes.filter(noRepeatNodes);
54156
54157                 // If the way was closed before, append a connector node to keep it closed..
54158                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
54159                     nodes.push(nodes[0]);
54160                 }
54161
54162                 return this.update({nodes: nodes});
54163             },
54164
54165
54166             // Replaces each occurrence of node id needle with replacement.
54167             // Consecutive duplicates are eliminated including existing ones.
54168             // Circularity is preserved.
54169             replaceNode: function(needleID, replacementID) {
54170                 var nodes = this.nodes.slice();
54171                 var isClosed = this.isClosed();
54172
54173                 for (var i = 0; i < nodes.length; i++) {
54174                     if (nodes[i] === needleID) {
54175                         nodes[i] = replacementID;
54176                     }
54177                 }
54178
54179                 nodes = nodes.filter(noRepeatNodes);
54180
54181                 // If the way was closed before, append a connector node to keep it closed..
54182                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
54183                     nodes.push(nodes[0]);
54184                 }
54185
54186                 return this.update({nodes: nodes});
54187             },
54188
54189
54190             // Removes each occurrence of node id.
54191             // Consecutive duplicates are eliminated including existing ones.
54192             // Circularity is preserved.
54193             removeNode: function(id) {
54194                 var nodes = this.nodes.slice();
54195                 var isClosed = this.isClosed();
54196
54197                 nodes = nodes
54198                     .filter(function(node) { return node !== id; })
54199                     .filter(noRepeatNodes);
54200
54201                 // If the way was closed before, append a connector node to keep it closed..
54202                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
54203                     nodes.push(nodes[0]);
54204                 }
54205
54206                 return this.update({nodes: nodes});
54207             },
54208
54209
54210             asJXON: function(changeset_id) {
54211                 var r = {
54212                     way: {
54213                         '@id': this.osmId(),
54214                         '@version': this.version || 0,
54215                         nd: this.nodes.map(function(id) {
54216                             return { keyAttributes: { ref: osmEntity.id.toOSM(id) } };
54217                         }, this),
54218                         tag: Object.keys(this.tags).map(function(k) {
54219                             return { keyAttributes: { k: k, v: this.tags[k] } };
54220                         }, this)
54221                     }
54222                 };
54223                 if (changeset_id) {
54224                     r.way['@changeset'] = changeset_id;
54225                 }
54226                 return r;
54227             },
54228
54229
54230             asGeoJSON: function(resolver) {
54231                 return resolver.transient(this, 'GeoJSON', function() {
54232                     var coordinates = resolver.childNodes(this)
54233                         .map(function(n) { return n.loc; });
54234
54235                     if (this.isArea() && this.isClosed()) {
54236                         return {
54237                             type: 'Polygon',
54238                             coordinates: [coordinates]
54239                         };
54240                     } else {
54241                         return {
54242                             type: 'LineString',
54243                             coordinates: coordinates
54244                         };
54245                     }
54246                 });
54247             },
54248
54249
54250             area: function(resolver) {
54251                 return resolver.transient(this, 'area', function() {
54252                     var nodes = resolver.childNodes(this);
54253
54254                     var json = {
54255                         type: 'Polygon',
54256                         coordinates: [ nodes.map(function(n) { return n.loc; }) ]
54257                     };
54258
54259                     if (!this.isClosed() && nodes.length) {
54260                         json.coordinates[0].push(nodes[0].loc);
54261                     }
54262
54263                     var area = d3_geoArea(json);
54264
54265                     // Heuristic for detecting counterclockwise winding order. Assumes
54266                     // that OpenStreetMap polygons are not hemisphere-spanning.
54267                     if (area > 2 * Math.PI) {
54268                         json.coordinates[0] = json.coordinates[0].reverse();
54269                         area = d3_geoArea(json);
54270                     }
54271
54272                     return isNaN(area) ? 0 : area;
54273                 });
54274             }
54275         });
54276
54277
54278         // Filter function to eliminate consecutive duplicates.
54279         function noRepeatNodes(node, i, arr) {
54280             return i === 0 || node !== arr[i - 1];
54281         }
54282
54283         // "Old" multipolyons, previously known as "simple" multipolygons, are as follows:
54284         //
54285         // 1. Relation tagged with `type=multipolygon` and no interesting tags.
54286         // 2. One and only one member with the `outer` role. Must be a way with interesting tags.
54287         // 3. No members without a role.
54288         //
54289         // Old multipolygons are no longer recommended but are still rendered as areas by iD.
54290
54291         function osmOldMultipolygonOuterMemberOfRelation(entity, graph) {
54292             if (entity.type !== 'relation' ||
54293                 !entity.isMultipolygon()
54294                 || Object.keys(entity.tags).filter(osmIsInterestingTag).length > 1) {
54295                 return false;
54296             }
54297
54298             var outerMember;
54299             for (var memberIndex in entity.members) {
54300                 var member = entity.members[memberIndex];
54301                 if (!member.role || member.role === 'outer') {
54302                     if (outerMember) { return false; }
54303                     if (member.type !== 'way') { return false; }
54304                     if (!graph.hasEntity(member.id)) { return false; }
54305
54306                     outerMember = graph.entity(member.id);
54307
54308                     if (Object.keys(outerMember.tags).filter(osmIsInterestingTag).length === 0) {
54309                         return false;
54310                     }
54311                 }
54312             }
54313
54314             return outerMember;
54315         }
54316
54317         // For fixing up rendering of multipolygons with tags on the outer member.
54318         // https://github.com/openstreetmap/iD/issues/613
54319         function osmIsOldMultipolygonOuterMember(entity, graph) {
54320             if (entity.type !== 'way' || Object.keys(entity.tags).filter(osmIsInterestingTag).length === 0)
54321                 { return false; }
54322
54323             var parents = graph.parentRelations(entity);
54324             if (parents.length !== 1)
54325                 { return false; }
54326
54327             var parent = parents[0];
54328             if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
54329                 { return false; }
54330
54331             var members = parent.members, member;
54332             for (var i = 0; i < members.length; i++) {
54333                 member = members[i];
54334                 if (member.id === entity.id && member.role && member.role !== 'outer')
54335                     { return false; } // Not outer member
54336                 if (member.id !== entity.id && (!member.role || member.role === 'outer'))
54337                     { return false; } // Not a simple multipolygon
54338             }
54339
54340             return parent;
54341         }
54342
54343
54344         function osmOldMultipolygonOuterMember(entity, graph) {
54345             if (entity.type !== 'way')
54346                 { return false; }
54347
54348             var parents = graph.parentRelations(entity);
54349             if (parents.length !== 1)
54350                 { return false; }
54351
54352             var parent = parents[0];
54353             if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
54354                 { return false; }
54355
54356             var members = parent.members, member, outerMember;
54357             for (var i = 0; i < members.length; i++) {
54358                 member = members[i];
54359                 if (!member.role || member.role === 'outer') {
54360                     if (outerMember)
54361                         { return false; } // Not a simple multipolygon
54362                     outerMember = member;
54363                 }
54364             }
54365
54366             if (!outerMember)
54367                 { return false; }
54368
54369             var outerEntity = graph.hasEntity(outerMember.id);
54370             if (!outerEntity || !Object.keys(outerEntity.tags).filter(osmIsInterestingTag).length)
54371                 { return false; }
54372
54373             return outerEntity;
54374         }
54375
54376
54377         // Join `toJoin` array into sequences of connecting ways.
54378
54379         // Segments which share identical start/end nodes will, as much as possible,
54380         // be connected with each other.
54381         //
54382         // The return value is a nested array. Each constituent array contains elements
54383         // of `toJoin` which have been determined to connect.
54384         //
54385         // Each consitituent array also has a `nodes` property whose value is an
54386         // ordered array of member nodes, with appropriate order reversal and
54387         // start/end coordinate de-duplication.
54388         //
54389         // Members of `toJoin` must have, at minimum, `type` and `id` properties.
54390         // Thus either an array of `osmWay`s or a relation member array may be used.
54391         //
54392         // If an member is an `osmWay`, its tags and childnodes may be reversed via
54393         // `actionReverse` in the output.
54394         //
54395         // The returned sequences array also has an `actions` array property, containing
54396         // any reversal actions that should be applied to the graph, should the calling
54397         // code attempt to actually join the given ways.
54398         //
54399         // Incomplete members (those for which `graph.hasEntity(element.id)` returns
54400         // false) and non-way members are ignored.
54401         //
54402         function osmJoinWays(toJoin, graph) {
54403             function resolve(member) {
54404                 return graph.childNodes(graph.entity(member.id));
54405             }
54406
54407             function reverse(item) {
54408                 var action = actionReverse(item.id, { reverseOneway: true });
54409                 sequences.actions.push(action);
54410                 return (item instanceof osmWay) ? action(graph).entity(item.id) : item;
54411             }
54412
54413             // make a copy containing only the items to join
54414             toJoin = toJoin.filter(function(member) {
54415                 return member.type === 'way' && graph.hasEntity(member.id);
54416             });
54417
54418             // Are the things we are joining relation members or `osmWays`?
54419             // If `osmWays`, skip the "prefer a forward path" code below (see #4872)
54420             var i;
54421             var joinAsMembers = true;
54422             for (i = 0; i < toJoin.length; i++) {
54423                 if (toJoin[i] instanceof osmWay) {
54424                     joinAsMembers = false;
54425                     break;
54426                 }
54427             }
54428
54429             var sequences = [];
54430             sequences.actions = [];
54431
54432             while (toJoin.length) {
54433                 // start a new sequence
54434                 var item = toJoin.shift();
54435                 var currWays = [item];
54436                 var currNodes = resolve(item).slice();
54437                 var doneSequence = false;
54438
54439                 // add to it
54440                 while (toJoin.length && !doneSequence) {
54441                     var start = currNodes[0];
54442                     var end = currNodes[currNodes.length - 1];
54443                     var fn = null;
54444                     var nodes = null;
54445
54446                     // Find the next way/member to join.
54447                     for (i = 0; i < toJoin.length; i++) {
54448                         item = toJoin[i];
54449                         nodes = resolve(item);
54450
54451                         // (for member ordering only, not way ordering - see #4872)
54452                         // Strongly prefer to generate a forward path that preserves the order
54453                         // of the members array. For multipolygons and most relations, member
54454                         // order does not matter - but for routes, it does. (see #4589)
54455                         // If we started this sequence backwards (i.e. next member way attaches to
54456                         // the start node and not the end node), reverse the initial way before continuing.
54457                         if (joinAsMembers && currWays.length === 1 && nodes[0] !== end && nodes[nodes.length - 1] !== end &&
54458                             (nodes[nodes.length - 1] === start || nodes[0] === start)
54459                         ) {
54460                             currWays[0] = reverse(currWays[0]);
54461                             currNodes.reverse();
54462                             start = currNodes[0];
54463                             end = currNodes[currNodes.length - 1];
54464                         }
54465
54466                         if (nodes[0] === end) {
54467                             fn = currNodes.push;               // join to end
54468                             nodes = nodes.slice(1);
54469                             break;
54470                         } else if (nodes[nodes.length - 1] === end) {
54471                             fn = currNodes.push;               // join to end
54472                             nodes = nodes.slice(0, -1).reverse();
54473                             item = reverse(item);
54474                             break;
54475                         } else if (nodes[nodes.length - 1] === start) {
54476                             fn = currNodes.unshift;            // join to beginning
54477                             nodes = nodes.slice(0, -1);
54478                             break;
54479                         } else if (nodes[0] === start) {
54480                             fn = currNodes.unshift;            // join to beginning
54481                             nodes = nodes.slice(1).reverse();
54482                             item = reverse(item);
54483                             break;
54484                         } else {
54485                             fn = nodes = null;
54486                         }
54487                     }
54488
54489                     if (!nodes) {     // couldn't find a joinable way/member
54490                         doneSequence = true;
54491                         break;
54492                     }
54493
54494                     fn.apply(currWays, [item]);
54495                     fn.apply(currNodes, nodes);
54496
54497                     toJoin.splice(i, 1);
54498                 }
54499
54500                 currWays.nodes = currNodes;
54501                 sequences.push(currWays);
54502             }
54503
54504             return sequences;
54505         }
54506
54507         function actionAddMember(relationId, member, memberIndex, insertPair) {
54508
54509             return function action(graph) {
54510                 var relation = graph.entity(relationId);
54511
54512                 // There are some special rules for Public Transport v2 routes.
54513                 var isPTv2 = /stop|platform/.test(member.role);
54514
54515                 if ((isNaN(memberIndex) || insertPair) && member.type === 'way' && !isPTv2) {
54516                     // Try to perform sensible inserts based on how the ways join together
54517                     graph = addWayMember(relation, graph);
54518                 } else {
54519                     // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
54520                     // Stops and Platforms for PTv2 should be ordered first.
54521                     // hack: We do not currently have the ability to place them in the exactly correct order.
54522                     if (isPTv2 && isNaN(memberIndex)) {
54523                         memberIndex = 0;
54524                     }
54525
54526                     graph = graph.replace(relation.addMember(member, memberIndex));
54527                 }
54528
54529                 return graph;
54530             };
54531
54532
54533             // Add a way member into the relation "wherever it makes sense".
54534             // In this situation we were not supplied a memberIndex.
54535             function addWayMember(relation, graph) {
54536                 var groups, tempWay, item, i, j, k;
54537
54538                 // remove PTv2 stops and platforms before doing anything.
54539                 var PTv2members = [];
54540                 var members = [];
54541                 for (i = 0; i < relation.members.length; i++) {
54542                     var m = relation.members[i];
54543                     if (/stop|platform/.test(m.role)) {
54544                         PTv2members.push(m);
54545                     } else {
54546                         members.push(m);
54547                     }
54548                 }
54549                 relation = relation.update({ members: members });
54550
54551
54552                 if (insertPair) {
54553                     // We're adding a member that must stay paired with an existing member.
54554                     // (This feature is used by `actionSplit`)
54555                     //
54556                     // This is tricky because the members may exist multiple times in the
54557                     // member list, and with different A-B/B-A ordering and different roles.
54558                     // (e.g. a bus route that loops out and back - #4589).
54559                     //
54560                     // Replace the existing member with a temporary way,
54561                     // so that `osmJoinWays` can treat the pair like a single way.
54562                     tempWay = osmWay({ id: 'wTemp', nodes: insertPair.nodes });
54563                     graph = graph.replace(tempWay);
54564                     var tempMember = { id: tempWay.id, type: 'way', role: member.role };
54565                     var tempRelation = relation.replaceMember({id: insertPair.originalID}, tempMember, true);
54566                     groups = utilArrayGroupBy(tempRelation.members, 'type');
54567                     groups.way = groups.way || [];
54568
54569                 } else {
54570                     // Add the member anywhere, one time. Just push and let `osmJoinWays` decide where to put it.
54571                     groups = utilArrayGroupBy(relation.members, 'type');
54572                     groups.way = groups.way || [];
54573                     groups.way.push(member);
54574                 }
54575
54576                 members = withIndex(groups.way);
54577                 var joined = osmJoinWays(members, graph);
54578
54579                 // `joined` might not contain all of the way members,
54580                 // But will contain only the completed (downloaded) members
54581                 for (i = 0; i < joined.length; i++) {
54582                     var segment = joined[i];
54583                     var nodes = segment.nodes.slice();
54584                     var startIndex = segment[0].index;
54585
54586                     // j = array index in `members` where this segment starts
54587                     for (j = 0; j < members.length; j++) {
54588                         if (members[j].index === startIndex) {
54589                             break;
54590                         }
54591                     }
54592
54593                     // k = each member in segment
54594                     for (k = 0; k < segment.length; k++) {
54595                         item = segment[k];
54596                         var way = graph.entity(item.id);
54597
54598                         // If this is a paired item, generate members in correct order and role
54599                         if (tempWay && item.id === tempWay.id) {
54600                             if (nodes[0].id === insertPair.nodes[0]) {
54601                                 item.pair = [
54602                                     { id: insertPair.originalID, type: 'way', role: item.role },
54603                                     { id: insertPair.insertedID, type: 'way', role: item.role }
54604                                 ];
54605                             } else {
54606                                 item.pair = [
54607                                     { id: insertPair.insertedID, type: 'way', role: item.role },
54608                                     { id: insertPair.originalID, type: 'way', role: item.role }
54609                                 ];
54610                             }
54611                         }
54612
54613                         // reorder `members` if necessary
54614                         if (k > 0) {
54615                             if (j+k >= members.length || item.index !== members[j+k].index) {
54616                                 moveMember(members, item.index, j+k);
54617                             }
54618                         }
54619
54620                         nodes.splice(0, way.nodes.length - 1);
54621                     }
54622                 }
54623
54624                 if (tempWay) {
54625                     graph = graph.remove(tempWay);
54626                 }
54627
54628                 // Final pass: skip dead items, split pairs, remove index properties
54629                 var wayMembers = [];
54630                 for (i = 0; i < members.length; i++) {
54631                     item = members[i];
54632                     if (item.index === -1) { continue; }
54633
54634                     if (item.pair) {
54635                         wayMembers.push(item.pair[0]);
54636                         wayMembers.push(item.pair[1]);
54637                     } else {
54638                         wayMembers.push(utilObjectOmit(item, ['index']));
54639                     }
54640                 }
54641
54642                 // Put stops and platforms first, then nodes, ways, relations
54643                 // This is recommended for Public Transport v2 routes:
54644                 // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
54645                 var newMembers = PTv2members.concat( (groups.node || []), wayMembers, (groups.relation || []) );
54646
54647                 return graph.replace(relation.update({ members: newMembers }));
54648
54649
54650                 // `moveMember()` changes the `members` array in place by splicing
54651                 // the item with `.index = findIndex` to where it belongs,
54652                 // and marking the old position as "dead" with `.index = -1`
54653                 //
54654                 // j=5, k=0                jk
54655                 // segment                 5 4 7 6
54656                 // members       0 1 2 3 4 5 6 7 8 9        keep 5 in j+k
54657                 //
54658                 // j=5, k=1                j k
54659                 // segment                 5 4 7 6
54660                 // members       0 1 2 3 4 5 6 7 8 9        move 4 to j+k
54661                 // members       0 1 2 3 x 5 4 6 7 8 9      moved
54662                 //
54663                 // j=5, k=2                j   k
54664                 // segment                 5 4 7 6
54665                 // members       0 1 2 3 x 5 4 6 7 8 9      move 7 to j+k
54666                 // members       0 1 2 3 x 5 4 7 6 x 8 9    moved
54667                 //
54668                 // j=5, k=3                j     k
54669                 // segment                 5 4 7 6
54670                 // members       0 1 2 3 x 5 4 7 6 x 8 9    keep 6 in j+k
54671                 //
54672                 function moveMember(arr, findIndex, toIndex) {
54673                     for (var i = 0; i < arr.length; i++) {
54674                         if (arr[i].index === findIndex) {
54675                             break;
54676                         }
54677                     }
54678
54679                     var item = Object.assign({}, arr[i]);   // shallow copy
54680                     arr[i].index = -1;   // mark as dead
54681                     item.index = toIndex;
54682                     arr.splice(toIndex, 0, item);
54683                 }
54684
54685
54686                 // This is the same as `Relation.indexedMembers`,
54687                 // Except we don't want to index all the members, only the ways
54688                 function withIndex(arr) {
54689                     var result = new Array(arr.length);
54690                     for (var i = 0; i < arr.length; i++) {
54691                         result[i] = Object.assign({}, arr[i]);   // shallow copy
54692                         result[i].index = i;
54693                     }
54694                     return result;
54695                 }
54696             }
54697
54698         }
54699
54700         function actionAddMidpoint(midpoint, node) {
54701             return function(graph) {
54702                 graph = graph.replace(node.move(midpoint.loc));
54703
54704                 var parents = utilArrayIntersection(
54705                     graph.parentWays(graph.entity(midpoint.edge[0])),
54706                     graph.parentWays(graph.entity(midpoint.edge[1]))
54707                 );
54708
54709                 parents.forEach(function(way) {
54710                     for (var i = 0; i < way.nodes.length - 1; i++) {
54711                         if (geoEdgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) {
54712                             graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1));
54713
54714                             // Add only one midpoint on doubled-back segments,
54715                             // turning them into self-intersections.
54716                             return;
54717                         }
54718                     }
54719                 });
54720
54721                 return graph;
54722             };
54723         }
54724
54725         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
54726         function actionAddVertex(wayId, nodeId, index) {
54727             return function(graph) {
54728                 return graph.replace(graph.entity(wayId).addNode(nodeId, index));
54729             };
54730         }
54731
54732         function actionChangeMember(relationId, member, memberIndex) {
54733             return function(graph) {
54734                 return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
54735             };
54736         }
54737
54738         function actionChangePreset(entityID, oldPreset, newPreset, skipFieldDefaults) {
54739             return function action(graph) {
54740                 var entity = graph.entity(entityID);
54741                 var geometry = entity.geometry(graph);
54742                 var tags = entity.tags;
54743
54744                 if (oldPreset) { tags = oldPreset.unsetTags(tags, geometry); }
54745                 if (newPreset) { tags = newPreset.setTags(tags, geometry, skipFieldDefaults); }
54746
54747                 return graph.replace(entity.update({tags: tags}));
54748             };
54749         }
54750
54751         function actionChangeTags(entityId, tags) {
54752             return function(graph) {
54753                 var entity = graph.entity(entityId);
54754                 return graph.replace(entity.update({tags: tags}));
54755             };
54756         }
54757
54758         function osmNode() {
54759             if (!(this instanceof osmNode)) {
54760                 return (new osmNode()).initialize(arguments);
54761             } else if (arguments.length) {
54762                 this.initialize(arguments);
54763             }
54764         }
54765
54766         osmEntity.node = osmNode;
54767
54768         osmNode.prototype = Object.create(osmEntity.prototype);
54769
54770         Object.assign(osmNode.prototype, {
54771             type: 'node',
54772             loc: [9999, 9999],
54773
54774             extent: function() {
54775                 return new geoExtent(this.loc);
54776             },
54777
54778
54779             geometry: function(graph) {
54780                 return graph.transient(this, 'geometry', function() {
54781                     return graph.isPoi(this) ? 'point' : 'vertex';
54782                 });
54783             },
54784
54785
54786             move: function(loc) {
54787                 return this.update({loc: loc});
54788             },
54789
54790
54791             isDegenerate: function() {
54792                 return !(
54793                     Array.isArray(this.loc) && this.loc.length === 2 &&
54794                     this.loc[0] >= -180 && this.loc[0] <= 180 &&
54795                     this.loc[1] >= -90 && this.loc[1] <= 90
54796                 );
54797             },
54798
54799
54800             // Inspect tags and geometry to determine which direction(s) this node/vertex points
54801             directions: function(resolver, projection) {
54802                 var val;
54803                 var i;
54804
54805                 // which tag to use?
54806                 if (this.isHighwayIntersection(resolver) && (this.tags.stop || '').toLowerCase() === 'all') {
54807                     // all-way stop tag on a highway intersection
54808                     val = 'all';
54809                 } else {
54810                     // generic direction tag
54811                     val = (this.tags.direction || '').toLowerCase();
54812
54813                     // better suffix-style direction tag
54814                     var re = /:direction$/i;
54815                     var keys = Object.keys(this.tags);
54816                     for (i = 0; i < keys.length; i++) {
54817                         if (re.test(keys[i])) {
54818                             val = this.tags[keys[i]].toLowerCase();
54819                             break;
54820                         }
54821                     }
54822                 }
54823
54824                 if (val === '') { return []; }
54825
54826                 var cardinal = {
54827                     north: 0,               n: 0,
54828                     northnortheast: 22,     nne: 22,
54829                     northeast: 45,          ne: 45,
54830                     eastnortheast: 67,      ene: 67,
54831                     east: 90,               e: 90,
54832                     eastsoutheast: 112,     ese: 112,
54833                     southeast: 135,         se: 135,
54834                     southsoutheast: 157,    sse: 157,
54835                     south: 180,             s: 180,
54836                     southsouthwest: 202,    ssw: 202,
54837                     southwest: 225,         sw: 225,
54838                     westsouthwest: 247,     wsw: 247,
54839                     west: 270,              w: 270,
54840                     westnorthwest: 292,     wnw: 292,
54841                     northwest: 315,         nw: 315,
54842                     northnorthwest: 337,    nnw: 337
54843                 };
54844
54845
54846                 var values = val.split(';');
54847                 var results = [];
54848
54849                 values.forEach(function(v) {
54850                     // swap cardinal for numeric directions
54851                     if (cardinal[v] !== undefined) {
54852                         v = cardinal[v];
54853                     }
54854
54855                     // numeric direction - just add to results
54856                     if (v !== '' && !isNaN(+v)) {
54857                         results.push(+v);
54858                         return;
54859                     }
54860
54861                     // string direction - inspect parent ways
54862                     var lookBackward =
54863                         (this.tags['traffic_sign:backward'] || v === 'backward' || v === 'both' || v === 'all');
54864                     var lookForward =
54865                         (this.tags['traffic_sign:forward'] || v === 'forward' || v === 'both' || v === 'all');
54866
54867                     if (!lookForward && !lookBackward) { return; }
54868
54869                     var nodeIds = {};
54870                     resolver.parentWays(this).forEach(function(parent) {
54871                         var nodes = parent.nodes;
54872                         for (i = 0; i < nodes.length; i++) {
54873                             if (nodes[i] === this.id) {  // match current entity
54874                                 if (lookForward && i > 0) {
54875                                     nodeIds[nodes[i - 1]] = true;  // look back to prev node
54876                                 }
54877                                 if (lookBackward && i < nodes.length - 1) {
54878                                     nodeIds[nodes[i + 1]] = true;  // look ahead to next node
54879                                 }
54880                             }
54881                         }
54882                     }, this);
54883
54884                     Object.keys(nodeIds).forEach(function(nodeId) {
54885                         // +90 because geoAngle returns angle from X axis, not Y (north)
54886                         results.push(
54887                             (geoAngle(this, resolver.entity(nodeId), projection) * (180 / Math.PI)) + 90
54888                         );
54889                     }, this);
54890
54891                 }, this);
54892
54893                 return utilArrayUniq(results);
54894             },
54895
54896
54897             isEndpoint: function(resolver) {
54898                 return resolver.transient(this, 'isEndpoint', function() {
54899                     var id = this.id;
54900                     return resolver.parentWays(this).filter(function(parent) {
54901                         return !parent.isClosed() && !!parent.affix(id);
54902                     }).length > 0;
54903                 });
54904             },
54905
54906
54907             isConnected: function(resolver) {
54908                 return resolver.transient(this, 'isConnected', function() {
54909                     var parents = resolver.parentWays(this);
54910
54911                     function isLine(entity) {
54912                         return entity.geometry(resolver) === 'line' &&
54913                             entity.hasInterestingTags();
54914                     }
54915
54916                     // vertex is connected to multiple parent lines
54917                     if (parents.length > 1 && parents.some(isLine)) {
54918                         return true;
54919
54920                     } else if (parents.length === 1) {
54921                         var way = parents[0];
54922                         var nodes = way.nodes.slice();
54923                         if (way.isClosed()) { nodes.pop(); }  // ignore connecting node if closed
54924
54925                         // return true if vertex appears multiple times (way is self intersecting)
54926                         return nodes.indexOf(this.id) !== nodes.lastIndexOf(this.id);
54927                     }
54928
54929                     return false;
54930                 });
54931             },
54932
54933
54934             parentIntersectionWays: function(resolver) {
54935                 return resolver.transient(this, 'parentIntersectionWays', function() {
54936                     return resolver.parentWays(this).filter(function(parent) {
54937                         return (parent.tags.highway ||
54938                             parent.tags.waterway ||
54939                             parent.tags.railway ||
54940                             parent.tags.aeroway) &&
54941                             parent.geometry(resolver) === 'line';
54942                     });
54943                 });
54944             },
54945
54946
54947             isIntersection: function(resolver) {
54948                 return this.parentIntersectionWays(resolver).length > 1;
54949             },
54950
54951
54952             isHighwayIntersection: function(resolver) {
54953                 return resolver.transient(this, 'isHighwayIntersection', function() {
54954                     return resolver.parentWays(this).filter(function(parent) {
54955                         return parent.tags.highway && parent.geometry(resolver) === 'line';
54956                     }).length > 1;
54957                 });
54958             },
54959
54960
54961             isOnAddressLine: function(resolver) {
54962                 return resolver.transient(this, 'isOnAddressLine', function() {
54963                     return resolver.parentWays(this).filter(function(parent) {
54964                         return parent.tags.hasOwnProperty('addr:interpolation') &&
54965                             parent.geometry(resolver) === 'line';
54966                     }).length > 0;
54967                 });
54968             },
54969
54970
54971             asJXON: function(changeset_id) {
54972                 var r = {
54973                     node: {
54974                         '@id': this.osmId(),
54975                         '@lon': this.loc[0],
54976                         '@lat': this.loc[1],
54977                         '@version': (this.version || 0),
54978                         tag: Object.keys(this.tags).map(function(k) {
54979                             return { keyAttributes: { k: k, v: this.tags[k] } };
54980                         }, this)
54981                     }
54982                 };
54983                 if (changeset_id) { r.node['@changeset'] = changeset_id; }
54984                 return r;
54985             },
54986
54987
54988             asGeoJSON: function() {
54989                 return {
54990                     type: 'Point',
54991                     coordinates: this.loc
54992                 };
54993             }
54994         });
54995
54996         function actionCircularize(wayId, projection, maxAngle) {
54997             maxAngle = (maxAngle || 20) * Math.PI / 180;
54998
54999
55000             var action = function(graph, t) {
55001                 if (t === null || !isFinite(t)) { t = 1; }
55002                 t = Math.min(Math.max(+t, 0), 1);
55003
55004                 var way = graph.entity(wayId);
55005                 var origNodes = {};
55006
55007                 graph.childNodes(way).forEach(function(node) {
55008                     if (!origNodes[node.id]) { origNodes[node.id] = node; }
55009                 });
55010
55011                 if (!way.isConvex(graph)) {
55012                     graph = action.makeConvex(graph);
55013                 }
55014
55015                 var nodes = utilArrayUniq(graph.childNodes(way));
55016                 var keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; });
55017                 var points = nodes.map(function(n) { return projection(n.loc); });
55018                 var keyPoints = keyNodes.map(function(n) { return projection(n.loc); });
55019                 var centroid = (points.length === 2) ? geoVecInterp(points[0], points[1], 0.5) : d3_polygonCentroid(points);
55020                 var radius = d3_median(points, function(p) { return geoVecLength(centroid, p); });
55021                 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
55022                 var ids, i, j, k;
55023
55024                 // we need atleast two key nodes for the algorithm to work
55025                 if (!keyNodes.length) {
55026                     keyNodes = [nodes[0]];
55027                     keyPoints = [points[0]];
55028                 }
55029
55030                 if (keyNodes.length === 1) {
55031                     var index = nodes.indexOf(keyNodes[0]);
55032                     var oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length);
55033
55034                     keyNodes.push(nodes[oppositeIndex]);
55035                     keyPoints.push(points[oppositeIndex]);
55036                 }
55037
55038                 // key points and nodes are those connected to the ways,
55039                 // they are projected onto the circle, inbetween nodes are moved
55040                 // to constant intervals between key nodes, extra inbetween nodes are
55041                 // added if necessary.
55042                 for (i = 0; i < keyPoints.length; i++) {
55043                     var nextKeyNodeIndex = (i + 1) % keyNodes.length;
55044                     var startNode = keyNodes[i];
55045                     var endNode = keyNodes[nextKeyNodeIndex];
55046                     var startNodeIndex = nodes.indexOf(startNode);
55047                     var endNodeIndex = nodes.indexOf(endNode);
55048                     var numberNewPoints = -1;
55049                     var indexRange = endNodeIndex - startNodeIndex;
55050                     var nearNodes = {};
55051                     var inBetweenNodes = [];
55052                     var startAngle, endAngle, totalAngle, eachAngle;
55053                     var angle, loc, node, origNode;
55054
55055                     if (indexRange < 0) {
55056                         indexRange += nodes.length;
55057                     }
55058
55059                     // position this key node
55060                     var distance = geoVecLength(centroid, keyPoints[i]) || 1e-4;
55061                     keyPoints[i] = [
55062                         centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius,
55063                         centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius
55064                     ];
55065                     loc = projection.invert(keyPoints[i]);
55066                     node = keyNodes[i];
55067                     origNode = origNodes[node.id];
55068                     node = node.move(geoVecInterp(origNode.loc, loc, t));
55069                     graph = graph.replace(node);
55070
55071                     // figure out the between delta angle we want to match to
55072                     startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]);
55073                     endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]);
55074                     totalAngle = endAngle - startAngle;
55075
55076                     // detects looping around -pi/pi
55077                     if (totalAngle * sign > 0) {
55078                         totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle));
55079                     }
55080
55081                     do {
55082                         numberNewPoints++;
55083                         eachAngle = totalAngle / (indexRange + numberNewPoints);
55084                     } while (Math.abs(eachAngle) > maxAngle);
55085
55086
55087                     // move existing nodes
55088                     for (j = 1; j < indexRange; j++) {
55089                         angle = startAngle + j * eachAngle;
55090                         loc = projection.invert([
55091                             centroid[0] + Math.cos(angle) * radius,
55092                             centroid[1] + Math.sin(angle) * radius
55093                         ]);
55094
55095                         node = nodes[(j + startNodeIndex) % nodes.length];
55096                         origNode = origNodes[node.id];
55097                         nearNodes[node.id] = angle;
55098
55099                         node = node.move(geoVecInterp(origNode.loc, loc, t));
55100                         graph = graph.replace(node);
55101                     }
55102
55103                     // add new inbetween nodes if necessary
55104                     for (j = 0; j < numberNewPoints; j++) {
55105                         angle = startAngle + (indexRange + j) * eachAngle;
55106                         loc = projection.invert([
55107                             centroid[0] + Math.cos(angle) * radius,
55108                             centroid[1] + Math.sin(angle) * radius
55109                         ]);
55110
55111                         // choose a nearnode to use as the original
55112                         var min = Infinity;
55113                         for (var nodeId in nearNodes) {
55114                             var nearAngle = nearNodes[nodeId];
55115                             var dist = Math.abs(nearAngle - angle);
55116                             if (dist < min) {
55117                                 dist = min;
55118                                 origNode = origNodes[nodeId];
55119                             }
55120                         }
55121
55122                         node = osmNode({ loc: geoVecInterp(origNode.loc, loc, t) });
55123                         graph = graph.replace(node);
55124
55125                         nodes.splice(endNodeIndex + j, 0, node);
55126                         inBetweenNodes.push(node.id);
55127                     }
55128
55129                     // Check for other ways that share these keyNodes..
55130                     // If keyNodes are adjacent in both ways,
55131                     // we can add inBetween nodes to that shared way too..
55132                     if (indexRange === 1 && inBetweenNodes.length) {
55133                         var startIndex1 = way.nodes.lastIndexOf(startNode.id);
55134                         var endIndex1 = way.nodes.lastIndexOf(endNode.id);
55135                         var wayDirection1 = (endIndex1 - startIndex1);
55136                         if (wayDirection1 < -1) { wayDirection1 = 1; }
55137
55138                         var parentWays = graph.parentWays(keyNodes[i]);
55139                         for (j = 0; j < parentWays.length; j++) {
55140                             var sharedWay = parentWays[j];
55141                             if (sharedWay === way) { continue; }
55142
55143                             if (sharedWay.areAdjacent(startNode.id, endNode.id)) {
55144                                 var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id);
55145                                 var endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id);
55146                                 var wayDirection2 = (endIndex2 - startIndex2);
55147                                 var insertAt = endIndex2;
55148                                 if (wayDirection2 < -1) { wayDirection2 = 1; }
55149
55150                                 if (wayDirection1 !== wayDirection2) {
55151                                     inBetweenNodes.reverse();
55152                                     insertAt = startIndex2;
55153                                 }
55154                                 for (k = 0; k < inBetweenNodes.length; k++) {
55155                                     sharedWay = sharedWay.addNode(inBetweenNodes[k], insertAt + k);
55156                                 }
55157                                 graph = graph.replace(sharedWay);
55158                             }
55159                         }
55160                     }
55161
55162                 }
55163
55164                 // update the way to have all the new nodes
55165                 ids = nodes.map(function(n) { return n.id; });
55166                 ids.push(ids[0]);
55167
55168                 way = way.update({nodes: ids});
55169                 graph = graph.replace(way);
55170
55171                 return graph;
55172             };
55173
55174
55175             action.makeConvex = function(graph) {
55176                 var way = graph.entity(wayId);
55177                 var nodes = utilArrayUniq(graph.childNodes(way));
55178                 var points = nodes.map(function(n) { return projection(n.loc); });
55179                 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
55180                 var hull = d3_polygonHull(points);
55181                 var i, j;
55182
55183                 // D3 convex hulls go counterclockwise..
55184                 if (sign === -1) {
55185                     nodes.reverse();
55186                     points.reverse();
55187                 }
55188
55189                 for (i = 0; i < hull.length - 1; i++) {
55190                     var startIndex = points.indexOf(hull[i]);
55191                     var endIndex = points.indexOf(hull[i+1]);
55192                     var indexRange = (endIndex - startIndex);
55193
55194                     if (indexRange < 0) {
55195                         indexRange += nodes.length;
55196                     }
55197
55198                     // move interior nodes to the surface of the convex hull..
55199                     for (j = 1; j < indexRange; j++) {
55200                         var point = geoVecInterp(hull[i], hull[i+1], j / indexRange);
55201                         var node = nodes[(j + startIndex) % nodes.length].move(projection.invert(point));
55202                         graph = graph.replace(node);
55203                     }
55204                 }
55205                 return graph;
55206             };
55207
55208
55209             action.disabled = function(graph) {
55210                 if (!graph.entity(wayId).isClosed()) {
55211                     return 'not_closed';
55212                 }
55213
55214                 //disable when already circular
55215                 var way = graph.entity(wayId);
55216                 var nodes = utilArrayUniq(graph.childNodes(way));
55217                 var points = nodes.map(function(n) { return projection(n.loc); });
55218                 var hull = d3_polygonHull(points);
55219                 var epsilonAngle =  Math.PI / 180;
55220                 if (hull.length !== points.length || hull.length < 3){
55221                     return false;
55222                 }
55223                 var centroid = d3_polygonCentroid(points);
55224                 var radius = geoVecLengthSquare(centroid, points[0]);
55225
55226                 // compare distances between centroid and points
55227                 for (var i = 0; i<hull.length; i++){
55228                     var actualPoint = hull[i];
55229                     var actualDist = geoVecLengthSquare(actualPoint, centroid);
55230                     var diff = Math.abs(actualDist - radius);
55231                     //compare distances with epsilon-error (5%)
55232                     if (diff > 0.05*radius) {
55233                         return false;
55234                     }
55235                 }
55236                 
55237                 //check if central angles are smaller than maxAngle
55238                 for (i = 0; i<hull.length; i++){
55239                     actualPoint = hull[i];
55240                     var nextPoint = hull[(i+1)%hull.length];
55241                     var startAngle = Math.atan2(actualPoint[1] - centroid[1], actualPoint[0] - centroid[0]);
55242                     var endAngle = Math.atan2(nextPoint[1] - centroid[1], nextPoint[0] - centroid[0]);
55243                     var angle = endAngle - startAngle;
55244                     if (angle < 0) {
55245                         angle = -angle;
55246                     }
55247                     if (angle > Math.PI){
55248                         angle = (2*Math.PI - angle);
55249                     }
55250          
55251                     if (angle > maxAngle + epsilonAngle) {
55252                         return false;
55253                     }
55254                 }
55255                 return 'already_circular';
55256             };
55257
55258
55259             action.transitionable = true;
55260
55261
55262             return action;
55263         }
55264
55265         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as
55266         function actionDeleteWay(wayID) {
55267
55268             function canDeleteNode(node, graph) {
55269                 // don't delete nodes still attached to ways or relations
55270                 if (graph.parentWays(node).length ||
55271                     graph.parentRelations(node).length) { return false; }
55272
55273                 var geometries = osmNodeGeometriesForTags(node.tags);
55274                 // don't delete if this node can be a standalone point
55275                 if (geometries.point) { return false; }
55276                 // delete if this node only be a vertex
55277                 if (geometries.vertex) { return true; }
55278
55279                 // iD doesn't know if this should be a point or vertex,
55280                 // so only delete if there are no interesting tags
55281                 return !node.hasInterestingTags();
55282             }
55283
55284
55285             var action = function(graph) {
55286                 var way = graph.entity(wayID);
55287
55288                 graph.parentRelations(way).forEach(function(parent) {
55289                     parent = parent.removeMembersWithID(wayID);
55290                     graph = graph.replace(parent);
55291
55292                     if (parent.isDegenerate()) {
55293                         graph = actionDeleteRelation(parent.id)(graph);
55294                     }
55295                 });
55296
55297                 (new Set(way.nodes)).forEach(function(nodeID) {
55298                     graph = graph.replace(way.removeNode(nodeID));
55299
55300                     var node = graph.entity(nodeID);
55301                     if (canDeleteNode(node, graph)) {
55302                         graph = graph.remove(node);
55303                     }
55304                 });
55305
55306                 return graph.remove(way);
55307             };
55308
55309
55310             return action;
55311         }
55312
55313         function actionDeleteMultiple(ids) {
55314             var actions = {
55315                 way: actionDeleteWay,
55316                 node: actionDeleteNode,
55317                 relation: actionDeleteRelation
55318             };
55319
55320
55321             var action = function(graph) {
55322                 ids.forEach(function(id) {
55323                     if (graph.hasEntity(id)) { // It may have been deleted aready.
55324                         graph = actions[graph.entity(id).type](id)(graph);
55325                     }
55326                 });
55327
55328                 return graph;
55329             };
55330
55331
55332             return action;
55333         }
55334
55335         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as
55336         function actionDeleteRelation(relationID, allowUntaggedMembers) {
55337
55338             function canDeleteEntity(entity, graph) {
55339                 return !graph.parentWays(entity).length &&
55340                     !graph.parentRelations(entity).length &&
55341                     (!entity.hasInterestingTags() && !allowUntaggedMembers);
55342             }
55343
55344
55345             var action = function(graph) {
55346                 var relation = graph.entity(relationID);
55347
55348                 graph.parentRelations(relation)
55349                     .forEach(function(parent) {
55350                         parent = parent.removeMembersWithID(relationID);
55351                         graph = graph.replace(parent);
55352
55353                         if (parent.isDegenerate()) {
55354                             graph = actionDeleteRelation(parent.id)(graph);
55355                         }
55356                     });
55357
55358                 var memberIDs = utilArrayUniq(relation.members.map(function(m) { return m.id; }));
55359                 memberIDs.forEach(function(memberID) {
55360                     graph = graph.replace(relation.removeMembersWithID(memberID));
55361
55362                     var entity = graph.entity(memberID);
55363                     if (canDeleteEntity(entity, graph)) {
55364                         graph = actionDeleteMultiple([memberID])(graph);
55365                     }
55366                 });
55367
55368                 return graph.remove(relation);
55369             };
55370
55371
55372             return action;
55373         }
55374
55375         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as
55376         function actionDeleteNode(nodeId) {
55377             var action = function(graph) {
55378                 var node = graph.entity(nodeId);
55379
55380                 graph.parentWays(node)
55381                     .forEach(function(parent) {
55382                         parent = parent.removeNode(nodeId);
55383                         graph = graph.replace(parent);
55384
55385                         if (parent.isDegenerate()) {
55386                             graph = actionDeleteWay(parent.id)(graph);
55387                         }
55388                     });
55389
55390                 graph.parentRelations(node)
55391                     .forEach(function(parent) {
55392                         parent = parent.removeMembersWithID(nodeId);
55393                         graph = graph.replace(parent);
55394
55395                         if (parent.isDegenerate()) {
55396                             graph = actionDeleteRelation(parent.id)(graph);
55397                         }
55398                     });
55399
55400                 return graph.remove(node);
55401             };
55402
55403
55404             return action;
55405         }
55406
55407         // Connect the ways at the given nodes.
55408         //
55409         // First choose a node to be the survivor, with preference given
55410         // to an existing (not new) node.
55411         //
55412         // Tags and relation memberships of of non-surviving nodes are merged
55413         // to the survivor.
55414         //
55415         // This is the inverse of `iD.actionDisconnect`.
55416         //
55417         // Reference:
55418         //   https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeNodesAction.as
55419         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/MergeNodesAction.java
55420         //
55421         function actionConnect(nodeIDs) {
55422             var action = function(graph) {
55423                 var survivor;
55424                 var node;
55425                 var parents;
55426                 var i, j;
55427
55428                 // Choose a survivor node, prefer an existing (not new) node - #4974
55429                 for (i = 0; i < nodeIDs.length; i++) {
55430                     survivor = graph.entity(nodeIDs[i]);
55431                     if (survivor.version) { break; }  // found one
55432                 }
55433
55434                 // Replace all non-surviving nodes with the survivor and merge tags.
55435                 for (i = 0; i < nodeIDs.length; i++) {
55436                     node = graph.entity(nodeIDs[i]);
55437                     if (node.id === survivor.id) { continue; }
55438
55439                     parents = graph.parentWays(node);
55440                     for (j = 0; j < parents.length; j++) {
55441                         if (!parents[j].areAdjacent(node.id, survivor.id)) {
55442                             graph = graph.replace(parents[j].replaceNode(node.id, survivor.id));
55443                         }
55444                     }
55445
55446                     parents = graph.parentRelations(node);
55447                     for (j = 0; j < parents.length; j++) {
55448                         graph = graph.replace(parents[j].replaceMember(node, survivor));
55449                     }
55450
55451                     survivor = survivor.mergeTags(node.tags);
55452                     graph = actionDeleteNode(node.id)(graph);
55453                 }
55454
55455                 graph = graph.replace(survivor);
55456
55457                 return graph;
55458             };
55459
55460
55461             action.disabled = function(graph) {
55462                 var seen = {};
55463                 var restrictionIDs = [];
55464                 var survivor;
55465                 var node, way;
55466                 var relations, relation, role;
55467                 var i, j, k;
55468
55469                 // Choose a survivor node, prefer an existing (not new) node - #4974
55470                 for (i = 0; i < nodeIDs.length; i++) {
55471                     survivor = graph.entity(nodeIDs[i]);
55472                     if (survivor.version) { break; }  // found one
55473                 }
55474
55475                 // 1. disable if the nodes being connected have conflicting relation roles
55476                 for (i = 0; i < nodeIDs.length; i++) {
55477                     node = graph.entity(nodeIDs[i]);
55478                     relations = graph.parentRelations(node);
55479
55480                     for (j = 0; j < relations.length; j++) {
55481                         relation = relations[j];
55482                         role = relation.memberById(node.id).role || '';
55483
55484                         // if this node is a via node in a restriction, remember for later
55485                         if (relation.hasFromViaTo()) {
55486                             restrictionIDs.push(relation.id);
55487                         }
55488
55489                         if (seen[relation.id] !== undefined && seen[relation.id] !== role) {
55490                             return 'relation';
55491                         } else {
55492                             seen[relation.id] = role;
55493                         }
55494                     }
55495                 }
55496
55497                 // gather restrictions for parent ways
55498                 for (i = 0; i < nodeIDs.length; i++) {
55499                     node = graph.entity(nodeIDs[i]);
55500
55501                     var parents = graph.parentWays(node);
55502                     for (j = 0; j < parents.length; j++) {
55503                         var parent = parents[j];
55504                         relations = graph.parentRelations(parent);
55505
55506                         for (k = 0; k < relations.length; k++) {
55507                             relation = relations[k];
55508                             if (relation.hasFromViaTo()) {
55509                                 restrictionIDs.push(relation.id);
55510                             }
55511                         }
55512                     }
55513                 }
55514
55515
55516                 // test restrictions
55517                 restrictionIDs = utilArrayUniq(restrictionIDs);
55518                 for (i = 0; i < restrictionIDs.length; i++) {
55519                     relation = graph.entity(restrictionIDs[i]);
55520                     if (!relation.isComplete(graph)) { continue; }
55521
55522                     var memberWays = relation.members
55523                         .filter(function(m) { return m.type === 'way'; })
55524                         .map(function(m) { return graph.entity(m.id); });
55525
55526                     memberWays = utilArrayUniq(memberWays);
55527                     var f = relation.memberByRole('from');
55528                     var t = relation.memberByRole('to');
55529                     var isUturn = (f.id === t.id);
55530
55531                     // 2a. disable if connection would damage a restriction
55532                     // (a key node is a node at the junction of ways)
55533                     var nodes = { from: [], via: [], to: [], keyfrom: [], keyto: [] };
55534                     for (j = 0; j < relation.members.length; j++) {
55535                         collectNodes(relation.members[j], nodes);
55536                     }
55537
55538                     nodes.keyfrom = utilArrayUniq(nodes.keyfrom.filter(hasDuplicates));
55539                     nodes.keyto = utilArrayUniq(nodes.keyto.filter(hasDuplicates));
55540
55541                     var filter = keyNodeFilter(nodes.keyfrom, nodes.keyto);
55542                     nodes.from = nodes.from.filter(filter);
55543                     nodes.via = nodes.via.filter(filter);
55544                     nodes.to = nodes.to.filter(filter);
55545
55546                     var connectFrom = false;
55547                     var connectVia = false;
55548                     var connectTo = false;
55549                     var connectKeyFrom = false;
55550                     var connectKeyTo = false;
55551
55552                     for (j = 0; j < nodeIDs.length; j++) {
55553                         var n = nodeIDs[j];
55554                         if (nodes.from.indexOf(n) !== -1)    { connectFrom = true; }
55555                         if (nodes.via.indexOf(n) !== -1)     { connectVia = true; }
55556                         if (nodes.to.indexOf(n) !== -1)      { connectTo = true; }
55557                         if (nodes.keyfrom.indexOf(n) !== -1) { connectKeyFrom = true; }
55558                         if (nodes.keyto.indexOf(n) !== -1)   { connectKeyTo = true; }
55559                     }
55560                     if (connectFrom && connectTo && !isUturn) { return 'restriction'; }
55561                     if (connectFrom && connectVia) { return 'restriction'; }
55562                     if (connectTo   && connectVia) { return 'restriction'; }
55563
55564                     // connecting to a key node -
55565                     // if both nodes are on a member way (i.e. part of the turn restriction),
55566                     // the connecting node must be adjacent to the key node.
55567                     if (connectKeyFrom || connectKeyTo) {
55568                         if (nodeIDs.length !== 2) { return 'restriction'; }
55569
55570                         var n0 = null;
55571                         var n1 = null;
55572                         for (j = 0; j < memberWays.length; j++) {
55573                             way = memberWays[j];
55574                             if (way.contains(nodeIDs[0])) { n0 = nodeIDs[0]; }
55575                             if (way.contains(nodeIDs[1])) { n1 = nodeIDs[1]; }
55576                         }
55577
55578                         if (n0 && n1) {    // both nodes are part of the restriction
55579                             var ok = false;
55580                             for (j = 0; j < memberWays.length; j++) {
55581                                 way = memberWays[j];
55582                                 if (way.areAdjacent(n0, n1)) {
55583                                     ok = true;
55584                                     break;
55585                                 }
55586                             }
55587                             if (!ok) {
55588                                 return 'restriction';
55589                             }
55590                         }
55591                     }
55592
55593                     // 2b. disable if nodes being connected will destroy a member way in a restriction
55594                     // (to test, make a copy and try actually connecting the nodes)
55595                     for (j = 0; j < memberWays.length; j++) {
55596                         way = memberWays[j].update({});   // make copy
55597                         for (k = 0; k < nodeIDs.length; k++) {
55598                             if (nodeIDs[k] === survivor.id) { continue; }
55599
55600                             if (way.areAdjacent(nodeIDs[k], survivor.id)) {
55601                                 way = way.removeNode(nodeIDs[k]);
55602                             } else {
55603                                 way = way.replaceNode(nodeIDs[k], survivor.id);
55604                             }
55605                         }
55606                         if (way.isDegenerate()) {
55607                             return 'restriction';
55608                         }
55609                     }
55610                 }
55611
55612                 return false;
55613
55614
55615                 // if a key node appears multiple times (indexOf !== lastIndexOf) it's a FROM-VIA or TO-VIA junction
55616                 function hasDuplicates(n, i, arr) {
55617                     return arr.indexOf(n) !== arr.lastIndexOf(n);
55618                 }
55619
55620                 function keyNodeFilter(froms, tos) {
55621                     return function(n) {
55622                         return froms.indexOf(n) === -1 && tos.indexOf(n) === -1;
55623                     };
55624                 }
55625
55626                 function collectNodes(member, collection) {
55627                     var entity = graph.hasEntity(member.id);
55628                     if (!entity) { return; }
55629
55630                     var role = member.role || '';
55631                     if (!collection[role]) {
55632                         collection[role] = [];
55633                     }
55634
55635                     if (member.type === 'node') {
55636                         collection[role].push(member.id);
55637                         if (role === 'via') {
55638                             collection.keyfrom.push(member.id);
55639                             collection.keyto.push(member.id);
55640                         }
55641
55642                     } else if (member.type === 'way') {
55643                         collection[role].push.apply(collection[role], entity.nodes);
55644                         if (role === 'from' || role === 'via') {
55645                             collection.keyfrom.push(entity.first());
55646                             collection.keyfrom.push(entity.last());
55647                         }
55648                         if (role === 'to' || role === 'via') {
55649                             collection.keyto.push(entity.first());
55650                             collection.keyto.push(entity.last());
55651                         }
55652                     }
55653                 }
55654             };
55655
55656
55657             return action;
55658         }
55659
55660         function actionCopyEntities(ids, fromGraph) {
55661             var _copies = {};
55662
55663
55664             var action = function(graph) {
55665                 ids.forEach(function(id) {
55666                     fromGraph.entity(id).copy(fromGraph, _copies);
55667                 });
55668
55669                 for (var id in _copies) {
55670                     graph = graph.replace(_copies[id]);
55671                 }
55672
55673                 return graph;
55674             };
55675
55676
55677             action.copies = function() {
55678                 return _copies;
55679             };
55680
55681
55682             return action;
55683         }
55684
55685         function actionDeleteMember(relationId, memberIndex) {
55686             return function(graph) {
55687                 var relation = graph.entity(relationId)
55688                     .removeMember(memberIndex);
55689
55690                 graph = graph.replace(relation);
55691
55692                 if (relation.isDegenerate())
55693                     { graph = actionDeleteRelation(relation.id)(graph); }
55694
55695                 return graph;
55696             };
55697         }
55698
55699         function actionDiscardTags(difference) {
55700
55701             return function(graph) {
55702                 function discardTags(entity) {
55703                     var tags = {};
55704                     var keys = Object.keys(entity.tags);
55705                     var discarded = false;
55706
55707                     for (var i = 0; i < keys.length; i++) {
55708                         var k = keys[i];
55709                         if (dataDiscarded[k] || !entity.tags[k]) {
55710                             discarded = true;
55711                         } else {
55712                             tags[k] = entity.tags[k];
55713                         }
55714                     }
55715
55716                     if (discarded) {
55717                         graph = graph.replace(entity.update({ tags: tags }));
55718                     }
55719                 }
55720
55721                 difference.modified().forEach(discardTags);
55722                 difference.created().forEach(discardTags);
55723
55724                 return graph;
55725             };
55726         }
55727
55728         // Disconect the ways at the given node.
55729         //
55730         // Optionally, disconnect only the given ways.
55731         //
55732         // For testing convenience, accepts an ID to assign to the (first) new node.
55733         // Normally, this will be undefined and the way will automatically
55734         // be assigned a new ID.
55735         //
55736         // This is the inverse of `iD.actionConnect`.
55737         //
55738         // Reference:
55739         //   https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/UnjoinNodeAction.as
55740         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/UnGlueAction.java
55741         //
55742         function actionDisconnect(nodeId, newNodeId) {
55743             var wayIds;
55744
55745
55746             var action = function(graph) {
55747                 var node = graph.entity(nodeId);
55748                 var connections = action.connections(graph);
55749
55750                 connections.forEach(function(connection) {
55751                     var way = graph.entity(connection.wayID);
55752                     var newNode = osmNode({id: newNodeId, loc: node.loc, tags: node.tags});
55753
55754                     graph = graph.replace(newNode);
55755                     if (connection.index === 0 && way.isArea()) {
55756                         // replace shared node with shared node..
55757                         graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id));
55758                     } else if (way.isClosed() && connection.index === way.nodes.length - 1) {
55759                         // replace closing node with new new node..
55760                         graph = graph.replace(way.unclose().addNode(newNode.id));
55761                     } else {
55762                         // replace shared node with multiple new nodes..
55763                         graph = graph.replace(way.updateNode(newNode.id, connection.index));
55764                     }
55765                 });
55766
55767                 return graph;
55768             };
55769
55770
55771             action.connections = function(graph) {
55772                 var candidates = [];
55773                 var keeping = false;
55774                 var parentWays = graph.parentWays(graph.entity(nodeId));
55775
55776                 parentWays.forEach(function(way) {
55777                     if (wayIds && wayIds.indexOf(way.id) === -1) {
55778                         keeping = true;
55779                         return;
55780                     }
55781                     if (way.isArea() && (way.nodes[0] === nodeId)) {
55782                         candidates.push({ wayID: way.id, index: 0 });
55783                     } else {
55784                         way.nodes.forEach(function(waynode, index) {
55785                             if (waynode === nodeId) {
55786                                 if (way.isClosed() && parentWays.length > 1 && wayIds && wayIds.indexOf(way.id) !== -1 && index === way.nodes.length-1) {
55787                                     return;
55788                                 }
55789                                 candidates.push({ wayID: way.id, index: index });
55790                             }
55791                         });
55792                     }
55793                 });
55794
55795                 return keeping ? candidates : candidates.slice(1);
55796             };
55797
55798
55799             action.disabled = function(graph) {
55800                 var connections = action.connections(graph);
55801                 if (connections.length === 0)
55802                     { return 'not_connected'; }
55803
55804                 var parentWays = graph.parentWays(graph.entity(nodeId));
55805                 var seenRelationIds = {};
55806                 var sharedRelation;
55807
55808                 parentWays.forEach(function(way) {
55809                     var relations = graph.parentRelations(way);
55810                     relations.forEach(function(relation) {
55811                         if (relation.id in seenRelationIds) {
55812                             if (wayIds) {
55813                                 if (wayIds.indexOf(way.id) !== -1 ||
55814                                     wayIds.indexOf(seenRelationIds[relation.id]) !== -1) {
55815                                     sharedRelation = relation;
55816                                 }
55817                             } else {
55818                                 sharedRelation = relation;
55819                             }
55820                         } else {
55821                             seenRelationIds[relation.id] = way.id;
55822                         }
55823                     });
55824                 });
55825
55826                 if (sharedRelation)
55827                     { return 'relation'; }
55828             };
55829
55830
55831             action.limitWays = function(val) {
55832                 if (!arguments.length) { return wayIds; }
55833                 wayIds = val;
55834                 return action;
55835             };
55836
55837
55838             return action;
55839         }
55840
55841         function actionExtract(entityID, projection) {
55842
55843             var extractedNodeID;
55844
55845             var action = function(graph) {
55846                 var entity = graph.entity(entityID);
55847
55848                 if (entity.type === 'node') {
55849                     return extractFromNode(entity, graph);
55850                 }
55851
55852                 return extractFromArea(entity, graph);
55853             };
55854
55855             function extractFromNode(node, graph) {
55856
55857                 extractedNodeID = node.id;
55858
55859                 // Create a new node to replace the one we will detach
55860                 var replacement = osmNode({ loc: node.loc });
55861                 graph = graph.replace(replacement);
55862
55863                 // Process each way in turn, updating the graph as we go
55864                 graph = graph.parentWays(node)
55865                     .reduce(function(accGraph, parentWay) {
55866                         return accGraph.replace(parentWay.replaceNode(entityID, replacement.id));
55867                     }, graph);
55868
55869                 // Process any relations too
55870                 return graph.parentRelations(node)
55871                     .reduce(function(accGraph, parentRel) {
55872                         return accGraph.replace(parentRel.replaceMember(node, replacement));
55873                     }, graph);
55874             }
55875
55876             function extractFromArea(entity, graph) {
55877
55878                 var keysToCopyAndRetain = ['source', 'wheelchair'];
55879                 var keysToRetain = ['area', 'type'];
55880                 var buildingKeysToRetain = ['architect', 'building', 'height', 'layer'];
55881
55882                 var centroid = d3_geoPath(projection).centroid(entity.asGeoJSON(graph, true));
55883
55884                 var isBuilding = entity.tags.building;
55885
55886                 var areaTags = Object.assign({}, entity.tags);  // shallow copy
55887                 var pointTags = {};
55888                 for (var key in areaTags) {
55889
55890                     if (keysToRetain.indexOf(key) !== -1) {
55891                         continue;
55892                     }
55893
55894                     if (isBuilding) {
55895                         // don't transfer building-related tags
55896                         if (buildingKeysToRetain.indexOf(key) !== -1 ||
55897                             key.match(/^building:.{1,}/) ||
55898                             key.match(/^roof:.{1,}/)) { continue; }
55899                     }
55900
55901                     // copy the tag from the area to the point
55902                     pointTags[key] = areaTags[key];
55903
55904                     // leave addresses and some other tags so they're on both features
55905                     if (keysToCopyAndRetain.indexOf(key) !== -1 || key.match(/^addr:.{1,}/)) {
55906                         continue;
55907                     }
55908
55909                     // remove the tag from the area
55910                     delete areaTags[key];
55911                 }
55912
55913                 if (!isBuilding) {
55914                     // ensure that the area keeps the area geometry
55915                     areaTags.area = 'yes';
55916                 }
55917
55918                 var replacement = osmNode({ loc: centroid, tags: pointTags });
55919                 graph = graph.replace(replacement);
55920
55921                 extractedNodeID = replacement.id;
55922
55923                 return graph.replace(entity.update({tags: areaTags}));
55924             }
55925
55926             action.getExtractedNodeID = function() {
55927                 return extractedNodeID;
55928             };
55929
55930             action.disabled = function(graph) {
55931                 var entity = graph.entity(entityID);
55932
55933                 if (entity.type === 'node') {
55934                     var parentRels = graph.parentRelations(entity);
55935                     for (var i = 0; i < parentRels.length; i++) {
55936                         var relation = parentRels[i];
55937                         if (!relation.hasFromViaTo()) { continue; }
55938
55939                         for (var j = 0; j < relation.members.length; j++) {
55940                             var m = relation.members[j];
55941                             if (m.id === entityID && (m.role === 'via' || m.role === 'location_hint')) {
55942                                 return 'restriction';
55943                             }
55944                         }
55945                     }
55946                 }
55947
55948                 return false;
55949             };
55950
55951
55952             return action;
55953         }
55954
55955         // Join ways at the end node they share.
55956         //
55957         // This is the inverse of `iD.actionSplit`.
55958         //
55959         // Reference:
55960         //   https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeWaysAction.as
55961         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/CombineWayAction.java
55962         //
55963         function actionJoin(ids) {
55964
55965             function groupEntitiesByGeometry(graph) {
55966                 var entities = ids.map(function(id) { return graph.entity(id); });
55967                 return Object.assign(
55968                     { line: [] },
55969                     utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
55970                 );
55971             }
55972
55973
55974             var action = function(graph) {
55975                 var ways = ids.map(graph.entity, graph);
55976                 var survivorID = ways[0].id;
55977
55978                 // if any of the ways are sided (e.g. coastline, cliff, kerb)
55979                 // sort them first so they establish the overall order - #6033
55980                 ways.sort(function(a, b) {
55981                     var aSided = a.isSided();
55982                     var bSided = b.isSided();
55983                     return (aSided && !bSided) ? -1
55984                         : (bSided && !aSided) ? 1
55985                         : 0;
55986                 });
55987
55988                 // Prefer to keep an existing way.
55989                 for (var i = 0; i < ways.length; i++) {
55990                     if (!ways[i].isNew()) {
55991                         survivorID = ways[i].id;
55992                         break;
55993                     }
55994                 }
55995
55996                 var sequences = osmJoinWays(ways, graph);
55997                 var joined = sequences[0];
55998
55999                 // We might need to reverse some of these ways before joining them.  #4688
56000                 // `joined.actions` property will contain any actions we need to apply.
56001                 graph = sequences.actions.reduce(function(g, action) { return action(g); }, graph);
56002
56003                 var survivor = graph.entity(survivorID);
56004                 survivor = survivor.update({ nodes: joined.nodes.map(function(n) { return n.id; }) });
56005                 graph = graph.replace(survivor);
56006
56007                 joined.forEach(function(way) {
56008                     if (way.id === survivorID) { return; }
56009
56010                     graph.parentRelations(way).forEach(function(parent) {
56011                         graph = graph.replace(parent.replaceMember(way, survivor));
56012                     });
56013
56014                     survivor = survivor.mergeTags(way.tags);
56015
56016                     graph = graph.replace(survivor);
56017                     graph = actionDeleteWay(way.id)(graph);
56018                 });
56019
56020                 // Finds if the join created a single-member multipolygon,
56021                 // and if so turns it into a basic area instead
56022                 function checkForSimpleMultipolygon() {
56023                     if (!survivor.isClosed()) { return; }
56024
56025                     var multipolygons = graph.parentMultipolygons(survivor).filter(function(multipolygon) {
56026                         // find multipolygons where the survivor is the only member
56027                         return multipolygon.members.length === 1;
56028                     });
56029
56030                     // skip if this is the single member of multiple multipolygons
56031                     if (multipolygons.length !== 1) { return; }
56032
56033                     var multipolygon = multipolygons[0];
56034
56035                     for (var key in survivor.tags) {
56036                         if (multipolygon.tags[key] &&
56037                             // don't collapse if tags cannot be cleanly merged
56038                             multipolygon.tags[key] !== survivor.tags[key]) { return; }
56039                     }
56040
56041                     survivor = survivor.mergeTags(multipolygon.tags);
56042                     graph = graph.replace(survivor);
56043                     graph = actionDeleteRelation(multipolygon.id, true /* allow untagged members */)(graph);
56044
56045                     var tags = Object.assign({}, survivor.tags);
56046                     if (survivor.geometry(graph) !== 'area') {
56047                         // ensure the feature persists as an area
56048                         tags.area = 'yes';
56049                     }
56050                     delete tags.type; // remove type=multipolygon
56051                     survivor = survivor.update({ tags: tags });
56052                     graph = graph.replace(survivor);
56053                 }
56054                 checkForSimpleMultipolygon();
56055
56056                 return graph;
56057             };
56058
56059
56060             action.disabled = function(graph) {
56061                 var geometries = groupEntitiesByGeometry(graph);
56062                 if (ids.length < 2 || ids.length !== geometries.line.length) {
56063                     return 'not_eligible';
56064                 }
56065
56066                 var joined = osmJoinWays(ids.map(graph.entity, graph), graph);
56067                 if (joined.length > 1) {
56068                     return 'not_adjacent';
56069                 }
56070
56071                 // Loop through all combinations of path-pairs
56072                 // to check potential intersections between all pairs
56073                 for (var i = 0; i < ids.length - 1; i++) {
56074                     for (var j = i + 1; j < ids.length; j++) {
56075                         var path1 = graph.childNodes(graph.entity(ids[i]))
56076                             .map(function(e) { return e.loc; });
56077                         var path2 = graph.childNodes(graph.entity(ids[j]))
56078                             .map(function(e) { return e.loc; });
56079                         var intersections = geoPathIntersections(path1, path2);
56080
56081                         // Check if intersections are just nodes lying on top of
56082                         // each other/the line, as opposed to crossing it
56083                         var common = utilArrayIntersection(
56084                             joined[0].nodes.map(function(n) { return n.loc.toString(); }),
56085                             intersections.map(function(n) { return n.toString(); })
56086                         );
56087                         if (common.length !== intersections.length) {
56088                             return 'paths_intersect';
56089                         }
56090                     }
56091                 }
56092
56093                 var nodeIds = joined[0].nodes.map(function(n) { return n.id; }).slice(1, -1);
56094                 var relation;
56095                 var tags = {};
56096                 var conflicting = false;
56097
56098                 joined[0].forEach(function(way) {
56099                     var parents = graph.parentRelations(way);
56100                     parents.forEach(function(parent) {
56101                         if (parent.isRestriction() && parent.members.some(function(m) { return nodeIds.indexOf(m.id) >= 0; })) {
56102                             relation = parent;
56103                         }
56104                     });
56105
56106                     for (var k in way.tags) {
56107                         if (!(k in tags)) {
56108                             tags[k] = way.tags[k];
56109                         } else if (tags[k] && osmIsInterestingTag(k) && tags[k] !== way.tags[k]) {
56110                             conflicting = true;
56111                         }
56112                     }
56113                 });
56114
56115                 if (relation) {
56116                     return 'restriction';
56117                 }
56118
56119                 if (conflicting) {
56120                     return 'conflicting_tags';
56121                 }
56122             };
56123
56124
56125             return action;
56126         }
56127
56128         function actionMerge(ids) {
56129
56130             function groupEntitiesByGeometry(graph) {
56131                 var entities = ids.map(function(id) { return graph.entity(id); });
56132                 return Object.assign(
56133                     { point: [], area: [], line: [], relation: [] },
56134                     utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
56135                 );
56136             }
56137
56138
56139             var action = function(graph) {
56140                 var geometries = groupEntitiesByGeometry(graph);
56141                 var target = geometries.area[0] || geometries.line[0];
56142                 var points = geometries.point;
56143
56144                 points.forEach(function(point) {
56145                     target = target.mergeTags(point.tags);
56146                     graph = graph.replace(target);
56147
56148                     graph.parentRelations(point).forEach(function(parent) {
56149                         graph = graph.replace(parent.replaceMember(point, target));
56150                     });
56151
56152                     var nodes = utilArrayUniq(graph.childNodes(target));
56153                     var removeNode = point;
56154
56155                     for (var i = 0; i < nodes.length; i++) {
56156                         var node = nodes[i];
56157                         if (graph.parentWays(node).length > 1 ||
56158                             graph.parentRelations(node).length ||
56159                             node.hasInterestingTags()) {
56160                             continue;
56161                         }
56162
56163                         // Found an uninteresting child node on the target way.
56164                         // Move orig point into its place to preserve point's history. #3683
56165                         graph = graph.replace(point.update({ tags: {}, loc: node.loc }));
56166                         target = target.replaceNode(node.id, point.id);
56167                         graph = graph.replace(target);
56168                         removeNode = node;
56169                         break;
56170                     }
56171
56172                     graph = graph.remove(removeNode);
56173                 });
56174
56175                 return graph;
56176             };
56177
56178
56179             action.disabled = function(graph) {
56180                 var geometries = groupEntitiesByGeometry(graph);
56181                 if (geometries.point.length === 0 ||
56182                     (geometries.area.length + geometries.line.length) !== 1 ||
56183                     geometries.relation.length !== 0) {
56184                     return 'not_eligible';
56185                 }
56186             };
56187
56188
56189             return action;
56190         }
56191
56192         // `actionMergeNodes` is just a combination of:
56193         //
56194         // 1. move all the nodes to a common location
56195         // 2. `actionConnect` them
56196
56197         function actionMergeNodes(nodeIDs, loc) {
56198
56199             // If there is a single "interesting" node, use that as the location.
56200             // Otherwise return the average location of all the nodes.
56201             function chooseLoc(graph) {
56202                 if (!nodeIDs.length) { return null; }
56203                 var sum = [0,0];
56204                 var interestingCount = 0;
56205                 var interestingLoc;
56206
56207                 for (var i = 0; i < nodeIDs.length; i++) {
56208                     var node = graph.entity(nodeIDs[i]);
56209                     if (node.hasInterestingTags()) {
56210                         interestingLoc = (++interestingCount === 1) ? node.loc : null;
56211                     }
56212                     sum = geoVecAdd(sum, node.loc);
56213                 }
56214
56215                 return interestingLoc || geoVecScale(sum, 1 / nodeIDs.length);
56216             }
56217
56218
56219             var action = function(graph) {
56220                 if (nodeIDs.length < 2) { return graph; }
56221                 var toLoc = loc;
56222                 if (!toLoc) {
56223                     toLoc = chooseLoc(graph);
56224                 }
56225
56226                 for (var i = 0; i < nodeIDs.length; i++) {
56227                     var node = graph.entity(nodeIDs[i]);
56228                     if (node.loc !== toLoc) {
56229                         graph = graph.replace(node.move(toLoc));
56230                     }
56231                 }
56232
56233                 return actionConnect(nodeIDs)(graph);
56234             };
56235
56236
56237             action.disabled = function(graph) {
56238                 if (nodeIDs.length < 2) { return 'not_eligible'; }
56239
56240                 for (var i = 0; i < nodeIDs.length; i++) {
56241                     var entity = graph.entity(nodeIDs[i]);
56242                     if (entity.type !== 'node') { return 'not_eligible'; }
56243                 }
56244
56245                 return actionConnect(nodeIDs).disabled(graph);
56246             };
56247
56248             return action;
56249         }
56250
56251         function osmChangeset() {
56252             if (!(this instanceof osmChangeset)) {
56253                 return (new osmChangeset()).initialize(arguments);
56254             } else if (arguments.length) {
56255                 this.initialize(arguments);
56256             }
56257         }
56258
56259
56260         osmEntity.changeset = osmChangeset;
56261
56262         osmChangeset.prototype = Object.create(osmEntity.prototype);
56263
56264         Object.assign(osmChangeset.prototype, {
56265
56266             type: 'changeset',
56267
56268
56269             extent: function() {
56270                 return new geoExtent();
56271             },
56272
56273
56274             geometry: function() {
56275                 return 'changeset';
56276             },
56277
56278
56279             asJXON: function() {
56280                 return {
56281                     osm: {
56282                         changeset: {
56283                             tag: Object.keys(this.tags).map(function(k) {
56284                                 return { '@k': k, '@v': this.tags[k] };
56285                             }, this),
56286                             '@version': 0.6,
56287                             '@generator': 'iD'
56288                         }
56289                     }
56290                 };
56291             },
56292
56293
56294             // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)
56295             // XML. Returns a string.
56296             osmChangeJXON: function(changes) {
56297                 var changeset_id = this.id;
56298
56299                 function nest(x, order) {
56300                     var groups = {};
56301                     for (var i = 0; i < x.length; i++) {
56302                         var tagName = Object.keys(x[i])[0];
56303                         if (!groups[tagName]) { groups[tagName] = []; }
56304                         groups[tagName].push(x[i][tagName]);
56305                     }
56306                     var ordered = {};
56307                     order.forEach(function(o) {
56308                         if (groups[o]) { ordered[o] = groups[o]; }
56309                     });
56310                     return ordered;
56311                 }
56312
56313
56314                 // sort relations in a changeset by dependencies
56315                 function sort(changes) {
56316
56317                     // find a referenced relation in the current changeset
56318                     function resolve(item) {
56319                         return relations.find(function(relation) {
56320                             return item.keyAttributes.type === 'relation'
56321                                 && item.keyAttributes.ref === relation['@id'];
56322                         });
56323                     }
56324
56325                     // a new item is an item that has not been already processed
56326                     function isNew(item) {
56327                         return !sorted[ item['@id'] ] && !processing.find(function(proc) {
56328                             return proc['@id'] === item['@id'];
56329                         });
56330                     }
56331
56332                     var processing = [];
56333                     var sorted = {};
56334                     var relations = changes.relation;
56335
56336                     if (!relations) { return changes; }
56337
56338                     for (var i = 0; i < relations.length; i++) {
56339                         var relation = relations[i];
56340
56341                         // skip relation if already sorted
56342                         if (!sorted[relation['@id']]) {
56343                             processing.push(relation);
56344                         }
56345
56346                         while (processing.length > 0) {
56347                             var next = processing[0],
56348                             deps = next.member.map(resolve).filter(Boolean).filter(isNew);
56349                             if (deps.length === 0) {
56350                                 sorted[next['@id']] = next;
56351                                 processing.shift();
56352                             } else {
56353                                 processing = deps.concat(processing);
56354                             }
56355                         }
56356                     }
56357
56358                     changes.relation = Object.values(sorted);
56359                     return changes;
56360                 }
56361
56362                 function rep(entity) {
56363                     return entity.asJXON(changeset_id);
56364                 }
56365
56366                 return {
56367                     osmChange: {
56368                         '@version': 0.6,
56369                         '@generator': 'iD',
56370                         'create': sort(nest(changes.created.map(rep), ['node', 'way', 'relation'])),
56371                         'modify': nest(changes.modified.map(rep), ['node', 'way', 'relation']),
56372                         'delete': Object.assign(nest(changes.deleted.map(rep), ['relation', 'way', 'node']), { '@if-unused': true })
56373                     }
56374                 };
56375             },
56376
56377
56378             asGeoJSON: function() {
56379                 return {};
56380             }
56381
56382         });
56383
56384         function osmNote() {
56385             if (!(this instanceof osmNote)) {
56386                 return (new osmNote()).initialize(arguments);
56387             } else if (arguments.length) {
56388                 this.initialize(arguments);
56389             }
56390         }
56391
56392
56393         osmNote.id = function() {
56394             return osmNote.id.next--;
56395         };
56396
56397
56398         osmNote.id.next = -1;
56399
56400
56401         Object.assign(osmNote.prototype, {
56402
56403             type: 'note',
56404
56405             initialize: function(sources) {
56406                 for (var i = 0; i < sources.length; ++i) {
56407                     var source = sources[i];
56408                     for (var prop in source) {
56409                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
56410                             if (source[prop] === undefined) {
56411                                 delete this[prop];
56412                             } else {
56413                                 this[prop] = source[prop];
56414                             }
56415                         }
56416                     }
56417                 }
56418
56419                 if (!this.id) {
56420                     this.id = osmNote.id() + '';  // as string
56421                 }
56422
56423                 return this;
56424             },
56425
56426             extent: function() {
56427                 return new geoExtent(this.loc);
56428             },
56429
56430             update: function(attrs) {
56431                 return osmNote(this, attrs); // {v: 1 + (this.v || 0)}
56432             },
56433
56434             isNew: function() {
56435                 return this.id < 0;
56436             },
56437
56438             move: function(loc) {
56439                 return this.update({ loc: loc });
56440             }
56441
56442         });
56443
56444         function osmRelation() {
56445             if (!(this instanceof osmRelation)) {
56446                 return (new osmRelation()).initialize(arguments);
56447             } else if (arguments.length) {
56448                 this.initialize(arguments);
56449             }
56450         }
56451
56452
56453         osmEntity.relation = osmRelation;
56454
56455         osmRelation.prototype = Object.create(osmEntity.prototype);
56456
56457
56458         osmRelation.creationOrder = function(a, b) {
56459             var aId = parseInt(osmEntity.id.toOSM(a.id), 10);
56460             var bId = parseInt(osmEntity.id.toOSM(b.id), 10);
56461
56462             if (aId < 0 || bId < 0) { return aId - bId; }
56463             return bId - aId;
56464         };
56465
56466
56467         Object.assign(osmRelation.prototype, {
56468             type: 'relation',
56469             members: [],
56470
56471
56472             copy: function(resolver, copies) {
56473                 if (copies[this.id]) { return copies[this.id]; }
56474
56475                 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
56476
56477                 var members = this.members.map(function(member) {
56478                     return Object.assign({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id });
56479                 });
56480
56481                 copy = copy.update({members: members});
56482                 copies[this.id] = copy;
56483
56484                 return copy;
56485             },
56486
56487
56488             extent: function(resolver, memo) {
56489                 return resolver.transient(this, 'extent', function() {
56490                     if (memo && memo[this.id]) { return geoExtent(); }
56491                     memo = memo || {};
56492                     memo[this.id] = true;
56493
56494                     var extent = geoExtent();
56495                     for (var i = 0; i < this.members.length; i++) {
56496                         var member = resolver.hasEntity(this.members[i].id);
56497                         if (member) {
56498                             extent._extend(member.extent(resolver, memo));
56499                         }
56500                     }
56501                     return extent;
56502                 });
56503             },
56504
56505
56506             geometry: function(graph) {
56507                 return graph.transient(this, 'geometry', function() {
56508                     return this.isMultipolygon() ? 'area' : 'relation';
56509                 });
56510             },
56511
56512
56513             isDegenerate: function() {
56514                 return this.members.length === 0;
56515             },
56516
56517
56518             // Return an array of members, each extended with an 'index' property whose value
56519             // is the member index.
56520             indexedMembers: function() {
56521                 var result = new Array(this.members.length);
56522                 for (var i = 0; i < this.members.length; i++) {
56523                     result[i] = Object.assign({}, this.members[i], {index: i});
56524                 }
56525                 return result;
56526             },
56527
56528
56529             // Return the first member with the given role. A copy of the member object
56530             // is returned, extended with an 'index' property whose value is the member index.
56531             memberByRole: function(role) {
56532                 for (var i = 0; i < this.members.length; i++) {
56533                     if (this.members[i].role === role) {
56534                         return Object.assign({}, this.members[i], {index: i});
56535                     }
56536                 }
56537             },
56538
56539             // Same as memberByRole, but returns all members with the given role
56540             membersByRole: function(role) {
56541                 var result = [];
56542                 for (var i = 0; i < this.members.length; i++) {
56543                     if (this.members[i].role === role) {
56544                         result.push(Object.assign({}, this.members[i], {index: i}));
56545                     }
56546                 }
56547                 return result;
56548             },
56549
56550             // Return the first member with the given id. A copy of the member object
56551             // is returned, extended with an 'index' property whose value is the member index.
56552             memberById: function(id) {
56553                 for (var i = 0; i < this.members.length; i++) {
56554                     if (this.members[i].id === id) {
56555                         return Object.assign({}, this.members[i], {index: i});
56556                     }
56557                 }
56558             },
56559
56560
56561             // Return the first member with the given id and role. A copy of the member object
56562             // is returned, extended with an 'index' property whose value is the member index.
56563             memberByIdAndRole: function(id, role) {
56564                 for (var i = 0; i < this.members.length; i++) {
56565                     if (this.members[i].id === id && this.members[i].role === role) {
56566                         return Object.assign({}, this.members[i], {index: i});
56567                     }
56568                 }
56569             },
56570
56571
56572             addMember: function(member, index) {
56573                 var members = this.members.slice();
56574                 members.splice(index === undefined ? members.length : index, 0, member);
56575                 return this.update({members: members});
56576             },
56577
56578
56579             updateMember: function(member, index) {
56580                 var members = this.members.slice();
56581                 members.splice(index, 1, Object.assign({}, members[index], member));
56582                 return this.update({members: members});
56583             },
56584
56585
56586             removeMember: function(index) {
56587                 var members = this.members.slice();
56588                 members.splice(index, 1);
56589                 return this.update({members: members});
56590             },
56591
56592
56593             removeMembersWithID: function(id) {
56594                 var members = this.members.filter(function(m) { return m.id !== id; });
56595                 return this.update({members: members});
56596             },
56597
56598             moveMember: function(fromIndex, toIndex) {
56599                 var members = this.members.slice();
56600                 members.splice(toIndex, 0, members.splice(fromIndex, 1)[0]);
56601                 return this.update({members: members});
56602             },
56603
56604
56605             // Wherever a member appears with id `needle.id`, replace it with a member
56606             // with id `replacement.id`, type `replacement.type`, and the original role,
56607             // By default, adding a duplicate member (by id and role) is prevented.
56608             // Return an updated relation.
56609             replaceMember: function(needle, replacement, keepDuplicates) {
56610                 if (!this.memberById(needle.id)) { return this; }
56611
56612                 var members = [];
56613
56614                 for (var i = 0; i < this.members.length; i++) {
56615                     var member = this.members[i];
56616                     if (member.id !== needle.id) {
56617                         members.push(member);
56618                     } else if (keepDuplicates || !this.memberByIdAndRole(replacement.id, member.role)) {
56619                         members.push({ id: replacement.id, type: replacement.type, role: member.role });
56620                     }
56621                 }
56622
56623                 return this.update({ members: members });
56624             },
56625
56626
56627             asJXON: function(changeset_id) {
56628                 var r = {
56629                     relation: {
56630                         '@id': this.osmId(),
56631                         '@version': this.version || 0,
56632                         member: this.members.map(function(member) {
56633                             return {
56634                                 keyAttributes: {
56635                                     type: member.type,
56636                                     role: member.role,
56637                                     ref: osmEntity.id.toOSM(member.id)
56638                                 }
56639                             };
56640                         }, this),
56641                         tag: Object.keys(this.tags).map(function(k) {
56642                             return { keyAttributes: { k: k, v: this.tags[k] } };
56643                         }, this)
56644                     }
56645                 };
56646                 if (changeset_id) {
56647                     r.relation['@changeset'] = changeset_id;
56648                 }
56649                 return r;
56650             },
56651
56652
56653             asGeoJSON: function(resolver) {
56654                 return resolver.transient(this, 'GeoJSON', function () {
56655                     if (this.isMultipolygon()) {
56656                         return {
56657                             type: 'MultiPolygon',
56658                             coordinates: this.multipolygon(resolver)
56659                         };
56660                     } else {
56661                         return {
56662                             type: 'FeatureCollection',
56663                             properties: this.tags,
56664                             features: this.members.map(function (member) {
56665                                 return Object.assign({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver));
56666                             })
56667                         };
56668                     }
56669                 });
56670             },
56671
56672
56673             area: function(resolver) {
56674                 return resolver.transient(this, 'area', function() {
56675                     return d3_geoArea(this.asGeoJSON(resolver));
56676                 });
56677             },
56678
56679
56680             isMultipolygon: function() {
56681                 return this.tags.type === 'multipolygon';
56682             },
56683
56684
56685             isComplete: function(resolver) {
56686                 for (var i = 0; i < this.members.length; i++) {
56687                     if (!resolver.hasEntity(this.members[i].id)) {
56688                         return false;
56689                     }
56690                 }
56691                 return true;
56692             },
56693
56694
56695             hasFromViaTo: function() {
56696                 return (
56697                     this.members.some(function(m) { return m.role === 'from'; }) &&
56698                     this.members.some(function(m) { return m.role === 'via'; }) &&
56699                     this.members.some(function(m) { return m.role === 'to'; })
56700                 );
56701             },
56702
56703
56704             isRestriction: function() {
56705                 return !!(this.tags.type && this.tags.type.match(/^restriction:?/));
56706             },
56707
56708
56709             isValidRestriction: function() {
56710                 if (!this.isRestriction()) { return false; }
56711
56712                 var froms = this.members.filter(function(m) { return m.role === 'from'; });
56713                 var vias = this.members.filter(function(m) { return m.role === 'via'; });
56714                 var tos = this.members.filter(function(m) { return m.role === 'to'; });
56715
56716                 if (froms.length !== 1 && this.tags.restriction !== 'no_entry') { return false; }
56717                 if (froms.some(function(m) { return m.type !== 'way'; })) { return false; }
56718
56719                 if (tos.length !== 1 && this.tags.restriction !== 'no_exit') { return false; }
56720                 if (tos.some(function(m) { return m.type !== 'way'; })) { return false; }
56721
56722                 if (vias.length === 0) { return false; }
56723                 if (vias.length > 1 && vias.some(function(m) { return m.type !== 'way'; })) { return false; }
56724
56725                 return true;
56726             },
56727
56728
56729             // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm],
56730             // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings.
56731             //
56732             // This corresponds to the structure needed for rendering a multipolygon path using a
56733             // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry.
56734             //
56735             // In the case of invalid geometries, this function will still return a result which
56736             // includes the nodes of all way members, but some Nds may be unclosed and some inner
56737             // rings not matched with the intended outer ring.
56738             //
56739             multipolygon: function(resolver) {
56740                 var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); });
56741                 var inners = this.members.filter(function(m) { return 'inner' === m.role; });
56742
56743                 outers = osmJoinWays(outers, resolver);
56744                 inners = osmJoinWays(inners, resolver);
56745
56746                 var sequenceToLineString = function(sequence) {
56747                     if (sequence.nodes.length > 2 &&
56748                         sequence.nodes[0] !== sequence.nodes[sequence.nodes.length - 1]) {
56749                         // close unclosed parts to ensure correct area rendering - #2945
56750                         sequence.nodes.push(sequence.nodes[0]);
56751                     }
56752                     return sequence.nodes.map(function(node) { return node.loc; });
56753                 };
56754
56755                 outers = outers.map(sequenceToLineString);
56756                 inners = inners.map(sequenceToLineString);
56757
56758                 var result = outers.map(function(o) {
56759                     // Heuristic for detecting counterclockwise winding order. Assumes
56760                     // that OpenStreetMap polygons are not hemisphere-spanning.
56761                     return [d3_geoArea({ type: 'Polygon', coordinates: [o] }) > 2 * Math.PI ? o.reverse() : o];
56762                 });
56763
56764                 function findOuter(inner) {
56765                     var o, outer;
56766
56767                     for (o = 0; o < outers.length; o++) {
56768                         outer = outers[o];
56769                         if (geoPolygonContainsPolygon(outer, inner))
56770                             { return o; }
56771                     }
56772
56773                     for (o = 0; o < outers.length; o++) {
56774                         outer = outers[o];
56775                         if (geoPolygonIntersectsPolygon(outer, inner, false))
56776                             { return o; }
56777                     }
56778                 }
56779
56780                 for (var i = 0; i < inners.length; i++) {
56781                     var inner = inners[i];
56782
56783                     if (d3_geoArea({ type: 'Polygon', coordinates: [inner] }) < 2 * Math.PI) {
56784                         inner = inner.reverse();
56785                     }
56786
56787                     var o = findOuter(inners[i]);
56788                     if (o !== undefined) {
56789                         result[o].push(inners[i]);
56790                     } else {
56791                         result.push([inners[i]]); // Invalid geometry
56792                     }
56793                 }
56794
56795                 return result;
56796             }
56797         });
56798
56799         var services = {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:{}}};
56800
56801         function qaError() {
56802             if (!(this instanceof qaError)) {
56803                 return (new qaError()).initialize(arguments);
56804             } else if (arguments.length) {
56805                 this.initialize(arguments);
56806             }
56807         }
56808
56809         // Generic handling for services without nice IDs
56810         qaError.id = function() {
56811             return qaError.id.next--;
56812         };
56813
56814         qaError.id.next = -1;
56815
56816         Object.assign(qaError.prototype, {
56817             type: 'qaError',
56818
56819             // All errors need a position
56820             loc: [0, 0],
56821
56822             // These should be passed in, used to retrieve from qa_errors.json
56823             service: '',
56824             error_type: '',
56825
56826             initialize: function(sources) {
56827                 for (var i = 0; i < sources.length; ++i) {
56828                     var source = sources[i];
56829                     for (var prop in source) {
56830                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
56831                             if (source[prop] === undefined) {
56832                                 delete this[prop];
56833                             } else {
56834                                 this[prop] = source[prop];
56835                             }
56836                         }
56837                     }
56838                 }
56839
56840                 // Extract common error information from data
56841                 if (this.service && this.error_type) {
56842                     var serviceInfo = services[this.service];
56843
56844                     if (serviceInfo) {
56845                         var errInfo = serviceInfo.errorTypes[this.error_type];
56846
56847                         if (errInfo) {
56848                             this.icon = errInfo.icon;
56849                             this.category = errInfo.category;
56850                         }
56851                     }
56852                 }
56853
56854                 // All errors must have an ID for selection
56855                 if (!this.id) {
56856                     this.id = qaError.id() + '';  // as string
56857                 }
56858
56859                 return this;
56860             },
56861
56862             update: function(attrs) {
56863                 return qaError(this, attrs); // {v: 1 + (this.v || 0)}
56864             }
56865         });
56866
56867         // Split a way at the given node.
56868         //
56869         // Optionally, split only the given ways, if multiple ways share
56870         // the given node.
56871         //
56872         // This is the inverse of `iD.actionJoin`.
56873         //
56874         // For testing convenience, accepts an ID to assign to the new way.
56875         // Normally, this will be undefined and the way will automatically
56876         // be assigned a new ID.
56877         //
56878         // Reference:
56879         //   https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/SplitWayAction.as
56880         //
56881         function actionSplit(nodeId, newWayIds) {
56882             var _wayIDs;
56883
56884             // The IDs of the ways actually created by running this action
56885             var createdWayIDs = [];
56886
56887             // If the way is closed, we need to search for a partner node
56888             // to split the way at.
56889             //
56890             // The following looks for a node that is both far away from
56891             // the initial node in terms of way segment length and nearby
56892             // in terms of beeline-distance. This assures that areas get
56893             // split on the most "natural" points (independent of the number
56894             // of nodes).
56895             // For example: bone-shaped areas get split across their waist
56896             // line, circles across the diameter.
56897             function splitArea(nodes, idxA, graph) {
56898                 var lengths = new Array(nodes.length);
56899                 var length;
56900                 var i;
56901                 var best = 0;
56902                 var idxB;
56903
56904                 function wrap(index) {
56905                     return utilWrap(index, nodes.length);
56906                 }
56907
56908                 function dist(nA, nB) {
56909                     var locA = graph.entity(nA).loc;
56910                     var locB = graph.entity(nB).loc;
56911                     var epsilon = 1e-6;
56912                     return (locA && locB) ? geoSphericalDistance(locA, locB) : epsilon;
56913                 }
56914
56915                 // calculate lengths
56916                 length = 0;
56917                 for (i = wrap(idxA + 1); i !== idxA; i = wrap(i + 1)) {
56918                     length += dist(nodes[i], nodes[wrap(i - 1)]);
56919                     lengths[i] = length;
56920                 }
56921
56922                 length = 0;
56923                 for (i = wrap(idxA - 1); i !== idxA; i = wrap(i - 1)) {
56924                     length += dist(nodes[i], nodes[wrap(i + 1)]);
56925                     if (length < lengths[i]) {
56926                         lengths[i] = length;
56927                     }
56928                 }
56929
56930                 // determine best opposite node to split
56931                 for (i = 0; i < nodes.length; i++) {
56932                     var cost = lengths[i] / dist(nodes[idxA], nodes[i]);
56933                     if (cost > best) {
56934                         idxB = i;
56935                         best = cost;
56936                     }
56937                 }
56938
56939                 return idxB;
56940             }
56941
56942
56943             function split(graph, wayA, newWayId) {
56944                 var wayB = osmWay({ id: newWayId, tags: wayA.tags });   // `wayB` is the NEW way
56945                 var origNodes = wayA.nodes.slice();
56946                 var nodesA;
56947                 var nodesB;
56948                 var isArea = wayA.isArea();
56949                 var isOuter = osmIsOldMultipolygonOuterMember(wayA, graph);
56950
56951                 if (wayA.isClosed()) {
56952                     var nodes = wayA.nodes.slice(0, -1);
56953                     var idxA = nodes.indexOf(nodeId);
56954                     var idxB = splitArea(nodes, idxA, graph);
56955
56956                     if (idxB < idxA) {
56957                         nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1));
56958                         nodesB = nodes.slice(idxB, idxA + 1);
56959                     } else {
56960                         nodesA = nodes.slice(idxA, idxB + 1);
56961                         nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1));
56962                     }
56963                 } else {
56964                     var idx = wayA.nodes.indexOf(nodeId, 1);
56965                     nodesA = wayA.nodes.slice(0, idx + 1);
56966                     nodesB = wayA.nodes.slice(idx);
56967                 }
56968
56969                 wayA = wayA.update({ nodes: nodesA });
56970                 wayB = wayB.update({ nodes: nodesB });
56971
56972                 graph = graph.replace(wayA);
56973                 graph = graph.replace(wayB);
56974
56975                 graph.parentRelations(wayA).forEach(function(relation) {
56976                     var member;
56977
56978                     // Turn restrictions - make sure:
56979                     // 1. Splitting a FROM/TO way - only `wayA` OR `wayB` remains in relation
56980                     //    (whichever one is connected to the VIA node/ways)
56981                     // 2. Splitting a VIA way - `wayB` remains in relation as a VIA way
56982                     if (relation.hasFromViaTo()) {
56983                         var f = relation.memberByRole('from');
56984                         var v = relation.membersByRole('via');
56985                         var t = relation.memberByRole('to');
56986                         var i;
56987
56988                         // 1. split a FROM/TO
56989                         if (f.id === wayA.id || t.id === wayA.id) {
56990                             var keepB = false;
56991                             if (v.length === 1 && v[0].type === 'node') {   // check via node
56992                                 keepB = wayB.contains(v[0].id);
56993                             } else {                                        // check via way(s)
56994                                 for (i = 0; i < v.length; i++) {
56995                                     if (v[i].type === 'way') {
56996                                         var wayVia = graph.hasEntity(v[i].id);
56997                                         if (wayVia && utilArrayIntersection(wayB.nodes, wayVia.nodes).length) {
56998                                             keepB = true;
56999                                             break;
57000                                         }
57001                                     }
57002                                 }
57003                             }
57004
57005                             if (keepB) {
57006                                 relation = relation.replaceMember(wayA, wayB);
57007                                 graph = graph.replace(relation);
57008                             }
57009
57010                         // 2. split a VIA
57011                         } else {
57012                             for (i = 0; i < v.length; i++) {
57013                                 if (v[i].type === 'way' && v[i].id === wayA.id) {
57014                                     member = {
57015                                         id: wayB.id,
57016                                         type: 'way',
57017                                         role: 'via'
57018                                     };
57019                                     graph = actionAddMember(relation.id, member, v[i].index + 1)(graph);
57020                                     break;
57021                                 }
57022                             }
57023                         }
57024
57025                     // All other relations (Routes, Multipolygons, etc):
57026                     // 1. Both `wayA` and `wayB` remain in the relation
57027                     // 2. But must be inserted as a pair (see `actionAddMember` for details)
57028                     } else {
57029                         if (relation === isOuter) {
57030                             graph = graph.replace(relation.mergeTags(wayA.tags));
57031                             graph = graph.replace(wayA.update({ tags: {} }));
57032                             graph = graph.replace(wayB.update({ tags: {} }));
57033                         }
57034
57035                         member = {
57036                             id: wayB.id,
57037                             type: 'way',
57038                             role: relation.memberById(wayA.id).role
57039                         };
57040
57041                         var insertPair = {
57042                             originalID: wayA.id,
57043                             insertedID: wayB.id,
57044                             nodes: origNodes
57045                         };
57046
57047                         graph = actionAddMember(relation.id, member, undefined, insertPair)(graph);
57048                     }
57049                 });
57050
57051                 if (!isOuter && isArea) {
57052                     var multipolygon = osmRelation({
57053                         tags: Object.assign({}, wayA.tags, { type: 'multipolygon' }),
57054                         members: [
57055                             { id: wayA.id, role: 'outer', type: 'way' },
57056                             { id: wayB.id, role: 'outer', type: 'way' }
57057                         ]
57058                     });
57059
57060                     graph = graph.replace(multipolygon);
57061                     graph = graph.replace(wayA.update({ tags: {} }));
57062                     graph = graph.replace(wayB.update({ tags: {} }));
57063                 }
57064
57065                 createdWayIDs.push(wayB.id);
57066
57067                 return graph;
57068             }
57069
57070             var action = function(graph) {
57071                 var candidates = action.ways(graph);
57072                 createdWayIDs = [];
57073                 for (var i = 0; i < candidates.length; i++) {
57074                     graph = split(graph, candidates[i], newWayIds && newWayIds[i]);
57075                 }
57076                 return graph;
57077             };
57078
57079             action.getCreatedWayIDs = function() {
57080                 return createdWayIDs;
57081             };
57082
57083             action.ways = function(graph) {
57084                 var node = graph.entity(nodeId);
57085                 var parents = graph.parentWays(node);
57086                 var hasLines = parents.some(function(parent) {
57087                     return parent.geometry(graph) === 'line';
57088                 });
57089
57090                 return parents.filter(function(parent) {
57091                     if (_wayIDs && _wayIDs.indexOf(parent.id) === -1)
57092                         { return false; }
57093
57094                     if (!_wayIDs && hasLines && parent.geometry(graph) !== 'line')
57095                         { return false; }
57096
57097                     if (parent.isClosed()) {
57098                         return true;
57099                     }
57100
57101                     for (var i = 1; i < parent.nodes.length - 1; i++) {
57102                         if (parent.nodes[i] === nodeId) {
57103                             return true;
57104                         }
57105                     }
57106
57107                     return false;
57108                 });
57109             };
57110
57111
57112             action.disabled = function(graph) {
57113                 var candidates = action.ways(graph);
57114                 if (candidates.length === 0 || (_wayIDs && _wayIDs.length !== candidates.length)) {
57115                     return 'not_eligible';
57116                 }
57117             };
57118
57119
57120             action.limitWays = function(val) {
57121                 if (!arguments.length) { return _wayIDs; }
57122                 _wayIDs = val;
57123                 return action;
57124             };
57125
57126
57127             return action;
57128         }
57129
57130         function coreGraph(other, mutable) {
57131             if (!(this instanceof coreGraph)) { return new coreGraph(other, mutable); }
57132
57133             if (other instanceof coreGraph) {
57134                 var base = other.base();
57135                 this.entities = Object.assign(Object.create(base.entities), other.entities);
57136                 this._parentWays = Object.assign(Object.create(base.parentWays), other._parentWays);
57137                 this._parentRels = Object.assign(Object.create(base.parentRels), other._parentRels);
57138
57139             } else {
57140                 this.entities = Object.create({});
57141                 this._parentWays = Object.create({});
57142                 this._parentRels = Object.create({});
57143                 this.rebase(other || [], [this]);
57144             }
57145
57146             this.transients = {};
57147             this._childNodes = {};
57148             this.frozen = !mutable;
57149         }
57150
57151
57152         coreGraph.prototype = {
57153
57154             hasEntity: function(id) {
57155                 return this.entities[id];
57156             },
57157
57158
57159             entity: function(id) {
57160                 var entity = this.entities[id];
57161
57162                 //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376
57163                 if (!entity) {
57164                     entity = this.entities.__proto__[id];  // eslint-disable-line no-proto
57165                 }
57166
57167                 if (!entity) {
57168                     throw new Error('entity ' + id + ' not found');
57169                 }
57170                 return entity;
57171             },
57172
57173
57174             transient: function(entity, key, fn) {
57175                 var id = entity.id;
57176                 var transients = this.transients[id] || (this.transients[id] = {});
57177
57178                 if (transients[key] !== undefined) {
57179                     return transients[key];
57180                 }
57181
57182                 transients[key] = fn.call(entity);
57183
57184                 return transients[key];
57185             },
57186
57187
57188             parentWays: function(entity) {
57189                 var parents = this._parentWays[entity.id];
57190                 var result = [];
57191                 if (parents) {
57192                     parents.forEach(function(id) {
57193                         result.push(this.entity(id));
57194                     }, this);
57195                 }
57196                 return result;
57197             },
57198
57199
57200             isPoi: function(entity) {
57201                 var parents = this._parentWays[entity.id];
57202                 return !parents || parents.size === 0;
57203             },
57204
57205
57206             isShared: function(entity) {
57207                 var parents = this._parentWays[entity.id];
57208                 return parents && parents.size > 1;
57209             },
57210
57211
57212             parentRelations: function(entity) {
57213                 var parents = this._parentRels[entity.id];
57214                 var result = [];
57215                 if (parents) {
57216                     parents.forEach(function(id) {
57217                         result.push(this.entity(id));
57218                     }, this);
57219                 }
57220                 return result;
57221             },
57222
57223             parentMultipolygons: function(entity) {
57224                 return this.parentRelations(entity).filter(function(relation) {
57225                     return relation.isMultipolygon();
57226                 });
57227             },
57228
57229
57230             childNodes: function(entity) {
57231                 if (this._childNodes[entity.id]) { return this._childNodes[entity.id]; }
57232                 if (!entity.nodes) { return []; }
57233
57234                 var nodes = [];
57235                 for (var i = 0; i < entity.nodes.length; i++) {
57236                     nodes[i] = this.entity(entity.nodes[i]);
57237                 }
57238
57239                 this._childNodes[entity.id] = nodes;
57240                 return this._childNodes[entity.id];
57241             },
57242
57243
57244             base: function() {
57245                 return {
57246                     'entities': Object.getPrototypeOf(this.entities),
57247                     'parentWays': Object.getPrototypeOf(this._parentWays),
57248                     'parentRels': Object.getPrototypeOf(this._parentRels)
57249                 };
57250             },
57251
57252
57253             // Unlike other graph methods, rebase mutates in place. This is because it
57254             // is used only during the history operation that merges newly downloaded
57255             // data into each state. To external consumers, it should appear as if the
57256             // graph always contained the newly downloaded data.
57257             rebase: function(entities, stack, force) {
57258                 var base = this.base();
57259                 var i, j, k, id;
57260
57261                 for (i = 0; i < entities.length; i++) {
57262                     var entity = entities[i];
57263
57264                     if (!entity.visible || (!force && base.entities[entity.id]))
57265                         { continue; }
57266
57267                     // Merging data into the base graph
57268                     base.entities[entity.id] = entity;
57269                     this._updateCalculated(undefined, entity, base.parentWays, base.parentRels);
57270
57271                     // Restore provisionally-deleted nodes that are discovered to have an extant parent
57272                     if (entity.type === 'way') {
57273                         for (j = 0; j < entity.nodes.length; j++) {
57274                             id = entity.nodes[j];
57275                             for (k = 1; k < stack.length; k++) {
57276                                 var ents = stack[k].entities;
57277                                 if (ents.hasOwnProperty(id) && ents[id] === undefined) {
57278                                     delete ents[id];
57279                                 }
57280                             }
57281                         }
57282                     }
57283                 }
57284
57285                 for (i = 0; i < stack.length; i++) {
57286                     stack[i]._updateRebased();
57287                 }
57288             },
57289
57290
57291             _updateRebased: function() {
57292                 var base = this.base();
57293
57294                 Object.keys(this._parentWays).forEach(function(child) {
57295                     if (base.parentWays[child]) {
57296                         base.parentWays[child].forEach(function(id) {
57297                             if (!this.entities.hasOwnProperty(id)) {
57298                                 this._parentWays[child].add(id);
57299                             }
57300                         }, this);
57301                     }
57302                 }, this);
57303
57304                 Object.keys(this._parentRels).forEach(function(child) {
57305                     if (base.parentRels[child]) {
57306                         base.parentRels[child].forEach(function(id) {
57307                             if (!this.entities.hasOwnProperty(id)) {
57308                                 this._parentRels[child].add(id);
57309                             }
57310                         }, this);
57311                     }
57312                 }, this);
57313
57314                 this.transients = {};
57315
57316                 // this._childNodes is not updated, under the assumption that
57317                 // ways are always downloaded with their child nodes.
57318             },
57319
57320
57321             // Updates calculated properties (parentWays, parentRels) for the specified change
57322             _updateCalculated: function(oldentity, entity, parentWays, parentRels) {
57323                 parentWays = parentWays || this._parentWays;
57324                 parentRels = parentRels || this._parentRels;
57325
57326                 var type = entity && entity.type || oldentity && oldentity.type;
57327                 var removed, added, i;
57328
57329                 if (type === 'way') {   // Update parentWays
57330                     if (oldentity && entity) {
57331                         removed = utilArrayDifference(oldentity.nodes, entity.nodes);
57332                         added = utilArrayDifference(entity.nodes, oldentity.nodes);
57333                     } else if (oldentity) {
57334                         removed = oldentity.nodes;
57335                         added = [];
57336                     } else if (entity) {
57337                         removed = [];
57338                         added = entity.nodes;
57339                     }
57340                     for (i = 0; i < removed.length; i++) {
57341                         // make a copy of prototype property, store as own property, and update..
57342                         parentWays[removed[i]] = new Set(parentWays[removed[i]]);
57343                         parentWays[removed[i]].delete(oldentity.id);
57344                     }
57345                     for (i = 0; i < added.length; i++) {
57346                         // make a copy of prototype property, store as own property, and update..
57347                         parentWays[added[i]] = new Set(parentWays[added[i]]);
57348                         parentWays[added[i]].add(entity.id);
57349                     }
57350
57351                 } else if (type === 'relation') {   // Update parentRels
57352
57353                     // diff only on the IDs since the same entity can be a member multiple times with different roles
57354                     var oldentityMemberIDs = oldentity ? oldentity.members.map(function(m) { return m.id; }) : [];
57355                     var entityMemberIDs = entity ? entity.members.map(function(m) { return m.id; }) : [];
57356
57357                     if (oldentity && entity) {
57358                         removed = utilArrayDifference(oldentityMemberIDs, entityMemberIDs);
57359                         added = utilArrayDifference(entityMemberIDs, oldentityMemberIDs);
57360                     } else if (oldentity) {
57361                         removed = oldentityMemberIDs;
57362                         added = [];
57363                     } else if (entity) {
57364                         removed = [];
57365                         added = entityMemberIDs;
57366                     }
57367                     for (i = 0; i < removed.length; i++) {
57368                         // make a copy of prototype property, store as own property, and update..
57369                         parentRels[removed[i]] = new Set(parentRels[removed[i]]);
57370                         parentRels[removed[i]].delete(oldentity.id);
57371                     }
57372                     for (i = 0; i < added.length; i++) {
57373                         // make a copy of prototype property, store as own property, and update..
57374                         parentRels[added[i]] = new Set(parentRels[added[i]]);
57375                         parentRels[added[i]].add(entity.id);
57376                     }
57377                 }
57378             },
57379
57380
57381             replace: function(entity) {
57382                 if (this.entities[entity.id] === entity) { return this; }
57383
57384                 return this.update(function() {
57385                     this._updateCalculated(this.entities[entity.id], entity);
57386                     this.entities[entity.id] = entity;
57387                 });
57388             },
57389
57390
57391             remove: function(entity) {
57392                 return this.update(function() {
57393                     this._updateCalculated(entity, undefined);
57394                     this.entities[entity.id] = undefined;
57395                 });
57396             },
57397
57398
57399             revert: function(id) {
57400                 var baseEntity = this.base().entities[id];
57401                 var headEntity = this.entities[id];
57402                 if (headEntity === baseEntity) { return this; }
57403
57404                 return this.update(function() {
57405                     this._updateCalculated(headEntity, baseEntity);
57406                     delete this.entities[id];
57407                 });
57408             },
57409
57410
57411             update: function() {
57412                 var arguments$1 = arguments;
57413
57414                 var graph = this.frozen ? coreGraph(this, true) : this;
57415                 for (var i = 0; i < arguments.length; i++) {
57416                     arguments$1[i].call(graph, graph);
57417                 }
57418
57419                 if (this.frozen) { graph.frozen = true; }
57420
57421                 return graph;
57422             },
57423
57424
57425             // Obliterates any existing entities
57426             load: function(entities) {
57427                 var base = this.base();
57428                 this.entities = Object.create(base.entities);
57429
57430                 for (var i in entities) {
57431                     this.entities[i] = entities[i];
57432                     this._updateCalculated(base.entities[i], this.entities[i]);
57433                 }
57434
57435                 return this;
57436             }
57437         };
57438
57439         function osmTurn(turn) {
57440             if (!(this instanceof osmTurn)) {
57441                 return new osmTurn(turn);
57442             }
57443             Object.assign(this, turn);
57444         }
57445
57446
57447         function osmIntersection(graph, startVertexId, maxDistance) {
57448             maxDistance = maxDistance || 30;    // in meters
57449             var vgraph = coreGraph();           // virtual graph
57450             var i, j, k;
57451
57452
57453             function memberOfRestriction(entity) {
57454                 return graph.parentRelations(entity)
57455                     .some(function(r) { return r.isRestriction(); });
57456             }
57457
57458             function isRoad(way) {
57459                 if (way.isArea() || way.isDegenerate()) { return false; }
57460                 var roads = {
57461                     'motorway': true,
57462                     'motorway_link': true,
57463                     'trunk': true,
57464                     'trunk_link': true,
57465                     'primary': true,
57466                     'primary_link': true,
57467                     'secondary': true,
57468                     'secondary_link': true,
57469                     'tertiary': true,
57470                     'tertiary_link': true,
57471                     'residential': true,
57472                     'unclassified': true,
57473                     'living_street': true,
57474                     'service': true,
57475                     'road': true,
57476                     'track': true
57477                 };
57478                 return roads[way.tags.highway];
57479             }
57480
57481
57482             var startNode = graph.entity(startVertexId);
57483             var checkVertices = [startNode];
57484             var checkWays;
57485             var vertices = [];
57486             var vertexIds = [];
57487             var vertex;
57488             var ways = [];
57489             var wayIds = [];
57490             var way;
57491             var nodes = [];
57492             var node;
57493             var parents = [];
57494             var parent;
57495
57496             // `actions` will store whatever actions must be performed to satisfy
57497             // preconditions for adding a turn restriction to this intersection.
57498             //  - Remove any existing degenerate turn restrictions (missing from/to, etc)
57499             //  - Reverse oneways so that they are drawn in the forward direction
57500             //  - Split ways on key vertices
57501             var actions = [];
57502
57503
57504             // STEP 1:  walk the graph outwards from starting vertex to search
57505             //  for more key vertices and ways to include in the intersection..
57506
57507             while (checkVertices.length) {
57508                 vertex = checkVertices.pop();
57509
57510                 // check this vertex for parent ways that are roads
57511                 checkWays = graph.parentWays(vertex);
57512                 var hasWays = false;
57513                 for (i = 0; i < checkWays.length; i++) {
57514                     way = checkWays[i];
57515                     if (!isRoad(way) && !memberOfRestriction(way)) { continue; }
57516
57517                     ways.push(way);   // it's a road, or it's already in a turn restriction
57518                     hasWays = true;
57519
57520                     // check the way's children for more key vertices
57521                     nodes = utilArrayUniq(graph.childNodes(way));
57522                     for (j = 0; j < nodes.length; j++) {
57523                         node = nodes[j];
57524                         if (node === vertex) { continue; }                                           // same thing
57525                         if (vertices.indexOf(node) !== -1) { continue; }                             // seen it already
57526                         if (geoSphericalDistance(node.loc, startNode.loc) > maxDistance) { continue; }   // too far from start
57527
57528                         // a key vertex will have parents that are also roads
57529                         var hasParents = false;
57530                         parents = graph.parentWays(node);
57531                         for (k = 0; k < parents.length; k++) {
57532                             parent = parents[k];
57533                             if (parent === way) { continue; }                 // same thing
57534                             if (ways.indexOf(parent) !== -1) { continue; }    // seen it already
57535                             if (!isRoad(parent)) { continue; }                // not a road
57536                             hasParents = true;
57537                             break;
57538                         }
57539
57540                         if (hasParents) {
57541                             checkVertices.push(node);
57542                         }
57543                     }
57544                 }
57545
57546                 if (hasWays) {
57547                     vertices.push(vertex);
57548                 }
57549             }
57550
57551             vertices = utilArrayUniq(vertices);
57552             ways = utilArrayUniq(ways);
57553
57554
57555             // STEP 2:  Build a virtual graph containing only the entities in the intersection..
57556             // Everything done after this step should act on the virtual graph
57557             // Any actions that must be performed later to the main graph go in `actions` array
57558             ways.forEach(function(way) {
57559                 graph.childNodes(way).forEach(function(node) {
57560                     vgraph = vgraph.replace(node);
57561                 });
57562
57563                 vgraph = vgraph.replace(way);
57564
57565                 graph.parentRelations(way).forEach(function(relation) {
57566                     if (relation.isRestriction()) {
57567                         if (relation.isValidRestriction(graph)) {
57568                             vgraph = vgraph.replace(relation);
57569                         } else if (relation.isComplete(graph)) {
57570                             actions.push(actionDeleteRelation(relation.id));
57571                         }
57572                     }
57573                 });
57574             });
57575
57576
57577             // STEP 3:  Force all oneways to be drawn in the forward direction
57578             ways.forEach(function(w) {
57579                 var way = vgraph.entity(w.id);
57580                 if (way.tags.oneway === '-1') {
57581                     var action = actionReverse(way.id, { reverseOneway: true });
57582                     actions.push(action);
57583                     vgraph = action(vgraph);
57584                 }
57585             });
57586
57587
57588             // STEP 4:  Split ways on key vertices
57589             var origCount = osmEntity.id.next.way;
57590             vertices.forEach(function(v) {
57591                 // This is an odd way to do it, but we need to find all the ways that
57592                 // will be split here, then split them one at a time to ensure that these
57593                 // actions can be replayed on the main graph exactly in the same order.
57594                 // (It is unintuitive, but the order of ways returned from graph.parentWays()
57595                 // is arbitrary, depending on how the main graph and vgraph were built)
57596                 var splitAll = actionSplit(v.id);
57597                 if (!splitAll.disabled(vgraph)) {
57598                     splitAll.ways(vgraph).forEach(function(way) {
57599                         var splitOne = actionSplit(v.id).limitWays([way.id]);
57600                         actions.push(splitOne);
57601                         vgraph = splitOne(vgraph);
57602                     });
57603                 }
57604             });
57605
57606             // In here is where we should also split the intersection at nearby junction.
57607             //   for https://github.com/mapbox/iD-internal/issues/31
57608             // nearbyVertices.forEach(function(v) {
57609             // });
57610
57611             // Reasons why we reset the way id count here:
57612             //  1. Continuity with way ids created by the splits so that we can replay
57613             //     these actions later if the user decides to create a turn restriction
57614             //  2. Avoids churning way ids just by hovering over a vertex
57615             //     and displaying the turn restriction editor
57616             osmEntity.id.next.way = origCount;
57617
57618
57619             // STEP 5:  Update arrays to point to vgraph entities
57620             vertexIds = vertices.map(function(v) { return v.id; });
57621             vertices = [];
57622             ways = [];
57623
57624             vertexIds.forEach(function(id) {
57625                 var vertex = vgraph.entity(id);
57626                 var parents = vgraph.parentWays(vertex);
57627                 vertices.push(vertex);
57628                 ways = ways.concat(parents);
57629             });
57630
57631             vertices = utilArrayUniq(vertices);
57632             ways = utilArrayUniq(ways);
57633
57634             vertexIds = vertices.map(function(v) { return v.id; });
57635             wayIds = ways.map(function(w) { return w.id; });
57636
57637
57638             // STEP 6:  Update the ways with some metadata that will be useful for
57639             // walking the intersection graph later and rendering turn arrows.
57640
57641             function withMetadata(way, vertexIds) {
57642                 var __oneWay = way.isOneWay();
57643
57644                 // which affixes are key vertices?
57645                 var __first = (vertexIds.indexOf(way.first()) !== -1);
57646                 var __last = (vertexIds.indexOf(way.last()) !== -1);
57647
57648                 // what roles is this way eligible for?
57649                 var __via = (__first && __last);
57650                 var __from = ((__first && !__oneWay) || __last);
57651                 var __to = (__first || (__last && !__oneWay));
57652
57653                 return way.update({
57654                     __first:  __first,
57655                     __last:  __last,
57656                     __from:  __from,
57657                     __via: __via,
57658                     __to:  __to,
57659                     __oneWay:  __oneWay
57660                 });
57661             }
57662
57663             ways = [];
57664             wayIds.forEach(function(id) {
57665                 var way = withMetadata(vgraph.entity(id), vertexIds);
57666                 vgraph = vgraph.replace(way);
57667                 ways.push(way);
57668             });
57669
57670
57671             // STEP 7:  Simplify - This is an iterative process where we:
57672             //  1. Find trivial vertices with only 2 parents
57673             //  2. trim off the leaf way from those vertices and remove from vgraph
57674
57675             var keepGoing;
57676             var removeWayIds = [];
57677             var removeVertexIds = [];
57678
57679             do {
57680                 keepGoing = false;
57681                 checkVertices = vertexIds.slice();
57682
57683                 for (i = 0; i < checkVertices.length; i++) {
57684                     var vertexId = checkVertices[i];
57685                     vertex = vgraph.hasEntity(vertexId);
57686
57687                     if (!vertex) {
57688                         if (vertexIds.indexOf(vertexId) !== -1) {
57689                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
57690                         }
57691                         removeVertexIds.push(vertexId);
57692                         continue;
57693                     }
57694
57695                     parents = vgraph.parentWays(vertex);
57696                     if (parents.length < 3) {
57697                         if (vertexIds.indexOf(vertexId) !== -1) {
57698                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
57699                         }
57700                     }
57701
57702                     if (parents.length === 2) {     // vertex with 2 parents is trivial
57703                         var a = parents[0];
57704                         var b = parents[1];
57705                         var aIsLeaf = a && !a.__via;
57706                         var bIsLeaf = b && !b.__via;
57707                         var leaf, survivor;
57708
57709                         if (aIsLeaf && !bIsLeaf) {
57710                             leaf = a;
57711                             survivor = b;
57712                         } else if (!aIsLeaf && bIsLeaf) {
57713                             leaf = b;
57714                             survivor = a;
57715                         }
57716
57717                         if (leaf && survivor) {
57718                             survivor = withMetadata(survivor, vertexIds);      // update survivor way
57719                             vgraph = vgraph.replace(survivor).remove(leaf);    // update graph
57720                             removeWayIds.push(leaf.id);
57721                             keepGoing = true;
57722                         }
57723                     }
57724
57725                     parents = vgraph.parentWays(vertex);
57726
57727                     if (parents.length < 2) {     // vertex is no longer a key vertex
57728                         if (vertexIds.indexOf(vertexId) !== -1) {
57729                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
57730                         }
57731                         removeVertexIds.push(vertexId);
57732                         keepGoing = true;
57733                     }
57734
57735                     if (parents.length < 1) {     // vertex is no longer attached to anything
57736                         vgraph = vgraph.remove(vertex);
57737                     }
57738
57739                 }
57740             } while (keepGoing);
57741
57742
57743             vertices = vertices
57744                 .filter(function(vertex) { return removeVertexIds.indexOf(vertex.id) === -1; })
57745                 .map(function(vertex) { return vgraph.entity(vertex.id); });
57746             ways = ways
57747                 .filter(function(way) { return removeWayIds.indexOf(way.id) === -1; })
57748                 .map(function(way) { return vgraph.entity(way.id); });
57749
57750
57751             // OK!  Here is our intersection..
57752             var intersection = {
57753                 graph: vgraph,
57754                 actions: actions,
57755                 vertices: vertices,
57756                 ways: ways,
57757             };
57758
57759
57760
57761             // Get all the valid turns through this intersection given a starting way id.
57762             // This operates on the virtual graph for everything.
57763             //
57764             // Basically, walk through all possible paths from starting way,
57765             //   honoring the existing turn restrictions as we go (watch out for loops!)
57766             //
57767             // For each path found, generate and return a `osmTurn` datastructure.
57768             //
57769             intersection.turns = function(fromWayId, maxViaWay) {
57770                 if (!fromWayId) { return []; }
57771                 if (!maxViaWay) { maxViaWay = 0; }
57772
57773                 var vgraph = intersection.graph;
57774                 var keyVertexIds = intersection.vertices.map(function(v) { return v.id; });
57775
57776                 var start = vgraph.entity(fromWayId);
57777                 if (!start || !(start.__from || start.__via)) { return []; }
57778
57779                 // maxViaWay=0   from-*-to              (0 vias)
57780                 // maxViaWay=1   from-*-via-*-to        (1 via max)
57781                 // maxViaWay=2   from-*-via-*-via-*-to  (2 vias max)
57782                 var maxPathLength = (maxViaWay * 2) + 3;
57783                 var turns = [];
57784
57785                 step(start);
57786                 return turns;
57787
57788
57789                 // traverse the intersection graph and find all the valid paths
57790                 function step(entity, currPath, currRestrictions, matchedRestriction) {
57791                     currPath = (currPath || []).slice();  // shallow copy
57792                     if (currPath.length >= maxPathLength) { return; }
57793                     currPath.push(entity.id);
57794                     currRestrictions = (currRestrictions || []).slice();  // shallow copy
57795                     var i, j;
57796
57797                     if (entity.type === 'node') {
57798                         var parents = vgraph.parentWays(entity);
57799                         var nextWays = [];
57800
57801                         // which ways can we step into?
57802                         for (i = 0; i < parents.length; i++) {
57803                             var way = parents[i];
57804
57805                             // if next way is a oneway incoming to this vertex, skip
57806                             if (way.__oneWay && way.nodes[0] !== entity.id) { continue; }
57807
57808                             // if we have seen it before (allowing for an initial u-turn), skip
57809                             if (currPath.indexOf(way.id) !== -1 && currPath.length >= 3) { continue; }
57810
57811                             // Check all "current" restrictions (where we've already walked the `FROM`)
57812                             var restrict = undefined;
57813                             for (j = 0; j < currRestrictions.length; j++) {
57814                                 var restriction = currRestrictions[j];
57815                                 var f = restriction.memberByRole('from');
57816                                 var v = restriction.membersByRole('via');
57817                                 var t = restriction.memberByRole('to');
57818                                 var isOnly = /^only_/.test(restriction.tags.restriction);
57819
57820                                 // Does the current path match this turn restriction?
57821                                 var matchesFrom = (f.id === fromWayId);
57822                                 var matchesViaTo = false;
57823                                 var isAlongOnlyPath = false;
57824
57825                                 if (t.id === way.id) {     // match TO
57826
57827                                     if (v.length === 1 && v[0].type === 'node') {    // match VIA node
57828                                         matchesViaTo = (v[0].id === entity.id && (
57829                                             (matchesFrom && currPath.length === 2) ||
57830                                             (!matchesFrom && currPath.length > 2)
57831                                         ));
57832
57833                                     } else {                                         // match all VIA ways
57834                                         var pathVias = [];
57835                                         for (k = 2; k < currPath.length; k +=2 ) {   // k = 2 skips FROM
57836                                             pathVias.push(currPath[k]);              // (path goes way-node-way...)
57837                                         }
57838                                         var restrictionVias = [];
57839                                         for (k = 0; k < v.length; k++) {
57840                                             if (v[k].type === 'way') {
57841                                                 restrictionVias.push(v[k].id);
57842                                             }
57843                                         }
57844                                         var diff = utilArrayDifference(pathVias, restrictionVias);
57845                                         matchesViaTo = !diff.length;
57846                                     }
57847
57848                                 } else if (isOnly) {
57849                                     for (k = 0; k < v.length; k++) {
57850                                         // way doesn't match TO, but is one of the via ways along the path of an "only"
57851                                         if (v[k].type === 'way' && v[k].id === way.id) {
57852                                             isAlongOnlyPath = true;
57853                                             break;
57854                                         }
57855                                     }
57856                                 }
57857
57858                                 if (matchesViaTo) {
57859                                     if (isOnly) {
57860                                         restrict = { id: restriction.id, direct: matchesFrom, from: f.id, only: true, end: true };
57861                                     } else {
57862                                         restrict = { id: restriction.id, direct: matchesFrom, from: f.id, no: true, end: true };
57863                                     }
57864                                 } else {    // indirect - caused by a different nearby restriction
57865                                     if (isAlongOnlyPath) {
57866                                         restrict = { id: restriction.id, direct: false, from: f.id, only: true, end: false };
57867                                     } else if (isOnly) {
57868                                         restrict = { id: restriction.id, direct: false, from: f.id, no: true, end: true };
57869                                     }
57870                                 }
57871
57872                                 // stop looking if we find a "direct" restriction (matching FROM, VIA, TO)
57873                                 if (restrict && restrict.direct)
57874                                     { break; }
57875                             }
57876
57877                             nextWays.push({ way: way, restrict: restrict });
57878                         }
57879
57880                         nextWays.forEach(function(nextWay) {
57881                             step(nextWay.way, currPath, currRestrictions, nextWay.restrict);
57882                         });
57883
57884
57885                     } else {  // entity.type === 'way'
57886                         if (currPath.length >= 3) {     // this is a "complete" path..
57887                             var turnPath = currPath.slice();   // shallow copy
57888
57889                             // an indirect restriction - only include the partial path (starting at FROM)
57890                             if (matchedRestriction && matchedRestriction.direct === false) {
57891                                 for (i = 0; i < turnPath.length; i++) {
57892                                     if (turnPath[i] === matchedRestriction.from) {
57893                                         turnPath = turnPath.slice(i);
57894                                         break;
57895                                     }
57896                                 }
57897                             }
57898
57899                             var turn = pathToTurn(turnPath);
57900                             if (turn) {
57901                                 if (matchedRestriction) {
57902                                     turn.restrictionID = matchedRestriction.id;
57903                                     turn.no = matchedRestriction.no;
57904                                     turn.only = matchedRestriction.only;
57905                                     turn.direct = matchedRestriction.direct;
57906                                 }
57907                                 turns.push(osmTurn(turn));
57908                             }
57909
57910                             if (currPath[0] === currPath[2]) { return; }   // if we made a u-turn - stop here
57911                         }
57912
57913                         if (matchedRestriction && matchedRestriction.end) { return; }  // don't advance any further
57914
57915                         // which nodes can we step into?
57916                         var n1 = vgraph.entity(entity.first());
57917                         var n2 = vgraph.entity(entity.last());
57918                         var dist = geoSphericalDistance(n1.loc, n2.loc);
57919                         var nextNodes = [];
57920
57921                         if (currPath.length > 1) {
57922                             if (dist > maxDistance) { return; }   // the next node is too far
57923                             if (!entity.__via) { return; }        // this way is a leaf / can't be a via
57924                         }
57925
57926                         if (!entity.__oneWay &&                     // bidirectional..
57927                             keyVertexIds.indexOf(n1.id) !== -1 &&   // key vertex..
57928                             currPath.indexOf(n1.id) === -1) {       // haven't seen it yet..
57929                             nextNodes.push(n1);                     // can advance to first node
57930                         }
57931                         if (keyVertexIds.indexOf(n2.id) !== -1 &&   // key vertex..
57932                             currPath.indexOf(n2.id) === -1) {       // haven't seen it yet..
57933                             nextNodes.push(n2);                     // can advance to last node
57934                         }
57935
57936                         nextNodes.forEach(function(nextNode) {
57937                             // gather restrictions FROM this way
57938                             var fromRestrictions = vgraph.parentRelations(entity).filter(function(r) {
57939                                 if (!r.isRestriction()) { return false; }
57940
57941                                 var f = r.memberByRole('from');
57942                                 if (!f || f.id !== entity.id) { return false; }
57943
57944                                 var isOnly = /^only_/.test(r.tags.restriction);
57945                                 if (!isOnly) { return true; }
57946
57947                                 // `only_` restrictions only matter along the direction of the VIA - #4849
57948                                 var isOnlyVia = false;
57949                                 var v = r.membersByRole('via');
57950                                 if (v.length === 1 && v[0].type === 'node') {   // via node
57951                                     isOnlyVia = (v[0].id === nextNode.id);
57952                                 } else {                                        // via way(s)
57953                                     for (var i = 0; i < v.length; i++) {
57954                                         if (v[i].type !== 'way') { continue; }
57955                                         var viaWay = vgraph.entity(v[i].id);
57956                                         if (viaWay.first() === nextNode.id || viaWay.last() === nextNode.id) {
57957                                             isOnlyVia = true;
57958                                             break;
57959                                         }
57960                                     }
57961                                 }
57962                                 return isOnlyVia;
57963                             });
57964
57965                             step(nextNode, currPath, currRestrictions.concat(fromRestrictions), false);
57966                         });
57967                     }
57968                 }
57969
57970
57971                 // assumes path is alternating way-node-way of odd length
57972                 function pathToTurn(path) {
57973                     if (path.length < 3) { return; }
57974                     var fromWayId, fromNodeId, fromVertexId;
57975                     var toWayId, toNodeId, toVertexId;
57976                     var viaWayIds, viaNodeId, isUturn;
57977
57978                     fromWayId = path[0];
57979                     toWayId = path[path.length - 1];
57980
57981                     if (path.length === 3 && fromWayId === toWayId) {  // u turn
57982                         var way = vgraph.entity(fromWayId);
57983                         if (way.__oneWay) { return null; }
57984
57985                         isUturn = true;
57986                         viaNodeId = fromVertexId = toVertexId = path[1];
57987                         fromNodeId = toNodeId = adjacentNode(fromWayId, viaNodeId);
57988
57989                     } else {
57990                         isUturn = false;
57991                         fromVertexId = path[1];
57992                         fromNodeId = adjacentNode(fromWayId, fromVertexId);
57993                         toVertexId = path[path.length - 2];
57994                         toNodeId = adjacentNode(toWayId, toVertexId);
57995
57996                         if (path.length === 3) {
57997                             viaNodeId = path[1];
57998                         } else {
57999                             viaWayIds = path.filter(function(entityId) { return entityId[0] === 'w'; });
58000                             viaWayIds = viaWayIds.slice(1, viaWayIds.length - 1);  // remove first, last
58001                         }
58002                     }
58003
58004                     return {
58005                         key:  path.join('_'),
58006                         path: path,
58007                         from: { node: fromNodeId, way:  fromWayId, vertex: fromVertexId },
58008                         via:  { node: viaNodeId,  ways: viaWayIds },
58009                         to:   { node: toNodeId,   way:  toWayId, vertex: toVertexId },
58010                         u:    isUturn
58011                     };
58012
58013
58014                     function adjacentNode(wayId, affixId) {
58015                         var nodes = vgraph.entity(wayId).nodes;
58016                         return affixId === nodes[0] ? nodes[1] : nodes[nodes.length - 2];
58017                     }
58018                 }
58019
58020             };
58021
58022             return intersection;
58023         }
58024
58025
58026         function osmInferRestriction(graph, turn, projection) {
58027             var fromWay = graph.entity(turn.from.way);
58028             var fromNode = graph.entity(turn.from.node);
58029             var fromVertex = graph.entity(turn.from.vertex);
58030             var toWay = graph.entity(turn.to.way);
58031             var toNode = graph.entity(turn.to.node);
58032             var toVertex = graph.entity(turn.to.vertex);
58033
58034             var fromOneWay = (fromWay.tags.oneway === 'yes');
58035             var toOneWay = (toWay.tags.oneway === 'yes');
58036             var angle = (geoAngle(fromVertex, fromNode, projection) -
58037                         geoAngle(toVertex, toNode, projection)) * 180 / Math.PI;
58038
58039             while (angle < 0)
58040                 { angle += 360; }
58041
58042             if (fromNode === toNode)
58043                 { return 'no_u_turn'; }
58044             if ((angle < 23 || angle > 336) && fromOneWay && toOneWay)
58045                 { return 'no_u_turn'; }   // wider tolerance for u-turn if both ways are oneway
58046             if ((angle < 40 || angle > 319) && fromOneWay && toOneWay && turn.from.vertex !== turn.to.vertex)
58047                 { return 'no_u_turn'; }   // even wider tolerance for u-turn if there is a via way (from !== to)
58048             if (angle < 158)
58049                 { return 'no_right_turn'; }
58050             if (angle > 202)
58051                 { return 'no_left_turn'; }
58052
58053             return 'no_straight_on';
58054         }
58055
58056         function actionMergePolygon(ids, newRelationId) {
58057
58058             function groupEntities(graph) {
58059                 var entities = ids.map(function (id) { return graph.entity(id); });
58060                 var geometryGroups = utilArrayGroupBy(entities, function(entity) {
58061                     if (entity.type === 'way' && entity.isClosed()) {
58062                         return 'closedWay';
58063                     } else if (entity.type === 'relation' && entity.isMultipolygon()) {
58064                         return 'multipolygon';
58065                     } else {
58066                         return 'other';
58067                     }
58068                 });
58069
58070                 return Object.assign(
58071                     { closedWay: [], multipolygon: [], other: [] },
58072                     geometryGroups
58073                 );
58074             }
58075
58076
58077             var action = function(graph) {
58078                 var entities = groupEntities(graph);
58079
58080                 // An array representing all the polygons that are part of the multipolygon.
58081                 //
58082                 // Each element is itself an array of objects with an id property, and has a
58083                 // locs property which is an array of the locations forming the polygon.
58084                 var polygons = entities.multipolygon.reduce(function(polygons, m) {
58085                     return polygons.concat(osmJoinWays(m.members, graph));
58086                 }, []).concat(entities.closedWay.map(function(d) {
58087                     var member = [{id: d.id}];
58088                     member.nodes = graph.childNodes(d);
58089                     return member;
58090                 }));
58091
58092                 // contained is an array of arrays of boolean values,
58093                 // where contained[j][k] is true iff the jth way is
58094                 // contained by the kth way.
58095                 var contained = polygons.map(function(w, i) {
58096                     return polygons.map(function(d, n) {
58097                         if (i === n) { return null; }
58098                         return geoPolygonContainsPolygon(
58099                             d.nodes.map(function(n) { return n.loc; }),
58100                             w.nodes.map(function(n) { return n.loc; })
58101                         );
58102                     });
58103                 });
58104
58105                 // Sort all polygons as either outer or inner ways
58106                 var members = [];
58107                 var outer = true;
58108
58109                 while (polygons.length) {
58110                     extractUncontained(polygons);
58111                     polygons = polygons.filter(isContained);
58112                     contained = contained.filter(isContained).map(filterContained);
58113                 }
58114
58115                 function isContained(d, i) {
58116                     return contained[i].some(function(val) { return val; });
58117                 }
58118
58119                 function filterContained(d) {
58120                     return d.filter(isContained);
58121                 }
58122
58123                 function extractUncontained(polygons) {
58124                     polygons.forEach(function(d, i) {
58125                         if (!isContained(d, i)) {
58126                             d.forEach(function(member) {
58127                                 members.push({
58128                                     type: 'way',
58129                                     id: member.id,
58130                                     role: outer ? 'outer' : 'inner'
58131                                 });
58132                             });
58133                         }
58134                     });
58135                     outer = !outer;
58136                 }
58137
58138                 // Move all tags to one relation
58139                 var relation = entities.multipolygon[0] ||
58140                     osmRelation({ id: newRelationId, tags: { type: 'multipolygon' }});
58141
58142                 entities.multipolygon.slice(1).forEach(function(m) {
58143                     relation = relation.mergeTags(m.tags);
58144                     graph = graph.remove(m);
58145                 });
58146
58147                 entities.closedWay.forEach(function(way) {
58148                     function isThisOuter(m) {
58149                         return m.id === way.id && m.role !== 'inner';
58150                     }
58151                     if (members.some(isThisOuter)) {
58152                         relation = relation.mergeTags(way.tags);
58153                         graph = graph.replace(way.update({ tags: {} }));
58154                     }
58155                 });
58156
58157                 return graph.replace(relation.update({
58158                     members: members,
58159                     tags: utilObjectOmit(relation.tags, ['area'])
58160                 }));
58161             };
58162
58163
58164             action.disabled = function(graph) {
58165                 var entities = groupEntities(graph);
58166                 if (entities.other.length > 0 ||
58167                     entities.closedWay.length + entities.multipolygon.length < 2)
58168                     { return 'not_eligible'; }
58169                 if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); }))
58170                     { return 'incomplete_relation'; }
58171             };
58172
58173
58174             return action;
58175         }
58176
58177         // do not edit .js files directly - edit src/index.jst
58178
58179
58180
58181         var fastDeepEqual = function equal(a, b) {
58182           if (a === b) { return true; }
58183
58184           if (a && b && typeof a == 'object' && typeof b == 'object') {
58185             if (a.constructor !== b.constructor) { return false; }
58186
58187             var length, i, keys;
58188             if (Array.isArray(a)) {
58189               length = a.length;
58190               if (length != b.length) { return false; }
58191               for (i = length; i-- !== 0;)
58192                 { if (!equal(a[i], b[i])) { return false; } }
58193               return true;
58194             }
58195
58196
58197
58198             if (a.constructor === RegExp) { return a.source === b.source && a.flags === b.flags; }
58199             if (a.valueOf !== Object.prototype.valueOf) { return a.valueOf() === b.valueOf(); }
58200             if (a.toString !== Object.prototype.toString) { return a.toString() === b.toString(); }
58201
58202             keys = Object.keys(a);
58203             length = keys.length;
58204             if (length !== Object.keys(b).length) { return false; }
58205
58206             for (i = length; i-- !== 0;)
58207               { if (!Object.prototype.hasOwnProperty.call(b, keys[i])) { return false; } }
58208
58209             for (i = length; i-- !== 0;) {
58210               var key = keys[i];
58211
58212               if (!equal(a[key], b[key])) { return false; }
58213             }
58214
58215             return true;
58216           }
58217
58218           // true if both NaN, false otherwise
58219           return a!==a && b!==b;
58220         };
58221
58222         // Text diff algorithm following Hunt and McIlroy 1976.
58223         // J. W. Hunt and M. D. McIlroy, An algorithm for differential file
58224         // comparison, Bell Telephone Laboratories CSTR #41 (1976)
58225         // http://www.cs.dartmouth.edu/~doug/
58226         //
58227         // Expects two arrays of strings.
58228         function LCS(file1, file2) {
58229           var equivalenceClasses;
58230           var file2indices;
58231           var newCandidate;
58232           var candidates;
58233           var line;
58234           var c, i, j, jX, r, s;
58235
58236           equivalenceClasses = {};
58237           for (j = 0; j < file2.length; j++) {
58238             line = file2[j];
58239             if (equivalenceClasses[line]) {
58240               equivalenceClasses[line].push(j);
58241             } else {
58242               equivalenceClasses[line] = [j];
58243             }
58244           }
58245
58246           candidates = [
58247             { file1index: -1, file2index: -1, chain: null }
58248           ];
58249
58250           for (i = 0; i < file1.length; i++) {
58251             line = file1[i];
58252             file2indices = equivalenceClasses[line] || [];
58253
58254             r = 0;
58255             c = candidates[0];
58256
58257             for (jX = 0; jX < file2indices.length; jX++) {
58258               j = file2indices[jX];
58259
58260               for (s = r; s < candidates.length; s++) {
58261                 if ((candidates[s].file2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].file2index > j))) {
58262                   break;
58263                 }
58264               }
58265
58266               if (s < candidates.length) {
58267                 newCandidate = { file1index: i, file2index: j, chain: candidates[s] };
58268                 if (r === candidates.length) {
58269                   candidates.push(c);
58270                 } else {
58271                   candidates[r] = c;
58272                 }
58273                 r = s + 1;
58274                 c = newCandidate;
58275                 if (r === candidates.length) {
58276                   break; // no point in examining further (j)s
58277                 }
58278               }
58279             }
58280
58281             candidates[r] = c;
58282           }
58283
58284           // At this point, we know the LCS: it's in the reverse of the
58285           // linked-list through .chain of candidates[candidates.length - 1].
58286
58287           return candidates[candidates.length - 1];
58288         }
58289
58290
58291         // We apply the LCS to give a simple representation of the
58292         // offsets and lengths of mismatched chunks in the input
58293         // files. This is used by diff3MergeIndices below.
58294         function diffIndices(file1, file2) {
58295           var result = [];
58296           var tail1 = file1.length;
58297           var tail2 = file2.length;
58298
58299           for (var candidate = LCS(file1, file2);
58300              candidate !== null;
58301              candidate = candidate.chain)
58302           {
58303             var mismatchLength1 = tail1 - candidate.file1index - 1;
58304             var mismatchLength2 = tail2 - candidate.file2index - 1;
58305             tail1 = candidate.file1index;
58306             tail2 = candidate.file2index;
58307
58308             if (mismatchLength1 || mismatchLength2) {
58309               result.push({
58310                 file1: [tail1 + 1, mismatchLength1],
58311                 file2: [tail2 + 1, mismatchLength2]
58312               });
58313             }
58314           }
58315
58316           result.reverse();
58317           return result;
58318         }
58319
58320
58321         // Given three files, A, O, and B, where both A and B are
58322         // independently derived from O, returns a fairly complicated
58323         // internal representation of merge decisions it's taken. The
58324         // interested reader may wish to consult
58325         //
58326         // Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.
58327         // 'A Formal Investigation of ' In Arvind and Prasad,
58328         // editors, Foundations of Software Technology and Theoretical
58329         // Computer Science (FSTTCS), December 2007.
58330         //
58331         // (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)
58332         function diff3MergeIndices(a, o, b) {
58333           var i;
58334           var m1 = diffIndices(o, a);
58335           var m2 = diffIndices(o, b);
58336
58337           var hunks = [];
58338           function addHunk(h, side) {
58339             hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]);
58340           }
58341           for (i = 0; i < m1.length; i++) { addHunk(m1[i], 0); }
58342           for (i = 0; i < m2.length; i++) { addHunk(m2[i], 2); }
58343           hunks.sort(function (x, y) { return x[0] - y[0]; });
58344
58345           var result = [];
58346           var commonOffset = 0;
58347           function copyCommon(targetOffset) {
58348             if (targetOffset > commonOffset) {
58349               result.push([1, commonOffset, targetOffset - commonOffset]);
58350               commonOffset = targetOffset;
58351             }
58352           }
58353
58354           for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) {
58355             var firstHunkIndex = hunkIndex;
58356             var hunk = hunks[hunkIndex];
58357             var regionLhs = hunk[0];
58358             var regionRhs = regionLhs + hunk[2];
58359             while (hunkIndex < hunks.length - 1) {
58360               var maybeOverlapping = hunks[hunkIndex + 1];
58361               var maybeLhs = maybeOverlapping[0];
58362               if (maybeLhs > regionRhs) {
58363                 break;
58364               }
58365               regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]);
58366               hunkIndex++;
58367             }
58368
58369             copyCommon(regionLhs);
58370             if (firstHunkIndex === hunkIndex) {
58371               // The 'overlap' was only one hunk long, meaning that
58372               // there's no conflict here. Either a and o were the
58373               // same, or b and o were the same.
58374               if (hunk[4] > 0) {
58375                 result.push([hunk[1], hunk[3], hunk[4]]);
58376               }
58377             } else {
58378               // A proper conflict. Determine the extents of the
58379               // regions involved from a, o and b. Effectively merge
58380               // all the hunks on the left into one giant hunk, and
58381               // do the same for the right; then, correct for skew
58382               // in the regions of o that each side changed, and
58383               // report appropriate spans for the three sides.
58384               var regions = {
58385                 0: [a.length, -1, o.length, -1],
58386                 2: [b.length, -1, o.length, -1]
58387               };
58388               for (i = firstHunkIndex; i <= hunkIndex; i++) {
58389                 hunk = hunks[i];
58390                 var side = hunk[1];
58391                 var r = regions[side];
58392                 var oLhs = hunk[0];
58393                 var oRhs = oLhs + hunk[2];
58394                 var abLhs = hunk[3];
58395                 var abRhs = abLhs + hunk[4];
58396                 r[0] = Math.min(abLhs, r[0]);
58397                 r[1] = Math.max(abRhs, r[1]);
58398                 r[2] = Math.min(oLhs, r[2]);
58399                 r[3] = Math.max(oRhs, r[3]);
58400               }
58401               var aLhs = regions[0][0] + (regionLhs - regions[0][2]);
58402               var aRhs = regions[0][1] + (regionRhs - regions[0][3]);
58403               var bLhs = regions[2][0] + (regionLhs - regions[2][2]);
58404               var bRhs = regions[2][1] + (regionRhs - regions[2][3]);
58405               result.push([-1,
58406                            aLhs,      aRhs      - aLhs,
58407                            regionLhs, regionRhs - regionLhs,
58408                            bLhs,      bRhs      - bLhs]);
58409             }
58410             commonOffset = regionRhs;
58411           }
58412
58413           copyCommon(o.length);
58414           return result;
58415         }
58416
58417
58418         // Applies the output of diff3MergeIndices to actually
58419         // construct the merged file; the returned result alternates
58420         // between 'ok' and 'conflict' blocks.
58421         function diff3Merge(a, o, b, excludeFalseConflicts) {
58422           var result = [];
58423           var files = [a, o, b];
58424           var indices = diff3MergeIndices(a, o, b);
58425
58426           var okLines = [];
58427           function flushOk() {
58428             if (okLines.length) {
58429               result.push({ok: okLines});
58430             }
58431             okLines = [];
58432           }
58433           function pushOk(xs) {
58434             for (var j = 0; j < xs.length; j++) {
58435               okLines.push(xs[j]);
58436             }
58437           }
58438
58439           function isTrueConflict(rec) {
58440             if (rec[2] !== rec[6]) { return true; }
58441             var aoff = rec[1];
58442             var boff = rec[5];
58443             for (var j = 0; j < rec[2]; j++) {
58444               if (a[j + aoff] !== b[j + boff]) {
58445                 return true;
58446               }
58447             }
58448             return false;
58449           }
58450
58451           for (var i = 0; i < indices.length; i++) {
58452             var x = indices[i];
58453             var side = x[0];
58454             if (side === -1) {
58455               if (excludeFalseConflicts && !isTrueConflict(x)) {
58456                 pushOk(files[0].slice(x[1], x[1] + x[2]));
58457               } else {
58458                 flushOk();
58459                 result.push({
58460                   conflict: {
58461                     a: a.slice(x[1], x[1] + x[2]),
58462                     aIndex: x[1],
58463                     o: o.slice(x[3], x[3] + x[4]),
58464                     oIndex: x[3],
58465                     b: b.slice(x[5], x[5] + x[6]),
58466                     bIndex: x[5]
58467                   }
58468                 });
58469               }
58470             } else {
58471               pushOk(files[side].slice(x[1], x[1] + x[2]));
58472             }
58473           }
58474
58475           flushOk();
58476           return result;
58477         }
58478
58479         function actionMergeRemoteChanges(id, localGraph, remoteGraph, formatUser) {
58480             var _option = 'safe';  // 'safe', 'force_local', 'force_remote'
58481             var _conflicts = [];
58482
58483
58484             function user(d) {
58485                 return (typeof formatUser === 'function') ? formatUser(d) : d;
58486             }
58487
58488
58489             function mergeLocation(remote, target) {
58490                 function pointEqual(a, b) {
58491                     var epsilon = 1e-6;
58492                     return (Math.abs(a[0] - b[0]) < epsilon) && (Math.abs(a[1] - b[1]) < epsilon);
58493                 }
58494
58495                 if (_option === 'force_local' || pointEqual(target.loc, remote.loc)) {
58496                     return target;
58497                 }
58498                 if (_option === 'force_remote') {
58499                     return target.update({loc: remote.loc});
58500                 }
58501
58502                 _conflicts.push(t('merge_remote_changes.conflict.location', { user: user(remote.user) }));
58503                 return target;
58504             }
58505
58506
58507             function mergeNodes(base, remote, target) {
58508                 if (_option === 'force_local' || fastDeepEqual(target.nodes, remote.nodes)) {
58509                     return target;
58510                 }
58511                 if (_option === 'force_remote') {
58512                     return target.update({nodes: remote.nodes});
58513                 }
58514
58515                 var ccount = _conflicts.length;
58516                 var o = base.nodes || [];
58517                 var a = target.nodes || [];
58518                 var b = remote.nodes || [];
58519                 var nodes = [];
58520                 var hunks = diff3Merge(a, o, b, true);
58521
58522                 for (var i = 0; i < hunks.length; i++) {
58523                     var hunk = hunks[i];
58524                     if (hunk.ok) {
58525                         nodes.push.apply(nodes, hunk.ok);
58526                     } else {
58527                         // for all conflicts, we can assume c.a !== c.b
58528                         // because `diff3Merge` called with `true` option to exclude false conflicts..
58529                         var c = hunk.conflict;
58530                         if (fastDeepEqual(c.o, c.a)) {  // only changed remotely
58531                             nodes.push.apply(nodes, c.b);
58532                         } else if (fastDeepEqual(c.o, c.b)) {  // only changed locally
58533                             nodes.push.apply(nodes, c.a);
58534                         } else {       // changed both locally and remotely
58535                             _conflicts.push(t('merge_remote_changes.conflict.nodelist', { user: user(remote.user) }));
58536                             break;
58537                         }
58538                     }
58539                 }
58540
58541                 return (_conflicts.length === ccount) ? target.update({nodes: nodes}) : target;
58542             }
58543
58544
58545             function mergeChildren(targetWay, children, updates, graph) {
58546                 function isUsed(node, targetWay) {
58547                     var hasInterestingParent = graph.parentWays(node)
58548                         .some(function(way) { return way.id !== targetWay.id; });
58549
58550                     return node.hasInterestingTags() ||
58551                         hasInterestingParent ||
58552                         graph.parentRelations(node).length > 0;
58553                 }
58554
58555                 var ccount = _conflicts.length;
58556
58557                 for (var i = 0; i < children.length; i++) {
58558                     var id = children[i];
58559                     var node = graph.hasEntity(id);
58560
58561                     // remove unused childNodes..
58562                     if (targetWay.nodes.indexOf(id) === -1) {
58563                         if (node && !isUsed(node, targetWay)) {
58564                             updates.removeIds.push(id);
58565                         }
58566                         continue;
58567                     }
58568
58569                     // restore used childNodes..
58570                     var local = localGraph.hasEntity(id);
58571                     var remote = remoteGraph.hasEntity(id);
58572                     var target;
58573
58574                     if (_option === 'force_remote' && remote && remote.visible) {
58575                         updates.replacements.push(remote);
58576
58577                     } else if (_option === 'force_local' && local) {
58578                         target = osmEntity(local);
58579                         if (remote) {
58580                             target = target.update({ version: remote.version });
58581                         }
58582                         updates.replacements.push(target);
58583
58584                     } else if (_option === 'safe' && local && remote && local.version !== remote.version) {
58585                         target = osmEntity(local, { version: remote.version });
58586                         if (remote.visible) {
58587                             target = mergeLocation(remote, target);
58588                         } else {
58589                             _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
58590                         }
58591
58592                         if (_conflicts.length !== ccount) { break; }
58593                         updates.replacements.push(target);
58594                     }
58595                 }
58596
58597                 return targetWay;
58598             }
58599
58600
58601             function updateChildren(updates, graph) {
58602                 for (var i = 0; i < updates.replacements.length; i++) {
58603                     graph = graph.replace(updates.replacements[i]);
58604                 }
58605                 if (updates.removeIds.length) {
58606                     graph = actionDeleteMultiple(updates.removeIds)(graph);
58607                 }
58608                 return graph;
58609             }
58610
58611
58612             function mergeMembers(remote, target) {
58613                 if (_option === 'force_local' || fastDeepEqual(target.members, remote.members)) {
58614                     return target;
58615                 }
58616                 if (_option === 'force_remote') {
58617                     return target.update({members: remote.members});
58618                 }
58619
58620                 _conflicts.push(t('merge_remote_changes.conflict.memberlist', { user: user(remote.user) }));
58621                 return target;
58622             }
58623
58624
58625             function mergeTags(base, remote, target) {
58626                 if (_option === 'force_local' || fastDeepEqual(target.tags, remote.tags)) {
58627                     return target;
58628                 }
58629                 if (_option === 'force_remote') {
58630                     return target.update({tags: remote.tags});
58631                 }
58632
58633                 var ccount = _conflicts.length;
58634                 var o = base.tags || {};
58635                 var a = target.tags || {};
58636                 var b = remote.tags || {};
58637                 var keys = utilArrayUnion(utilArrayUnion(Object.keys(o), Object.keys(a)), Object.keys(b))
58638                     .filter(function(k) { return !dataDiscarded[k]; });
58639                 var tags = Object.assign({}, a);   // shallow copy
58640                 var changed = false;
58641
58642                 for (var i = 0; i < keys.length; i++) {
58643                     var k = keys[i];
58644
58645                     if (o[k] !== b[k] && a[k] !== b[k]) {    // changed remotely..
58646                         if (o[k] !== a[k]) {      // changed locally..
58647                             _conflicts.push(t('merge_remote_changes.conflict.tags',
58648                                 { tag: k, local: a[k], remote: b[k], user: user(remote.user) }));
58649
58650                         } else {                  // unchanged locally, accept remote change..
58651                             if (b.hasOwnProperty(k)) {
58652                                 tags[k] = b[k];
58653                             } else {
58654                                 delete tags[k];
58655                             }
58656                             changed = true;
58657                         }
58658                     }
58659                 }
58660
58661                 return (changed && _conflicts.length === ccount) ? target.update({tags: tags}) : target;
58662             }
58663
58664
58665             //  `graph.base()` is the common ancestor of the two graphs.
58666             //  `localGraph` contains user's edits up to saving
58667             //  `remoteGraph` contains remote edits to modified nodes
58668             //  `graph` must be a descendent of `localGraph` and may include
58669             //      some conflict resolution actions performed on it.
58670             //
58671             //                  --- ... --- `localGraph` -- ... -- `graph`
58672             //                 /
58673             //  `graph.base()` --- ... --- `remoteGraph`
58674             //
58675             var action = function(graph) {
58676                 var updates = { replacements: [], removeIds: [] };
58677                 var base = graph.base().entities[id];
58678                 var local = localGraph.entity(id);
58679                 var remote = remoteGraph.entity(id);
58680                 var target = osmEntity(local, { version: remote.version });
58681
58682                 // delete/undelete
58683                 if (!remote.visible) {
58684                     if (_option === 'force_remote') {
58685                         return actionDeleteMultiple([id])(graph);
58686
58687                     } else if (_option === 'force_local') {
58688                         if (target.type === 'way') {
58689                             target = mergeChildren(target, utilArrayUniq(local.nodes), updates, graph);
58690                             graph = updateChildren(updates, graph);
58691                         }
58692                         return graph.replace(target);
58693
58694                     } else {
58695                         _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
58696                         return graph;  // do nothing
58697                     }
58698                 }
58699
58700                 // merge
58701                 if (target.type === 'node') {
58702                     target = mergeLocation(remote, target);
58703
58704                 } else if (target.type === 'way') {
58705                     // pull in any child nodes that may not be present locally..
58706                     graph.rebase(remoteGraph.childNodes(remote), [graph], false);
58707                     target = mergeNodes(base, remote, target);
58708                     target = mergeChildren(target, utilArrayUnion(local.nodes, remote.nodes), updates, graph);
58709
58710                 } else if (target.type === 'relation') {
58711                     target = mergeMembers(remote, target);
58712                 }
58713
58714                 target = mergeTags(base, remote, target);
58715
58716                 if (!_conflicts.length) {
58717                     graph = updateChildren(updates, graph).replace(target);
58718                 }
58719
58720                 return graph;
58721             };
58722
58723
58724             action.withOption = function(opt) {
58725                 _option = opt;
58726                 return action;
58727             };
58728
58729
58730             action.conflicts = function() {
58731                 return _conflicts;
58732             };
58733
58734
58735             return action;
58736         }
58737
58738         // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
58739         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
58740         function actionMove(moveIDs, tryDelta, projection, cache) {
58741             var _delta = tryDelta;
58742
58743             function setupCache(graph) {
58744                 function canMove(nodeID) {
58745                     // Allow movement of any node that is in the selectedIDs list..
58746                     if (moveIDs.indexOf(nodeID) !== -1) { return true; }
58747
58748                     // Allow movement of a vertex where 2 ways meet..
58749                     var parents = graph.parentWays(graph.entity(nodeID));
58750                     if (parents.length < 3) { return true; }
58751
58752                     // Restrict movement of a vertex where >2 ways meet, unless all parentWays are moving too..
58753                     var parentsMoving = parents.every(function(way) { return cache.moving[way.id]; });
58754                     if (!parentsMoving) { delete cache.moving[nodeID]; }
58755
58756                     return parentsMoving;
58757                 }
58758
58759                 function cacheEntities(ids) {
58760                     for (var i = 0; i < ids.length; i++) {
58761                         var id = ids[i];
58762                         if (cache.moving[id]) { continue; }
58763                         cache.moving[id] = true;
58764
58765                         var entity = graph.hasEntity(id);
58766                         if (!entity) { continue; }
58767
58768                         if (entity.type === 'node') {
58769                             cache.nodes.push(id);
58770                             cache.startLoc[id] = entity.loc;
58771                         } else if (entity.type === 'way') {
58772                             cache.ways.push(id);
58773                             cacheEntities(entity.nodes);
58774                         } else {
58775                             cacheEntities(entity.members.map(function(member) {
58776                                 return member.id;
58777                             }));
58778                         }
58779                     }
58780                 }
58781
58782                 function cacheIntersections(ids) {
58783                     function isEndpoint(way, id) {
58784                         return !way.isClosed() && !!way.affix(id);
58785                     }
58786
58787                     for (var i = 0; i < ids.length; i++) {
58788                         var id = ids[i];
58789
58790                         // consider only intersections with 1 moved and 1 unmoved way.
58791                         var childNodes = graph.childNodes(graph.entity(id));
58792                         for (var j = 0; j < childNodes.length; j++) {
58793                             var node = childNodes[j];
58794                             var parents = graph.parentWays(node);
58795                             if (parents.length !== 2) { continue; }
58796
58797                             var moved = graph.entity(id);
58798                             var unmoved = null;
58799                             for (var k = 0; k < parents.length; k++) {
58800                                 var way = parents[k];
58801                                 if (!cache.moving[way.id]) {
58802                                     unmoved = way;
58803                                     break;
58804                                 }
58805                             }
58806                             if (!unmoved) { continue; }
58807
58808                             // exclude ways that are overly connected..
58809                             if (utilArrayIntersection(moved.nodes, unmoved.nodes).length > 2) { continue; }
58810                             if (moved.isArea() || unmoved.isArea()) { continue; }
58811
58812                             cache.intersections.push({
58813                                 nodeId: node.id,
58814                                 movedId: moved.id,
58815                                 unmovedId: unmoved.id,
58816                                 movedIsEP: isEndpoint(moved, node.id),
58817                                 unmovedIsEP: isEndpoint(unmoved, node.id)
58818                             });
58819                         }
58820                     }
58821                 }
58822
58823
58824                 if (!cache) {
58825                     cache = {};
58826                 }
58827                 if (!cache.ok) {
58828                     cache.moving = {};
58829                     cache.intersections = [];
58830                     cache.replacedVertex = {};
58831                     cache.startLoc = {};
58832                     cache.nodes = [];
58833                     cache.ways = [];
58834
58835                     cacheEntities(moveIDs);
58836                     cacheIntersections(cache.ways);
58837                     cache.nodes = cache.nodes.filter(canMove);
58838
58839                     cache.ok = true;
58840                 }
58841             }
58842
58843
58844             // Place a vertex where the moved vertex used to be, to preserve way shape..
58845             //
58846             //  Start:
58847             //      b ---- e
58848             //     / \
58849             //    /   \
58850             //   /     \
58851             //  a       c
58852             //
58853             //      *               node '*' added to preserve shape
58854             //     / \
58855             //    /   b ---- e      way `b,e` moved here:
58856             //   /     \
58857             //  a       c
58858             //
58859             //
58860             function replaceMovedVertex(nodeId, wayId, graph, delta) {
58861                 var way = graph.entity(wayId);
58862                 var moved = graph.entity(nodeId);
58863                 var movedIndex = way.nodes.indexOf(nodeId);
58864                 var len, prevIndex, nextIndex;
58865
58866                 if (way.isClosed()) {
58867                     len = way.nodes.length - 1;
58868                     prevIndex = (movedIndex + len - 1) % len;
58869                     nextIndex = (movedIndex + len + 1) % len;
58870                 } else {
58871                     len = way.nodes.length;
58872                     prevIndex = movedIndex - 1;
58873                     nextIndex = movedIndex + 1;
58874                 }
58875
58876                 var prev = graph.hasEntity(way.nodes[prevIndex]);
58877                 var next = graph.hasEntity(way.nodes[nextIndex]);
58878
58879                 // Don't add orig vertex at endpoint..
58880                 if (!prev || !next) { return graph; }
58881
58882                 var key = wayId + '_' + nodeId;
58883                 var orig = cache.replacedVertex[key];
58884                 if (!orig) {
58885                     orig = osmNode();
58886                     cache.replacedVertex[key] = orig;
58887                     cache.startLoc[orig.id] = cache.startLoc[nodeId];
58888                 }
58889
58890                 var start, end;
58891                 if (delta) {
58892                     start = projection(cache.startLoc[nodeId]);
58893                     end = projection.invert(geoVecAdd(start, delta));
58894                 } else {
58895                     end = cache.startLoc[nodeId];
58896                 }
58897                 orig = orig.move(end);
58898
58899                 var angle = Math.abs(geoAngle(orig, prev, projection) -
58900                         geoAngle(orig, next, projection)) * 180 / Math.PI;
58901
58902                 // Don't add orig vertex if it would just make a straight line..
58903                 if (angle > 175 && angle < 185) { return graph; }
58904
58905                 // moving forward or backward along way?
58906                 var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection);
58907                 var p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection);
58908                 var d1 = geoPathLength(p1);
58909                 var d2 = geoPathLength(p2);
58910                 var insertAt = (d1 <= d2) ? movedIndex : nextIndex;
58911
58912                 // moving around closed loop?
58913                 if (way.isClosed() && insertAt === 0) { insertAt = len; }
58914
58915                 way = way.addNode(orig.id, insertAt);
58916                 return graph.replace(orig).replace(way);
58917             }
58918
58919
58920             // Remove duplicate vertex that might have been added by
58921             // replaceMovedVertex.  This is done after the unzorro checks.
58922             function removeDuplicateVertices(wayId, graph) {
58923                 var way = graph.entity(wayId);
58924                 var epsilon = 1e-6;
58925                 var prev, curr;
58926
58927                 function isInteresting(node, graph) {
58928                     return graph.parentWays(node).length > 1 ||
58929                         graph.parentRelations(node).length ||
58930                         node.hasInterestingTags();
58931                 }
58932
58933                 for (var i = 0; i < way.nodes.length; i++) {
58934                     curr = graph.entity(way.nodes[i]);
58935
58936                     if (prev && curr && geoVecEqual(prev.loc, curr.loc, epsilon)) {
58937                         if (!isInteresting(prev, graph)) {
58938                             way = way.removeNode(prev.id);
58939                             graph = graph.replace(way).remove(prev);
58940                         } else if (!isInteresting(curr, graph)) {
58941                             way = way.removeNode(curr.id);
58942                             graph = graph.replace(way).remove(curr);
58943                         }
58944                     }
58945
58946                     prev = curr;
58947                 }
58948
58949                 return graph;
58950             }
58951
58952
58953             // Reorder nodes around intersections that have moved..
58954             //
58955             //  Start:                way1.nodes: b,e         (moving)
58956             //  a - b - c ----- d     way2.nodes: a,b,c,d     (static)
58957             //      |                 vertex: b
58958             //      e                 isEP1: true,  isEP2, false
58959             //
58960             //  way1 `b,e` moved here:
58961             //  a ----- c = b - d
58962             //              |
58963             //              e
58964             //
58965             //  reorder nodes         way1.nodes: b,e
58966             //  a ----- c - b - d     way2.nodes: a,c,b,d
58967             //              |
58968             //              e
58969             //
58970             function unZorroIntersection(intersection, graph) {
58971                 var vertex = graph.entity(intersection.nodeId);
58972                 var way1 = graph.entity(intersection.movedId);
58973                 var way2 = graph.entity(intersection.unmovedId);
58974                 var isEP1 = intersection.movedIsEP;
58975                 var isEP2 = intersection.unmovedIsEP;
58976
58977                 // don't move the vertex if it is the endpoint of both ways.
58978                 if (isEP1 && isEP2) { return graph; }
58979
58980                 var nodes1 = graph.childNodes(way1).filter(function(n) { return n !== vertex; });
58981                 var nodes2 = graph.childNodes(way2).filter(function(n) { return n !== vertex; });
58982
58983                 if (way1.isClosed() && way1.first() === vertex.id) { nodes1.push(nodes1[0]); }
58984                 if (way2.isClosed() && way2.first() === vertex.id) { nodes2.push(nodes2[0]); }
58985
58986                 var edge1 = !isEP1 && geoChooseEdge(nodes1, projection(vertex.loc), projection);
58987                 var edge2 = !isEP2 && geoChooseEdge(nodes2, projection(vertex.loc), projection);
58988                 var loc;
58989
58990                 // snap vertex to nearest edge (or some point between them)..
58991                 if (!isEP1 && !isEP2) {
58992                     var epsilon = 1e-6, maxIter = 10;
58993                     for (var i = 0; i < maxIter; i++) {
58994                         loc = geoVecInterp(edge1.loc, edge2.loc, 0.5);
58995                         edge1 = geoChooseEdge(nodes1, projection(loc), projection);
58996                         edge2 = geoChooseEdge(nodes2, projection(loc), projection);
58997                         if (Math.abs(edge1.distance - edge2.distance) < epsilon) { break; }
58998                     }
58999                 } else if (!isEP1) {
59000                     loc = edge1.loc;
59001                 } else {
59002                     loc = edge2.loc;
59003                 }
59004
59005                 graph = graph.replace(vertex.move(loc));
59006
59007                 // if zorro happened, reorder nodes..
59008                 if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) {
59009                     way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index);
59010                     graph = graph.replace(way1);
59011                 }
59012                 if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) {
59013                     way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index);
59014                     graph = graph.replace(way2);
59015                 }
59016
59017                 return graph;
59018             }
59019
59020
59021             function cleanupIntersections(graph) {
59022                 for (var i = 0; i < cache.intersections.length; i++) {
59023                     var obj = cache.intersections[i];
59024                     graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, _delta);
59025                     graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null);
59026                     graph = unZorroIntersection(obj, graph);
59027                     graph = removeDuplicateVertices(obj.movedId, graph);
59028                     graph = removeDuplicateVertices(obj.unmovedId, graph);
59029                 }
59030
59031                 return graph;
59032             }
59033
59034
59035             // check if moving way endpoint can cross an unmoved way, if so limit delta..
59036             function limitDelta(graph) {
59037                 function moveNode(loc) {
59038                     return geoVecAdd(projection(loc), _delta);
59039                 }
59040
59041                 for (var i = 0; i < cache.intersections.length; i++) {
59042                     var obj = cache.intersections[i];
59043
59044                     // Don't limit movement if this is vertex joins 2 endpoints..
59045                     if (obj.movedIsEP && obj.unmovedIsEP) { continue; }
59046                     // Don't limit movement if this vertex is not an endpoint anyway..
59047                     if (!obj.movedIsEP) { continue; }
59048
59049                     var node = graph.entity(obj.nodeId);
59050                     var start = projection(node.loc);
59051                     var end = geoVecAdd(start, _delta);
59052                     var movedNodes = graph.childNodes(graph.entity(obj.movedId));
59053                     var movedPath = movedNodes.map(function(n) { return moveNode(n.loc); });
59054                     var unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId));
59055                     var unmovedPath = unmovedNodes.map(function(n) { return projection(n.loc); });
59056                     var hits = geoPathIntersections(movedPath, unmovedPath);
59057
59058                     for (var j = 0; i < hits.length; i++) {
59059                         if (geoVecEqual(hits[j], end)) { continue; }
59060                         var edge = geoChooseEdge(unmovedNodes, end, projection);
59061                         _delta = geoVecSubtract(projection(edge.loc), start);
59062                     }
59063                 }
59064             }
59065
59066
59067             var action = function(graph) {
59068                 if (_delta[0] === 0 && _delta[1] === 0) { return graph; }
59069
59070                 setupCache(graph);
59071
59072                 if (cache.intersections.length) {
59073                     limitDelta(graph);
59074                 }
59075
59076                 for (var i = 0; i < cache.nodes.length; i++) {
59077                     var node = graph.entity(cache.nodes[i]);
59078                     var start = projection(node.loc);
59079                     var end = geoVecAdd(start, _delta);
59080                     graph = graph.replace(node.move(projection.invert(end)));
59081                 }
59082
59083                 if (cache.intersections.length) {
59084                     graph = cleanupIntersections(graph);
59085                 }
59086
59087                 return graph;
59088             };
59089
59090
59091             action.delta = function() {
59092                 return _delta;
59093             };
59094
59095
59096             return action;
59097         }
59098
59099         function actionMoveMember(relationId, fromIndex, toIndex) {
59100             return function(graph) {
59101                 return graph.replace(graph.entity(relationId).moveMember(fromIndex, toIndex));
59102             };
59103         }
59104
59105         function actionMoveNode(nodeID, toLoc) {
59106
59107             var action = function(graph, t) {
59108                 if (t === null || !isFinite(t)) { t = 1; }
59109                 t = Math.min(Math.max(+t, 0), 1);
59110
59111                 var node = graph.entity(nodeID);
59112                 return graph.replace(
59113                     node.move(geoVecInterp(node.loc, toLoc, t))
59114                 );
59115             };
59116
59117             action.transitionable = true;
59118
59119             return action;
59120         }
59121
59122         function actionNoop() {
59123             return function(graph) {
59124                 return graph;
59125             };
59126         }
59127
59128         function actionOrthogonalize(wayID, projection, vertexID, degThresh, ep) {
59129             var epsilon = ep || 1e-4;
59130             var threshold = degThresh || 13;  // degrees within right or straight to alter
59131
59132             // We test normalized dot products so we can compare as cos(angle)
59133             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
59134             var upperThreshold = Math.cos(threshold * Math.PI / 180);
59135
59136
59137             var action = function(graph, t) {
59138                 if (t === null || !isFinite(t)) { t = 1; }
59139                 t = Math.min(Math.max(+t, 0), 1);
59140
59141                 var way = graph.entity(wayID);
59142                 way = way.removeNode('');   // sanity check - remove any consecutive duplicates
59143
59144                 if (way.tags.nonsquare) {
59145                     var tags = Object.assign({}, way.tags);
59146                     // since we're squaring, remove indication that this is physically unsquare
59147                     delete tags.nonsquare;
59148                     way = way.update({tags: tags});
59149                 }
59150
59151                 graph = graph.replace(way);
59152
59153                 var isClosed = way.isClosed();
59154                 var nodes = graph.childNodes(way).slice();  // shallow copy
59155                 if (isClosed) { nodes.pop(); }
59156
59157                 if (vertexID !== undefined) {
59158                     nodes = nodeSubset(nodes, vertexID, isClosed);
59159                     if (nodes.length !== 3) { return graph; }
59160                 }
59161
59162                 // note: all geometry functions here use the unclosed node/point/coord list
59163
59164                 var nodeCount = {};
59165                 var points = [];
59166                 var corner = { i: 0, dotp: 1 };
59167                 var node, point, loc, score, motions, i, j;
59168
59169                 for (i = 0; i < nodes.length; i++) {
59170                     node = nodes[i];
59171                     nodeCount[node.id] = (nodeCount[node.id] || 0) + 1;
59172                     points.push({ id: node.id, coord: projection(node.loc) });
59173                 }
59174
59175
59176                 if (points.length === 3) {   // move only one vertex for right triangle
59177                     for (i = 0; i < 1000; i++) {
59178                         motions = points.map(calcMotion);
59179
59180                         points[corner.i].coord = geoVecAdd(points[corner.i].coord, motions[corner.i]);
59181                         score = corner.dotp;
59182                         if (score < epsilon) {
59183                             break;
59184                         }
59185                     }
59186
59187                     node = graph.entity(nodes[corner.i].id);
59188                     loc = projection.invert(points[corner.i].coord);
59189                     graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
59190
59191                 } else {
59192                     var straights = [];
59193                     var simplified = [];
59194
59195                     // Remove points from nearly straight sections..
59196                     // This produces a simplified shape to orthogonalize
59197                     for (i = 0; i < points.length; i++) {
59198                         point = points[i];
59199                         var dotp = 0;
59200                         if (isClosed || (i > 0 && i < points.length - 1)) {
59201                             var a = points[(i - 1 + points.length) % points.length];
59202                             var b = points[(i + 1) % points.length];
59203                             dotp = Math.abs(geoOrthoNormalizedDotProduct(a.coord, b.coord, point.coord));
59204                         }
59205
59206                         if (dotp > upperThreshold) {
59207                             straights.push(point);
59208                         } else {
59209                             simplified.push(point);
59210                         }
59211                     }
59212
59213                     // Orthogonalize the simplified shape
59214                     var bestPoints = clonePoints(simplified);
59215                     var originalPoints = clonePoints(simplified);
59216
59217                     score = Infinity;
59218                     for (i = 0; i < 1000; i++) {
59219                         motions = simplified.map(calcMotion);
59220
59221                         for (j = 0; j < motions.length; j++) {
59222                             simplified[j].coord = geoVecAdd(simplified[j].coord, motions[j]);
59223                         }
59224                         var newScore = geoOrthoCalcScore(simplified, isClosed, epsilon, threshold);
59225                         if (newScore < score) {
59226                             bestPoints = clonePoints(simplified);
59227                             score = newScore;
59228                         }
59229                         if (score < epsilon) {
59230                             break;
59231                         }
59232                     }
59233
59234                     var bestCoords = bestPoints.map(function(p) { return p.coord; });
59235                     if (isClosed) { bestCoords.push(bestCoords[0]); }
59236
59237                     // move the nodes that should move
59238                     for (i = 0; i < bestPoints.length; i++) {
59239                         point = bestPoints[i];
59240                         if (!geoVecEqual(originalPoints[i].coord, point.coord)) {
59241                             node = graph.entity(point.id);
59242                             loc = projection.invert(point.coord);
59243                             graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
59244                         }
59245                     }
59246
59247                     // move the nodes along straight segments
59248                     for (i = 0; i < straights.length; i++) {
59249                         point = straights[i];
59250                         if (nodeCount[point.id] > 1) { continue; }   // skip self-intersections
59251
59252                         node = graph.entity(point.id);
59253
59254                         if (t === 1 &&
59255                             graph.parentWays(node).length === 1 &&
59256                             graph.parentRelations(node).length === 0 &&
59257                             !node.hasInterestingTags()
59258                         ) {
59259                             // remove uninteresting points..
59260                             graph = actionDeleteNode(node.id)(graph);
59261
59262                         } else {
59263                             // move interesting points to the nearest edge..
59264                             var choice = geoVecProject(point.coord, bestCoords);
59265                             if (choice) {
59266                                 loc = projection.invert(choice.target);
59267                                 graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
59268                             }
59269                         }
59270                     }
59271                 }
59272
59273                 return graph;
59274
59275
59276                 function clonePoints(array) {
59277                     return array.map(function(p) {
59278                         return { id: p.id, coord: [p.coord[0], p.coord[1]] };
59279                     });
59280                 }
59281
59282
59283                 function calcMotion(point, i, array) {
59284                     // don't try to move the endpoints of a non-closed way.
59285                     if (!isClosed && (i === 0 || i === array.length - 1)) { return [0, 0]; }
59286                     // don't try to move a node that appears more than once (self intersection)
59287                     if (nodeCount[array[i].id] > 1) { return [0, 0]; }
59288
59289                     var a = array[(i - 1 + array.length) % array.length].coord;
59290                     var origin = point.coord;
59291                     var b = array[(i + 1) % array.length].coord;
59292                     var p = geoVecSubtract(a, origin);
59293                     var q = geoVecSubtract(b, origin);
59294
59295                     var scale = 2 * Math.min(geoVecLength(p), geoVecLength(q));
59296                     p = geoVecNormalize(p);
59297                     q = geoVecNormalize(q);
59298
59299                     var dotp = (p[0] * q[0] + p[1] * q[1]);
59300                     var val = Math.abs(dotp);
59301
59302                     if (val < lowerThreshold) {  // nearly orthogonal
59303                         corner.i = i;
59304                         corner.dotp = val;
59305                         var vec = geoVecNormalize(geoVecAdd(p, q));
59306                         return geoVecScale(vec, 0.1 * dotp * scale);
59307                     }
59308
59309                     return [0, 0];   // do nothing
59310                 }
59311             };
59312
59313
59314             // if we are only orthogonalizing one vertex,
59315             // get that vertex and the previous and next
59316             function nodeSubset(nodes, vertexID, isClosed) {
59317                 var first = isClosed ? 0 : 1;
59318                 var last = isClosed ? nodes.length : nodes.length - 1;
59319
59320                 for (var i = first; i < last; i++) {
59321                     if (nodes[i].id === vertexID) {
59322                         return [
59323                             nodes[(i - 1 + nodes.length) % nodes.length],
59324                             nodes[i],
59325                             nodes[(i + 1) % nodes.length]
59326                         ];
59327                     }
59328                 }
59329
59330                 return [];
59331             }
59332
59333
59334             action.disabled = function(graph) {
59335                 var way = graph.entity(wayID);
59336                 way = way.removeNode('');  // sanity check - remove any consecutive duplicates
59337                 graph = graph.replace(way);
59338
59339                 var isClosed = way.isClosed();
59340                 var nodes = graph.childNodes(way).slice();  // shallow copy
59341                 if (isClosed) { nodes.pop(); }
59342
59343                 var allowStraightAngles = false;
59344                 if (vertexID !== undefined) {
59345                     allowStraightAngles = true;
59346                     nodes = nodeSubset(nodes, vertexID, isClosed);
59347                     if (nodes.length !== 3) { return 'end_vertex'; }
59348                 }
59349
59350                 var coords = nodes.map(function(n) { return projection(n.loc); });
59351                 var score = geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles);
59352
59353                 if (score === null) {
59354                     return 'not_squarish';
59355                 } else if (score === 0) {
59356                     return 'square_enough';
59357                 } else {
59358                     return false;
59359                 }
59360             };
59361
59362
59363             action.transitionable = true;
59364
59365             return action;
59366         }
59367
59368         // `actionRestrictTurn` creates a turn restriction relation.
59369         //
59370         // `turn` must be an `osmTurn` object
59371         // see osm/intersection.js, pathToTurn()
59372         //
59373         // This specifies a restriction of type `restriction` when traveling from
59374         // `turn.from.way` toward `turn.to.way` via `turn.via.node` OR `turn.via.ways`.
59375         // (The action does not check that these entities form a valid intersection.)
59376         //
59377         // From, to, and via ways should be split before calling this action.
59378         // (old versions of the code would split the ways here, but we no longer do it)
59379         //
59380         // For testing convenience, accepts a restrictionID to assign to the new
59381         // relation. Normally, this will be undefined and the relation will
59382         // automatically be assigned a new ID.
59383         //
59384         function actionRestrictTurn(turn, restrictionType, restrictionID) {
59385
59386             return function(graph) {
59387                 var fromWay = graph.entity(turn.from.way);
59388                 var toWay = graph.entity(turn.to.way);
59389                 var viaNode = turn.via.node && graph.entity(turn.via.node);
59390                 var viaWays = turn.via.ways && turn.via.ways.map(function(id) { return graph.entity(id); });
59391                 var members = [];
59392
59393                 members.push({ id: fromWay.id, type: 'way',  role: 'from' });
59394
59395                 if (viaNode) {
59396                     members.push({ id: viaNode.id,  type: 'node', role: 'via' });
59397                 } else if (viaWays) {
59398                     viaWays.forEach(function(viaWay) {
59399                         members.push({ id: viaWay.id,  type: 'way', role: 'via' });
59400                     });
59401                 }
59402
59403                 members.push({ id: toWay.id, type: 'way',  role: 'to' });
59404
59405                 return graph.replace(osmRelation({
59406                     id: restrictionID,
59407                     tags: {
59408                         type: 'restriction',
59409                         restriction: restrictionType
59410                     },
59411                     members: members
59412                 }));
59413             };
59414         }
59415
59416         function actionRevert(id) {
59417             var action = function(graph) {
59418                 var entity = graph.hasEntity(id),
59419                     base = graph.base().entities[id];
59420
59421                 if (entity && !base) {    // entity will be removed..
59422                     if (entity.type === 'node') {
59423                         graph.parentWays(entity)
59424                             .forEach(function(parent) {
59425                                 parent = parent.removeNode(id);
59426                                 graph = graph.replace(parent);
59427
59428                                 if (parent.isDegenerate()) {
59429                                     graph = actionDeleteWay(parent.id)(graph);
59430                                 }
59431                             });
59432                     }
59433
59434                     graph.parentRelations(entity)
59435                         .forEach(function(parent) {
59436                             parent = parent.removeMembersWithID(id);
59437                             graph = graph.replace(parent);
59438
59439                             if (parent.isDegenerate()) {
59440                                 graph = actionDeleteRelation(parent.id)(graph);
59441                             }
59442                         });
59443                 }
59444
59445                 return graph.revert(id);
59446             };
59447
59448             return action;
59449         }
59450
59451         function actionRotate(rotateIds, pivot, angle, projection) {
59452
59453             var action = function(graph) {
59454                 return graph.update(function(graph) {
59455                     utilGetAllNodes(rotateIds, graph).forEach(function(node) {
59456                         var point = geoRotate([projection(node.loc)], angle, pivot)[0];
59457                         graph = graph.replace(node.move(projection.invert(point)));
59458                     });
59459                 });
59460             };
59461
59462             return action;
59463         }
59464
59465         /* Align nodes along their common axis */
59466         function actionStraightenNodes(nodeIDs, projection) {
59467
59468             function positionAlongWay(a, o, b) {
59469                 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
59470             }
59471
59472
59473             var action = function(graph, t) {
59474                 if (t === null || !isFinite(t)) { t = 1; }
59475                 t = Math.min(Math.max(+t, 0), 1);
59476
59477                 var nodes = nodeIDs.map(function(id) { return graph.entity(id); });
59478                 var points = nodes.map(function(n) { return projection(n.loc); });
59479                 var ssr = geoGetSmallestSurroundingRectangle(points);
59480
59481                 // Choose line pq = axis of symmetry.
59482                 // The shape's surrounding rectangle has 2 axes of symmetry.
59483                 // Snap points to the long axis
59484                 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
59485                 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
59486                 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
59487                 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
59488                 var p, q;
59489
59490                 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
59491                 if (isLong) {
59492                     p = p1;
59493                     q = q1;
59494                 } else {
59495                     p = p2;
59496                     q = q2;
59497                 }
59498
59499                 // Move points onto line pq
59500                 for (var i = 0; i < points.length; i++) {
59501                     var node = nodes[i];
59502                     var point = points[i];
59503                     var u = positionAlongWay(point, p, q);
59504                     var point2 = geoVecInterp(p, q, u);
59505                     var loc2 = projection.invert(point2);
59506                     graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
59507                 }
59508
59509                 return graph;
59510             };
59511
59512
59513             action.disabled = function() {
59514                 return false;
59515             };
59516
59517
59518             action.transitionable = true;
59519
59520
59521             return action;
59522         }
59523
59524         /*
59525          * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as
59526          */
59527         function actionStraightenWay(selectedIDs, projection) {
59528
59529             function positionAlongWay(a, o, b) {
59530                 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
59531             }
59532
59533             // Return all selected ways as a continuous, ordered array of nodes
59534             function allNodes(graph) {
59535                 var nodes = [];
59536                 var startNodes = [];
59537                 var endNodes = [];
59538                 var remainingWays = [];
59539                 var selectedWays = selectedIDs.filter(function(w) {
59540                     return graph.entity(w).type === 'way';
59541                 });
59542                 var selectedNodes = selectedIDs.filter(function(n) {
59543                     return graph.entity(n).type === 'node';
59544                 });
59545
59546                 for (var i = 0; i < selectedWays.length; i++) {
59547                     var way = graph.entity(selectedWays[i]);
59548                     nodes = way.nodes.slice(0);
59549                     remainingWays.push(nodes);
59550                     startNodes.push(nodes[0]);
59551                     endNodes.push(nodes[nodes.length-1]);
59552                 }
59553
59554                 // Remove duplicate end/startNodes (duplicate nodes cannot be at the line end,
59555                 //   and need to be removed so currNode difference calculation below works)
59556                 // i.e. ["n-1", "n-1", "n-2"] => ["n-2"]
59557                 startNodes = startNodes.filter(function(n) {
59558                     return startNodes.indexOf(n) === startNodes.lastIndexOf(n);
59559                 });
59560                 endNodes = endNodes.filter(function(n) {
59561                     return endNodes.indexOf(n) === endNodes.lastIndexOf(n);
59562                 });
59563
59564                 // Choose the initial endpoint to start from
59565                 var currNode = utilArrayDifference(startNodes, endNodes)
59566                     .concat(utilArrayDifference(endNodes, startNodes))[0];
59567                 var nextWay = [];
59568                 nodes = [];
59569
59570                 // Create nested function outside of loop to avoid "function in loop" lint error
59571                 var getNextWay = function(currNode, remainingWays) {
59572                     return remainingWays.filter(function(way) {
59573                         return way[0] === currNode || way[way.length-1] === currNode;
59574                     })[0];
59575                 };
59576
59577                 // Add nodes to end of nodes array, until all ways are added
59578                 while (remainingWays.length) {
59579                     nextWay = getNextWay(currNode, remainingWays);
59580                     remainingWays = utilArrayDifference(remainingWays, [nextWay]);
59581
59582                     if (nextWay[0] !== currNode) {
59583                         nextWay.reverse();
59584                     }
59585                     nodes = nodes.concat(nextWay);
59586                     currNode = nodes[nodes.length-1];
59587                 }
59588
59589                 // If user selected 2 nodes to straighten between, then slice nodes array to those nodes
59590                 if (selectedNodes.length === 2) {
59591                     var startNodeIdx = nodes.indexOf(selectedNodes[0]);
59592                     var endNodeIdx = nodes.indexOf(selectedNodes[1]);
59593                     var sortedStartEnd = [startNodeIdx, endNodeIdx];
59594
59595                     sortedStartEnd.sort(function(a, b) { return a - b; });
59596                     nodes = nodes.slice(sortedStartEnd[0], sortedStartEnd[1]+1);
59597                 }
59598
59599                 return nodes.map(function(n) { return graph.entity(n); });
59600             }
59601
59602
59603             var action = function(graph, t) {
59604                 if (t === null || !isFinite(t)) { t = 1; }
59605                 t = Math.min(Math.max(+t, 0), 1);
59606
59607                 var nodes = allNodes(graph);
59608                 var points = nodes.map(function(n) { return projection(n.loc); });
59609                 var startPoint = points[0];
59610                 var endPoint = points[points.length-1];
59611                 var toDelete = [];
59612                 var i;
59613
59614                 for (i = 1; i < points.length-1; i++) {
59615                     var node = nodes[i];
59616                     var point = points[i];
59617
59618                     if (t < 1 || graph.parentWays(node).length > 1 ||
59619                         graph.parentRelations(node).length ||
59620                         node.hasInterestingTags()
59621                     ) {
59622                         var u = positionAlongWay(point, startPoint, endPoint);
59623                         var p = geoVecInterp(startPoint, endPoint, u);
59624                         var loc2 = projection.invert(p);
59625                         graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
59626
59627                     } else {
59628                         // safe to delete
59629                         if (toDelete.indexOf(node) === -1) {
59630                             toDelete.push(node);
59631                         }
59632                     }
59633                 }
59634
59635                 for (i = 0; i < toDelete.length; i++) {
59636                     graph = actionDeleteNode(toDelete[i].id)(graph);
59637                 }
59638
59639                 return graph;
59640             };
59641
59642
59643             action.disabled = function(graph) {
59644                 // check way isn't too bendy
59645                 var nodes = allNodes(graph);
59646                 var points = nodes.map(function(n) { return projection(n.loc); });
59647                 var startPoint = points[0];
59648                 var endPoint = points[points.length-1];
59649                 var threshold = 0.2 * geoVecLength(startPoint, endPoint);
59650                 var i;
59651
59652                 if (threshold === 0) {
59653                     return 'too_bendy';
59654                 }
59655
59656                 for (i = 1; i < points.length - 1; i++) {
59657                     var point = points[i];
59658                     var u = positionAlongWay(point, startPoint, endPoint);
59659                     var p = geoVecInterp(startPoint, endPoint, u);
59660                     var dist = geoVecLength(p, point);
59661
59662                     // to bendy if point is off by 20% of total start/end distance in projected space
59663                     if (isNaN(dist) || dist > threshold) {
59664                         return 'too_bendy';
59665                     }
59666                 }
59667             };
59668
59669             action.transitionable = true;
59670
59671
59672             return action;
59673         }
59674
59675         // `actionUnrestrictTurn` deletes a turn restriction relation.
59676         //
59677         // `turn` must be an `osmTurn` object with a `restrictionID` property.
59678         // see osm/intersection.js, pathToTurn()
59679         //
59680         function actionUnrestrictTurn(turn) {
59681             return function(graph) {
59682                 return actionDeleteRelation(turn.restrictionID)(graph);
59683             };
59684         }
59685
59686         /* Reflect the given area around its axis of symmetry */
59687         function actionReflect(reflectIds, projection) {
59688             var _useLongAxis = true;
59689
59690
59691             var action = function(graph, t) {
59692                 if (t === null || !isFinite(t)) { t = 1; }
59693                 t = Math.min(Math.max(+t, 0), 1);
59694
59695                 var nodes = utilGetAllNodes(reflectIds, graph);
59696                 var points = nodes.map(function(n) { return projection(n.loc); });
59697                 var ssr = geoGetSmallestSurroundingRectangle(points);
59698
59699                 // Choose line pq = axis of symmetry.
59700                 // The shape's surrounding rectangle has 2 axes of symmetry.
59701                 // Reflect across the longer axis by default.
59702                 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
59703                 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
59704                 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
59705                 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
59706                 var p, q;
59707
59708                 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
59709                 if ((_useLongAxis && isLong) || (!_useLongAxis && !isLong)) {
59710                     p = p1;
59711                     q = q1;
59712                 } else {
59713                     p = p2;
59714                     q = q2;
59715                 }
59716
59717                 // reflect c across pq
59718                 // http://math.stackexchange.com/questions/65503/point-reflection-over-a-line
59719                 var dx = q[0] - p[0];
59720                 var dy = q[1] - p[1];
59721                 var a = (dx * dx - dy * dy) / (dx * dx + dy * dy);
59722                 var b = 2 * dx * dy / (dx * dx + dy * dy);
59723                 for (var i = 0; i < nodes.length; i++) {
59724                     var node = nodes[i];
59725                     var c = projection(node.loc);
59726                     var c2 = [
59727                         a * (c[0] - p[0]) + b * (c[1] - p[1]) + p[0],
59728                         b * (c[0] - p[0]) - a * (c[1] - p[1]) + p[1]
59729                     ];
59730                     var loc2 = projection.invert(c2);
59731                     node = node.move(geoVecInterp(node.loc, loc2, t));
59732                     graph = graph.replace(node);
59733                 }
59734
59735                 return graph;
59736             };
59737
59738
59739             action.useLongAxis = function(val) {
59740                 if (!arguments.length) { return _useLongAxis; }
59741                 _useLongAxis = val;
59742                 return action;
59743             };
59744
59745
59746             action.transitionable = true;
59747
59748
59749             return action;
59750         }
59751
59752         function actionUpgradeTags(entityId, oldTags, replaceTags) {
59753
59754             return function(graph) {
59755                 var entity = graph.entity(entityId);
59756                 var tags = Object.assign({}, entity.tags);  // shallow copy
59757                 var transferValue;
59758                 var semiIndex;
59759
59760                 for (var oldTagKey in oldTags) {
59761                     if (oldTags[oldTagKey] === '*') {
59762                         transferValue = tags[oldTagKey];
59763                         delete tags[oldTagKey];
59764                     } else {
59765                         var vals = tags[oldTagKey].split(';').filter(Boolean);
59766                         var oldIndex = vals.indexOf(oldTags[oldTagKey]);
59767                         if (vals.length === 1 || oldIndex === -1) {
59768                             delete tags[oldTagKey];
59769                         } else {
59770                             if (replaceTags && replaceTags[oldTagKey]) {
59771                                 // replacing a value within a semicolon-delimited value, note the index
59772                                 semiIndex = oldIndex;
59773                             }
59774                             vals.splice(oldIndex, 1);
59775                             tags[oldTagKey] = vals.join(';');
59776                         }
59777                     }
59778                 }
59779
59780                 if (replaceTags) {
59781                     for (var replaceKey in replaceTags) {
59782                         var replaceValue = replaceTags[replaceKey];
59783                         if (replaceValue === '*') {
59784                             if (tags[replaceKey] && tags[replaceKey] !== 'no') {
59785                                 // allow any pre-existing value except `no` (troll tag)
59786                                 continue;
59787                             } else {
59788                                 // otherwise assume `yes` is okay
59789                                 tags[replaceKey] = 'yes';
59790                             }
59791                         } else if (replaceValue === '$1') {
59792                             tags[replaceKey] = transferValue;
59793                         } else {
59794                             if (tags[replaceKey] && oldTags[replaceKey] && semiIndex !== undefined) {
59795                                 // don't override preexisting values
59796                                 var existingVals = tags[replaceKey].split(';').filter(Boolean);
59797                                 if (existingVals.indexOf(replaceValue) === -1) {
59798                                     existingVals.splice(semiIndex, 0, replaceValue);
59799                                     tags[replaceKey] = existingVals.join(';');
59800                                 }
59801                             } else {
59802                                 tags[replaceKey] = replaceValue;
59803                             }
59804                         }
59805                     }
59806                 }
59807
59808                 return graph.replace(entity.update({ tags: tags }));
59809             };
59810         }
59811
59812         function behaviorEdit(context) {
59813
59814             function behavior() {
59815                 context.map()
59816                     .minzoom(context.minEditableZoom());
59817             }
59818
59819
59820             behavior.off = function() {
59821                 context.map()
59822                     .minzoom(0);
59823             };
59824
59825             return behavior;
59826         }
59827
59828         /*
59829            The hover behavior adds the `.hover` class on mouseover to all elements to which
59830            the identical datum is bound, and removes it on mouseout.
59831
59832            The :hover pseudo-class is insufficient for iD's purposes because a datum's visual
59833            representation may consist of several elements scattered throughout the DOM hierarchy.
59834            Only one of these elements can have the :hover pseudo-class, but all of them will
59835            have the .hover class.
59836          */
59837         function behaviorHover(context) {
59838             var dispatch$1 = dispatch('hover');
59839             var _selection = d3_select(null);
59840             var _newNodeId = null;
59841             var _initialNodeID = null;
59842             var _buttonDown;
59843             var _altDisables;
59844             var _ignoreVertex;
59845             var _target;
59846
59847
59848             function keydown() {
59849                 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
59850                     _selection.selectAll('.hover')
59851                         .classed('hover-suppressed', true)
59852                         .classed('hover', false);
59853
59854                     _selection
59855                         .classed('hover-disabled', true);
59856
59857                     dispatch$1.call('hover', this, null);
59858                 }
59859             }
59860
59861
59862             function keyup() {
59863                 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
59864                     _selection.selectAll('.hover-suppressed')
59865                         .classed('hover-suppressed', false)
59866                         .classed('hover', true);
59867
59868                     _selection
59869                         .classed('hover-disabled', false);
59870
59871                     dispatch$1.call('hover', this, _target ? _target.id : null);
59872                 }
59873             }
59874
59875
59876             function behavior(selection) {
59877                 _selection = selection;
59878
59879                 if (_initialNodeID) {
59880                     _newNodeId = _initialNodeID;
59881                     _initialNodeID = null;
59882                 } else {
59883                     _newNodeId = null;
59884                 }
59885
59886                 _selection
59887                     .on('mouseover.hover', mouseover)
59888                     .on('mouseout.hover', mouseout)
59889                     .on('mousedown.hover', mousedown);
59890
59891                 d3_select(window)
59892                     .on('keydown.hover', keydown)
59893                     .on('keyup.hover', keyup);
59894
59895
59896                 function mouseover() {
59897                     if (_buttonDown) { return; }
59898                     var target = event.target;
59899                     enter(target ? target.__data__ : null);
59900                 }
59901
59902
59903                 function mouseout() {
59904                     if (_buttonDown) { return; }
59905                     var target = event.relatedTarget;
59906                     enter(target ? target.__data__ : null);
59907                 }
59908
59909
59910                 function mousedown() {
59911                     _buttonDown = true;
59912                     d3_select(window)
59913                         .on('mouseup.hover', mouseup, true);
59914                 }
59915
59916
59917                 function mouseup() {
59918                     _buttonDown = false;
59919                     d3_select(window)
59920                         .on('mouseup.hover', null, true);
59921                 }
59922
59923                 function allowsVertex(d) {
59924                     return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
59925                 }
59926
59927                 function modeAllowsHover(target) {
59928                     var mode = context.mode();
59929                     if (mode.id === 'add-point') {
59930                         return mode.preset.matchGeometry('vertex') ||
59931                             (target.type !== 'way' && target.geometry(context.graph()) !== 'vertex');
59932                     }
59933                     return true;
59934                 }
59935
59936                 function enter(datum) {
59937                     if (datum === _target) { return; }
59938                     _target = datum;
59939
59940                     _selection.selectAll('.hover')
59941                         .classed('hover', false);
59942                     _selection.selectAll('.hover-suppressed')
59943                         .classed('hover-suppressed', false);
59944
59945                     // What are we hovering over?
59946                     var entity, selector;
59947                     if (datum && datum.__featurehash__) {
59948                         entity = datum;
59949                         selector = '.data' + datum.__featurehash__;
59950
59951                     } else if (datum instanceof qaError) {
59952                         entity = datum;
59953                         selector = '.' + datum.service + '.error_id-' + datum.id;
59954
59955                     } else if (datum instanceof osmNote) {
59956                         entity = datum;
59957                         selector = '.note-' + datum.id;
59958
59959                     } else if (datum instanceof osmEntity) {
59960                         entity = datum;
59961                         selector = '.' + entity.id;
59962                         if (entity.type === 'relation') {
59963                             entity.members.forEach(function(member) { selector += ', .' + member.id; });
59964                         }
59965                     } else if (datum && datum.properties && (datum.properties.entity instanceof osmEntity)) {
59966                         entity = datum.properties.entity;
59967                         selector = '.' + entity.id;
59968                         if (entity.type === 'relation') {
59969                             entity.members.forEach(function(member) { selector += ', .' + member.id; });
59970                         }
59971                     }
59972
59973                     var mode = context.mode();
59974
59975                     // Update hover state and dispatch event
59976                     if (entity && entity.id !== _newNodeId) {
59977                         // If drawing a way, don't hover on a node that was just placed. #3974
59978
59979                         if ((mode.id === 'draw-line' || mode.id === 'draw-area') && !_newNodeId && entity.type === 'node') {
59980                             _newNodeId = entity.id;
59981                             return;
59982                         }
59983
59984                         var suppressed = (_altDisables && event && event.altKey) ||
59985                             (entity.type === 'node' && _ignoreVertex && !allowsVertex(entity)) ||
59986                             !modeAllowsHover(entity);
59987                         _selection.selectAll(selector)
59988                             .classed(suppressed ? 'hover-suppressed' : 'hover', true);
59989
59990                         dispatch$1.call('hover', this, !suppressed && entity);
59991
59992                     } else {
59993                         dispatch$1.call('hover', this, null);
59994                     }
59995                 }
59996             }
59997
59998
59999             behavior.off = function(selection) {
60000                 selection.selectAll('.hover')
60001                     .classed('hover', false);
60002                 selection.selectAll('.hover-suppressed')
60003                     .classed('hover-suppressed', false);
60004                 selection
60005                     .classed('hover-disabled', false);
60006
60007                 selection
60008                     .on('mouseover.hover', null)
60009                     .on('mouseout.hover', null)
60010                     .on('mousedown.hover', null);
60011
60012                 d3_select(window)
60013                     .on('keydown.hover', null)
60014                     .on('keyup.hover', null);
60015             };
60016
60017
60018             behavior.altDisables = function(val) {
60019                 if (!arguments.length) { return _altDisables; }
60020                 _altDisables = val;
60021                 return behavior;
60022             };
60023
60024             behavior.ignoreVertex = function(val) {
60025                 if (!arguments.length) { return _ignoreVertex; }
60026                 _ignoreVertex = val;
60027                 return behavior;
60028             };
60029
60030             behavior.initialNodeID = function(nodeId) {
60031                 _initialNodeID = nodeId;
60032                 return behavior;
60033             };
60034
60035             return utilRebind(behavior, dispatch$1, 'on');
60036         }
60037
60038         function refresh(selection, node) {
60039             var cr = node.getBoundingClientRect();
60040             var prop = [cr.width, cr.height];
60041             selection.property('__dimensions__', prop);
60042             return prop;
60043         }
60044
60045         function utilGetDimensions(selection, force) {
60046             if (!selection || selection.empty()) {
60047                 return [0, 0];
60048             }
60049             var node = selection.node(),
60050                 cached = selection.property('__dimensions__');
60051             return (!cached || force) ? refresh(selection, node) : cached;
60052         }
60053
60054
60055         function utilSetDimensions(selection, dimensions) {
60056             if (!selection || selection.empty()) {
60057                 return selection;
60058             }
60059             var node = selection.node();
60060             if (dimensions === null) {
60061                 refresh(selection, node);
60062                 return selection;
60063             }
60064             return selection
60065                 .property('__dimensions__', [dimensions[0], dimensions[1]])
60066                 .attr('width', dimensions[0])
60067                 .attr('height', dimensions[1]);
60068         }
60069
60070         function behaviorTail() {
60071             var container;
60072             var xmargin = 25;
60073             var tooltipSize = [0, 0];
60074             var selectionSize = [0, 0];
60075             var _text;
60076
60077
60078             function behavior(selection) {
60079                 if (!_text) { return; }
60080
60081                 d3_select(window)
60082                     .on('resize.tail', function() { selectionSize = utilGetDimensions(selection); });
60083
60084                 container = d3_select(document.body)
60085                     .append('div')
60086                     .style('display', 'none')
60087                     .attr('class', 'tail popover-inner');
60088
60089                 container.append('div')
60090                     .text(_text);
60091
60092                 selection
60093                     .on('mousemove.tail', mousemove)
60094                     .on('mouseenter.tail', mouseenter)
60095                     .on('mouseleave.tail', mouseleave);
60096
60097                 container
60098                     .on('mousemove.tail', mousemove);
60099
60100                 tooltipSize = utilGetDimensions(container);
60101                 selectionSize = utilGetDimensions(selection);
60102
60103
60104                 function show() {
60105                     container.style('display', 'block');
60106                     tooltipSize = utilGetDimensions(container);
60107                 }
60108
60109
60110                 function mousemove() {
60111                     if (container.style('display') === 'none') { show(); }
60112                     var xoffset = ((event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ?
60113                         -tooltipSize[0] - xmargin : xmargin;
60114                     container.classed('left', xoffset > 0);
60115                     utilSetTransform(container, event.clientX + xoffset, event.clientY);
60116                 }
60117
60118
60119                 function mouseleave() {
60120                     if (event.relatedTarget !== container.node()) {
60121                         container.style('display', 'none');
60122                     }
60123                 }
60124
60125
60126                 function mouseenter() {
60127                     if (event.relatedTarget !== container.node()) {
60128                         show();
60129                     }
60130                 }
60131             }
60132
60133
60134             behavior.off = function(selection) {
60135                 if (!_text) { return; }
60136
60137                 container
60138                     .on('mousemove.tail', null)
60139                     .remove();
60140
60141                 selection
60142                     .on('mousemove.tail', null)
60143                     .on('mouseenter.tail', null)
60144                     .on('mouseleave.tail', null);
60145
60146                 d3_select(window)
60147                     .on('resize.tail', null);
60148             };
60149
60150
60151             behavior.text = function(val) {
60152                 if (!arguments.length) { return _text; }
60153                 _text = val;
60154                 return behavior;
60155             };
60156
60157
60158             return behavior;
60159         }
60160
60161         var _usedTails = {};
60162         var _disableSpace = false;
60163         var _lastSpace = null;
60164
60165
60166         function behaviorDraw(context) {
60167             var dispatch$1 = dispatch(
60168                 'move', 'click', 'clickWay', 'clickNode', 'undo', 'cancel', 'finish'
60169             );
60170
60171             var keybinding = utilKeybinding('draw');
60172
60173             var _hover = behaviorHover(context).altDisables(true).ignoreVertex(true)
60174                 .on('hover', context.ui().sidebar.hover);
60175             var tail = behaviorTail();
60176             var edit = behaviorEdit(context);
60177
60178             var closeTolerance = 4;
60179             var tolerance = 12;
60180             var _mouseLeave = false;
60181             var _lastMouse = null;
60182
60183
60184             // related code
60185             // - `mode/drag_node.js` `datum()`
60186             function datum() {
60187                 var mode = context.mode();
60188                 var isNote = mode && (mode.id.indexOf('note') !== -1);
60189                 if (event.altKey || isNote) { return {}; }
60190
60191                 var element;
60192                 if (event.type === 'keydown') {
60193                     element = _lastMouse && _lastMouse.target;
60194                 } else {
60195                     element = event.target;
60196                 }
60197
60198                 // When drawing, snap only to touch targets..
60199                 // (this excludes area fills and active drawing elements)
60200                 var d = element.__data__;
60201                 return (d && d.properties && d.properties.target) ? d : {};
60202             }
60203
60204
60205             function mousedown() {
60206
60207                 function point() {
60208                     var p = context.container().node();
60209                     return touchId !== null ? d3_touches(p).filter(function(p) {
60210                         return p.identifier === touchId;
60211                     })[0] : d3_mouse(p);
60212                 }
60213
60214                 var element = d3_select(this);
60215                 var touchId = event.touches ? event.changedTouches[0].identifier : null;
60216                 var t1 = +new Date();
60217                 var p1 = point();
60218
60219                 element.on('mousemove.draw', null);
60220
60221                 d3_select(window).on('mouseup.draw', function() {
60222                     var t2 = +new Date();
60223                     var p2 = point();
60224                     var dist = geoVecLength(p1, p2);
60225
60226                     element.on('mousemove.draw', mousemove);
60227                     d3_select(window).on('mouseup.draw', null);
60228
60229                     if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) {
60230                         // Prevent a quick second click
60231                         d3_select(window).on('click.draw-block', function() {
60232                             event.stopPropagation();
60233                         }, true);
60234
60235                         context.map().dblclickEnable(false);
60236
60237                         window.setTimeout(function() {
60238                             context.map().dblclickEnable(true);
60239                             d3_select(window).on('click.draw-block', null);
60240                         }, 500);
60241
60242                         click();
60243                     }
60244                 }, true);
60245             }
60246
60247
60248             function mousemove() {
60249                 _lastMouse = event;
60250                 dispatch$1.call('move', this, datum());
60251             }
60252
60253
60254             function mouseenter() {
60255                 _mouseLeave = false;
60256             }
60257
60258
60259             function mouseleave() {
60260                 _mouseLeave = true;
60261             }
60262
60263             function allowsVertex(d) {
60264                 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
60265             }
60266
60267             // related code
60268             // - `mode/drag_node.js`     `doMode()`
60269             // - `behavior/draw.js`      `click()`
60270             // - `behavior/draw_way.js`  `move()`
60271             function click() {
60272                 var d = datum();
60273                 var target = d && d.properties && d.properties.entity;
60274
60275                 var mode = context.mode();
60276
60277                 if (target && target.type === 'node' && allowsVertex(target)) {   // Snap to a node
60278                     dispatch$1.call('clickNode', this, target, d);
60279                     return;
60280
60281                 } else if (target && target.type === 'way' && (mode.id !== 'add-point' || mode.preset.matchGeometry('vertex'))) {   // Snap to a way
60282                     var choice = geoChooseEdge(
60283                         context.childNodes(target), context.mouse(), context.projection, context.activeID()
60284                     );
60285                     if (choice) {
60286                         var edge = [target.nodes[choice.index - 1], target.nodes[choice.index]];
60287                         dispatch$1.call('clickWay', this, choice.loc, edge, d);
60288                         return;
60289                     }
60290                 } else if (mode.id !== 'add-point' || mode.preset.matchGeometry('point')) {
60291                     dispatch$1.call('click', this, context.map().mouseCoordinates(), d);
60292                 }
60293
60294             }
60295
60296
60297             function space() {
60298                 event.preventDefault();
60299                 event.stopPropagation();
60300
60301                 var currSpace = context.mouse();
60302                 if (_disableSpace && _lastSpace) {
60303                     var dist = geoVecLength(_lastSpace, currSpace);
60304                     if (dist > tolerance) {
60305                         _disableSpace = false;
60306                     }
60307                 }
60308
60309                 if (_disableSpace || _mouseLeave || !_lastMouse) { return; }
60310
60311                 // user must move mouse or release space bar to allow another click
60312                 _lastSpace = currSpace;
60313                 _disableSpace = true;
60314
60315                 d3_select(window).on('keyup.space-block', function() {
60316                     event.preventDefault();
60317                     event.stopPropagation();
60318                     _disableSpace = false;
60319                     d3_select(window).on('keyup.space-block', null);
60320                 });
60321
60322                 click();
60323             }
60324
60325
60326             function backspace() {
60327                 event.preventDefault();
60328                 dispatch$1.call('undo');
60329             }
60330
60331
60332             function del() {
60333                 event.preventDefault();
60334                 dispatch$1.call('cancel');
60335             }
60336
60337
60338             function ret() {
60339                 event.preventDefault();
60340                 dispatch$1.call('finish');
60341             }
60342
60343
60344             function behavior(selection) {
60345                 context.install(_hover);
60346                 context.install(edit);
60347
60348                 if (!context.inIntro() && !_usedTails[tail.text()]) {
60349                     context.install(tail);
60350                 }
60351
60352                 keybinding
60353                     .on('⌫', backspace)
60354                     .on('⌦', del)
60355                     .on('⎋', ret)
60356                     .on('↩', ret)
60357                     .on('space', space)
60358                     .on('⌥space', space);
60359
60360                 selection
60361                     .on('mouseenter.draw', mouseenter)
60362                     .on('mouseleave.draw', mouseleave)
60363                     .on('mousedown.draw', mousedown)
60364                     .on('mousemove.draw', mousemove);
60365
60366                 d3_select(document)
60367                     .call(keybinding);
60368
60369                 return behavior;
60370             }
60371
60372
60373             behavior.off = function(selection) {
60374                 context.ui().sidebar.hover.cancel();
60375                 context.uninstall(_hover);
60376                 context.uninstall(edit);
60377
60378                 if (!context.inIntro() && !_usedTails[tail.text()]) {
60379                     context.uninstall(tail);
60380                     _usedTails[tail.text()] = true;
60381                 }
60382
60383                 selection
60384                     .on('mouseenter.draw', null)
60385                     .on('mouseleave.draw', null)
60386                     .on('mousedown.draw', null)
60387                     .on('mousemove.draw', null);
60388
60389                 d3_select(window)
60390                     .on('mouseup.draw', null);
60391                     // note: keyup.space-block, click.draw-block should remain
60392
60393                 d3_select(document)
60394                     .call(keybinding.unbind);
60395             };
60396
60397
60398             behavior.tail = function(_) {
60399                 tail.text(_);
60400                 return behavior;
60401             };
60402
60403             behavior.hover = function() {
60404                 return _hover;
60405             };
60406
60407
60408             return utilRebind(behavior, dispatch$1, 'on');
60409         }
60410
60411         function behaviorBreathe() {
60412             var duration = 800;
60413             var steps = 4;
60414             var selector = '.selected.shadow, .selected .shadow';
60415             var _selected = d3_select(null);
60416             var _classed = '';
60417             var _params = {};
60418             var _done = false;
60419             var _timer;
60420
60421
60422             function ratchetyInterpolator(a, b, steps, units) {
60423                 a = parseFloat(a);
60424                 b = parseFloat(b);
60425                 var sample = quantize()
60426                     .domain([0, 1])
60427                     .range(d3_quantize(d3_interpolateNumber(a, b), steps));
60428
60429                 return function(t) {
60430                     return String(sample(t)) + (units || '');
60431                 };
60432             }
60433
60434
60435             function reset(selection) {
60436                 selection
60437                     .style('stroke-opacity', null)
60438                     .style('stroke-width', null)
60439                     .style('fill-opacity', null)
60440                     .style('r', null);
60441             }
60442
60443
60444             function setAnimationParams(transition, fromTo) {
60445                 var toFrom = (fromTo === 'from' ? 'to' : 'from');
60446
60447                 transition
60448                     .styleTween('stroke-opacity', function(d) {
60449                         return ratchetyInterpolator(
60450                             _params[d.id][toFrom].opacity,
60451                             _params[d.id][fromTo].opacity,
60452                             steps
60453                         );
60454                     })
60455                     .styleTween('stroke-width', function(d) {
60456                         return ratchetyInterpolator(
60457                             _params[d.id][toFrom].width,
60458                             _params[d.id][fromTo].width,
60459                             steps,
60460                             'px'
60461                         );
60462                     })
60463                     .styleTween('fill-opacity', function(d) {
60464                         return ratchetyInterpolator(
60465                             _params[d.id][toFrom].opacity,
60466                             _params[d.id][fromTo].opacity,
60467                             steps
60468                         );
60469                     })
60470                     .styleTween('r', function(d) {
60471                         return ratchetyInterpolator(
60472                             _params[d.id][toFrom].width,
60473                             _params[d.id][fromTo].width,
60474                             steps,
60475                             'px'
60476                         );
60477                     });
60478             }
60479
60480
60481             function calcAnimationParams(selection) {
60482                 selection
60483                     .call(reset)
60484                     .each(function(d) {
60485                         var s = d3_select(this);
60486                         var tag = s.node().tagName;
60487                         var p = {'from': {}, 'to': {}};
60488                         var opacity;
60489                         var width;
60490
60491                         // determine base opacity and width
60492                         if (tag === 'circle') {
60493                             opacity = parseFloat(s.style('fill-opacity') || 0.5);
60494                             width = parseFloat(s.style('r') || 15.5);
60495                         } else {
60496                             opacity = parseFloat(s.style('stroke-opacity') || 0.7);
60497                             width = parseFloat(s.style('stroke-width') || 10);
60498                         }
60499
60500                         // calculate from/to interpolation params..
60501                         p.tag = tag;
60502                         p.from.opacity = opacity * 0.6;
60503                         p.to.opacity = opacity * 1.25;
60504                         p.from.width = width * 0.7;
60505                         p.to.width = width * (tag === 'circle' ? 1.5 : 1);
60506                         _params[d.id] = p;
60507                     });
60508             }
60509
60510
60511             function run(surface, fromTo) {
60512                 var toFrom = (fromTo === 'from' ? 'to' : 'from');
60513                 var currSelected = surface.selectAll(selector);
60514                 var currClassed = surface.attr('class');
60515
60516                 if (_done || currSelected.empty()) {
60517                     _selected.call(reset);
60518                     _selected = d3_select(null);
60519                     return;
60520                 }
60521
60522                 if (!fastDeepEqual(currSelected.data(), _selected.data()) || currClassed !== _classed) {
60523                     _selected.call(reset);
60524                     _classed = currClassed;
60525                     _selected = currSelected.call(calcAnimationParams);
60526                 }
60527
60528                 var didCallNextRun = false;
60529
60530                 _selected
60531                     .transition()
60532                     .duration(duration)
60533                     .call(setAnimationParams, fromTo)
60534                     .on('end', function() {
60535                         // `end` event is called for each selected element, but we want
60536                         // it to run only once
60537                         if (!didCallNextRun) {
60538                             surface.call(run, toFrom);
60539                             didCallNextRun = true;
60540                         }
60541
60542                         // if entity was deselected, remove breathe styling
60543                         if (!d3_select(this).classed('selected')) {
60544                             reset(d3_select(this));
60545                         }
60546                     });
60547             }
60548
60549             function behavior(surface) {
60550                 _done = false;
60551                 _timer = timer(function() {
60552                     // wait for elements to actually become selected
60553                     if (surface.selectAll(selector).empty()) {
60554                         return false;
60555                     }
60556
60557                     surface.call(run, 'from');
60558                     _timer.stop();
60559                     return true;
60560                 }, 20);
60561             }
60562
60563             behavior.restartIfNeeded = function(surface) {
60564                 if (_selected.empty()) {
60565                     surface.call(run, 'from');
60566                     if (_timer) {
60567                         _timer.stop();
60568                     }
60569                 }
60570             };
60571
60572             behavior.off = function() {
60573                 _done = true;
60574                 if (_timer) {
60575                     _timer.stop();
60576                 }
60577                 _selected
60578                     .interrupt()
60579                     .call(reset);
60580             };
60581
60582
60583             return behavior;
60584         }
60585
60586         // Translate a MacOS key command into the appropriate Windows/Linux equivalent.
60587         // For example, ⌘Z -> Ctrl+Z
60588         var uiCmd = function (code) {
60589             var detected = utilDetect();
60590
60591             if (detected.os === 'mac') {
60592                 return code;
60593             }
60594
60595             if (detected.os === 'win') {
60596                 if (code === '⌘⇧Z') { return 'Ctrl+Y'; }
60597             }
60598
60599             var result = '',
60600                 replacements = {
60601                     '⌘': 'Ctrl',
60602                     '⇧': 'Shift',
60603                     '⌥': 'Alt',
60604                     '⌫': 'Backspace',
60605                     '⌦': 'Delete'
60606                 };
60607
60608             for (var i = 0; i < code.length; i++) {
60609                 if (code[i] in replacements) {
60610                     result += replacements[code[i]] + (i < code.length - 1 ? '+' : '');
60611                 } else {
60612                     result += code[i];
60613                 }
60614             }
60615
60616             return result;
60617         };
60618
60619
60620         // return a display-focused string for a given keyboard code
60621         uiCmd.display = function(code) {
60622             if (code.length !== 1) { return code; }
60623
60624             var detected = utilDetect();
60625             var mac = (detected.os === 'mac');
60626             var replacements = {
60627                 '⌘': mac ? '⌘ ' + t('shortcuts.key.cmd')    : t('shortcuts.key.ctrl'),
60628                 '⇧': mac ? '⇧ ' + t('shortcuts.key.shift')  : t('shortcuts.key.shift'),
60629                 '⌥': mac ? '⌥ ' + t('shortcuts.key.option') : t('shortcuts.key.alt'),
60630                 '⌃': mac ? '⌃ ' + t('shortcuts.key.ctrl')   : t('shortcuts.key.ctrl'),
60631                 '⌫': mac ? '⌫ ' + t('shortcuts.key.delete') : t('shortcuts.key.backspace'),
60632                 '⌦': mac ? '⌦ ' + t('shortcuts.key.del')    : t('shortcuts.key.del'),
60633                 '↖': mac ? '↖ ' + t('shortcuts.key.pgup')   : t('shortcuts.key.pgup'),
60634                 '↘': mac ? '↘ ' + t('shortcuts.key.pgdn')   : t('shortcuts.key.pgdn'),
60635                 '⇞': mac ? '⇞ ' + t('shortcuts.key.home')   : t('shortcuts.key.home'),
60636                 '⇟': mac ? '⇟ ' + t('shortcuts.key.end')    : t('shortcuts.key.end'),
60637                 '↵': mac ? '↵ ' + t('shortcuts.key.return') : t('shortcuts.key.enter'),
60638                 '⎋': mac ? '⎋ ' + t('shortcuts.key.esc')    : t('shortcuts.key.esc'),
60639             };
60640
60641             return replacements[code] || code;
60642         };
60643
60644         function behaviorCopy(context) {
60645
60646             function groupEntities(ids, graph) {
60647                 var entities = ids.map(function (id) { return graph.entity(id); });
60648                 return Object.assign(
60649                     { relation: [], way: [], node: [] },
60650                     utilArrayGroupBy(entities, 'type')
60651                 );
60652             }
60653
60654
60655             function getDescendants(id, graph, descendants) {
60656                 var entity = graph.entity(id);
60657                 var children;
60658
60659                 descendants = descendants || {};
60660
60661                 if (entity.type === 'relation') {
60662                     children = entity.members.map(function(m) { return m.id; });
60663                 } else if (entity.type === 'way') {
60664                     children = entity.nodes;
60665                 } else {
60666                     children = [];
60667                 }
60668
60669                 for (var i = 0; i < children.length; i++) {
60670                     if (!descendants[children[i]]) {
60671                         descendants[children[i]] = true;
60672                         descendants = getDescendants(children[i], graph, descendants);
60673                     }
60674                 }
60675
60676                 return descendants;
60677             }
60678
60679
60680             function getSelectionText() {
60681                 return window.getSelection().toString();
60682             }
60683
60684
60685             function doCopy() {
60686                 // prevent copy during low zoom selection
60687                 if (!context.map().withinEditableZoom()) { return; }
60688
60689                 if (!getSelectionText()) {
60690                     event.preventDefault();
60691                 }
60692
60693                 var graph = context.graph();
60694                 var selected = groupEntities(context.selectedIDs(), graph);
60695                 var canCopy = [];
60696                 var skip = {};
60697                 var entity;
60698                 var i;
60699
60700                 for (i = 0; i < selected.relation.length; i++) {
60701                     entity = selected.relation[i];
60702                     if (!skip[entity.id] && entity.isComplete(graph)) {
60703                         canCopy.push(entity.id);
60704                         skip = getDescendants(entity.id, graph, skip);
60705                     }
60706                 }
60707                 for (i = 0; i < selected.way.length; i++) {
60708                     entity = selected.way[i];
60709                     if (!skip[entity.id]) {
60710                         canCopy.push(entity.id);
60711                         skip = getDescendants(entity.id, graph, skip);
60712                     }
60713                 }
60714                 for (i = 0; i < selected.node.length; i++) {
60715                     entity = selected.node[i];
60716                     if (!skip[entity.id]) {
60717                         canCopy.push(entity.id);
60718                     }
60719                 }
60720
60721                 context.copyIDs(canCopy);
60722             }
60723
60724
60725             function behavior() {
60726                 context.keybinding().on(uiCmd('⌘C'), doCopy);
60727                 return behavior;
60728             }
60729
60730             behavior.off = function() {
60731                 context.keybinding().off(uiCmd('⌘C'));
60732             };
60733
60734
60735             return behavior;
60736         }
60737
60738         var _flashTimer;
60739
60740
60741         function uiFlash() {
60742             var _duration = 2000;
60743             var _iconName = '#iD-icon-no';
60744             var _iconClass = 'disabled';
60745             var _text = '';
60746             var _textClass;
60747
60748
60749             function flash() {
60750                 if (_flashTimer) {
60751                     _flashTimer.stop();
60752                 }
60753
60754                 d3_select('#footer-wrap')
60755                     .attr('class', 'footer-hide');
60756                 d3_select('#flash-wrap')
60757                     .attr('class', 'footer-show');
60758
60759                 var content = d3_select('#flash-wrap').selectAll('.flash-content')
60760                     .data([0]);
60761
60762                 // Enter
60763                 var contentEnter = content.enter()
60764                     .append('div')
60765                     .attr('class', 'flash-content');
60766
60767                 var iconEnter = contentEnter
60768                     .append('svg')
60769                     .attr('class', 'flash-icon')
60770                     .append('g')
60771                     .attr('transform', 'translate(10,10)');
60772
60773                 iconEnter
60774                     .append('circle')
60775                     .attr('r', 9);
60776
60777                 iconEnter
60778                     .append('use')
60779                     .attr('transform', 'translate(-7,-7)')
60780                     .attr('width', '14')
60781                     .attr('height', '14');
60782
60783                 contentEnter
60784                     .append('div')
60785                     .attr('class', 'flash-text');
60786
60787
60788                 // Update
60789                 content = content
60790                     .merge(contentEnter);
60791
60792                 content
60793                     .selectAll('.flash-icon')
60794                     .attr('class', 'flash-icon ' + (_iconClass || ''));
60795
60796                 content
60797                     .selectAll('.flash-icon use')
60798                     .attr('xlink:href', _iconName);
60799
60800                 content
60801                     .selectAll('.flash-text')
60802                     .attr('class', 'flash-text ' + (_textClass || ''))
60803                     .text(_text);
60804
60805
60806                 _flashTimer = d3_timeout(function() {
60807                     _flashTimer = null;
60808                     d3_select('#footer-wrap')
60809                         .attr('class', 'footer-show');
60810                     d3_select('#flash-wrap')
60811                         .attr('class', 'footer-hide');
60812                 }, _duration);
60813
60814                 return content;
60815             }
60816
60817
60818             flash.duration = function(_) {
60819                 if (!arguments.length) { return _duration; }
60820                 _duration = _;
60821                 return flash;
60822             };
60823
60824             flash.text = function(_) {
60825                 if (!arguments.length) { return _text; }
60826                 _text = _;
60827                 return flash;
60828             };
60829
60830             flash.textClass = function(_) {
60831                 if (!arguments.length) { return _textClass; }
60832                 _textClass = _;
60833                 return flash;
60834             };
60835
60836             flash.iconName = function(_) {
60837                 if (!arguments.length) { return _iconName; }
60838                 _iconName = _;
60839                 return flash;
60840             };
60841
60842             flash.iconClass = function(_) {
60843                 if (!arguments.length) { return _iconClass; }
60844                 _iconClass = _;
60845                 return flash;
60846             };
60847
60848             return flash;
60849         }
60850
60851         /* Creates a keybinding behavior for an operation */
60852         function behaviorOperation(context) {
60853             var _operation;
60854
60855             function keypress() {
60856                 // prevent operations during low zoom selection
60857                 if (!context.map().withinEditableZoom()) { return; }
60858
60859                 event.preventDefault();
60860                 var disabled = _operation.disabled();
60861                 var flash;
60862
60863                 if (disabled) {
60864                     flash = uiFlash()
60865                         .duration(4000)
60866                         .iconName('#iD-operation-' + _operation.id)
60867                         .iconClass('operation disabled')
60868                         .text(_operation.tooltip);
60869
60870                     flash();
60871
60872                 } else {
60873                     flash = uiFlash()
60874                         .duration(2000)
60875                         .iconName('#iD-operation-' + _operation.id)
60876                         .iconClass('operation')
60877                         .text(_operation.annotation() || _operation.title);
60878
60879                     flash();
60880                     _operation();
60881                 }
60882             }
60883
60884
60885             function behavior() {
60886                 if (_operation && _operation.available()) {
60887                     context.keybinding()
60888                         .on(_operation.keys, keypress);
60889                 }
60890
60891                 return behavior;
60892             }
60893
60894
60895             behavior.off = function() {
60896                 context.keybinding()
60897                     .off(_operation.keys);
60898             };
60899
60900
60901             behavior.which = function (_) {
60902                 if (!arguments.length) { return _operation; }
60903                 _operation = _;
60904                 return behavior;
60905             };
60906
60907
60908             return behavior;
60909         }
60910
60911         function operationCircularize(selectedIDs, context) {
60912             var entityID = selectedIDs[0];
60913             var entity = context.entity(entityID);
60914             var extent = entity.extent(context.graph());
60915             var geometry = context.geometry(entityID);
60916             var action = actionCircularize(entityID, context.projection);
60917             var nodes = utilGetAllNodes(selectedIDs, context.graph());
60918             var coords = nodes.map(function(n) { return n.loc; });
60919
60920             var operation = function() {
60921                 context.perform(action, operation.annotation());
60922
60923                 window.setTimeout(function() {
60924                     context.validator().validate();
60925                 }, 300);  // after any transition
60926             };
60927
60928
60929             operation.available = function() {
60930                 return selectedIDs.length === 1 &&
60931                     entity.type === 'way' &&
60932                     new Set(entity.nodes).size > 1;
60933             };
60934
60935
60936             // don't cache this because the visible extent could change
60937             operation.disabled = function() {
60938                 var actionDisabled = action.disabled(context.graph());
60939                 if (actionDisabled) {
60940                     return actionDisabled;
60941                 } else if (extent.percentContainedIn(context.extent()) < 0.8) {
60942                     return 'too_large';
60943                 } else if (someMissing()) {
60944                     return 'not_downloaded';
60945                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
60946                     return 'connected_to_hidden';
60947                 }
60948
60949                 return false;
60950
60951
60952                 function someMissing() {
60953                     if (context.inIntro()) { return false; }
60954                     var osm = context.connection();
60955                     if (osm) {
60956                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
60957                         if (missing.length) {
60958                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
60959                             return true;
60960                         }
60961                     }
60962                     return false;
60963                 }
60964             };
60965
60966
60967             operation.tooltip = function() {
60968                 var disable = operation.disabled();
60969                 return disable ?
60970                     t('operations.circularize.' + disable) :
60971                     t('operations.circularize.description.' + geometry);
60972             };
60973
60974
60975             operation.annotation = function() {
60976                 return t('operations.circularize.annotation.' + geometry);
60977             };
60978
60979
60980             operation.id = 'circularize';
60981             operation.keys = [t('operations.circularize.key')];
60982             operation.title = t('operations.circularize.title');
60983             operation.behavior = behaviorOperation(context).which(operation);
60984
60985             return operation;
60986         }
60987
60988         function operationDelete(selectedIDs, context) {
60989             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
60990             var action = actionDeleteMultiple(selectedIDs);
60991             var nodes = utilGetAllNodes(selectedIDs, context.graph());
60992             var coords = nodes.map(function(n) { return n.loc; });
60993             var extent = nodes.reduce(function(extent, node) {
60994                 return extent.extend(node.extent(context.graph()));
60995             }, geoExtent());
60996
60997
60998             var operation = function() {
60999                 var nextSelectedID;
61000                 var nextSelectedLoc;
61001
61002                 if (selectedIDs.length === 1) {
61003                     var id = selectedIDs[0];
61004                     var entity = context.entity(id);
61005                     var geometry = context.geometry(id);
61006                     var parents = context.graph().parentWays(entity);
61007                     var parent = parents[0];
61008
61009                     // Select the next closest node in the way.
61010                     if (geometry === 'vertex') {
61011                         var nodes = parent.nodes;
61012                         var i = nodes.indexOf(id);
61013
61014                         if (i === 0) {
61015                             i++;
61016                         } else if (i === nodes.length - 1) {
61017                             i--;
61018                         } else {
61019                             var a = geoSphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc);
61020                             var b = geoSphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc);
61021                             i = a < b ? i - 1 : i + 1;
61022                         }
61023
61024                         nextSelectedID = nodes[i];
61025                         nextSelectedLoc = context.entity(nextSelectedID).loc;
61026                     }
61027                 }
61028
61029                 context.perform(action, operation.annotation());
61030                 context.validator().validate();
61031
61032                 if (nextSelectedID && nextSelectedLoc) {
61033                     if (context.hasEntity(nextSelectedID)) {
61034                         context.enter(modeSelect(context, [nextSelectedID]).follow(true));
61035                     } else {
61036                         context.map().centerEase(nextSelectedLoc);
61037                         context.enter(modeBrowse(context));
61038                     }
61039                 } else {
61040                     context.enter(modeBrowse(context));
61041                 }
61042
61043             };
61044
61045
61046             operation.available = function() {
61047                 return true;
61048             };
61049
61050
61051             operation.disabled = function() {
61052                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
61053                     return 'too_large';
61054                 } else if (someMissing()) {
61055                     return 'not_downloaded';
61056                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61057                     return 'connected_to_hidden';
61058                 } else if (selectedIDs.some(protectedMember)) {
61059                     return 'part_of_relation';
61060                 } else if (selectedIDs.some(incompleteRelation)) {
61061                     return 'incomplete_relation';
61062                 } else if (selectedIDs.some(hasWikidataTag)) {
61063                     return 'has_wikidata_tag';
61064                 }
61065
61066                 return false;
61067
61068
61069                 function someMissing() {
61070                     if (context.inIntro()) { return false; }
61071                     var osm = context.connection();
61072                     if (osm) {
61073                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
61074                         if (missing.length) {
61075                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
61076                             return true;
61077                         }
61078                     }
61079                     return false;
61080                 }
61081
61082                 function hasWikidataTag(id) {
61083                     var entity = context.entity(id);
61084                     return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
61085                 }
61086
61087                 function incompleteRelation(id) {
61088                     var entity = context.entity(id);
61089                     return entity.type === 'relation' && !entity.isComplete(context.graph());
61090                 }
61091
61092                 function protectedMember(id) {
61093                     var entity = context.entity(id);
61094                     if (entity.type !== 'way') { return false; }
61095
61096                     var parents = context.graph().parentRelations(entity);
61097                     for (var i = 0; i < parents.length; i++) {
61098                         var parent = parents[i];
61099                         var type = parent.tags.type;
61100                         var role = parent.memberById(id).role || 'outer';
61101                         if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) {
61102                             return true;
61103                         }
61104                     }
61105                     return false;
61106                 }
61107             };
61108
61109
61110             operation.tooltip = function() {
61111                 var disable = operation.disabled();
61112                 return disable ?
61113                     t('operations.delete.' + disable + '.' + multi) :
61114                     t('operations.delete.description' + '.' + multi);
61115             };
61116
61117
61118             operation.annotation = function() {
61119                 return selectedIDs.length === 1 ?
61120                     t('operations.delete.annotation.' + context.geometry(selectedIDs[0])) :
61121                     t('operations.delete.annotation.multiple', { n: selectedIDs.length });
61122             };
61123
61124
61125             operation.id = 'delete';
61126             operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
61127             operation.title = t('operations.delete.title');
61128             operation.behavior = behaviorOperation(context).which(operation);
61129
61130             return operation;
61131         }
61132
61133         function operationOrthogonalize(selectedIDs, context) {
61134             var _extent;
61135             var type;
61136             var actions = selectedIDs.map(chooseAction).filter(Boolean);
61137             var amount = actions.length === 1 ? 'single' : 'multiple';
61138             var nodes = utilGetAllNodes(selectedIDs, context.graph());
61139             var coords = nodes.map(function(n) { return n.loc; });
61140
61141
61142             function chooseAction(entityID) {
61143
61144                 var entity = context.entity(entityID);
61145                 var geometry = context.geometry(entityID);
61146
61147                 if (!_extent) {
61148                     _extent =  entity.extent(context.graph());
61149                 } else {
61150                     _extent = _extent.extend(entity.extent(context.graph()));
61151                 }
61152
61153                 // square a line/area
61154                 if (entity.type === 'way' && new Set(entity.nodes).size > 2 ) {
61155                     if (type && type !== 'feature') { return null; }
61156                     type = 'feature';
61157                     return actionOrthogonalize(entityID, context.projection);
61158
61159                 // square a single vertex
61160                 } else if (geometry === 'vertex') {
61161                     if (type && type !== 'corner') { return null; }
61162                     type = 'corner';
61163                     var graph = context.graph();
61164                     var parents = graph.parentWays(entity);
61165                     if (parents.length === 1) {
61166                         var way = parents[0];
61167                         if (way.nodes.indexOf(entityID) !== -1) {
61168                             return actionOrthogonalize(way.id, context.projection, entityID);
61169                         }
61170                     }
61171                 }
61172
61173                 return null;
61174             }
61175
61176
61177             var operation = function() {
61178                 if (!actions.length) { return; }
61179
61180                 var combinedAction = function(graph, t) {
61181                     actions.forEach(function(action) {
61182                         if (!action.disabled(graph)) {
61183                             graph = action(graph, t);
61184                         }
61185                     });
61186                     return graph;
61187                 };
61188                 combinedAction.transitionable = true;
61189
61190                 context.perform(combinedAction, operation.annotation());
61191
61192                 window.setTimeout(function() {
61193                     context.validator().validate();
61194                 }, 300);  // after any transition
61195             };
61196
61197
61198             operation.available = function() {
61199                 return actions.length && selectedIDs.length === actions.length;
61200             };
61201
61202
61203             // don't cache this because the visible extent could change
61204             operation.disabled = function() {
61205                 if (!actions.length) { return ''; }
61206
61207                 var actionDisabled;
61208
61209                 var actionDisableds = {};
61210
61211                 if (actions.every(function(action) {
61212                     var disabled = action.disabled(context.graph());
61213                     if (disabled) { actionDisableds[disabled] = true; }
61214                     return disabled;
61215                 })) {
61216                     actionDisabled = actions[0].disabled(context.graph());
61217                 }
61218
61219                 if (actionDisabled) {
61220                     if (Object.keys(actionDisableds).length > 1) {
61221                         return 'multiple_blockers';
61222                     }
61223                     return actionDisabled;
61224                 } else if (type !== 'corner' &&
61225                            _extent.percentContainedIn(context.extent()) < 0.8) {
61226                     return 'too_large';
61227                 } else if (someMissing()) {
61228                     return 'not_downloaded';
61229                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61230                     return 'connected_to_hidden';
61231                 }
61232
61233                 return false;
61234
61235
61236                 function someMissing() {
61237                     if (context.inIntro()) { return false; }
61238                     var osm = context.connection();
61239                     if (osm) {
61240                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
61241                         if (missing.length) {
61242                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
61243                             return true;
61244                         }
61245                     }
61246                     return false;
61247                 }
61248             };
61249
61250
61251             operation.tooltip = function() {
61252                 var disable = operation.disabled();
61253                 return disable ?
61254                     t('operations.orthogonalize.' + disable + '.' + amount) :
61255                     t('operations.orthogonalize.description.' + type + '.' + amount);
61256             };
61257
61258
61259             operation.annotation = function() {
61260                 return t('operations.orthogonalize.annotation.' + type + '.' + amount);
61261             };
61262
61263
61264             operation.id = 'orthogonalize';
61265             operation.keys = [t('operations.orthogonalize.key')];
61266             operation.title = t('operations.orthogonalize.title');
61267             operation.behavior = behaviorOperation(context).which(operation);
61268
61269             return operation;
61270         }
61271
61272         function operationReflectShort(selectedIDs, context) {
61273             return operationReflect(selectedIDs, context, 'short');
61274         }
61275
61276
61277         function operationReflectLong(selectedIDs, context) {
61278             return operationReflect(selectedIDs, context, 'long');
61279         }
61280
61281
61282         function operationReflect(selectedIDs, context, axis) {
61283             axis = axis || 'long';
61284             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
61285             var nodes = utilGetAllNodes(selectedIDs, context.graph());
61286             var coords = nodes.map(function(n) { return n.loc; });
61287             var extent = nodes.reduce(function(extent, node) {
61288                 return extent.extend(node.extent(context.graph()));
61289             }, geoExtent());
61290
61291
61292             var operation = function() {
61293                 var action = actionReflect(selectedIDs, context.projection)
61294                     .useLongAxis(Boolean(axis === 'long'));
61295
61296                 context.perform(action, operation.annotation());
61297
61298                 window.setTimeout(function() {
61299                     context.validator().validate();
61300                 }, 300);  // after any transition
61301             };
61302
61303
61304             operation.available = function() {
61305                 return nodes.length >= 3;
61306             };
61307
61308
61309             // don't cache this because the visible extent could change
61310             operation.disabled = function() {
61311                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
61312                     return 'too_large';
61313                 } else if (someMissing()) {
61314                     return 'not_downloaded';
61315                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61316                     return 'connected_to_hidden';
61317                 } else if (selectedIDs.some(incompleteRelation)) {
61318                     return 'incomplete_relation';
61319                 }
61320
61321                 return false;
61322
61323
61324                 function someMissing() {
61325                     if (context.inIntro()) { return false; }
61326                     var osm = context.connection();
61327                     if (osm) {
61328                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
61329                         if (missing.length) {
61330                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
61331                             return true;
61332                         }
61333                     }
61334                     return false;
61335                 }
61336
61337                 function incompleteRelation(id) {
61338                     var entity = context.entity(id);
61339                     return entity.type === 'relation' && !entity.isComplete(context.graph());
61340                 }
61341             };
61342
61343
61344             operation.tooltip = function() {
61345                 var disable = operation.disabled();
61346                 return disable ?
61347                     t('operations.reflect.' + disable + '.' + multi) :
61348                     t('operations.reflect.description.' + axis + '.' + multi);
61349             };
61350
61351
61352             operation.annotation = function() {
61353                 return t('operations.reflect.annotation.' + axis + '.' + multi);
61354             };
61355
61356
61357             operation.id = 'reflect-' + axis;
61358             operation.keys = [t('operations.reflect.key.' + axis)];
61359             operation.title = t('operations.reflect.title.' + axis);
61360             operation.behavior = behaviorOperation(context).which(operation);
61361
61362             return operation;
61363         }
61364
61365         function operationMove(selectedIDs, context) {
61366             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
61367             var nodes = utilGetAllNodes(selectedIDs, context.graph());
61368             var coords = nodes.map(function(n) { return n.loc; });
61369             var extent = nodes.reduce(function(extent, node) {
61370                 return extent.extend(node.extent(context.graph()));
61371             }, geoExtent());
61372
61373
61374             var operation = function() {
61375                 context.enter(modeMove(context, selectedIDs));
61376             };
61377
61378
61379             operation.available = function() {
61380                 return selectedIDs.length > 1 ||
61381                     context.entity(selectedIDs[0]).type !== 'node';
61382             };
61383
61384
61385             operation.disabled = function() {
61386                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
61387                     return 'too_large';
61388                 } else if (someMissing()) {
61389                     return 'not_downloaded';
61390                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61391                     return 'connected_to_hidden';
61392                 } else if (selectedIDs.some(incompleteRelation)) {
61393                     return 'incomplete_relation';
61394                 }
61395
61396                 return false;
61397
61398
61399                 function someMissing() {
61400                     if (context.inIntro()) { return false; }
61401                     var osm = context.connection();
61402                     if (osm) {
61403                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
61404                         if (missing.length) {
61405                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
61406                             return true;
61407                         }
61408                     }
61409                     return false;
61410                 }
61411
61412                 function incompleteRelation(id) {
61413                     var entity = context.entity(id);
61414                     return entity.type === 'relation' && !entity.isComplete(context.graph());
61415                 }
61416             };
61417
61418
61419             operation.tooltip = function() {
61420                 var disable = operation.disabled();
61421                 return disable ?
61422                     t('operations.move.' + disable + '.' + multi) :
61423                     t('operations.move.description.' + multi);
61424             };
61425
61426
61427             operation.annotation = function() {
61428                 return selectedIDs.length === 1 ?
61429                     t('operations.move.annotation.' + context.geometry(selectedIDs[0])) :
61430                     t('operations.move.annotation.multiple');
61431             };
61432
61433
61434             operation.id = 'move';
61435             operation.keys = [t('operations.move.key')];
61436             operation.title = t('operations.move.title');
61437             operation.behavior = behaviorOperation(context).which(operation);
61438
61439             return operation;
61440         }
61441
61442         function modeRotate(context, entityIDs) {
61443             var mode = {
61444                 id: 'rotate',
61445                 button: 'browse'
61446             };
61447
61448             var keybinding = utilKeybinding('rotate');
61449             var behaviors = [
61450                 behaviorEdit(context),
61451                 operationCircularize(entityIDs, context).behavior,
61452                 operationDelete(entityIDs, context).behavior,
61453                 operationMove(entityIDs, context).behavior,
61454                 operationOrthogonalize(entityIDs, context).behavior,
61455                 operationReflectLong(entityIDs, context).behavior,
61456                 operationReflectShort(entityIDs, context).behavior
61457             ];
61458             var annotation = entityIDs.length === 1 ?
61459                 t('operations.rotate.annotation.' + context.geometry(entityIDs[0])) :
61460                 t('operations.rotate.annotation.multiple');
61461
61462             var _prevGraph;
61463             var _prevAngle;
61464             var _prevTransform;
61465             var _pivot;
61466
61467
61468             function doRotate() {
61469                 var fn;
61470                 if (context.graph() !== _prevGraph) {
61471                     fn = context.perform;
61472                 } else {
61473                     fn = context.replace;
61474                 }
61475
61476                 // projection changed, recalculate _pivot
61477                 var projection = context.projection;
61478                 var currTransform = projection.transform();
61479                 if (!_prevTransform ||
61480                     currTransform.k !== _prevTransform.k ||
61481                     currTransform.x !== _prevTransform.x ||
61482                     currTransform.y !== _prevTransform.y) {
61483
61484                     var nodes = utilGetAllNodes(entityIDs, context.graph());
61485                     var points = nodes.map(function(n) { return projection(n.loc); });
61486                     _pivot = getPivot(points);
61487                     _prevAngle = undefined;
61488                 }
61489
61490
61491                 var currMouse = context.mouse();
61492                 var currAngle = Math.atan2(currMouse[1] - _pivot[1], currMouse[0] - _pivot[0]);
61493
61494                 if (typeof _prevAngle === 'undefined') { _prevAngle = currAngle; }
61495                 var delta = currAngle - _prevAngle;
61496
61497                 fn(actionRotate(entityIDs, _pivot, delta, projection));
61498
61499                 _prevTransform = currTransform;
61500                 _prevAngle = currAngle;
61501                 _prevGraph = context.graph();
61502             }
61503
61504             function getPivot(points) {
61505                 var _pivot;
61506                 if (points.length === 1) {
61507                     _pivot = points[0];
61508                 } else if (points.length === 2) {
61509                     _pivot = geoVecInterp(points[0], points[1], 0.5);
61510                 } else {
61511                     var polygonHull = d3_polygonHull(points);
61512                     if (polygonHull.length === 2) {
61513                         _pivot = geoVecInterp(points[0], points[1], 0.5);
61514                     } else {
61515                         _pivot = d3_polygonCentroid(d3_polygonHull(points));
61516                     }
61517                 }
61518                 return _pivot;
61519             }
61520
61521
61522             function finish() {
61523                 event.stopPropagation();
61524                 context.replace(actionNoop(), annotation);
61525                 context.enter(modeSelect(context, entityIDs));
61526             }
61527
61528
61529             function cancel() {
61530                 context.pop();
61531                 context.enter(modeSelect(context, entityIDs));
61532             }
61533
61534
61535             function undone() {
61536                 context.enter(modeBrowse(context));
61537             }
61538
61539
61540             mode.enter = function() {
61541                 context.features().forceVisible(entityIDs);
61542
61543                 behaviors.forEach(context.install);
61544
61545                 context.surface()
61546                     .on('mousemove.rotate', doRotate)
61547                     .on('click.rotate', finish);
61548
61549                 context.history()
61550                     .on('undone.rotate', undone);
61551
61552                 keybinding
61553                     .on('⎋', cancel)
61554                     .on('↩', finish);
61555
61556                 d3_select(document)
61557                     .call(keybinding);
61558             };
61559
61560
61561             mode.exit = function() {
61562                 behaviors.forEach(context.uninstall);
61563
61564                 context.surface()
61565                     .on('mousemove.rotate', null)
61566                     .on('click.rotate', null);
61567
61568                 context.history()
61569                     .on('undone.rotate', null);
61570
61571                 d3_select(document)
61572                     .call(keybinding.unbind);
61573
61574                 context.features().forceVisible([]);
61575             };
61576
61577
61578             mode.selectedIDs = function() {
61579                 if (!arguments.length) { return entityIDs; }
61580                 // no assign
61581                 return mode;
61582             };
61583
61584
61585             return mode;
61586         }
61587
61588         function operationRotate(selectedIDs, context) {
61589             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
61590             var nodes = utilGetAllNodes(selectedIDs, context.graph());
61591             var coords = nodes.map(function(n) { return n.loc; });
61592             var extent = nodes.reduce(function(extent, node) {
61593                 return extent.extend(node.extent(context.graph()));
61594             }, geoExtent());
61595
61596
61597             var operation = function() {
61598                 context.enter(modeRotate(context, selectedIDs));
61599             };
61600
61601
61602             operation.available = function() {
61603                 return nodes.length >= 2;
61604             };
61605
61606
61607             operation.disabled = function() {
61608
61609                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
61610                     return 'too_large';
61611                 } else if (someMissing()) {
61612                     return 'not_downloaded';
61613                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61614                     return 'connected_to_hidden';
61615                 } else if (selectedIDs.some(incompleteRelation)) {
61616                     return 'incomplete_relation';
61617                 }
61618
61619                 return false;
61620
61621
61622                 function someMissing() {
61623                     if (context.inIntro()) { return false; }
61624                     var osm = context.connection();
61625                     if (osm) {
61626                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
61627                         if (missing.length) {
61628                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
61629                             return true;
61630                         }
61631                     }
61632                     return false;
61633                 }
61634
61635                 function incompleteRelation(id) {
61636                     var entity = context.entity(id);
61637                     return entity.type === 'relation' && !entity.isComplete(context.graph());
61638                 }
61639             };
61640
61641
61642             operation.tooltip = function() {
61643                 var disable = operation.disabled();
61644                 return disable ?
61645                     t('operations.rotate.' + disable + '.' + multi) :
61646                     t('operations.rotate.description.' + multi);
61647             };
61648
61649
61650             operation.annotation = function() {
61651                 return selectedIDs.length === 1 ?
61652                     t('operations.rotate.annotation.' + context.geometry(selectedIDs[0])) :
61653                     t('operations.rotate.annotation.multiple');
61654             };
61655
61656
61657             operation.id = 'rotate';
61658             operation.keys = [t('operations.rotate.key')];
61659             operation.title = t('operations.rotate.title');
61660             operation.behavior = behaviorOperation(context).which(operation);
61661
61662             return operation;
61663         }
61664
61665         function modeMove(context, entityIDs, baseGraph) {
61666             var mode = {
61667                 id: 'move',
61668                 button: 'browse'
61669             };
61670
61671             var keybinding = utilKeybinding('move');
61672             var behaviors = [
61673                 behaviorEdit(context),
61674                 operationCircularize(entityIDs, context).behavior,
61675                 operationDelete(entityIDs, context).behavior,
61676                 operationOrthogonalize(entityIDs, context).behavior,
61677                 operationReflectLong(entityIDs, context).behavior,
61678                 operationReflectShort(entityIDs, context).behavior,
61679                 operationRotate(entityIDs, context).behavior
61680             ];
61681             var annotation = entityIDs.length === 1 ?
61682                 t('operations.move.annotation.' + context.geometry(entityIDs[0])) :
61683                 t('operations.move.annotation.multiple');
61684
61685             var _prevGraph;
61686             var _cache;
61687             var _origin;
61688             var _nudgeInterval;
61689
61690
61691             function doMove(nudge) {
61692                 nudge = nudge || [0, 0];
61693
61694                 var fn;
61695                 if (_prevGraph !== context.graph()) {
61696                     _cache = {};
61697                     _origin = context.map().mouseCoordinates();
61698                     fn = context.perform;
61699                 } else {
61700                     fn = context.overwrite;
61701                 }
61702
61703                 var currMouse = context.mouse();
61704                 var origMouse = context.projection(_origin);
61705                 var delta = geoVecSubtract(geoVecSubtract(currMouse, origMouse), nudge);
61706
61707                 fn(actionMove(entityIDs, delta, context.projection, _cache));
61708                 _prevGraph = context.graph();
61709             }
61710
61711
61712             function startNudge(nudge) {
61713                 if (_nudgeInterval) { window.clearInterval(_nudgeInterval); }
61714                 _nudgeInterval = window.setInterval(function() {
61715                     context.pan(nudge);
61716                     doMove(nudge);
61717                 }, 50);
61718             }
61719
61720
61721             function stopNudge() {
61722                 if (_nudgeInterval) {
61723                     window.clearInterval(_nudgeInterval);
61724                     _nudgeInterval = null;
61725                 }
61726             }
61727
61728
61729             function move() {
61730                 doMove();
61731                 var nudge = geoViewportEdge(context.mouse(), context.map().dimensions());
61732                 if (nudge) {
61733                     startNudge(nudge);
61734                 } else {
61735                     stopNudge();
61736                 }
61737             }
61738
61739
61740             function finish() {
61741                 event.stopPropagation();
61742                 context.replace(actionNoop(), annotation);
61743                 context.enter(modeSelect(context, entityIDs));
61744                 stopNudge();
61745             }
61746
61747
61748             function cancel() {
61749                 if (baseGraph) {
61750                     while (context.graph() !== baseGraph) { context.pop(); }
61751                     context.enter(modeBrowse(context));
61752                 } else {
61753                     context.pop();
61754                     context.enter(modeSelect(context, entityIDs));
61755                 }
61756                 stopNudge();
61757             }
61758
61759
61760             function undone() {
61761                 context.enter(modeBrowse(context));
61762             }
61763
61764
61765             mode.enter = function() {
61766                 _origin = context.map().mouseCoordinates();
61767                 _prevGraph = null;
61768                 _cache = {};
61769
61770                 context.features().forceVisible(entityIDs);
61771
61772                 behaviors.forEach(context.install);
61773
61774                 context.surface()
61775                     .on('mousemove.move', move)
61776                     .on('click.move', finish);
61777
61778                 context.history()
61779                     .on('undone.move', undone);
61780
61781                 keybinding
61782                     .on('⎋', cancel)
61783                     .on('↩', finish);
61784
61785                 d3_select(document)
61786                     .call(keybinding);
61787             };
61788
61789
61790             mode.exit = function() {
61791                 stopNudge();
61792
61793                 behaviors.forEach(function(behavior) {
61794                     context.uninstall(behavior);
61795                 });
61796
61797                 context.surface()
61798                     .on('mousemove.move', null)
61799                     .on('click.move', null);
61800
61801                 context.history()
61802                     .on('undone.move', null);
61803
61804                 d3_select(document)
61805                     .call(keybinding.unbind);
61806
61807                 context.features().forceVisible([]);
61808             };
61809
61810
61811             mode.selectedIDs = function() {
61812                 if (!arguments.length) { return entityIDs; }
61813                 // no assign
61814                 return mode;
61815             };
61816
61817
61818             return mode;
61819         }
61820
61821         function behaviorPaste(context) {
61822
61823             function doPaste() {
61824                 // prevent paste during low zoom selection
61825                 if (!context.map().withinEditableZoom()) { return; }
61826
61827                 event.preventDefault();
61828
61829                 var baseGraph = context.graph();
61830                 var mouse = context.mouse();
61831                 var projection = context.projection;
61832                 var viewport = geoExtent(projection.clipExtent()).polygon();
61833
61834                 if (!geoPointInPolygon(mouse, viewport)) { return; }
61835
61836                 var extent = geoExtent();
61837                 var oldIDs = context.copyIDs();
61838                 var oldGraph = context.copyGraph();
61839                 var newIDs = [];
61840
61841                 if (!oldIDs.length) { return; }
61842
61843                 var action = actionCopyEntities(oldIDs, oldGraph);
61844                 context.perform(action);
61845
61846                 var copies = action.copies();
61847                 var originals = new Set();
61848                 Object.values(copies).forEach(function(entity) { originals.add(entity.id); });
61849
61850                 for (var id in copies) {
61851                     var oldEntity = oldGraph.entity(id);
61852                     var newEntity = copies[id];
61853
61854                     extent._extend(oldEntity.extent(oldGraph));
61855
61856                     // Exclude child nodes from newIDs if their parent way was also copied.
61857                     var parents = context.graph().parentWays(newEntity);
61858                     var parentCopied = parents.some(function(parent) {
61859                         return originals.has(parent.id);
61860                     });
61861
61862                     if (!parentCopied) {
61863                         newIDs.push(newEntity.id);
61864                     }
61865                 }
61866
61867                 // Put pasted objects where mouse pointer is..
61868                 var center = projection(extent.center());
61869                 var delta = geoVecSubtract(mouse, center);
61870
61871                 context.perform(actionMove(newIDs, delta, projection));
61872                 context.enter(modeMove(context, newIDs, baseGraph));
61873             }
61874
61875
61876             function behavior() {
61877                 context.keybinding().on(uiCmd('⌘V'), doPaste);
61878                 return behavior;
61879             }
61880
61881
61882             behavior.off = function() {
61883                 context.keybinding().off(uiCmd('⌘V'));
61884             };
61885
61886
61887             return behavior;
61888         }
61889
61890         /*
61891             `behaviorDrag` is like `d3_behavior.drag`, with the following differences:
61892
61893             * The `origin` function is expected to return an [x, y] tuple rather than an
61894               {x, y} object.
61895             * The events are `start`, `move`, and `end`.
61896               (https://github.com/mbostock/d3/issues/563)
61897             * The `start` event is not dispatched until the first cursor movement occurs.
61898               (https://github.com/mbostock/d3/pull/368)
61899             * The `move` event has a `point` and `delta` [x, y] tuple properties rather
61900               than `x`, `y`, `dx`, and `dy` properties.
61901             * The `end` event is not dispatched if no movement occurs.
61902             * An `off` function is available that unbinds the drag's internal event handlers.
61903          */
61904
61905         function behaviorDrag() {
61906             var dispatch$1 = dispatch('start', 'move', 'end');
61907             var _origin = null;
61908             var _selector = '';
61909             var _event;
61910             var _target;
61911             var _surface;
61912
61913
61914             var d3_event_userSelectProperty = utilPrefixCSSProperty('UserSelect');
61915             var d3_event_userSelectSuppress = function() {
61916                     var selection$1 = selection();
61917                     var select = selection$1.style(d3_event_userSelectProperty);
61918                     selection$1.style(d3_event_userSelectProperty, 'none');
61919                     return function() {
61920                         selection$1.style(d3_event_userSelectProperty, select);
61921                     };
61922                 };
61923
61924
61925             function d3_eventCancel() {
61926                 event.stopPropagation();
61927                 event.preventDefault();
61928             }
61929
61930
61931             function eventOf(thiz, argumentz) {
61932                 return function(e1) {
61933                     e1.target = behavior;
61934                     customEvent(e1, dispatch$1.apply, dispatch$1, [e1.type, thiz, argumentz]);
61935                 };
61936             }
61937
61938
61939             function dragstart() {
61940                 _target = this;
61941                 _event = eventOf(_target, arguments);
61942
61943                 var eventTarget = event.target;
61944                 var touchId = event.touches ? event.changedTouches[0].identifier : null;
61945                 var offset;
61946                 var startOrigin = point();
61947                 var started = false;
61948                 var selectEnable = d3_event_userSelectSuppress();
61949
61950                 d3_select(window)
61951                     .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove)
61952                     .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true);
61953
61954                 if (_origin) {
61955                     offset = _origin.apply(_target, arguments);
61956                     offset = [offset[0] - startOrigin[0], offset[1] - startOrigin[1]];
61957                 } else {
61958                     offset = [0, 0];
61959                 }
61960
61961                 if (touchId === null) {
61962                     event.stopPropagation();
61963                 }
61964
61965
61966                 function point() {
61967                     var p = _surface || _target.parentNode;
61968                     return touchId !== null ? d3_touches(p).filter(function(p) {
61969                         return p.identifier === touchId;
61970                     })[0] : d3_mouse(p);
61971                 }
61972
61973
61974                 function dragmove() {
61975                     var p = point();
61976                     var dx = p[0] - startOrigin[0];
61977                     var dy = p[1] - startOrigin[1];
61978
61979                     if (dx === 0 && dy === 0)
61980                         { return; }
61981
61982                     startOrigin = p;
61983                     d3_eventCancel();
61984
61985                     if (!started) {
61986                         started = true;
61987                         _event({ type: 'start' });
61988                     } else {
61989                         _event({
61990                             type: 'move',
61991                             point: [p[0] + offset[0],  p[1] + offset[1]],
61992                             delta: [dx, dy]
61993                         });
61994                     }
61995                 }
61996
61997
61998                 function dragend() {
61999                     if (started) {
62000                         _event({ type: 'end' });
62001
62002                         d3_eventCancel();
62003                         if (event.target === eventTarget) {
62004                             d3_select(window)
62005                                 .on('click.drag', click, true);
62006                         }
62007                     }
62008
62009                     d3_select(window)
62010                         .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null)
62011                         .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null);
62012
62013                     selectEnable();
62014                 }
62015
62016
62017                 function click() {
62018                     d3_eventCancel();
62019                     d3_select(window)
62020                         .on('click.drag', null);
62021                 }
62022             }
62023
62024
62025             function behavior(selection) {
62026                 var matchesSelector = utilPrefixDOMProperty('matchesSelector');
62027                 var delegate = dragstart;
62028
62029                 if (_selector) {
62030                     delegate = function() {
62031                         var root = this;
62032                         var target = event.target;
62033                         for (; target && target !== root; target = target.parentNode) {
62034                             var datum = target.__data__;
62035
62036                             var entity = datum instanceof osmNote ? datum
62037                                 : datum && datum.properties && datum.properties.entity;
62038
62039                             if (entity && target[matchesSelector](_selector)) {
62040                                 return dragstart.call(target, entity);
62041                             }
62042                         }
62043                     };
62044                 }
62045
62046                 selection
62047                     .on('mousedown.drag' + _selector, delegate)
62048                     .on('touchstart.drag' + _selector, delegate);
62049             }
62050
62051
62052             behavior.off = function(selection) {
62053                 selection
62054                     .on('mousedown.drag' + _selector, null)
62055                     .on('touchstart.drag' + _selector, null);
62056             };
62057
62058
62059             behavior.selector = function(_) {
62060                 if (!arguments.length) { return _selector; }
62061                 _selector = _;
62062                 return behavior;
62063             };
62064
62065
62066             behavior.origin = function(_) {
62067                 if (!arguments.length) { return _origin; }
62068                 _origin = _;
62069                 return behavior;
62070             };
62071
62072
62073             behavior.cancel = function() {
62074                 d3_select(window)
62075                     .on('mousemove.drag', null)
62076                     .on('mouseup.drag', null);
62077                 return behavior;
62078             };
62079
62080
62081             behavior.target = function() {
62082                 if (!arguments.length) { return _target; }
62083                 _target = arguments[0];
62084                 _event = eventOf(_target, Array.prototype.slice.call(arguments, 1));
62085                 return behavior;
62086             };
62087
62088
62089             behavior.surface = function() {
62090                 if (!arguments.length) { return _surface; }
62091                 _surface = arguments[0];
62092                 return behavior;
62093             };
62094
62095
62096             return utilRebind(behavior, dispatch$1, 'on');
62097         }
62098
62099         function modeDragNode(context) {
62100             var mode = {
62101                 id: 'drag-node',
62102                 button: 'browse'
62103             };
62104             var hover = behaviorHover(context).altDisables(true)
62105                 .on('hover', context.ui().sidebar.hover);
62106             var edit = behaviorEdit(context);
62107
62108             var _nudgeInterval;
62109             var _restoreSelectedIDs = [];
62110             var _wasMidpoint = false;
62111             var _isCancelled = false;
62112             var _activeEntity;
62113             var _startLoc;
62114             var _lastLoc;
62115
62116
62117             function startNudge(entity, nudge) {
62118                 if (_nudgeInterval) { window.clearInterval(_nudgeInterval); }
62119                 _nudgeInterval = window.setInterval(function() {
62120                     context.pan(nudge);
62121                     doMove(entity, nudge);
62122                 }, 50);
62123             }
62124
62125
62126             function stopNudge() {
62127                 if (_nudgeInterval) {
62128                     window.clearInterval(_nudgeInterval);
62129                     _nudgeInterval = null;
62130                 }
62131             }
62132
62133
62134             function moveAnnotation(entity) {
62135                 return t('operations.move.annotation.' + entity.geometry(context.graph()));
62136             }
62137
62138
62139             function connectAnnotation(nodeEntity, targetEntity) {
62140                 var nodeGeometry = nodeEntity.geometry(context.graph());
62141                 var targetGeometry = targetEntity.geometry(context.graph());
62142                 if (nodeGeometry === 'vertex' && targetGeometry === 'vertex') {
62143                     var nodeParentWayIDs = context.graph().parentWays(nodeEntity);
62144                     var targetParentWayIDs = context.graph().parentWays(targetEntity);
62145                     var sharedParentWays = utilArrayIntersection(nodeParentWayIDs, targetParentWayIDs);
62146                     // if both vertices are part of the same way
62147                     if (sharedParentWays.length !== 0) {
62148                         // if the nodes are next to each other, they are merged
62149                         if (sharedParentWays[0].areAdjacent(nodeEntity.id, targetEntity.id)) {
62150                             return t('operations.connect.annotation.from_vertex.to_adjacent_vertex');
62151                         }
62152                         return t('operations.connect.annotation.from_vertex.to_sibling_vertex');
62153                     }
62154                 }
62155                 return t('operations.connect.annotation.from_' + nodeGeometry + '.to_' + targetGeometry);
62156             }
62157
62158
62159             function shouldSnapToNode(target) {
62160                 if (!_activeEntity) { return false; }
62161                 return _activeEntity.geometry(context.graph()) !== 'vertex' ||
62162                     (target.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(target, context.graph()));
62163             }
62164
62165
62166             function origin(entity) {
62167                 return context.projection(entity.loc);
62168             }
62169
62170
62171             function keydown() {
62172                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
62173                     if (context.surface().classed('nope')) {
62174                         context.surface()
62175                             .classed('nope-suppressed', true);
62176                     }
62177                     context.surface()
62178                         .classed('nope', false)
62179                         .classed('nope-disabled', true);
62180                 }
62181             }
62182
62183
62184             function keyup() {
62185                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
62186                     if (context.surface().classed('nope-suppressed')) {
62187                         context.surface()
62188                             .classed('nope', true);
62189                     }
62190                     context.surface()
62191                         .classed('nope-suppressed', false)
62192                         .classed('nope-disabled', false);
62193                 }
62194             }
62195
62196
62197             function start(entity) {
62198                 _wasMidpoint = entity.type === 'midpoint';
62199                 var hasHidden = context.features().hasHiddenConnections(entity, context.graph());
62200                 _isCancelled = !context.editable() || event.sourceEvent.shiftKey || hasHidden;
62201
62202
62203                 if (_isCancelled) {
62204                     if (hasHidden) {
62205                         uiFlash()
62206                             .duration(4000)
62207                             .text(t('modes.drag_node.connected_to_hidden'))();
62208                     }
62209                     return drag.cancel();
62210                 }
62211
62212                 if (_wasMidpoint) {
62213                     var midpoint = entity;
62214                     entity = osmNode();
62215                     context.perform(actionAddMidpoint(midpoint, entity));
62216                     entity = context.entity(entity.id);   // get post-action entity
62217
62218                     var vertex = context.surface().selectAll('.' + entity.id);
62219                     drag.target(vertex.node(), entity);
62220
62221                 } else {
62222                     context.perform(actionNoop());
62223                 }
62224
62225                 _activeEntity = entity;
62226                 _startLoc = entity.loc;
62227
62228                 hover.ignoreVertex(entity.geometry(context.graph()) === 'vertex');
62229
62230                 context.surface().selectAll('.' + _activeEntity.id)
62231                     .classed('active', true);
62232
62233                 context.enter(mode);
62234             }
62235
62236
62237             // related code
62238             // - `behavior/draw.js` `datum()`
62239             function datum() {
62240                 var event$1 = event && event.sourceEvent;
62241                 if (!event$1 || event$1.altKey) {
62242                     return {};
62243                 } else {
62244                     // When dragging, snap only to touch targets..
62245                     // (this excludes area fills and active drawing elements)
62246                     var d = event$1.target.__data__;
62247                     return (d && d.properties && d.properties.target) ? d : {};
62248                 }
62249             }
62250
62251
62252             function doMove(entity, nudge) {
62253                 nudge = nudge || [0, 0];
62254
62255                 var currPoint = (event && event.point) || context.projection(_lastLoc);
62256                 var currMouse = geoVecSubtract(currPoint, nudge);
62257                 var loc = context.projection.invert(currMouse);
62258
62259                 if (!_nudgeInterval) {   // If not nudging at the edge of the viewport, try to snap..
62260                     // related code
62261                     // - `mode/drag_node.js`     `doMode()`
62262                     // - `behavior/draw.js`      `click()`
62263                     // - `behavior/draw_way.js`  `move()`
62264                     var d = datum();
62265                     var target = d && d.properties && d.properties.entity;
62266                     var targetLoc = target && target.loc;
62267                     var targetNodes = d && d.properties && d.properties.nodes;
62268                     var edge;
62269
62270                     if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
62271                         if (shouldSnapToNode(target)) {
62272                             loc = targetLoc;
62273                         }
62274
62275                     } else if (targetNodes) {   // snap to way - a line target with `.nodes`
62276                         edge = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
62277                         if (edge) {
62278                             loc = edge.loc;
62279                         }
62280                     }
62281                 }
62282
62283                 context.replace(
62284                     actionMoveNode(entity.id, loc)
62285                 );
62286
62287                 // Below here: validations
62288                 var isInvalid = false;
62289
62290                 // Check if this connection to `target` could cause relations to break..
62291                 if (target) {
62292                     isInvalid = hasRelationConflict(entity, target, edge, context.graph());
62293                 }
62294
62295                 // Check if this drag causes the geometry to break..
62296                 if (!isInvalid) {
62297                     isInvalid = hasInvalidGeometry(entity, context.graph());
62298                 }
62299
62300
62301                 var nope = context.surface().classed('nope');
62302                 if (isInvalid === 'relation' || isInvalid === 'restriction') {
62303                     if (!nope) {   // about to nope - show hint
62304                         uiFlash()
62305                             .duration(4000)
62306                             .text(t('operations.connect.' + isInvalid,
62307                                 { relation: context.presets().item('type/restriction').name() }
62308                             ))();
62309                     }
62310                 } else {
62311                     if (nope) {   // about to un-nope, remove hint
62312                         uiFlash()
62313                             .duration(1)
62314                             .text('')();
62315                     }
62316                 }
62317
62318
62319                 var nopeDisabled = context.surface().classed('nope-disabled');
62320                 if (nopeDisabled) {
62321                     context.surface()
62322                         .classed('nope', false)
62323                         .classed('nope-suppressed', isInvalid);
62324                 } else {
62325                     context.surface()
62326                         .classed('nope', isInvalid)
62327                         .classed('nope-suppressed', false);
62328                 }
62329
62330                 _lastLoc = loc;
62331             }
62332
62333
62334             // Uses `actionConnect.disabled()` to know whether this connection is ok..
62335             function hasRelationConflict(entity, target, edge, graph) {
62336                 var testGraph = graph.update();  // copy
62337
62338                 // if snapping to way - add midpoint there and consider that the target..
62339                 if (edge) {
62340                     var midpoint = osmNode();
62341                     var action = actionAddMidpoint({
62342                         loc: edge.loc,
62343                         edge: [target.nodes[edge.index - 1], target.nodes[edge.index]]
62344                     }, midpoint);
62345
62346                     testGraph = action(testGraph);
62347                     target = midpoint;
62348                 }
62349
62350                 // can we connect to it?
62351                 var ids = [entity.id, target.id];
62352                 return actionConnect(ids).disabled(testGraph);
62353             }
62354
62355
62356             function hasInvalidGeometry(entity, graph) {
62357                 var parents = graph.parentWays(entity);
62358                 var i, j, k;
62359
62360                 for (i = 0; i < parents.length; i++) {
62361                     var parent = parents[i];
62362                     var nodes = [];
62363                     var activeIndex = null;    // which multipolygon ring contains node being dragged
62364
62365                     // test any parent multipolygons for valid geometry
62366                     var relations = graph.parentRelations(parent);
62367                     for (j = 0; j < relations.length; j++) {
62368                         if (!relations[j].isMultipolygon()) { continue; }
62369
62370                         var rings = osmJoinWays(relations[j].members, graph);
62371
62372                         // find active ring and test it for self intersections
62373                         for (k = 0; k < rings.length; k++) {
62374                             nodes = rings[k].nodes;
62375                             if (nodes.find(function(n) { return n.id === entity.id; })) {
62376                                 activeIndex = k;
62377                                 if (geoHasSelfIntersections(nodes, entity.id)) {
62378                                     return true;
62379                                 }
62380                             }
62381                             rings[k].coords = nodes.map(function(n) { return n.loc; });
62382                         }
62383
62384                         // test active ring for intersections with other rings in the multipolygon
62385                         for (k = 0; k < rings.length; k++) {
62386                             if (k === activeIndex) { continue; }
62387
62388                             // make sure active ring doesnt cross passive rings
62389                             if (geoHasLineIntersections(rings[activeIndex].nodes, rings[k].nodes, entity.id)) {
62390                                 return true;
62391                             }
62392                         }
62393                     }
62394
62395
62396                     // If we still haven't tested this node's parent way for self-intersections.
62397                     // (because it's not a member of a multipolygon), test it now.
62398                     if (activeIndex === null) {
62399                         nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); });
62400                         if (nodes.length && geoHasSelfIntersections(nodes, entity.id)) {
62401                             return true;
62402                         }
62403                     }
62404
62405                 }
62406
62407                 return false;
62408             }
62409
62410
62411             function move(entity) {
62412                 if (_isCancelled) { return; }
62413                 event.sourceEvent.stopPropagation();
62414
62415                 context.surface().classed('nope-disabled', event.sourceEvent.altKey);
62416
62417                 _lastLoc = context.projection.invert(event.point);
62418
62419                 doMove(entity);
62420                 var nudge = geoViewportEdge(event.point, context.map().dimensions());
62421                 if (nudge) {
62422                     startNudge(entity, nudge);
62423                 } else {
62424                     stopNudge();
62425                 }
62426             }
62427
62428             function end(entity) {
62429                 if (_isCancelled) { return; }
62430
62431                 var wasPoint = entity.geometry(context.graph()) === 'point';
62432
62433                 var d = datum();
62434                 var nope = (d && d.properties && d.properties.nope) || context.surface().classed('nope');
62435                 var target = d && d.properties && d.properties.entity;   // entity to snap to
62436
62437                 if (nope) {   // bounce back
62438                     context.perform(
62439                         _actionBounceBack(entity.id, _startLoc)
62440                     );
62441
62442                 } else if (target && target.type === 'way') {
62443                     var choice = geoChooseEdge(context.childNodes(target), context.mouse(), context.projection, entity.id);
62444                     context.replace(
62445                         actionAddMidpoint({
62446                             loc: choice.loc,
62447                             edge: [target.nodes[choice.index - 1], target.nodes[choice.index]]
62448                         }, entity),
62449                         connectAnnotation(entity, target)
62450                     );
62451
62452                 } else if (target && target.type === 'node' && shouldSnapToNode(target)) {
62453                     context.replace(
62454                         actionConnect([target.id, entity.id]),
62455                         connectAnnotation(entity, target)
62456                     );
62457
62458                 } else if (_wasMidpoint) {
62459                     context.replace(
62460                         actionNoop(),
62461                         t('operations.add.annotation.vertex')
62462                     );
62463
62464                 } else {
62465                     context.replace(
62466                         actionNoop(),
62467                         moveAnnotation(entity)
62468                     );
62469                 }
62470
62471                 if (wasPoint) {
62472                     context.enter(modeSelect(context, [entity.id]));
62473
62474                 } else {
62475                     var reselection = _restoreSelectedIDs.filter(function(id) {
62476                         return context.graph().hasEntity(id);
62477                     });
62478
62479                     if (reselection.length) {
62480                         context.enter(modeSelect(context, reselection));
62481                     } else {
62482                         context.enter(modeBrowse(context));
62483                     }
62484                 }
62485             }
62486
62487
62488             function _actionBounceBack(nodeID, toLoc) {
62489                 var moveNode = actionMoveNode(nodeID, toLoc);
62490                 var action = function(graph, t) {
62491                     // last time through, pop off the bounceback perform.
62492                     // it will then overwrite the initial perform with a moveNode that does nothing
62493                     if (t === 1) { context.pop(); }
62494                     return moveNode(graph, t);
62495                 };
62496                 action.transitionable = true;
62497                 return action;
62498             }
62499
62500
62501             function cancel() {
62502                 drag.cancel();
62503                 context.enter(modeBrowse(context));
62504             }
62505
62506
62507             var drag = behaviorDrag()
62508                 .selector('.layer-touch.points .target')
62509                 .surface(d3_select('#map').node())
62510                 .origin(origin)
62511                 .on('start', start)
62512                 .on('move', move)
62513                 .on('end', end);
62514
62515
62516             mode.enter = function() {
62517                 context.install(hover);
62518                 context.install(edit);
62519
62520                 d3_select(window)
62521                     .on('keydown.drawWay', keydown)
62522                     .on('keyup.drawWay', keyup);
62523
62524                 context.history()
62525                     .on('undone.drag-node', cancel);
62526             };
62527
62528
62529             mode.exit = function() {
62530                 context.ui().sidebar.hover.cancel();
62531                 context.uninstall(hover);
62532                 context.uninstall(edit);
62533
62534                 d3_select(window)
62535                     .on('keydown.hover', null)
62536                     .on('keyup.hover', null);
62537
62538                 context.history()
62539                     .on('undone.drag-node', null);
62540
62541                 _activeEntity = null;
62542
62543                 context.surface()
62544                     .classed('nope', false)
62545                     .classed('nope-suppressed', false)
62546                     .classed('nope-disabled', false)
62547                     .selectAll('.active')
62548                     .classed('active', false);
62549
62550                 stopNudge();
62551             };
62552
62553
62554             mode.selectedIDs = function() {
62555                 if (!arguments.length) { return _activeEntity ? [_activeEntity.id] : []; }
62556                 // no assign
62557                 return mode;
62558             };
62559
62560
62561             mode.activeID = function() {
62562                 if (!arguments.length) { return _activeEntity && _activeEntity.id; }
62563                 // no assign
62564                 return mode;
62565             };
62566
62567
62568             mode.restoreSelectedIDs = function(_) {
62569                 if (!arguments.length) { return _restoreSelectedIDs; }
62570                 _restoreSelectedIDs = _;
62571                 return mode;
62572             };
62573
62574
62575             mode.behavior = drag;
62576
62577
62578             return mode;
62579         }
62580
62581         function quickselect$1(arr, k, left, right, compare) {
62582             quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
62583         }
62584
62585         function quickselectStep(arr, k, left, right, compare) {
62586
62587             while (right > left) {
62588                 if (right - left > 600) {
62589                     var n = right - left + 1;
62590                     var m = k - left + 1;
62591                     var z = Math.log(n);
62592                     var s = 0.5 * Math.exp(2 * z / 3);
62593                     var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
62594                     var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
62595                     var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
62596                     quickselectStep(arr, k, newLeft, newRight, compare);
62597                 }
62598
62599                 var t = arr[k];
62600                 var i = left;
62601                 var j = right;
62602
62603                 swap(arr, left, k);
62604                 if (compare(arr[right], t) > 0) { swap(arr, left, right); }
62605
62606                 while (i < j) {
62607                     swap(arr, i, j);
62608                     i++;
62609                     j--;
62610                     while (compare(arr[i], t) < 0) { i++; }
62611                     while (compare(arr[j], t) > 0) { j--; }
62612                 }
62613
62614                 if (compare(arr[left], t) === 0) { swap(arr, left, j); }
62615                 else {
62616                     j++;
62617                     swap(arr, j, right);
62618                 }
62619
62620                 if (j <= k) { left = j + 1; }
62621                 if (k <= j) { right = j - 1; }
62622             }
62623         }
62624
62625         function swap(arr, i, j) {
62626             var tmp = arr[i];
62627             arr[i] = arr[j];
62628             arr[j] = tmp;
62629         }
62630
62631         function defaultCompare(a, b) {
62632             return a < b ? -1 : a > b ? 1 : 0;
62633         }
62634
62635         var RBush = function RBush(maxEntries) {
62636             if ( maxEntries === void 0 ) maxEntries = 9;
62637
62638             // max entries in a node is 9 by default; min node fill is 40% for best performance
62639             this._maxEntries = Math.max(4, maxEntries);
62640             this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
62641             this.clear();
62642         };
62643
62644         RBush.prototype.all = function all () {
62645             return this._all(this.data, []);
62646         };
62647
62648         RBush.prototype.search = function search (bbox) {
62649             var node = this.data;
62650             var result = [];
62651
62652             if (!intersects$2(bbox, node)) { return result; }
62653
62654             var toBBox = this.toBBox;
62655             var nodesToSearch = [];
62656
62657             while (node) {
62658                 for (var i = 0; i < node.children.length; i++) {
62659                     var child = node.children[i];
62660                     var childBBox = node.leaf ? toBBox(child) : child;
62661
62662                     if (intersects$2(bbox, childBBox)) {
62663                         if (node.leaf) { result.push(child); }
62664                         else if (contains$5(bbox, childBBox)) { this._all(child, result); }
62665                         else { nodesToSearch.push(child); }
62666                     }
62667                 }
62668                 node = nodesToSearch.pop();
62669             }
62670
62671             return result;
62672         };
62673
62674         RBush.prototype.collides = function collides (bbox) {
62675             var node = this.data;
62676
62677             if (!intersects$2(bbox, node)) { return false; }
62678
62679             var nodesToSearch = [];
62680             while (node) {
62681                 for (var i = 0; i < node.children.length; i++) {
62682                     var child = node.children[i];
62683                     var childBBox = node.leaf ? this.toBBox(child) : child;
62684
62685                     if (intersects$2(bbox, childBBox)) {
62686                         if (node.leaf || contains$5(bbox, childBBox)) { return true; }
62687                         nodesToSearch.push(child);
62688                     }
62689                 }
62690                 node = nodesToSearch.pop();
62691             }
62692
62693             return false;
62694         };
62695
62696         RBush.prototype.load = function load (data) {
62697             if (!(data && data.length)) { return this; }
62698
62699             if (data.length < this._minEntries) {
62700                 for (var i = 0; i < data.length; i++) {
62701                     this.insert(data[i]);
62702                 }
62703                 return this;
62704             }
62705
62706             // recursively build the tree with the given data from scratch using OMT algorithm
62707             var node = this._build(data.slice(), 0, data.length - 1, 0);
62708
62709             if (!this.data.children.length) {
62710                 // save as is if tree is empty
62711                 this.data = node;
62712
62713             } else if (this.data.height === node.height) {
62714                 // split root if trees have the same height
62715                 this._splitRoot(this.data, node);
62716
62717             } else {
62718                 if (this.data.height < node.height) {
62719                     // swap trees if inserted one is bigger
62720                     var tmpNode = this.data;
62721                     this.data = node;
62722                     node = tmpNode;
62723                 }
62724
62725                 // insert the small tree into the large tree at appropriate level
62726                 this._insert(node, this.data.height - node.height - 1, true);
62727             }
62728
62729             return this;
62730         };
62731
62732         RBush.prototype.insert = function insert (item) {
62733             if (item) { this._insert(item, this.data.height - 1); }
62734             return this;
62735         };
62736
62737         RBush.prototype.clear = function clear () {
62738             this.data = createNode$1([]);
62739             return this;
62740         };
62741
62742         RBush.prototype.remove = function remove (item, equalsFn) {
62743             if (!item) { return this; }
62744
62745             var node = this.data;
62746             var bbox = this.toBBox(item);
62747             var path = [];
62748             var indexes = [];
62749             var i, parent, goingUp;
62750
62751             // depth-first iterative tree traversal
62752             while (node || path.length) {
62753
62754                 if (!node) { // go up
62755                     node = path.pop();
62756                     parent = path[path.length - 1];
62757                     i = indexes.pop();
62758                     goingUp = true;
62759                 }
62760
62761                 if (node.leaf) { // check current node
62762                     var index = findItem$1(item, node.children, equalsFn);
62763
62764                     if (index !== -1) {
62765                         // item found, remove the item and condense tree upwards
62766                         node.children.splice(index, 1);
62767                         path.push(node);
62768                         this._condense(path);
62769                         return this;
62770                     }
62771                 }
62772
62773                 if (!goingUp && !node.leaf && contains$5(node, bbox)) { // go down
62774                     path.push(node);
62775                     indexes.push(i);
62776                     i = 0;
62777                     parent = node;
62778                     node = node.children[0];
62779
62780                 } else if (parent) { // go right
62781                     i++;
62782                     node = parent.children[i];
62783                     goingUp = false;
62784
62785                 } else { node = null; } // nothing found
62786             }
62787
62788             return this;
62789         };
62790
62791         RBush.prototype.toBBox = function toBBox (item) { return item; };
62792
62793         RBush.prototype.compareMinX = function compareMinX (a, b) { return a.minX - b.minX; };
62794         RBush.prototype.compareMinY = function compareMinY (a, b) { return a.minY - b.minY; };
62795
62796         RBush.prototype.toJSON = function toJSON () { return this.data; };
62797
62798         RBush.prototype.fromJSON = function fromJSON (data) {
62799             this.data = data;
62800             return this;
62801         };
62802
62803         RBush.prototype._all = function _all (node, result) {
62804             var nodesToSearch = [];
62805             while (node) {
62806                 if (node.leaf) { result.push.apply(result, node.children); }
62807                 else { nodesToSearch.push.apply(nodesToSearch, node.children); }
62808
62809                 node = nodesToSearch.pop();
62810             }
62811             return result;
62812         };
62813
62814         RBush.prototype._build = function _build (items, left, right, height) {
62815
62816             var N = right - left + 1;
62817             var M = this._maxEntries;
62818             var node;
62819
62820             if (N <= M) {
62821                 // reached leaf level; return leaf
62822                 node = createNode$1(items.slice(left, right + 1));
62823                 calcBBox$1(node, this.toBBox);
62824                 return node;
62825             }
62826
62827             if (!height) {
62828                 // target height of the bulk-loaded tree
62829                 height = Math.ceil(Math.log(N) / Math.log(M));
62830
62831                 // target number of root entries to maximize storage utilization
62832                 M = Math.ceil(N / Math.pow(M, height - 1));
62833             }
62834
62835             node = createNode$1([]);
62836             node.leaf = false;
62837             node.height = height;
62838
62839             // split the items into M mostly square tiles
62840
62841             var N2 = Math.ceil(N / M);
62842             var N1 = N2 * Math.ceil(Math.sqrt(M));
62843
62844             multiSelect$1(items, left, right, N1, this.compareMinX);
62845
62846             for (var i = left; i <= right; i += N1) {
62847
62848                 var right2 = Math.min(i + N1 - 1, right);
62849
62850                 multiSelect$1(items, i, right2, N2, this.compareMinY);
62851
62852                 for (var j = i; j <= right2; j += N2) {
62853
62854                     var right3 = Math.min(j + N2 - 1, right2);
62855
62856                     // pack each entry recursively
62857                     node.children.push(this._build(items, j, right3, height - 1));
62858                 }
62859             }
62860
62861             calcBBox$1(node, this.toBBox);
62862
62863             return node;
62864         };
62865
62866         RBush.prototype._chooseSubtree = function _chooseSubtree (bbox, node, level, path) {
62867             while (true) {
62868                 path.push(node);
62869
62870                 if (node.leaf || path.length - 1 === level) { break; }
62871
62872                 var minArea = Infinity;
62873                 var minEnlargement = Infinity;
62874                 var targetNode = (void 0);
62875
62876                 for (var i = 0; i < node.children.length; i++) {
62877                     var child = node.children[i];
62878                     var area = bboxArea$1(child);
62879                     var enlargement = enlargedArea$1(bbox, child) - area;
62880
62881                     // choose entry with the least area enlargement
62882                     if (enlargement < minEnlargement) {
62883                         minEnlargement = enlargement;
62884                         minArea = area < minArea ? area : minArea;
62885                         targetNode = child;
62886
62887                     } else if (enlargement === minEnlargement) {
62888                         // otherwise choose one with the smallest area
62889                         if (area < minArea) {
62890                             minArea = area;
62891                             targetNode = child;
62892                         }
62893                     }
62894                 }
62895
62896                 node = targetNode || node.children[0];
62897             }
62898
62899             return node;
62900         };
62901
62902         RBush.prototype._insert = function _insert (item, level, isNode) {
62903             var bbox = isNode ? item : this.toBBox(item);
62904             var insertPath = [];
62905
62906             // find the best node for accommodating the item, saving all nodes along the path too
62907             var node = this._chooseSubtree(bbox, this.data, level, insertPath);
62908
62909             // put the item into the node
62910             node.children.push(item);
62911             extend$2(node, bbox);
62912
62913             // split on node overflow; propagate upwards if necessary
62914             while (level >= 0) {
62915                 if (insertPath[level].children.length > this._maxEntries) {
62916                     this._split(insertPath, level);
62917                     level--;
62918                 } else { break; }
62919             }
62920
62921             // adjust bboxes along the insertion path
62922             this._adjustParentBBoxes(bbox, insertPath, level);
62923         };
62924
62925         // split overflowed node into two
62926         RBush.prototype._split = function _split (insertPath, level) {
62927             var node = insertPath[level];
62928             var M = node.children.length;
62929             var m = this._minEntries;
62930
62931             this._chooseSplitAxis(node, m, M);
62932
62933             var splitIndex = this._chooseSplitIndex(node, m, M);
62934
62935             var newNode = createNode$1(node.children.splice(splitIndex, node.children.length - splitIndex));
62936             newNode.height = node.height;
62937             newNode.leaf = node.leaf;
62938
62939             calcBBox$1(node, this.toBBox);
62940             calcBBox$1(newNode, this.toBBox);
62941
62942             if (level) { insertPath[level - 1].children.push(newNode); }
62943             else { this._splitRoot(node, newNode); }
62944         };
62945
62946         RBush.prototype._splitRoot = function _splitRoot (node, newNode) {
62947             // split root node
62948             this.data = createNode$1([node, newNode]);
62949             this.data.height = node.height + 1;
62950             this.data.leaf = false;
62951             calcBBox$1(this.data, this.toBBox);
62952         };
62953
62954         RBush.prototype._chooseSplitIndex = function _chooseSplitIndex (node, m, M) {
62955             var index;
62956             var minOverlap = Infinity;
62957             var minArea = Infinity;
62958
62959             for (var i = m; i <= M - m; i++) {
62960                 var bbox1 = distBBox$1(node, 0, i, this.toBBox);
62961                 var bbox2 = distBBox$1(node, i, M, this.toBBox);
62962
62963                 var overlap = intersectionArea$1(bbox1, bbox2);
62964                 var area = bboxArea$1(bbox1) + bboxArea$1(bbox2);
62965
62966                 // choose distribution with minimum overlap
62967                 if (overlap < minOverlap) {
62968                     minOverlap = overlap;
62969                     index = i;
62970
62971                     minArea = area < minArea ? area : minArea;
62972
62973                 } else if (overlap === minOverlap) {
62974                     // otherwise choose distribution with minimum area
62975                     if (area < minArea) {
62976                         minArea = area;
62977                         index = i;
62978                     }
62979                 }
62980             }
62981
62982             return index || M - m;
62983         };
62984
62985         // sorts node children by the best axis for split
62986         RBush.prototype._chooseSplitAxis = function _chooseSplitAxis (node, m, M) {
62987             var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX$1;
62988             var compareMinY = node.leaf ? this.compareMinY : compareNodeMinY$1;
62989             var xMargin = this._allDistMargin(node, m, M, compareMinX);
62990             var yMargin = this._allDistMargin(node, m, M, compareMinY);
62991
62992             // if total distributions margin value is minimal for x, sort by minX,
62993             // otherwise it's already sorted by minY
62994             if (xMargin < yMargin) { node.children.sort(compareMinX); }
62995         };
62996
62997         // total margin of all possible split distributions where each node is at least m full
62998         RBush.prototype._allDistMargin = function _allDistMargin (node, m, M, compare) {
62999             node.children.sort(compare);
63000
63001             var toBBox = this.toBBox;
63002             var leftBBox = distBBox$1(node, 0, m, toBBox);
63003             var rightBBox = distBBox$1(node, M - m, M, toBBox);
63004             var margin = bboxMargin$1(leftBBox) + bboxMargin$1(rightBBox);
63005
63006             for (var i = m; i < M - m; i++) {
63007                 var child = node.children[i];
63008                 extend$2(leftBBox, node.leaf ? toBBox(child) : child);
63009                 margin += bboxMargin$1(leftBBox);
63010             }
63011
63012             for (var i$1 = M - m - 1; i$1 >= m; i$1--) {
63013                 var child$1 = node.children[i$1];
63014                 extend$2(rightBBox, node.leaf ? toBBox(child$1) : child$1);
63015                 margin += bboxMargin$1(rightBBox);
63016             }
63017
63018             return margin;
63019         };
63020
63021         RBush.prototype._adjustParentBBoxes = function _adjustParentBBoxes (bbox, path, level) {
63022             // adjust bboxes along the given tree path
63023             for (var i = level; i >= 0; i--) {
63024                 extend$2(path[i], bbox);
63025             }
63026         };
63027
63028         RBush.prototype._condense = function _condense (path) {
63029             // go through the path, removing empty nodes and updating bboxes
63030             for (var i = path.length - 1, siblings = (void 0); i >= 0; i--) {
63031                 if (path[i].children.length === 0) {
63032                     if (i > 0) {
63033                         siblings = path[i - 1].children;
63034                         siblings.splice(siblings.indexOf(path[i]), 1);
63035
63036                     } else { this.clear(); }
63037
63038                 } else { calcBBox$1(path[i], this.toBBox); }
63039             }
63040         };
63041
63042         function findItem$1(item, items, equalsFn) {
63043             if (!equalsFn) { return items.indexOf(item); }
63044
63045             for (var i = 0; i < items.length; i++) {
63046                 if (equalsFn(item, items[i])) { return i; }
63047             }
63048             return -1;
63049         }
63050
63051         // calculate node's bbox from bboxes of its children
63052         function calcBBox$1(node, toBBox) {
63053             distBBox$1(node, 0, node.children.length, toBBox, node);
63054         }
63055
63056         // min bounding rectangle of node children from k to p-1
63057         function distBBox$1(node, k, p, toBBox, destNode) {
63058             if (!destNode) { destNode = createNode$1(null); }
63059             destNode.minX = Infinity;
63060             destNode.minY = Infinity;
63061             destNode.maxX = -Infinity;
63062             destNode.maxY = -Infinity;
63063
63064             for (var i = k; i < p; i++) {
63065                 var child = node.children[i];
63066                 extend$2(destNode, node.leaf ? toBBox(child) : child);
63067             }
63068
63069             return destNode;
63070         }
63071
63072         function extend$2(a, b) {
63073             a.minX = Math.min(a.minX, b.minX);
63074             a.minY = Math.min(a.minY, b.minY);
63075             a.maxX = Math.max(a.maxX, b.maxX);
63076             a.maxY = Math.max(a.maxY, b.maxY);
63077             return a;
63078         }
63079
63080         function compareNodeMinX$1(a, b) { return a.minX - b.minX; }
63081         function compareNodeMinY$1(a, b) { return a.minY - b.minY; }
63082
63083         function bboxArea$1(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }
63084         function bboxMargin$1(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
63085
63086         function enlargedArea$1(a, b) {
63087             return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
63088                    (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
63089         }
63090
63091         function intersectionArea$1(a, b) {
63092             var minX = Math.max(a.minX, b.minX);
63093             var minY = Math.max(a.minY, b.minY);
63094             var maxX = Math.min(a.maxX, b.maxX);
63095             var maxY = Math.min(a.maxY, b.maxY);
63096
63097             return Math.max(0, maxX - minX) *
63098                    Math.max(0, maxY - minY);
63099         }
63100
63101         function contains$5(a, b) {
63102             return a.minX <= b.minX &&
63103                    a.minY <= b.minY &&
63104                    b.maxX <= a.maxX &&
63105                    b.maxY <= a.maxY;
63106         }
63107
63108         function intersects$2(a, b) {
63109             return b.minX <= a.maxX &&
63110                    b.minY <= a.maxY &&
63111                    b.maxX >= a.minX &&
63112                    b.maxY >= a.minY;
63113         }
63114
63115         function createNode$1(children) {
63116             return {
63117                 children: children,
63118                 height: 1,
63119                 leaf: true,
63120                 minX: Infinity,
63121                 minY: Infinity,
63122                 maxX: -Infinity,
63123                 maxY: -Infinity
63124             };
63125         }
63126
63127         // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
63128         // combines selection algorithm with binary divide & conquer approach
63129
63130         function multiSelect$1(arr, left, right, n, compare) {
63131             var stack = [left, right];
63132
63133             while (stack.length) {
63134                 right = stack.pop();
63135                 left = stack.pop();
63136
63137                 if (right - left <= n) { continue; }
63138
63139                 var mid = left + Math.ceil((right - left) / n / 2) * n;
63140                 quickselect$1(arr, mid, left, right, compare);
63141
63142                 stack.push(left, mid, mid, right);
63143             }
63144         }
63145
63146         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"};
63147         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: \\((.+)\\)"}};
63148
63149         var tiler = utilTiler();
63150         var dispatch$1 = dispatch('loaded');
63151
63152         var _krCache;
63153         var _krZoom = 14;
63154         var _krUrlRoot = 'https://www.keepright.at/';
63155
63156         var _krRuleset = [
63157             // no 20 - multiple node on same spot - these are mostly boundaries overlapping roads
63158             30, 40, 50, 60, 70, 90, 100, 110, 120, 130, 150, 160, 170, 180,
63159             190, 191, 192, 193, 194, 195, 196, 197, 198,
63160             200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 220,
63161             230, 231, 232, 270, 280, 281, 282, 283, 284, 285,
63162             290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 310, 311, 312, 313,
63163             320, 350, 360, 370, 380, 390, 400, 401, 402, 410, 411, 412, 413
63164         ];
63165
63166
63167         function abortRequest(controller) {
63168             if (controller) {
63169                 controller.abort();
63170             }
63171         }
63172
63173         function abortUnwantedRequests(cache, tiles) {
63174             Object.keys(cache.inflightTile).forEach(function(k) {
63175                 var wanted = tiles.find(function(tile) { return k === tile.id; });
63176                 if (!wanted) {
63177                     abortRequest(cache.inflightTile[k]);
63178                     delete cache.inflightTile[k];
63179                 }
63180             });
63181         }
63182
63183
63184         function encodeErrorRtree(d) {
63185             return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
63186         }
63187
63188
63189         // replace or remove error from rtree
63190         function updateRtree(item, replace) {
63191             _krCache.rtree.remove(item, function isEql(a, b) {
63192                 return a.data.id === b.data.id;
63193             });
63194
63195             if (replace) {
63196                 _krCache.rtree.insert(item);
63197             }
63198         }
63199
63200
63201         function tokenReplacements(d) {
63202             if (!(d instanceof qaError)) { return; }
63203
63204             var htmlRegex = new RegExp(/<\/[a-z][\s\S]*>/);
63205             var replacements = {};
63206
63207             var errorTemplate = errorTypes[d.which_type];
63208             if (!errorTemplate) {
63209                 /* eslint-disable no-console */
63210                 console.log('No Template: ', d.which_type);
63211                 console.log('  ', d.description);
63212                 /* eslint-enable no-console */
63213                 return;
63214             }
63215
63216             // some descriptions are just fixed text
63217             if (!errorTemplate.regex) { return; }
63218
63219             // regex pattern should match description with variable details captured
63220             var errorRegex = new RegExp(errorTemplate.regex, 'i');
63221             var errorMatch = errorRegex.exec(d.description);
63222             if (!errorMatch) {
63223                 /* eslint-disable no-console */
63224                 console.log('Unmatched: ', d.which_type);
63225                 console.log('  ', d.description);
63226                 console.log('  ', errorRegex);
63227                 /* eslint-enable no-console */
63228                 return;
63229             }
63230
63231             for (var i = 1; i < errorMatch.length; i++) {   // skip first
63232                 var capture = errorMatch[i];
63233                 var idType;
63234
63235                 idType = 'IDs' in errorTemplate ? errorTemplate.IDs[i-1] : '';
63236                 if (idType && capture) {   // link IDs if present in the capture
63237                     capture = parseError(capture, idType);
63238                 } else if (htmlRegex.test(capture)) {   // escape any html in non-IDs
63239                     capture = '\\' +  capture + '\\';
63240                 } else {
63241                     var compare = capture.toLowerCase();
63242                     if (localizeStrings[compare]) {   // some replacement strings can be localized
63243                         capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
63244                     }
63245                 }
63246
63247                 replacements['var' + i] = capture;
63248             }
63249
63250             return replacements;
63251         }
63252
63253
63254         function parseError(capture, idType) {
63255             var compare = capture.toLowerCase();
63256             if (localizeStrings[compare]) {   // some replacement strings can be localized
63257                 capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
63258             }
63259
63260             switch (idType) {
63261                 // link a string like "this node"
63262                 case 'this':
63263                     capture = linkErrorObject(capture);
63264                     break;
63265
63266                 case 'url':
63267                     capture = linkURL(capture);
63268                     break;
63269
63270                 // link an entity ID
63271                 case 'n':
63272                 case 'w':
63273                 case 'r':
63274                     capture = linkEntity(idType + capture);
63275                     break;
63276
63277                 // some errors have more complex ID lists/variance
63278                 case '20':
63279                     capture = parse20(capture);
63280                     break;
63281                 case '211':
63282                     capture = parse211(capture);
63283                     break;
63284                 case '231':
63285                     capture = parse231(capture);
63286                     break;
63287                 case '294':
63288                     capture = parse294(capture);
63289                     break;
63290                 case '370':
63291                     capture = parse370(capture);
63292                     break;
63293             }
63294
63295             return capture;
63296
63297
63298             function linkErrorObject(d) {
63299                 return '<a class="error_object_link">' + d + '</a>';
63300             }
63301
63302             function linkEntity(d) {
63303                 return '<a class="error_entity_link">' + d + '</a>';
63304             }
63305
63306             function linkURL(d) {
63307                 return '<a class="kr_external_link" target="_blank" href="' + d + '">' + d + '</a>';
63308             }
63309
63310             // arbitrary node list of form: #ID, #ID, #ID...
63311             function parse211(capture) {
63312                 var newList = [];
63313                 var items = capture.split(', ');
63314
63315                 items.forEach(function(item) {
63316                     // ID has # at the front
63317                     var id = linkEntity('n' + item.slice(1));
63318                     newList.push(id);
63319                 });
63320
63321                 return newList.join(', ');
63322             }
63323
63324             // arbitrary way list of form: #ID(layer),#ID(layer),#ID(layer)...
63325             function parse231(capture) {
63326                 var newList = [];
63327                 // unfortunately 'layer' can itself contain commas, so we split on '),'
63328                 var items = capture.split('),');
63329
63330                 items.forEach(function(item) {
63331                     var match = item.match(/\#(\d+)\((.+)\)?/);
63332                     if (match !== null && match.length > 2) {
63333                         newList.push(linkEntity('w' + match[1]) + ' ' +
63334                             t('QA.keepRight.errorTypes.231.layer', { layer: match[2] })
63335                         );
63336                     }
63337                 });
63338
63339                 return newList.join(', ');
63340             }
63341
63342             // arbitrary node/relation list of form: from node #ID,to relation #ID,to node #ID...
63343             function parse294(capture) {
63344                 var newList = [];
63345                 var items = capture.split(',');
63346
63347                 items.forEach(function(item) {
63348                     var role;
63349                     var idType;
63350                     var id;
63351
63352                     // item of form "from/to node/relation #ID"
63353                     item = item.split(' ');
63354
63355                     // to/from role is more clear in quotes
63356                     role = '"' + item[0] + '"';
63357
63358                     // first letter of node/relation provides the type
63359                     idType = item[1].slice(0,1);
63360
63361                     // ID has # at the front
63362                     id = item[2].slice(1);
63363                     id = linkEntity(idType + id);
63364
63365                     item = [role, item[1], id].join(' ');
63366                     newList.push(item);
63367                 });
63368
63369                 return newList.join(', ');
63370             }
63371
63372             // may or may not include the string "(including the name 'name')"
63373             function parse370(capture) {
63374                 if (!capture) { return ''; }
63375
63376                 var match = capture.match(/\(including the name (\'.+\')\)/);
63377                 if (match !== null && match.length) {
63378                     return t('QA.keepRight.errorTypes.370.including_the_name', { name: match[1] });
63379                 }
63380                 return '';
63381             }
63382
63383             // arbitrary node list of form: #ID,#ID,#ID...
63384             function parse20(capture) {
63385                 var newList = [];
63386                 var items = capture.split(',');
63387
63388                 items.forEach(function(item) {
63389                     // ID has # at the front
63390                     var id = linkEntity('n' + item.slice(1));
63391                     newList.push(id);
63392                 });
63393
63394                 return newList.join(', ');
63395             }
63396         }
63397
63398
63399         var serviceKeepRight = {
63400             init: function() {
63401                 if (!_krCache) {
63402                     this.reset();
63403                 }
63404
63405                 this.event = utilRebind(this, dispatch$1, 'on');
63406             },
63407
63408             reset: function() {
63409                 if (_krCache) {
63410                     Object.values(_krCache.inflightTile).forEach(abortRequest);
63411                 }
63412
63413                 _krCache = {
63414                     data: {},
63415                     loadedTile: {},
63416                     inflightTile: {},
63417                     inflightPost: {},
63418                     closed: {},
63419                     rtree: new RBush()
63420                 };
63421             },
63422
63423
63424             // KeepRight API:  http://osm.mueschelsoft.de/keepright/interfacing.php
63425             loadErrors: function(projection) {
63426                 var options = { format: 'geojson' };
63427                 var rules = _krRuleset.join();
63428
63429                 // determine the needed tiles to cover the view
63430                 var tiles = tiler
63431                     .zoomExtent([_krZoom, _krZoom])
63432                     .getTiles(projection);
63433
63434                 // abort inflight requests that are no longer needed
63435                 abortUnwantedRequests(_krCache, tiles);
63436
63437                 // issue new requests..
63438                 tiles.forEach(function(tile) {
63439                     if (_krCache.loadedTile[tile.id] || _krCache.inflightTile[tile.id]) { return; }
63440
63441                     var rect = tile.extent.rectangle();
63442                     var params = Object.assign({}, options, { left: rect[0], bottom: rect[3], right: rect[2], top: rect[1] });
63443                     var url = _krUrlRoot + 'export.php?' + utilQsString(params) + '&ch=' + rules;
63444
63445                     var controller = new AbortController();
63446                     _krCache.inflightTile[tile.id] = controller;
63447
63448                     d3_json(url, { signal: controller.signal })
63449                         .then(function(data) {
63450                             delete _krCache.inflightTile[tile.id];
63451                             _krCache.loadedTile[tile.id] = true;
63452                             if (!data || !data.features || !data.features.length) {
63453                                 throw new Error('No Data');
63454                             }
63455
63456                             data.features.forEach(function(feature) {
63457                                 var loc = feature.geometry.coordinates;
63458                                 var props = feature.properties;
63459
63460                                 // if there is a parent, save its error type e.g.:
63461                                 //  Error 191 = "highway-highway"
63462                                 //  Error 190 = "intersections without junctions"  (parent)
63463                                 var errorType = props.error_type;
63464                                 var errorTemplate = errorTypes[errorType];
63465                                 var parentErrorType = (Math.floor(errorType / 10) * 10).toString();
63466
63467                                 // try to handle error type directly, fallback to parent error type.
63468                                 var whichType = errorTemplate ? errorType : parentErrorType;
63469                                 var whichTemplate = errorTypes[whichType];
63470
63471                                 // Rewrite a few of the errors at this point..
63472                                 // This is done to make them easier to linkify and translate.
63473                                 switch (whichType) {
63474                                     case '170':
63475                                         props.description = 'This feature has a FIXME tag: ' + props.description;
63476                                         break;
63477                                     case '292':
63478                                     case '293':
63479                                         props.description = props.description.replace('A turn-', 'This turn-');
63480                                         break;
63481                                     case '294':
63482                                     case '295':
63483                                     case '296':
63484                                     case '297':
63485                                     case '298':
63486                                         props.description = 'This turn-restriction~' + props.description;
63487                                         break;
63488                                     case '300':
63489                                         props.description = 'This highway is missing a maxspeed tag';
63490                                         break;
63491                                     case '411':
63492                                     case '412':
63493                                     case '413':
63494                                         props.description = 'This feature~' + props.description;
63495                                         break;
63496                                 }
63497
63498                                 // - move markers slightly so it doesn't obscure the geometry,
63499                                 // - then move markers away from other coincident markers
63500                                 var coincident = false;
63501                                 do {
63502                                     // first time, move marker up. after that, move marker right.
63503                                     var delta = coincident ? [0.00001, 0] : [0, 0.00001];
63504                                     loc = geoVecAdd(loc, delta);
63505                                     var bbox = geoExtent(loc).bbox();
63506                                     coincident = _krCache.rtree.search(bbox).length;
63507                                 } while (coincident);
63508
63509                                 var d = new qaError({
63510                                     // Required values
63511                                     loc: loc,
63512                                     service: 'keepRight',
63513                                     error_type: errorType,
63514                                     // Extra values for this service
63515                                     id: props.error_id,
63516                                     comment: props.comment || null,
63517                                     description: props.description || '',
63518                                     error_id: props.error_id,
63519                                     which_type: whichType,
63520                                     parent_error_type: parentErrorType,
63521                                     severity: whichTemplate.severity || 'error',
63522                                     object_id: props.object_id,
63523                                     object_type: props.object_type,
63524                                     schema: props.schema,
63525                                     title: props.title
63526                                 });
63527
63528                                 d.replacements = tokenReplacements(d);
63529
63530                                 _krCache.data[d.id] = d;
63531                                 _krCache.rtree.insert(encodeErrorRtree(d));
63532                             });
63533
63534                             dispatch$1.call('loaded');
63535                         })
63536                         .catch(function() {
63537                             delete _krCache.inflightTile[tile.id];
63538                             _krCache.loadedTile[tile.id] = true;
63539                         });
63540
63541                 });
63542             },
63543
63544
63545             postKeepRightUpdate: function(d, callback) {
63546                 if (_krCache.inflightPost[d.id]) {
63547                     return callback({ message: 'Error update already inflight', status: -2 }, d);
63548                 }
63549
63550                 var that = this;
63551                 var params = { schema: d.schema, id: d.error_id };
63552
63553                 if (d.state) {
63554                     params.st = d.state;
63555                 }
63556                 if (d.newComment !== undefined) {
63557                     params.co = d.newComment;
63558                 }
63559
63560                 // NOTE: This throws a CORS err, but it seems successful.
63561                 // We don't care too much about the response, so this is fine.
63562                 var url = _krUrlRoot + 'comment.php?' + utilQsString(params);
63563
63564                 var controller = new AbortController();
63565                 _krCache.inflightPost[d.id] = controller;
63566
63567                 fetch(url, { method: 'POST', signal: controller.signal })
63568                     .then(function(response) {
63569                         delete _krCache.inflightPost[d.id];
63570                         if (!response.ok) {
63571                             throw new Error(response.status + ' ' + response.statusText);
63572                         }
63573
63574                         if (d.state === 'ignore') {   // ignore permanently (false positive)
63575                             that.removeError(d);
63576
63577                         } else if (d.state === 'ignore_t') {  // ignore temporarily (error fixed)
63578                             that.removeError(d);
63579                             _krCache.closed[d.schema + ':' + d.error_id] = true;
63580
63581                         } else {
63582                             d = that.replaceError(d.update({
63583                                 comment: d.newComment,
63584                                 newComment: undefined,
63585                                 state: undefined
63586                             }));
63587                         }
63588
63589                         if (callback) { callback(null, d); }
63590                     })
63591                     .catch(function(err) {
63592                         delete _krCache.inflightPost[d.id];
63593                         if (callback) { callback(err.message); }
63594                     });
63595             },
63596
63597
63598             // get all cached errors covering the viewport
63599             getErrors: function(projection) {
63600                 var viewport = projection.clipExtent();
63601                 var min = [viewport[0][0], viewport[1][1]];
63602                 var max = [viewport[1][0], viewport[0][1]];
63603                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
63604
63605                 return _krCache.rtree.search(bbox).map(function(d) {
63606                     return d.data;
63607                 });
63608             },
63609
63610
63611             // get a single error from the cache
63612             getError: function(id) {
63613                 return _krCache.data[id];
63614             },
63615
63616
63617             // replace a single error in the cache
63618             replaceError: function(error) {
63619                 if (!(error instanceof qaError) || !error.id) { return; }
63620
63621                 _krCache.data[error.id] = error;
63622                 updateRtree(encodeErrorRtree(error), true); // true = replace
63623                 return error;
63624             },
63625
63626
63627             // remove a single error from the cache
63628             removeError: function(error) {
63629                 if (!(error instanceof qaError) || !error.id) { return; }
63630
63631                 delete _krCache.data[error.id];
63632                 updateRtree(encodeErrorRtree(error), false); // false = remove
63633             },
63634
63635
63636             errorURL: function(error) {
63637                 return _krUrlRoot + 'report_map.php?schema=' + error.schema + '&error=' + error.id;
63638             },
63639
63640
63641             // Get an array of errors closed during this session.
63642             // Used to populate `closed:keepright` changeset tag
63643             getClosedIDs: function() {
63644                 return Object.keys(_krCache.closed).sort();
63645             }
63646
63647         };
63648
63649         var tiler$1 = utilTiler();
63650         var dispatch$2 = dispatch('loaded');
63651
63652         var _erCache;
63653         var _erZoom = 14;
63654
63655         var _impOsmUrls = {
63656             ow: 'https://grab.community.improve-osm.org/directionOfFlowService',
63657             mr: 'https://grab.community.improve-osm.org/missingGeoService',
63658             tr: 'https://grab.community.improve-osm.org/turnRestrictionService'
63659         };
63660
63661         function abortRequest$1(i) {
63662             Object.values(i).forEach(function(controller) {
63663                 if (controller) {
63664                     controller.abort();
63665                 }
63666             });
63667         }
63668
63669         function abortUnwantedRequests$1(cache, tiles) {
63670             Object.keys(cache.inflightTile).forEach(function(k) {
63671                 var wanted = tiles.find(function(tile) { return k === tile.id; });
63672                 if (!wanted) {
63673                     abortRequest$1(cache.inflightTile[k]);
63674                     delete cache.inflightTile[k];
63675                 }
63676             });
63677         }
63678
63679
63680         function encodeErrorRtree$1(d) {
63681             return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
63682         }
63683
63684
63685         // replace or remove error from rtree
63686         function updateRtree$1(item, replace) {
63687             _erCache.rtree.remove(item, function isEql(a, b) {
63688                 return a.data.id === b.data.id;
63689             });
63690
63691             if (replace) {
63692                 _erCache.rtree.insert(item);
63693             }
63694         }
63695
63696         function linkErrorObject(d) {
63697             return '<a class="error_object_link">' + d + '</a>';
63698         }
63699
63700         function linkEntity(d) {
63701             return '<a class="error_entity_link">' + d + '</a>';
63702         }
63703
63704         function pointAverage(points) {
63705             if (points.length) {
63706                 var sum = points.reduce(function(acc, point) {
63707                     return geoVecAdd(acc, [point.lon, point.lat]);
63708                 }, [0,0]);
63709                 return geoVecScale(sum, 1 / points.length);
63710             } else {
63711                 return [0,0];
63712             }
63713         }
63714
63715         function relativeBearing(p1, p2) {
63716             var angle = Math.atan2(p2.lon - p1.lon, p2.lat - p1.lat);
63717             if (angle < 0) {
63718                 angle += 2 * Math.PI;
63719             }
63720
63721             // Return degrees
63722             return angle * 180 / Math.PI;
63723         }
63724
63725         // Assuming range [0,360)
63726         function cardinalDirection(bearing) {
63727             var dir = 45 * Math.round(bearing / 45);
63728             var compass = {
63729                 0: 'north',
63730                 45: 'northeast',
63731                 90: 'east',
63732                 135: 'southeast',
63733                 180: 'south',
63734                 225: 'southwest',
63735                 270: 'west',
63736                 315: 'northwest',
63737                 360: 'north'
63738             };
63739
63740             return t('QA.improveOSM.directions.' + compass[dir]);
63741         }
63742
63743         // Errors shouldn't obscure eachother
63744         function preventCoincident(loc, bumpUp) {
63745             var coincident = false;
63746             do {
63747                 // first time, move marker up. after that, move marker right.
63748                 var delta = coincident ? [0.00001, 0] : (bumpUp ? [0, 0.00001] : [0, 0]);
63749                 loc = geoVecAdd(loc, delta);
63750                 var bbox = geoExtent(loc).bbox();
63751                 coincident = _erCache.rtree.search(bbox).length;
63752             } while (coincident);
63753
63754             return loc;
63755         }
63756
63757         var serviceImproveOSM = {
63758             init: function() {
63759                 if (!_erCache) {
63760                     this.reset();
63761                 }
63762
63763                 this.event = utilRebind(this, dispatch$2, 'on');
63764             },
63765
63766             reset: function() {
63767                 if (_erCache) {
63768                     Object.values(_erCache.inflightTile).forEach(abortRequest$1);
63769                 }
63770                 _erCache = {
63771                     data: {},
63772                     loadedTile: {},
63773                     inflightTile: {},
63774                     inflightPost: {},
63775                     closed: {},
63776                     rtree: new RBush()
63777                 };
63778             },
63779
63780             loadErrors: function(projection) {
63781                 var options = {
63782                     client: 'iD',
63783                     status: 'OPEN',
63784                     zoom: '19' // Use a high zoom so that clusters aren't returned
63785                 };
63786
63787                 // determine the needed tiles to cover the view
63788                 var tiles = tiler$1
63789                     .zoomExtent([_erZoom, _erZoom])
63790                     .getTiles(projection);
63791
63792                 // abort inflight requests that are no longer needed
63793                 abortUnwantedRequests$1(_erCache, tiles);
63794
63795                 // issue new requests..
63796                 tiles.forEach(function(tile) {
63797                     if (_erCache.loadedTile[tile.id] || _erCache.inflightTile[tile.id]) { return; }
63798
63799                     var rect = tile.extent.rectangle();
63800                     var params = Object.assign({}, options, { east: rect[0], south: rect[3], west: rect[2], north: rect[1] });
63801
63802                     // 3 separate requests to store for each tile
63803                     var requests = {};
63804
63805                     Object.keys(_impOsmUrls).forEach(function(k) {
63806                         var v = _impOsmUrls[k];
63807                         // We exclude WATER from missing geometry as it doesn't seem useful
63808                         // We use most confident one-way and turn restrictions only, still have false positives
63809                         var kParams = Object.assign({},
63810                             params,
63811                             (k === 'mr') ? { type: 'PARKING,ROAD,BOTH,PATH' } : { confidenceLevel: 'C1' }
63812                         );
63813                         var url = v + '/search?' + utilQsString(kParams);
63814
63815                         var controller = new AbortController();
63816                         requests[k] = controller;
63817
63818                         d3_json(url, { signal: controller.signal })
63819                             .then(function(data) {
63820                                 delete _erCache.inflightTile[tile.id][k];
63821                                 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
63822                                     delete _erCache.inflightTile[tile.id];
63823                                     _erCache.loadedTile[tile.id] = true;
63824                                 }
63825
63826                                 // Road segments at high zoom == oneways
63827                                 if (data.roadSegments) {
63828                                     data.roadSegments.forEach(function(feature) {
63829                                         // Position error at the approximate middle of the segment
63830                                         var points = feature.points;
63831                                         var mid = points.length / 2;
63832                                         var loc;
63833
63834                                         // Even number of points, find midpoint of the middle two
63835                                         // Odd number of points, use position of very middle point
63836                                         if (mid % 1 === 0) {
63837                                             loc = pointAverage([points[mid - 1], points[mid]]);
63838                                         } else {
63839                                             mid = points[Math.floor(mid)];
63840                                             loc = [mid.lon, mid.lat];
63841                                         }
63842
63843                                         // One-ways can land on same segment in opposite direction
63844                                         loc = preventCoincident(loc, false);
63845
63846                                         var d = new qaError({
63847                                             // Info required for every error
63848                                             loc: loc,
63849                                             service: 'improveOSM',
63850                                             error_type: k,
63851                                             // Extra details needed for this service
63852                                             error_key: k,
63853                                             identifier: { // this is used to post changes to the error
63854                                                 wayId: feature.wayId,
63855                                                 fromNodeId: feature.fromNodeId,
63856                                                 toNodeId: feature.toNodeId
63857                                             },
63858                                             object_id: feature.wayId,
63859                                             object_type: 'way',
63860                                             status: feature.status
63861                                         });
63862
63863                                         // Variables used in the description
63864                                         d.replacements = {
63865                                             percentage: feature.percentOfTrips,
63866                                             num_trips: feature.numberOfTrips,
63867                                             highway: linkErrorObject(t('QA.keepRight.error_parts.highway')),
63868                                             from_node: linkEntity('n' + feature.fromNodeId),
63869                                             to_node: linkEntity('n' + feature.toNodeId)
63870                                         };
63871
63872                                         _erCache.data[d.id] = d;
63873                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
63874                                     });
63875                                 }
63876
63877                                 // Tiles at high zoom == missing roads
63878                                 if (data.tiles) {
63879                                     data.tiles.forEach(function(feature) {
63880                                         var geoType = feature.type.toLowerCase();
63881
63882                                         // Average of recorded points should land on the missing geometry
63883                                         // Missing geometry could happen to land on another error
63884                                         var loc = pointAverage(feature.points);
63885                                         loc = preventCoincident(loc, false);
63886
63887                                         var d = new qaError({
63888                                             // Info required for every error
63889                                             loc: loc,
63890                                             service: 'improveOSM',
63891                                             error_type: k + '-' + geoType,
63892                                             // Extra details needed for this service
63893                                             error_key: k,
63894                                             identifier: { x: feature.x, y: feature.y },
63895                                             status: feature.status
63896                                         });
63897
63898                                         d.replacements = {
63899                                             num_trips: feature.numberOfTrips,
63900                                             geometry_type: t('QA.improveOSM.geometry_types.' + geoType)
63901                                         };
63902
63903                                         // -1 trips indicates data came from a 3rd party
63904                                         if (feature.numberOfTrips === -1) {
63905                                             d.desc = t('QA.improveOSM.error_types.mr.description_alt', d.replacements);
63906                                         }
63907
63908                                         _erCache.data[d.id] = d;
63909                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
63910                                     });
63911                                 }
63912
63913                                 // Entities at high zoom == turn restrictions
63914                                 if (data.entities) {
63915                                     data.entities.forEach(function(feature) {
63916                                         // Turn restrictions could be missing at same junction
63917                                         // We also want to bump the error up so node is accessible
63918                                         var loc = feature.point;
63919                                         loc = preventCoincident([loc.lon, loc.lat], true);
63920
63921                                         // Elements are presented in a strange way
63922                                         var ids = feature.id.split(',');
63923                                         var from_way = ids[0];
63924                                         var via_node = ids[3];
63925                                         var to_way = ids[2].split(':')[1];
63926
63927                                         var d = new qaError({
63928                                             // Info required for every error
63929                                             loc: loc,
63930                                             service: 'improveOSM',
63931                                             error_type: k,
63932                                             // Extra details needed for this service
63933                                             error_key: k,
63934                                             identifier: feature.id,
63935                                             object_id: via_node,
63936                                             object_type: 'node',
63937                                             status: feature.status
63938                                         });
63939
63940                                         // Travel direction along from_way clarifies the turn restriction
63941                                         var p1 = feature.segments[0].points[0];
63942                                         var p2 = feature.segments[0].points[1];
63943
63944                                         var dir_of_travel = cardinalDirection(relativeBearing(p1, p2));
63945
63946                                         // Variables used in the description
63947                                         d.replacements = {
63948                                             num_passed: feature.numberOfPasses,
63949                                             num_trips: feature.segments[0].numberOfTrips,
63950                                             turn_restriction: feature.turnType.toLowerCase(),
63951                                             from_way: linkEntity('w' + from_way),
63952                                             to_way: linkEntity('w' + to_way),
63953                                             travel_direction: dir_of_travel,
63954                                             junction: linkErrorObject(t('QA.keepRight.error_parts.this_node'))
63955                                         };
63956
63957                                         _erCache.data[d.id] = d;
63958                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
63959                                         dispatch$2.call('loaded');
63960                                     });
63961                                 }
63962                             })
63963                             .catch(function() {
63964                                 delete _erCache.inflightTile[tile.id][k];
63965                                 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
63966                                     delete _erCache.inflightTile[tile.id];
63967                                     _erCache.loadedTile[tile.id] = true;
63968                                 }
63969                             });
63970                     });
63971
63972                     _erCache.inflightTile[tile.id] = requests;
63973                 });
63974             },
63975
63976             getComments: function(d, callback) {
63977                 // If comments already retrieved no need to do so again
63978                 if (d.comments !== undefined) {
63979                     if (callback) { callback({}, d); }
63980                     return;
63981                 }
63982
63983                 var key = d.error_key;
63984                 var qParams = {};
63985
63986                 if (key === 'ow') {
63987                     qParams = d.identifier;
63988                 } else if (key === 'mr') {
63989                     qParams.tileX = d.identifier.x;
63990                     qParams.tileY = d.identifier.y;
63991                 } else if (key === 'tr') {
63992                     qParams.targetId = d.identifier;
63993                 }
63994
63995                 var url = _impOsmUrls[key] + '/retrieveComments?' + utilQsString(qParams);
63996
63997                 var that = this;
63998                 d3_json(url)
63999                     .then(function(data) {
64000                         // Assign directly for immediate use in the callback
64001                         // comments are served newest to oldest
64002                         d.comments = data.comments ? data.comments.reverse() : [];
64003                         that.replaceError(d);
64004                         if (callback) { callback(null, d); }
64005                     })
64006                     .catch(function(err) {
64007                         if (callback) { callback(err.message); }
64008                     });
64009             },
64010
64011             postUpdate: function(d, callback) {
64012                 if (!serviceOsm.authenticated()) { // Username required in payload
64013                     return callback({ message: 'Not Authenticated', status: -3}, d);
64014                 }
64015                 if (_erCache.inflightPost[d.id]) {
64016                     return callback({ message: 'Error update already inflight', status: -2 }, d);
64017                 }
64018
64019                 var that = this;
64020
64021                 // Payload can only be sent once username is established
64022                 serviceOsm.userDetails(sendPayload);
64023
64024                 function sendPayload(err, user) {
64025                     if (err) { return callback(err, d); }
64026
64027                     var key = d.error_key;
64028                     var url = _impOsmUrls[key] + '/comment';
64029                     var payload = {
64030                         username: user.display_name,
64031                         targetIds: [ d.identifier ]
64032                     };
64033
64034                     if (d.newStatus !== undefined) {
64035                         payload.status = d.newStatus;
64036                         payload.text = 'status changed';
64037                     }
64038
64039                     // Comment take place of default text
64040                     if (d.newComment !== undefined) {
64041                         payload.text = d.newComment;
64042                     }
64043
64044                     var controller = new AbortController();
64045                     _erCache.inflightPost[d.id] = controller;
64046
64047                     var options = {
64048                         method: 'POST',
64049                         signal: controller.signal,
64050                         body: JSON.stringify(payload)
64051                     };
64052
64053                      d3_json(url, options)
64054                         .then(function() {
64055                             delete _erCache.inflightPost[d.id];
64056
64057                             // Just a comment, update error in cache
64058                             if (d.newStatus === undefined) {
64059                                 var now = new Date();
64060                                 var comments = d.comments ? d.comments : [];
64061
64062                                 comments.push({
64063                                     username: payload.username,
64064                                     text: payload.text,
64065                                     timestamp: now.getTime() / 1000
64066                                 });
64067
64068                                 that.replaceError(d.update({
64069                                     comments: comments,
64070                                     newComment: undefined
64071                                 }));
64072                             } else {
64073                                 that.removeError(d);
64074                                 if (d.newStatus === 'SOLVED') {
64075                                     // No pretty identifier, so we just use coordinates
64076                                     var closedID = d.loc[1].toFixed(5) + '/' + d.loc[0].toFixed(5);
64077                                     _erCache.closed[key + ':' + closedID] = true;
64078                                 }
64079                             }
64080                             if (callback) { callback(null, d); }
64081                         })
64082                         .catch(function(err) {
64083                             delete _erCache.inflightPost[d.id];
64084                             if (callback) { callback(err.message); }
64085                         });
64086                 }
64087             },
64088
64089
64090             // get all cached errors covering the viewport
64091             getErrors: function(projection) {
64092                 var viewport = projection.clipExtent();
64093                 var min = [viewport[0][0], viewport[1][1]];
64094                 var max = [viewport[1][0], viewport[0][1]];
64095                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
64096
64097                 return _erCache.rtree.search(bbox).map(function(d) {
64098                     return d.data;
64099                 });
64100             },
64101
64102             // get a single error from the cache
64103             getError: function(id) {
64104                 return _erCache.data[id];
64105             },
64106
64107             // replace a single error in the cache
64108             replaceError: function(error) {
64109                 if (!(error instanceof qaError) || !error.id) { return; }
64110
64111                 _erCache.data[error.id] = error;
64112                 updateRtree$1(encodeErrorRtree$1(error), true); // true = replace
64113                 return error;
64114             },
64115
64116             // remove a single error from the cache
64117             removeError: function(error) {
64118                 if (!(error instanceof qaError) || !error.id) { return; }
64119
64120                 delete _erCache.data[error.id];
64121                 updateRtree$1(encodeErrorRtree$1(error), false); // false = remove
64122             },
64123
64124             // Used to populate `closed:improveosm` changeset tag
64125             getClosedIDs: function() {
64126                 return Object.keys(_erCache.closed).sort();
64127             }
64128         };
64129
64130         /*
64131             A standalone SVG element that contains only a `defs` sub-element. To be
64132             used once globally, since defs IDs must be unique within a document.
64133         */
64134         function svgDefs(context) {
64135
64136             function drawDefs(selection) {
64137                 var defs = selection.append('defs');
64138
64139                 // add markers
64140                 defs
64141                     .append('marker')
64142                     .attr('id', 'oneway-marker')
64143                     .attr('viewBox', '0 0 10 5')
64144                     .attr('refX', 2.5)
64145                     .attr('refY', 2.5)
64146                     .attr('markerWidth', 2)
64147                     .attr('markerHeight', 2)
64148                     .attr('markerUnits', 'strokeWidth')
64149                     .attr('orient', 'auto')
64150                     .append('path')
64151                     .attr('class', 'oneway-marker-path')
64152                     .attr('d', 'M 5,3 L 0,3 L 0,2 L 5,2 L 5,0 L 10,2.5 L 5,5 z')
64153                     .attr('stroke', 'none')
64154                     .attr('fill', '#000')
64155                     .attr('opacity', '0.75');
64156
64157                 // SVG markers have to be given a colour where they're defined
64158                 // (they can't inherit it from the line they're attached to),
64159                 // so we need to manually define markers for each color of tag
64160                 // (also, it's slightly nicer if we can control the
64161                 // positioning for different tags)
64162                 function addSidedMarker(name, color, offset) {
64163                     defs
64164                         .append('marker')
64165                         .attr('id', 'sided-marker-' + name)
64166                         .attr('viewBox', '0 0 2 2')
64167                         .attr('refX', 1)
64168                         .attr('refY', -offset)
64169                         .attr('markerWidth', 1.5)
64170                         .attr('markerHeight', 1.5)
64171                         .attr('markerUnits', 'strokeWidth')
64172                         .attr('orient', 'auto')
64173                         .append('path')
64174                         .attr('class', 'sided-marker-path sided-marker-' + name + '-path')
64175                         .attr('d', 'M 0,0 L 1,1 L 2,0 z')
64176                         .attr('stroke', 'none')
64177                         .attr('fill', color);
64178                 }
64179                 addSidedMarker('natural', 'rgb(170, 170, 170)', 0);
64180                 // for a coastline, the arrows are (somewhat unintuitively) on
64181                 // the water side, so let's color them blue (with a gap) to
64182                 // give a stronger indication
64183                 addSidedMarker('coastline', '#77dede', 1);
64184                 addSidedMarker('waterway', '#77dede', 1);
64185                 // barriers have a dashed line, and separating the triangle
64186                 // from the line visually suits that
64187                 addSidedMarker('barrier', '#ddd', 1);
64188                 addSidedMarker('man_made', '#fff', 0);
64189
64190                 defs
64191                     .append('marker')
64192                     .attr('id', 'viewfield-marker')
64193                     .attr('viewBox', '0 0 16 16')
64194                     .attr('refX', 8)
64195                     .attr('refY', 16)
64196                     .attr('markerWidth', 4)
64197                     .attr('markerHeight', 4)
64198                     .attr('markerUnits', 'strokeWidth')
64199                     .attr('orient', 'auto')
64200                     .append('path')
64201                     .attr('class', 'viewfield-marker-path')
64202                     .attr('d', 'M 6,14 C 8,13.4 8,13.4 10,14 L 16,3 C 12,0 4,0 0,3 z')
64203                     .attr('fill', '#333')
64204                     .attr('fill-opacity', '0.75')
64205                     .attr('stroke', '#fff')
64206                     .attr('stroke-width', '0.5px')
64207                     .attr('stroke-opacity', '0.75');
64208
64209                 defs
64210                     .append('marker')
64211                     .attr('id', 'viewfield-marker-wireframe')
64212                     .attr('viewBox', '0 0 16 16')
64213                     .attr('refX', 8)
64214                     .attr('refY', 16)
64215                     .attr('markerWidth', 4)
64216                     .attr('markerHeight', 4)
64217                     .attr('markerUnits', 'strokeWidth')
64218                     .attr('orient', 'auto')
64219                     .append('path')
64220                     .attr('class', 'viewfield-marker-path')
64221                     .attr('d', 'M 6,14 C 8,13.4 8,13.4 10,14 L 16,3 C 12,0 4,0 0,3 z')
64222                     .attr('fill', 'none')
64223                     .attr('stroke', '#fff')
64224                     .attr('stroke-width', '0.5px')
64225                     .attr('stroke-opacity', '0.75');
64226
64227                 // add patterns
64228                 var patterns = defs.selectAll('pattern')
64229                     .data([
64230                         // pattern name, pattern image name
64231                         ['beach', 'dots'],
64232                         ['construction', 'construction'],
64233                         ['cemetery', 'cemetery'],
64234                         ['cemetery_christian', 'cemetery_christian'],
64235                         ['cemetery_buddhist', 'cemetery_buddhist'],
64236                         ['cemetery_muslim', 'cemetery_muslim'],
64237                         ['cemetery_jewish', 'cemetery_jewish'],
64238                         ['farmland', 'farmland'],
64239                         ['farmyard', 'farmyard'],
64240                         ['forest', 'forest'],
64241                         ['forest_broadleaved', 'forest_broadleaved'],
64242                         ['forest_needleleaved', 'forest_needleleaved'],
64243                         ['forest_leafless', 'forest_leafless'],
64244                         ['golf_green', 'grass'],
64245                         ['grass', 'grass'],
64246                         ['landfill', 'landfill'],
64247                         ['meadow', 'grass'],
64248                         ['orchard', 'orchard'],
64249                         ['pond', 'pond'],
64250                         ['quarry', 'quarry'],
64251                         ['scrub', 'bushes'],
64252                         ['vineyard', 'vineyard'],
64253                         ['water_standing', 'lines'],
64254                         ['waves', 'waves'],
64255                         ['wetland', 'wetland'],
64256                         ['wetland_marsh', 'wetland_marsh'],
64257                         ['wetland_swamp', 'wetland_swamp'],
64258                         ['wetland_bog', 'wetland_bog'],
64259                         ['wetland_reedbed', 'wetland_reedbed']
64260                     ])
64261                     .enter()
64262                     .append('pattern')
64263                     .attr('id', function (d) { return 'pattern-' + d[0]; })
64264                     .attr('width', 32)
64265                     .attr('height', 32)
64266                     .attr('patternUnits', 'userSpaceOnUse');
64267
64268                 patterns
64269                     .append('rect')
64270                     .attr('x', 0)
64271                     .attr('y', 0)
64272                     .attr('width', 32)
64273                     .attr('height', 32)
64274                     .attr('class', function (d) { return 'pattern-color-' + d[0]; });
64275
64276                 patterns
64277                     .append('image')
64278                     .attr('x', 0)
64279                     .attr('y', 0)
64280                     .attr('width', 32)
64281                     .attr('height', 32)
64282                     .attr('xlink:href', function (d) {
64283                         return context.imagePath('pattern/' + d[1] + '.png');
64284                     });
64285
64286                 // add clip paths
64287                 defs.selectAll('clipPath')
64288                     .data([12, 18, 20, 32, 45])
64289                     .enter()
64290                     .append('clipPath')
64291                     .attr('id', function (d) { return 'clip-square-' + d; })
64292                     .append('rect')
64293                     .attr('x', 0)
64294                     .attr('y', 0)
64295                     .attr('width', function (d) { return d; })
64296                     .attr('height', function (d) { return d; });
64297
64298                 // add symbol spritesheets
64299                 defs
64300                     .call(drawDefs.addSprites, [
64301                         'iD-sprite', 'maki-sprite', 'temaki-sprite', 'fa-sprite', 'tnp-sprite', 'community-sprite'
64302                     ], true);
64303             }
64304
64305
64306             drawDefs.addSprites = function(selection, ids, overrideColors) {
64307                 var spritesheets = selection.selectAll('.spritesheet');
64308                 var currData = spritesheets.data();
64309                 var data = utilArrayUniq(currData.concat(ids));
64310
64311                 spritesheets
64312                     .data(data)
64313                     .enter()
64314                     .append('g')
64315                     .attr('class', function(d) { return 'spritesheet spritesheet-' + d; })
64316                     .each(function(d) {
64317                         var url = context.imagePath(d + '.svg');
64318                         var node = d3_select(this).node();
64319
64320                         svg(url)
64321                             .then(function(svg) {
64322                                 node.appendChild(
64323                                     d3_select(svg.documentElement).attr('id', d).node()
64324                                 );
64325                                 if (overrideColors && d !== 'iD-sprite') {   // allow icon colors to be overridden..
64326                                     d3_select(node).selectAll('path')
64327                                         .attr('fill', 'currentColor');
64328                                 }
64329                             })
64330                             .catch(function() {
64331                                 /* ignore */
64332                             });
64333                     });
64334             };
64335
64336
64337             return drawDefs;
64338         }
64339
64340         /* global Mapillary:false */
64341
64342
64343         var apibase = 'https://a.mapillary.com/v3/';
64344         var viewercss = 'mapillary-js/mapillary.min.css';
64345         var viewerjs = 'mapillary-js/mapillary.min.js';
64346         var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
64347         var mapFeatureConfig = {
64348             organizationKey: 'FI3NAFfzQQgdF081TRdgTy',
64349             values: [
64350                 'construction--flat--crosswalk-plain',
64351                 'marking--discrete--crosswalk-zebra',
64352                 'object--banner',
64353                 'object--bench',
64354                 'object--bike-rack',
64355                 'object--billboard',
64356                 'object--catch-basin',
64357                 'object--cctv-camera',
64358                 'object--fire-hydrant',
64359                 'object--mailbox',
64360                 'object--manhole',
64361                 'object--phone-booth',
64362                 'object--sign--advertisement',
64363                 'object--sign--information',
64364                 'object--sign--store',
64365                 'object--street-light',
64366                 'object--support--utility-pole',
64367                 'object--traffic-light--*',
64368                 'object--traffic-light--pedestrians',
64369                 'object--trash-can'
64370             ].join(',')
64371         };
64372         var maxResults = 1000;
64373         var tileZoom = 14;
64374         var tiler$2 = utilTiler().zoomExtent([tileZoom, tileZoom]).skipNullIsland(true);
64375         var dispatch$3 = dispatch('loadedImages', 'loadedSigns', 'loadedMapFeatures', 'bearingChanged');
64376         var _mlyFallback = false;
64377         var _mlyCache;
64378         var _mlyClicks;
64379         var _mlySelectedImageKey;
64380         var _mlyViewer;
64381
64382
64383         function abortRequest$2(controller) {
64384             controller.abort();
64385         }
64386
64387
64388         function maxPageAtZoom(z) {
64389             if (z < 15)   { return 2; }
64390             if (z === 15) { return 5; }
64391             if (z === 16) { return 10; }
64392             if (z === 17) { return 20; }
64393             if (z === 18) { return 40; }
64394             if (z > 18)   { return 80; }
64395         }
64396
64397
64398         function loadTiles(which, url, projection) {
64399             var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
64400             var tiles = tiler$2.getTiles(projection);
64401
64402             // abort inflight requests that are no longer needed
64403             var cache = _mlyCache[which];
64404             Object.keys(cache.inflight).forEach(function(k) {
64405                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
64406                 if (!wanted) {
64407                     abortRequest$2(cache.inflight[k]);
64408                     delete cache.inflight[k];
64409                 }
64410             });
64411
64412             tiles.forEach(function(tile) {
64413                 loadNextTilePage(which, currZoom, url, tile);
64414             });
64415         }
64416
64417
64418         function loadNextTilePage(which, currZoom, url, tile) {
64419             var cache = _mlyCache[which];
64420             var rect = tile.extent.rectangle();
64421             var maxPages = maxPageAtZoom(currZoom);
64422             var nextPage = cache.nextPage[tile.id] || 0;
64423             var nextURL = cache.nextURL[tile.id] || url +
64424                 utilQsString({
64425                     per_page: maxResults,
64426                     page: nextPage,
64427                     client_id: clientId,
64428                     bbox: [rect[0], rect[1], rect[2], rect[3]].join(','),
64429                 });
64430
64431             if (nextPage > maxPages) { return; }
64432
64433             var id = tile.id + ',' + String(nextPage);
64434             if (cache.loaded[id] || cache.inflight[id]) { return; }
64435
64436             var controller = new AbortController();
64437             cache.inflight[id] = controller;
64438
64439             var options = {
64440                 method: 'GET',
64441                 signal: controller.signal,
64442                 headers: { 'Content-Type': 'application/json' }
64443             };
64444
64445             fetch(nextURL, options)
64446                 .then(function(response) {
64447                     if (!response.ok) {
64448                         throw new Error(response.status + ' ' + response.statusText);
64449                     }
64450                     var linkHeader = response.headers.get('Link');
64451                     if (linkHeader) {
64452                         var pagination = parsePagination(linkHeader);
64453                         if (pagination.next) {
64454                             cache.nextURL[tile.id] = pagination.next;
64455                         }
64456                     }
64457                     return response.json();
64458                 })
64459                 .then(function(data) {
64460                     cache.loaded[id] = true;
64461                     delete cache.inflight[id];
64462                     if (!data || !data.features || !data.features.length) {
64463                         throw new Error('No Data');
64464                     }
64465
64466                     var features = data.features.map(function(feature) {
64467                         var loc = feature.geometry.coordinates;
64468                         var d;
64469
64470                         // An image (shown as a green dot on the map) is a single street photo with extra
64471                         // information such as location, camera angle (CA), camera model, and so on.
64472                         // Each image feature is a GeoJSON Point
64473                         if (which === 'images') {
64474                             d = {
64475                                 loc: loc,
64476                                 key: feature.properties.key,
64477                                 ca: feature.properties.ca,
64478                                 captured_at: feature.properties.captured_at,
64479                                 captured_by: feature.properties.username,
64480                                 pano: feature.properties.pano
64481                             };
64482
64483                             cache.forImageKey[d.key] = d;     // cache imageKey -> image
64484
64485                         // Mapillary organizes images as sequences. A sequence of images are continuously captured
64486                         // by a user at a give time. Sequences are shown on the map as green lines.
64487                         // Each sequence feature is a GeoJSON LineString
64488                         } else if (which === 'sequences') {
64489                             var sequenceKey = feature.properties.key;
64490                             cache.lineString[sequenceKey] = feature;           // cache sequenceKey -> lineString
64491                             feature.properties.coordinateProperties.image_keys.forEach(function(imageKey) {
64492                                 cache.forImageKey[imageKey] = sequenceKey;     // cache imageKey -> sequenceKey
64493                             });
64494                             return false;    // because no `d` data worth loading into an rbush
64495
64496                         // An image detection is a semantic pixel area on an image. The area could indicate
64497                         // sky, trees, sidewalk in the image. A detection can be a polygon, a bounding box, or a point.
64498                         // Each image_detection feature is a GeoJSON Point (located where the image was taken)
64499                         } else if (which === 'image_detections') {
64500                             d = {
64501                                 key: feature.properties.key,
64502                                 image_key: feature.properties.image_key,
64503                                 value: feature.properties.value,
64504                                 package: feature.properties.package,
64505                                 shape: feature.properties.shape
64506                             };
64507
64508                             // cache imageKey -> image_detections
64509                             if (!cache.forImageKey[d.image_key]) {
64510                                 cache.forImageKey[d.image_key] = [];
64511                             }
64512                             cache.forImageKey[d.image_key].push(d);
64513                             return false;    // because no `d` data worth loading into an rbush
64514
64515
64516                         // A map feature is a real world object that can be shown on a map. It could be any object
64517                         // recognized from images, manually added in images, or added on the map.
64518                         // Each map feature is a GeoJSON Point (located where the feature is)
64519                         } else if (which === 'map_features' || which === 'points') {
64520                             d = {
64521                                 loc: loc,
64522                                 key: feature.properties.key,
64523                                 value: feature.properties.value,
64524                                 package: feature.properties.package,
64525                                 detections: feature.properties.detections
64526                             };
64527                         }
64528
64529                         return {
64530                             minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
64531                         };
64532
64533                     }).filter(Boolean);
64534
64535                     if (cache.rtree && features) {
64536                         cache.rtree.load(features);
64537                     }
64538
64539                     if (data.features.length === maxResults) {  // more pages to load
64540                         cache.nextPage[tile.id] = nextPage + 1;
64541                         loadNextTilePage(which, currZoom, url, tile);
64542                     } else {
64543                         cache.nextPage[tile.id] = Infinity;     // no more pages to load
64544                     }
64545
64546                     if (which === 'images' || which === 'sequences') {
64547                         dispatch$3.call('loadedImages');
64548                     } else if (which === 'map_features') {
64549                         dispatch$3.call('loadedSigns');
64550                     } else if (which === 'points') {
64551                         dispatch$3.call('loadedMapFeatures');
64552                     }
64553                 })
64554                 .catch(function() {
64555                     cache.loaded[id] = true;
64556                     delete cache.inflight[id];
64557                 });
64558         }
64559
64560         // extract links to pages of API results
64561         function parsePagination(links) {
64562             return links.split(',').map(function(rel) {
64563                 var elements = rel.split(';');
64564                 if (elements.length === 2) {
64565                     return [
64566                         /<(.+)>/.exec(elements[0])[1],
64567                         /rel="(.+)"/.exec(elements[1])[1]
64568                     ];
64569                 } else {
64570                     return ['',''];
64571                 }
64572             }).reduce(function(pagination, val) {
64573                 pagination[val[1]] = val[0];
64574                 return pagination;
64575             }, {});
64576         }
64577
64578
64579         // partition viewport into higher zoom tiles
64580         function partitionViewport(projection) {
64581             var z = geoScaleToZoom(projection.scale());
64582             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
64583             var tiler = utilTiler().zoomExtent([z2, z2]);
64584
64585             return tiler.getTiles(projection)
64586                 .map(function(tile) { return tile.extent; });
64587         }
64588
64589
64590         // no more than `limit` results per partition.
64591         function searchLimited(limit, projection, rtree) {
64592             limit = limit || 5;
64593
64594             return partitionViewport(projection)
64595                 .reduce(function(result, extent) {
64596                     var found = rtree.search(extent.bbox())
64597                         .slice(0, limit)
64598                         .map(function(d) { return d.data; });
64599
64600                     return (found.length ? result.concat(found) : result);
64601                 }, []);
64602         }
64603
64604
64605
64606         var serviceMapillary = {
64607
64608             init: function() {
64609                 if (!_mlyCache) {
64610                     this.reset();
64611                 }
64612
64613                 this.event = utilRebind(this, dispatch$3, 'on');
64614             },
64615
64616             reset: function() {
64617                 if (_mlyCache) {
64618                     Object.values(_mlyCache.images.inflight).forEach(abortRequest$2);
64619                     Object.values(_mlyCache.image_detections.inflight).forEach(abortRequest$2);
64620                     Object.values(_mlyCache.map_features.inflight).forEach(abortRequest$2);
64621                     Object.values(_mlyCache.points.inflight).forEach(abortRequest$2);
64622                     Object.values(_mlyCache.sequences.inflight).forEach(abortRequest$2);
64623                 }
64624
64625                 _mlyCache = {
64626                     images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush(), forImageKey: {} },
64627                     image_detections: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, forImageKey: {} },
64628                     map_features: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush() },
64629                     points: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush() },
64630                     sequences: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush(), forImageKey: {}, lineString: {} }
64631                 };
64632
64633                 _mlySelectedImageKey = null;
64634                 _mlyClicks = [];
64635             },
64636
64637
64638             images: function(projection) {
64639                 var limit = 5;
64640                 return searchLimited(limit, projection, _mlyCache.images.rtree);
64641             },
64642
64643
64644             signs: function(projection) {
64645                 var limit = 5;
64646                 return searchLimited(limit, projection, _mlyCache.map_features.rtree);
64647             },
64648
64649
64650             mapFeatures: function(projection) {
64651                 var limit = 5;
64652                 return searchLimited(limit, projection, _mlyCache.points.rtree);
64653             },
64654
64655
64656             cachedImage: function(imageKey) {
64657                 return _mlyCache.images.forImageKey[imageKey];
64658             },
64659
64660
64661             sequences: function(projection) {
64662                 var viewport = projection.clipExtent();
64663                 var min = [viewport[0][0], viewport[1][1]];
64664                 var max = [viewport[1][0], viewport[0][1]];
64665                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
64666                 var sequenceKeys = {};
64667
64668                 // all sequences for images in viewport
64669                 _mlyCache.images.rtree.search(bbox)
64670                     .forEach(function(d) {
64671                         var sequenceKey = _mlyCache.sequences.forImageKey[d.data.key];
64672                         if (sequenceKey) {
64673                             sequenceKeys[sequenceKey] = true;
64674                         }
64675                     });
64676
64677                 // Return lineStrings for the sequences
64678                 return Object.keys(sequenceKeys).map(function(sequenceKey) {
64679                     return _mlyCache.sequences.lineString[sequenceKey];
64680                 });
64681             },
64682
64683
64684             signsSupported: function() {
64685                 return true;
64686             },
64687
64688
64689             loadImages: function(projection) {
64690                 loadTiles('images', apibase + 'images?sort_by=key&', projection);
64691                 loadTiles('sequences', apibase + 'sequences?sort_by=key&', projection);
64692             },
64693
64694
64695             loadSigns: function(projection) {
64696                 // if we are looking at signs, we'll actually need to fetch images too
64697                 loadTiles('images', apibase + 'images?sort_by=key&', projection);
64698                 loadTiles('map_features', apibase + 'map_features?layers=trafficsigns&min_nbr_image_detections=2&sort_by=key&', projection);
64699                 loadTiles('image_detections', apibase + 'image_detections?layers=trafficsigns&sort_by=key&', projection);
64700             },
64701
64702
64703             loadMapFeatures: function(projection) {
64704                 // if we are looking at signs, we'll actually need to fetch images too
64705                 loadTiles('images', apibase + 'images?sort_by=key', projection);
64706                 loadTiles('points', apibase + 'map_features?layers=points&min_nbr_image_detections=2&sort_by=key&shapes_by_organization_keys=' + mapFeatureConfig.organizationKey + '&' + 'values=' + mapFeatureConfig.values + '&', projection);
64707                 loadTiles('image_detections', apibase + 'image_detections?layers=points&sort_by=key&shapes_by_organization_keys=' + mapFeatureConfig.organizationKey + '&' + 'values=' + mapFeatureConfig.values + '&', projection);
64708             },
64709
64710
64711             loadViewer: function(context) {
64712                 // add mly-wrapper
64713                 var wrap = d3_select('#photoviewer').selectAll('.mly-wrapper')
64714                     .data([0]);
64715
64716                 wrap.enter()
64717                     .append('div')
64718                     .attr('id', 'mly')
64719                     .attr('class', 'photo-wrapper mly-wrapper')
64720                     .classed('hide', true);
64721
64722                 // load mapillary-viewercss
64723                 d3_select('head').selectAll('#mapillary-viewercss')
64724                     .data([0])
64725                     .enter()
64726                     .append('link')
64727                     .attr('id', 'mapillary-viewercss')
64728                     .attr('rel', 'stylesheet')
64729                     .attr('href', context.asset(viewercss));
64730
64731                 // load mapillary-viewerjs
64732                 d3_select('head').selectAll('#mapillary-viewerjs')
64733                     .data([0])
64734                     .enter()
64735                     .append('script')
64736                     .attr('id', 'mapillary-viewerjs')
64737                     .attr('src', context.asset(viewerjs));
64738
64739                 // load mapillary signs sprite
64740                 var defs = context.container().select('defs');
64741                 defs.call(svgDefs(context).addSprites, ['mapillary-sprite', 'mapillary-object-sprite'], false /* don't override colors */ );
64742
64743                 // Register viewer resize handler
64744                 context.ui().photoviewer.on('resize.mapillary', function() {
64745                     if (_mlyViewer) {
64746                         _mlyViewer.resize();
64747                     }
64748                 });
64749             },
64750
64751
64752             showViewer: function() {
64753                 var wrap = d3_select('#photoviewer')
64754                     .classed('hide', false);
64755
64756                 var isHidden = wrap.selectAll('.photo-wrapper.mly-wrapper.hide').size();
64757
64758                 if (isHidden && _mlyViewer) {
64759                     wrap
64760                         .selectAll('.photo-wrapper:not(.mly-wrapper)')
64761                         .classed('hide', true);
64762
64763                     wrap
64764                         .selectAll('.photo-wrapper.mly-wrapper')
64765                         .classed('hide', false);
64766
64767                     _mlyViewer.resize();
64768                 }
64769
64770                 return this;
64771             },
64772
64773
64774             hideViewer: function() {
64775                 _mlySelectedImageKey = null;
64776
64777                 if (!_mlyFallback && _mlyViewer) {
64778                     _mlyViewer.getComponent('sequence').stop();
64779                 }
64780
64781                 var viewer = d3_select('#photoviewer');
64782                 if (!viewer.empty()) { viewer.datum(null); }
64783
64784                 viewer
64785                     .classed('hide', true)
64786                     .selectAll('.photo-wrapper')
64787                     .classed('hide', true);
64788
64789                 d3_selectAll('.viewfield-group, .sequence, .icon-detected')
64790                     .classed('currentView', false);
64791
64792                 return this.setStyles(null, true);
64793             },
64794
64795
64796             parsePagination: parsePagination,
64797
64798
64799             updateViewer: function(imageKey, context) {
64800                 if (!imageKey) { return this; }
64801
64802                 if (!_mlyViewer) {
64803                     this.initViewer(imageKey, context);
64804                 } else {
64805                     _mlyViewer.moveToKey(imageKey)
64806                         .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
64807                 }
64808
64809                 return this;
64810             },
64811
64812
64813             initViewer: function(imageKey, context) {
64814                 var that = this;
64815                 if (window.Mapillary && imageKey) {
64816                     var opts = {
64817                         baseImageSize: 320,
64818                         component: {
64819                             cover: false,
64820                             keyboard: false,
64821                             tag: true
64822                         }
64823                     };
64824
64825                     // Disable components requiring WebGL support
64826                     if (!Mapillary.isSupported() && Mapillary.isFallbackSupported()) {
64827                         _mlyFallback = true;
64828                         opts.component = {
64829                             cover: false,
64830                             direction: false,
64831                             imagePlane: false,
64832                             keyboard: false,
64833                             mouse: false,
64834                             sequence: false,
64835                             tag: false,
64836                             image: true,        // fallback
64837                             navigation: true    // fallback
64838                         };
64839                     }
64840
64841                     _mlyViewer = new Mapillary.Viewer('mly', clientId, null, opts);
64842                     _mlyViewer.on('nodechanged', nodeChanged);
64843                     _mlyViewer.on('bearingchanged', bearingChanged);
64844                     _mlyViewer.moveToKey(imageKey)
64845                         .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
64846                 }
64847
64848                 // nodeChanged: called after the viewer has changed images and is ready.
64849                 //
64850                 // There is some logic here to batch up clicks into a _mlyClicks array
64851                 // because the user might click on a lot of markers quickly and nodechanged
64852                 // may be called out of order asychronously.
64853                 //
64854                 // Clicks are added to the array in `selectedImage` and removed here.
64855                 //
64856                 function nodeChanged(node) {
64857                     if (!_mlyFallback) {
64858                         _mlyViewer.getComponent('tag').removeAll();  // remove previous detections
64859                     }
64860
64861                     var clicks = _mlyClicks;
64862                     var index = clicks.indexOf(node.key);
64863                     var selectedKey = _mlySelectedImageKey;
64864
64865                     if (index > -1) {              // `nodechanged` initiated from clicking on a marker..
64866                         clicks.splice(index, 1);   // remove the click
64867                         // If `node.key` matches the current _mlySelectedImageKey, call `selectImage()`
64868                         // one more time to update the detections and attribution..
64869                         if (node.key === selectedKey) {
64870                             that.selectImage(_mlySelectedImageKey, true);
64871                         }
64872                     } else {             // `nodechanged` initiated from the Mapillary viewer controls..
64873                         var loc = node.computedLatLon ? [node.computedLatLon.lon, node.computedLatLon.lat] : [node.latLon.lon, node.latLon.lat];
64874                         context.map().centerEase(loc);
64875                         that.selectImage(node.key, true);
64876                     }
64877                 }
64878
64879                 function bearingChanged(e) {
64880                     dispatch$3.call('bearingChanged', undefined, e);
64881                 }
64882             },
64883
64884
64885             // Pass in the image key string as `imageKey`.
64886             // This allows images to be selected from places that dont have access
64887             // to the full image datum (like the street signs layer or the js viewer)
64888             selectImage: function(imageKey, fromViewer) {
64889
64890                 _mlySelectedImageKey = imageKey;
64891
64892                 // Note the datum could be missing, but we'll try to carry on anyway.
64893                 // There just might be a delay before user sees detections, captured_at, etc.
64894                 var d = _mlyCache.images.forImageKey[imageKey];
64895
64896                 var viewer = d3_select('#photoviewer');
64897                 if (!viewer.empty()) { viewer.datum(d); }
64898
64899                 imageKey = (d && d.key) || imageKey;
64900                 if (!fromViewer && imageKey) {
64901                     _mlyClicks.push(imageKey);
64902                 }
64903
64904                 this.setStyles(null, true);
64905
64906                 // if signs signs are shown, highlight the ones that appear in this image
64907                 d3_selectAll('.layer-mapillary-signs .icon-detected')
64908                     .classed('currentView', function(d) {
64909                         return d.detections.some(function(detection) {
64910                             return detection.image_key === imageKey;
64911                         });
64912                     });
64913
64914                 if (d) {
64915                     this.updateDetections(d);
64916                 }
64917
64918                 return this;
64919             },
64920
64921
64922             getSelectedImageKey: function() {
64923                 return _mlySelectedImageKey;
64924             },
64925
64926
64927             getSequenceKeyForImageKey: function(imageKey) {
64928                 return _mlyCache.sequences.forImageKey[imageKey];
64929             },
64930
64931
64932             // Updates the currently highlighted sequence and selected bubble.
64933             // Reset is only necessary when interacting with the viewport because
64934             // this implicitly changes the currently selected bubble/sequence
64935             setStyles: function(hovered, reset) {
64936                 if (reset) {  // reset all layers
64937                     d3_selectAll('.viewfield-group')
64938                         .classed('highlighted', false)
64939                         .classed('hovered', false)
64940                         .classed('currentView', false);
64941
64942                     d3_selectAll('.sequence')
64943                         .classed('highlighted', false)
64944                         .classed('currentView', false);
64945                 }
64946
64947                 var hoveredImageKey = hovered && hovered.key;
64948                 var hoveredSequenceKey = hoveredImageKey && this.getSequenceKeyForImageKey(hoveredImageKey);
64949                 var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey];
64950                 var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || [];
64951
64952                 var selectedImageKey = _mlySelectedImageKey;
64953                 var selectedSequenceKey = selectedImageKey && this.getSequenceKeyForImageKey(selectedImageKey);
64954                 var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey];
64955                 var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || [];
64956
64957                 // highlight sibling viewfields on either the selected or the hovered sequences
64958                 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
64959
64960                 d3_selectAll('.layer-mapillary .viewfield-group')
64961                     .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
64962                     .classed('hovered', function(d) { return d.key === hoveredImageKey; })
64963                     .classed('currentView', function(d) { return d.key === selectedImageKey; });
64964
64965                 d3_selectAll('.layer-mapillary .sequence')
64966                     .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
64967                     .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
64968
64969                 // update viewfields if needed
64970                 d3_selectAll('.viewfield-group .viewfield')
64971                     .attr('d', viewfieldPath);
64972
64973                 function viewfieldPath() {
64974                     var d = this.parentNode.__data__;
64975                     if (d.pano && d.key !== selectedImageKey) {
64976                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
64977                     } else {
64978                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
64979                     }
64980                 }
64981
64982                 return this;
64983             },
64984
64985
64986             updateDetections: function(d) {
64987                 if (!_mlyViewer || _mlyFallback) { return; }
64988
64989                 var imageKey = d && d.key;
64990                 if (!imageKey) { return; }
64991
64992                 var detections = _mlyCache.image_detections.forImageKey[imageKey] || [];
64993                 detections.forEach(function(data) {
64994                     var tag = makeTag(data);
64995                     if (tag) {
64996                         var tagComponent = _mlyViewer.getComponent('tag');
64997                         tagComponent.add([tag]);
64998                     }
64999                 });
65000
65001                 function makeTag(data) {
65002                     var valueParts = data.value.split('--');
65003                     if (valueParts.length !== 3) { return; }
65004
65005                     var text = valueParts[1].replace(/-/g, ' ');
65006                     var tag;
65007
65008                     // Currently only two shapes <Polygon|Point>
65009                     if (data.shape.type === 'Polygon') {
65010                         var polygonGeometry = new Mapillary
65011                             .TagComponent
65012                             .PolygonGeometry(data.shape.coordinates[0]);
65013
65014                         tag = new Mapillary.TagComponent.OutlineTag(
65015                             data.key,
65016                             polygonGeometry,
65017                             {
65018                                 text: text,
65019                                 textColor: 0xffff00,
65020                                 lineColor: 0xffff00,
65021                                 lineWidth: 2,
65022                                 fillColor: 0xffff00,
65023                                 fillOpacity: 0.3,
65024                             }
65025                         );
65026
65027                     } else if (data.shape.type === 'Point') {
65028                         var pointGeometry = new Mapillary
65029                             .TagComponent
65030                             .PointGeometry(data.shape.coordinates[0]);
65031
65032                         tag = new Mapillary.TagComponent.SpotTag(
65033                             data.key,
65034                             pointGeometry,
65035                             {
65036                                 text: text,
65037                                 color: 0xffff00,
65038                                 textColor: 0xffff00
65039                             }
65040                         );
65041                     }
65042
65043                     return tag;
65044                 }
65045             },
65046
65047
65048             cache: function() {
65049                 return _mlyCache;
65050             }
65051
65052         };
65053
65054         function validationIssue(attrs) {
65055             this.type = attrs.type;                // required - name of rule that created the issue (e.g. 'missing_tag')
65056             this.subtype = attrs.subtype;          // optional - category of the issue within the type (e.g. 'relation_type' under 'missing_tag')
65057             this.severity = attrs.severity;        // required - 'warning' or 'error'
65058             this.message = attrs.message;          // required - function returning localized string
65059             this.reference = attrs.reference;      // optional - function(selection) to render reference information
65060             this.entityIds = attrs.entityIds;      // optional - array of IDs of entities involved in the issue
65061             this.loc = attrs.loc;                  // optional - [lon, lat] to zoom in on to see the issue
65062             this.data = attrs.data;                // optional - object containing extra data for the fixes
65063             this.dynamicFixes = attrs.dynamicFixes;// optional - function(context) returning fixes
65064             this.hash = attrs.hash;                // optional - string to further differentiate the issue
65065
65066             this.id = generateID.apply(this);      // generated - see below
65067             this.autoFix = null;                   // generated - if autofix exists, will be set below
65068
65069             // A unique, deterministic string hash.
65070             // Issues with identical id values are considered identical.
65071             function generateID() {
65072                 var parts = [this.type];
65073
65074                 if (this.hash) {   // subclasses can pass in their own differentiator
65075                     parts.push(this.hash);
65076                 }
65077
65078                 if (this.subtype) {
65079                     parts.push(this.subtype);
65080                 }
65081
65082                 // include the entities this issue is for
65083                 // (sort them so the id is deterministic)
65084                 if (this.entityIds) {
65085                     var entityKeys = this.entityIds.slice().sort();
65086                     parts.push.apply(parts, entityKeys);
65087                 }
65088
65089                 return parts.join(':');
65090             }
65091
65092             this.extent = function(resolver) {
65093                 if (this.loc) {
65094                     return geoExtent(this.loc);
65095                 }
65096                 if (this.entityIds && this.entityIds.length) {
65097                     return this.entityIds.reduce(function(extent, entityId) {
65098                         return extent.extend(resolver.entity(entityId).extent(resolver));
65099                     }, geoExtent());
65100                 }
65101                 return null;
65102             };
65103
65104             this.fixes = function(context) {
65105                 var fixes = this.dynamicFixes ? this.dynamicFixes(context) : [];
65106                 var issue = this;
65107
65108                 if (issue.severity === 'warning') {
65109                     // allow ignoring any issue that's not an error
65110                     fixes.push(new validationIssueFix({
65111                         title: t('issues.fix.ignore_issue.title'),
65112                         icon: 'iD-icon-close',
65113                         onClick: function() {
65114                             context.validator().ignoreIssue(this.issue.id);
65115                         }
65116                     }));
65117                 }
65118
65119                 fixes.forEach(function(fix) {
65120                     fix.id = fix.title;
65121                     // add a reference to the issue for use in actions
65122                     fix.issue = issue;
65123                     if (fix.autoArgs) {
65124                         issue.autoFix = fix;
65125                     }
65126                 });
65127                 return fixes;
65128             };
65129
65130         }
65131
65132
65133         function validationIssueFix(attrs) {
65134             this.title = attrs.title;                   // Required
65135             this.onClick = attrs.onClick;               // Optional - the function to run to apply the fix
65136             this.disabledReason = attrs.disabledReason; // Optional - a string explaining why the fix is unavailable, if any
65137             this.icon = attrs.icon;                     // Optional - shows 'iD-icon-wrench' if not set
65138             this.entityIds = attrs.entityIds || [];     // Optional - used for hover-higlighting.
65139             this.autoArgs = attrs.autoArgs;             // Optional - pass [actions, annotation] arglist if this fix can automatically run
65140
65141             this.issue = null;    // Generated link - added by validationIssue
65142         }
65143
65144         var buildRuleChecks = function() {
65145             return {
65146                 equals: function (equals) {
65147                     return function(tags) {
65148                         return Object.keys(equals).every(function(k) {
65149                             return equals[k] === tags[k];
65150                         });
65151                     };
65152                 },
65153                 notEquals: function (notEquals) {
65154                     return function(tags) {
65155                         return Object.keys(notEquals).some(function(k) {
65156                             return notEquals[k] !== tags[k];
65157                         });
65158                     };
65159                 },
65160                 absence: function(absence) {
65161                     return function(tags) {
65162                         return Object.keys(tags).indexOf(absence) === -1;
65163                     };
65164                 },
65165                 presence: function(presence) {
65166                     return function(tags) {
65167                         return Object.keys(tags).indexOf(presence) > -1;
65168                     };
65169                 },
65170                 greaterThan: function(greaterThan) {
65171                     var key = Object.keys(greaterThan)[0];
65172                     var value = greaterThan[key];
65173
65174                     return function(tags) {
65175                         return tags[key] > value;
65176                     };
65177                 },
65178                 greaterThanEqual: function(greaterThanEqual) {
65179                     var key = Object.keys(greaterThanEqual)[0];
65180                     var value = greaterThanEqual[key];
65181
65182                     return function(tags) {
65183                         return tags[key] >= value;
65184                     };
65185                 },
65186                 lessThan: function(lessThan) {
65187                     var key = Object.keys(lessThan)[0];
65188                     var value = lessThan[key];
65189
65190                     return function(tags) {
65191                         return tags[key] < value;
65192                     };
65193                 },
65194                 lessThanEqual: function(lessThanEqual) {
65195                     var key = Object.keys(lessThanEqual)[0];
65196                     var value = lessThanEqual[key];
65197
65198                     return function(tags) {
65199                         return tags[key] <= value;
65200                     };
65201                 },
65202                 positiveRegex: function(positiveRegex) {
65203                     var tagKey = Object.keys(positiveRegex)[0];
65204                     var expression = positiveRegex[tagKey].join('|');
65205                     var regex = new RegExp(expression);
65206
65207                     return function(tags) {
65208                         return regex.test(tags[tagKey]);
65209                     };
65210                 },
65211                 negativeRegex: function(negativeRegex) {
65212                     var tagKey = Object.keys(negativeRegex)[0];
65213                     var expression = negativeRegex[tagKey].join('|');
65214                     var regex = new RegExp(expression);
65215
65216                     return function(tags) {
65217                         return !regex.test(tags[tagKey]);
65218                     };
65219                 }
65220             };
65221         };
65222
65223         var buildLineKeys = function() {
65224             return {
65225                 highway: {
65226                     rest_area: true,
65227                     services: true
65228                 },
65229                 railway: {
65230                     roundhouse: true,
65231                     station: true,
65232                     traverser: true,
65233                     turntable: true,
65234                     wash: true
65235                 }
65236             };
65237         };
65238
65239         var serviceMapRules = {
65240             init: function() {
65241                 this._ruleChecks  = buildRuleChecks();
65242                 this._validationRules = [];
65243                 this._areaKeys = osmAreaKeys;
65244                 this._lineKeys = buildLineKeys();
65245             },
65246
65247             // list of rules only relevant to tag checks...
65248             filterRuleChecks: function(selector) {
65249                 var _ruleChecks = this._ruleChecks;
65250                 return Object.keys(selector).reduce(function(rules, key) {
65251                     if (['geometry', 'error', 'warning'].indexOf(key) === -1) {
65252                         rules.push(_ruleChecks[key](selector[key]));
65253                     }
65254                     return rules;
65255                 }, []);
65256             },
65257
65258             // builds tagMap from mapcss-parse selector object...
65259             buildTagMap: function(selector) {
65260                 var getRegexValues = function(regexes) {
65261                     return regexes.map(function(regex) {
65262                         return regex.replace(/\$|\^/g, '');
65263                     });
65264                 };
65265
65266                 var tagMap = Object.keys(selector).reduce(function (expectedTags, key) {
65267                     var values;
65268                     var isRegex = /regex/gi.test(key);
65269                     var isEqual = /equals/gi.test(key);
65270
65271                     if (isRegex || isEqual) {
65272                         Object.keys(selector[key]).forEach(function(selectorKey) {
65273                             values = isEqual ? [selector[key][selectorKey]] : getRegexValues(selector[key][selectorKey]);
65274
65275                             if (expectedTags.hasOwnProperty(selectorKey)) {
65276                                 values = values.concat(expectedTags[selectorKey]);
65277                             }
65278
65279                             expectedTags[selectorKey] = values;
65280                         });
65281
65282                     } else if (/(greater|less)Than(Equal)?|presence/g.test(key)) {
65283                         var tagKey = /presence/.test(key) ? selector[key] : Object.keys(selector[key])[0];
65284
65285                         values = [selector[key][tagKey]];
65286
65287                         if (expectedTags.hasOwnProperty(tagKey)) {
65288                             values = values.concat(expectedTags[tagKey]);
65289                         }
65290
65291                         expectedTags[tagKey] = values;
65292                     }
65293
65294                     return expectedTags;
65295                 }, {});
65296
65297                 return tagMap;
65298             },
65299
65300             // inspired by osmWay#isArea()
65301             inferGeometry: function(tagMap) {
65302                 var _lineKeys = this._lineKeys;
65303                 var _areaKeys = this._areaKeys;
65304
65305                 var isAreaKeyBlackList = function(key) {
65306                     return utilArrayIntersection(tagMap[key], Object.keys(_areaKeys[key])).length > 0;
65307                 };
65308                 var isLineKeysWhiteList = function(key) {
65309                     return utilArrayIntersection(tagMap[key], Object.keys(_lineKeys[key])).length > 0;
65310                 };
65311
65312                 if (tagMap.hasOwnProperty('area')) {
65313                     if (tagMap.area.indexOf('yes') > -1) {
65314                         return 'area';
65315                     }
65316                     if (tagMap.area.indexOf('no') > -1) {
65317                         return 'line';
65318                     }
65319                 }
65320
65321                 for (var key in tagMap) {
65322                     if (key in _areaKeys && !isAreaKeyBlackList(key)) {
65323                         return 'area';
65324                     }
65325                     if (key in _lineKeys && isLineKeysWhiteList(key)) {
65326                         return 'area';
65327                     }
65328                 }
65329
65330                 return 'line';
65331             },
65332
65333             // adds from mapcss-parse selector check...
65334             addRule: function(selector) {
65335                 var rule = {
65336                     // checks relevant to mapcss-selector
65337                     checks: this.filterRuleChecks(selector),
65338                     // true if all conditions for a tag error are true..
65339                     matches: function(entity) {
65340                         return this.checks.every(function(check) {
65341                             return check(entity.tags);
65342                         });
65343                     },
65344                     // borrowed from Way#isArea()
65345                     inferredGeometry: this.inferGeometry(this.buildTagMap(selector), this._areaKeys),
65346                     geometryMatches: function(entity, graph) {
65347                         if (entity.type === 'node' || entity.type === 'relation') {
65348                             return selector.geometry === entity.type;
65349                         } else if (entity.type === 'way') {
65350                             return this.inferredGeometry === entity.geometry(graph);
65351                         }
65352                     },
65353                     // when geometries match and tag matches are present, return a warning...
65354                     findIssues: function (entity, graph, issues) {
65355                         if (this.geometryMatches(entity, graph) && this.matches(entity)) {
65356                             var severity = Object.keys(selector).indexOf('error') > -1
65357                                     ? 'error'
65358                                     : 'warning';
65359                             var message = selector[severity];
65360                             issues.push(new validationIssue({
65361                                 type: 'maprules',
65362                                 severity: severity,
65363                                 message: function() {
65364                                     return message;
65365                                 },
65366                                 entityIds: [entity.id]
65367                             }));
65368                         }
65369                     }
65370                 };
65371                 this._validationRules.push(rule);
65372             },
65373
65374             clearRules: function() { this._validationRules = []; },
65375
65376             // returns validationRules...
65377             validationRules: function() { return this._validationRules; },
65378
65379             // returns ruleChecks
65380             ruleChecks: function() { return this._ruleChecks; }
65381         };
65382
65383         var apibase$1 = 'https://nominatim.openstreetmap.org/';
65384         var _inflight = {};
65385         var _nominatimCache;
65386
65387
65388         var serviceNominatim = {
65389
65390             init: function() {
65391                 _inflight = {};
65392                 _nominatimCache = new RBush();
65393             },
65394
65395             reset: function() {
65396                 Object.values(_inflight).forEach(function(controller) { controller.abort(); });
65397                 _inflight = {};
65398                 _nominatimCache = new RBush();
65399             },
65400
65401
65402             countryCode: function (location, callback) {
65403                 this.reverse(location, function(err, result) {
65404                     if (err) {
65405                         return callback(err);
65406                     } else if (result.address) {
65407                         return callback(null, result.address.country_code);
65408                     } else {
65409                         return callback('Unable to geocode', null);
65410                     }
65411                 });
65412             },
65413
65414
65415             reverse: function (loc, callback) {
65416                 var cached = _nominatimCache.search(
65417                     { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] }
65418                 );
65419
65420                 if (cached.length > 0) {
65421                     if (callback) { callback(null, cached[0].data); }
65422                     return;
65423                 }
65424
65425                 var params = { zoom: 13, format: 'json', addressdetails: 1, lat: loc[1], lon: loc[0] };
65426                 var url = apibase$1 + 'reverse?' + utilQsString(params);
65427
65428                 if (_inflight[url]) { return; }
65429                 var controller = new AbortController();
65430                 _inflight[url] = controller;
65431
65432                 d3_json(url, { signal: controller.signal })
65433                     .then(function(result) {
65434                         delete _inflight[url];
65435                         if (result && result.error) {
65436                             throw new Error(result.error);
65437                         }
65438                         var extent = geoExtent(loc).padByMeters(200);
65439                         _nominatimCache.insert(Object.assign(extent.bbox(), {data: result}));
65440                         if (callback) { callback(null, result); }
65441                     })
65442                     .catch(function(err) {
65443                         delete _inflight[url];
65444                         if (err.name === 'AbortError') { return; }
65445                         if (callback) { callback(err.message); }
65446                     });
65447             },
65448
65449
65450             search: function (val, callback) {
65451                 var searchVal = encodeURIComponent(val);
65452                 var url = apibase$1 + 'search/' + searchVal + '?limit=10&format=json';
65453
65454                 if (_inflight[url]) { return; }
65455                 var controller = new AbortController();
65456                 _inflight[url] = controller;
65457
65458                 d3_json(url, { signal: controller.signal })
65459                     .then(function(result) {
65460                         delete _inflight[url];
65461                         if (result && result.error) {
65462                             throw new Error(result.error);
65463                         }
65464                         if (callback) { callback(null, result); }
65465                     })
65466                     .catch(function(err) {
65467                         delete _inflight[url];
65468                         if (err.name === 'AbortError') { return; }
65469                         if (callback) { callback(err.message); }
65470                     });
65471             }
65472
65473         };
65474
65475         var apibase$2 = 'https://openstreetcam.org';
65476         var maxResults$1 = 1000;
65477         var tileZoom$1 = 14;
65478         var tiler$3 = utilTiler().zoomExtent([tileZoom$1, tileZoom$1]).skipNullIsland(true);
65479         var dispatch$4 = dispatch('loadedImages');
65480         var imgZoom = d3_zoom()
65481             .extent([[0, 0], [320, 240]])
65482             .translateExtent([[0, 0], [320, 240]])
65483             .scaleExtent([1, 15])
65484             .on('zoom', zoomPan);
65485         var _oscCache;
65486         var _oscSelectedImage;
65487
65488
65489         function abortRequest$3(controller) {
65490             controller.abort();
65491         }
65492
65493
65494         function maxPageAtZoom$1(z) {
65495             if (z < 15)   { return 2; }
65496             if (z === 15) { return 5; }
65497             if (z === 16) { return 10; }
65498             if (z === 17) { return 20; }
65499             if (z === 18) { return 40; }
65500             if (z > 18)   { return 80; }
65501         }
65502
65503
65504         function loadTiles$1(which, url, projection) {
65505             var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
65506             var tiles = tiler$3.getTiles(projection);
65507
65508             // abort inflight requests that are no longer needed
65509             var cache = _oscCache[which];
65510             Object.keys(cache.inflight).forEach(function(k) {
65511                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
65512                 if (!wanted) {
65513                     abortRequest$3(cache.inflight[k]);
65514                     delete cache.inflight[k];
65515                 }
65516             });
65517
65518             tiles.forEach(function(tile) {
65519                 loadNextTilePage$1(which, currZoom, url, tile);
65520             });
65521         }
65522
65523
65524         function loadNextTilePage$1(which, currZoom, url, tile) {
65525             var cache = _oscCache[which];
65526             var bbox = tile.extent.bbox();
65527             var maxPages = maxPageAtZoom$1(currZoom);
65528             var nextPage = cache.nextPage[tile.id] || 1;
65529             var params = utilQsString({
65530                 ipp: maxResults$1,
65531                 page: nextPage,
65532                 // client_id: clientId,
65533                 bbTopLeft: [bbox.maxY, bbox.minX].join(','),
65534                 bbBottomRight: [bbox.minY, bbox.maxX].join(',')
65535             }, true);
65536
65537             if (nextPage > maxPages) { return; }
65538
65539             var id = tile.id + ',' + String(nextPage);
65540             if (cache.loaded[id] || cache.inflight[id]) { return; }
65541
65542             var controller = new AbortController();
65543             cache.inflight[id] = controller;
65544
65545             var options = {
65546                 method: 'POST',
65547                 signal: controller.signal,
65548                 body: params,
65549                 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
65550             };
65551
65552             d3_json(url, options)
65553                 .then(function(data) {
65554                     cache.loaded[id] = true;
65555                     delete cache.inflight[id];
65556                     if (!data || !data.currentPageItems || !data.currentPageItems.length) {
65557                         throw new Error('No Data');
65558                     }
65559
65560                     var features = data.currentPageItems.map(function(item) {
65561                         var loc = [+item.lng, +item.lat];
65562                         var d;
65563
65564                         if (which === 'images') {
65565                             d = {
65566                                 loc: loc,
65567                                 key: item.id,
65568                                 ca: +item.heading,
65569                                 captured_at: (item.shot_date || item.date_added),
65570                                 captured_by: item.username,
65571                                 imagePath: item.lth_name,
65572                                 sequence_id: item.sequence_id,
65573                                 sequence_index: +item.sequence_index
65574                             };
65575
65576                             // cache sequence info
65577                             var seq = _oscCache.sequences[d.sequence_id];
65578                             if (!seq) {
65579                                 seq = { rotation: 0, images: [] };
65580                                 _oscCache.sequences[d.sequence_id] = seq;
65581                             }
65582                             seq.images[d.sequence_index] = d;
65583                         }
65584
65585                         return {
65586                             minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
65587                         };
65588                     });
65589
65590                     cache.rtree.load(features);
65591
65592                     if (data.currentPageItems.length === maxResults$1) {  // more pages to load
65593                         cache.nextPage[tile.id] = nextPage + 1;
65594                         loadNextTilePage$1(which, currZoom, url, tile);
65595                     } else {
65596                         cache.nextPage[tile.id] = Infinity;     // no more pages to load
65597                     }
65598
65599                     if (which === 'images') {
65600                         dispatch$4.call('loadedImages');
65601                     }
65602                 })
65603                 .catch(function() {
65604                     cache.loaded[id] = true;
65605                     delete cache.inflight[id];
65606                 });
65607         }
65608
65609
65610         // partition viewport into higher zoom tiles
65611         function partitionViewport$1(projection) {
65612             var z = geoScaleToZoom(projection.scale());
65613             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
65614             var tiler = utilTiler().zoomExtent([z2, z2]);
65615
65616             return tiler.getTiles(projection)
65617                 .map(function(tile) { return tile.extent; });
65618         }
65619
65620
65621         // no more than `limit` results per partition.
65622         function searchLimited$1(limit, projection, rtree) {
65623             limit = limit || 5;
65624
65625             return partitionViewport$1(projection)
65626                 .reduce(function(result, extent) {
65627                     var found = rtree.search(extent.bbox())
65628                         .slice(0, limit)
65629                         .map(function(d) { return d.data; });
65630
65631                     return (found.length ? result.concat(found) : result);
65632                 }, []);
65633         }
65634
65635
65636         function zoomPan() {
65637             var t = event.transform;
65638             d3_select('#photoviewer .osc-image-wrap')
65639                 .call(utilSetTransform, t.x, t.y, t.k);
65640         }
65641
65642
65643         var serviceOpenstreetcam = {
65644
65645             init: function() {
65646                 if (!_oscCache) {
65647                     this.reset();
65648                 }
65649
65650                 this.event = utilRebind(this, dispatch$4, 'on');
65651             },
65652
65653             reset: function() {
65654                 if (_oscCache) {
65655                     Object.values(_oscCache.images.inflight).forEach(abortRequest$3);
65656                 }
65657
65658                 _oscCache = {
65659                     images: { inflight: {}, loaded: {}, nextPage: {}, rtree: new RBush() },
65660                     sequences: {}
65661                 };
65662
65663                 _oscSelectedImage = null;
65664             },
65665
65666
65667             images: function(projection) {
65668                 var limit = 5;
65669                 return searchLimited$1(limit, projection, _oscCache.images.rtree);
65670             },
65671
65672
65673             sequences: function(projection) {
65674                 var viewport = projection.clipExtent();
65675                 var min = [viewport[0][0], viewport[1][1]];
65676                 var max = [viewport[1][0], viewport[0][1]];
65677                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
65678                 var sequenceKeys = {};
65679
65680                 // all sequences for images in viewport
65681                 _oscCache.images.rtree.search(bbox)
65682                     .forEach(function(d) { sequenceKeys[d.data.sequence_id] = true; });
65683
65684                 // make linestrings from those sequences
65685                 var lineStrings = [];
65686                 Object.keys(sequenceKeys)
65687                     .forEach(function(sequenceKey) {
65688                         var seq = _oscCache.sequences[sequenceKey];
65689                         var images = seq && seq.images;
65690                         if (images) {
65691                             lineStrings.push({
65692                                 type: 'LineString',
65693                                 coordinates: images.map(function (d) { return d.loc; }).filter(Boolean),
65694                                 properties: { key: sequenceKey }
65695                             });
65696                         }
65697                     });
65698                 return lineStrings;
65699             },
65700
65701
65702             loadImages: function(projection) {
65703                 var url = apibase$2 + '/1.0/list/nearby-photos/';
65704                 loadTiles$1('images', url, projection);
65705             },
65706
65707
65708             loadViewer: function(context) {
65709                 var that = this;
65710
65711                 // add osc-wrapper
65712                 var wrap = d3_select('#photoviewer').selectAll('.osc-wrapper')
65713                     .data([0]);
65714
65715                 var wrapEnter = wrap.enter()
65716                     .append('div')
65717                     .attr('class', 'photo-wrapper osc-wrapper')
65718                     .classed('hide', true)
65719                     .call(imgZoom)
65720                     .on('dblclick.zoom', null);
65721
65722                 wrapEnter
65723                     .append('div')
65724                     .attr('class', 'photo-attribution fillD');
65725
65726                 var controlsEnter = wrapEnter
65727                     .append('div')
65728                     .attr('class', 'photo-controls-wrap')
65729                     .append('div')
65730                     .attr('class', 'photo-controls');
65731
65732                 controlsEnter
65733                     .append('button')
65734                     .on('click.back', step(-1))
65735                     .text('◄');
65736
65737                 controlsEnter
65738                     .append('button')
65739                     .on('click.rotate-ccw', rotate(-90))
65740                     .text('⤿');
65741
65742                 controlsEnter
65743                     .append('button')
65744                     .on('click.rotate-cw', rotate(90))
65745                     .text('⤾');
65746
65747                 controlsEnter
65748                     .append('button')
65749                     .on('click.forward', step(1))
65750                     .text('►');
65751
65752                 wrapEnter
65753                     .append('div')
65754                     .attr('class', 'osc-image-wrap');
65755
65756
65757                 // Register viewer resize handler
65758                 context.ui().photoviewer.on('resize.openstreetcam', function(dimensions) {
65759                     imgZoom = d3_zoom()
65760                         .extent([[0, 0], dimensions])
65761                         .translateExtent([[0, 0], dimensions])
65762                         .scaleExtent([1, 15])
65763                         .on('zoom', zoomPan);
65764                 });
65765
65766
65767                 function rotate(deg) {
65768                     return function() {
65769                         if (!_oscSelectedImage) { return; }
65770                         var sequenceKey = _oscSelectedImage.sequence_id;
65771                         var sequence = _oscCache.sequences[sequenceKey];
65772                         if (!sequence) { return; }
65773
65774                         var r = sequence.rotation || 0;
65775                         r += deg;
65776
65777                         if (r > 180) { r -= 360; }
65778                         if (r < -180) { r += 360; }
65779                         sequence.rotation = r;
65780
65781                         var wrap = d3_select('#photoviewer .osc-wrapper');
65782
65783                         wrap
65784                             .transition()
65785                             .duration(100)
65786                             .call(imgZoom.transform, identity$8);
65787
65788                         wrap.selectAll('.osc-image')
65789                             .transition()
65790                             .duration(100)
65791                             .style('transform', 'rotate(' + r + 'deg)');
65792                     };
65793                 }
65794
65795                 function step(stepBy) {
65796                     return function() {
65797                         if (!_oscSelectedImage) { return; }
65798                         var sequenceKey = _oscSelectedImage.sequence_id;
65799                         var sequence = _oscCache.sequences[sequenceKey];
65800                         if (!sequence) { return; }
65801
65802                         var nextIndex = _oscSelectedImage.sequence_index + stepBy;
65803                         var nextImage = sequence.images[nextIndex];
65804                         if (!nextImage) { return; }
65805
65806                         context.map().centerEase(nextImage.loc);
65807
65808                         that
65809                             .selectImage(nextImage)
65810                             .updateViewer(nextImage);
65811                     };
65812                 }
65813             },
65814
65815
65816             showViewer: function() {
65817                 var viewer = d3_select('#photoviewer')
65818                     .classed('hide', false);
65819
65820                 var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size();
65821
65822                 if (isHidden) {
65823                     viewer
65824                         .selectAll('.photo-wrapper:not(.osc-wrapper)')
65825                         .classed('hide', true);
65826
65827                     viewer
65828                         .selectAll('.photo-wrapper.osc-wrapper')
65829                         .classed('hide', false);
65830                 }
65831
65832                 return this;
65833             },
65834
65835
65836             hideViewer: function() {
65837                 _oscSelectedImage = null;
65838
65839                 var viewer = d3_select('#photoviewer');
65840                 if (!viewer.empty()) { viewer.datum(null); }
65841
65842                 viewer
65843                     .classed('hide', true)
65844                     .selectAll('.photo-wrapper')
65845                     .classed('hide', true);
65846
65847                 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
65848                     .classed('currentView', false);
65849
65850                 return this.setStyles(null, true);
65851             },
65852
65853
65854             updateViewer: function(d) {
65855                 var wrap = d3_select('#photoviewer .osc-wrapper');
65856                 var imageWrap = wrap.selectAll('.osc-image-wrap');
65857                 var attribution = wrap.selectAll('.photo-attribution').html('');
65858
65859                 wrap
65860                     .transition()
65861                     .duration(100)
65862                     .call(imgZoom.transform, identity$8);
65863
65864                 imageWrap
65865                     .selectAll('.osc-image')
65866                     .remove();
65867
65868                 if (d) {
65869                     var sequence = _oscCache.sequences[d.sequence_id];
65870                     var r = (sequence && sequence.rotation) || 0;
65871
65872                     imageWrap
65873                         .append('img')
65874                         .attr('class', 'osc-image')
65875                         .attr('src', apibase$2 + '/' + d.imagePath)
65876                         .style('transform', 'rotate(' + r + 'deg)');
65877
65878                     if (d.captured_by) {
65879                         attribution
65880                             .append('a')
65881                             .attr('class', 'captured_by')
65882                             .attr('target', '_blank')
65883                             .attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by))
65884                             .text('@' + d.captured_by);
65885
65886                         attribution
65887                             .append('span')
65888                             .text('|');
65889                     }
65890
65891                     if (d.captured_at) {
65892                         attribution
65893                             .append('span')
65894                             .attr('class', 'captured_at')
65895                             .text(localeDateString(d.captured_at));
65896
65897                         attribution
65898                             .append('span')
65899                             .text('|');
65900                     }
65901
65902                     attribution
65903                         .append('a')
65904                         .attr('class', 'image-link')
65905                         .attr('target', '_blank')
65906                         .attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index)
65907                         .text('openstreetcam.org');
65908                 }
65909
65910                 return this;
65911
65912
65913                 function localeDateString(s) {
65914                     if (!s) { return null; }
65915                     var detected = utilDetect();
65916                     var options = { day: 'numeric', month: 'short', year: 'numeric' };
65917                     var d = new Date(s);
65918                     if (isNaN(d.getTime())) { return null; }
65919                     return d.toLocaleDateString(detected.locale, options);
65920                 }
65921             },
65922
65923
65924             selectImage: function(d) {
65925                 _oscSelectedImage = d;
65926                 var viewer = d3_select('#photoviewer');
65927                 if (!viewer.empty()) { viewer.datum(d); }
65928
65929                 this.setStyles(null, true);
65930
65931                 d3_selectAll('.icon-sign')
65932                     .classed('currentView', false);
65933
65934                 return this;
65935             },
65936
65937
65938             getSelectedImage: function() {
65939                 return _oscSelectedImage;
65940             },
65941
65942
65943             getSequenceKeyForImage: function(d) {
65944                 return d && d.sequence_id;
65945             },
65946
65947
65948             // Updates the currently highlighted sequence and selected bubble.
65949             // Reset is only necessary when interacting with the viewport because
65950             // this implicitly changes the currently selected bubble/sequence
65951             setStyles: function(hovered, reset) {
65952                 if (reset) {  // reset all layers
65953                     d3_selectAll('.viewfield-group')
65954                         .classed('highlighted', false)
65955                         .classed('hovered', false)
65956                         .classed('currentView', false);
65957
65958                     d3_selectAll('.sequence')
65959                         .classed('highlighted', false)
65960                         .classed('currentView', false);
65961                 }
65962
65963                 var hoveredImageKey = hovered && hovered.key;
65964                 var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
65965                 var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey];
65966                 var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || [];
65967
65968                 var viewer = d3_select('#photoviewer');
65969                 var selected = viewer.empty() ? undefined : viewer.datum();
65970                 var selectedImageKey = selected && selected.key;
65971                 var selectedSequenceKey = this.getSequenceKeyForImage(selected);
65972                 var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey];
65973                 var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || [];
65974
65975                 // highlight sibling viewfields on either the selected or the hovered sequences
65976                 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
65977
65978                 d3_selectAll('.layer-openstreetcam .viewfield-group')
65979                     .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
65980                     .classed('hovered', function(d) { return d.key === hoveredImageKey; })
65981                     .classed('currentView', function(d) { return d.key === selectedImageKey; });
65982
65983                 d3_selectAll('.layer-openstreetcam .sequence')
65984                     .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
65985                     .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
65986
65987                 // update viewfields if needed
65988                 d3_selectAll('.viewfield-group .viewfield')
65989                     .attr('d', viewfieldPath);
65990
65991                 function viewfieldPath() {
65992                     var d = this.parentNode.__data__;
65993                     if (d.pano && d.key !== selectedImageKey) {
65994                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
65995                     } else {
65996                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
65997                     }
65998                 }
65999
66000                 return this;
66001             },
66002
66003
66004             cache: function() {
66005                 return _oscCache;
66006             }
66007
66008         };
66009
66010         /**
66011          * Checks if `value` is the
66012          * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
66013          * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
66014          *
66015          * @static
66016          * @memberOf _
66017          * @since 0.1.0
66018          * @category Lang
66019          * @param {*} value The value to check.
66020          * @returns {boolean} Returns `true` if `value` is an object, else `false`.
66021          * @example
66022          *
66023          * _.isObject({});
66024          * // => true
66025          *
66026          * _.isObject([1, 2, 3]);
66027          * // => true
66028          *
66029          * _.isObject(_.noop);
66030          * // => true
66031          *
66032          * _.isObject(null);
66033          * // => false
66034          */
66035         function isObject$3(value) {
66036           var type = typeof value;
66037           return value != null && (type == 'object' || type == 'function');
66038         }
66039
66040         /** Detect free variable `global` from Node.js. */
66041         var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
66042
66043         /** Detect free variable `self`. */
66044         var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
66045
66046         /** Used as a reference to the global object. */
66047         var root$3 = freeGlobal || freeSelf || Function('return this')();
66048
66049         /**
66050          * Gets the timestamp of the number of milliseconds that have elapsed since
66051          * the Unix epoch (1 January 1970 00:00:00 UTC).
66052          *
66053          * @static
66054          * @memberOf _
66055          * @since 2.4.0
66056          * @category Date
66057          * @returns {number} Returns the timestamp.
66058          * @example
66059          *
66060          * _.defer(function(stamp) {
66061          *   console.log(_.now() - stamp);
66062          * }, _.now());
66063          * // => Logs the number of milliseconds it took for the deferred invocation.
66064          */
66065         var now$1 = function() {
66066           return root$3.Date.now();
66067         };
66068
66069         /** Built-in value references. */
66070         var Symbol$1 = root$3.Symbol;
66071
66072         /** Used for built-in method references. */
66073         var objectProto = Object.prototype;
66074
66075         /** Used to check objects for own properties. */
66076         var hasOwnProperty$2 = objectProto.hasOwnProperty;
66077
66078         /**
66079          * Used to resolve the
66080          * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
66081          * of values.
66082          */
66083         var nativeObjectToString = objectProto.toString;
66084
66085         /** Built-in value references. */
66086         var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
66087
66088         /**
66089          * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
66090          *
66091          * @private
66092          * @param {*} value The value to query.
66093          * @returns {string} Returns the raw `toStringTag`.
66094          */
66095         function getRawTag(value) {
66096           var isOwn = hasOwnProperty$2.call(value, symToStringTag),
66097               tag = value[symToStringTag];
66098
66099           try {
66100             value[symToStringTag] = undefined;
66101             var unmasked = true;
66102           } catch (e) {}
66103
66104           var result = nativeObjectToString.call(value);
66105           if (unmasked) {
66106             if (isOwn) {
66107               value[symToStringTag] = tag;
66108             } else {
66109               delete value[symToStringTag];
66110             }
66111           }
66112           return result;
66113         }
66114
66115         /** Used for built-in method references. */
66116         var objectProto$1 = Object.prototype;
66117
66118         /**
66119          * Used to resolve the
66120          * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
66121          * of values.
66122          */
66123         var nativeObjectToString$1 = objectProto$1.toString;
66124
66125         /**
66126          * Converts `value` to a string using `Object.prototype.toString`.
66127          *
66128          * @private
66129          * @param {*} value The value to convert.
66130          * @returns {string} Returns the converted string.
66131          */
66132         function objectToString$1(value) {
66133           return nativeObjectToString$1.call(value);
66134         }
66135
66136         /** `Object#toString` result references. */
66137         var nullTag = '[object Null]',
66138             undefinedTag = '[object Undefined]';
66139
66140         /** Built-in value references. */
66141         var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;
66142
66143         /**
66144          * The base implementation of `getTag` without fallbacks for buggy environments.
66145          *
66146          * @private
66147          * @param {*} value The value to query.
66148          * @returns {string} Returns the `toStringTag`.
66149          */
66150         function baseGetTag(value) {
66151           if (value == null) {
66152             return value === undefined ? undefinedTag : nullTag;
66153           }
66154           return (symToStringTag$1 && symToStringTag$1 in Object(value))
66155             ? getRawTag(value)
66156             : objectToString$1(value);
66157         }
66158
66159         /**
66160          * Checks if `value` is object-like. A value is object-like if it's not `null`
66161          * and has a `typeof` result of "object".
66162          *
66163          * @static
66164          * @memberOf _
66165          * @since 4.0.0
66166          * @category Lang
66167          * @param {*} value The value to check.
66168          * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
66169          * @example
66170          *
66171          * _.isObjectLike({});
66172          * // => true
66173          *
66174          * _.isObjectLike([1, 2, 3]);
66175          * // => true
66176          *
66177          * _.isObjectLike(_.noop);
66178          * // => false
66179          *
66180          * _.isObjectLike(null);
66181          * // => false
66182          */
66183         function isObjectLike(value) {
66184           return value != null && typeof value == 'object';
66185         }
66186
66187         /** `Object#toString` result references. */
66188         var symbolTag = '[object Symbol]';
66189
66190         /**
66191          * Checks if `value` is classified as a `Symbol` primitive or object.
66192          *
66193          * @static
66194          * @memberOf _
66195          * @since 4.0.0
66196          * @category Lang
66197          * @param {*} value The value to check.
66198          * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
66199          * @example
66200          *
66201          * _.isSymbol(Symbol.iterator);
66202          * // => true
66203          *
66204          * _.isSymbol('abc');
66205          * // => false
66206          */
66207         function isSymbol$3(value) {
66208           return typeof value == 'symbol' ||
66209             (isObjectLike(value) && baseGetTag(value) == symbolTag);
66210         }
66211
66212         /** Used as references for various `Number` constants. */
66213         var NAN = 0 / 0;
66214
66215         /** Used to match leading and trailing whitespace. */
66216         var reTrim = /^\s+|\s+$/g;
66217
66218         /** Used to detect bad signed hexadecimal string values. */
66219         var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
66220
66221         /** Used to detect binary string values. */
66222         var reIsBinary = /^0b[01]+$/i;
66223
66224         /** Used to detect octal string values. */
66225         var reIsOctal = /^0o[0-7]+$/i;
66226
66227         /** Built-in method references without a dependency on `root`. */
66228         var freeParseInt = parseInt;
66229
66230         /**
66231          * Converts `value` to a number.
66232          *
66233          * @static
66234          * @memberOf _
66235          * @since 4.0.0
66236          * @category Lang
66237          * @param {*} value The value to process.
66238          * @returns {number} Returns the number.
66239          * @example
66240          *
66241          * _.toNumber(3.2);
66242          * // => 3.2
66243          *
66244          * _.toNumber(Number.MIN_VALUE);
66245          * // => 5e-324
66246          *
66247          * _.toNumber(Infinity);
66248          * // => Infinity
66249          *
66250          * _.toNumber('3.2');
66251          * // => 3.2
66252          */
66253         function toNumber(value) {
66254           if (typeof value == 'number') {
66255             return value;
66256           }
66257           if (isSymbol$3(value)) {
66258             return NAN;
66259           }
66260           if (isObject$3(value)) {
66261             var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
66262             value = isObject$3(other) ? (other + '') : other;
66263           }
66264           if (typeof value != 'string') {
66265             return value === 0 ? value : +value;
66266           }
66267           value = value.replace(reTrim, '');
66268           var isBinary = reIsBinary.test(value);
66269           return (isBinary || reIsOctal.test(value))
66270             ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
66271             : (reIsBadHex.test(value) ? NAN : +value);
66272         }
66273
66274         /** Error message constants. */
66275         var FUNC_ERROR_TEXT = 'Expected a function';
66276
66277         /* Built-in method references for those with the same name as other `lodash` methods. */
66278         var nativeMax = Math.max,
66279             nativeMin = Math.min;
66280
66281         /**
66282          * Creates a debounced function that delays invoking `func` until after `wait`
66283          * milliseconds have elapsed since the last time the debounced function was
66284          * invoked. The debounced function comes with a `cancel` method to cancel
66285          * delayed `func` invocations and a `flush` method to immediately invoke them.
66286          * Provide `options` to indicate whether `func` should be invoked on the
66287          * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
66288          * with the last arguments provided to the debounced function. Subsequent
66289          * calls to the debounced function return the result of the last `func`
66290          * invocation.
66291          *
66292          * **Note:** If `leading` and `trailing` options are `true`, `func` is
66293          * invoked on the trailing edge of the timeout only if the debounced function
66294          * is invoked more than once during the `wait` timeout.
66295          *
66296          * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
66297          * until to the next tick, similar to `setTimeout` with a timeout of `0`.
66298          *
66299          * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
66300          * for details over the differences between `_.debounce` and `_.throttle`.
66301          *
66302          * @static
66303          * @memberOf _
66304          * @since 0.1.0
66305          * @category Function
66306          * @param {Function} func The function to debounce.
66307          * @param {number} [wait=0] The number of milliseconds to delay.
66308          * @param {Object} [options={}] The options object.
66309          * @param {boolean} [options.leading=false]
66310          *  Specify invoking on the leading edge of the timeout.
66311          * @param {number} [options.maxWait]
66312          *  The maximum time `func` is allowed to be delayed before it's invoked.
66313          * @param {boolean} [options.trailing=true]
66314          *  Specify invoking on the trailing edge of the timeout.
66315          * @returns {Function} Returns the new debounced function.
66316          * @example
66317          *
66318          * // Avoid costly calculations while the window size is in flux.
66319          * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
66320          *
66321          * // Invoke `sendMail` when clicked, debouncing subsequent calls.
66322          * jQuery(element).on('click', _.debounce(sendMail, 300, {
66323          *   'leading': true,
66324          *   'trailing': false
66325          * }));
66326          *
66327          * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
66328          * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
66329          * var source = new EventSource('/stream');
66330          * jQuery(source).on('message', debounced);
66331          *
66332          * // Cancel the trailing debounced invocation.
66333          * jQuery(window).on('popstate', debounced.cancel);
66334          */
66335         function debounce(func, wait, options) {
66336           var lastArgs,
66337               lastThis,
66338               maxWait,
66339               result,
66340               timerId,
66341               lastCallTime,
66342               lastInvokeTime = 0,
66343               leading = false,
66344               maxing = false,
66345               trailing = true;
66346
66347           if (typeof func != 'function') {
66348             throw new TypeError(FUNC_ERROR_TEXT);
66349           }
66350           wait = toNumber(wait) || 0;
66351           if (isObject$3(options)) {
66352             leading = !!options.leading;
66353             maxing = 'maxWait' in options;
66354             maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
66355             trailing = 'trailing' in options ? !!options.trailing : trailing;
66356           }
66357
66358           function invokeFunc(time) {
66359             var args = lastArgs,
66360                 thisArg = lastThis;
66361
66362             lastArgs = lastThis = undefined;
66363             lastInvokeTime = time;
66364             result = func.apply(thisArg, args);
66365             return result;
66366           }
66367
66368           function leadingEdge(time) {
66369             // Reset any `maxWait` timer.
66370             lastInvokeTime = time;
66371             // Start the timer for the trailing edge.
66372             timerId = setTimeout(timerExpired, wait);
66373             // Invoke the leading edge.
66374             return leading ? invokeFunc(time) : result;
66375           }
66376
66377           function remainingWait(time) {
66378             var timeSinceLastCall = time - lastCallTime,
66379                 timeSinceLastInvoke = time - lastInvokeTime,
66380                 timeWaiting = wait - timeSinceLastCall;
66381
66382             return maxing
66383               ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
66384               : timeWaiting;
66385           }
66386
66387           function shouldInvoke(time) {
66388             var timeSinceLastCall = time - lastCallTime,
66389                 timeSinceLastInvoke = time - lastInvokeTime;
66390
66391             // Either this is the first call, activity has stopped and we're at the
66392             // trailing edge, the system time has gone backwards and we're treating
66393             // it as the trailing edge, or we've hit the `maxWait` limit.
66394             return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
66395               (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
66396           }
66397
66398           function timerExpired() {
66399             var time = now$1();
66400             if (shouldInvoke(time)) {
66401               return trailingEdge(time);
66402             }
66403             // Restart the timer.
66404             timerId = setTimeout(timerExpired, remainingWait(time));
66405           }
66406
66407           function trailingEdge(time) {
66408             timerId = undefined;
66409
66410             // Only invoke if we have `lastArgs` which means `func` has been
66411             // debounced at least once.
66412             if (trailing && lastArgs) {
66413               return invokeFunc(time);
66414             }
66415             lastArgs = lastThis = undefined;
66416             return result;
66417           }
66418
66419           function cancel() {
66420             if (timerId !== undefined) {
66421               clearTimeout(timerId);
66422             }
66423             lastInvokeTime = 0;
66424             lastArgs = lastCallTime = lastThis = timerId = undefined;
66425           }
66426
66427           function flush() {
66428             return timerId === undefined ? result : trailingEdge(now$1());
66429           }
66430
66431           function debounced() {
66432             var time = now$1(),
66433                 isInvoking = shouldInvoke(time);
66434
66435             lastArgs = arguments;
66436             lastThis = this;
66437             lastCallTime = time;
66438
66439             if (isInvoking) {
66440               if (timerId === undefined) {
66441                 return leadingEdge(lastCallTime);
66442               }
66443               if (maxing) {
66444                 // Handle invocations in a tight loop.
66445                 clearTimeout(timerId);
66446                 timerId = setTimeout(timerExpired, wait);
66447                 return invokeFunc(lastCallTime);
66448               }
66449             }
66450             if (timerId === undefined) {
66451               timerId = setTimeout(timerExpired, wait);
66452             }
66453             return result;
66454           }
66455           debounced.cancel = cancel;
66456           debounced.flush = flush;
66457           return debounced;
66458         }
66459
66460         /** Error message constants. */
66461         var FUNC_ERROR_TEXT$1 = 'Expected a function';
66462
66463         /**
66464          * Creates a throttled function that only invokes `func` at most once per
66465          * every `wait` milliseconds. The throttled function comes with a `cancel`
66466          * method to cancel delayed `func` invocations and a `flush` method to
66467          * immediately invoke them. Provide `options` to indicate whether `func`
66468          * should be invoked on the leading and/or trailing edge of the `wait`
66469          * timeout. The `func` is invoked with the last arguments provided to the
66470          * throttled function. Subsequent calls to the throttled function return the
66471          * result of the last `func` invocation.
66472          *
66473          * **Note:** If `leading` and `trailing` options are `true`, `func` is
66474          * invoked on the trailing edge of the timeout only if the throttled function
66475          * is invoked more than once during the `wait` timeout.
66476          *
66477          * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
66478          * until to the next tick, similar to `setTimeout` with a timeout of `0`.
66479          *
66480          * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
66481          * for details over the differences between `_.throttle` and `_.debounce`.
66482          *
66483          * @static
66484          * @memberOf _
66485          * @since 0.1.0
66486          * @category Function
66487          * @param {Function} func The function to throttle.
66488          * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
66489          * @param {Object} [options={}] The options object.
66490          * @param {boolean} [options.leading=true]
66491          *  Specify invoking on the leading edge of the timeout.
66492          * @param {boolean} [options.trailing=true]
66493          *  Specify invoking on the trailing edge of the timeout.
66494          * @returns {Function} Returns the new throttled function.
66495          * @example
66496          *
66497          * // Avoid excessively updating the position while scrolling.
66498          * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
66499          *
66500          * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
66501          * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
66502          * jQuery(element).on('click', throttled);
66503          *
66504          * // Cancel the trailing throttled invocation.
66505          * jQuery(window).on('popstate', throttled.cancel);
66506          */
66507         function throttle(func, wait, options) {
66508           var leading = true,
66509               trailing = true;
66510
66511           if (typeof func != 'function') {
66512             throw new TypeError(FUNC_ERROR_TEXT$1);
66513           }
66514           if (isObject$3(options)) {
66515             leading = 'leading' in options ? !!options.leading : leading;
66516             trailing = 'trailing' in options ? !!options.trailing : trailing;
66517           }
66518           return debounce(func, wait, {
66519             'leading': leading,
66520             'maxWait': wait,
66521             'trailing': trailing
66522           });
66523         }
66524
66525         var hashes = createCommonjsModule(function (module, exports) {
66526         /**
66527          * jshashes - https://github.com/h2non/jshashes
66528          * Released under the "New BSD" license
66529          *
66530          * Algorithms specification:
66531          *
66532          * MD5 - http://www.ietf.org/rfc/rfc1321.txt
66533          * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
66534          * SHA1   - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
66535          * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
66536          * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
66537          * HMAC - http://www.ietf.org/rfc/rfc2104.txt
66538          */
66539         (function() {
66540           var Hashes;
66541
66542           function utf8Encode(str) {
66543             var x, y, output = '',
66544               i = -1,
66545               l;
66546
66547             if (str && str.length) {
66548               l = str.length;
66549               while ((i += 1) < l) {
66550                 /* Decode utf-16 surrogate pairs */
66551                 x = str.charCodeAt(i);
66552                 y = i + 1 < l ? str.charCodeAt(i + 1) : 0;
66553                 if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
66554                   x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
66555                   i += 1;
66556                 }
66557                 /* Encode output as utf-8 */
66558                 if (x <= 0x7F) {
66559                   output += String.fromCharCode(x);
66560                 } else if (x <= 0x7FF) {
66561                   output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F),
66562                     0x80 | (x & 0x3F));
66563                 } else if (x <= 0xFFFF) {
66564                   output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
66565                     0x80 | ((x >>> 6) & 0x3F),
66566                     0x80 | (x & 0x3F));
66567                 } else if (x <= 0x1FFFFF) {
66568                   output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
66569                     0x80 | ((x >>> 12) & 0x3F),
66570                     0x80 | ((x >>> 6) & 0x3F),
66571                     0x80 | (x & 0x3F));
66572                 }
66573               }
66574             }
66575             return output;
66576           }
66577
66578           function utf8Decode(str) {
66579             var i, ac, c1, c2, c3, arr = [],
66580               l;
66581             i = ac = c1 = c2 = c3 = 0;
66582
66583             if (str && str.length) {
66584               l = str.length;
66585               str += '';
66586
66587               while (i < l) {
66588                 c1 = str.charCodeAt(i);
66589                 ac += 1;
66590                 if (c1 < 128) {
66591                   arr[ac] = String.fromCharCode(c1);
66592                   i += 1;
66593                 } else if (c1 > 191 && c1 < 224) {
66594                   c2 = str.charCodeAt(i + 1);
66595                   arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
66596                   i += 2;
66597                 } else {
66598                   c2 = str.charCodeAt(i + 1);
66599                   c3 = str.charCodeAt(i + 2);
66600                   arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
66601                   i += 3;
66602                 }
66603               }
66604             }
66605             return arr.join('');
66606           }
66607
66608           /**
66609            * Add integers, wrapping at 2^32. This uses 16-bit operations internally
66610            * to work around bugs in some JS interpreters.
66611            */
66612
66613           function safe_add(x, y) {
66614             var lsw = (x & 0xFFFF) + (y & 0xFFFF),
66615               msw = (x >> 16) + (y >> 16) + (lsw >> 16);
66616             return (msw << 16) | (lsw & 0xFFFF);
66617           }
66618
66619           /**
66620            * Bitwise rotate a 32-bit number to the left.
66621            */
66622
66623           function bit_rol(num, cnt) {
66624             return (num << cnt) | (num >>> (32 - cnt));
66625           }
66626
66627           /**
66628            * Convert a raw string to a hex string
66629            */
66630
66631           function rstr2hex(input, hexcase) {
66632             var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef',
66633               output = '',
66634               x, i = 0,
66635               l = input.length;
66636             for (; i < l; i += 1) {
66637               x = input.charCodeAt(i);
66638               output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F);
66639             }
66640             return output;
66641           }
66642
66643           /**
66644            * Convert an array of big-endian words to a string
66645            */
66646
66647           function binb2rstr(input) {
66648             var i, l = input.length * 32,
66649               output = '';
66650             for (i = 0; i < l; i += 8) {
66651               output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF);
66652             }
66653             return output;
66654           }
66655
66656           /**
66657            * Convert an array of little-endian words to a string
66658            */
66659
66660           function binl2rstr(input) {
66661             var i, l = input.length * 32,
66662               output = '';
66663             for (i = 0; i < l; i += 8) {
66664               output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
66665             }
66666             return output;
66667           }
66668
66669           /**
66670            * Convert a raw string to an array of little-endian words
66671            * Characters >255 have their high-byte silently ignored.
66672            */
66673
66674           function rstr2binl(input) {
66675             var i, l = input.length * 8,
66676               output = Array(input.length >> 2),
66677               lo = output.length;
66678             for (i = 0; i < lo; i += 1) {
66679               output[i] = 0;
66680             }
66681             for (i = 0; i < l; i += 8) {
66682               output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
66683             }
66684             return output;
66685           }
66686
66687           /**
66688            * Convert a raw string to an array of big-endian words
66689            * Characters >255 have their high-byte silently ignored.
66690            */
66691
66692           function rstr2binb(input) {
66693             var i, l = input.length * 8,
66694               output = Array(input.length >> 2),
66695               lo = output.length;
66696             for (i = 0; i < lo; i += 1) {
66697               output[i] = 0;
66698             }
66699             for (i = 0; i < l; i += 8) {
66700               output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32);
66701             }
66702             return output;
66703           }
66704
66705           /**
66706            * Convert a raw string to an arbitrary string encoding
66707            */
66708
66709           function rstr2any(input, encoding) {
66710             var divisor = encoding.length,
66711               remainders = Array(),
66712               i, q, x, ld, quotient, dividend, output, full_length;
66713
66714             /* Convert to an array of 16-bit big-endian values, forming the dividend */
66715             dividend = Array(Math.ceil(input.length / 2));
66716             ld = dividend.length;
66717             for (i = 0; i < ld; i += 1) {
66718               dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
66719             }
66720
66721             /**
66722              * Repeatedly perform a long division. The binary array forms the dividend,
66723              * the length of the encoding is the divisor. Once computed, the quotient
66724              * forms the dividend for the next step. We stop when the dividend is zerHashes.
66725              * All remainders are stored for later use.
66726              */
66727             while (dividend.length > 0) {
66728               quotient = Array();
66729               x = 0;
66730               for (i = 0; i < dividend.length; i += 1) {
66731                 x = (x << 16) + dividend[i];
66732                 q = Math.floor(x / divisor);
66733                 x -= q * divisor;
66734                 if (quotient.length > 0 || q > 0) {
66735                   quotient[quotient.length] = q;
66736                 }
66737               }
66738               remainders[remainders.length] = x;
66739               dividend = quotient;
66740             }
66741
66742             /* Convert the remainders to the output string */
66743             output = '';
66744             for (i = remainders.length - 1; i >= 0; i--) {
66745               output += encoding.charAt(remainders[i]);
66746             }
66747
66748             /* Append leading zero equivalents */
66749             full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2)));
66750             for (i = output.length; i < full_length; i += 1) {
66751               output = encoding[0] + output;
66752             }
66753             return output;
66754           }
66755
66756           /**
66757            * Convert a raw string to a base-64 string
66758            */
66759
66760           function rstr2b64(input, b64pad) {
66761             var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
66762               output = '',
66763               len = input.length,
66764               i, j, triplet;
66765             b64pad = b64pad || '=';
66766             for (i = 0; i < len; i += 3) {
66767               triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
66768               for (j = 0; j < 4; j += 1) {
66769                 if (i * 8 + j * 6 > input.length * 8) {
66770                   output += b64pad;
66771                 } else {
66772                   output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
66773                 }
66774               }
66775             }
66776             return output;
66777           }
66778
66779           Hashes = {
66780             /**
66781              * @property {String} version
66782              * @readonly
66783              */
66784             VERSION: '1.0.6',
66785             /**
66786              * @member Hashes
66787              * @class Base64
66788              * @constructor
66789              */
66790             Base64: function() {
66791               // private properties
66792               var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
66793                 pad = '=', // default pad according with the RFC standard
66794                 utf8 = true; // by default enable UTF-8 support encoding
66795
66796               // public method for encoding
66797               this.encode = function(input) {
66798                 var i, j, triplet,
66799                   output = '',
66800                   len = input.length;
66801
66802                 pad = pad || '=';
66803                 input = (utf8) ? utf8Encode(input) : input;
66804
66805                 for (i = 0; i < len; i += 3) {
66806                   triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
66807                   for (j = 0; j < 4; j += 1) {
66808                     if (i * 8 + j * 6 > len * 8) {
66809                       output += pad;
66810                     } else {
66811                       output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
66812                     }
66813                   }
66814                 }
66815                 return output;
66816               };
66817
66818               // public method for decoding
66819               this.decode = function(input) {
66820                 // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
66821                 var i, o1, o2, o3, h1, h2, h3, h4, bits, ac,
66822                   dec = '',
66823                   arr = [];
66824                 if (!input) {
66825                   return input;
66826                 }
66827
66828                 i = ac = 0;
66829                 input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '='
66830                 //input += '';
66831
66832                 do { // unpack four hexets into three octets using index points in b64
66833                   h1 = tab.indexOf(input.charAt(i += 1));
66834                   h2 = tab.indexOf(input.charAt(i += 1));
66835                   h3 = tab.indexOf(input.charAt(i += 1));
66836                   h4 = tab.indexOf(input.charAt(i += 1));
66837
66838                   bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
66839
66840                   o1 = bits >> 16 & 0xff;
66841                   o2 = bits >> 8 & 0xff;
66842                   o3 = bits & 0xff;
66843                   ac += 1;
66844
66845                   if (h3 === 64) {
66846                     arr[ac] = String.fromCharCode(o1);
66847                   } else if (h4 === 64) {
66848                     arr[ac] = String.fromCharCode(o1, o2);
66849                   } else {
66850                     arr[ac] = String.fromCharCode(o1, o2, o3);
66851                   }
66852                 } while (i < input.length);
66853
66854                 dec = arr.join('');
66855                 dec = (utf8) ? utf8Decode(dec) : dec;
66856
66857                 return dec;
66858               };
66859
66860               // set custom pad string
66861               this.setPad = function(str) {
66862                 pad = str || pad;
66863                 return this;
66864               };
66865               // set custom tab string characters
66866               this.setTab = function(str) {
66867                 tab = str || tab;
66868                 return this;
66869               };
66870               this.setUTF8 = function(bool) {
66871                 if (typeof bool === 'boolean') {
66872                   utf8 = bool;
66873                 }
66874                 return this;
66875               };
66876             },
66877
66878             /**
66879              * CRC-32 calculation
66880              * @member Hashes
66881              * @method CRC32
66882              * @static
66883              * @param {String} str Input String
66884              * @return {String}
66885              */
66886             CRC32: function(str) {
66887               var crc = 0,
66888                 x = 0,
66889                 y = 0,
66890                 table, i, iTop;
66891               str = utf8Encode(str);
66892
66893               table = [
66894                 '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ',
66895                 '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ',
66896                 '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ',
66897                 '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ',
66898                 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ',
66899                 '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ',
66900                 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ',
66901                 '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ',
66902                 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ',
66903                 '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ',
66904                 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ',
66905                 '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ',
66906                 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ',
66907                 '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ',
66908                 '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ',
66909                 '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ',
66910                 '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ',
66911                 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ',
66912                 '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ',
66913                 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ',
66914                 '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ',
66915                 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ',
66916                 '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ',
66917                 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ',
66918                 '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ',
66919                 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D'
66920               ].join('');
66921
66922               crc = crc ^ (-1);
66923               for (i = 0, iTop = str.length; i < iTop; i += 1) {
66924                 y = (crc ^ str.charCodeAt(i)) & 0xFF;
66925                 x = '0x' + table.substr(y * 9, 8);
66926                 crc = (crc >>> 8) ^ x;
66927               }
66928               // always return a positive number (that's what >>> 0 does)
66929               return (crc ^ (-1)) >>> 0;
66930             },
66931             /**
66932              * @member Hashes
66933              * @class MD5
66934              * @constructor
66935              * @param {Object} [config]
66936              *
66937              * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
66938              * Digest Algorithm, as defined in RFC 1321.
66939              * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
66940              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
66941              * See <http://pajhome.org.uk/crypt/md5> for more infHashes.
66942              */
66943             MD5: function(options) {
66944               /**
66945                * Private config properties. You may need to tweak these to be compatible with
66946                * the server-side, but the defaults work in most cases.
66947                * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
66948                */
66949               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
66950                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
66951                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
66952
66953               // privileged (public) methods
66954               this.hex = function(s) {
66955                 return rstr2hex(rstr(s), hexcase);
66956               };
66957               this.b64 = function(s) {
66958                 return rstr2b64(rstr(s), b64pad);
66959               };
66960               this.any = function(s, e) {
66961                 return rstr2any(rstr(s), e);
66962               };
66963               this.raw = function(s) {
66964                 return rstr(s);
66965               };
66966               this.hex_hmac = function(k, d) {
66967                 return rstr2hex(rstr_hmac(k, d), hexcase);
66968               };
66969               this.b64_hmac = function(k, d) {
66970                 return rstr2b64(rstr_hmac(k, d), b64pad);
66971               };
66972               this.any_hmac = function(k, d, e) {
66973                 return rstr2any(rstr_hmac(k, d), e);
66974               };
66975               /**
66976                * Perform a simple self-test to see if the VM is working
66977                * @return {String} Hexadecimal hash sample
66978                */
66979               this.vm_test = function() {
66980                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
66981               };
66982               /**
66983                * Enable/disable uppercase hexadecimal returned string
66984                * @param {Boolean}
66985                * @return {Object} this
66986                */
66987               this.setUpperCase = function(a) {
66988                 if (typeof a === 'boolean') {
66989                   hexcase = a;
66990                 }
66991                 return this;
66992               };
66993               /**
66994                * Defines a base64 pad string
66995                * @param {String} Pad
66996                * @return {Object} this
66997                */
66998               this.setPad = function(a) {
66999                 b64pad = a || b64pad;
67000                 return this;
67001               };
67002               /**
67003                * Defines a base64 pad string
67004                * @param {Boolean}
67005                * @return {Object} [this]
67006                */
67007               this.setUTF8 = function(a) {
67008                 if (typeof a === 'boolean') {
67009                   utf8 = a;
67010                 }
67011                 return this;
67012               };
67013
67014               // private methods
67015
67016               /**
67017                * Calculate the MD5 of a raw string
67018                */
67019
67020               function rstr(s) {
67021                 s = (utf8) ? utf8Encode(s) : s;
67022                 return binl2rstr(binl(rstr2binl(s), s.length * 8));
67023               }
67024
67025               /**
67026                * Calculate the HMAC-MD5, of a key and some data (raw strings)
67027                */
67028
67029               function rstr_hmac(key, data) {
67030                 var bkey, ipad, opad, hash, i;
67031
67032                 key = (utf8) ? utf8Encode(key) : key;
67033                 data = (utf8) ? utf8Encode(data) : data;
67034                 bkey = rstr2binl(key);
67035                 if (bkey.length > 16) {
67036                   bkey = binl(bkey, key.length * 8);
67037                 }
67038
67039                 ipad = Array(16), opad = Array(16);
67040                 for (i = 0; i < 16; i += 1) {
67041                   ipad[i] = bkey[i] ^ 0x36363636;
67042                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
67043                 }
67044                 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
67045                 return binl2rstr(binl(opad.concat(hash), 512 + 128));
67046               }
67047
67048               /**
67049                * Calculate the MD5 of an array of little-endian words, and a bit length.
67050                */
67051
67052               function binl(x, len) {
67053                 var i, olda, oldb, oldc, oldd,
67054                   a = 1732584193,
67055                   b = -271733879,
67056                   c = -1732584194,
67057                   d = 271733878;
67058
67059                 /* append padding */
67060                 x[len >> 5] |= 0x80 << ((len) % 32);
67061                 x[(((len + 64) >>> 9) << 4) + 14] = len;
67062
67063                 for (i = 0; i < x.length; i += 16) {
67064                   olda = a;
67065                   oldb = b;
67066                   oldc = c;
67067                   oldd = d;
67068
67069                   a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
67070                   d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
67071                   c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
67072                   b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
67073                   a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
67074                   d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
67075                   c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
67076                   b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
67077                   a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
67078                   d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
67079                   c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
67080                   b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
67081                   a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
67082                   d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
67083                   c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
67084                   b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
67085
67086                   a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
67087                   d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
67088                   c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
67089                   b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
67090                   a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
67091                   d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
67092                   c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
67093                   b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
67094                   a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
67095                   d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
67096                   c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
67097                   b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
67098                   a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
67099                   d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
67100                   c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
67101                   b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
67102
67103                   a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
67104                   d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
67105                   c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
67106                   b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
67107                   a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
67108                   d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
67109                   c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
67110                   b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
67111                   a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
67112                   d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
67113                   c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
67114                   b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
67115                   a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
67116                   d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
67117                   c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
67118                   b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
67119
67120                   a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
67121                   d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
67122                   c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
67123                   b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
67124                   a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
67125                   d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
67126                   c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
67127                   b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
67128                   a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
67129                   d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
67130                   c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
67131                   b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
67132                   a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
67133                   d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
67134                   c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
67135                   b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
67136
67137                   a = safe_add(a, olda);
67138                   b = safe_add(b, oldb);
67139                   c = safe_add(c, oldc);
67140                   d = safe_add(d, oldd);
67141                 }
67142                 return Array(a, b, c, d);
67143               }
67144
67145               /**
67146                * These functions implement the four basic operations the algorithm uses.
67147                */
67148
67149               function md5_cmn(q, a, b, x, s, t) {
67150                 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
67151               }
67152
67153               function md5_ff(a, b, c, d, x, s, t) {
67154                 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
67155               }
67156
67157               function md5_gg(a, b, c, d, x, s, t) {
67158                 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
67159               }
67160
67161               function md5_hh(a, b, c, d, x, s, t) {
67162                 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
67163               }
67164
67165               function md5_ii(a, b, c, d, x, s, t) {
67166                 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
67167               }
67168             },
67169             /**
67170              * @member Hashes
67171              * @class Hashes.SHA1
67172              * @param {Object} [config]
67173              * @constructor
67174              *
67175              * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1
67176              * Version 2.2 Copyright Paul Johnston 2000 - 2009.
67177              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
67178              * See http://pajhome.org.uk/crypt/md5 for details.
67179              */
67180             SHA1: function(options) {
67181               /**
67182                * Private config properties. You may need to tweak these to be compatible with
67183                * the server-side, but the defaults work in most cases.
67184                * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
67185                */
67186               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
67187                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
67188                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
67189
67190               // public methods
67191               this.hex = function(s) {
67192                 return rstr2hex(rstr(s), hexcase);
67193               };
67194               this.b64 = function(s) {
67195                 return rstr2b64(rstr(s), b64pad);
67196               };
67197               this.any = function(s, e) {
67198                 return rstr2any(rstr(s), e);
67199               };
67200               this.raw = function(s) {
67201                 return rstr(s);
67202               };
67203               this.hex_hmac = function(k, d) {
67204                 return rstr2hex(rstr_hmac(k, d));
67205               };
67206               this.b64_hmac = function(k, d) {
67207                 return rstr2b64(rstr_hmac(k, d), b64pad);
67208               };
67209               this.any_hmac = function(k, d, e) {
67210                 return rstr2any(rstr_hmac(k, d), e);
67211               };
67212               /**
67213                * Perform a simple self-test to see if the VM is working
67214                * @return {String} Hexadecimal hash sample
67215                * @public
67216                */
67217               this.vm_test = function() {
67218                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
67219               };
67220               /**
67221                * @description Enable/disable uppercase hexadecimal returned string
67222                * @param {boolean}
67223                * @return {Object} this
67224                * @public
67225                */
67226               this.setUpperCase = function(a) {
67227                 if (typeof a === 'boolean') {
67228                   hexcase = a;
67229                 }
67230                 return this;
67231               };
67232               /**
67233                * @description Defines a base64 pad string
67234                * @param {string} Pad
67235                * @return {Object} this
67236                * @public
67237                */
67238               this.setPad = function(a) {
67239                 b64pad = a || b64pad;
67240                 return this;
67241               };
67242               /**
67243                * @description Defines a base64 pad string
67244                * @param {boolean}
67245                * @return {Object} this
67246                * @public
67247                */
67248               this.setUTF8 = function(a) {
67249                 if (typeof a === 'boolean') {
67250                   utf8 = a;
67251                 }
67252                 return this;
67253               };
67254
67255               // private methods
67256
67257               /**
67258                * Calculate the SHA-512 of a raw string
67259                */
67260
67261               function rstr(s) {
67262                 s = (utf8) ? utf8Encode(s) : s;
67263                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
67264               }
67265
67266               /**
67267                * Calculate the HMAC-SHA1 of a key and some data (raw strings)
67268                */
67269
67270               function rstr_hmac(key, data) {
67271                 var bkey, ipad, opad, i, hash;
67272                 key = (utf8) ? utf8Encode(key) : key;
67273                 data = (utf8) ? utf8Encode(data) : data;
67274                 bkey = rstr2binb(key);
67275
67276                 if (bkey.length > 16) {
67277                   bkey = binb(bkey, key.length * 8);
67278                 }
67279                 ipad = Array(16), opad = Array(16);
67280                 for (i = 0; i < 16; i += 1) {
67281                   ipad[i] = bkey[i] ^ 0x36363636;
67282                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
67283                 }
67284                 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
67285                 return binb2rstr(binb(opad.concat(hash), 512 + 160));
67286               }
67287
67288               /**
67289                * Calculate the SHA-1 of an array of big-endian words, and a bit length
67290                */
67291
67292               function binb(x, len) {
67293                 var i, j, t, olda, oldb, oldc, oldd, olde,
67294                   w = Array(80),
67295                   a = 1732584193,
67296                   b = -271733879,
67297                   c = -1732584194,
67298                   d = 271733878,
67299                   e = -1009589776;
67300
67301                 /* append padding */
67302                 x[len >> 5] |= 0x80 << (24 - len % 32);
67303                 x[((len + 64 >> 9) << 4) + 15] = len;
67304
67305                 for (i = 0; i < x.length; i += 16) {
67306                   olda = a;
67307                   oldb = b;
67308                   oldc = c;
67309                   oldd = d;
67310                   olde = e;
67311
67312                   for (j = 0; j < 80; j += 1) {
67313                     if (j < 16) {
67314                       w[j] = x[i + j];
67315                     } else {
67316                       w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
67317                     }
67318                     t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)),
67319                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
67320                     e = d;
67321                     d = c;
67322                     c = bit_rol(b, 30);
67323                     b = a;
67324                     a = t;
67325                   }
67326
67327                   a = safe_add(a, olda);
67328                   b = safe_add(b, oldb);
67329                   c = safe_add(c, oldc);
67330                   d = safe_add(d, oldd);
67331                   e = safe_add(e, olde);
67332                 }
67333                 return Array(a, b, c, d, e);
67334               }
67335
67336               /**
67337                * Perform the appropriate triplet combination function for the current
67338                * iteration
67339                */
67340
67341               function sha1_ft(t, b, c, d) {
67342                 if (t < 20) {
67343                   return (b & c) | ((~b) & d);
67344                 }
67345                 if (t < 40) {
67346                   return b ^ c ^ d;
67347                 }
67348                 if (t < 60) {
67349                   return (b & c) | (b & d) | (c & d);
67350                 }
67351                 return b ^ c ^ d;
67352               }
67353
67354               /**
67355                * Determine the appropriate additive constant for the current iteration
67356                */
67357
67358               function sha1_kt(t) {
67359                 return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
67360                   (t < 60) ? -1894007588 : -899497514;
67361               }
67362             },
67363             /**
67364              * @class Hashes.SHA256
67365              * @param {config}
67366              *
67367              * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2
67368              * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009.
67369              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
67370              * See http://pajhome.org.uk/crypt/md5 for details.
67371              * Also http://anmar.eu.org/projects/jssha2/
67372              */
67373             SHA256: function(options) {
67374               /**
67375                * Private properties configuration variables. You may need to tweak these to be compatible with
67376                * the server-side, but the defaults work in most cases.
67377                * @see this.setUpperCase() method
67378                * @see this.setPad() method
67379                */
67380               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase  */
67381                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
67382                 /* base-64 pad character. Default '=' for strict RFC compliance   */
67383                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
67384                 /* enable/disable utf8 encoding */
67385                 sha256_K;
67386
67387               /* privileged (public) methods */
67388               this.hex = function(s) {
67389                 return rstr2hex(rstr(s, utf8));
67390               };
67391               this.b64 = function(s) {
67392                 return rstr2b64(rstr(s, utf8), b64pad);
67393               };
67394               this.any = function(s, e) {
67395                 return rstr2any(rstr(s, utf8), e);
67396               };
67397               this.raw = function(s) {
67398                 return rstr(s, utf8);
67399               };
67400               this.hex_hmac = function(k, d) {
67401                 return rstr2hex(rstr_hmac(k, d));
67402               };
67403               this.b64_hmac = function(k, d) {
67404                 return rstr2b64(rstr_hmac(k, d), b64pad);
67405               };
67406               this.any_hmac = function(k, d, e) {
67407                 return rstr2any(rstr_hmac(k, d), e);
67408               };
67409               /**
67410                * Perform a simple self-test to see if the VM is working
67411                * @return {String} Hexadecimal hash sample
67412                * @public
67413                */
67414               this.vm_test = function() {
67415                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
67416               };
67417               /**
67418                * Enable/disable uppercase hexadecimal returned string
67419                * @param {boolean}
67420                * @return {Object} this
67421                * @public
67422                */
67423               this.setUpperCase = function(a) {
67424                 if (typeof a === 'boolean') {
67425                   hexcase = a;
67426                 }
67427                 return this;
67428               };
67429               /**
67430                * @description Defines a base64 pad string
67431                * @param {string} Pad
67432                * @return {Object} this
67433                * @public
67434                */
67435               this.setPad = function(a) {
67436                 b64pad = a || b64pad;
67437                 return this;
67438               };
67439               /**
67440                * Defines a base64 pad string
67441                * @param {boolean}
67442                * @return {Object} this
67443                * @public
67444                */
67445               this.setUTF8 = function(a) {
67446                 if (typeof a === 'boolean') {
67447                   utf8 = a;
67448                 }
67449                 return this;
67450               };
67451
67452               // private methods
67453
67454               /**
67455                * Calculate the SHA-512 of a raw string
67456                */
67457
67458               function rstr(s, utf8) {
67459                 s = (utf8) ? utf8Encode(s) : s;
67460                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
67461               }
67462
67463               /**
67464                * Calculate the HMAC-sha256 of a key and some data (raw strings)
67465                */
67466
67467               function rstr_hmac(key, data) {
67468                 key = (utf8) ? utf8Encode(key) : key;
67469                 data = (utf8) ? utf8Encode(data) : data;
67470                 var hash, i = 0,
67471                   bkey = rstr2binb(key),
67472                   ipad = Array(16),
67473                   opad = Array(16);
67474
67475                 if (bkey.length > 16) {
67476                   bkey = binb(bkey, key.length * 8);
67477                 }
67478
67479                 for (; i < 16; i += 1) {
67480                   ipad[i] = bkey[i] ^ 0x36363636;
67481                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
67482                 }
67483
67484                 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
67485                 return binb2rstr(binb(opad.concat(hash), 512 + 256));
67486               }
67487
67488               /*
67489                * Main sha256 function, with its support functions
67490                */
67491
67492               function sha256_S(X, n) {
67493                 return (X >>> n) | (X << (32 - n));
67494               }
67495
67496               function sha256_R(X, n) {
67497                 return (X >>> n);
67498               }
67499
67500               function sha256_Ch(x, y, z) {
67501                 return ((x & y) ^ ((~x) & z));
67502               }
67503
67504               function sha256_Maj(x, y, z) {
67505                 return ((x & y) ^ (x & z) ^ (y & z));
67506               }
67507
67508               function sha256_Sigma0256(x) {
67509                 return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22));
67510               }
67511
67512               function sha256_Sigma1256(x) {
67513                 return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25));
67514               }
67515
67516               function sha256_Gamma0256(x) {
67517                 return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3));
67518               }
67519
67520               function sha256_Gamma1256(x) {
67521                 return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10));
67522               }
67523
67524               sha256_K = [
67525                 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987,
67526                 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522,
67527                 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585,
67528                 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291,
67529                 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344,
67530                 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218,
67531                 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998
67532               ];
67533
67534               function binb(m, l) {
67535                 var HASH = [1779033703, -1150833019, 1013904242, -1521486534,
67536                   1359893119, -1694144372, 528734635, 1541459225
67537                 ];
67538                 var W = new Array(64);
67539                 var a, b, c, d, e, f, g, h;
67540                 var i, j, T1, T2;
67541
67542                 /* append padding */
67543                 m[l >> 5] |= 0x80 << (24 - l % 32);
67544                 m[((l + 64 >> 9) << 4) + 15] = l;
67545
67546                 for (i = 0; i < m.length; i += 16) {
67547                   a = HASH[0];
67548                   b = HASH[1];
67549                   c = HASH[2];
67550                   d = HASH[3];
67551                   e = HASH[4];
67552                   f = HASH[5];
67553                   g = HASH[6];
67554                   h = HASH[7];
67555
67556                   for (j = 0; j < 64; j += 1) {
67557                     if (j < 16) {
67558                       W[j] = m[j + i];
67559                     } else {
67560                       W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]),
67561                         sha256_Gamma0256(W[j - 15])), W[j - 16]);
67562                     }
67563
67564                     T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)),
67565                       sha256_K[j]), W[j]);
67566                     T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c));
67567                     h = g;
67568                     g = f;
67569                     f = e;
67570                     e = safe_add(d, T1);
67571                     d = c;
67572                     c = b;
67573                     b = a;
67574                     a = safe_add(T1, T2);
67575                   }
67576
67577                   HASH[0] = safe_add(a, HASH[0]);
67578                   HASH[1] = safe_add(b, HASH[1]);
67579                   HASH[2] = safe_add(c, HASH[2]);
67580                   HASH[3] = safe_add(d, HASH[3]);
67581                   HASH[4] = safe_add(e, HASH[4]);
67582                   HASH[5] = safe_add(f, HASH[5]);
67583                   HASH[6] = safe_add(g, HASH[6]);
67584                   HASH[7] = safe_add(h, HASH[7]);
67585                 }
67586                 return HASH;
67587               }
67588
67589             },
67590
67591             /**
67592              * @class Hashes.SHA512
67593              * @param {config}
67594              *
67595              * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2
67596              * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009.
67597              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
67598              * See http://pajhome.org.uk/crypt/md5 for details.
67599              */
67600             SHA512: function(options) {
67601               /**
67602                * Private properties configuration variables. You may need to tweak these to be compatible with
67603                * the server-side, but the defaults work in most cases.
67604                * @see this.setUpperCase() method
67605                * @see this.setPad() method
67606                */
67607               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
67608                 /* hexadecimal output case format. false - lowercase; true - uppercase  */
67609                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
67610                 /* base-64 pad character. Default '=' for strict RFC compliance   */
67611                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
67612                 /* enable/disable utf8 encoding */
67613                 sha512_k;
67614
67615               /* privileged (public) methods */
67616               this.hex = function(s) {
67617                 return rstr2hex(rstr(s));
67618               };
67619               this.b64 = function(s) {
67620                 return rstr2b64(rstr(s), b64pad);
67621               };
67622               this.any = function(s, e) {
67623                 return rstr2any(rstr(s), e);
67624               };
67625               this.raw = function(s) {
67626                 return rstr(s);
67627               };
67628               this.hex_hmac = function(k, d) {
67629                 return rstr2hex(rstr_hmac(k, d));
67630               };
67631               this.b64_hmac = function(k, d) {
67632                 return rstr2b64(rstr_hmac(k, d), b64pad);
67633               };
67634               this.any_hmac = function(k, d, e) {
67635                 return rstr2any(rstr_hmac(k, d), e);
67636               };
67637               /**
67638                * Perform a simple self-test to see if the VM is working
67639                * @return {String} Hexadecimal hash sample
67640                * @public
67641                */
67642               this.vm_test = function() {
67643                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
67644               };
67645               /**
67646                * @description Enable/disable uppercase hexadecimal returned string
67647                * @param {boolean}
67648                * @return {Object} this
67649                * @public
67650                */
67651               this.setUpperCase = function(a) {
67652                 if (typeof a === 'boolean') {
67653                   hexcase = a;
67654                 }
67655                 return this;
67656               };
67657               /**
67658                * @description Defines a base64 pad string
67659                * @param {string} Pad
67660                * @return {Object} this
67661                * @public
67662                */
67663               this.setPad = function(a) {
67664                 b64pad = a || b64pad;
67665                 return this;
67666               };
67667               /**
67668                * @description Defines a base64 pad string
67669                * @param {boolean}
67670                * @return {Object} this
67671                * @public
67672                */
67673               this.setUTF8 = function(a) {
67674                 if (typeof a === 'boolean') {
67675                   utf8 = a;
67676                 }
67677                 return this;
67678               };
67679
67680               /* private methods */
67681
67682               /**
67683                * Calculate the SHA-512 of a raw string
67684                */
67685
67686               function rstr(s) {
67687                 s = (utf8) ? utf8Encode(s) : s;
67688                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
67689               }
67690               /*
67691                * Calculate the HMAC-SHA-512 of a key and some data (raw strings)
67692                */
67693
67694               function rstr_hmac(key, data) {
67695                 key = (utf8) ? utf8Encode(key) : key;
67696                 data = (utf8) ? utf8Encode(data) : data;
67697
67698                 var hash, i = 0,
67699                   bkey = rstr2binb(key),
67700                   ipad = Array(32),
67701                   opad = Array(32);
67702
67703                 if (bkey.length > 32) {
67704                   bkey = binb(bkey, key.length * 8);
67705                 }
67706
67707                 for (; i < 32; i += 1) {
67708                   ipad[i] = bkey[i] ^ 0x36363636;
67709                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
67710                 }
67711
67712                 hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8);
67713                 return binb2rstr(binb(opad.concat(hash), 1024 + 512));
67714               }
67715
67716               /**
67717                * Calculate the SHA-512 of an array of big-endian dwords, and a bit length
67718                */
67719
67720               function binb(x, len) {
67721                 var j, i, l,
67722                   W = new Array(80),
67723                   hash = new Array(16),
67724                   //Initial hash values
67725                   H = [
67726                     new int64(0x6a09e667, -205731576),
67727                     new int64(-1150833019, -2067093701),
67728                     new int64(0x3c6ef372, -23791573),
67729                     new int64(-1521486534, 0x5f1d36f1),
67730                     new int64(0x510e527f, -1377402159),
67731                     new int64(-1694144372, 0x2b3e6c1f),
67732                     new int64(0x1f83d9ab, -79577749),
67733                     new int64(0x5be0cd19, 0x137e2179)
67734                   ],
67735                   T1 = new int64(0, 0),
67736                   T2 = new int64(0, 0),
67737                   a = new int64(0, 0),
67738                   b = new int64(0, 0),
67739                   c = new int64(0, 0),
67740                   d = new int64(0, 0),
67741                   e = new int64(0, 0),
67742                   f = new int64(0, 0),
67743                   g = new int64(0, 0),
67744                   h = new int64(0, 0),
67745                   //Temporary variables not specified by the document
67746                   s0 = new int64(0, 0),
67747                   s1 = new int64(0, 0),
67748                   Ch = new int64(0, 0),
67749                   Maj = new int64(0, 0),
67750                   r1 = new int64(0, 0),
67751                   r2 = new int64(0, 0),
67752                   r3 = new int64(0, 0);
67753
67754                 if (sha512_k === undefined) {
67755                   //SHA512 constants
67756                   sha512_k = [
67757                     new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd),
67758                     new int64(-1245643825, -330482897), new int64(-373957723, -2121671748),
67759                     new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031),
67760                     new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736),
67761                     new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe),
67762                     new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302),
67763                     new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1),
67764                     new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428),
67765                     new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3),
67766                     new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65),
67767                     new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
67768                     new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459),
67769                     new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210),
67770                     new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340),
67771                     new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395),
67772                     new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70),
67773                     new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
67774                     new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473),
67775                     new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8),
67776                     new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b),
67777                     new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023),
67778                     new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30),
67779                     new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910),
67780                     new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
67781                     new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53),
67782                     new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016),
67783                     new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893),
67784                     new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397),
67785                     new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
67786                     new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec),
67787                     new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047),
67788                     new int64(-1090935817, -1295615723), new int64(-965641998, -479046869),
67789                     new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207),
67790                     new int64(-354779690, -840897762), new int64(-176337025, -294727304),
67791                     new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026),
67792                     new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b),
67793                     new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
67794                     new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620),
67795                     new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430),
67796                     new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)
67797                   ];
67798                 }
67799
67800                 for (i = 0; i < 80; i += 1) {
67801                   W[i] = new int64(0, 0);
67802                 }
67803
67804                 // append padding to the source string. The format is described in the FIPS.
67805                 x[len >> 5] |= 0x80 << (24 - (len & 0x1f));
67806                 x[((len + 128 >> 10) << 5) + 31] = len;
67807                 l = x.length;
67808                 for (i = 0; i < l; i += 32) { //32 dwords is the block size
67809                   int64copy(a, H[0]);
67810                   int64copy(b, H[1]);
67811                   int64copy(c, H[2]);
67812                   int64copy(d, H[3]);
67813                   int64copy(e, H[4]);
67814                   int64copy(f, H[5]);
67815                   int64copy(g, H[6]);
67816                   int64copy(h, H[7]);
67817
67818                   for (j = 0; j < 16; j += 1) {
67819                     W[j].h = x[i + 2 * j];
67820                     W[j].l = x[i + 2 * j + 1];
67821                   }
67822
67823                   for (j = 16; j < 80; j += 1) {
67824                     //sigma1
67825                     int64rrot(r1, W[j - 2], 19);
67826                     int64revrrot(r2, W[j - 2], 29);
67827                     int64shr(r3, W[j - 2], 6);
67828                     s1.l = r1.l ^ r2.l ^ r3.l;
67829                     s1.h = r1.h ^ r2.h ^ r3.h;
67830                     //sigma0
67831                     int64rrot(r1, W[j - 15], 1);
67832                     int64rrot(r2, W[j - 15], 8);
67833                     int64shr(r3, W[j - 15], 7);
67834                     s0.l = r1.l ^ r2.l ^ r3.l;
67835                     s0.h = r1.h ^ r2.h ^ r3.h;
67836
67837                     int64add4(W[j], s1, W[j - 7], s0, W[j - 16]);
67838                   }
67839
67840                   for (j = 0; j < 80; j += 1) {
67841                     //Ch
67842                     Ch.l = (e.l & f.l) ^ (~e.l & g.l);
67843                     Ch.h = (e.h & f.h) ^ (~e.h & g.h);
67844
67845                     //Sigma1
67846                     int64rrot(r1, e, 14);
67847                     int64rrot(r2, e, 18);
67848                     int64revrrot(r3, e, 9);
67849                     s1.l = r1.l ^ r2.l ^ r3.l;
67850                     s1.h = r1.h ^ r2.h ^ r3.h;
67851
67852                     //Sigma0
67853                     int64rrot(r1, a, 28);
67854                     int64revrrot(r2, a, 2);
67855                     int64revrrot(r3, a, 7);
67856                     s0.l = r1.l ^ r2.l ^ r3.l;
67857                     s0.h = r1.h ^ r2.h ^ r3.h;
67858
67859                     //Maj
67860                     Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l);
67861                     Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h);
67862
67863                     int64add5(T1, h, s1, Ch, sha512_k[j], W[j]);
67864                     int64add(T2, s0, Maj);
67865
67866                     int64copy(h, g);
67867                     int64copy(g, f);
67868                     int64copy(f, e);
67869                     int64add(e, d, T1);
67870                     int64copy(d, c);
67871                     int64copy(c, b);
67872                     int64copy(b, a);
67873                     int64add(a, T1, T2);
67874                   }
67875                   int64add(H[0], H[0], a);
67876                   int64add(H[1], H[1], b);
67877                   int64add(H[2], H[2], c);
67878                   int64add(H[3], H[3], d);
67879                   int64add(H[4], H[4], e);
67880                   int64add(H[5], H[5], f);
67881                   int64add(H[6], H[6], g);
67882                   int64add(H[7], H[7], h);
67883                 }
67884
67885                 //represent the hash as an array of 32-bit dwords
67886                 for (i = 0; i < 8; i += 1) {
67887                   hash[2 * i] = H[i].h;
67888                   hash[2 * i + 1] = H[i].l;
67889                 }
67890                 return hash;
67891               }
67892
67893               //A constructor for 64-bit numbers
67894
67895               function int64(h, l) {
67896                 this.h = h;
67897                 this.l = l;
67898                 //this.toString = int64toString;
67899               }
67900
67901               //Copies src into dst, assuming both are 64-bit numbers
67902
67903               function int64copy(dst, src) {
67904                 dst.h = src.h;
67905                 dst.l = src.l;
67906               }
67907
67908               //Right-rotates a 64-bit number by shift
67909               //Won't handle cases of shift>=32
67910               //The function revrrot() is for that
67911
67912               function int64rrot(dst, x, shift) {
67913                 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
67914                 dst.h = (x.h >>> shift) | (x.l << (32 - shift));
67915               }
67916
67917               //Reverses the dwords of the source and then rotates right by shift.
67918               //This is equivalent to rotation by 32+shift
67919
67920               function int64revrrot(dst, x, shift) {
67921                 dst.l = (x.h >>> shift) | (x.l << (32 - shift));
67922                 dst.h = (x.l >>> shift) | (x.h << (32 - shift));
67923               }
67924
67925               //Bitwise-shifts right a 64-bit number by shift
67926               //Won't handle shift>=32, but it's never needed in SHA512
67927
67928               function int64shr(dst, x, shift) {
67929                 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
67930                 dst.h = (x.h >>> shift);
67931               }
67932
67933               //Adds two 64-bit numbers
67934               //Like the original implementation, does not rely on 32-bit operations
67935
67936               function int64add(dst, x, y) {
67937                 var w0 = (x.l & 0xffff) + (y.l & 0xffff);
67938                 var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16);
67939                 var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16);
67940                 var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16);
67941                 dst.l = (w0 & 0xffff) | (w1 << 16);
67942                 dst.h = (w2 & 0xffff) | (w3 << 16);
67943               }
67944
67945               //Same, except with 4 addends. Works faster than adding them one by one.
67946
67947               function int64add4(dst, a, b, c, d) {
67948                 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff);
67949                 var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16);
67950                 var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16);
67951                 var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16);
67952                 dst.l = (w0 & 0xffff) | (w1 << 16);
67953                 dst.h = (w2 & 0xffff) | (w3 << 16);
67954               }
67955
67956               //Same, except with 5 addends
67957
67958               function int64add5(dst, a, b, c, d, e) {
67959                 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff),
67960                   w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16),
67961                   w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16),
67962                   w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16);
67963                 dst.l = (w0 & 0xffff) | (w1 << 16);
67964                 dst.h = (w2 & 0xffff) | (w3 << 16);
67965               }
67966             },
67967             /**
67968              * @class Hashes.RMD160
67969              * @constructor
67970              * @param {Object} [config]
67971              *
67972              * A JavaScript implementation of the RIPEMD-160 Algorithm
67973              * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009.
67974              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
67975              * See http://pajhome.org.uk/crypt/md5 for details.
67976              * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/
67977              */
67978             RMD160: function(options) {
67979               /**
67980                * Private properties configuration variables. You may need to tweak these to be compatible with
67981                * the server-side, but the defaults work in most cases.
67982                * @see this.setUpperCase() method
67983                * @see this.setPad() method
67984                */
67985               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
67986                 /* hexadecimal output case format. false - lowercase; true - uppercase  */
67987                 b64pad = (options && typeof options.pad === 'string') ? options.pa : '=',
67988                 /* base-64 pad character. Default '=' for strict RFC compliance   */
67989                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
67990                 /* enable/disable utf8 encoding */
67991                 rmd160_r1 = [
67992                   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
67993                   7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
67994                   3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
67995                   1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
67996                   4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
67997                 ],
67998                 rmd160_r2 = [
67999                   5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
68000                   6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
68001                   15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
68002                   8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
68003                   12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
68004                 ],
68005                 rmd160_s1 = [
68006                   11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
68007                   7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
68008                   11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
68009                   11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
68010                   9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
68011                 ],
68012                 rmd160_s2 = [
68013                   8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
68014                   9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
68015                   9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
68016                   15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
68017                   8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
68018                 ];
68019
68020               /* privileged (public) methods */
68021               this.hex = function(s) {
68022                 return rstr2hex(rstr(s));
68023               };
68024               this.b64 = function(s) {
68025                 return rstr2b64(rstr(s), b64pad);
68026               };
68027               this.any = function(s, e) {
68028                 return rstr2any(rstr(s), e);
68029               };
68030               this.raw = function(s) {
68031                 return rstr(s);
68032               };
68033               this.hex_hmac = function(k, d) {
68034                 return rstr2hex(rstr_hmac(k, d));
68035               };
68036               this.b64_hmac = function(k, d) {
68037                 return rstr2b64(rstr_hmac(k, d), b64pad);
68038               };
68039               this.any_hmac = function(k, d, e) {
68040                 return rstr2any(rstr_hmac(k, d), e);
68041               };
68042               /**
68043                * Perform a simple self-test to see if the VM is working
68044                * @return {String} Hexadecimal hash sample
68045                * @public
68046                */
68047               this.vm_test = function() {
68048                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
68049               };
68050               /**
68051                * @description Enable/disable uppercase hexadecimal returned string
68052                * @param {boolean}
68053                * @return {Object} this
68054                * @public
68055                */
68056               this.setUpperCase = function(a) {
68057                 if (typeof a === 'boolean') {
68058                   hexcase = a;
68059                 }
68060                 return this;
68061               };
68062               /**
68063                * @description Defines a base64 pad string
68064                * @param {string} Pad
68065                * @return {Object} this
68066                * @public
68067                */
68068               this.setPad = function(a) {
68069                 if (typeof a !== 'undefined') {
68070                   b64pad = a;
68071                 }
68072                 return this;
68073               };
68074               /**
68075                * @description Defines a base64 pad string
68076                * @param {boolean}
68077                * @return {Object} this
68078                * @public
68079                */
68080               this.setUTF8 = function(a) {
68081                 if (typeof a === 'boolean') {
68082                   utf8 = a;
68083                 }
68084                 return this;
68085               };
68086
68087               /* private methods */
68088
68089               /**
68090                * Calculate the rmd160 of a raw string
68091                */
68092
68093               function rstr(s) {
68094                 s = (utf8) ? utf8Encode(s) : s;
68095                 return binl2rstr(binl(rstr2binl(s), s.length * 8));
68096               }
68097
68098               /**
68099                * Calculate the HMAC-rmd160 of a key and some data (raw strings)
68100                */
68101
68102               function rstr_hmac(key, data) {
68103                 key = (utf8) ? utf8Encode(key) : key;
68104                 data = (utf8) ? utf8Encode(data) : data;
68105                 var i, hash,
68106                   bkey = rstr2binl(key),
68107                   ipad = Array(16),
68108                   opad = Array(16);
68109
68110                 if (bkey.length > 16) {
68111                   bkey = binl(bkey, key.length * 8);
68112                 }
68113
68114                 for (i = 0; i < 16; i += 1) {
68115                   ipad[i] = bkey[i] ^ 0x36363636;
68116                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
68117                 }
68118                 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
68119                 return binl2rstr(binl(opad.concat(hash), 512 + 160));
68120               }
68121
68122               /**
68123                * Convert an array of little-endian words to a string
68124                */
68125
68126               function binl2rstr(input) {
68127                 var i, output = '',
68128                   l = input.length * 32;
68129                 for (i = 0; i < l; i += 8) {
68130                   output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
68131                 }
68132                 return output;
68133               }
68134
68135               /**
68136                * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length.
68137                */
68138
68139               function binl(x, len) {
68140                 var T, j, i, l,
68141                   h0 = 0x67452301,
68142                   h1 = 0xefcdab89,
68143                   h2 = 0x98badcfe,
68144                   h3 = 0x10325476,
68145                   h4 = 0xc3d2e1f0,
68146                   A1, B1, C1, D1, E1,
68147                   A2, B2, C2, D2, E2;
68148
68149                 /* append padding */
68150                 x[len >> 5] |= 0x80 << (len % 32);
68151                 x[(((len + 64) >>> 9) << 4) + 14] = len;
68152                 l = x.length;
68153
68154                 for (i = 0; i < l; i += 16) {
68155                   A1 = A2 = h0;
68156                   B1 = B2 = h1;
68157                   C1 = C2 = h2;
68158                   D1 = D2 = h3;
68159                   E1 = E2 = h4;
68160                   for (j = 0; j <= 79; j += 1) {
68161                     T = safe_add(A1, rmd160_f(j, B1, C1, D1));
68162                     T = safe_add(T, x[i + rmd160_r1[j]]);
68163                     T = safe_add(T, rmd160_K1(j));
68164                     T = safe_add(bit_rol(T, rmd160_s1[j]), E1);
68165                     A1 = E1;
68166                     E1 = D1;
68167                     D1 = bit_rol(C1, 10);
68168                     C1 = B1;
68169                     B1 = T;
68170                     T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2));
68171                     T = safe_add(T, x[i + rmd160_r2[j]]);
68172                     T = safe_add(T, rmd160_K2(j));
68173                     T = safe_add(bit_rol(T, rmd160_s2[j]), E2);
68174                     A2 = E2;
68175                     E2 = D2;
68176                     D2 = bit_rol(C2, 10);
68177                     C2 = B2;
68178                     B2 = T;
68179                   }
68180
68181                   T = safe_add(h1, safe_add(C1, D2));
68182                   h1 = safe_add(h2, safe_add(D1, E2));
68183                   h2 = safe_add(h3, safe_add(E1, A2));
68184                   h3 = safe_add(h4, safe_add(A1, B2));
68185                   h4 = safe_add(h0, safe_add(B1, C2));
68186                   h0 = T;
68187                 }
68188                 return [h0, h1, h2, h3, h4];
68189               }
68190
68191               // specific algorithm methods
68192
68193               function rmd160_f(j, x, y, z) {
68194                 return (0 <= j && j <= 15) ? (x ^ y ^ z) :
68195                   (16 <= j && j <= 31) ? (x & y) | (~x & z) :
68196                   (32 <= j && j <= 47) ? (x | ~y) ^ z :
68197                   (48 <= j && j <= 63) ? (x & z) | (y & ~z) :
68198                   (64 <= j && j <= 79) ? x ^ (y | ~z) :
68199                   'rmd160_f: j out of range';
68200               }
68201
68202               function rmd160_K1(j) {
68203                 return (0 <= j && j <= 15) ? 0x00000000 :
68204                   (16 <= j && j <= 31) ? 0x5a827999 :
68205                   (32 <= j && j <= 47) ? 0x6ed9eba1 :
68206                   (48 <= j && j <= 63) ? 0x8f1bbcdc :
68207                   (64 <= j && j <= 79) ? 0xa953fd4e :
68208                   'rmd160_K1: j out of range';
68209               }
68210
68211               function rmd160_K2(j) {
68212                 return (0 <= j && j <= 15) ? 0x50a28be6 :
68213                   (16 <= j && j <= 31) ? 0x5c4dd124 :
68214                   (32 <= j && j <= 47) ? 0x6d703ef3 :
68215                   (48 <= j && j <= 63) ? 0x7a6d76e9 :
68216                   (64 <= j && j <= 79) ? 0x00000000 :
68217                   'rmd160_K2: j out of range';
68218               }
68219             }
68220           };
68221
68222           // exposes Hashes
68223           (function(window, undefined$1) {
68224             var freeExports = false;
68225             {
68226               freeExports = exports;
68227               if (exports && typeof commonjsGlobal === 'object' && commonjsGlobal && commonjsGlobal === commonjsGlobal.global) {
68228                 window = commonjsGlobal;
68229               }
68230             }
68231
68232             if (typeof undefined$1 === 'function' && typeof undefined$1.amd === 'object' && undefined$1.amd) {
68233               // define as an anonymous module, so, through path mapping, it can be aliased
68234               undefined$1(function() {
68235                 return Hashes;
68236               });
68237             } else if (freeExports) {
68238               // in Node.js or RingoJS v0.8.0+
68239               if ( module && module.exports === freeExports) {
68240                 module.exports = Hashes;
68241               }
68242               // in Narwhal or RingoJS v0.7.0-
68243               else {
68244                 freeExports.Hashes = Hashes;
68245               }
68246             } else {
68247               // in a browser or Rhino
68248               window.Hashes = Hashes;
68249             }
68250           }(this));
68251         }()); // IIFE
68252         });
68253
68254         var immutable = extend$3;
68255
68256         var hasOwnProperty$3 = Object.prototype.hasOwnProperty;
68257
68258         function extend$3() {
68259             var arguments$1 = arguments;
68260
68261             var target = {};
68262
68263             for (var i = 0; i < arguments.length; i++) {
68264                 var source = arguments$1[i];
68265
68266                 for (var key in source) {
68267                     if (hasOwnProperty$3.call(source, key)) {
68268                         target[key] = source[key];
68269                     }
68270                 }
68271             }
68272
68273             return target
68274         }
68275
68276         var sha1 = new hashes.SHA1();
68277
68278         var ohauth = {};
68279
68280         ohauth.qsString = function(obj) {
68281             return Object.keys(obj).sort().map(function(key) {
68282                 return ohauth.percentEncode(key) + '=' +
68283                     ohauth.percentEncode(obj[key]);
68284             }).join('&');
68285         };
68286
68287         ohauth.stringQs = function(str) {
68288             return str.split('&').filter(function (pair) {
68289                 return pair !== '';
68290             }).reduce(function(obj, pair){
68291                 var parts = pair.split('=');
68292                 obj[decodeURIComponent(parts[0])] = (null === parts[1]) ?
68293                     '' : decodeURIComponent(parts[1]);
68294                 return obj;
68295             }, {});
68296         };
68297
68298         ohauth.rawxhr = function(method, url, data, headers, callback) {
68299             var xhr = new XMLHttpRequest(),
68300                 twoHundred = /^20\d$/;
68301             xhr.onreadystatechange = function() {
68302                 if (4 === xhr.readyState && 0 !== xhr.status) {
68303                     if (twoHundred.test(xhr.status)) { callback(null, xhr); }
68304                     else { return callback(xhr, null); }
68305                 }
68306             };
68307             xhr.onerror = function(e) { return callback(e, null); };
68308             xhr.open(method, url, true);
68309             for (var h in headers) { xhr.setRequestHeader(h, headers[h]); }
68310             xhr.send(data);
68311             return xhr;
68312         };
68313
68314         ohauth.xhr = function(method, url, auth, data, options, callback) {
68315             var headers = (options && options.header) || {
68316                 'Content-Type': 'application/x-www-form-urlencoded'
68317             };
68318             headers.Authorization = 'OAuth ' + ohauth.authHeader(auth);
68319             return ohauth.rawxhr(method, url, data, headers, callback);
68320         };
68321
68322         ohauth.nonce = function() {
68323             for (var o = ''; o.length < 6;) {
68324                 o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)];
68325             }
68326             return o;
68327         };
68328
68329         ohauth.authHeader = function(obj) {
68330             return Object.keys(obj).sort().map(function(key) {
68331                 return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"';
68332             }).join(', ');
68333         };
68334
68335         ohauth.timestamp = function() { return ~~((+new Date()) / 1000); };
68336
68337         ohauth.percentEncode = function(s) {
68338             return encodeURIComponent(s)
68339                 .replace(/\!/g, '%21').replace(/\'/g, '%27')
68340                 .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29');
68341         };
68342
68343         ohauth.baseString = function(method, url, params) {
68344             if (params.oauth_signature) { delete params.oauth_signature; }
68345             return [
68346                 method,
68347                 ohauth.percentEncode(url),
68348                 ohauth.percentEncode(ohauth.qsString(params))].join('&');
68349         };
68350
68351         ohauth.signature = function(oauth_secret, token_secret, baseString) {
68352             return sha1.b64_hmac(
68353                 ohauth.percentEncode(oauth_secret) + '&' +
68354                 ohauth.percentEncode(token_secret),
68355                 baseString);
68356         };
68357
68358         /**
68359          * Takes an options object for configuration (consumer_key,
68360          * consumer_secret, version, signature_method, token, token_secret)
68361          * and returns a function that generates the Authorization header
68362          * for given data.
68363          *
68364          * The returned function takes these parameters:
68365          * - method: GET/POST/...
68366          * - uri: full URI with protocol, port, path and query string
68367          * - extra_params: any extra parameters (that are passed in the POST data),
68368          *   can be an object or a from-urlencoded string.
68369          *
68370          * Returned function returns full OAuth header with "OAuth" string in it.
68371          */
68372
68373         ohauth.headerGenerator = function(options) {
68374             options = options || {};
68375             var consumer_key = options.consumer_key || '',
68376                 consumer_secret = options.consumer_secret || '',
68377                 signature_method = options.signature_method || 'HMAC-SHA1',
68378                 version = options.version || '1.0',
68379                 token = options.token || '',
68380                 token_secret = options.token_secret || '';
68381
68382             return function(method, uri, extra_params) {
68383                 method = method.toUpperCase();
68384                 if (typeof extra_params === 'string' && extra_params.length > 0) {
68385                     extra_params = ohauth.stringQs(extra_params);
68386                 }
68387
68388                 var uri_parts = uri.split('?', 2),
68389                 base_uri = uri_parts[0];
68390
68391                 var query_params = uri_parts.length === 2 ?
68392                     ohauth.stringQs(uri_parts[1]) : {};
68393
68394                 var oauth_params = {
68395                     oauth_consumer_key: consumer_key,
68396                     oauth_signature_method: signature_method,
68397                     oauth_version: version,
68398                     oauth_timestamp: ohauth.timestamp(),
68399                     oauth_nonce: ohauth.nonce()
68400                 };
68401
68402                 if (token) { oauth_params.oauth_token = token; }
68403
68404                 var all_params = immutable({}, oauth_params, query_params, extra_params),
68405                     base_str = ohauth.baseString(method, base_uri, all_params);
68406
68407                 oauth_params.oauth_signature = ohauth.signature(consumer_secret, token_secret, base_str);
68408
68409                 return 'OAuth ' + ohauth.authHeader(oauth_params);
68410             };
68411         };
68412
68413         var ohauth_1 = ohauth;
68414
68415         var resolveUrl = createCommonjsModule(function (module, exports) {
68416         // Copyright 2014 Simon Lydell
68417         // X11 (“MIT”) Licensed. (See LICENSE.)
68418
68419         void (function(root, factory) {
68420           {
68421             module.exports = factory();
68422           }
68423         }(commonjsGlobal, function() {
68424
68425           function resolveUrl(/* ...urls */) {
68426             var arguments$1 = arguments;
68427
68428             var numUrls = arguments.length;
68429
68430             if (numUrls === 0) {
68431               throw new Error("resolveUrl requires at least one argument; got none.")
68432             }
68433
68434             var base = document.createElement("base");
68435             base.href = arguments[0];
68436
68437             if (numUrls === 1) {
68438               return base.href
68439             }
68440
68441             var head = document.getElementsByTagName("head")[0];
68442             head.insertBefore(base, head.firstChild);
68443
68444             var a = document.createElement("a");
68445             var resolved;
68446
68447             for (var index = 1; index < numUrls; index++) {
68448               a.href = arguments$1[index];
68449               resolved = a.href;
68450               base.href = resolved;
68451             }
68452
68453             head.removeChild(base);
68454
68455             return resolved
68456           }
68457
68458           return resolveUrl
68459
68460         }));
68461         });
68462
68463         var assign$2 = make_assign();
68464         var create$9 = make_create();
68465         var trim$1 = make_trim();
68466         var Global = (typeof window !== 'undefined' ? window : commonjsGlobal);
68467
68468         var util = {
68469                 assign: assign$2,
68470                 create: create$9,
68471                 trim: trim$1,
68472                 bind: bind$3,
68473                 slice: slice$b,
68474                 each: each,
68475                 map: map$6,
68476                 pluck: pluck,
68477                 isList: isList,
68478                 isFunction: isFunction$2,
68479                 isObject: isObject$4,
68480                 Global: Global
68481         };
68482
68483         function make_assign() {
68484                 if (Object.assign) {
68485                         return Object.assign
68486                 } else {
68487                         return function shimAssign(obj, props1, props2, etc) {
68488                                 var arguments$1 = arguments;
68489
68490                                 for (var i = 1; i < arguments.length; i++) {
68491                                         each(Object(arguments$1[i]), function(val, key) {
68492                                                 obj[key] = val;
68493                                         });
68494                                 }                       
68495                                 return obj
68496                         }
68497                 }
68498         }
68499
68500         function make_create() {
68501                 if (Object.create) {
68502                         return function create(obj, assignProps1, assignProps2, etc) {
68503                                 var assignArgsList = slice$b(arguments, 1);
68504                                 return assign$2.apply(this, [Object.create(obj)].concat(assignArgsList))
68505                         }
68506                 } else {
68507                         function F() {} // eslint-disable-line no-inner-declarations
68508                         return function create(obj, assignProps1, assignProps2, etc) {
68509                                 var assignArgsList = slice$b(arguments, 1);
68510                                 F.prototype = obj;
68511                                 return assign$2.apply(this, [new F()].concat(assignArgsList))
68512                         }
68513                 }
68514         }
68515
68516         function make_trim() {
68517                 if (String.prototype.trim) {
68518                         return function trim(str) {
68519                                 return String.prototype.trim.call(str)
68520                         }
68521                 } else {
68522                         return function trim(str) {
68523                                 return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')
68524                         }
68525                 }
68526         }
68527
68528         function bind$3(obj, fn) {
68529                 return function() {
68530                         return fn.apply(obj, Array.prototype.slice.call(arguments, 0))
68531                 }
68532         }
68533
68534         function slice$b(arr, index) {
68535                 return Array.prototype.slice.call(arr, index || 0)
68536         }
68537
68538         function each(obj, fn) {
68539                 pluck(obj, function(val, key) {
68540                         fn(val, key);
68541                         return false
68542                 });
68543         }
68544
68545         function map$6(obj, fn) {
68546                 var res = (isList(obj) ? [] : {});
68547                 pluck(obj, function(v, k) {
68548                         res[k] = fn(v, k);
68549                         return false
68550                 });
68551                 return res
68552         }
68553
68554         function pluck(obj, fn) {
68555                 if (isList(obj)) {
68556                         for (var i=0; i<obj.length; i++) {
68557                                 if (fn(obj[i], i)) {
68558                                         return obj[i]
68559                                 }
68560                         }
68561                 } else {
68562                         for (var key in obj) {
68563                                 if (obj.hasOwnProperty(key)) {
68564                                         if (fn(obj[key], key)) {
68565                                                 return obj[key]
68566                                         }
68567                                 }
68568                         }
68569                 }
68570         }
68571
68572         function isList(val) {
68573                 return (val != null && typeof val != 'function' && typeof val.length == 'number')
68574         }
68575
68576         function isFunction$2(val) {
68577                 return val && {}.toString.call(val) === '[object Function]'
68578         }
68579
68580         function isObject$4(val) {
68581                 return val && {}.toString.call(val) === '[object Object]'
68582         }
68583
68584         var slice$c = util.slice;
68585         var pluck$1 = util.pluck;
68586         var each$1 = util.each;
68587         var bind$4 = util.bind;
68588         var create$a = util.create;
68589         var isList$1 = util.isList;
68590         var isFunction$3 = util.isFunction;
68591         var isObject$5 = util.isObject;
68592
68593         var storeEngine = {
68594                 createStore: createStore
68595         };
68596
68597         var storeAPI = {
68598                 version: '2.0.12',
68599                 enabled: false,
68600                 
68601                 // get returns the value of the given key. If that value
68602                 // is undefined, it returns optionalDefaultValue instead.
68603                 get: function(key, optionalDefaultValue) {
68604                         var data = this.storage.read(this._namespacePrefix + key);
68605                         return this._deserialize(data, optionalDefaultValue)
68606                 },
68607
68608                 // set will store the given value at key and returns value.
68609                 // Calling set with value === undefined is equivalent to calling remove.
68610                 set: function(key, value) {
68611                         if (value === undefined) {
68612                                 return this.remove(key)
68613                         }
68614                         this.storage.write(this._namespacePrefix + key, this._serialize(value));
68615                         return value
68616                 },
68617
68618                 // remove deletes the key and value stored at the given key.
68619                 remove: function(key) {
68620                         this.storage.remove(this._namespacePrefix + key);
68621                 },
68622
68623                 // each will call the given callback once for each key-value pair
68624                 // in this store.
68625                 each: function(callback) {
68626                         var self = this;
68627                         this.storage.each(function(val, namespacedKey) {
68628                                 callback.call(self, self._deserialize(val), (namespacedKey || '').replace(self._namespaceRegexp, ''));
68629                         });
68630                 },
68631
68632                 // clearAll will remove all the stored key-value pairs in this store.
68633                 clearAll: function() {
68634                         this.storage.clearAll();
68635                 },
68636
68637                 // additional functionality that can't live in plugins
68638                 // ---------------------------------------------------
68639
68640                 // hasNamespace returns true if this store instance has the given namespace.
68641                 hasNamespace: function(namespace) {
68642                         return (this._namespacePrefix == '__storejs_'+namespace+'_')
68643                 },
68644
68645                 // createStore creates a store.js instance with the first
68646                 // functioning storage in the list of storage candidates,
68647                 // and applies the the given mixins to the instance.
68648                 createStore: function() {
68649                         return createStore.apply(this, arguments)
68650                 },
68651                 
68652                 addPlugin: function(plugin) {
68653                         this._addPlugin(plugin);
68654                 },
68655                 
68656                 namespace: function(namespace) {
68657                         return createStore(this.storage, this.plugins, namespace)
68658                 }
68659         };
68660
68661         function _warn() {
68662                 var _console = (typeof console == 'undefined' ? null : console);
68663                 if (!_console) { return }
68664                 var fn = (_console.warn ? _console.warn : _console.log);
68665                 fn.apply(_console, arguments);
68666         }
68667
68668         function createStore(storages, plugins, namespace) {
68669                 if (!namespace) {
68670                         namespace = '';
68671                 }
68672                 if (storages && !isList$1(storages)) {
68673                         storages = [storages];
68674                 }
68675                 if (plugins && !isList$1(plugins)) {
68676                         plugins = [plugins];
68677                 }
68678
68679                 var namespacePrefix = (namespace ? '__storejs_'+namespace+'_' : '');
68680                 var namespaceRegexp = (namespace ? new RegExp('^'+namespacePrefix) : null);
68681                 var legalNamespaces = /^[a-zA-Z0-9_\-]*$/; // alpha-numeric + underscore and dash
68682                 if (!legalNamespaces.test(namespace)) {
68683                         throw new Error('store.js namespaces can only have alphanumerics + underscores and dashes')
68684                 }
68685                 
68686                 var _privateStoreProps = {
68687                         _namespacePrefix: namespacePrefix,
68688                         _namespaceRegexp: namespaceRegexp,
68689
68690                         _testStorage: function(storage) {
68691                                 try {
68692                                         var testStr = '__storejs__test__';
68693                                         storage.write(testStr, testStr);
68694                                         var ok = (storage.read(testStr) === testStr);
68695                                         storage.remove(testStr);
68696                                         return ok
68697                                 } catch(e) {
68698                                         return false
68699                                 }
68700                         },
68701
68702                         _assignPluginFnProp: function(pluginFnProp, propName) {
68703                                 var oldFn = this[propName];
68704                                 this[propName] = function pluginFn() {
68705                                         var args = slice$c(arguments, 0);
68706                                         var self = this;
68707
68708                                         // super_fn calls the old function which was overwritten by
68709                                         // this mixin.
68710                                         function super_fn() {
68711                                                 if (!oldFn) { return }
68712                                                 each$1(arguments, function(arg, i) {
68713                                                         args[i] = arg;
68714                                                 });
68715                                                 return oldFn.apply(self, args)
68716                                         }
68717
68718                                         // Give mixing function access to super_fn by prefixing all mixin function
68719                                         // arguments with super_fn.
68720                                         var newFnArgs = [super_fn].concat(args);
68721
68722                                         return pluginFnProp.apply(self, newFnArgs)
68723                                 };
68724                         },
68725
68726                         _serialize: function(obj) {
68727                                 return JSON.stringify(obj)
68728                         },
68729
68730                         _deserialize: function(strVal, defaultVal) {
68731                                 if (!strVal) { return defaultVal }
68732                                 // It is possible that a raw string value has been previously stored
68733                                 // in a storage without using store.js, meaning it will be a raw
68734                                 // string value instead of a JSON serialized string. By defaulting
68735                                 // to the raw string value in case of a JSON parse error, we allow
68736                                 // for past stored values to be forwards-compatible with store.js
68737                                 var val = '';
68738                                 try { val = JSON.parse(strVal); }
68739                                 catch(e) { val = strVal; }
68740
68741                                 return (val !== undefined ? val : defaultVal)
68742                         },
68743                         
68744                         _addStorage: function(storage) {
68745                                 if (this.enabled) { return }
68746                                 if (this._testStorage(storage)) {
68747                                         this.storage = storage;
68748                                         this.enabled = true;
68749                                 }
68750                         },
68751
68752                         _addPlugin: function(plugin) {
68753                                 var self = this;
68754
68755                                 // If the plugin is an array, then add all plugins in the array.
68756                                 // This allows for a plugin to depend on other plugins.
68757                                 if (isList$1(plugin)) {
68758                                         each$1(plugin, function(plugin) {
68759                                                 self._addPlugin(plugin);
68760                                         });
68761                                         return
68762                                 }
68763
68764                                 // Keep track of all plugins we've seen so far, so that we
68765                                 // don't add any of them twice.
68766                                 var seenPlugin = pluck$1(this.plugins, function(seenPlugin) {
68767                                         return (plugin === seenPlugin)
68768                                 });
68769                                 if (seenPlugin) {
68770                                         return
68771                                 }
68772                                 this.plugins.push(plugin);
68773
68774                                 // Check that the plugin is properly formed
68775                                 if (!isFunction$3(plugin)) {
68776                                         throw new Error('Plugins must be function values that return objects')
68777                                 }
68778
68779                                 var pluginProperties = plugin.call(this);
68780                                 if (!isObject$5(pluginProperties)) {
68781                                         throw new Error('Plugins must return an object of function properties')
68782                                 }
68783
68784                                 // Add the plugin function properties to this store instance.
68785                                 each$1(pluginProperties, function(pluginFnProp, propName) {
68786                                         if (!isFunction$3(pluginFnProp)) {
68787                                                 throw new Error('Bad plugin property: '+propName+' from plugin '+plugin.name+'. Plugins should only return functions.')
68788                                         }
68789                                         self._assignPluginFnProp(pluginFnProp, propName);
68790                                 });
68791                         },
68792                         
68793                         // Put deprecated properties in the private API, so as to not expose it to accidential
68794                         // discovery through inspection of the store object.
68795                         
68796                         // Deprecated: addStorage
68797                         addStorage: function(storage) {
68798                                 _warn('store.addStorage(storage) is deprecated. Use createStore([storages])');
68799                                 this._addStorage(storage);
68800                         }
68801                 };
68802
68803                 var store = create$a(_privateStoreProps, storeAPI, {
68804                         plugins: []
68805                 });
68806                 store.raw = {};
68807                 each$1(store, function(prop, propName) {
68808                         if (isFunction$3(prop)) {
68809                                 store.raw[propName] = bind$4(store, prop);                      
68810                         }
68811                 });
68812                 each$1(storages, function(storage) {
68813                         store._addStorage(storage);
68814                 });
68815                 each$1(plugins, function(plugin) {
68816                         store._addPlugin(plugin);
68817                 });
68818                 return store
68819         }
68820
68821         var Global$1 = util.Global;
68822
68823         var localStorage_1 = {
68824                 name: 'localStorage',
68825                 read: read,
68826                 write: write,
68827                 each: each$2,
68828                 remove: remove$2,
68829                 clearAll: clearAll,
68830         };
68831
68832         function localStorage$1() {
68833                 return Global$1.localStorage
68834         }
68835
68836         function read(key) {
68837                 return localStorage$1().getItem(key)
68838         }
68839
68840         function write(key, data) {
68841                 return localStorage$1().setItem(key, data)
68842         }
68843
68844         function each$2(fn) {
68845                 for (var i = localStorage$1().length - 1; i >= 0; i--) {
68846                         var key = localStorage$1().key(i);
68847                         fn(read(key), key);
68848                 }
68849         }
68850
68851         function remove$2(key) {
68852                 return localStorage$1().removeItem(key)
68853         }
68854
68855         function clearAll() {
68856                 return localStorage$1().clear()
68857         }
68858
68859         // oldFF-globalStorage provides storage for Firefox
68860         // versions 6 and 7, where no localStorage, etc
68861         // is available.
68862
68863
68864         var Global$2 = util.Global;
68865
68866         var oldFFGlobalStorage = {
68867                 name: 'oldFF-globalStorage',
68868                 read: read$1,
68869                 write: write$1,
68870                 each: each$3,
68871                 remove: remove$3,
68872                 clearAll: clearAll$1,
68873         };
68874
68875         var globalStorage = Global$2.globalStorage;
68876
68877         function read$1(key) {
68878                 return globalStorage[key]
68879         }
68880
68881         function write$1(key, data) {
68882                 globalStorage[key] = data;
68883         }
68884
68885         function each$3(fn) {
68886                 for (var i = globalStorage.length - 1; i >= 0; i--) {
68887                         var key = globalStorage.key(i);
68888                         fn(globalStorage[key], key);
68889                 }
68890         }
68891
68892         function remove$3(key) {
68893                 return globalStorage.removeItem(key)
68894         }
68895
68896         function clearAll$1() {
68897                 each$3(function(key, _) {
68898                         delete globalStorage[key];
68899                 });
68900         }
68901
68902         // oldIE-userDataStorage provides storage for Internet Explorer
68903         // versions 6 and 7, where no localStorage, sessionStorage, etc
68904         // is available.
68905
68906
68907         var Global$3 = util.Global;
68908
68909         var oldIEUserDataStorage = {
68910                 name: 'oldIE-userDataStorage',
68911                 write: write$2,
68912                 read: read$2,
68913                 each: each$4,
68914                 remove: remove$4,
68915                 clearAll: clearAll$2,
68916         };
68917
68918         var storageName = 'storejs';
68919         var doc = Global$3.document;
68920         var _withStorageEl = _makeIEStorageElFunction();
68921         var disable = (Global$3.navigator ? Global$3.navigator.userAgent : '').match(/ (MSIE 8|MSIE 9|MSIE 10)\./); // MSIE 9.x, MSIE 10.x
68922
68923         function write$2(unfixedKey, data) {
68924                 if (disable) { return }
68925                 var fixedKey = fixKey(unfixedKey);
68926                 _withStorageEl(function(storageEl) {
68927                         storageEl.setAttribute(fixedKey, data);
68928                         storageEl.save(storageName);
68929                 });
68930         }
68931
68932         function read$2(unfixedKey) {
68933                 if (disable) { return }
68934                 var fixedKey = fixKey(unfixedKey);
68935                 var res = null;
68936                 _withStorageEl(function(storageEl) {
68937                         res = storageEl.getAttribute(fixedKey);
68938                 });
68939                 return res
68940         }
68941
68942         function each$4(callback) {
68943                 _withStorageEl(function(storageEl) {
68944                         var attributes = storageEl.XMLDocument.documentElement.attributes;
68945                         for (var i=attributes.length-1; i>=0; i--) {
68946                                 var attr = attributes[i];
68947                                 callback(storageEl.getAttribute(attr.name), attr.name);
68948                         }
68949                 });
68950         }
68951
68952         function remove$4(unfixedKey) {
68953                 var fixedKey = fixKey(unfixedKey);
68954                 _withStorageEl(function(storageEl) {
68955                         storageEl.removeAttribute(fixedKey);
68956                         storageEl.save(storageName);
68957                 });
68958         }
68959
68960         function clearAll$2() {
68961                 _withStorageEl(function(storageEl) {
68962                         var attributes = storageEl.XMLDocument.documentElement.attributes;
68963                         storageEl.load(storageName);
68964                         for (var i=attributes.length-1; i>=0; i--) {
68965                                 storageEl.removeAttribute(attributes[i].name);
68966                         }
68967                         storageEl.save(storageName);
68968                 });
68969         }
68970
68971         // Helpers
68972         //////////
68973
68974         // In IE7, keys cannot start with a digit or contain certain chars.
68975         // See https://github.com/marcuswestin/store.js/issues/40
68976         // See https://github.com/marcuswestin/store.js/issues/83
68977         var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g");
68978         function fixKey(key) {
68979                 return key.replace(/^\d/, '___$&').replace(forbiddenCharsRegex, '___')
68980         }
68981
68982         function _makeIEStorageElFunction() {
68983                 if (!doc || !doc.documentElement || !doc.documentElement.addBehavior) {
68984                         return null
68985                 }
68986                 var scriptTag = 'script',
68987                         storageOwner,
68988                         storageContainer,
68989                         storageEl;
68990
68991                 // Since #userData storage applies only to specific paths, we need to
68992                 // somehow link our data to a specific path.  We choose /favicon.ico
68993                 // as a pretty safe option, since all browsers already make a request to
68994                 // this URL anyway and being a 404 will not hurt us here.  We wrap an
68995                 // iframe pointing to the favicon in an ActiveXObject(htmlfile) object
68996                 // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)
68997                 // since the iframe access rules appear to allow direct access and
68998                 // manipulation of the document element, even for a 404 page.  This
68999                 // document can be used instead of the current document (which would
69000                 // have been limited to the current path) to perform #userData storage.
69001                 try {
69002                         /* global ActiveXObject */
69003                         storageContainer = new ActiveXObject('htmlfile');
69004                         storageContainer.open();
69005                         storageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src="/favicon.ico"></iframe>');
69006                         storageContainer.close();
69007                         storageOwner = storageContainer.w.frames[0].document;
69008                         storageEl = storageOwner.createElement('div');
69009                 } catch(e) {
69010                         // somehow ActiveXObject instantiation failed (perhaps some special
69011                         // security settings or otherwse), fall back to per-path storage
69012                         storageEl = doc.createElement('div');
69013                         storageOwner = doc.body;
69014                 }
69015
69016                 return function(storeFunction) {
69017                         var args = [].slice.call(arguments, 0);
69018                         args.unshift(storageEl);
69019                         // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
69020                         // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
69021                         storageOwner.appendChild(storageEl);
69022                         storageEl.addBehavior('#default#userData');
69023                         storageEl.load(storageName);
69024                         storeFunction.apply(this, args);
69025                         storageOwner.removeChild(storageEl);
69026                         return
69027                 }
69028         }
69029
69030         // cookieStorage is useful Safari private browser mode, where localStorage
69031         // doesn't work but cookies do. This implementation is adopted from
69032         // https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage
69033
69034
69035         var Global$4 = util.Global;
69036         var trim$2 = util.trim;
69037
69038         var cookieStorage = {
69039                 name: 'cookieStorage',
69040                 read: read$3,
69041                 write: write$3,
69042                 each: each$5,
69043                 remove: remove$5,
69044                 clearAll: clearAll$3,
69045         };
69046
69047         var doc$1 = Global$4.document;
69048
69049         function read$3(key) {
69050                 if (!key || !_has(key)) { return null }
69051                 var regexpStr = "(?:^|.*;\\s*)" +
69052                         escape(key).replace(/[\-\.\+\*]/g, "\\$&") +
69053                         "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";
69054                 return unescape(doc$1.cookie.replace(new RegExp(regexpStr), "$1"))
69055         }
69056
69057         function each$5(callback) {
69058                 var cookies = doc$1.cookie.split(/; ?/g);
69059                 for (var i = cookies.length - 1; i >= 0; i--) {
69060                         if (!trim$2(cookies[i])) {
69061                                 continue
69062                         }
69063                         var kvp = cookies[i].split('=');
69064                         var key = unescape(kvp[0]);
69065                         var val = unescape(kvp[1]);
69066                         callback(val, key);
69067                 }
69068         }
69069
69070         function write$3(key, data) {
69071                 if(!key) { return }
69072                 doc$1.cookie = escape(key) + "=" + escape(data) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
69073         }
69074
69075         function remove$5(key) {
69076                 if (!key || !_has(key)) {
69077                         return
69078                 }
69079                 doc$1.cookie = escape(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
69080         }
69081
69082         function clearAll$3() {
69083                 each$5(function(_, key) {
69084                         remove$5(key);
69085                 });
69086         }
69087
69088         function _has(key) {
69089                 return (new RegExp("(?:^|;\\s*)" + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(doc$1.cookie)
69090         }
69091
69092         var Global$5 = util.Global;
69093
69094         var sessionStorage_1 = {
69095                 name: 'sessionStorage',
69096                 read: read$4,
69097                 write: write$4,
69098                 each: each$6,
69099                 remove: remove$6,
69100                 clearAll: clearAll$4
69101         };
69102
69103         function sessionStorage() {
69104                 return Global$5.sessionStorage
69105         }
69106
69107         function read$4(key) {
69108                 return sessionStorage().getItem(key)
69109         }
69110
69111         function write$4(key, data) {
69112                 return sessionStorage().setItem(key, data)
69113         }
69114
69115         function each$6(fn) {
69116                 for (var i = sessionStorage().length - 1; i >= 0; i--) {
69117                         var key = sessionStorage().key(i);
69118                         fn(read$4(key), key);
69119                 }
69120         }
69121
69122         function remove$6(key) {
69123                 return sessionStorage().removeItem(key)
69124         }
69125
69126         function clearAll$4() {
69127                 return sessionStorage().clear()
69128         }
69129
69130         // memoryStorage is a useful last fallback to ensure that the store
69131         // is functions (meaning store.get(), store.set(), etc will all function).
69132         // However, stored values will not persist when the browser navigates to
69133         // a new page or reloads the current page.
69134
69135         var memoryStorage_1 = {
69136                 name: 'memoryStorage',
69137                 read: read$5,
69138                 write: write$5,
69139                 each: each$7,
69140                 remove: remove$7,
69141                 clearAll: clearAll$5,
69142         };
69143
69144         var memoryStorage = {};
69145
69146         function read$5(key) {
69147                 return memoryStorage[key]
69148         }
69149
69150         function write$5(key, data) {
69151                 memoryStorage[key] = data;
69152         }
69153
69154         function each$7(callback) {
69155                 for (var key in memoryStorage) {
69156                         if (memoryStorage.hasOwnProperty(key)) {
69157                                 callback(memoryStorage[key], key);
69158                         }
69159                 }
69160         }
69161
69162         function remove$7(key) {
69163                 delete memoryStorage[key];
69164         }
69165
69166         function clearAll$5(key) {
69167                 memoryStorage = {};
69168         }
69169
69170         var all = [
69171                 // Listed in order of usage preference
69172                 localStorage_1,
69173                 oldFFGlobalStorage,
69174                 oldIEUserDataStorage,
69175                 cookieStorage,
69176                 sessionStorage_1,
69177                 memoryStorage_1
69178         ];
69179
69180         /* eslint-disable */
69181
69182         //  json2.js
69183         //  2016-10-28
69184         //  Public Domain.
69185         //  NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
69186         //  See http://www.JSON.org/js.html
69187         //  This code should be minified before deployment.
69188         //  See http://javascript.crockford.com/jsmin.html
69189
69190         //  USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
69191         //  NOT CONTROL.
69192
69193         //  This file creates a global JSON object containing two methods: stringify
69194         //  and parse. This file provides the ES5 JSON capability to ES3 systems.
69195         //  If a project might run on IE8 or earlier, then this file should be included.
69196         //  This file does nothing on ES5 systems.
69197
69198         //      JSON.stringify(value, replacer, space)
69199         //          value       any JavaScript value, usually an object or array.
69200         //          replacer    an optional parameter that determines how object
69201         //                      values are stringified for objects. It can be a
69202         //                      function or an array of strings.
69203         //          space       an optional parameter that specifies the indentation
69204         //                      of nested structures. If it is omitted, the text will
69205         //                      be packed without extra whitespace. If it is a number,
69206         //                      it will specify the number of spaces to indent at each
69207         //                      level. If it is a string (such as "\t" or "&nbsp;"),
69208         //                      it contains the characters used to indent at each level.
69209         //          This method produces a JSON text from a JavaScript value.
69210         //          When an object value is found, if the object contains a toJSON
69211         //          method, its toJSON method will be called and the result will be
69212         //          stringified. A toJSON method does not serialize: it returns the
69213         //          value represented by the name/value pair that should be serialized,
69214         //          or undefined if nothing should be serialized. The toJSON method
69215         //          will be passed the key associated with the value, and this will be
69216         //          bound to the value.
69217
69218         //          For example, this would serialize Dates as ISO strings.
69219
69220         //              Date.prototype.toJSON = function (key) {
69221         //                  function f(n) {
69222         //                      // Format integers to have at least two digits.
69223         //                      return (n < 10)
69224         //                          ? "0" + n
69225         //                          : n;
69226         //                  }
69227         //                  return this.getUTCFullYear()   + "-" +
69228         //                       f(this.getUTCMonth() + 1) + "-" +
69229         //                       f(this.getUTCDate())      + "T" +
69230         //                       f(this.getUTCHours())     + ":" +
69231         //                       f(this.getUTCMinutes())   + ":" +
69232         //                       f(this.getUTCSeconds())   + "Z";
69233         //              };
69234
69235         //          You can provide an optional replacer method. It will be passed the
69236         //          key and value of each member, with this bound to the containing
69237         //          object. The value that is returned from your method will be
69238         //          serialized. If your method returns undefined, then the member will
69239         //          be excluded from the serialization.
69240
69241         //          If the replacer parameter is an array of strings, then it will be
69242         //          used to select the members to be serialized. It filters the results
69243         //          such that only members with keys listed in the replacer array are
69244         //          stringified.
69245
69246         //          Values that do not have JSON representations, such as undefined or
69247         //          functions, will not be serialized. Such values in objects will be
69248         //          dropped; in arrays they will be replaced with null. You can use
69249         //          a replacer function to replace those with JSON values.
69250
69251         //          JSON.stringify(undefined) returns undefined.
69252
69253         //          The optional space parameter produces a stringification of the
69254         //          value that is filled with line breaks and indentation to make it
69255         //          easier to read.
69256
69257         //          If the space parameter is a non-empty string, then that string will
69258         //          be used for indentation. If the space parameter is a number, then
69259         //          the indentation will be that many spaces.
69260
69261         //          Example:
69262
69263         //          text = JSON.stringify(["e", {pluribus: "unum"}]);
69264         //          // text is '["e",{"pluribus":"unum"}]'
69265
69266         //          text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t");
69267         //          // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
69268
69269         //          text = JSON.stringify([new Date()], function (key, value) {
69270         //              return this[key] instanceof Date
69271         //                  ? "Date(" + this[key] + ")"
69272         //                  : value;
69273         //          });
69274         //          // text is '["Date(---current time---)"]'
69275
69276         //      JSON.parse(text, reviver)
69277         //          This method parses a JSON text to produce an object or array.
69278         //          It can throw a SyntaxError exception.
69279
69280         //          The optional reviver parameter is a function that can filter and
69281         //          transform the results. It receives each of the keys and values,
69282         //          and its return value is used instead of the original value.
69283         //          If it returns what it received, then the structure is not modified.
69284         //          If it returns undefined then the member is deleted.
69285
69286         //          Example:
69287
69288         //          // Parse the text. Values that look like ISO date strings will
69289         //          // be converted to Date objects.
69290
69291         //          myData = JSON.parse(text, function (key, value) {
69292         //              var a;
69293         //              if (typeof value === "string") {
69294         //                  a =
69295         //   /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
69296         //                  if (a) {
69297         //                      return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
69298         //                          +a[5], +a[6]));
69299         //                  }
69300         //              }
69301         //              return value;
69302         //          });
69303
69304         //          myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
69305         //              var d;
69306         //              if (typeof value === "string" &&
69307         //                      value.slice(0, 5) === "Date(" &&
69308         //                      value.slice(-1) === ")") {
69309         //                  d = new Date(value.slice(5, -1));
69310         //                  if (d) {
69311         //                      return d;
69312         //                  }
69313         //              }
69314         //              return value;
69315         //          });
69316
69317         //  This is a reference implementation. You are free to copy, modify, or
69318         //  redistribute.
69319
69320         /*jslint
69321             eval, for, this
69322         */
69323
69324         /*property
69325             JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
69326             getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
69327             lastIndex, length, parse, prototype, push, replace, slice, stringify,
69328             test, toJSON, toString, valueOf
69329         */
69330
69331
69332         // Create a JSON object only if one does not already exist. We create the
69333         // methods in a closure to avoid creating global variables.
69334
69335         if (typeof JSON !== "object") {
69336             JSON = {};
69337         }
69338
69339         (function () {
69340
69341             var rx_one = /^[\],:{}\s]*$/;
69342             var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
69343             var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
69344             var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
69345             var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
69346             var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
69347
69348             function f(n) {
69349                 // Format integers to have at least two digits.
69350                 return n < 10
69351                     ? "0" + n
69352                     : n;
69353             }
69354
69355             function this_value() {
69356                 return this.valueOf();
69357             }
69358
69359             if (typeof Date.prototype.toJSON !== "function") {
69360
69361                 Date.prototype.toJSON = function () {
69362
69363                     return isFinite(this.valueOf())
69364                         ? this.getUTCFullYear() + "-" +
69365                                 f(this.getUTCMonth() + 1) + "-" +
69366                                 f(this.getUTCDate()) + "T" +
69367                                 f(this.getUTCHours()) + ":" +
69368                                 f(this.getUTCMinutes()) + ":" +
69369                                 f(this.getUTCSeconds()) + "Z"
69370                         : null;
69371                 };
69372
69373                 Boolean.prototype.toJSON = this_value;
69374                 Number.prototype.toJSON = this_value;
69375                 String.prototype.toJSON = this_value;
69376             }
69377
69378             var gap;
69379             var indent;
69380             var meta;
69381             var rep;
69382
69383
69384             function quote(string) {
69385
69386         // If the string contains no control characters, no quote characters, and no
69387         // backslash characters, then we can safely slap some quotes around it.
69388         // Otherwise we must also replace the offending characters with safe escape
69389         // sequences.
69390
69391                 rx_escapable.lastIndex = 0;
69392                 return rx_escapable.test(string)
69393                     ? "\"" + string.replace(rx_escapable, function (a) {
69394                         var c = meta[a];
69395                         return typeof c === "string"
69396                             ? c
69397                             : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
69398                     }) + "\""
69399                     : "\"" + string + "\"";
69400             }
69401
69402
69403             function str(key, holder) {
69404
69405         // Produce a string from holder[key].
69406
69407                 var i;          // The loop counter.
69408                 var k;          // The member key.
69409                 var v;          // The member value.
69410                 var length;
69411                 var mind = gap;
69412                 var partial;
69413                 var value = holder[key];
69414
69415         // If the value has a toJSON method, call it to obtain a replacement value.
69416
69417                 if (value && typeof value === "object" &&
69418                         typeof value.toJSON === "function") {
69419                     value = value.toJSON(key);
69420                 }
69421
69422         // If we were called with a replacer function, then call the replacer to
69423         // obtain a replacement value.
69424
69425                 if (typeof rep === "function") {
69426                     value = rep.call(holder, key, value);
69427                 }
69428
69429         // What happens next depends on the value's type.
69430
69431                 switch (typeof value) {
69432                 case "string":
69433                     return quote(value);
69434
69435                 case "number":
69436
69437         // JSON numbers must be finite. Encode non-finite numbers as null.
69438
69439                     return isFinite(value)
69440                         ? String(value)
69441                         : "null";
69442
69443                 case "boolean":
69444                 case "null":
69445
69446         // If the value is a boolean or null, convert it to a string. Note:
69447         // typeof null does not produce "null". The case is included here in
69448         // the remote chance that this gets fixed someday.
69449
69450                     return String(value);
69451
69452         // If the type is "object", we might be dealing with an object or an array or
69453         // null.
69454
69455                 case "object":
69456
69457         // Due to a specification blunder in ECMAScript, typeof null is "object",
69458         // so watch out for that case.
69459
69460                     if (!value) {
69461                         return "null";
69462                     }
69463
69464         // Make an array to hold the partial results of stringifying this object value.
69465
69466                     gap += indent;
69467                     partial = [];
69468
69469         // Is the value an array?
69470
69471                     if (Object.prototype.toString.apply(value) === "[object Array]") {
69472
69473         // The value is an array. Stringify every element. Use null as a placeholder
69474         // for non-JSON values.
69475
69476                         length = value.length;
69477                         for (i = 0; i < length; i += 1) {
69478                             partial[i] = str(i, value) || "null";
69479                         }
69480
69481         // Join all of the elements together, separated with commas, and wrap them in
69482         // brackets.
69483
69484                         v = partial.length === 0
69485                             ? "[]"
69486                             : gap
69487                                 ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]"
69488                                 : "[" + partial.join(",") + "]";
69489                         gap = mind;
69490                         return v;
69491                     }
69492
69493         // If the replacer is an array, use it to select the members to be stringified.
69494
69495                     if (rep && typeof rep === "object") {
69496                         length = rep.length;
69497                         for (i = 0; i < length; i += 1) {
69498                             if (typeof rep[i] === "string") {
69499                                 k = rep[i];
69500                                 v = str(k, value);
69501                                 if (v) {
69502                                     partial.push(quote(k) + (
69503                                         gap
69504                                             ? ": "
69505                                             : ":"
69506                                     ) + v);
69507                                 }
69508                             }
69509                         }
69510                     } else {
69511
69512         // Otherwise, iterate through all of the keys in the object.
69513
69514                         for (k in value) {
69515                             if (Object.prototype.hasOwnProperty.call(value, k)) {
69516                                 v = str(k, value);
69517                                 if (v) {
69518                                     partial.push(quote(k) + (
69519                                         gap
69520                                             ? ": "
69521                                             : ":"
69522                                     ) + v);
69523                                 }
69524                             }
69525                         }
69526                     }
69527
69528         // Join all of the member texts together, separated with commas,
69529         // and wrap them in braces.
69530
69531                     v = partial.length === 0
69532                         ? "{}"
69533                         : gap
69534                             ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
69535                             : "{" + partial.join(",") + "}";
69536                     gap = mind;
69537                     return v;
69538                 }
69539             }
69540
69541         // If the JSON object does not yet have a stringify method, give it one.
69542
69543             if (typeof JSON.stringify !== "function") {
69544                 meta = {    // table of character substitutions
69545                     "\b": "\\b",
69546                     "\t": "\\t",
69547                     "\n": "\\n",
69548                     "\f": "\\f",
69549                     "\r": "\\r",
69550                     "\"": "\\\"",
69551                     "\\": "\\\\"
69552                 };
69553                 JSON.stringify = function (value, replacer, space) {
69554
69555         // The stringify method takes a value and an optional replacer, and an optional
69556         // space parameter, and returns a JSON text. The replacer can be a function
69557         // that can replace values, or an array of strings that will select the keys.
69558         // A default replacer method can be provided. Use of the space parameter can
69559         // produce text that is more easily readable.
69560
69561                     var i;
69562                     gap = "";
69563                     indent = "";
69564
69565         // If the space parameter is a number, make an indent string containing that
69566         // many spaces.
69567
69568                     if (typeof space === "number") {
69569                         for (i = 0; i < space; i += 1) {
69570                             indent += " ";
69571                         }
69572
69573         // If the space parameter is a string, it will be used as the indent string.
69574
69575                     } else if (typeof space === "string") {
69576                         indent = space;
69577                     }
69578
69579         // If there is a replacer, it must be a function or an array.
69580         // Otherwise, throw an error.
69581
69582                     rep = replacer;
69583                     if (replacer && typeof replacer !== "function" &&
69584                             (typeof replacer !== "object" ||
69585                             typeof replacer.length !== "number")) {
69586                         throw new Error("JSON.stringify");
69587                     }
69588
69589         // Make a fake root object containing our value under the key of "".
69590         // Return the result of stringifying the value.
69591
69592                     return str("", {"": value});
69593                 };
69594             }
69595
69596
69597         // If the JSON object does not yet have a parse method, give it one.
69598
69599             if (typeof JSON.parse !== "function") {
69600                 JSON.parse = function (text, reviver) {
69601
69602         // The parse method takes a text and an optional reviver function, and returns
69603         // a JavaScript value if the text is a valid JSON text.
69604
69605                     var j;
69606
69607                     function walk(holder, key) {
69608
69609         // The walk method is used to recursively walk the resulting structure so
69610         // that modifications can be made.
69611
69612                         var k;
69613                         var v;
69614                         var value = holder[key];
69615                         if (value && typeof value === "object") {
69616                             for (k in value) {
69617                                 if (Object.prototype.hasOwnProperty.call(value, k)) {
69618                                     v = walk(value, k);
69619                                     if (v !== undefined) {
69620                                         value[k] = v;
69621                                     } else {
69622                                         delete value[k];
69623                                     }
69624                                 }
69625                             }
69626                         }
69627                         return reviver.call(holder, key, value);
69628                     }
69629
69630
69631         // Parsing happens in four stages. In the first stage, we replace certain
69632         // Unicode characters with escape sequences. JavaScript handles many characters
69633         // incorrectly, either silently deleting them, or treating them as line endings.
69634
69635                     text = String(text);
69636                     rx_dangerous.lastIndex = 0;
69637                     if (rx_dangerous.test(text)) {
69638                         text = text.replace(rx_dangerous, function (a) {
69639                             return "\\u" +
69640                                     ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
69641                         });
69642                     }
69643
69644         // In the second stage, we run the text against regular expressions that look
69645         // for non-JSON patterns. We are especially concerned with "()" and "new"
69646         // because they can cause invocation, and "=" because it can cause mutation.
69647         // But just to be safe, we want to reject all unexpected forms.
69648
69649         // We split the second stage into 4 regexp operations in order to work around
69650         // crippling inefficiencies in IE's and Safari's regexp engines. First we
69651         // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
69652         // replace all simple value tokens with "]" characters. Third, we delete all
69653         // open brackets that follow a colon or comma or that begin the text. Finally,
69654         // we look to see that the remaining characters are only whitespace or "]" or
69655         // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.
69656
69657                     if (
69658                         rx_one.test(
69659                             text
69660                                 .replace(rx_two, "@")
69661                                 .replace(rx_three, "]")
69662                                 .replace(rx_four, "")
69663                         )
69664                     ) {
69665
69666         // In the third stage we use the eval function to compile the text into a
69667         // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
69668         // in JavaScript: it can begin a block or an object literal. We wrap the text
69669         // in parens to eliminate the ambiguity.
69670
69671                         j = eval("(" + text + ")");
69672
69673         // In the optional fourth stage, we recursively walk the new structure, passing
69674         // each name/value pair to a reviver function for possible transformation.
69675
69676                         return (typeof reviver === "function")
69677                             ? walk({"": j}, "")
69678                             : j;
69679                     }
69680
69681         // If the text is not JSON parseable, then a SyntaxError is thrown.
69682
69683                     throw new SyntaxError("JSON.parse");
69684                 };
69685             }
69686         }());
69687
69688         var json2 = json2Plugin;
69689
69690         function json2Plugin() {
69691                 
69692                 return {}
69693         }
69694
69695         var plugins = [json2];
69696
69697         var store_legacy = storeEngine.createStore(all, plugins);
69698
69699         // # osm-auth
69700         //
69701         // This code is only compatible with IE10+ because the [XDomainRequest](http://bit.ly/LfO7xo)
69702         // object, IE<10's idea of [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing),
69703         // does not support custom headers, which this uses everywhere.
69704         var osmAuth = function(o) {
69705
69706             var oauth = {};
69707
69708             // authenticated users will also have a request token secret, but it's
69709             // not used in transactions with the server
69710             oauth.authenticated = function() {
69711                 return !!(token('oauth_token') && token('oauth_token_secret'));
69712             };
69713
69714             oauth.logout = function() {
69715                 token('oauth_token', '');
69716                 token('oauth_token_secret', '');
69717                 token('oauth_request_token_secret', '');
69718                 return oauth;
69719             };
69720
69721             // TODO: detect lack of click event
69722             oauth.authenticate = function(callback) {
69723                 if (oauth.authenticated()) { return callback(); }
69724
69725                 oauth.logout();
69726
69727                 // ## Getting a request token
69728                 var params = timenonce(getAuth(o)),
69729                     url = o.url + '/oauth/request_token';
69730
69731                 params.oauth_signature = ohauth_1.signature(
69732                     o.oauth_secret, '',
69733                     ohauth_1.baseString('POST', url, params));
69734
69735                 if (!o.singlepage) {
69736                     // Create a 600x550 popup window in the center of the screen
69737                     var w = 600, h = 550,
69738                         settings = [
69739                             ['width', w], ['height', h],
69740                             ['left', screen.width / 2 - w / 2],
69741                             ['top', screen.height / 2 - h / 2]].map(function(x) {
69742                                 return x.join('=');
69743                             }).join(','),
69744                         popup = window.open('about:blank', 'oauth_window', settings);
69745                 }
69746
69747                 // Request a request token. When this is complete, the popup
69748                 // window is redirected to OSM's authorization page.
69749                 ohauth_1.xhr('POST', url, params, null, {}, reqTokenDone);
69750                 o.loading();
69751
69752                 function reqTokenDone(err, xhr) {
69753                     o.done();
69754                     if (err) { return callback(err); }
69755                     var resp = ohauth_1.stringQs(xhr.response);
69756                     token('oauth_request_token_secret', resp.oauth_token_secret);
69757                     var authorize_url = o.url + '/oauth/authorize?' + ohauth_1.qsString({
69758                         oauth_token: resp.oauth_token,
69759                         oauth_callback: resolveUrl(o.landing)
69760                     });
69761
69762                     if (o.singlepage) {
69763                         location.href = authorize_url;
69764                     } else {
69765                         popup.location = authorize_url;
69766                     }
69767                 }
69768
69769                 // Called by a function in a landing page, in the popup window. The
69770                 // window closes itself.
69771                 window.authComplete = function(token) {
69772                     var oauth_token = ohauth_1.stringQs(token.split('?')[1]);
69773                     get_access_token(oauth_token.oauth_token);
69774                     delete window.authComplete;
69775                 };
69776
69777                 // ## Getting an request token
69778                 //
69779                 // At this point we have an `oauth_token`, brought in from a function
69780                 // call on a landing page popup.
69781                 function get_access_token(oauth_token) {
69782                     var url = o.url + '/oauth/access_token',
69783                         params = timenonce(getAuth(o)),
69784                         request_token_secret = token('oauth_request_token_secret');
69785                     params.oauth_token = oauth_token;
69786                     params.oauth_signature = ohauth_1.signature(
69787                         o.oauth_secret,
69788                         request_token_secret,
69789                         ohauth_1.baseString('POST', url, params));
69790
69791                     // ## Getting an access token
69792                     //
69793                     // The final token required for authentication. At this point
69794                     // we have a `request token secret`
69795                     ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
69796                     o.loading();
69797                 }
69798
69799                 function accessTokenDone(err, xhr) {
69800                     o.done();
69801                     if (err) { return callback(err); }
69802                     var access_token = ohauth_1.stringQs(xhr.response);
69803                     token('oauth_token', access_token.oauth_token);
69804                     token('oauth_token_secret', access_token.oauth_token_secret);
69805                     callback(null, oauth);
69806                 }
69807             };
69808
69809             oauth.bootstrapToken = function(oauth_token, callback) {
69810                 // ## Getting an request token
69811                 // At this point we have an `oauth_token`, brought in from a function
69812                 // call on a landing page popup.
69813                 function get_access_token(oauth_token) {
69814                     var url = o.url + '/oauth/access_token',
69815                         params = timenonce(getAuth(o)),
69816                         request_token_secret = token('oauth_request_token_secret');
69817                     params.oauth_token = oauth_token;
69818                     params.oauth_signature = ohauth_1.signature(
69819                         o.oauth_secret,
69820                         request_token_secret,
69821                         ohauth_1.baseString('POST', url, params));
69822
69823                     // ## Getting an access token
69824                     // The final token required for authentication. At this point
69825                     // we have a `request token secret`
69826                     ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
69827                     o.loading();
69828                 }
69829
69830                 function accessTokenDone(err, xhr) {
69831                     o.done();
69832                     if (err) { return callback(err); }
69833                     var access_token = ohauth_1.stringQs(xhr.response);
69834                     token('oauth_token', access_token.oauth_token);
69835                     token('oauth_token_secret', access_token.oauth_token_secret);
69836                     callback(null, oauth);
69837                 }
69838
69839                 get_access_token(oauth_token);
69840             };
69841
69842             // # xhr
69843             //
69844             // A single XMLHttpRequest wrapper that does authenticated calls if the
69845             // user has logged in.
69846             oauth.xhr = function(options, callback) {
69847                 if (!oauth.authenticated()) {
69848                     if (o.auto) {
69849                         return oauth.authenticate(run);
69850                     } else {
69851                         callback('not authenticated', null);
69852                         return;
69853                     }
69854                 } else {
69855                     return run();
69856                 }
69857
69858                 function run() {
69859                     var params = timenonce(getAuth(o)),
69860                         oauth_token_secret = token('oauth_token_secret'),
69861                         url = (options.prefix !== false) ? o.url + options.path : options.path,
69862                         url_parts = url.replace(/#.*$/, '').split('?', 2),
69863                         base_url = url_parts[0],
69864                         query = (url_parts.length === 2) ? url_parts[1] : '';
69865
69866                     // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1
69867                     if ((!options.options || !options.options.header ||
69868                         options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') &&
69869                         options.content) {
69870                         params = immutable(params, ohauth_1.stringQs(options.content));
69871                     }
69872
69873                     params.oauth_token = token('oauth_token');
69874                     params.oauth_signature = ohauth_1.signature(
69875                         o.oauth_secret,
69876                         oauth_token_secret,
69877                         ohauth_1.baseString(options.method, base_url, immutable(params, ohauth_1.stringQs(query)))
69878                     );
69879
69880                     return ohauth_1.xhr(options.method, url, params, options.content, options.options, done);
69881                 }
69882
69883                 function done(err, xhr) {
69884                     if (err) { return callback(err); }
69885                     else if (xhr.responseXML) { return callback(err, xhr.responseXML); }
69886                     else { return callback(err, xhr.response); }
69887                 }
69888             };
69889
69890             // pre-authorize this object, if we can just get a token and token_secret
69891             // from the start
69892             oauth.preauth = function(c) {
69893                 if (!c) { return; }
69894                 if (c.oauth_token) { token('oauth_token', c.oauth_token); }
69895                 if (c.oauth_token_secret) { token('oauth_token_secret', c.oauth_token_secret); }
69896                 return oauth;
69897             };
69898
69899             oauth.options = function(_) {
69900                 if (!arguments.length) { return o; }
69901
69902                 o = _;
69903                 o.url = o.url || 'https://www.openstreetmap.org';
69904                 o.landing = o.landing || 'land.html';
69905                 o.singlepage = o.singlepage || false;
69906
69907                 // Optional loading and loading-done functions for nice UI feedback.
69908                 // by default, no-ops
69909                 o.loading = o.loading || function() {};
69910                 o.done = o.done || function() {};
69911
69912                 return oauth.preauth(o);
69913             };
69914
69915             // 'stamp' an authentication object from `getAuth()`
69916             // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce)
69917             // and timestamp
69918             function timenonce(o) {
69919                 o.oauth_timestamp = ohauth_1.timestamp();
69920                 o.oauth_nonce = ohauth_1.nonce();
69921                 return o;
69922             }
69923
69924             // get/set tokens. These are prefixed with the base URL so that `osm-auth`
69925             // can be used with multiple APIs and the keys in `localStorage`
69926             // will not clash
69927             var token;
69928
69929             if (store_legacy.enabled) {
69930                 token = function (x, y) {
69931                     if (arguments.length === 1) { return store_legacy.get(o.url + x); }
69932                     else if (arguments.length === 2) { return store_legacy.set(o.url + x, y); }
69933                 };
69934             } else {
69935                 var storage = {};
69936                 token = function (x, y) {
69937                     if (arguments.length === 1) { return storage[o.url + x]; }
69938                     else if (arguments.length === 2) { return storage[o.url + x] = y; }
69939                 };
69940             }
69941
69942             // Get an authentication object. If you just add and remove properties
69943             // from a single object, you'll need to use `delete` to make sure that
69944             // it doesn't contain undesired properties for authentication
69945             function getAuth(o) {
69946                 return {
69947                     oauth_consumer_key: o.oauth_consumer_key,
69948                     oauth_signature_method: 'HMAC-SHA1'
69949                 };
69950             }
69951
69952             // potentially pre-authorize
69953             oauth.options(o);
69954
69955             return oauth;
69956         };
69957
69958         var JXON = new (function () {
69959           var
69960             sValueProp = 'keyValue', sAttributesProp = 'keyAttributes', sAttrPref = '@', /* you can customize these values */
69961             aCache = [], rIsNull = /^\s*$/, rIsBool = /^(?:true|false)$/i;
69962
69963           function parseText (sValue) {
69964             if (rIsNull.test(sValue)) { return null; }
69965             if (rIsBool.test(sValue)) { return sValue.toLowerCase() === 'true'; }
69966             if (isFinite(sValue)) { return parseFloat(sValue); }
69967             if (isFinite(Date.parse(sValue))) { return new Date(sValue); }
69968             return sValue;
69969           }
69970
69971           function EmptyTree () { }
69972           EmptyTree.prototype.toString = function () { return 'null'; };
69973           EmptyTree.prototype.valueOf = function () { return null; };
69974
69975           function objectify (vValue) {
69976             return vValue === null ? new EmptyTree() : vValue instanceof Object ? vValue : new vValue.constructor(vValue);
69977           }
69978
69979           function createObjTree (oParentNode, nVerb, bFreeze, bNesteAttr) {
69980             var
69981               nLevelStart = aCache.length, bChildren = oParentNode.hasChildNodes(),
69982               bAttributes = oParentNode.hasAttributes(), bHighVerb = Boolean(nVerb & 2);
69983
69984             var
69985               sProp, vContent, nLength = 0, sCollectedTxt = '',
69986               vResult = bHighVerb ? {} : /* put here the default value for empty nodes: */ true;
69987
69988             if (bChildren) {
69989               for (var oNode, nItem = 0; nItem < oParentNode.childNodes.length; nItem++) {
69990                 oNode = oParentNode.childNodes.item(nItem);
69991                 if (oNode.nodeType === 4) { sCollectedTxt += oNode.nodeValue; } /* nodeType is 'CDATASection' (4) */
69992                 else if (oNode.nodeType === 3) { sCollectedTxt += oNode.nodeValue.trim(); } /* nodeType is 'Text' (3) */
69993                 else if (oNode.nodeType === 1 && !oNode.prefix) { aCache.push(oNode); } /* nodeType is 'Element' (1) */
69994               }
69995             }
69996
69997             var nLevelEnd = aCache.length, vBuiltVal = parseText(sCollectedTxt);
69998
69999             if (!bHighVerb && (bChildren || bAttributes)) { vResult = nVerb === 0 ? objectify(vBuiltVal) : {}; }
70000
70001             for (var nElId = nLevelStart; nElId < nLevelEnd; nElId++) {
70002               sProp = aCache[nElId].nodeName.toLowerCase();
70003               vContent = createObjTree(aCache[nElId], nVerb, bFreeze, bNesteAttr);
70004               if (vResult.hasOwnProperty(sProp)) {
70005                 if (vResult[sProp].constructor !== Array) { vResult[sProp] = [vResult[sProp]]; }
70006                 vResult[sProp].push(vContent);
70007               } else {
70008                 vResult[sProp] = vContent;
70009                 nLength++;
70010               }
70011             }
70012
70013             if (bAttributes) {
70014               var
70015                 nAttrLen = oParentNode.attributes.length,
70016                 sAPrefix = bNesteAttr ? '' : sAttrPref, oAttrParent = bNesteAttr ? {} : vResult;
70017
70018               for (var oAttrib, nAttrib = 0; nAttrib < nAttrLen; nLength++, nAttrib++) {
70019                 oAttrib = oParentNode.attributes.item(nAttrib);
70020                 oAttrParent[sAPrefix + oAttrib.name.toLowerCase()] = parseText(oAttrib.value.trim());
70021               }
70022
70023               if (bNesteAttr) {
70024                 if (bFreeze) { Object.freeze(oAttrParent); }
70025                 vResult[sAttributesProp] = oAttrParent;
70026                 nLength -= nAttrLen - 1;
70027               }
70028             }
70029
70030             if (nVerb === 3 || (nVerb === 2 || nVerb === 1 && nLength > 0) && sCollectedTxt) {
70031               vResult[sValueProp] = vBuiltVal;
70032             } else if (!bHighVerb && nLength === 0 && sCollectedTxt) {
70033               vResult = vBuiltVal;
70034             }
70035
70036             if (bFreeze && (bHighVerb || nLength > 0)) { Object.freeze(vResult); }
70037
70038             aCache.length = nLevelStart;
70039
70040             return vResult;
70041           }
70042
70043           function loadObjTree (oXMLDoc, oParentEl, oParentObj) {
70044             var vValue, oChild;
70045
70046             if (oParentObj instanceof String || oParentObj instanceof Number || oParentObj instanceof Boolean) {
70047               oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toString())); /* verbosity level is 0 */
70048             } else if (oParentObj.constructor === Date) {
70049               oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toGMTString()));    
70050             }
70051
70052             for (var sName in oParentObj) {
70053               vValue = oParentObj[sName];
70054               if (isFinite(sName) || vValue instanceof Function) { continue; } /* verbosity level is 0 */
70055               if (sName === sValueProp) {
70056                 if (vValue !== null && vValue !== true) { oParentEl.appendChild(oXMLDoc.createTextNode(vValue.constructor === Date ? vValue.toGMTString() : String(vValue))); }
70057               } else if (sName === sAttributesProp) { /* verbosity level is 3 */
70058                 for (var sAttrib in vValue) { oParentEl.setAttribute(sAttrib, vValue[sAttrib]); }
70059               } else if (sName.charAt(0) === sAttrPref) {
70060                 oParentEl.setAttribute(sName.slice(1), vValue);
70061               } else if (vValue.constructor === Array) {
70062                 for (var nItem = 0; nItem < vValue.length; nItem++) {
70063                   oChild = oXMLDoc.createElement(sName);
70064                   loadObjTree(oXMLDoc, oChild, vValue[nItem]);
70065                   oParentEl.appendChild(oChild);
70066                 }
70067               } else {
70068                 oChild = oXMLDoc.createElement(sName);
70069                 if (vValue instanceof Object) {
70070                   loadObjTree(oXMLDoc, oChild, vValue);
70071                 } else if (vValue !== null && vValue !== true) {
70072                   oChild.appendChild(oXMLDoc.createTextNode(vValue.toString()));
70073                 }
70074                 oParentEl.appendChild(oChild);
70075              }
70076            }
70077           }
70078
70079           this.build = function (oXMLParent, nVerbosity /* optional */, bFreeze /* optional */, bNesteAttributes /* optional */) {
70080             var _nVerb = arguments.length > 1 && typeof nVerbosity === 'number' ? nVerbosity & 3 : /* put here the default verbosity level: */ 1;
70081             return createObjTree(oXMLParent, _nVerb, bFreeze || false, arguments.length > 3 ? bNesteAttributes : _nVerb === 3);    
70082           };
70083
70084           this.unbuild = function (oObjTree) {    
70085             var oNewDoc = document.implementation.createDocument('', '', null);
70086             loadObjTree(oNewDoc, oNewDoc, oObjTree);
70087             return oNewDoc;
70088           };
70089
70090           this.stringify = function (oObjTree) {
70091             return (new XMLSerializer()).serializeToString(JXON.unbuild(oObjTree));
70092           };
70093         })();
70094
70095         // var myObject = JXON.build(doc);
70096         // we got our javascript object! try: alert(JSON.stringify(myObject));
70097
70098         // var newDoc = JXON.unbuild(myObject);
70099         // we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc));
70100
70101         var tiler$4 = utilTiler();
70102         var dispatch$5 = dispatch('apiStatusChange', 'authLoading', 'authDone', 'change', 'loading', 'loaded', 'loadedNotes');
70103         var urlroot = 'https://www.openstreetmap.org';
70104         var oauth = osmAuth({
70105             url: urlroot,
70106             oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT',
70107             oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL',
70108             loading: authLoading,
70109             done: authDone
70110         });
70111
70112         var _blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'];
70113         var _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: new RBush() };
70114         var _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: new RBush() };
70115         var _userCache = { toLoad: {}, user: {} };
70116         var _cachedApiStatus;
70117         var _changeset = {};
70118
70119         var _deferred = new Set();
70120         var _connectionID = 1;
70121         var _tileZoom = 16;
70122         var _noteZoom = 12;
70123         var _rateLimitError;
70124         var _userChangesets;
70125         var _userDetails;
70126         var _off;
70127
70128
70129         function authLoading() {
70130             dispatch$5.call('authLoading');
70131         }
70132
70133
70134         function authDone() {
70135             dispatch$5.call('authDone');
70136         }
70137
70138
70139         function abortRequest$4(controllerOrXHR) {
70140             if (controllerOrXHR) {
70141                 controllerOrXHR.abort();
70142             }
70143         }
70144
70145
70146         function hasInflightRequests(cache) {
70147             return Object.keys(cache.inflight).length;
70148         }
70149
70150
70151         function abortUnwantedRequests$2(cache, visibleTiles) {
70152             Object.keys(cache.inflight).forEach(function(k) {
70153                 if (cache.toLoad[k]) { return; }
70154                 if (visibleTiles.find(function(tile) { return k === tile.id; })) { return; }
70155
70156                 abortRequest$4(cache.inflight[k]);
70157                 delete cache.inflight[k];
70158             });
70159         }
70160
70161
70162         function getLoc(attrs) {
70163             var lon = attrs.lon && attrs.lon.value;
70164             var lat = attrs.lat && attrs.lat.value;
70165             return [parseFloat(lon), parseFloat(lat)];
70166         }
70167
70168
70169         function getNodes(obj) {
70170             var elems = obj.getElementsByTagName('nd');
70171             var nodes = new Array(elems.length);
70172             for (var i = 0, l = elems.length; i < l; i++) {
70173                 nodes[i] = 'n' + elems[i].attributes.ref.value;
70174             }
70175             return nodes;
70176         }
70177
70178         function getTags(obj) {
70179             var elems = obj.getElementsByTagName('tag');
70180             var tags = {};
70181             for (var i = 0, l = elems.length; i < l; i++) {
70182                 var attrs = elems[i].attributes;
70183                 tags[attrs.k.value] = attrs.v.value;
70184             }
70185
70186             return tags;
70187         }
70188
70189
70190         function getMembers(obj) {
70191             var elems = obj.getElementsByTagName('member');
70192             var members = new Array(elems.length);
70193             for (var i = 0, l = elems.length; i < l; i++) {
70194                 var attrs = elems[i].attributes;
70195                 members[i] = {
70196                     id: attrs.type.value[0] + attrs.ref.value,
70197                     type: attrs.type.value,
70198                     role: attrs.role.value
70199                 };
70200             }
70201             return members;
70202         }
70203
70204         function getVisible(attrs) {
70205             return (!attrs.visible || attrs.visible.value !== 'false');
70206         }
70207
70208
70209         function parseComments(comments) {
70210             var parsedComments = [];
70211
70212             // for each comment
70213             for (var i = 0; i < comments.length; i++) {
70214                 var comment = comments[i];
70215                 if (comment.nodeName === 'comment') {
70216                     var childNodes = comment.childNodes;
70217                     var parsedComment = {};
70218
70219                     for (var j = 0; j < childNodes.length; j++) {
70220                         var node = childNodes[j];
70221                         var nodeName = node.nodeName;
70222                         if (nodeName === '#text') { continue; }
70223                         parsedComment[nodeName] = node.textContent;
70224
70225                         if (nodeName === 'uid') {
70226                             var uid = node.textContent;
70227                             if (uid && !_userCache.user[uid]) {
70228                                 _userCache.toLoad[uid] = true;
70229                             }
70230                         }
70231                     }
70232
70233                     if (parsedComment) {
70234                         parsedComments.push(parsedComment);
70235                     }
70236                 }
70237             }
70238             return parsedComments;
70239         }
70240
70241
70242         function encodeNoteRtree(note) {
70243             return {
70244                 minX: note.loc[0],
70245                 minY: note.loc[1],
70246                 maxX: note.loc[0],
70247                 maxY: note.loc[1],
70248                 data: note
70249             };
70250         }
70251
70252         var parsers = {
70253             node: function nodeData(obj, uid) {
70254                 var attrs = obj.attributes;
70255                 return new osmNode({
70256                     id: uid,
70257                     visible: getVisible(attrs),
70258                     version: attrs.version.value,
70259                     changeset: attrs.changeset && attrs.changeset.value,
70260                     timestamp: attrs.timestamp && attrs.timestamp.value,
70261                     user: attrs.user && attrs.user.value,
70262                     uid: attrs.uid && attrs.uid.value,
70263                     loc: getLoc(attrs),
70264                     tags: getTags(obj)
70265                 });
70266             },
70267
70268             way: function wayData(obj, uid) {
70269                 var attrs = obj.attributes;
70270                 return new osmWay({
70271                     id: uid,
70272                     visible: getVisible(attrs),
70273                     version: attrs.version.value,
70274                     changeset: attrs.changeset && attrs.changeset.value,
70275                     timestamp: attrs.timestamp && attrs.timestamp.value,
70276                     user: attrs.user && attrs.user.value,
70277                     uid: attrs.uid && attrs.uid.value,
70278                     tags: getTags(obj),
70279                     nodes: getNodes(obj),
70280                 });
70281             },
70282
70283             relation: function relationData(obj, uid) {
70284                 var attrs = obj.attributes;
70285                 return new osmRelation({
70286                     id: uid,
70287                     visible: getVisible(attrs),
70288                     version: attrs.version.value,
70289                     changeset: attrs.changeset && attrs.changeset.value,
70290                     timestamp: attrs.timestamp && attrs.timestamp.value,
70291                     user: attrs.user && attrs.user.value,
70292                     uid: attrs.uid && attrs.uid.value,
70293                     tags: getTags(obj),
70294                     members: getMembers(obj)
70295                 });
70296             },
70297
70298             note: function parseNote(obj, uid) {
70299                 var attrs = obj.attributes;
70300                 var childNodes = obj.childNodes;
70301                 var props = {};
70302
70303                 props.id = uid;
70304                 props.loc = getLoc(attrs);
70305
70306                 // if notes are coincident, move them apart slightly
70307                 var coincident = false;
70308                 var epsilon = 0.00001;
70309                 do {
70310                     if (coincident) {
70311                         props.loc = geoVecAdd(props.loc, [epsilon, epsilon]);
70312                     }
70313                     var bbox = geoExtent(props.loc).bbox();
70314                     coincident = _noteCache.rtree.search(bbox).length;
70315                 } while (coincident);
70316
70317                 // parse note contents
70318                 for (var i = 0; i < childNodes.length; i++) {
70319                     var node = childNodes[i];
70320                     var nodeName = node.nodeName;
70321                     if (nodeName === '#text') { continue; }
70322
70323                     // if the element is comments, parse the comments
70324                     if (nodeName === 'comments') {
70325                         props[nodeName] = parseComments(node.childNodes);
70326                     } else {
70327                         props[nodeName] = node.textContent;
70328                     }
70329                 }
70330
70331                 var note = new osmNote(props);
70332                 var item = encodeNoteRtree(note);
70333                 _noteCache.note[note.id] = note;
70334                 _noteCache.rtree.insert(item);
70335
70336                 return note;
70337             },
70338
70339             user: function parseUser(obj, uid) {
70340                 var attrs = obj.attributes;
70341                 var user = {
70342                     id: uid,
70343                     display_name: attrs.display_name && attrs.display_name.value,
70344                     account_created: attrs.account_created && attrs.account_created.value,
70345                     changesets_count: '0',
70346                     active_blocks: '0'
70347                 };
70348
70349                 var img = obj.getElementsByTagName('img');
70350                 if (img && img[0] && img[0].getAttribute('href')) {
70351                     user.image_url = img[0].getAttribute('href');
70352                 }
70353
70354                 var changesets = obj.getElementsByTagName('changesets');
70355                 if (changesets && changesets[0] && changesets[0].getAttribute('count')) {
70356                     user.changesets_count = changesets[0].getAttribute('count');
70357                 }
70358
70359                 var blocks = obj.getElementsByTagName('blocks');
70360                 if (blocks && blocks[0]) {
70361                     var received = blocks[0].getElementsByTagName('received');
70362                     if (received && received[0] && received[0].getAttribute('active')) {
70363                         user.active_blocks = received[0].getAttribute('active');
70364                     }
70365                 }
70366
70367                 _userCache.user[uid] = user;
70368                 delete _userCache.toLoad[uid];
70369                 return user;
70370             }
70371         };
70372
70373
70374         function parseXML(xml, callback, options) {
70375             options = Object.assign({ skipSeen: true }, options);
70376             if (!xml || !xml.childNodes) {
70377                 return callback({ message: 'No XML', status: -1 });
70378             }
70379
70380             var root = xml.childNodes[0];
70381             var children = root.childNodes;
70382
70383             var handle = window.requestIdleCallback(function() {
70384                 var results = [];
70385                 var result;
70386                 for (var i = 0; i < children.length; i++) {
70387                     result = parseChild(children[i]);
70388                     if (result) { results.push(result); }
70389                 }
70390                 callback(null, results);
70391             });
70392
70393             _deferred.add(handle);
70394
70395
70396             function parseChild(child) {
70397                 var parser = parsers[child.nodeName];
70398                 if (!parser) { return null; }
70399
70400                 var uid;
70401                 if (child.nodeName === 'user') {
70402                     uid = child.attributes.id.value;
70403                     if (options.skipSeen && _userCache.user[uid]) {
70404                         delete _userCache.toLoad[uid];
70405                         return null;
70406                     }
70407
70408                 } else if (child.nodeName === 'note') {
70409                     uid = child.getElementsByTagName('id')[0].textContent;
70410
70411                 } else {
70412                     uid = osmEntity.id.fromOSM(child.nodeName, child.attributes.id.value);
70413                     if (options.skipSeen) {
70414                         if (_tileCache.seen[uid]) { return null; }  // avoid reparsing a "seen" entity
70415                         _tileCache.seen[uid] = true;
70416                     }
70417                 }
70418
70419                 return parser(child, uid);
70420             }
70421         }
70422
70423
70424         // replace or remove note from rtree
70425         function updateRtree$2(item, replace) {
70426             _noteCache.rtree.remove(item, function isEql(a, b) { return a.data.id === b.data.id; });
70427
70428             if (replace) {
70429                 _noteCache.rtree.insert(item);
70430             }
70431         }
70432
70433
70434         function wrapcb(thisArg, callback, cid) {
70435             return function(err, result) {
70436                 if (err) {
70437                     // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
70438                     if (err.status === 400 || err.status === 401 || err.status === 403) {
70439                         thisArg.logout();
70440                     }
70441                     return callback.call(thisArg, err);
70442
70443                 } else if (thisArg.getConnectionId() !== cid) {
70444                     return callback.call(thisArg, { message: 'Connection Switched', status: -1 });
70445
70446                 } else {
70447                     return callback.call(thisArg, err, result);
70448                 }
70449             };
70450         }
70451
70452
70453         var serviceOsm = {
70454
70455             init: function() {
70456                 utilRebind(this, dispatch$5, 'on');
70457             },
70458
70459
70460             reset: function() {
70461                 Array.from(_deferred).forEach(function(handle) {
70462                     window.cancelIdleCallback(handle);
70463                     _deferred.delete(handle);
70464                 });
70465
70466                 _connectionID++;
70467                 _userChangesets = undefined;
70468                 _userDetails = undefined;
70469                 _rateLimitError = undefined;
70470
70471                 Object.values(_tileCache.inflight).forEach(abortRequest$4);
70472                 Object.values(_noteCache.inflight).forEach(abortRequest$4);
70473                 Object.values(_noteCache.inflightPost).forEach(abortRequest$4);
70474                 if (_changeset.inflight) { abortRequest$4(_changeset.inflight); }
70475
70476                 _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: new RBush() };
70477                 _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: new RBush() };
70478                 _userCache = { toLoad: {}, user: {} };
70479                 _cachedApiStatus = undefined;
70480                 _changeset = {};
70481
70482                 return this;
70483             },
70484
70485
70486             getConnectionId: function() {
70487                 return _connectionID;
70488             },
70489
70490
70491             changesetURL: function(changesetID) {
70492                 return urlroot + '/changeset/' + changesetID;
70493             },
70494
70495
70496             changesetsURL: function(center, zoom) {
70497                 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
70498                 return urlroot + '/history#map=' +
70499                     Math.floor(zoom) + '/' +
70500                     center[1].toFixed(precision) + '/' +
70501                     center[0].toFixed(precision);
70502             },
70503
70504
70505             entityURL: function(entity) {
70506                 return urlroot + '/' + entity.type + '/' + entity.osmId();
70507             },
70508
70509
70510             historyURL: function(entity) {
70511                 return urlroot + '/' + entity.type + '/' + entity.osmId() + '/history';
70512             },
70513
70514
70515             userURL: function(username) {
70516                 return urlroot + '/user/' + username;
70517             },
70518
70519
70520             noteURL: function(note) {
70521                 return urlroot + '/note/' + note.id;
70522             },
70523
70524
70525             noteReportURL: function(note) {
70526                 return urlroot + '/reports/new?reportable_type=Note&reportable_id=' + note.id;
70527             },
70528
70529
70530             // Generic method to load data from the OSM API
70531             // Can handle either auth or unauth calls.
70532             loadFromAPI: function(path, callback, options) {
70533                 options = Object.assign({ skipSeen: true }, options);
70534                 var that = this;
70535                 var cid = _connectionID;
70536
70537                 function done(err, payload) {
70538                     if (that.getConnectionId() !== cid) {
70539                         if (callback) { callback({ message: 'Connection Switched', status: -1 }); }
70540                         return;
70541                     }
70542
70543                     var isAuthenticated = that.authenticated();
70544
70545                     // 400 Bad Request, 401 Unauthorized, 403 Forbidden
70546                     // Logout and retry the request..
70547                     if (isAuthenticated && err && err.status &&
70548                             (err.status === 400 || err.status === 401 || err.status === 403)) {
70549                         that.logout();
70550                         that.loadFromAPI(path, callback, options);
70551
70552                     // else, no retry..
70553                     } else {
70554                         // 509 Bandwidth Limit Exceeded, 429 Too Many Requests
70555                         // Set the rateLimitError flag and trigger a warning..
70556                         if (!isAuthenticated && !_rateLimitError && err && err.status &&
70557                                 (err.status === 509 || err.status === 429)) {
70558                             _rateLimitError = err;
70559                             dispatch$5.call('change');
70560                             that.reloadApiStatus();
70561
70562                         } else if ((err && _cachedApiStatus === 'online') ||
70563                             (!err && _cachedApiStatus !== 'online')) {
70564                             // If the response's error state doesn't match the status,
70565                             // it's likely we lost or gained the connection so reload the status
70566                             that.reloadApiStatus();
70567                         }
70568
70569                         if (callback) {
70570                             if (err) {
70571                                 return callback(err);
70572                             } else {
70573                                 return parseXML(payload, callback, options);
70574                             }
70575                         }
70576                     }
70577                 }
70578
70579                 if (this.authenticated()) {
70580                     return oauth.xhr({ method: 'GET', path: path }, done);
70581                 } else {
70582                     var url = urlroot + path;
70583                     var controller = new AbortController();
70584                     d3_xml(url, { signal: controller.signal })
70585                         .then(function(data) {
70586                             done(null, data);
70587                         })
70588                         .catch(function(err) {
70589                             if (err.name === 'AbortError') { return; }
70590                             // d3-fetch includes status in the error message,
70591                             // but we can't access the response itself
70592                             // https://github.com/d3/d3-fetch/issues/27
70593                             var match = err.message.match(/^\d{3}/);
70594                             if (match) {
70595                                 done({ status: +match[0], statusText: err.message });
70596                             } else {
70597                                 done(err.message);
70598                             }
70599                         });
70600                     return controller;
70601                 }
70602             },
70603
70604
70605             // Load a single entity by id (ways and relations use the `/full` call)
70606             // GET /api/0.6/node/#id
70607             // GET /api/0.6/[way|relation]/#id/full
70608             loadEntity: function(id, callback) {
70609                 var type = osmEntity.id.type(id);
70610                 var osmID = osmEntity.id.toOSM(id);
70611                 var options = { skipSeen: false };
70612
70613                 this.loadFromAPI(
70614                     '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''),
70615                     function(err, entities) {
70616                         if (callback) { callback(err, { data: entities }); }
70617                     },
70618                     options
70619                 );
70620             },
70621
70622
70623             // Load a single entity with a specific version
70624             // GET /api/0.6/[node|way|relation]/#id/#version
70625             loadEntityVersion: function(id, version, callback) {
70626                 var type = osmEntity.id.type(id);
70627                 var osmID = osmEntity.id.toOSM(id);
70628                 var options = { skipSeen: false };
70629
70630                 this.loadFromAPI(
70631                     '/api/0.6/' + type + '/' + osmID + '/' + version,
70632                     function(err, entities) {
70633                         if (callback) { callback(err, { data: entities }); }
70634                     },
70635                     options
70636                 );
70637             },
70638
70639
70640             // Load multiple entities in chunks
70641             // (note: callback may be called multiple times)
70642             // Unlike `loadEntity`, child nodes and members are not fetched
70643             // GET /api/0.6/[nodes|ways|relations]?#parameters
70644             loadMultiple: function(ids, callback) {
70645                 var that = this;
70646                 var groups = utilArrayGroupBy(utilArrayUniq(ids), osmEntity.id.type);
70647
70648                 Object.keys(groups).forEach(function(k) {
70649                     var type = k + 's';   // nodes, ways, relations
70650                     var osmIDs = groups[k].map(function(id) { return osmEntity.id.toOSM(id); });
70651                     var options = { skipSeen: false };
70652
70653                     utilArrayChunk(osmIDs, 150).forEach(function(arr) {
70654                         that.loadFromAPI(
70655                             '/api/0.6/' + type + '?' + type + '=' + arr.join(),
70656                             function(err, entities) {
70657                                 if (callback) { callback(err, { data: entities }); }
70658                             },
70659                             options
70660                         );
70661                     });
70662                 });
70663             },
70664
70665
70666             // Create, upload, and close a changeset
70667             // PUT /api/0.6/changeset/create
70668             // POST /api/0.6/changeset/#id/upload
70669             // PUT /api/0.6/changeset/#id/close
70670             putChangeset: function(changeset, changes, callback) {
70671                 var cid = _connectionID;
70672
70673                 if (_changeset.inflight) {
70674                     return callback({ message: 'Changeset already inflight', status: -2 }, changeset);
70675
70676                 } else if (_changeset.open) {   // reuse existing open changeset..
70677                     return createdChangeset.call(this, null, _changeset.open);
70678
70679                 } else {   // Open a new changeset..
70680                     var options = {
70681                         method: 'PUT',
70682                         path: '/api/0.6/changeset/create',
70683                         options: { header: { 'Content-Type': 'text/xml' } },
70684                         content: JXON.stringify(changeset.asJXON())
70685                     };
70686                     _changeset.inflight = oauth.xhr(
70687                         options,
70688                         wrapcb(this, createdChangeset, cid)
70689                     );
70690                 }
70691
70692
70693                 function createdChangeset(err, changesetID) {
70694                     _changeset.inflight = null;
70695                     if (err) { return callback(err, changeset); }
70696
70697                     _changeset.open = changesetID;
70698                     changeset = changeset.update({ id: changesetID });
70699
70700                     // Upload the changeset..
70701                     var options = {
70702                         method: 'POST',
70703                         path: '/api/0.6/changeset/' + changesetID + '/upload',
70704                         options: { header: { 'Content-Type': 'text/xml' } },
70705                         content: JXON.stringify(changeset.osmChangeJXON(changes))
70706                     };
70707                     _changeset.inflight = oauth.xhr(
70708                         options,
70709                         wrapcb(this, uploadedChangeset, cid)
70710                     );
70711                 }
70712
70713
70714                 function uploadedChangeset(err) {
70715                     _changeset.inflight = null;
70716                     if (err) { return callback(err, changeset); }
70717
70718                     // Upload was successful, safe to call the callback.
70719                     // Add delay to allow for postgres replication #1646 #2678
70720                     window.setTimeout(function() { callback(null, changeset); }, 2500);
70721                     _changeset.open = null;
70722
70723                     // At this point, we don't really care if the connection was switched..
70724                     // Only try to close the changeset if we're still talking to the same server.
70725                     if (this.getConnectionId() === cid) {
70726                         // Still attempt to close changeset, but ignore response because #2667
70727                         oauth.xhr({
70728                             method: 'PUT',
70729                             path: '/api/0.6/changeset/' + changeset.id + '/close',
70730                             options: { header: { 'Content-Type': 'text/xml' } }
70731                         }, function() { return true; });
70732                     }
70733                 }
70734             },
70735
70736
70737             // Load multiple users in chunks
70738             // (note: callback may be called multiple times)
70739             // GET /api/0.6/users?users=#id1,#id2,...,#idn
70740             loadUsers: function(uids, callback) {
70741                 var toLoad = [];
70742                 var cached = [];
70743
70744                 utilArrayUniq(uids).forEach(function(uid) {
70745                     if (_userCache.user[uid]) {
70746                         delete _userCache.toLoad[uid];
70747                         cached.push(_userCache.user[uid]);
70748                     } else {
70749                         toLoad.push(uid);
70750                     }
70751                 });
70752
70753                 if (cached.length || !this.authenticated()) {
70754                     callback(undefined, cached);
70755                     if (!this.authenticated()) { return; }  // require auth
70756                 }
70757
70758                 utilArrayChunk(toLoad, 150).forEach(function(arr) {
70759                     oauth.xhr(
70760                         { method: 'GET', path: '/api/0.6/users?users=' + arr.join() },
70761                         wrapcb(this, done, _connectionID)
70762                     );
70763                 }.bind(this));
70764
70765                 function done(err, xml) {
70766                     if (err) { return callback(err); }
70767
70768                     var options = { skipSeen: true };
70769                     return parseXML(xml, function(err, results) {
70770                         if (err) {
70771                             return callback(err);
70772                         } else {
70773                             return callback(undefined, results);
70774                         }
70775                     }, options);
70776                 }
70777             },
70778
70779
70780             // Load a given user by id
70781             // GET /api/0.6/user/#id
70782             loadUser: function(uid, callback) {
70783                 if (_userCache.user[uid] || !this.authenticated()) {   // require auth
70784                     delete _userCache.toLoad[uid];
70785                     return callback(undefined, _userCache.user[uid]);
70786                 }
70787
70788                 oauth.xhr(
70789                     { method: 'GET', path: '/api/0.6/user/' + uid },
70790                     wrapcb(this, done, _connectionID)
70791                 );
70792
70793                 function done(err, xml) {
70794                     if (err) { return callback(err); }
70795
70796                     var options = { skipSeen: true };
70797                     return parseXML(xml, function(err, results) {
70798                         if (err) {
70799                             return callback(err);
70800                         } else {
70801                             return callback(undefined, results[0]);
70802                         }
70803                     }, options);
70804                 }
70805             },
70806
70807
70808             // Load the details of the logged-in user
70809             // GET /api/0.6/user/details
70810             userDetails: function(callback) {
70811                 if (_userDetails) {    // retrieve cached
70812                     return callback(undefined, _userDetails);
70813                 }
70814
70815                 oauth.xhr(
70816                     { method: 'GET', path: '/api/0.6/user/details' },
70817                     wrapcb(this, done, _connectionID)
70818                 );
70819
70820                 function done(err, xml) {
70821                     if (err) { return callback(err); }
70822
70823                     var options = { skipSeen: false };
70824                     return parseXML(xml, function(err, results) {
70825                         if (err) {
70826                             return callback(err);
70827                         } else {
70828                             _userDetails = results[0];
70829                             return callback(undefined, _userDetails);
70830                         }
70831                     }, options);
70832                 }
70833             },
70834
70835
70836             // Load previous changesets for the logged in user
70837             // GET /api/0.6/changesets?user=#id
70838             userChangesets: function(callback) {
70839                 if (_userChangesets) {    // retrieve cached
70840                     return callback(undefined, _userChangesets);
70841                 }
70842
70843                 this.userDetails(
70844                     wrapcb(this, gotDetails, _connectionID)
70845                 );
70846
70847
70848                 function gotDetails(err, user) {
70849                     if (err) { return callback(err); }
70850
70851                     oauth.xhr(
70852                         { method: 'GET', path: '/api/0.6/changesets?user=' + user.id },
70853                         wrapcb(this, done, _connectionID)
70854                     );
70855                 }
70856
70857                 function done(err, xml) {
70858                     if (err) { return callback(err); }
70859
70860                     _userChangesets = Array.prototype.map.call(
70861                         xml.getElementsByTagName('changeset'),
70862                         function (changeset) { return { tags: getTags(changeset) }; }
70863                     ).filter(function (changeset) {
70864                         var comment = changeset.tags.comment;
70865                         return comment && comment !== '';
70866                     });
70867
70868                     return callback(undefined, _userChangesets);
70869                 }
70870             },
70871
70872
70873             // Fetch the status of the OSM API
70874             // GET /api/capabilities
70875             status: function(callback) {
70876                 var url = urlroot + '/api/capabilities';
70877                 var errback = wrapcb(this, done, _connectionID);
70878                 d3_xml(url)
70879                     .then(function(data) { errback(null, data); })
70880                     .catch(function(err) { errback(err.message); });
70881
70882                 function done(err, xml) {
70883                     if (err) {
70884                         // the status is null if no response could be retrieved
70885                         return callback(err, null);
70886                     }
70887
70888                     // update blacklists
70889                     var elements = xml.getElementsByTagName('blacklist');
70890                     var regexes = [];
70891                     for (var i = 0; i < elements.length; i++) {
70892                         var regex = elements[i].getAttribute('regex');  // needs unencode?
70893                         if (regex) {
70894                             regexes.push(regex);
70895                         }
70896                     }
70897                     if (regexes.length) {
70898                         _blacklists = regexes;
70899                     }
70900
70901                     if (_rateLimitError) {
70902                         return callback(_rateLimitError, 'rateLimited');
70903                     } else {
70904                         var apiStatus = xml.getElementsByTagName('status');
70905                         var val = apiStatus[0].getAttribute('api');
70906                         return callback(undefined, val);
70907                     }
70908                 }
70909             },
70910
70911             // Calls `status` and dispatches an `apiStatusChange` event if the returned
70912             // status differs from the cached status.
70913             reloadApiStatus: function() {
70914                 // throttle to avoid unncessary API calls
70915                 if (!this.throttledReloadApiStatus) {
70916                     var that = this;
70917                     this.throttledReloadApiStatus = throttle(function() {
70918                         that.status(function(err, status) {
70919                             if (status !== _cachedApiStatus) {
70920                                 _cachedApiStatus = status;
70921                                 dispatch$5.call('apiStatusChange', that, err, status);
70922                             }
70923                         });
70924                     }, 500);
70925                 }
70926                 this.throttledReloadApiStatus();
70927             },
70928
70929
70930             // Load data (entities) from the API in tiles
70931             // GET /api/0.6/map?bbox=
70932             loadTiles: function(projection, callback) {
70933                 if (_off) { return; }
70934
70935                 // determine the needed tiles to cover the view
70936                 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
70937
70938                 // abort inflight requests that are no longer needed
70939                 var hadRequests = hasInflightRequests(_tileCache);
70940                 abortUnwantedRequests$2(_tileCache, tiles);
70941                 if (hadRequests && !hasInflightRequests(_tileCache)) {
70942                     dispatch$5.call('loaded');    // stop the spinner
70943                 }
70944
70945                 // issue new requests..
70946                 tiles.forEach(function(tile) {
70947                     this.loadTile(tile, callback);
70948                 }, this);
70949             },
70950
70951
70952             // Load a single data tile
70953             // GET /api/0.6/map?bbox=
70954             loadTile: function(tile, callback) {
70955                 if (_off) { return; }
70956                 if (_tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) { return; }
70957
70958                 if (!hasInflightRequests(_tileCache)) {
70959                     dispatch$5.call('loading');   // start the spinner
70960                 }
70961
70962                 var path = '/api/0.6/map?bbox=';
70963                 var options = { skipSeen: true };
70964
70965                 _tileCache.inflight[tile.id] = this.loadFromAPI(
70966                     path + tile.extent.toParam(),
70967                     tileCallback,
70968                     options
70969                 );
70970
70971                 function tileCallback(err, parsed) {
70972                     delete _tileCache.inflight[tile.id];
70973                     if (!err) {
70974                         delete _tileCache.toLoad[tile.id];
70975                         _tileCache.loaded[tile.id] = true;
70976                         var bbox = tile.extent.bbox();
70977                         bbox.id = tile.id;
70978                         _tileCache.rtree.insert(bbox);
70979                     }
70980                     if (callback) {
70981                         callback(err, Object.assign({ data: parsed }, tile));
70982                     }
70983                     if (!hasInflightRequests(_tileCache)) {
70984                         dispatch$5.call('loaded');     // stop the spinner
70985                     }
70986                 }
70987             },
70988
70989
70990             isDataLoaded: function(loc) {
70991                 var bbox = { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] };
70992                 return _tileCache.rtree.collides(bbox);
70993             },
70994
70995
70996             // load the tile that covers the given `loc`
70997             loadTileAtLoc: function(loc, callback) {
70998                 // Back off if the toLoad queue is filling up.. re #6417
70999                 // (Currently `loadTileAtLoc` requests are considered low priority - used by operations to
71000                 // let users safely edit geometries which extend to unloaded tiles.  We can drop some.)
71001                 if (Object.keys(_tileCache.toLoad).length > 50) { return; }
71002
71003                 var k = geoZoomToScale(_tileZoom + 1);
71004                 var offset = geoRawMercator().scale(k)(loc);
71005                 var projection = geoRawMercator().transform({ k: k, x: -offset[0], y: -offset[1] });
71006                 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
71007
71008                 tiles.forEach(function(tile) {
71009                     if (_tileCache.toLoad[tile.id] || _tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) { return; }
71010
71011                     _tileCache.toLoad[tile.id] = true;
71012                     this.loadTile(tile, callback);
71013                 }, this);
71014             },
71015
71016
71017             // Load notes from the API in tiles
71018             // GET /api/0.6/notes?bbox=
71019             loadNotes: function(projection, noteOptions) {
71020                 noteOptions = Object.assign({ limit: 10000, closed: 7 }, noteOptions);
71021                 if (_off) { return; }
71022
71023                 var that = this;
71024                 var path = '/api/0.6/notes?limit=' + noteOptions.limit + '&closed=' + noteOptions.closed + '&bbox=';
71025                 var throttleLoadUsers = throttle(function() {
71026                     var uids = Object.keys(_userCache.toLoad);
71027                     if (!uids.length) { return; }
71028                     that.loadUsers(uids, function() {});  // eagerly load user details
71029                 }, 750);
71030
71031                 // determine the needed tiles to cover the view
71032                 var tiles = tiler$4.zoomExtent([_noteZoom, _noteZoom]).getTiles(projection);
71033
71034                 // abort inflight requests that are no longer needed
71035                 abortUnwantedRequests$2(_noteCache, tiles);
71036
71037                 // issue new requests..
71038                 tiles.forEach(function(tile) {
71039                     if (_noteCache.loaded[tile.id] || _noteCache.inflight[tile.id]) { return; }
71040
71041                     var options = { skipSeen: false };
71042                     _noteCache.inflight[tile.id] = that.loadFromAPI(
71043                         path + tile.extent.toParam(),
71044                         function(err) {
71045                             delete _noteCache.inflight[tile.id];
71046                             if (!err) {
71047                                 _noteCache.loaded[tile.id] = true;
71048                             }
71049                             throttleLoadUsers();
71050                             dispatch$5.call('loadedNotes');
71051                         },
71052                         options
71053                     );
71054                 });
71055             },
71056
71057
71058             // Create a note
71059             // POST /api/0.6/notes?params
71060             postNoteCreate: function(note, callback) {
71061                 if (!this.authenticated()) {
71062                     return callback({ message: 'Not Authenticated', status: -3 }, note);
71063                 }
71064                 if (_noteCache.inflightPost[note.id]) {
71065                     return callback({ message: 'Note update already inflight', status: -2 }, note);
71066                 }
71067
71068                 if (!note.loc[0] || !note.loc[1] || !note.newComment) { return; } // location & description required
71069
71070                 var comment = note.newComment;
71071                 if (note.newCategory && note.newCategory !== 'None') { comment += ' #' + note.newCategory; }
71072
71073                 var path = '/api/0.6/notes?' + utilQsString({ lon: note.loc[0], lat: note.loc[1], text: comment });
71074
71075                 _noteCache.inflightPost[note.id] = oauth.xhr(
71076                     { method: 'POST', path: path },
71077                     wrapcb(this, done, _connectionID)
71078                 );
71079
71080
71081                 function done(err, xml) {
71082                     delete _noteCache.inflightPost[note.id];
71083                     if (err) { return callback(err); }
71084
71085                     // we get the updated note back, remove from caches and reparse..
71086                     this.removeNote(note);
71087
71088                     var options = { skipSeen: false };
71089                     return parseXML(xml, function(err, results) {
71090                         if (err) {
71091                             return callback(err);
71092                         } else {
71093                             return callback(undefined, results[0]);
71094                         }
71095                     }, options);
71096                 }
71097             },
71098
71099
71100             // Update a note
71101             // POST /api/0.6/notes/#id/comment?text=comment
71102             // POST /api/0.6/notes/#id/close?text=comment
71103             // POST /api/0.6/notes/#id/reopen?text=comment
71104             postNoteUpdate: function(note, newStatus, callback) {
71105                 if (!this.authenticated()) {
71106                     return callback({ message: 'Not Authenticated', status: -3 }, note);
71107                 }
71108                 if (_noteCache.inflightPost[note.id]) {
71109                     return callback({ message: 'Note update already inflight', status: -2 }, note);
71110                 }
71111
71112                 var action;
71113                 if (note.status !== 'closed' && newStatus === 'closed') {
71114                     action = 'close';
71115                 } else if (note.status !== 'open' && newStatus === 'open') {
71116                     action = 'reopen';
71117                 } else {
71118                     action = 'comment';
71119                     if (!note.newComment) { return; } // when commenting, comment required
71120                 }
71121
71122                 var path = '/api/0.6/notes/' + note.id + '/' + action;
71123                 if (note.newComment) {
71124                     path += '?' + utilQsString({ text: note.newComment });
71125                 }
71126
71127                 _noteCache.inflightPost[note.id] = oauth.xhr(
71128                     { method: 'POST', path: path },
71129                     wrapcb(this, done, _connectionID)
71130                 );
71131
71132
71133                 function done(err, xml) {
71134                     delete _noteCache.inflightPost[note.id];
71135                     if (err) { return callback(err); }
71136
71137                     // we get the updated note back, remove from caches and reparse..
71138                     this.removeNote(note);
71139
71140                     // update closed note cache - used to populate `closed:note` changeset tag
71141                     if (action === 'close') {
71142                         _noteCache.closed[note.id] = true;
71143                     } else if (action === 'reopen') {
71144                         delete _noteCache.closed[note.id];
71145                     }
71146
71147                     var options = { skipSeen: false };
71148                     return parseXML(xml, function(err, results) {
71149                         if (err) {
71150                             return callback(err);
71151                         } else {
71152                             return callback(undefined, results[0]);
71153                         }
71154                     }, options);
71155                 }
71156             },
71157
71158
71159             switch: function(options) {
71160                 urlroot = options.urlroot;
71161
71162                 oauth.options(Object.assign({
71163                     url: urlroot,
71164                     loading: authLoading,
71165                     done: authDone
71166                 }, options));
71167
71168                 this.reset();
71169                 this.userChangesets(function() {});  // eagerly load user details/changesets
71170                 dispatch$5.call('change');
71171                 return this;
71172             },
71173
71174
71175             toggle: function(val) {
71176                 _off = !val;
71177                 return this;
71178             },
71179
71180
71181             isChangesetInflight: function() {
71182                 return !!_changeset.inflight;
71183             },
71184
71185
71186             // get/set cached data
71187             // This is used to save/restore the state when entering/exiting the walkthrough
71188             // Also used for testing purposes.
71189             caches: function(obj) {
71190                 function cloneCache(source) {
71191                     var target = {};
71192                     Object.keys(source).forEach(function(k) {
71193                         if (k === 'rtree') {
71194                             target.rtree = new RBush().fromJSON(source.rtree.toJSON());  // clone rbush
71195                         } else if (k === 'note') {
71196                             target.note = {};
71197                             Object.keys(source.note).forEach(function(id) {
71198                                 target.note[id] = osmNote(source.note[id]);   // copy notes
71199                             });
71200                         } else {
71201                             target[k] = JSON.parse(JSON.stringify(source[k]));   // clone deep
71202                         }
71203                     });
71204                     return target;
71205                 }
71206
71207                 if (!arguments.length) {
71208                     return {
71209                         tile: cloneCache(_tileCache),
71210                         note: cloneCache(_noteCache),
71211                         user: cloneCache(_userCache)
71212                     };
71213                 }
71214
71215                 // access caches directly for testing (e.g., loading notes rtree)
71216                 if (obj === 'get') {
71217                     return {
71218                         tile: _tileCache,
71219                         note: _noteCache,
71220                         user: _userCache
71221                     };
71222                 }
71223
71224                 if (obj.tile) {
71225                     _tileCache = obj.tile;
71226                     _tileCache.inflight = {};
71227                 }
71228                 if (obj.note) {
71229                     _noteCache = obj.note;
71230                     _noteCache.inflight = {};
71231                     _noteCache.inflightPost = {};
71232                 }
71233                 if (obj.user) {
71234                     _userCache = obj.user;
71235                 }
71236
71237                 return this;
71238             },
71239
71240
71241             logout: function() {
71242                 _userChangesets = undefined;
71243                 _userDetails = undefined;
71244                 oauth.logout();
71245                 dispatch$5.call('change');
71246                 return this;
71247             },
71248
71249
71250             authenticated: function() {
71251                 return oauth.authenticated();
71252             },
71253
71254
71255             authenticate: function(callback) {
71256                 var that = this;
71257                 var cid = _connectionID;
71258                 _userChangesets = undefined;
71259                 _userDetails = undefined;
71260
71261                 function done(err, res) {
71262                     if (err) {
71263                         if (callback) { callback(err); }
71264                         return;
71265                     }
71266                     if (that.getConnectionId() !== cid) {
71267                         if (callback) { callback({ message: 'Connection Switched', status: -1 }); }
71268                         return;
71269                     }
71270                     _rateLimitError = undefined;
71271                     dispatch$5.call('change');
71272                     if (callback) { callback(err, res); }
71273                     that.userChangesets(function() {});  // eagerly load user details/changesets
71274                 }
71275
71276                 return oauth.authenticate(done);
71277             },
71278
71279
71280             imageryBlacklists: function() {
71281                 return _blacklists;
71282             },
71283
71284
71285             tileZoom: function(val) {
71286                 if (!arguments.length) { return _tileZoom; }
71287                 _tileZoom = val;
71288                 return this;
71289             },
71290
71291
71292             // get all cached notes covering the viewport
71293             notes: function(projection) {
71294                 var viewport = projection.clipExtent();
71295                 var min = [viewport[0][0], viewport[1][1]];
71296                 var max = [viewport[1][0], viewport[0][1]];
71297                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
71298
71299                 return _noteCache.rtree.search(bbox)
71300                     .map(function(d) { return d.data; });
71301             },
71302
71303
71304             // get a single note from the cache
71305             getNote: function(id) {
71306                 return _noteCache.note[id];
71307             },
71308
71309
71310             // remove a single note from the cache
71311             removeNote: function(note) {
71312                 if (!(note instanceof osmNote) || !note.id) { return; }
71313
71314                 delete _noteCache.note[note.id];
71315                 updateRtree$2(encodeNoteRtree(note), false);  // false = remove
71316             },
71317
71318
71319             // replace a single note in the cache
71320             replaceNote: function(note) {
71321                 if (!(note instanceof osmNote) || !note.id) { return; }
71322
71323                 _noteCache.note[note.id] = note;
71324                 updateRtree$2(encodeNoteRtree(note), true);  // true = replace
71325                 return note;
71326             },
71327
71328
71329             // Get an array of note IDs closed during this session.
71330             // Used to populate `closed:note` changeset tag
71331             getClosedIDs: function() {
71332                 return Object.keys(_noteCache.closed).sort();
71333             }
71334
71335         };
71336
71337         var apibase$3 = 'https://wiki.openstreetmap.org/w/api.php';
71338         var _inflight$1 = {};
71339         var _wikibaseCache = {};
71340         var _localeIDs = { en: false };
71341
71342
71343         var debouncedRequest = debounce(request, 500, { leading: false });
71344
71345         function request(url, callback) {
71346             if (_inflight$1[url]) { return; }
71347             var controller = new AbortController();
71348             _inflight$1[url] = controller;
71349
71350             d3_json(url, { signal: controller.signal })
71351                 .then(function(result) {
71352                     delete _inflight$1[url];
71353                     if (callback) { callback(null, result); }
71354                 })
71355                 .catch(function(err) {
71356                     delete _inflight$1[url];
71357                     if (err.name === 'AbortError') { return; }
71358                     if (callback) { callback(err.message); }
71359                 });
71360         }
71361
71362
71363         /**
71364          * Get the best string value from the descriptions/labels result
71365          * Note that if mediawiki doesn't recognize language code, it will return all values.
71366          * In that case, fallback to use English.
71367          * @param values object - either descriptions or labels
71368          * @param langCode String
71369          * @returns localized string
71370          */
71371         function localizedToString(values, langCode) {
71372             if (values) {
71373                 values = values[langCode] || values.en;
71374             }
71375             return values ? values.value : '';
71376         }
71377
71378
71379         var serviceOsmWikibase = {
71380
71381             init: function() {
71382                 _inflight$1 = {};
71383                 _wikibaseCache = {};
71384                 _localeIDs = {};
71385             },
71386
71387
71388             reset: function() {
71389                 Object.values(_inflight$1).forEach(function(controller) { controller.abort(); });
71390                 _inflight$1 = {};
71391             },
71392
71393
71394             /**
71395              * Get the best value for the property, or undefined if not found
71396              * @param entity object from wikibase
71397              * @param property string e.g. 'P4' for image
71398              * @param langCode string e.g. 'fr' for French
71399              */
71400             claimToValue: function(entity, property, langCode) {
71401                 if (!entity.claims[property]) { return undefined; }
71402                 var locale = _localeIDs[langCode];
71403                 var preferredPick, localePick;
71404
71405                 entity.claims[property].forEach(function(stmt) {
71406                     // If exists, use value limited to the needed language (has a qualifier P26 = locale)
71407                     // Or if not found, use the first value with the "preferred" rank
71408                     if (!preferredPick && stmt.rank === 'preferred') {
71409                         preferredPick = stmt;
71410                     }
71411                     if (locale && stmt.qualifiers && stmt.qualifiers.P26 &&
71412                         stmt.qualifiers.P26[0].datavalue.value.id === locale
71413                     ) {
71414                         localePick = stmt;
71415                     }
71416                 });
71417
71418                 var result = localePick || preferredPick;
71419                 if (result) {
71420                     var datavalue = result.mainsnak.datavalue;
71421                     return datavalue.type === 'wikibase-entityid' ? datavalue.value.id : datavalue.value;
71422                 } else {
71423                     return undefined;
71424                 }
71425             },
71426
71427
71428             /**
71429              * Convert monolingual property into a key-value object (language -> value)
71430              * @param entity object from wikibase
71431              * @param property string e.g. 'P31' for monolingual wiki page title
71432              */
71433             monolingualClaimToValueObj: function(entity, property) {
71434                 if (!entity || !entity.claims[property]) { return undefined; }
71435
71436                 return entity.claims[property].reduce(function(acc, obj) {
71437                     var value = obj.mainsnak.datavalue.value;
71438                     acc[value.language] = value.text;
71439                     return acc;
71440                 }, {});
71441             },
71442
71443
71444             toSitelink: function(key, value) {
71445                 var result = value ? ('Tag:' + key + '=' + value) : 'Key:' + key;
71446                 return result.replace(/_/g, ' ').trim();
71447             },
71448
71449
71450             //
71451             // Pass params object of the form:
71452             // {
71453             //   key: 'string',
71454             //   value: 'string',
71455             //   rtype: 'string',
71456             //   langCode: 'string'
71457             // }
71458             //
71459             getEntity: function(params, callback) {
71460                 var doRequest = params.debounce ? debouncedRequest : request;
71461                 var that = this;
71462                 var titles = [];
71463                 var result = {};
71464                 var rtypeSitelink = params.rtype ? ('Relation:' + params.rtype).replace(/_/g, ' ').trim() : false;
71465                 var keySitelink = params.key ? this.toSitelink(params.key) : false;
71466                 var tagSitelink = (params.key && params.value) ? this.toSitelink(params.key, params.value) : false;
71467                 var localeSitelink;
71468
71469                 if (params.langCode && _localeIDs[params.langCode] === undefined) {
71470                     // If this is the first time we are asking about this locale,
71471                     // fetch corresponding entity (if it exists), and cache it.
71472                     // If there is no such entry, cache `false` value to avoid re-requesting it.
71473                     localeSitelink = ('Locale:' + params.langCode).replace(/_/g, ' ').trim();
71474                     titles.push(localeSitelink);
71475                 }
71476
71477                 if (rtypeSitelink) {
71478                     if (_wikibaseCache[rtypeSitelink]) {
71479                         result.rtype = _wikibaseCache[rtypeSitelink];
71480                     } else {
71481                         titles.push(rtypeSitelink);
71482                     }
71483                 }
71484
71485                 if (keySitelink) {
71486                     if (_wikibaseCache[keySitelink]) {
71487                         result.key = _wikibaseCache[keySitelink];
71488                     } else {
71489                         titles.push(keySitelink);
71490                     }
71491                 }
71492
71493                 if (tagSitelink) {
71494                     if (_wikibaseCache[tagSitelink]) {
71495                         result.tag = _wikibaseCache[tagSitelink];
71496                     } else {
71497                         titles.push(tagSitelink);
71498                     }
71499                 }
71500
71501                 if (!titles.length) {
71502                     // Nothing to do, we already had everything in the cache
71503                     return callback(null, result);
71504                 }
71505
71506                 // Requesting just the user language code
71507                 // If backend recognizes the code, it will perform proper fallbacks,
71508                 // and the result will contain the requested code. If not, all values are returned:
71509                 // {"zh-tw":{"value":"...","language":"zh-tw","source-language":"zh-hant"}
71510                 // {"pt-br":{"value":"...","language":"pt","for-language":"pt-br"}}
71511                 var obj = {
71512                     action: 'wbgetentities',
71513                     sites: 'wiki',
71514                     titles: titles.join('|'),
71515                     languages: params.langCode,
71516                     languagefallback: 1,
71517                     origin: '*',
71518                     format: 'json',
71519                     // There is an MW Wikibase API bug https://phabricator.wikimedia.org/T212069
71520                     // We shouldn't use v1 until it gets fixed, but should switch to it afterwards
71521                     // formatversion: 2,
71522                 };
71523
71524                 var url = apibase$3 + '?' + utilQsString(obj);
71525                 doRequest(url, function(err, d) {
71526                     if (err) {
71527                         callback(err);
71528                     } else if (!d.success || d.error) {
71529                         callback(d.error.messages.map(function(v) { return v.html['*']; }).join('<br>'));
71530                     } else {
71531                         var localeID = false;
71532                         Object.values(d.entities).forEach(function(res) {
71533                             if (res.missing !== '') {
71534                                 // Simplify access to the localized values
71535                                 res.description = localizedToString(res.descriptions, params.langCode);
71536                                 res.label = localizedToString(res.labels, params.langCode);
71537
71538                                 var title = res.sitelinks.wiki.title;
71539                                 if (title === rtypeSitelink) {
71540                                     _wikibaseCache[rtypeSitelink] = res;
71541                                     result.rtype = res;
71542                                 } else if (title === keySitelink) {
71543                                     _wikibaseCache[keySitelink] = res;
71544                                     result.key = res;
71545                                 } else if (title === tagSitelink) {
71546                                     _wikibaseCache[tagSitelink] = res;
71547                                     result.tag = res;
71548                                 } else if (title === localeSitelink) {
71549                                     localeID = res.id;
71550                                 } else {
71551                                     console.log('Unexpected title ' + title);  // eslint-disable-line no-console
71552                                 }
71553                             }
71554                         });
71555
71556                         if (localeSitelink) {
71557                             // If locale ID is not found, store false to prevent repeated queries
71558                             that.addLocale(params.langCode, localeID);
71559                         }
71560
71561                         callback(null, result);
71562                     }
71563                 });
71564             },
71565
71566
71567             //
71568             // Pass params object of the form:
71569             // {
71570             //   key: 'string',     // required
71571             //   value: 'string'    // optional
71572             // }
71573             //   -or-
71574             // {
71575             //   rtype: 'rtype'     // relation type  (e.g. 'multipolygon')
71576             // }
71577             //
71578             // Get an result object used to display tag documentation
71579             // {
71580             //   title:        'string',
71581             //   description:  'string',
71582             //   editURL:      'string',
71583             //   imageURL:     'string',
71584             //   wiki:         { title: 'string', text: 'string', url: 'string' }
71585             // }
71586             //
71587             getDocs: function(params, callback) {
71588                 var that = this;
71589                 var langCode = utilDetect().locale.toLowerCase();
71590                 params.langCode = langCode;
71591
71592                 this.getEntity(params, function(err, data) {
71593                     if (err) {
71594                         callback(err);
71595                         return;
71596                     }
71597
71598                     var entity = data.rtype || data.tag || data.key;
71599                     if (!entity) {
71600                         callback('No entity');
71601                         return;
71602                     }
71603
71604                     // prepare result
71605                     var result = {
71606                         title: entity.title,
71607                         description: entity.description,
71608                         editURL: 'https://wiki.openstreetmap.org/wiki/' + entity.title
71609                     };
71610
71611                     // add image
71612                     if (entity.claims) {
71613                         var imageroot;
71614                         var image = that.claimToValue(entity, 'P4', langCode);
71615                         if (image) {
71616                             imageroot = 'https://commons.wikimedia.org/w/index.php';
71617                         } else {
71618                             image = that.claimToValue(entity, 'P28', langCode);
71619                             if (image) {
71620                                 imageroot = 'https://wiki.openstreetmap.org/w/index.php';
71621                             }
71622                         }
71623                         if (imageroot && image) {
71624                             result.imageURL = imageroot + '?' + utilQsString({
71625                                 title: 'Special:Redirect/file/' + image,
71626                                 width: 400
71627                             });
71628                         }
71629                     }
71630
71631                     // Try to get a wiki page from tag data item first, followed by the corresponding key data item.
71632                     // If neither tag nor key data item contain a wiki page in the needed language nor English,
71633                     // get the first found wiki page from either the tag or the key item.
71634                     var rtypeWiki = that.monolingualClaimToValueObj(data.rtype, 'P31');
71635                     var tagWiki = that.monolingualClaimToValueObj(data.tag, 'P31');
71636                     var keyWiki = that.monolingualClaimToValueObj(data.key, 'P31');
71637
71638                     // If exact language code does not exist, try to find the first part before the '-'
71639                     // BUG: in some cases, a more elaborate fallback logic might be needed
71640                     var langPrefix = langCode.split('-', 2)[0];
71641
71642                     // use the first acceptable wiki page
71643                     result.wiki =
71644                         getWikiInfo(rtypeWiki, langCode, 'inspector.wiki_reference') ||
71645                         getWikiInfo(rtypeWiki, langPrefix, 'inspector.wiki_reference') ||
71646                         getWikiInfo(rtypeWiki, 'en', 'inspector.wiki_en_reference') ||
71647                         getWikiInfo(tagWiki, langCode, 'inspector.wiki_reference') ||
71648                         getWikiInfo(tagWiki, langPrefix, 'inspector.wiki_reference') ||
71649                         getWikiInfo(tagWiki, 'en', 'inspector.wiki_en_reference') ||
71650                         getWikiInfo(keyWiki, langCode, 'inspector.wiki_reference') ||
71651                         getWikiInfo(keyWiki, langPrefix, 'inspector.wiki_reference') ||
71652                         getWikiInfo(keyWiki, 'en', 'inspector.wiki_en_reference');
71653
71654                     callback(null, result);
71655
71656
71657                     // Helper method to get wiki info if a given language exists
71658                     function getWikiInfo(wiki, langCode, tKey) {
71659                         if (wiki && wiki[langCode]) {
71660                             return {
71661                                 title: wiki[langCode],
71662                                 text: tKey,
71663                                 url: 'https://wiki.openstreetmap.org/wiki/' + wiki[langCode]
71664                             };
71665                         }
71666                     }
71667                 });
71668             },
71669
71670
71671             addLocale: function(langCode, qid) {
71672                 // Makes it easier to unit test
71673                 _localeIDs[langCode] = qid;
71674             },
71675
71676
71677             apibase: function(val) {
71678                 if (!arguments.length) { return apibase$3; }
71679                 apibase$3 = val;
71680                 return this;
71681             }
71682
71683         };
71684
71685         var jsonpCache = {};
71686         window.jsonpCache = jsonpCache;
71687
71688         function jsonpRequest(url, callback) {
71689             var request = {
71690                 abort: function() {}
71691             };
71692
71693             if (window.JSONP_FIX) {
71694                 if (window.JSONP_DELAY === 0) {
71695                     callback(window.JSONP_FIX);
71696                 } else {
71697                     var t = window.setTimeout(function() {
71698                         callback(window.JSONP_FIX);
71699                     }, window.JSONP_DELAY || 0);
71700
71701                     request.abort = function() { window.clearTimeout(t); };
71702                 }
71703
71704                 return request;
71705             }
71706
71707             function rand() {
71708                 var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
71709                 var c = '';
71710                 var i = -1;
71711                 while (++i < 15) { c += chars.charAt(Math.floor(Math.random() * 52)); }
71712                 return c;
71713             }
71714
71715             function create(url) {
71716                 var e = url.match(/callback=(\w+)/);
71717                 var c = e ? e[1] : rand();
71718
71719                 jsonpCache[c] = function(data) {
71720                     if (jsonpCache[c]) {
71721                         callback(data);
71722                     }
71723                     finalize();
71724                 };
71725
71726                 function finalize() {
71727                     delete jsonpCache[c];
71728                     script.remove();
71729                 }
71730
71731                 request.abort = finalize;
71732                 return 'jsonpCache.' + c;
71733             }
71734
71735             var cb = create(url);
71736
71737             var script = d3_select('head')
71738                 .append('script')
71739                 .attr('type', 'text/javascript')
71740                 .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
71741
71742             return request;
71743         }
71744
71745         var bubbleApi = 'https://dev.virtualearth.net/mapcontrol/HumanScaleServices/GetBubbles.ashx?';
71746         var streetsideImagesApi = 'https://t.ssl.ak.tiles.virtualearth.net/tiles/';
71747         var bubbleAppKey = 'AuftgJsO0Xs8Ts4M1xZUQJQXJNsvmh3IV8DkNieCiy3tCwCUMq76-WpkrBtNAuEm';
71748         var pannellumViewerCSS = 'pannellum-streetside/pannellum.css';
71749         var pannellumViewerJS = 'pannellum-streetside/pannellum.js';
71750         var maxResults$2 = 2000;
71751         var tileZoom$2 = 16.5;
71752         var tiler$5 = utilTiler().zoomExtent([tileZoom$2, tileZoom$2]).skipNullIsland(true);
71753         var dispatch$6 = dispatch('loadedBubbles', 'viewerChanged');
71754         var minHfov = 10;         // zoom in degrees:  20, 10, 5
71755         var maxHfov = 90;         // zoom out degrees
71756         var defaultHfov = 45;
71757
71758         var _hires = false;
71759         var _resolution = 512;    // higher numbers are slower - 512, 1024, 2048, 4096
71760         var _currScene = 0;
71761         var _ssCache;
71762         var _pannellumViewer;
71763         var _sceneOptions;
71764         var _dataUrlArray = [];
71765
71766
71767         /**
71768          * abortRequest().
71769          */
71770         function abortRequest$5(i) {
71771           i.abort();
71772         }
71773
71774
71775         /**
71776          * localeTimeStamp().
71777          */
71778         function localeTimestamp(s) {
71779           if (!s) { return null; }
71780           var detected = utilDetect();
71781           var options = { day: 'numeric', month: 'short', year: 'numeric' };
71782           var d = new Date(s);
71783           if (isNaN(d.getTime())) { return null; }
71784           return d.toLocaleString(detected.locale, options);
71785         }
71786
71787
71788         /**
71789          * loadTiles() wraps the process of generating tiles and then fetching image points for each tile.
71790          */
71791         function loadTiles$2(which, url, projection, margin) {
71792           var tiles = tiler$5.margin(margin).getTiles(projection);
71793
71794           // abort inflight requests that are no longer needed
71795           var cache = _ssCache[which];
71796           Object.keys(cache.inflight).forEach(function (k) {
71797             var wanted = tiles.find(function (tile) { return k.indexOf(tile.id + ',') === 0; });
71798             if (!wanted) {
71799               abortRequest$5(cache.inflight[k]);
71800               delete cache.inflight[k];
71801             }
71802           });
71803
71804           tiles.forEach(function (tile) { return loadNextTilePage$2(which, url, tile); });
71805         }
71806
71807
71808         /**
71809          * loadNextTilePage() load data for the next tile page in line.
71810          */
71811         function loadNextTilePage$2(which, url, tile) {
71812           var cache = _ssCache[which];
71813           var nextPage = cache.nextPage[tile.id] || 0;
71814           var id = tile.id + ',' + String(nextPage);
71815           if (cache.loaded[id] || cache.inflight[id]) { return; }
71816
71817           cache.inflight[id] = getBubbles(url, tile, function (bubbles) {
71818             cache.loaded[id] = true;
71819             delete cache.inflight[id];
71820             if (!bubbles) { return; }
71821
71822             // [].shift() removes the first element, some statistics info, not a bubble point
71823             bubbles.shift();
71824
71825             var features = bubbles.map(function (bubble) {
71826               if (cache.points[bubble.id]) { return null; }  // skip duplicates
71827
71828               var loc = [bubble.lo, bubble.la];
71829               var d = {
71830                 loc: loc,
71831                 key: bubble.id,
71832                 ca: bubble.he,
71833                 captured_at: bubble.cd,
71834                 captured_by: 'microsoft',
71835                 // nbn: bubble.nbn,
71836                 // pbn: bubble.pbn,
71837                 // ad: bubble.ad,
71838                 // rn: bubble.rn,
71839                 pr: bubble.pr,  // previous
71840                 ne: bubble.ne,  // next
71841                 pano: true,
71842                 sequenceKey: null
71843               };
71844
71845               cache.points[bubble.id] = d;
71846
71847               // a sequence starts here
71848               if (bubble.pr === undefined) {
71849                 cache.leaders.push(bubble.id);
71850               }
71851
71852               return {
71853                 minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
71854               };
71855
71856             }).filter(Boolean);
71857
71858             cache.rtree.load(features);
71859
71860             connectSequences();
71861
71862             if (which === 'bubbles') {
71863               dispatch$6.call('loadedBubbles');
71864             }
71865           });
71866         }
71867
71868
71869         // call this sometimes to connect the bubbles into sequences
71870         function connectSequences() {
71871           var cache = _ssCache.bubbles;
71872           var keepLeaders = [];
71873
71874           for (var i = 0; i < cache.leaders.length; i++) {
71875             var bubble = cache.points[cache.leaders[i]];
71876             var seen = {};
71877
71878             // try to make a sequence.. use the key of the leader bubble.
71879             var sequence = { key: bubble.key, bubbles: [] };
71880             var complete = false;
71881
71882             do {
71883               sequence.bubbles.push(bubble);
71884               seen[bubble.key] = true;
71885
71886               if (bubble.ne === undefined) {
71887                 complete = true;
71888               } else {
71889                 bubble = cache.points[bubble.ne];  // advance to next
71890               }
71891             } while (bubble && !seen[bubble.key] && !complete);
71892
71893
71894             if (complete) {
71895               _ssCache.sequences[sequence.key] = sequence;
71896
71897               // assign bubbles to the sequence
71898               for (var j = 0; j < sequence.bubbles.length; j++) {
71899                 sequence.bubbles[j].sequenceKey = sequence.key;
71900               }
71901
71902               // create a GeoJSON LineString
71903               sequence.geojson = {
71904                 type: 'LineString',
71905                 properties: { key: sequence.key },
71906                 coordinates: sequence.bubbles.map(function (d) { return d.loc; })
71907               };
71908
71909             } else {
71910               keepLeaders.push(cache.leaders[i]);
71911             }
71912           }
71913
71914           // couldn't complete these, save for later
71915           cache.leaders = keepLeaders;
71916         }
71917
71918
71919         /**
71920          * getBubbles() handles the request to the server for a tile extent of 'bubbles' (streetside image locations).
71921          */
71922         function getBubbles(url, tile, callback) {
71923           var rect = tile.extent.rectangle();
71924           var urlForRequest = url + utilQsString({
71925             n: rect[3],
71926             s: rect[1],
71927             e: rect[2],
71928             w: rect[0],
71929             c: maxResults$2,
71930             appkey: bubbleAppKey,
71931             jsCallback: '{callback}'
71932           });
71933
71934           return jsonpRequest(urlForRequest, function (data) {
71935             if (!data || data.error) {
71936               callback(null);
71937             } else {
71938               callback(data);
71939             }
71940           });
71941         }
71942
71943
71944         // partition viewport into higher zoom tiles
71945         function partitionViewport$2(projection) {
71946           var z = geoScaleToZoom(projection.scale());
71947           var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
71948           var tiler = utilTiler().zoomExtent([z2, z2]);
71949
71950           return tiler.getTiles(projection)
71951             .map(function (tile) { return tile.extent; });
71952         }
71953
71954
71955         // no more than `limit` results per partition.
71956         function searchLimited$2(limit, projection, rtree) {
71957           limit = limit || 5;
71958
71959           return partitionViewport$2(projection)
71960             .reduce(function (result, extent) {
71961               var found = rtree.search(extent.bbox())
71962                 .slice(0, limit)
71963                 .map(function (d) { return d.data; });
71964
71965               return (found.length ? result.concat(found) : result);
71966             }, []);
71967         }
71968
71969
71970         /**
71971          * loadImage()
71972          */
71973         function loadImage(imgInfo) {
71974           return new Promise(function (resolve) {
71975             var img = new Image();
71976             img.onload = function () {
71977               var canvas = document.getElementById('canvas' + imgInfo.face);
71978               var ctx = canvas.getContext('2d');
71979               ctx.drawImage(img, imgInfo.x, imgInfo.y);
71980               resolve({ imgInfo: imgInfo, status: 'ok' });
71981             };
71982             img.onerror = function () {
71983               resolve({ data: imgInfo, status: 'error' });
71984             };
71985             img.setAttribute('crossorigin', '');
71986             img.src = imgInfo.url;
71987           });
71988         }
71989
71990
71991         /**
71992          * loadCanvas()
71993          */
71994         function loadCanvas(imageGroup) {
71995           return Promise.all(imageGroup.map(loadImage))
71996             .then(function (data) {
71997               var canvas = document.getElementById('canvas' + data[0].imgInfo.face);
71998               var which = { '01': 0, '02': 1, '03': 2, '10': 3, '11': 4, '12': 5 };
71999               var face = data[0].imgInfo.face;
72000               _dataUrlArray[which[face]] = canvas.toDataURL('image/jpeg', 1.0);
72001               return { status: 'loadCanvas for face ' + data[0].imgInfo.face + 'ok'};
72002             });
72003         }
72004
72005
72006         /**
72007          * loadFaces()
72008          */
72009         function loadFaces(faceGroup) {
72010           return Promise.all(faceGroup.map(loadCanvas))
72011             .then(function () { return { status: 'loadFaces done' }; });
72012         }
72013
72014
72015         function setupCanvas(selection, reset) {
72016           if (reset) {
72017             selection.selectAll('#divForCanvasWork')
72018               .remove();
72019           }
72020
72021           // Add the Streetside working canvases. These are used for 'stitching', or combining,
72022           // multiple images for each of the six faces, before passing to the Pannellum control as DataUrls
72023           selection.selectAll('#divForCanvasWork')
72024             .data([0])
72025             .enter()
72026             .append('div')
72027             .attr('id', 'divForCanvasWork')
72028             .attr('display', 'none')
72029             .selectAll('canvas')
72030             .data(['canvas01', 'canvas02', 'canvas03', 'canvas10', 'canvas11', 'canvas12'])
72031             .enter()
72032             .append('canvas')
72033             .attr('id', function (d) { return d; })
72034             .attr('width', _resolution)
72035             .attr('height', _resolution);
72036         }
72037
72038
72039         function qkToXY(qk) {
72040           var x = 0;
72041           var y = 0;
72042           var scale = 256;
72043           for (var i = qk.length; i > 0; i--) {
72044             var key = qk[i-1];
72045             x += (+(key === '1' || key === '3')) * scale;
72046             y += (+(key === '2' || key === '3')) * scale;
72047             scale *= 2;
72048           }
72049           return [x, y];
72050         }
72051
72052
72053         function getQuadKeys() {
72054           var dim = _resolution / 256;
72055           var quadKeys;
72056
72057           if (dim === 16) {
72058             quadKeys = [
72059               '0000','0001','0010','0011','0100','0101','0110','0111',  '1000','1001','1010','1011','1100','1101','1110','1111',
72060               '0002','0003','0012','0013','0102','0103','0112','0113',  '1002','1003','1012','1013','1102','1103','1112','1113',
72061               '0020','0021','0030','0031','0120','0121','0130','0131',  '1020','1021','1030','1031','1120','1121','1130','1131',
72062               '0022','0023','0032','0033','0122','0123','0132','0133',  '1022','1023','1032','1033','1122','1123','1132','1133',
72063               '0200','0201','0210','0211','0300','0301','0310','0311',  '1200','1201','1210','1211','1300','1301','1310','1311',
72064               '0202','0203','0212','0213','0302','0303','0312','0313',  '1202','1203','1212','1213','1302','1303','1312','1313',
72065               '0220','0221','0230','0231','0320','0321','0330','0331',  '1220','1221','1230','1231','1320','1321','1330','1331',
72066               '0222','0223','0232','0233','0322','0323','0332','0333',  '1222','1223','1232','1233','1322','1323','1332','1333',
72067
72068               '2000','2001','2010','2011','2100','2101','2110','2111',  '3000','3001','3010','3011','3100','3101','3110','3111',
72069               '2002','2003','2012','2013','2102','2103','2112','2113',  '3002','3003','3012','3013','3102','3103','3112','3113',
72070               '2020','2021','2030','2031','2120','2121','2130','2131',  '3020','3021','3030','3031','3120','3121','3130','3131',
72071               '2022','2023','2032','2033','2122','2123','2132','2133',  '3022','3023','3032','3033','3122','3123','3132','3133',
72072               '2200','2201','2210','2211','2300','2301','2310','2311',  '3200','3201','3210','3211','3300','3301','3310','3311',
72073               '2202','2203','2212','2213','2302','2303','2312','2313',  '3202','3203','3212','3213','3302','3303','3312','3313',
72074               '2220','2221','2230','2231','2320','2321','2330','2331',  '3220','3221','3230','3231','3320','3321','3330','3331',
72075               '2222','2223','2232','2233','2322','2323','2332','2333',  '3222','3223','3232','3233','3322','3323','3332','3333'
72076             ];
72077
72078           } else if (dim === 8) {
72079             quadKeys = [
72080               '000','001','010','011',  '100','101','110','111',
72081               '002','003','012','013',  '102','103','112','113',
72082               '020','021','030','031',  '120','121','130','131',
72083               '022','023','032','033',  '122','123','132','133',
72084
72085               '200','201','210','211',  '300','301','310','311',
72086               '202','203','212','213',  '302','303','312','313',
72087               '220','221','230','231',  '320','321','330','331',
72088               '222','223','232','233',  '322','323','332','333'
72089             ];
72090
72091           } else if (dim === 4) {
72092             quadKeys = [
72093               '00','01',  '10','11',
72094               '02','03',  '12','13',
72095
72096               '20','21',  '30','31',
72097               '22','23',  '32','33'
72098             ];
72099
72100           } else {  // dim === 2
72101             quadKeys = [
72102               '0', '1',
72103               '2', '3'
72104             ];
72105           }
72106
72107           return quadKeys;
72108         }
72109
72110
72111
72112         var serviceStreetside = {
72113           /**
72114            * init() initialize streetside.
72115            */
72116           init: function() {
72117             if (!_ssCache) {
72118               this.reset();
72119             }
72120
72121             this.event = utilRebind(this, dispatch$6, 'on');
72122           },
72123
72124           /**
72125            * reset() reset the cache.
72126            */
72127           reset: function() {
72128             if (_ssCache) {
72129               Object.values(_ssCache.bubbles.inflight).forEach(abortRequest$5);
72130             }
72131
72132             _ssCache = {
72133               bubbles: { inflight: {}, loaded: {}, nextPage: {}, rtree: new RBush(), points: {}, leaders: [] },
72134               sequences: {}
72135             };
72136           },
72137
72138           /**
72139            * bubbles()
72140            */
72141           bubbles: function(projection) {
72142             var limit = 5;
72143             return searchLimited$2(limit, projection, _ssCache.bubbles.rtree);
72144           },
72145
72146
72147           sequences: function(projection) {
72148             var viewport = projection.clipExtent();
72149             var min = [viewport[0][0], viewport[1][1]];
72150             var max = [viewport[1][0], viewport[0][1]];
72151             var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
72152             var seen = {};
72153             var results = [];
72154
72155             // all sequences for bubbles in viewport
72156             _ssCache.bubbles.rtree.search(bbox)
72157               .forEach(function (d) {
72158                 var key = d.data.sequenceKey;
72159                 if (key && !seen[key]) {
72160                     seen[key] = true;
72161                     results.push(_ssCache.sequences[key].geojson);
72162                 }
72163               });
72164
72165             return results;
72166           },
72167
72168
72169           /**
72170            * loadBubbles()
72171            */
72172           loadBubbles: function(projection, margin) {
72173             // by default: request 2 nearby tiles so we can connect sequences.
72174             if (margin === undefined) { margin = 2; }
72175
72176             loadTiles$2('bubbles', bubbleApi, projection, margin);
72177           },
72178
72179
72180           viewer: function() {
72181             return _pannellumViewer;
72182           },
72183
72184
72185           initViewer: function () {
72186             if (!window.pannellum) { return; }
72187             if (_pannellumViewer) { return; }
72188
72189             var sceneID = ++_currScene + '';
72190             var options = {
72191               'default': { firstScene: sceneID },
72192               scenes: {}
72193             };
72194             options.scenes[sceneID] = _sceneOptions;
72195
72196             _pannellumViewer = window.pannellum.viewer('viewer-streetside', options);
72197
72198             _pannellumViewer
72199               .on('mousedown', function () {
72200                 d3_select(window)
72201                   .on('mousemove.pannellum', function () { dispatch$6.call('viewerChanged'); });
72202               })
72203               .on('mouseup', function () {
72204                 d3_select(window)
72205                   .on('mousemove.pannellum', null);
72206
72207                 // continue dispatching events for a few seconds, in case viewer has inertia.
72208                 var t = timer(function (elapsed) {
72209                   dispatch$6.call('viewerChanged');
72210                   if (elapsed > 2000) {
72211                     t.stop();
72212                   }
72213                 });
72214               });
72215           },
72216
72217
72218           /**
72219            * loadViewer() create the streeside viewer.
72220            */
72221           loadViewer: function(context) {
72222             var that = this;
72223
72224             // create ms-wrapper, a photo wrapper class
72225             var wrap = d3_select('#photoviewer').selectAll('.ms-wrapper')
72226               .data([0]);
72227
72228             // inject ms-wrapper into the photoviewer div
72229             // (used by all to house each custom photo viewer)
72230             var wrapEnter = wrap.enter()
72231               .append('div')
72232               .attr('id', 'ms')
72233               .attr('class', 'photo-wrapper ms-wrapper')
72234               .classed('hide', true);
72235
72236             // inject div to support streetside viewer (pannellum) and attribution line
72237             wrapEnter
72238               .append('div')
72239               .attr('id', 'viewer-streetside')
72240               .append('div')
72241               .attr('class', 'photo-attribution fillD');
72242
72243             var controlsEnter = wrapEnter
72244               .append('div')
72245               .attr('class', 'photo-controls-wrap')
72246               .append('div')
72247               .attr('class', 'photo-controls');
72248
72249             controlsEnter
72250               .append('button')
72251               .on('click.back', step(-1))
72252               .text('◄');
72253
72254             controlsEnter
72255               .append('button')
72256               .on('click.forward', step(1))
72257               .text('►');
72258
72259
72260             // create working canvas for stitching together images
72261             wrap = wrap
72262               .merge(wrapEnter)
72263               .call(setupCanvas, true);
72264
72265             // load streetside pannellum viewer css
72266             d3_select('head').selectAll('#streetside-viewercss')
72267               .data([0])
72268               .enter()
72269               .append('link')
72270               .attr('id', 'streetside-viewercss')
72271               .attr('rel', 'stylesheet')
72272               .attr('href', context.asset(pannellumViewerCSS));
72273
72274             // load streetside pannellum viewer js
72275             d3_select('head').selectAll('#streetside-viewerjs')
72276               .data([0])
72277               .enter()
72278               .append('script')
72279               .attr('id', 'streetside-viewerjs')
72280               .attr('src', context.asset(pannellumViewerJS));
72281
72282
72283             // Register viewer resize handler
72284             context.ui().photoviewer.on('resize.streetside', function () {
72285               if (_pannellumViewer) {
72286                 _pannellumViewer.resize();
72287               }
72288             });
72289
72290
72291             function step(stepBy) {
72292               return function () {
72293                 var viewer = d3_select('#photoviewer');
72294                 var selected = viewer.empty() ? undefined : viewer.datum();
72295                 if (!selected) { return; }
72296
72297                 var nextID = (stepBy === 1 ? selected.ne : selected.pr);
72298                 var yaw = _pannellumViewer.getYaw();
72299                 var ca = selected.ca + yaw;
72300                 var origin = selected.loc;
72301
72302                 // construct a search trapezoid pointing out from current bubble
72303                 var meters = 35;
72304                 var p1 = [
72305                   origin[0] + geoMetersToLon(meters / 5, origin[1]),
72306                   origin[1]
72307                 ];
72308                 var p2 = [
72309                   origin[0] + geoMetersToLon(meters / 2, origin[1]),
72310                   origin[1] + geoMetersToLat(meters)
72311                 ];
72312                 var p3 = [
72313                   origin[0] - geoMetersToLon(meters / 2, origin[1]),
72314                   origin[1] + geoMetersToLat(meters)
72315                 ];
72316                 var p4 = [
72317                   origin[0] - geoMetersToLon(meters / 5, origin[1]),
72318                   origin[1]
72319                 ];
72320
72321                 var poly = [p1, p2, p3, p4, p1];
72322
72323                 // rotate it to face forward/backward
72324                 var angle = (stepBy === 1 ? ca : ca + 180) * (Math.PI / 180);
72325                 poly = geoRotate(poly, -angle, origin);
72326
72327                 var extent = poly.reduce(function (extent, point) {
72328                   return extent.extend(geoExtent(point));
72329                 }, geoExtent());
72330
72331                 // find nearest other bubble in the search polygon
72332                 var minDist = Infinity;
72333                 _ssCache.bubbles.rtree.search(extent.bbox())
72334                   .forEach(function (d) {
72335                     if (d.data.key === selected.key) { return; }
72336                     if (!geoPointInPolygon(d.data.loc, poly)) { return; }
72337
72338                     var dist = geoVecLength(d.data.loc, selected.loc);
72339                     var theta = selected.ca - d.data.ca;
72340                     var minTheta = Math.min(Math.abs(theta), 360 - Math.abs(theta));
72341                     if (minTheta > 20) {
72342                       dist += 5;  // penalize distance if camera angles don't match
72343                     }
72344
72345                     if (dist < minDist) {
72346                       nextID = d.data.key;
72347                       minDist = dist;
72348                     }
72349                   });
72350
72351                 var nextBubble = nextID && _ssCache.bubbles.points[nextID];
72352                 if (!nextBubble) { return; }
72353
72354                 context.map().centerEase(nextBubble.loc);
72355
72356                 that.selectImage(nextBubble)
72357                   .then(function (response) {
72358                     if (response.status === 'ok') {
72359                       _sceneOptions.yaw = yaw;
72360                       that.showViewer();
72361                     }
72362                   });
72363               };
72364             }
72365           },
72366
72367
72368           /**
72369            * showViewer()
72370            */
72371           showViewer: function(yaw) {
72372             if (!_sceneOptions) { return; }
72373
72374             if (yaw !== undefined) {
72375               _sceneOptions.yaw = yaw;
72376             }
72377
72378             if (!_pannellumViewer) {
72379               this.initViewer();
72380             } else {
72381               // make a new scene
72382               var sceneID = ++_currScene + '';
72383               _pannellumViewer
72384                 .addScene(sceneID, _sceneOptions)
72385                 .loadScene(sceneID);
72386
72387               // remove previous scene
72388               if (_currScene > 2) {
72389                 sceneID = (_currScene - 1) + '';
72390                 _pannellumViewer
72391                   .removeScene(sceneID);
72392               }
72393             }
72394
72395             var wrap = d3_select('#photoviewer')
72396               .classed('hide', false);
72397
72398             var isHidden = wrap.selectAll('.photo-wrapper.ms-wrapper.hide').size();
72399
72400             if (isHidden) {
72401               wrap
72402                 .selectAll('.photo-wrapper:not(.ms-wrapper)')
72403                 .classed('hide', true);
72404
72405               wrap
72406                 .selectAll('.photo-wrapper.ms-wrapper')
72407                 .classed('hide', false);
72408             }
72409
72410             return this;
72411           },
72412
72413
72414           /**
72415            * hideViewer()
72416            */
72417           hideViewer: function () {
72418             var viewer = d3_select('#photoviewer');
72419             if (!viewer.empty()) { viewer.datum(null); }
72420
72421             viewer
72422               .classed('hide', true)
72423               .selectAll('.photo-wrapper')
72424               .classed('hide', true);
72425
72426             d3_selectAll('.viewfield-group, .sequence, .icon-sign')
72427               .classed('currentView', false);
72428
72429             return this.setStyles(null, true);
72430           },
72431
72432
72433           /**
72434            * selectImage().
72435            */
72436           selectImage: function (d) {
72437             var that = this;
72438             var viewer = d3_select('#photoviewer');
72439             if (!viewer.empty()) { viewer.datum(d); }
72440
72441             this.setStyles(null, true);
72442
72443             var wrap = d3_select('#photoviewer .ms-wrapper');
72444             var attribution = wrap.selectAll('.photo-attribution').html('');
72445
72446             wrap.selectAll('.pnlm-load-box')   // display "loading.."
72447               .style('display', 'block');
72448
72449             if (!d) {
72450               return Promise.resolve({ status: 'ok' });
72451             }
72452
72453             var line1 = attribution
72454               .append('div')
72455               .attr('class', 'attribution-row');
72456
72457             // Add hires checkbox
72458             var label = line1
72459               .append('label')
72460               .attr('class', 'streetside-hires');
72461
72462             label
72463               .append('input')
72464               .attr('type', 'checkbox')
72465               .attr('id', 'streetside-hires-input')
72466               .property('checked', _hires)
72467               .on('click', function () {
72468                 event.stopPropagation();
72469
72470                 _hires = !_hires;
72471                 _resolution = _hires ? 1024 : 512;
72472                 wrap.call(setupCanvas, true);
72473
72474                 var viewstate = {
72475                   yaw: _pannellumViewer.getYaw(),
72476                   pitch: _pannellumViewer.getPitch(),
72477                   hfov: _pannellumViewer.getHfov()
72478                 };
72479
72480                 that.selectImage(d)
72481                   .then(function (response) {
72482                     if (response.status === 'ok') {
72483                       _sceneOptions = Object.assign(_sceneOptions, viewstate);
72484                       that.showViewer();
72485                     }
72486                   });
72487               });
72488
72489             label
72490               .append('span')
72491               .text(t('streetside.hires'));
72492
72493
72494             var captureInfo = line1
72495               .append('div')
72496               .attr('class', 'attribution-capture-info');
72497
72498             // Add capture date
72499             if (d.captured_by) {
72500               var yyyy = (new Date()).getFullYear();
72501
72502               captureInfo
72503                 .append('a')
72504                 .attr('class', 'captured_by')
72505                 .attr('target', '_blank')
72506                 .attr('href', 'https://www.microsoft.com/en-us/maps/streetside')
72507                 .text('©' + yyyy + ' Microsoft');
72508
72509               captureInfo
72510                 .append('span')
72511                 .text('|');
72512             }
72513
72514             if (d.captured_at) {
72515               captureInfo
72516                 .append('span')
72517                 .attr('class', 'captured_at')
72518                 .text(localeTimestamp(d.captured_at));
72519             }
72520
72521             // Add image links
72522             var line2 = attribution
72523               .append('div')
72524               .attr('class', 'attribution-row');
72525
72526             line2
72527               .append('a')
72528               .attr('class', 'image-view-link')
72529               .attr('target', '_blank')
72530               .attr('href', 'https://www.bing.com/maps?cp=' + d.loc[1] + '~' + d.loc[0] +
72531                 '&lvl=17&dir=' + d.ca + '&style=x&v=2&sV=1')
72532               .text(t('streetside.view_on_bing'));
72533
72534             line2
72535               .append('a')
72536               .attr('class', 'image-report-link')
72537               .attr('target', '_blank')
72538               .attr('href', 'https://www.bing.com/maps/privacyreport/streetsideprivacyreport?bubbleid=' +
72539                 encodeURIComponent(d.key) + '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17')
72540               .text(t('streetside.report'));
72541
72542
72543             var bubbleIdQuadKey = d.key.toString(4);
72544             var paddingNeeded = 16 - bubbleIdQuadKey.length;
72545             for (var i = 0; i < paddingNeeded; i++) {
72546               bubbleIdQuadKey = '0' + bubbleIdQuadKey;
72547             }
72548             var imgUrlPrefix = streetsideImagesApi + 'hs' + bubbleIdQuadKey;
72549             var imgUrlSuffix = '.jpg?g=6338&n=z';
72550
72551             // Cubemap face code order matters here: front=01, right=02, back=03, left=10, up=11, down=12
72552             var faceKeys = ['01','02','03','10','11','12'];
72553
72554             // Map images to cube faces
72555             var quadKeys = getQuadKeys();
72556             var faces = faceKeys.map(function (faceKey) {
72557               return quadKeys.map(function (quadKey) {
72558                 var xy = qkToXY(quadKey);
72559                 return {
72560                   face: faceKey,
72561                   url: imgUrlPrefix + faceKey + quadKey + imgUrlSuffix,
72562                   x: xy[0],
72563                   y: xy[1]
72564                 };
72565               });
72566             });
72567
72568             return loadFaces(faces)
72569               .then(function () {
72570                 _sceneOptions = {
72571                   showFullscreenCtrl: false,
72572                   autoLoad: true,
72573                   compass: true,
72574                   northOffset: d.ca,
72575                   yaw: 0,
72576                   minHfov: minHfov,
72577                   maxHfov: maxHfov,
72578                   hfov: defaultHfov,
72579                   type: 'cubemap',
72580                   cubeMap: [
72581                     _dataUrlArray[0],
72582                     _dataUrlArray[1],
72583                     _dataUrlArray[2],
72584                     _dataUrlArray[3],
72585                     _dataUrlArray[4],
72586                     _dataUrlArray[5]
72587                   ]
72588                 };
72589                 return { status: 'ok' };
72590               });
72591           },
72592
72593
72594           getSequenceKeyForBubble: function(d) {
72595             return d && d.sequenceKey;
72596           },
72597
72598
72599           // Updates the currently highlighted sequence and selected bubble.
72600           // Reset is only necessary when interacting with the viewport because
72601           // this implicitly changes the currently selected bubble/sequence
72602           setStyles: function (hovered, reset) {
72603             if (reset) {  // reset all layers
72604               d3_selectAll('.viewfield-group')
72605                 .classed('highlighted', false)
72606                 .classed('hovered', false)
72607                 .classed('currentView', false);
72608
72609               d3_selectAll('.sequence')
72610                 .classed('highlighted', false)
72611                 .classed('currentView', false);
72612             }
72613
72614             var hoveredBubbleKey = hovered && hovered.key;
72615             var hoveredSequenceKey = this.getSequenceKeyForBubble(hovered);
72616             var hoveredSequence = hoveredSequenceKey && _ssCache.sequences[hoveredSequenceKey];
72617             var hoveredBubbleKeys =  (hoveredSequence && hoveredSequence.bubbles.map(function (d) { return d.key; })) || [];
72618
72619             var viewer = d3_select('#photoviewer');
72620             var selected = viewer.empty() ? undefined : viewer.datum();
72621             var selectedBubbleKey = selected && selected.key;
72622             var selectedSequenceKey = this.getSequenceKeyForBubble(selected);
72623             var selectedSequence = selectedSequenceKey && _ssCache.sequences[selectedSequenceKey];
72624             var selectedBubbleKeys = (selectedSequence && selectedSequence.bubbles.map(function (d) { return d.key; })) || [];
72625
72626             // highlight sibling viewfields on either the selected or the hovered sequences
72627             var highlightedBubbleKeys = utilArrayUnion(hoveredBubbleKeys, selectedBubbleKeys);
72628
72629             d3_selectAll('.layer-streetside-images .viewfield-group')
72630               .classed('highlighted', function (d) { return highlightedBubbleKeys.indexOf(d.key) !== -1; })
72631               .classed('hovered',     function (d) { return d.key === hoveredBubbleKey; })
72632               .classed('currentView', function (d) { return d.key === selectedBubbleKey; });
72633
72634             d3_selectAll('.layer-streetside-images .sequence')
72635               .classed('highlighted', function (d) { return d.properties.key === hoveredSequenceKey; })
72636               .classed('currentView', function (d) { return d.properties.key === selectedSequenceKey; });
72637
72638             // update viewfields if needed
72639             d3_selectAll('.viewfield-group .viewfield')
72640               .attr('d', viewfieldPath);
72641
72642             function viewfieldPath() {
72643               var d = this.parentNode.__data__;
72644               if (d.pano && d.key !== selectedBubbleKey) {
72645                 return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
72646               } else {
72647                 return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
72648               }
72649             }
72650
72651             return this;
72652           },
72653
72654
72655           /**
72656            * cache().
72657            */
72658           cache: function () {
72659             return _ssCache;
72660           }
72661         };
72662
72663         var apibase$4 = 'https://taginfo.openstreetmap.org/api/4/';
72664         var _inflight$2 = {};
72665         var _popularKeys = {};
72666         var _taginfoCache = {};
72667
72668         var tag_sorts = {
72669             point: 'count_nodes',
72670             vertex: 'count_nodes',
72671             area: 'count_ways',
72672             line: 'count_ways'
72673         };
72674         var tag_sort_members = {
72675             point: 'count_node_members',
72676             vertex: 'count_node_members',
72677             area: 'count_way_members',
72678             line: 'count_way_members',
72679             relation: 'count_relation_members'
72680         };
72681         var tag_filters = {
72682             point: 'nodes',
72683             vertex: 'nodes',
72684             area: 'ways',
72685             line: 'ways'
72686         };
72687         var tag_members_fractions = {
72688             point: 'count_node_members_fraction',
72689             vertex: 'count_node_members_fraction',
72690             area: 'count_way_members_fraction',
72691             line: 'count_way_members_fraction',
72692             relation: 'count_relation_members_fraction'
72693         };
72694
72695
72696         function sets(params, n, o) {
72697             if (params.geometry && o[params.geometry]) {
72698                 params[n] = o[params.geometry];
72699             }
72700             return params;
72701         }
72702
72703
72704         function setFilter(params) {
72705             return sets(params, 'filter', tag_filters);
72706         }
72707
72708
72709         function setSort(params) {
72710             return sets(params, 'sortname', tag_sorts);
72711         }
72712
72713
72714         function setSortMembers(params) {
72715             return sets(params, 'sortname', tag_sort_members);
72716         }
72717
72718
72719         function clean(params) {
72720             return utilObjectOmit(params, ['geometry', 'debounce']);
72721         }
72722
72723
72724         function filterKeys(type) {
72725             var count_type = type ? 'count_' + type : 'count_all';
72726             return function(d) {
72727                 return parseFloat(d[count_type]) > 2500 || d.in_wiki;
72728             };
72729         }
72730
72731
72732         function filterMultikeys(prefix) {
72733             return function(d) {
72734                 // d.key begins with prefix, and d.key contains no additional ':'s
72735                 var re = new RegExp('^' + prefix + '(.*)$');
72736                 var matches = d.key.match(re) || [];
72737                 return (matches.length === 2 && matches[1].indexOf(':') === -1);
72738             };
72739         }
72740
72741
72742         function filterValues(allowUpperCase) {
72743             return function(d) {
72744                 if (d.value.match(/[;,]/) !== null) { return false; }  // exclude some punctuation
72745                 if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) { return false; }  // exclude uppercase letters
72746                 return parseFloat(d.fraction) > 0.0;
72747             };
72748         }
72749
72750
72751         function filterRoles(geometry) {
72752             return function(d) {
72753                 if (d.role === '') { return false; } // exclude empty role
72754                 if (d.role.match(/[A-Z*;,]/) !== null) { return false; }  // exclude uppercase letters and some punctuation
72755                 return parseFloat(d[tag_members_fractions[geometry]]) > 0.0;
72756             };
72757         }
72758
72759
72760         function valKey(d) {
72761             return {
72762                 value: d.key,
72763                 title: d.key
72764             };
72765         }
72766
72767
72768         function valKeyDescription(d) {
72769             var obj = {
72770                 value: d.value,
72771                 title: d.description || d.value
72772             };
72773             if (d.count) {
72774                 obj.count = d.count;
72775             }
72776             return obj;
72777         }
72778
72779
72780         function roleKey(d) {
72781             return {
72782                 value: d.role,
72783                 title: d.role
72784             };
72785         }
72786
72787
72788         // sort keys with ':' lower than keys without ':'
72789         function sortKeys(a, b) {
72790             return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1
72791                 : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1
72792                 : 0;
72793         }
72794
72795
72796         var debouncedRequest$1 = debounce(request$1, 300, { leading: false });
72797
72798         function request$1(url, params, exactMatch, callback, loaded) {
72799             if (_inflight$2[url]) { return; }
72800
72801             if (checkCache(url, params, exactMatch, callback)) { return; }
72802
72803             var controller = new AbortController();
72804             _inflight$2[url] = controller;
72805
72806             d3_json(url, { signal: controller.signal })
72807                 .then(function(result) {
72808                     delete _inflight$2[url];
72809                     if (loaded) { loaded(null, result); }
72810                 })
72811                 .catch(function(err) {
72812                     delete _inflight$2[url];
72813                     if (err.name === 'AbortError') { return; }
72814                     if (loaded) { loaded(err.message); }
72815                 });
72816         }
72817
72818
72819         function checkCache(url, params, exactMatch, callback) {
72820             var rp = params.rp || 25;
72821             var testQuery = params.query || '';
72822             var testUrl = url;
72823
72824             do {
72825                 var hit = _taginfoCache[testUrl];
72826
72827                 // exact match, or shorter match yielding fewer than max results (rp)
72828                 if (hit && (url === testUrl || hit.length < rp)) {
72829                     callback(null, hit);
72830                     return true;
72831                 }
72832
72833                 // don't try to shorten the query
72834                 if (exactMatch || !testQuery.length) { return false; }
72835
72836                 // do shorten the query to see if we already have a cached result
72837                 // that has returned fewer than max results (rp)
72838                 testQuery = testQuery.slice(0, -1);
72839                 testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&');
72840             } while (testQuery.length >= 0);
72841
72842             return false;
72843         }
72844
72845
72846         var serviceTaginfo = {
72847
72848             init: function() {
72849                 _inflight$2 = {};
72850                 _taginfoCache = {};
72851                 _popularKeys = {
72852                     postal_code: true   // #5377
72853                 };
72854
72855                 // Fetch popular keys.  We'll exclude these from `values`
72856                 // lookups because they stress taginfo, and they aren't likely
72857                 // to yield meaningful autocomplete results.. see #3955
72858                 var params = {
72859                     rp: 100,
72860                     sortname: 'values_all',
72861                     sortorder: 'desc',
72862                     page: 1,
72863                     debounce: false,
72864                     lang: currentLocale
72865                 };
72866                 this.keys(params, function(err, data) {
72867                     if (err) { return; }
72868                     data.forEach(function(d) {
72869                         if (d.value === 'opening_hours') { return; }  // exception
72870                         _popularKeys[d.value] = true;
72871                     });
72872                 });
72873             },
72874
72875
72876             reset: function() {
72877                 Object.values(_inflight$2).forEach(function(controller) { controller.abort(); });
72878                 _inflight$2 = {};
72879             },
72880
72881
72882             keys: function(params, callback) {
72883                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
72884                 params = clean(setSort(params));
72885                 params = Object.assign({
72886                     rp: 10,
72887                     sortname: 'count_all',
72888                     sortorder: 'desc',
72889                     page: 1,
72890                     lang: currentLocale
72891                 }, params);
72892
72893                 var url = apibase$4 + 'keys/all?' + utilQsString(params);
72894                 doRequest(url, params, false, callback, function(err, d) {
72895                     if (err) {
72896                         callback(err);
72897                     } else {
72898                         var f = filterKeys(params.filter);
72899                         var result = d.data.filter(f).sort(sortKeys).map(valKey);
72900                         _taginfoCache[url] = result;
72901                         callback(null, result);
72902                     }
72903                 });
72904             },
72905
72906
72907             multikeys: function(params, callback) {
72908                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
72909                 params = clean(setSort(params));
72910                 params = Object.assign({
72911                     rp: 25,
72912                     sortname: 'count_all',
72913                     sortorder: 'desc',
72914                     page: 1,
72915                     lang: currentLocale
72916                 }, params);
72917
72918                 var prefix = params.query;
72919                 var url = apibase$4 + 'keys/all?' + utilQsString(params);
72920                 doRequest(url, params, true, callback, function(err, d) {
72921                     if (err) {
72922                         callback(err);
72923                     } else {
72924                         var f = filterMultikeys(prefix);
72925                         var result = d.data.filter(f).map(valKey);
72926                         _taginfoCache[url] = result;
72927                         callback(null, result);
72928                     }
72929                 });
72930             },
72931
72932
72933             values: function(params, callback) {
72934                 // Exclude popular keys from values lookups.. see #3955
72935                 var key = params.key;
72936                 if (key && _popularKeys[key]) {
72937                     callback(null, []);
72938                     return;
72939                 }
72940
72941                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
72942                 params = clean(setSort(setFilter(params)));
72943                 params = Object.assign({
72944                     rp: 25,
72945                     sortname: 'count_all',
72946                     sortorder: 'desc',
72947                     page: 1,
72948                     lang: currentLocale
72949                 }, params);
72950
72951                 var url = apibase$4 + 'key/values?' + utilQsString(params);
72952                 doRequest(url, params, false, callback, function(err, d) {
72953                     if (err) {
72954                         callback(err);
72955                     } else {
72956                         // In most cases we prefer taginfo value results with lowercase letters.
72957                         // A few OSM keys expect values to contain uppercase values (see #3377).
72958                         // This is not an exhaustive list (e.g. `name` also has uppercase values)
72959                         // but these are the fields where taginfo value lookup is most useful.
72960                         var re = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer|country|target|brewery/;
72961                         var allowUpperCase = re.test(params.key);
72962                         var f = filterValues(allowUpperCase);
72963
72964                         var result = d.data.filter(f).map(valKeyDescription);
72965                         _taginfoCache[url] = result;
72966                         callback(null, result);
72967                     }
72968                 });
72969             },
72970
72971
72972             roles: function(params, callback) {
72973                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
72974                 var geometry = params.geometry;
72975                 params = clean(setSortMembers(params));
72976                 params = Object.assign({
72977                     rp: 25,
72978                     sortname: 'count_all_members',
72979                     sortorder: 'desc',
72980                     page: 1,
72981                     lang: currentLocale
72982                 }, params);
72983
72984                 var url = apibase$4 + 'relation/roles?' + utilQsString(params);
72985                 doRequest(url, params, true, callback, function(err, d) {
72986                     if (err) {
72987                         callback(err);
72988                     } else {
72989                         var f = filterRoles(geometry);
72990                         var result = d.data.filter(f).map(roleKey);
72991                         _taginfoCache[url] = result;
72992                         callback(null, result);
72993                     }
72994                 });
72995             },
72996
72997
72998             docs: function(params, callback) {
72999                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
73000                 params = clean(setSort(params));
73001
73002                 var path = 'key/wiki_pages?';
73003                 if (params.value) {
73004                     path = 'tag/wiki_pages?';
73005                 } else if (params.rtype) {
73006                     path = 'relation/wiki_pages?';
73007                 }
73008
73009                 var url = apibase$4 + path + utilQsString(params);
73010                 doRequest(url, params, true, callback, function(err, d) {
73011                     if (err) {
73012                         callback(err);
73013                     } else {
73014                         _taginfoCache[url] = d.data;
73015                         callback(null, d.data);
73016                     }
73017                 });
73018             },
73019
73020
73021             apibase: function(_) {
73022                 if (!arguments.length) { return apibase$4; }
73023                 apibase$4 = _;
73024                 return this;
73025             }
73026
73027         };
73028
73029         var helpers = createCommonjsModule(function (module, exports) {
73030         Object.defineProperty(exports, "__esModule", { value: true });
73031         /**
73032          * @module helpers
73033          */
73034         /**
73035          * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
73036          *
73037          * @memberof helpers
73038          * @type {number}
73039          */
73040         exports.earthRadius = 6371008.8;
73041         /**
73042          * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
73043          *
73044          * @memberof helpers
73045          * @type {Object}
73046          */
73047         exports.factors = {
73048             centimeters: exports.earthRadius * 100,
73049             centimetres: exports.earthRadius * 100,
73050             degrees: exports.earthRadius / 111325,
73051             feet: exports.earthRadius * 3.28084,
73052             inches: exports.earthRadius * 39.370,
73053             kilometers: exports.earthRadius / 1000,
73054             kilometres: exports.earthRadius / 1000,
73055             meters: exports.earthRadius,
73056             metres: exports.earthRadius,
73057             miles: exports.earthRadius / 1609.344,
73058             millimeters: exports.earthRadius * 1000,
73059             millimetres: exports.earthRadius * 1000,
73060             nauticalmiles: exports.earthRadius / 1852,
73061             radians: 1,
73062             yards: exports.earthRadius / 1.0936,
73063         };
73064         /**
73065          * Units of measurement factors based on 1 meter.
73066          *
73067          * @memberof helpers
73068          * @type {Object}
73069          */
73070         exports.unitsFactors = {
73071             centimeters: 100,
73072             centimetres: 100,
73073             degrees: 1 / 111325,
73074             feet: 3.28084,
73075             inches: 39.370,
73076             kilometers: 1 / 1000,
73077             kilometres: 1 / 1000,
73078             meters: 1,
73079             metres: 1,
73080             miles: 1 / 1609.344,
73081             millimeters: 1000,
73082             millimetres: 1000,
73083             nauticalmiles: 1 / 1852,
73084             radians: 1 / exports.earthRadius,
73085             yards: 1 / 1.0936,
73086         };
73087         /**
73088          * Area of measurement factors based on 1 square meter.
73089          *
73090          * @memberof helpers
73091          * @type {Object}
73092          */
73093         exports.areaFactors = {
73094             acres: 0.000247105,
73095             centimeters: 10000,
73096             centimetres: 10000,
73097             feet: 10.763910417,
73098             inches: 1550.003100006,
73099             kilometers: 0.000001,
73100             kilometres: 0.000001,
73101             meters: 1,
73102             metres: 1,
73103             miles: 3.86e-7,
73104             millimeters: 1000000,
73105             millimetres: 1000000,
73106             yards: 1.195990046,
73107         };
73108         /**
73109          * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
73110          *
73111          * @name feature
73112          * @param {Geometry} geometry input geometry
73113          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
73114          * @param {Object} [options={}] Optional Parameters
73115          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
73116          * @param {string|number} [options.id] Identifier associated with the Feature
73117          * @returns {Feature} a GeoJSON Feature
73118          * @example
73119          * var geometry = {
73120          *   "type": "Point",
73121          *   "coordinates": [110, 50]
73122          * };
73123          *
73124          * var feature = turf.feature(geometry);
73125          *
73126          * //=feature
73127          */
73128         function feature(geom, properties, options) {
73129             if (options === void 0) { options = {}; }
73130             var feat = { type: "Feature" };
73131             if (options.id === 0 || options.id) {
73132                 feat.id = options.id;
73133             }
73134             if (options.bbox) {
73135                 feat.bbox = options.bbox;
73136             }
73137             feat.properties = properties || {};
73138             feat.geometry = geom;
73139             return feat;
73140         }
73141         exports.feature = feature;
73142         /**
73143          * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
73144          * For GeometryCollection type use `helpers.geometryCollection`
73145          *
73146          * @name geometry
73147          * @param {string} type Geometry Type
73148          * @param {Array<any>} coordinates Coordinates
73149          * @param {Object} [options={}] Optional Parameters
73150          * @returns {Geometry} a GeoJSON Geometry
73151          * @example
73152          * var type = "Point";
73153          * var coordinates = [110, 50];
73154          * var geometry = turf.geometry(type, coordinates);
73155          * // => geometry
73156          */
73157         function geometry(type, coordinates, options) {
73158             switch (type) {
73159                 case "Point": return point(coordinates).geometry;
73160                 case "LineString": return lineString(coordinates).geometry;
73161                 case "Polygon": return polygon(coordinates).geometry;
73162                 case "MultiPoint": return multiPoint(coordinates).geometry;
73163                 case "MultiLineString": return multiLineString(coordinates).geometry;
73164                 case "MultiPolygon": return multiPolygon(coordinates).geometry;
73165                 default: throw new Error(type + " is invalid");
73166             }
73167         }
73168         exports.geometry = geometry;
73169         /**
73170          * Creates a {@link Point} {@link Feature} from a Position.
73171          *
73172          * @name point
73173          * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
73174          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
73175          * @param {Object} [options={}] Optional Parameters
73176          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
73177          * @param {string|number} [options.id] Identifier associated with the Feature
73178          * @returns {Feature<Point>} a Point feature
73179          * @example
73180          * var point = turf.point([-75.343, 39.984]);
73181          *
73182          * //=point
73183          */
73184         function point(coordinates, properties, options) {
73185             if (options === void 0) { options = {}; }
73186             var geom = {
73187                 type: "Point",
73188                 coordinates: coordinates,
73189             };
73190             return feature(geom, properties, options);
73191         }
73192         exports.point = point;
73193         /**
73194          * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
73195          *
73196          * @name points
73197          * @param {Array<Array<number>>} coordinates an array of Points
73198          * @param {Object} [properties={}] Translate these properties to each Feature
73199          * @param {Object} [options={}] Optional Parameters
73200          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
73201          * associated with the FeatureCollection
73202          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
73203          * @returns {FeatureCollection<Point>} Point Feature
73204          * @example
73205          * var points = turf.points([
73206          *   [-75, 39],
73207          *   [-80, 45],
73208          *   [-78, 50]
73209          * ]);
73210          *
73211          * //=points
73212          */
73213         function points(coordinates, properties, options) {
73214             if (options === void 0) { options = {}; }
73215             return featureCollection(coordinates.map(function (coords) {
73216                 return point(coords, properties);
73217             }), options);
73218         }
73219         exports.points = points;
73220         /**
73221          * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
73222          *
73223          * @name polygon
73224          * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
73225          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
73226          * @param {Object} [options={}] Optional Parameters
73227          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
73228          * @param {string|number} [options.id] Identifier associated with the Feature
73229          * @returns {Feature<Polygon>} Polygon Feature
73230          * @example
73231          * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
73232          *
73233          * //=polygon
73234          */
73235         function polygon(coordinates, properties, options) {
73236             if (options === void 0) { options = {}; }
73237             for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
73238                 var ring = coordinates_1[_i];
73239                 if (ring.length < 4) {
73240                     throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
73241                 }
73242                 for (var j = 0; j < ring[ring.length - 1].length; j++) {
73243                     // Check if first point of Polygon contains two numbers
73244                     if (ring[ring.length - 1][j] !== ring[0][j]) {
73245                         throw new Error("First and last Position are not equivalent.");
73246                     }
73247                 }
73248             }
73249             var geom = {
73250                 type: "Polygon",
73251                 coordinates: coordinates,
73252             };
73253             return feature(geom, properties, options);
73254         }
73255         exports.polygon = polygon;
73256         /**
73257          * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
73258          *
73259          * @name polygons
73260          * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
73261          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
73262          * @param {Object} [options={}] Optional Parameters
73263          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
73264          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
73265          * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
73266          * @example
73267          * var polygons = turf.polygons([
73268          *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
73269          *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
73270          * ]);
73271          *
73272          * //=polygons
73273          */
73274         function polygons(coordinates, properties, options) {
73275             if (options === void 0) { options = {}; }
73276             return featureCollection(coordinates.map(function (coords) {
73277                 return polygon(coords, properties);
73278             }), options);
73279         }
73280         exports.polygons = polygons;
73281         /**
73282          * Creates a {@link LineString} {@link Feature} from an Array of Positions.
73283          *
73284          * @name lineString
73285          * @param {Array<Array<number>>} coordinates an array of Positions
73286          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
73287          * @param {Object} [options={}] Optional Parameters
73288          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
73289          * @param {string|number} [options.id] Identifier associated with the Feature
73290          * @returns {Feature<LineString>} LineString Feature
73291          * @example
73292          * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
73293          * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
73294          *
73295          * //=linestring1
73296          * //=linestring2
73297          */
73298         function lineString(coordinates, properties, options) {
73299             if (options === void 0) { options = {}; }
73300             if (coordinates.length < 2) {
73301                 throw new Error("coordinates must be an array of two or more positions");
73302             }
73303             var geom = {
73304                 type: "LineString",
73305                 coordinates: coordinates,
73306             };
73307             return feature(geom, properties, options);
73308         }
73309         exports.lineString = lineString;
73310         /**
73311          * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
73312          *
73313          * @name lineStrings
73314          * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
73315          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
73316          * @param {Object} [options={}] Optional Parameters
73317          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
73318          * associated with the FeatureCollection
73319          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
73320          * @returns {FeatureCollection<LineString>} LineString FeatureCollection
73321          * @example
73322          * var linestrings = turf.lineStrings([
73323          *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
73324          *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
73325          * ]);
73326          *
73327          * //=linestrings
73328          */
73329         function lineStrings(coordinates, properties, options) {
73330             if (options === void 0) { options = {}; }
73331             return featureCollection(coordinates.map(function (coords) {
73332                 return lineString(coords, properties);
73333             }), options);
73334         }
73335         exports.lineStrings = lineStrings;
73336         /**
73337          * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
73338          *
73339          * @name featureCollection
73340          * @param {Feature[]} features input features
73341          * @param {Object} [options={}] Optional Parameters
73342          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
73343          * @param {string|number} [options.id] Identifier associated with the Feature
73344          * @returns {FeatureCollection} FeatureCollection of Features
73345          * @example
73346          * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
73347          * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
73348          * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
73349          *
73350          * var collection = turf.featureCollection([
73351          *   locationA,
73352          *   locationB,
73353          *   locationC
73354          * ]);
73355          *
73356          * //=collection
73357          */
73358         function featureCollection(features, options) {
73359             if (options === void 0) { options = {}; }
73360             var fc = { type: "FeatureCollection" };
73361             if (options.id) {
73362                 fc.id = options.id;
73363             }
73364             if (options.bbox) {
73365                 fc.bbox = options.bbox;
73366             }
73367             fc.features = features;
73368             return fc;
73369         }
73370         exports.featureCollection = featureCollection;
73371         /**
73372          * Creates a {@link Feature<MultiLineString>} based on a
73373          * coordinate array. Properties can be added optionally.
73374          *
73375          * @name multiLineString
73376          * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
73377          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
73378          * @param {Object} [options={}] Optional Parameters
73379          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
73380          * @param {string|number} [options.id] Identifier associated with the Feature
73381          * @returns {Feature<MultiLineString>} a MultiLineString feature
73382          * @throws {Error} if no coordinates are passed
73383          * @example
73384          * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
73385          *
73386          * //=multiLine
73387          */
73388         function multiLineString(coordinates, properties, options) {
73389             if (options === void 0) { options = {}; }
73390             var geom = {
73391                 type: "MultiLineString",
73392                 coordinates: coordinates,
73393             };
73394             return feature(geom, properties, options);
73395         }
73396         exports.multiLineString = multiLineString;
73397         /**
73398          * Creates a {@link Feature<MultiPoint>} based on a
73399          * coordinate array. Properties can be added optionally.
73400          *
73401          * @name multiPoint
73402          * @param {Array<Array<number>>} coordinates an array of Positions
73403          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
73404          * @param {Object} [options={}] Optional Parameters
73405          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
73406          * @param {string|number} [options.id] Identifier associated with the Feature
73407          * @returns {Feature<MultiPoint>} a MultiPoint feature
73408          * @throws {Error} if no coordinates are passed
73409          * @example
73410          * var multiPt = turf.multiPoint([[0,0],[10,10]]);
73411          *
73412          * //=multiPt
73413          */
73414         function multiPoint(coordinates, properties, options) {
73415             if (options === void 0) { options = {}; }
73416             var geom = {
73417                 type: "MultiPoint",
73418                 coordinates: coordinates,
73419             };
73420             return feature(geom, properties, options);
73421         }
73422         exports.multiPoint = multiPoint;
73423         /**
73424          * Creates a {@link Feature<MultiPolygon>} based on a
73425          * coordinate array. Properties can be added optionally.
73426          *
73427          * @name multiPolygon
73428          * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
73429          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
73430          * @param {Object} [options={}] Optional Parameters
73431          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
73432          * @param {string|number} [options.id] Identifier associated with the Feature
73433          * @returns {Feature<MultiPolygon>} a multipolygon feature
73434          * @throws {Error} if no coordinates are passed
73435          * @example
73436          * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
73437          *
73438          * //=multiPoly
73439          *
73440          */
73441         function multiPolygon(coordinates, properties, options) {
73442             if (options === void 0) { options = {}; }
73443             var geom = {
73444                 type: "MultiPolygon",
73445                 coordinates: coordinates,
73446             };
73447             return feature(geom, properties, options);
73448         }
73449         exports.multiPolygon = multiPolygon;
73450         /**
73451          * Creates a {@link Feature<GeometryCollection>} based on a
73452          * coordinate array. Properties can be added optionally.
73453          *
73454          * @name geometryCollection
73455          * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
73456          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
73457          * @param {Object} [options={}] Optional Parameters
73458          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
73459          * @param {string|number} [options.id] Identifier associated with the Feature
73460          * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
73461          * @example
73462          * var pt = turf.geometry("Point", [100, 0]);
73463          * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
73464          * var collection = turf.geometryCollection([pt, line]);
73465          *
73466          * // => collection
73467          */
73468         function geometryCollection(geometries, properties, options) {
73469             if (options === void 0) { options = {}; }
73470             var geom = {
73471                 type: "GeometryCollection",
73472                 geometries: geometries,
73473             };
73474             return feature(geom, properties, options);
73475         }
73476         exports.geometryCollection = geometryCollection;
73477         /**
73478          * Round number to precision
73479          *
73480          * @param {number} num Number
73481          * @param {number} [precision=0] Precision
73482          * @returns {number} rounded number
73483          * @example
73484          * turf.round(120.4321)
73485          * //=120
73486          *
73487          * turf.round(120.4321, 2)
73488          * //=120.43
73489          */
73490         function round(num, precision) {
73491             if (precision === void 0) { precision = 0; }
73492             if (precision && !(precision >= 0)) {
73493                 throw new Error("precision must be a positive number");
73494             }
73495             var multiplier = Math.pow(10, precision || 0);
73496             return Math.round(num * multiplier) / multiplier;
73497         }
73498         exports.round = round;
73499         /**
73500          * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
73501          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
73502          *
73503          * @name radiansToLength
73504          * @param {number} radians in radians across the sphere
73505          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
73506          * meters, kilometres, kilometers.
73507          * @returns {number} distance
73508          */
73509         function radiansToLength(radians, units) {
73510             if (units === void 0) { units = "kilometers"; }
73511             var factor = exports.factors[units];
73512             if (!factor) {
73513                 throw new Error(units + " units is invalid");
73514             }
73515             return radians * factor;
73516         }
73517         exports.radiansToLength = radiansToLength;
73518         /**
73519          * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
73520          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
73521          *
73522          * @name lengthToRadians
73523          * @param {number} distance in real units
73524          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
73525          * meters, kilometres, kilometers.
73526          * @returns {number} radians
73527          */
73528         function lengthToRadians(distance, units) {
73529             if (units === void 0) { units = "kilometers"; }
73530             var factor = exports.factors[units];
73531             if (!factor) {
73532                 throw new Error(units + " units is invalid");
73533             }
73534             return distance / factor;
73535         }
73536         exports.lengthToRadians = lengthToRadians;
73537         /**
73538          * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
73539          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
73540          *
73541          * @name lengthToDegrees
73542          * @param {number} distance in real units
73543          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
73544          * meters, kilometres, kilometers.
73545          * @returns {number} degrees
73546          */
73547         function lengthToDegrees(distance, units) {
73548             return radiansToDegrees(lengthToRadians(distance, units));
73549         }
73550         exports.lengthToDegrees = lengthToDegrees;
73551         /**
73552          * Converts any bearing angle from the north line direction (positive clockwise)
73553          * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
73554          *
73555          * @name bearingToAzimuth
73556          * @param {number} bearing angle, between -180 and +180 degrees
73557          * @returns {number} angle between 0 and 360 degrees
73558          */
73559         function bearingToAzimuth(bearing) {
73560             var angle = bearing % 360;
73561             if (angle < 0) {
73562                 angle += 360;
73563             }
73564             return angle;
73565         }
73566         exports.bearingToAzimuth = bearingToAzimuth;
73567         /**
73568          * Converts an angle in radians to degrees
73569          *
73570          * @name radiansToDegrees
73571          * @param {number} radians angle in radians
73572          * @returns {number} degrees between 0 and 360 degrees
73573          */
73574         function radiansToDegrees(radians) {
73575             var degrees = radians % (2 * Math.PI);
73576             return degrees * 180 / Math.PI;
73577         }
73578         exports.radiansToDegrees = radiansToDegrees;
73579         /**
73580          * Converts an angle in degrees to radians
73581          *
73582          * @name degreesToRadians
73583          * @param {number} degrees angle between 0 and 360 degrees
73584          * @returns {number} angle in radians
73585          */
73586         function degreesToRadians(degrees) {
73587             var radians = degrees % 360;
73588             return radians * Math.PI / 180;
73589         }
73590         exports.degreesToRadians = degreesToRadians;
73591         /**
73592          * Converts a length to the requested unit.
73593          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
73594          *
73595          * @param {number} length to be converted
73596          * @param {Units} [originalUnit="kilometers"] of the length
73597          * @param {Units} [finalUnit="kilometers"] returned unit
73598          * @returns {number} the converted length
73599          */
73600         function convertLength(length, originalUnit, finalUnit) {
73601             if (originalUnit === void 0) { originalUnit = "kilometers"; }
73602             if (finalUnit === void 0) { finalUnit = "kilometers"; }
73603             if (!(length >= 0)) {
73604                 throw new Error("length must be a positive number");
73605             }
73606             return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
73607         }
73608         exports.convertLength = convertLength;
73609         /**
73610          * Converts a area to the requested unit.
73611          * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
73612          * @param {number} area to be converted
73613          * @param {Units} [originalUnit="meters"] of the distance
73614          * @param {Units} [finalUnit="kilometers"] returned unit
73615          * @returns {number} the converted distance
73616          */
73617         function convertArea(area, originalUnit, finalUnit) {
73618             if (originalUnit === void 0) { originalUnit = "meters"; }
73619             if (finalUnit === void 0) { finalUnit = "kilometers"; }
73620             if (!(area >= 0)) {
73621                 throw new Error("area must be a positive number");
73622             }
73623             var startFactor = exports.areaFactors[originalUnit];
73624             if (!startFactor) {
73625                 throw new Error("invalid original units");
73626             }
73627             var finalFactor = exports.areaFactors[finalUnit];
73628             if (!finalFactor) {
73629                 throw new Error("invalid final units");
73630             }
73631             return (area / startFactor) * finalFactor;
73632         }
73633         exports.convertArea = convertArea;
73634         /**
73635          * isNumber
73636          *
73637          * @param {*} num Number to validate
73638          * @returns {boolean} true/false
73639          * @example
73640          * turf.isNumber(123)
73641          * //=true
73642          * turf.isNumber('foo')
73643          * //=false
73644          */
73645         function isNumber(num) {
73646             return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num);
73647         }
73648         exports.isNumber = isNumber;
73649         /**
73650          * isObject
73651          *
73652          * @param {*} input variable to validate
73653          * @returns {boolean} true/false
73654          * @example
73655          * turf.isObject({elevation: 10})
73656          * //=true
73657          * turf.isObject('foo')
73658          * //=false
73659          */
73660         function isObject(input) {
73661             return (!!input) && (input.constructor === Object);
73662         }
73663         exports.isObject = isObject;
73664         /**
73665          * Validate BBox
73666          *
73667          * @private
73668          * @param {Array<number>} bbox BBox to validate
73669          * @returns {void}
73670          * @throws Error if BBox is not valid
73671          * @example
73672          * validateBBox([-180, -40, 110, 50])
73673          * //=OK
73674          * validateBBox([-180, -40])
73675          * //=Error
73676          * validateBBox('Foo')
73677          * //=Error
73678          * validateBBox(5)
73679          * //=Error
73680          * validateBBox(null)
73681          * //=Error
73682          * validateBBox(undefined)
73683          * //=Error
73684          */
73685         function validateBBox(bbox) {
73686             if (!bbox) {
73687                 throw new Error("bbox is required");
73688             }
73689             if (!Array.isArray(bbox)) {
73690                 throw new Error("bbox must be an Array");
73691             }
73692             if (bbox.length !== 4 && bbox.length !== 6) {
73693                 throw new Error("bbox must be an Array of 4 or 6 numbers");
73694             }
73695             bbox.forEach(function (num) {
73696                 if (!isNumber(num)) {
73697                     throw new Error("bbox must only contain numbers");
73698                 }
73699             });
73700         }
73701         exports.validateBBox = validateBBox;
73702         /**
73703          * Validate Id
73704          *
73705          * @private
73706          * @param {string|number} id Id to validate
73707          * @returns {void}
73708          * @throws Error if Id is not valid
73709          * @example
73710          * validateId([-180, -40, 110, 50])
73711          * //=Error
73712          * validateId([-180, -40])
73713          * //=Error
73714          * validateId('Foo')
73715          * //=OK
73716          * validateId(5)
73717          * //=OK
73718          * validateId(null)
73719          * //=Error
73720          * validateId(undefined)
73721          * //=Error
73722          */
73723         function validateId(id) {
73724             if (!id) {
73725                 throw new Error("id is required");
73726             }
73727             if (["string", "number"].indexOf(typeof id) === -1) {
73728                 throw new Error("id must be a number or a string");
73729             }
73730         }
73731         exports.validateId = validateId;
73732         // Deprecated methods
73733         function radians2degrees() {
73734             throw new Error("method has been renamed to `radiansToDegrees`");
73735         }
73736         exports.radians2degrees = radians2degrees;
73737         function degrees2radians() {
73738             throw new Error("method has been renamed to `degreesToRadians`");
73739         }
73740         exports.degrees2radians = degrees2radians;
73741         function distanceToDegrees() {
73742             throw new Error("method has been renamed to `lengthToDegrees`");
73743         }
73744         exports.distanceToDegrees = distanceToDegrees;
73745         function distanceToRadians() {
73746             throw new Error("method has been renamed to `lengthToRadians`");
73747         }
73748         exports.distanceToRadians = distanceToRadians;
73749         function radiansToDistance() {
73750             throw new Error("method has been renamed to `radiansToLength`");
73751         }
73752         exports.radiansToDistance = radiansToDistance;
73753         function bearingToAngle() {
73754             throw new Error("method has been renamed to `bearingToAzimuth`");
73755         }
73756         exports.bearingToAngle = bearingToAngle;
73757         function convertDistance() {
73758             throw new Error("method has been renamed to `convertLength`");
73759         }
73760         exports.convertDistance = convertDistance;
73761         });
73762
73763         unwrapExports(helpers);
73764         var helpers_1 = helpers.earthRadius;
73765         var helpers_2 = helpers.factors;
73766         var helpers_3 = helpers.unitsFactors;
73767         var helpers_4 = helpers.areaFactors;
73768         var helpers_5 = helpers.feature;
73769         var helpers_6 = helpers.geometry;
73770         var helpers_7 = helpers.point;
73771         var helpers_8 = helpers.points;
73772         var helpers_9 = helpers.polygon;
73773         var helpers_10 = helpers.polygons;
73774         var helpers_11 = helpers.lineString;
73775         var helpers_12 = helpers.lineStrings;
73776         var helpers_13 = helpers.featureCollection;
73777         var helpers_14 = helpers.multiLineString;
73778         var helpers_15 = helpers.multiPoint;
73779         var helpers_16 = helpers.multiPolygon;
73780         var helpers_17 = helpers.geometryCollection;
73781         var helpers_18 = helpers.round;
73782         var helpers_19 = helpers.radiansToLength;
73783         var helpers_20 = helpers.lengthToRadians;
73784         var helpers_21 = helpers.lengthToDegrees;
73785         var helpers_22 = helpers.bearingToAzimuth;
73786         var helpers_23 = helpers.radiansToDegrees;
73787         var helpers_24 = helpers.degreesToRadians;
73788         var helpers_25 = helpers.convertLength;
73789         var helpers_26 = helpers.convertArea;
73790         var helpers_27 = helpers.isNumber;
73791         var helpers_28 = helpers.isObject;
73792         var helpers_29 = helpers.validateBBox;
73793         var helpers_30 = helpers.validateId;
73794         var helpers_31 = helpers.radians2degrees;
73795         var helpers_32 = helpers.degrees2radians;
73796         var helpers_33 = helpers.distanceToDegrees;
73797         var helpers_34 = helpers.distanceToRadians;
73798         var helpers_35 = helpers.radiansToDistance;
73799         var helpers_36 = helpers.bearingToAngle;
73800         var helpers_37 = helpers.convertDistance;
73801
73802         var invariant = createCommonjsModule(function (module, exports) {
73803         Object.defineProperty(exports, "__esModule", { value: true });
73804
73805         /**
73806          * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
73807          *
73808          * @name getCoord
73809          * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
73810          * @returns {Array<number>} coordinates
73811          * @example
73812          * var pt = turf.point([10, 10]);
73813          *
73814          * var coord = turf.getCoord(pt);
73815          * //= [10, 10]
73816          */
73817         function getCoord(coord) {
73818             if (!coord) {
73819                 throw new Error("coord is required");
73820             }
73821             if (!Array.isArray(coord)) {
73822                 if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
73823                     return coord.geometry.coordinates;
73824                 }
73825                 if (coord.type === "Point") {
73826                     return coord.coordinates;
73827                 }
73828             }
73829             if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
73830                 return coord;
73831             }
73832             throw new Error("coord must be GeoJSON Point or an Array of numbers");
73833         }
73834         exports.getCoord = getCoord;
73835         /**
73836          * Unwrap coordinates from a Feature, Geometry Object or an Array
73837          *
73838          * @name getCoords
73839          * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
73840          * @returns {Array<any>} coordinates
73841          * @example
73842          * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
73843          *
73844          * var coords = turf.getCoords(poly);
73845          * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
73846          */
73847         function getCoords(coords) {
73848             if (Array.isArray(coords)) {
73849                 return coords;
73850             }
73851             // Feature
73852             if (coords.type === "Feature") {
73853                 if (coords.geometry !== null) {
73854                     return coords.geometry.coordinates;
73855                 }
73856             }
73857             else {
73858                 // Geometry
73859                 if (coords.coordinates) {
73860                     return coords.coordinates;
73861                 }
73862             }
73863             throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array");
73864         }
73865         exports.getCoords = getCoords;
73866         /**
73867          * Checks if coordinates contains a number
73868          *
73869          * @name containsNumber
73870          * @param {Array<any>} coordinates GeoJSON Coordinates
73871          * @returns {boolean} true if Array contains a number
73872          */
73873         function containsNumber(coordinates) {
73874             if (coordinates.length > 1 && helpers.isNumber(coordinates[0]) && helpers.isNumber(coordinates[1])) {
73875                 return true;
73876             }
73877             if (Array.isArray(coordinates[0]) && coordinates[0].length) {
73878                 return containsNumber(coordinates[0]);
73879             }
73880             throw new Error("coordinates must only contain numbers");
73881         }
73882         exports.containsNumber = containsNumber;
73883         /**
73884          * Enforce expectations about types of GeoJSON objects for Turf.
73885          *
73886          * @name geojsonType
73887          * @param {GeoJSON} value any GeoJSON object
73888          * @param {string} type expected GeoJSON type
73889          * @param {string} name name of calling function
73890          * @throws {Error} if value is not the expected type.
73891          */
73892         function geojsonType(value, type, name) {
73893             if (!type || !name) {
73894                 throw new Error("type and name required");
73895             }
73896             if (!value || value.type !== type) {
73897                 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type);
73898             }
73899         }
73900         exports.geojsonType = geojsonType;
73901         /**
73902          * Enforce expectations about types of {@link Feature} inputs for Turf.
73903          * Internally this uses {@link geojsonType} to judge geometry types.
73904          *
73905          * @name featureOf
73906          * @param {Feature} feature a feature with an expected geometry type
73907          * @param {string} type expected GeoJSON type
73908          * @param {string} name name of calling function
73909          * @throws {Error} error if value is not the expected type.
73910          */
73911         function featureOf(feature, type, name) {
73912             if (!feature) {
73913                 throw new Error("No feature passed");
73914             }
73915             if (!name) {
73916                 throw new Error(".featureOf() requires a name");
73917             }
73918             if (!feature || feature.type !== "Feature" || !feature.geometry) {
73919                 throw new Error("Invalid input to " + name + ", Feature with geometry required");
73920             }
73921             if (!feature.geometry || feature.geometry.type !== type) {
73922                 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
73923             }
73924         }
73925         exports.featureOf = featureOf;
73926         /**
73927          * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
73928          * Internally this uses {@link geojsonType} to judge geometry types.
73929          *
73930          * @name collectionOf
73931          * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
73932          * @param {string} type expected GeoJSON type
73933          * @param {string} name name of calling function
73934          * @throws {Error} if value is not the expected type.
73935          */
73936         function collectionOf(featureCollection, type, name) {
73937             if (!featureCollection) {
73938                 throw new Error("No featureCollection passed");
73939             }
73940             if (!name) {
73941                 throw new Error(".collectionOf() requires a name");
73942             }
73943             if (!featureCollection || featureCollection.type !== "FeatureCollection") {
73944                 throw new Error("Invalid input to " + name + ", FeatureCollection required");
73945             }
73946             for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {
73947                 var feature = _a[_i];
73948                 if (!feature || feature.type !== "Feature" || !feature.geometry) {
73949                     throw new Error("Invalid input to " + name + ", Feature with geometry required");
73950                 }
73951                 if (!feature.geometry || feature.geometry.type !== type) {
73952                     throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
73953                 }
73954             }
73955         }
73956         exports.collectionOf = collectionOf;
73957         /**
73958          * Get Geometry from Feature or Geometry Object
73959          *
73960          * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
73961          * @returns {Geometry|null} GeoJSON Geometry Object
73962          * @throws {Error} if geojson is not a Feature or Geometry Object
73963          * @example
73964          * var point = {
73965          *   "type": "Feature",
73966          *   "properties": {},
73967          *   "geometry": {
73968          *     "type": "Point",
73969          *     "coordinates": [110, 40]
73970          *   }
73971          * }
73972          * var geom = turf.getGeom(point)
73973          * //={"type": "Point", "coordinates": [110, 40]}
73974          */
73975         function getGeom(geojson) {
73976             if (geojson.type === "Feature") {
73977                 return geojson.geometry;
73978             }
73979             return geojson;
73980         }
73981         exports.getGeom = getGeom;
73982         /**
73983          * Get GeoJSON object's type, Geometry type is prioritize.
73984          *
73985          * @param {GeoJSON} geojson GeoJSON object
73986          * @param {string} [name="geojson"] name of the variable to display in error message
73987          * @returns {string} GeoJSON type
73988          * @example
73989          * var point = {
73990          *   "type": "Feature",
73991          *   "properties": {},
73992          *   "geometry": {
73993          *     "type": "Point",
73994          *     "coordinates": [110, 40]
73995          *   }
73996          * }
73997          * var geom = turf.getType(point)
73998          * //="Point"
73999          */
74000         function getType(geojson, name) {
74001             if (geojson.type === "FeatureCollection") {
74002                 return "FeatureCollection";
74003             }
74004             if (geojson.type === "GeometryCollection") {
74005                 return "GeometryCollection";
74006             }
74007             if (geojson.type === "Feature" && geojson.geometry !== null) {
74008                 return geojson.geometry.type;
74009             }
74010             return geojson.type;
74011         }
74012         exports.getType = getType;
74013         });
74014
74015         unwrapExports(invariant);
74016         var invariant_1 = invariant.getCoord;
74017         var invariant_2 = invariant.getCoords;
74018         var invariant_3 = invariant.containsNumber;
74019         var invariant_4 = invariant.geojsonType;
74020         var invariant_5 = invariant.featureOf;
74021         var invariant_6 = invariant.collectionOf;
74022         var invariant_7 = invariant.getGeom;
74023         var invariant_8 = invariant.getType;
74024
74025         var lineclip_1$1 = lineclip$1;
74026         var default_1$1 = lineclip$1;
74027
74028         lineclip$1.polyline = lineclip$1;
74029         lineclip$1.polygon = polygonclip$1;
74030
74031
74032         // Cohen-Sutherland line clippign algorithm, adapted to efficiently
74033         // handle polylines rather than just segments
74034
74035         function lineclip$1(points, bbox, result) {
74036
74037             var len = points.length,
74038                 codeA = bitCode$1(points[0], bbox),
74039                 part = [],
74040                 i, a, b, codeB, lastCode;
74041
74042             if (!result) { result = []; }
74043
74044             for (i = 1; i < len; i++) {
74045                 a = points[i - 1];
74046                 b = points[i];
74047                 codeB = lastCode = bitCode$1(b, bbox);
74048
74049                 while (true) {
74050
74051                     if (!(codeA | codeB)) { // accept
74052                         part.push(a);
74053
74054                         if (codeB !== lastCode) { // segment went outside
74055                             part.push(b);
74056
74057                             if (i < len - 1) { // start a new line
74058                                 result.push(part);
74059                                 part = [];
74060                             }
74061                         } else if (i === len - 1) {
74062                             part.push(b);
74063                         }
74064                         break;
74065
74066                     } else if (codeA & codeB) { // trivial reject
74067                         break;
74068
74069                     } else if (codeA) { // a outside, intersect with clip edge
74070                         a = intersect$2(a, b, codeA, bbox);
74071                         codeA = bitCode$1(a, bbox);
74072
74073                     } else { // b outside
74074                         b = intersect$2(a, b, codeB, bbox);
74075                         codeB = bitCode$1(b, bbox);
74076                     }
74077                 }
74078
74079                 codeA = lastCode;
74080             }
74081
74082             if (part.length) { result.push(part); }
74083
74084             return result;
74085         }
74086
74087         // Sutherland-Hodgeman polygon clipping algorithm
74088
74089         function polygonclip$1(points, bbox) {
74090
74091             var result, edge, prev, prevInside, i, p, inside;
74092
74093             // clip against each side of the clip rectangle
74094             for (edge = 1; edge <= 8; edge *= 2) {
74095                 result = [];
74096                 prev = points[points.length - 1];
74097                 prevInside = !(bitCode$1(prev, bbox) & edge);
74098
74099                 for (i = 0; i < points.length; i++) {
74100                     p = points[i];
74101                     inside = !(bitCode$1(p, bbox) & edge);
74102
74103                     // if segment goes through the clip window, add an intersection
74104                     if (inside !== prevInside) { result.push(intersect$2(prev, p, edge, bbox)); }
74105
74106                     if (inside) { result.push(p); } // add a point if it's inside
74107
74108                     prev = p;
74109                     prevInside = inside;
74110                 }
74111
74112                 points = result;
74113
74114                 if (!points.length) { break; }
74115             }
74116
74117             return result;
74118         }
74119
74120         // intersect a segment against one of the 4 lines that make up the bbox
74121
74122         function intersect$2(a, b, edge, bbox) {
74123             return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
74124                    edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
74125                    edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
74126                    edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
74127                    null;
74128         }
74129
74130         // bit code reflects the point position relative to the bbox:
74131
74132         //         left  mid  right
74133         //    top  1001  1000  1010
74134         //    mid  0001  0000  0010
74135         // bottom  0101  0100  0110
74136
74137         function bitCode$1(p, bbox) {
74138             var code = 0;
74139
74140             if (p[0] < bbox[0]) { code |= 1; } // left
74141             else if (p[0] > bbox[2]) { code |= 2; } // right
74142
74143             if (p[1] < bbox[1]) { code |= 4; } // bottom
74144             else if (p[1] > bbox[3]) { code |= 8; } // top
74145
74146             return code;
74147         }
74148         lineclip_1$1.default = default_1$1;
74149
74150         var bboxClip_1 = createCommonjsModule(function (module, exports) {
74151         var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
74152             if (mod && mod.__esModule) { return mod; }
74153             var result = {};
74154             if (mod != null) { for (var k in mod) { if (Object.hasOwnProperty.call(mod, k)) { result[k] = mod[k]; } } }
74155             result["default"] = mod;
74156             return result;
74157         };
74158         Object.defineProperty(exports, "__esModule", { value: true });
74159
74160
74161         var lineclip = __importStar(lineclip_1$1);
74162         /**
74163          * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
74164          * [lineclip](https://github.com/mapbox/lineclip).
74165          * May result in degenerate edges when clipping Polygons.
74166          *
74167          * @name bboxClip
74168          * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
74169          * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
74170          * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
74171          * @example
74172          * var bbox = [0, 0, 10, 10];
74173          * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
74174          *
74175          * var clipped = turf.bboxClip(poly, bbox);
74176          *
74177          * //addToMap
74178          * var addToMap = [bbox, poly, clipped]
74179          */
74180         function bboxClip(feature, bbox) {
74181             var geom = invariant.getGeom(feature);
74182             var type = geom.type;
74183             var properties = feature.type === "Feature" ? feature.properties : {};
74184             var coords = geom.coordinates;
74185             switch (type) {
74186                 case "LineString":
74187                 case "MultiLineString":
74188                     var lines_1 = [];
74189                     if (type === "LineString") {
74190                         coords = [coords];
74191                     }
74192                     coords.forEach(function (line) {
74193                         lineclip.polyline(line, bbox, lines_1);
74194                     });
74195                     if (lines_1.length === 1) {
74196                         return helpers.lineString(lines_1[0], properties);
74197                     }
74198                     return helpers.multiLineString(lines_1, properties);
74199                 case "Polygon":
74200                     return helpers.polygon(clipPolygon(coords, bbox), properties);
74201                 case "MultiPolygon":
74202                     return helpers.multiPolygon(coords.map(function (poly) {
74203                         return clipPolygon(poly, bbox);
74204                     }), properties);
74205                 default:
74206                     throw new Error("geometry " + type + " not supported");
74207             }
74208         }
74209         exports.default = bboxClip;
74210         function clipPolygon(rings, bbox) {
74211             var outRings = [];
74212             for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
74213                 var ring = rings_1[_i];
74214                 var clipped = lineclip.polygon(ring, bbox);
74215                 if (clipped.length > 0) {
74216                     if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
74217                         clipped.push(clipped[0]);
74218                     }
74219                     if (clipped.length >= 4) {
74220                         outRings.push(clipped);
74221                     }
74222                 }
74223             }
74224             return outRings;
74225         }
74226         });
74227
74228         var turf_bboxClip = unwrapExports(bboxClip_1);
74229
74230         var fastJsonStableStringify = function (data, opts) {
74231             if (!opts) { opts = {}; }
74232             if (typeof opts === 'function') { opts = { cmp: opts }; }
74233             var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
74234
74235             var cmp = opts.cmp && (function (f) {
74236                 return function (node) {
74237                     return function (a, b) {
74238                         var aobj = { key: a, value: node[a] };
74239                         var bobj = { key: b, value: node[b] };
74240                         return f(aobj, bobj);
74241                     };
74242                 };
74243             })(opts.cmp);
74244
74245             var seen = [];
74246             return (function stringify (node) {
74247                 if (node && node.toJSON && typeof node.toJSON === 'function') {
74248                     node = node.toJSON();
74249                 }
74250
74251                 if (node === undefined) { return; }
74252                 if (typeof node == 'number') { return isFinite(node) ? '' + node : 'null'; }
74253                 if (typeof node !== 'object') { return JSON.stringify(node); }
74254
74255                 var i, out;
74256                 if (Array.isArray(node)) {
74257                     out = '[';
74258                     for (i = 0; i < node.length; i++) {
74259                         if (i) { out += ','; }
74260                         out += stringify(node[i]) || 'null';
74261                     }
74262                     return out + ']';
74263                 }
74264
74265                 if (node === null) { return 'null'; }
74266
74267                 if (seen.indexOf(node) !== -1) {
74268                     if (cycles) { return JSON.stringify('__cycle__'); }
74269                     throw new TypeError('Converting circular structure to JSON');
74270                 }
74271
74272                 var seenIndex = seen.push(node) - 1;
74273                 var keys = Object.keys(node).sort(cmp && cmp(node));
74274                 out = '';
74275                 for (i = 0; i < keys.length; i++) {
74276                     var key = keys[i];
74277                     var value = stringify(node[key]);
74278
74279                     if (!value) { continue; }
74280                     if (out) { out += ','; }
74281                     out += JSON.stringify(key) + ':' + value;
74282                 }
74283                 seen.splice(seenIndex, 1);
74284                 return '{' + out + '}';
74285             })(data);
74286         };
74287
74288         var martinez_umd = createCommonjsModule(function (module, exports) {
74289         /**
74290          * martinez v0.5.0
74291          * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor
74292          *
74293          * @author Alex Milevski <info@w8r.name>
74294          * @license MIT
74295          * @preserve
74296          */
74297
74298         (function (global, factory) {
74299            factory(exports) ;
74300         }(commonjsGlobal, (function (exports) {
74301           function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }
74302
74303           var SplayTree = function SplayTree(compare, noDuplicates) {
74304             if ( compare === void 0 ) { compare = DEFAULT_COMPARE; }
74305             if ( noDuplicates === void 0 ) { noDuplicates = false; }
74306
74307             this._compare = compare;
74308             this._root = null;
74309             this._size = 0;
74310             this._noDuplicates = !!noDuplicates;
74311           };
74312
74313           var prototypeAccessors = { size: { configurable: true } };
74314
74315
74316           SplayTree.prototype.rotateLeft = function rotateLeft (x) {
74317             var y = x.right;
74318             if (y) {
74319               x.right = y.left;
74320               if (y.left) { y.left.parent = x; }
74321               y.parent = x.parent;
74322             }
74323
74324             if (!x.parent)              { this._root = y; }
74325             else if (x === x.parent.left) { x.parent.left = y; }
74326             else                        { x.parent.right = y; }
74327             if (y) { y.left = x; }
74328             x.parent = y;
74329           };
74330
74331
74332           SplayTree.prototype.rotateRight = function rotateRight (x) {
74333             var y = x.left;
74334             if (y) {
74335               x.left = y.right;
74336               if (y.right) { y.right.parent = x; }
74337               y.parent = x.parent;
74338             }
74339
74340             if (!x.parent)             { this._root = y; }
74341             else if(x === x.parent.left) { x.parent.left = y; }
74342             else                       { x.parent.right = y; }
74343             if (y) { y.right = x; }
74344             x.parent = y;
74345           };
74346
74347
74348           SplayTree.prototype._splay = function _splay (x) {
74349               var this$1 = this;
74350
74351             while (x.parent) {
74352               var p = x.parent;
74353               if (!p.parent) {
74354                 if (p.left === x) { this$1.rotateRight(p); }
74355                 else            { this$1.rotateLeft(p); }
74356               } else if (p.left === x && p.parent.left === p) {
74357                 this$1.rotateRight(p.parent);
74358                 this$1.rotateRight(p);
74359               } else if (p.right === x && p.parent.right === p) {
74360                 this$1.rotateLeft(p.parent);
74361                 this$1.rotateLeft(p);
74362               } else if (p.left === x && p.parent.right === p) {
74363                 this$1.rotateRight(p);
74364                 this$1.rotateLeft(p);
74365               } else {
74366                 this$1.rotateLeft(p);
74367                 this$1.rotateRight(p);
74368               }
74369             }
74370           };
74371
74372
74373           SplayTree.prototype.splay = function splay (x) {
74374               var this$1 = this;
74375
74376             var p, gp, ggp, l, r;
74377
74378             while (x.parent) {
74379               p = x.parent;
74380               gp = p.parent;
74381
74382               if (gp && gp.parent) {
74383                 ggp = gp.parent;
74384                 if (ggp.left === gp) { ggp.left= x; }
74385                 else               { ggp.right = x; }
74386                 x.parent = ggp;
74387               } else {
74388                 x.parent = null;
74389                 this$1._root = x;
74390               }
74391
74392               l = x.left; r = x.right;
74393
74394               if (x === p.left) { // left
74395                 if (gp) {
74396                   if (gp.left === p) {
74397                     /* zig-zig */
74398                     if (p.right) {
74399                       gp.left = p.right;
74400                       gp.left.parent = gp;
74401                     } else { gp.left = null; }
74402
74403                     p.right = gp;
74404                     gp.parent = p;
74405                   } else {
74406                     /* zig-zag */
74407                     if (l) {
74408                       gp.right = l;
74409                       l.parent = gp;
74410                     } else { gp.right = null; }
74411
74412                     x.left  = gp;
74413                     gp.parent = x;
74414                   }
74415                 }
74416                 if (r) {
74417                   p.left = r;
74418                   r.parent = p;
74419                 } else { p.left = null; }
74420
74421                 x.right= p;
74422                 p.parent = x;
74423               } else { // right
74424                 if (gp) {
74425                   if (gp.right === p) {
74426                     /* zig-zig */
74427                     if (p.left) {
74428                       gp.right = p.left;
74429                       gp.right.parent = gp;
74430                     } else { gp.right = null; }
74431
74432                     p.left = gp;
74433                     gp.parent = p;
74434                   } else {
74435                     /* zig-zag */
74436                     if (r) {
74437                       gp.left = r;
74438                       r.parent = gp;
74439                     } else { gp.left = null; }
74440
74441                     x.right = gp;
74442                     gp.parent = x;
74443                   }
74444                 }
74445                 if (l) {
74446                   p.right = l;
74447                   l.parent = p;
74448                 } else { p.right = null; }
74449
74450                 x.left = p;
74451                 p.parent = x;
74452               }
74453             }
74454           };
74455
74456
74457           SplayTree.prototype.replace = function replace (u, v) {
74458             if (!u.parent) { this._root = v; }
74459             else if (u === u.parent.left) { u.parent.left = v; }
74460             else { u.parent.right = v; }
74461             if (v) { v.parent = u.parent; }
74462           };
74463
74464
74465           SplayTree.prototype.minNode = function minNode (u) {
74466               if ( u === void 0 ) { u = this._root; }
74467
74468             if (u) { while (u.left) { u = u.left; } }
74469             return u;
74470           };
74471
74472
74473           SplayTree.prototype.maxNode = function maxNode (u) {
74474               if ( u === void 0 ) { u = this._root; }
74475
74476             if (u) { while (u.right) { u = u.right; } }
74477             return u;
74478           };
74479
74480
74481           SplayTree.prototype.insert = function insert (key, data) {
74482             var z = this._root;
74483             var p = null;
74484             var comp = this._compare;
74485             var cmp;
74486
74487             if (this._noDuplicates) {
74488               while (z) {
74489                 p = z;
74490                 cmp = comp(z.key, key);
74491                 if (cmp === 0) { return; }
74492                 else if (comp(z.key, key) < 0) { z = z.right; }
74493                 else { z = z.left; }
74494               }
74495             } else {
74496               while (z) {
74497                 p = z;
74498                 if (comp(z.key, key) < 0) { z = z.right; }
74499                 else { z = z.left; }
74500               }
74501             }
74502
74503             z = { key: key, data: data, left: null, right: null, parent: p };
74504
74505             if (!p)                        { this._root = z; }
74506             else if (comp(p.key, z.key) < 0) { p.right = z; }
74507             else                           { p.left= z; }
74508
74509             this.splay(z);
74510             this._size++;
74511             return z;
74512           };
74513
74514
74515           SplayTree.prototype.find = function find (key) {
74516             var z  = this._root;
74517             var comp = this._compare;
74518             while (z) {
74519               var cmp = comp(z.key, key);
74520               if    (cmp < 0) { z = z.right; }
74521               else if (cmp > 0) { z = z.left; }
74522               else            { return z; }
74523             }
74524             return null;
74525           };
74526
74527           /**
74528            * Whether the tree contains a node with the given key
74529            * @param{Key} key
74530            * @return {boolean} true/false
74531            */
74532           SplayTree.prototype.contains = function contains (key) {
74533             var node     = this._root;
74534             var comparator = this._compare;
74535             while (node){
74536               var cmp = comparator(key, node.key);
74537               if    (cmp === 0) { return true; }
74538               else if (cmp < 0) { node = node.left; }
74539               else              { node = node.right; }
74540             }
74541
74542             return false;
74543           };
74544
74545
74546           SplayTree.prototype.remove = function remove (key) {
74547             var z = this.find(key);
74548
74549             if (!z) { return false; }
74550
74551             this.splay(z);
74552
74553             if (!z.left) { this.replace(z, z.right); }
74554             else if (!z.right) { this.replace(z, z.left); }
74555             else {
74556               var y = this.minNode(z.right);
74557               if (y.parent !== z) {
74558                 this.replace(y, y.right);
74559                 y.right = z.right;
74560                 y.right.parent = y;
74561               }
74562               this.replace(z, y);
74563               y.left = z.left;
74564               y.left.parent = y;
74565             }
74566
74567             this._size--;
74568             return true;
74569           };
74570
74571
74572           SplayTree.prototype.removeNode = function removeNode (z) {
74573             if (!z) { return false; }
74574
74575             this.splay(z);
74576
74577             if (!z.left) { this.replace(z, z.right); }
74578             else if (!z.right) { this.replace(z, z.left); }
74579             else {
74580               var y = this.minNode(z.right);
74581               if (y.parent !== z) {
74582                 this.replace(y, y.right);
74583                 y.right = z.right;
74584                 y.right.parent = y;
74585               }
74586               this.replace(z, y);
74587               y.left = z.left;
74588               y.left.parent = y;
74589             }
74590
74591             this._size--;
74592             return true;
74593           };
74594
74595
74596           SplayTree.prototype.erase = function erase (key) {
74597             var z = this.find(key);
74598             if (!z) { return; }
74599
74600             this.splay(z);
74601
74602             var s = z.left;
74603             var t = z.right;
74604
74605             var sMax = null;
74606             if (s) {
74607               s.parent = null;
74608               sMax = this.maxNode(s);
74609               this.splay(sMax);
74610               this._root = sMax;
74611             }
74612             if (t) {
74613               if (s) { sMax.right = t; }
74614               else { this._root = t; }
74615               t.parent = sMax;
74616             }
74617
74618             this._size--;
74619           };
74620
74621           /**
74622            * Removes and returns the node with smallest key
74623            * @return {?Node}
74624            */
74625           SplayTree.prototype.pop = function pop () {
74626             var node = this._root, returnValue = null;
74627             if (node) {
74628               while (node.left) { node = node.left; }
74629               returnValue = { key: node.key, data: node.data };
74630               this.remove(node.key);
74631             }
74632             return returnValue;
74633           };
74634
74635
74636           /* eslint-disable class-methods-use-this */
74637
74638           /**
74639            * Successor node
74640            * @param{Node} node
74641            * @return {?Node}
74642            */
74643           SplayTree.prototype.next = function next (node) {
74644             var successor = node;
74645             if (successor) {
74646               if (successor.right) {
74647                 successor = successor.right;
74648                 while (successor && successor.left) { successor = successor.left; }
74649               } else {
74650                 successor = node.parent;
74651                 while (successor && successor.right === node) {
74652                   node = successor; successor = successor.parent;
74653                 }
74654               }
74655             }
74656             return successor;
74657           };
74658
74659
74660           /**
74661            * Predecessor node
74662            * @param{Node} node
74663            * @return {?Node}
74664            */
74665           SplayTree.prototype.prev = function prev (node) {
74666             var predecessor = node;
74667             if (predecessor) {
74668               if (predecessor.left) {
74669                 predecessor = predecessor.left;
74670                 while (predecessor && predecessor.right) { predecessor = predecessor.right; }
74671               } else {
74672                 predecessor = node.parent;
74673                 while (predecessor && predecessor.left === node) {
74674                   node = predecessor;
74675                   predecessor = predecessor.parent;
74676                 }
74677               }
74678             }
74679             return predecessor;
74680           };
74681           /* eslint-enable class-methods-use-this */
74682
74683
74684           /**
74685            * @param{forEachCallback} callback
74686            * @return {SplayTree}
74687            */
74688           SplayTree.prototype.forEach = function forEach (callback) {
74689             var current = this._root;
74690             var s = [], done = false, i = 0;
74691
74692             while (!done) {
74693               // Reach the left most Node of the current Node
74694               if (current) {
74695                 // Place pointer to a tree node on the stack
74696                 // before traversing the node's left subtree
74697                 s.push(current);
74698                 current = current.left;
74699               } else {
74700                 // BackTrack from the empty subtree and visit the Node
74701                 // at the top of the stack; however, if the stack is
74702                 // empty you are done
74703                 if (s.length > 0) {
74704                   current = s.pop();
74705                   callback(current, i++);
74706
74707                   // We have visited the node and its left
74708                   // subtree. Now, it's right subtree's turn
74709                   current = current.right;
74710                 } else { done = true; }
74711               }
74712             }
74713             return this;
74714           };
74715
74716
74717           /**
74718            * Walk key range from `low` to `high`. Stops if `fn` returns a value.
74719            * @param{Key}    low
74720            * @param{Key}    high
74721            * @param{Function} fn
74722            * @param{*?}     ctx
74723            * @return {SplayTree}
74724            */
74725           SplayTree.prototype.range = function range (low, high, fn, ctx) {
74726               var this$1 = this;
74727
74728             var Q = [];
74729             var compare = this._compare;
74730             var node = this._root, cmp;
74731
74732             while (Q.length !== 0 || node) {
74733               if (node) {
74734                 Q.push(node);
74735                 node = node.left;
74736               } else {
74737                 node = Q.pop();
74738                 cmp = compare(node.key, high);
74739                 if (cmp > 0) {
74740                   break;
74741                 } else if (compare(node.key, low) >= 0) {
74742                   if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned
74743                 }
74744                 node = node.right;
74745               }
74746             }
74747             return this;
74748           };
74749
74750           /**
74751            * Returns all keys in order
74752            * @return {Array<Key>}
74753            */
74754           SplayTree.prototype.keys = function keys () {
74755             var current = this._root;
74756             var s = [], r = [], done = false;
74757
74758             while (!done) {
74759               if (current) {
74760                 s.push(current);
74761                 current = current.left;
74762               } else {
74763                 if (s.length > 0) {
74764                   current = s.pop();
74765                   r.push(current.key);
74766                   current = current.right;
74767                 } else { done = true; }
74768               }
74769             }
74770             return r;
74771           };
74772
74773
74774           /**
74775            * Returns `data` fields of all nodes in order.
74776            * @return {Array<Value>}
74777            */
74778           SplayTree.prototype.values = function values () {
74779             var current = this._root;
74780             var s = [], r = [], done = false;
74781
74782             while (!done) {
74783               if (current) {
74784                 s.push(current);
74785                 current = current.left;
74786               } else {
74787                 if (s.length > 0) {
74788                   current = s.pop();
74789                   r.push(current.data);
74790                   current = current.right;
74791                 } else { done = true; }
74792               }
74793             }
74794             return r;
74795           };
74796
74797
74798           /**
74799            * Returns node at given index
74800            * @param{number} index
74801            * @return {?Node}
74802            */
74803           SplayTree.prototype.at = function at (index) {
74804             // removed after a consideration, more misleading than useful
74805             // index = index % this.size;
74806             // if (index < 0) index = this.size - index;
74807
74808             var current = this._root;
74809             var s = [], done = false, i = 0;
74810
74811             while (!done) {
74812               if (current) {
74813                 s.push(current);
74814                 current = current.left;
74815               } else {
74816                 if (s.length > 0) {
74817                   current = s.pop();
74818                   if (i === index) { return current; }
74819                   i++;
74820                   current = current.right;
74821                 } else { done = true; }
74822               }
74823             }
74824             return null;
74825           };
74826
74827           /**
74828            * Bulk-load items. Both array have to be same size
74829            * @param{Array<Key>}  keys
74830            * @param{Array<Value>}[values]
74831            * @param{Boolean}     [presort=false] Pre-sort keys and values, using
74832            *                                       tree's comparator. Sorting is done
74833            *                                       in-place
74834            * @return {AVLTree}
74835            */
74836           SplayTree.prototype.load = function load (keys, values, presort) {
74837               if ( keys === void 0 ) { keys = []; }
74838               if ( values === void 0 ) { values = []; }
74839               if ( presort === void 0 ) { presort = false; }
74840
74841             if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }
74842             var size = keys.length;
74843             if (presort) { sort(keys, values, 0, size - 1, this._compare); }
74844             this._root = loadRecursive(null, keys, values, 0, size);
74845             this._size = size;
74846             return this;
74847           };
74848
74849
74850           SplayTree.prototype.min = function min () {
74851             var node = this.minNode(this._root);
74852             if (node) { return node.key; }
74853             else    { return null; }
74854           };
74855
74856
74857           SplayTree.prototype.max = function max () {
74858             var node = this.maxNode(this._root);
74859             if (node) { return node.key; }
74860             else    { return null; }
74861           };
74862
74863           SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };
74864           prototypeAccessors.size.get = function () { return this._size; };
74865
74866
74867           /**
74868            * Create a tree and load it with items
74869            * @param{Array<Key>}        keys
74870            * @param{Array<Value>?}      [values]
74871
74872            * @param{Function?}          [comparator]
74873            * @param{Boolean?}           [presort=false] Pre-sort keys and values, using
74874            *                                             tree's comparator. Sorting is done
74875            *                                             in-place
74876            * @param{Boolean?}           [noDuplicates=false] Allow duplicates
74877            * @return {SplayTree}
74878            */
74879           SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {
74880             return new SplayTree(comparator, noDuplicates).load(keys, values, presort);
74881           };
74882
74883           Object.defineProperties( SplayTree.prototype, prototypeAccessors );
74884
74885
74886           function loadRecursive (parent, keys, values, start, end) {
74887             var size = end - start;
74888             if (size > 0) {
74889               var middle = start + Math.floor(size / 2);
74890               var key    = keys[middle];
74891               var data   = values[middle];
74892               var node   = { key: key, data: data, parent: parent };
74893               node.left    = loadRecursive(node, keys, values, start, middle);
74894               node.right   = loadRecursive(node, keys, values, middle + 1, end);
74895               return node;
74896             }
74897             return null;
74898           }
74899
74900
74901           function sort(keys, values, left, right, compare) {
74902             if (left >= right) { return; }
74903
74904             var pivot = keys[(left + right) >> 1];
74905             var i = left - 1;
74906             var j = right + 1;
74907
74908             while (true) {
74909               do { i++; } while (compare(keys[i], pivot) < 0);
74910               do { j--; } while (compare(keys[j], pivot) > 0);
74911               if (i >= j) { break; }
74912
74913               var tmp = keys[i];
74914               keys[i] = keys[j];
74915               keys[j] = tmp;
74916
74917               tmp = values[i];
74918               values[i] = values[j];
74919               values[j] = tmp;
74920             }
74921
74922             sort(keys, values,  left,     j, compare);
74923             sort(keys, values, j + 1, right, compare);
74924           }
74925
74926           var NORMAL               = 0;
74927           var NON_CONTRIBUTING     = 1;
74928           var SAME_TRANSITION      = 2;
74929           var DIFFERENT_TRANSITION = 3;
74930
74931           var INTERSECTION = 0;
74932           var UNION        = 1;
74933           var DIFFERENCE   = 2;
74934           var XOR          = 3;
74935
74936           /**
74937            * @param  {SweepEvent} event
74938            * @param  {SweepEvent} prev
74939            * @param  {Operation} operation
74940            */
74941           function computeFields (event, prev, operation) {
74942             // compute inOut and otherInOut fields
74943             if (prev === null) {
74944               event.inOut      = false;
74945               event.otherInOut = true;
74946
74947             // previous line segment in sweepline belongs to the same polygon
74948             } else {
74949               if (event.isSubject === prev.isSubject) {
74950                 event.inOut      = !prev.inOut;
74951                 event.otherInOut = prev.otherInOut;
74952
74953               // previous line segment in sweepline belongs to the clipping polygon
74954               } else {
74955                 event.inOut      = !prev.otherInOut;
74956                 event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;
74957               }
74958
74959               // compute prevInResult field
74960               if (prev) {
74961                 event.prevInResult = (!inResult(prev, operation) || prev.isVertical())
74962                   ? prev.prevInResult : prev;
74963               }
74964             }
74965
74966             // check if the line segment belongs to the Boolean operation
74967             event.inResult = inResult(event, operation);
74968           }
74969
74970
74971           /* eslint-disable indent */
74972           function inResult(event, operation) {
74973             switch (event.type) {
74974               case NORMAL:
74975                 switch (operation) {
74976                   case INTERSECTION:
74977                     return !event.otherInOut;
74978                   case UNION:
74979                     return event.otherInOut;
74980                   case DIFFERENCE:
74981                     // return (event.isSubject && !event.otherInOut) ||
74982                     //         (!event.isSubject && event.otherInOut);
74983                     return (event.isSubject && event.otherInOut) ||
74984                             (!event.isSubject && !event.otherInOut);
74985                   case XOR:
74986                     return true;
74987                 }
74988                 break;
74989               case SAME_TRANSITION:
74990                 return operation === INTERSECTION || operation === UNION;
74991               case DIFFERENT_TRANSITION:
74992                 return operation === DIFFERENCE;
74993               case NON_CONTRIBUTING:
74994                 return false;
74995             }
74996             return false;
74997           }
74998           /* eslint-enable indent */
74999
75000           var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {
75001
75002             /**
75003              * Is left endpoint?
75004              * @type {Boolean}
75005              */
75006             this.left = left;
75007
75008             /**
75009              * @type {Array.<Number>}
75010              */
75011             this.point = point;
75012
75013             /**
75014              * Other edge reference
75015              * @type {SweepEvent}
75016              */
75017             this.otherEvent = otherEvent;
75018
75019             /**
75020              * Belongs to source or clipping polygon
75021              * @type {Boolean}
75022              */
75023             this.isSubject = isSubject;
75024
75025             /**
75026              * Edge contribution type
75027              * @type {Number}
75028              */
75029             this.type = edgeType || NORMAL;
75030
75031
75032             /**
75033              * In-out transition for the sweepline crossing polygon
75034              * @type {Boolean}
75035              */
75036             this.inOut = false;
75037
75038
75039             /**
75040              * @type {Boolean}
75041              */
75042             this.otherInOut = false;
75043
75044             /**
75045              * Previous event in result?
75046              * @type {SweepEvent}
75047              */
75048             this.prevInResult = null;
75049
75050             /**
75051              * Does event belong to result?
75052              * @type {Boolean}
75053              */
75054             this.inResult = false;
75055
75056
75057             // connection step
75058
75059             /**
75060              * @type {Boolean}
75061              */
75062             this.resultInOut = false;
75063
75064             this.isExteriorRing = true;
75065           };
75066
75067
75068           /**
75069            * @param{Array.<Number>}p
75070            * @return {Boolean}
75071            */
75072           SweepEvent.prototype.isBelow = function isBelow (p) {
75073             var p0 = this.point, p1 = this.otherEvent.point;
75074             return this.left
75075               ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0
75076               // signedArea(this.point, this.otherEvent.point, p) > 0 :
75077               : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;
75078               //signedArea(this.otherEvent.point, this.point, p) > 0;
75079           };
75080
75081
75082           /**
75083            * @param{Array.<Number>}p
75084            * @return {Boolean}
75085            */
75086           SweepEvent.prototype.isAbove = function isAbove (p) {
75087             return !this.isBelow(p);
75088           };
75089
75090
75091           /**
75092            * @return {Boolean}
75093            */
75094           SweepEvent.prototype.isVertical = function isVertical () {
75095             return this.point[0] === this.otherEvent.point[0];
75096           };
75097
75098
75099           SweepEvent.prototype.clone = function clone () {
75100             var copy = new SweepEvent(
75101               this.point, this.left, this.otherEvent, this.isSubject, this.type);
75102
75103             copy.inResult     = this.inResult;
75104             copy.prevInResult = this.prevInResult;
75105             copy.isExteriorRing = this.isExteriorRing;
75106             copy.inOut        = this.inOut;
75107             copy.otherInOut   = this.otherInOut;
75108
75109             return copy;
75110           };
75111
75112           function equals(p1, p2) {
75113             if (p1[0] === p2[0]) {
75114               if (p1[1] === p2[1]) {
75115                 return true;
75116               } else {
75117                 return false;
75118               }
75119             }
75120             return false;
75121           }
75122
75123           // const EPSILON = 1e-9;
75124           // const abs = Math.abs;
75125           // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164
75126           // Precision problem.
75127           //
75128           // module.exports = function equals(p1, p2) {
75129           //   return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;
75130           // };
75131
75132           /**
75133            * Signed area of the triangle (p0, p1, p2)
75134            * @param  {Array.<Number>} p0
75135            * @param  {Array.<Number>} p1
75136            * @param  {Array.<Number>} p2
75137            * @return {Number}
75138            */
75139           function signedArea(p0, p1, p2) {
75140             return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);
75141           }
75142
75143           /**
75144            * @param  {SweepEvent} e1
75145            * @param  {SweepEvent} e2
75146            * @return {Number}
75147            */
75148           function compareEvents(e1, e2) {
75149             var p1 = e1.point;
75150             var p2 = e2.point;
75151
75152             // Different x-coordinate
75153             if (p1[0] > p2[0]) { return 1; }
75154             if (p1[0] < p2[0]) { return -1; }
75155
75156             // Different points, but same x-coordinate
75157             // Event with lower y-coordinate is processed first
75158             if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }
75159
75160             return specialCases(e1, e2, p1);
75161           }
75162
75163
75164           /* eslint-disable no-unused-vars */
75165           function specialCases(e1, e2, p1, p2) {
75166             // Same coordinates, but one is a left endpoint and the other is
75167             // a right endpoint. The right endpoint is processed first
75168             if (e1.left !== e2.left)
75169               { return e1.left ? 1 : -1; }
75170
75171             // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;
75172             // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])
75173             // Same coordinates, both events
75174             // are left endpoints or right endpoints.
75175             // not collinear
75176             if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {
75177               // the event associate to the bottom segment is processed first
75178               return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;
75179             }
75180
75181             return (!e1.isSubject && e2.isSubject) ? 1 : -1;
75182           }
75183           /* eslint-enable no-unused-vars */
75184
75185           /**
75186            * @param  {SweepEvent} se
75187            * @param  {Array.<Number>} p
75188            * @param  {Queue} queue
75189            * @return {Queue}
75190            */
75191           function divideSegment(se, p, queue)  {
75192             var r = new SweepEvent(p, false, se,            se.isSubject);
75193             var l = new SweepEvent(p, true,  se.otherEvent, se.isSubject);
75194
75195             /* eslint-disable no-console */
75196             if (equals(se.point, se.otherEvent.point)) {
75197
75198               console.warn('what is that, a collapsed segment?', se);
75199             }
75200             /* eslint-enable no-console */
75201
75202             r.contourId = l.contourId = se.contourId;
75203
75204             // avoid a rounding error. The left event would be processed after the right event
75205             if (compareEvents(l, se.otherEvent) > 0) {
75206               se.otherEvent.left = true;
75207               l.left = false;
75208             }
75209
75210             // avoid a rounding error. The left event would be processed after the right event
75211             // if (compareEvents(se, r) > 0) {}
75212
75213             se.otherEvent.otherEvent = l;
75214             se.otherEvent = r;
75215
75216             queue.push(l);
75217             queue.push(r);
75218
75219             return queue;
75220           }
75221
75222           //const EPS = 1e-9;
75223
75224           /**
75225            * Finds the magnitude of the cross product of two vectors (if we pretend
75226            * they're in three dimensions)
75227            *
75228            * @param {Object} a First vector
75229            * @param {Object} b Second vector
75230            * @private
75231            * @returns {Number} The magnitude of the cross product
75232            */
75233           function crossProduct(a, b) {
75234             return (a[0] * b[1]) - (a[1] * b[0]);
75235           }
75236
75237           /**
75238            * Finds the dot product of two vectors.
75239            *
75240            * @param {Object} a First vector
75241            * @param {Object} b Second vector
75242            * @private
75243            * @returns {Number} The dot product
75244            */
75245           function dotProduct(a, b) {
75246             return (a[0] * b[0]) + (a[1] * b[1]);
75247           }
75248
75249           /**
75250            * Finds the intersection (if any) between two line segments a and b, given the
75251            * line segments' end points a1, a2 and b1, b2.
75252            *
75253            * This algorithm is based on Schneider and Eberly.
75254            * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf
75255            * Page 244.
75256            *
75257            * @param {Array.<Number>} a1 point of first line
75258            * @param {Array.<Number>} a2 point of first line
75259            * @param {Array.<Number>} b1 point of second line
75260            * @param {Array.<Number>} b2 point of second line
75261            * @param {Boolean=}       noEndpointTouch whether to skip single touchpoints
75262            *                                         (meaning connected segments) as
75263            *                                         intersections
75264            * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of
75265            * intersection. If they overlap, the two end points of the overlapping segment.
75266            * Otherwise, null.
75267            */
75268           function intersection (a1, a2, b1, b2, noEndpointTouch) {
75269             // The algorithm expects our lines in the form P + sd, where P is a point,
75270             // s is on the interval [0, 1], and d is a vector.
75271             // We are passed two points. P can be the first point of each pair. The
75272             // vector, then, could be thought of as the distance (in x and y components)
75273             // from the first point to the second point.
75274             // So first, let's make our vectors:
75275             var va = [a2[0] - a1[0], a2[1] - a1[1]];
75276             var vb = [b2[0] - b1[0], b2[1] - b1[1]];
75277             // We also define a function to convert back to regular point form:
75278
75279             /* eslint-disable arrow-body-style */
75280
75281             function toPoint(p, s, d) {
75282               return [
75283                 p[0] + s * d[0],
75284                 p[1] + s * d[1]
75285               ];
75286             }
75287
75288             /* eslint-enable arrow-body-style */
75289
75290             // The rest is pretty much a straight port of the algorithm.
75291             var e = [b1[0] - a1[0], b1[1] - a1[1]];
75292             var kross    = crossProduct(va, vb);
75293             var sqrKross = kross * kross;
75294             var sqrLenA  = dotProduct(va, va);
75295             //const sqrLenB  = dotProduct(vb, vb);
75296
75297             // Check for line intersection. This works because of the properties of the
75298             // cross product -- specifically, two vectors are parallel if and only if the
75299             // cross product is the 0 vector. The full calculation involves relative error
75300             // to account for possible very small line segments. See Schneider & Eberly
75301             // for details.
75302             if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {
75303               // If they're not parallel, then (because these are line segments) they
75304               // still might not actually intersect. This code checks that the
75305               // intersection point of the lines is actually on both line segments.
75306               var s = crossProduct(e, vb) / kross;
75307               if (s < 0 || s > 1) {
75308                 // not on line segment a
75309                 return null;
75310               }
75311               var t = crossProduct(e, va) / kross;
75312               if (t < 0 || t > 1) {
75313                 // not on line segment b
75314                 return null;
75315               }
75316               if (s === 0 || s === 1) {
75317                 // on an endpoint of line segment a
75318                 return noEndpointTouch ? null : [toPoint(a1, s, va)];
75319               }
75320               if (t === 0 || t === 1) {
75321                 // on an endpoint of line segment b
75322                 return noEndpointTouch ? null : [toPoint(b1, t, vb)];
75323               }
75324               return [toPoint(a1, s, va)];
75325             }
75326
75327             // If we've reached this point, then the lines are either parallel or the
75328             // same, but the segments could overlap partially or fully, or not at all.
75329             // So we need to find the overlap, if any. To do that, we can use e, which is
75330             // the (vector) difference between the two initial points. If this is parallel
75331             // with the line itself, then the two lines are the same line, and there will
75332             // be overlap.
75333             //const sqrLenE = dotProduct(e, e);
75334             kross = crossProduct(e, va);
75335             sqrKross = kross * kross;
75336
75337             if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {
75338             // Lines are just parallel, not the same. No overlap.
75339               return null;
75340             }
75341
75342             var sa = dotProduct(va, e) / sqrLenA;
75343             var sb = sa + dotProduct(va, vb) / sqrLenA;
75344             var smin = Math.min(sa, sb);
75345             var smax = Math.max(sa, sb);
75346
75347             // this is, essentially, the FindIntersection acting on floats from
75348             // Schneider & Eberly, just inlined into this function.
75349             if (smin <= 1 && smax >= 0) {
75350
75351               // overlap on an end point
75352               if (smin === 1) {
75353                 return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];
75354               }
75355
75356               if (smax === 0) {
75357                 return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];
75358               }
75359
75360               if (noEndpointTouch && smin === 0 && smax === 1) { return null; }
75361
75362               // There's overlap on a segment -- two points of intersection. Return both.
75363               return [
75364                 toPoint(a1, smin > 0 ? smin : 0, va),
75365                 toPoint(a1, smax < 1 ? smax : 1, va)
75366               ];
75367             }
75368
75369             return null;
75370           }
75371
75372           /**
75373            * @param  {SweepEvent} se1
75374            * @param  {SweepEvent} se2
75375            * @param  {Queue}      queue
75376            * @return {Number}
75377            */
75378           function possibleIntersection (se1, se2, queue) {
75379             // that disallows self-intersecting polygons,
75380             // did cost us half a day, so I'll leave it
75381             // out of respect
75382             // if (se1.isSubject === se2.isSubject) return;
75383             var inter = intersection(
75384               se1.point, se1.otherEvent.point,
75385               se2.point, se2.otherEvent.point
75386             );
75387
75388             var nintersections = inter ? inter.length : 0;
75389             if (nintersections === 0) { return 0; } // no intersection
75390
75391             // the line segments intersect at an endpoint of both line segments
75392             if ((nintersections === 1) &&
75393                 (equals(se1.point, se2.point) ||
75394                  equals(se1.otherEvent.point, se2.otherEvent.point))) {
75395               return 0;
75396             }
75397
75398             if (nintersections === 2 && se1.isSubject === se2.isSubject) {
75399               // if(se1.contourId === se2.contourId){
75400               // console.warn('Edges of the same polygon overlap',
75401               //   se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);
75402               // }
75403               //throw new Error('Edges of the same polygon overlap');
75404               return 0;
75405             }
75406
75407             // The line segments associated to se1 and se2 intersect
75408             if (nintersections === 1) {
75409
75410               // if the intersection point is not an endpoint of se1
75411               if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {
75412                 divideSegment(se1, inter[0], queue);
75413               }
75414
75415               // if the intersection point is not an endpoint of se2
75416               if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {
75417                 divideSegment(se2, inter[0], queue);
75418               }
75419               return 1;
75420             }
75421
75422             // The line segments associated to se1 and se2 overlap
75423             var events        = [];
75424             var leftCoincide  = false;
75425             var rightCoincide = false;
75426
75427             if (equals(se1.point, se2.point)) {
75428               leftCoincide = true; // linked
75429             } else if (compareEvents(se1, se2) === 1) {
75430               events.push(se2, se1);
75431             } else {
75432               events.push(se1, se2);
75433             }
75434
75435             if (equals(se1.otherEvent.point, se2.otherEvent.point)) {
75436               rightCoincide = true;
75437             } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {
75438               events.push(se2.otherEvent, se1.otherEvent);
75439             } else {
75440               events.push(se1.otherEvent, se2.otherEvent);
75441             }
75442
75443             if ((leftCoincide && rightCoincide) || leftCoincide) {
75444               // both line segments are equal or share the left endpoint
75445               se2.type = NON_CONTRIBUTING;
75446               se1.type = (se2.inOut === se1.inOut)
75447                 ? SAME_TRANSITION : DIFFERENT_TRANSITION;
75448
75449               if (leftCoincide && !rightCoincide) {
75450                 // honestly no idea, but changing events selection from [2, 1]
75451                 // to [0, 1] fixes the overlapping self-intersecting polygons issue
75452                 divideSegment(events[1].otherEvent, events[0].point, queue);
75453               }
75454               return 2;
75455             }
75456
75457             // the line segments share the right endpoint
75458             if (rightCoincide) {
75459               divideSegment(events[0], events[1].point, queue);
75460               return 3;
75461             }
75462
75463             // no line segment includes totally the other one
75464             if (events[0] !== events[3].otherEvent) {
75465               divideSegment(events[0], events[1].point, queue);
75466               divideSegment(events[1], events[2].point, queue);
75467               return 3;
75468             }
75469
75470             // one line segment includes the other one
75471             divideSegment(events[0], events[1].point, queue);
75472             divideSegment(events[3].otherEvent, events[2].point, queue);
75473
75474             return 3;
75475           }
75476
75477           /**
75478            * @param  {SweepEvent} le1
75479            * @param  {SweepEvent} le2
75480            * @return {Number}
75481            */
75482           function compareSegments(le1, le2) {
75483             if (le1 === le2) { return 0; }
75484
75485             // Segments are not collinear
75486             if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||
75487               signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {
75488
75489               // If they share their left endpoint use the right endpoint to sort
75490               if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }
75491
75492               // Different left endpoint: use the left endpoint to sort
75493               if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }
75494
75495               // has the line segment associated to e1 been inserted
75496               // into S after the line segment associated to e2 ?
75497               if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }
75498
75499               // The line segment associated to e2 has been inserted
75500               // into S after the line segment associated to e1
75501               return le1.isBelow(le2.point) ? -1 : 1;
75502             }
75503
75504             if (le1.isSubject === le2.isSubject) { // same polygon
75505               var p1 = le1.point, p2 = le2.point;
75506               if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {
75507                 p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;
75508                 if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }
75509                 else { return le1.contourId > le2.contourId ? 1 : -1; }
75510               }
75511             } else { // Segments are collinear, but belong to separate polygons
75512               return le1.isSubject ? -1 : 1;
75513             }
75514
75515             return compareEvents(le1, le2) === 1 ? 1 : -1;
75516           }
75517
75518           function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {
75519             var sweepLine = new SplayTree(compareSegments);
75520             var sortedEvents = [];
75521
75522             var rightbound = Math.min(sbbox[2], cbbox[2]);
75523
75524             var prev, next, begin;
75525
75526             while (eventQueue.length !== 0) {
75527               var event = eventQueue.pop();
75528               sortedEvents.push(event);
75529
75530               // optimization by bboxes for intersection and difference goes here
75531               if ((operation === INTERSECTION && event.point[0] > rightbound) ||
75532                   (operation === DIFFERENCE   && event.point[0] > sbbox[2])) {
75533                 break;
75534               }
75535
75536               if (event.left) {
75537                 next  = prev = sweepLine.insert(event);
75538                 begin = sweepLine.minNode();
75539
75540                 if (prev !== begin) { prev = sweepLine.prev(prev); }
75541                 else                { prev = null; }
75542
75543                 next = sweepLine.next(next);
75544
75545                 var prevEvent = prev ? prev.key : null;
75546                 var prevprevEvent = (void 0);
75547                 computeFields(event, prevEvent, operation);
75548                 if (next) {
75549                   if (possibleIntersection(event, next.key, eventQueue) === 2) {
75550                     computeFields(event, prevEvent, operation);
75551                     computeFields(event, next.key, operation);
75552                   }
75553                 }
75554
75555                 if (prev) {
75556                   if (possibleIntersection(prev.key, event, eventQueue) === 2) {
75557                     var prevprev = prev;
75558                     if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }
75559                     else                    { prevprev = null; }
75560
75561                     prevprevEvent = prevprev ? prevprev.key : null;
75562                     computeFields(prevEvent, prevprevEvent, operation);
75563                     computeFields(event,     prevEvent,     operation);
75564                   }
75565                 }
75566               } else {
75567                 event = event.otherEvent;
75568                 next = prev = sweepLine.find(event);
75569
75570                 if (prev && next) {
75571
75572                   if (prev !== begin) { prev = sweepLine.prev(prev); }
75573                   else                { prev = null; }
75574
75575                   next = sweepLine.next(next);
75576                   sweepLine.remove(event);
75577
75578                   if (next && prev) {
75579                     possibleIntersection(prev.key, next.key, eventQueue);
75580                   }
75581                 }
75582               }
75583             }
75584             return sortedEvents;
75585           }
75586
75587           /**
75588            * @param  {Array.<SweepEvent>} sortedEvents
75589            * @return {Array.<SweepEvent>}
75590            */
75591           function orderEvents(sortedEvents) {
75592             var event, i, len, tmp;
75593             var resultEvents = [];
75594             for (i = 0, len = sortedEvents.length; i < len; i++) {
75595               event = sortedEvents[i];
75596               if ((event.left && event.inResult) ||
75597                 (!event.left && event.otherEvent.inResult)) {
75598                 resultEvents.push(event);
75599               }
75600             }
75601             // Due to overlapping edges the resultEvents array can be not wholly sorted
75602             var sorted = false;
75603             while (!sorted) {
75604               sorted = true;
75605               for (i = 0, len = resultEvents.length; i < len; i++) {
75606                 if ((i + 1) < len &&
75607                   compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {
75608                   tmp = resultEvents[i];
75609                   resultEvents[i] = resultEvents[i + 1];
75610                   resultEvents[i + 1] = tmp;
75611                   sorted = false;
75612                 }
75613               }
75614             }
75615
75616
75617             for (i = 0, len = resultEvents.length; i < len; i++) {
75618               event = resultEvents[i];
75619               event.pos = i;
75620             }
75621
75622             // imagine, the right event is found in the beginning of the queue,
75623             // when his left counterpart is not marked yet
75624             for (i = 0, len = resultEvents.length; i < len; i++) {
75625               event = resultEvents[i];
75626               if (!event.left) {
75627                 tmp = event.pos;
75628                 event.pos = event.otherEvent.pos;
75629                 event.otherEvent.pos = tmp;
75630               }
75631             }
75632
75633             return resultEvents;
75634           }
75635
75636
75637           /**
75638            * @param  {Number} pos
75639            * @param  {Array.<SweepEvent>} resultEvents
75640            * @param  {Object>}    processed
75641            * @return {Number}
75642            */
75643           function nextPos(pos, resultEvents, processed, origIndex) {
75644             var p, p1;
75645             var newPos = pos + 1;
75646             var length = resultEvents.length;
75647
75648             p  = resultEvents[pos].point;
75649
75650             if (newPos < length)
75651               { p1 = resultEvents[newPos].point; }
75652
75653
75654             // while in range and not the current one by value
75655             while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {
75656               if (!processed[newPos]) {
75657                 return newPos;
75658               } else   {
75659                 newPos++;
75660               }
75661               p1 = resultEvents[newPos].point;
75662             }
75663
75664             newPos = pos - 1;
75665
75666             while (processed[newPos] && newPos >= origIndex) {
75667               newPos--;
75668             }
75669             return newPos;
75670           }
75671
75672
75673           /**
75674            * @param  {Array.<SweepEvent>} sortedEvents
75675            * @return {Array.<*>} polygons
75676            */
75677           function connectEdges(sortedEvents, operation) {
75678             var i, len;
75679             var resultEvents = orderEvents(sortedEvents);
75680
75681             // "false"-filled array
75682             var processed = {};
75683             var result = [];
75684             var event;
75685
75686             for (i = 0, len = resultEvents.length; i < len; i++) {
75687               if (processed[i]) { continue; }
75688               var contour = [[]];
75689
75690               if (!resultEvents[i].isExteriorRing) {
75691                 if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {
75692                   result.push(contour);
75693                 } else if (result.length === 0) {
75694                   result.push([[contour]]);
75695                 } else {
75696                   result[result.length - 1].push(contour[0]);
75697                 }
75698               } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {
75699                 result[result.length - 1].push(contour[0]);
75700               } else {
75701                 result.push(contour);
75702               }
75703
75704               var ringId = result.length - 1;
75705               var pos = i;
75706
75707               var initial = resultEvents[i].point;
75708               contour[0].push(initial);
75709
75710               while (pos >= i) {
75711                 event = resultEvents[pos];
75712                 processed[pos] = true;
75713
75714                 if (event.left) {
75715                   event.resultInOut = false;
75716                   event.contourId   = ringId;
75717                 } else {
75718                   event.otherEvent.resultInOut = true;
75719                   event.otherEvent.contourId   = ringId;
75720                 }
75721
75722                 pos = event.pos;
75723                 processed[pos] = true;
75724                 contour[0].push(resultEvents[pos].point);
75725                 pos = nextPos(pos, resultEvents, processed, i);
75726               }
75727
75728               pos = pos === -1 ? i : pos;
75729
75730               event = resultEvents[pos];
75731               processed[pos] = processed[event.pos] = true;
75732               event.otherEvent.resultInOut = true;
75733               event.otherEvent.contourId   = ringId;
75734             }
75735
75736             // Handle if the result is a polygon (eg not multipoly)
75737             // Commented it again, let's see what do we mean by that
75738             // if (result.length === 1) result = result[0];
75739             return result;
75740           }
75741
75742           var tinyqueue = TinyQueue;
75743           var default_1 = TinyQueue;
75744
75745           function TinyQueue(data, compare) {
75746               var this$1 = this;
75747
75748               if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }
75749
75750               this.data = data || [];
75751               this.length = this.data.length;
75752               this.compare = compare || defaultCompare;
75753
75754               if (this.length > 0) {
75755                   for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }
75756               }
75757           }
75758
75759           function defaultCompare(a, b) {
75760               return a < b ? -1 : a > b ? 1 : 0;
75761           }
75762
75763           TinyQueue.prototype = {
75764
75765               push: function (item) {
75766                   this.data.push(item);
75767                   this.length++;
75768                   this._up(this.length - 1);
75769               },
75770
75771               pop: function () {
75772                   if (this.length === 0) { return undefined; }
75773
75774                   var top = this.data[0];
75775                   this.length--;
75776
75777                   if (this.length > 0) {
75778                       this.data[0] = this.data[this.length];
75779                       this._down(0);
75780                   }
75781                   this.data.pop();
75782
75783                   return top;
75784               },
75785
75786               peek: function () {
75787                   return this.data[0];
75788               },
75789
75790               _up: function (pos) {
75791                   var data = this.data;
75792                   var compare = this.compare;
75793                   var item = data[pos];
75794
75795                   while (pos > 0) {
75796                       var parent = (pos - 1) >> 1;
75797                       var current = data[parent];
75798                       if (compare(item, current) >= 0) { break; }
75799                       data[pos] = current;
75800                       pos = parent;
75801                   }
75802
75803                   data[pos] = item;
75804               },
75805
75806               _down: function (pos) {
75807                   var this$1 = this;
75808
75809                   var data = this.data;
75810                   var compare = this.compare;
75811                   var halfLength = this.length >> 1;
75812                   var item = data[pos];
75813
75814                   while (pos < halfLength) {
75815                       var left = (pos << 1) + 1;
75816                       var right = left + 1;
75817                       var best = data[left];
75818
75819                       if (right < this$1.length && compare(data[right], best) < 0) {
75820                           left = right;
75821                           best = data[right];
75822                       }
75823                       if (compare(best, item) >= 0) { break; }
75824
75825                       data[pos] = best;
75826                       pos = left;
75827                   }
75828
75829                   data[pos] = item;
75830               }
75831           };
75832           tinyqueue.default = default_1;
75833
75834           var max = Math.max;
75835           var min = Math.min;
75836
75837           var contourId = 0;
75838
75839
75840           function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {
75841             var i, len, s1, s2, e1, e2;
75842             for (i = 0, len = contourOrHole.length - 1; i < len; i++) {
75843               s1 = contourOrHole[i];
75844               s2 = contourOrHole[i + 1];
75845               e1 = new SweepEvent(s1, false, undefined, isSubject);
75846               e2 = new SweepEvent(s2, false, e1,        isSubject);
75847               e1.otherEvent = e2;
75848
75849               if (s1[0] === s2[0] && s1[1] === s2[1]) {
75850                 continue; // skip collapsed edges, or it breaks
75851               }
75852
75853               e1.contourId = e2.contourId = depth;
75854               if (!isExteriorRing) {
75855                 e1.isExteriorRing = false;
75856                 e2.isExteriorRing = false;
75857               }
75858               if (compareEvents(e1, e2) > 0) {
75859                 e2.left = true;
75860               } else {
75861                 e1.left = true;
75862               }
75863
75864               var x = s1[0], y = s1[1];
75865               bbox[0] = min(bbox[0], x);
75866               bbox[1] = min(bbox[1], y);
75867               bbox[2] = max(bbox[2], x);
75868               bbox[3] = max(bbox[3], y);
75869
75870               // Pushing it so the queue is sorted from left to right,
75871               // with object on the left having the highest priority.
75872               Q.push(e1);
75873               Q.push(e2);
75874             }
75875           }
75876
75877
75878           function fillQueue(subject, clipping, sbbox, cbbox, operation) {
75879             var eventQueue = new tinyqueue(null, compareEvents);
75880             var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;
75881
75882             for (i = 0, ii = subject.length; i < ii; i++) {
75883               polygonSet = subject[i];
75884               for (j = 0, jj = polygonSet.length; j < jj; j++) {
75885                 isExteriorRing = j === 0;
75886                 if (isExteriorRing) { contourId++; }
75887                 processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);
75888               }
75889             }
75890
75891             for (i = 0, ii = clipping.length; i < ii; i++) {
75892               polygonSet = clipping[i];
75893               for (j = 0, jj = polygonSet.length; j < jj; j++) {
75894                 isExteriorRing = j === 0;
75895                 if (operation === DIFFERENCE) { isExteriorRing = false; }
75896                 if (isExteriorRing) { contourId++; }
75897                 processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);
75898               }
75899             }
75900
75901             return eventQueue;
75902           }
75903
75904           var EMPTY = [];
75905
75906
75907           function trivialOperation(subject, clipping, operation) {
75908             var result = null;
75909             if (subject.length * clipping.length === 0) {
75910               if        (operation === INTERSECTION) {
75911                 result = EMPTY;
75912               } else if (operation === DIFFERENCE) {
75913                 result = subject;
75914               } else if (operation === UNION ||
75915                          operation === XOR) {
75916                 result = (subject.length === 0) ? clipping : subject;
75917               }
75918             }
75919             return result;
75920           }
75921
75922
75923           function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {
75924             var result = null;
75925             if (sbbox[0] > cbbox[2] ||
75926                 cbbox[0] > sbbox[2] ||
75927                 sbbox[1] > cbbox[3] ||
75928                 cbbox[1] > sbbox[3]) {
75929               if        (operation === INTERSECTION) {
75930                 result = EMPTY;
75931               } else if (operation === DIFFERENCE) {
75932                 result = subject;
75933               } else if (operation === UNION ||
75934                          operation === XOR) {
75935                 result = subject.concat(clipping);
75936               }
75937             }
75938             return result;
75939           }
75940
75941
75942           function boolean(subject, clipping, operation) {
75943             if (typeof subject[0][0][0] === 'number') {
75944               subject = [subject];
75945             }
75946             if (typeof clipping[0][0][0] === 'number') {
75947               clipping = [clipping];
75948             }
75949             var trivial = trivialOperation(subject, clipping, operation);
75950             if (trivial) {
75951               return trivial === EMPTY ? null : trivial;
75952             }
75953             var sbbox = [Infinity, Infinity, -Infinity, -Infinity];
75954             var cbbox = [Infinity, Infinity, -Infinity, -Infinity];
75955
75956             //console.time('fill queue');
75957             var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);
75958             //console.timeEnd('fill queue');
75959
75960             trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);
75961             if (trivial) {
75962               return trivial === EMPTY ? null : trivial;
75963             }
75964             //console.time('subdivide edges');
75965             var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);
75966             //console.timeEnd('subdivide edges');
75967
75968             //console.time('connect vertices');
75969             var result = connectEdges(sortedEvents, operation);
75970             //console.timeEnd('connect vertices');
75971             return result;
75972           }
75973
75974           function union (subject, clipping) {
75975             return boolean(subject, clipping, UNION);
75976           }
75977
75978           function diff (subject, clipping) {
75979             return boolean(subject, clipping, DIFFERENCE);
75980           }
75981
75982           function xor (subject, clipping){
75983             return boolean(subject, clipping, XOR);
75984           }
75985
75986           function intersection$1 (subject, clipping) {
75987             return boolean(subject, clipping, INTERSECTION);
75988           }
75989
75990           /**
75991            * @enum {Number}
75992            */
75993           var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };
75994
75995           exports.union = union;
75996           exports.diff = diff;
75997           exports.xor = xor;
75998           exports.intersection = intersection$1;
75999           exports.operations = operations;
76000
76001           Object.defineProperty(exports, '__esModule', { value: true });
76002
76003         })));
76004
76005         });
76006
76007         var martinez = unwrapExports(martinez_umd);
76008
76009         var read$6 = function (buffer, offset, isLE, mLen, nBytes) {
76010           var e, m;
76011           var eLen = (nBytes * 8) - mLen - 1;
76012           var eMax = (1 << eLen) - 1;
76013           var eBias = eMax >> 1;
76014           var nBits = -7;
76015           var i = isLE ? (nBytes - 1) : 0;
76016           var d = isLE ? -1 : 1;
76017           var s = buffer[offset + i];
76018
76019           i += d;
76020
76021           e = s & ((1 << (-nBits)) - 1);
76022           s >>= (-nBits);
76023           nBits += eLen;
76024           for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
76025
76026           m = e & ((1 << (-nBits)) - 1);
76027           e >>= (-nBits);
76028           nBits += mLen;
76029           for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
76030
76031           if (e === 0) {
76032             e = 1 - eBias;
76033           } else if (e === eMax) {
76034             return m ? NaN : ((s ? -1 : 1) * Infinity)
76035           } else {
76036             m = m + Math.pow(2, mLen);
76037             e = e - eBias;
76038           }
76039           return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
76040         };
76041
76042         var write$6 = function (buffer, value, offset, isLE, mLen, nBytes) {
76043           var e, m, c;
76044           var eLen = (nBytes * 8) - mLen - 1;
76045           var eMax = (1 << eLen) - 1;
76046           var eBias = eMax >> 1;
76047           var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
76048           var i = isLE ? 0 : (nBytes - 1);
76049           var d = isLE ? 1 : -1;
76050           var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
76051
76052           value = Math.abs(value);
76053
76054           if (isNaN(value) || value === Infinity) {
76055             m = isNaN(value) ? 1 : 0;
76056             e = eMax;
76057           } else {
76058             e = Math.floor(Math.log(value) / Math.LN2);
76059             if (value * (c = Math.pow(2, -e)) < 1) {
76060               e--;
76061               c *= 2;
76062             }
76063             if (e + eBias >= 1) {
76064               value += rt / c;
76065             } else {
76066               value += rt * Math.pow(2, 1 - eBias);
76067             }
76068             if (value * c >= 2) {
76069               e++;
76070               c /= 2;
76071             }
76072
76073             if (e + eBias >= eMax) {
76074               m = 0;
76075               e = eMax;
76076             } else if (e + eBias >= 1) {
76077               m = ((value * c) - 1) * Math.pow(2, mLen);
76078               e = e + eBias;
76079             } else {
76080               m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
76081               e = 0;
76082             }
76083           }
76084
76085           for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
76086
76087           e = (e << mLen) | m;
76088           eLen += mLen;
76089           for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
76090
76091           buffer[offset + i - d] |= s * 128;
76092         };
76093
76094         var ieee754 = {
76095                 read: read$6,
76096                 write: write$6
76097         };
76098
76099         var pbf = Pbf;
76100
76101
76102
76103         function Pbf(buf) {
76104             this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
76105             this.pos = 0;
76106             this.type = 0;
76107             this.length = this.buf.length;
76108         }
76109
76110         Pbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
76111         Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
76112         Pbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
76113         Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
76114
76115         var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
76116             SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
76117
76118         // Threshold chosen based on both benchmarking and knowledge about browser string
76119         // data structures (which currently switch structure types at 12 bytes or more)
76120         var TEXT_DECODER_MIN_LENGTH = 12;
76121         var utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf8');
76122
76123         Pbf.prototype = {
76124
76125             destroy: function() {
76126                 this.buf = null;
76127             },
76128
76129             // === READING =================================================================
76130
76131             readFields: function(readField, result, end) {
76132                 end = end || this.length;
76133
76134                 while (this.pos < end) {
76135                     var val = this.readVarint(),
76136                         tag = val >> 3,
76137                         startPos = this.pos;
76138
76139                     this.type = val & 0x7;
76140                     readField(tag, result, this);
76141
76142                     if (this.pos === startPos) { this.skip(val); }
76143                 }
76144                 return result;
76145             },
76146
76147             readMessage: function(readField, result) {
76148                 return this.readFields(readField, result, this.readVarint() + this.pos);
76149             },
76150
76151             readFixed32: function() {
76152                 var val = readUInt32(this.buf, this.pos);
76153                 this.pos += 4;
76154                 return val;
76155             },
76156
76157             readSFixed32: function() {
76158                 var val = readInt32(this.buf, this.pos);
76159                 this.pos += 4;
76160                 return val;
76161             },
76162
76163             // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
76164
76165             readFixed64: function() {
76166                 var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
76167                 this.pos += 8;
76168                 return val;
76169             },
76170
76171             readSFixed64: function() {
76172                 var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
76173                 this.pos += 8;
76174                 return val;
76175             },
76176
76177             readFloat: function() {
76178                 var val = ieee754.read(this.buf, this.pos, true, 23, 4);
76179                 this.pos += 4;
76180                 return val;
76181             },
76182
76183             readDouble: function() {
76184                 var val = ieee754.read(this.buf, this.pos, true, 52, 8);
76185                 this.pos += 8;
76186                 return val;
76187             },
76188
76189             readVarint: function(isSigned) {
76190                 var buf = this.buf,
76191                     val, b;
76192
76193                 b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) { return val; }
76194                 b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) { return val; }
76195                 b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) { return val; }
76196                 b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) { return val; }
76197                 b = buf[this.pos];   val |= (b & 0x0f) << 28;
76198
76199                 return readVarintRemainder(val, isSigned, this);
76200             },
76201
76202             readVarint64: function() { // for compatibility with v2.0.1
76203                 return this.readVarint(true);
76204             },
76205
76206             readSVarint: function() {
76207                 var num = this.readVarint();
76208                 return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
76209             },
76210
76211             readBoolean: function() {
76212                 return Boolean(this.readVarint());
76213             },
76214
76215             readString: function() {
76216                 var end = this.readVarint() + this.pos;
76217                 var pos = this.pos;
76218                 this.pos = end;
76219
76220                 if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) {
76221                     // longer strings are fast with the built-in browser TextDecoder API
76222                     return readUtf8TextDecoder(this.buf, pos, end);
76223                 }
76224                 // short strings are fast with our custom implementation
76225                 return readUtf8(this.buf, pos, end);
76226             },
76227
76228             readBytes: function() {
76229                 var end = this.readVarint() + this.pos,
76230                     buffer = this.buf.subarray(this.pos, end);
76231                 this.pos = end;
76232                 return buffer;
76233             },
76234
76235             // verbose for performance reasons; doesn't affect gzipped size
76236
76237             readPackedVarint: function(arr, isSigned) {
76238                 if (this.type !== Pbf.Bytes) { return arr.push(this.readVarint(isSigned)); }
76239                 var end = readPackedEnd(this);
76240                 arr = arr || [];
76241                 while (this.pos < end) { arr.push(this.readVarint(isSigned)); }
76242                 return arr;
76243             },
76244             readPackedSVarint: function(arr) {
76245                 if (this.type !== Pbf.Bytes) { return arr.push(this.readSVarint()); }
76246                 var end = readPackedEnd(this);
76247                 arr = arr || [];
76248                 while (this.pos < end) { arr.push(this.readSVarint()); }
76249                 return arr;
76250             },
76251             readPackedBoolean: function(arr) {
76252                 if (this.type !== Pbf.Bytes) { return arr.push(this.readBoolean()); }
76253                 var end = readPackedEnd(this);
76254                 arr = arr || [];
76255                 while (this.pos < end) { arr.push(this.readBoolean()); }
76256                 return arr;
76257             },
76258             readPackedFloat: function(arr) {
76259                 if (this.type !== Pbf.Bytes) { return arr.push(this.readFloat()); }
76260                 var end = readPackedEnd(this);
76261                 arr = arr || [];
76262                 while (this.pos < end) { arr.push(this.readFloat()); }
76263                 return arr;
76264             },
76265             readPackedDouble: function(arr) {
76266                 if (this.type !== Pbf.Bytes) { return arr.push(this.readDouble()); }
76267                 var end = readPackedEnd(this);
76268                 arr = arr || [];
76269                 while (this.pos < end) { arr.push(this.readDouble()); }
76270                 return arr;
76271             },
76272             readPackedFixed32: function(arr) {
76273                 if (this.type !== Pbf.Bytes) { return arr.push(this.readFixed32()); }
76274                 var end = readPackedEnd(this);
76275                 arr = arr || [];
76276                 while (this.pos < end) { arr.push(this.readFixed32()); }
76277                 return arr;
76278             },
76279             readPackedSFixed32: function(arr) {
76280                 if (this.type !== Pbf.Bytes) { return arr.push(this.readSFixed32()); }
76281                 var end = readPackedEnd(this);
76282                 arr = arr || [];
76283                 while (this.pos < end) { arr.push(this.readSFixed32()); }
76284                 return arr;
76285             },
76286             readPackedFixed64: function(arr) {
76287                 if (this.type !== Pbf.Bytes) { return arr.push(this.readFixed64()); }
76288                 var end = readPackedEnd(this);
76289                 arr = arr || [];
76290                 while (this.pos < end) { arr.push(this.readFixed64()); }
76291                 return arr;
76292             },
76293             readPackedSFixed64: function(arr) {
76294                 if (this.type !== Pbf.Bytes) { return arr.push(this.readSFixed64()); }
76295                 var end = readPackedEnd(this);
76296                 arr = arr || [];
76297                 while (this.pos < end) { arr.push(this.readSFixed64()); }
76298                 return arr;
76299             },
76300
76301             skip: function(val) {
76302                 var type = val & 0x7;
76303                 if (type === Pbf.Varint) { while (this.buf[this.pos++] > 0x7f) {} }
76304                 else if (type === Pbf.Bytes) { this.pos = this.readVarint() + this.pos; }
76305                 else if (type === Pbf.Fixed32) { this.pos += 4; }
76306                 else if (type === Pbf.Fixed64) { this.pos += 8; }
76307                 else { throw new Error('Unimplemented type: ' + type); }
76308             },
76309
76310             // === WRITING =================================================================
76311
76312             writeTag: function(tag, type) {
76313                 this.writeVarint((tag << 3) | type);
76314             },
76315
76316             realloc: function(min) {
76317                 var length = this.length || 16;
76318
76319                 while (length < this.pos + min) { length *= 2; }
76320
76321                 if (length !== this.length) {
76322                     var buf = new Uint8Array(length);
76323                     buf.set(this.buf);
76324                     this.buf = buf;
76325                     this.length = length;
76326                 }
76327             },
76328
76329             finish: function() {
76330                 this.length = this.pos;
76331                 this.pos = 0;
76332                 return this.buf.subarray(0, this.length);
76333             },
76334
76335             writeFixed32: function(val) {
76336                 this.realloc(4);
76337                 writeInt32(this.buf, val, this.pos);
76338                 this.pos += 4;
76339             },
76340
76341             writeSFixed32: function(val) {
76342                 this.realloc(4);
76343                 writeInt32(this.buf, val, this.pos);
76344                 this.pos += 4;
76345             },
76346
76347             writeFixed64: function(val) {
76348                 this.realloc(8);
76349                 writeInt32(this.buf, val & -1, this.pos);
76350                 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
76351                 this.pos += 8;
76352             },
76353
76354             writeSFixed64: function(val) {
76355                 this.realloc(8);
76356                 writeInt32(this.buf, val & -1, this.pos);
76357                 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
76358                 this.pos += 8;
76359             },
76360
76361             writeVarint: function(val) {
76362                 val = +val || 0;
76363
76364                 if (val > 0xfffffff || val < 0) {
76365                     writeBigVarint(val, this);
76366                     return;
76367                 }
76368
76369                 this.realloc(4);
76370
76371                 this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; }
76372                 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; }
76373                 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; }
76374                 this.buf[this.pos++] =   (val >>> 7) & 0x7f;
76375             },
76376
76377             writeSVarint: function(val) {
76378                 this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
76379             },
76380
76381             writeBoolean: function(val) {
76382                 this.writeVarint(Boolean(val));
76383             },
76384
76385             writeString: function(str) {
76386                 str = String(str);
76387                 this.realloc(str.length * 4);
76388
76389                 this.pos++; // reserve 1 byte for short string length
76390
76391                 var startPos = this.pos;
76392                 // write the string directly to the buffer and see how much was written
76393                 this.pos = writeUtf8(this.buf, str, this.pos);
76394                 var len = this.pos - startPos;
76395
76396                 if (len >= 0x80) { makeRoomForExtraLength(startPos, len, this); }
76397
76398                 // finally, write the message length in the reserved place and restore the position
76399                 this.pos = startPos - 1;
76400                 this.writeVarint(len);
76401                 this.pos += len;
76402             },
76403
76404             writeFloat: function(val) {
76405                 this.realloc(4);
76406                 ieee754.write(this.buf, val, this.pos, true, 23, 4);
76407                 this.pos += 4;
76408             },
76409
76410             writeDouble: function(val) {
76411                 this.realloc(8);
76412                 ieee754.write(this.buf, val, this.pos, true, 52, 8);
76413                 this.pos += 8;
76414             },
76415
76416             writeBytes: function(buffer) {
76417                 var len = buffer.length;
76418                 this.writeVarint(len);
76419                 this.realloc(len);
76420                 for (var i = 0; i < len; i++) { this.buf[this.pos++] = buffer[i]; }
76421             },
76422
76423             writeRawMessage: function(fn, obj) {
76424                 this.pos++; // reserve 1 byte for short message length
76425
76426                 // write the message directly to the buffer and see how much was written
76427                 var startPos = this.pos;
76428                 fn(obj, this);
76429                 var len = this.pos - startPos;
76430
76431                 if (len >= 0x80) { makeRoomForExtraLength(startPos, len, this); }
76432
76433                 // finally, write the message length in the reserved place and restore the position
76434                 this.pos = startPos - 1;
76435                 this.writeVarint(len);
76436                 this.pos += len;
76437             },
76438
76439             writeMessage: function(tag, fn, obj) {
76440                 this.writeTag(tag, Pbf.Bytes);
76441                 this.writeRawMessage(fn, obj);
76442             },
76443
76444             writePackedVarint:   function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedVarint, arr); }   },
76445             writePackedSVarint:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSVarint, arr); }  },
76446             writePackedBoolean:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedBoolean, arr); }  },
76447             writePackedFloat:    function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFloat, arr); }    },
76448             writePackedDouble:   function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedDouble, arr); }   },
76449             writePackedFixed32:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFixed32, arr); }  },
76450             writePackedSFixed32: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSFixed32, arr); } },
76451             writePackedFixed64:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFixed64, arr); }  },
76452             writePackedSFixed64: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSFixed64, arr); } },
76453
76454             writeBytesField: function(tag, buffer) {
76455                 this.writeTag(tag, Pbf.Bytes);
76456                 this.writeBytes(buffer);
76457             },
76458             writeFixed32Field: function(tag, val) {
76459                 this.writeTag(tag, Pbf.Fixed32);
76460                 this.writeFixed32(val);
76461             },
76462             writeSFixed32Field: function(tag, val) {
76463                 this.writeTag(tag, Pbf.Fixed32);
76464                 this.writeSFixed32(val);
76465             },
76466             writeFixed64Field: function(tag, val) {
76467                 this.writeTag(tag, Pbf.Fixed64);
76468                 this.writeFixed64(val);
76469             },
76470             writeSFixed64Field: function(tag, val) {
76471                 this.writeTag(tag, Pbf.Fixed64);
76472                 this.writeSFixed64(val);
76473             },
76474             writeVarintField: function(tag, val) {
76475                 this.writeTag(tag, Pbf.Varint);
76476                 this.writeVarint(val);
76477             },
76478             writeSVarintField: function(tag, val) {
76479                 this.writeTag(tag, Pbf.Varint);
76480                 this.writeSVarint(val);
76481             },
76482             writeStringField: function(tag, str) {
76483                 this.writeTag(tag, Pbf.Bytes);
76484                 this.writeString(str);
76485             },
76486             writeFloatField: function(tag, val) {
76487                 this.writeTag(tag, Pbf.Fixed32);
76488                 this.writeFloat(val);
76489             },
76490             writeDoubleField: function(tag, val) {
76491                 this.writeTag(tag, Pbf.Fixed64);
76492                 this.writeDouble(val);
76493             },
76494             writeBooleanField: function(tag, val) {
76495                 this.writeVarintField(tag, Boolean(val));
76496             }
76497         };
76498
76499         function readVarintRemainder(l, s, p) {
76500             var buf = p.buf,
76501                 h, b;
76502
76503             b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) { return toNum(l, h, s); }
76504             b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) { return toNum(l, h, s); }
76505             b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) { return toNum(l, h, s); }
76506             b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) { return toNum(l, h, s); }
76507             b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) { return toNum(l, h, s); }
76508             b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) { return toNum(l, h, s); }
76509
76510             throw new Error('Expected varint not more than 10 bytes');
76511         }
76512
76513         function readPackedEnd(pbf) {
76514             return pbf.type === Pbf.Bytes ?
76515                 pbf.readVarint() + pbf.pos : pbf.pos + 1;
76516         }
76517
76518         function toNum(low, high, isSigned) {
76519             if (isSigned) {
76520                 return high * 0x100000000 + (low >>> 0);
76521             }
76522
76523             return ((high >>> 0) * 0x100000000) + (low >>> 0);
76524         }
76525
76526         function writeBigVarint(val, pbf) {
76527             var low, high;
76528
76529             if (val >= 0) {
76530                 low  = (val % 0x100000000) | 0;
76531                 high = (val / 0x100000000) | 0;
76532             } else {
76533                 low  = ~(-val % 0x100000000);
76534                 high = ~(-val / 0x100000000);
76535
76536                 if (low ^ 0xffffffff) {
76537                     low = (low + 1) | 0;
76538                 } else {
76539                     low = 0;
76540                     high = (high + 1) | 0;
76541                 }
76542             }
76543
76544             if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
76545                 throw new Error('Given varint doesn\'t fit into 10 bytes');
76546             }
76547
76548             pbf.realloc(10);
76549
76550             writeBigVarintLow(low, high, pbf);
76551             writeBigVarintHigh(high, pbf);
76552         }
76553
76554         function writeBigVarintLow(low, high, pbf) {
76555             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
76556             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
76557             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
76558             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
76559             pbf.buf[pbf.pos]   = low & 0x7f;
76560         }
76561
76562         function writeBigVarintHigh(high, pbf) {
76563             var lsb = (high & 0x07) << 4;
76564
76565             pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) { return; }
76566             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
76567             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
76568             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
76569             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
76570             pbf.buf[pbf.pos++]  = high & 0x7f;
76571         }
76572
76573         function makeRoomForExtraLength(startPos, len, pbf) {
76574             var extraLen =
76575                 len <= 0x3fff ? 1 :
76576                 len <= 0x1fffff ? 2 :
76577                 len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));
76578
76579             // if 1 byte isn't enough for encoding message length, shift the data to the right
76580             pbf.realloc(extraLen);
76581             for (var i = pbf.pos - 1; i >= startPos; i--) { pbf.buf[i + extraLen] = pbf.buf[i]; }
76582         }
76583
76584         function writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) { pbf.writeVarint(arr[i]); }   }
76585         function writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeSVarint(arr[i]); }  }
76586         function writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) { pbf.writeFloat(arr[i]); }    }
76587         function writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) { pbf.writeDouble(arr[i]); }   }
76588         function writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeBoolean(arr[i]); }  }
76589         function writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeFixed32(arr[i]); }  }
76590         function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeSFixed32(arr[i]); } }
76591         function writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeFixed64(arr[i]); }  }
76592         function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeSFixed64(arr[i]); } }
76593
76594         // Buffer code below from https://github.com/feross/buffer, MIT-licensed
76595
76596         function readUInt32(buf, pos) {
76597             return ((buf[pos]) |
76598                 (buf[pos + 1] << 8) |
76599                 (buf[pos + 2] << 16)) +
76600                 (buf[pos + 3] * 0x1000000);
76601         }
76602
76603         function writeInt32(buf, val, pos) {
76604             buf[pos] = val;
76605             buf[pos + 1] = (val >>> 8);
76606             buf[pos + 2] = (val >>> 16);
76607             buf[pos + 3] = (val >>> 24);
76608         }
76609
76610         function readInt32(buf, pos) {
76611             return ((buf[pos]) |
76612                 (buf[pos + 1] << 8) |
76613                 (buf[pos + 2] << 16)) +
76614                 (buf[pos + 3] << 24);
76615         }
76616
76617         function readUtf8(buf, pos, end) {
76618             var str = '';
76619             var i = pos;
76620
76621             while (i < end) {
76622                 var b0 = buf[i];
76623                 var c = null; // codepoint
76624                 var bytesPerSequence =
76625                     b0 > 0xEF ? 4 :
76626                     b0 > 0xDF ? 3 :
76627                     b0 > 0xBF ? 2 : 1;
76628
76629                 if (i + bytesPerSequence > end) { break; }
76630
76631                 var b1, b2, b3;
76632
76633                 if (bytesPerSequence === 1) {
76634                     if (b0 < 0x80) {
76635                         c = b0;
76636                     }
76637                 } else if (bytesPerSequence === 2) {
76638                     b1 = buf[i + 1];
76639                     if ((b1 & 0xC0) === 0x80) {
76640                         c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
76641                         if (c <= 0x7F) {
76642                             c = null;
76643                         }
76644                     }
76645                 } else if (bytesPerSequence === 3) {
76646                     b1 = buf[i + 1];
76647                     b2 = buf[i + 2];
76648                     if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
76649                         c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
76650                         if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
76651                             c = null;
76652                         }
76653                     }
76654                 } else if (bytesPerSequence === 4) {
76655                     b1 = buf[i + 1];
76656                     b2 = buf[i + 2];
76657                     b3 = buf[i + 3];
76658                     if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
76659                         c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
76660                         if (c <= 0xFFFF || c >= 0x110000) {
76661                             c = null;
76662                         }
76663                     }
76664                 }
76665
76666                 if (c === null) {
76667                     c = 0xFFFD;
76668                     bytesPerSequence = 1;
76669
76670                 } else if (c > 0xFFFF) {
76671                     c -= 0x10000;
76672                     str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
76673                     c = 0xDC00 | c & 0x3FF;
76674                 }
76675
76676                 str += String.fromCharCode(c);
76677                 i += bytesPerSequence;
76678             }
76679
76680             return str;
76681         }
76682
76683         function readUtf8TextDecoder(buf, pos, end) {
76684             return utf8TextDecoder.decode(buf.subarray(pos, end));
76685         }
76686
76687         function writeUtf8(buf, str, pos) {
76688             for (var i = 0, c, lead; i < str.length; i++) {
76689                 c = str.charCodeAt(i); // code point
76690
76691                 if (c > 0xD7FF && c < 0xE000) {
76692                     if (lead) {
76693                         if (c < 0xDC00) {
76694                             buf[pos++] = 0xEF;
76695                             buf[pos++] = 0xBF;
76696                             buf[pos++] = 0xBD;
76697                             lead = c;
76698                             continue;
76699                         } else {
76700                             c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
76701                             lead = null;
76702                         }
76703                     } else {
76704                         if (c > 0xDBFF || (i + 1 === str.length)) {
76705                             buf[pos++] = 0xEF;
76706                             buf[pos++] = 0xBF;
76707                             buf[pos++] = 0xBD;
76708                         } else {
76709                             lead = c;
76710                         }
76711                         continue;
76712                     }
76713                 } else if (lead) {
76714                     buf[pos++] = 0xEF;
76715                     buf[pos++] = 0xBF;
76716                     buf[pos++] = 0xBD;
76717                     lead = null;
76718                 }
76719
76720                 if (c < 0x80) {
76721                     buf[pos++] = c;
76722                 } else {
76723                     if (c < 0x800) {
76724                         buf[pos++] = c >> 0x6 | 0xC0;
76725                     } else {
76726                         if (c < 0x10000) {
76727                             buf[pos++] = c >> 0xC | 0xE0;
76728                         } else {
76729                             buf[pos++] = c >> 0x12 | 0xF0;
76730                             buf[pos++] = c >> 0xC & 0x3F | 0x80;
76731                         }
76732                         buf[pos++] = c >> 0x6 & 0x3F | 0x80;
76733                     }
76734                     buf[pos++] = c & 0x3F | 0x80;
76735                 }
76736             }
76737             return pos;
76738         }
76739
76740         var pointGeometry = Point$1;
76741
76742         /**
76743          * A standalone point geometry with useful accessor, comparison, and
76744          * modification methods.
76745          *
76746          * @class Point
76747          * @param {Number} x the x-coordinate. this could be longitude or screen
76748          * pixels, or any other sort of unit.
76749          * @param {Number} y the y-coordinate. this could be latitude or screen
76750          * pixels, or any other sort of unit.
76751          * @example
76752          * var point = new Point(-77, 38);
76753          */
76754         function Point$1(x, y) {
76755             this.x = x;
76756             this.y = y;
76757         }
76758
76759         Point$1.prototype = {
76760
76761             /**
76762              * Clone this point, returning a new point that can be modified
76763              * without affecting the old one.
76764              * @return {Point} the clone
76765              */
76766             clone: function() { return new Point$1(this.x, this.y); },
76767
76768             /**
76769              * Add this point's x & y coordinates to another point,
76770              * yielding a new point.
76771              * @param {Point} p the other point
76772              * @return {Point} output point
76773              */
76774             add:     function(p) { return this.clone()._add(p); },
76775
76776             /**
76777              * Subtract this point's x & y coordinates to from point,
76778              * yielding a new point.
76779              * @param {Point} p the other point
76780              * @return {Point} output point
76781              */
76782             sub:     function(p) { return this.clone()._sub(p); },
76783
76784             /**
76785              * Multiply this point's x & y coordinates by point,
76786              * yielding a new point.
76787              * @param {Point} p the other point
76788              * @return {Point} output point
76789              */
76790             multByPoint:    function(p) { return this.clone()._multByPoint(p); },
76791
76792             /**
76793              * Divide this point's x & y coordinates by point,
76794              * yielding a new point.
76795              * @param {Point} p the other point
76796              * @return {Point} output point
76797              */
76798             divByPoint:     function(p) { return this.clone()._divByPoint(p); },
76799
76800             /**
76801              * Multiply this point's x & y coordinates by a factor,
76802              * yielding a new point.
76803              * @param {Point} k factor
76804              * @return {Point} output point
76805              */
76806             mult:    function(k) { return this.clone()._mult(k); },
76807
76808             /**
76809              * Divide this point's x & y coordinates by a factor,
76810              * yielding a new point.
76811              * @param {Point} k factor
76812              * @return {Point} output point
76813              */
76814             div:     function(k) { return this.clone()._div(k); },
76815
76816             /**
76817              * Rotate this point around the 0, 0 origin by an angle a,
76818              * given in radians
76819              * @param {Number} a angle to rotate around, in radians
76820              * @return {Point} output point
76821              */
76822             rotate:  function(a) { return this.clone()._rotate(a); },
76823
76824             /**
76825              * Rotate this point around p point by an angle a,
76826              * given in radians
76827              * @param {Number} a angle to rotate around, in radians
76828              * @param {Point} p Point to rotate around
76829              * @return {Point} output point
76830              */
76831             rotateAround:  function(a,p) { return this.clone()._rotateAround(a,p); },
76832
76833             /**
76834              * Multiply this point by a 4x1 transformation matrix
76835              * @param {Array<Number>} m transformation matrix
76836              * @return {Point} output point
76837              */
76838             matMult: function(m) { return this.clone()._matMult(m); },
76839
76840             /**
76841              * Calculate this point but as a unit vector from 0, 0, meaning
76842              * that the distance from the resulting point to the 0, 0
76843              * coordinate will be equal to 1 and the angle from the resulting
76844              * point to the 0, 0 coordinate will be the same as before.
76845              * @return {Point} unit vector point
76846              */
76847             unit:    function() { return this.clone()._unit(); },
76848
76849             /**
76850              * Compute a perpendicular point, where the new y coordinate
76851              * is the old x coordinate and the new x coordinate is the old y
76852              * coordinate multiplied by -1
76853              * @return {Point} perpendicular point
76854              */
76855             perp:    function() { return this.clone()._perp(); },
76856
76857             /**
76858              * Return a version of this point with the x & y coordinates
76859              * rounded to integers.
76860              * @return {Point} rounded point
76861              */
76862             round:   function() { return this.clone()._round(); },
76863
76864             /**
76865              * Return the magitude of this point: this is the Euclidean
76866              * distance from the 0, 0 coordinate to this point's x and y
76867              * coordinates.
76868              * @return {Number} magnitude
76869              */
76870             mag: function() {
76871                 return Math.sqrt(this.x * this.x + this.y * this.y);
76872             },
76873
76874             /**
76875              * Judge whether this point is equal to another point, returning
76876              * true or false.
76877              * @param {Point} other the other point
76878              * @return {boolean} whether the points are equal
76879              */
76880             equals: function(other) {
76881                 return this.x === other.x &&
76882                        this.y === other.y;
76883             },
76884
76885             /**
76886              * Calculate the distance from this point to another point
76887              * @param {Point} p the other point
76888              * @return {Number} distance
76889              */
76890             dist: function(p) {
76891                 return Math.sqrt(this.distSqr(p));
76892             },
76893
76894             /**
76895              * Calculate the distance from this point to another point,
76896              * without the square root step. Useful if you're comparing
76897              * relative distances.
76898              * @param {Point} p the other point
76899              * @return {Number} distance
76900              */
76901             distSqr: function(p) {
76902                 var dx = p.x - this.x,
76903                     dy = p.y - this.y;
76904                 return dx * dx + dy * dy;
76905             },
76906
76907             /**
76908              * Get the angle from the 0, 0 coordinate to this point, in radians
76909              * coordinates.
76910              * @return {Number} angle
76911              */
76912             angle: function() {
76913                 return Math.atan2(this.y, this.x);
76914             },
76915
76916             /**
76917              * Get the angle from this point to another point, in radians
76918              * @param {Point} b the other point
76919              * @return {Number} angle
76920              */
76921             angleTo: function(b) {
76922                 return Math.atan2(this.y - b.y, this.x - b.x);
76923             },
76924
76925             /**
76926              * Get the angle between this point and another point, in radians
76927              * @param {Point} b the other point
76928              * @return {Number} angle
76929              */
76930             angleWith: function(b) {
76931                 return this.angleWithSep(b.x, b.y);
76932             },
76933
76934             /*
76935              * Find the angle of the two vectors, solving the formula for
76936              * the cross product a x b = |a||b|sin(θ) for θ.
76937              * @param {Number} x the x-coordinate
76938              * @param {Number} y the y-coordinate
76939              * @return {Number} the angle in radians
76940              */
76941             angleWithSep: function(x, y) {
76942                 return Math.atan2(
76943                     this.x * y - this.y * x,
76944                     this.x * x + this.y * y);
76945             },
76946
76947             _matMult: function(m) {
76948                 var x = m[0] * this.x + m[1] * this.y,
76949                     y = m[2] * this.x + m[3] * this.y;
76950                 this.x = x;
76951                 this.y = y;
76952                 return this;
76953             },
76954
76955             _add: function(p) {
76956                 this.x += p.x;
76957                 this.y += p.y;
76958                 return this;
76959             },
76960
76961             _sub: function(p) {
76962                 this.x -= p.x;
76963                 this.y -= p.y;
76964                 return this;
76965             },
76966
76967             _mult: function(k) {
76968                 this.x *= k;
76969                 this.y *= k;
76970                 return this;
76971             },
76972
76973             _div: function(k) {
76974                 this.x /= k;
76975                 this.y /= k;
76976                 return this;
76977             },
76978
76979             _multByPoint: function(p) {
76980                 this.x *= p.x;
76981                 this.y *= p.y;
76982                 return this;
76983             },
76984
76985             _divByPoint: function(p) {
76986                 this.x /= p.x;
76987                 this.y /= p.y;
76988                 return this;
76989             },
76990
76991             _unit: function() {
76992                 this._div(this.mag());
76993                 return this;
76994             },
76995
76996             _perp: function() {
76997                 var y = this.y;
76998                 this.y = this.x;
76999                 this.x = -y;
77000                 return this;
77001             },
77002
77003             _rotate: function(angle) {
77004                 var cos = Math.cos(angle),
77005                     sin = Math.sin(angle),
77006                     x = cos * this.x - sin * this.y,
77007                     y = sin * this.x + cos * this.y;
77008                 this.x = x;
77009                 this.y = y;
77010                 return this;
77011             },
77012
77013             _rotateAround: function(angle, p) {
77014                 var cos = Math.cos(angle),
77015                     sin = Math.sin(angle),
77016                     x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),
77017                     y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);
77018                 this.x = x;
77019                 this.y = y;
77020                 return this;
77021             },
77022
77023             _round: function() {
77024                 this.x = Math.round(this.x);
77025                 this.y = Math.round(this.y);
77026                 return this;
77027             }
77028         };
77029
77030         /**
77031          * Construct a point from an array if necessary, otherwise if the input
77032          * is already a Point, or an unknown type, return it unchanged
77033          * @param {Array<Number>|Point|*} a any kind of input value
77034          * @return {Point} constructed point, or passed-through value.
77035          * @example
77036          * // this
77037          * var point = Point.convert([0, 1]);
77038          * // is equivalent to
77039          * var point = new Point(0, 1);
77040          */
77041         Point$1.convert = function (a) {
77042             if (a instanceof Point$1) {
77043                 return a;
77044             }
77045             if (Array.isArray(a)) {
77046                 return new Point$1(a[0], a[1]);
77047             }
77048             return a;
77049         };
77050
77051         var vectortilefeature = VectorTileFeature;
77052
77053         function VectorTileFeature(pbf, end, extent, keys, values) {
77054             // Public
77055             this.properties = {};
77056             this.extent = extent;
77057             this.type = 0;
77058
77059             // Private
77060             this._pbf = pbf;
77061             this._geometry = -1;
77062             this._keys = keys;
77063             this._values = values;
77064
77065             pbf.readFields(readFeature, this, end);
77066         }
77067
77068         function readFeature(tag, feature, pbf) {
77069             if (tag == 1) { feature.id = pbf.readVarint(); }
77070             else if (tag == 2) { readTag(pbf, feature); }
77071             else if (tag == 3) { feature.type = pbf.readVarint(); }
77072             else if (tag == 4) { feature._geometry = pbf.pos; }
77073         }
77074
77075         function readTag(pbf, feature) {
77076             var end = pbf.readVarint() + pbf.pos;
77077
77078             while (pbf.pos < end) {
77079                 var key = feature._keys[pbf.readVarint()],
77080                     value = feature._values[pbf.readVarint()];
77081                 feature.properties[key] = value;
77082             }
77083         }
77084
77085         VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];
77086
77087         VectorTileFeature.prototype.loadGeometry = function() {
77088             var pbf = this._pbf;
77089             pbf.pos = this._geometry;
77090
77091             var end = pbf.readVarint() + pbf.pos,
77092                 cmd = 1,
77093                 length = 0,
77094                 x = 0,
77095                 y = 0,
77096                 lines = [],
77097                 line;
77098
77099             while (pbf.pos < end) {
77100                 if (length <= 0) {
77101                     var cmdLen = pbf.readVarint();
77102                     cmd = cmdLen & 0x7;
77103                     length = cmdLen >> 3;
77104                 }
77105
77106                 length--;
77107
77108                 if (cmd === 1 || cmd === 2) {
77109                     x += pbf.readSVarint();
77110                     y += pbf.readSVarint();
77111
77112                     if (cmd === 1) { // moveTo
77113                         if (line) { lines.push(line); }
77114                         line = [];
77115                     }
77116
77117                     line.push(new pointGeometry(x, y));
77118
77119                 } else if (cmd === 7) {
77120
77121                     // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
77122                     if (line) {
77123                         line.push(line[0].clone()); // closePolygon
77124                     }
77125
77126                 } else {
77127                     throw new Error('unknown command ' + cmd);
77128                 }
77129             }
77130
77131             if (line) { lines.push(line); }
77132
77133             return lines;
77134         };
77135
77136         VectorTileFeature.prototype.bbox = function() {
77137             var pbf = this._pbf;
77138             pbf.pos = this._geometry;
77139
77140             var end = pbf.readVarint() + pbf.pos,
77141                 cmd = 1,
77142                 length = 0,
77143                 x = 0,
77144                 y = 0,
77145                 x1 = Infinity,
77146                 x2 = -Infinity,
77147                 y1 = Infinity,
77148                 y2 = -Infinity;
77149
77150             while (pbf.pos < end) {
77151                 if (length <= 0) {
77152                     var cmdLen = pbf.readVarint();
77153                     cmd = cmdLen & 0x7;
77154                     length = cmdLen >> 3;
77155                 }
77156
77157                 length--;
77158
77159                 if (cmd === 1 || cmd === 2) {
77160                     x += pbf.readSVarint();
77161                     y += pbf.readSVarint();
77162                     if (x < x1) { x1 = x; }
77163                     if (x > x2) { x2 = x; }
77164                     if (y < y1) { y1 = y; }
77165                     if (y > y2) { y2 = y; }
77166
77167                 } else if (cmd !== 7) {
77168                     throw new Error('unknown command ' + cmd);
77169                 }
77170             }
77171
77172             return [x1, y1, x2, y2];
77173         };
77174
77175         VectorTileFeature.prototype.toGeoJSON = function(x, y, z) {
77176             var size = this.extent * Math.pow(2, z),
77177                 x0 = this.extent * x,
77178                 y0 = this.extent * y,
77179                 coords = this.loadGeometry(),
77180                 type = VectorTileFeature.types[this.type],
77181                 i, j;
77182
77183             function project(line) {
77184                 for (var j = 0; j < line.length; j++) {
77185                     var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;
77186                     line[j] = [
77187                         (p.x + x0) * 360 / size - 180,
77188                         360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
77189                     ];
77190                 }
77191             }
77192
77193             switch (this.type) {
77194             case 1:
77195                 var points = [];
77196                 for (i = 0; i < coords.length; i++) {
77197                     points[i] = coords[i][0];
77198                 }
77199                 coords = points;
77200                 project(coords);
77201                 break;
77202
77203             case 2:
77204                 for (i = 0; i < coords.length; i++) {
77205                     project(coords[i]);
77206                 }
77207                 break;
77208
77209             case 3:
77210                 coords = classifyRings(coords);
77211                 for (i = 0; i < coords.length; i++) {
77212                     for (j = 0; j < coords[i].length; j++) {
77213                         project(coords[i][j]);
77214                     }
77215                 }
77216                 break;
77217             }
77218
77219             if (coords.length === 1) {
77220                 coords = coords[0];
77221             } else {
77222                 type = 'Multi' + type;
77223             }
77224
77225             var result = {
77226                 type: "Feature",
77227                 geometry: {
77228                     type: type,
77229                     coordinates: coords
77230                 },
77231                 properties: this.properties
77232             };
77233
77234             if ('id' in this) {
77235                 result.id = this.id;
77236             }
77237
77238             return result;
77239         };
77240
77241         // classifies an array of rings into polygons with outer rings and holes
77242
77243         function classifyRings(rings) {
77244             var len = rings.length;
77245
77246             if (len <= 1) { return [rings]; }
77247
77248             var polygons = [],
77249                 polygon,
77250                 ccw;
77251
77252             for (var i = 0; i < len; i++) {
77253                 var area = signedArea(rings[i]);
77254                 if (area === 0) { continue; }
77255
77256                 if (ccw === undefined) { ccw = area < 0; }
77257
77258                 if (ccw === area < 0) {
77259                     if (polygon) { polygons.push(polygon); }
77260                     polygon = [rings[i]];
77261
77262                 } else {
77263                     polygon.push(rings[i]);
77264                 }
77265             }
77266             if (polygon) { polygons.push(polygon); }
77267
77268             return polygons;
77269         }
77270
77271         function signedArea(ring) {
77272             var sum = 0;
77273             for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
77274                 p1 = ring[i];
77275                 p2 = ring[j];
77276                 sum += (p2.x - p1.x) * (p1.y + p2.y);
77277             }
77278             return sum;
77279         }
77280
77281         var vectortilelayer = VectorTileLayer;
77282
77283         function VectorTileLayer(pbf, end) {
77284             // Public
77285             this.version = 1;
77286             this.name = null;
77287             this.extent = 4096;
77288             this.length = 0;
77289
77290             // Private
77291             this._pbf = pbf;
77292             this._keys = [];
77293             this._values = [];
77294             this._features = [];
77295
77296             pbf.readFields(readLayer, this, end);
77297
77298             this.length = this._features.length;
77299         }
77300
77301         function readLayer(tag, layer, pbf) {
77302             if (tag === 15) { layer.version = pbf.readVarint(); }
77303             else if (tag === 1) { layer.name = pbf.readString(); }
77304             else if (tag === 5) { layer.extent = pbf.readVarint(); }
77305             else if (tag === 2) { layer._features.push(pbf.pos); }
77306             else if (tag === 3) { layer._keys.push(pbf.readString()); }
77307             else if (tag === 4) { layer._values.push(readValueMessage(pbf)); }
77308         }
77309
77310         function readValueMessage(pbf) {
77311             var value = null,
77312                 end = pbf.readVarint() + pbf.pos;
77313
77314             while (pbf.pos < end) {
77315                 var tag = pbf.readVarint() >> 3;
77316
77317                 value = tag === 1 ? pbf.readString() :
77318                     tag === 2 ? pbf.readFloat() :
77319                     tag === 3 ? pbf.readDouble() :
77320                     tag === 4 ? pbf.readVarint64() :
77321                     tag === 5 ? pbf.readVarint() :
77322                     tag === 6 ? pbf.readSVarint() :
77323                     tag === 7 ? pbf.readBoolean() : null;
77324             }
77325
77326             return value;
77327         }
77328
77329         // return feature `i` from this layer as a `VectorTileFeature`
77330         VectorTileLayer.prototype.feature = function(i) {
77331             if (i < 0 || i >= this._features.length) { throw new Error('feature index out of bounds'); }
77332
77333             this._pbf.pos = this._features[i];
77334
77335             var end = this._pbf.readVarint() + this._pbf.pos;
77336             return new vectortilefeature(this._pbf, end, this.extent, this._keys, this._values);
77337         };
77338
77339         var vectortile = VectorTile;
77340
77341         function VectorTile(pbf, end) {
77342             this.layers = pbf.readFields(readTile, {}, end);
77343         }
77344
77345         function readTile(tag, layers, pbf) {
77346             if (tag === 3) {
77347                 var layer = new vectortilelayer(pbf, pbf.readVarint() + pbf.pos);
77348                 if (layer.length) { layers[layer.name] = layer; }
77349             }
77350         }
77351
77352         var VectorTile$1 = vectortile;
77353         var VectorTileFeature$1 = vectortilefeature;
77354         var VectorTileLayer$1 = vectortilelayer;
77355
77356         var vectorTile = {
77357                 VectorTile: VectorTile$1,
77358                 VectorTileFeature: VectorTileFeature$1,
77359                 VectorTileLayer: VectorTileLayer$1
77360         };
77361
77362         var tiler$6 = utilTiler().tileSize(512).margin(1);
77363         var dispatch$7 = dispatch('loadedData');
77364         var _vtCache;
77365
77366
77367         function abortRequest$6(controller) {
77368             controller.abort();
77369         }
77370
77371
77372         function vtToGeoJSON(data, tile, mergeCache) {
77373             var vectorTile$1 = new vectorTile.VectorTile(new pbf(data));
77374             var layers = Object.keys(vectorTile$1.layers);
77375             if (!Array.isArray(layers)) { layers = [layers]; }
77376
77377             var features = [];
77378             layers.forEach(function(layerID) {
77379                 var layer = vectorTile$1.layers[layerID];
77380                 if (layer) {
77381                     for (var i = 0; i < layer.length; i++) {
77382                         var feature = layer.feature(i).toGeoJSON(tile.xyz[0], tile.xyz[1], tile.xyz[2]);
77383                         var geometry = feature.geometry;
77384
77385                         // Treat all Polygons as MultiPolygons
77386                         if (geometry.type === 'Polygon') {
77387                             geometry.type = 'MultiPolygon';
77388                             geometry.coordinates = [geometry.coordinates];
77389                         }
77390
77391                         // Clip to tile bounds
77392                         if (geometry.type === 'MultiPolygon') {
77393                             var isClipped = false;
77394                             var featureClip = turf_bboxClip(feature, tile.extent.rectangle());
77395                             if (!fastDeepEqual(feature.geometry, featureClip.geometry)) {
77396                                 // feature = featureClip;
77397                                 isClipped = true;
77398                             }
77399                             if (!feature.geometry.coordinates.length) { continue; }   // not actually on this tile
77400                             if (!feature.geometry.coordinates[0].length) { continue; }   // not actually on this tile
77401                         }
77402
77403                         // Generate some unique IDs and add some metadata
77404                         var featurehash = utilHashcode(fastJsonStableStringify(feature));
77405                         var propertyhash = utilHashcode(fastJsonStableStringify(feature.properties || {}));
77406                         feature.__layerID__ = layerID.replace(/[^_a-zA-Z0-9\-]/g, '_');
77407                         feature.__featurehash__ = featurehash;
77408                         feature.__propertyhash__ = propertyhash;
77409                         features.push(feature);
77410
77411                         // Clipped Polygons at same zoom with identical properties can get merged
77412                         if (isClipped && geometry.type === 'MultiPolygon') {
77413                             var merged = mergeCache[propertyhash];
77414                             if (merged && merged.length) {
77415                                 var other = merged[0];
77416                                 var coords = martinez.union(
77417                                     feature.geometry.coordinates, other.geometry.coordinates
77418                                 );
77419
77420                                 if (!coords || !coords.length) {
77421                                     continue;  // something failed in martinez union
77422                                 }
77423
77424                                 merged.push(feature);
77425                                 for (var j = 0; j < merged.length; j++) {      // all these features get...
77426                                     merged[j].geometry.coordinates = coords;   // same coords
77427                                     merged[j].__featurehash__ = featurehash;   // same hash, so deduplication works
77428                                 }
77429                             } else {
77430                                 mergeCache[propertyhash] = [feature];
77431                             }
77432                         }
77433                     }
77434                 }
77435             });
77436
77437             return features;
77438         }
77439
77440
77441         function loadTile(source, tile) {
77442             if (source.loaded[tile.id] || source.inflight[tile.id]) { return; }
77443
77444             var url = source.template
77445                 .replace('{x}', tile.xyz[0])
77446                 .replace('{y}', tile.xyz[1])
77447                 // TMS-flipped y coordinate
77448                 .replace(/\{[t-]y\}/, Math.pow(2, tile.xyz[2]) - tile.xyz[1] - 1)
77449                 .replace(/\{z(oom)?\}/, tile.xyz[2])
77450                 .replace(/\{switch:([^}]+)\}/, function(s, r) {
77451                     var subdomains = r.split(',');
77452                     return subdomains[(tile.xyz[0] + tile.xyz[1]) % subdomains.length];
77453                 });
77454
77455
77456             var controller = new AbortController();
77457             source.inflight[tile.id] = controller;
77458
77459             fetch(url, { signal: controller.signal })
77460                 .then(function(response) {
77461                     if (!response.ok) {
77462                         throw new Error(response.status + ' ' + response.statusText);
77463                     }
77464                     source.loaded[tile.id] = [];
77465                     delete source.inflight[tile.id];
77466                     return response.arrayBuffer();
77467                 })
77468                 .then(function(data) {
77469                     if (!data) {
77470                         throw new Error('No Data');
77471                     }
77472
77473                     var z = tile.xyz[2];
77474                     if (!source.canMerge[z]) {
77475                         source.canMerge[z] = {};  // initialize mergeCache
77476                     }
77477
77478                     source.loaded[tile.id] = vtToGeoJSON(data, tile, source.canMerge[z]);
77479                     dispatch$7.call('loadedData');
77480                 })
77481                 .catch(function() {
77482                     source.loaded[tile.id] = [];
77483                     delete source.inflight[tile.id];
77484                 });
77485         }
77486
77487
77488         var serviceVectorTile = {
77489
77490             init: function() {
77491                 if (!_vtCache) {
77492                     this.reset();
77493                 }
77494
77495                 this.event = utilRebind(this, dispatch$7, 'on');
77496             },
77497
77498
77499             reset: function() {
77500                 for (var sourceID in _vtCache) {
77501                     var source = _vtCache[sourceID];
77502                     if (source && source.inflight) {
77503                         Object.values(source.inflight).forEach(abortRequest$6);
77504                     }
77505                 }
77506
77507                 _vtCache = {};
77508             },
77509
77510
77511             addSource: function(sourceID, template) {
77512                 _vtCache[sourceID] = { template: template, inflight: {}, loaded: {}, canMerge: {} };
77513                 return _vtCache[sourceID];
77514             },
77515
77516
77517             data: function(sourceID, projection) {
77518                 var source = _vtCache[sourceID];
77519                 if (!source) { return []; }
77520
77521                 var tiles = tiler$6.getTiles(projection);
77522                 var seen = {};
77523                 var results = [];
77524
77525                 for (var i = 0; i < tiles.length; i++) {
77526                     var features = source.loaded[tiles[i].id];
77527                     if (!features || !features.length) { continue; }
77528
77529                     for (var j = 0; j < features.length; j++) {
77530                         var feature = features[j];
77531                         var hash = feature.__featurehash__;
77532                         if (seen[hash]) { continue; }
77533                         seen[hash] = true;
77534
77535                         // return a shallow copy, because the hash may change
77536                         // later if this feature gets merged with another
77537                         results.push(Object.assign({}, feature));  // shallow copy
77538                     }
77539                 }
77540
77541                 return results;
77542             },
77543
77544
77545             loadTiles: function(sourceID, template, projection) {
77546                 var source = _vtCache[sourceID];
77547                 if (!source) {
77548                     source = this.addSource(sourceID, template);
77549                 }
77550
77551                 var tiles = tiler$6.getTiles(projection);
77552
77553                 // abort inflight requests that are no longer needed
77554                 Object.keys(source.inflight).forEach(function(k) {
77555                     var wanted = tiles.find(function(tile) { return k === tile.id; });
77556                     if (!wanted) {
77557                         abortRequest$6(source.inflight[k]);
77558                         delete source.inflight[k];
77559                     }
77560                 });
77561
77562                 tiles.forEach(function(tile) {
77563                     loadTile(source, tile);
77564                 });
77565             },
77566
77567
77568             cache: function() {
77569                 return _vtCache;
77570             }
77571
77572         };
77573
77574         var apibase$5 = 'https://www.wikidata.org/w/api.php?';
77575         var _wikidataCache = {};
77576
77577
77578         var serviceWikidata = {
77579
77580             init: function() {},
77581
77582             reset: function() {
77583                 _wikidataCache = {};
77584             },
77585
77586
77587             // Search for Wikidata items matching the query
77588             itemsForSearchQuery: function(query, callback) {
77589                 if (!query) {
77590                     if (callback) { callback('No query', {}); }
77591                     return;
77592                 }
77593
77594                 var url = apibase$5 + utilQsString({
77595                     action: 'wbsearchentities',
77596                     format: 'json',
77597                     formatversion: 2,
77598                     search: query,
77599                     type: 'item',
77600                     language: this.languagesToQuery()[0],
77601                     limit: 10,
77602                     origin: '*'
77603                 });
77604
77605                 d3_json(url)
77606                     .then(function(result) {
77607                         if (result && result.error) {
77608                             throw new Error(result.error);
77609                         }
77610                         if (callback) { callback(null, result.search || {}); }
77611                     })
77612                     .catch(function(err) {
77613                         if (callback) { callback(err.message, {}); }
77614                     });
77615             },
77616
77617
77618             // Given a Wikipedia language and article title,
77619             // return an array of corresponding Wikidata entities.
77620             itemsByTitle: function(lang, title, callback) {
77621                 if (!title) {
77622                     if (callback) { callback('No title', {}); }
77623                     return;
77624                 }
77625
77626                 lang = lang || 'en';
77627                 var url = apibase$5 + utilQsString({
77628                     action: 'wbgetentities',
77629                     format: 'json',
77630                     formatversion: 2,
77631                     sites: lang.replace(/-/g, '_') + 'wiki',
77632                     titles: title,
77633                     languages: 'en', // shrink response by filtering to one language
77634                     origin: '*'
77635                 });
77636
77637                 d3_json(url)
77638                     .then(function(result) {
77639                         if (result && result.error) {
77640                             throw new Error(result.error);
77641                         }
77642                         if (callback) { callback(null, result.entities || {}); }
77643                     })
77644                     .catch(function(err) {
77645                         if (callback) { callback(err.message, {}); }
77646                     });
77647             },
77648
77649
77650             languagesToQuery: function() {
77651                 return utilArrayUniq([
77652                     currentLocale.toLowerCase(),
77653                     currentLocale.split('-', 2)[0].toLowerCase(),
77654                     'en'
77655                 ]);
77656             },
77657
77658
77659             entityByQID: function(qid, callback) {
77660                 if (!qid) {
77661                     callback('No qid', {});
77662                     return;
77663                 }
77664                 if (_wikidataCache[qid]) {
77665                     if (callback) { callback(null, _wikidataCache[qid]); }
77666                     return;
77667                 }
77668
77669                 var langs = this.languagesToQuery();
77670                 var url = apibase$5 + utilQsString({
77671                     action: 'wbgetentities',
77672                     format: 'json',
77673                     formatversion: 2,
77674                     ids: qid,
77675                     props: 'labels|descriptions|claims|sitelinks',
77676                     sitefilter: langs.map(function(d) { return d + 'wiki'; }).join('|'),
77677                     languages: langs.join('|'),
77678                     languagefallback: 1,
77679                     origin: '*'
77680                 });
77681
77682                 d3_json(url)
77683                     .then(function(result) {
77684                         if (result && result.error) {
77685                             throw new Error(result.error);
77686                         }
77687                         if (callback) { callback(null, result.entities[qid] || {}); }
77688                     })
77689                     .catch(function(err) {
77690                         if (callback) { callback(err.message, {}); }
77691                     });
77692             },
77693
77694
77695             // Pass `params` object of the form:
77696             // {
77697             //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
77698             // }
77699             //
77700             // Get an result object used to display tag documentation
77701             // {
77702             //   title:        'string',
77703             //   description:  'string',
77704             //   editURL:      'string',
77705             //   imageURL:     'string',
77706             //   wiki:         { title: 'string', text: 'string', url: 'string' }
77707             // }
77708             //
77709             getDocs: function(params, callback) {
77710                 var langs = this.languagesToQuery();
77711                 this.entityByQID(params.qid, function(err, entity) {
77712                     if (err || !entity) {
77713                         callback(err || 'No entity');
77714                         return;
77715                     }
77716
77717                     var i;
77718                     var description;
77719                     if (entity.descriptions && Object.keys(entity.descriptions).length > 0) {
77720                         description = entity.descriptions[Object.keys(entity.descriptions)[0]].value;
77721                     }
77722
77723                     // prepare result
77724                     var result = {
77725                         title: entity.id,
77726                         description: description,
77727                         editURL: 'https://www.wikidata.org/wiki/' + entity.id
77728                     };
77729
77730                     // add image
77731                     if (entity.claims) {
77732                         var imageroot = 'https://commons.wikimedia.org/w/index.php';
77733                         var props = ['P154','P18'];  // logo image, image
77734                         var prop, image;
77735                         for (i = 0; i < props.length; i++) {
77736                             prop = entity.claims[props[i]];
77737                             if (prop && Object.keys(prop).length > 0) {
77738                                 image = prop[Object.keys(prop)[0]].mainsnak.datavalue.value;
77739                                 if (image) {
77740                                     result.imageURL = imageroot + '?' + utilQsString({
77741                                         title: 'Special:Redirect/file/' + image,
77742                                         width: 400
77743                                     });
77744                                     break;
77745                                 }
77746                             }
77747                         }
77748                     }
77749
77750                     if (entity.sitelinks) {
77751                         var englishLocale = (currentLocale.split('-', 2)[0].toLowerCase() === 'en');
77752
77753                         // must be one of these that we requested..
77754                         for (i = 0; i < langs.length; i++) {   // check each, in order of preference
77755                             var w = langs[i] + 'wiki';
77756                             if (entity.sitelinks[w]) {
77757                                 var title = entity.sitelinks[w].title;
77758                                 var tKey = 'inspector.wiki_reference';
77759                                 if (!englishLocale && langs[i] === 'en') {   // user's currentLocale isn't English but
77760                                     tKey = 'inspector.wiki_en_reference';    // we are sending them to enwiki anyway..
77761                                 }
77762
77763                                 result.wiki = {
77764                                     title: title,
77765                                     text: tKey,
77766                                     url: 'https://' + langs[i] + '.wikipedia.org/wiki/' + title.replace(/ /g, '_')
77767                                 };
77768                                 break;
77769                             }
77770                         }
77771                     }
77772
77773                     callback(null, result);
77774                 });
77775             }
77776
77777         };
77778
77779         var endpoint = 'https://en.wikipedia.org/w/api.php?';
77780
77781         var serviceWikipedia = {
77782
77783             init: function() {},
77784             reset: function() {},
77785
77786
77787             search: function(lang, query, callback) {
77788                 if (!query) {
77789                     if (callback) { callback('No Query', []); }
77790                     return;
77791                 }
77792
77793                 lang = lang || 'en';
77794                 var url = endpoint.replace('en', lang) +
77795                     utilQsString({
77796                         action: 'query',
77797                         list: 'search',
77798                         srlimit: '10',
77799                         srinfo: 'suggestion',
77800                         format: 'json',
77801                         origin: '*',
77802                         srsearch: query
77803                     });
77804
77805                 d3_json(url)
77806                     .then(function(result) {
77807                         if (result && result.error) {
77808                             throw new Error(result.error);
77809                         } else if (!result || !result.query || !result.query.search) {
77810                             throw new Error('No Results');
77811                         }
77812                         if (callback) {
77813                             var titles = result.query.search.map(function(d) { return d.title; });
77814                             callback(null, titles);
77815                         }
77816                     })
77817                     .catch(function(err) {
77818                         if (callback) { callback(err, []); }
77819                     });
77820             },
77821
77822
77823             suggestions: function(lang, query, callback) {
77824                 if (!query) {
77825                     if (callback) { callback('', []); }
77826                     return;
77827                 }
77828
77829                 lang = lang || 'en';
77830                 var url = endpoint.replace('en', lang) +
77831                     utilQsString({
77832                         action: 'opensearch',
77833                         namespace: 0,
77834                         suggest: '',
77835                         format: 'json',
77836                         origin: '*',
77837                         search: query
77838                     });
77839
77840                 d3_json(url)
77841                     .then(function(result) {
77842                         if (result && result.error) {
77843                             throw new Error(result.error);
77844                         } else if (!result || result.length < 2) {
77845                             throw new Error('No Results');
77846                         }
77847                         if (callback) { callback(null, result[1] || []); }
77848                     })
77849                     .catch(function(err) {
77850                         if (callback) { callback(err.message, []); }
77851                     });
77852             },
77853
77854
77855             translations: function(lang, title, callback) {
77856                 if (!title) {
77857                     if (callback) { callback('No Title'); }
77858                     return;
77859                 }
77860
77861                 var url = endpoint.replace('en', lang) +
77862                     utilQsString({
77863                         action: 'query',
77864                         prop: 'langlinks',
77865                         format: 'json',
77866                         origin: '*',
77867                         lllimit: 500,
77868                         titles: title
77869                     });
77870
77871                 d3_json(url)
77872                     .then(function(result) {
77873                         if (result && result.error) {
77874                             throw new Error(result.error);
77875                         } else if (!result || !result.query || !result.query.pages) {
77876                             throw new Error('No Results');
77877                         }
77878                         if (callback) {
77879                             var list = result.query.pages[Object.keys(result.query.pages)[0]];
77880                             var translations = {};
77881                             if (list && list.langlinks) {
77882                                 list.langlinks.forEach(function(d) { translations[d.lang] = d['*']; });
77883                             }
77884                             callback(null, translations);
77885                         }
77886                     })
77887                     .catch(function(err) {
77888                         if (callback) { callback(err.message); }
77889                     });
77890             }
77891
77892         };
77893
77894         var services$1 = {
77895             geocoder: serviceNominatim,
77896             keepRight: serviceKeepRight,
77897             improveOSM: serviceImproveOSM,
77898             mapillary: serviceMapillary,
77899             openstreetcam: serviceOpenstreetcam,
77900             osm: serviceOsm,
77901             osmWikibase: serviceOsmWikibase,
77902             maprules: serviceMapRules,
77903             streetside: serviceStreetside,
77904             taginfo: serviceTaginfo,
77905             vectorTile: serviceVectorTile,
77906             wikidata: serviceWikidata,
77907             wikipedia: serviceWikipedia
77908         };
77909
77910         function svgIcon(name, svgklass, useklass) {
77911             return function drawIcon(selection) {
77912                 selection.selectAll('svg.icon' + (svgklass ? '.' + svgklass.split(' ')[0] : ''))
77913                     .data([0])
77914                     .enter()
77915                     .append('svg')
77916                     .attr('class', 'icon ' + (svgklass || ''))
77917                     .append('use')
77918                     .attr('xlink:href', name)
77919                     .attr('class', useklass);
77920             };
77921         }
77922
77923         function uiNoteComments(context) {
77924             var _note;
77925
77926
77927             function noteComments(selection) {
77928                 if (_note.isNew()) { return; } // don't draw .comments-container
77929
77930                 var comments = selection.selectAll('.comments-container')
77931                     .data([0]);
77932
77933                 comments = comments.enter()
77934                     .append('div')
77935                     .attr('class', 'comments-container')
77936                     .merge(comments);
77937
77938                 var commentEnter = comments.selectAll('.comment')
77939                     .data(_note.comments)
77940                     .enter()
77941                     .append('div')
77942                     .attr('class', 'comment');
77943
77944                 commentEnter
77945                     .append('div')
77946                     .attr('class', function(d) { return 'comment-avatar user-' + d.uid; })
77947                     .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
77948
77949                 var mainEnter = commentEnter
77950                     .append('div')
77951                     .attr('class', 'comment-main');
77952
77953                 var metadataEnter = mainEnter
77954                     .append('div')
77955                     .attr('class', 'comment-metadata');
77956
77957                 metadataEnter
77958                     .append('div')
77959                     .attr('class', 'comment-author')
77960                     .each(function(d) {
77961                         var selection = d3_select(this);
77962                         var osm = services$1.osm;
77963                         if (osm && d.user) {
77964                             selection = selection
77965                                 .append('a')
77966                                 .attr('class', 'comment-author-link')
77967                                 .attr('href', osm.userURL(d.user))
77968                                 .attr('tabindex', -1)
77969                                 .attr('target', '_blank');
77970                         }
77971                         selection
77972                             .text(function(d) { return d.user || t('note.anonymous'); });
77973                     });
77974
77975                 metadataEnter
77976                     .append('div')
77977                     .attr('class', 'comment-date')
77978                     .text(function(d) {
77979                         return t('note.status.' + d.action, { when: localeDateString(d.date) });
77980                     });
77981
77982                 mainEnter
77983                     .append('div')
77984                     .attr('class', 'comment-text')
77985                     .html(function(d) { return d.html; });
77986
77987                 comments
77988                     .call(replaceAvatars);
77989             }
77990
77991
77992             function replaceAvatars(selection) {
77993                 var showThirdPartyIcons = context.storage('preferences.privacy.thirdpartyicons') || 'true';
77994                 var osm = services$1.osm;
77995                 if (showThirdPartyIcons !== 'true' || !osm) { return; }
77996
77997                 var uids = {};  // gather uids in the comment thread
77998                 _note.comments.forEach(function(d) {
77999                     if (d.uid) { uids[d.uid] = true; }
78000                 });
78001
78002                 Object.keys(uids).forEach(function(uid) {
78003                     osm.loadUser(uid, function(err, user) {
78004                         if (!user || !user.image_url) { return; }
78005
78006                         selection.selectAll('.comment-avatar.user-' + uid)
78007                             .html('')
78008                             .append('img')
78009                             .attr('class', 'icon comment-avatar-icon')
78010                             .attr('src', user.image_url)
78011                             .attr('alt', user.display_name);
78012                     });
78013                 });
78014             }
78015
78016
78017             function localeDateString(s) {
78018                 if (!s) { return null; }
78019                 var detected = utilDetect();
78020                 var options = { day: 'numeric', month: 'short', year: 'numeric' };
78021                 s = s.replace(/-/g, '/'); // fix browser-specific Date() issues
78022                 var d = new Date(s);
78023                 if (isNaN(d.getTime())) { return null; }
78024                 return d.toLocaleDateString(detected.locale, options);
78025             }
78026
78027
78028             noteComments.note = function(val) {
78029                 if (!arguments.length) { return _note; }
78030                 _note = val;
78031                 return noteComments;
78032             };
78033
78034
78035             return noteComments;
78036         }
78037
78038         function uiNoteHeader() {
78039             var _note;
78040
78041
78042             function noteHeader(selection) {
78043                 var header = selection.selectAll('.note-header')
78044                     .data(
78045                         (_note ? [_note] : []),
78046                         function(d) { return d.status + d.id; }
78047                     );
78048
78049                 header.exit()
78050                     .remove();
78051
78052                 var headerEnter = header.enter()
78053                     .append('div')
78054                     .attr('class', 'note-header');
78055
78056                 var iconEnter = headerEnter
78057                     .append('div')
78058                     .attr('class', function(d) { return 'note-header-icon ' + d.status; })
78059                     .classed('new', function(d) { return d.id < 0; });
78060
78061                 iconEnter
78062                     .append('div')
78063                     .attr('class', 'preset-icon-28')
78064                     .call(svgIcon('#iD-icon-note', 'note-fill'));
78065
78066                 iconEnter.each(function(d) {
78067                     var statusIcon = '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
78068                     iconEnter
78069                         .append('div')
78070                         .attr('class', 'note-icon-annotation')
78071                         .call(svgIcon(statusIcon, 'icon-annotation'));
78072                 });
78073
78074                 headerEnter
78075                     .append('div')
78076                     .attr('class', 'note-header-label')
78077                     .text(function(d) {
78078                         if (_note.isNew()) { return t('note.new'); }
78079                         return t('note.note') + ' ' + d.id + ' ' +
78080                             (d.status === 'closed' ? t('note.closed') : '');
78081                     });
78082             }
78083
78084
78085             noteHeader.note = function(val) {
78086                 if (!arguments.length) { return _note; }
78087                 _note = val;
78088                 return noteHeader;
78089             };
78090
78091
78092             return noteHeader;
78093         }
78094
78095         function uiNoteReport() {
78096             var _note;
78097
78098             function noteReport(selection) {
78099                 var url;
78100                 if (services$1.osm && (_note instanceof osmNote) && (!_note.isNew())) {
78101                     url = services$1.osm.noteReportURL(_note);
78102                 }
78103
78104                 var link = selection.selectAll('.note-report')
78105                     .data(url ? [url] : []);
78106
78107                 // exit
78108                 link.exit()
78109                     .remove();
78110
78111                 // enter
78112                 var linkEnter = link.enter()
78113                     .append('a')
78114                     .attr('class', 'note-report')
78115                     .attr('target', '_blank')
78116                     .attr('href', function(d) { return d; })
78117                     .call(svgIcon('#iD-icon-out-link', 'inline'));
78118
78119                 linkEnter
78120                     .append('span')
78121                     .text(t('note.report'));
78122             }
78123
78124
78125             noteReport.note = function(val) {
78126                 if (!arguments.length) { return _note; }
78127                 _note = val;
78128                 return noteReport;
78129             };
78130
78131             return noteReport;
78132         }
78133
78134         var _popoverID = 0;
78135
78136         function popover(klass) {
78137             var _id = _popoverID++;
78138             var _anchorSelection = d3_select(null);
78139             var popover = function(selection) {
78140                 _anchorSelection = selection;
78141                 selection.each(setup);
78142             };
78143             var _animation = utilFunctor(false);
78144             var _placement = utilFunctor('top'); // top, bottom, left, right
78145             var _alignment = utilFunctor('center');  // leading, center, trailing
78146             var _scrollContainer = utilFunctor(d3_select(null));
78147             var _content;
78148             var _displayType = utilFunctor('');
78149             var _hasArrow = utilFunctor(true);
78150
78151             popover.displayType = function(val) {
78152                 if (arguments.length) {
78153                     _displayType = utilFunctor(val);
78154                     return popover;
78155                 } else {
78156                     return _displayType;
78157                 }
78158             };
78159
78160             popover.hasArrow = function(val) {
78161                 if (arguments.length) {
78162                     _hasArrow = utilFunctor(val);
78163                     return popover;
78164                 } else {
78165                     return _hasArrow;
78166                 }
78167             };
78168
78169             popover.placement = function(val) {
78170                 if (arguments.length) {
78171                     _placement = utilFunctor(val);
78172                     return popover;
78173                 } else {
78174                     return _placement;
78175                 }
78176             };
78177
78178             popover.alignment = function(val) {
78179                 if (arguments.length) {
78180                     _alignment = utilFunctor(val);
78181                     return popover;
78182                 } else {
78183                     return _alignment;
78184                 }
78185             };
78186
78187             popover.scrollContainer = function(val) {
78188                 if (arguments.length) {
78189                     _scrollContainer = utilFunctor(val);
78190                     return popover;
78191                 } else {
78192                     return _scrollContainer;
78193                 }
78194             };
78195
78196             popover.content = function(val) {
78197                 if (arguments.length) {
78198                     _content = val;
78199                     return popover;
78200                 } else {
78201                     return _content;
78202                 }
78203             };
78204
78205             popover.isShown = function() {
78206                 var popoverSelection = d3_select('.popover-' + _id);
78207                 return !popoverSelection.empty() && popoverSelection.classed('in');
78208             };
78209
78210             popover.show = function() {
78211                 _anchorSelection.each(show);
78212             };
78213
78214             popover.updateContent = function() {
78215                 _anchorSelection.each(updateContent);
78216             };
78217
78218             popover.hide = function() {
78219                 _anchorSelection.each(hide);
78220             };
78221
78222             popover.toggle = function() {
78223                 _anchorSelection.each(toggle);
78224             };
78225
78226             popover.destroy = function(selection, selector) {
78227                 // by default, just destroy the current popover
78228                 selector = selector || '.popover-' + _id;
78229
78230                 selection
78231                     .on('mouseenter.popover', null)
78232                     .on('mouseleave.popover', null)
78233                     .on('mouseup.popover', null)
78234                     .on('mousedown.popover', null)
78235                     .on('click.popover', null)
78236                     .attr('title', function() {
78237                         return this.getAttribute('data-original-title') || this.getAttribute('title');
78238                     })
78239                     .attr('data-original-title', null)
78240                     .selectAll(selector)
78241                     .remove();
78242             };
78243
78244
78245             popover.destroyAny = function(selection) {
78246                 selection.call(popover.destroy, '.popover');
78247             };
78248
78249             var isTouchEvent = false;
78250
78251             function setup() {
78252                 var anchor = d3_select(this);
78253                 var animate = _animation.apply(this, arguments);
78254                 var popoverSelection = anchor.selectAll('.popover-' + _id)
78255                     .data([0]);
78256
78257
78258                 var enter = popoverSelection.enter()
78259                     .append('div')
78260                     .attr('class', 'popover popover-' + _id + ' ' + (klass ? klass : ''))
78261                     .classed('arrowed', _hasArrow.apply(this, arguments));
78262
78263                 enter
78264                     .append('div')
78265                     .attr('class', 'popover-arrow');
78266
78267                 enter
78268                     .append('div')
78269                     .attr('class', 'popover-inner');
78270
78271                 popoverSelection = enter
78272                     .merge(popoverSelection);
78273
78274                 if (animate) {
78275                     popoverSelection.classed('fade', true);
78276                 }
78277
78278                 var placement = _placement.apply(this, arguments);
78279                 popoverSelection.classed(placement, true);
78280
78281                 var display = _displayType.apply(this, arguments);
78282
78283                 if (display === 'hover') {
78284                     anchor.on('touchstart.popover', function() {
78285                         // hack to avoid showing popovers upon touch input
78286                         isTouchEvent = true;
78287                     });
78288                     anchor.on('mouseenter.popover', show);
78289                     anchor.on('mouseleave.popover', hide);
78290
78291                 } else if (display === 'clickFocus') {
78292                     anchor
78293                         .on('mousedown.popover', function() {
78294                             event.preventDefault();
78295                             event.stopPropagation();
78296                         })
78297                         .on('mouseup.popover', function() {
78298                             event.preventDefault();
78299                             event.stopPropagation();
78300                         })
78301                         .on('click.popover', toggle);
78302
78303                     popoverSelection
78304                         .attr('tabindex', 0)
78305                         .on('blur.popover', function() {
78306                             anchor.each(function() {
78307                                 hide.apply(this, arguments);
78308                             });
78309                         });
78310                 }
78311             }
78312
78313
78314             function show() {
78315                 if (isTouchEvent) {
78316                     isTouchEvent = false;
78317                     return;
78318                 }
78319                 var anchor = d3_select(this);
78320                 var popoverSelection = anchor.selectAll('.popover-' + _id);
78321
78322                 if (popoverSelection.empty()) {   // popover was removed somehow, put it back
78323                     anchor.call(popover.destroy);
78324                     anchor.each(setup);
78325                     popoverSelection = anchor.selectAll('.popover-' + _id);
78326                 }
78327
78328                 popoverSelection.classed('in', true);
78329
78330                 if (_displayType.apply(this, arguments) === 'clickFocus') {
78331                     anchor.classed('active', true);
78332                     popoverSelection.node().focus();
78333                 }
78334
78335                 anchor.each(updateContent);
78336             }
78337
78338             function updateContent() {
78339                 var anchor = d3_select(this);
78340                 var popoverSelection = anchor.selectAll('.popover-' + _id);
78341
78342                 if (_content) { popoverSelection.selectAll('.popover-inner').call(_content.apply(this, arguments)); }
78343
78344                 updatePosition.apply(this, arguments);
78345                 // hack: update twice to fix instances where the absolute offset is
78346                 // set before the dynamic popover size is calculated by the browser
78347                 updatePosition.apply(this, arguments);
78348             }
78349
78350
78351             function updatePosition() {
78352
78353                 var anchor = d3_select(this);
78354                 var popoverSelection = anchor.selectAll('.popover-' + _id);
78355
78356                 var scrollContainer = _scrollContainer && _scrollContainer.apply(this, arguments);
78357                 var scrollNode = scrollContainer && !scrollContainer.empty() && scrollContainer.node();
78358                 var scrollLeft = scrollNode ? scrollNode.scrollLeft : 0;
78359                 var scrollTop = scrollNode ? scrollNode.scrollTop : 0;
78360
78361                 var placement = _placement.apply(this, arguments);
78362                 var alignment = _alignment.apply(this, arguments);
78363                 var alignFactor = 0.5;
78364                 if (alignment === 'leading') {
78365                     alignFactor = 0;
78366                 } else if (alignment === 'trailing') {
78367                     alignFactor = 1;
78368                 }
78369                 var anchorFrame = getFrame(anchor.node());
78370                 var popoverFrame = getFrame(popoverSelection.node());
78371                 var position;
78372
78373                 switch (placement) {
78374                     case 'top':
78375                     position = {
78376                         x: anchorFrame.x + (anchorFrame.w - popoverFrame.w) * alignFactor,
78377                         y: anchorFrame.y - popoverFrame.h
78378                     };
78379                     break;
78380                     case 'bottom':
78381                     position = {
78382                         x: anchorFrame.x + (anchorFrame.w - popoverFrame.w) * alignFactor,
78383                         y: anchorFrame.y + anchorFrame.h
78384                     };
78385                     break;
78386                     case 'left':
78387                     position = {
78388                         x: anchorFrame.x - popoverFrame.w,
78389                         y: anchorFrame.y + (anchorFrame.h - popoverFrame.h) * alignFactor
78390                     };
78391                     break;
78392                     case 'right':
78393                     position = {
78394                         x: anchorFrame.x + anchorFrame.w,
78395                         y: anchorFrame.y + (anchorFrame.h - popoverFrame.h) * alignFactor
78396                     };
78397                     break;
78398                 }
78399
78400                 if (position) {
78401
78402                     if (scrollNode && (placement === 'top' || placement === 'bottom')) {
78403
78404                         var initialPosX = position.x;
78405
78406                         if (position.x + popoverFrame.w > scrollNode.offsetWidth - 10) {
78407                             position.x = scrollNode.offsetWidth - 10 - popoverFrame.w;
78408                         } else if (position.x < 10) {
78409                             position.x = 10;
78410                         }
78411
78412                         var arrow = popoverSelection.selectAll('.popover-arrow');
78413                         // keep the arrow centered on the button, or as close as possible
78414                         var arrowPosX = Math.min(Math.max(popoverFrame.w / 2 - (position.x - initialPosX), 10), popoverFrame.w - 10);
78415                         arrow.style('left', ~~arrowPosX + 'px');
78416                     }
78417
78418                     popoverSelection.style('left', ~~position.x + 'px').style('top', ~~position.y + 'px');
78419                 } else {
78420                     popoverSelection.style('left', null).style('top', null);
78421                 }
78422
78423                 function getFrame(node) {
78424                     var positionStyle = d3_select(node).style('position');
78425                     if (positionStyle === 'absolute' || positionStyle === 'static') {
78426                         return {
78427                             x: node.offsetLeft - scrollLeft,
78428                             y: node.offsetTop - scrollTop,
78429                             w: node.offsetWidth,
78430                             h: node.offsetHeight
78431                         };
78432                     } else {
78433                         return {
78434                             x: 0,
78435                             y: 0,
78436                             w: node.offsetWidth,
78437                             h: node.offsetHeight
78438                         };
78439                     }
78440                 }
78441             }
78442
78443
78444             function hide() {
78445                 var anchor = d3_select(this);
78446                 if (_displayType.apply(this, arguments) === 'clickFocus') {
78447                     anchor.classed('active', false);
78448                 }
78449                 anchor.selectAll('.popover-' + _id).classed('in', false);
78450             }
78451
78452
78453             function toggle() {
78454                 if (d3_select(this).select('.popover-' + _id).classed('in')) {
78455                     hide.apply(this, arguments);
78456                 } else {
78457                     show.apply(this, arguments);
78458                 }
78459             }
78460
78461
78462             return popover;
78463         }
78464
78465         function tooltip(klass) {
78466
78467             var tooltip = popover((klass || '') + ' tooltip')
78468                 .displayType('hover');
78469
78470             var _title = function() {
78471                 var title = this.getAttribute('data-original-title');
78472                 if (title) {
78473                     return title;
78474                 } else {
78475                     title = this.getAttribute('title');
78476                     this.removeAttribute('title');
78477                     this.setAttribute('data-original-title', title);
78478                 }
78479                 return title;
78480             };
78481             var _html = utilFunctor(false);
78482
78483
78484             tooltip.title = function(val) {
78485                 if (arguments.length) {
78486                     _title = utilFunctor(val);
78487                     return tooltip;
78488                 } else {
78489                     return _title;
78490                 }
78491             };
78492
78493
78494             tooltip.html = function(val) {
78495                 if (arguments.length) {
78496                     _html = utilFunctor(val);
78497                     return tooltip;
78498                 } else {
78499                     return _html;
78500                 }
78501             };
78502
78503             tooltip.content(function() {
78504                 var content = _title.apply(this, arguments);
78505                 var markup = _html.apply(this, arguments);
78506
78507                 return function(selection) {
78508                     selection[markup ? 'html' : 'text'](content);
78509                 };
78510             });
78511
78512             return tooltip;
78513         }
78514
78515         function uiQuickLinks() {
78516             var _choices = [];
78517
78518
78519             function quickLinks(selection) {
78520                 var container = selection.selectAll('.quick-links')
78521                     .data([0]);
78522
78523                 container = container.enter()
78524                     .append('div')
78525                     .attr('class', 'quick-links')
78526                     .merge(container);
78527
78528                 var items = container.selectAll('.quick-link')
78529                     .data(_choices, function(d) { return d.id; });
78530
78531                 items.exit()
78532                     .remove();
78533
78534                 items.enter()
78535                     .append('a')
78536                     .attr('class', function(d) { return 'quick-link quick-link-' + d.id; })
78537                     .attr('href', '#')
78538                     .text(function(d) { return t(d.label); })
78539                     .each(function(d) {
78540                         if (typeof d.tooltip !== 'function') { return; }
78541                         d3_select(this)
78542                             .call(tooltip().html(true).title(d.tooltip).placement('bottom'));
78543                     })
78544                     .on('click', function(d) {
78545                         if (typeof d.click !== 'function') { return; }
78546                         event.preventDefault();
78547                         d.click(d);
78548                     });
78549             }
78550
78551
78552             //  val should be an array of choices like:
78553             //    [{
78554             //       id: 'link-id',
78555             //       label: 'translation.key',
78556             //       tooltip: function(d),
78557             //       click: function(d)
78558             //    }, ..]
78559             quickLinks.choices = function(val) {
78560                 if (!arguments.length) { return _choices; }
78561                 _choices = val;
78562                 return quickLinks;
78563             };
78564
78565
78566             return quickLinks;
78567         }
78568
78569         function uiTooltipHtml(text, keys, heading) {
78570             var s = '';
78571
78572             if (heading) {
78573                 s += '<div class="tooltip-heading"><span>' + heading + '</span></div>';
78574             }
78575             if (text) {
78576                 s += '<div class="tooltip-text"><span>' + text + '</span></div>';
78577             }
78578             if (keys) {
78579                 if (!Array.isArray(keys)) { keys = [keys]; }
78580                 s += '<div class="keyhint-wrap"><span>' + t('tooltip_keyhint') + '</span>';
78581                 keys.forEach(function(key) {
78582                     s += '<kbd class="shortcut">' + key + '</kbd>';
78583                 });
78584                 s += '</div>';
78585             }
78586
78587             return s;
78588         }
78589
78590         function uiViewOnOSM(context) {
78591             var _what;   // an osmEntity or osmNote
78592
78593
78594             function viewOnOSM(selection) {
78595                 var url;
78596                 if (_what instanceof osmEntity) {
78597                     url = context.connection().entityURL(_what);
78598                 } else if (_what instanceof osmNote) {
78599                     url = context.connection().noteURL(_what);
78600                 }
78601
78602                 var data = ((!_what || _what.isNew()) ? [] : [_what]);
78603                 var link = selection.selectAll('.view-on-osm')
78604                     .data(data, function(d) { return d.id; });
78605
78606                 // exit
78607                 link.exit()
78608                     .remove();
78609
78610                 // enter
78611                 var linkEnter = link.enter()
78612                     .append('a')
78613                     .attr('class', 'view-on-osm')
78614                     .attr('target', '_blank')
78615                     .attr('href', url)
78616                     .call(svgIcon('#iD-icon-out-link', 'inline'));
78617
78618                 linkEnter
78619                     .append('span')
78620                     .text(t('inspector.view_on_osm'));
78621             }
78622
78623
78624             viewOnOSM.what = function(_) {
78625                 if (!arguments.length) { return _what; }
78626                 _what = _;
78627                 return viewOnOSM;
78628             };
78629
78630             return viewOnOSM;
78631         }
78632
78633         function uiNoteEditor(context) {
78634             var dispatch$1 = dispatch('change');
78635             var quickLinks = uiQuickLinks();
78636             var noteComments = uiNoteComments(context);
78637             var noteHeader = uiNoteHeader();
78638
78639             // var formFields = uiFormFields(context);
78640
78641             var _note;
78642             // var _fieldsArr;
78643
78644
78645             function noteEditor(selection) {
78646                 // quick links
78647                 var choices = [{
78648                     id: 'zoom_to',
78649                     label: 'inspector.zoom_to.title',
78650                     tooltip: function() {
78651                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_note'), t('inspector.zoom_to.key'));
78652                     },
78653                     click: function zoomTo() {
78654                         context.mode().zoomToSelected();
78655                     }
78656                 }];
78657
78658
78659                 var header = selection.selectAll('.header')
78660                     .data([0]);
78661
78662                 var headerEnter = header.enter()
78663                     .append('div')
78664                     .attr('class', 'header fillL');
78665
78666                 headerEnter
78667                     .append('button')
78668                     .attr('class', 'fr note-editor-close')
78669                     .on('click', function() {
78670                         context.enter(modeBrowse(context));
78671                     })
78672                     .call(svgIcon('#iD-icon-close'));
78673
78674                 headerEnter
78675                     .append('h3')
78676                     .text(t('note.title'));
78677
78678
78679                 var body = selection.selectAll('.body')
78680                     .data([0]);
78681
78682                 body = body.enter()
78683                     .append('div')
78684                     .attr('class', 'body')
78685                     .merge(body);
78686
78687                 var editor = body.selectAll('.note-editor')
78688                     .data([0]);
78689
78690                 editor.enter()
78691                     .append('div')
78692                     .attr('class', 'modal-section note-editor')
78693                     .merge(editor)
78694                     .call(noteHeader.note(_note))
78695                     .call(quickLinks.choices(choices))
78696                     .call(noteComments.note(_note))
78697                     .call(noteSaveSection);
78698
78699
78700                 var footer = selection.selectAll('.footer')
78701                     .data([0]);
78702
78703                 footer.enter()
78704                     .append('div')
78705                     .attr('class', 'footer')
78706                     .merge(footer)
78707                     .call(uiViewOnOSM(context).what(_note))
78708                     .call(uiNoteReport().note(_note));
78709
78710
78711                 // rerender the note editor on any auth change
78712                 var osm = services$1.osm;
78713                 if (osm) {
78714                     osm.on('change.note-save', function() {
78715                         selection.call(noteEditor);
78716                     });
78717                 }
78718             }
78719
78720
78721             function noteSaveSection(selection) {
78722                 var isSelected = (_note && _note.id === context.selectedNoteID());
78723                 var noteSave = selection.selectAll('.note-save')
78724                     .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
78725
78726                 // exit
78727                 noteSave.exit()
78728                     .remove();
78729
78730                 // enter
78731                 var noteSaveEnter = noteSave.enter()
78732                     .append('div')
78733                     .attr('class', 'note-save save-section cf');
78734
78735                 // // if new note, show categories to pick from
78736                 // if (_note.isNew()) {
78737                 //     var presets = context.presets();
78738
78739                 //     // NOTE: this key isn't a age and therefore there is no documentation (yet)
78740                 //     _fieldsArr = [
78741                 //         uiField(context, presets.field('category'), null, { show: true, revert: false }),
78742                 //     ];
78743
78744                 //     _fieldsArr.forEach(function(field) {
78745                 //         field
78746                 //             .on('change', changeCategory);
78747                 //     });
78748
78749                 //     noteSaveEnter
78750                 //         .append('div')
78751                 //         .attr('class', 'note-category')
78752                 //         .call(formFields.fieldsArr(_fieldsArr));
78753                 // }
78754
78755                 // function changeCategory() {
78756                 //     // NOTE: perhaps there is a better way to get value
78757                 //     var val = d3_select('input[name=\'category\']:checked').property('__data__') || undefined;
78758
78759                 //     // store the unsaved category with the note itself
78760                 //     _note = _note.update({ newCategory: val });
78761                 //     var osm = services.osm;
78762                 //     if (osm) {
78763                 //         osm.replaceNote(_note);  // update note cache
78764                 //     }
78765                 //     noteSave
78766                 //         .call(noteSaveButtons);
78767                 // }
78768
78769                 noteSaveEnter
78770                     .append('h4')
78771                     .attr('class', '.note-save-header')
78772                     .text(function() {
78773                         return _note.isNew() ? t('note.newDescription') : t('note.newComment');
78774                     });
78775
78776                 noteSaveEnter
78777                     .append('textarea')
78778                     .attr('class', 'new-comment-input')
78779                     .attr('placeholder', t('note.inputPlaceholder'))
78780                     .attr('maxlength', 1000)
78781                     .property('value', function(d) { return d.newComment; })
78782                     .call(utilNoAuto)
78783                     .on('keydown.note-input', keydown)
78784                     .on('input.note-input', changeInput)
78785                     .on('blur.note-input', changeInput);
78786
78787                 // update
78788                 noteSave = noteSaveEnter
78789                     .merge(noteSave)
78790                     .call(userDetails)
78791                     .call(noteSaveButtons);
78792
78793
78794                 // fast submit if user presses cmd+enter
78795                 function keydown() {
78796                     if (!(event.keyCode === 13 && event.metaKey)) { return; }
78797
78798                     var osm = services$1.osm;
78799                     if (!osm) { return; }
78800
78801                     var hasAuth = osm.authenticated();
78802                     if (!hasAuth) { return; }
78803
78804                     if (!_note.newComment) { return; }
78805
78806                     event.preventDefault();
78807
78808                     d3_select(this)
78809                         .on('keydown.note-input', null);
78810
78811                     // focus on button and submit
78812                     window.setTimeout(function() {
78813                         if (_note.isNew()) {
78814                             noteSave.selectAll('.save-button').node().focus();
78815                             clickSave(_note);
78816                         } else  {
78817                             noteSave.selectAll('.comment-button').node().focus();
78818                             clickComment(_note);
78819                         }
78820                     }, 10);
78821                 }
78822
78823
78824                 function changeInput() {
78825                     var input = d3_select(this);
78826                     var val = input.property('value').trim() || undefined;
78827
78828                     // store the unsaved comment with the note itself
78829                     _note = _note.update({ newComment: val });
78830
78831                     var osm = services$1.osm;
78832                     if (osm) {
78833                         osm.replaceNote(_note);  // update note cache
78834                     }
78835
78836                     noteSave
78837                         .call(noteSaveButtons);
78838                 }
78839             }
78840
78841
78842             function userDetails(selection) {
78843                 var detailSection = selection.selectAll('.detail-section')
78844                     .data([0]);
78845
78846                 detailSection = detailSection.enter()
78847                     .append('div')
78848                     .attr('class', 'detail-section')
78849                     .merge(detailSection);
78850
78851                 var osm = services$1.osm;
78852                 if (!osm) { return; }
78853
78854                 // Add warning if user is not logged in
78855                 var hasAuth = osm.authenticated();
78856                 var authWarning = detailSection.selectAll('.auth-warning')
78857                     .data(hasAuth ? [] : [0]);
78858
78859                 authWarning.exit()
78860                     .transition()
78861                     .duration(200)
78862                     .style('opacity', 0)
78863                     .remove();
78864
78865                 var authEnter = authWarning.enter()
78866                     .insert('div', '.tag-reference-body')
78867                     .attr('class', 'field-warning auth-warning')
78868                     .style('opacity', 0);
78869
78870                 authEnter
78871                     .call(svgIcon('#iD-icon-alert', 'inline'));
78872
78873                 authEnter
78874                     .append('span')
78875                     .text(t('note.login'));
78876
78877                 authEnter
78878                     .append('a')
78879                     .attr('target', '_blank')
78880                     .call(svgIcon('#iD-icon-out-link', 'inline'))
78881                     .append('span')
78882                     .text(t('login'))
78883                     .on('click.note-login', function() {
78884                         event.preventDefault();
78885                         osm.authenticate();
78886                     });
78887
78888                 authEnter
78889                     .transition()
78890                     .duration(200)
78891                     .style('opacity', 1);
78892
78893
78894                 var prose = detailSection.selectAll('.note-save-prose')
78895                     .data(hasAuth ? [0] : []);
78896
78897                 prose.exit()
78898                     .remove();
78899
78900                 prose = prose.enter()
78901                     .append('p')
78902                     .attr('class', 'note-save-prose')
78903                     .text(t('note.upload_explanation'))
78904                     .merge(prose);
78905
78906                 osm.userDetails(function(err, user) {
78907                     if (err) { return; }
78908
78909                     var userLink = d3_select(document.createElement('div'));
78910
78911                     if (user.image_url) {
78912                         userLink
78913                             .append('img')
78914                             .attr('src', user.image_url)
78915                             .attr('class', 'icon pre-text user-icon');
78916                     }
78917
78918                     userLink
78919                         .append('a')
78920                         .attr('class', 'user-info')
78921                         .text(user.display_name)
78922                         .attr('href', osm.userURL(user.display_name))
78923                         .attr('tabindex', -1)
78924                         .attr('target', '_blank');
78925
78926                     prose
78927                         .html(t('note.upload_explanation_with_user', { user: userLink.html() }));
78928                 });
78929             }
78930
78931
78932             function noteSaveButtons(selection) {
78933                 var osm = services$1.osm;
78934                 var hasAuth = osm && osm.authenticated();
78935
78936                 var isSelected = (_note && _note.id === context.selectedNoteID());
78937                 var buttonSection = selection.selectAll('.buttons')
78938                     .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
78939
78940                 // exit
78941                 buttonSection.exit()
78942                     .remove();
78943
78944                 // enter
78945                 var buttonEnter = buttonSection.enter()
78946                     .append('div')
78947                     .attr('class', 'buttons');
78948
78949                 if (_note.isNew()) {
78950                     buttonEnter
78951                         .append('button')
78952                         .attr('class', 'button cancel-button secondary-action')
78953                         .text(t('confirm.cancel'));
78954
78955                     buttonEnter
78956                         .append('button')
78957                         .attr('class', 'button save-button action')
78958                         .text(t('note.save'));
78959
78960                 } else {
78961                     buttonEnter
78962                         .append('button')
78963                         .attr('class', 'button status-button action');
78964
78965                     buttonEnter
78966                         .append('button')
78967                         .attr('class', 'button comment-button action')
78968                         .text(t('note.comment'));
78969                 }
78970
78971
78972                 // update
78973                 buttonSection = buttonSection
78974                     .merge(buttonEnter);
78975
78976                 buttonSection.select('.cancel-button')   // select and propagate data
78977                     .on('click.cancel', clickCancel);
78978
78979                 buttonSection.select('.save-button')     // select and propagate data
78980                     .attr('disabled', isSaveDisabled)
78981                     .on('click.save', clickSave);
78982
78983                 buttonSection.select('.status-button')   // select and propagate data
78984                     .attr('disabled', (hasAuth ? null : true))
78985                     .text(function(d) {
78986                         var action = (d.status === 'open' ? 'close' : 'open');
78987                         var andComment = (d.newComment ? '_comment' : '');
78988                         return t('note.' + action + andComment);
78989                     })
78990                     .on('click.status', clickStatus);
78991
78992                 buttonSection.select('.comment-button')   // select and propagate data
78993                     .attr('disabled', isSaveDisabled)
78994                     .on('click.comment', clickComment);
78995
78996
78997                 function isSaveDisabled(d) {
78998                     return (hasAuth && d.status === 'open' && d.newComment) ? null : true;
78999                 }
79000             }
79001
79002
79003
79004             function clickCancel(d) {
79005                 this.blur();    // avoid keeping focus on the button - #4641
79006                 var osm = services$1.osm;
79007                 if (osm) {
79008                     osm.removeNote(d);
79009                 }
79010                 context.enter(modeBrowse(context));
79011                 dispatch$1.call('change');
79012             }
79013
79014
79015             function clickSave(d) {
79016                 this.blur();    // avoid keeping focus on the button - #4641
79017                 var osm = services$1.osm;
79018                 if (osm) {
79019                     osm.postNoteCreate(d, function(err, note) {
79020                         dispatch$1.call('change', note);
79021                     });
79022                 }
79023             }
79024
79025
79026             function clickStatus(d) {
79027                 this.blur();    // avoid keeping focus on the button - #4641
79028                 var osm = services$1.osm;
79029                 if (osm) {
79030                     var setStatus = (d.status === 'open' ? 'closed' : 'open');
79031                     osm.postNoteUpdate(d, setStatus, function(err, note) {
79032                         dispatch$1.call('change', note);
79033                     });
79034                 }
79035             }
79036
79037             function clickComment(d) {
79038                 this.blur();    // avoid keeping focus on the button - #4641
79039                 var osm = services$1.osm;
79040                 if (osm) {
79041                     osm.postNoteUpdate(d, d.status, function(err, note) {
79042                         dispatch$1.call('change', note);
79043                     });
79044                 }
79045             }
79046
79047
79048             noteEditor.note = function(val) {
79049                 if (!arguments.length) { return _note; }
79050                 _note = val;
79051                 return noteEditor;
79052             };
79053
79054
79055             return utilRebind(noteEditor, dispatch$1, 'on');
79056         }
79057
79058         function modeSelectNote(context, selectedNoteID) {
79059             var mode = {
79060                 id: 'select-note',
79061                 button: 'browse'
79062             };
79063
79064             var osm = services$1.osm;
79065             var keybinding = utilKeybinding('select-note');
79066             var noteEditor = uiNoteEditor(context)
79067                 .on('change', function() {
79068                     context.map().pan([0,0]);  // trigger a redraw
79069                     var note = checkSelectedID();
79070                     if (!note) { return; }
79071                     context.ui().sidebar
79072                         .show(noteEditor.note(note));
79073                 });
79074
79075             var behaviors = [
79076                 behaviorBreathe(),
79077                 behaviorHover(context),
79078                 behaviorSelect(context),
79079                 behaviorLasso(context),
79080                 modeDragNode(context).behavior,
79081                 modeDragNote(context).behavior
79082             ];
79083
79084             var newFeature = false;
79085
79086
79087             function checkSelectedID() {
79088                 if (!osm) { return; }
79089                 var note = osm.getNote(selectedNoteID);
79090                 if (!note) {
79091                     context.enter(modeBrowse(context));
79092                 }
79093                 return note;
79094             }
79095
79096
79097             // class the note as selected, or return to browse mode if the note is gone
79098             function selectNote(drawn) {
79099                 if (!checkSelectedID()) { return; }
79100
79101                 var selection = context.surface().selectAll('.layer-notes .note-' + selectedNoteID);
79102
79103                 if (selection.empty()) {
79104                     // Return to browse mode if selected DOM elements have
79105                     // disappeared because the user moved them out of view..
79106                     var source = event && event.type === 'zoom' && event.sourceEvent;
79107                     if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
79108                         context.enter(modeBrowse(context));
79109                     }
79110
79111                 } else {
79112                     selection
79113                         .classed('selected', true);
79114
79115                     context.selectedNoteID(selectedNoteID);
79116                 }
79117             }
79118
79119
79120             function esc() {
79121                 if (d3_select('.combobox').size()) { return; }
79122                 context.enter(modeBrowse(context));
79123             }
79124
79125
79126             mode.zoomToSelected = function() {
79127                 if (!osm) { return; }
79128                 var note = osm.getNote(selectedNoteID);
79129                 if (note) {
79130                     context.map().centerZoomEase(note.loc, 20);
79131                 }
79132             };
79133
79134
79135             mode.newFeature = function(val) {
79136                 if (!arguments.length) { return newFeature; }
79137                 newFeature = val;
79138                 return mode;
79139             };
79140
79141
79142             mode.enter = function() {
79143                 var note = checkSelectedID();
79144                 if (!note) { return; }
79145
79146                 behaviors.forEach(context.install);
79147
79148                 keybinding
79149                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
79150                     .on('⎋', esc, true);
79151
79152                 d3_select(document)
79153                     .call(keybinding);
79154
79155                 selectNote();
79156
79157                 var sidebar = context.ui().sidebar;
79158                 sidebar.show(noteEditor.note(note));
79159
79160                 // expand the sidebar, avoid obscuring the note if needed
79161                 sidebar.expand(sidebar.intersects(note.extent()));
79162
79163                 context.map()
79164                     .on('drawn.select', selectNote);
79165             };
79166
79167
79168             mode.exit = function() {
79169                 behaviors.forEach(context.uninstall);
79170
79171                 d3_select(document)
79172                     .call(keybinding.unbind);
79173
79174                 context.surface()
79175                     .selectAll('.layer-notes .selected')
79176                     .classed('selected hover', false);
79177
79178                 context.map()
79179                     .on('drawn.select', null);
79180
79181                 context.ui().sidebar
79182                     .hide();
79183
79184                 context.selectedNoteID(null);
79185             };
79186
79187
79188             return mode;
79189         }
79190
79191         function modeDragNote(context) {
79192             var mode = {
79193                 id: 'drag-note',
79194                 button: 'browse'
79195             };
79196
79197             var edit = behaviorEdit(context);
79198
79199             var _nudgeInterval;
79200             var _lastLoc;
79201             var _note;    // most current note.. dragged note may have stale datum.
79202
79203
79204             function startNudge(nudge) {
79205                 if (_nudgeInterval) { window.clearInterval(_nudgeInterval); }
79206                 _nudgeInterval = window.setInterval(function() {
79207                     context.pan(nudge);
79208                     doMove(nudge);
79209                 }, 50);
79210             }
79211
79212
79213             function stopNudge() {
79214                 if (_nudgeInterval) {
79215                     window.clearInterval(_nudgeInterval);
79216                     _nudgeInterval = null;
79217                 }
79218             }
79219
79220
79221             function origin(note) {
79222                 return context.projection(note.loc);
79223             }
79224
79225
79226             function start(note) {
79227                 _note = note;
79228                 var osm = services$1.osm;
79229                 if (osm) {
79230                     // Get latest note from cache.. The marker may have a stale datum bound to it
79231                     // and dragging it around can sometimes delete the users note comment.
79232                     _note = osm.getNote(_note.id);
79233                 }
79234
79235                 context.surface().selectAll('.note-' + _note.id)
79236                     .classed('active', true);
79237
79238                 context.perform(actionNoop());
79239                 context.enter(mode);
79240                 context.selectedNoteID(_note.id);
79241             }
79242
79243
79244             function move() {
79245                 event.sourceEvent.stopPropagation();
79246                 _lastLoc = context.projection.invert(event.point);
79247
79248                 doMove();
79249                 var nudge = geoViewportEdge(event.point, context.map().dimensions());
79250                 if (nudge) {
79251                     startNudge(nudge);
79252                 } else {
79253                     stopNudge();
79254                 }
79255             }
79256
79257
79258             function doMove(nudge) {
79259                 nudge = nudge || [0, 0];
79260
79261                 var currPoint = (event && event.point) || context.projection(_lastLoc);
79262                 var currMouse = geoVecSubtract(currPoint, nudge);
79263                 var loc = context.projection.invert(currMouse);
79264
79265                 _note = _note.move(loc);
79266
79267                 var osm = services$1.osm;
79268                 if (osm) {
79269                     osm.replaceNote(_note);  // update note cache
79270                 }
79271
79272                 context.replace(actionNoop());   // trigger redraw
79273             }
79274
79275
79276             function end() {
79277                 context.replace(actionNoop());   // trigger redraw
79278
79279                 context
79280                     .selectedNoteID(_note.id)
79281                     .enter(modeSelectNote(context, _note.id));
79282             }
79283
79284
79285             var drag = behaviorDrag()
79286                 .selector('.layer-touch.markers .target.note.new')
79287                 .surface(d3_select('#map').node())
79288                 .origin(origin)
79289                 .on('start', start)
79290                 .on('move', move)
79291                 .on('end', end);
79292
79293
79294             mode.enter = function() {
79295                 context.install(edit);
79296             };
79297
79298
79299             mode.exit = function() {
79300                 context.ui().sidebar.hover.cancel();
79301                 context.uninstall(edit);
79302
79303                 context.surface()
79304                     .selectAll('.active')
79305                     .classed('active', false);
79306
79307                 stopNudge();
79308             };
79309
79310             mode.behavior = drag;
79311
79312             return mode;
79313         }
79314
79315         function uiDataHeader() {
79316             var _datum;
79317
79318
79319             function dataHeader(selection) {
79320                 var header = selection.selectAll('.data-header')
79321                     .data(
79322                         (_datum ? [_datum] : []),
79323                         function(d) { return d.__featurehash__; }
79324                     );
79325
79326                 header.exit()
79327                     .remove();
79328
79329                 var headerEnter = header.enter()
79330                     .append('div')
79331                     .attr('class', 'data-header');
79332
79333                 var iconEnter = headerEnter
79334                     .append('div')
79335                     .attr('class', 'data-header-icon');
79336
79337                 iconEnter
79338                     .append('div')
79339                     .attr('class', 'preset-icon-28')
79340                     .call(svgIcon('#iD-icon-data', 'note-fill'));
79341
79342                 headerEnter
79343                     .append('div')
79344                     .attr('class', 'data-header-label')
79345                     .text(t('map_data.layers.custom.title'));
79346             }
79347
79348
79349             dataHeader.datum = function(val) {
79350                 if (!arguments.length) { return _datum; }
79351                 _datum = val;
79352                 return this;
79353             };
79354
79355
79356             return dataHeader;
79357         }
79358
79359         // This code assumes that the combobox values will not have duplicate entries.
79360         // It is keyed on the `value` of the entry. Data should be an array of objects like:
79361         //   [{
79362         //       value:  'display text',  // required
79363         //       title:  'hover text'     // optional
79364         //   }, ...]
79365
79366         var _comboHideTimerID;
79367
79368         function uiCombobox(context, klass) {
79369             var dispatch$1 = dispatch('accept', 'cancel');
79370             var container = context.container();
79371
79372             var _suggestions = [];
79373             var _data = [];
79374             var _fetched = {};
79375             var _selected = null;
79376             var _canAutocomplete = true;
79377             var _caseSensitive = false;
79378             var _cancelFetch = false;
79379             var _minItems = 2;
79380             var _tDown = 0;
79381             var _mouseEnterHandler, _mouseLeaveHandler;
79382
79383             var _fetcher = function(val, cb) {
79384                 cb(_data.filter(function(d) {
79385                     var terms = d.terms || [];
79386                     terms.push(d.value);
79387                     return terms.some(function(term) {
79388                         return term
79389                             .toString()
79390                             .toLowerCase()
79391                             .indexOf(val.toLowerCase()) !== -1;
79392                     });
79393                 }));
79394             };
79395
79396             var combobox = function(input, attachTo) {
79397                 if (!input || input.empty()) { return; }
79398
79399                 input
79400                     .classed('combobox-input', true)
79401                     .on('focus.combo-input', focus)
79402                     .on('blur.combo-input', blur)
79403                     .on('keydown.combo-input', keydown)
79404                     .on('keyup.combo-input', keyup)
79405                     .on('input.combo-input', change)
79406                     .on('mousedown.combo-input', mousedown)
79407                     .each(function() {
79408                         var parent = this.parentNode;
79409                         var sibling = this.nextSibling;
79410
79411                         d3_select(parent).selectAll('.combobox-caret')
79412                             .filter(function(d) { return d === input.node(); })
79413                             .data([input.node()])
79414                             .enter()
79415                             .insert('div', function() { return sibling; })
79416                             .attr('class', 'combobox-caret')
79417                             .on('mousedown.combo-caret', function() {
79418                                 event.preventDefault(); // don't steal focus from input
79419                                 input.node().focus(); // focus the input as if it was clicked
79420                                 mousedown();
79421                             })
79422                             .on('mouseup.combo-caret', function() {
79423                                 event.preventDefault(); // don't steal focus from input
79424                                 mouseup();
79425                             });
79426                     });
79427
79428
79429                 function mousedown() {
79430                     if (event.button !== 0) { return; }    // left click only
79431                     _tDown = +new Date();
79432
79433                     // clear selection
79434                     var start = input.property('selectionStart');
79435                     var end = input.property('selectionEnd');
79436                     if (start !== end) {
79437                         var val = utilGetSetValue(input);
79438                         input.node().setSelectionRange(val.length, val.length);
79439                         return;
79440                     }
79441
79442                     input.on('mouseup.combo-input', mouseup);
79443                 }
79444
79445
79446                 function mouseup() {
79447                     input.on('mouseup.combo-input', null);
79448                     if (event.button !== 0) { return; }    // left click only
79449                     if (input.node() !== document.activeElement) { return; }   // exit if this input is not focused
79450
79451                     var start = input.property('selectionStart');
79452                     var end = input.property('selectionEnd');
79453                     if (start !== end) { return; }  // exit if user is selecting
79454
79455                     // not showing or showing for a different field - try to show it.
79456                     var combo = container.selectAll('.combobox');
79457                     if (combo.empty() || combo.datum() !== input.node()) {
79458                         var tOrig = _tDown;
79459                         window.setTimeout(function() {
79460                             if (tOrig !== _tDown) { return; }   // exit if user double clicked
79461                             fetchComboData('', function() {
79462                                 show();
79463                                 render();
79464                             });
79465                         }, 250);
79466
79467                     } else {
79468                         hide();
79469                     }
79470                 }
79471
79472
79473                 function focus() {
79474                     fetchComboData('');   // prefetch values (may warm taginfo cache)
79475                 }
79476
79477
79478                 function blur() {
79479                     _comboHideTimerID = window.setTimeout(hide, 75);
79480                 }
79481
79482
79483                 function show() {
79484                     hide();   // remove any existing
79485
79486                     container
79487                         .insert('div', ':first-child')
79488                         .datum(input.node())
79489                         .attr('class', 'combobox' + (klass ? ' combobox-' + klass : ''))
79490                         .style('position', 'absolute')
79491                         .style('display', 'block')
79492                         .style('left', '0px')
79493                         .on('mousedown.combo-container', function () {
79494                             // prevent moving focus out of the input field
79495                             event.preventDefault();
79496                         });
79497
79498                     d3_select('body')
79499                         .on('scroll.combo-scroll', render, true);
79500                 }
79501
79502
79503                 function hide() {
79504                     if (_comboHideTimerID) {
79505                         window.clearTimeout(_comboHideTimerID);
79506                         _comboHideTimerID = undefined;
79507                     }
79508
79509                     container.selectAll('.combobox')
79510                         .remove();
79511
79512                     d3_select('body')
79513                         .on('scroll.combo-scroll', null);
79514                 }
79515
79516
79517                 function keydown() {
79518                     var shown = !container.selectAll('.combobox').empty();
79519                     var tagName = input.node() ? input.node().tagName.toLowerCase() : '';
79520
79521                     switch (event.keyCode) {
79522                         case 8:   // ⌫ Backspace
79523                         case 46:  // ⌦ Delete
79524                             event.stopPropagation();
79525                             _selected = null;
79526                             render();
79527                             input.on('input.combo-input', function() {
79528                                 var start = input.property('selectionStart');
79529                                 input.node().setSelectionRange(start, start);
79530                                 input.on('input.combo-input', change);
79531                             });
79532                             break;
79533
79534                         case 9:   // ⇥ Tab
79535                             accept();
79536                             break;
79537
79538                         case 13:  // ↩ Return
79539                             event.preventDefault();
79540                             event.stopPropagation();
79541                             break;
79542
79543                         case 38:  // ↑ Up arrow
79544                             if (tagName === 'textarea' && !shown) { return; }
79545                             event.preventDefault();
79546                             if (tagName === 'input' && !shown) {
79547                                 show();
79548                             }
79549                             nav(-1);
79550                             break;
79551
79552                         case 40:  // ↓ Down arrow
79553                             if (tagName === 'textarea' && !shown) { return; }
79554                             event.preventDefault();
79555                             if (tagName === 'input' && !shown) {
79556                                 show();
79557                             }
79558                             nav(+1);
79559                             break;
79560                     }
79561                 }
79562
79563
79564                 function keyup() {
79565                     switch (event.keyCode) {
79566                         case 27:  // ⎋ Escape
79567                             cancel();
79568                             break;
79569
79570                         case 13:  // ↩ Return
79571                             accept();
79572                             break;
79573                     }
79574                 }
79575
79576
79577                 // Called whenever the input value is changed (e.g. on typing)
79578                 function change() {
79579                     fetchComboData(value(), function() {
79580                         _selected = null;
79581                         var val = input.property('value');
79582
79583                         if (_suggestions.length) {
79584                             if (input.property('selectionEnd') === val.length) {
79585                                 _selected = tryAutocomplete();
79586                             }
79587
79588                             if (!_selected) {
79589                                 _selected = val;
79590                             }
79591                         }
79592
79593                         if (val.length) {
79594                             var combo = container.selectAll('.combobox');
79595                             if (combo.empty()) {
79596                                 show();
79597                             }
79598                         } else {
79599                             hide();
79600                         }
79601
79602                         render();
79603                     });
79604                 }
79605
79606
79607                 // Called when the user presses up/down arrows to navigate the list
79608                 function nav(dir) {
79609                     if (_suggestions.length) {
79610                         // try to determine previously selected index..
79611                         var index = -1;
79612                         for (var i = 0; i < _suggestions.length; i++) {
79613                             if (_selected && _suggestions[i].value === _selected) {
79614                                 index = i;
79615                                 break;
79616                             }
79617                         }
79618
79619                         // pick new _selected
79620                         index = Math.max(Math.min(index + dir, _suggestions.length - 1), 0);
79621                         _selected = _suggestions[index].value;
79622                         input.property('value', _selected);
79623                     }
79624
79625                     render();
79626                     ensureVisible();
79627                 }
79628
79629
79630                 function ensureVisible() {
79631                     var combo = container.selectAll('.combobox');
79632                     if (combo.empty()) { return; }
79633
79634                     var containerRect = container.node().getBoundingClientRect();
79635                     var comboRect = combo.node().getBoundingClientRect();
79636
79637                     if (comboRect.bottom > containerRect.bottom) {
79638                         var node = attachTo ? attachTo.node() : input.node();
79639                         node.scrollIntoView({ behavior: 'instant', block: 'center' });
79640                         render();
79641                     }
79642
79643                     // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move
79644                     var selected = combo.selectAll('.combobox-option.selected').node();
79645                     if (selected) {
79646                         selected.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
79647                     }
79648                 }
79649
79650
79651                 function value() {
79652                     var value = input.property('value');
79653                     var start = input.property('selectionStart');
79654                     var end = input.property('selectionEnd');
79655
79656                     if (start && end) {
79657                         value = value.substring(0, start);
79658                     }
79659
79660                     return value;
79661                 }
79662
79663
79664                 function fetchComboData(v, cb) {
79665                     _cancelFetch = false;
79666
79667                     _fetcher.call(input, v, function(results) {
79668                         // already chose a value, don't overwrite or autocomplete it
79669                         if (_cancelFetch) { return; }
79670
79671                         _suggestions = results;
79672                         results.forEach(function(d) { _fetched[d.value] = d; });
79673
79674                         if (cb) {
79675                             cb();
79676                         }
79677                     });
79678                 }
79679
79680
79681                 function tryAutocomplete() {
79682                     if (!_canAutocomplete) { return; }
79683
79684                     var val = _caseSensitive ? value() : value().toLowerCase();
79685                     if (!val) { return; }
79686
79687                     // Don't autocomplete if user is typing a number - #4935
79688                     if (!isNaN(parseFloat(val)) && isFinite(val)) { return; }
79689
79690                     var bestIndex = -1;
79691                     for (var i = 0; i < _suggestions.length; i++) {
79692                         var suggestion = _suggestions[i].value;
79693                         var compare = _caseSensitive ? suggestion : suggestion.toLowerCase();
79694
79695                         // if search string matches suggestion exactly, pick it..
79696                         if (compare === val) {
79697                             bestIndex = i;
79698                             break;
79699
79700                         // otherwise lock in the first result that starts with the search string..
79701                         } else if (bestIndex === -1 && compare.indexOf(val) === 0) {
79702                             bestIndex = i;
79703                         }
79704                     }
79705
79706                     if (bestIndex !== -1) {
79707                         var bestVal = _suggestions[bestIndex].value;
79708                         input.property('value', bestVal);
79709                         input.node().setSelectionRange(val.length, bestVal.length);
79710                         return bestVal;
79711                     }
79712                 }
79713
79714
79715                 function render() {
79716                     if (_suggestions.length < _minItems || document.activeElement !== input.node()) {
79717                         hide();
79718                         return;
79719                     }
79720
79721                     var shown = !container.selectAll('.combobox').empty();
79722                     if (!shown) { return; }
79723
79724                     var combo = container.selectAll('.combobox');
79725                     var options = combo.selectAll('.combobox-option')
79726                         .data(_suggestions, function(d) { return d.value; });
79727
79728                     options.exit()
79729                         .remove();
79730
79731                     // enter/update
79732                     options.enter()
79733                         .append('a')
79734                         .attr('class', 'combobox-option')
79735                         .attr('title', function(d) { return d.title; })
79736                         .text(function(d) { return d.display || d.value; })
79737                         .on('mouseenter', _mouseEnterHandler)
79738                         .on('mouseleave', _mouseLeaveHandler)
79739                         .merge(options)
79740                         .classed('selected', function(d) { return d.value === _selected; })
79741                         .on('click.combo-option', accept)
79742                         .order();
79743
79744                     var node = attachTo ? attachTo.node() : input.node();
79745                     var rect = node.getBoundingClientRect();
79746
79747                     combo
79748                         .style('left', (rect.left + 5) + 'px')
79749                         .style('width', (rect.width - 10) + 'px')
79750                         .style('top', rect.height + rect.top + 'px');
79751                 }
79752
79753
79754                 // Dispatches an 'accept' event
79755                 // Then hides the combobox.
79756                 function accept(d) {
79757                     _cancelFetch = true;
79758                     var thiz = input.node();
79759
79760                     if (d) {   // user clicked on a suggestion
79761                         utilGetSetValue(input, d.value);    // replace field contents
79762                         utilTriggerEvent(input, 'change');
79763                     }
79764
79765                     // clear (and keep) selection
79766                     var val = utilGetSetValue(input);
79767                     thiz.setSelectionRange(val.length, val.length);
79768
79769                     d = _fetched[val];
79770                     dispatch$1.call('accept', thiz, d, val);
79771                     hide();
79772                 }
79773
79774
79775                 // Dispatches an 'cancel' event
79776                 // Then hides the combobox.
79777                 function cancel() {
79778                     _cancelFetch = true;
79779                     var thiz = input.node();
79780
79781                     // clear (and remove) selection, and replace field contents
79782                     var val = utilGetSetValue(input);
79783                     var start = input.property('selectionStart');
79784                     var end = input.property('selectionEnd');
79785                     val = val.slice(0, start) + val.slice(end);
79786                     utilGetSetValue(input, val);
79787                     thiz.setSelectionRange(val.length, val.length);
79788
79789                     dispatch$1.call('cancel', thiz);
79790                     hide();
79791                 }
79792
79793             };
79794
79795
79796             combobox.canAutocomplete = function(val) {
79797                 if (!arguments.length) { return _canAutocomplete; }
79798                 _canAutocomplete = val;
79799                 return combobox;
79800             };
79801
79802             combobox.caseSensitive = function(val) {
79803                 if (!arguments.length) { return _caseSensitive; }
79804                 _caseSensitive = val;
79805                 return combobox;
79806             };
79807
79808             combobox.data = function(val) {
79809                 if (!arguments.length) { return _data; }
79810                 _data = val;
79811                 return combobox;
79812             };
79813
79814             combobox.fetcher = function(val) {
79815                 if (!arguments.length) { return _fetcher; }
79816                 _fetcher = val;
79817                 return combobox;
79818             };
79819
79820             combobox.minItems = function(val) {
79821                 if (!arguments.length) { return _minItems; }
79822                 _minItems = val;
79823                 return combobox;
79824             };
79825
79826             combobox.itemsMouseEnter = function(val) {
79827                 if (!arguments.length) { return _mouseEnterHandler; }
79828                 _mouseEnterHandler = val;
79829                 return combobox;
79830             };
79831
79832             combobox.itemsMouseLeave = function(val) {
79833                 if (!arguments.length) { return _mouseLeaveHandler; }
79834                 _mouseLeaveHandler = val;
79835                 return combobox;
79836             };
79837
79838             return utilRebind(combobox, dispatch$1, 'on');
79839         }
79840
79841
79842         uiCombobox.off = function(input) {
79843             input
79844                 .on('focus.combo-input', null)
79845                 .on('blur.combo-input', null)
79846                 .on('keydown.combo-input', null)
79847                 .on('keyup.combo-input', null)
79848                 .on('input.combo-input', null)
79849                 .on('mousedown.combo-input', null)
79850                 .on('mouseup.combo-input', null);
79851
79852
79853             d3_select('body')
79854                 .on('scroll.combo-scroll', null);
79855         };
79856
79857         // toggles the visibility of ui elements, using a combination of the
79858         // hide class, which sets display=none, and a d3 transition for opacity.
79859         // this will cause blinking when called repeatedly, so check that the
79860         // value actually changes between calls.
79861         function uiToggle(show, callback) {
79862             return function(selection) {
79863                 selection
79864                     .style('opacity', show ? 0 : 1)
79865                     .classed('hide', false)
79866                     .transition()
79867                     .style('opacity', show ? 1 : 0)
79868                     .on('end', function() {
79869                         d3_select(this)
79870                             .classed('hide', !show)
79871                             .style('opacity', null);
79872                         if (callback) { callback.apply(this); }
79873                     });
79874             };
79875         }
79876
79877         function uiDisclosure(context, key, expandedDefault) {
79878             var dispatch$1 = dispatch('toggled');
79879             var _preference = (context.storage('disclosure.' + key + '.expanded'));
79880             var _expanded = (_preference === null ? !!expandedDefault : (_preference === 'true'));
79881             var _title;
79882             var _updatePreference = true;
79883             var _content = function () {};
79884
79885
79886             var disclosure = function(selection) {
79887                 var hideToggle = selection.selectAll('.hide-toggle-' + key)
79888                     .data([0]);
79889
79890                 // enter
79891                 var hideToggleEnter = hideToggle.enter()
79892                     .append('a')
79893                     .attr('href', '#')
79894                     .attr('class', 'hide-toggle hide-toggle-' + key)
79895                     .call(svgIcon('', 'pre-text', 'hide-toggle-icon'));
79896
79897                 hideToggleEnter
79898                     .append('span')
79899                     .attr('class', 'hide-toggle-text');
79900
79901                 // update
79902                 hideToggle = hideToggleEnter
79903                     .merge(hideToggle);
79904
79905                 hideToggle
79906                     .on('click', toggle)
79907                     .classed('expanded', _expanded);
79908
79909                 hideToggle.selectAll('.hide-toggle-text')
79910                     .text(_title);
79911
79912                 hideToggle.selectAll('.hide-toggle-icon')
79913                     .attr('xlink:href', _expanded ? '#iD-icon-down'
79914                         : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
79915                     );
79916
79917
79918                 var wrap = selection.selectAll('.disclosure-wrap')
79919                     .data([0]);
79920
79921                 // enter/update
79922                 wrap = wrap.enter()
79923                     .append('div')
79924                     .attr('class', 'disclosure-wrap disclosure-wrap-' + key)
79925                     .merge(wrap)
79926                     .classed('hide', !_expanded);
79927
79928                 if (_expanded) {
79929                     wrap
79930                         .call(_content);
79931                 }
79932
79933
79934                 function toggle() {
79935                     event.preventDefault();
79936
79937                     _expanded = !_expanded;
79938
79939                     if (_updatePreference) {
79940                         context.storage('disclosure.' + key + '.expanded', _expanded);
79941                     }
79942
79943                     hideToggle
79944                         .classed('expanded', _expanded);
79945
79946                     hideToggle.selectAll('.hide-toggle-icon')
79947                         .attr('xlink:href', _expanded ? '#iD-icon-down'
79948                             : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
79949                         );
79950
79951                     wrap
79952                         .call(uiToggle(_expanded));
79953
79954                     if (_expanded) {
79955                         wrap
79956                             .call(_content);
79957                     }
79958
79959                     dispatch$1.call('toggled', this, _expanded);
79960                 }
79961             };
79962
79963
79964             disclosure.title = function(val) {
79965                 if (!arguments.length) { return _title; }
79966                 _title = val;
79967                 return disclosure;
79968             };
79969
79970
79971             disclosure.expanded = function(val) {
79972                 if (!arguments.length) { return _expanded; }
79973                 _expanded = val;
79974                 return disclosure;
79975             };
79976
79977
79978             disclosure.updatePreference = function(val) {
79979                 if (!arguments.length) { return _updatePreference; }
79980                 _updatePreference = val;
79981                 return disclosure;
79982             };
79983
79984
79985             disclosure.content = function(val) {
79986                 if (!arguments.length) { return _content; }
79987                 _content = val;
79988                 return disclosure;
79989             };
79990
79991
79992             return utilRebind(disclosure, dispatch$1, 'on');
79993         }
79994
79995         // Pass `which` object of the form:
79996         // {
79997         //   key: 'string',     // required
79998         //   value: 'string'    // optional
79999         // }
80000         //   -or-
80001         // {
80002         //   rtype: 'string'    // relation type  (e.g. 'multipolygon')
80003         // }
80004         //   -or-
80005         // {
80006         //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
80007         // }
80008         //
80009         function uiTagReference(what) {
80010             var wikibase = what.qid ? services$1.wikidata : services$1.osmWikibase;
80011             var tagReference = {};
80012
80013             var _button = d3_select(null);
80014             var _body = d3_select(null);
80015             var _loaded;
80016             var _showing;
80017
80018
80019             function load() {
80020                 if (!wikibase) { return; }
80021
80022                 _button
80023                     .classed('tag-reference-loading', true);
80024
80025                 wikibase.getDocs(what, gotDocs);
80026             }
80027
80028
80029             function gotDocs(err, docs) {
80030                 _body.html('');
80031
80032                 if (!docs || !docs.title) {
80033                     _body
80034                         .append('p')
80035                         .attr('class', 'tag-reference-description')
80036                         .text(t('inspector.no_documentation_key'));
80037                     done();
80038                     return;
80039                 }
80040
80041                 if (docs.imageURL) {
80042                     _body
80043                         .append('img')
80044                         .attr('class', 'tag-reference-wiki-image')
80045                         .attr('src', docs.imageURL)
80046                         .on('load', function() { done(); })
80047                         .on('error', function() { d3_select(this).remove(); done(); });
80048                 } else {
80049                     done();
80050                 }
80051
80052                 _body
80053                     .append('p')
80054                     .attr('class', 'tag-reference-description')
80055                     .text(docs.description || t('inspector.no_documentation_key'))
80056                     .append('a')
80057                     .attr('class', 'tag-reference-edit')
80058                     .attr('target', '_blank')
80059                     .attr('tabindex', -1)
80060                     .attr('title', t('inspector.edit_reference'))
80061                     .attr('href', docs.editURL)
80062                     .call(svgIcon('#iD-icon-edit', 'inline'));
80063
80064                 if (docs.wiki) {
80065                     _body
80066                       .append('a')
80067                       .attr('class', 'tag-reference-link')
80068                       .attr('target', '_blank')
80069                       .attr('tabindex', -1)
80070                       .attr('href', docs.wiki.url)
80071                       .call(svgIcon('#iD-icon-out-link', 'inline'))
80072                       .append('span')
80073                       .text(t(docs.wiki.text));
80074                 }
80075
80076                 // Add link to info about "good changeset comments" - #2923
80077                 if (what.key === 'comment') {
80078                     _body
80079                         .append('a')
80080                         .attr('class', 'tag-reference-comment-link')
80081                         .attr('target', '_blank')
80082                         .attr('tabindex', -1)
80083                         .call(svgIcon('#iD-icon-out-link', 'inline'))
80084                         .attr('href', t('commit.about_changeset_comments_link'))
80085                         .append('span')
80086                         .text(t('commit.about_changeset_comments'));
80087                 }
80088             }
80089
80090
80091             function done() {
80092                 _loaded = true;
80093
80094                 _button
80095                     .classed('tag-reference-loading', false);
80096
80097                 _body
80098                     .classed('expanded', true)
80099                     .transition()
80100                     .duration(200)
80101                     .style('max-height', '200px')
80102                     .style('opacity', '1');
80103
80104                 _showing = true;
80105
80106                 _button.selectAll('svg.icon use').each(function() {
80107                     var iconUse = d3_select(this);
80108                     if (iconUse.attr('href') === '#iD-icon-info') {
80109                         iconUse.attr('href', '#iD-icon-info-filled');
80110                     }
80111                 });
80112             }
80113
80114
80115             function hide() {
80116                 _body
80117                     .transition()
80118                     .duration(200)
80119                     .style('max-height', '0px')
80120                     .style('opacity', '0')
80121                     .on('end', function () {
80122                         _body.classed('expanded', false);
80123                     });
80124
80125                 _showing = false;
80126
80127                 _button.selectAll('svg.icon use').each(function() {
80128                     var iconUse = d3_select(this);
80129                     if (iconUse.attr('href') === '#iD-icon-info-filled') {
80130                         iconUse.attr('href', '#iD-icon-info');
80131                     }
80132                 });
80133
80134             }
80135
80136
80137             tagReference.button = function(selection, klass, iconName) {
80138                 _button = selection.selectAll('.tag-reference-button')
80139                     .data([0]);
80140
80141                 _button = _button.enter()
80142                     .append('button')
80143                     .attr('class', 'tag-reference-button ' + klass)
80144                     .attr('title', t('icons.information'))
80145                     .attr('tabindex', -1)
80146                     .call(svgIcon('#iD-icon-' + (iconName || 'inspect')))
80147                     .merge(_button);
80148
80149                 _button
80150                     .on('click', function () {
80151                         event.stopPropagation();
80152                         event.preventDefault();
80153                         this.blur();    // avoid keeping focus on the button - #4641
80154                         if (_showing) {
80155                             hide();
80156                         } else if (_loaded) {
80157                             done();
80158                         } else {
80159                             load();
80160                         }
80161                     });
80162             };
80163
80164
80165             tagReference.body = function(selection) {
80166                 var itemID = what.qid || what.rtype || (what.key + '-' + what.value);
80167                 _body = selection.selectAll('.tag-reference-body')
80168                     .data([itemID], function(d) { return d; });
80169
80170                 _body.exit()
80171                     .remove();
80172
80173                 _body = _body.enter()
80174                     .append('div')
80175                     .attr('class', 'tag-reference-body')
80176                     .style('max-height', '0')
80177                     .style('opacity', '0')
80178                     .merge(_body);
80179
80180                 if (_showing === false) {
80181                     hide();
80182                 }
80183             };
80184
80185
80186             tagReference.showing = function(val) {
80187                 if (!arguments.length) { return _showing; }
80188                 _showing = val;
80189                 return tagReference;
80190             };
80191
80192
80193             return tagReference;
80194         }
80195
80196         function uiRawTagEditor(context) {
80197             var taginfo = services$1.taginfo;
80198             var dispatch$1 = dispatch('change');
80199             var availableViews = [
80200                 { id: 'text', icon: '#fas-i-cursor' },
80201                 { id: 'list', icon: '#fas-th-list' }
80202             ];
80203
80204             var _tagView = (context.storage('raw-tag-editor-view') || 'list');   // 'list, 'text'
80205             var _readOnlyTags = [];
80206             // the keys in the order we want them to display
80207             var _orderedKeys = [];
80208             var _showBlank = false;
80209             var _updatePreference = true;
80210             var _expanded = false;
80211             var _pendingChange = null;
80212             var _state;
80213             var _preset;
80214             var _tags;
80215             var _entityID;
80216
80217
80218             function rawTagEditor(selection) {
80219                 var count = Object.keys(_tags).filter(function(d) { return d; }).length;
80220
80221                 var disclosure = uiDisclosure(context, 'raw_tag_editor', false)
80222                     .title(t('inspector.all_tags') + ' (' + count + ')')
80223                     .on('toggled', toggled)
80224                     .updatePreference(_updatePreference)
80225                     .content(content);
80226
80227                 // Sometimes we want to force the raw_tag_editor to be opened/closed..
80228                 // When undefined, uiDisclosure will use the user's stored preference.
80229                 if (_expanded !== undefined) {
80230                     disclosure.expanded(_expanded);
80231                 }
80232
80233                 selection.call(disclosure);
80234
80235                 function toggled(expanded) {
80236                     _expanded = expanded;
80237                     if (expanded) {
80238                         selection.node().parentNode.scrollTop += 200;
80239                     }
80240                 }
80241             }
80242
80243
80244             function content(wrap) {
80245
80246                 // remove deleted keys
80247                 _orderedKeys = _orderedKeys.filter(function(key) {
80248                     return _tags[key] !== undefined;
80249                 });
80250
80251                 // When switching to a different entity or changing the state (hover/select)
80252                 // reorder the keys alphabetically.
80253                 // We trigger this by emptying the `_orderedKeys` array, then it will be rebuilt here.
80254                 // Otherwise leave their order alone - #5857, #5927
80255                 var all = Object.keys(_tags).sort();
80256                 var missingKeys = utilArrayDifference(all, _orderedKeys);
80257                 for (var i in missingKeys) {
80258                     _orderedKeys.push(missingKeys[i]);
80259                 }
80260
80261                 // assemble row data
80262                 var rowData = _orderedKeys.map(function(key, i) {
80263                     return { index: i, key: key, value: _tags[key] };
80264                 });
80265
80266                 // append blank row last, if necessary
80267                 if (!rowData.length || _showBlank) {
80268                     _showBlank = false;
80269                     rowData.push({ index: rowData.length, key: '', value: '' });
80270                 }
80271
80272
80273                 // View Options
80274                 var options = wrap.selectAll('.raw-tag-options')
80275                     .data([0]);
80276
80277                 var optionsEnter = options.enter()
80278                     .append('div')
80279                     .attr('class', 'raw-tag-options');
80280
80281                 var optionEnter = optionsEnter.selectAll('.raw-tag-option')
80282                     .data(availableViews, function(d) { return d.id; })
80283                     .enter();
80284
80285                 optionEnter
80286                     .append('button')
80287                     .attr('class', function(d) {
80288                         return 'raw-tag-option raw-tag-option-' + d.id + (_tagView === d.id ? ' selected' : '');
80289                     })
80290                     .attr('title', function(d) { return d.id; })
80291                     .on('click', function(d) {
80292                         _tagView = d.id;
80293                         context.storage('raw-tag-editor-view', d.id);
80294
80295                         wrap.selectAll('.raw-tag-option')
80296                             .classed('selected', function(datum) { return datum === d; });
80297
80298                         wrap.selectAll('.tag-text')
80299                             .classed('hide', (d.id !== 'text'))
80300                             .each(setTextareaHeight);
80301
80302                         wrap.selectAll('.tag-list, .add-row')
80303                             .classed('hide', (d.id !== 'list'));
80304                     })
80305                     .each(function(d) {
80306                         d3_select(this)
80307                             .call(svgIcon(d.icon));
80308                     });
80309
80310
80311                 // View as Text
80312                 var textData = rowsToText(rowData);
80313                 var textarea = wrap.selectAll('.tag-text')
80314                     .data([0]);
80315
80316                 textarea = textarea.enter()
80317                     .append('textarea')
80318                     .attr('class', 'tag-text' + (_tagView !== 'text' ? ' hide' : ''))
80319                     .call(utilNoAuto)
80320                     .attr('spellcheck', 'false')
80321                     .merge(textarea);
80322
80323                 textarea
80324                     .call(utilGetSetValue, textData)
80325                     .each(setTextareaHeight)
80326                     .on('input', setTextareaHeight)
80327                     .on('blur', textChanged)
80328                     .on('change', textChanged);
80329
80330
80331                 // View as List
80332                 var list = wrap.selectAll('.tag-list')
80333                     .data([0]);
80334
80335                 list = list.enter()
80336                     .append('ul')
80337                     .attr('class', 'tag-list' + (_tagView !== 'list' ? ' hide' : ''))
80338                     .merge(list);
80339
80340
80341                 // Container for the Add button
80342                 var addRowEnter = wrap.selectAll('.add-row')
80343                     .data([0])
80344                     .enter()
80345                     .append('div')
80346                     .attr('class', 'add-row' + (_tagView !== 'list' ? ' hide' : ''));
80347
80348                 addRowEnter
80349                     .append('button')
80350                     .attr('class', 'add-tag')
80351                     .call(svgIcon('#iD-icon-plus', 'light'))
80352                     .on('click', addTag);
80353
80354                 addRowEnter
80355                     .append('div')
80356                     .attr('class', 'space-value');   // preserve space
80357
80358                 addRowEnter
80359                     .append('div')
80360                     .attr('class', 'space-buttons');  // preserve space
80361
80362
80363                 // Tag list items
80364                 var items = list.selectAll('.tag-row')
80365                     .data(rowData, function(d) { return d.key; });
80366
80367                 items.exit()
80368                     .each(unbind)
80369                     .remove();
80370
80371
80372                 // Enter
80373                 var itemsEnter = items.enter()
80374                     .append('li')
80375                     .attr('class', 'tag-row')
80376                     .classed('readonly', isReadOnly);
80377
80378                 var innerWrap = itemsEnter.append('div')
80379                     .attr('class', 'inner-wrap');
80380
80381                 innerWrap
80382                     .append('div')
80383                     .attr('class', 'key-wrap')
80384                     .append('input')
80385                     .property('type', 'text')
80386                     .attr('class', 'key')
80387                     .attr('maxlength', 255)
80388                     .call(utilNoAuto)
80389                     .on('blur', keyChange)
80390                     .on('change', keyChange);
80391
80392                 innerWrap
80393                     .append('div')
80394                     .attr('class', 'value-wrap')
80395                     .append('input')
80396                     .property('type', 'text')
80397                     .attr('class', 'value')
80398                     .attr('maxlength', 255)
80399                     .call(utilNoAuto)
80400                     .on('blur', valueChange)
80401                     .on('change', valueChange)
80402                     .on('keydown.push-more', pushMore);
80403
80404                 innerWrap
80405                     .append('button')
80406                     .attr('tabindex', -1)
80407                     .attr('class', 'form-field-button remove')
80408                     .attr('title', t('icons.remove'))
80409                     .call(svgIcon('#iD-operation-delete'));
80410
80411
80412                 // Update
80413                 items = items
80414                     .merge(itemsEnter)
80415                     .sort(function(a, b) { return a.index - b.index; });
80416
80417                 items
80418                     .each(function(d) {
80419                         var row = d3_select(this);
80420                         var key = row.select('input.key');      // propagate bound data
80421                         var value = row.select('input.value');  // propagate bound data
80422
80423                         if (_entityID && taginfo && _state !== 'hover') {
80424                             bindTypeahead(key, value);
80425                         }
80426
80427                         var isRelation = (_entityID && context.entity(_entityID).type === 'relation');
80428                         var reference;
80429
80430                         if (isRelation && d.key === 'type') {
80431                             reference = uiTagReference({ rtype: d.value });
80432                         } else {
80433                             reference = uiTagReference({ key: d.key, value: d.value });
80434                         }
80435
80436                         if (_state === 'hover') {
80437                             reference.showing(false);
80438                         }
80439
80440                         row.select('.inner-wrap')      // propagate bound data
80441                             .call(reference.button);
80442
80443                         row.call(reference.body);
80444
80445                         row.select('button.remove');   // propagate bound data
80446                     });
80447
80448                 items.selectAll('input.key')
80449                     .attr('title', function(d) { return d.key; })
80450                     .call(utilGetSetValue, function(d) { return d.key; })
80451                     .attr('readonly', function(d) {
80452                         return isReadOnly(d) || null;
80453                     });
80454
80455                 items.selectAll('input.value')
80456                     .attr('title', function(d) { return d.value; })
80457                     .call(utilGetSetValue, function(d) { return d.value; })
80458                     .attr('readonly', function(d) {
80459                         return isReadOnly(d) || null;
80460                     });
80461
80462                 items.selectAll('button.remove')
80463                     .on('mousedown', removeTag);  // 'click' fires too late - #5878
80464
80465
80466
80467                 function isReadOnly(d) {
80468                     for (var i = 0; i < _readOnlyTags.length; i++) {
80469                         if (d.key.match(_readOnlyTags[i]) !== null) {
80470                             return true;
80471                         }
80472                     }
80473                     return false;
80474                 }
80475
80476
80477                 function setTextareaHeight() {
80478                     if (_tagView !== 'text') { return; }
80479
80480                     var selection = d3_select(this);
80481                     selection.style('height', null);
80482                     selection.style('height', selection.node().scrollHeight + 5 + 'px');
80483                 }
80484
80485
80486                 function stringify(s) {
80487                     return JSON.stringify(s).slice(1, -1);   // without leading/trailing "
80488                 }
80489
80490                 function unstringify(s) {
80491                     var leading = '';
80492                     var trailing = '';
80493                     if (s.length < 1 || s.charAt(0) !== '"') {
80494                         leading = '"';
80495                     }
80496                     if (s.length < 2 || s.charAt(s.length - 1) !== '"' ||
80497                         (s.charAt(s.length - 1) === '"' && s.charAt(s.length - 2) === '\\')
80498                     ) {
80499                         trailing = '"';
80500                     }
80501                     return JSON.parse(leading + s + trailing);
80502                 }
80503
80504
80505                 function rowsToText(rows) {
80506                     var str = rows
80507                         .filter(function(row) { return row.key && row.key.trim() !== ''; })
80508                         .map(function(row) {
80509                             var val = row.value ? stringify(row.value) : '';
80510                             return stringify(row.key) + '=' + val;
80511                         })
80512                         .join('\n');
80513
80514                     return _state === 'hover' ? str : str + '\n';
80515                 }
80516
80517
80518                 function textChanged() {
80519                     var newText = this.value.trim();
80520                     var newTags = {};
80521                     newText.split('\n').forEach(function(row) {
80522                         var m = row.match(/^\s*([^=]+)=(.*)$/);
80523                         if (m !== null) {
80524                             var k = unstringify(m[1].trim());
80525                             var v = unstringify(m[2].trim());
80526                             newTags[k] = v;
80527                         }
80528                     });
80529
80530                     var tagDiff = utilTagDiff(_tags, newTags);
80531                     if (!tagDiff.length) { return; }
80532
80533                     _pendingChange  = _pendingChange || {};
80534
80535                     tagDiff.forEach(function(change) {
80536                         if (isReadOnly({ key: change.key })) { return; }
80537
80538                         if (change.type === '-') {
80539                             _pendingChange[change.key] = undefined;
80540                         } else if (change.type === '+') {
80541                             _pendingChange[change.key] = change.newVal || '';
80542                         }
80543                     });
80544
80545                     scheduleChange();
80546                 }
80547
80548
80549                 function pushMore() {
80550                     // if pressing Tab on the last value field with content, add a blank row
80551                     if (event.keyCode === 9 && !event.shiftKey &&
80552                         list.selectAll('li:last-child input.value').node() === this &&
80553                         utilGetSetValue(d3_select(this))) {
80554                         addTag();
80555                     }
80556                 }
80557
80558
80559                 function bindTypeahead(key, value) {
80560                     if (isReadOnly(key.datum())) { return; }
80561
80562                     var geometry = context.geometry(_entityID);
80563
80564                     key.call(uiCombobox(context, 'tag-key')
80565                         .fetcher(function(value, callback) {
80566                             taginfo.keys({
80567                                 debounce: true,
80568                                 geometry: geometry,
80569                                 query: value
80570                             }, function(err, data) {
80571                                 if (!err) {
80572                                     var filtered = data.filter(function(d) { return _tags[d.value] === undefined; });
80573                                     callback(sort(value, filtered));
80574                                 }
80575                             });
80576                         }));
80577
80578                     value.call(uiCombobox(context, 'tag-value')
80579                         .fetcher(function(value, callback) {
80580                             taginfo.values({
80581                                 debounce: true,
80582                                 key: utilGetSetValue(key),
80583                                 geometry: geometry,
80584                                 query: value
80585                             }, function(err, data) {
80586                                 if (!err) { callback(sort(value, data)); }
80587                             });
80588                         }));
80589
80590
80591                     function sort(value, data) {
80592                         var sameletter = [];
80593                         var other = [];
80594                         for (var i = 0; i < data.length; i++) {
80595                             if (data[i].value.substring(0, value.length) === value) {
80596                                 sameletter.push(data[i]);
80597                             } else {
80598                                 other.push(data[i]);
80599                             }
80600                         }
80601                         return sameletter.concat(other);
80602                     }
80603                 }
80604
80605
80606                 function unbind() {
80607                     var row = d3_select(this);
80608
80609                     row.selectAll('input.key')
80610                         .call(uiCombobox.off);
80611
80612                     row.selectAll('input.value')
80613                         .call(uiCombobox.off);
80614                 }
80615
80616
80617                 function keyChange(d) {
80618                     var kOld = d.key;
80619                     var kNew = this.value.trim();
80620                     var row = this.parentNode.parentNode;
80621                     var inputVal = d3_select(row).selectAll('input.value');
80622                     var vNew = utilGetSetValue(inputVal);
80623
80624                     // allow no change if the key should be readonly
80625                     if (isReadOnly({ key: kNew })) {
80626                         this.value = kOld;
80627                         return;
80628                     }
80629
80630                     // switch focus if key is already in use
80631                     if (kNew && kNew !== kOld) {
80632                         if (_tags[kNew] !== undefined) {      // new key is already in use
80633                             this.value = kOld;                // reset the key
80634                             list.selectAll('input.value')
80635                                 .each(function(d) {
80636                                     if (d.key === kNew) {     // send focus to that other value combo instead
80637                                         var input = d3_select(this).node();
80638                                         input.focus();
80639                                         input.select();
80640                                     }
80641                                 });
80642                             return;
80643                         }
80644                     }
80645
80646                     _pendingChange  = _pendingChange || {};
80647
80648                     // exit if we are currently about to delete this row anyway - #6366
80649                     if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) { return; }
80650
80651                     if (kOld) {
80652                         _pendingChange[kOld] = undefined;
80653                     }
80654
80655                     _pendingChange[kNew] = vNew;
80656
80657                     // update the ordered key index so this row doesn't change position
80658                     var existingKeyIndex = _orderedKeys.indexOf(kOld);
80659                     if (existingKeyIndex !== -1) { _orderedKeys[existingKeyIndex] = kNew; }
80660
80661                     d.key = kNew;    // update datum to avoid exit/enter on tag update
80662                     d.value = vNew;
80663
80664                     this.value = kNew;
80665                     utilGetSetValue(inputVal, vNew);
80666                     scheduleChange();
80667                 }
80668
80669
80670                 function valueChange(d) {
80671                     if (isReadOnly(d)) { return; }
80672
80673                     _pendingChange  = _pendingChange || {};
80674
80675                     // exit if we are currently about to delete this row anyway - #6366
80676                     if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) { return; }
80677
80678                     _pendingChange[d.key] = this.value;
80679                     scheduleChange();
80680                 }
80681
80682
80683                 function removeTag(d) {
80684                     if (isReadOnly(d)) { return; }
80685
80686                     if (d.key === '') {    // removing the blank row
80687                         _showBlank = false;
80688                         content(wrap);
80689
80690                     } else {
80691                         // remove the key from the ordered key index
80692                         _orderedKeys = _orderedKeys.filter(function(key) { return key !== d.key; });
80693
80694                         _pendingChange  = _pendingChange || {};
80695                         _pendingChange[d.key] = undefined;
80696                         scheduleChange();
80697                     }
80698                 }
80699
80700
80701                 function addTag() {
80702                     // Delay render in case this click is blurring an edited combo.
80703                     // Without the setTimeout, the `content` render would wipe out the pending tag change.
80704                     window.setTimeout(function() {
80705                         _showBlank = true;
80706                         content(wrap);
80707                         list.selectAll('li:last-child input.key').node().focus();
80708                     }, 20);
80709                 }
80710
80711
80712                 function scheduleChange() {
80713                     // Delay change in case this change is blurring an edited combo. - #5878
80714                     window.setTimeout(function() {
80715                         dispatch$1.call('change', this, _pendingChange);
80716                         _pendingChange = null;
80717                     }, 10);
80718                 }
80719
80720             }
80721
80722
80723             rawTagEditor.state = function(val) {
80724                 if (!arguments.length) { return _state; }
80725                 if (_state !== val) {
80726                     _orderedKeys = [];
80727                     _state = val;
80728                 }
80729                 return rawTagEditor;
80730             };
80731
80732
80733             rawTagEditor.preset = function(val) {
80734                 if (!arguments.length) { return _preset; }
80735                 _preset = val;
80736                 if (_preset.isFallback()) {
80737                     _expanded = true;
80738                     _updatePreference = false;
80739                 } else {
80740                     _expanded = undefined;
80741                     _updatePreference = true;
80742                 }
80743                 return rawTagEditor;
80744             };
80745
80746
80747             rawTagEditor.tags = function(val) {
80748                 if (!arguments.length) { return _tags; }
80749                 _tags = val;
80750                 return rawTagEditor;
80751             };
80752
80753
80754             rawTagEditor.entityID = function(val) {
80755                 if (!arguments.length) { return _entityID; }
80756                 if (_entityID !== val) {
80757                     _orderedKeys = [];
80758                     _entityID = val;
80759                 }
80760                 return rawTagEditor;
80761             };
80762
80763
80764             rawTagEditor.expanded = function(val) {
80765                 if (!arguments.length) { return _expanded; }
80766                 _expanded = val;
80767                 _updatePreference = false;
80768                 return rawTagEditor;
80769             };
80770
80771
80772             // pass an array of regular expressions to test against the tag key
80773             rawTagEditor.readOnlyTags = function(val) {
80774                 if (!arguments.length) { return _readOnlyTags; }
80775                 _readOnlyTags = val;
80776                 return rawTagEditor;
80777             };
80778
80779
80780             return utilRebind(rawTagEditor, dispatch$1, 'on');
80781         }
80782
80783         function uiDataEditor(context) {
80784             var dataHeader = uiDataHeader();
80785             var quickLinks = uiQuickLinks();
80786             var rawTagEditor = uiRawTagEditor(context);
80787             var _datum;
80788
80789
80790             function dataEditor(selection) {
80791                 // quick links
80792                 var choices = [{
80793                     id: 'zoom_to',
80794                     label: 'inspector.zoom_to.title',
80795                     tooltip: function() {
80796                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_data'), t('inspector.zoom_to.key'));
80797                     },
80798                     click: function zoomTo() {
80799                         context.mode().zoomToSelected();
80800                     }
80801                 }];
80802
80803
80804                 var header = selection.selectAll('.header')
80805                     .data([0]);
80806
80807                 var headerEnter = header.enter()
80808                     .append('div')
80809                     .attr('class', 'header fillL');
80810
80811                 headerEnter
80812                     .append('button')
80813                     .attr('class', 'fr data-editor-close')
80814                     .on('click', function() {
80815                         context.enter(modeBrowse(context));
80816                     })
80817                     .call(svgIcon('#iD-icon-close'));
80818
80819                 headerEnter
80820                     .append('h3')
80821                     .text(t('map_data.title'));
80822
80823
80824                 var body = selection.selectAll('.body')
80825                     .data([0]);
80826
80827                 body = body.enter()
80828                     .append('div')
80829                     .attr('class', 'body')
80830                     .merge(body);
80831
80832                 var editor = body.selectAll('.data-editor')
80833                     .data([0]);
80834
80835                 // enter/update
80836                 editor.enter()
80837                     .append('div')
80838                     .attr('class', 'modal-section data-editor')
80839                     .merge(editor)
80840                     .call(dataHeader.datum(_datum))
80841                     .call(quickLinks.choices(choices));
80842
80843                 var rte = body.selectAll('.raw-tag-editor')
80844                     .data([0]);
80845
80846                 // enter/update
80847                 rte.enter()
80848                     .append('div')
80849                     .attr('class', 'raw-tag-editor inspector-inner data-editor')
80850                     .merge(rte)
80851                     .call(rawTagEditor
80852                         .expanded(true)
80853                         .readOnlyTags([/./])
80854                         .tags((_datum && _datum.properties) || {})
80855                         .state('hover')
80856                     )
80857                     .selectAll('textarea.tag-text')
80858                     .attr('readonly', true)
80859                     .classed('readonly', true);
80860             }
80861
80862
80863             dataEditor.datum = function(val) {
80864                 if (!arguments.length) { return _datum; }
80865                 _datum = val;
80866                 return this;
80867             };
80868
80869
80870             return dataEditor;
80871         }
80872
80873         function modeSelectData(context, selectedDatum) {
80874             var mode = {
80875                 id: 'select-data',
80876                 button: 'browse'
80877             };
80878
80879             var keybinding = utilKeybinding('select-data');
80880             var dataEditor = uiDataEditor(context);
80881
80882             var behaviors = [
80883                 behaviorBreathe(),
80884                 behaviorHover(context),
80885                 behaviorSelect(context),
80886                 behaviorLasso(context),
80887                 modeDragNode(context).behavior,
80888                 modeDragNote(context).behavior
80889             ];
80890
80891
80892             // class the data as selected, or return to browse mode if the data is gone
80893             function selectData(drawn) {
80894                 var selection = context.surface().selectAll('.layer-mapdata .data' + selectedDatum.__featurehash__);
80895
80896                 if (selection.empty()) {
80897                     // Return to browse mode if selected DOM elements have
80898                     // disappeared because the user moved them out of view..
80899                     var source = event && event.type === 'zoom' && event.sourceEvent;
80900                     if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
80901                         context.enter(modeBrowse(context));
80902                     }
80903                 } else {
80904                     selection.classed('selected', true);
80905                 }
80906             }
80907
80908
80909             function esc() {
80910                 if (d3_select('.combobox').size()) { return; }
80911                 context.enter(modeBrowse(context));
80912             }
80913
80914
80915             mode.zoomToSelected = function() {
80916                 var extent = geoExtent(d3_geoBounds(selectedDatum));
80917                 context.map().centerZoomEase(extent.center(), context.map().trimmedExtentZoom(extent));
80918             };
80919
80920
80921             mode.enter = function() {
80922                 behaviors.forEach(context.install);
80923
80924                 keybinding
80925                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
80926                     .on('⎋', esc, true);
80927
80928                 d3_select(document)
80929                     .call(keybinding);
80930
80931                 selectData();
80932
80933                 var sidebar = context.ui().sidebar;
80934                 sidebar.show(dataEditor.datum(selectedDatum));
80935
80936                 // expand the sidebar, avoid obscuring the data if needed
80937                 var extent = geoExtent(d3_geoBounds(selectedDatum));
80938                 sidebar.expand(sidebar.intersects(extent));
80939
80940                 context.map()
80941                     .on('drawn.select-data', selectData);
80942             };
80943
80944
80945             mode.exit = function() {
80946                 behaviors.forEach(context.uninstall);
80947
80948                 d3_select(document)
80949                     .call(keybinding.unbind);
80950
80951                 context.surface()
80952                     .selectAll('.layer-mapdata .selected')
80953                     .classed('selected hover', false);
80954
80955                 context.map()
80956                     .on('drawn.select-data', null);
80957
80958                 context.ui().sidebar
80959                     .hide();
80960             };
80961
80962
80963             return mode;
80964         }
80965
80966         function uiImproveOsmComments() {
80967             var _error;
80968
80969
80970             function errorComments(selection) {
80971                 // make the div immediately so it appears above the buttons
80972                 var comments = selection.selectAll('.comments-container')
80973                     .data([0]);
80974
80975                 comments = comments.enter()
80976                     .append('div')
80977                     .attr('class', 'comments-container')
80978                     .merge(comments);
80979
80980                 // must retrieve comments from API before they can be displayed
80981                 services$1.improveOSM.getComments(_error, function(err, d) {
80982                     if (!d.comments) { return; } // nothing to do here
80983
80984                     var commentEnter = comments.selectAll('.comment')
80985                         .data(d.comments)
80986                         .enter()
80987                         .append('div')
80988                         .attr('class', 'comment');
80989
80990                     commentEnter
80991                         .append('div')
80992                         .attr('class', 'comment-avatar')
80993                         .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
80994
80995                     var mainEnter = commentEnter
80996                         .append('div')
80997                         .attr('class', 'comment-main');
80998
80999                     var metadataEnter = mainEnter
81000                         .append('div')
81001                         .attr('class', 'comment-metadata');
81002
81003                     metadataEnter
81004                         .append('div')
81005                         .attr('class', 'comment-author')
81006                         .each(function(d) {
81007                             var selection = d3_select(this);
81008                             var osm = services$1.osm;
81009                             if (osm && d.username) {
81010                                 selection = selection
81011                                     .append('a')
81012                                     .attr('class', 'comment-author-link')
81013                                     .attr('href', osm.userURL(d.username))
81014                                     .attr('tabindex', -1)
81015                                     .attr('target', '_blank');
81016                             }
81017                             selection
81018                                 .text(function(d) { return d.username; });
81019                         });
81020
81021                     metadataEnter
81022                         .append('div')
81023                         .attr('class', 'comment-date')
81024                         .text(function(d) {
81025                             return t('note.status.commented', { when: localeDateString(d.timestamp) });
81026                         });
81027
81028                     mainEnter
81029                         .append('div')
81030                         .attr('class', 'comment-text')
81031                         .append('p')
81032                         .text(function(d) { return d.text; });
81033                 });
81034             }
81035
81036             function localeDateString(s) {
81037                 if (!s) { return null; }
81038                 var detected = utilDetect();
81039                 var options = { day: 'numeric', month: 'short', year: 'numeric' };
81040                 var d = new Date(s * 1000); // timestamp is served in seconds, date takes ms
81041                 if (isNaN(d.getTime())) { return null; }
81042                 return d.toLocaleDateString(detected.locale, options);
81043             }
81044
81045             errorComments.error = function(val) {
81046                 if (!arguments.length) { return _error; }
81047                 _error = val;
81048                 return errorComments;
81049             };
81050
81051             return errorComments;
81052         }
81053
81054         function uiImproveOsmDetails(context) {
81055             var _error;
81056
81057
81058             function errorDetail(d) {
81059                 var unknown = t('inspector.unknown');
81060
81061                 if (!d) { return unknown; }
81062
81063                 if (d.desc) { return d.desc; }
81064
81065                 var errorType = d.error_key;
81066                 var et = en.QA.improveOSM.error_types[errorType];
81067
81068                 var detail;
81069                 if (et && et.description) {
81070                     detail = t('QA.improveOSM.error_types.' + errorType + '.description', d.replacements);
81071                 } else {
81072                     detail = unknown;
81073                 }
81074
81075                 return detail;
81076             }
81077
81078
81079             function improveOsmDetails(selection) {
81080                 var details = selection.selectAll('.error-details')
81081                     .data(
81082                         (_error ? [_error] : []),
81083                         function(d) { return d.id + '-' + (d.status || 0); }
81084                     );
81085
81086                 details.exit()
81087                     .remove();
81088
81089                 var detailsEnter = details.enter()
81090                     .append('div')
81091                     .attr('class', 'error-details error-details-container');
81092
81093
81094                 // description
81095                 var descriptionEnter = detailsEnter
81096                     .append('div')
81097                     .attr('class', 'error-details-description');
81098
81099                 descriptionEnter
81100                     .append('h4')
81101                     .text(function() { return t('QA.keepRight.detail_description'); });
81102
81103                 descriptionEnter
81104                     .append('div')
81105                     .attr('class', 'error-details-description-text')
81106                     .html(errorDetail);
81107
81108                 // If there are entity links in the error message..
81109                 var relatedEntities = [];
81110                 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
81111                     .each(function() {
81112                         var link = d3_select(this);
81113                         var isObjectLink = link.classed('error_object_link');
81114                         var entityID = isObjectLink ?
81115                             (utilEntityRoot(_error.object_type) + _error.object_id)
81116                             : this.textContent;
81117                         var entity = context.hasEntity(entityID);
81118
81119                         relatedEntities.push(entityID);
81120
81121                         // Add click handler
81122                         link
81123                             .on('mouseover', function() {
81124                                 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
81125                                     .classed('hover', true);
81126                             })
81127                             .on('mouseout', function() {
81128                                 context.surface().selectAll('.hover')
81129                                     .classed('hover', false);
81130                             })
81131                             .on('click', function() {
81132                                 event.preventDefault();
81133                                 var osmlayer = context.layers().layer('osm');
81134                                 if (!osmlayer.enabled()) {
81135                                     osmlayer.enabled(true);
81136                                 }
81137
81138                                 context.map().centerZoom(_error.loc, 20);
81139
81140                                 if (entity) {
81141                                     context.enter(modeSelect(context, [entityID]));
81142                                 } else {
81143                                     context.loadEntity(entityID, function() {
81144                                         context.enter(modeSelect(context, [entityID]));
81145                                     });
81146                                 }
81147                             });
81148
81149                         // Replace with friendly name if possible
81150                         // (The entity may not yet be loaded into the graph)
81151                         if (entity) {
81152                             var name = utilDisplayName(entity);  // try to use common name
81153
81154                             if (!name && !isObjectLink) {
81155                                 var preset = context.presets().match(entity, context.graph());
81156                                 name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
81157                             }
81158
81159                             if (name) {
81160                                 this.innerText = name;
81161                             }
81162                         }
81163                     });
81164
81165                 // Don't hide entities related to this error - #5880
81166                 context.features().forceVisible(relatedEntities);
81167             }
81168
81169
81170             improveOsmDetails.error = function(val) {
81171                 if (!arguments.length) { return _error; }
81172                 _error = val;
81173                 return improveOsmDetails;
81174             };
81175
81176
81177             return improveOsmDetails;
81178         }
81179
81180         function uiImproveOsmHeader() {
81181             var _error;
81182
81183
81184             function errorTitle(d) {
81185                 var unknown = t('inspector.unknown');
81186
81187                 if (!d) { return unknown; }
81188                 var errorType = d.error_key;
81189                 var et = en.QA.improveOSM.error_types[errorType];
81190
81191                 if (et && et.title) {
81192                     return t('QA.improveOSM.error_types.' + errorType + '.title');
81193                 } else {
81194                     return unknown;
81195                 }
81196             }
81197
81198
81199             function improveOsmHeader(selection) {
81200                 var header = selection.selectAll('.error-header')
81201                     .data(
81202                         (_error ? [_error] : []),
81203                         function(d) { return d.id + '-' + (d.status || 0); }
81204                     );
81205
81206                 header.exit()
81207                     .remove();
81208
81209                 var headerEnter = header.enter()
81210                     .append('div')
81211                     .attr('class', 'error-header');
81212
81213                 var iconEnter = headerEnter
81214                     .append('div')
81215                     .attr('class', 'error-header-icon')
81216                     .classed('new', function(d) { return d.id < 0; });
81217
81218                 var svgEnter = iconEnter
81219                     .append('svg')
81220                     .attr('width', '20px')
81221                     .attr('height', '30px')
81222                     .attr('viewbox', '0 0 20 30')
81223                     .attr('class', function(d) {
81224                         return [
81225                             'preset-icon-28',
81226                             'qa_error',
81227                             d.service,
81228                             'error_id-' + d.id,
81229                             'error_type-' + d.error_type,
81230                             'category-' + d.category
81231                         ].join(' ');
81232                     });
81233
81234                 svgEnter
81235                     .append('polygon')
81236                     .attr('fill', 'currentColor')
81237                     .attr('class', 'qa_error-fill')
81238                     .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');
81239
81240                 svgEnter
81241                     .append('use')
81242                     .attr('class', 'icon-annotation')
81243                     .attr('width', '11px')
81244                     .attr('height', '11px')
81245                     .attr('transform', 'translate(4.5, 7)')
81246                     .attr('xlink:href', function(d) {
81247                         var picon = d.icon;
81248
81249                         if (!picon) {
81250                             return '';
81251                         } else {
81252                             var isMaki = /^maki-/.test(picon);
81253                             return '#' + picon + (isMaki ? '-11' : '');
81254                         }
81255                     });
81256
81257                 headerEnter
81258                     .append('div')
81259                     .attr('class', 'error-header-label')
81260                     .text(errorTitle);
81261             }
81262
81263
81264             improveOsmHeader.error = function(val) {
81265                 if (!arguments.length) { return _error; }
81266                 _error = val;
81267                 return improveOsmHeader;
81268             };
81269
81270
81271             return improveOsmHeader;
81272         }
81273
81274         function uiImproveOsmEditor(context) {
81275             var dispatch$1 = dispatch('change');
81276             var errorDetails = uiImproveOsmDetails(context);
81277             var errorComments = uiImproveOsmComments();
81278             var errorHeader = uiImproveOsmHeader();
81279             var quickLinks = uiQuickLinks();
81280
81281             var _error;
81282
81283
81284             function improveOsmEditor(selection) {
81285                 // quick links
81286                 var choices = [{
81287                     id: 'zoom_to',
81288                     label: 'inspector.zoom_to.title',
81289                     tooltip: function() {
81290                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
81291                     },
81292                     click: function zoomTo() {
81293                         context.mode().zoomToSelected();
81294                     }
81295                 }];
81296
81297
81298                 var header = selection.selectAll('.header')
81299                     .data([0]);
81300
81301                 var headerEnter = header.enter()
81302                     .append('div')
81303                     .attr('class', 'header fillL');
81304
81305                 headerEnter
81306                     .append('button')
81307                     .attr('class', 'fr error-editor-close')
81308                     .on('click', function() {
81309                         context.enter(modeBrowse(context));
81310                     })
81311                     .call(svgIcon('#iD-icon-close'));
81312
81313                 headerEnter
81314                     .append('h3')
81315                     .text(t('QA.improveOSM.title'));
81316
81317
81318                 var body = selection.selectAll('.body')
81319                     .data([0]);
81320
81321                 body = body.enter()
81322                     .append('div')
81323                     .attr('class', 'body')
81324                     .merge(body);
81325
81326                 var editor = body.selectAll('.error-editor')
81327                     .data([0]);
81328
81329                 editor.enter()
81330                     .append('div')
81331                     .attr('class', 'modal-section error-editor')
81332                     .merge(editor)
81333                     .call(errorHeader.error(_error))
81334                     .call(quickLinks.choices(choices))
81335                     .call(errorDetails.error(_error))
81336                     .call(errorComments.error(_error))
81337                     .call(improveOsmSaveSection);
81338             }
81339
81340             function improveOsmSaveSection(selection) {
81341                 var isSelected = (_error && _error.id === context.selectedErrorID());
81342                 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
81343                 var saveSection = selection.selectAll('.error-save')
81344                     .data(
81345                         (isShown ? [_error] : []),
81346                         function(d) { return d.id + '-' + (d.status || 0); }
81347                     );
81348
81349                 // exit
81350                 saveSection.exit()
81351                     .remove();
81352
81353                 // enter
81354                 var saveSectionEnter = saveSection.enter()
81355                     .append('div')
81356                     .attr('class', 'error-save save-section cf');
81357
81358                 saveSectionEnter
81359                     .append('h4')
81360                     .attr('class', '.error-save-header')
81361                     .text(t('note.newComment'));
81362
81363                 saveSectionEnter
81364                     .append('textarea')
81365                     .attr('class', 'new-comment-input')
81366                     .attr('placeholder', t('QA.keepRight.comment_placeholder'))
81367                     .attr('maxlength', 1000)
81368                     .property('value', function(d) { return d.newComment; })
81369                     .call(utilNoAuto)
81370                     .on('input', changeInput)
81371                     .on('blur', changeInput);
81372
81373                 // update
81374                 saveSection = saveSectionEnter
81375                     .merge(saveSection)
81376                     .call(errorSaveButtons);
81377
81378                 function changeInput() {
81379                     var input = d3_select(this);
81380                     var val = input.property('value').trim();
81381
81382                     if (val === '') {
81383                         val = undefined;
81384                     }
81385
81386                     // store the unsaved comment with the error itself
81387                     _error = _error.update({ newComment: val });
81388
81389                     var errorService = services$1.improveOSM;
81390                     if (errorService) {
81391                         errorService.replaceError(_error);
81392                     }
81393
81394                     saveSection
81395                         .call(errorSaveButtons);
81396                 }
81397             }
81398
81399             function errorSaveButtons(selection) {
81400                 var isSelected = (_error && _error.id === context.selectedErrorID());
81401                 var buttonSection = selection.selectAll('.buttons')
81402                     .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
81403
81404                 // exit
81405                 buttonSection.exit()
81406                     .remove();
81407
81408                 // enter
81409                 var buttonEnter = buttonSection.enter()
81410                     .append('div')
81411                     .attr('class', 'buttons');
81412
81413                 buttonEnter
81414                     .append('button')
81415                     .attr('class', 'button comment-button action')
81416                     .text(t('QA.keepRight.save_comment'));
81417
81418                 buttonEnter
81419                     .append('button')
81420                     .attr('class', 'button close-button action');
81421
81422                 buttonEnter
81423                     .append('button')
81424                     .attr('class', 'button ignore-button action');
81425
81426
81427                 // update
81428                 buttonSection = buttonSection
81429                     .merge(buttonEnter);
81430
81431                 buttonSection.select('.comment-button')
81432                     .attr('disabled', function(d) {
81433                         return d.newComment === undefined ? true : null;
81434                     })
81435                     .on('click.comment', function(d) {
81436                         this.blur();    // avoid keeping focus on the button - #4641
81437                         var errorService = services$1.improveOSM;
81438                         if (errorService) {
81439                             errorService.postUpdate(d, function(err, error) {
81440                                 dispatch$1.call('change', error);
81441                             });
81442                         }
81443                     });
81444
81445                 buttonSection.select('.close-button')
81446                     .text(function(d) {
81447                         var andComment = (d.newComment !== undefined ? '_comment' : '');
81448                         return t('QA.keepRight.close' + andComment);
81449                     })
81450                     .on('click.close', function(d) {
81451                         this.blur();    // avoid keeping focus on the button - #4641
81452                         var errorService = services$1.improveOSM;
81453                         if (errorService) {
81454                             d.newStatus = 'SOLVED';
81455                             errorService.postUpdate(d, function(err, error) {
81456                                 dispatch$1.call('change', error);
81457                             });
81458                         }
81459                     });
81460
81461                 buttonSection.select('.ignore-button')
81462                     .text(function(d) {
81463                         var andComment = (d.newComment !== undefined ? '_comment' : '');
81464                         return t('QA.keepRight.ignore' + andComment);
81465                     })
81466                     .on('click.ignore', function(d) {
81467                         this.blur();    // avoid keeping focus on the button - #4641
81468                         var errorService = services$1.improveOSM;
81469                         if (errorService) {
81470                             d.newStatus = 'INVALID';
81471                             errorService.postUpdate(d, function(err, error) {
81472                                 dispatch$1.call('change', error);
81473                             });
81474                         }
81475                     });
81476             }
81477
81478             improveOsmEditor.error = function(val) {
81479                 if (!arguments.length) { return _error; }
81480                 _error = val;
81481                 return improveOsmEditor;
81482             };
81483
81484
81485             return utilRebind(improveOsmEditor, dispatch$1, 'on');
81486         }
81487
81488         function uiKeepRightDetails(context) {
81489             var _error;
81490
81491
81492             function errorDetail(d) {
81493                 var unknown = t('inspector.unknown');
81494
81495                 if (!d) { return unknown; }
81496                 var errorType = d.error_type;
81497                 var parentErrorType = d.parent_error_type;
81498
81499                 var et = en.QA.keepRight.errorTypes[errorType];
81500                 var pt = en.QA.keepRight.errorTypes[parentErrorType];
81501
81502                 var detail;
81503                 if (et && et.description) {
81504                     detail = t('QA.keepRight.errorTypes.' + errorType + '.description', d.replacements);
81505                 } else if (pt && pt.description) {
81506                     detail = t('QA.keepRight.errorTypes.' + parentErrorType + '.description', d.replacements);
81507                 } else {
81508                     detail = unknown;
81509                 }
81510
81511                 return detail;
81512             }
81513
81514
81515             function keepRightDetails(selection) {
81516                 var details = selection.selectAll('.error-details')
81517                     .data(
81518                         (_error ? [_error] : []),
81519                         function(d) { return d.id + '-' + (d.status || 0); }
81520                     );
81521
81522                 details.exit()
81523                     .remove();
81524
81525                 var detailsEnter = details.enter()
81526                     .append('div')
81527                     .attr('class', 'error-details error-details-container');
81528
81529
81530                 // description
81531                 var descriptionEnter = detailsEnter
81532                     .append('div')
81533                     .attr('class', 'error-details-description');
81534
81535                 descriptionEnter
81536                     .append('h4')
81537                     .text(function() { return t('QA.keepRight.detail_description'); });
81538
81539                 descriptionEnter
81540                     .append('div')
81541                     .attr('class', 'error-details-description-text')
81542                     .html(errorDetail);
81543
81544                 // If there are entity links in the error message..
81545                 var relatedEntities = [];
81546                 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
81547                     .each(function() {
81548                         var link = d3_select(this);
81549                         var isObjectLink = link.classed('error_object_link');
81550                         var entityID = isObjectLink ?
81551                             (utilEntityRoot(_error.object_type) + _error.object_id)
81552                             : this.textContent;
81553                         var entity = context.hasEntity(entityID);
81554
81555                         relatedEntities.push(entityID);
81556
81557                         // Add click handler
81558                         link
81559                             .on('mouseover', function() {
81560                                 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
81561                                     .classed('hover', true);
81562                             })
81563                             .on('mouseout', function() {
81564                                 context.surface().selectAll('.hover')
81565                                     .classed('hover', false);
81566                             })
81567                             .on('click', function() {
81568                                 event.preventDefault();
81569                                 var osmlayer = context.layers().layer('osm');
81570                                 if (!osmlayer.enabled()) {
81571                                     osmlayer.enabled(true);
81572                                 }
81573
81574                                 context.map().centerZoomEase(_error.loc, 20);
81575
81576                                 if (entity) {
81577                                     context.enter(modeSelect(context, [entityID]));
81578                                 } else {
81579                                     context.loadEntity(entityID, function() {
81580                                         context.enter(modeSelect(context, [entityID]));
81581                                     });
81582                                 }
81583                             });
81584
81585                         // Replace with friendly name if possible
81586                         // (The entity may not yet be loaded into the graph)
81587                         if (entity) {
81588                             var name = utilDisplayName(entity);  // try to use common name
81589
81590                             if (!name && !isObjectLink) {
81591                                 var preset = context.presets().match(entity, context.graph());
81592                                 name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
81593                             }
81594
81595                             if (name) {
81596                                 this.innerText = name;
81597                             }
81598                         }
81599                     });
81600
81601                 // Don't hide entities related to this error - #5880
81602                 context.features().forceVisible(relatedEntities);
81603             }
81604
81605
81606             keepRightDetails.error = function(val) {
81607                 if (!arguments.length) { return _error; }
81608                 _error = val;
81609                 return keepRightDetails;
81610             };
81611
81612
81613             return keepRightDetails;
81614         }
81615
81616         function uiKeepRightHeader() {
81617             var _error;
81618
81619
81620             function errorTitle(d) {
81621                 var unknown = t('inspector.unknown');
81622
81623                 if (!d) { return unknown; }
81624                 var errorType = d.error_type;
81625                 var parentErrorType = d.parent_error_type;
81626
81627                 var et = en.QA.keepRight.errorTypes[errorType];
81628                 var pt = en.QA.keepRight.errorTypes[parentErrorType];
81629
81630                 if (et && et.title) {
81631                     return t('QA.keepRight.errorTypes.' + errorType + '.title');
81632                 } else if (pt && pt.title) {
81633                     return t('QA.keepRight.errorTypes.' + parentErrorType + '.title');
81634                 } else {
81635                     return unknown;
81636                 }
81637             }
81638
81639
81640             function keepRightHeader(selection) {
81641                 var header = selection.selectAll('.error-header')
81642                     .data(
81643                         (_error ? [_error] : []),
81644                         function(d) { return d.id + '-' + (d.status || 0); }
81645                     );
81646
81647                 header.exit()
81648                     .remove();
81649
81650                 var headerEnter = header.enter()
81651                     .append('div')
81652                     .attr('class', 'error-header');
81653
81654                 var iconEnter = headerEnter
81655                     .append('div')
81656                     .attr('class', 'error-header-icon')
81657                     .classed('new', function(d) { return d.id < 0; });
81658
81659                 iconEnter
81660                     .append('div')
81661                     .attr('class', function(d) {
81662                         return 'preset-icon-28 qa_error ' + d.service + ' error_id-' + d.id + ' error_type-' + d.parent_error_type;
81663                     })
81664                     .call(svgIcon('#iD-icon-bolt', 'qa_error-fill'));
81665
81666                 headerEnter
81667                     .append('div')
81668                     .attr('class', 'error-header-label')
81669                     .text(errorTitle);
81670             }
81671
81672
81673             keepRightHeader.error = function(val) {
81674                 if (!arguments.length) { return _error; }
81675                 _error = val;
81676                 return keepRightHeader;
81677             };
81678
81679
81680             return keepRightHeader;
81681         }
81682
81683         function uiViewOnKeepRight() {
81684             var _error;   // a keepright error
81685
81686
81687             function viewOnKeepRight(selection) {
81688                 var url;
81689                 if (services$1.keepRight && (_error instanceof qaError)) {
81690                     url = services$1.keepRight.errorURL(_error);
81691                 }
81692
81693                 var link = selection.selectAll('.view-on-keepRight')
81694                     .data(url ? [url] : []);
81695
81696                 // exit
81697                 link.exit()
81698                     .remove();
81699
81700                 // enter
81701                 var linkEnter = link.enter()
81702                     .append('a')
81703                     .attr('class', 'view-on-keepRight')
81704                     .attr('target', '_blank')
81705                     .attr('href', function(d) { return d; })
81706                     .call(svgIcon('#iD-icon-out-link', 'inline'));
81707
81708                 linkEnter
81709                     .append('span')
81710                     .text(t('inspector.view_on_keepRight'));
81711             }
81712
81713
81714             viewOnKeepRight.what = function(val) {
81715                 if (!arguments.length) { return _error; }
81716                 _error = val;
81717                 return viewOnKeepRight;
81718             };
81719
81720             return viewOnKeepRight;
81721         }
81722
81723         function uiKeepRightEditor(context) {
81724             var dispatch$1 = dispatch('change');
81725             var keepRightDetails = uiKeepRightDetails(context);
81726             var keepRightHeader = uiKeepRightHeader();
81727             var quickLinks = uiQuickLinks();
81728
81729             var _error;
81730
81731
81732             function keepRightEditor(selection) {
81733                 // quick links
81734                 var choices = [{
81735                     id: 'zoom_to',
81736                     label: 'inspector.zoom_to.title',
81737                     tooltip: function() {
81738                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
81739                     },
81740                     click: function zoomTo() {
81741                         context.mode().zoomToSelected();
81742                     }
81743                 }];
81744
81745
81746                 var header = selection.selectAll('.header')
81747                     .data([0]);
81748
81749                 var headerEnter = header.enter()
81750                     .append('div')
81751                     .attr('class', 'header fillL');
81752
81753                 headerEnter
81754                     .append('button')
81755                     .attr('class', 'fr error-editor-close')
81756                     .on('click', function() {
81757                         context.enter(modeBrowse(context));
81758                     })
81759                     .call(svgIcon('#iD-icon-close'));
81760
81761                 headerEnter
81762                     .append('h3')
81763                     .text(t('QA.keepRight.title'));
81764
81765
81766                 var body = selection.selectAll('.body')
81767                     .data([0]);
81768
81769                 body = body.enter()
81770                     .append('div')
81771                     .attr('class', 'body')
81772                     .merge(body);
81773
81774                 var editor = body.selectAll('.error-editor')
81775                     .data([0]);
81776
81777                 editor.enter()
81778                     .append('div')
81779                     .attr('class', 'modal-section error-editor')
81780                     .merge(editor)
81781                     .call(keepRightHeader.error(_error))
81782                     .call(quickLinks.choices(choices))
81783                     .call(keepRightDetails.error(_error))
81784                     .call(keepRightSaveSection);
81785
81786
81787                 var footer = selection.selectAll('.footer')
81788                     .data([0]);
81789
81790                 footer.enter()
81791                     .append('div')
81792                     .attr('class', 'footer')
81793                     .merge(footer)
81794                     .call(uiViewOnKeepRight().what(_error));
81795             }
81796
81797
81798             function keepRightSaveSection(selection) {
81799                 var isSelected = (_error && _error.id === context.selectedErrorID());
81800                 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
81801                 var saveSection = selection.selectAll('.error-save')
81802                     .data(
81803                         (isShown ? [_error] : []),
81804                         function(d) { return d.id + '-' + (d.status || 0); }
81805                     );
81806
81807                 // exit
81808                 saveSection.exit()
81809                     .remove();
81810
81811                 // enter
81812                 var saveSectionEnter = saveSection.enter()
81813                     .append('div')
81814                     .attr('class', 'error-save save-section cf');
81815
81816                 saveSectionEnter
81817                     .append('h4')
81818                     .attr('class', '.error-save-header')
81819                     .text(t('QA.keepRight.comment'));
81820
81821                 saveSectionEnter
81822                     .append('textarea')
81823                     .attr('class', 'new-comment-input')
81824                     .attr('placeholder', t('QA.keepRight.comment_placeholder'))
81825                     .attr('maxlength', 1000)
81826                     .property('value', function(d) { return d.newComment || d.comment; })
81827                     .call(utilNoAuto)
81828                     .on('input', changeInput)
81829                     .on('blur', changeInput);
81830
81831                 // update
81832                 saveSection = saveSectionEnter
81833                     .merge(saveSection)
81834                     .call(keepRightSaveButtons);
81835
81836
81837                 function changeInput() {
81838                     var input = d3_select(this);
81839                     var val = input.property('value').trim();
81840
81841                     if (val === _error.comment) {
81842                         val = undefined;
81843                     }
81844
81845                     // store the unsaved comment with the error itself
81846                     _error = _error.update({ newComment: val });
81847
81848                     var keepRight = services$1.keepRight;
81849                     if (keepRight) {
81850                         keepRight.replaceError(_error);  // update keepright cache
81851                     }
81852
81853                     saveSection
81854                         .call(keepRightSaveButtons);
81855                 }
81856             }
81857
81858
81859             function keepRightSaveButtons(selection) {
81860                 var isSelected = (_error && _error.id === context.selectedErrorID());
81861                 var buttonSection = selection.selectAll('.buttons')
81862                     .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
81863
81864                 // exit
81865                 buttonSection.exit()
81866                     .remove();
81867
81868                 // enter
81869                 var buttonEnter = buttonSection.enter()
81870                     .append('div')
81871                     .attr('class', 'buttons');
81872
81873                 buttonEnter
81874                     .append('button')
81875                     .attr('class', 'button comment-button action')
81876                     .text(t('QA.keepRight.save_comment'));
81877
81878                 buttonEnter
81879                     .append('button')
81880                     .attr('class', 'button close-button action');
81881
81882                 buttonEnter
81883                     .append('button')
81884                     .attr('class', 'button ignore-button action');
81885
81886
81887                 // update
81888                 buttonSection = buttonSection
81889                     .merge(buttonEnter);
81890
81891                 buttonSection.select('.comment-button')   // select and propagate data
81892                     .attr('disabled', function(d) {
81893                         return d.newComment === undefined ? true : null;
81894                     })
81895                     .on('click.comment', function(d) {
81896                         this.blur();    // avoid keeping focus on the button - #4641
81897                         var keepRight = services$1.keepRight;
81898                         if (keepRight) {
81899                             keepRight.postKeepRightUpdate(d, function(err, error) {
81900                                 dispatch$1.call('change', error);
81901                             });
81902                         }
81903                     });
81904
81905                 buttonSection.select('.close-button')   // select and propagate data
81906                     .text(function(d) {
81907                         var andComment = (d.newComment !== undefined ? '_comment' : '');
81908                         return t('QA.keepRight.close' + andComment);
81909                     })
81910                     .on('click.close', function(d) {
81911                         this.blur();    // avoid keeping focus on the button - #4641
81912                         var keepRight = services$1.keepRight;
81913                         if (keepRight) {
81914                             d.state = 'ignore_t';   // ignore temporarily (error fixed)
81915                             keepRight.postKeepRightUpdate(d, function(err, error) {
81916                                 dispatch$1.call('change', error);
81917                             });
81918                         }
81919                     });
81920
81921                 buttonSection.select('.ignore-button')   // select and propagate data
81922                     .text(function(d) {
81923                         var andComment = (d.newComment !== undefined ? '_comment' : '');
81924                         return t('QA.keepRight.ignore' + andComment);
81925                     })
81926                     .on('click.ignore', function(d) {
81927                         this.blur();    // avoid keeping focus on the button - #4641
81928                         var keepRight = services$1.keepRight;
81929                         if (keepRight) {
81930                             d.state = 'ignore';   // ignore permanently (false positive)
81931                             keepRight.postKeepRightUpdate(d, function(err, error) {
81932                                 dispatch$1.call('change', error);
81933                             });
81934                         }
81935                     });
81936             }
81937
81938
81939             keepRightEditor.error = function(val) {
81940                 if (!arguments.length) { return _error; }
81941                 _error = val;
81942                 return keepRightEditor;
81943             };
81944
81945
81946             return utilRebind(keepRightEditor, dispatch$1, 'on');
81947         }
81948
81949         function modeSelectError(context, selectedErrorID, selectedErrorService) {
81950             var mode = {
81951                 id: 'select-error',
81952                 button: 'browse'
81953             };
81954
81955             var keybinding = utilKeybinding('select-error');
81956
81957             var errorService = services$1[selectedErrorService];
81958             var errorEditor;
81959             switch (selectedErrorService) {
81960                 case 'improveOSM':
81961                     errorEditor = uiImproveOsmEditor(context)
81962                     .on('change', function() {
81963                         context.map().pan([0,0]);  // trigger a redraw
81964                         var error = checkSelectedID();
81965                         if (!error) { return; }
81966                         context.ui().sidebar
81967                             .show(errorEditor.error(error));
81968                     });
81969                     break;
81970                 case 'keepRight':
81971                     errorEditor = uiKeepRightEditor(context)
81972                     .on('change', function() {
81973                         context.map().pan([0,0]);  // trigger a redraw
81974                         var error = checkSelectedID();
81975                         if (!error) { return; }
81976                         context.ui().sidebar
81977                             .show(errorEditor.error(error));
81978                     });
81979                     break;
81980             }
81981
81982
81983             var behaviors = [
81984                 behaviorBreathe(),
81985                 behaviorHover(context),
81986                 behaviorSelect(context),
81987                 behaviorLasso(context),
81988                 modeDragNode(context).behavior,
81989                 modeDragNote(context).behavior
81990             ];
81991
81992
81993             function checkSelectedID() {
81994                 if (!errorService) { return; }
81995                 var error = errorService.getError(selectedErrorID);
81996                 if (!error) {
81997                     context.enter(modeBrowse(context));
81998                 }
81999                 return error;
82000             }
82001
82002
82003             mode.zoomToSelected = function() {
82004                 if (!errorService) { return; }
82005                 var error = errorService.getError(selectedErrorID);
82006                 if (error) {
82007                     context.map().centerZoomEase(error.loc, 20);
82008                 }
82009             };
82010
82011
82012             mode.enter = function() {
82013                 var error = checkSelectedID();
82014                 if (!error) { return; }
82015
82016                 behaviors.forEach(context.install);
82017                 keybinding
82018                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
82019                     .on('⎋', esc, true);
82020
82021                 d3_select(document)
82022                     .call(keybinding);
82023
82024                 selectError();
82025
82026                 var sidebar = context.ui().sidebar;
82027                 sidebar.show(errorEditor.error(error));
82028
82029                 context.map()
82030                     .on('drawn.select-error', selectError);
82031
82032
82033                 // class the error as selected, or return to browse mode if the error is gone
82034                 function selectError(drawn) {
82035                     if (!checkSelectedID()) { return; }
82036
82037                     var selection = context.surface()
82038                         .selectAll('.error_id-' + selectedErrorID + '.' + selectedErrorService);
82039
82040                     if (selection.empty()) {
82041                         // Return to browse mode if selected DOM elements have
82042                         // disappeared because the user moved them out of view..
82043                         var source = event && event.type === 'zoom' && event.sourceEvent;
82044                         if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
82045                             context.enter(modeBrowse(context));
82046                         }
82047
82048                     } else {
82049                         selection
82050                             .classed('selected', true);
82051
82052                         context.selectedErrorID(selectedErrorID);
82053                     }
82054                 }
82055
82056                 function esc() {
82057                     if (d3_select('.combobox').size()) { return; }
82058                     context.enter(modeBrowse(context));
82059                 }
82060             };
82061
82062
82063             mode.exit = function() {
82064                 behaviors.forEach(context.uninstall);
82065
82066                 d3_select(document)
82067                     .call(keybinding.unbind);
82068
82069                 context.surface()
82070                     .selectAll('.qa_error.selected')
82071                     .classed('selected hover', false);
82072
82073                 context.map()
82074                     .on('drawn.select-error', null);
82075
82076                 context.ui().sidebar
82077                     .hide();
82078
82079                 context.selectedErrorID(null);
82080                 context.features().forceVisible([]);
82081             };
82082
82083
82084             return mode;
82085         }
82086
82087         function behaviorSelect(context) {
82088             // legacy option to show menu on every click
82089             var isShowAlways = +context.storage('edit-menu-show-always') === 1;
82090             var tolerance = 4;
82091             var _lastMouse = null;
82092             var _suppressMenu = true;
82093             var _p1 = null;
82094
82095
82096             function point() {
82097                 return d3_mouse(context.container().node());
82098             }
82099
82100
82101             function keydown() {
82102                 var e = event;
82103                 if (e && e.shiftKey) {
82104                     context.surface()
82105                         .classed('behavior-multiselect', true);
82106                 }
82107
82108                 if (e && e.keyCode === 93) {  // context menu
82109                     e.preventDefault();
82110                     e.stopPropagation();
82111                 }
82112             }
82113
82114
82115             function keyup() {
82116                 var e = event;
82117                 if (!e || !e.shiftKey) {
82118                     context.surface()
82119                         .classed('behavior-multiselect', false);
82120                 }
82121
82122
82123                 if (e && e.keyCode === 93) {  // context menu
82124                     e.preventDefault();
82125                     e.stopPropagation();
82126                     contextmenu();
82127                 }
82128             }
82129
82130
82131             function mousedown() {
82132                 if (!_p1) {
82133                     _p1 = point();
82134                 }
82135                 d3_select(window)
82136                     .on('mouseup.select', mouseup, true);
82137
82138                 _suppressMenu = !isShowAlways;
82139             }
82140
82141
82142             function mousemove() {
82143                 if (event) {
82144                     _lastMouse = event;
82145                 }
82146             }
82147
82148
82149             function mouseup() {
82150                 click();
82151             }
82152
82153
82154             function contextmenu() {
82155                 var e = event;
82156                 e.preventDefault();
82157                 e.stopPropagation();
82158
82159                 if (!+e.clientX && !+e.clientY) {
82160                     if (_lastMouse) {
82161                         e.sourceEvent = _lastMouse;
82162                     } else {
82163                         return;
82164                     }
82165                 }
82166
82167                 if (!_p1) {
82168                     _p1 = point();
82169                 }
82170                 _suppressMenu = false;
82171                 click();
82172             }
82173
82174
82175             function click() {
82176                 d3_select(window)
82177                     .on('mouseup.select', null, true);
82178
82179                 if (!_p1) { return; }
82180                 var p2 = point();
82181                 var dist = geoVecLength(_p1, p2);
82182                 _p1 = null;
82183                 if (dist > tolerance) { return; }
82184
82185                 // Defer processing the click,
82186                 // because this click may trigger a blur event,
82187                 // and the blur event may trigger a tag change,
82188                 // and we really want that tag change to go to the already selected entity
82189                 // and not the one that we are about to select with the click  #6028, #5878
82190                 // (Be very careful entering modeSelect anywhere that might also blur a field!)
82191                 var datum = event.target.__data__ || (_lastMouse && _lastMouse.target.__data__);
82192                 var isMultiselect = event.shiftKey || d3_select('#surface .lasso').node();
82193                 window.setTimeout(function() {
82194                     processClick(datum, isMultiselect);
82195                 }, 20);  // delay > whatever raw_tag_editor.js `scheduleChange` does (10ms).
82196             }
82197
82198
82199             function processClick(datum, isMultiselect) {
82200                 var mode = context.mode();
82201
82202                 var entity = datum && datum.properties && datum.properties.entity;
82203                 if (entity) { datum = entity; }
82204
82205                 if (datum && datum.type === 'midpoint') {
82206                     datum = datum.parents[0];
82207                 }
82208
82209                 if (datum instanceof osmEntity) {    // clicked an entity..
82210                     var selectedIDs = context.selectedIDs();
82211                     context.selectedNoteID(null);
82212                     context.selectedErrorID(null);
82213
82214                     if (!isMultiselect) {
82215                         if (selectedIDs.length > 1 && (!_suppressMenu && !isShowAlways)) {
82216                             // multiple things already selected, just show the menu...
82217                             mode.suppressMenu(false).reselect();
82218                         } else {
82219                             // select a single thing..
82220                             context.enter(modeSelect(context, [datum.id]).suppressMenu(_suppressMenu));
82221                         }
82222
82223                     } else {
82224                         if (selectedIDs.indexOf(datum.id) !== -1) {
82225                             // clicked entity is already in the selectedIDs list..
82226                             if (!_suppressMenu && !isShowAlways) {
82227                                 // don't deselect clicked entity, just show the menu.
82228                                 mode.suppressMenu(false).reselect();
82229                             } else {
82230                                 // deselect clicked entity, then reenter select mode or return to browse mode..
82231                                 selectedIDs = selectedIDs.filter(function(id) { return id !== datum.id; });
82232                                 context.enter(selectedIDs.length ? modeSelect(context, selectedIDs) : modeBrowse(context));
82233                             }
82234                         } else {
82235                             // clicked entity is not in the selected list, add it..
82236                             selectedIDs = selectedIDs.concat([datum.id]);
82237                             context.enter(modeSelect(context, selectedIDs).suppressMenu(_suppressMenu));
82238                         }
82239                     }
82240
82241                 } else if (datum && datum.__featurehash__ && !isMultiselect) {    // clicked Data..
82242                     context
82243                         .selectedNoteID(null)
82244                         .enter(modeSelectData(context, datum));
82245
82246                 } else if (datum instanceof osmNote && !isMultiselect) {    // clicked a Note..
82247                     context
82248                         .selectedNoteID(datum.id)
82249                         .enter(modeSelectNote(context, datum.id));
82250
82251                 } else if (datum instanceof qaError & !isMultiselect) {  // clicked an external QA error
82252                     context
82253                         .selectedErrorID(datum.id)
82254                         .enter(modeSelectError(context, datum.id, datum.service));
82255
82256                 } else {    // clicked nothing..
82257                     context.selectedNoteID(null);
82258                     context.selectedErrorID(null);
82259                     if (!isMultiselect && mode.id !== 'browse') {
82260                         context.enter(modeBrowse(context));
82261                     }
82262                 }
82263
82264                 // reset for next time..
82265                 _suppressMenu = true;
82266             }
82267
82268
82269             function behavior(selection) {
82270                 _lastMouse = null;
82271                 _suppressMenu = true;
82272                 _p1 = null;
82273
82274                 d3_select(window)
82275                     .on('keydown.select', keydown)
82276                     .on('keyup.select', keyup)
82277                     .on('contextmenu.select-window', function() {
82278                         // Edge and IE really like to show the contextmenu on the
82279                         // menubar when user presses a keyboard menu button
82280                         // even after we've already preventdefaulted the key event.
82281                         var e = event;
82282                         if (+e.clientX === 0 && +e.clientY === 0) {
82283                             event.preventDefault();
82284                             event.stopPropagation();
82285                         }
82286                     });
82287
82288                 selection
82289                     .on('mousedown.select', mousedown)
82290                     .on('mousemove.select', mousemove)
82291                     .on('contextmenu.select', contextmenu);
82292
82293                 if (event && event.shiftKey) {
82294                     context.surface()
82295                         .classed('behavior-multiselect', true);
82296                 }
82297             }
82298
82299
82300             behavior.off = function(selection) {
82301                 d3_select(window)
82302                     .on('keydown.select', null)
82303                     .on('keyup.select', null)
82304                     .on('contextmenu.select-window', null)
82305                     .on('mouseup.select', null, true);
82306
82307                 selection
82308                     .on('mousedown.select', null)
82309                     .on('mousemove.select', null)
82310                     .on('contextmenu.select', null);
82311
82312                 context.surface()
82313                     .classed('behavior-multiselect', false);
82314             };
82315
82316
82317             return behavior;
82318         }
82319
82320         function behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph) {
82321
82322             var origWay = context.entity(wayID);
82323
82324             var annotation = t((origWay.isDegenerate() ?
82325                 'operations.start.annotation.' :
82326                 'operations.continue.annotation.') + context.geometry(wayID)
82327             );
82328
82329             var behavior = behaviorDraw(context);
82330             behavior.hover().initialNodeID(index ? origWay.nodes[index] :
82331                 (origWay.isClosed() ? origWay.nodes[origWay.nodes.length - 2] : origWay.nodes[origWay.nodes.length - 1]));
82332
82333             var _tempEdits = 0;
82334
82335             var end = osmNode({ loc: context.map().mouseCoordinates() });
82336
82337             // Push an annotated state for undo to return back to.
82338             // We must make sure to remove this edit later.
82339             context.pauseChangeDispatch();
82340             context.perform(actionNoop(), annotation);
82341             _tempEdits++;
82342
82343             // Add the drawing node to the graph.
82344             // We must make sure to remove this edit later.
82345             context.perform(_actionAddDrawNode());
82346             _tempEdits++;
82347             context.resumeChangeDispatch();
82348
82349
82350             function keydown() {
82351                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
82352                     if (context.surface().classed('nope')) {
82353                         context.surface()
82354                             .classed('nope-suppressed', true);
82355                     }
82356                     context.surface()
82357                         .classed('nope', false)
82358                         .classed('nope-disabled', true);
82359                 }
82360             }
82361
82362
82363             function keyup() {
82364                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
82365                     if (context.surface().classed('nope-suppressed')) {
82366                         context.surface()
82367                             .classed('nope', true);
82368                     }
82369                     context.surface()
82370                         .classed('nope-suppressed', false)
82371                         .classed('nope-disabled', false);
82372                 }
82373             }
82374
82375
82376             function allowsVertex(d) {
82377                 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
82378             }
82379
82380
82381             // related code
82382             // - `mode/drag_node.js`     `doMode()`
82383             // - `behavior/draw.js`      `click()`
82384             // - `behavior/draw_way.js`  `move()`
82385             function move(datum) {
82386                 context.surface().classed('nope-disabled', event.altKey);
82387
82388                 var targetLoc = datum && datum.properties && datum.properties.entity && allowsVertex(datum.properties.entity) && datum.properties.entity.loc;
82389                 var targetNodes = datum && datum.properties && datum.properties.nodes;
82390                 var loc = context.map().mouseCoordinates();
82391
82392                 if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
82393                     loc = targetLoc;
82394
82395                 } else if (targetNodes) {   // snap to way - a line target with `.nodes`
82396                     var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
82397                     if (choice) {
82398                         loc = choice.loc;
82399                     }
82400                 }
82401
82402                 context.replace(actionMoveNode(end.id, loc));
82403                 end = context.entity(end.id);
82404                 checkGeometry(false);
82405             }
82406
82407
82408             // Check whether this edit causes the geometry to break.
82409             // If so, class the surface with a nope cursor.
82410             // `finishDraw` - Only checks the relevant line segments if finishing drawing
82411             function checkGeometry(finishDraw) {
82412                 var nopeDisabled = context.surface().classed('nope-disabled');
82413                 var isInvalid = isInvalidGeometry(end, context.graph(), finishDraw);
82414
82415                 if (nopeDisabled) {
82416                     context.surface()
82417                         .classed('nope', false)
82418                         .classed('nope-suppressed', isInvalid);
82419                 } else {
82420                     context.surface()
82421                         .classed('nope', isInvalid)
82422                         .classed('nope-suppressed', false);
82423                 }
82424             }
82425
82426
82427             function isInvalidGeometry(entity, graph, finishDraw) {
82428                 var parents = graph.parentWays(entity);
82429
82430                 for (var i = 0; i < parents.length; i++) {
82431                     var parent = parents[i];
82432                     var nodes = graph.childNodes(parent).slice();  // shallow copy
82433
82434                     if (origWay.isClosed()) { // Check if Area
82435                         if (finishDraw) {
82436                             if (nodes.length < 3) { return false; }
82437                             nodes.splice(-2, 1);
82438                             entity = nodes[nodes.length-2];
82439                         } else {
82440                             nodes.pop();
82441                         }
82442                     } else { // Line
82443                         if (finishDraw) {
82444                             nodes.pop();
82445                         }
82446                     }
82447
82448                     if (geoHasSelfIntersections(nodes, entity.id)) {
82449                         return true;
82450                     }
82451                 }
82452
82453                 return false;
82454             }
82455
82456
82457             function undone() {
82458                 context.pauseChangeDispatch();
82459                 // Undo popped the history back to the initial annotated no-op edit.
82460                 _tempEdits = 0;     // We will deal with the temp edits here
82461                 context.pop(1);     // Remove initial no-op edit
82462
82463                 if (context.graph() === baselineGraph) {    // We've undone back to the beginning
82464                     // baselineGraph may be behind startGraph if this way was added rather than continued
82465                     resetToStartGraph();
82466                     context.resumeChangeDispatch();
82467                     context.enter(modeSelect(context, [wayID]));
82468                 } else {
82469                     // Remove whatever segment was drawn previously and continue drawing
82470                     context.pop(1);
82471                     context.resumeChangeDispatch();
82472                     context.enter(mode);
82473                 }
82474             }
82475
82476
82477             function setActiveElements() {
82478                 context.surface().selectAll('.' + end.id)
82479                     .classed('active', true);
82480             }
82481
82482
82483             function resetToStartGraph() {
82484                 while (context.graph() !== startGraph) {
82485                     context.pop();
82486                 }
82487             }
82488
82489
82490             var drawWay = function(surface) {
82491                 behavior
82492                     .on('move', move)
82493                     .on('click', drawWay.add)
82494                     .on('clickWay', drawWay.addWay)
82495                     .on('clickNode', drawWay.addNode)
82496                     .on('undo', context.undo)
82497                     .on('cancel', drawWay.cancel)
82498                     .on('finish', drawWay.finish);
82499
82500                 d3_select(window)
82501                     .on('keydown.drawWay', keydown)
82502                     .on('keyup.drawWay', keyup);
82503
82504                 context.map()
82505                     .dblclickEnable(false)
82506                     .on('drawn.draw', setActiveElements);
82507
82508                 setActiveElements();
82509
82510                 surface.call(behavior);
82511
82512                 context.history()
82513                     .on('undone.draw', undone);
82514             };
82515
82516
82517             drawWay.off = function(surface) {
82518                 // Drawing was interrupted unexpectedly.
82519                 // This can happen if the user changes modes,
82520                 // clicks geolocate button, a hashchange event occurs, etc.
82521                 if (_tempEdits) {
82522                     context.pauseChangeDispatch();
82523                     context.pop(_tempEdits);
82524                     resetToStartGraph();
82525                     context.resumeChangeDispatch();
82526                 }
82527
82528                 context.map()
82529                     .on('drawn.draw', null);
82530
82531                 surface.call(behavior.off)
82532                     .selectAll('.active')
82533                     .classed('active', false);
82534
82535                 surface
82536                     .classed('nope', false)
82537                     .classed('nope-suppressed', false)
82538                     .classed('nope-disabled', false);
82539
82540                 d3_select(window)
82541                     .on('keydown.hover', null)
82542                     .on('keyup.hover', null);
82543
82544                 context.history()
82545                     .on('undone.draw', null);
82546             };
82547
82548
82549             function _actionAddDrawNode() {
82550                 return function(graph) {
82551                     return graph
82552                         .replace(end)
82553                         .replace(origWay.addNode(end.id, index));
82554                 };
82555             }
82556
82557
82558             function _actionReplaceDrawNode(newNode) {
82559                 return function(graph) {
82560                     return graph
82561                         .replace(origWay.addNode(newNode.id, index))
82562                         .remove(end);
82563                 };
82564             }
82565
82566
82567             // Accept the current position of the drawing node and continue drawing.
82568             drawWay.add = function(loc, d) {
82569                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
82570                     return;   // can't click here
82571                 }
82572
82573                 context.pauseChangeDispatch();
82574                 context.pop(_tempEdits);
82575                 _tempEdits = 0;
82576
82577                 context.perform(
82578                     _actionAddDrawNode(),
82579                     annotation
82580                 );
82581
82582                 context.resumeChangeDispatch();
82583                 checkGeometry(false);   // finishDraw = false
82584                 context.enter(mode);
82585             };
82586
82587
82588             // Connect the way to an existing way.
82589             drawWay.addWay = function(loc, edge, d) {
82590                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
82591                     return;   // can't click here
82592                 }
82593
82594                 context.pauseChangeDispatch();
82595                 context.pop(_tempEdits);
82596                 _tempEdits = 0;
82597
82598                 context.perform(
82599                     _actionAddDrawNode(),
82600                     actionAddMidpoint({ loc: loc, edge: edge }, end),
82601                     annotation
82602                 );
82603
82604                 context.resumeChangeDispatch();
82605                 checkGeometry(false);   // finishDraw = false
82606                 context.enter(mode);
82607             };
82608
82609
82610             // Connect the way to an existing node and continue drawing.
82611             drawWay.addNode = function(node, d) {
82612                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
82613                     return;   // can't click here
82614                 }
82615
82616                 context.pauseChangeDispatch();
82617                 context.pop(_tempEdits);
82618                 _tempEdits = 0;
82619
82620                 context.perform(
82621                     _actionReplaceDrawNode(node),
82622                     annotation
82623                 );
82624
82625                 context.resumeChangeDispatch();
82626                 checkGeometry(false);   // finishDraw = false
82627                 context.enter(mode);
82628             };
82629
82630
82631             // Finish the draw operation, removing the temporary edits.
82632             // If the way has enough nodes to be valid, it's selected.
82633             // Otherwise, delete everything and return to browse mode.
82634             drawWay.finish = function() {
82635                 checkGeometry(true);   // finishDraw = true
82636                 if (context.surface().classed('nope')) {
82637                     return;   // can't click here
82638                 }
82639
82640                 context.pauseChangeDispatch();
82641                 context.pop(_tempEdits);
82642                 _tempEdits = 0;
82643
82644                 var way = context.hasEntity(wayID);
82645                 if (!way || way.isDegenerate()) {
82646                     drawWay.cancel();
82647                     return;
82648                 }
82649
82650                 context.resumeChangeDispatch();
82651
82652                 window.setTimeout(function() {
82653                     context.map().dblclickEnable(true);
82654                 }, 1000);
82655
82656                 var isNewFeature = !mode.isContinuing;
82657                 context.enter(modeSelect(context, [wayID]).newFeature(isNewFeature));
82658             };
82659
82660
82661             // Cancel the draw operation, delete everything, and return to browse mode.
82662             drawWay.cancel = function() {
82663                 context.pauseChangeDispatch();
82664                 context.pop(_tempEdits);
82665                 _tempEdits = 0;
82666
82667                 resetToStartGraph();
82668                 context.resumeChangeDispatch();
82669
82670                 window.setTimeout(function() {
82671                     context.map().dblclickEnable(true);
82672                 }, 1000);
82673
82674                 context.surface()
82675                     .classed('nope', false)
82676                     .classed('nope-disabled', false)
82677                     .classed('nope-suppressed', false);
82678
82679                 context.enter(modeBrowse(context));
82680             };
82681
82682
82683             drawWay.activeID = function() {
82684                 if (!arguments.length) { return end.id; }
82685                 // no assign
82686                 return drawWay;
82687             };
82688
82689
82690             drawWay.tail = function(text) {
82691                 behavior.tail(text);
82692                 return drawWay;
82693             };
82694
82695
82696             return drawWay;
82697         }
82698
82699         function modeDrawLine(context, wayID, startGraph, baselineGraph, button, affix, continuing) {
82700             var mode = {
82701                 button: button,
82702                 id: 'draw-line'
82703             };
82704
82705             var behavior;
82706
82707             mode.wayID = wayID;
82708
82709             mode.isContinuing = continuing;
82710
82711             mode.enter = function() {
82712                 var way = context.entity(wayID);
82713                 var index = (affix === 'prefix') ? 0 : undefined;
82714                 var headID = (affix === 'prefix') ? way.first() : way.last();
82715
82716                 behavior = behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph)
82717                     .tail(t('modes.draw_line.tail'));
82718
82719                 var addNode = behavior.addNode;
82720                 behavior.addNode = function(node, d) {
82721                     if (node.id === headID) {
82722                         behavior.finish();
82723                     } else {
82724                         addNode(node, d);
82725                     }
82726                 };
82727
82728                 context.install(behavior);
82729             };
82730
82731
82732             mode.exit = function() {
82733                 context.uninstall(behavior);
82734             };
82735
82736
82737             mode.selectedIDs = function() {
82738                 return [wayID];
82739             };
82740
82741
82742             mode.activeID = function() {
82743                 return (behavior && behavior.activeID()) || [];
82744             };
82745
82746             return mode;
82747         }
82748
82749         function operationContinue(selectedIDs, context) {
82750             var graph = context.graph();
82751             var entities = selectedIDs.map(function(id) { return graph.entity(id); });
82752             var geometries = Object.assign(
82753                 { line: [], vertex: [] },
82754                 utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
82755             );
82756             var vertex = geometries.vertex[0];
82757
82758
82759             function candidateWays() {
82760                 return graph.parentWays(vertex).filter(function(parent) {
82761                     return parent.geometry(graph) === 'line' &&
82762                         !parent.isClosed() &&
82763                         parent.affix(vertex.id) &&
82764                         (geometries.line.length === 0 || geometries.line[0] === parent);
82765                 });
82766             }
82767
82768
82769             var operation = function() {
82770                 var candidate = candidateWays()[0];
82771                 context.enter(
82772                     modeDrawLine(context, candidate.id, context.graph(), context.graph(), 'line', candidate.affix(vertex.id), true)
82773                 );
82774             };
82775
82776
82777             operation.available = function() {
82778                 return geometries.vertex.length === 1 &&
82779                     geometries.line.length <= 1 &&
82780                     !context.features().hasHiddenConnections(vertex, context.graph());
82781             };
82782
82783
82784             operation.disabled = function() {
82785                 var candidates = candidateWays();
82786                 if (candidates.length === 0) {
82787                     return 'not_eligible';
82788                 } else if (candidates.length > 1) {
82789                     return 'multiple';
82790                 }
82791
82792                 return false;
82793             };
82794
82795
82796             operation.tooltip = function() {
82797                 var disable = operation.disabled();
82798                 return disable ?
82799                     t('operations.continue.' + disable) :
82800                     t('operations.continue.description');
82801             };
82802
82803
82804             operation.annotation = function() {
82805                 return t('operations.continue.annotation.line');
82806             };
82807
82808
82809             operation.id = 'continue';
82810             operation.keys = [t('operations.continue.key')];
82811             operation.title = t('operations.continue.title');
82812             operation.behavior = behaviorOperation(context).which(operation);
82813
82814             return operation;
82815         }
82816
82817         function operationDisconnect(selectedIDs, context) {
82818             var vertexIDs = [];
82819             var wayIDs = [];
82820             var otherIDs = [];
82821             var actions = [];
82822
82823             selectedIDs.forEach(function(id) {
82824                 if (context.geometry(id) === 'vertex') {
82825                     vertexIDs.push(id);
82826                 } else if (context.entity(id).type === 'way'){
82827                     wayIDs.push(id);
82828                 } else {
82829                     otherIDs.push(id);
82830                 }
82831             });
82832
82833             var disconnectingWayID = (vertexIDs.length === 0 && wayIDs.length === 1 && wayIDs[0]);
82834             var extent, nodes, coords;
82835
82836             if (disconnectingWayID) {   // disconnecting a way
82837                 var way = context.entity(disconnectingWayID);
82838                 extent = way.extent(context.graph());
82839                 nodes = utilGetAllNodes([disconnectingWayID], context.graph());
82840                 coords = nodes.map(function(n) { return n.loc; });
82841
82842                 way.nodes.forEach(function(vertexID) {
82843                     var action = actionDisconnect(vertexID).limitWays(wayIDs);
82844                     if (action.disabled(context.graph()) !== 'not_connected') {
82845                         actions.push(action);
82846                     }
82847                 });
82848
82849             } else {    // disconnecting a vertex
82850                 vertexIDs.forEach(function(vertexID) {
82851                     var action = actionDisconnect(vertexID);
82852
82853                     if (wayIDs.length > 0) {
82854                         var waysIDsForVertex = wayIDs.filter(function(wayID) {
82855                             var way = context.entity(wayID);
82856                             return way.nodes.indexOf(vertexID) !== -1;
82857                         });
82858                         action.limitWays(waysIDsForVertex);
82859                     }
82860                     actions.push(action);
82861                 });
82862             }
82863
82864
82865             var operation = function() {
82866                 context.perform(function(graph) {
82867                     return actions.reduce(function(graph, action) { return action(graph); }, graph);
82868                 }, operation.annotation());
82869
82870                 context.validator().validate();
82871             };
82872
82873
82874             operation.available = function() {
82875                 if (actions.length === 0) { return false; }
82876                 if (otherIDs.length !== 0) { return false; }
82877
82878                 if (vertexIDs.length !== 0 && wayIDs.length !== 0 && !wayIDs.every(function(wayID) {
82879                     return vertexIDs.some(function(vertexID) {
82880                         var way = context.entity(wayID);
82881                         return way.nodes.indexOf(vertexID) !== -1;
82882                     });
82883                 })) { return false; }
82884
82885                 return true;
82886             };
82887
82888
82889             operation.disabled = function() {
82890                 var reason;
82891                 for (var actionIndex in actions) {
82892                     reason = actions[actionIndex].disabled(context.graph());
82893                     if (reason) { return reason; }
82894                 }
82895
82896                 if (disconnectingWayID && extent.percentContainedIn(context.extent()) < 0.8) {
82897                     return 'too_large.single';
82898                 } else if (disconnectingWayID && someMissing()) {
82899                     return 'not_downloaded';
82900                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
82901                     return 'connected_to_hidden';
82902                 }
82903
82904                 return false;
82905
82906
82907                 function someMissing() {
82908                     if (context.inIntro()) { return false; }
82909                     var osm = context.connection();
82910                     if (osm) {
82911                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
82912                         if (missing.length) {
82913                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
82914                             return true;
82915                         }
82916                     }
82917                     return false;
82918                 }
82919             };
82920
82921
82922             operation.tooltip = function() {
82923                 var disable = operation.disabled();
82924                 if (disable) {
82925                     return t('operations.disconnect.' + disable);
82926                 }
82927                 if (disconnectingWayID) {
82928                     return t('operations.disconnect.' + context.geometry(disconnectingWayID) + '.description');
82929                 }
82930                 return t('operations.disconnect.description');
82931             };
82932
82933
82934             operation.annotation = function() {
82935                 return t('operations.disconnect.annotation');
82936             };
82937
82938
82939             operation.id = 'disconnect';
82940             operation.keys = [t('operations.disconnect.key')];
82941             operation.title = t('operations.disconnect.title');
82942             operation.behavior = behaviorOperation(context).which(operation);
82943
82944             return operation;
82945         }
82946
82947         function operationDowngrade(selectedIDs, context) {
82948             var affectedFeatureCount = 0;
82949             var downgradeType;
82950
82951             setDowngradeTypeForEntityIDs();
82952
82953             var multi = affectedFeatureCount === 1 ? 'single' : 'multiple';
82954
82955             function setDowngradeTypeForEntityIDs() {
82956                 for (var i in selectedIDs) {
82957                     var entityID = selectedIDs[i];
82958                     var type = downgradeTypeForEntityID(entityID);
82959                     if (type) {
82960                         affectedFeatureCount += 1;
82961                         if (downgradeType && type !== downgradeType) {
82962                             downgradeType = 'building_address';
82963                         } else {
82964                             downgradeType = type;
82965                         }
82966                     }
82967                 }
82968             }
82969
82970             function downgradeTypeForEntityID(entityID) {
82971                 var graph = context.graph();
82972                 var entity = graph.entity(entityID);
82973                 var preset = context.presets().match(entity, graph);
82974
82975                 if (preset.isFallback()) { return null; }
82976
82977                 if (entity.type === 'node' &&
82978                     preset.id !== 'address' &&
82979                     Object.keys(entity.tags).some(function(key) {
82980                         return key.match(/^addr:.{1,}/);
82981                     })) {
82982
82983                     return 'address';
82984                 }
82985                 if (entity.geometry(graph) === 'area' &&
82986                     entity.tags.building &&
82987                     !preset.tags.building) {
82988
82989                     return 'building';
82990                 }
82991
82992                 return null;
82993             }
82994
82995             var buildingKeysToKeep = ['architect', 'building', 'height', 'layer', 'source', 'type', 'wheelchair'];
82996             var addressKeysToKeep = ['source'];
82997
82998             var operation = function () {
82999                 context.perform(function(graph) {
83000
83001                     for (var i in selectedIDs) {
83002                         var entityID = selectedIDs[i];
83003                         var type = downgradeTypeForEntityID(entityID);
83004                         if (!type) { continue; }
83005
83006                         var tags = Object.assign({}, graph.entity(entityID).tags);  // shallow copy
83007                         for (var key in tags) {
83008                             if (type === 'address' && addressKeysToKeep.indexOf(key) !== -1) { continue; }
83009                             if (type === 'building') {
83010                                 if (buildingKeysToKeep.indexOf(key) !== -1 ||
83011                                     key.match(/^building:.{1,}/) ||
83012                                     key.match(/^roof:.{1,}/)) { continue; }
83013                             }
83014                             // keep address tags for buildings too
83015                             if (key.match(/^addr:.{1,}/)) { continue; }
83016
83017                             delete tags[key];
83018                         }
83019                         graph = actionChangeTags(entityID, tags)(graph);
83020                     }
83021                     return graph;
83022                 }, operation.annotation());
83023
83024                 context.validator().validate();
83025
83026                 // refresh the select mode to enable the delete operation
83027                 context.enter(modeSelect(context, selectedIDs));
83028             };
83029
83030
83031             operation.available = function () {
83032                 return downgradeType;
83033             };
83034
83035
83036             operation.disabled = function () {
83037                 if (selectedIDs.some(hasWikidataTag)) {
83038                     return 'has_wikidata_tag';
83039                 }
83040                 return false;
83041
83042                 function hasWikidataTag(id) {
83043                     var entity = context.entity(id);
83044                     return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
83045                 }
83046             };
83047
83048
83049             operation.tooltip = function () {
83050                 var disable = operation.disabled();
83051                 return disable ?
83052                     t('operations.downgrade.' + disable + '.' + multi) :
83053                     t('operations.downgrade.description.' + downgradeType);
83054             };
83055
83056
83057             operation.annotation = function () {
83058                 var suffix;
83059                 if (downgradeType === 'building_address') {
83060                     suffix = 'multiple';
83061                 } else {
83062                     suffix = downgradeType + '.' + multi;
83063                 }
83064                 return t('operations.downgrade.annotation.' + suffix, { n: affectedFeatureCount});
83065             };
83066
83067
83068             operation.id = 'downgrade';
83069             operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
83070             operation.title = t('operations.downgrade.title');
83071             operation.behavior = behaviorOperation(context).which(operation);
83072
83073
83074             return operation;
83075         }
83076
83077         function operationExtract(selectedIDs, context) {
83078             var entityID = selectedIDs.length && selectedIDs[0];
83079             var action = actionExtract(entityID, context.projection);
83080
83081             var geometry = entityID && context.geometry(entityID);
83082             var extent = geometry === 'area' && context.entity(entityID).extent(context.graph());
83083
83084
83085             var operation = function () {
83086                 context.perform(action);  // do the extract
83087                 context.validator().validate();
83088
83089                 var extractedNodeID = action.getExtractedNodeID();
83090
83091                 var mouse = context.map().mouseCoordinates();
83092                 if (mouse.some(isNaN)) {
83093                     enterMoveMode();
83094
83095                 } else {
83096                     // move detached node to the mouse location (transitioned)
83097                     context.perform(actionMoveNode(extractedNodeID, mouse));
83098
83099                     // after transition completes, put at final mouse location and enter move mode.
83100                     window.setTimeout(function() {
83101                         mouse = context.map().mouseCoordinates();
83102                         context.replace(actionMoveNode(extractedNodeID, mouse));
83103                         enterMoveMode();
83104                     }, 150);
83105                 }
83106
83107                 function enterMoveMode() {
83108                     var baseGraph = context.graph();
83109                     context.enter(modeMove(context, [extractedNodeID], baseGraph));
83110                 }
83111             };
83112
83113
83114             operation.available = function () {
83115                 if (selectedIDs.length !== 1) { return false; }
83116
83117                 var graph = context.graph();
83118                 var entity = graph.hasEntity(entityID);
83119                 if (!entity) { return false; }
83120
83121                 if (!entity.hasInterestingTags()) { return false; }
83122
83123                 if (geometry === 'area') {
83124                     var preset = context.presets().match(entity, graph);
83125                     return preset.geometry.indexOf('point') !== -1;
83126                 }
83127
83128                 return entity.type === 'node' && graph.parentWays(entity).length > 0;
83129             };
83130
83131
83132             operation.disabled = function () {
83133                 var reason = action.disabled(context.graph());
83134                 if (reason) {
83135                     return reason;
83136                 } else if (geometry === 'vertex' && selectedIDs.some(context.hasHiddenConnections)) {
83137                     return 'connected_to_hidden';
83138                 } else if (extent && extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
83139                     return 'too_large';
83140                 }
83141
83142                 return false;
83143             };
83144
83145
83146             operation.tooltip = function () {
83147                 var disableReason = operation.disabled();
83148                 if (disableReason) {
83149                     return t('operations.extract.' + disableReason + '.' + geometry + '.single',
83150                         { relation: context.presets().item('type/restriction').name() });
83151                 } else {
83152                     return t('operations.extract.description.' + geometry + '.single');
83153                 }
83154             };
83155
83156
83157             operation.annotation = function () {
83158                 return t('operations.extract.annotation.single');
83159             };
83160
83161
83162             operation.id = 'extract';
83163             operation.keys = [t('operations.extract.key')];
83164             operation.title = t('operations.extract.title');
83165             operation.behavior = behaviorOperation(context).which(operation);
83166
83167
83168             return operation;
83169         }
83170
83171         function operationMerge(selectedIDs, context) {
83172
83173             function updatePresetTags(newGraph, ids) {
83174                 var id = ids[0];
83175                 var newEntity = newGraph.hasEntity(id);
83176
83177                 if (!newEntity) { return; }
83178                 var newPreset = context.presets().match(newEntity, newGraph);
83179                 context.replace(actionChangePreset(id, null, newPreset), operation.annotation());
83180             }
83181
83182
83183             var join = actionJoin(selectedIDs);
83184             var merge = actionMerge(selectedIDs);
83185             var mergePolygon = actionMergePolygon(selectedIDs);
83186             var mergeNodes = actionMergeNodes(selectedIDs);
83187
83188
83189             var operation = function() {
83190                 var doUpdateTags;
83191                 var action;
83192
83193                 if (!join.disabled(context.graph())) {
83194                     doUpdateTags = false;
83195                     action = join;
83196                 } else if (!merge.disabled(context.graph())) {
83197                     doUpdateTags = true;
83198                     action = merge;
83199                 } else if (!mergePolygon.disabled(context.graph())) {
83200                     doUpdateTags = false;
83201                     action = mergePolygon;
83202                 } else {
83203                     doUpdateTags = true;
83204                     action = mergeNodes;
83205                 }
83206
83207                 context.perform(action, operation.annotation());
83208
83209                 var ids = selectedIDs.filter(function(id) {
83210                     var entity = context.hasEntity(id);
83211                     return entity && entity.type !== 'node';
83212                 });
83213
83214                 // if we merged tags, rematch preset to update tags if necessary (#3851)
83215                 if (doUpdateTags) {
83216                     updatePresetTags(context.graph(), ids);
83217                 }
83218
83219                 context.validator().validate();
83220                 context.enter(modeSelect(context, ids));
83221             };
83222
83223
83224             operation.available = function() {
83225                 return selectedIDs.length >= 2;
83226             };
83227
83228
83229             operation.disabled = function() {
83230                 return join.disabled(context.graph()) &&
83231                     merge.disabled(context.graph()) &&
83232                     mergePolygon.disabled(context.graph()) &&
83233                     mergeNodes.disabled(context.graph());
83234             };
83235
83236
83237             operation.tooltip = function() {
83238                 var j = join.disabled(context.graph());          // 'not_eligible', 'not_adjacent', 'restriction', 'conflicting_tags'
83239                 var m = merge.disabled(context.graph());         // 'not_eligible'
83240                 var p = mergePolygon.disabled(context.graph());  // 'not_eligible', 'incomplete_relation'
83241                 var n = mergeNodes.disabled(context.graph());    // 'not_eligible', 'relation', 'restriction'
83242
83243                 // disabled for one of various reasons
83244                 if (j && m && p && n) {
83245                     if (j === 'restriction' || n === 'restriction') {
83246                         return t('operations.merge.restriction',
83247                             { relation: context.presets().item('type/restriction').name() });
83248
83249                     } else if (p === 'incomplete_relation') {
83250                         return t('operations.merge.incomplete_relation');
83251
83252                     } else if (n === 'relation') {
83253                         return t('operations.merge.relation');
83254
83255                     } else {
83256                         return t('operations.merge.' + j);
83257                     }
83258
83259                 } else {
83260                     return t('operations.merge.description');
83261                 }
83262             };
83263
83264
83265             operation.annotation = function() {
83266                 return t('operations.merge.annotation', { n: selectedIDs.length });
83267             };
83268
83269
83270             operation.id = 'merge';
83271             operation.keys = [t('operations.merge.key')];
83272             operation.title = t('operations.merge.title');
83273             operation.behavior = behaviorOperation(context).which(operation);
83274
83275             return operation;
83276         }
83277
83278         function operationReverse(selectedIDs, context) {
83279
83280             var operation = function() {
83281                 context.perform(function combinedReverseAction(graph) {
83282                     actions().forEach(function(action) {
83283                         graph = action(graph);
83284                     });
83285                     return graph;
83286                 }, operation.annotation());
83287                 context.validator().validate();
83288             };
83289
83290             function actions(situation) {
83291                 return selectedIDs.map(function(entityID) {
83292                     var entity = context.hasEntity(entityID);
83293                     if (!entity) { return; }
83294
83295                     if (situation === 'toolbar') {
83296                         if (entity.type === 'way' &&
83297                             (!entity.isOneWay() && !entity.isSided())) { return; }
83298                     }
83299
83300                     var geometry = entity.geometry(context.graph());
83301                     if (entity.type !== 'node' && geometry !== 'line') { return; }
83302
83303                     var action = actionReverse(entityID);
83304                     if (action.disabled(context.graph())) { return; }
83305
83306                     return action;
83307                 }).filter(Boolean);
83308             }
83309
83310             function reverseTypeID() {
83311                 var acts = actions();
83312                 var nodeActionCount = acts.filter(function(act) {
83313                     var entity = context.hasEntity(act.entityID());
83314                     return entity && entity.type === 'node';
83315                 }).length;
83316                 var typeID = nodeActionCount === 0 ? 'line' : (nodeActionCount === acts.length ? 'point' : 'features');
83317                 if (typeID !== 'features' && acts.length > 1) { typeID += 's'; }
83318                 return typeID;
83319             }
83320
83321
83322             operation.available = function(situation) {
83323                 return actions(situation).length > 0;
83324             };
83325
83326
83327             operation.disabled = function() {
83328                 return false;
83329             };
83330
83331
83332             operation.tooltip = function() {
83333                 return t('operations.reverse.description.' + reverseTypeID());
83334             };
83335
83336
83337             operation.annotation = function() {
83338                 return t('operations.reverse.annotation.' + reverseTypeID());
83339             };
83340
83341
83342             operation.id = 'reverse';
83343             operation.keys = [t('operations.reverse.key')];
83344             operation.title = t('operations.reverse.title');
83345             operation.behavior = behaviorOperation(context).which(operation);
83346
83347             return operation;
83348         }
83349
83350         function operationSplit(selectedIDs, context) {
83351             var vertices = selectedIDs
83352                 .filter(function(id) { return context.geometry(id) === 'vertex'; });
83353             var entityID = vertices[0];
83354             var action = actionSplit(entityID);
83355             var ways = [];
83356
83357             if (vertices.length === 1) {
83358                 if (entityID && selectedIDs.length > 1) {
83359                     var ids = selectedIDs.filter(function(id) { return id !== entityID; });
83360                     action.limitWays(ids);
83361                 }
83362                 ways = action.ways(context.graph());
83363             }
83364
83365
83366             var operation = function() {
83367                 var difference = context.perform(action, operation.annotation());
83368                 context.enter(modeSelect(context, difference.extantIDs()));
83369             };
83370
83371
83372             operation.available = function() {
83373                 return vertices.length === 1;
83374             };
83375
83376
83377             operation.disabled = function() {
83378                 var reason = action.disabled(context.graph());
83379                 if (reason) {
83380                     return reason;
83381                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
83382                     return 'connected_to_hidden';
83383                 }
83384
83385                 return false;
83386             };
83387
83388
83389             operation.tooltip = function() {
83390                 var disable = operation.disabled();
83391                 if (disable) {
83392                     return t('operations.split.' + disable);
83393                 } else if (ways.length === 1) {
83394                     return t('operations.split.description.' + context.geometry(ways[0].id));
83395                 } else {
83396                     return t('operations.split.description.multiple');
83397                 }
83398             };
83399
83400
83401             operation.annotation = function() {
83402                 return ways.length === 1 ?
83403                     t('operations.split.annotation.' + context.geometry(ways[0].id)) :
83404                     t('operations.split.annotation.multiple', { n: ways.length });
83405             };
83406
83407
83408             operation.id = 'split';
83409             operation.keys = [t('operations.split.key')];
83410             operation.title = t('operations.split.title');
83411             operation.behavior = behaviorOperation(context).which(operation);
83412
83413             return operation;
83414         }
83415
83416         function operationStraighten(selectedIDs, context) {
83417             var wayIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'w'; });
83418             var nodeIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'n'; });
83419
83420             var nodes = utilGetAllNodes(selectedIDs, context.graph());
83421             var coords = nodes.map(function(n) { return n.loc; });
83422             var action = chooseAction();
83423             var geometry;
83424
83425
83426             function chooseAction() {
83427                 // straighten selected nodes
83428                 if (wayIDs.length === 0 && nodeIDs.length > 2) {
83429                     geometry = 'points';
83430                     return actionStraightenNodes(nodeIDs, context.projection);
83431
83432                 // straighten selected ways (possibly between range of 2 selected nodes)
83433                 } else if (wayIDs.length > 0 && (nodeIDs.length === 0 || nodeIDs.length === 2)) {
83434                     var startNodeIDs = [];
83435                     var endNodeIDs = [];
83436
83437                     for (var i = 0; i < selectedIDs.length; i++) {
83438                         var entity = context.entity(selectedIDs[i]);
83439                         if (entity.type === 'node') {
83440                             continue;
83441                         } else if (entity.type !== 'way' || entity.isClosed()) {
83442                             return false;  // exit early, can't straighten these
83443                         }
83444
83445                         startNodeIDs.push(entity.first());
83446                         endNodeIDs.push(entity.last());
83447                     }
83448
83449                     // Remove duplicate end/startNodeIDs (duplicate nodes cannot be at the line end)
83450                     startNodeIDs = startNodeIDs.filter(function(n) {
83451                         return startNodeIDs.indexOf(n) === startNodeIDs.lastIndexOf(n);
83452                     });
83453                     endNodeIDs = endNodeIDs.filter(function(n) {
83454                         return endNodeIDs.indexOf(n) === endNodeIDs.lastIndexOf(n);
83455                     });
83456
83457                     // Ensure all ways are connected (i.e. only 2 unique endpoints/startpoints)
83458                     if (utilArrayDifference(startNodeIDs, endNodeIDs).length +
83459                         utilArrayDifference(endNodeIDs, startNodeIDs).length !== 2) { return false; }
83460
83461                     // Ensure path contains at least 3 unique nodes
83462                     var wayNodeIDs = utilGetAllNodes(wayIDs, context.graph())
83463                         .map(function(node) { return node.id; });
83464                     if (wayNodeIDs.length <= 2) { return false; }
83465
83466                     // If range of 2 selected nodes is supplied, ensure nodes lie on the selected path
83467                     if (nodeIDs.length === 2 && (
83468                         wayNodeIDs.indexOf(nodeIDs[0]) === -1 || wayNodeIDs.indexOf(nodeIDs[1]) === -1
83469                     )) { return false; }
83470
83471                     geometry = 'line';
83472                     return actionStraightenWay(selectedIDs, context.projection);
83473                 }
83474
83475                 return false;
83476             }
83477
83478
83479             function operation() {
83480                 if (!action) { return; }
83481
83482                 context.perform(action, operation.annotation());
83483
83484                 window.setTimeout(function() {
83485                     context.validator().validate();
83486                 }, 300);  // after any transition
83487             }
83488
83489
83490             operation.available = function() {
83491                 return Boolean(action);
83492             };
83493
83494
83495             operation.disabled = function() {
83496                 var reason = action.disabled(context.graph());
83497                 if (reason) {
83498                     return reason;
83499                 } else if (someMissing()) {
83500                     return 'not_downloaded';
83501                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
83502                     return 'connected_to_hidden';
83503                 }
83504
83505                 return false;
83506
83507
83508                 function someMissing() {
83509                     if (context.inIntro()) { return false; }
83510                     var osm = context.connection();
83511                     if (osm) {
83512                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
83513                         if (missing.length) {
83514                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
83515                             return true;
83516                         }
83517                     }
83518                     return false;
83519                 }
83520             };
83521
83522
83523             operation.tooltip = function() {
83524                 var disable = operation.disabled();
83525                 return disable ?
83526                     t('operations.straighten.' + disable) :
83527                     t('operations.straighten.description.' + geometry);
83528             };
83529
83530
83531             operation.annotation = function() {
83532                 return t('operations.straighten.annotation.' + geometry);
83533             };
83534
83535
83536             operation.id = 'straighten';
83537             operation.keys = [t('operations.straighten.key')];
83538             operation.title = t('operations.straighten.title');
83539             operation.behavior = behaviorOperation(context).which(operation);
83540
83541             return operation;
83542         }
83543
83544
83545
83546         var Operations = /*#__PURE__*/Object.freeze({
83547                 __proto__: null,
83548                 operationCircularize: operationCircularize,
83549                 operationContinue: operationContinue,
83550                 operationDelete: operationDelete,
83551                 operationDisconnect: operationDisconnect,
83552                 operationDowngrade: operationDowngrade,
83553                 operationExtract: operationExtract,
83554                 operationMerge: operationMerge,
83555                 operationMove: operationMove,
83556                 operationOrthogonalize: operationOrthogonalize,
83557                 operationReflectShort: operationReflectShort,
83558                 operationReflectLong: operationReflectLong,
83559                 operationReverse: operationReverse,
83560                 operationRotate: operationRotate,
83561                 operationSplit: operationSplit,
83562                 operationStraighten: operationStraighten
83563         });
83564
83565         function uiEditMenu(context, operations) {
83566             var menu;
83567             var center = [0, 0];
83568             var offset = [0, 0];
83569             var tooltip;
83570
83571             var p = 8;               // top padding
83572             var m = 4;               // top margin
83573             var h = 15;              // height of icon
83574             var vpBottomMargin = 45; // viewport bottom margin
83575             var vpSideMargin = 35;   // viewport side margin
83576             var buttonWidth = 44;
83577             var buttonHeight = (2 * p + h);
83578             var menuWidth = buttonWidth;
83579             var menuHeight = (2 * m) + operations.length * buttonHeight;
83580             var menuSideMargin = 10;
83581             var tooltipWidth = 200;
83582             var tooltipHeight = 200;  // a reasonable guess, real height depends on tooltip contents
83583
83584
83585             var editMenu = function (selection) {
83586                 if (!operations.length) { return; }
83587
83588                 selection.node().parentNode.focus();
83589
83590                 var isRTL = textDirection === 'rtl';
83591                 var viewport = context.surfaceRect();
83592
83593                 if (!isRTL && (center[0] + menuSideMargin + menuWidth) > (viewport.width - vpSideMargin)) {
83594                     // menu is going left-to-right and near right viewport edge, go left instead
83595                     isRTL = true;
83596                 } else if (isRTL && (center[0] - menuSideMargin - menuWidth) < vpSideMargin) {
83597                     // menu is going right-to-left and near left viewport edge, go right instead
83598                     isRTL = false;
83599                 }
83600
83601                 offset[0] = (isRTL ? -1 * (menuSideMargin + menuWidth) : menuSideMargin);
83602
83603                 if (center[1] + menuHeight > (viewport.height - vpBottomMargin)) {
83604                     // menu is near bottom viewport edge, shift upwards
83605                     offset[1] = -1 * (center[1] + menuHeight - viewport.height + vpBottomMargin);
83606                 }
83607
83608                 var origin = geoVecAdd(center, offset);
83609
83610                 menu = selection
83611                     .append('g')
83612                     .attr('class', 'edit-menu')
83613                     .attr('transform', 'translate(' + origin + ')')
83614                     .attr('opacity', 0);
83615
83616                 menu
83617                     .transition()
83618                     .attr('opacity', 1);
83619
83620                 menu
83621                     .append('rect')
83622                     .attr('class', 'edit-menu-background')
83623                     .attr('x', 4)
83624                     .attr('rx', 4)
83625                     .attr('ry', 4)
83626                     .attr('width', menuWidth)
83627                     .attr('height', menuHeight)
83628                     .attr('stroke-linecap', 'round');
83629
83630
83631                 var buttons = menu.selectAll('.edit-menu-item')
83632                     .data(operations);
83633
83634                 // enter
83635                 var buttonsEnter = buttons.enter()
83636                     .append('g')
83637                     .attr('class', function (d) { return 'edit-menu-item edit-menu-item-' + d.id; })
83638                     .attr('transform', function(d, i) {
83639                         return 'translate(' + geoVecFloor([0, m + i * buttonHeight]).join(',') + ')';
83640                     });
83641
83642                 buttonsEnter
83643                     .append('rect')
83644                     .attr('x', 4)
83645                     .attr('width', buttonWidth)
83646                     .attr('height', buttonHeight)
83647                     .on('click', click)
83648                     .on('mousedown', mousedown)
83649                     .on('mouseover', mouseover)
83650                     .on('mouseout', mouseout);
83651
83652                 buttonsEnter
83653                     .append('use')
83654                     .attr('class', 'operation-icon')
83655                     .attr('width', '20')
83656                     .attr('height', '20')
83657                     .attr('transform', function () { return 'translate(' + [2 * p, 5] + ')'; })
83658                     .attr('xlink:href', function (d) { return '#iD-operation-' + d.id; });
83659
83660                 // update
83661                 buttons = buttonsEnter
83662                     .merge(buttons)
83663                     .classed('disabled', function(d) { return d.disabled(); });
83664
83665
83666                 tooltip = d3_select('#id-container')
83667                     .append('div')
83668                     .attr('class', 'popover tooltip edit-menu-tooltip');
83669
83670                 tooltip
83671                     .append('div')
83672                     .attr('class', 'popover-inner');
83673
83674
83675                 function click(operation) {
83676                     event.stopPropagation();
83677                     if (operation.disabled()) { return; }
83678                     operation();
83679                     editMenu.close();
83680                 }
83681
83682                 function mousedown() {
83683                     event.stopPropagation();  // https://github.com/openstreetmap/iD/issues/1869
83684                 }
83685
83686                 function mouseover(d, i) {
83687                     var tipX, tipY;
83688
83689                     if (!isRTL) {
83690                         tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
83691                     } else {
83692                         tipX = viewport.left + origin[0] - 4 - tooltipWidth;
83693                     }
83694
83695                     if (tipX + tooltipWidth > viewport.right) {
83696                         // tip is going left-to-right and near right viewport edge, go left instead
83697                         tipX = viewport.left + origin[0] - 4 - tooltipWidth;
83698                     } else if (tipX < viewport.left) {
83699                         // tip is going right-to-left and near left viewport edge, go right instead
83700                         tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
83701                     }
83702
83703                     tipY = viewport.top + origin[1] + (i * buttonHeight);
83704                     if (tipY + tooltipHeight > viewport.bottom) {
83705                         // tip is near bottom viewport edge, shift upwards
83706                         tipY -= tipY + tooltipHeight - viewport.bottom;
83707                     }
83708
83709                     tooltip
83710                         .style('left', tipX + 'px')
83711                         .style('top', tipY + 'px')
83712                         .style('display', 'block')
83713                         .selectAll('.popover-inner')
83714                         .html(uiTooltipHtml(d.tooltip(), d.keys[0], d.title));
83715
83716                     // update disabled again, just in case tooltip and disabled state disagree
83717                     // https://github.com/openstreetmap/iD/issues/6296#issuecomment-489259027
83718                     d3_select(this.parentNode)
83719                         .classed('disabled', d.disabled());
83720
83721                 }
83722
83723                 function mouseout() {
83724                     tooltip.style('display', 'none');
83725                 }
83726             };
83727
83728
83729             editMenu.close = function () {
83730                 if (menu) {
83731                     menu
83732                         .style('pointer-events', 'none')
83733                         .transition()
83734                         .attr('opacity', 0)
83735                         .remove();
83736                 }
83737
83738                 if (tooltip) {
83739                     tooltip.remove();
83740                 }
83741             };
83742
83743
83744             editMenu.center = function(val) {
83745                 if (!arguments.length) { return center; }
83746                 center = val;
83747                 return editMenu;
83748             };
83749
83750
83751             return editMenu;
83752         }
83753
83754         function uiSelectionList(context, selectedIDs) {
83755
83756             function selectEntity(entity) {
83757                 context.enter(modeSelect(context, [entity.id]));
83758             }
83759
83760
83761             function deselectEntity(entity) {
83762                 event.stopPropagation();
83763                 var index = selectedIDs.indexOf(entity.id);
83764                 if (index > -1) {
83765                     selectedIDs.splice(index, 1);
83766                 }
83767                 context.enter(modeSelect(context, selectedIDs));
83768             }
83769
83770
83771             function selectionList(selection) {
83772                 selection.classed('selection-list-pane', true);
83773
83774                 var header = selection
83775                     .append('div')
83776                     .attr('class', 'header fillL cf');
83777
83778                 header
83779                     .append('h3')
83780                     .text(t('inspector.multiselect'));
83781
83782                 var listWrap = selection
83783                     .append('div')
83784                     .attr('class', 'inspector-body');
83785
83786                 var list = listWrap
83787                     .append('div')
83788                     .attr('class', 'feature-list cf');
83789
83790
83791                 context.history()
83792                     .on('change.selectionList', function(difference) {
83793                         if (difference) { drawList(); }
83794                     });
83795
83796                 drawList();
83797
83798
83799                 function drawList() {
83800                     var entities = selectedIDs
83801                         .map(function(id) { return context.hasEntity(id); })
83802                         .filter(function(entity) { return entity; });
83803
83804                     var items = list.selectAll('.feature-list-item')
83805                         .data(entities, osmEntity.key);
83806
83807                     items.exit()
83808                         .remove();
83809
83810                     // Enter
83811                     var enter = items.enter()
83812                         .append('div')
83813                         .attr('class', 'feature-list-item')
83814                         .on('click', selectEntity);
83815
83816                     enter
83817                         .each(function(d) {
83818                             d3_select(this).on('mouseover', function() {
83819                                 utilHighlightEntities([d.id], true, context);
83820                             });
83821                             d3_select(this).on('mouseout', function() {
83822                                 utilHighlightEntities([d.id], false, context);
83823                             });
83824                         });
83825
83826                     var label = enter
83827                         .append('button')
83828                         .attr('class', 'label');
83829
83830                     enter
83831                         .append('button')
83832                         .attr('class', 'close')
83833                         .on('click', deselectEntity)
83834                         .call(svgIcon('#iD-icon-close'));
83835
83836                     label
83837                         .append('span')
83838                         .attr('class', 'entity-geom-icon')
83839                         .call(svgIcon('', 'pre-text'));
83840
83841                     label
83842                         .append('span')
83843                         .attr('class', 'entity-type');
83844
83845                     label
83846                         .append('span')
83847                         .attr('class', 'entity-name');
83848
83849                     // Update
83850                     items = items.merge(enter);
83851
83852                     items.selectAll('.entity-geom-icon use')
83853                         .attr('href', function() {
83854                             var entity = this.parentNode.parentNode.__data__;
83855                             return '#iD-icon-' + context.geometry(entity.id);
83856                         });
83857
83858                     items.selectAll('.entity-type')
83859                         .text(function(entity) { return context.presets().match(entity, context.graph()).name(); });
83860
83861                     items.selectAll('.entity-name')
83862                         .text(function(entity) { return utilDisplayName(entity); });
83863                 }
83864             }
83865
83866             return selectionList;
83867         }
83868
83869         function uiRadialMenu(context, operations) {
83870             var menu;
83871             var center = [0, 0];
83872             var tooltip;
83873
83874
83875             var radialMenu = function(selection) {
83876                 if (!operations.length) { return; }
83877
83878                 selection.node().parentNode.focus();
83879
83880                 function click(operation) {
83881                     event.stopPropagation();
83882                     if (operation.disabled()) { return; }
83883                     operation();
83884                     radialMenu.close();
83885                 }
83886
83887                 menu = selection
83888                     .append('g')
83889                     .attr('class', 'radial-menu')
83890                     .attr('transform', 'translate(' + center + ')')
83891                     .attr('opacity', 0);
83892
83893                 menu
83894                     .transition()
83895                     .attr('opacity', 1);
83896
83897                 var r = 50;
83898                 var a = Math.PI / 4;
83899                 var a0 = -Math.PI / 4;
83900                 var a1 = a0 + (operations.length - 1) * a;
83901
83902                 menu
83903                     .append('path')
83904                     .attr('class', 'radial-menu-background')
83905                     .attr('d', 'M' + r * Math.sin(a0) + ',' +
83906                                      r * Math.cos(a0) +
83907                               ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' +
83908                                      (r * Math.sin(a1) + 1e-3) + ',' +
83909                                      (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305)
83910                     .attr('stroke-width', 50)
83911                     .attr('stroke-linecap', 'round');
83912
83913                 var button = menu.selectAll()
83914                     .data(operations)
83915                     .enter()
83916                     .append('g')
83917                     .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; })
83918                     .classed('disabled', function(d) { return d.disabled(); })
83919                     .attr('transform', function(d, i) {
83920                         return 'translate(' + geoVecFloor([
83921                                 r * Math.sin(a0 + i * a),
83922                                 r * Math.cos(a0 + i * a)]).join(',') + ')';
83923                     });
83924
83925                 button
83926                     .append('circle')
83927                     .attr('r', 15)
83928                     .on('click', click)
83929                     .on('mousedown', mousedown)
83930                     .on('mouseover', mouseover)
83931                     .on('mouseout', mouseout);
83932
83933                 button
83934                     .append('use')
83935                     .attr('transform', 'translate(-10,-10)')
83936                     .attr('width', '20')
83937                     .attr('height', '20')
83938                     .attr('xlink:href', function(d) { return '#iD-operation-' + d.id; });
83939
83940                 tooltip = d3_select(document.body)
83941                     .append('div')
83942                     .attr('class', 'popover-inner radial-menu-tooltip');
83943
83944                 function mousedown() {
83945                     event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869
83946                 }
83947
83948                 function mouseover(d, i) {
83949                     var rect = context.surfaceRect();
83950                     var angle = a0 + i * a;
83951                     var top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px';
83952                     var left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px';
83953                     var bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px';
83954                     var right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px';
83955
83956                     tooltip
83957                         .style('top', null)
83958                         .style('left', null)
83959                         .style('bottom', null)
83960                         .style('right', null)
83961                         .style('display', 'block')
83962                         .html(uiTooltipHtml(d.tooltip(), d.keys[0]));
83963
83964                     if (i === 0) {
83965                         tooltip
83966                             .style('right', right)
83967                             .style('top', top);
83968                     } else if (i >= 4) {
83969                         tooltip
83970                             .style('left', left)
83971                             .style('bottom', bottom);
83972                     } else {
83973                         tooltip
83974                             .style('left', left)
83975                             .style('top', top);
83976                     }
83977                 }
83978
83979                 function mouseout() {
83980                     tooltip.style('display', 'none');
83981                 }
83982             };
83983
83984
83985             radialMenu.close = function() {
83986                 if (menu) {
83987                     menu
83988                         .style('pointer-events', 'none')
83989                         .transition()
83990                         .attr('opacity', 0)
83991                         .remove();
83992                 }
83993
83994                 if (tooltip) {
83995                     tooltip.remove();
83996                 }
83997             };
83998
83999
84000             radialMenu.center = function(_) {
84001                 if (!arguments.length) { return center; }
84002                 center = _;
84003                 return radialMenu;
84004             };
84005
84006
84007             return radialMenu;
84008         }
84009
84010         var _relatedParent;
84011
84012
84013         function modeSelect(context, selectedIDs) {
84014             var mode = {
84015                 id: 'select',
84016                 button: 'browse'
84017             };
84018
84019             var keybinding = utilKeybinding('select');
84020             var breatheBehavior = behaviorBreathe();
84021             var behaviors = [
84022                 behaviorCopy(context),
84023                 behaviorPaste(context),
84024                 breatheBehavior,
84025                 behaviorHover(context),
84026                 behaviorSelect(context),
84027                 behaviorLasso(context),
84028                 modeDragNode(context).restoreSelectedIDs(selectedIDs).behavior,
84029                 modeDragNote(context).behavior
84030             ];
84031             var editMenu;
84032             var _timeout = null;
84033             var _newFeature = false;
84034             var _suppressMenu = true;
84035             var _follow = false;
84036
84037
84038             var wrap = context.container()
84039                 .select('.inspector-wrap');
84040
84041
84042             function singular() {
84043                 if (selectedIDs && selectedIDs.length === 1) {
84044                     return context.hasEntity(selectedIDs[0]);
84045                 }
84046             }
84047
84048             function selectedEntities() {
84049                 return selectedIDs.map(function(id) {
84050                     return context.hasEntity(id);
84051                 }).filter(Boolean);
84052             }
84053
84054
84055             function checkSelectedIDs() {
84056                 var ids = [];
84057                 if (Array.isArray(selectedIDs)) {
84058                     ids = selectedIDs.filter(function(id) {
84059                         return context.hasEntity(id);
84060                     });
84061                 }
84062
84063                 if (!ids.length) {
84064                     context.enter(modeBrowse(context));
84065                     return false;
84066                 } else if ((selectedIDs.length > 1 && ids.length === 1) ||
84067                     (selectedIDs.length === 1 && ids.length > 1)) {
84068                     // switch between single- and multi-select UI
84069                     context.enter(modeSelect(context, ids));
84070                     return false;
84071                 }
84072
84073                 selectedIDs = ids;
84074                 return true;
84075             }
84076
84077
84078             // find the common parent ways for nextVertex, previousVertex
84079             function commonParents() {
84080                 var graph = context.graph();
84081                 var commonParents = [];
84082
84083                 for (var i = 0; i < selectedIDs.length; i++) {
84084                     var entity = context.hasEntity(selectedIDs[i]);
84085                     if (!entity || entity.geometry(graph) !== 'vertex') {
84086                         return [];  // selection includes some not vertexes
84087                     }
84088
84089                     var currParents = graph.parentWays(entity).map(function(w) { return w.id; });
84090                     if (!commonParents.length) {
84091                         commonParents = currParents;
84092                         continue;
84093                     }
84094
84095                     commonParents = utilArrayIntersection(commonParents, currParents);
84096                     if (!commonParents.length) {
84097                         return [];
84098                     }
84099                 }
84100
84101                 return commonParents;
84102             }
84103
84104
84105             function singularParent() {
84106                 var parents = commonParents();
84107                 if (!parents || parents.length === 0) {
84108                     _relatedParent = null;
84109                     return null;
84110                 }
84111
84112                 // relatedParent is used when we visit a vertex with multiple
84113                 // parents, and we want to remember which parent line we started on.
84114
84115                 if (parents.length === 1) {
84116                     _relatedParent = parents[0];  // remember this parent for later
84117                     return _relatedParent;
84118                 }
84119
84120                 if (parents.indexOf(_relatedParent) !== -1) {
84121                     return _relatedParent;   // prefer the previously seen parent
84122                 }
84123
84124                 return parents[0];
84125             }
84126
84127
84128             function closeMenu() {
84129                 if (editMenu) {
84130                     context.surface().call(editMenu.close);
84131                 }
84132             }
84133
84134
84135             function positionMenu() {
84136                 if (!editMenu) { return; }
84137
84138                 var entity = singular();
84139                 if (entity && context.geometry(entity.id) === 'relation') {
84140                     _suppressMenu = true;
84141                 } else {
84142                     var point = context.mouse();
84143                     var viewport = geoExtent(context.projection.clipExtent()).polygon();
84144
84145                     if (point && geoPointInPolygon(point, viewport)) {
84146                         editMenu.center(point);
84147                     } else {
84148                         _suppressMenu = true;
84149                     }
84150                 }
84151             }
84152
84153
84154             function showMenu() {
84155                 closeMenu();
84156                 if (editMenu) {
84157
84158                     // disable menu if in wide selection, for example
84159                     if (!context.map().editableDataEnabled()) { return; }
84160
84161                     context.surface().call(editMenu);
84162                 }
84163             }
84164
84165
84166             function toggleMenu() {
84167                 // deprecation warning - Radial Menu to be removed in iD v3
84168                 if (d3_select('.edit-menu, .radial-menu').empty()) {
84169                     positionMenu();
84170                     showMenu();
84171                 } else {
84172                     closeMenu();
84173                 }
84174             }
84175
84176
84177             mode.selectedIDs = function() {
84178                 return selectedIDs;
84179             };
84180
84181
84182             mode.zoomToSelected = function() {
84183                 context.map().zoomToEase(selectedEntities());
84184             };
84185
84186
84187             mode.reselect = function() {
84188                 if (!checkSelectedIDs()) { return; }
84189
84190                 var surfaceNode = context.surface().node();
84191                 if (surfaceNode.focus) {   // FF doesn't support it
84192                     surfaceNode.focus();
84193                 }
84194
84195                 positionMenu();
84196                 if (!_suppressMenu) {
84197                     showMenu();
84198                 }
84199             };
84200
84201
84202             mode.newFeature = function(val) {
84203                 if (!arguments.length) { return _newFeature; }
84204                 _newFeature = val;
84205                 return mode;
84206             };
84207
84208
84209             mode.suppressMenu = function(val) {
84210                 if (!arguments.length) { return _suppressMenu; }
84211                 _suppressMenu = val;
84212                 return mode;
84213             };
84214
84215
84216             mode.follow = function(val) {
84217                 if (!arguments.length) { return _follow; }
84218                 _follow = val;
84219                 return mode;
84220             };
84221
84222             var operations = [];
84223
84224             function loadOperations() {
84225
84226                 operations.forEach(function(operation) {
84227                     if (operation.behavior) {
84228                         context.uninstall(operation.behavior);
84229                     }
84230                 });
84231
84232                 operations = Object.values(Operations)
84233                     .map(function(o) { return o(selectedIDs, context); })
84234                     .filter(function(o) { return o.available() && o.id !== 'delete' && o.id !== 'downgrade'; });
84235
84236                 var downgradeOperation = operationDowngrade(selectedIDs, context);
84237                 // don't allow delete if downgrade is available
84238                 var lastOperation = !context.inIntro() && downgradeOperation.available() ? downgradeOperation : operationDelete(selectedIDs, context);
84239
84240                 // deprecation warning - Radial Menu to be removed in iD v3
84241                 var isRadialMenu = context.storage('edit-menu-style') === 'radial';
84242                 if (isRadialMenu) {
84243                     operations = operations.slice(0,7);
84244                     operations.unshift(lastOperation);
84245                 } else {
84246                     operations.push(lastOperation);
84247                 }
84248
84249                 operations.forEach(function(operation) {
84250                     if (operation.behavior) {
84251                         context.install(operation.behavior);
84252                     }
84253                 });
84254
84255                 // deprecation warning - Radial Menu to be removed in iD v3
84256                 editMenu = isRadialMenu
84257                     ? uiRadialMenu(context, operations)
84258                     : uiEditMenu(context, operations);
84259
84260             }
84261
84262
84263             mode.enter = function() {
84264                 if (!checkSelectedIDs()) { return; }
84265
84266                 context.features().forceVisible(selectedIDs);
84267
84268                 loadOperations();
84269
84270                 behaviors.forEach(context.install);
84271
84272                 keybinding
84273                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
84274                     .on(['[', 'pgup'], previousVertex)
84275                     .on([']', 'pgdown'], nextVertex)
84276                     .on(['{', uiCmd('⌘['), 'home'], firstVertex)
84277                     .on(['}', uiCmd('⌘]'), 'end'], lastVertex)
84278                     .on(['\\', 'pause'], nextParent)
84279                     .on('⎋', esc, true)
84280                     .on('space', toggleMenu);
84281
84282                 d3_select(document)
84283                     .call(keybinding);
84284
84285                 context.ui().sidebar
84286                     .select(singular() ? singular().id : null, _newFeature);
84287
84288                 context.history()
84289                     .on('change.select', function() {
84290                         loadOperations();
84291                         // reselect after change in case relation members were removed or added
84292                         selectElements();
84293                     })
84294                     .on('undone.select', update)
84295                     .on('redone.select', update);
84296
84297                 context.map()
84298                     .on('move.select', closeMenu)
84299                     .on('drawn.select', selectElements)
84300                     .on('crossEditableZoom.select', function() {
84301                         selectElements();
84302                         breatheBehavior.restartIfNeeded(context.surface());
84303                     });
84304
84305                 context.surface()
84306                     .on('dblclick.select', dblclick);
84307
84308
84309                 selectElements();
84310
84311                 if (selectedIDs.length > 1) {
84312                     var entities = uiSelectionList(context, selectedIDs);
84313                     context.ui().sidebar.show(entities);
84314                 }
84315
84316                 if (_follow) {
84317                     var extent = geoExtent();
84318                     var graph = context.graph();
84319                     selectedIDs.forEach(function(id) {
84320                         var entity = context.entity(id);
84321                         extent._extend(entity.extent(graph));
84322                     });
84323
84324                     var loc = extent.center();
84325                     context.map().centerEase(loc);
84326                 } else if (singular() && singular().type === 'way') {
84327                     context.map().pan([0,0]);  // full redraw, to adjust z-sorting #2914
84328                 }
84329
84330                 _timeout = window.setTimeout(function() {
84331                     positionMenu();
84332                     if (!_suppressMenu) {
84333                         showMenu();
84334                     }
84335                 }, 270);  /* after any centerEase completes */
84336
84337
84338                 function update() {
84339                     closeMenu();
84340                     checkSelectedIDs();
84341                 }
84342
84343
84344                 function dblclick() {
84345                     if (!context.map().withinEditableZoom()) { return; }
84346
84347                     var target = d3_select(event.target);
84348
84349                     var datum = target.datum();
84350                     var entity = datum && datum.properties && datum.properties.entity;
84351                     if (!entity) { return; }
84352
84353                     if (entity instanceof osmWay && target.classed('target')) {
84354                         var choice = geoChooseEdge(context.childNodes(entity), context.mouse(), context.projection);
84355                         var prev = entity.nodes[choice.index - 1];
84356                         var next = entity.nodes[choice.index];
84357
84358                         context.perform(
84359                             actionAddMidpoint({ loc: choice.loc, edge: [prev, next] }, osmNode()),
84360                             t('operations.add.annotation.vertex')
84361                         );
84362
84363                         event.preventDefault();
84364                         event.stopPropagation();
84365
84366                     } else if (entity.type === 'midpoint') {
84367                         context.perform(
84368                             actionAddMidpoint({ loc: entity.loc, edge: entity.edge }, osmNode()),
84369                             t('operations.add.annotation.vertex'));
84370
84371                         event.preventDefault();
84372                         event.stopPropagation();
84373                     }
84374                 }
84375
84376
84377                 function selectElements() {
84378                     if (!checkSelectedIDs()) { return; }
84379
84380                     var surface = context.surface();
84381                     var entity = singular();
84382
84383                     if (entity && context.geometry(entity.id) === 'relation') {
84384                         _suppressMenu = true;
84385                     }
84386
84387                     surface.selectAll('.selected-member')
84388                         .classed('selected-member', false);
84389
84390                     surface.selectAll('.selected')
84391                         .classed('selected', false);
84392
84393                     surface.selectAll('.related')
84394                         .classed('related', false);
84395
84396                     singularParent();
84397                     if (_relatedParent) {
84398                         surface.selectAll(utilEntitySelector([_relatedParent]))
84399                             .classed('related', true);
84400                     }
84401
84402                     if (context.map().withinEditableZoom()) {
84403                         // Apply selection styling if not in wide selection
84404
84405                         surface
84406                             .selectAll(utilDeepMemberSelector(selectedIDs, context.graph(), true /* skipMultipolgonMembers */))
84407                             .classed('selected-member', true);
84408                         surface
84409                             .selectAll(utilEntityOrDeepMemberSelector(selectedIDs, context.graph()))
84410                             .classed('selected', true);
84411                     }
84412
84413                 }
84414
84415
84416                 function esc() {
84417                     if (d3_select('.combobox').size()) { return; }
84418                     context.enter(modeBrowse(context));
84419                 }
84420
84421
84422                 function firstVertex() {
84423                     event.preventDefault();
84424                     var entity = singular();
84425                     var parent = singularParent();
84426                     var way;
84427
84428                     if (entity && entity.type === 'way') {
84429                         way = entity;
84430                     } else if (parent) {
84431                         way = context.entity(parent);
84432                     }
84433
84434                     if (way) {
84435                         context.enter(
84436                             modeSelect(context, [way.first()]).follow(true)
84437                         );
84438                     }
84439                 }
84440
84441
84442                 function lastVertex() {
84443                     event.preventDefault();
84444                     var entity = singular();
84445                     var parent = singularParent();
84446                     var way;
84447
84448                     if (entity && entity.type === 'way') {
84449                         way = entity;
84450                     } else if (parent) {
84451                         way = context.entity(parent);
84452                     }
84453
84454                     if (way) {
84455                         context.enter(
84456                             modeSelect(context, [way.last()]).follow(true)
84457                         );
84458                     }
84459                 }
84460
84461
84462                 function previousVertex() {
84463                     event.preventDefault();
84464                     var parent = singularParent();
84465                     if (!parent) { return; }
84466
84467                     var way = context.entity(parent);
84468                     var length = way.nodes.length;
84469                     var curr = way.nodes.indexOf(selectedIDs[0]);
84470                     var index = -1;
84471
84472                     if (curr > 0) {
84473                         index = curr - 1;
84474                     } else if (way.isClosed()) {
84475                         index = length - 2;
84476                     }
84477
84478                     if (index !== -1) {
84479                         context.enter(
84480                             modeSelect(context, [way.nodes[index]]).follow(true)
84481                         );
84482                     }
84483                 }
84484
84485
84486                 function nextVertex() {
84487                     event.preventDefault();
84488                     var parent = singularParent();
84489                     if (!parent) { return; }
84490
84491                     var way = context.entity(parent);
84492                     var length = way.nodes.length;
84493                     var curr = way.nodes.indexOf(selectedIDs[0]);
84494                     var index = -1;
84495
84496                     if (curr < length - 1) {
84497                         index = curr + 1;
84498                     } else if (way.isClosed()) {
84499                         index = 0;
84500                     }
84501
84502                     if (index !== -1) {
84503                         context.enter(
84504                             modeSelect(context, [way.nodes[index]]).follow(true)
84505                         );
84506                     }
84507                 }
84508
84509
84510                 function nextParent() {
84511                     event.preventDefault();
84512                     var parents = commonParents();
84513                     if (!parents || parents.length < 2) { return; }
84514
84515                     var index = parents.indexOf(_relatedParent);
84516                     if (index < 0 || index > parents.length - 2) {
84517                         _relatedParent = parents[0];
84518                     } else {
84519                         _relatedParent = parents[index + 1];
84520                     }
84521
84522                     var surface = context.surface();
84523                     surface.selectAll('.related')
84524                         .classed('related', false);
84525
84526                     if (_relatedParent) {
84527                         surface.selectAll(utilEntitySelector([_relatedParent]))
84528                             .classed('related', true);
84529                     }
84530                 }
84531             };
84532
84533
84534             mode.exit = function() {
84535                 if (_timeout) { window.clearTimeout(_timeout); }
84536
84537                 operations.forEach(function(operation) {
84538                     if (operation.behavior) {
84539                         context.uninstall(operation.behavior);
84540                     }
84541                 });
84542
84543                 behaviors.forEach(context.uninstall);
84544
84545                 d3_select(document)
84546                     .call(keybinding.unbind);
84547
84548                 closeMenu();
84549                 editMenu = undefined;
84550
84551                 context.history()
84552                     .on('change.select', null)
84553                     .on('undone.select', null)
84554                     .on('redone.select', null);
84555
84556                 var surface = context.surface();
84557
84558                 surface
84559                     .on('dblclick.select', null);
84560
84561                 surface
84562                     .selectAll('.selected-member')
84563                     .classed('selected-member', false);
84564
84565                 surface
84566                     .selectAll('.selected')
84567                     .classed('selected', false);
84568
84569                 surface
84570                     .selectAll('.highlighted')
84571                     .classed('highlighted', false);
84572
84573                 surface
84574                     .selectAll('.related')
84575                     .classed('related', false);
84576
84577                 context.map().on('drawn.select', null);
84578                 context.ui().sidebar.hide();
84579                 context.features().forceVisible([]);
84580
84581                 var entity = singular();
84582                 if (_newFeature && entity && entity.type === 'relation' &&
84583                     // no tags
84584                     Object.keys(entity.tags).length === 0 &&
84585                     // no parent relations
84586                     context.graph().parentRelations(entity).length === 0 &&
84587                     // no members or one member with no role
84588                     (entity.members.length === 0 || (entity.members.length === 1 && !entity.members[0].role))
84589                 ) {
84590                     // the user added this relation but didn't edit it at all, so just delete it
84591                     var deleteAction = actionDeleteRelation(entity.id, true /* don't delete untagged members */);
84592                     context.perform(deleteAction, t('operations.delete.annotation.relation'));
84593                 }
84594             };
84595
84596
84597             return mode;
84598         }
84599
84600         function uiLasso(context) {
84601             var group, polygon;
84602
84603             lasso.coordinates = [];
84604
84605             function lasso(selection) {
84606                 context.container()
84607                     .classed('lasso', true);
84608
84609                 group = selection
84610                     .append('g')
84611                     .attr('class', 'lasso hide');
84612
84613                 polygon = group
84614                     .append('path')
84615                     .attr('class', 'lasso-path');
84616
84617                 group
84618                     .call(uiToggle(true));
84619             }
84620
84621
84622             function draw() {
84623                 if (polygon) {
84624                     polygon.data([lasso.coordinates])
84625                         .attr('d', function(d) { return 'M' + d.join(' L') + ' Z'; });
84626                 }
84627             }
84628
84629
84630             lasso.extent = function () {
84631                 return lasso.coordinates.reduce(function(extent, point) {
84632                     return extent.extend(geoExtent(point));
84633                 }, geoExtent());
84634             };
84635
84636
84637             lasso.p = function(_) {
84638                 if (!arguments.length) { return lasso; }
84639                 lasso.coordinates.push(_);
84640                 draw();
84641                 return lasso;
84642             };
84643
84644
84645             lasso.close = function() {
84646                 if (group) {
84647                     group.call(uiToggle(false, function() {
84648                         d3_select(this).remove();
84649                     }));
84650                 }
84651                 context.container().classed('lasso', false);
84652             };
84653
84654
84655             return lasso;
84656         }
84657
84658         function behaviorLasso(context) {
84659
84660             var behavior = function(selection) {
84661                 var lasso;
84662
84663
84664                 function mousedown() {
84665                     var button = 0;  // left
84666                     if (event.button === button && event.shiftKey === true) {
84667                         lasso = null;
84668
84669                         d3_select(window)
84670                             .on('mousemove.lasso', mousemove)
84671                             .on('mouseup.lasso', mouseup);
84672
84673                         event.stopPropagation();
84674                     }
84675                 }
84676
84677
84678                 function mousemove() {
84679                     if (!lasso) {
84680                         lasso = uiLasso(context);
84681                         context.surface().call(lasso);
84682                     }
84683
84684                     lasso.p(context.mouse());
84685                 }
84686
84687
84688                 function normalize(a, b) {
84689                     return [
84690                         [Math.min(a[0], b[0]), Math.min(a[1], b[1])],
84691                         [Math.max(a[0], b[0]), Math.max(a[1], b[1])]
84692                     ];
84693                 }
84694
84695
84696                 function lassoed() {
84697                     if (!lasso) { return []; }
84698
84699                     var graph = context.graph();
84700                     var bounds = lasso.extent().map(context.projection.invert);
84701                     var extent = geoExtent(normalize(bounds[0], bounds[1]));
84702
84703                     var intersects = context.intersects(extent).filter(function(entity) {
84704                         return entity.type === 'node' &&
84705                             geoPointInPolygon(context.projection(entity.loc), lasso.coordinates) &&
84706                             !context.features().isHidden(entity, graph, entity.geometry(graph));
84707                     });
84708
84709                     return intersects.map(function(entity) { return entity.id; });
84710                 }
84711
84712
84713                 function mouseup() {
84714                     d3_select(window)
84715                         .on('mousemove.lasso', null)
84716                         .on('mouseup.lasso', null);
84717
84718                     if (!lasso) { return; }
84719
84720                     var ids = lassoed();
84721                     lasso.close();
84722
84723                     if (ids.length) {
84724                         context.enter(modeSelect(context, ids));
84725                     }
84726                 }
84727
84728                 selection
84729                     .on('mousedown.lasso', mousedown);
84730             };
84731
84732
84733             behavior.off = function(selection) {
84734                 selection.on('mousedown.lasso', null);
84735             };
84736
84737
84738             return behavior;
84739         }
84740
84741         function modeBrowse(context) {
84742             var mode = {
84743                 button: 'browse',
84744                 id: 'browse',
84745                 title: t('modes.browse.title'),
84746                 description: t('modes.browse.description')
84747             }, sidebar;
84748
84749             var behaviors = [
84750                 behaviorPaste(context),
84751                 behaviorHover(context).on('hover', context.ui().sidebar.hover),
84752                 behaviorSelect(context),
84753                 behaviorLasso(context),
84754                 modeDragNode(context).behavior,
84755                 modeDragNote(context).behavior
84756             ];
84757
84758
84759             mode.enter = function() {
84760                 behaviors.forEach(context.install);
84761
84762                 // Get focus on the body.
84763                 if (document.activeElement && document.activeElement.blur) {
84764                     document.activeElement.blur();
84765                 }
84766
84767                 if (sidebar) {
84768                     context.ui().sidebar.show(sidebar);
84769                 } else {
84770                     context.ui().sidebar.select(null);
84771                 }
84772             };
84773
84774
84775             mode.exit = function() {
84776                 context.ui().sidebar.hover.cancel();
84777                 behaviors.forEach(context.uninstall);
84778
84779                 if (sidebar) {
84780                     context.ui().sidebar.hide();
84781                 }
84782             };
84783
84784
84785             mode.sidebar = function(_) {
84786                 if (!arguments.length) { return sidebar; }
84787                 sidebar = _;
84788                 return mode;
84789             };
84790
84791
84792             return mode;
84793         }
84794
84795         function behaviorAddWay(context) {
84796             var dispatch$1 = dispatch('start', 'startFromWay', 'startFromNode');
84797             var draw = behaviorDraw(context);
84798
84799             function behavior(surface) {
84800                 draw.on('click', function() { dispatch$1.apply('start', this, arguments); })
84801                     .on('clickWay', function() { dispatch$1.apply('startFromWay', this, arguments); })
84802                     .on('clickNode', function() { dispatch$1.apply('startFromNode', this, arguments); })
84803                     .on('cancel', behavior.cancel)
84804                     .on('finish', behavior.cancel);
84805
84806                 context.map()
84807                     .dblclickEnable(false);
84808
84809                 surface.call(draw);
84810             }
84811
84812
84813             behavior.off = function(surface) {
84814                 surface.call(draw.off);
84815             };
84816
84817
84818             behavior.cancel = function() {
84819                 window.setTimeout(function() {
84820                     context.map().dblclickEnable(true);
84821                 }, 1000);
84822
84823                 context.enter(modeBrowse(context));
84824             };
84825
84826
84827             behavior.tail = function(text) {
84828                 draw.tail(text);
84829                 return behavior;
84830             };
84831
84832
84833             return utilRebind(behavior, dispatch$1, 'on');
84834         }
84835
84836         function behaviorHash(context) {
84837             var s0 = null; // cached window.location.hash
84838             var lat = 90 - 1e-8; // allowable latitude range
84839
84840
84841             var parser = function(map, s) {
84842                 var q = utilStringQs(s);
84843                 var args = (q.map || '').split('/').map(Number);
84844
84845                 if (args.length < 3 || args.some(isNaN)) {
84846                     return true; // replace bogus hash
84847
84848                 } else if (s !== formatter(map).slice(1)) {   // hash has changed
84849                     var mode = context.mode();
84850                     var dist = geoSphericalDistance(map.center(), [args[2], args[1]]);
84851                     var maxdist = 500;
84852
84853                     // Don't allow the hash location to change too much while drawing
84854                     // This can happen if the user accidently hit the back button.  #3996
84855                     if (mode && mode.id.match(/^draw/) !== null && dist > maxdist) {
84856                         context.enter(modeBrowse(context));
84857                     }
84858
84859                     map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]);
84860                 }
84861             };
84862
84863
84864             var formatter = function(map) {
84865                 var center = map.center();
84866                 var zoom = map.zoom();
84867                 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
84868                 var q = utilObjectOmit(utilStringQs(window.location.hash.substring(1)),
84869                     ['comment', 'source', 'hashtags', 'walkthrough']
84870                 );
84871                 var newParams = {};
84872
84873                 delete q.id;
84874                 var selected = context.selectedIDs().filter(function(id) {
84875                     return !context.entity(id).isNew();
84876                 });
84877                 if (selected.length) {
84878                     newParams.id = selected.join(',');
84879                 }
84880
84881                 newParams.map = zoom.toFixed(2) +
84882                     '/' + center[1].toFixed(precision) +
84883                     '/' + center[0].toFixed(precision);
84884
84885                 return '#' + utilQsString(Object.assign(q, newParams), true);
84886             };
84887
84888
84889             function update() {
84890                 if (context.inIntro()) { return; }
84891                 var s1 = formatter(context.map());
84892                 if (s0 !== s1) {
84893                     window.location.replace(s0 = s1);  // don't recenter the map!
84894                 }
84895             }
84896
84897
84898             var throttledUpdate = throttle(update, 500);
84899
84900
84901             function hashchange() {
84902                 if (window.location.hash === s0) { return; }  // ignore spurious hashchange events
84903                 if (parser(context.map(), (s0 = window.location.hash).substring(1))) {
84904                     update(); // replace bogus hash
84905                 }
84906             }
84907
84908
84909             function behavior() {
84910                 context.map()
84911                     .on('move.hash', throttledUpdate);
84912
84913                 context
84914                     .on('enter.hash', throttledUpdate);
84915
84916                 d3_select(window)
84917                     .on('hashchange.hash', hashchange);
84918
84919                 if (window.location.hash) {
84920                     var q = utilStringQs(window.location.hash.substring(1));
84921
84922                     if (q.id) {
84923                         context.zoomToEntity(q.id.split(',')[0], !q.map);
84924                     }
84925
84926                     // Store these here instead of updating local storage since local
84927                     // storage could be flushed if the user discards pending changes
84928                     if (q.comment)  { behavior.comment = q.comment; }
84929                     if (q.source)   { behavior.source = q.source; }
84930                     if (q.hashtags) { behavior.hashtags = q.hashtags; }
84931
84932                     if (q.walkthrough === 'true') {
84933                         behavior.startWalkthrough = true;
84934                     }
84935
84936                     hashchange();
84937
84938                     if (q.map) {
84939                         behavior.hadHash = true;
84940                     }
84941                 }
84942             }
84943
84944
84945             behavior.off = function() {
84946                 throttledUpdate.cancel();
84947
84948                 context.map()
84949                     .on('move.hash', null);
84950
84951                 context
84952                     .on('enter.hash', null);
84953
84954                 d3_select(window)
84955                     .on('hashchange.hash', null);
84956
84957                 window.location.hash = '';
84958             };
84959
84960
84961             return behavior;
84962         }
84963
84964         /*
84965             iD.coreDifference represents the difference between two graphs.
84966             It knows how to calculate the set of entities that were
84967             created, modified, or deleted, and also contains the logic
84968             for recursively extending a difference to the complete set
84969             of entities that will require a redraw, taking into account
84970             child and parent relationships.
84971          */
84972         function coreDifference(base, head) {
84973             var _changes = {};
84974             var _didChange = {};  // 'addition', 'deletion', 'geometry', 'properties'
84975             var _diff = {};
84976
84977             function checkEntityID(id) {
84978                 var h = head.entities[id];
84979                 var b = base.entities[id];
84980
84981                 if (h === b) { return; }
84982                 if (_changes[id]) { return; }
84983
84984                 if (!h && b) {
84985                     _changes[id] = { base: b, head: h };
84986                     _didChange.deletion = true;
84987                     return;
84988                 }
84989                 if (h && !b) {
84990                     _changes[id] = { base: b, head: h };
84991                     _didChange.addition = true;
84992                     return;
84993                 }
84994
84995                 if (h && b) {
84996                     if (h.members && b.members && !fastDeepEqual(h.members, b.members)) {
84997                         _changes[id] = { base: b, head: h };
84998                         _didChange.geometry = true;
84999                         _didChange.properties = true;
85000                         return;
85001                     }
85002                     if (h.loc && b.loc && !geoVecEqual(h.loc, b.loc)) {
85003                         _changes[id] = { base: b, head: h };
85004                         _didChange.geometry = true;
85005                     }
85006                     if (h.nodes && b.nodes && !fastDeepEqual(h.nodes, b.nodes)) {
85007                         _changes[id] = { base: b, head: h };
85008                         _didChange.geometry = true;
85009                     }
85010                     if (h.tags && b.tags && !fastDeepEqual(h.tags, b.tags)) {
85011                         _changes[id] = { base: b, head: h };
85012                         _didChange.properties = true;
85013                     }
85014                 }
85015             }
85016
85017             Object.keys(head.entities).forEach(checkEntityID);
85018             Object.keys(base.entities).forEach(checkEntityID);
85019
85020
85021             _diff.length = function length() {
85022                 return Object.keys(_changes).length;
85023             };
85024
85025
85026             _diff.changes = function changes() {
85027                 return _changes;
85028             };
85029
85030             _diff.didChange = _didChange;
85031
85032
85033             // pass true to include affected relation members
85034             _diff.extantIDs = function extantIDs(includeRelMembers) {
85035                 var result = new Set();
85036                 Object.keys(_changes).forEach(function(id) {
85037                     if (_changes[id].head) {
85038                         result.add(id);
85039                     }
85040
85041                     var h = _changes[id].head;
85042                     var b = _changes[id].base;
85043                     var entity = h || b;
85044
85045                     if (includeRelMembers && entity.type === 'relation') {
85046                         var mh = h ? h.members.map(function(m) { return m.id; }) : [];
85047                         var mb = b ? b.members.map(function(m) { return m.id; }) : [];
85048                         utilArrayUnion(mh, mb).forEach(function(memberID) {
85049                             if (head.hasEntity(memberID)) {
85050                                 result.add(memberID);
85051                             }
85052                         });
85053                     }
85054                 });
85055
85056                 return Array.from(result);
85057             };
85058
85059
85060             _diff.modified = function modified() {
85061                 var result = [];
85062                 Object.values(_changes).forEach(function(change) {
85063                     if (change.base && change.head) {
85064                         result.push(change.head);
85065                     }
85066                 });
85067                 return result;
85068             };
85069
85070
85071             _diff.created = function created() {
85072                 var result = [];
85073                 Object.values(_changes).forEach(function(change) {
85074                     if (!change.base && change.head) {
85075                         result.push(change.head);
85076                     }
85077                 });
85078                 return result;
85079             };
85080
85081
85082             _diff.deleted = function deleted() {
85083                 var result = [];
85084                 Object.values(_changes).forEach(function(change) {
85085                     if (change.base && !change.head) {
85086                         result.push(change.base);
85087                     }
85088                 });
85089                 return result;
85090             };
85091
85092
85093             _diff.summary = function summary() {
85094                 var relevant = {};
85095
85096                 var keys = Object.keys(_changes);
85097                 for (var i = 0; i < keys.length; i++) {
85098                     var change = _changes[keys[i]];
85099
85100                     if (change.head && change.head.geometry(head) !== 'vertex') {
85101                         addEntity(change.head, head, change.base ? 'modified' : 'created');
85102
85103                     } else if (change.base && change.base.geometry(base) !== 'vertex') {
85104                         addEntity(change.base, base, 'deleted');
85105
85106                     } else if (change.base && change.head) { // modified vertex
85107                         var moved    = !fastDeepEqual(change.base.loc,  change.head.loc);
85108                         var retagged = !fastDeepEqual(change.base.tags, change.head.tags);
85109
85110                         if (moved) {
85111                             addParents(change.head);
85112                         }
85113
85114                         if (retagged || (moved && change.head.hasInterestingTags())) {
85115                             addEntity(change.head, head, 'modified');
85116                         }
85117
85118                     } else if (change.head && change.head.hasInterestingTags()) { // created vertex
85119                         addEntity(change.head, head, 'created');
85120
85121                     } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex
85122                         addEntity(change.base, base, 'deleted');
85123                     }
85124                 }
85125
85126                 return Object.values(relevant);
85127
85128
85129                 function addEntity(entity, graph, changeType) {
85130                     relevant[entity.id] = {
85131                         entity: entity,
85132                         graph: graph,
85133                         changeType: changeType
85134                     };
85135                 }
85136
85137                 function addParents(entity) {
85138                     var parents = head.parentWays(entity);
85139                     for (var j = parents.length - 1; j >= 0; j--) {
85140                         var parent = parents[j];
85141                         if (!(parent.id in relevant)) {
85142                             addEntity(parent, head, 'modified');
85143                         }
85144                     }
85145                 }
85146             };
85147
85148
85149             // returns complete set of entities that require a redraw
85150             //  (optionally within given `extent`)
85151             _diff.complete = function complete(extent) {
85152                 var result = {};
85153                 var id, change;
85154
85155                 for (id in _changes) {
85156                     change = _changes[id];
85157
85158                     var h = change.head;
85159                     var b = change.base;
85160                     var entity = h || b;
85161                     var i;
85162
85163                     if (extent &&
85164                         (!h || !h.intersects(extent, head)) &&
85165                         (!b || !b.intersects(extent, base)))
85166                         { continue; }
85167
85168                     result[id] = h;
85169
85170                     if (entity.type === 'way') {
85171                         var nh = h ? h.nodes : [];
85172                         var nb = b ? b.nodes : [];
85173                         var diff;
85174
85175                         diff = utilArrayDifference(nh, nb);
85176                         for (i = 0; i < diff.length; i++) {
85177                             result[diff[i]] = head.hasEntity(diff[i]);
85178                         }
85179
85180                         diff = utilArrayDifference(nb, nh);
85181                         for (i = 0; i < diff.length; i++) {
85182                             result[diff[i]] = head.hasEntity(diff[i]);
85183                         }
85184                     }
85185
85186                     if (entity.type === 'relation' && entity.isMultipolygon()) {
85187                         var mh = h ? h.members.map(function(m) { return m.id; }) : [];
85188                         var mb = b ? b.members.map(function(m) { return m.id; }) : [];
85189                         var ids = utilArrayUnion(mh, mb);
85190                         for (i = 0; i < ids.length; i++) {
85191                             var member = head.hasEntity(ids[i]);
85192                             if (!member) { continue; }   // not downloaded
85193                             if (extent && !member.intersects(extent, head)) { continue; }   // not visible
85194                             result[ids[i]] = member;
85195                         }
85196                     }
85197
85198                     addParents(head.parentWays(entity), result);
85199                     addParents(head.parentRelations(entity), result);
85200                 }
85201
85202                 return result;
85203
85204
85205                 function addParents(parents, result) {
85206                     for (var i = 0; i < parents.length; i++) {
85207                         var parent = parents[i];
85208                         if (parent.id in result) { continue; }
85209
85210                         result[parent.id] = parent;
85211                         addParents(head.parentRelations(parent), result);
85212                     }
85213                 }
85214             };
85215
85216
85217             return _diff;
85218         }
85219
85220         function coreTree(head) {
85221             var rtree = new RBush();
85222             var bboxes = {};
85223             var tree = {};
85224
85225
85226             function entityBBox(entity) {
85227                 var bbox = entity.extent(head).bbox();
85228                 bbox.id = entity.id;
85229                 bboxes[entity.id] = bbox;
85230                 return bbox;
85231             }
85232
85233
85234             function updateParents(entity, insertions, memo) {
85235                 head.parentWays(entity).forEach(function(way) {
85236                     if (bboxes[way.id]) {
85237                         rtree.remove(bboxes[way.id]);
85238                         insertions[way.id] = way;
85239                     }
85240                     updateParents(way, insertions, memo);
85241                 });
85242
85243                 head.parentRelations(entity).forEach(function(relation) {
85244                     if (memo[entity.id]) { return; }
85245                     memo[entity.id] = true;
85246                     if (bboxes[relation.id]) {
85247                         rtree.remove(bboxes[relation.id]);
85248                         insertions[relation.id] = relation;
85249                     }
85250                     updateParents(relation, insertions, memo);
85251                 });
85252             }
85253
85254
85255             tree.rebase = function(entities, force) {
85256                 var insertions = {};
85257
85258                 for (var i = 0; i < entities.length; i++) {
85259                     var entity = entities[i];
85260                     if (!entity.visible) { continue; }
85261
85262                     if (head.entities.hasOwnProperty(entity.id) || bboxes[entity.id]) {
85263                         if (!force) {
85264                             continue;
85265                         } else if (bboxes[entity.id]) {
85266                             rtree.remove(bboxes[entity.id]);
85267                         }
85268                     }
85269
85270                     insertions[entity.id] = entity;
85271                     updateParents(entity, insertions, {});
85272                 }
85273
85274                 rtree.load(Object.values(insertions).map(entityBBox));
85275
85276                 return tree;
85277             };
85278
85279
85280             tree.intersects = function(extent, graph) {
85281                 if (graph !== head) {
85282                     var diff = coreDifference(head, graph);
85283                     var changed = diff.didChange;
85284
85285                     if (changed.addition || changed.deletion || changed.geometry) {
85286                         var insertions = {};
85287                         head = graph;
85288
85289                         if (changed.deletion) {
85290                             diff.deleted().forEach(function(entity) {
85291                                 rtree.remove(bboxes[entity.id]);
85292                                 delete bboxes[entity.id];
85293                             });
85294                         }
85295
85296                         if (changed.geometry) {
85297                             diff.modified().forEach(function(entity) {
85298                                 rtree.remove(bboxes[entity.id]);
85299                                 insertions[entity.id] = entity;
85300                                 updateParents(entity, insertions, {});
85301                             });
85302                         }
85303
85304                         if (changed.addition) {
85305                             diff.created().forEach(function(entity) {
85306                                 insertions[entity.id] = entity;
85307                             });
85308                         }
85309
85310                         rtree.load(Object.values(insertions).map(entityBBox));
85311                     }
85312                 }
85313
85314                 return rtree.search(extent.bbox())
85315                     .map(function(bbox) { return graph.entity(bbox.id); });
85316             };
85317
85318
85319             return tree;
85320         }
85321
85322         function uiModal(selection, blocking) {
85323           var this$1 = this;
85324
85325           var keybinding = utilKeybinding('modal');
85326           var previous = selection.select('div.modal');
85327           var animate = previous.empty();
85328
85329           previous.transition()
85330             .duration(200)
85331             .style('opacity', 0)
85332             .remove();
85333
85334           var shaded = selection
85335             .append('div')
85336             .attr('class', 'shaded')
85337             .style('opacity', 0);
85338
85339           shaded.close = function () {
85340             shaded
85341               .transition()
85342               .duration(200)
85343               .style('opacity',0)
85344               .remove();
85345
85346             modal
85347               .transition()
85348               .duration(200)
85349               .style('top','0px');
85350
85351             d3_select(document)
85352               .call(keybinding.unbind);
85353           };
85354
85355
85356           var modal = shaded
85357             .append('div')
85358             .attr('class', 'modal fillL');
85359
85360           if (!blocking) {
85361             shaded.on('click.remove-modal', function () {
85362               if (event.target === this$1) {
85363                 shaded.close();
85364               }
85365             });
85366
85367             modal
85368               .append('button')
85369               .attr('class', 'close')
85370               .on('click', shaded.close)
85371               .call(svgIcon('#iD-icon-close'));
85372
85373             keybinding
85374               .on('⌫', shaded.close)
85375               .on('⎋', shaded.close);
85376
85377             d3_select(document)
85378               .call(keybinding);
85379           }
85380
85381           modal
85382             .append('div')
85383             .attr('class', 'content');
85384
85385           if (animate) {
85386             shaded.transition().style('opacity', 1);
85387           } else {
85388             shaded.style('opacity', 1);
85389           }
85390
85391           return shaded;
85392         }
85393
85394         function uiLoading(context) {
85395           var arguments$1 = arguments;
85396
85397           var _modalSelection = d3_select(null);
85398           var _message = '';
85399           var _blocking = false;
85400
85401
85402           var loading = function (selection) {
85403             _modalSelection = uiModal(selection, _blocking);
85404
85405             var loadertext = _modalSelection.select('.content')
85406               .classed('loading-modal', true)
85407               .append('div')
85408               .attr('class', 'modal-section fillL');
85409
85410             loadertext
85411               .append('img')
85412               .attr('class', 'loader')
85413               .attr('src', context.imagePath('loader-white.gif'));
85414
85415             loadertext
85416               .append('h3')
85417               .text(_message);
85418
85419             _modalSelection.select('button.close')
85420               .attr('class', 'hide');
85421
85422             return loading;
85423           };
85424
85425
85426           loading.message = function (val) {
85427             if (!arguments$1.length) { return _message; }
85428             _message = val;
85429             return loading;
85430           };
85431
85432
85433           loading.blocking = function (val) {
85434             if (!arguments$1.length) { return _blocking; }
85435             _blocking = val;
85436             return loading;
85437           };
85438
85439
85440           loading.close = function () {
85441             _modalSelection.remove();
85442           };
85443
85444
85445           return loading;
85446         }
85447
85448         function coreHistory(context) {
85449             var dispatch$1 = dispatch('change', 'merge', 'restore', 'undone', 'redone');
85450             var lock = utilSessionMutex('lock');
85451
85452             // restorable if iD not open in another window/tab and a saved history exists in localStorage
85453             var _hasUnresolvedRestorableChanges = lock.lock() && !!context.storage(getKey('saved_history'));
85454
85455             var duration = 150;
85456             var _imageryUsed = [];
85457             var _photoOverlaysUsed = [];
85458             var _checkpoints = {};
85459             var _pausedGraph;
85460             var _stack;
85461             var _index;
85462             var _tree;
85463
85464
85465             // internal _act, accepts list of actions and eased time
85466             function _act(actions, t) {
85467                 actions = Array.prototype.slice.call(actions);
85468
85469                 var annotation;
85470                 if (typeof actions[actions.length - 1] !== 'function') {
85471                     annotation = actions.pop();
85472                 }
85473
85474                 var graph = _stack[_index].graph;
85475                 for (var i = 0; i < actions.length; i++) {
85476                     graph = actions[i](graph, t);
85477                 }
85478
85479                 return {
85480                     graph: graph,
85481                     annotation: annotation,
85482                     imageryUsed: _imageryUsed,
85483                     photoOverlaysUsed: _photoOverlaysUsed,
85484                     transform: context.projection.transform(),
85485                     selectedIDs: context.selectedIDs()
85486                 };
85487             }
85488
85489
85490             // internal _perform with eased time
85491             function _perform(args, t) {
85492                 var previous = _stack[_index].graph;
85493                 _stack = _stack.slice(0, _index + 1);
85494                 var actionResult = _act(args, t);
85495                 _stack.push(actionResult);
85496                 _index++;
85497                 return change(previous);
85498             }
85499
85500
85501             // internal _replace with eased time
85502             function _replace(args, t) {
85503                 var previous = _stack[_index].graph;
85504                 // assert(_index == _stack.length - 1)
85505                 var actionResult = _act(args, t);
85506                 _stack[_index] = actionResult;
85507                 return change(previous);
85508             }
85509
85510
85511             // internal _overwrite with eased time
85512             function _overwrite(args, t) {
85513                 var previous = _stack[_index].graph;
85514                 if (_index > 0) {
85515                     _index--;
85516                     _stack.pop();
85517                 }
85518                 _stack = _stack.slice(0, _index + 1);
85519                 var actionResult = _act(args, t);
85520                 _stack.push(actionResult);
85521                 _index++;
85522                 return change(previous);
85523             }
85524
85525
85526             // determine difference and dispatch a change event
85527             function change(previous) {
85528                 var difference = coreDifference(previous, history.graph());
85529                 if (!_pausedGraph) {
85530                     dispatch$1.call('change', this, difference);
85531                 }
85532                 return difference;
85533             }
85534
85535
85536             // iD uses namespaced keys so multiple installations do not conflict
85537             function getKey(n) {
85538                 return 'iD_' + window.location.origin + '_' + n;
85539             }
85540
85541
85542             var history = {
85543
85544                 graph: function() {
85545                     return _stack[_index].graph;
85546                 },
85547
85548
85549                 tree: function() {
85550                     return _tree;
85551                 },
85552
85553
85554                 base: function() {
85555                     return _stack[0].graph;
85556                 },
85557
85558
85559                 merge: function(entities, extent) {
85560                     var stack = _stack.map(function(state) { return state.graph; });
85561                     _stack[0].graph.rebase(entities, stack, false);
85562                     _tree.rebase(entities, false);
85563
85564                     dispatch$1.call('merge', this, entities);
85565                 },
85566
85567
85568                 perform: function() {
85569                     // complete any transition already in progress
85570                     d3_select(document).interrupt('history.perform');
85571
85572                     var transitionable = false;
85573                     var action0 = arguments[0];
85574
85575                     if (arguments.length === 1 ||
85576                         (arguments.length === 2 && (typeof arguments[1] !== 'function'))) {
85577                         transitionable = !!action0.transitionable;
85578                     }
85579
85580                     if (transitionable) {
85581                         var origArguments = arguments;
85582                         d3_select(document)
85583                             .transition('history.perform')
85584                             .duration(duration)
85585                             .ease(linear$1)
85586                             .tween('history.tween', function() {
85587                                 return function(t) {
85588                                     if (t < 1) { _overwrite([action0], t); }
85589                                 };
85590                             })
85591                             .on('start', function() {
85592                                 _perform([action0], 0);
85593                             })
85594                             .on('end interrupt', function() {
85595                                 _overwrite(origArguments, 1);
85596                             });
85597
85598                     } else {
85599                         return _perform(arguments);
85600                     }
85601                 },
85602
85603
85604                 replace: function() {
85605                     d3_select(document).interrupt('history.perform');
85606                     return _replace(arguments, 1);
85607                 },
85608
85609
85610                 // Same as calling pop and then perform
85611                 overwrite: function() {
85612                     d3_select(document).interrupt('history.perform');
85613                     return _overwrite(arguments, 1);
85614                 },
85615
85616
85617                 pop: function(n) {
85618                     d3_select(document).interrupt('history.perform');
85619
85620                     var previous = _stack[_index].graph;
85621                     if (isNaN(+n) || +n < 0) {
85622                         n = 1;
85623                     }
85624                     while (n-- > 0 && _index > 0) {
85625                         _index--;
85626                         _stack.pop();
85627                     }
85628                     return change(previous);
85629                 },
85630
85631
85632                 // Back to the previous annotated state or _index = 0.
85633                 undo: function() {
85634                     d3_select(document).interrupt('history.perform');
85635
85636                     var previousStack = _stack[_index];
85637                     var previous = previousStack.graph;
85638                     while (_index > 0) {
85639                         _index--;
85640                         if (_stack[_index].annotation) { break; }
85641                     }
85642
85643                     dispatch$1.call('undone', this, _stack[_index], previousStack);
85644                     return change(previous);
85645                 },
85646
85647
85648                 // Forward to the next annotated state.
85649                 redo: function() {
85650                     d3_select(document).interrupt('history.perform');
85651
85652                     var previousStack = _stack[_index];
85653                     var previous = previousStack.graph;
85654                     var tryIndex = _index;
85655                     while (tryIndex < _stack.length - 1) {
85656                         tryIndex++;
85657                         if (_stack[tryIndex].annotation) {
85658                             _index = tryIndex;
85659                             dispatch$1.call('redone', this, _stack[_index], previousStack);
85660                             break;
85661                         }
85662                     }
85663
85664                     return change(previous);
85665                 },
85666
85667
85668                 pauseChangeDispatch: function() {
85669                     if (!_pausedGraph) {
85670                         _pausedGraph = _stack[_index].graph;
85671                     }
85672                 },
85673
85674
85675                 resumeChangeDispatch: function() {
85676                     if (_pausedGraph) {
85677                         var previous = _pausedGraph;
85678                         _pausedGraph = null;
85679                         return change(previous);
85680                     }
85681                 },
85682
85683
85684                 undoAnnotation: function() {
85685                     var i = _index;
85686                     while (i >= 0) {
85687                         if (_stack[i].annotation) { return _stack[i].annotation; }
85688                         i--;
85689                     }
85690                 },
85691
85692
85693                 redoAnnotation: function() {
85694                     var i = _index + 1;
85695                     while (i <= _stack.length - 1) {
85696                         if (_stack[i].annotation) { return _stack[i].annotation; }
85697                         i++;
85698                     }
85699                 },
85700
85701
85702                 intersects: function(extent) {
85703                     return _tree.intersects(extent, _stack[_index].graph);
85704                 },
85705
85706
85707                 difference: function() {
85708                     var base = _stack[0].graph;
85709                     var head = _stack[_index].graph;
85710                     return coreDifference(base, head);
85711                 },
85712
85713
85714                 changes: function(action) {
85715                     var base = _stack[0].graph;
85716                     var head = _stack[_index].graph;
85717
85718                     if (action) {
85719                         head = action(head);
85720                     }
85721
85722                     var difference = coreDifference(base, head);
85723
85724                     return {
85725                         modified: difference.modified(),
85726                         created: difference.created(),
85727                         deleted: difference.deleted()
85728                     };
85729                 },
85730
85731
85732                 hasChanges: function() {
85733                     return this.difference().length() > 0;
85734                 },
85735
85736
85737                 imageryUsed: function(sources) {
85738                     if (sources) {
85739                         _imageryUsed = sources;
85740                         return history;
85741                     } else {
85742                         var s = new Set();
85743                         _stack.slice(1, _index + 1).forEach(function(state) {
85744                             state.imageryUsed.forEach(function(source) {
85745                                 if (source !== 'Custom') {
85746                                     s.add(source);
85747                                 }
85748                             });
85749                         });
85750                         return Array.from(s);
85751                     }
85752                 },
85753
85754
85755                 photoOverlaysUsed: function(sources) {
85756                     if (sources) {
85757                         _photoOverlaysUsed = sources;
85758                         return history;
85759                     } else {
85760                         var s = new Set();
85761                         _stack.slice(1, _index + 1).forEach(function(state) {
85762                             if (state.photoOverlaysUsed && Array.isArray(state.photoOverlaysUsed)) {
85763                                 state.photoOverlaysUsed.forEach(function(photoOverlay) {
85764                                     s.add(photoOverlay);
85765                                 });
85766                             }
85767                         });
85768                         return Array.from(s);
85769                     }
85770                 },
85771
85772
85773                 // save the current history state
85774                 checkpoint: function(key) {
85775                     _checkpoints[key] = {
85776                         stack: _stack,
85777                         index: _index
85778                     };
85779                     return history;
85780                 },
85781
85782
85783                 // restore history state to a given checkpoint or reset completely
85784                 reset: function(key) {
85785                     if (key !== undefined && _checkpoints.hasOwnProperty(key)) {
85786                         _stack = _checkpoints[key].stack;
85787                         _index = _checkpoints[key].index;
85788                     } else {
85789                         _stack = [{graph: coreGraph()}];
85790                         _index = 0;
85791                         _tree = coreTree(_stack[0].graph);
85792                         _checkpoints = {};
85793                     }
85794                     dispatch$1.call('change');
85795                     return history;
85796                 },
85797
85798
85799                 // `toIntroGraph()` is used to export the intro graph used by the walkthrough.
85800                 //
85801                 // To use it:
85802                 //  1. Start the walkthrough.
85803                 //  2. Get to a "free editing" tutorial step
85804                 //  3. Make your edits to the walkthrough map
85805                 //  4. In your browser dev console run:
85806                 //        `id.history().toIntroGraph()`
85807                 //  5. This outputs stringified JSON to the browser console
85808                 //  6. Copy it to `data/intro_graph.json` and prettify it in your code editor
85809                 toIntroGraph: function() {
85810                     var nextID = { n: 0, r: 0, w: 0 };
85811                     var permIDs = {};
85812                     var graph = this.graph();
85813                     var baseEntities = {};
85814
85815                     // clone base entities..
85816                     Object.values(graph.base().entities).forEach(function(entity) {
85817                         var copy = copyIntroEntity(entity);
85818                         baseEntities[copy.id] = copy;
85819                     });
85820
85821                     // replace base entities with head entities..
85822                     Object.keys(graph.entities).forEach(function(id) {
85823                         var entity = graph.entities[id];
85824                         if (entity) {
85825                             var copy = copyIntroEntity(entity);
85826                             baseEntities[copy.id] = copy;
85827                         } else {
85828                             delete baseEntities[id];
85829                         }
85830                     });
85831
85832                     // swap temporary for permanent ids..
85833                     Object.values(baseEntities).forEach(function(entity) {
85834                         if (Array.isArray(entity.nodes)) {
85835                             entity.nodes = entity.nodes.map(function(node) {
85836                                 return permIDs[node] || node;
85837                             });
85838                         }
85839                         if (Array.isArray(entity.members)) {
85840                             entity.members = entity.members.map(function(member) {
85841                                 member.id = permIDs[member.id] || member.id;
85842                                 return member;
85843                             });
85844                         }
85845                     });
85846
85847                     return JSON.stringify({ dataIntroGraph: baseEntities });
85848
85849
85850                     function copyIntroEntity(source) {
85851                         var copy = utilObjectOmit(source, ['type', 'user', 'v', 'version', 'visible']);
85852
85853                         // Note: the copy is no longer an osmEntity, so it might not have `tags`
85854                         if (copy.tags && !Object.keys(copy.tags)) {
85855                             delete copy.tags;
85856                         }
85857
85858                         if (Array.isArray(copy.loc)) {
85859                             copy.loc[0] = +copy.loc[0].toFixed(6);
85860                             copy.loc[1] = +copy.loc[1].toFixed(6);
85861                         }
85862
85863                         var match = source.id.match(/([nrw])-\d*/);  // temporary id
85864                         if (match !== null) {
85865                             var nrw = match[1];
85866                             var permID;
85867                             do { permID = nrw + (++nextID[nrw]); }
85868                             while (baseEntities.hasOwnProperty(permID));
85869
85870                             copy.id = permIDs[source.id] = permID;
85871                         }
85872                         return copy;
85873                     }
85874                 },
85875
85876
85877                 toJSON: function() {
85878                     if (!this.hasChanges()) { return; }
85879
85880                     var allEntities = {};
85881                     var baseEntities = {};
85882                     var base = _stack[0];
85883
85884                     var s = _stack.map(function(i) {
85885                         var modified = [];
85886                         var deleted = [];
85887
85888                         Object.keys(i.graph.entities).forEach(function(id) {
85889                             var entity = i.graph.entities[id];
85890                             if (entity) {
85891                                 var key = osmEntity.key(entity);
85892                                 allEntities[key] = entity;
85893                                 modified.push(key);
85894                             } else {
85895                                 deleted.push(id);
85896                             }
85897
85898                             // make sure that the originals of changed or deleted entities get merged
85899                             // into the base of the _stack after restoring the data from JSON.
85900                             if (id in base.graph.entities) {
85901                                 baseEntities[id] = base.graph.entities[id];
85902                             }
85903                             if (entity && entity.nodes) {
85904                                 // get originals of pre-existing child nodes
85905                                 entity.nodes.forEach(function(nodeID) {
85906                                     if (nodeID in base.graph.entities) {
85907                                         baseEntities[nodeID] = base.graph.entities[nodeID];
85908                                     }
85909                                 });
85910                             }
85911                             // get originals of parent entities too
85912                             var baseParents = base.graph._parentWays[id];
85913                             if (baseParents) {
85914                                 baseParents.forEach(function(parentID) {
85915                                     if (parentID in base.graph.entities) {
85916                                         baseEntities[parentID] = base.graph.entities[parentID];
85917                                     }
85918                                 });
85919                             }
85920                         });
85921
85922                         var x = {};
85923
85924                         if (modified.length) { x.modified = modified; }
85925                         if (deleted.length) { x.deleted = deleted; }
85926                         if (i.imageryUsed) { x.imageryUsed = i.imageryUsed; }
85927                         if (i.photoOverlaysUsed) { x.photoOverlaysUsed = i.photoOverlaysUsed; }
85928                         if (i.annotation) { x.annotation = i.annotation; }
85929                         if (i.transform) { x.transform = i.transform; }
85930                         if (i.selectedIDs) { x.selectedIDs = i.selectedIDs; }
85931
85932                         return x;
85933                     });
85934
85935                     return JSON.stringify({
85936                         version: 3,
85937                         entities: Object.values(allEntities),
85938                         baseEntities: Object.values(baseEntities),
85939                         stack: s,
85940                         nextIDs: osmEntity.id.next,
85941                         index: _index,
85942                         // note the time the changes were saved
85943                         timestamp: (new Date()).getTime()
85944                     });
85945                 },
85946
85947
85948                 fromJSON: function(json, loadChildNodes) {
85949                     var h = JSON.parse(json);
85950                     var loadComplete = true;
85951
85952                     osmEntity.id.next = h.nextIDs;
85953                     _index = h.index;
85954
85955                     if (h.version === 2 || h.version === 3) {
85956                         var allEntities = {};
85957
85958                         h.entities.forEach(function(entity) {
85959                             allEntities[osmEntity.key(entity)] = osmEntity(entity);
85960                         });
85961
85962                         if (h.version === 3) {
85963                             // This merges originals for changed entities into the base of
85964                             // the _stack even if the current _stack doesn't have them (for
85965                             // example when iD has been restarted in a different region)
85966                             var baseEntities = h.baseEntities.map(function(d) { return osmEntity(d); });
85967                             var stack = _stack.map(function(state) { return state.graph; });
85968                             _stack[0].graph.rebase(baseEntities, stack, true);
85969                             _tree.rebase(baseEntities, true);
85970
85971                             // When we restore a modified way, we also need to fetch any missing
85972                             // childnodes that would normally have been downloaded with it.. #2142
85973                             if (loadChildNodes) {
85974                                 var osm = context.connection();
85975                                 var baseWays = baseEntities
85976                                     .filter(function(e) { return e.type === 'way'; });
85977                                 var nodeIDs = baseWays
85978                                     .reduce(function(acc, way) { return utilArrayUnion(acc, way.nodes); }, []);
85979                                 var missing = nodeIDs
85980                                     .filter(function(n) { return !_stack[0].graph.hasEntity(n); });
85981
85982                                 if (missing.length && osm) {
85983                                     loadComplete = false;
85984                                     context.redrawEnable(false);
85985
85986                                     var loading = uiLoading(context).blocking(true);
85987                                     context.container().call(loading);
85988
85989                                     var childNodesLoaded = function(err, result) {
85990                                         if (!err) {
85991                                             var visibleGroups = utilArrayGroupBy(result.data, 'visible');
85992                                             var visibles = visibleGroups.true || [];      // alive nodes
85993                                             var invisibles = visibleGroups.false || [];   // deleted nodes
85994
85995                                             if (visibles.length) {
85996                                                 var visibleIDs = visibles.map(function(entity) { return entity.id; });
85997                                                 var stack = _stack.map(function(state) { return state.graph; });
85998                                                 missing = utilArrayDifference(missing, visibleIDs);
85999                                                 _stack[0].graph.rebase(visibles, stack, true);
86000                                                 _tree.rebase(visibles, true);
86001                                             }
86002
86003                                             // fetch older versions of nodes that were deleted..
86004                                             invisibles.forEach(function(entity) {
86005                                                 osm.loadEntityVersion(entity.id, +entity.version - 1, childNodesLoaded);
86006                                             });
86007                                         }
86008
86009                                         if (err || !missing.length) {
86010                                             loading.close();
86011                                             context.redrawEnable(true);
86012                                             dispatch$1.call('change');
86013                                             dispatch$1.call('restore', this);
86014                                         }
86015                                     };
86016
86017                                     osm.loadMultiple(missing, childNodesLoaded);
86018                                 }
86019                             }
86020                         }
86021
86022                         _stack = h.stack.map(function(d) {
86023                             var entities = {}, entity;
86024
86025                             if (d.modified) {
86026                                 d.modified.forEach(function(key) {
86027                                     entity = allEntities[key];
86028                                     entities[entity.id] = entity;
86029                                 });
86030                             }
86031
86032                             if (d.deleted) {
86033                                 d.deleted.forEach(function(id) {
86034                                     entities[id] = undefined;
86035                                 });
86036                             }
86037
86038                             return {
86039                                 graph: coreGraph(_stack[0].graph).load(entities),
86040                                 annotation: d.annotation,
86041                                 imageryUsed: d.imageryUsed,
86042                                 photoOverlaysUsed: d.photoOverlaysUsed,
86043                                 transform: d.transform,
86044                                 selectedIDs: d.selectedIDs
86045                             };
86046                         });
86047
86048                     } else { // original version
86049                         _stack = h.stack.map(function(d) {
86050                             var entities = {};
86051
86052                             for (var i in d.entities) {
86053                                 var entity = d.entities[i];
86054                                 entities[i] = entity === 'undefined' ? undefined : osmEntity(entity);
86055                             }
86056
86057                             d.graph = coreGraph(_stack[0].graph).load(entities);
86058                             return d;
86059                         });
86060                     }
86061
86062                     var transform = _stack[_index].transform;
86063                     if (transform) {
86064                         context.map().transformEase(transform, 0);   // 0 = immediate, no easing
86065                     }
86066
86067                     if (loadComplete) {
86068                         dispatch$1.call('change');
86069                         dispatch$1.call('restore', this);
86070                     }
86071
86072                     return history;
86073                 },
86074
86075
86076                 lock: function() {
86077                     return lock.lock();
86078                 },
86079
86080
86081                 unlock: function() {
86082                     lock.unlock();
86083                 },
86084
86085
86086                 save: function() {
86087                     if (lock.locked() &&
86088                         // don't overwrite existing, unresolved changes
86089                         !_hasUnresolvedRestorableChanges) {
86090
86091                         context.storage(getKey('saved_history'), history.toJSON() || null);
86092                     }
86093                     return history;
86094                 },
86095
86096
86097                 // delete the history version saved in localStorage
86098                 clearSaved: function() {
86099                     context.debouncedSave.cancel();
86100                     if (lock.locked()) {
86101                         _hasUnresolvedRestorableChanges = false;
86102                         context.storage(getKey('saved_history'), null);
86103
86104                         // clear the changeset metadata associated with the saved history
86105                         context.storage('comment', null);
86106                         context.storage('hashtags', null);
86107                         context.storage('source', null);
86108                     }
86109                     return history;
86110                 },
86111
86112
86113                 savedHistoryJSON: function() {
86114                     return context.storage(getKey('saved_history'));
86115                 },
86116
86117
86118                 hasRestorableChanges: function() {
86119                     return _hasUnresolvedRestorableChanges;
86120                 },
86121
86122
86123                 // load history from a version stored in localStorage
86124                 restore: function() {
86125                     if (lock.locked()) {
86126                         _hasUnresolvedRestorableChanges = false;
86127                         var json = this.savedHistoryJSON();
86128                         if (json) { history.fromJSON(json, true); }
86129                     }
86130                 },
86131
86132
86133                 _getKey: getKey
86134
86135             };
86136
86137
86138             history.reset();
86139
86140             return utilRebind(history, dispatch$1, 'on');
86141         }
86142
86143         /**
86144          * Look for roads that can be connected to other roads with a short extension
86145          */
86146         function validationAlmostJunction(context) {
86147             var type = 'almost_junction';
86148
86149
86150             function isHighway(entity) {
86151                 return entity.type === 'way' &&
86152                     osmRoutableHighwayTagValues[entity.tags.highway];
86153             }
86154
86155             function isTaggedAsNotContinuing(node) {
86156                 return node.tags.noexit === 'yes' ||
86157                     node.tags.amenity === 'parking_entrance' ||
86158                     (node.tags.entrance && node.tags.entrance !== 'no');
86159             }
86160
86161
86162             var validation = function checkAlmostJunction(entity, graph) {
86163                 if (!isHighway(entity)) { return []; }
86164                 if (entity.isDegenerate()) { return []; }
86165
86166                 var tree = context.history().tree();
86167                 var issues = [];
86168
86169                 var extendableNodeInfos = findConnectableEndNodesByExtension(entity);
86170                 extendableNodeInfos.forEach(function(extendableNodeInfo) {
86171                     issues.push(new validationIssue({
86172                         type: type,
86173                         subtype: 'highway-highway',
86174                         severity: 'warning',
86175                         message: function(context) {
86176                             var entity1 = context.hasEntity(this.entityIds[0]);
86177                             if (this.entityIds[0] === this.entityIds[2]) {
86178                                 return entity1 ? t('issues.almost_junction.self.message', {
86179                                     feature: utilDisplayLabel(entity1, context)
86180                                 }) : '';
86181                             } else {
86182                                 var entity2 = context.hasEntity(this.entityIds[2]);
86183                                 return (entity1 && entity2) ? t('issues.almost_junction.message', {
86184                                     feature: utilDisplayLabel(entity1, context),
86185                                     feature2: utilDisplayLabel(entity2, context)
86186                                 }) : '';
86187                             }
86188                         },
86189                         reference: showReference,
86190                         entityIds: [entity.id, extendableNodeInfo.node.id, extendableNodeInfo.wid],
86191                         loc: extendableNodeInfo.node.loc,
86192                         hash: JSON.stringify(extendableNodeInfo.node.loc),
86193                         data: {
86194                             edge: extendableNodeInfo.edge,
86195                             cross_loc: extendableNodeInfo.cross_loc
86196                         },
86197                         dynamicFixes: makeFixes
86198                     }));
86199                 });
86200
86201                 return issues;
86202
86203
86204                 function makeFixes(context) {
86205                     var fixes = [new validationIssueFix({
86206                         icon: 'iD-icon-abutment',
86207                         title: t('issues.fix.connect_features.title'),
86208                         onClick: function(context) {
86209                             var endNodeId = this.issue.entityIds[1];
86210                             var endNode = context.entity(endNodeId);
86211                             var targetEdge = this.issue.data.edge;
86212                             var crossLoc = this.issue.data.cross_loc;
86213                             var edgeNodes = [context.entity(targetEdge[0]), context.entity(targetEdge[1])];
86214                             var closestNodeInfo = geoSphericalClosestNode(edgeNodes, crossLoc);
86215
86216                             var annotation = t('issues.fix.connect_almost_junction.annotation');
86217                             // already a point nearby, just connect to that
86218                             if (closestNodeInfo.distance < 0.75) {
86219                                 context.perform(
86220                                     actionMergeNodes([closestNodeInfo.node.id, endNode.id], closestNodeInfo.node.loc),
86221                                     annotation
86222                                 );
86223                             // else add the end node to the edge way
86224                             } else {
86225                                 context.perform(
86226                                     actionAddMidpoint({loc: crossLoc, edge: targetEdge}, endNode),
86227                                     annotation
86228                                 );
86229                             }
86230                         }
86231                     })];
86232
86233                     var node = context.hasEntity(this.entityIds[1]);
86234                     if (node && !node.hasInterestingTags()) {
86235                         // node has no descriptive tags, suggest noexit fix
86236                         fixes.push(new validationIssueFix({
86237                             icon: 'maki-barrier',
86238                             title: t('issues.fix.tag_as_disconnected.title'),
86239                             onClick: function(context) {
86240                                 var nodeID = this.issue.entityIds[1];
86241                                 var tags = Object.assign({}, context.entity(nodeID).tags);
86242                                 tags.noexit = 'yes';
86243                                 context.perform(
86244                                     actionChangeTags(nodeID, tags),
86245                                     t('issues.fix.tag_as_disconnected.annotation')
86246                                 );
86247                             }
86248                         }));
86249                     }
86250
86251                     return fixes;
86252                 }
86253
86254
86255                 function showReference(selection) {
86256                     selection.selectAll('.issue-reference')
86257                         .data([0])
86258                         .enter()
86259                         .append('div')
86260                         .attr('class', 'issue-reference')
86261                         .text(t('issues.almost_junction.highway-highway.reference'));
86262                 }
86263
86264
86265                 function isExtendableCandidate(node, way) {
86266                     // can not accurately test vertices on tiles not downloaded from osm - #5938
86267                     var osm = services$1.osm;
86268                     if (osm && !osm.isDataLoaded(node.loc)) {
86269                         return false;
86270                     }
86271                     if (isTaggedAsNotContinuing(node) || graph.parentWays(node).length !== 1) {
86272                         return false;
86273                     }
86274
86275                     var occurences = 0;
86276                     for (var index in way.nodes) {
86277                         if (way.nodes[index] === node.id) {
86278                             occurences += 1;
86279                             if (occurences > 1) {
86280                                 return false;
86281                             }
86282                         }
86283                     }
86284                     return true;
86285                 }
86286
86287
86288                 function findConnectableEndNodesByExtension(way) {
86289                     var results = [];
86290                     if (way.isClosed()) { return results; }
86291
86292                     var testNodes;
86293                     var indices = [0, way.nodes.length - 1];
86294                     indices.forEach(function(nodeIndex) {
86295                         var nodeID = way.nodes[nodeIndex];
86296                         var node = graph.entity(nodeID);
86297
86298                         if (!isExtendableCandidate(node, way)) { return; }
86299
86300                         var connectionInfo = canConnectByExtend(way, nodeIndex);
86301                         if (!connectionInfo) { return; }
86302
86303                         testNodes = graph.childNodes(way).slice();   // shallow copy
86304                         testNodes[nodeIndex] = testNodes[nodeIndex].move(connectionInfo.cross_loc);
86305
86306                         // don't flag issue if connecting the ways would cause self-intersection
86307                         if (geoHasSelfIntersections(testNodes, nodeID)) { return; }
86308
86309                         results.push(connectionInfo);
86310                     });
86311
86312                     return results;
86313                 }
86314
86315                 function hasTag(tags, key) {
86316                     return tags[key] !== undefined && tags[key] !== 'no';
86317                 }
86318
86319                 function canConnectWays(way, way2) {
86320
86321                     // allow self-connections
86322                     if (way.id === way2.id) { return true; }
86323
86324                     // if one is bridge or tunnel, both must be bridge or tunnel
86325                     if ((hasTag(way.tags, 'bridge') || hasTag(way2.tags, 'bridge')) &&
86326                         !(hasTag(way.tags, 'bridge') && hasTag(way2.tags, 'bridge'))) { return false; }
86327                     if ((hasTag(way.tags, 'tunnel') || hasTag(way2.tags, 'tunnel')) &&
86328                         !(hasTag(way.tags, 'tunnel') && hasTag(way2.tags, 'tunnel'))) { return false; }
86329
86330                     // must have equivalent layers and levels
86331                     var layer1 = way.tags.layer || '0',
86332                         layer2 = way2.tags.layer || '0';
86333                     if (layer1 !== layer2) { return false; }
86334
86335                     var level1 = way.tags.level || '0',
86336                         level2 = way2.tags.level || '0';
86337                     if (level1 !== level2) { return false; }
86338
86339                     return true;
86340                 }
86341
86342
86343                 function canConnectByExtend(way, endNodeIdx) {
86344                     var EXTEND_TH_METERS = 5;
86345                     var tipNid = way.nodes[endNodeIdx];  // the 'tip' node for extension point
86346                     var midNid = endNodeIdx === 0 ? way.nodes[1] : way.nodes[way.nodes.length - 2];  // the other node of the edge
86347                     var tipNode = graph.entity(tipNid);
86348                     var midNode = graph.entity(midNid);
86349                     var lon = tipNode.loc[0];
86350                     var lat = tipNode.loc[1];
86351                     var lon_range = geoMetersToLon(EXTEND_TH_METERS, lat) / 2;
86352                     var lat_range = geoMetersToLat(EXTEND_TH_METERS) / 2;
86353                     var queryExtent = geoExtent([
86354                         [lon - lon_range, lat - lat_range],
86355                         [lon + lon_range, lat + lat_range]
86356                     ]);
86357
86358                     // first, extend the edge of [midNode -> tipNode] by EXTEND_TH_METERS and find the "extended tip" location
86359                     var edgeLen = geoSphericalDistance(midNode.loc, tipNode.loc);
86360                     var t = EXTEND_TH_METERS / edgeLen + 1.0;
86361                     var extTipLoc = geoVecInterp(midNode.loc, tipNode.loc, t);
86362
86363                     // then, check if the extension part [tipNode.loc -> extTipLoc] intersects any other ways
86364                     var intersected = tree.intersects(queryExtent, graph);
86365                     for (var i = 0; i < intersected.length; i++) {
86366                         var way2 = intersected[i];
86367
86368                         if (!isHighway(way2)) { continue; }
86369
86370                         if (!canConnectWays(way, way2)) { continue; }
86371
86372                         for (var j = 0; j < way2.nodes.length - 1; j++) {
86373                             var nAid = way2.nodes[j],
86374                                 nBid = way2.nodes[j + 1];
86375
86376                             if (nAid === tipNid || nBid === tipNid) { continue; }
86377
86378                             var nA = graph.entity(nAid),
86379                                 nB = graph.entity(nBid);
86380                             var crossLoc = geoLineIntersection([tipNode.loc, extTipLoc], [nA.loc, nB.loc]);
86381                             if (crossLoc) {
86382                                 return {
86383                                     node: tipNode,
86384                                     wid: way2.id,
86385                                     edge: [nA.id, nB.id],
86386                                     cross_loc: crossLoc
86387                                 };
86388                             }
86389                         }
86390                     }
86391                     return null;
86392                 }
86393             };
86394
86395             validation.type = type;
86396
86397             return validation;
86398         }
86399
86400         function validationCloseNodes(context) {
86401             var type = 'close_nodes';
86402
86403             var pointThresholdMeters = 0.2;
86404
86405             var defaultWayThresholdMeters = 0.2;
86406             // expect some features to be mapped with higher levels of detail
86407             var indoorThresholdMeters = 0.01;
86408             var buildingThresholdMeters = 0.05;
86409             var pathThresholdMeters = 0.1;
86410
86411             var validation = function(entity, graph) {
86412                 if (entity.type === 'node') {
86413                     return getIssuesForNode(entity);
86414                 } else if (entity.type === 'way') {
86415                     return getIssuesForWay(entity);
86416                 }
86417                 return [];
86418
86419                 function featureTypeForWay(way) {
86420
86421                     if (way.tags.boundary && way.tags.boundary !== 'no') { return 'boundary'; }
86422                     if (way.tags.indoor && way.tags.indoor !== 'no') { return 'indoor'; }
86423                     if ((way.tags.building && way.tags.building !== 'no') ||
86424                         (way.tags['building:part'] && way.tags['building:part'] !== 'no')) { return 'building'; }
86425                     if (osmPathHighwayTagValues[way.tags.highway]) { return 'path'; }
86426
86427                     var parentRelations = graph.parentRelations(way);
86428                     for (var i in parentRelations) {
86429                         var relation = parentRelations[i];
86430
86431                         if (relation.tags.type === 'boundary') { return 'boundary'; }
86432
86433                         if (relation.isMultipolygon()) {
86434                             if (relation.tags.indoor && relation.tags.indoor !== 'no') { return 'indoor'; }
86435                             if ((relation.tags.building && relation.tags.building !== 'no') ||
86436                                 (relation.tags['building:part'] && relation.tags['building:part'] !== 'no')) { return 'building'; }
86437                         }
86438                     }
86439
86440                     return 'other';
86441                 }
86442
86443                 function shouldCheckWay(way) {
86444
86445                     // don't flag issues where merging would create degenerate ways
86446                     if (way.nodes.length <= 2 ||
86447                         (way.isClosed() && way.nodes.length <= 4)) { return false; }
86448
86449                     var featureType = featureTypeForWay(way);
86450                     // don't flag boundaries since they might be highly detailed and can't be easily verified
86451                     if (featureType === 'boundary') { return false; }
86452
86453                     var bbox = way.extent(graph).bbox();
86454                     var hypotenuseMeters = geoSphericalDistance([bbox.minX, bbox.minY], [bbox.maxX, bbox.maxY]);
86455                     // don't flag close nodes in very small ways
86456                     if (hypotenuseMeters < 1.5) { return false; }
86457
86458                     return true;
86459                 }
86460
86461                 function getIssuesForWay(way) {
86462                     if (!shouldCheckWay(way)) { return []; }
86463
86464                     var issues = [],
86465                         nodes = graph.childNodes(way);
86466                     for (var i = 0; i < nodes.length - 1; i++) {
86467                         var node1 = nodes[i];
86468                         var node2 = nodes[i+1];
86469
86470                         var issue = getWayIssueIfAny(node1, node2, way);
86471                         if (issue) { issues.push(issue); }
86472                     }
86473                     return issues;
86474                 }
86475
86476                 function getIssuesForVertex(node, parentWays) {
86477                     var issues = [];
86478
86479                     function checkForCloseness(node1, node2, way) {
86480                         var issue = getWayIssueIfAny(node1, node2, way);
86481                         if (issue) { issues.push(issue); }
86482                     }
86483
86484                     for (var i = 0; i < parentWays.length; i++) {
86485                         var parentWay = parentWays[i];
86486
86487                         if (!shouldCheckWay(parentWay)) { continue; }
86488
86489                         var lastIndex = parentWay.nodes.length - 1;
86490                         for (var j = 0; j < parentWay.nodes.length; j++) {
86491                             if (j !== 0) {
86492                                 if (parentWay.nodes[j-1] === node.id) {
86493                                     checkForCloseness(node, graph.entity(parentWay.nodes[j]), parentWay);
86494                                 }
86495                             }
86496                             if (j !== lastIndex) {
86497                                 if (parentWay.nodes[j+1] === node.id) {
86498                                     checkForCloseness(graph.entity(parentWay.nodes[j]), node, parentWay);
86499                                 }
86500                             }
86501                         }
86502                     }
86503                     return issues;
86504                 }
86505
86506                 function getIssuesForDetachedPoint(node) {
86507
86508                     var issues = [];
86509
86510                     var lon = node.loc[0];
86511                     var lat = node.loc[1];
86512                     var lon_range = geoMetersToLon(pointThresholdMeters, lat) / 2;
86513                     var lat_range = geoMetersToLat(pointThresholdMeters) / 2;
86514                     var queryExtent = geoExtent([
86515                         [lon - lon_range, lat - lat_range],
86516                         [lon + lon_range, lat + lat_range]
86517                     ]);
86518
86519                     var intersected = context.history().tree().intersects(queryExtent, graph);
86520                     for (var j = 0; j < intersected.length; j++) {
86521                         var nearby = intersected[j];
86522
86523                         if (nearby.id === node.id) { continue; }
86524                         if (nearby.type !== 'node' || nearby.geometry(graph) !== 'point') { continue; }
86525
86526                         if (nearby.loc === node.loc ||
86527                             geoSphericalDistance(node.loc, nearby.loc) < pointThresholdMeters) {
86528
86529                             // allow very close points if tags indicate the z-axis might vary
86530                             var zAxisKeys = { layer: true, level: true, 'addr:housenumber': true, 'addr:unit': true };
86531                             var zAxisDifferentiates = false;
86532                             for (var key in zAxisKeys) {
86533                                 var nodeValue = node.tags[key] || '0';
86534                                 var nearbyValue = nearby.tags[key] || '0';
86535                                 if (nodeValue !== nearbyValue) {
86536                                     zAxisDifferentiates = true;
86537                                     break;
86538                                 }
86539                             }
86540                             if (zAxisDifferentiates) { continue; }
86541
86542                             issues.push(new validationIssue({
86543                                 type: type,
86544                                 subtype: 'detached',
86545                                 severity: 'warning',
86546                                 message: function(context) {
86547                                     var entity = context.hasEntity(this.entityIds[0]),
86548                                         entity2 = context.hasEntity(this.entityIds[1]);
86549                                     return (entity && entity2) ? t('issues.close_nodes.detached.message', {
86550                                         feature: utilDisplayLabel(entity, context),
86551                                         feature2: utilDisplayLabel(entity2, context)
86552                                     }) : '';
86553                                 },
86554                                 reference: showReference,
86555                                 entityIds: [node.id, nearby.id],
86556                                 dynamicFixes: function() {
86557                                     return [
86558                                         new validationIssueFix({
86559                                             icon: 'iD-operation-disconnect',
86560                                             title: t('issues.fix.move_points_apart.title')
86561                                         }),
86562                                         new validationIssueFix({
86563                                             icon: 'iD-icon-layers',
86564                                             title: t('issues.fix.use_different_layers_or_levels.title')
86565                                         })
86566                                     ];
86567                                 }
86568                             }));
86569                         }
86570                     }
86571
86572                     return issues;
86573
86574                     function showReference(selection) {
86575                         var referenceText = t('issues.close_nodes.detached.reference');
86576                         selection.selectAll('.issue-reference')
86577                             .data([0])
86578                             .enter()
86579                             .append('div')
86580                             .attr('class', 'issue-reference')
86581                             .text(referenceText);
86582                     }
86583                 }
86584
86585                 function getIssuesForNode(node) {
86586                     var parentWays = graph.parentWays(node);
86587                     if (parentWays.length) {
86588                         return getIssuesForVertex(node, parentWays);
86589                     } else {
86590                         return getIssuesForDetachedPoint(node);
86591                     }
86592                 }
86593
86594                 function getWayIssueIfAny(node1, node2, way) {
86595                     if (node1.id === node2.id ||
86596                         (node1.hasInterestingTags() && node2.hasInterestingTags())) {
86597                         return null;
86598                     }
86599
86600                     if (node1.loc !== node2.loc) {
86601
86602                         var featureType = featureTypeForWay(way);
86603                         var threshold = defaultWayThresholdMeters;
86604                         if (featureType === 'indoor') { threshold = indoorThresholdMeters; }
86605                         else if (featureType === 'building') { threshold = buildingThresholdMeters; }
86606                         else if (featureType === 'path') { threshold = pathThresholdMeters; }
86607
86608                         var distance = geoSphericalDistance(node1.loc, node2.loc);
86609                         if (distance > threshold) { return null; }
86610                     }
86611
86612                     return new validationIssue({
86613                         type: type,
86614                         subtype: 'vertices',
86615                         severity: 'warning',
86616                         message: function(context) {
86617                             var entity = context.hasEntity(this.entityIds[0]);
86618                             return entity ? t('issues.close_nodes.message', { way: utilDisplayLabel(entity, context) }) : '';
86619                         },
86620                         reference: showReference,
86621                         entityIds: [way.id, node1.id, node2.id],
86622                         loc: node1.loc,
86623                         dynamicFixes: function() {
86624                             return [
86625                                 new validationIssueFix({
86626                                     icon: 'iD-icon-plus',
86627                                     title: t('issues.fix.merge_points.title'),
86628                                     onClick: function(context) {
86629                                         var entityIds = this.issue.entityIds;
86630                                         var action = actionMergeNodes([entityIds[1], entityIds[2]]);
86631                                         context.perform(action, t('issues.fix.merge_close_vertices.annotation'));
86632                                     }
86633                                 }),
86634                                 new validationIssueFix({
86635                                     icon: 'iD-operation-disconnect',
86636                                     title: t('issues.fix.move_points_apart.title')
86637                                 })
86638                             ];
86639                         }
86640                     });
86641
86642                     function showReference(selection) {
86643                         var referenceText = t('issues.close_nodes.reference');
86644                         selection.selectAll('.issue-reference')
86645                             .data([0])
86646                             .enter()
86647                             .append('div')
86648                             .attr('class', 'issue-reference')
86649                             .text(referenceText);
86650                     }
86651                 }
86652
86653             };
86654
86655
86656             validation.type = type;
86657
86658             return validation;
86659         }
86660
86661         function validationCrossingWays(context) {
86662             var type = 'crossing_ways';
86663
86664             // returns the way or its parent relation, whichever has a useful feature type
86665             function getFeatureWithFeatureTypeTagsForWay(way, graph) {
86666                 if (getFeatureTypeForTags(way.tags) === null) {
86667                     // if the way doesn't match a feature type, check its parent relations
86668                     var parentRels = graph.parentRelations(way);
86669                     for (var i = 0; i < parentRels.length; i++) {
86670                         var rel = parentRels[i];
86671                         if (getFeatureTypeForTags(rel.tags) !== null) {
86672                             return rel;
86673                         }
86674                     }
86675                 }
86676                 return way;
86677             }
86678
86679
86680             function hasTag(tags, key) {
86681                 return tags[key] !== undefined && tags[key] !== 'no';
86682             }
86683
86684             function taggedAsIndoor(tags) {
86685                 return hasTag(tags, 'indoor') ||
86686                     hasTag(tags, 'level') ||
86687                     tags.highway === 'corridor';
86688             }
86689
86690             function allowsBridge(featureType) {
86691                 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
86692             }
86693             function allowsTunnel(featureType) {
86694                 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
86695             }
86696
86697
86698             function getFeatureTypeForCrossingCheck(way, graph) {
86699                 var tags = getFeatureWithFeatureTypeTagsForWay(way, graph).tags;
86700                 return getFeatureTypeForTags(tags);
86701             }
86702
86703             // blacklist
86704             var ignoredBuildings = {
86705                 demolished: true, dismantled: true, proposed: true, razed: true
86706             };
86707
86708
86709             function getFeatureTypeForTags(tags) {
86710                 if (hasTag(tags, 'building') && !ignoredBuildings[tags.building]) { return 'building'; }
86711
86712                 // don't check non-building areas
86713                 if (hasTag(tags, 'area')) { return null; }
86714
86715                 if (hasTag(tags, 'highway') && osmRoutableHighwayTagValues[tags.highway]) { return 'highway'; }
86716                 if (hasTag(tags, 'railway') && osmRailwayTrackTagValues[tags.railway]) { return 'railway'; }
86717                 if (hasTag(tags, 'waterway') && osmFlowingWaterwayTagValues[tags.waterway]) { return 'waterway'; }
86718
86719                 return null;
86720             }
86721
86722
86723             function isLegitCrossing(way1, featureType1, way2, featureType2) {
86724                 var tags1 = way1.tags;
86725                 var tags2 = way2.tags;
86726
86727                 // assume 0 by default
86728                 var level1 = tags1.level || '0';
86729                 var level2 = tags2.level || '0';
86730
86731                 if (taggedAsIndoor(tags1) && taggedAsIndoor(tags2) && level1 !== level2) {
86732                     // assume features don't interact if they're indoor on different levels
86733                     return true;
86734                 }
86735
86736                 // assume 0 by default; don't use way.layer() since we account for structures here
86737                 var layer1 = tags1.layer || '0';
86738                 var layer2 = tags2.layer || '0';
86739
86740                 if (allowsBridge(featureType1) && allowsBridge(featureType2)) {
86741                     if (hasTag(tags1, 'bridge') && !hasTag(tags2, 'bridge')) { return true; }
86742                     if (!hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge')) { return true; }
86743                     // crossing bridges must use different layers
86744                     if (hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge') && layer1 !== layer2) { return true; }
86745                 } else if (allowsBridge(featureType1) && hasTag(tags1, 'bridge')) { return true; }
86746                 else if (allowsBridge(featureType2) && hasTag(tags2, 'bridge')) { return true; }
86747
86748                 if (allowsTunnel(featureType1) && allowsTunnel(featureType2)) {
86749                     if (hasTag(tags1, 'tunnel') && !hasTag(tags2, 'tunnel')) { return true; }
86750                     if (!hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel')) { return true; }
86751                     // crossing tunnels must use different layers
86752                     if (hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel') && layer1 !== layer2) { return true; }
86753                 } else if (allowsTunnel(featureType1) && hasTag(tags1, 'tunnel')) { return true; }
86754                 else if (allowsTunnel(featureType2) && hasTag(tags2, 'tunnel')) { return true; }
86755
86756                 // don't flag crossing waterways and pier/highways
86757                 if (featureType1 === 'waterway' && featureType2 === 'highway' && tags2.man_made === 'pier') { return true; }
86758                 if (featureType2 === 'waterway' && featureType1 === 'highway' && tags1.man_made === 'pier') { return true; }
86759
86760                 if (featureType1 === 'building' || featureType2 === 'building') {
86761                     // for building crossings, different layers are enough
86762                     if (layer1 !== layer2) { return true; }
86763                 }
86764                 return false;
86765             }
86766
86767
86768             // highway values for which we shouldn't recommend connecting to waterways
86769             var highwaysDisallowingFords = {
86770                 motorway: true, motorway_link: true, trunk: true, trunk_link: true,
86771                 primary: true, primary_link: true, secondary: true, secondary_link: true
86772             };
86773             var nonCrossingHighways = { track: true };
86774
86775             function tagsForConnectionNodeIfAllowed(entity1, entity2) {
86776                 var featureType1 = getFeatureTypeForTags(entity1.tags);
86777                 var featureType2 = getFeatureTypeForTags(entity2.tags);
86778                 if (featureType1 === featureType2) {
86779                     if (featureType1 === 'highway') {
86780                         var entity1IsPath = osmPathHighwayTagValues[entity1.tags.highway];
86781                         var entity2IsPath = osmPathHighwayTagValues[entity2.tags.highway];
86782                         if ((entity1IsPath || entity2IsPath) && entity1IsPath !== entity2IsPath) {
86783                             // one feature is a path but not both
86784
86785                             var roadFeature = entity1IsPath ? entity2 : entity1;
86786                             if (nonCrossingHighways[roadFeature.tags.highway]) {
86787                                 // don't mark path connections with certain roads as crossings
86788                                 return {};
86789                             }
86790                             var pathFeature = entity1IsPath ? entity1 : entity2;
86791                             if (['marked', 'unmarked'].indexOf(pathFeature.tags.crossing) !== -1) {
86792                                 // if the path is a crossing, match the crossing type
86793                                 return { highway: 'crossing', crossing: pathFeature.tags.crossing };
86794                             }
86795                             // don't add a `crossing` subtag to ambiguous crossings
86796                             return { highway: 'crossing' };
86797                         }
86798                         return {};
86799                     }
86800                     if (featureType1 === 'waterway') { return {}; }
86801                     if (featureType1 === 'railway') { return {}; }
86802
86803                 } else {
86804                     var featureTypes = [featureType1, featureType2];
86805                     if (featureTypes.indexOf('highway') !== -1) {
86806                         if (featureTypes.indexOf('railway') !== -1) {
86807                             if (osmPathHighwayTagValues[entity1.tags.highway] ||
86808                                 osmPathHighwayTagValues[entity2.tags.highway]) {
86809                                 // path-rail connections use this tag
86810                                 return { railway: 'crossing' };
86811                             } else {
86812                                 // road-rail connections use this tag
86813                                 return { railway: 'level_crossing' };
86814                             }
86815                         }
86816
86817                         if (featureTypes.indexOf('waterway') !== -1) {
86818                             // do not allow fords on structures
86819                             if (hasTag(entity1.tags, 'tunnel') && hasTag(entity2.tags, 'tunnel')) { return null; }
86820                             if (hasTag(entity1.tags, 'bridge') && hasTag(entity2.tags, 'bridge')) { return null; }
86821
86822                             if (highwaysDisallowingFords[entity1.tags.highway] ||
86823                                 highwaysDisallowingFords[entity2.tags.highway]) {
86824                                 // do not allow fords on major highways
86825                                 return null;
86826                             }
86827                             return { ford: 'yes' };
86828                         }
86829                     }
86830                 }
86831                 return null;
86832             }
86833
86834
86835             function findCrossingsByWay(way1, graph, tree) {
86836                 var edgeCrossInfos = [];
86837                 if (way1.type !== 'way') { return edgeCrossInfos; }
86838
86839                 var way1FeatureType = getFeatureTypeForCrossingCheck(way1, graph);
86840                 if (way1FeatureType === null) { return edgeCrossInfos; }
86841
86842                 var checkedSingleCrossingWays = {};
86843
86844                 // declare vars ahead of time to reduce garbage collection
86845                 var i, j, nodeIndex;
86846                 var extent;
86847                 var n1, n2, nA, nB;
86848                 var segment1, segment2;
86849                 var oneOnly;
86850                 var intersected, way2, way2FeatureType, way2Nodes;
86851                 var way1Nodes = graph.childNodes(way1);
86852                 var comparedWays = {};
86853                 for (i = 0; i < way1Nodes.length - 1; i++) {
86854                     n1 = way1Nodes[i];
86855                     n2 = way1Nodes[i + 1];
86856                     extent = geoExtent([
86857                         [
86858                             Math.min(n1.loc[0], n2.loc[0]),
86859                             Math.min(n1.loc[1], n2.loc[1])
86860                         ],
86861                         [
86862                             Math.max(n1.loc[0], n2.loc[0]),
86863                             Math.max(n1.loc[1], n2.loc[1])
86864                         ]
86865                     ]);
86866
86867                     intersected = tree.intersects(extent, graph);
86868                     for (j = 0; j < intersected.length; j++) {
86869                         way2 = intersected[j];
86870
86871                         if (way2.type !== 'way') { continue; }
86872
86873                         // don't check for self-intersection in this validation
86874                         if (way2.id === way1.id) { continue; }
86875
86876                         // skip if this way was already checked and only one issue is needed
86877                         if (checkedSingleCrossingWays[way2.id]) { continue; }
86878
86879                         // mark this way as checked even if there are no crossings
86880                         comparedWays[way2.id] = true;
86881
86882                         // only check crossing highway, waterway, building, and railway
86883                         way2FeatureType = getFeatureTypeForCrossingCheck(way2, graph);
86884                         if (way2FeatureType === null ||
86885                             isLegitCrossing(way1, way1FeatureType, way2, way2FeatureType)) {
86886                             continue;
86887                         }
86888
86889                         // create only one issue for building crossings
86890                         oneOnly = way1FeatureType === 'building' || way2FeatureType === 'building';
86891                         segment1 = [n1.loc, n2.loc];
86892
86893                         way2Nodes = graph.childNodes(way2);
86894                         for (nodeIndex = 0; nodeIndex < way2Nodes.length - 1; nodeIndex++) {
86895                             nA = way2Nodes[nodeIndex];
86896                             nB = way2Nodes[nodeIndex + 1];
86897                             if (nA.id === n1.id || nA.id === n2.id ||
86898                                 nB.id === n1.id || nB.id === n2.id) {
86899                                 // n1 or n2 is a connection node; skip
86900                                 continue;
86901                             }
86902                             segment2 = [nA.loc, nB.loc];
86903                             var point = geoLineIntersection(segment1, segment2);
86904                             if (point) {
86905                                 edgeCrossInfos.push({
86906                                     wayInfos: [
86907                                         {
86908                                             way: way1,
86909                                             featureType: way1FeatureType,
86910                                             edge: [n1.id, n2.id]
86911                                         },
86912                                         {
86913                                             way: way2,
86914                                             featureType: way2FeatureType,
86915                                             edge: [nA.id, nB.id]
86916                                         }
86917                                     ],
86918                                     crossPoint: point
86919                                 });
86920                                 if (oneOnly) {
86921                                     checkedSingleCrossingWays[way2.id] = true;
86922                                     break;
86923                                 }
86924                             }
86925                         }
86926                     }
86927                 }
86928                 return edgeCrossInfos;
86929             }
86930
86931
86932             function waysToCheck(entity, graph) {
86933                 if (!getFeatureTypeForTags(entity.tags)) {
86934                     return [];
86935                 }
86936                 if (entity.type === 'way') {
86937                     return [entity];
86938                 } else if (entity.type === 'relation' &&
86939                     entity.isMultipolygon() &&
86940                     // only check multipolygons if they are buildings
86941                     hasTag(entity.tags, 'building')) {
86942                     return entity.members.reduce(function(array, member) {
86943                         if (member.type === 'way' &&
86944                             //(member.role === 'outer' || member.role === 'inner') &&
86945                             graph.hasEntity(member.id)) {
86946                             var entity = graph.entity(member.id);
86947                             array.push(entity);
86948                         }
86949                         return array;
86950                     }, []);
86951                 }
86952                 return [];
86953             }
86954
86955
86956             var validation = function checkCrossingWays(entity, graph) {
86957
86958                 var tree = context.history().tree();
86959
86960                 var ways = waysToCheck(entity, graph);
86961
86962                 var issues = [];
86963                 // declare these here to reduce garbage collection
86964                 var wayIndex, crossingIndex, crossings;
86965                 for (wayIndex in ways) {
86966                     crossings = findCrossingsByWay(ways[wayIndex], graph, tree);
86967                     for (crossingIndex in crossings) {
86968                         issues.push(createIssue(crossings[crossingIndex], graph));
86969                     }
86970                 }
86971                 return issues;
86972             };
86973
86974
86975             function createIssue(crossing, graph) {
86976
86977                 // use the entities with the tags that define the feature type
86978                 crossing.wayInfos.sort(function(way1Info, way2Info) {
86979                     var type1 = way1Info.featureType;
86980                     var type2 = way2Info.featureType;
86981                     if (type1 === type2) {
86982                         return utilDisplayLabel(way1Info.way, context) > utilDisplayLabel(way2Info.way, context);
86983                     } else if (type1 === 'waterway') {
86984                         return true;
86985                     } else if (type2 === 'waterway') {
86986                         return false;
86987                     }
86988                     return type1 < type2;
86989                 });
86990                 var entities = crossing.wayInfos.map(function(wayInfo) {
86991                     return getFeatureWithFeatureTypeTagsForWay(wayInfo.way, graph);
86992                 });
86993                 var edges = [crossing.wayInfos[0].edge, crossing.wayInfos[1].edge];
86994                 var featureTypes = [crossing.wayInfos[0].featureType, crossing.wayInfos[1].featureType];
86995
86996                 var connectionTags = tagsForConnectionNodeIfAllowed(entities[0], entities[1]);
86997
86998                 var featureType1 = crossing.wayInfos[0].featureType;
86999                 var featureType2 = crossing.wayInfos[1].featureType;
87000
87001                 var isCrossingIndoors = taggedAsIndoor(entities[0].tags) && taggedAsIndoor(entities[1].tags);
87002                 var isCrossingTunnels = allowsTunnel(featureType1) && hasTag(entities[0].tags, 'tunnel') &&
87003                                         allowsTunnel(featureType2) && hasTag(entities[1].tags, 'tunnel');
87004                 var isCrossingBridges = allowsBridge(featureType1) && hasTag(entities[0].tags, 'bridge') &&
87005                                         allowsBridge(featureType2) && hasTag(entities[1].tags, 'bridge');
87006
87007                 var subtype = [featureType1, featureType2].sort().join('-');
87008
87009                 var crossingTypeID = subtype;
87010
87011                 if (isCrossingIndoors) {
87012                     crossingTypeID = 'indoor-indoor';
87013                 } else if (isCrossingTunnels) {
87014                     crossingTypeID = 'tunnel-tunnel';
87015                 } else if (isCrossingBridges) {
87016                     crossingTypeID = 'bridge-bridge';
87017                 }
87018                 if (connectionTags && (isCrossingIndoors || isCrossingTunnels || isCrossingBridges)) {
87019                     crossingTypeID += '_connectable';
87020                 }
87021
87022                 return new validationIssue({
87023                     type: type,
87024                     subtype: subtype,
87025                     severity: 'warning',
87026                     message: function(context) {
87027                         var entity1 = context.hasEntity(this.entityIds[0]),
87028                             entity2 = context.hasEntity(this.entityIds[1]);
87029                         return (entity1 && entity2) ? t('issues.crossing_ways.message', {
87030                             feature: utilDisplayLabel(entity1, context),
87031                             feature2: utilDisplayLabel(entity2, context)
87032                         }) : '';
87033                     },
87034                     reference: showReference,
87035                     entityIds: entities.map(function(entity) {
87036                         return entity.id;
87037                     }),
87038                     data: {
87039                         edges: edges,
87040                         featureTypes: featureTypes,
87041                         connectionTags: connectionTags
87042                     },
87043                     // differentiate based on the loc since two ways can cross multiple times
87044                     hash: crossing.crossPoint.toString() +
87045                         // if the edges change then so does the fix
87046                         edges.slice().sort(function(edge1, edge2) {
87047                             // order to assure hash is deterministic
87048                             return edge1[0] < edge2[0] ? -1 : 1;
87049                         }).toString() +
87050                         // ensure the correct connection tags are added in the fix
87051                         JSON.stringify(connectionTags),
87052                     loc: crossing.crossPoint,
87053                     dynamicFixes: function() {
87054                         var mode = context.mode();
87055                         if (!mode || mode.id !== 'select' || mode.selectedIDs().length !== 1) { return []; }
87056
87057                         var selectedIndex = this.entityIds[0] === mode.selectedIDs()[0] ? 0 : 1;
87058                         var selectedFeatureType = this.data.featureTypes[selectedIndex];
87059
87060                         var fixes = [];
87061
87062                         if (connectionTags) {
87063                             fixes.push(makeConnectWaysFix(this.data.connectionTags));
87064                         }
87065
87066                         if (isCrossingIndoors) {
87067                             fixes.push(new validationIssueFix({
87068                                 icon: 'iD-icon-layers',
87069                                 title: t('issues.fix.use_different_levels.title')
87070                             }));
87071                         } else if (isCrossingTunnels ||
87072                             isCrossingBridges ||
87073                             featureType1 === 'building' ||
87074                             featureType2 === 'building')  {
87075
87076                             fixes.push(makeChangeLayerFix('higher'));
87077                             fixes.push(makeChangeLayerFix('lower'));
87078                         } else {
87079                             // don't recommend adding bridges to waterways since they're uncommmon
87080                             if (allowsBridge(selectedFeatureType) && selectedFeatureType !== 'waterway') {
87081                                 fixes.push(makeAddBridgeOrTunnelFix('add_a_bridge', 'temaki-bridge', 'bridge'));
87082                             }
87083
87084                             if (allowsTunnel(selectedFeatureType)) {
87085                                 fixes.push(makeAddBridgeOrTunnelFix('add_a_tunnel', 'temaki-tunnel', 'tunnel'));
87086                             }
87087                         }
87088
87089                         // repositioning the features is always an option
87090                         fixes.push(new validationIssueFix({
87091                             icon: 'iD-operation-move',
87092                             title: t('issues.fix.reposition_features.title')
87093                         }));
87094
87095                         return fixes;
87096                     }
87097                 });
87098
87099                 function showReference(selection) {
87100                     selection.selectAll('.issue-reference')
87101                         .data([0])
87102                         .enter()
87103                         .append('div')
87104                         .attr('class', 'issue-reference')
87105                         .text(t('issues.crossing_ways.' + crossingTypeID + '.reference'));
87106                 }
87107             }
87108
87109             function makeAddBridgeOrTunnelFix(fixTitleID, iconName, bridgeOrTunnel){
87110                 return new validationIssueFix({
87111                     icon: iconName,
87112                     title: t('issues.fix.' + fixTitleID + '.title'),
87113                     onClick: function(context) {
87114                         var mode = context.mode();
87115                         if (!mode || mode.id !== 'select') { return; }
87116
87117                         var selectedIDs = mode.selectedIDs();
87118                         if (selectedIDs.length !== 1) { return; }
87119
87120                         var selectedWayID = selectedIDs[0];
87121                         if (!context.hasEntity(selectedWayID)) { return; }
87122
87123                         var resultWayIDs = [selectedWayID];
87124
87125                         var edge, crossedEdge, crossedWayID;
87126                         if (this.issue.entityIds[0] === selectedWayID) {
87127                             edge = this.issue.data.edges[0];
87128                             crossedEdge = this.issue.data.edges[1];
87129                             crossedWayID = this.issue.entityIds[1];
87130                         } else {
87131                             edge = this.issue.data.edges[1];
87132                             crossedEdge = this.issue.data.edges[0];
87133                             crossedWayID = this.issue.entityIds[0];
87134                         }
87135
87136                         var crossingLoc = this.issue.loc;
87137
87138                         var projection = context.projection;
87139
87140                         var action = function actionAddStructure(graph) {
87141
87142                             var edgeNodes = [graph.entity(edge[0]), graph.entity(edge[1])];
87143
87144                             var crossedWay = graph.hasEntity(crossedWayID);
87145                             // use the explicit width of the crossed feature as the structure length, if available
87146                             var structLengthMeters = crossedWay && crossedWay.tags.width && parseFloat(crossedWay.tags.width);
87147                             if (!structLengthMeters) {
87148                                 // if no explicit width is set, approximate the width based on the tags
87149                                 structLengthMeters = crossedWay && crossedWay.impliedLineWidthMeters();
87150                             }
87151                             if (structLengthMeters) {
87152                                 if (getFeatureTypeForTags(crossedWay.tags) === 'railway') {
87153                                     // bridges over railways are generally much longer than the rail bed itself, compensate
87154                                     structLengthMeters *= 2;
87155                                 }
87156                             } else {
87157                                 // should ideally never land here since all rail/water/road tags should have an implied width
87158                                 structLengthMeters = 8;
87159                             }
87160
87161                             var a1 = geoAngle(edgeNodes[0], edgeNodes[1], projection) + Math.PI;
87162                             var a2 = geoAngle(graph.entity(crossedEdge[0]), graph.entity(crossedEdge[1]), projection) + Math.PI;
87163                             var crossingAngle = Math.max(a1, a2) - Math.min(a1, a2);
87164                             if (crossingAngle > Math.PI) { crossingAngle -= Math.PI; }
87165                             // lengthen the structure to account for the angle of the crossing
87166                             structLengthMeters = ((structLengthMeters / 2) / Math.sin(crossingAngle)) * 2;
87167
87168                             // add padding since the structure must extend past the edges of the crossed feature
87169                             structLengthMeters += 4;
87170
87171                             // clamp the length to a reasonable range
87172                             structLengthMeters = Math.min(Math.max(structLengthMeters, 4), 50);
87173
87174                             function geomToProj(geoPoint) {
87175                                 return [
87176                                     geoLonToMeters(geoPoint[0], geoPoint[1]),
87177                                     geoLatToMeters(geoPoint[1])
87178                                 ];
87179                             }
87180                             function projToGeom(projPoint) {
87181                                 var lat = geoMetersToLat(projPoint[1]);
87182                                 return [
87183                                     geoMetersToLon(projPoint[0], lat),
87184                                     lat
87185                                 ];
87186                             }
87187
87188                             var projEdgeNode1 = geomToProj(edgeNodes[0].loc);
87189                             var projEdgeNode2 = geomToProj(edgeNodes[1].loc);
87190
87191                             var projectedAngle = geoVecAngle(projEdgeNode1, projEdgeNode2);
87192
87193                             var projectedCrossingLoc = geomToProj(crossingLoc);
87194                             var linearToSphericalMetersRatio = geoVecLength(projEdgeNode1, projEdgeNode2) /
87195                                 geoSphericalDistance(edgeNodes[0].loc, edgeNodes[1].loc);
87196
87197                             function locSphericalDistanceFromCrossingLoc(angle, distanceMeters) {
87198                                 var lengthSphericalMeters = distanceMeters * linearToSphericalMetersRatio;
87199                                 return projToGeom([
87200                                     projectedCrossingLoc[0] + Math.cos(angle) * lengthSphericalMeters,
87201                                     projectedCrossingLoc[1] + Math.sin(angle) * lengthSphericalMeters
87202                                 ]);
87203                             }
87204
87205                             var endpointLocGetter1 = function(lengthMeters) {
87206                                 return locSphericalDistanceFromCrossingLoc(projectedAngle, lengthMeters);
87207                             };
87208                             var endpointLocGetter2 = function(lengthMeters) {
87209                                 return locSphericalDistanceFromCrossingLoc(projectedAngle + Math.PI, lengthMeters);
87210                             };
87211
87212                             // avoid creating very short edges from splitting too close to another node
87213                             var minEdgeLengthMeters = 0.55;
87214
87215                             // decide where to bound the structure along the way, splitting as necessary
87216                             function determineEndpoint(edge, endNode, locGetter) {
87217                                 var newNode;
87218
87219                                 var idealLengthMeters = structLengthMeters / 2;
87220
87221                                 // distance between the crossing location and the end of the edge,
87222                                 // the maximum length of this side of the structure
87223                                 var crossingToEdgeEndDistance = geoSphericalDistance(crossingLoc, endNode.loc);
87224
87225                                 if (crossingToEdgeEndDistance - idealLengthMeters > minEdgeLengthMeters) {
87226                                     // the edge is long enough to insert a new node
87227
87228                                     // the loc that would result in the full expected length
87229                                     var idealNodeLoc = locGetter(idealLengthMeters);
87230
87231                                     newNode = osmNode();
87232                                     graph = actionAddMidpoint({ loc: idealNodeLoc, edge: edge }, newNode)(graph);
87233
87234                                 } else {
87235                                     var edgeCount = 0;
87236                                     endNode.parentIntersectionWays(graph).forEach(function(way) {
87237                                         way.nodes.forEach(function(nodeID) {
87238                                             if (nodeID === endNode.id) {
87239                                                 if ((endNode.id === way.first() && endNode.id !== way.last()) ||
87240                                                     (endNode.id === way.last() && endNode.id !== way.first())) {
87241                                                     edgeCount += 1;
87242                                                 } else {
87243                                                     edgeCount += 2;
87244                                                 }
87245                                             }
87246                                         });
87247                                     });
87248
87249                                     if (edgeCount >= 3) {
87250                                         // the end node is a junction, try to leave a segment
87251                                         // between it and the structure - #7202
87252
87253                                         var insetLength = crossingToEdgeEndDistance - minEdgeLengthMeters;
87254                                         if (insetLength > minEdgeLengthMeters) {
87255                                             var insetNodeLoc = locGetter(insetLength);
87256                                             newNode = osmNode();
87257                                             graph = actionAddMidpoint({ loc: insetNodeLoc, edge: edge }, newNode)(graph);
87258                                         }
87259                                     }
87260                                 }
87261
87262                                 // if the edge is too short to subdivide as desired, then
87263                                 // just bound the structure at the existing end node
87264                                 if (!newNode) { newNode = endNode; }
87265
87266                                 var splitAction = actionSplit(newNode.id)
87267                                     .limitWays(resultWayIDs); // only split selected or created ways
87268
87269                                 // do the split
87270                                 graph = splitAction(graph);
87271                                 if (splitAction.getCreatedWayIDs().length) {
87272                                     resultWayIDs.push(splitAction.getCreatedWayIDs()[0]);
87273                                 }
87274
87275                                 return newNode;
87276                             }
87277
87278                             var structEndNode1 = determineEndpoint(edge, edgeNodes[1], endpointLocGetter1);
87279                             var structEndNode2 = determineEndpoint([edgeNodes[0].id, structEndNode1.id], edgeNodes[0], endpointLocGetter2);
87280
87281                             var structureWay = resultWayIDs.map(function(id) {
87282                                 return graph.entity(id);
87283                             }).find(function(way) {
87284                                 return way.nodes.indexOf(structEndNode1.id) !== -1 &&
87285                                     way.nodes.indexOf(structEndNode2.id) !== -1;
87286                             });
87287
87288                             var tags = Object.assign({}, structureWay.tags); // copy tags
87289                             if (bridgeOrTunnel === 'bridge'){
87290                                 tags.bridge = 'yes';
87291                                 tags.layer = '1';
87292                             } else {
87293                                 var tunnelValue = 'yes';
87294                                 if (getFeatureTypeForTags(tags) === 'waterway') {
87295                                     // use `tunnel=culvert` for waterways by default
87296                                     tunnelValue = 'culvert';
87297                                 }
87298                                 tags.tunnel = tunnelValue;
87299                                 tags.layer = '-1';
87300                             }
87301                             // apply the structure tags to the way
87302                             graph = actionChangeTags(structureWay.id, tags)(graph);
87303                             return graph;
87304                         };
87305
87306                         context.perform(action, t('issues.fix.' + fixTitleID + '.annotation'));
87307                         context.enter(modeSelect(context, resultWayIDs));
87308                     }
87309                 });
87310             }
87311
87312
87313
87314             function makeConnectWaysFix(connectionTags) {
87315
87316                 var fixTitleID = 'connect_features';
87317                 if (connectionTags.ford) {
87318                     fixTitleID = 'connect_using_ford';
87319                 }
87320
87321                 return new validationIssueFix({
87322                     icon: 'iD-icon-crossing',
87323                     title: t('issues.fix.' + fixTitleID + '.title'),
87324                     onClick: function(context) {
87325                         var loc = this.issue.loc;
87326                         var connectionTags = this.issue.data.connectionTags;
87327                         var edges = this.issue.data.edges;
87328
87329                         context.perform(
87330                             function actionConnectCrossingWays(graph) {
87331                                 // create the new node for the points
87332                                 var node = osmNode({ loc: loc, tags: connectionTags });
87333                                 graph = graph.replace(node);
87334
87335                                 var nodesToMerge = [node.id];
87336                                 var mergeThresholdInMeters = 0.75;
87337
87338                                 edges.forEach(function(edge) {
87339                                     var edgeNodes = [graph.entity(edge[0]), graph.entity(edge[1])];
87340                                     var closestNodeInfo = geoSphericalClosestNode(edgeNodes, loc);
87341                                     // if there is already a point nearby, use that
87342                                     if (closestNodeInfo.distance < mergeThresholdInMeters) {
87343                                         nodesToMerge.push(closestNodeInfo.node.id);
87344                                     // else add the new node to the way
87345                                     } else {
87346                                         graph = actionAddMidpoint({loc: loc, edge: edge}, node)(graph);
87347                                     }
87348                                 });
87349
87350                                 if (nodesToMerge.length > 1) {
87351                                     // if we're using nearby nodes, merge them with the new node
87352                                     graph = actionMergeNodes(nodesToMerge, loc)(graph);
87353                                 }
87354
87355                                 return graph;
87356                             },
87357                             t('issues.fix.connect_crossing_features.annotation')
87358                         );
87359                     }
87360                 });
87361             }
87362
87363             function makeChangeLayerFix(higherOrLower) {
87364                 return new validationIssueFix({
87365                     icon: 'iD-icon-' + (higherOrLower === 'higher' ? 'up' : 'down'),
87366                     title: t('issues.fix.tag_this_as_' + higherOrLower + '.title'),
87367                     onClick: function(context) {
87368
87369                         var mode = context.mode();
87370                         if (!mode || mode.id !== 'select') { return; }
87371
87372                         var selectedIDs = mode.selectedIDs();
87373                         if (selectedIDs.length !== 1) { return; }
87374
87375                         var selectedID = selectedIDs[0];
87376                         if (!this.issue.entityIds.some(function(entityId) {
87377                             return entityId === selectedID;
87378                         })) { return; }
87379
87380                         var entity = context.hasEntity(selectedID);
87381                         if (!entity) { return; }
87382
87383                         var tags = Object.assign({}, entity.tags);   // shallow copy
87384                         var layer = tags.layer && Number(tags.layer);
87385                         if (layer && !isNaN(layer)) {
87386                             if (higherOrLower === 'higher') {
87387                                 layer += 1;
87388                             } else {
87389                                 layer -= 1;
87390                             }
87391                         } else {
87392                             if (higherOrLower === 'higher') {
87393                                 layer = 1;
87394                             } else {
87395                                 layer = -1;
87396                             }
87397                         }
87398                         tags.layer = layer.toString();
87399                         context.perform(
87400                             actionChangeTags(entity.id, tags),
87401                             t('operations.change_tags.annotation')
87402                         );
87403                     }
87404                 });
87405             }
87406
87407             validation.type = type;
87408
87409             return validation;
87410         }
87411
87412         function validationDisconnectedWay() {
87413             var type = 'disconnected_way';
87414
87415             function isTaggedAsHighway(entity) {
87416                 return osmRoutableHighwayTagValues[entity.tags.highway];
87417             }
87418
87419             var validation = function checkDisconnectedWay(entity, graph) {
87420
87421                 var routingIslandWays = routingIslandForEntity(entity);
87422                 if (!routingIslandWays) { return []; }
87423
87424                 return [new validationIssue({
87425                     type: type,
87426                     subtype: 'highway',
87427                     severity: 'warning',
87428                     message: function(context) {
87429                         if (this.entityIds.length === 1) {
87430                             var entity = context.hasEntity(this.entityIds[0]);
87431                             return entity ? t('issues.disconnected_way.highway.message', { highway: utilDisplayLabel(entity, context) }) : '';
87432                         }
87433                         return t('issues.disconnected_way.routable.message.multiple', { count: this.entityIds.length.toString() });
87434                     },
87435                     reference: showReference,
87436                     entityIds: Array.from(routingIslandWays).map(function(way) { return way.id; }),
87437                     dynamicFixes: makeFixes
87438                 })];
87439
87440
87441                 function makeFixes(context) {
87442
87443                     var fixes = [];
87444
87445                     var singleEntity = this.entityIds.length === 1 && context.hasEntity(this.entityIds[0]);
87446
87447                     if (singleEntity) {
87448
87449                         if (singleEntity.type === 'way' && !singleEntity.isClosed()) {
87450
87451                             var startFix = makeContinueDrawingFixIfAllowed(singleEntity.first(), 'start');
87452                             if (startFix) { fixes.push(startFix); }
87453
87454                             var endFix = makeContinueDrawingFixIfAllowed(singleEntity.last(), 'end');
87455                             if (endFix) { fixes.push(endFix); }
87456                         }
87457                         if (!fixes.length) {
87458                             fixes.push(new validationIssueFix({
87459                                 title: t('issues.fix.connect_feature.title')
87460                             }));
87461                         }
87462
87463                         fixes.push(new validationIssueFix({
87464                             icon: 'iD-operation-delete',
87465                             title: t('issues.fix.delete_feature.title'),
87466                             entityIds: [singleEntity.id],
87467                             onClick: function(context) {
87468                                 var id = this.issue.entityIds[0];
87469                                 var operation = operationDelete([id], context);
87470                                 if (!operation.disabled()) {
87471                                     operation();
87472                                 }
87473                             }
87474                         }));
87475                     } else {
87476                         fixes.push(new validationIssueFix({
87477                             title: t('issues.fix.connect_features.title')
87478                         }));
87479                     }
87480
87481                     return fixes;
87482                 }
87483
87484
87485                 function showReference(selection) {
87486                     selection.selectAll('.issue-reference')
87487                         .data([0])
87488                         .enter()
87489                         .append('div')
87490                         .attr('class', 'issue-reference')
87491                         .text(t('issues.disconnected_way.routable.reference'));
87492                 }
87493
87494                 function routingIslandForEntity(entity) {
87495
87496                     var routingIsland = new Set();  // the interconnected routable features
87497                     var waysToCheck = [];           // the queue of remaining routable ways to traverse
87498
87499                     function queueParentWays(node) {
87500                         graph.parentWays(node).forEach(function(parentWay) {
87501                             if (!routingIsland.has(parentWay) &&    // only check each feature once
87502                                 isRoutableWay(parentWay, false)) {  // only check routable features
87503                                 routingIsland.add(parentWay);
87504                                 waysToCheck.push(parentWay);
87505                             }
87506                         });
87507                     }
87508
87509                     if (entity.type === 'way' && isRoutableWay(entity, true)) {
87510
87511                         routingIsland.add(entity);
87512                         waysToCheck.push(entity);
87513
87514                     } else if (entity.type === 'node' && isRoutableNode(entity)) {
87515
87516                         routingIsland.add(entity);
87517                         queueParentWays(entity);
87518
87519                     } else {
87520                         // this feature isn't routable, cannot be a routing island
87521                         return null;
87522                     }
87523
87524                     while (waysToCheck.length) {
87525                         var wayToCheck = waysToCheck.pop();
87526                         var childNodes = graph.childNodes(wayToCheck);
87527                         for (var i in childNodes) {
87528                             var vertex = childNodes[i];
87529
87530                             if (isConnectedVertex(vertex)) {
87531                                 // found a link to the wider network, not a routing island
87532                                 return null;
87533                             }
87534
87535                             if (isRoutableNode(vertex)) {
87536                                 routingIsland.add(vertex);
87537                             }
87538
87539                             queueParentWays(vertex);
87540                         }
87541                     }
87542
87543                     // no network link found, this is a routing island, return its members
87544                     return routingIsland;
87545                 }
87546
87547                 function isConnectedVertex(vertex) {
87548                     // assume ways overlapping unloaded tiles are connected to the wider road network  - #5938
87549                     var osm = services$1.osm;
87550                     if (osm && !osm.isDataLoaded(vertex.loc)) { return true; }
87551
87552                     // entrances are considered connected
87553                     if (vertex.tags.entrance &&
87554                         vertex.tags.entrance !== 'no') { return true; }
87555                     if (vertex.tags.amenity === 'parking_entrance') { return true; }
87556
87557                     return false;
87558                 }
87559
87560                 function isRoutableNode(node) {
87561                     // treat elevators as distinct features in the highway network
87562                     if (node.tags.highway === 'elevator') { return true; }
87563                     return false;
87564                 }
87565
87566                 function isRoutableWay(way, ignoreInnerWays) {
87567                     if (isTaggedAsHighway(way) || way.tags.route === 'ferry') { return true; }
87568
87569                     return graph.parentRelations(way).some(function(parentRelation) {
87570                         if (parentRelation.tags.type === 'route' &&
87571                             parentRelation.tags.route === 'ferry') { return true; }
87572
87573                         if (parentRelation.isMultipolygon() &&
87574                             isTaggedAsHighway(parentRelation) &&
87575                             (!ignoreInnerWays || parentRelation.memberById(way.id).role !== 'inner')) { return true; }
87576                     });
87577                 }
87578
87579                 function makeContinueDrawingFixIfAllowed(vertexID, whichEnd) {
87580                     var vertex = graph.hasEntity(vertexID);
87581                     if (!vertex || vertex.tags.noexit === 'yes') { return null; }
87582
87583                     var useLeftContinue = (whichEnd === 'start' && textDirection === 'ltr') ||
87584                         (whichEnd === 'end' && textDirection === 'rtl');
87585
87586                     return new validationIssueFix({
87587                         icon: 'iD-operation-continue' + (useLeftContinue ? '-left' : ''),
87588                         title: t('issues.fix.continue_from_' + whichEnd + '.title'),
87589                         entityIds: [vertexID],
87590                         onClick: function(context) {
87591                             var wayId = this.issue.entityIds[0];
87592                             var way = context.hasEntity(wayId);
87593                             var vertexId = this.entityIds[0];
87594                             var vertex = context.hasEntity(vertexId);
87595
87596                             if (!way || !vertex) { return; }
87597
87598                             // make sure the vertex is actually visible and editable
87599                             var map = context.map();
87600                             if (!context.editable() || !map.trimmedExtent().contains(vertex.loc)) {
87601                                 map.zoomToEase(vertex);
87602                             }
87603
87604                             context.enter(
87605                                 modeDrawLine(context, wayId, context.graph(), context.graph(), 'line', way.affix(vertexId), true)
87606                             );
87607                         }
87608                     });
87609                 }
87610
87611             };
87612
87613             validation.type = type;
87614
87615             return validation;
87616         }
87617
87618         function validationFormatting() {
87619             var type = 'invalid_format';
87620
87621             var validation = function(entity) {
87622                 var issues = [];
87623
87624                 function isValidEmail(email) {
87625                     // Emails in OSM are going to be official so they should be pretty simple
87626                     // Using negated lists to better support all possible unicode characters (#6494)
87627                     var valid_email = /^[^\(\)\\,":;<>@\[\]]+@[^\(\)\\,":;<>@\[\]\.]+(?:\.[a-z0-9-]+)*$/i;
87628
87629                     // An empty value is also acceptable
87630                     return (!email || valid_email.test(email));
87631                 }
87632                 /*
87633                 function isSchemePresent(url) {
87634                     var valid_scheme = /^https?:\/\//i;
87635                     return (!url || valid_scheme.test(url));
87636                 }
87637                 */
87638                 function showReferenceEmail(selection) {
87639                     selection.selectAll('.issue-reference')
87640                         .data([0])
87641                         .enter()
87642                         .append('div')
87643                         .attr('class', 'issue-reference')
87644                         .text(t('issues.invalid_format.email.reference'));
87645                 }
87646                 /*
87647                 function showReferenceWebsite(selection) {
87648                     selection.selectAll('.issue-reference')
87649                         .data([0])
87650                         .enter()
87651                         .append('div')
87652                         .attr('class', 'issue-reference')
87653                         .text(t('issues.invalid_format.website.reference'));
87654                 }
87655
87656                 if (entity.tags.website) {
87657                     // Multiple websites are possible
87658                     // If ever we support ES6, arrow functions make this nicer
87659                     var websites = entity.tags.website
87660                         .split(';')
87661                         .map(function(s) { return s.trim(); })
87662                         .filter(function(x) { return !isSchemePresent(x); });
87663
87664                     if (websites.length) {
87665                         issues.push(new validationIssue({
87666                             type: type,
87667                             subtype: 'website',
87668                             severity: 'warning',
87669                             message: function(context) {
87670                                 var entity = context.hasEntity(this.entityIds[0]);
87671                                 return entity ? t('issues.invalid_format.website.message' + this.data,
87672                                     { feature: utilDisplayLabel(entity, context), site: websites.join(', ') }) : '';
87673                             },
87674                             reference: showReferenceWebsite,
87675                             entityIds: [entity.id],
87676                             hash: websites.join(),
87677                             data: (websites.length > 1) ? '_multi' : ''
87678                         }));
87679                     }
87680                 }
87681                 */
87682                 if (entity.tags.email) {
87683                     // Multiple emails are possible
87684                     var emails = entity.tags.email
87685                         .split(';')
87686                         .map(function(s) { return s.trim(); })
87687                         .filter(function(x) { return !isValidEmail(x); });
87688
87689                     if (emails.length) {
87690                         issues.push(new validationIssue({
87691                             type: type,
87692                             subtype: 'email',
87693                             severity: 'warning',
87694                             message: function(context) {
87695                                 var entity = context.hasEntity(this.entityIds[0]);
87696                                 return entity ? t('issues.invalid_format.email.message' + this.data,
87697                                     { feature: utilDisplayLabel(entity, context), email: emails.join(', ') }) : '';
87698                             },
87699                             reference: showReferenceEmail,
87700                             entityIds: [entity.id],
87701                             hash: emails.join(),
87702                             data: (emails.length > 1) ? '_multi' : ''
87703                         }));
87704                     }
87705                 }
87706
87707                 return issues;
87708             };
87709
87710             validation.type = type;
87711
87712             return validation;
87713         }
87714
87715         function validationHelpRequest(context) {
87716             var type = 'help_request';
87717
87718             var validation = function checkFixmeTag(entity) {
87719
87720                 if (!entity.tags.fixme) { return []; }
87721
87722                 // don't flag fixmes on features added by the user
87723                 if (entity.version === undefined) { return []; }
87724
87725                 if (entity.v !== undefined) {
87726                     var baseEntity = context.history().base().hasEntity(entity.id);
87727                     // don't flag fixmes added by the user on existing features
87728                     if (!baseEntity || !baseEntity.tags.fixme) { return []; }
87729                 }
87730
87731                 return [new validationIssue({
87732                     type: type,
87733                     subtype: 'fixme_tag',
87734                     severity: 'warning',
87735                     message: function(context) {
87736                         var entity = context.hasEntity(this.entityIds[0]);
87737                         return entity ? t('issues.fixme_tag.message', { feature: utilDisplayLabel(entity, context) }) : '';
87738                     },
87739                     dynamicFixes: function() {
87740                         return [
87741                             new validationIssueFix({
87742                                 title: t('issues.fix.address_the_concern.title')
87743                             })
87744                         ];
87745                     },
87746                     reference: showReference,
87747                     entityIds: [entity.id]
87748                 })];
87749
87750                 function showReference(selection) {
87751                     selection.selectAll('.issue-reference')
87752                         .data([0])
87753                         .enter()
87754                         .append('div')
87755                         .attr('class', 'issue-reference')
87756                         .text(t('issues.fixme_tag.reference'));
87757                 }
87758             };
87759
87760             validation.type = type;
87761
87762             return validation;
87763         }
87764
87765         function validationImpossibleOneway() {
87766             var type = 'impossible_oneway';
87767
87768             var validation = function checkImpossibleOneway(entity, graph) {
87769
87770                 if (entity.type !== 'way' || entity.geometry(graph) !== 'line') { return []; }
87771
87772                 if (entity.isClosed()) { return []; }
87773
87774                 if (!typeForWay(entity)) { return []; }
87775
87776                 if (!isOneway(entity)) { return []; }
87777
87778                 var firstIssues = issuesForNode(entity, entity.first());
87779                 var lastIssues = issuesForNode(entity, entity.last());
87780
87781                 return firstIssues.concat(lastIssues);
87782
87783                 function typeForWay(way) {
87784                     if (way.geometry(graph) !== 'line') { return null; }
87785
87786                     if (osmRoutableHighwayTagValues[way.tags.highway]) { return 'highway'; }
87787                     if (osmFlowingWaterwayTagValues[way.tags.waterway]) { return 'waterway'; }
87788                     return null;
87789                 }
87790
87791                 function isOneway(way) {
87792                     if (way.tags.oneway === 'yes') { return true; }
87793                     if (way.tags.oneway) { return false; }
87794
87795                     for (var key in way.tags) {
87796                         if (osmOneWayTags[key] && osmOneWayTags[key][way.tags[key]]) {
87797                             return true;
87798                         }
87799                     }
87800                     return false;
87801                 }
87802
87803                 function nodeOccursMoreThanOnce(way, nodeID) {
87804                     var occurences = 0;
87805                     for (var index in way.nodes) {
87806                         if (way.nodes[index] === nodeID) {
87807                             occurences += 1;
87808                             if (occurences > 1) { return true; }
87809                         }
87810                     }
87811                     return false;
87812                 }
87813
87814                 function isConnectedViaOtherTypes(way, node) {
87815
87816                     var wayType = typeForWay(way);
87817
87818                     if (wayType === 'highway') {
87819                         // entrances are considered connected
87820                         if (node.tags.entrance && node.tags.entrance !== 'no') { return true; }
87821                         if (node.tags.amenity === 'parking_entrance') { return true; }
87822                     } else if (wayType === 'waterway') {
87823                         if (node.id === way.first()) {
87824                             // multiple waterways may start at the same spring
87825                             if (node.tags.natural === 'spring') { return true; }
87826                         } else {
87827                             // multiple waterways may end at the same drain
87828                             if (node.tags.manhole === 'drain') { return true; }
87829                         }
87830                     }
87831
87832                     return graph.parentWays(node).some(function(parentWay) {
87833                         if (parentWay.id === way.id) { return false; }
87834
87835                         if (wayType === 'highway') {
87836
87837                             // allow connections to highway areas
87838                             if (parentWay.geometry(graph) === 'area' &&
87839                                 osmRoutableHighwayTagValues[parentWay.tags.highway]) { return true; }
87840
87841                             // count connections to ferry routes as connected
87842                             if (parentWay.tags.route === 'ferry') { return true; }
87843
87844                             return graph.parentRelations(parentWay).some(function(parentRelation) {
87845                                 if (parentRelation.tags.type === 'route' &&
87846                                     parentRelation.tags.route === 'ferry') { return true; }
87847
87848                                 // allow connections to highway multipolygons
87849                                 return parentRelation.isMultipolygon() && osmRoutableHighwayTagValues[parentRelation.tags.highway];
87850                             });
87851                         } else if (wayType === 'waterway') {
87852                             // multiple waterways may start or end at a water body at the same node
87853                             if (parentWay.tags.natural === 'water' ||
87854                                 parentWay.tags.natural === 'coastline') { return true; }
87855                         }
87856                         return false;
87857                     });
87858                 }
87859
87860                 function issuesForNode(way, nodeID) {
87861
87862                     var isFirst = nodeID === way.first();
87863
87864                     var wayType = typeForWay(way);
87865
87866                     // ignore if this way is self-connected at this node
87867                     if (nodeOccursMoreThanOnce(way, nodeID)) { return []; }
87868
87869                     var osm = services$1.osm;
87870                     if (!osm) { return []; }
87871
87872                     var node = graph.hasEntity(nodeID);
87873
87874                     // ignore if this node or its tile are unloaded
87875                     if (!node || !osm.isDataLoaded(node.loc)) { return []; }
87876
87877                     if (isConnectedViaOtherTypes(way, node)) { return []; }
87878
87879                     var attachedWaysOfSameType = graph.parentWays(node).filter(function(parentWay) {
87880                         if (parentWay.id === way.id) { return false; }
87881                         return typeForWay(parentWay) === wayType;
87882                     });
87883
87884                     // assume it's okay for waterways to start or end disconnected for now
87885                     if (wayType === 'waterway' && attachedWaysOfSameType.length === 0) { return []; }
87886
87887                     var attachedOneways = attachedWaysOfSameType.filter(function(attachedWay) {
87888                         return isOneway(attachedWay);
87889                     });
87890
87891                     // ignore if the way is connected to some non-oneway features
87892                     if (attachedOneways.length < attachedWaysOfSameType.length) { return []; }
87893
87894                     if (attachedOneways.length) {
87895                         var connectedEndpointsOkay = attachedOneways.some(function(attachedOneway) {
87896                             if ((isFirst ? attachedOneway.first() : attachedOneway.last()) !== nodeID) { return true; }
87897                             if (nodeOccursMoreThanOnce(attachedOneway, nodeID)) { return true; }
87898                             return false;
87899                         });
87900                         if (connectedEndpointsOkay) { return []; }
87901                     }
87902
87903                     var placement = isFirst ? 'start' : 'end',
87904                         messageID = wayType + '.',
87905                         referenceID = wayType + '.';
87906
87907                     if (wayType === 'waterway') {
87908                         messageID += 'connected.' + placement;
87909                         referenceID += 'connected';
87910                     } else {
87911                         messageID += placement;
87912                         referenceID += placement;
87913                     }
87914
87915                     return [new validationIssue({
87916                         type: type,
87917                         subtype: wayType,
87918                         severity: 'warning',
87919                         message: function(context) {
87920                             var entity = context.hasEntity(this.entityIds[0]);
87921                             return entity ? t('issues.impossible_oneway.' + messageID + '.message', {
87922                                 feature: utilDisplayLabel(entity, context)
87923                             }) : '';
87924                         },
87925                         reference: getReference(referenceID),
87926                         entityIds: [way.id, node.id],
87927                         dynamicFixes: function() {
87928
87929                             var fixes = [];
87930
87931                             if (attachedOneways.length) {
87932                                 fixes.push(new validationIssueFix({
87933                                     icon: 'iD-operation-reverse',
87934                                     title: t('issues.fix.reverse_feature.title'),
87935                                     entityIds: [way.id],
87936                                     onClick: function(context) {
87937                                         var id = this.issue.entityIds[0];
87938                                         context.perform(actionReverse(id), t('operations.reverse.annotation'));
87939                                     }
87940                                 }));
87941                             }
87942                             if (node.tags.noexit !== 'yes') {
87943                                 var useLeftContinue = (isFirst && textDirection === 'ltr') ||
87944                                     (!isFirst && textDirection === 'rtl');
87945                                 fixes.push(new validationIssueFix({
87946                                     icon: 'iD-operation-continue' + (useLeftContinue ? '-left' : ''),
87947                                     title: t('issues.fix.continue_from_' + (isFirst ? 'start' : 'end') + '.title'),
87948                                     onClick: function(context) {
87949                                         var entityID = this.issue.entityIds[0];
87950                                         var vertexID = this.issue.entityIds[1];
87951                                         var way = context.entity(entityID);
87952                                         var vertex = context.entity(vertexID);
87953                                         continueDrawing(way, vertex, context);
87954                                     }
87955                                 }));
87956                             }
87957
87958                             return fixes;
87959                         },
87960                         loc: node.loc
87961                     })];
87962
87963                     function getReference(referenceID) {
87964                         return function showReference(selection) {
87965                             selection.selectAll('.issue-reference')
87966                                 .data([0])
87967                                 .enter()
87968                                 .append('div')
87969                                 .attr('class', 'issue-reference')
87970                                 .text(t('issues.impossible_oneway.' + referenceID + '.reference'));
87971                         };
87972                     }
87973                 }
87974             };
87975
87976             function continueDrawing(way, vertex, context) {
87977                 // make sure the vertex is actually visible and editable
87978                 var map = context.map();
87979                 if (!context.editable() || !map.trimmedExtent().contains(vertex.loc)) {
87980                     map.zoomToEase(vertex);
87981                 }
87982
87983                 context.enter(
87984                     modeDrawLine(context, way.id, context.graph(), context.graph(), 'line', way.affix(vertex.id), true)
87985                 );
87986             }
87987
87988             validation.type = type;
87989
87990             return validation;
87991         }
87992
87993         function validationIncompatibleSource() {
87994             var type = 'incompatible_source';
87995             var invalidSources = [
87996                 {
87997                     id:'google', regex:'google', exceptRegex: 'books.google|Google Books'
87998                 }
87999             ];
88000
88001             var validation = function checkIncompatibleSource(entity) {
88002
88003                 var entitySources = entity.tags && entity.tags.source && entity.tags.source.split(';');
88004
88005                 if (!entitySources) { return []; }
88006
88007                 var issues = [];
88008
88009                 invalidSources.forEach(function(invalidSource) {
88010
88011                     var hasInvalidSource = entitySources.some(function(source) {
88012                         if (!source.match(new RegExp(invalidSource.regex, 'i'))) { return false; }
88013                         if (invalidSource.exceptRegex && source.match(new RegExp(invalidSource.exceptRegex, 'i'))) { return false; }
88014                         return true;
88015                     });
88016
88017                     if (!hasInvalidSource) { return; }
88018
88019                     issues.push(new validationIssue({
88020                         type: type,
88021                         severity: 'warning',
88022                         message: function(context) {
88023                             var entity = context.hasEntity(this.entityIds[0]);
88024                             return entity ? t('issues.incompatible_source.' + invalidSource.id + '.feature.message', {
88025                                 feature: utilDisplayLabel(entity, context)
88026                             }) : '';
88027                         },
88028                         reference: getReference(invalidSource.id),
88029                         entityIds: [entity.id],
88030                         dynamicFixes: function() {
88031                             return [
88032                                 new validationIssueFix({
88033                                     title: t('issues.fix.remove_proprietary_data.title')
88034                                 })
88035                             ];
88036                         }
88037                     }));
88038                 });
88039
88040                 return issues;
88041
88042
88043                 function getReference(id) {
88044                     return function showReference(selection) {
88045                         selection.selectAll('.issue-reference')
88046                             .data([0])
88047                             .enter()
88048                             .append('div')
88049                             .attr('class', 'issue-reference')
88050                             .text(t('issues.incompatible_source.' + id + '.reference'));
88051                     };
88052                 }
88053             };
88054
88055             validation.type = type;
88056
88057             return validation;
88058         }
88059
88060         function validationMaprules() {
88061             var type = 'maprules';
88062
88063             var validation = function checkMaprules(entity, graph) {
88064                 if (!services$1.maprules) { return []; }
88065
88066                 var rules = services$1.maprules.validationRules();
88067                 var issues = [];
88068
88069                 for (var i = 0; i < rules.length; i++) {
88070                     var rule = rules[i];
88071                     rule.findIssues(entity, graph, issues);
88072                 }
88073
88074                 return issues;
88075             };
88076
88077
88078             validation.type = type;
88079
88080             return validation;
88081         }
88082
88083         function validationMismatchedGeometry(context) {
88084             var type = 'mismatched_geometry';
88085
88086             function tagSuggestingLineIsArea(entity) {
88087                 if (entity.type !== 'way' || entity.isClosed()) { return null; }
88088
88089                 var tagSuggestingArea = entity.tagSuggestingArea();
88090                 if (!tagSuggestingArea) {
88091                     return null;
88092                 }
88093
88094                 if (context.presets().matchTags(tagSuggestingArea, 'line') ===
88095                     context.presets().matchTags(tagSuggestingArea, 'area')) {
88096                     // these tags also allow lines and making this an area wouldn't matter
88097                     return null;
88098                 }
88099
88100                 return tagSuggestingArea;
88101             }
88102
88103             function makeConnectEndpointsFixOnClick(way, graph) {
88104                 // must have at least three nodes to close this automatically
88105                 if (way.nodes.length < 3) { return null; }
88106
88107                 var nodes = graph.childNodes(way), testNodes;
88108                 var firstToLastDistanceMeters = geoSphericalDistance(nodes[0].loc, nodes[nodes.length-1].loc);
88109
88110                 // if the distance is very small, attempt to merge the endpoints
88111                 if (firstToLastDistanceMeters < 0.75) {
88112                     testNodes = nodes.slice();   // shallow copy
88113                     testNodes.pop();
88114                     testNodes.push(testNodes[0]);
88115                     // make sure this will not create a self-intersection
88116                     if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
88117                         return function(context) {
88118                             var way = context.entity(this.issue.entityIds[0]);
88119                             context.perform(
88120                                 actionMergeNodes([way.nodes[0], way.nodes[way.nodes.length-1]], nodes[0].loc),
88121                                 t('issues.fix.connect_endpoints.annotation')
88122                             );
88123                         };
88124                     }
88125                 }
88126
88127                 // if the points were not merged, attempt to close the way
88128                 testNodes = nodes.slice();   // shallow copy
88129                 testNodes.push(testNodes[0]);
88130                 // make sure this will not create a self-intersection
88131                 if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
88132                     return function(context) {
88133                         var wayId = this.issue.entityIds[0];
88134                         var way = context.entity(wayId);
88135                         var nodeId = way.nodes[0];
88136                         var index = way.nodes.length;
88137                         context.perform(
88138                             actionAddVertex(wayId, nodeId, index),
88139                             t('issues.fix.connect_endpoints.annotation')
88140                         );
88141                     };
88142                 }
88143             }
88144
88145             function lineTaggedAsAreaIssue(entity) {
88146
88147                 var tagSuggestingArea = tagSuggestingLineIsArea(entity);
88148                 if (!tagSuggestingArea) { return null; }
88149
88150                 return new validationIssue({
88151                     type: type,
88152                     subtype: 'area_as_line',
88153                     severity: 'warning',
88154                     message: function(context) {
88155                         var entity = context.hasEntity(this.entityIds[0]);
88156                         return entity ? t('issues.tag_suggests_area.message', {
88157                             feature: utilDisplayLabel(entity, context),
88158                             tag: utilTagText({ tags: tagSuggestingArea })
88159                         }) : '';
88160                     },
88161                     reference: showReference,
88162                     entityIds: [entity.id],
88163                     hash: JSON.stringify(tagSuggestingArea),
88164                     dynamicFixes: function(context) {
88165
88166                         var fixes = [];
88167
88168                         var entity = context.entity(this.entityIds[0]);
88169                         var connectEndsOnClick = makeConnectEndpointsFixOnClick(entity, context.graph());
88170
88171                         fixes.push(new validationIssueFix({
88172                             title: t('issues.fix.connect_endpoints.title'),
88173                             onClick: connectEndsOnClick
88174                         }));
88175
88176                         fixes.push(new validationIssueFix({
88177                             icon: 'iD-operation-delete',
88178                             title: t('issues.fix.remove_tag.title'),
88179                             onClick: function(context) {
88180                                 var entityId = this.issue.entityIds[0];
88181                                 var entity = context.entity(entityId);
88182                                 var tags = Object.assign({}, entity.tags);  // shallow copy
88183                                 for (var key in tagSuggestingArea) {
88184                                     delete tags[key];
88185                                 }
88186                                 context.perform(
88187                                     actionChangeTags(entityId, tags),
88188                                     t('issues.fix.remove_tag.annotation')
88189                                 );
88190                             }
88191                         }));
88192
88193                         return fixes;
88194                     }
88195                 });
88196
88197
88198                 function showReference(selection) {
88199                     selection.selectAll('.issue-reference')
88200                         .data([0])
88201                         .enter()
88202                         .append('div')
88203                         .attr('class', 'issue-reference')
88204                         .text(t('issues.tag_suggests_area.reference'));
88205                 }
88206             }
88207
88208             function vertexTaggedAsPointIssue(entity, graph) {
88209                 // we only care about nodes
88210                 if (entity.type !== 'node') { return null; }
88211
88212                 // ignore tagless points
88213                 if (Object.keys(entity.tags).length === 0) { return null; }
88214
88215                 // address lines are special so just ignore them
88216                 if (entity.isOnAddressLine(graph)) { return null; }
88217
88218                 var geometry = entity.geometry(graph);
88219                 var allowedGeometries = osmNodeGeometriesForTags(entity.tags);
88220
88221                 if (geometry === 'point' && !allowedGeometries.point && allowedGeometries.vertex) {
88222
88223                     return new validationIssue({
88224                         type: type,
88225                         subtype: 'vertex_as_point',
88226                         severity: 'warning',
88227                         message: function(context) {
88228                             var entity = context.hasEntity(this.entityIds[0]);
88229                             return entity ? t('issues.vertex_as_point.message', {
88230                                 feature: utilDisplayLabel(entity, context)
88231                             }) : '';
88232                         },
88233                         reference: function showReference(selection) {
88234                             selection.selectAll('.issue-reference')
88235                                 .data([0])
88236                                 .enter()
88237                                 .append('div')
88238                                 .attr('class', 'issue-reference')
88239                                 .text(t('issues.vertex_as_point.reference'));
88240                         },
88241                         entityIds: [entity.id]
88242                     });
88243
88244                 } else if (geometry === 'vertex' && !allowedGeometries.vertex && allowedGeometries.point) {
88245
88246                     return new validationIssue({
88247                         type: type,
88248                         subtype: 'point_as_vertex',
88249                         severity: 'warning',
88250                         message: function(context) {
88251                             var entity = context.hasEntity(this.entityIds[0]);
88252                             return entity ? t('issues.point_as_vertex.message', {
88253                                 feature: utilDisplayLabel(entity, context)
88254                             }) : '';
88255                         },
88256                         reference: function showReference(selection) {
88257                             selection.selectAll('.issue-reference')
88258                                 .data([0])
88259                                 .enter()
88260                                 .append('div')
88261                                 .attr('class', 'issue-reference')
88262                                 .text(t('issues.point_as_vertex.reference'));
88263                         },
88264                         entityIds: [entity.id],
88265                         dynamicFixes: function(context) {
88266
88267                             var entityId = this.entityIds[0];
88268
88269                             var extractOnClick = null;
88270                             if (!context.hasHiddenConnections(entityId) &&
88271                                 !actionExtract(entityId, context.projection).disabled(context.graph())) {
88272
88273                                 extractOnClick = function(context) {
88274                                     var entityId = this.issue.entityIds[0];
88275                                     var action = actionExtract(entityId, context.projection);
88276                                     context.perform(
88277                                         action,
88278                                         t('operations.extract.annotation.single')
88279                                     );
88280                                     // re-enter mode to trigger updates
88281                                     context.enter(modeSelect(context, [action.getExtractedNodeID()]));
88282                                 };
88283                             }
88284
88285                             return [
88286                                 new validationIssueFix({
88287                                     icon: 'iD-operation-extract',
88288                                     title: t('issues.fix.extract_point.title'),
88289                                     onClick: extractOnClick
88290                                 })
88291                             ];
88292                         }
88293                     });
88294                 }
88295
88296                 return null;
88297             }
88298
88299             function unclosedMultipolygonPartIssues(entity, graph) {
88300
88301                 if (entity.type !== 'relation' ||
88302                     !entity.isMultipolygon() ||
88303                     entity.isDegenerate() ||
88304                     // cannot determine issues for incompletely-downloaded relations
88305                     !entity.isComplete(graph)) { return null; }
88306
88307                 var sequences = osmJoinWays(entity.members, graph);
88308
88309                 var issues = [];
88310
88311                 for (var i in sequences) {
88312                     var sequence = sequences[i];
88313
88314                     if (!sequence.nodes) { continue; }
88315
88316                     var firstNode = sequence.nodes[0];
88317                     var lastNode = sequence.nodes[sequence.nodes.length - 1];
88318
88319                     // part is closed if the first and last nodes are the same
88320                     if (firstNode === lastNode) { continue; }
88321
88322                     var issue = new validationIssue({
88323                         type: type,
88324                         subtype: 'unclosed_multipolygon_part',
88325                         severity: 'warning',
88326                         message: function(context) {
88327                             var entity = context.hasEntity(this.entityIds[0]);
88328                             return entity ? t('issues.unclosed_multipolygon_part.message', {
88329                                 feature: utilDisplayLabel(entity, context)
88330                             }) : '';
88331                         },
88332                         reference: showReference,
88333                         loc: sequence.nodes[0].loc,
88334                         entityIds: [entity.id],
88335                         hash: sequence.map(function(way) {
88336                             return way.id;
88337                         }).join()
88338                     });
88339                     issues.push(issue);
88340                 }
88341
88342                 return issues;
88343
88344                 function showReference(selection) {
88345                     selection.selectAll('.issue-reference')
88346                         .data([0])
88347                         .enter()
88348                         .append('div')
88349                         .attr('class', 'issue-reference')
88350                         .text(t('issues.unclosed_multipolygon_part.reference'));
88351                 }
88352             }
88353
88354             var validation = function checkMismatchedGeometry(entity, graph) {
88355                 var issues = [
88356                     vertexTaggedAsPointIssue(entity, graph),
88357                     lineTaggedAsAreaIssue(entity)
88358                 ];
88359                 issues = issues.concat(unclosedMultipolygonPartIssues(entity, graph));
88360                 return issues.filter(Boolean);
88361             };
88362
88363             validation.type = type;
88364
88365             return validation;
88366         }
88367
88368         function validationMissingRole() {
88369             var type = 'missing_role';
88370
88371             var validation = function checkMissingRole(entity, graph) {
88372                 var issues = [];
88373                 if (entity.type === 'way') {
88374                     graph.parentRelations(entity).forEach(function(relation) {
88375                         if (!relation.isMultipolygon()) { return; }
88376
88377                         var member = relation.memberById(entity.id);
88378                         if (member && isMissingRole(member)) {
88379                             issues.push(makeIssue(entity, relation, member));
88380                         }
88381                     });
88382                 } else if (entity.type === 'relation' && entity.isMultipolygon()) {
88383                     entity.indexedMembers().forEach(function(member) {
88384                         var way = graph.hasEntity(member.id);
88385                         if (way && isMissingRole(member)) {
88386                             issues.push(makeIssue(way, entity, member));
88387                         }
88388                     });
88389                 }
88390
88391                 return issues;
88392             };
88393
88394
88395             function isMissingRole(member) {
88396                 return !member.role || !member.role.trim().length;
88397             }
88398
88399
88400             function makeIssue(way, relation, member) {
88401                 return new validationIssue({
88402                     type: type,
88403                     severity: 'warning',
88404                     message: function(context) {
88405                         var member = context.hasEntity(this.entityIds[1]),
88406                             relation = context.hasEntity(this.entityIds[0]);
88407                         return (member && relation) ? t('issues.missing_role.message', {
88408                             member: utilDisplayLabel(member, context),
88409                             relation: utilDisplayLabel(relation, context)
88410                         }) : '';
88411                     },
88412                     reference: showReference,
88413                     entityIds: [relation.id, way.id],
88414                     data: {
88415                         member: member
88416                     },
88417                     hash: member.index.toString(),
88418                     dynamicFixes: function() {
88419                         return [
88420                             makeAddRoleFix('inner'),
88421                             makeAddRoleFix('outer'),
88422                             new validationIssueFix({
88423                                 icon: 'iD-operation-delete',
88424                                 title: t('issues.fix.remove_from_relation.title'),
88425                                 onClick: function(context) {
88426                                     context.perform(
88427                                         actionDeleteMember(this.issue.entityIds[0], this.issue.data.member.index),
88428                                         t('operations.delete_member.annotation')
88429                                     );
88430                                 }
88431                             })
88432                         ];
88433                     }
88434                 });
88435
88436
88437                 function showReference(selection) {
88438                     selection.selectAll('.issue-reference')
88439                         .data([0])
88440                         .enter()
88441                         .append('div')
88442                         .attr('class', 'issue-reference')
88443                         .text(t('issues.missing_role.multipolygon.reference'));
88444                 }
88445             }
88446
88447
88448             function makeAddRoleFix(role) {
88449                 return new validationIssueFix({
88450                     title: t('issues.fix.set_as_' + role + '.title'),
88451                     onClick: function(context) {
88452                         var oldMember = this.issue.data.member;
88453                         var member = { id: this.issue.entityIds[1], type: oldMember.type, role: role };
88454                         context.perform(
88455                             actionChangeMember(this.issue.entityIds[0], member, oldMember.index),
88456                             t('operations.change_role.annotation')
88457                         );
88458                     }
88459                 });
88460             }
88461
88462             validation.type = type;
88463
88464             return validation;
88465         }
88466
88467         function validationMissingTag(context) {
88468             var type = 'missing_tag';
88469
88470             function hasDescriptiveTags(entity, graph) {
88471                 var keys = Object.keys(entity.tags)
88472                     .filter(function(k) {
88473                         if (k === 'area' || k === 'name') {
88474                             return false;
88475                         } else {
88476                             return osmIsInterestingTag(k);
88477                         }
88478                     });
88479
88480                 if (entity.type === 'relation' &&
88481                     keys.length === 1 &&
88482                     entity.tags.type === 'multipolygon') {
88483                     // this relation's only interesting tag just says its a multipolygon,
88484                     // which is not descriptive enough
88485
88486                     // It's okay for a simple multipolygon to have no descriptive tags
88487                     // if its outer way has them (old model, see `outdated_tags.js`)
88488                     return osmOldMultipolygonOuterMemberOfRelation(entity, graph);
88489                 }
88490
88491                 return keys.length > 0;
88492             }
88493
88494             function isUnknownRoad(entity) {
88495                 return entity.type === 'way' && entity.tags.highway === 'road';
88496             }
88497
88498             function isUntypedRelation(entity) {
88499                 return entity.type === 'relation' && !entity.tags.type;
88500             }
88501
88502             var validation = function checkMissingTag(entity, graph) {
88503
88504                 var subtype;
88505
88506                 var osm = context.connection();
88507                 var isUnloadedNode = entity.type === 'node' && osm && !osm.isDataLoaded(entity.loc);
88508
88509                 // we can't know if the node is a vertex if the tile is undownloaded
88510                 if (!isUnloadedNode &&
88511                     // allow untagged nodes that are part of ways
88512                     entity.geometry(graph) !== 'vertex' &&
88513                     // allow untagged entities that are part of relations
88514                     !entity.hasParentRelations(graph)) {
88515
88516                     if (Object.keys(entity.tags).length === 0) {
88517                         subtype = 'any';
88518                     } else if (!hasDescriptiveTags(entity, graph)) {
88519                         subtype = 'descriptive';
88520                     } else if (isUntypedRelation(entity)) {
88521                         subtype = 'relation_type';
88522                     }
88523                 }
88524
88525                 // flag an unknown road even if it's a member of a relation
88526                 if (!subtype && isUnknownRoad(entity)) {
88527                     subtype = 'highway_classification';
88528                 }
88529
88530                 if (!subtype) { return []; }
88531
88532                 var messageID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag.' + subtype;
88533                 var referenceID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag';
88534
88535                 // can always delete if the user created it in the first place..
88536                 var canDelete = (entity.version === undefined || entity.v !== undefined);
88537                 var severity = (canDelete && subtype !== 'highway_classification') ? 'error' : 'warning';
88538
88539                 return [new validationIssue({
88540                     type: type,
88541                     subtype: subtype,
88542                     severity: severity,
88543                     message: function(context) {
88544                         var entity = context.hasEntity(this.entityIds[0]);
88545                         return entity ? t('issues.' + messageID + '.message', {
88546                             feature: utilDisplayLabel(entity, context)
88547                         }) : '';
88548                     },
88549                     reference: showReference,
88550                     entityIds: [entity.id],
88551                     dynamicFixes: function(context) {
88552
88553                         var fixes = [];
88554
88555                         var selectFixType = subtype === 'highway_classification' ? 'select_road_type' : 'select_preset';
88556
88557                         fixes.push(new validationIssueFix({
88558                             icon: 'iD-icon-search',
88559                             title: t('issues.fix.' + selectFixType + '.title'),
88560                             onClick: function(context) {
88561                                 context.ui().sidebar.showPresetList();
88562                             }
88563                         }));
88564
88565                         var deleteOnClick;
88566
88567                         var id = this.entityIds[0];
88568                         var operation = operationDelete([id], context);
88569                         var disabledReasonID = operation.disabled();
88570                         if (!disabledReasonID) {
88571                             deleteOnClick = function(context) {
88572                                 var id = this.issue.entityIds[0];
88573                                 var operation = operationDelete([id], context);
88574                                 if (!operation.disabled()) {
88575                                     operation();
88576                                 }
88577                             };
88578                         }
88579
88580                         fixes.push(
88581                             new validationIssueFix({
88582                                 icon: 'iD-operation-delete',
88583                                 title: t('issues.fix.delete_feature.title'),
88584                                 disabledReason: disabledReasonID ? t('operations.delete.' + disabledReasonID + '.single') : undefined,
88585                                 onClick: deleteOnClick
88586                             })
88587                         );
88588
88589                         return fixes;
88590                     }
88591                 })];
88592
88593                 function showReference(selection) {
88594                     selection.selectAll('.issue-reference')
88595                         .data([0])
88596                         .enter()
88597                         .append('div')
88598                         .attr('class', 'issue-reference')
88599                         .text(t('issues.' + referenceID + '.reference'));
88600                 }
88601             };
88602
88603             validation.type = type;
88604
88605             return validation;
88606         }
88607
88608         var brands = {"amenity/animal_boarding|PetsHotel":{countryCodes:["ca","us"],tags:{amenity:"animal_boarding",animal_boarding:"dog;cat",brand:"PetsHotel","brand:wikidata":"Q67141961",name:"PetsHotel"}},"amenity/bank|ABANCA":{countryCodes:["es"],tags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA",official_name:"ABANCA Corporación Bancaria"}},"amenity/bank|ABN AMRO":{countryCodes:["nl"],tags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"nl:ABN AMRO Group",name:"ABN AMRO",official_name:"ABN AMRO Bank N.V."}},"amenity/bank|ABSA":{countryCodes:["za"],tags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q58641733","brand:wikipedia":"en:Absa Group Limited",name:"ABSA"}},"amenity/bank|AIB":{countryCodes:["gb","ie"],matchNames:["aib bank","allied irish bank"],tags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB",official_name:"Allied Irish Banks"}},"amenity/bank|AMP":{countryCodes:["au","nz"],matchNames:["amp bank"],tags:{amenity:"bank",brand:"AMP","brand:wikidata":"Q295261","brand:wikipedia":"en:AMP Limited",name:"AMP",official_name:"AMP Limited"}},"amenity/bank|ANZ":{countryCodes:["au","nz"],matchNames:["anz bank"],tags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ",official_name:"Australia and New Zealand Banking Group Limited"}},"amenity/bank|ASB Bank":{countryCodes:["nz"],tags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank"}},"amenity/bank|ATB Financial":{countryCodes:["ca"],tags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial",official_name:"Alberta Treasury Branches"}},"amenity/bank|AXA":{nomatch:["office/insurance|AXA"],tags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"}},"amenity/bank|Access Bank":{tags:{amenity:"bank",brand:"Access Bank","brand:wikidata":"Q4672418","brand:wikipedia":"en:Access Bank plc",name:"Access Bank"}},"amenity/bank|ActivoBank":{countryCodes:["pt"],tags:{amenity:"bank",brand:"ActivoBank","brand:wikidata":"Q9581725","brand:wikipedia":"pt:ActivoBank",name:"ActivoBank"}},"amenity/bank|Addiko Bank":{countryCodes:["ba","hr","me","rs","si"],tags:{amenity:"bank",brand:"Addiko Bank","brand:wikidata":"Q27926559","brand:wikipedia":"en:Addiko Bank",name:"Addiko Bank"}},"amenity/bank|Affinity Credit Union":{countryCodes:["ca"],matchNames:["affinity"],tags:{amenity:"bank",brand:"Affinity Credit Union","brand:wikidata":"Q4688969","brand:wikipedia":"en:Affinity Credit Union",name:"Affinity Credit Union"}},"amenity/bank|Agribank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693829","brand:wikipedia":"en:AgriBank",name:"Agribank"}},"amenity/bank|Agribank~(Vietnam)":{countryCodes:["vn"],tags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q1924723","brand:wikipedia":"vi:Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam",name:"Agribank",official_name:"Ngân hàng Nông nghiệp và Phát triển Nông thôn Việt Nam","official_name:en":"Vietnam Bank for Agriculture and Rural Development"}},"amenity/bank|Agribank~(Zimbabwe)":{countryCodes:["zw"],tags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693887","brand:wikipedia":"en:Agricultural Development Bank of Zimbabwe",name:"Agribank"}},"amenity/bank|Akbank":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Akbank","brand:wikidata":"Q416624","brand:wikipedia":"tr:Akbank",name:"Akbank"}},"amenity/bank|Aktia":{countryCodes:["fi"],tags:{amenity:"bank",brand:"Aktia","brand:wikidata":"Q4353753","brand:wikipedia":"fi:Aktia Pankki",name:"Aktia"}},"amenity/bank|Alior Bank":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Alior Bank","brand:wikidata":"Q9148395","brand:wikipedia":"pl:Alior Bank",name:"Alior Bank"}},"amenity/bank|Allahabad Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Allahabad Bank","brand:wikidata":"Q2018840","brand:wikipedia":"en:Allahabad Bank",name:"Allahabad Bank"}},"amenity/bank|Allied Bank~(Pakistan)":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732553","brand:wikipedia":"en:Allied Bank Limited",name:"Allied Bank"}},"amenity/bank|Allied Bank~(defunct bank in Philipiness)":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"}},"amenity/bank|Alpha Bank":{tags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank"}},"amenity/bank|Alterna Savings":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Alterna Savings","brand:wikidata":"Q4736322","brand:wikipedia":"en:Alterna Savings",name:"Alterna Savings"}},"amenity/bank|America First Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"America First Credit Union","brand:wikidata":"Q4742758","brand:wikipedia":"en:America First Credit Union",name:"America First Credit Union",short_name:"AFCU"}},"amenity/bank|Andhra Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"}},"amenity/bank|Antonveneta":{countryCodes:["it"],tags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"}},"amenity/bank|Apple Bank":{countryCodes:["us"],nomatch:["shop/electronics|Apple Store"],tags:{amenity:"bank",brand:"Apple Bank","brand:wikidata":"Q4781125","brand:wikipedia":"en:Apple Bank for Savings",name:"Apple Bank"}},"amenity/bank|Argenta":{countryCodes:["be","lu","nl"],tags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"nl:Argenta Groep",name:"Argenta"}},"amenity/bank|Arvest Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Arvest Bank","brand:wikidata":"Q4802393","brand:wikipedia":"en:Arvest Bank",name:"Arvest Bank"}},"amenity/bank|Asia United Bank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Asia United Bank","brand:wikidata":"Q4806482","brand:wikipedia":"tl:Asia United Bank",name:"Asia United Bank"}},"amenity/bank|Askari Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Askari Bank","brand:wikidata":"Q4807137","brand:wikipedia":"en:Askari Bank",name:"Askari Bank"}},"amenity/bank|Associated Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Associated Bank","brand:wikidata":"Q4809155","brand:wikipedia":"en:Associated Banc-Corp",name:"Associated Bank"}},"amenity/bank|Attijariwafa Bank":{tags:{amenity:"bank",brand:"Attijariwafa Bank","brand:wikidata":"Q758052","brand:wikipedia":"en:Attijariwafa Bank",name:"Attijariwafa Bank"}},"amenity/bank|Axis Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Axis Bank","brand:wikidata":"Q2003549","brand:wikipedia":"en:Axis Bank",name:"Axis Bank"}},"amenity/bank|BAC Credomatic":{matchNames:["bac"],tags:{amenity:"bank",brand:"BAC Credomatic","brand:wikidata":"Q5715556","brand:wikipedia":"en:BAC Credomatic",name:"BAC Credomatic"}},"amenity/bank|BAI":{countryCodes:["ao"],matchNames:["banco africano de investimentos"],tags:{amenity:"bank",brand:"BAI","brand:wikidata":"Q806172","brand:wikipedia":"en:Banco Angolano de Investimentos",name:"BAI",official_name:"Banco Angolano de Investimentos"}},"amenity/bank|BAWAG PSK":{countryCodes:["at"],tags:{amenity:"bank",brand:"BAWAG PSK","brand:wikidata":"Q379938","brand:wikipedia":"en:BAWAG P.S.K.",name:"BAWAG PSK"}},"amenity/bank|BB&T":{countryCodes:["us"],tags:{amenity:"bank",brand:"BB&T","brand:wikidata":"Q795486","brand:wikipedia":"en:BB&T",name:"BB&T",official_name:"Branch Banking and Trust Company"}},"amenity/bank|BBBank":{countryCodes:["de"],tags:{amenity:"bank",brand:"BBBank","brand:wikidata":"Q795504","brand:wikipedia":"en:BBBank",name:"BBBank"}},"amenity/bank|BBVA":{tags:{amenity:"bank",brand:"BBVA","brand:wikidata":"Q806189","brand:wikipedia":"en:Banco Bilbao Vizcaya Argentaria",name:"BBVA",official_name:"Banco Bilbao Vizcaya Argentaria"}},"amenity/bank|BBVA Bancomer":{countryCodes:["mx"],tags:{amenity:"bank",brand:"BBVA Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"BBVA Bancomer"}},"amenity/bank|BBVA Compass":{countryCodes:["us"],tags:{amenity:"bank",brand:"BBVA Compass","brand:wikidata":"Q4835088","brand:wikipedia":"en:BBVA Compass",name:"BBVA Compass",official_name:"BBVA Compass Bancshares"}},"amenity/bank|BBVA Continental":{countryCodes:["pe"],tags:{amenity:"bank",brand:"BBVA Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"BBVA Continental"}},"amenity/bank|BBVA Francés":{countryCodes:["ar"],tags:{amenity:"bank",brand:"BBVA Francés","brand:en":"BBVA France","brand:fr":"BBVA France","brand:wikidata":"Q2876788","brand:wikipedia":"en:BBVA Francés",name:"BBVA Francés","name:en":"BBVA France","name:fr":"BBVA Francés"}},"amenity/bank|BCA":{matchNames:["bank bca"],tags:{amenity:"bank",brand:"BCA","brand:wikidata":"Q806626","brand:wikipedia":"id:Bank Central Asia",name:"BCA",official_name:"Bank Central Asia"}},"amenity/bank|BCEE":{countryCodes:["lu"],tags:{amenity:"bank",brand:"BCEE","brand:wikidata":"Q668996","brand:wikipedia":"fr:Banque et caisse d'épargne de l'État",name:"BCEE",official_name:"Banque et Caisse d'Épargne de l'État"}},"amenity/bank|BCI":{matchNames:["banco bci"],tags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI",official_name:"Banco de Crédito e Inversiones","official_name:en":"Bank of Credit and Investments","official_name:es":"Banco de Crédito e Inversiones"}},"amenity/bank|BCP~(Bolivia)":{countryCodes:["bo"],nomatch:["amenity/bank|BCP~(France)","amenity/bank|BCP~(Luxembourg)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP",official_name:"Banco de Crédito de Bolivia","official_name:en":"Credit Bank of Bolivia","official_name:es":"Banco de Crédito de Bolivia"}},"amenity/bank|BCP~(France)":{countryCodes:["fr"],matchNames:["banque bcp","bcp"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(Luxembourg)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"}},"amenity/bank|BCP~(Luxembourg)":{countryCodes:["lu"],matchNames:["banque bcp","bcp"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(France)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"}},"amenity/bank|BCP~(Peru)":{countryCodes:["pe"],matchNames:["banco de crédito del perú"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(France)","amenity/bank|BCP~(Luxembourg)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP",official_name:"Banco de Crédito del Perú","official_name:en":"Credit Bank of Peru","official_name:es":"Banco de Crédito del Perú"}},"amenity/bank|BCR~(Banca Comercială Română)":{countryCodes:["ro"],matchNames:["banca comercială română"],tags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q806149","brand:wikipedia":"ro:Banca Comercială Română",name:"BCR",official_name:"Banca Comercială Română","official_name:en":"Romanian Commercial Bank","official_name:ro":"Banca Comercială Română"}},"amenity/bank|BCR~(Costa Rica)":{countryCodes:["cr"],matchNames:["banco de costa rica"],tags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q6951632","brand:wikipedia":"es:Banco de Costa Rica",name:"BCR",official_name:"Banco de Costa Rica","official_name:en":"Bank of Costa Rica","official_name:es":"Banco de Costa Rica"}},"amenity/bank|BDM":{countryCodes:["ml"],tags:{amenity:"bank",brand:"BDM","brand:wikidata":"Q2883022","brand:wikipedia":"fr:Banque de développement du Mali",name:"BDM",official_name:"Banque du Développement du Mali","official_name:en":"Mali Development Bank","official_name:fr":"Banque du Développement du Mali"}},"amenity/bank|BDO":{countryCodes:["ph"],tags:{alt_name:"Banco de Oro",amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO"}},"amenity/bank|BECU":{countryCodes:["us"],tags:{amenity:"bank",brand:"BECU","brand:wikidata":"Q4835409","brand:wikipedia":"en:BECU",name:"BECU"}},"amenity/bank|BGL BNP Paribas":{countryCodes:["lu"],nomatch:["amenity/bank|BGŻ BNP Paribas"],tags:{amenity:"bank",brand:"BGL BNP Paribas","brand:wikidata":"Q795898","brand:wikipedia":"fr:BGL BNP Paribas",name:"BGL BNP Paribas"}},"amenity/bank|BGŻ BNP Paribas":{countryCodes:["pl"],tags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q20744004","brand:wikipedia":"pl:BNP Paribas Bank Polska",name:"BGŻ BNP Paribas"}},"amenity/bank|BIAT":{countryCodes:["tn"],tags:{amenity:"bank",brand:"BIAT","brand:wikidata":"Q690739","brand:wikipedia":"fr:Banque internationale arabe de Tunisie",name:"BIAT",official_name:"Banque internationale arabe de Tunisie","official_name:en":"Arab International Bank of Tunisia","official_name:fr":"Banque internationale arabe de Tunisie"}},"amenity/bank|BIDV":{countryCodes:["vn"],tags:{amenity:"bank",brand:"BIDV","brand:wikidata":"Q1003180","brand:wikipedia":"vi:Ngân hàng Đầu tư và Phát triển Việt Nam",name:"BIDV",official_name:"Ngân hàng Đầu tư và Phát triển Việt Nam","official_name:en":"Bank for Investment and Development of Vietnam","official_name:vi":"Ngân hàng Đầu tư và Phát triển Việt Nam"}},"amenity/bank|BIL":{countryCodes:["lu"],tags:{amenity:"bank",brand:"BIL","brand:wikidata":"Q2883404","brand:wikipedia":"en:Banque Internationale à Luxembourg",name:"BIL",official_name:"Banque Internationale à Luxembourg","official_name:en":"International Bank in Luxembourg","official_name:fr":"Banque Internationale à Luxembourg"}},"amenity/bank|BMCE Bank":{countryCodes:["ma"],matchNames:["bmce"],tags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank",official_name:"البنك المغربي للتجارة الخارجية‎","official_name:ar":"البنك المغربي للتجارة الخارجية‎","official_name:en":"Moroccan Bank of Foreign Commerce"}},"amenity/bank|BMCI":{countryCodes:["ma"],matchNames:["bmci bank"],tags:{amenity:"bank",brand:"BMCI","brand:wikidata":"Q2883409","brand:wikipedia":"ar:البنك المغربي للتجارة والصناعة",name:"BMCI"}},"amenity/bank|BMN":{countryCodes:["es"],tags:{amenity:"bank",brand:"BMN","brand:wikidata":"Q3754900","brand:wikipedia":"es:Banco Mare Nostrum",name:"BMN",official_name:"Banco Mare Nostrum"}},"amenity/bank|BMO Harris Bank~(USA)":{countryCodes:["us"],matchNames:["bank of montreal","bmo","bmo bank of montreal","bmo harris bank","harris bank"],tags:{amenity:"bank",brand:"BMO Harris Bank","brand:wikidata":"Q4835981","brand:wikipedia":"en:BMO Harris Bank",name:"BMO Harris Bank"}},"amenity/bank|BMO~(Canada)":{countryCodes:["ca"],matchNames:["bank of montreal","banque de montréal","bmo","bmo bank of montreal","bmo banque de montréal"],tags:{amenity:"bank",brand:"BMO","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"BMO",official_name:"Bank of Montreal"}},"amenity/bank|BNA~(Algeria)":{countryCodes:["dz"],tags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883410","brand:wikipedia":"fr:Banque nationale d'Algérie",name:"BNA",official_name:"Banque nationale d'Algérie","official_name:en":"National Bank of Algeria","official_name:fr":"Banque nationale d'Algérie"}},"amenity/bank|BNA~(Tunisia)":{countryCodes:["tn"],tags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883413","brand:wikipedia":"fr:Banque nationale agricole",name:"BNA"}},"amenity/bank|BNDA":{countryCodes:["ml"],tags:{amenity:"bank",brand:"BNDA","brand:wikidata":"Q30594734","brand:wikipedia":"en:Banque Nationale de Développement Agricole",name:"BNDA",official_name:"Banque Nationale de Développement Agricole"}},"amenity/bank|BNI":{matchNames:["bank bni"],tags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI",official_name:"Bank Negara Indonesia","official_name:en":"State Bank of Indonesia","official_name:id":"Bank Negara Indonesia"}},"amenity/bank|BNL":{countryCodes:["it"],tags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"it:Banca Nazionale del Lavoro",name:"BNL",official_name:"Banca Nazionale del Lavoro","official_name:en":"National Labor Bank","official_name:it":"Banca Nazionale del Lavoro"}},"amenity/bank|BNP Paribas":{tags:{amenity:"bank",brand:"BNP Paribas","brand:wikidata":"Q499707","brand:wikipedia":"en:BNP Paribas",name:"BNP Paribas"}},"amenity/bank|BNP Paribas Fortis":{countryCodes:["be"],tags:{amenity:"bank",brand:"BNP Paribas Fortis","brand:wikidata":"Q796827","brand:wikipedia":"en:BNP Paribas Fortis",name:"BNP Paribas Fortis"}},"amenity/bank|BOC":{tags:{amenity:"bank",brand:"BOC","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"BOC",official_name:"Bank of China"}},"amenity/bank|BOM":{countryCodes:["au"],tags:{amenity:"bank",brand:"BOM","brand:wikidata":"Q4856151","brand:wikipedia":"en:Bank of Melbourne (2011)",name:"BOM",official_name:"Bank of Melbourne"}},"amenity/bank|BOQ":{countryCodes:["au"],tags:{amenity:"bank",brand:"BOQ","brand:wikidata":"Q4856173","brand:wikipedia":"en:Bank of Queensland",name:"BOQ",official_name:"Bank of Queensland"}},"amenity/bank|BPC":{countryCodes:["ao"],tags:{amenity:"bank",brand:"BPC","brand:wikidata":"Q4854132","brand:wikipedia":"en:Banco de Poupança e Crédito",name:"BPC",official_name:"Banco de Poupança e Crédito"}},"amenity/bank|BPER Banca":{countryCodes:["it"],tags:{amenity:"bank",brand:"BPER Banca","brand:wikidata":"Q806167","brand:wikipedia":"it:BPER Banca",name:"BPER Banca",official_name:"Banca Popolare dell'Emilia Romagna"}},"amenity/bank|BPI~(Global)":{matchNames:["bpi family savings bank"],nomatch:["amenity/bank|Banco BPI~(Portugal)"],tags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI",official_name:"Bank of the Philippine Islands"}},"amenity/bank|BRD":{countryCodes:["ro"],tags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"}},"amenity/bank|BRED":{countryCodes:["fr"],tags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED",official_name:"Banque régionale d'escompte et de dépôts","official_name:en":"Regional Discount and Deposit Bank","official_name:fr":"Banque régionale d'escompte et de dépôts"}},"amenity/bank|BRI":{countryCodes:["id"],matchNames:["bank bri"],tags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI",official_name:"Bank Rakyat Indonesia","official_name:en":"People's Bank of Indonesia","official_name:id":"Bank Rakyat Indonesia"}},"amenity/bank|BTN":{countryCodes:["id"],tags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:id":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN","name:id":"BTN",official_name:"Bank Tabungan Negara","official_name:en":"State Savings Bank","official_name:id":"Bank Tabungan Negara"}},"amenity/bank|BW-Bank":{countryCodes:["de"],matchNames:["baden-württembergische bank"],tags:{amenity:"bank",brand:"BW-Bank","brand:de":"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:de":"BW-Bank","name:en":"BW-Bank"}},"amenity/bank|Banamex":{countryCodes:["mx"],tags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex",official_name:"Grupo Financiero Banamex","official_name:en":"Banamex Financial Group","official_name:es":"Grupo Financiero Banamex"}},"amenity/bank|Banca Intesa":{countryCodes:["it","rs"],tags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa","name:en":"Intesa Bank","name:it":"Banca Intesa"}},"amenity/bank|Banca March":{countryCodes:["es"],tags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"}},"amenity/bank|Banca Mediolanum":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Mediolanum","brand:wikidata":"Q3633712","brand:wikipedia":"en:Banca Mediolanum",name:"Banca Mediolanum"}},"amenity/bank|Banca Popolare di Bari":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Bari","brand:wikidata":"Q3633730","brand:wikipedia":"en:Banca Popolare di Bari",name:"Banca Popolare di Bari"}},"amenity/bank|Banca Popolare di Milano":{countryCodes:["it"],matchNames:["bpm"],tags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:en":"Popular Bank of Milan","brand:it":"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano","name:en":"Popular Bank of Milan","name:it":"Banca Popolare di Milano"}},"amenity/bank|Banca Popolare di Novara":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:en":"Popular Bank of Novara","brand:it":"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara","name:en":"Popular Bank of Novara","name:it":"Banca Popolare di Novara"}},"amenity/bank|Banca Popolare di Sondrio":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:en":"Popular Bank of Sandrio","brand:it":"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio","name:en":"Popular Bank of Sandrio","name:it":"Banca Popolare di Sondrio"}},"amenity/bank|Banca Popolare di Verona":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:en":"Popular Bank of Verona","brand:it":"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona","name:en":"Popular Bank of Verona","name:it":"Banca Popolare di Verona"}},"amenity/bank|Banca Popolare di Vicenza":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:en":"Popular Bank of Vicenza","brand:it":"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza","name:en":"Popular Bank of Vicena","name:it":"Banca Popolare di Vicenza"}},"amenity/bank|Banca Românească":{countryCodes:["ro"],tags:{amenity:"bank",brand:"Banca Românească","brand:en":"Romanian Bank","brand:ro":"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"ro:Banca Românească",name:"Banca Românească","name:en":"Popular Bank of Vicena","name:ro":"Banca Românească"}},"amenity/bank|Banca Sella":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Sella","brand:en":"Sella Bank","brand:it":"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella","name:en":"Sella Bank","name:it":"Banca Sella"}},"amenity/bank|Banca Transilvania":{countryCodes:["ro"],tags:{amenity:"bank",brand:"Banca Transilvania","brand:en":"Transilvania Bank","brand:ro":"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania","name:en":"Transilvania Bank","name:ro":"Banca Transilvania"}},"amenity/bank|Bancaribe":{countryCodes:["ve"],tags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"}},"amenity/bank|Banco AV Villas":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco AV Villas","brand:en":"Bank of Villas","brand:es":"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas","name:en":"Bank of Villas","name:es":"Banco AV Villas"}},"amenity/bank|Banco Agrario":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco Agrario","brand:en":"Agrarian Bank","brand:wikidata":"Q20013358","brand:wikipedia":"es:Banco Agrario de Colombia",name:"Banco Agrario","name:en":"Agrarian Bank","name:es":"Banco Agrario",official_name:"Banco Agrario de Colombia","official_name:en":"Agrarian Bank of Colombia","official_name:es":"Banco Agrario de Colombia"}},"amenity/bank|Banco Azteca":{tags:{amenity:"bank",brand:"Banco Azteca","brand:en":"Aztec Bank","brand:es":"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca","name:en":"Aztec Bank","name:es":"Banco Azteca"}},"amenity/bank|Banco BPI~(Portugal)":{countryCodes:["pt"],nomatch:["amenity/bank|BPI~(Global)"],tags:{amenity:"bank",brand:"Branco BPI","brand:wikidata":"Q537886","brand:wikipedia":"en:Banco Português de Investimento",name:"Banco BPI",official_name:"Banco Português de Investimento",short_name:"BPI"}},"amenity/bank|Banco BPM":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banco BPM","brand:en":"BPM Bank","brand:es":"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM","name:en":"BPM Bank","name:es":"Banco BPM"}},"amenity/bank|Banco CTT":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Banco CTT","brand:wikidata":"Q65161642","brand:wikipedia":"pt:Banco CTT",name:"Banco CTT"}},"amenity/bank|Banco Caja Social":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco Caja Social","brand:en":"Social Housing Bank","brand:es":"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social","name:en":"Social Housing Bank","name:es":"Banco Caja Social"}},"amenity/bank|Banco Ciudad":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Ciudad","brand:en":"City Bank","brand:es":"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad","name:en":"City Bank","name:es":"Banco Ciudad",official_name:"Banco Ciudad de Buenos Aires","official_name:en":"Bank of the City of Buenos Aires","official_name:es":"Banco Ciudad de Buenos Aires"}},"amenity/bank|Banco Continental~(Paraguay)":{countryCodes:["py"],tags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q62054564",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"}},"amenity/bank|Banco Continental~(Peru)":{countryCodes:["pe"],tags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"}},"amenity/bank|Banco Estado":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco Estado","brand:en":"State Bank","brand:es":"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado","name:en":"State Bank","name:es":"Banco Estado",official_name:"Banco del Estado de Chile","official_name:en":"Bank of the State of Chile","official_name:es":"Banco del Estado de Chile"}},"amenity/bank|Banco Falabella":{countryCodes:["cl","co","pe"],nomatch:["shop/department_store|Falabella"],tags:{amenity:"bank",brand:"Banco Falabella","brand:en":"Falabella Bank","brand:es":"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella","name:en":"Falabella Bank","name:es":"Banco Falabella"}},"amenity/bank|Banco Fassil":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Fassil","brand:en":"Fassil Bank","brand:es":"Banco Fassil","brand:wikidata":"Q62118592",name:"Banco Fassil","name:en":"Fassil Bank","name:es":"Banco Fassil"}},"amenity/bank|Banco Fie":{tags:{amenity:"bank",brand:"Banco Fie",name:"Banco Fie"}},"amenity/bank|Banco G&T Continental":{countryCodes:["gt","sv"],tags:{amenity:"bank",brand:"Banco G&T Continental","brand:en":"G&T Continental Bank","brand:es":"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental","name:en":"G&T Continental Bank","name:es":"Banco G&T Continental"}},"amenity/bank|Banco General":{countryCodes:["cr","pa"],tags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:es":"BW-Bank","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General","name:en":"General Bank","name:es":"Banco General"}},"amenity/bank|Banco Industrial":{tags:{amenity:"bank",brand:"Banco Industrial","brand:en":"Industrial Bank","brand:es":"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial","name:en":"Industrial Bank","name:es":"Banco Industrial"}},"amenity/bank|Banco Internacional~(Chile)":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q56605586","brand:wikipedia":"es:Banco Internacional (Chile)",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"}},"amenity/bank|Banco Internacional~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q806187","brand:wikipedia":"es:Banco Internacional",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"}},"amenity/bank|Banco Metropolitano":{countryCodes:["cu"],tags:{amenity:"bank",brand:"Banco Metropolitano","brand:en":"Metroplitan Bank","brand:es":"Banco Metropolitano","brand:wikidata":"Q62118612",name:"Banco Metropolitano","name:en":"Metropolitan Bank","name:es":"Banco Metropolitano"}},"amenity/bank|Banco Nacional":{countryCodes:["cr","pa"],tags:{amenity:"bank",brand:"Banco Nacional de Costa Rica","brand:en":"National Bank of Costa Rica","brand:es":"Banco Nacional de Costa Rica","brand:wikidata":"Q2917708","brand:wikipedia":"es:Banco Nacional de Costa Rica",name:"Banco Nacional","name:en":"National Bank","name:es":"Banco Nacional",official_name:"Banco Nacional de Costa Rica","official_name:en":"National Bank of Costa Rica","official_name:es":"Banco Nacional de Costa Rica",short_name:"BNCR"}},"amenity/bank|Banco Nación":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Nación","brand:en":"Nation Bank","brand:es":"Banco Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación","name:en":"Nation Bank","name:es":"Banco Nación",official_name:"Banco de la Nación Argentina","official_name:en":"Bank of the Argentine Nation","official_name:es":"Banco de la Nación Argentina"}},"amenity/bank|Banco Pastor":{countryCodes:["es"],tags:{amenity:"bank",brand:"Banco Pastor","brand:en":"Shepherd Bank","brand:es":"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor","name:en":"Shepherd Bank","name:es":"Banco Pastor",official_name:"Banco Popular Pastor","official_name:en":"Popular Shepherd Bank","official_name:es":"Banco Popular Pastor"}},"amenity/bank|Banco Pichincha":{tags:{amenity:"bank",brand:"Banco Pichincha","brand:en":"Pichincha Bank","brand:es":"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha","name:en":"Pichincha Bank","name:es":"Banco Pichincha"}},"amenity/bank|Banco Popular de Ahorro":{countryCodes:["cu"],matchNames:["bpa"],tags:{amenity:"bank",brand:"Banco Popular de Ahorro","brand:en":"Popular Saving Bank","brand:es":"Banco Popular de Ahorro","brand:wikidata":"Q62118626",name:"Banco Popular de Ahorro","name:en":"Popular Saving Bank","name:es":"Banco Popular de Ahorro"}},"amenity/bank|Banco Provincia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Provincia","brand:en":"Province Bank","brand:es":"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia","name:en":"Province Bank","name:es":"Banco Provincia",official_name:"Banco de la Provincia de Buenos Aires","official_name:en":"Bank of the Province of Buenos Aires","official_name:es":"Banco de la Provincia de Buenos Aires"}},"amenity/bank|Banco Sabadell":{countryCodes:["es"],matchNames:["banc sabadell","sabadell"],tags:{amenity:"bank",brand:"Banco Sabadell","brand:ca":"Banc Sabadell","brand:es":"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell","name:ca":"Banc Sabadell","name:es":"Banco Sabadell",official_name:"Banco de Sabadell, S.A."}},"amenity/bank|Banco Santa Fe":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Santa Fe","brand:en":"Santa Fe Bank","brand:es":"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe","name:en":"Santa Fe Bank","name:es":"Banco Santa Fe",official_name:"Nuevo Banco de Santa Fe","official_name:en":"New Bank of Santa Fe","official_name:es":"Nuevo Banco de Santa Fe"}},"amenity/bank|Banco Santander":{nomatch:["amenity/bank|Santander"],tags:{amenity:"bank",brand:"Banco Santander","brand:en":"Santander Bank","brand:es":"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander","name:en":"Santander Bank","name:es":"Banco Santander",official_name:"Santander Group"}},"amenity/bank|Banco Sol~(Angola)":{countryCodes:["ao"],tags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118744",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"}},"amenity/bank|Banco Sol~(Bolivia)":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118746",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"}},"amenity/bank|Banco Unión":{countryCodes:["bo"],nomatch:["amenity/bank|UnionBank","amenity/money_transfer|Express Union"],tags:{amenity:"bank",brand:"Banco Unión","brand:en":"Union Bank","brand:es":"Banco Unión","brand:wikidata":"Q72315494",name:"Banco Unión","name:en":"Union Bank","name:es":"Banco Unión"}},"amenity/bank|Banco de Bogotá":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco de Bogotá","brand:en":"Bank of Bogota","brand:es":"Banco de Bogotá","brand:wikidata":"Q4854122","brand:wikipedia":"es:Banco de Bogotá",name:"Banco de Bogotá","name:en":"Bank of Bogota","name:es":"Banco de Bogotá"}},"amenity/bank|Banco de Chile":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco de Chile","brand:en":"Bank of Chile","brand:es":"Banco de Chile","brand:wikidata":"Q2882085","brand:wikipedia":"es:Banco de Chile",name:"Banco de Chile","name:en":"Bank of Chile","name:es":"Banco de Chile"}},"amenity/bank|Banco de Desarrollo Banrural":{countryCodes:["gt"],tags:{amenity:"bank",brand:"Banco de Desarrollo Banrural","brand:en":"Bank of Banrural Development","brand:es":"Banco de Desarrollo Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banco de Desarrollo Banrural","name:en":"Bank of Banrural Development","name:es":"Banco de Desarrollo Banrural"}},"amenity/bank|Banco de Fomento Angola (BFA)":{countryCodes:["ao"],tags:{amenity:"bank",brand:"Banco de Fomento Angola (BFA)","brand:en":"Angola Development Bank (BFA)","brand:es":"Banco de Fomento Angola (BFA)","brand:wikidata":"Q806197","brand:wikipedia":"de:Banco de Fomento Angola",name:"Banco de Fomento Angola (BFA)","name:en":"Angola Development Bank (BFA)","name:es":"Banco de Fomento Angola (BFA)"}},"amenity/bank|Banco de Occidente":{tags:{amenity:"bank",brand:"Banco de Occidente","brand:wikidata":"Q4854127","brand:wikipedia":"es:Banco de Occidente (Colombia)",name:"Banco de Occidente"}},"amenity/bank|Banco de Venezuela":{countryCodes:["ve"],matchNames:["de venezuela"],tags:{amenity:"bank",brand:"Banco de Venezuela","brand:wikidata":"Q517093","brand:wikipedia":"es:Banco de Venezuela",name:"Banco de Venezuela"}},"amenity/bank|Banco de la Nación~(Argentina)":{countryCodes:["ar"],tags:{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"}},"amenity/bank|Banco de la Nación~(Peru)":{countryCodes:["pe"],tags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q4856206","brand:wikipedia":"en:Bank of the Nation (Peru)",name:"Banco de la Nación"}},"amenity/bank|Banco del Austro":{countryCodes:["ec"],tags:{amenity:"bank",brand:"Banco del Austro","brand:wikidata":"Q62122344",name:"Banco del Austro"}},"amenity/bank|Banco di Napoli":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banco di Napoli","brand:wikidata":"Q3633835","brand:wikipedia":"en:Banco di Napoli",name:"Banco di Napoli"}},"amenity/bank|Banco di Sardegna":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banco di Sardegna","brand:wikidata":"Q806205","brand:wikipedia":"en:Banco di Sardegna",name:"Banco di Sardegna"}},"amenity/bank|Banco di Sicilia":{tags:{amenity:"bank",brand:"Banco di Sicilia",name:"Banco di Sicilia"}},"amenity/bank|Banco do Brasil":{countryCodes:["br"],tags:{amenity:"bank",brand:"Banco do Brasil","brand:wikidata":"Q610817","brand:wikipedia":"en:Banco do Brasil",name:"Banco do Brasil"}},"amenity/bank|Banco do Nordeste":{countryCodes:["br"],tags:{amenity:"bank",brand:"Banco do Nordeste","brand:wikidata":"Q4854137","brand:wikipedia":"en:Banco do Nordeste",name:"Banco do Nordeste"}},"amenity/bank|Bancolombia":{countryCodes:["co"],tags:{amenity:"bank",brand:"Bancolombia","brand:wikidata":"Q806206","brand:wikipedia":"en:Bancolombia",name:"Bancolombia"}},"amenity/bank|Bancomer":{countryCodes:["mx"],tags:{amenity:"bank",brand:"Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"Bancomer"}},"amenity/bank|Bancpost":{countryCodes:["ro"],nomatch:["amenity/bank|Postbank"],tags:{amenity:"bank",brand:"Bancpost","brand:wikidata":"Q4854143","brand:wikipedia":"ro:Bancpost",name:"Bancpost"}},"amenity/bank|Banesco":{tags:{amenity:"bank",brand:"Banesco","brand:wikidata":"Q4854841","brand:wikipedia":"en:Banesco",name:"Banesco"}},"amenity/bank|Bangkok Bank":{countryCodes:["th"],tags:{amenity:"bank",brand:"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"Bangkok Bank"}},"amenity/bank|Bank Al Habib":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Bank Al Habib","brand:wikidata":"Q4034833","brand:wikipedia":"ur:بينک الحبيب لمیٹڈ",name:"Bank Al Habib"}},"amenity/bank|Bank Alfalah":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Bank Alfalah","brand:wikidata":"Q4855895","brand:wikipedia":"en:Bank Alfalah",name:"Bank Alfalah"}},"amenity/bank|Bank Austria":{countryCodes:["at"],tags:{amenity:"bank",brand:"Bank Austria","brand:wikidata":"Q697619","brand:wikipedia":"en:Bank Austria",name:"Bank Austria"}},"amenity/bank|Bank Danamon":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Danamon","brand:wikidata":"Q4855913","brand:wikipedia":"en:Bank Danamon",name:"Bank Danamon"}},"amenity/bank|Bank Islam":{countryCodes:["my"],tags:{amenity:"bank",brand:"Bank Islam","brand:wikidata":"Q4115279","brand:wikipedia":"en:Bank Islam Malaysia",name:"Bank Islam"}},"amenity/bank|Bank Mandiri":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Mandiri","brand:wikidata":"Q806639","brand:wikipedia":"en:Bank Mandiri",name:"Bank Mandiri"}},"amenity/bank|Bank Mandiri Syariah":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Mandiri Syariah","brand:wikidata":"Q12474533","brand:wikipedia":"id:Bank Syariah Mandiri",name:"Bank Mandiri Syariah"}},"amenity/bank|Bank Mega":{countryCodes:["id"],tags:{amenity:"bank",brand:"Bank Mega","brand:wikidata":"Q12474504","brand:wikipedia":"id:Bank Mega",name:"Bank Mega"}},"amenity/bank|Bank Muamalat":{countryCodes:["id","my"],tags:{amenity:"bank",brand:"Bank Muamalat","brand:wikidata":"Q4855949","brand:wikipedia":"en:Bank Muamalat",name:"Bank Muamalat"}},"amenity/bank|Bank Pekao":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Bank Pekao","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Bank Pekao"}},"amenity/bank|Bank Rakyat":{countryCodes:["my"],tags:{amenity:"bank",brand:"Bank Rakyat","brand:wikidata":"Q4855964","brand:wikipedia":"ms:Bank Rakyat",name:"Bank Rakyat"}},"amenity/bank|Bank of Africa":{tags:{amenity:"bank",brand:"Bank of Africa","brand:wikidata":"Q2882627","brand:wikipedia":"en:Bank of Africa Group",name:"Bank of Africa",short_name:"BOA"}},"amenity/bank|Bank of America":{countryCodes:["us"],tags:{amenity:"bank",brand:"Bank of America","brand:wikidata":"Q487907","brand:wikipedia":"en:Bank of America",name:"Bank of America"}},"amenity/bank|Bank of Baroda":{tags:{amenity:"bank",brand:"Bank of Baroda","brand:wikidata":"Q2003797","brand:wikipedia":"en:Bank of Baroda",name:"Bank of Baroda"}},"amenity/bank|Bank of Ceylon":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Bank of Ceylon","brand:wikidata":"Q2882652","brand:wikipedia":"en:Bank of Ceylon",name:"Bank of Ceylon"}},"amenity/bank|Bank of Commerce":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Bank of Commerce","brand:wikidata":"Q4856092","brand:wikipedia":"en:Bank of Commerce",name:"Bank of Commerce"}},"amenity/bank|Bank of Cyprus":{countryCodes:["cy","gr"],tags:{amenity:"bank",brand:"Bank of Cyprus","brand:wikidata":"Q806678","brand:wikipedia":"en:Bank of Cyprus",name:"Bank of Cyprus"}},"amenity/bank|Bank of India":{tags:{amenity:"bank",brand:"Bank of India","brand:wikidata":"Q2004439","brand:wikipedia":"en:Bank of India",name:"Bank of India"}},"amenity/bank|Bank of Ireland":{countryCodes:["gb","ie"],tags:{amenity:"bank",brand:"Bank of Ireland","brand:wikidata":"Q806689","brand:wikipedia":"en:Bank of Ireland",name:"Bank of Ireland"}},"amenity/bank|Bank of Maharashtra":{countryCodes:["in"],tags:{amenity:"bank",brand:"Bank of Maharashtra","brand:wikidata":"Q2004304","brand:wikipedia":"en:Bank of Maharashtra",name:"Bank of Maharashtra"}},"amenity/bank|Bank of New Zealand":{countryCodes:["nz"],tags:{amenity:"bank",brand:"Bank of New Zealand","brand:wikidata":"Q806687","brand:wikipedia":"en:Bank of New Zealand",name:"Bank of New Zealand"}},"amenity/bank|Bank of Scotland":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Bank of Scotland","brand:wikidata":"Q627381","brand:wikipedia":"en:Bank of Scotland",name:"Bank of Scotland"}},"amenity/bank|Bank of the West":{countryCodes:["us"],tags:{amenity:"bank",brand:"Bank of the West","brand:wikidata":"Q2881919","brand:wikipedia":"en:Bank of the West",name:"Bank of the West"}},"amenity/bank|Bankia":{countryCodes:["es"],tags:{amenity:"bank",brand:"Bankia","brand:wikidata":"Q806807","brand:wikipedia":"en:Bankia",name:"Bankia"}},"amenity/bank|Bankinter":{countryCodes:["es","pt"],nomatch:["amenity/bank|Interbank"],tags:{amenity:"bank",brand:"Bankinter","brand:wikidata":"Q806808","brand:wikipedia":"es:Bankinter",name:"Bankinter"}},"amenity/bank|Bankwest":{countryCodes:["au"],tags:{amenity:"bank",brand:"Bankwest","brand:wikidata":"Q4856817","brand:wikipedia":"en:Bankwest",name:"Bankwest"}},"amenity/bank|Banner Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Banner Bank","brand:wikidata":"Q4856910","brand:wikipedia":"en:Banner Bank",name:"Banner Bank"}},"amenity/bank|Banorte":{countryCodes:["mx"],tags:{amenity:"bank",brand:"Banorte","brand:wikidata":"Q806914","brand:wikipedia":"en:Banorte",name:"Banorte"}},"amenity/bank|Banque Atlantique":{tags:{amenity:"bank",brand:"Banque Atlantique","brand:wikidata":"Q2882890","brand:wikipedia":"en:Atlantic Bank Group",name:"Banque Atlantique"}},"amenity/bank|Banque Laurentienne":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Banque Laurentienne","brand:wikidata":"Q1360087","brand:wikipedia":"en:Laurentian Bank of Canada",name:"Banque Laurentienne"}},"amenity/bank|Banque Populaire~(France)":{tags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q846647","brand:wikipedia":"fr:Banque populaire",name:"Banque Populaire"}},"amenity/bank|Banque Populaire~(Maroc)":{countryCodes:["de","es","fr","gb","it","ma","nl"],tags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q2883441","brand:wikipedia":"en:Banque Populaire du Maroc",name:"Banque Populaire"}},"amenity/bank|Banque de France":{tags:{amenity:"bank",brand:"Banque de France","brand:wikidata":"Q806950","brand:wikipedia":"en:Bank of France",name:"Banque de France"}},"amenity/bank|Banque de l'Habitat du Mali":{countryCodes:["ml"],tags:{amenity:"bank",brand:"Banque de l'Habitat du Mali","brand:wikidata":"Q4857076","brand:wikipedia":"en:Banque de l'Habitat du Mali",name:"Banque de l'Habitat du Mali"}},"amenity/bank|Banrisul":{countryCodes:["br"],tags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"}},"amenity/bank|Banrural":{countryCodes:["gt","hn"],tags:{amenity:"bank",brand:"Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banrural"}},"amenity/bank|Barclays":{matchNames:["barclays bank"],tags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"}},"amenity/bank|Bcc":{countryCodes:["it"],tags:{amenity:"bank",brand:"Bcc","brand:wikidata":"Q25060394","brand:wikipedia":"en:Banca di Credito Cooperativo di Roma",name:"Bcc"}},"amenity/bank|Belfius":{countryCodes:["be"],tags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"}},"amenity/bank|Bendigo Bank":{countryCodes:["au"],tags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"}},"amenity/bank|Berliner Volksbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"}},"amenity/bank|Bicentenario":{countryCodes:["ve"],tags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"}},"amenity/bank|Bicici":{countryCodes:["ci"],matchNames:["agence bicici"],tags:{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"}},"amenity/bank|Bradesco":{countryCodes:["br"],matchNames:["banco bradesco"],tags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"}},"amenity/bank|Budapest Bank":{countryCodes:["hu"],tags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"}},"amenity/bank|CBAO":{countryCodes:["sn"],tags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"}},"amenity/bank|CEC Bank":{countryCodes:["ro"],tags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"}},"amenity/bank|CIB Bank":{tags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"}},"amenity/bank|CIBC":{countryCodes:["ca"],matchNames:["cibc banking centre"],tags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"}},"amenity/bank|CIC":{countryCodes:["fr"],tags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"}},"amenity/bank|CIH Bank":{countryCodes:["ma"],tags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"}},"amenity/bank|CIMB Bank":{countryCodes:["my"],tags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"}},"amenity/bank|CIMB Niaga":{countryCodes:["id"],tags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"}},"amenity/bank|CNEP":{countryCodes:["dz"],tags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"}},"amenity/bank|CRDB Bank":{countryCodes:["tz"],tags:{amenity:"bank",brand:"CRDB Bank","brand:wikidata":"Q5013848","brand:wikipedia":"en:CRDB Bank",name:"CRDB Bank"}},"amenity/bank|Caisse d'Épargne":{tags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"fr:Caisse d'épargne (banque)",name:"Caisse d'Épargne"}},"amenity/bank|Caixa Econômica Federal~(Brazil)":{countryCodes:["br"],matchNames:["caixa","caixabank"],nomatch:["amenity/bank|Caixabank~(Spain)"],tags:{amenity:"bank",brand:"Caixa Econômica Federal","brand:wikidata":"Q835283","brand:wikipedia":"pt:Caixa Econômica Federal",name:"Caixa Econômica Federal"}},"amenity/bank|Caixa Geral de Depósitos":{countryCodes:["es","fr","pt"],tags:{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"}},"amenity/bank|Caixabank~(Spain)":{countryCodes:["es"],nomatch:["amenity/bank|Caixa Econômica Federal~(Brazil)"],tags:{amenity:"bank",brand:"Caixabank","brand:wikidata":"Q847225","brand:wikipedia":"en:CaixaBank",name:"Caixabank"}},"amenity/bank|Caja Duero":{countryCodes:["es"],tags:{amenity:"bank",brand:"Caja Duero","brand:wikidata":"Q3821055","brand:wikipedia":"es:Caja Duero",name:"Caja Duero"}},"amenity/bank|Caja España":{countryCodes:["es"],tags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"}},"amenity/bank|Caja Rural":{countryCodes:["es"],tags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"}},"amenity/bank|Caja Rural de Jaén":{countryCodes:["es"],tags:{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"}},"amenity/bank|CajaSur":{countryCodes:["es"],tags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"}},"amenity/bank|Cajamar":{countryCodes:["es"],tags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"}},"amenity/bank|California Coast Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"California Coast Credit Union","brand:wikidata":"Q25025281","brand:wikipedia":"en:California Coast Credit Union",name:"California Coast Credit Union"}},"amenity/bank|Canara Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"}},"amenity/bank|Capital Bank":{tags:{amenity:"bank",brand:"Capital Bank","brand:wikidata":"Q5035481","brand:wikipedia":"en:Capital Bank Financial",name:"Capital Bank"}},"amenity/bank|Capital One":{countryCodes:["us"],matchNames:["capital one bank"],tags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"}},"amenity/bank|Carige":{countryCodes:["it"],tags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"}},"amenity/bank|Cariparma":{countryCodes:["it"],tags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"}},"amenity/bank|Carisbo":{countryCodes:["it"],tags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"}},"amenity/bank|Casden":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Casden","brand:wikidata":"Q2930976","brand:wikipedia":"fr:CASDEN Banque populaire",name:"Casden"}},"amenity/bank|Cassa di Risparmio del Veneto":{countryCodes:["it"],tags:{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"}},"amenity/bank|CatalunyaCaixa":{countryCodes:["es"],tags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"}},"amenity/bank|Cathay Bank":{countryCodes:["cn","tw","us"],tags:{amenity:"bank",brand:"Cathay Bank","brand:wikidata":"Q4189507","brand:wikipedia":"en:Cathay Bank",name:"Cathay Bank"}},"amenity/bank|Central Bank":{tags:{amenity:"bank",brand:"Central Bank",name:"Central Bank"}},"amenity/bank|Central Bank of India":{countryCodes:["in"],tags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"}},"amenity/bank|Chase":{matchNames:["chase bank"],tags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"}},"amenity/bank|China Bank":{tags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"}},"amenity/bank|China Bank Savings":{countryCodes:["ph"],tags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"}},"amenity/bank|China Construction Bank":{tags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank",short_name:"CCB"}},"amenity/bank|Citibank":{tags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank",short_name:"Citi"}},"amenity/bank|Citizens Bank~(Eastern USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q5122694","brand:wikipedia":"en:Citizens Financial Group",name:"Citizens Bank",short_name:"Citizens"}},"amenity/bank|Citizens Bank~(Kentucky)":{countryCodes:["us"],tags:{alt_name:"Citizens Bank of Kentucky",amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q5122711","brand:wikipedia":"en:Citizens National Bank (Eastern Kentucky)",name:"Citizens Bank",official_name:"Citizens National Bank",short_name:"Citizens"}},"amenity/bank|Citizens Bank~(Nepal)":{countryCodes:["np"],tags:{amenity:"bank",brand:"Citizens Bank International","brand:wikidata":"Q13186934","brand:wikipedia":"en:Citizens Bank International",name:"Citizens Bank",official_name:"Citizens Bank International Ltd.",short_name:"Citizens"}},"amenity/bank|City National Bank~(California)":{countryCodes:["us"],tags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q5123314","brand:wikipedia":"en:City National Bank (California)",name:"City National Bank"}},"amenity/bank|City National Bank~(Florida)":{countryCodes:["us"],tags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q16958644","brand:wikipedia":"en:City National Bank of Florida",name:"City National Bank",official_name:"City National Bank of Florida"}},"amenity/bank|Clydesdale Bank":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikidata":"Q971680","brand:wikipedia":"en:Clydesdale Bank",name:"Clydesdale Bank"}},"amenity/bank|Coast Capital Savings":{countryCodes:["ca"],matchNames:["coast capital","coast capital savings credit union"],tags:{amenity:"bank",brand:"Coast Capital Savings","brand:wikidata":"Q5138088","brand:wikipedia":"en:Coast Capital Savings",name:"Coast Capital Savings",official_name:"Coast Capital Savings Federal Credit Union"}},"amenity/bank|Columbia Bank~(New Jersey)":{countryCodes:["us"],nomatch:["amenity/bank|Columbia Bank~(Washington)","shop/clothes|Columbia"],tags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084096",name:"Columbia Bank"}},"amenity/bank|Columbia Bank~(Washington)":{countryCodes:["us"],nomatch:["amenity/bank|Columbia Bank~(New Jersey)","shop/clothes|Columbia"],tags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084089",name:"Columbia Bank"}},"amenity/bank|Comerica Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"}},"amenity/bank|Commerce Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Commerce Bank","brand:wikidata":"Q5152411","brand:wikipedia":"en:Commerce Bancshares",name:"Commerce Bank"}},"amenity/bank|Commercial Bank":{tags:{amenity:"bank",brand:"Commercial Bank",name:"Commercial Bank"}},"amenity/bank|Commercial Bank of Ceylon PLC":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Commercial Bank of Ceylon PLC","brand:wikidata":"Q5152468","brand:wikipedia":"en:Commercial Bank of Ceylon",name:"Commercial Bank of Ceylon PLC"}},"amenity/bank|Commerzbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"}},"amenity/bank|Commonwealth Bank":{tags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"}},"amenity/bank|Community Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Community Bank","brand:wikidata":"Q5154635","brand:wikipedia":"en:Community Bank, N.A.",name:"Community Bank"}},"amenity/bank|Corporation Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"}},"amenity/bank|Credem":{countryCodes:["it"],tags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"}},"amenity/bank|Credicoop":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"}},"amenity/bank|Credit Suisse":{countryCodes:["ch"],tags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"}},"amenity/bank|Credito Valtellinese":{countryCodes:["it"],tags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"}},"amenity/bank|Crelan":{countryCodes:["be"],tags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"}},"amenity/bank|Crédit Agricole":{tags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"}},"amenity/bank|Crédit Maritime":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"}},"amenity/bank|Crédit Mutuel":{tags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"}},"amenity/bank|Crédit Mutuel de Bretagne":{countryCodes:["fr"],tags:{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"}},"amenity/bank|Crédit du Nord":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"}},"amenity/bank|Crédito Agrícola":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"}},"amenity/bank|Danske Bank":{countryCodes:["dk","fi","gb","lt","no","se"],tags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"}},"amenity/bank|Davivienda":{countryCodes:["co","cr","hn","pa","sv"],matchNames:["banco davivienda"],tags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"es:Davivienda",name:"Davivienda"}},"amenity/bank|Denizbank":{tags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"}},"amenity/bank|Desjardins":{countryCodes:["ca"],matchNames:["caisse desjardins"],tags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"}},"amenity/bank|Deutsche Bank":{tags:{amenity:"bank",brand:"Deutsche Bank","brand:wikidata":"Q66048","brand:wikipedia":"en:Deutsche Bank",name:"Deutsche Bank"}},"amenity/bank|Dollar Bank":{countryCodes:["us"],nomatch:["amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{amenity:"bank",brand:"Dollar Bank","brand:wikidata":"Q5289205","brand:wikipedia":"en:Dollar Bank",name:"Dollar Bank"}},"amenity/bank|Dubai Islamic Bank":{tags:{amenity:"bank",brand:"Dubai Islamic Bank","brand:wikidata":"Q5310570","brand:wikipedia":"en:Dubai Islamic Bank",name:"Dubai Islamic Bank"}},"amenity/bank|EastWest Unibank":{countryCodes:["ph"],matchNames:["eastwest bank"],tags:{amenity:"bank",brand:"EastWest Unibank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Unibank"}},"amenity/bank|Ecobank":{matchNames:["agence ecobank"],tags:{amenity:"bank",brand:"Ecobank","brand:wikidata":"Q930225","brand:wikipedia":"en:Ecobank",name:"Ecobank"}},"amenity/bank|Emigrant Savings Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Emigrant Savings Bank","brand:wikidata":"Q5371104","brand:wikipedia":"en:Emigrant Savings Bank",name:"Emigrant Savings Bank"}},"amenity/bank|Emirates NBD":{countryCodes:["ae"],tags:{amenity:"bank",brand:"Emirates NBD","brand:wikidata":"Q5372575","brand:wikipedia":"en:Emirates NBD",name:"Emirates NBD"}},"amenity/bank|Equity Bank~(Congo)":{countryCodes:["cd"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q21178738","brand:wikipedia":"en:Equity Bank Congo",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Kenya)":{countryCodes:["ke"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384664","brand:wikipedia":"en:Equity Bank Kenya Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Rwanda)":{countryCodes:["rw"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384665","brand:wikipedia":"en:Equity Bank Rwanda Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(South Sudan)":{countryCodes:["ss"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384666","brand:wikipedia":"en:Equity Bank South Sudan Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Tanzania)":{countryCodes:["tz"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384667","brand:wikipedia":"en:Equity Bank Tanzania Limited",name:"Equity Bank"}},"amenity/bank|Equity Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q62260414","brand:wikipedia":"en:Equity Bank USA",name:"Equity Bank"}},"amenity/bank|Equity Bank~(Uganda)":{countryCodes:["ug"],tags:{amenity:"bank",brand:"Equity Bank","brand:wikidata":"Q5384668","brand:wikipedia":"en:Equity Bank Uganda Limited",name:"Equity Bank"}},"amenity/bank|Erste Bank":{countryCodes:["at","hr","hu","rs"],tags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"}},"amenity/bank|EuroBic":{countryCodes:["pt"],matchNames:["banco bic"],tags:{amenity:"bank",brand:"EuroBic","brand:wikidata":"Q806175","brand:wikipedia":"pt:EuroBic",name:"EuroBic",official_name:"Banco BIC Português"}},"amenity/bank|Eurobank~(Greece)":{countryCodes:["gr"],matchNames:["eurobank ergasias"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q951850","brand:wikipedia":"el:Eurobank",name:"Eurobank"}},"amenity/bank|Eurobank~(Poland)":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q9256201","brand:wikipedia":"pl:Euro Bank",name:"Eurobank"}},"amenity/bank|Eurobank~(Serbia)":{countryCodes:["rs"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q5411684","brand:wikipedia":"sr:Eurobanka",name:"Eurobank"}},"amenity/bank|FNB~(South Africa)":{countryCodes:["bw","mz","na","us","za","zm"],tags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB",official_name:"First National Bank"}},"amenity/bank|Faysal Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"}},"amenity/bank|Federal Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"}},"amenity/bank|Fidelity Bank~(Ghana)":{countryCodes:["gh"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446778","brand:wikipedia":"en:Fidelity Bank Ghana",name:"Fidelity Bank"}},"amenity/bank|Fidelity Bank~(Nigeria)":{countryCodes:["ng"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446777","brand:wikipedia":"en:Fidelity Bank Nigeria",name:"Fidelity Bank"}},"amenity/bank|Fidelity Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q1411292","brand:wikipedia":"en:Fidelity Investments",name:"Fidelity Bank"}},"amenity/bank|Fifth Third Bank":{countryCodes:["us"],matchNames:["5/3"],tags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank",short_name:"5/3 Bank"}},"amenity/bank|Finansbank":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"}},"amenity/bank|First Bank~(North and South Carolina)":{countryCodes:["us"],matchNames:["1st bancorp","1st bank","first bancorp"],tags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452332","brand:wikipedia":"en:First Bancorp",name:"First Bank"}},"amenity/bank|First Bank~(Puerto Rico)":{countryCodes:["us"],matchNames:["1st bancorp","1st bank","first bancorp"],tags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452333","brand:wikipedia":"en:First BanCorp",name:"First Bank"}},"amenity/bank|First Bank~(Western USA)":{countryCodes:["us"],matchNames:["1st bank"],tags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452217","brand:wikipedia":"en:FirstBank Holding Co",name:"First Bank",short_name:"1STBank"}},"amenity/bank|First Citizens Bank~(Trinidad and Tobago)":{countryCodes:["bb","tt"],matchNames:["1st citizens bank"],tags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"}},"amenity/bank|First Citizens Bank~(USA)":{countryCodes:["us"],matchNames:["1st citizens bank"],tags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452733","brand:wikipedia":"en:First Citizens BancShares",name:"First Citizens Bank"}},"amenity/bank|First Financial Bank":{countryCodes:["us"],matchNames:["1st financial bank"],tags:{amenity:"bank",brand:"First Financial Bank","brand:wikidata":"Q5453009","brand:wikipedia":"en:First Financial Bank (Ohio)",name:"First Financial Bank"}},"amenity/bank|First Interstate Bank":{countryCodes:["us"],matchNames:["1st interstate","1st interstate bancsystem","1st interstate bank","first interstate","first interstate bancsystem"],tags:{amenity:"bank",brand:"First Interstate BancSystem","brand:wikidata":"Q5453107","brand:wikipedia":"en:First Interstate BancSystem",name:"First Interstate Bank"}},"amenity/bank|First Midwest Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"First Midwest Bank","brand:wikidata":"Q5453331","brand:wikipedia":"en:First Midwest Bank",name:"First Midwest Bank"}},"amenity/bank|First National Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"First National Bank","brand:wikidata":"Q5426765","brand:wikipedia":"en:F.N.B. Corporation",name:"First National Bank"}},"amenity/bank|First State Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"First State Bank",name:"First State Bank"}},"amenity/bank|First West Credit Union":{countryCodes:["ca"],tags:{alt_name:"First West",amenity:"bank",brand:"First West Credit Union","brand:wikidata":"Q5454073","brand:wikipedia":"en:First West Credit Union",name:"First West Credit Union"}},"amenity/bank|Frost Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"}},"amenity/bank|Fulton Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Fulton Bank","brand:wikidata":"Q16976594",name:"Fulton Bank"}},"amenity/bank|GCB Bank":{countryCodes:["gh"],tags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank",name:"GCB Bank"}},"amenity/bank|GT Bank":{tags:{amenity:"bank",brand:"GT Bank",name:"GT Bank"}},"amenity/bank|Galicia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"}},"amenity/bank|Garanti":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"}},"amenity/bank|Garanti Bankası":{tags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"}},"amenity/bank|Getin Bank":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"pl:Getin Bank",name:"Getin Bank"}},"amenity/bank|Golden 1 Credit Union":{countryCodes:["us"],matchNames:["golden 1","golden one","golden one credit union","the golden 1 credit union","the golden one credit union"],tags:{amenity:"bank",brand:"Golden 1 Credit Union","brand:wikidata":"Q7736976","brand:wikipedia":"en:Golden 1 Credit Union",name:"Golden 1 Credit Union"}},"amenity/bank|Great Western Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"}},"amenity/bank|Groupama":{tags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"}},"amenity/bank|HBL Bank":{countryCodes:["pk"],matchNames:["hbl"],tags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"}},"amenity/bank|HDFC Bank":{tags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"}},"amenity/bank|HNB":{tags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"}},"amenity/bank|HSBC UK~(UK)":{countryCodes:["gb"],matchNames:["hsbc"],tags:{amenity:"bank",brand:"HSBC UK","brand:wikidata":"Q64767453",name:"HSBC UK"}},"amenity/bank|HSBC~(Global)":{tags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"}},"amenity/bank|Halifax":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"}},"amenity/bank|Halkbank":{tags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"}},"amenity/bank|Hamburger Sparkasse":{countryCodes:["de"],tags:{amenity:"bank",brand:"Hamburger Sparkasse","brand:wikidata":"Q1573140","brand:wikipedia":"de:Hamburger Sparkasse",name:"Hamburger Sparkasse",short_name:"Haspa"}},"amenity/bank|Handelsbanken":{countryCodes:["dk","fi","gb","no","se"],tags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"}},"amenity/bank|Heritage Bank":{tags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"}},"amenity/bank|Hong Leong Bank":{countryCodes:["my"],tags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"}},"amenity/bank|Hrvatska poštanska banka":{countryCodes:["hr"],tags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"}},"amenity/bank|Huntington Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"}},"amenity/bank|HypoVereinsbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"}},"amenity/bank|ICBC":{tags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"}},"amenity/bank|ICICI Bank":{countryCodes:["ca","gb","in"],tags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"}},"amenity/bank|IDBI Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"}},"amenity/bank|ING":{matchNames:["ing bank"],tags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"}},"amenity/bank|ING Bank Śląski":{countryCodes:["pl"],tags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"pl:ING Bank Śląski",name:"ING Bank Śląski"}},"amenity/bank|Ibercaja":{countryCodes:["es"],tags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja (banco)",name:"Ibercaja"}},"amenity/bank|Indian Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Indian Bank","brand:wikidata":"Q2003789","brand:wikipedia":"en:Indian Bank",name:"Indian Bank"}},"amenity/bank|Indian Overseas Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Indian Overseas Bank","brand:wikidata":"Q2003611","brand:wikipedia":"en:Indian Overseas Bank",name:"Indian Overseas Bank"}},"amenity/bank|Interbank":{nomatch:["amenity/bank|Bankinter"],tags:{amenity:"bank",brand:"Interbank","brand:wikidata":"Q2835558","brand:wikipedia":"es:Interbank",name:"Interbank"}},"amenity/bank|Intesa Sanpaolo":{tags:{amenity:"bank",brand:"Intesa Sanpaolo","brand:wikidata":"Q1343118","brand:wikipedia":"it:Intesa Sanpaolo",name:"Intesa Sanpaolo"}},"amenity/bank|Investors Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Investors Bank","brand:wikidata":"Q15109896","brand:wikipedia":"en:Investors Bank",name:"Investors Bank"}},"amenity/bank|Itaú~(Brazil)":{countryCodes:["br"],matchNames:["banco itau"],nomatch:["amenity/bank|Itaú~(Chile)"],tags:{amenity:"bank",brand:"Itaú Unibanco","brand:wikidata":"Q1424293","brand:wikipedia":"pt:Itaú Unibanco",name:"Itaú"}},"amenity/bank|Itaú~(Chile)":{countryCodes:["cl"],matchNames:["banco itau"],nomatch:["amenity/bank|Itaú~(Brazil)"],tags:{amenity:"bank",brand:"Itaú Corpbanca","brand:wikidata":"Q2423252","brand:wikipedia":"en:Itaú Corpbanca",name:"Itaú"}},"amenity/bank|JS Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"JS Bank","brand:wikidata":"Q6108986","brand:wikipedia":"en:JS Bank",name:"JS Bank"}},"amenity/bank|Jyske Bank":{countryCodes:["dk"],tags:{amenity:"bank",brand:"Jyske Bank","brand:wikidata":"Q136672","brand:wikipedia":"en:Jyske Bank",name:"Jyske Bank"}},"amenity/bank|K&H Bank":{countryCodes:["hu"],tags:{amenity:"bank",brand:"K&H Bank","brand:wikidata":"Q6393834","brand:wikipedia":"en:K&H Bank",name:"K&H Bank"}},"amenity/bank|KBC":{countryCodes:["be","ie"],tags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"}},"amenity/bank|KBZ Bank":{countryCodes:["mm"],tags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"}},"amenity/bank|Karnataka Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"}},"amenity/bank|Karur Vysya Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Karur Vysya Bank","brand:wikidata":"Q6373724","brand:wikipedia":"en:Karur Vysya Bank",name:"Karur Vysya Bank"}},"amenity/bank|Kasa Stefczyka":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"}},"amenity/bank|KeyBank":{countryCodes:["us"],tags:{amenity:"bank",brand:"KeyBank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"KeyBank"}},"amenity/bank|Komerční banka":{countryCodes:["cz"],tags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"}},"amenity/bank|Kotak Mahindra Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Kotak Mahindra Bank","brand:wikidata":"Q2040404","brand:wikipedia":"en:Kotak Mahindra Bank",name:"Kotak Mahindra Bank"}},"amenity/bank|Kutxabank":{countryCodes:["es"],tags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"}},"amenity/bank|Kuveyt Türk":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Kuveyt Türk","brand:wikidata":"Q6036058","brand:wikipedia":"tr:Kuveyt Türk",name:"Kuveyt Türk"}},"amenity/bank|LBS":{tags:{amenity:"bank",brand:"LBS",name:"LBS"}},"amenity/bank|LCL":{countryCodes:["fr"],tags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"fr:Crédit lyonnais",name:"LCL"}},"amenity/bank|LCNB":{countryCodes:["us"],tags:{alt_name:"Lebanon Citizens National Bank",amenity:"bank",brand:"LCNB","brand:wikidata":"Q65095575",name:"LCNB",official_name:"LCNB National Bank"}},"amenity/bank|La Banque Postale":{countryCodes:["fr"],tags:{amenity:"bank",brand:"La Banque Postale","brand:wikidata":"Q3206431","brand:wikipedia":"en:La Banque postale",name:"La Banque Postale"}},"amenity/bank|La Caixa":{countryCodes:["es"],tags:{amenity:"bank",brand:"La Caixa","brand:wikidata":"Q287753","brand:wikipedia":"en:La Caixa",name:"La Caixa"}},"amenity/bank|Laboral Kutxa":{countryCodes:["es"],tags:{amenity:"bank",brand:"Laboral Kutxa","brand:wikidata":"Q12052386","brand:wikipedia":"en:Laboral Kutxa",name:"Laboral Kutxa"}},"amenity/bank|Lake Michigan Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"Lake Michigan Credit Union","brand:wikidata":"Q6476906","brand:wikipedia":"en:Lake Michigan Credit Union",name:"Lake Michigan Credit Union",short_name:"LMCU"}},"amenity/bank|Landbank":{countryCodes:["ph"],matchNames:["bangko sa lupa ng pilipinas","land bank of the philippines","lbp"],tags:{amenity:"bank",brand:"Landbank","brand:wikidata":"Q6483872","brand:wikipedia":"en:Land Bank of the Philippines",name:"Landbank"}},"amenity/bank|Leeds Building Society":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Leeds Building Society","brand:wikidata":"Q6515848","brand:wikipedia":"en:Leeds Building Society",name:"Leeds Building Society"}},"amenity/bank|Liberbank":{countryCodes:["es"],tags:{amenity:"bank",brand:"Liberbank","brand:wikidata":"Q2891018","brand:wikipedia":"en:Liberbank",name:"Liberbank"}},"amenity/bank|Liberty Bank~(Connecticut)":{countryCodes:["us"],nomatch:["amenity/fuel|Liberty"],tags:{amenity:"bank",brand:"Liberty Bank","brand:wikidata":"Q6541584","brand:wikipedia":"en:Liberty Bank",name:"Liberty Bank"}},"amenity/bank|Lloyds Bank":{countryCodes:["gb","im"],matchNames:["lloyds","lloyds tsb"],tags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"}},"amenity/bank|M&T Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"}},"amenity/bank|MCB":{matchNames:["mcb bank"],tags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"}},"amenity/bank|MONETA Money Bank":{countryCodes:["cz"],tags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"}},"amenity/bank|Macro":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Macro","brand:wikidata":"Q2335199","brand:wikipedia":"en:Banco Macro",name:"Macro"}},"amenity/bank|Maybank":{tags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"}},"amenity/bank|Meezan Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"}},"amenity/bank|Mercantil":{tags:{amenity:"bank",brand:"Mercantil","brand:wikidata":"Q6818004","brand:wikipedia":"en:Mercantil Servicios Financieros",name:"Mercantil"}},"amenity/bank|Meridian Credit Union":{countryCodes:["ca"],tags:{alt_name:"Meridian",amenity:"bank",brand:"Meridian Credit Union","brand:wikidata":"Q6819303","brand:wikipedia":"en:Meridian Credit Union",name:"Meridian Credit Union"}},"amenity/bank|Metro Bank~(UK)":{countryCodes:["gb"],nomatch:["amenity/bank|Metrobank~(Philippines)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Peru)","shop/supermarket|Metro~(Quebec)","shop/wholesale|Metro"],tags:{amenity:"bank",brand:"Metro Bank","brand:wikidata":"Q6824499","brand:wikipedia":"en:Metro Bank (United Kingdom)",name:"Metro Bank"}},"amenity/bank|Metrobank~(Philippines)":{countryCodes:["ph"],nomatch:["amenity/bank|Metro Bank~(UK)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Peru)","shop/supermarket|Metro~(Quebec)","shop/wholesale|Metro"],tags:{amenity:"bank",brand:"Metrobank","brand:wikidata":"Q1925799","brand:wikipedia":"en:Metrobank (Philippines)",name:"Metrobank"}},"amenity/bank|Mibanco":{countryCodes:["pe"],tags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589",name:"Mibanco"}},"amenity/bank|MidFirst Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"MidFirst Bank","brand:wikidata":"Q17081131","brand:wikipedia":"en:MidFirst Bank",name:"MidFirst Bank"}},"amenity/bank|Millennium Bank":{countryCodes:["pl"],matchNames:["bank millennium"],tags:{amenity:"bank",brand:"Millennium Bank","brand:wikidata":"Q4855947","brand:wikipedia":"pl:Bank Millennium",name:"Millennium Bank"}},"amenity/bank|Millennium bcp":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Millennium bcp","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"Millennium bcp",official_name:"Banco Comercial Português","official_name:en":"Portuguese Commercial Bank","official_name:es":"Banco Comercial Português"}},"amenity/bank|Mission Federal Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"Mission Federal Credit Union","brand:wikidata":"Q18345955","brand:wikipedia":"en:Mission Federal Credit Union",name:"Mission Federal Credit Union"}},"amenity/bank|Mittelbrandenburgische Sparkasse":{countryCodes:["de"],tags:{amenity:"bank",brand:"Mittelbrandenburgische Sparkasse","brand:wikidata":"Q1940058","brand:wikipedia":"de:Mittelbrandenburgische Sparkasse",name:"Mittelbrandenburgische Sparkasse"}},"amenity/bank|Monte dei Paschi di Siena":{countryCodes:["it"],tags:{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"}},"amenity/bank|Montepio":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"}},"amenity/bank|Mountain America Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"Mountain America Credit Union","brand:wikidata":"Q6924862","brand:wikipedia":"en:Mountain America Credit Union",name:"Mountain America Credit Union"}},"amenity/bank|NAB":{tags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"}},"amenity/bank|NASA Federal Credit Union":{tags:{amenity:"bank",brand:"NASA Federal Credit Union","brand:wikidata":"Q6952409","brand:wikipedia":"en:NASA Federal Credit Union",name:"NASA Federal Credit Union"}},"amenity/bank|NLB":{countryCodes:["si"],tags:{amenity:"bank",brand:"NLB","brand:wikidata":"Q1481509","brand:wikipedia":"en:NLB Group",name:"NLB"}},"amenity/bank|NSB":{countryCodes:["lk"],matchNames:["national savings bank"],tags:{amenity:"bank",brand:"NSB","brand:wikidata":"Q12500189","brand:wikipedia":"en:National Savings Bank (Sri Lanka)",name:"NSB"}},"amenity/bank|NatWest":{countryCodes:["gb","gg"],tags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"}},"amenity/bank|National Bank":{countryCodes:["ca"],matchNames:["banque nationale","banque nationale du canada"],tags:{amenity:"bank",brand:"National Bank","brand:en":"National Bank","brand:fr":"Banque Nationale","brand:wikidata":"Q634298","brand:wikipedia":"en:National Bank of Canada",name:"National Bank","name:en":"National Bank","name:fr":"Banque Nationale",official_name:"National Bank of Canada","official_name:en":"National Bank of Canada","official_name:fr":"Banque Nationale du Canada"}},"amenity/bank|Nationwide":{countryCodes:["gb"],nomatch:["office/insurance|Nationwide"],tags:{amenity:"bank",brand:"Nationwide","brand:wikidata":"Q846735","brand:wikipedia":"en:Nationwide Building Society",name:"Nationwide"}},"amenity/bank|Navy Federal Credit Union":{tags:{amenity:"bank",brand:"Navy Federal Credit Union","brand:wikidata":"Q6982632","brand:wikipedia":"en:Navy Federal Credit Union",name:"Navy Federal Credit Union"}},"amenity/bank|Nedbank":{tags:{amenity:"bank",brand:"Nedbank","brand:wikidata":"Q2751701","brand:wikipedia":"en:Nedbank",name:"Nedbank"}},"amenity/bank|Nordea":{tags:{amenity:"bank",brand:"Nordea","brand:wikidata":"Q1123823","brand:wikipedia":"en:Nordea",name:"Nordea"}},"amenity/bank|Novo Banco":{countryCodes:["es","pt"],tags:{amenity:"bank",brand:"Novo Banco","brand:wikidata":"Q17488861","brand:wikipedia":"en:Novo Banco",name:"Novo Banco"}},"amenity/bank|OLB":{countryCodes:["de"],tags:{amenity:"bank",brand:"OLB","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"OLB"}},"amenity/bank|OTP":{matchNames:["otp bank"],tags:{amenity:"bank",brand:"OTP","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"OTP Bank"}},"amenity/bank|Oberbank":{countryCodes:["at","cz","de","hu"],tags:{amenity:"bank",brand:"Oberbank","brand:wikidata":"Q2009139","brand:wikipedia":"de:Oberbank",name:"Oberbank"}},"amenity/bank|Occidental de Descuento":{countryCodes:["ve"],tags:{amenity:"bank",brand:"Occidental de Descuento","brand:wikidata":"Q4854108","brand:wikipedia":"en:Banco Occidental de Descuento",name:"Occidental de Descuento"}},"amenity/bank|Oldenburgische Landesbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"Oldenburgische Landesbank","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"Oldenburgische Landesbank"}},"amenity/bank|One Network Bank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"One Network Bank","brand:wikidata":"Q7093019","brand:wikipedia":"en:One Network Bank",name:"One Network Bank"}},"amenity/bank|Oriental":{countryCodes:["us"],tags:{alt_name:"Oriental Bank",amenity:"bank",brand:"Oriental","brand:wikidata":"Q64887002",name:"Oriental"}},"amenity/bank|Oriental Bank of Commerce":{countryCodes:["in"],tags:{amenity:"bank",brand:"Oriental Bank of Commerce","brand:wikidata":"Q367008","brand:wikipedia":"en:Oriental Bank of Commerce",name:"Oriental Bank of Commerce"}},"amenity/bank|Osuuspankki":{countryCodes:["fi"],tags:{amenity:"bank",brand:"Osuuspankki","brand:wikidata":"Q4045597","brand:wikipedia":"fi:OP (finanssiryhmä)",name:"Osuuspankki"}},"amenity/bank|PBZ":{countryCodes:["hr"],tags:{amenity:"bank",brand:"PBZ","brand:wikidata":"Q7246343","brand:wikipedia":"en:Privredna banka Zagreb",name:"PBZ"}},"amenity/bank|PKO BP":{countryCodes:["pl"],matchNames:["pko bank polski"],tags:{amenity:"bank",brand:"PKO BP","brand:wikidata":"Q578832","brand:wikipedia":"pl:Powszechna Kasa Oszczędności Bank Polski",name:"PKO BP"}},"amenity/bank|PNB":{countryCodes:["ph"],tags:{amenity:"bank",brand:"PNB","brand:wikidata":"Q1657971","brand:wikipedia":"en:Philippine National Bank",name:"PNB",official_name:"Philippine National Bank"}},"amenity/bank|PNC Bank":{countryCodes:["us"],matchNames:["pnc"],tags:{amenity:"bank",brand:"PNC Bank","brand:wikidata":"Q38928","brand:wikipedia":"en:PNC Financial Services",name:"PNC Bank"}},"amenity/bank|PSBank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"PSBank","brand:wikidata":"Q7185203","brand:wikipedia":"en:Philippine Savings Bank",name:"PSBank"}},"amenity/bank|Panin Bank":{countryCodes:["id"],tags:{amenity:"bank",brand:"Panin Bank","brand:wikidata":"Q12502751","brand:wikipedia":"id:Panin Bank",name:"Panin Bank"}},"amenity/bank|Patagonia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Patagonia","brand:wikidata":"Q2882078","brand:wikipedia":"en:Banco Patagonia",name:"Patagonia"}},"amenity/bank|Pekao SA":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Pekao SA","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Pekao SA"}},"amenity/bank|PenFed Credit Union":{countryCodes:["us"],tags:{alt_name:"Pentagon Federal Credit Union",amenity:"bank",brand:"PenFed Credit Union","brand:wikidata":"Q3374885","brand:wikipedia":"en:Pentagon Federal Credit Union",name:"PenFed Credit Union",short_name:"PenFed"}},"amenity/bank|People's United Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"People's United Bank","brand:wikidata":"Q7165802","brand:wikipedia":"en:People's United Financial",name:"People's United Bank"}},"amenity/bank|Peoples Bank~(Flemingsburg, Kentucky)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Peoples Bank",name:"Peoples Bank",official_name:"Peoples Bank of Kentucky"}},"amenity/bank|Peoples Bank~(Ohio)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q65716607",name:"Peoples Bank"}},"amenity/bank|Peoples Bank~(Washington)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q7166050","brand:wikipedia":"en:Peoples Bank",name:"Peoples Bank"}},"amenity/bank|Permanent TSB":{tags:{amenity:"bank",brand:"Permanent TSB",name:"Permanent TSB"}},"amenity/bank|Piraeus Bank":{countryCodes:["bg","cy","gr","ro","ua"],tags:{amenity:"bank",brand:"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Piraeus Bank"}},"amenity/bank|Popular":{countryCodes:["us"],matchNames:["popular bank"],tags:{alt_name:"Banco Popular","alt_name:en":"Popular Bank","alt_name:es":"Banco Popular",amenity:"bank",brand:"Popular","brand:en":"Popular","brand:es":"Popular","brand:wikidata":"Q7229656","brand:wikipedia":"en:Popular, Inc.",name:"Popular","name:en":"Popular","name:es":"Popular",official_name:"Banco Popular de Puerto Rico","official_name:es":"Banco Popular de Puerto Rico",short_name:"BPPR"}},"amenity/bank|Postbank~(Bulgaria)":{countryCodes:["bg"],nomatch:["amenity/bank|Bancpost"],tags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q7234083","brand:wikipedia":"en:Bulgarian Postbank",name:"Postbank"}},"amenity/bank|Postbank~(Germany)":{countryCodes:["de"],matchNames:["postbank finanzcenter"],nomatch:["amenity/bank|Bancpost"],tags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q708835","brand:wikipedia":"en:Deutsche Postbank",name:"Postbank"}},"amenity/bank|Prima banka":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Prima banka","brand:wikidata":"Q13538661","brand:wikipedia":"sk:Prima banka Slovensko",name:"Prima banka"}},"amenity/bank|Provincial":{countryCodes:["ve"],matchNames:["bbva provincial"],tags:{amenity:"bank",brand:"Provincial","brand:wikidata":"Q4835087","brand:wikipedia":"es:BBVA Provincial",name:"Provincial"}},"amenity/bank|Public Bank~(Malaysia)":{matchNames:["public bank berhad"],tags:{amenity:"bank",brand:"Public Bank","brand:wikidata":"Q3046561","brand:wikipedia":"en:Public Bank Berhad",name:"Public Bank"}},"amenity/bank|Punjab National Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Punjab National Bank","brand:wikidata":"Q2743499","brand:wikipedia":"en:Punjab National Bank",name:"Punjab National Bank"}},"amenity/bank|RBC":{matchNames:["rbc financial group","rbc royal bank","royal bank"],tags:{amenity:"bank",brand:"RBC","brand:wikidata":"Q735261","brand:wikipedia":"en:Royal Bank of Canada",name:"RBC",official_name:"Royal Bank of Canada"}},"amenity/bank|RBS":{countryCodes:["gb","je","ro"],tags:{amenity:"bank",brand:"RBS","brand:wikidata":"Q160126","brand:wikipedia":"en:Royal Bank of Scotland",name:"RBS",official_name:"Royal Bank of Scotland"}},"amenity/bank|RCBC":{countryCodes:["ph"],matchNames:["rcbc savings bank"],tags:{amenity:"bank",brand:"RCBC","brand:wikidata":"Q7339070","brand:wikipedia":"en:Rizal Commercial Banking Corporation",name:"RCBC",official_name:"Rizal Commercial Banking Corporation"}},"amenity/bank|Rabobank":{countryCodes:["au","id","nl","nz","us"],tags:{amenity:"bank",brand:"Rabobank","brand:wikidata":"Q252004","brand:wikipedia":"en:Rabobank",name:"Rabobank"}},"amenity/bank|Raiffeisen Polbank":{countryCodes:["de","pl"],nomatch:["amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisen Polbank","brand:wikidata":"Q9303218","brand:wikipedia":"pl:Raiffeisen Bank Polska",name:"Raiffeisen Polbank"}},"amenity/bank|Raiffeisenbank~(Albania)":{countryCodes:["al"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q2127541","brand:wikipedia":"sq:Raiffeisen Bank Shqipëri",name:"Raiffeisenbank"}},"amenity/bank|Raiffeisenbank~(Bulgaria)":{countryCodes:["bg"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283808","brand:wikipedia":"bg:Райфайзенбанк (България)",name:"Raiffeisenbank"}},"amenity/bank|Raiffeisenbank~(Czech Republic)":{countryCodes:["cz"],matchNames:["raiffeisen","raiffeisenkasse"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q24282825","brand:wikipedia":"cs:Raiffeisenbank",name:"Raiffeisenbank"}},"amenity/bank|Raiffeisenbank~(Romania)":{countryCodes:["ro"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283806","brand:wikipedia":"ro:Raiffeisen Bank România",name:"Raiffeisenbank"}},"amenity/bank|Raiffeisenbank~(Serbia)":{countryCodes:["rs"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisenbank","brand:wikidata":"Q7283807","brand:wikipedia":"en:Raiffeisen Bank (Serbia)",name:"Raiffeisenbank"}},"amenity/bank|Raiffeisen~(Luxembourg)":{countryCodes:["lu"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisen","brand:wikidata":"Q11220162","brand:wikipedia":"en:Banque Raiffeisen",name:"Raiffeisen"}},"amenity/bank|Regions Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"}},"amenity/bank|Republic Bank~(Eastern Caribbean)":{countryCodes:["bb","gd","gy","tt"],tags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314386","brand:wikipedia":"en:Republic Bank",name:"Republic Bank"}},"amenity/bank|Republic Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314387","brand:wikipedia":"en:Republic Bank & Trust Company",name:"Republic Bank",official_name:"Republic Bank & Trust Company"}},"amenity/bank|República":{countryCodes:["uy"],tags:{amenity:"bank",brand:"República","brand:wikidata":"Q4077337","brand:wikipedia":"en:Banco de la República Oriental del Uruguay",name:"República"}},"amenity/bank|S-Pankki":{countryCodes:["fi"],tags:{amenity:"bank",brand:"S-Pankki","brand:wikidata":"Q7387053","brand:wikipedia":"fi:S-Pankki",name:"S-Pankki"}},"amenity/bank|SC제일은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"SC제일은행","brand:ko":"SC제일은행","brand:wikidata":"Q625531","brand:wikipedia":"en:Standard Chartered Korea",name:"SC제일은행","name:ko":"SC제일은행"}},"amenity/bank|SEB":{countryCodes:["de","ee","lt","lv","se"],tags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"}},"amenity/bank|SMBC信託銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"SMBC信託銀行","brand:en":"SMBC Trust Bank","brand:wikidata":"Q17218805","brand:wikipedia":"jp:SMBC信託銀行",name:"SMBC信託銀行","name:en":" SMBC Trust Bank "}},"amenity/bank|SNS Bank":{countryCodes:["nl"],tags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"}},"amenity/bank|Sacombank":{tags:{amenity:"bank",brand:"Sacombank","brand:wikidata":"Q6123772","brand:wikipedia":"vi:Ngân hàng thương mại cổ phần Sài Gòn Thương Tín",name:"Sacombank"}},"amenity/bank|Sampath Bank":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"}},"amenity/bank|San Diego County Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"San Diego County Credit Union","brand:wikidata":"Q7413628","brand:wikipedia":"en:San Diego County Credit Union",name:"San Diego County Credit Union",short_name:"SDCCU"}},"amenity/bank|Santander":{matchNames:["santander consumer bank"],nomatch:["amenity/bank|Banco Santander"],tags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"}},"amenity/bank|Santander Río":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander (Argentina)",name:"Santander Río"}},"amenity/bank|Santander Totta":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Santander Totta","brand:wikidata":"Q4854116","brand:wikipedia":"pt:Banco Santander Portugal",name:"Santander Totta"}},"amenity/bank|Sberbank":{tags:{amenity:"bank",brand:"Sberbank","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Sberbank"}},"amenity/bank|Scotiabank~(Québec)":{countryCodes:["ca"],matchNames:["scotia"],nomatch:["amenity/bank|Scotiabank"],tags:{amenity:"bank",brand:"Banque Scotia","brand:wikidata":"Q451476","brand:wikipedia":"fr:Banque Scotia",name:"Banque Scotia"}},"amenity/bank|Scotiabank~(non-Québec)":{matchNames:["scotia"],nomatch:["amenity/bank|Scotiabank~(Québec)"],tags:{amenity:"bank",brand:"Scotiabank","brand:wikidata":"Q451476","brand:wikipedia":"en:Scotiabank",name:"Scotiabank"}},"amenity/bank|Security Bank":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Security Bank","brand:wikidata":"Q7444945","brand:wikipedia":"en:Security Bank",name:"Security Bank"}},"amenity/bank|Security Service Federal Credit Union":{countryCodes:["us"],matchNames:["security service fcu"],tags:{amenity:"bank",brand:"Security Service Federal Credit Union","brand:wikidata":"Q7444993","brand:wikipedia":"en:Security Service Federal Credit Union",name:"Security Service Federal Credit Union",short_name:"SSFCU"}},"amenity/bank|Service Credit Union":{countryCodes:["de","us"],tags:{amenity:"bank",brand:"Service Credit Union","brand:wikidata":"Q7455675","brand:wikipedia":"en:Service Credit Union",name:"Service Credit Union"}},"amenity/bank|Servus Credit Union":{countryCodes:["ca"],tags:{alt_name:"Servus",amenity:"bank",brand:"Servus Credit Union","brand:wikidata":"Q2274396","brand:wikipedia":"en:Servus Credit Union",name:"Servus Credit Union"}},"amenity/bank|Seylan Bank":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Seylan Bank","brand:wikidata":"Q3532083","brand:wikipedia":"en:Seylan Bank",name:"Seylan Bank"}},"amenity/bank|Siam Commercial Bank":{countryCodes:["th"],tags:{amenity:"bank",brand:"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"Siam Commercial Bank"}},"amenity/bank|Sicoob":{countryCodes:["br"],tags:{amenity:"bank",brand:"Sicoob","brand:wikidata":"Q28679754","brand:wikipedia":"pt:Sistema de Cooperativas de Crédito do Brasil",name:"Sicoob"}},"amenity/bank|Sicredi":{countryCodes:["br"],tags:{amenity:"bank",brand:"Sicredi","brand:wikidata":"Q3483060","brand:wikipedia":"pt:Sistema de Crédito Cooperativo",name:"Sicredi"}},"amenity/bank|Simmons Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Simmons Bank","brand:wikidata":"Q28402389","brand:wikipedia":"en:Simmons Bank",name:"Simmons Bank"}},"amenity/bank|Skipton Building Society":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Skipton Building Society","brand:wikidata":"Q16931747","brand:wikipedia":"en:Skipton Building Society",name:"Skipton Building Society"}},"amenity/bank|Slovenská sporiteľňa":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Slovenská sporiteľňa","brand:wikidata":"Q7541907","brand:wikipedia":"en:Slovenská sporiteľňa",name:"Slovenská sporiteľňa"}},"amenity/bank|Société Générale":{tags:{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"}},"amenity/bank|Société Marseillaise de Crédit":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Société Marseillaise de Crédit","brand:wikidata":"Q3488479","brand:wikipedia":"fr:Société marseillaise de crédit",name:"Société Marseillaise de Crédit"}},"amenity/bank|Société générale Côte d’Ivoire":{countryCodes:["ci"],matchNames:["agence sgbci","sgbci"],tags:{amenity:"bank",brand:"Société générale Côte d’Ivoire","brand:wikidata":"Q3488360","brand:wikipedia":"fr:Société générale Côte d'Ivoire",name:"Société générale Côte d’Ivoire","name:fr":"Société générale Côte d’Ivoire",old_name:"SGBCI"}},"amenity/bank|South Indian Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"South Indian Bank","brand:wikidata":"Q2044973","brand:wikipedia":"en:South Indian Bank",name:"South Indian Bank"}},"amenity/bank|South State Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"South State Bank","brand:wikidata":"Q55633597","brand:wikipedia":"en:South State Bank",name:"South State Bank"}},"amenity/bank|Southern Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Southern Bank","brand:wikidata":"Q7569660","brand:wikipedia":"en:Southern Bank",name:"Southern Bank"}},"amenity/bank|Sparda-Bank":{countryCodes:["at","de"],tags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"}},"amenity/bank|Stanbic Bank":{tags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"}},"amenity/bank|Standard Bank":{tags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"}},"amenity/bank|Standard Chartered":{matchNames:["standard chartered bank"],tags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"}},"amenity/bank|State Bank of India":{tags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"}},"amenity/bank|State Employees Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"State Employees Credit Union","brand:wikidata":"Q7603196","brand:wikipedia":"en:State Employees Credit Union",name:"State Employees Credit Union",short_name:"SECU"}},"amenity/bank|Summit Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"}},"amenity/bank|SunTrust":{countryCodes:["us"],matchNames:["suntrust bank"],tags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"}},"amenity/bank|Suncorp":{countryCodes:["au"],tags:{amenity:"bank",brand:"Suncorp","brand:wikidata":"Q24189567","brand:wikipedia":"en:Suncorp Bank",name:"Suncorp"}},"amenity/bank|Supervielle":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"}},"amenity/bank|Swedbank":{countryCodes:["ee","lt","lv","se"],tags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"}},"amenity/bank|Syndicate Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"}},"amenity/bank|Synovus":{countryCodes:["us"],tags:{amenity:"bank",brand:"Synovus","brand:wikidata":"Q3508889","brand:wikipedia":"en:Synovus",name:"Synovus"}},"amenity/bank|TCF Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"}},"amenity/bank|TD Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"}},"amenity/bank|TD Canada Trust":{countryCodes:["ca"],tags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"}},"amenity/bank|TEB":{countryCodes:["tr"],tags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"}},"amenity/bank|TSB":{countryCodes:["gb"],tags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"}},"amenity/bank|Takarékszövetkezet":{countryCodes:["hu"],tags:{amenity:"bank",brand:"Takarékszövetkezet","brand:wikidata":"Q30324674","brand:wikipedia":"en:TakarékBank",name:"Takarékszövetkezet"}},"amenity/bank|Tangerine":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Tangerine","brand:wikidata":"Q15238797","brand:wikipedia":"en:Tangerine Bank",name:"Tangerine"}},"amenity/bank|Targobank":{countryCodes:["de","es"],tags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"}},"amenity/bank|Tatra banka":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"}},"amenity/bank|Taytay sa Kauswagan":{countryCodes:["ph"],tags:{amenity:"bank",brand:"Taytay sa Kauswagan","brand:wikidata":"Q72361196",name:"Taytay sa Kauswagan"}},"amenity/bank|The Co-operative Bank":{countryCodes:["gb"],matchNames:["co-op bank"],tags:{amenity:"bank",brand:"The Co-operative Bank","brand:wikidata":"Q3520318","brand:wikipedia":"en:The Co-operative Bank",name:"The Co-operative Bank"}},"amenity/bank|Türkiye İş Bankası":{tags:{amenity:"bank",brand:"Türkiye İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"Türkiye İş Bankası"}},"amenity/bank|U.S. Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"U.S. Bank","brand:wikidata":"Q739084","brand:wikipedia":"en:U.S. Bancorp",name:"U.S. Bank"}},"amenity/bank|UBA":{tags:{amenity:"bank",brand:"UBA","brand:wikidata":"Q513457","brand:wikipedia":"en:United Bank for Africa",name:"UBA",official_name:"United Bank for Africa"}},"amenity/bank|UBI Banca":{countryCodes:["it"],tags:{amenity:"bank",brand:"UBI Banca","brand:wikidata":"Q1476162","brand:wikipedia":"en:UBI Banca",name:"UBI Banca"}},"amenity/bank|UBL":{countryCodes:["pk"],matchNames:["ubl bank"],tags:{amenity:"bank",brand:"UBL","brand:en":"United Bank Limited Pakistan","brand:wikidata":"Q7887504","brand:wikipedia":"ur:یونائیٹڈ بینک (پاکستان)",name:"UBL","name:en":"United Bank Limited Pakistan"}},"amenity/bank|UBS":{tags:{amenity:"bank",brand:"UBS","brand:wikidata":"Q193199","brand:wikipedia":"en:UBS",name:"UBS"}},"amenity/bank|UCO Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"UCO Bank","brand:wikidata":"Q2005310","brand:wikipedia":"en:UCO Bank",name:"UCO Bank"}},"amenity/bank|UCPB":{countryCodes:["ph"],tags:{amenity:"bank",brand:"UCPB","brand:wikidata":"Q7887615","brand:wikipedia":"en:United Coconut Planters Bank",name:"UCPB"}},"amenity/bank|UIB":{countryCodes:["tn"],tags:{amenity:"bank",brand:"UIB","brand:wikidata":"Q3550305","brand:wikipedia":"ar:الاتحاد الدولي للبنوك",name:"UIB",official_name:"Union internationale de banques"}},"amenity/bank|UMB Bank":{tags:{amenity:"bank",brand:"UMB Bank","brand:wikidata":"Q7865088","brand:wikipedia":"en:UMB Financial Corporation",name:"UMB Bank"}},"amenity/bank|UNI":{countryCodes:["ca"],matchNames:["caisse populaire","caisse populaire acadienne"],tags:{amenity:"bank",brand:"UNI","brand:wikidata":"Q2933348","brand:wikipedia":"fr:UNI Coopération financière",name:"UNI",official_name:"UNI Coopération financière"}},"amenity/bank|UOB":{tags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"}},"amenity/bank|USAA":{tags:{amenity:"bank",brand:"USAA","brand:wikidata":"Q7865722","brand:wikipedia":"en:USAA",name:"USAA",official_name:"United Services Automobile Association"}},"amenity/bank|Ulster Bank":{countryCodes:["gb","ie"],tags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"}},"amenity/bank|Umpqua Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"}},"amenity/bank|UniCredit Bank":{matchNames:["unicredit","unicredit banca"],tags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"}},"amenity/bank|Unicaja Banco":{countryCodes:["es"],tags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco",short_name:"Unicaja"}},"amenity/bank|Union Bank of India":{countryCodes:["in"],tags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"}},"amenity/bank|Union Bank~(USA)":{countryCodes:["us"],matchNames:["mufg union bank","union bank of california"],nomatch:["amenity/bank|Banco Unión","amenity/money_transfer|Express Union"],tags:{alt_name:"UnionBank",amenity:"bank",brand:"Union Bank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"Union Bank"}},"amenity/bank|UnionBank~(Philippines)":{countryCodes:["ph"],matchNames:["union bank of the philippines"],nomatch:["amenity/bank|Banco Unión","amenity/money_transfer|Express Union"],tags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"}},"amenity/bank|United Bank~(Connecticut)":{countryCodes:["us"],nomatch:["amenity/bank|United Bank~(West Virginia)","amenity/fuel|United","shop/convenience|United"],tags:{amenity:"bank",brand:"United Bank","brand:wikidata":"Q64825157",name:"United Bank"}},"amenity/bank|United Bank~(West Virginia)":{countryCodes:["us"],nomatch:["amenity/bank|United Bank~(Connecticut)","amenity/fuel|United","shop/convenience|United"],tags:{amenity:"bank",brand:"United Bank","brand:wikidata":"Q16920636","brand:wikipedia":"en:United Bank (West Virginia)",name:"United Bank"}},"amenity/bank|United Community Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"United Community Bank","brand:wikidata":"Q7887635","brand:wikipedia":"en:United Community Bank",name:"United Community Bank"}},"amenity/bank|Vakıfbank":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Vakıfbank","brand:wikidata":"Q1148521","brand:wikipedia":"en:VakıfBank",name:"Vakıfbank"}},"amenity/bank|Vancity":{countryCodes:["ca"],matchNames:["vancouver city savings"],tags:{amenity:"bank",brand:"Vancity","brand:wikidata":"Q7914085","brand:wikipedia":"en:Vancity",name:"Vancity",official_name:"Vancouver City Savings Credit Union"}},"amenity/bank|Veneto Banca":{countryCodes:["it"],tags:{amenity:"bank",brand:"Veneto Banca","brand:wikidata":"Q3127221","brand:wikipedia":"en:Veneto Banca",name:"Veneto Banca"}},"amenity/bank|Venezuela":{tags:{amenity:"bank",brand:"Venezuela",name:"Venezuela"}},"amenity/bank|Vietcombank":{countryCodes:["vn"],tags:{amenity:"bank",brand:"Vietcombank","brand:wikidata":"Q6122995","brand:wikipedia":"en:Vietcombank",name:"Vietcombank"}},"amenity/bank|VietinBank":{tags:{amenity:"bank",brand:"VietinBank","brand:wikidata":"Q7928459","brand:wikipedia":"en:Vietinbank",name:"VietinBank"}},"amenity/bank|Vijaya Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"}},"amenity/bank|Virgin Money":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Virgin Money","brand:wikidata":"Q2527746","brand:wikipedia":"en:Virgin Money UK",name:"Virgin Money"}},"amenity/bank|Volksbank Köln Bonn eG":{countryCodes:["de"],tags:{amenity:"bank",brand:"Volksbank Köln Bonn eG","brand:wikidata":"Q41680844","brand:wikipedia":"de:Volksbank Köln Bonn",name:"Volksbank Köln Bonn eG"}},"amenity/bank|VÚB":{countryCodes:["sk"],tags:{amenity:"bank",brand:"VÚB","brand:wikidata":"Q12778981","brand:wikipedia":"en:Všeobecná úverová banka",name:"VÚB"}},"amenity/bank|Washington Federal":{countryCodes:["us"],tags:{amenity:"bank",brand:"Washington Federal","brand:wikidata":"Q7971859","brand:wikipedia":"en:Washington Federal",name:"Washington Federal"}},"amenity/bank|Webster Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Webster Bank","brand:wikidata":"Q7978891","brand:wikipedia":"en:Webster Bank",name:"Webster Bank"}},"amenity/bank|Wells Fargo":{countryCodes:["us"],matchNames:["wells fargo bank"],tags:{amenity:"bank",brand:"Wells Fargo","brand:wikidata":"Q744149","brand:wikipedia":"en:Wells Fargo",name:"Wells Fargo"}},"amenity/bank|WesBanco":{countryCodes:["us"],tags:{amenity:"bank",brand:"WesBanco","brand:wikidata":"Q7983629","brand:wikipedia":"en:WesBanco",name:"WesBanco"}},"amenity/bank|Western Union":{nomatch:["amenity/money_transfer|Western Union"],tags:{amenity:"bank",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"}},"amenity/bank|Westpac":{countryCodes:["au","nz"],tags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"}},"amenity/bank|Wings Financial Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"Wings Financial Credit Union","brand:wikidata":"Q8025267","brand:wikipedia":"en:Wings Financial Credit Union",name:"Wings Financial Credit Union"}},"amenity/bank|Yapı Kredi":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"}},"amenity/bank|Yorkshire Bank":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"}},"amenity/bank|Yorkshire Building Society":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"}},"amenity/bank|Zagrebačka banka":{countryCodes:["hr"],tags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"}},"amenity/bank|Zenith Bank":{countryCodes:["gb","gh","gm","ng","sl","za"],tags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"}},"amenity/bank|Zions Bank":{tags:{amenity:"bank",brand:"Zions Bank","brand:wikidata":"Q8072576",name:"Zions Bank"}},"amenity/bank|Ziraat Bankası":{tags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"}},"amenity/bank|mBank":{tags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"}},"amenity/bank|st.george":{countryCodes:["au"],matchNames:["st.george bank"],tags:{amenity:"bank",brand:"st.george","brand:wikidata":"Q1606050","brand:wikipedia":"en:St.George Bank",name:"st.george"}},"amenity/bank|Ålandsbanken":{countryCodes:["fi"],tags:{amenity:"bank",brand:"Ålandsbanken","brand:wikidata":"Q4349236","brand:wikipedia":"sv:Ålandsbanken",name:"Ålandsbanken"}},"amenity/bank|ČSOB":{countryCodes:["cz","sk"],tags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"}},"amenity/bank|Česká spořitelna":{countryCodes:["cz"],tags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"}},"amenity/bank|İş Bankası":{countryCodes:["tr"],tags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"}},"amenity/bank|Εθνική Τράπεζα":{countryCodes:["gr"],tags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:el":"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:el":"Εθνική Τράπεζα","name:en":"National Bank of Greece"}},"amenity/bank|Τράπεζα Πειραιώς":{countryCodes:["gr"],tags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:el":"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:el":"Τράπεζα Πειραιώς","name:en":"Piraeus Bank",short_name:"Πειραιώς","short_name:el":"Πειραιώς","short_name:en":"Piraeus"}},"amenity/bank|А-Банк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"А-Банк","brand:wikidata":"Q28705400","brand:wikipedia":"uk:А-Банк",name:"А-Банк"}},"amenity/bank|Авангард":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Авангард","brand:wikidata":"Q62122617",name:"Авангард"}},"amenity/bank|Альфа-Банк~(Россия)":{countryCodes:["by","kz","ru"],tags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:wikidata":"Q1377835","brand:wikipedia":"ru:Альфа-банк",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"}},"amenity/bank|Альфа-Банк~(Украина)":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:ua":"Альфа-Банк","brand:wikidata":"Q16691757","brand:wikipedia":"uk:Альфа-Банк (Україна)",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"}},"amenity/bank|БПС-Сбербанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"БПС-Сбербанк","brand:wikidata":"Q2074915","brand:wikipedia":"be:БПС-Сбербанк",name:"БПС-Сбербанк"}},"amenity/bank|Банк Дабрабыт":{countryCodes:["by"],tags:{amenity:"bank",brand:"Банк Дабрабыт","brand:wikidata":"Q63981850",name:"Банк Дабрабыт"}},"amenity/bank|Банка ДСК":{countryCodes:["bg"],tags:{amenity:"bank",brand:"Банка ДСК","brand:bg":"Банка ДСК","brand:en":"DSK Bank","brand:wikidata":"Q5206146","brand:wikipedia":"en:DSK Bank",name:"Банка ДСК","name:bg":"Банка ДСК","name:en":"DSK Bank"}},"amenity/bank|Белагропромбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Белагропромбанк","brand:en":"Belagroprom Bank","brand:wikidata":"Q1991373","brand:wikipedia":"be:Белаграпрамбанк",name:"Белагропромбанк","name:en":"Belagroprom Bank"}},"amenity/bank|Беларусбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Беларусбанк","brand:en":"Belarusbank","brand:wikidata":"Q1997334","brand:wikipedia":"en:Belarusbank",name:"Беларусбанк","name:en":"Belarusbank"}},"amenity/bank|Белинвестбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Белинвестбанк","brand:wikidata":"Q4081940","brand:wikipedia":"ru:Белинвестбанк",name:"Белинвестбанк"}},"amenity/bank|Бинбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Бинбанк","brand:en":"B&N Bank","brand:wikidata":"Q4086829","brand:wikipedia":"en:B&N Bank",name:"Бинбанк","name:en":"B&N Bank"}},"amenity/bank|ВТБ~(Россия)":{countryCodes:["ru"],matchNames:["втб банк москвы"],tags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q1549389","brand:wikipedia":"en:VTB Bank",name:"ВТБ","name:en":"VTB Bank"}},"amenity/bank|ВТБ~(Украина)":{countryCodes:["ua"],matchNames:["втб банк"],tags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q16628820","brand:wikipedia":"uk:ВТБ#ПАТ «ВТБ Банк (Україна)»",name:"ВТБ","name:en":"VTB Bank"}},"amenity/bank|Возрождение":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Возрождение","brand:wikidata":"Q4114952","brand:wikipedia":"ru:Возрождение (банк)",name:"Возрождение"}},"amenity/bank|Газпромбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Газпромбанк","brand:en":"Gazprombank","brand:wikidata":"Q1924338","brand:wikipedia":"en:Gazprombank",name:"Газпромбанк","name:en":"Gazprombank"}},"amenity/bank|Генбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Генбанк","brand:wikidata":"Q62122630",name:"Генбанк"}},"amenity/bank|Зенит":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Зенит","brand:en":"Zenit","brand:ru":"Зенит","brand:wikidata":"Q4191388","brand:wikipedia":"ru:Зенит (банк)",name:"Зенит","name:en":"Zenit","name:ru":"Зенит"}},"amenity/bank|Казкоммерцбанк":{countryCodes:["kz"],tags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"}},"amenity/bank|Московский индустриальный банк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"}},"amenity/bank|Мособлбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"}},"amenity/bank|Народный банк":{countryCodes:["kg","kz","uz"],tags:{amenity:"bank",brand:"Народный банк","brand:wikidata":"Q1046186","brand:wikipedia":"kk:Қазақстан Халық банкі",name:"Народный банк"}},"amenity/bank|ОТП Банк":{countryCodes:["ru","ua"],tags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"}},"amenity/bank|Обединена Българска Банка":{countryCodes:["bg"],tags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"}},"amenity/bank|Открытие":{countryCodes:["ru"],matchNames:["банк открытие"],tags:{amenity:"bank",brand:"Открытие","brand:wikidata":"Q4327204","brand:wikipedia":"ru:Банк «Финансовая корпорация Открытие»",name:"Открытие"}},"amenity/bank|Ощадбанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"}},"amenity/bank|ПУМБ":{countryCodes:["ua"],tags:{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"}},"amenity/bank|Почта Банк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"}},"amenity/bank|Пощенска банка":{countryCodes:["bg"],tags:{amenity:"bank",brand:"Пощенска банка","brand:wikidata":"Q7234083","brand:wikipedia":"bg:Пощенска банка",name:"Пощенска банка","name:en":"Postbank"}},"amenity/bank|ПриватБанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"}},"amenity/bank|Приднестровский Сбербанк":{countryCodes:["md"],matchNames:["приднестровский cбербанк"],tags:{amenity:"bank",brand:"Приднестровский Сбербанк","brand:en":"Pridnestrovian Savings Bank","brand:ru":"Приднестровский Сбербанк","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Приднестровский Сбербанк","name:en":"Pridnestrovian Savings Bank","name:ru":"Приднестровский Сбербанк"}},"amenity/bank|Приорбанк":{countryCodes:["by"],tags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"}},"amenity/bank|Промсвязьбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"}},"amenity/bank|РНКБ":{countryCodes:["ru","ua"],tags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"}},"amenity/bank|Райффайзен":{countryCodes:["ru"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:ru":"Райффайзен","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank","name:ru":"Райффайзен"}},"amenity/bank|Райффайзен Банк Аваль":{countryCodes:["ua"],matchNames:["аваль","банк аваль"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Райффайзен Банк Аваль","brand:en":"Raiffeisen Bank Aval","brand:ru":"Райффайзен Банк Аваль","brand:ua":"Райффайзен Банк Аваль","brand:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval","name:ru":"Райффайзен Банк Аваль","name:ua":"Райффайзен Банк Аваль"}},"amenity/bank|Росбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Росбанк","brand:en":"Rosbank","brand:ru":"Росбанк","brand:wikidata":"Q1119857","brand:wikipedia":"en:Rosbank",name:"Росбанк","name:en":"Rosbank","name:ru":"Росбанк"}},"amenity/bank|Россельхозбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Россельхозбанк","brand:en":"Rosselkhozbank","brand:ru":"Россельхозбанк","brand:wikidata":"Q3920226","brand:wikipedia":"en:Russian Agricultural Bank",name:"Россельхозбанк","name:en":"Rosselkhozbank","name:ru":"Россельхозбанк"}},"amenity/bank|Русский Стандарт":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Русский Стандарт","brand:en":"Russian Standard Bank","brand:ru":"Русский Стандарт","brand:wikidata":"Q4400854","brand:wikipedia":"en:Russian Standard Bank",name:"Русский Стандарт","name:en":"Russian Standard Bank","name:ru":"Русский Стандарт"}},"amenity/bank|Сбербанк":{countryCodes:["kz","ru"],matchNames:["cбербанк","cбербанк россии","сбербанк россии"],tags:{amenity:"bank",brand:"Сбербанк","brand:en":"Sberbank","brand:ru":"Сбербанк","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Сбербанк","name:en":"Sberbank","name:ru":"Сбербанк"}},"amenity/bank|Совкомбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Совкомбанк","brand:en":"Sovcom Bank","brand:ru":"Совкомбанк","brand:wikidata":"Q4426566","brand:wikipedia":"ru:Совкомбанк",name:"Совкомбанк","name:en":"Sovcom Bank","name:ru":"Совкомбанк"}},"amenity/bank|УкрСиббанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"УкрСиббанк","brand:en":"UkrSibbank","brand:uk":"УкрСиббанк","brand:wikidata":"Q1976290","brand:wikipedia":"uk:Ukrsibbank BNP Paribas Group",name:"УкрСиббанк","name:en":"UkrSibbank","name:uk":"УкрСиббанк"}},"amenity/bank|Укргазбанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Укргазбанк","brand:en":"Ukrgasbank","brand:uk":"Укргазбанк","brand:wikidata":"Q4470692","brand:wikipedia":"uk:Укргазбанк",name:"Укргазбанк","name:en":"Ukrgasbank","name:uk":"Укргазбанк"}},"amenity/bank|Укрсоцбанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:uk":"Укрсоцбанк","brand:wikidata":"Q3547885","brand:wikipedia":"uk:Укрсоцбанк",name:"Укрсоцбанк","name:en":"Ukrsotsbank","name:uk":"Укрсоцбанк"}},"amenity/bank|Уралсиб":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib Bank","brand:ru":"Уралсиб","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib Bank","name:ru":"Уралсиб"}},"amenity/bank|Уральский банк реконструкции и развития":{tags:{amenity:"bank",brand:"Уральский банк реконструкции и развития",name:"Уральский банк реконструкции и развития"}},"amenity/bank|Хаан банк":{countryCodes:["mn"],tags:{amenity:"bank",brand:"Хаан банк","brand:en":"Khan Bank","brand:mn":"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк","name:en":"Khan Bank","name:mn":"Хаан банк"}},"amenity/bank|Хоум Кредит":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Хоум Кредит","brand:en":"Home Credit & Finance Bank","brand:ru":"Хоум Кредит","brand:wikidata":"Q4500466","brand:wikipedia":"en:Home Credit & Finance Bank",name:"Хоум Кредит","name:en":"Home Credit & Finance Bank","name:ru":"Хоум Кредит"}},"amenity/bank|בנק אגוד":{countryCodes:["il"],tags:{"alt_name:en":"Bank Igud",amenity:"bank",brand:"בנק אגוד","brand:en":"Union Bank of Israel","brand:he":"בנק אגוד","brand:wikidata":"Q2903265","brand:wikipedia":"en:Union Bank of Israel",name:"בנק אגוד","name:en":"Union Bank of Israel","name:he":"בנק אגוד"}},"amenity/bank|בנק אוצר החייל":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק אוצר החייל","brand:en":"Bank Otsar Ha-Hayal","brand:he":"בנק אוצר החייל","brand:wikidata":"Q2900674","brand:wikipedia":"en:Bank Otsar Ha-Hayal",name:"בנק אוצר החייל","name:en":"Bank Otsar Ha-Hayal","name:he":"בנק אוצר החייל"}},"amenity/bank|בנק דיסקונט":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק דיסקונט לישראל","brand:en":"Israel Discount Bank","brand:he":"בנק דיסקונט לישראל","brand:wikidata":"Q250362","brand:wikipedia":"en:Israel Discount Bank",name:"בנק דיסקונט","name:en":"Bank Discount","name:he":"בנק דיסקונט"}},"amenity/bank|בנק הפועלים":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק הפועלים","brand:en":"Bank Hapoalim","brand:he":"בנק הפועלים","brand:wikidata":"Q2666775","brand:wikipedia":"en:Bank Hapoalim",name:"בנק הפועלים","name:en":"Bank Hapoalim","name:he":"בנק הפועלים"}},"amenity/bank|בנק יהד":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק יהד","brand:en":"Bank Yahav","brand:he":"בנק יהד","brand:wikidata":"Q7187611","brand:wikipedia":"he:בנק יהב",name:"בנק יהד","name:en":"Bank Yahav","name:he":"בנק יהד"}},"amenity/bank|בנק ירושלים":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק ירושלים","brand:en":"Bank of Jerusalem","brand:he":"בנק ירושלים","brand:wikidata":"Q2900227","brand:wikipedia":"en:Bank of Jerusalem",name:"בנק ירושלים","name:en":"Bank of Jerusalem","name:he":"בנק ירושלים"}},"amenity/bank|בנק לאומי":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק לאומי","brand:en":"Bank Leumi","brand:he":"בנק לאומי","brand:wikidata":"Q806641","brand:wikipedia":"en:Bank Leumi",name:"בנק לאומי","name:en":"Bank Leumi","name:he":"בנק לאומי"}},"amenity/bank|בנק מסד":{countryCodes:["il"],tags:{amenity:"bank",brand:"בנק מסד","brand:en":"Bank Massad","brand:he":"בנק מסד","brand:wikidata":"Q7187667","brand:wikipedia":"en:Bank Massad",name:"בנק מסד","name:en":"Bank Massad","name:he":"בנק מסד"}},"amenity/bank|הבנק הבינלאומי":{countryCodes:["il"],tags:{amenity:"bank",brand:"הבנק הבינלאומי","brand:en":"First International Bank of Israel","brand:he":"הבנק הבינלאומי","brand:wikidata":"Q2777497","brand:wikipedia":"en:First International Bank of Israel",name:"הבנק הבינלאומי","name:en":"First International Bank of Israel","name:he":"הבנק הבינלאומי"}},"amenity/bank|מזרחי טפחות":{countryCodes:["il"],tags:{amenity:"bank",brand:"מזרחי טפחות","brand:en":"Mizrahi-Tefahot","brand:he":"מזרחי טפחות","brand:wikidata":"Q2777129","brand:wikipedia":"en:Bank Mizrahi-Tefahot",name:"בנק מזרחי טפחות","name:en":"Bank Mizrahi-Tefahot","name:he":"בנק מזרחי טפחות"}},"amenity/bank|بانک آینده":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک آینده","brand:en":"Ayandeh Bank","brand:wikidata":"Q5938144","brand:wikipedia":"en:Ayandeh Bank",name:"بانک آینده","name:en":"Ayandeh Bank"}},"amenity/bank|بانک اقتصاد نوین":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک اقتصاد نوین","brand:en":"EN Bank","brand:wikidata":"Q5323768","brand:wikipedia":"en:EN Bank",name:"بانک اقتصاد نوین","name:en":"EN Bank"}},"amenity/bank|بانک انصار":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک انصار","brand:wikidata":"Q5862675","brand:wikipedia":"fa:بانک انصار",name:"بانک انصار"}},"amenity/bank|بانک ایران زمین":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک ایران زمین","brand:wikidata":"Q5934423","brand:wikipedia":"en:Iran Zamin Bank",name:"بانک ایران زمین"}},"amenity/bank|بانک تجارت":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک تجارت","brand:wikidata":"Q7695198","brand:wikipedia":"en:Tejarat Bank",name:"بانک تجارت"}},"amenity/bank|بانک توسعه تعاون":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک توسعه تعاون","brand:wikidata":"Q5684450","brand:wikipedia":"fa:بانک توسعه تعاون",name:"بانک توسعه تعاون"}},"amenity/bank|بانک رفاه":{countryCodes:["ir"],matchNames:["بانک رفاه کارگران"],tags:{amenity:"bank",brand:"بانک رفاه","brand:en":"Refah Bank","brand:wikidata":"Q7307083","brand:wikipedia":"en:Refah Bank",name:"بانک رفاه","name:en":"Refah Bank"}},"amenity/bank|بانک سامان":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سامان","brand:en":"Saman Bank","brand:wikidata":"Q4117676","brand:wikipedia":"en:Saman Bank",name:"بانک سامان","name:en":"Saman Bank"}},"amenity/bank|بانک سرمایه":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سرمایه","brand:en":"Sarmayeh Bank","brand:wikidata":"Q7424291","brand:wikipedia":"en:Sarmayeh Bank",name:"بانک سرمایه","name:en":"Sarmayeh Bank"}},"amenity/bank|بانک سپه":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سپه","brand:en":"Bank Sepah","brand:wikidata":"Q2882624","brand:wikipedia":"en:Bank Sepah",name:"بانک سپه","name:en":"Bank Sepah"}},"amenity/bank|بانک سینا":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک سینا","brand:en":"Sina Bank","brand:wikidata":"Q10860246","brand:wikipedia":"en:Sina Bank",name:"بانک سینا","name:en":"Sina Bank"}},"amenity/bank|بانک شهر":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک شهر","brand:en":"Shahr Bank","brand:wikidata":"Q5941033","brand:wikipedia":"fa:بانک شهر",name:"بانک شهر","name:en":"Shahr Bank"}},"amenity/bank|بانک صادرات":{countryCodes:["ir"],matchNames:["بانک صادرات ایران","صادرات"],tags:{amenity:"bank",brand:"بانک صادرات","brand:en":"Bank Saderat Iran","brand:wikidata":"Q2882608","brand:wikipedia":"en:Bank Saderat Iran",name:"بانک صادرات","name:en":"Bank Saderat Iran"}},"amenity/bank|بانک قوامین":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک قوامین","brand:en":"Ghavamin Bank","brand:wikidata":"Q10860253","brand:wikipedia":"en:Ghavamin Bank",name:"بانک قوامین","name:en":"Ghavamin Bank"}},"amenity/bank|بانک مسکن":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک مسکن","brand:en":"Bank Maskan","brand:wikidata":"Q4855942","brand:wikipedia":"en:Bank Maskan",name:"بانک مسکن","name:en":"Bank Maskan"}},"amenity/bank|بانک ملت":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک ملت","brand:en":"Bank Mellat","brand:wikidata":"Q4855944","brand:wikipedia":"en:Bank Mellat",name:"بانک ملت","name:en":"Bank Mellat"}},"amenity/bank|بانک ملی":{countryCodes:["ir"],matchNames:["بانک ملی ایران","ملی"],tags:{amenity:"bank",brand:"بانک ملی","brand:en":"Bank Melli Iran","brand:wikidata":"Q806640","brand:wikipedia":"en:Bank Melli Iran",name:"بانک ملی","name:en":"Bank Melli Iran"}},"amenity/bank|بانک مهر اقتصاد":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک مهر اقتصاد","brand:wikidata":"Q5942921","brand:wikipedia":"fa:بانک مهر اقتصاد",name:"بانک مهر اقتصاد","name:en":"Mehr Eqtesad Bank"}},"amenity/bank|بانک پارسیان":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک پارسیان","brand:en":"Parsian Bank","brand:wikidata":"Q2410404","brand:wikipedia":"en:Parsian Bank",name:"بانک پارسیان","name:en":"Parsian Bank"}},"amenity/bank|بانک پاسارگاد":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک پاسارگاد","brand:en":"Bank Pasargad","brand:wikidata":"Q4855962","brand:wikipedia":"en:Bank Pasargad",name:"بانک پاسارگاد","name:en":"Bank Pasargad"}},"amenity/bank|بانک کشاورزی":{countryCodes:["ir"],tags:{amenity:"bank",brand:"بانک کشاورزی","brand:en":"Bank Keshavarzi Iran","brand:wikidata":"Q6395007","brand:wikipedia":"en:Bank Keshavarzi Iran",name:"بانک کشاورزی","name:en":"Bank Keshavarzi Iran"}},"amenity/bank|پست بانک":{countryCodes:["ir"],tags:{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"}},"amenity/bank|অগ্রণী ব্যাংক":{countryCodes:["bd"],matchNames:["agrani bank","agrani bank limited","agrani bank limited অগ্রণী ব্যাংক লিমিটেড","agrani bank ltd","agrani bank ltd অগ্রণী ব্যাংক লিমিটেড","অগ্রণী ব্যাংক লিমিটেড"],tags:{amenity:"bank",brand:"অগ্রণী ব্যাংক","brand:bn":"অগ্রণী ব্যাংক","brand:en":"Agrani Bank","brand:wikidata":"Q517050","brand:wikipedia":"bn:অগ্রণী ব্যাংক",name:"অগ্রণী ব্যাংক","name:bn":"অগ্রণী ব্যাংক","name:en":"Agrani Bank"}},"amenity/bank|গ্রামীণ ব্যাংক":{countryCodes:["bd"],tags:{amenity:"bank",brand:"গ্রামীণ ব্যাংক","brand:bn":"গ্রামীণ ব্যাংক","brand:en":"Grameen Bank","brand:wikidata":"Q188567","brand:wikipedia":"en:Grameen Bank",name:"গ্রামীণ ব্যাংক","name:bn":"গ্রামীণ ব্যাংক","name:en":"Grameen Bank"}},"amenity/bank|জনতা ব্যাংক লিমিটেড":{countryCodes:["bd"],matchNames:["janata bank","janata bank limited","janata bank limited জনতা ব্যাংক লিমিটেড"],tags:{amenity:"bank",brand:"জনতা ব্যাংক লিমিটেড","brand:bn":"জনতা ব্যাংক লিমিটেড","brand:en":"Janata Bank Limited","brand:wikidata":"Q3347028","brand:wikipedia":"bn:জনতা ব্যাংক",name:"জনতা ব্যাংক লিমিটেড","name:bn":"জনতা ব্যাংক লিমিটেড","name:en":"Janata Bank Limited"}},"amenity/bank|বাংলাদেশ কৃষি ব্যাংক":{countryCodes:["bd"],tags:{amenity:"bank",brand:"বাংলাদেশ কৃষি ব্যাংক","brand:bn":"বাংলাদেশ কৃষি ব্যাংক","brand:en":"Bangladesh Krishi Bank","brand:wikidata":"Q16345932","brand:wikipedia":"en:Bangladesh Krishi Bank",name:"বাংলাদেশ কৃষি ব্যাংক","name:bn":"বাংলাদেশ কৃষি ব্যাংক","name:en":"Bangladesh Krishi Bank"}},"amenity/bank|সোনালী ব্যাংক লিমিটেড":{countryCodes:["bd"],matchNames:["sonali bank","sonali bank limited","sonali bank limited সোনালী ব্যাংক লিমিটেড"],tags:{amenity:"bank",brand:"সোনালী ব্যাংক লিমিটেড","brand:bn":"সোনালী ব্যাংক লিমিটেড","brand:en":"Sonali Bank","brand:wikidata":"Q3350382","brand:wikipedia":"en:Sonali Bank",name:"সোনালী ব্যাংক লিমিটেড","name:bn":"সোনালী ব্যাংক লিমিটেড","name:en":"Sonali Bank"}},"amenity/bank|ธนาคารกรุงเทพ":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารกรุงเทพ","brand:en":"Bangkok Bank","brand:th":"ธนาคารกรุงเทพ","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"ธนาคารกรุงเทพ","name:en":"Bangkok Bank","name:th":"ธนาคารกรุงเทพ"}},"amenity/bank|ธนาคารกรุงไทย":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:th":"ธนาคารกรุงไทย","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank","name:th":"ธนาคารกรุงไทย"}},"amenity/bank|ธนาคารกสิกรไทย":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"Kasikornbank","brand:th":"ธนาคารกสิกรไทย","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"Kasikornbank","name:th":"ธนาคารกสิกรไทย"}},"amenity/bank|ธนาคารออมสิน":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:th":"ธนาคารออมสิน","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank","name:th":"ธนาคารออมสิน"}},"amenity/bank|ธนาคารไทยพาณิชย์":{countryCodes:["th"],tags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:th":"ธนาคารไทยพาณิชย์","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank","name:th":"ธนาคารไทยพาณิชย์"}},"amenity/bank|みずほ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:ja":"みずほ銀行","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank","name:ja":"みずほ銀行"}},"amenity/bank|ゆうちょ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"ゆうちょ銀行","brand:en":"Japan Post Bank","brand:ja":"ゆうちょ銀行","brand:wikidata":"Q907103","brand:wikipedia":"ja:ゆうちょ銀行",name:"ゆうちょ銀行","name:en":"Japan Post Bank","name:ja":"ゆうちょ銀行"}},"amenity/bank|りそな銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"りそな銀行","brand:en":"Resona Bank","brand:ja":"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行","name:en":"Resona Bank","name:ja":"りそな銀行"}},"amenity/bank|イオン銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"イオン銀行","brand:en":"Aeon Bank","brand:ja":"イオン銀行","brand:wikidata":"Q11286327","brand:wikipedia":"ja:イオン銀行",name:"イオン銀行","name:en":"Aeon Bank","name:ja":"イオン銀行"}},"amenity/bank|スルガ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"スルガ銀行","brand:en":"Suruga Bank","brand:ja":"スルガ銀行","brand:wikidata":"Q11313470","brand:wikipedia":"ja:スルガ銀行",name:"スルガ銀行","name:en":"Suruga Bank","name:ja":"スルガ銀行"}},"amenity/bank|三井住友信託銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三井住友信託銀行","brand:en":"Sumitomo Mitsui Trust Bank","brand:wikidata":"Q5215421","brand:wikipedia":"jp:三井住友信託銀行",name:"三井住友信託銀行","name:en":"Sumitomo Mitsui Trust Bank"}},"amenity/bank|三井住友銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:ja":"三井住友銀行","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation","name:ja":"三井住友銀行","short_name:en":"SMBC"}},"amenity/bank|三菱UFJ信託銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三菱UFJ信託銀行","brand:en":"Mitsubishi UFJ Trust and Banking Corporation","brand:ja":"三菱UFJ信託銀行","brand:wikidata":"Q6883178","brand:wikipedia":"en:Mitsubishi UFJ Trust and Banking Corporation",name:"三菱UFJ信託銀行","name:en":"Mitsubishi UFJ Trust and Banking Corporation","name:ja":"三菱UFJ信託銀行"}},"amenity/bank|三菱UFJ銀行":{matchNames:["三菱東京ufj銀行"],tags:{amenity:"bank",brand:"三菱UFJ銀行","brand:en":"MUFG Bank","brand:ja":"三菱UFJ銀行","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱UFJ銀行","name:en":"MUFG Bank","name:ja":"三菱UFJ銀行"}},"amenity/bank|上海商業儲蓄銀行":{countryCodes:["tw"],tags:{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"}},"amenity/bank|上海浦东发展银行":{tags:{amenity:"bank",brand:"上海浦东发展银行","brand:en":"Shanghai Pudong Development Bank","brand:wikidata":"Q1479076","brand:wikipedia":"zh:上海浦东发展银行",name:"上海浦东发展银行","name:en":"Shanghai Pudong Development Bank"}},"amenity/bank|东亚银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"东亚银行","brand:wikidata":"Q806679","brand:wikipedia":"en:Bank of East Asia",name:"东亚银行","name:en":"Bank of East Asia"}},"amenity/bank|中信银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中信银行","brand:en":"China CITIC Bank","brand:wikidata":"Q38960","brand:wikipedia":"en:China CITIC Bank",name:"中信银行","name:en":"China CITIC Bank"}},"amenity/bank|中国光大银行":{tags:{amenity:"bank",brand:"中国光大银行","brand:en":"China Everbright Bank","brand:wikidata":"Q10873167","brand:wikipedia":"zh:中国光大银行",name:"中国光大银行","name:en":"China Everbright Bank"}},"amenity/bank|中国农业银行":{countryCodes:["cn"],tags:{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"}},"amenity/bank|中国工商银行":{countryCodes:["cn"],tags:{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"}},"amenity/bank|中国建设银行":{countryCodes:["cn"],matchNames:["建设银行"],tags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"}},"amenity/bank|中国民生银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中国民生银行","brand:en":"China Minsheng Bank","brand:wikidata":"Q911543","brand:wikipedia":"en:China Minsheng Bank",name:"中国民生银行","name:en":"China Minsheng Bank"}},"amenity/bank|中国邮政储蓄银行":{countryCodes:["cn"],tags:{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"}},"amenity/bank|中国银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"中国银行","brand:en":"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"中国银行","name:en":"Bank of China"}},"amenity/bank|中國信託商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"中國信託商業銀行","brand:en":"CTBC Bank","brand:wikidata":"Q5100191","brand:wikipedia":"en:CTBC Bank",name:"中國信託商業銀行","name:en":"CTBC Bank"}},"amenity/bank|交通银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"交通银行","brand:en":"Bank of Communications","brand:wikidata":"Q806680","brand:wikipedia":"en:Bank of Communications",name:"交通银行","name:en":"Bank of Communications"}},"amenity/bank|京城商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"京城商業銀行","brand:wikidata":"Q10883132","brand:wikipedia":"zh:京城商業銀行",name:"京城商業銀行"}},"amenity/bank|京都中央信用金庫":{countryCodes:["jp"],tags:{amenity:"bank",brand:"京都中央信用金庫","brand:en":"Kyoto Chuo Shinkin Bank","brand:wikidata":"Q11374844","brand:wikipedia":"ja:京都中央信用金庫",name:"京都中央信用金庫","name:en":"Kyoto Chuo Shinkin Bank"}},"amenity/bank|京都銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"京都銀行","brand:en":"Bank of Kyoto","brand:wikidata":"Q11375713","brand:wikipedia":"en:Bank of Kyoto",name:"京都銀行","name:en":"Bank of Kyoto"}},"amenity/bank|元大商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"元大商業銀行","brand:en":"Yuanta Commercial Bank","brand:wikidata":"Q10889602","brand:wikipedia":"zh:元大商業銀行",name:"元大商業銀行","name:en":"Yuanta Commercial Bank"}},"amenity/bank|兆豐國際商業銀行":{countryCodes:["tw"],tags:{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"}},"amenity/bank|兴业银行":{tags:{amenity:"bank",brand:"兴业银行","brand:wikidata":"Q1410821","brand:wikipedia":"zh:兴业银行",name:"兴业银行"}},"amenity/bank|农业银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"农业银行","brand:wikidata":"Q26298","brand:wikipedia":"zh:中国农业银行",name:"农业银行"}},"amenity/bank|北京银行":{tags:{amenity:"bank",brand:"北京银行","brand:wikidata":"Q39146","brand:wikipedia":"zh:北京银行",name:"北京银行"}},"amenity/bank|北洋銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"北洋銀行","brand:en":"North Pacific Bank","brand:wikidata":"Q11402354","brand:wikipedia":"ja:北洋銀行",name:"北洋銀行","name:en":"North Pacific Bank"}},"amenity/bank|北海道銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"北海道銀行","brand:en":"Hokkaido Bank","brand:wikidata":"Q5878076","brand:wikipedia":"en:Hokkaido Bank",name:"北海道銀行","name:en":"Hokkaido Bank"}},"amenity/bank|千葉銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"千葉銀行","brand:en":"The Chiba Bank","brand:ja":"千葉銀行","brand:wikidata":"Q1071712","brand:wikipedia":"en:Chiba Bank",name:"千葉銀行","name:en":"Chiba Bank","name:ja":"千葉銀行"}},"amenity/bank|台中商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"}},"amenity/bank|台北富邦商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"}},"amenity/bank|台新國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"}},"amenity/bank|合作金庫商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"}},"amenity/bank|國泰世華商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"}},"amenity/bank|埼玉りそな銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"埼玉りそな銀行","brand:en":"Saitama Resona Bank","brand:ja":"埼玉りそな銀行","brand:wikidata":"Q4671591","brand:wikipedia":"ja:埼玉りそな銀行",name:"埼玉りそな銀行","name:en":"Saitama Resona Bank","name:ja":"埼玉りそな銀行"}},"amenity/bank|大眾商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"}},"amenity/bank|宁波银行":{tags:{amenity:"bank",brand:"宁波银行",name:"宁波银行"}},"amenity/bank|安泰商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"}},"amenity/bank|工商银行":{countryCodes:["cn"],tags:{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"}},"amenity/bank|常陽銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"常陽銀行","brand:en":"Joyo Bank","brand:wikidata":"Q6297774","brand:wikipedia":"en:Joyo Bank",name:"常陽銀行","name:en":"Joyo Bank"}},"amenity/bank|彰化商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"彰化商業銀行","brand:en":"Chang Hwa Bank","brand:wikidata":"Q5071627","brand:wikipedia":"en:Chang Hwa Bank",name:"彰化商業銀行","name:en":"Chang Hwa Bank"}},"amenity/bank|招商银行":{countryCodes:["cn"],tags:{amenity:"bank",brand:"招商银行","brand:en":"China Merchants Bank","brand:wikidata":"Q1073327","brand:wikipedia":"en:China Merchants Bank",name:"招商银行","name:en":"China Merchants Bank"}},"amenity/bank|新生銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"新生銀行","brand:en":"Shinsei Bank","brand:ja":"新生銀行","brand:wikidata":"Q571997","brand:wikipedia":"ja:新生銀行",name:"新生銀行","name:en":"Shinsei Bank","name:ja":"新生銀行"}},"amenity/bank|日本銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"日本銀行","brand:en":"Bank of Japan","brand:wikidata":"Q333101","brand:wikipedia":"ja:日本銀行",name:"日本銀行","name:en":"Bank of Japan"}},"amenity/bank|東亞銀行":{countryCodes:["hk"],tags:{amenity:"bank",brand:"東亞銀行","brand:en":"Bank of East Asia","brand:wikidata":"Q806679","brand:wikipedia":"zh:東亞銀行","brand:zh-Hans":"东亚银行","brand:zh-Hant":"東亞銀行",name:"東亞銀行 BEA","name:en":"Bank of East Asia","name:zh-Hans":"东亚银行","name:zh-Hant":"東亞銀行"}},"amenity/bank|東日本銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"東日本銀行","brand:en":"Higashi-Nippon Bank","brand:ja":"東日本銀行","brand:wikidata":"Q11527211","brand:wikipedia":"ja:東日本銀行",name:"東日本銀行","name:en":"Higashi-Nippon Bank","name:ja":"東日本銀行"}},"amenity/bank|板信商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"}},"amenity/bank|横浜銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"}},"amenity/bank|永豐商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"}},"amenity/bank|渣打國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"渣打國際商業銀行","brand:wikidata":"Q62267023",name:"渣打國際商業銀行"}},"amenity/bank|玉山商業銀行":{countryCodes:["tw"],tags:{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"}},"amenity/bank|第一商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"}},"amenity/bank|聯邦商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"}},"amenity/bank|臺灣中小企業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"}},"amenity/bank|臺灣土地銀行":{countryCodes:["tw"],tags:{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"}},"amenity/bank|臺灣新光商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"}},"amenity/bank|臺灣銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"}},"amenity/bank|芝信用金庫":{tags:{amenity:"bank",brand:"芝信用金庫","brand:en":"Shiba Shinkin Bank","brand:ja":"芝信用金庫","brand:wikidata":"Q11614605","brand:wikipedia":"ja:芝信用金庫",name:"芝信用金庫","name:en":"Shiba Shinkin Bank","name:ja":"芝信用金庫"}},"amenity/bank|華南商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"}},"amenity/bank|近畿大阪銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"近畿大阪銀行","brand:en":"The Kinki Osaka Bank","brand:ja":"近畿大阪銀行","brand:wikidata":"Q11638628","brand:wikipedia":"ja:近畿大阪銀行",name:"近畿大阪銀行","name:en":"Kinki Osaka Bank","name:ja":"近畿大阪銀行"}},"amenity/bank|遠東國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"}},"amenity/bank|陽信商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"}},"amenity/bank|静岡銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:ja":"静岡銀行","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank","name:ja":"静岡銀行"}},"amenity/bank|국민은행":{countryCodes:["kr"],matchNames:["국민은행 (gungmin bank)"],tags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:ko":"국민은행","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Financial Group Inc",name:"국민은행","name:en":"KB Kookmin Bank","name:ko":"국민은행"}},"amenity/bank|기업은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:ko":"기업은행","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea","name:ko":"기업은행"}},"amenity/bank|농협":{countryCodes:["kr"],matchNames:["nh농협은행"],tags:{amenity:"bank",brand:"농협","brand:en":"NH","brand:ko":"농협","brand:wikidata":"Q15283673","brand:wikipedia":"ko:NH농협은행",name:"농협","name:en":"NH","name:ko":"농협"}},"amenity/bank|새마을금고":{countryCodes:["kr"],tags:{amenity:"bank",brand:"새마을금고","brand:ko":"새마을금고","brand:wikidata":"Q12600614","brand:wikipedia":"ko:새마을금고",name:"새마을금고","name:ko":"새마을금고"}},"amenity/bank|신한은행":{countryCodes:["kr"],matchNames:["신한은행 (sinhan bank)"],tags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:ko":"신한은행","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank","name:ko":"신한은행"}},"amenity/bank|우리은행":{countryCodes:["kr"],matchNames:["우리은행 (uri bank)"],tags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:ko":"우리은행","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank","name:ko":"우리은행"}},"amenity/bank|하나은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:ko":"하나은행","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank","name:ko":"하나은행"}},"amenity/bar|All Bar One":{countryCodes:["gb"],tags:{amenity:"bar",brand:"All Bar One","brand:wikidata":"Q4728624","brand:wikipedia":"en:All Bar One",name:"All Bar One"}},"amenity/bar|Revolución de Cuba":{countryCodes:["gb"],tags:{amenity:"bar",brand:"Revolución de Cuba","brand:wikidata":"Q64024691",name:"Revolución de Cuba"}},"amenity/bar|Revolution":{countryCodes:["gb"],tags:{amenity:"bar",brand:"Revolution","brand:wikidata":"Q64024398",name:"Revolution"}},"amenity/bicycle_rental|Call a Bike":{countryCodes:["de"],tags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"}},"amenity/bicycle_rental|Explore Bike Share":{tags:{amenity:"bicycle_rental",brand:"Explore Bike Share",name:"Explore Bike Share"}},"amenity/bicycle_rental|Grid":{countryCodes:["us"],tags:{amenity:"bicycle_rental",brand:"Grid","brand:wikidata":"Q62104168",name:"Grid"}},"amenity/bicycle_rental|MiBici":{countryCodes:["mx"],tags:{amenity:"bicycle_rental",brand:"MiBici","brand:wikidata":"Q60966987","brand:wikipedia":"es:MiBici",name:"MiBici"}},"amenity/bicycle_rental|Swapfiets":{countryCodes:["be","de","dk","nl"],tags:{amenity:"bicycle_rental",brand:"Swapfiets","brand:wikidata":"Q62104374",name:"Swapfiets"}},"amenity/bicycle_rental|metropolradruhr":{countryCodes:["de"],tags:{amenity:"bicycle_rental",brand:"metropolradruhr","brand:wikidata":"Q62104274",name:"metropolradruhr"}},"amenity/bureau_de_change|CADECA":{countryCodes:["cu"],tags:{amenity:"bureau_de_change",brand:"CADECA","brand:wikidata":"Q62122716",name:"CADECA"}},"amenity/bureau_de_change|Travelex":{tags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"}},"amenity/bureau_de_change|Беларусбанк":{tags:{amenity:"bureau_de_change",brand:"Беларусбанк",name:"Беларусбанк"}},"amenity/bureau_de_change|Обмен валют Кит Group":{tags:{amenity:"bureau_de_change",brand:"Обмен валют Кит Group",name:"Обмен валют Кит Group"}},"amenity/cafe|85°C":{countryCodes:["au","us"],matchNames:["85 cafe","85 degrees","85 degrees c","85 degrees celsius","85c bakery cafe","85c daily cafe","85oc"],tags:{alt_name:"85C",amenity:"cafe",brand:"85°C","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop;chinese",name:"85°C",takeaway:"yes"}},"amenity/cafe|85度C":{countryCodes:["cn","tw"],tags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop",name:"85度C","name:en":"85C Bakery Cafe",takeaway:"yes"}},"amenity/cafe|Aroma":{tags:{amenity:"cafe",brand:"Aroma",cuisine:"coffee_shop",name:"Aroma",takeaway:"yes"}},"amenity/cafe|Aroma Espresso Bar":{countryCodes:["ca","kz","ro","ua","us"],nomatch:["amenity/cafe|Aroma"],tags:{amenity:"cafe",brand:"Aroma Espresso Bar","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"Aroma Espresso Bar",takeaway:"yes"}},"amenity/cafe|Barista":{countryCodes:["in","lk","mv","np"],tags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",cuisine:"coffee_shop",name:"Barista",takeaway:"yes"}},"amenity/cafe|Beck's Coffee Shop":{countryCodes:["jp"],matchNames:["beck's coffe shop"],tags:{alt_name:"ベックス・コーヒーショップ",amenity:"cafe",brand:"Beck's Coffee Shop","brand:wikidata":"Q11191008","brand:wikipedia":"ja:BECK'S COFFEE SHOP",cuisine:"coffee_shop",name:"Beck's Coffee Shop",takeaway:"yes"}},"amenity/cafe|Biggby Coffee":{countryCodes:["us"],tags:{amenity:"cafe",brand:"Biggby Coffee","brand:wikidata":"Q4906876","brand:wikipedia":"en:Biggby Coffee",cuisine:"coffee_shop",name:"Biggby Coffee",takeaway:"yes"}},"amenity/cafe|Black Rock Coffee":{countryCodes:["us"],tags:{amenity:"cafe",brand:"Black Rock Coffee","brand:wikidata":"Q64225934",cuisine:"coffee_shop",name:"Black Rock Coffee",takeaway:"yes"}},"amenity/cafe|Blue Bottle Coffee":{countryCodes:["jp","kr","us"],tags:{amenity:"cafe",brand:"Blue Bottle Coffee","brand:wikidata":"Q4928917","brand:wikipedia":"en:Blue Bottle Coffee",cuisine:"coffee_shop",name:"Blue Bottle Coffee",takeaway:"yes"}},"amenity/cafe|Bonafide":{countryCodes:["ar","cl"],tags:{amenity:"cafe",brand:"Bonafide","brand:wikidata":"Q62122746",cuisine:"coffee_shop",name:"Bonafide",takeaway:"yes"}},"amenity/cafe|Boston Tea Party":{countryCodes:["gb"],tags:{amenity:"cafe",brand:"Boston Tea Party","brand:wikidata":"Q23461358","brand:wikipedia":"en:Boston Tea Party (café chain)",cuisine:"coffee_shop",name:"Boston Tea Party",takeaway:"yes"}},"amenity/cafe|Bridgehead":{countryCodes:["ca"],tags:{amenity:"cafe",brand:"Bridgehead","brand:wikidata":"Q4966509","brand:wikipedia":"en:Bridgehead Coffee",cuisine:"coffee_shop",name:"Bridgehead",takeaway:"yes"}},"amenity/cafe|Cafe Coffee Day":{tags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",cuisine:"coffee_shop",name:"Cafe Coffee Day",takeaway:"yes"}},"amenity/cafe|Caffè Nero":{countryCodes:["gb","ie","tr","us"],matchNames:["cafe nero"],tags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",cuisine:"coffee_shop",name:"Caffè Nero",takeaway:"yes"}},"amenity/cafe|Café Amazon":{tags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"Café Amazon",takeaway:"yes"}},"amenity/cafe|Café Dépôt":{countryCodes:["ca"],tags:{amenity:"cafe",brand:"Café Dépôt","brand:wikidata":"Q64924449",cuisine:"coffee_shop;cake;bagel;bistro",name:"Café Dépôt",takeaway:"yes"}},"amenity/cafe|Café Martínez":{countryCodes:["ar"],tags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",cuisine:"coffee_shop",name:"Café Martínez",takeaway:"yes"}},"amenity/cafe|Café de Paris":{tags:{amenity:"cafe",brand:"Café de Paris",cuisine:"coffee_shop",name:"Café de Paris",takeaway:"yes"}},"amenity/cafe|Café de la Mairie":{tags:{amenity:"cafe",brand:"Café de la Mairie",cuisine:"coffee_shop",name:"Café de la Mairie",takeaway:"yes"}},"amenity/cafe|Café de la Poste":{tags:{amenity:"cafe",brand:"Café de la Poste",cuisine:"coffee_shop",name:"Café de la Poste",takeaway:"yes"}},"amenity/cafe|Cappuccino":{countryCodes:["at","be","de","es","se"],tags:{amenity:"cafe",brand:"Cappuccino",cuisine:"coffee_shop",name:"Cappuccino",takeaway:"yes"}},"amenity/cafe|Caribou Coffee":{tags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",cuisine:"coffee_shop",name:"Caribou Coffee",takeaway:"yes"}},"amenity/cafe|Chatime":{tags:{amenity:"cafe",brand:"Chatime","brand:en":"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime","brand:zh":"日出茶太",cuisine:"bubble_tea",name:"Chatime","name:en":"Chatime","name:zh":"日出茶太",takeaway:"yes"}},"amenity/cafe|CoCo":{countryCodes:["au"],tags:{amenity:"cafe",brand:"CoCo","brand:wikidata":"Q64827025",cuisine:"bubble_tea",name:"Coco",takeaway:"yes"}},"amenity/cafe|Coffee Bean":{tags:{amenity:"cafe",brand:"Coffee Bean",cuisine:"coffee_shop",name:"Coffee Bean",takeaway:"yes"}},"amenity/cafe|Coffee Culture~(Canada/USA)":{countryCodes:["ca","us"],tags:{amenity:"cafe",brand:"Coffee Culture",cuisine:"coffee_shop",name:"Coffee Culture",takeaway:"yes"}},"amenity/cafe|Coffee Culture~(New Zealand)":{countryCodes:["nz"],tags:{amenity:"cafe",brand:"Coffee Culture",cuisine:"coffee_shop",name:"Coffee Culture",takeaway:"yes"}},"amenity/cafe|Coffee Fellows":{countryCodes:["de","lu","nl"],tags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",cuisine:"coffee_shop",name:"Coffee Fellows",takeaway:"yes"}},"amenity/cafe|Coffee House~(Finland)":{countryCodes:["fi"],nomatch:["amenity/cafe|The Coffee House~(Vietnam)"],tags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",cuisine:"coffee_shop",name:"Coffee House",takeaway:"yes"}},"amenity/cafe|Coffee Island":{countryCodes:["cy","gr"],tags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",cuisine:"coffee_shop",name:"Coffee Island",takeaway:"yes"}},"amenity/cafe|Coffee Like":{countryCodes:["kz","ru"],tags:{amenity:"cafe",brand:"Coffee Like","brand:wikidata":"Q55662627","brand:wikipedia":"ru:Coffee Like",cuisine:"coffee_shop",name:"Coffee Like",takeaway:"yes"}},"amenity/cafe|Coffee Time":{tags:{amenity:"cafe",brand:"Coffee Time","brand:wikidata":"Q5140932","brand:wikipedia":"en:Coffee Time",cuisine:"coffee_shop",name:"Coffee Time",takeaway:"yes"}},"amenity/cafe|Coffee#1":{countryCodes:["gb"],matchNames:["coffee number 1","coffee number one"],tags:{amenity:"cafe",brand:"Coffee#1","brand:wikidata":"Q22032058","brand:wikipedia":"en:Coffee 1",cuisine:"coffee_shop",name:"Coffee#1",takeaway:"yes"}},"amenity/cafe|Cofix":{countryCodes:["il","ru"],tags:{amenity:"cafe",brand:"Cofix","brand:en":"Cofix","brand:he":"קפויקס","brand:wikidata":"Q16132717","brand:wikipedia":"he:קופיקס",cuisine:"coffee_shop",name:"Cofix","name:en":"Cofix","name:he":"קופיקס",takeaway:"yes"}},"amenity/cafe|Cofizz":{countryCodes:["il"],tags:{amenity:"cafe",brand:"Cofizz","brand:en":"Cofizz","brand:he":"קופיז","brand:wikidata":"Q64606270",cuisine:"coffee_shop",name:"Cofizz","name:en":"Cofizz","name:he":"קופיז",takeaway:"yes"}},"amenity/cafe|Costa":{matchNames:["costa coffee"],tags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",cuisine:"coffee_shop",name:"Costa",takeaway:"yes"}},"amenity/cafe|Country Style":{countryCodes:["ca"],tags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",cuisine:"coffee_shop",name:"Country Style",takeaway:"yes"}},"amenity/cafe|Cộng Cà Phê":{countryCodes:["kr","vn"],matchNames:["cong"],tags:{amenity:"cafe",brand:"Cộng Cà Phê","brand:wikidata":"Q63864181",cuisine:"coffee_shop;vietnamese",name:"Cộng Cà Phê","name:vi":"Cộng Cà Phê",takeaway:"yes"}},"amenity/cafe|Dolce Vita":{tags:{amenity:"cafe",brand:"Dolce Vita",cuisine:"coffee_shop",name:"Dolce Vita",takeaway:"yes"}},"amenity/cafe|Dutch Bros. Coffee":{countryCodes:["us"],matchNames:["dutch bros","dutch brothers"],tags:{amenity:"cafe",brand:"Dutch Bros. Coffee","brand:wikidata":"Q5317253","brand:wikipedia":"en:Dutch Bros. Coffee",cuisine:"coffee_shop",name:"Dutch Bros. Coffee",takeaway:"only"}},"amenity/cafe|Espresso House":{countryCodes:["dk","fi","no","se"],tags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",cuisine:"coffee_shop",name:"Espresso House",takeaway:"yes"}},"amenity/cafe|Fran's Café":{countryCodes:["br"],tags:{amenity:"cafe",brand:"Fran's Café","brand:wikidata":"Q62075645",cuisine:"coffee_shop",name:"Fran's Café",takeaway:"yes"}},"amenity/cafe|Gloria Jean's":{nomatch:["shop/clothes|Gloria Jeans"],tags:{amenity:"cafe",brand:"Gloria Jean's","brand:wikidata":"Q2666365","brand:wikipedia":"en:Gloria Jean's Coffees",cuisine:"coffee_shop",name:"Gloria Jean's",official_name:"Gloria Jean's Coffees",takeaway:"yes"}},"amenity/cafe|Gong Cha~(Vietnam)":{countryCodes:["vn"],tags:{"alt_name:vi":"Cống Trà",amenity:"cafe",brand:"Gong Cha","brand:vi":"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"vi:Gong Cha","brand:zh":"貢茶",cuisine:"bubble_tea",name:"Gong Cha","name:vi":"Gong Cha","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|Gong Cha~(worldwide)":{countryCodes:["au","bn","ca","mm","mo","my","nz","ph","sg","us"],tags:{amenity:"cafe",brand:"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"en:Gong Cha","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"Gong Cha","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|Havanna":{countryCodes:["ar","pe"],tags:{amenity:"cafe",brand:"Havanna","brand:wikidata":"Q2900869","brand:wikipedia":"es:Havanna",cuisine:"coffee_shop",name:"Havanna",takeaway:"yes"}},"amenity/cafe|Highlands Coffee":{countryCodes:["vn"],matchNames:["highlands"],tags:{amenity:"cafe",brand:"Highlands Coffee","brand:wikidata":"Q5759361","brand:wikipedia":"vi:Highlands Coffee",cuisine:"coffee_shop;vietnamese",name:"Highlands Coffee","name:en":"Highlands Coffee",takeaway:"yes"}},"amenity/cafe|Hudsons Coffee":{countryCodes:["au","sg"],tags:{amenity:"cafe",brand:"Hudsons Coffee","brand:wikidata":"Q5929076","brand:wikipedia":"en:Hudsons Coffee",cuisine:"coffee_shop",name:"Hudsons Coffee",takeaway:"yes"}},"amenity/cafe|Insomnia":{countryCodes:["ie"],tags:{amenity:"cafe",brand:"Insomnia","brand:wikidata":"Q6038271","brand:wikipedia":"en:Insomnia Coffee Company",cuisine:"coffee_shop",name:"Insomnia",takeaway:"yes"}},"amenity/cafe|Jamaica Blue":{countryCodes:["ae","au","cn","gb","my","nz","sg"],tags:{amenity:"cafe",brand:"Jamaica Blue","brand:wikidata":"Q24965819","brand:wikipedia":"en:Jamaica Blue",cuisine:"coffee_shop",name:"Jamaica Blue",takeaway:"yes"}},"amenity/cafe|Joe & The Juice":{tags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",cuisine:"coffee_shop",name:"Joe & The Juice",takeaway:"yes"}},"amenity/cafe|La Colombe Coffee Roasters":{countryCodes:["us"],tags:{amenity:"cafe",brand:"La Colombe Coffee Roasters","brand:wikidata":"Q23461663","brand:wikipedia":"en:La Colombe Coffee Roasters",cuisine:"coffee_shop",name:"La Colombe Coffee Roasters",short_name:"La Colombe",takeaway:"yes"}},"amenity/cafe|Le Pain Quotidien":{tags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",cuisine:"coffee_shop",name:"Le Pain Quotidien",takeaway:"yes"}},"amenity/cafe|Mado":{countryCodes:["tr"],tags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",cuisine:"coffee_shop",name:"Mado",takeaway:"yes"}},"amenity/cafe|McCafé":{tags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé",takeaway:"yes"}},"amenity/cafe|Michel's Patisserie":{countryCodes:["au","cn","id","nz"],tags:{amenity:"cafe",brand:"Michel's Patisserie","brand:wikidata":"Q6836235","brand:wikipedia":"en:Michel's Patisserie",cuisine:"coffee_shop",name:"Michel's Patisserie",takeaway:"yes"}},"amenity/cafe|Mikel":{countryCodes:["ae","au","cy","de","eg","gb","gr","sa","us"],tags:{amenity:"cafe",brand:"Mikel","brand:wikidata":"Q16952021","brand:wikipedia":"el:Mikel",cuisine:"coffee_shop",name:"Mikel",takeaway:"yes"}},"amenity/cafe|Muffin Break":{countryCodes:["au","gb","in","nz"],tags:{amenity:"cafe",brand:"Muffin Break","brand:wikidata":"Q16964876","brand:wikipedia":"en:Muffin Break",cuisine:"coffee_shop",name:"Muffin Break",takeaway:"yes"}},"amenity/cafe|Muzz Buzz":{countryCodes:["au","nz"],tags:{amenity:"cafe",brand:"Muzz Buzz","brand:wikidata":"Q6944483","brand:wikipedia":"en:Muzz Buzz",cuisine:"coffee_shop",name:"Muzz Buzz",takeaway:"yes"}},"amenity/cafe|Patisserie Valerie":{countryCodes:["gb"],tags:{amenity:"cafe",brand:"Patisserie Valerie","brand:wikidata":"Q22101966","brand:wikipedia":"en:Patisserie Valerie",cuisine:"coffee_shop",name:"Patisserie Valerie",takeaway:"yes"}},"amenity/cafe|Peet's Coffee":{countryCodes:["us"],matchNames:["peets","peets coffee & tea"],tags:{amenity:"cafe",brand:"Peet's Coffee","brand:wikidata":"Q1094101","brand:wikipedia":"en:Peet's Coffee",cuisine:"coffee_shop",name:"Peet's Coffee",takeaway:"yes"}},"amenity/cafe|Pie Face":{countryCodes:["au"],tags:{amenity:"cafe",brand:"Pie Face","brand:wikidata":"Q18166370","brand:wikipedia":"en:Pie Face",cuisine:"coffee_shop",name:"Pie Face",takeaway:"yes"}},"amenity/cafe|Prime":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Prime","brand:wikidata":"Q62122839",cuisine:"coffee_shop",name:"Prime",takeaway:"yes"}},"amenity/cafe|Pronto":{countryCodes:["jp"],matchNames:["プロント"],nomatch:["shop/convenience|Coop Pronto"],tags:{amenity:"cafe",brand:"Pronto","brand:wikidata":"Q11336224","brand:wikipedia":"ja:プロントコーポレーション",cuisine:"coffee_shop",name:"Pronto","name:ja":"プロント",takeaway:"yes"}},"amenity/cafe|Pumpkin":{countryCodes:["gb"],matchNames:["pumpkin cafe","pumpkin cafe shop"],tags:{amenity:"cafe",brand:"Pumpkin","brand:wikidata":"Q27825961","brand:wikipedia":"en:Pumpkin Café Shop",cuisine:"coffee_shop",name:"Pumpkin",takeaway:"yes"}},"amenity/cafe|Quickly":{tags:{amenity:"cafe",brand:"Quickly","brand:en":"Quickly","brand:wikidata":"Q3771463","brand:wikipedia":"en:Quickly","brand:zh":"快可立",cuisine:"bubble_tea",name:"Quickly","name:en":"Quickly","name:zh":"快可立",takeaway:"yes"}},"amenity/cafe|Second Cup":{tags:{amenity:"cafe",brand:"Second Cup","brand:wikidata":"Q862180","brand:wikipedia":"en:Second Cup",cuisine:"coffee_shop",name:"Second Cup",takeaway:"yes"}},"amenity/cafe|Segafredo":{tags:{amenity:"cafe",brand:"Segafredo","brand:wikidata":"Q21282762","brand:wikipedia":"it:Segafredo Zanetti",cuisine:"coffee_shop",name:"Segafredo",takeaway:"yes"}},"amenity/cafe|Sharetea":{countryCodes:["au","us"],tags:{amenity:"cafe",brand:"Sharetea","brand:wikidata":"Q64827032",cuisine:"bubble_tea",name:"Sharetea","name:en":"Sharetea","name:zh":"歇腳亭",takeaway:"yes"}},"amenity/cafe|Starbucks":{tags:{amenity:"cafe",brand:"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Starbucks",official_name:"Starbucks Coffee",takeaway:"yes"}},"amenity/cafe|The Coffee Bean & Tea Leaf":{tags:{amenity:"cafe",brand:"The Coffee Bean & Tea Leaf","brand:wikidata":"Q1141384","brand:wikipedia":"en:The Coffee Bean & Tea Leaf",cuisine:"coffee_shop",name:"The Coffee Bean & Tea Leaf",takeaway:"yes"}},"amenity/cafe|The Coffee Club":{tags:{amenity:"cafe",brand:"The Coffee Club","brand:wikidata":"Q7726599","brand:wikipedia":"en:The Coffee Club",cuisine:"coffee_shop",name:"The Coffee Club",takeaway:"yes"}},"amenity/cafe|The Coffee House~(Vietnam)":{countryCodes:["vn"],matchNames:["coffee house"],nomatch:["amenity/cafe|Coffee House~(Finland)"],tags:{amenity:"cafe",brand:"The Coffee House","brand:wikidata":"Q60775742","brand:wikipedia":"en:The Coffee House (coffeehouse chain)",cuisine:"coffee_shop;vietnamese",name:"The Coffee House","name:en":"The Coffee House",takeaway:"yes"}},"amenity/cafe|The Human Bean":{countryCodes:["us"],matchNames:["human bean"],tags:{amenity:"cafe",brand:"The Human Bean","brand:wikidata":"Q7740821","brand:wikipedia":"en:The Human Bean",cuisine:"coffee_shop",name:"The Human Bean",takeaway:"yes"}},"amenity/cafe|Tim Hortons":{tags:{amenity:"cafe",brand:"Tim Hortons","brand:wikidata":"Q175106","brand:wikipedia":"en:Tim Hortons",cuisine:"coffee_shop",name:"Tim Hortons",takeaway:"yes"}},"amenity/cafe|Timothy's":{countryCodes:["ca"],tags:{amenity:"cafe",brand:"Timothy's","brand:wikidata":"Q7807011","brand:wikipedia":"en:Timothy's World Coffee",cuisine:"coffee_shop",name:"Timothy's",takeaway:"yes"}},"amenity/cafe|Toast Box":{tags:{amenity:"cafe",brand:"Toast Box",cuisine:"coffee_shop",name:"Toast Box",takeaway:"yes"}},"amenity/cafe|Tostao’":{countryCodes:["co"],tags:{amenity:"cafe",brand:"Tostao’","brand:wikidata":"Q60632476",cuisine:"coffee_shop",name:"Tostao’","name:es":"Tostao’",official_name:"TOSTAO’ Café & Pan",takeaway:"yes"}},"amenity/cafe|Traveler's Coffee":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",cuisine:"coffee_shop",name:"Traveler's Coffee",takeaway:"yes"}},"amenity/cafe|Trung Nguyên Coffee":{countryCodes:["vn"],matchNames:["trung nguyen"],tags:{amenity:"cafe",brand:"Trung Nguyên","brand:wikidata":"Q3541154","brand:wikipedia":"vi:Trung Nguyên (công ty)",cuisine:"coffee_shop;vietnamese",name:"Trung Nguyên Coffee","name:en":"Trung Nguyen Coffee","name:vi":"Cà phê Trung Nguyên",takeaway:"yes"}},"amenity/cafe|Wayne's Coffee":{countryCodes:["fi","no","se"],tags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",cuisine:"coffee_shop",name:"Wayne's Coffee",takeaway:"yes"}},"amenity/cafe|Wild Bean Cafe":{tags:{amenity:"cafe",brand:"Wild Bean Cafe","brand:wikidata":"Q61804826",cuisine:"coffee_shop",name:"Wild Bean Cafe",takeaway:"yes"}},"amenity/cafe|Ya Kun Kaya Toast":{tags:{amenity:"cafe",brand:"Ya Kun Kaya Toast","brand:wikidata":"Q8046237","brand:wikipedia":"en:Ya Kun Kaya Toast",cuisine:"coffee_shop",name:"Ya Kun Kaya Toast",takeaway:"yes"}},"amenity/cafe|Zarraffa's Coffee":{countryCodes:["au"],tags:{amenity:"cafe",brand:"Zarraffa's Coffee ","brand:wikidata":"Q8066878","brand:wikipedia":"en:Zarraffa's Coffee",cuisine:"coffee_shop",name:"Zarraffa's Coffee",takeaway:"yes"}},"amenity/cafe|Їдальня":{tags:{amenity:"cafe",brand:"Їдальня",cuisine:"coffee_shop",name:"Їдальня",takeaway:"yes"}},"amenity/cafe|Берёзка":{tags:{amenity:"cafe",brand:"Берёзка",cuisine:"coffee_shop",name:"Берёзка",takeaway:"yes"}},"amenity/cafe|Виктория":{nomatch:["shop/hairdresser|Виктория","shop/supermarket|Виктория"],tags:{amenity:"cafe",brand:"Виктория",cuisine:"coffee_shop",name:"Виктория",takeaway:"yes"}},"amenity/cafe|Гурман":{tags:{amenity:"cafe",brand:"Гурман",cuisine:"coffee_shop",name:"Гурман",takeaway:"yes"}},"amenity/cafe|Даблби":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Даблби","brand:en":"Double B","brand:wikidata":"Q62501686",cuisine:"coffee_shop",name:"Даблби","name:en":"Double B",takeaway:"yes"}},"amenity/cafe|Лагуна":{countryCodes:["ru","ua"],tags:{amenity:"cafe",brand:"Лагуна",cuisine:"coffee_shop",name:"Лагуна",takeaway:"yes"}},"amenity/cafe|Лакомка":{tags:{amenity:"cafe",brand:"Лакомка",cuisine:"coffee_shop",name:"Лакомка",takeaway:"yes"}},"amenity/cafe|Оазис":{tags:{amenity:"cafe",brand:"Оазис","brand:en":"Oasis",cuisine:"coffee_shop",name:"Оазис","name:en":"Oasis",takeaway:"yes"}},"amenity/cafe|Парус":{tags:{amenity:"cafe",brand:"Парус",cuisine:"coffee_shop",name:"Парус",takeaway:"yes"}},"amenity/cafe|Сказка":{tags:{amenity:"cafe",brand:"Сказка",cuisine:"coffee_shop",name:"Сказка",takeaway:"yes"}},"amenity/cafe|Смак":{countryCodes:["kz","ru","ua","uz"],matchTags:["shop/convenience"],tags:{amenity:"cafe",brand:"Смак","brand:en":"Taste",cuisine:"coffee_shop",name:"Смак","name:en":"Taste",takeaway:"yes"}},"amenity/cafe|Старбакс":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Старбакс","name:en":"Starbucks",takeaway:"yes"}},"amenity/cafe|Трактир":{tags:{amenity:"cafe",brand:"Трактир",cuisine:"coffee_shop",name:"Трактир",takeaway:"yes"}},"amenity/cafe|Транзит":{countryCodes:["kz","ru","ua"],tags:{amenity:"cafe",brand:"Транзит",cuisine:"coffee_shop",name:"Транзит",takeaway:"yes"}},"amenity/cafe|Уют":{tags:{amenity:"cafe",brand:"Уют",cuisine:"coffee_shop",name:"Уют",takeaway:"yes"}},"amenity/cafe|Фортуна":{tags:{amenity:"cafe",brand:"Фортуна",cuisine:"coffee_shop",name:"Фортуна",takeaway:"yes"}},"amenity/cafe|Хуторок":{tags:{amenity:"cafe",brand:"Хуторок",cuisine:"coffee_shop",name:"Хуторок",takeaway:"yes"}},"amenity/cafe|Шоколадница":{countryCodes:["ru"],matchNames:["шоколад"],tags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",cuisine:"coffee_shop",name:"Шоколадница","name:en":"Shokoladnitsa",takeaway:"yes"}},"amenity/cafe|Штолле":{countryCodes:["by","ru","ua"],tags:{amenity:"cafe",brand:"Штолле","brand:en":"Stolle","brand:wikidata":"Q62502236",cuisine:"coffee_shop",name:"Штолле","name:en":"Stolle",takeaway:"yes"}},"amenity/cafe|ארומה":{countryCodes:["il"],tags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:he":"ארומה","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"ארומה","name:en":"Aroma Espresso Bar","name:he":"ארומה",takeaway:"yes"}},"amenity/cafe|לנדוור":{countryCodes:["il"],matchNames:["קפה לדנוור"],matchTags:["amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה לנדוור","brand:en":"Landwer Coffee","brand:he":"קפה לנדוור","brand:wikidata":"Q6485288","brand:wikipedia":"he:קפה לנדוור",cuisine:"coffee_shop",name:"לנדוור","name:en":"Landwer","name:he":"לנדוור",takeaway:"yes"}},"amenity/cafe|סי קפה":{countryCodes:["il"],matchNames:["si cafe","si espresso"],tags:{alt_name:"סי אספרסו","alt_name:en":"Si Espresso","alt_name:he":"סי אספרסו",amenity:"cafe",brand:"סי קפה","brand:en":"Si Cafe","brand:he":"סי קפה","brand:wikidata":"Q64606227",cuisine:"coffee_shop",name:"סי קפה","name:en":"Si Cafe","name:he":"סי קפה",takeaway:"yes"}},"amenity/cafe|קפה ג'ו":{countryCodes:["il"],matchNames:["ג'ו קפה"],tags:{alt_name:"קפה Joe",amenity:"cafe",brand:"קפה ג'ו","brand:en":"Cafe Joe","brand:he":"קפה ג'ו","brand:wikidata":"Q6774425","brand:wikipedia":"he:קפה ג'ו",cuisine:"coffee_shop",name:"קפה ג'ו","name:en":"Cafe Joe","name:he":"קפה ג'ו",takeaway:"yes"}},"amenity/cafe|קפה גרג":{countryCodes:["il"],matchTags:["amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה גרג","brand:en":"Greg Cafe","brand:he":"קפה גרג","brand:wikidata":"Q43295499","brand:wikipedia":"he:קפה גרג",cuisine:"coffee_shop",name:"קפה גרג","name:en":"Greg Cafe","name:he":"קפה גרג",takeaway:"yes"}},"amenity/cafe|קפה נמרוד":{countryCodes:["il"],matchTags:["amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה נמרוד","brand:en":"Cafe Nimrod","brand:he":"קפה נמרוד","brand:wikidata":"Q64606192",cuisine:"coffee_shop",name:"קפה נמרוד","name:en":"Cafe Nimrod","name:he":"קפה נמרוד",takeaway:"yes"}},"amenity/cafe|קפה קפה":{countryCodes:["il"],matchTags:["amenity/fast_food","amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה קפה","brand:en":"Cafe Cafe","brand:he":"קפה קפה","brand:wikidata":"Q5017233","brand:wikipedia":"he:קפה קפה",cuisine:"coffee_shop",name:"קפה קפה","name:en":"Cafe Cafe","name:he":"קפה קפה",takeaway:"yes"}},"amenity/cafe|רולדין":{countryCodes:["il"],matchTags:["amenity/restaurant","shop/bakery","shop/pastry"],tags:{amenity:"cafe",brand:"רולדין","brand:en":"Roladin","brand:he":"רולדין","brand:wikidata":"Q18390972","brand:wikipedia":"he:רולדין",cuisine:"coffee_shop",name:"רולדין","name:en":"Roladin","name:he":"רולדין",takeaway:"yes"}},"amenity/cafe|คาเฟ่ อเมซอน":{countryCodes:["th"],tags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:th":"คาเฟ่ อเมซอน","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon","name:th":"คาเฟ่ อเมซอน",takeaway:"yes"}},"amenity/cafe|エクセルシオール カフェ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:ja":"エクセルシオール カフェ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ","name:ja":"エクセルシオール カフェ",takeaway:"yes"}},"amenity/cafe|カフェ・ド・クリエ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:ja":"カフェ・ド・クリエ","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",cuisine:"coffee_shop",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE","name:ja":"カフェ・ド・クリエ",takeaway:"yes"}},"amenity/cafe|カフェ・ベローチェ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:ja":"カフェ・ベローチェ","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE","name:ja":"カフェ・ベローチェ",takeaway:"yes"}},"amenity/cafe|コメダ珈琲店":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:ja":"コメダ珈琲店","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop","name:ja":"コメダ珈琲店",takeaway:"yes"}},"amenity/cafe|サンマルクカフェ":{countryCodes:["jp"],tags:{"alt_name:en":"Saint Marc Café",amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:ja":"サンマルクカフェ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ","name:ja":"サンマルクカフェ",takeaway:"yes"}},"amenity/cafe|スターバックス":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:ja":"スターバックス","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks","name:ja":"スターバックス",official_name:"スターバックスコーヒー","official_name:en":"Starbucks Coffee","official_name:ja":"スターバックスコーヒー",takeaway:"yes"}},"amenity/cafe|タリーズコーヒー":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:ja":"タリーズコーヒー","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",cuisine:"coffee_shop",name:"タリーズコーヒー","name:en":"Tully's Coffee","name:ja":"タリーズコーヒー",takeaway:"yes"}},"amenity/cafe|ドトールコーヒーショップ":{countryCodes:["jp"],matchNames:["ドトールコーヒー"],tags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:ja":"ドトールコーヒーショップ","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop","name:ja":"ドトールコーヒーショップ",takeaway:"yes"}},"amenity/cafe|ルノアール":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"ルノアール","brand:en":"Renoir","brand:ja":"ルノアール","brand:wikidata":"Q11649991","brand:wikipedia":"ja:銀座ルノアール",cuisine:"coffee_shop",name:"ルノアール","name:en":"Renoir","name:ja":"ルノアール",official_name:"喫茶室ルノアール","official_name:en":"Ginza Renoir","official_name:ja":"喫茶室ルノアール",takeaway:"yes"}},"amenity/cafe|快可立":{countryCodes:["tw"],tags:{amenity:"cafe",brand:"快可立","brand:en":"Quickly","brand:wikidata":"Q3771463","brand:wikipedia":"zh:快可立","brand:zh":"快可立",cuisine:"bubble_tea",name:"快可立","name:en":"Quickly","name:zh":"快可立",takeaway:"yes"}},"amenity/cafe|日出茶太":{countryCodes:["tw"],tags:{amenity:"cafe",brand:"日出茶太","brand:en":"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"zh:日出茶太","brand:zh":"日出茶太",cuisine:"bubble_tea",name:"日出茶太","name:en":"Chatime","name:zh":"日出茶太",takeaway:"yes"}},"amenity/cafe|星巴克":{countryCodes:["cn","tw"],tags:{amenity:"cafe",brand:"星巴克","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"zh:星巴克","brand:zh":"星巴克",cuisine:"coffee_shop",name:"星巴克","name:en":"Starbucks","name:zh":"星巴克",takeaway:"yes"}},"amenity/cafe|珈琲館":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"珈琲館","brand:en":"Kohikan","brand:ja":"珈琲館","brand:wikidata":"Q11573290","brand:wikipedia":"ja:珈琲館",cuisine:"coffee_shop",name:"珈琲館","name:en":"Kohikan","name:ja":"珈琲館",takeaway:"yes"}},"amenity/cafe|貢茶 Gong Cha":{countryCodes:["hk"],tags:{amenity:"cafe",brand:"貢茶 Gong Cha","brand:en":"Gong Cha","brand:wikidata":"Q5581670","brand:wikipedia":"zh:貢茶 (連鎖店)","brand:zh":"貢茶",cuisine:"bubble_tea",name:"貢茶 Gong Cha","name:en":"Gong Cha","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|貢茶~(Japan)":{countryCodes:["ja"],tags:{amenity:"cafe",brand:"貢茶","brand:ja":"貢茶","brand:wikidata":"Q5581670","brand:wikipedia":"ja:貢茶","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"貢茶","name:ja":"貢茶","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|貢茶~(Taiwan)":{countryCodes:["tw"],tags:{amenity:"cafe",brand:"貢茶","brand:wikidata":"Q5581670","brand:wikipedia":"zh:貢茶 (連鎖店)",cuisine:"bubble_tea",int_name:"Gong Cha",name:"貢茶","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|贡茶~(China)":{countryCodes:["cn"],tags:{amenity:"cafe",brand:"贡茶","brand:wikidata":"Q5581670","brand:wikipedia":"zh:贡茶 (连锁店)","brand:zh-Hans":"贡茶","brand:zh-Hant":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"贡茶","name:zh-Hans":"贡茶","name:zh-Hant":"貢茶",takeaway:"yes"}},"amenity/cafe|공차":{countryCodes:["kr"],tags:{amenity:"cafe",brand:"공차","brand:ko":"공차","brand:wikidata":"Q5581670","brand:wikipedia":"ko:공차","brand:zh":"貢茶",cuisine:"bubble_tea",int_name:"Gong Cha",name:"공차","name:ko":"공차","name:zh":"貢茶",takeaway:"yes"}},"amenity/cafe|스타벅스":{countryCodes:["kr"],tags:{amenity:"cafe",brand:"스타벅스","brand:en":"Starbucks","brand:ko":"스타벅스","brand:wikidata":"Q37158","brand:wikipedia":"ko:스타벅스",cuisine:"coffee_shop",name:"스타벅스","name:en":"Starbucks","name:ko":"스타벅스",takeaway:"yes"}},"amenity/car_rental|Alamo":{tags:{amenity:"car_rental",brand:"Alamo","brand:wikidata":"Q1429287","brand:wikipedia":"en:Alamo Rent a Car",name:"Alamo"}},"amenity/car_rental|Avis":{matchNames:["avis car rental"],tags:{amenity:"car_rental",brand:"Avis","brand:wikidata":"Q791136","brand:wikipedia":"en:Avis Car Rental",name:"Avis"}},"amenity/car_rental|Buchbinder":{tags:{amenity:"car_rental",brand:"Buchbinder",name:"Buchbinder"}},"amenity/car_rental|Budget":{matchNames:["budget car rental"],tags:{amenity:"car_rental",brand:"Budget","brand:wikidata":"Q1001437","brand:wikipedia":"en:Budget Rent a Car",name:"Budget",official_name:"Budget Rent a Car"}},"amenity/car_rental|Dollar":{countryCodes:["us"],nomatch:["amenity/bank|Dollar Bank","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{amenity:"car_rental",brand:"Dollar","brand:wikidata":"Q1235661","brand:wikipedia":"en:Dollar Rent A Car",name:"Dollar",official_name:"Dollar Rent A Car"}},"amenity/car_rental|Enterprise":{matchNames:["enterprise car rental"],tags:{amenity:"car_rental",brand:"Enterprise","brand:wikidata":"Q17085454","brand:wikipedia":"en:Enterprise Rent-A-Car",name:"Enterprise",official_name:"Enterprise Rent-A-Car"}},"amenity/car_rental|Europcar":{tags:{amenity:"car_rental",brand:"Europcar","brand:wikidata":"Q1376256","brand:wikipedia":"en:Europcar",name:"Europcar"}},"amenity/car_rental|Hertz":{matchNames:["hertz car rental"],tags:{amenity:"car_rental",brand:"Hertz","brand:wikidata":"Q1543874","brand:wikipedia":"en:The Hertz Corporation",name:"Hertz"}},"amenity/car_rental|Localiza":{tags:{amenity:"car_rental",brand:"Localiza","brand:wikidata":"Q10319490","brand:wikipedia":"en:Localiza",name:"Localiza"}},"amenity/car_rental|National":{countryCodes:["ca","gb","us"],nomatch:["amenity/bank|National Bank"],tags:{amenity:"car_rental",brand:"National","brand:wikidata":"Q1424142","brand:wikipedia":"en:National Car Rental",name:"National",official_name:"National Car Rental"}},"amenity/car_rental|Sixt":{tags:{amenity:"car_rental",brand:"Sixt","brand:wikidata":"Q705664","brand:wikipedia":"en:Sixt",name:"Sixt"}},"amenity/car_rental|Thrifty":{matchNames:["thrifty car rental"],tags:{amenity:"car_rental",brand:"Thrifty","brand:wikidata":"Q2429546","brand:wikipedia":"en:Thrifty Car Rental",name:"Thrifty"}},"amenity/car_rental|オリックスレンタカー":{countryCodes:["jp"],tags:{amenity:"car_rental",brand:"オリックスレンタカー","brand:en":"ORIX Car Rental","brand:ja":"オリックスレンタカー","brand:wikidata":"Q11123021","brand:wikipedia":"ja:オリックスレンタカー",name:"オリックスレンタカー","name:en":"ORIX Car Rental","name:ja":"オリックスレンタカー"}},"amenity/car_rental|トヨタレンタカー":{countryCodes:["jp"],matchNames:["トヨタレンタリース"],tags:{amenity:"car_rental",brand:"トヨタレンタカー","brand:en":"Toyota Rental Car","brand:ja":"トヨタレンタカー","brand:wikidata":"Q11321580","brand:wikipedia":"ja:トヨタレンタリース",name:"トヨタレンタカー","name:en":"Toyota Rental Car","name:ja":"トヨタレンタカー"}},"amenity/car_rental|ニッポンレンタカー":{countryCodes:["jp"],tags:{amenity:"car_rental",brand:"ニッポンレンタカー","brand:en":"Nippon Car Rental","brand:ja":"ニッポンレンタカー","brand:wikidata":"Q11086533","brand:wikipedia":"ja:ニッポンレンタカー",name:"ニッポンレンタカー","name:en":"Nippon Car Rental","name:ja":"ニッポンレンタカー"}},"amenity/car_rental|日産レンタカー":{countryCodes:["jp"],tags:{amenity:"car_rental",brand:"日産レンタカー","brand:en":"Nissan Car Rental","brand:ja":"日産レンタカー","brand:wikidata":"Q11086838","brand:wikipedia":"ja:日産レンタカー",name:"日産レンタカー","name:en":"Nissan Car Rental","name:ja":"日産レンタカー"}},"amenity/car_sharing|Bluely":{countryCodes:["fr"],matchNames:["station bluely"],tags:{amenity:"car_sharing",brand:"Bluely","brand:wikidata":"Q16039715","brand:wikipedia":"fr:Bluely",name:"Bluely"}},"amenity/car_sharing|Enterprise Car Club":{countryCodes:["gb"],matchNames:["city car club"],tags:{amenity:"car_sharing",brand:"Enterprise Car Club","brand:wikidata":"Q5123055","brand:wikipedia":"en:Enterprise Car Club",name:"Enterprise Car Club"}},"amenity/car_sharing|Greenwheels":{countryCodes:["de","nl"],tags:{amenity:"car_sharing",brand:"Greenwheels","brand:wikidata":"Q316782","brand:wikipedia":"en:Greenwheels",name:"Greenwheels"}},"amenity/car_sharing|Zipcar":{tags:{amenity:"car_sharing",brand:"Zipcar","brand:wikidata":"Q1069924","brand:wikipedia":"en:Zipcar",name:"Zipcar"}},"amenity/car_sharing|stadtmobil":{countryCodes:["de"],matchNames:["stadtmobil carsharing-station"],tags:{amenity:"car_sharing",brand:"stadtmobil","brand:wikidata":"Q2327629","brand:wikipedia":"en:Stadtmobil",name:"stadtmobil"}},"amenity/car_sharing|teilAuto":{countryCodes:["de"],tags:{amenity:"car_sharing",brand:"teilAuto","brand:wikidata":"Q2400658","brand:wikipedia":"de:TeilAuto",name:"teilAuto"}},"amenity/car_sharing|タイムズカーシェア":{countryCodes:["jp"],tags:{amenity:"car_sharing",brand:"タイムズカーシェア","brand:en":"Times Car Share","brand:ja":"タイムズカーシェア","brand:wikidata":"Q17987881","brand:wikipedia":"ja:タイムズカーシェア",name:"タイムズカーシェア","name:en":"Times Car Share","name:ja":"タイムズカーシェア"}},"amenity/casino|Luckia":{tags:{amenity:"casino",brand:"Luckia","brand:wikidata":"Q42304308",name:"Luckia"}},"amenity/charging_station|Blink":{countryCodes:["us"],tags:{amenity:"charging_station",brand:"Blink","brand:wikidata":"Q62065645",name:"Blink"}},"amenity/charging_station|ChargePoint":{tags:{amenity:"charging_station",brand:"ChargePoint","brand:wikidata":"Q5176149","brand:wikipedia":"en:ChargePoint",name:"ChargePoint"}},"amenity/charging_station|Chargy":{countryCodes:["lu"],tags:{amenity:"charging_station",brand:"Chargy","brand:wikidata":"Q62702950","brand:wikipedia":"lb:Chargy",name:"Chargy"}},"amenity/charging_station|Circuit électrique":{countryCodes:["ca"],tags:{amenity:"charging_station",brand:"Circuit électrique","brand:en":"Electric Circuit","brand:fr":"Circuit électrique","brand:wikidata":"Q24934590","brand:wikipedia":"fr:Le Circuit électrique",name:"Circuit électrique","name:en":"Electric Circuit","name:fr":"Circuit électrique"}},"amenity/charging_station|E-WALD":{countryCodes:["de"],matchNames:["e-wald ladestation"],tags:{amenity:"charging_station",brand:"E-WALD","brand:wikidata":"Q61804335",name:"E-WALD"}},"amenity/charging_station|Enel":{countryCodes:["it"],matchNames:["enel - stazione di ricarica"],tags:{amenity:"charging_station",brand:"Enel","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel"}},"amenity/charging_station|Enel X":{tags:{amenity:"charging_station",brand:"Enel X",name:"Enel X"}},"amenity/charging_station|Enel x Metbus":{tags:{amenity:"charging_station",brand:"Enel x Metbus",name:"Enel x Metbus"}},"amenity/charging_station|FLO":{countryCodes:["ca","us"],nomatch:["shop/shoes|FLO"],tags:{amenity:"charging_station",brand:"FLO","brand:wikidata":"Q64971203",name:"FLO"}},"amenity/charging_station|InCharge":{matchNames:["vattenfall"],tags:{amenity:"charging_station",brand:"InCharge","brand:wikidata":"Q71041027",name:"InCharge"}},"amenity/charging_station|Innogy":{matchNames:["rwe"],tags:{amenity:"charging_station",brand:"Innogy","brand:wikidata":"Q2124721","brand:wikipedia":"de:Innogy",name:"Innogy"}},"amenity/charging_station|Source London":{countryCodes:["gb"],tags:{amenity:"charging_station",brand:"Source London","brand:wikidata":"Q7565133","brand:wikipedia":"en:Source London",name:"Source London"}},"amenity/charging_station|Tesla Supercharger":{tags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"}},"amenity/charging_station|bike-energy":{countryCodes:["at","ch","de","fr","it","lu"],matchNames:["bike-energy ladestation"],tags:{amenity:"charging_station",brand:"bike-energy","brand:wikidata":"Q67770877",name:"bike-energy"}},"amenity/charging_station|eVgo":{countryCodes:["us"],tags:{amenity:"charging_station",brand:"eVgo","brand:wikidata":"Q61803820",name:"eVgo"}},"amenity/childcare|Kids 'R' Kids":{countryCodes:["us"],matchNames:["kids are kids"],tags:{after_school:"yes",amenity:"childcare",brand:"Kids 'R' Kids","brand:wikidata":"Q65560342",grades:"PK",name:"Kids 'R' Kids",nursery:"yes",official_name:"Kids 'R' Kids Learning Academies",preschool:"yes"}},"amenity/childcare|YMCA Child Care":{countryCodes:["us"],matchNames:["ymca","ymca child care center"],tags:{amenity:"childcare",brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",name:"YMCA Child Care"}},"amenity/cinema|109シネマズ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"109シネマズ","brand:en":"109 Cinemas","brand:ja":"109シネマズ","brand:wikidata":"Q10854269","brand:wikipedia":"ja:109シネマズ",name:"109シネマズ","name:en":"109 Cinemas","name:ja":"109シネマズ"}},"amenity/cinema|AMC":{countryCodes:["us"],matchNames:["amc cinema","amc cinemas","amc theater","amc theaters","amc theatre","amc theatres"],tags:{amenity:"cinema",brand:"AMC","brand:wikidata":"Q294721","brand:wikipedia":"en:AMC Theatres",name:"AMC"}},"amenity/cinema|B&B Theatres":{countryCodes:["us"],matchNames:["b&b theaters"],tags:{amenity:"cinema",brand:"B&B Theatres","brand:wikidata":"Q4833576","brand:wikipedia":"en:B&B Theatres",name:"B&B Theatres",short_name:"B&B"}},"amenity/cinema|CGR":{countryCodes:["fr"],tags:{amenity:"cinema",brand:"CGR","brand:wikidata":"Q2931406","brand:wikipedia":"fr:Circuit Georges-Raymond",name:"CGR Cinémas"}},"amenity/cinema|Caribbean Cinemas":{countryCodes:["ag","do","fr","gy","kn","lc","nl","pa","tt","us"],tags:{amenity:"cinema",brand:"Caribbean Cinemas","brand:wikidata":"Q5039364","brand:wikipedia":"en:Caribbean Cinemas",name:"Caribbean Cinemas"}},"amenity/cinema|Century Theatres":{countryCodes:["us"],matchNames:["century theater","century theaters","century theatre"],tags:{amenity:"cinema",brand:"Century Theatres","brand:wikidata":"Q2946307","brand:wikipedia":"en:Century Theatres",name:"Century Theatres",short_name:"Century"}},"amenity/cinema|CineStar":{countryCodes:["de"],tags:{amenity:"cinema",brand:"CineStar","brand:wikidata":"Q321889","brand:wikipedia":"de:Cinestar",name:"CineStar"}},"amenity/cinema|Cinema City":{countryCodes:["cz","hu","pl","ro"],tags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"}},"amenity/cinema|Cinema NOS":{countryCodes:["pt"],tags:{amenity:"cinema",brand:"Cinemas NOS","brand:wikidata":"Q8063259","brand:wikipedia":"en:NOS Audiovisuais",name:"Cinema NOS"}},"amenity/cinema|Cinemark":{tags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"}},"amenity/cinema|Cinemaxx~(Europe)":{countryCodes:["de","dk"],nomatch:["amenity/cinema|Cinemaxx~(Indonesia)"],tags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q881860","brand:wikipedia":"de:Cinemaxx",name:"Cinemaxx"}},"amenity/cinema|Cinemaxx~(Indonesia)":{countryCodes:["id"],nomatch:["amenity/cinema|Cinemaxx~(Europe)"],tags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q19942740","brand:wikipedia":"id:Cinemaxx",name:"Cinemaxx"}},"amenity/cinema|Cinemex":{countryCodes:["mx"],tags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"}},"amenity/cinema|Cineplanet":{countryCodes:["cl","pe"],tags:{amenity:"cinema",brand:"Cineplanet","brand:wikidata":"Q5769680","brand:wikipedia":"es:Cineplanet",name:"Cineplanet"}},"amenity/cinema|Cineplex":{countryCodes:["ca"],matchNames:["cineplex cinema","cineplex cinemas","cineplex entertainment","cineplex odeon","cineplex theatre","cineplex theatres"],tags:{amenity:"cinema",brand:"Cineplex","brand:wikidata":"Q2972807","brand:wikipedia":"en:Cineplex Entertainment",name:"Cineplex"}},"amenity/cinema|Cineplexx":{countryCodes:["at","si"],tags:{amenity:"cinema",brand:"Cineplexx","brand:wikidata":"Q873340","brand:wikipedia":"en:Cineplexx Cinemas",name:"Cineplexx"}},"amenity/cinema|Cinepolis":{tags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"}},"amenity/cinema|Cineworld":{countryCodes:["gb"],tags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"}},"amenity/cinema|Event":{countryCodes:["au","nz"],matchNames:["event cinema"],tags:{amenity:"cinema",brand:"Event","brand:wikidata":"Q5416698","brand:wikipedia":"en:Event Cinemas",name:"Event",official_name:"Event Cinemas"}},"amenity/cinema|Harkins Theatres":{countryCodes:["us"],matchNames:["harkins theater","harkins theaters","harkins theatre"],tags:{amenity:"cinema",brand:"Harkins Theatres","brand:wikidata":"Q5658199","brand:wikipedia":"en:Harkins Theatres",name:"Harkins Theatres",short_name:"Harkins"}},"amenity/cinema|Hoyts":{countryCodes:["au","nz"],tags:{amenity:"cinema",brand:"Hoyts","brand:wikidata":"Q5922976","brand:wikipedia":"en:Hoyts",name:"Hoyts"}},"amenity/cinema|Landmark Theatres":{countryCodes:["us"],matchNames:["landmark theater","landmark theaters","landmark theatre"],tags:{amenity:"cinema",brand:"Landmark Theatres","brand:wikidata":"Q6484805","brand:wikipedia":"en:Landmark Theatres",name:"Landmark Theatres",short_name:"Landmark"}},"amenity/cinema|MOVIX":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"MOVIX","brand:wikidata":"Q11532184","brand:wikipedia":"ja:松竹マルチプレックスシアターズ",name:"MOVIX",official_name:"松竹マルチプレックスシアターズ","official_name:en":"Shochiku Multiplex Theatres"}},"amenity/cinema|Marcus Cinema":{countryCodes:["us"],matchNames:["marcus cinemas","marcus theater","marcus theaters","marcus theatre","marcus theatres"],tags:{amenity:"cinema",brand:"Marcus Cinema","brand:wikidata":"Q64083352",name:"Marcus Cinema",short_name:"Marcus"}},"amenity/cinema|Movie Tavern":{countryCodes:["us"],tags:{amenity:"cinema",brand:"Movie Tavern","brand:wikidata":"Q64083534",name:"Movie Tavern"}},"amenity/cinema|Multikino":{countryCodes:["lt","lv","pl"],tags:{amenity:"cinema",brand:"Multikino","brand:wikidata":"Q1144802","brand:wikipedia":"pl:Multikino",name:"Multikino"}},"amenity/cinema|Odeon":{countryCodes:["gb","gr","ie","it"],matchNames:["odeon cinema"],tags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"}},"amenity/cinema|Pathé Gaumont":{countryCodes:["be","ch","fr","nl"],tags:{amenity:"cinema",brand:"Pathé Gaumont","brand:wikidata":"Q3060526","brand:wikipedia":"fr:Les cinémas Gaumont Pathé",name:"Pathé Gaumont"}},"amenity/cinema|Regal Cinemas":{countryCodes:["us"],matchNames:["regal cinema"],tags:{amenity:"cinema",brand:"Regal Cinemas","brand:wikidata":"Q835638","brand:wikipedia":"en:Regal Cinemas",name:"Regal Cinemas",short_name:"Regal"}},"amenity/cinema|Showcase Cinemas":{countryCodes:["ar","gb","us"],matchNames:["showcase cinema"],tags:{amenity:"cinema",brand:"Showcase Cinemas","brand:wikidata":"Q7503170","brand:wikipedia":"en:Showcase Cinemas",name:"Showcase Cinemas",short_name:"Showcase"}},"amenity/cinema|TOHOシネマズ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"TOHOシネマズ","brand:en":"TOHO CINEMAS","brand:ja":"TOHOシネマズ","brand:wikidata":"Q11235261","brand:wikipedia":"ja:TOHOシネマズ",name:"TOHOシネマズ","name:en":"Toho Cinemas","name:ja":"TOHOシネマズ",short_name:"TOHO"}},"amenity/cinema|The Space Cinema":{countryCodes:["it"],matchNames:["the space"],tags:{amenity:"cinema",brand:"The Space Cinema","brand:wikidata":"Q3989406","brand:wikipedia":"it:The Space Cinema",name:"The Space Cinema"}},"amenity/cinema|UGC":{countryCodes:["fr"],tags:{amenity:"cinema",brand:"UGC","brand:wikidata":"Q1643241","brand:wikipedia":"fr:Union générale cinématographique",name:"UGC"}},"amenity/cinema|Vue~(IrelandAndUK)":{countryCodes:["gb","ie"],matchNames:["vue cinema","vue cinemas"],nomatch:["amenity/cinema|Vue~(Netherlands)"],tags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2535134","brand:wikipedia":"en:Vue Cinemas",name:"Vue"}},"amenity/cinema|Vue~(Netherlands)":{countryCodes:["nl"],matchNames:["vue cinema"],nomatch:["amenity/cinema|Vue~(IrelandAndUK)"],tags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2421690","brand:wikipedia":"nl:Vue (bioscoopketen)",name:"Vue"}},"amenity/cinema|イオンシネマ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"イオンシネマ","brand:en":"AEON Cinema","brand:ja":"イオンシネマ","brand:wikidata":"Q17192792","brand:wikipedia":"ja:イオンエンターテイメント",name:"イオンシネマ","name:en":"AEON Cinema","name:ja":"イオンシネマ"}},"amenity/cinema|ユナイテッド・シネマ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"ユナイテッド・シネマ","brand:en":"United Cinemas","brand:ja":"ユナイテッド・シネマ","brand:wikidata":"Q11345629","brand:wikipedia":"ja:ユナイテッド・シネマ",name:"ユナイテッド・シネマ","name:en":"United Cinemas","name:ja":"ユナイテッド・シネマ"}},"amenity/clinic|Aid Post":{tags:{amenity:"clinic",brand:"Aid Post",name:"Aid Post"}},"amenity/clinic|Asepeyo":{countryCodes:["es"],nomatch:["office/insurance|Asepeyo"],tags:{amenity:"clinic",brand:"Asepeyo","brand:wikidata":"Q11906879","brand:wikipedia":"es:Asepeyo",healthcare:"clinic",name:"Asepeyo"}},"amenity/clinic|CityMD":{countryCodes:["us"],tags:{amenity:"clinic",brand:"CityMD","brand:wikidata":"Q22295471","brand:wikipedia":"en:CityMD",healthcare:"clinic",name:"CityMD"}},"amenity/clinic|DaVita Dialysis":{countryCodes:["us"],matchNames:["davita","davita dialysis center","davita kidney care"],tags:{amenity:"clinic",brand:"DaVita Dialysis","brand:wikidata":"Q5207184",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"DaVita Dialysis"}},"amenity/clinic|Dialysis Clinic":{countryCodes:["us"],matchNames:["dialysis clinic inc"],tags:{amenity:"clinic",brand:"Dialysis Clinic","brand:wikidata":"Q5270633","brand:wikipedia":"en:Dialysis Clinic, Inc.",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Dialysis Clinic",short_name:"DCI"}},"amenity/clinic|Fresenius Kidney Care":{countryCodes:["us"],tags:{amenity:"clinic",brand:"Fresenius Kidney Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Kidney Care"}},"amenity/clinic|Fresenius Medical Care":{countryCodes:["us"],tags:{amenity:"clinic",brand:"Fresenius Medical Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Medical Care"}},"amenity/clinic|Planned Parenthood":{countryCodes:["us"],matchTags:["amenity/doctors","amenity/social_facility"],tags:{amenity:"clinic",brand:"Planned Parenthood","brand:wikidata":"Q2553262","brand:wikipedia":"en:Planned Parenthood",healthcare:"counselling","healthcare:counselling":"antenatal;sexual",name:"Planned Parenthood"}},"amenity/clinic|Posyandu":{tags:{amenity:"clinic",brand:"Posyandu",name:"Posyandu"}},"amenity/clinic|Puskesmas":{tags:{amenity:"clinic",brand:"Puskesmas",name:"Puskesmas"}},"amenity/clinic|Puskesmas Pembantu":{tags:{amenity:"clinic",brand:"Puskesmas Pembantu",name:"Puskesmas Pembantu"}},"amenity/clinic|Satellite Healthcare":{countryCodes:["us"],matchNames:["satellite","satellite dialysis"],tags:{amenity:"clinic",brand:"Satellite Healthcare","brand:wikidata":"Q50039787",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Satellite Healthcare"}},"amenity/clinic|Terveystalo":{countryCodes:["fi"],tags:{amenity:"clinic",brand:"Terveystalo","brand:wikidata":"Q11897034","brand:wikipedia":"fi:Terveystalo",healthcare:"clinic",name:"Terveystalo"}},"amenity/clinic|VA Clinic":{countryCodes:["us"],matchNames:["department of veterans affairs clinic","veterans administration","veterans administration clinic","veterans affairs","veterans affairs clinic"],tags:{amenity:"clinic",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"clinic","healthcare:for":"veterans",name:"VA Clinic",short_name:"VA"}},"amenity/clinic|ZoomCare":{countryCodes:["us"],tags:{amenity:"clinic",brand:"ZoomCare","brand:wikidata":"Q64120374","brand:wikipedia":"en:ZoomCare",healthcare:"clinic",name:"ZoomCare",urgent_care:"yes"}},"amenity/dentist|Aspen Dental":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{amenity:"dentist",brand:"Aspen Dental","brand:wikidata":"Q4807808","brand:wikipedia":"en:Aspen Dental",healthcare:"dentist",name:"Aspen Dental"}},"amenity/dentist|Comfort Dental":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{amenity:"dentist",brand:"Comfort Dental","brand:wikidata":"Q22079521","brand:wikipedia":"en:Comfort Dental",healthcare:"dentist",name:"Comfort Dental"}},"amenity/dentist|Dentix":{tags:{amenity:"dentist",brand:"Dentix","brand:wikidata":"Q30505320","brand:wikipedia":"es:Dentix",name:"Dentix"}},"amenity/dentist|Folktandvården":{countryCodes:["se"],tags:{amenity:"dentist",brand:"Folktandvården","brand:wikidata":"Q10497476","brand:wikipedia":"sv:Folktandvården",name:"Folktandvården"}},"amenity/dentist|Gentle Dental":{countryCodes:["us"],tags:{amenity:"dentist",brand:"Gentle Dental",name:"Gentle Dental"}},"amenity/dentist|Kool Smiles":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{amenity:"dentist",brand:"Kool Smiles","brand:wikidata":"Q6430587","brand:wikipedia":"en:Kool Smiles",healthcare:"dentist",name:"Kool Smiles"}},"amenity/dentist|Vitaldent":{countryCodes:["es","it"],tags:{amenity:"dentist",brand:"Vitaldent","brand:wikidata":"Q5860599","brand:wikipedia":"es:Vitaldent",name:"Vitaldent"}},"amenity/dentist|Western Dental":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{alt_name:"Western Dental & Orthodontics",amenity:"dentist",brand:"Western Dental","brand:wikidata":"Q64211989","brand:wikipedia":"en:Western Dental",healthcare:"dentist",name:"Western Dental"}},"amenity/doctors|MinuteClinic":{countryCodes:["us"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"MinuteClinic","brand:wikidata":"Q6871141","brand:wikipedia":"en:MinuteClinic",healthcare:"doctor","healthcare:speciality":"community",name:"MinuteClinic"}},"amenity/doctors|RediClinic":{countryCodes:["us"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"RediClinic","brand:wikidata":"Q64138408",healthcare:"doctor","healthcare:speciality":"community",name:"RediClinic"}},"amenity/doctors|The Little Clinic":{countryCodes:["us"],matchNames:["little clinic"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"The Little Clinic","brand:wikidata":"Q64138262",healthcare:"doctor","healthcare:speciality":"community",name:"The Little Clinic"}},"amenity/doctors|Walgreens Healthcare Clinic":{countryCodes:["us"],matchNames:["healthcare clinic","takecare","takecare clinic","walgreens"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"Walgreens","brand:wikidata":"Q1591889",healthcare:"doctor","healthcare:speciality":"community",name:"Walgreens Healthcare Clinic"}},"amenity/fast_food|241 Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"241 Pizza","brand:wikidata":"Q4631768","brand:wikipedia":"en:241 Pizza",cuisine:"pizza",name:"241 Pizza",takeaway:"yes"}},"amenity/fast_food|A&W~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fast_food|A&W~(USA)"],tags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W",takeaway:"yes"}},"amenity/fast_food|A&W~(USA)":{countryCodes:["us"],nomatch:["amenity/fast_food|A&W~(Canada)"],tags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W",takeaway:"yes"}},"amenity/fast_food|Andok's":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Andok's","brand:wikidata":"Q62267166",cuisine:"chicken",name:"Andok's",takeaway:"yes"}},"amenity/fast_food|Angel's Burger":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Angel's Burger","brand:wikidata":"Q62267228",cuisine:"burger",name:"Angel's Burger",takeaway:"yes"}},"amenity/fast_food|Arby's":{countryCodes:["ca","tr","us"],tags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's",takeaway:"yes"}},"amenity/fast_food|Arctic Circle":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Arctic Circle","brand:wikidata":"Q4787501","brand:wikipedia":"en:Arctic Circle Restaurants",cuisine:"burger",name:"Arctic Circle",takeaway:"yes"}},"amenity/fast_food|Asia-Imbiss":{tags:{amenity:"fast_food",brand:"Asia-Imbiss",name:"Asia-Imbiss",takeaway:"yes"}},"amenity/fast_food|Au Bon Pain":{countryCodes:["in","th","us"],tags:{amenity:"fast_food",brand:"Au Bon Pain","brand:wikidata":"Q4818942","brand:wikipedia":"en:Au Bon Pain",cuisine:"sandwich",name:"Au Bon Pain",takeaway:"yes"}},"amenity/fast_food|Auntie Anne's":{countryCodes:["us"],matchNames:["auntie annes pretzels"],tags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's",takeaway:"yes"}},"amenity/fast_food|Back Yard Burgers":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Back Yard Burgers","brand:wikidata":"Q2878376","brand:wikipedia":"en:Back Yard Burgers",cuisine:"burger",name:"Back Yard Burgers",takeaway:"yes"}},"amenity/fast_food|Baja Fresh":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Baja Fresh","brand:wikidata":"Q2880019","brand:wikipedia":"en:Baja Fresh",cuisine:"mexican",name:"Baja Fresh",takeaway:"yes"}},"amenity/fast_food|Barburrito":{countryCodes:["gb"],tags:{amenity:"fast_food",brand:"Barburrito","brand:wikidata":"Q16983668","brand:wikipedia":"en:Barburrito",cuisine:"mexican",name:"Barburrito",takeaway:"yes"}},"amenity/fast_food|Bembos":{countryCodes:["pe"],tags:{amenity:"fast_food",brand:"Bembos","brand:wikidata":"Q466971","brand:wikipedia":"en:Bembos",cuisine:"burger",name:"Bembos",takeaway:"yes"}},"amenity/fast_food|Big Fernand":{countryCodes:["ae","fr","lu"],tags:{amenity:"fast_food",brand:"Big Fernand","brand:wikidata":"Q19521346","brand:wikipedia":"fr:Big Fernand",cuisine:"burger",name:"Big Fernand",takeaway:"yes"}},"amenity/fast_food|Biscuitville":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Biscuitville","brand:wikidata":"Q4917274","brand:wikipedia":"en:Biscuitville",cuisine:"american;breakfast",name:"Biscuitville",takeaway:"yes"}},"amenity/fast_food|Blackjack Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Blackjack Pizza","brand:wikidata":"Q4923061","brand:wikipedia":"en:Blackjack Pizza",cuisine:"pizza",name:"Blackjack Pizza",takeaway:"yes"}},"amenity/fast_food|Blimpie":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Blimpie","brand:wikidata":"Q4926479","brand:wikipedia":"en:Blimpie",cuisine:"sandwich",name:"Blimpie",takeaway:"yes"}},"amenity/fast_food|Bob's":{countryCodes:["ao","br","cl","pt"],tags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's",takeaway:"yes"}},"amenity/fast_food|Bojangles'":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'",official_name:"Bojangles' Famous Chicken 'n Biscuits",takeaway:"yes"}},"amenity/fast_food|Booster Juice":{countryCodes:["ca"],matchTags:["shop/beverages"],tags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",cuisine:"juice",name:"Booster Juice",takeaway:"yes"}},"amenity/fast_food|Boston Market":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",cuisine:"american;chicken",name:"Boston Market",takeaway:"yes"}},"amenity/fast_food|Braum's":{countryCodes:["us"],matchTags:["shop/dairy"],tags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",cuisine:"ice_cream",name:"Braum's",shop:"dairy",takeaway:"yes"}},"amenity/fast_food|Bruegger's Bagels":{countryCodes:["us"],matchNames:["breuger's","breugger's","bruger's","brugger's"],tags:{amenity:"fast_food",brand:"Bruegger's Bagels","brand:wikidata":"Q4978656","brand:wikipedia":"en:Bruegger's",cuisine:"bagel",name:"Bruegger's Bagels",short_name:"Bruegger's",takeaway:"yes"}},"amenity/fast_food|Burger Fuel":{countryCodes:["ae","iq","nz","sa","us"],tags:{amenity:"fast_food",brand:"Burger Fuel","brand:wikidata":"Q4998537","brand:wikipedia":"en:Burger Fuel",cuisine:"burger",name:"Burger Fuel",takeaway:"yes"}},"amenity/fast_food|Burger King":{matchNames:["burguer king"],tags:{amenity:"fast_food",brand:"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Burger King",takeaway:"yes"}},"amenity/fast_food|Burger Machine":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Burger Machine","brand:wikidata":"Q4998549","brand:wikipedia":"en:Burger Machine",cuisine:"burger",name:"Burger Machine",takeaway:"yes"}},"amenity/fast_food|BurgerFi":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"BurgerFi","brand:wikidata":"Q39045496","brand:wikipedia":"en:BurgerFi",cuisine:"burger",name:"BurgerFi",takeaway:"yes"}},"amenity/fast_food|Burgerim":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"Burgerim","brand:en":"Burgerim","brand:he":"בורגרים","brand:wikidata":"Q64760354",cuisine:"burger",name:"Burgerim","name:en":"Burgerim","name:he":"בורגרים",takeaway:"yes"}},"amenity/fast_food|Burgers Bar":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"Burgers Bar","brand:en":"Burgers Bar","brand:he":"בורגרס בר","brand:wikidata":"Q64760337",cuisine:"burger","diet:kosher":"yes",name:"Burgers Bar","name:en":"Burgers Bar","name:he":"בורגרס בר",takeaway:"yes"}},"amenity/fast_food|Burgerville":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Burgerville","brand:wikidata":"Q4998570","brand:wikipedia":"en:Burgerville",cuisine:"burger",name:"Burgerville",takeaway:"yes"}},"amenity/fast_food|California Fish Grill":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"California Fish Grill","brand:wikidata":"Q55606435","brand:wikipedia":"en:California Fish Grill",cuisine:"seafood",name:"California Fish Grill",takeaway:"yes"}},"amenity/fast_food|Captain D's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Captain D's","brand:wikidata":"Q5036616","brand:wikipedia":"en:Captain D's",cuisine:"seafood",name:"Captain D's",takeaway:"yes"}},"amenity/fast_food|Carl's Jr.":{tags:{amenity:"fast_food",brand:"Carl's Jr.","brand:wikidata":"Q1043486","brand:wikipedia":"en:Carl's Jr.",cuisine:"burger",name:"Carl's Jr.",takeaway:"yes"}},"amenity/fast_food|Charleys Philly Steaks":{countryCodes:["us"],matchNames:["charleys"],tags:{amenity:"fast_food",brand:"Charleys Philly Steaks","brand:wikidata":"Q1066777","brand:wikipedia":"en:Charleys Philly Steaks",cuisine:"sandwich",name:"Charleys Philly Steaks",takeaway:"yes"}},"amenity/fast_food|Checkers":{nomatch:["shop/supermarket|Checkers"],tags:{amenity:"fast_food",brand:"Checkers","brand:wikidata":"Q63919315",cuisine:"burger",name:"Checkers",takeaway:"yes"}},"amenity/fast_food|Chester's":{countryCodes:["us"],matchNames:["chesters chicken"],tags:{amenity:"fast_food",brand:"Chester's","brand:wikidata":"Q5093401","brand:wikipedia":"en:Chester's International",cuisine:"chicken",name:"Chester's",takeaway:"yes"}},"amenity/fast_food|Chick-fil-A":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chick-fil-A","brand:wikidata":"Q491516","brand:wikipedia":"en:Chick-fil-A",cuisine:"chicken",name:"Chick-fil-A",takeaway:"yes"}},"amenity/fast_food|Chicken Express":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chicken Express","brand:wikidata":"Q5096235","brand:wikipedia":"en:Chicken Express",cuisine:"chicken",name:"Chicken Express",takeaway:"yes"}},"amenity/fast_food|Chicken Treat":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chicken Treat","brand:wikidata":"Q5096274","brand:wikipedia":"en:Chicken Treat",cuisine:"chicken",name:"Chicken Treat",takeaway:"yes"}},"amenity/fast_food|China Wok":{tags:{amenity:"fast_food",brand:"China Wok","brand:wikidata":"Q5766542","brand:wikipedia":"es:China Wok",cuisine:"chinese",name:"China Wok",takeaway:"yes"}},"amenity/fast_food|Chipotle":{tags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle",official_name:"Chipotle Mexican Grill",takeaway:"yes"}},"amenity/fast_food|Chopt":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chopt","brand:wikidata":"Q17509305","brand:wikipedia":"en:Chopt",cuisine:"salad",name:"Chopt",takeaway:"yes"}},"amenity/fast_food|Chowking":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking",takeaway:"yes"}},"amenity/fast_food|Church's Chicken":{tags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken",takeaway:"yes"}},"amenity/fast_food|Cinnabon":{matchTags:["shop/confectionery"],tags:{amenity:"fast_food",brand:"Cinnabon","brand:wikidata":"Q1092539","brand:wikipedia":"en:Cinnabon",cuisine:"dessert",name:"Cinnabon",takeaway:"yes"}},"amenity/fast_food|CoCo壱番屋":{countryCodes:["cn","jp"],tags:{amenity:"fast_food",brand:"CoCo壱番屋","brand:en":"CoCo Ichibanya","brand:ja":"CoCo壱番屋","brand:wikidata":"Q5986105","brand:wikipedia":"en:Ichibanya",cuisine:"japanese",name:"CoCo壱番屋","name:en":"CoCo Ichibanya","name:ja":"CoCo壱番屋",takeaway:"yes"}},"amenity/fast_food|Cook Out":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Cook Out","brand:wikidata":"Q5166992","brand:wikipedia":"en:Cook Out (restaurant)",cuisine:"american",name:"Cook Out",takeaway:"yes"}},"amenity/fast_food|Così":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Così","brand:wikidata":"Q5175243","brand:wikipedia":"en:Così (restaurant)",cuisine:"sandwich",name:"Così",takeaway:"yes"}},"amenity/fast_food|Crust":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Crust",cuisine:"pizza",name:"Crust",official_name:"Crust Gourmet Pizza Bar",takeaway:"yes"}},"amenity/fast_food|Cultures":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Cultures","brand:wikidata":"Q64876898",cuisine:"sandwich",name:"Cultures",takeaway:"yes"}},"amenity/fast_food|Culver's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",cuisine:"burger",name:"Culver's",takeaway:"yes"}},"amenity/fast_food|DQ Grill & Chill":{countryCodes:["ca","us"],matchNames:["dairy queen chill & grill"],nomatch:["amenity/fast_food|Dairy Queen"],tags:{amenity:"fast_food",brand:"DQ Grill & Chill","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"DQ Grill & Chill",takeaway:"yes"}},"amenity/fast_food|Dairy Queen":{matchNames:["dq"],nomatch:["amenity/fast_food|DQ Grill & Chill"],tags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"Dairy Queen",takeaway:"yes"}},"amenity/fast_food|Daylight Donuts":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts",takeaway:"yes"}},"amenity/fast_food|Debonairs Pizza":{countryCodes:["ae","bw","ke","ls","mu","mw","mz","na","ng","sd","ss","sz","za","zm"],matchNames:["debonairs"],tags:{amenity:"fast_food",brand:"Debonairs Pizza","brand:wikidata":"Q65079407","brand:wikipedia":"en:Debonairs Pizza",cuisine:"pizza",name:"Debonairs Pizza",takeaway:"yes"}},"amenity/fast_food|Del Taco":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco",takeaway:"yes"}},"amenity/fast_food|Dig Inn":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Dig Inn","brand:wikidata":"Q28226241","brand:wikipedia":"en:Dig Inn",cuisine:"regional",name:"Dig Inn",takeaway:"yes"}},"amenity/fast_food|Domino's":{matchNames:["dominos pizza"],tags:{amenity:"fast_food",brand:"Domino's","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's",takeaway:"yes"}},"amenity/fast_food|Donut King":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Donut King","brand:wikidata":"Q5296921","brand:wikipedia":"en:Donut King",cuisine:"donut;coffee_shop",name:"Donut King",takeaway:"yes"}},"amenity/fast_food|Dunkin' Donuts":{matchNames:["dunkin doughnuts"],tags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut;coffee_shop",name:"Dunkin' Donuts",takeaway:"yes"}},"amenity/fast_food|EAT.":{countryCodes:["gb"],tags:{amenity:"fast_food",brand:"EAT.","brand:wikidata":"Q5331219","brand:wikipedia":"en:Eat (restaurant)",cuisine:"sandwich",name:"EAT.",takeaway:"yes"}},"amenity/fast_food|Einstein Bros. Bagels":{countryCodes:["us"],matchNames:["einstein bros","einstein brothers"],tags:{alt_name:"Einstein Brothers Bagels",amenity:"fast_food",brand:"Einstein Bros. Bagels","brand:wikidata":"Q5349788","brand:wikipedia":"en:Einstein Bros. Bagels",cuisine:"bagel",name:"Einstein Bros. Bagels",takeaway:"yes"}},"amenity/fast_food|El Pollo Loco":{countryCodes:["mx","us"],tags:{amenity:"fast_food",brand:"El Pollo Loco","brand:wikidata":"Q2353849","brand:wikipedia":"en:El Pollo Loco",cuisine:"mexican",name:"El Pollo Loco",takeaway:"yes"}},"amenity/fast_food|Elevation Burger":{countryCodes:["bh","kw","qa","us"],tags:{amenity:"fast_food",brand:"Elevation Burger","brand:wikidata":"Q15291092","brand:wikipedia":"en:Elevation Burger",cuisine:"burger",name:"Elevation Burger",takeaway:"yes"}},"amenity/fast_food|Es Teler 77":{tags:{amenity:"fast_food",brand:"Es Teler 77","brand:wikidata":"Q5396630",cuisine:"indonesian",name:"Es Teler 77",takeaway:"yes"}},"amenity/fast_food|Everest":{countryCodes:["gr"],tags:{amenity:"fast_food",brand:"Everest","brand:wikidata":"Q62273299",cuisine:"burger",name:"Everest",takeaway:"yes"}},"amenity/fast_food|Extreme Pita":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita",takeaway:"yes"}},"amenity/fast_food|Extreme Pizza":{tags:{amenity:"fast_food",brand:"Extreme Pizza","brand:wikidata":"Q5422364","brand:wikipedia":"en:Extreme Pizza",cuisine:"pizza",name:"Extreme Pizza",takeaway:"yes"}},"amenity/fast_food|Fazoli's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's",takeaway:"yes"}},"amenity/fast_food|Figaro's Pizza":{tags:{amenity:"fast_food",brand:"Figaro's Pizza","brand:wikidata":"Q48802600","brand:wikipedia":"en:Figaro's Pizza",cuisine:"pizza",name:"Figaro's Pizza",takeaway:"yes"}},"amenity/fast_food|Firehouse Subs":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs",takeaway:"yes"}},"amenity/fast_food|Five Guys":{tags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys",official_name:"Five Guys Burgers and Fries",takeaway:"yes"}},"amenity/fast_food|Freddy's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"ice_cream;burger",name:"Freddy's",official_name:"Freddys Frozen Custard & Steakburgers",takeaway:"yes"}},"amenity/fast_food|Freebirds":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds",takeaway:"yes"}},"amenity/fast_food|Freshslice Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Freshslice Pizza","brand:wikidata":"Q5503082","brand:wikipedia":"en:Freshslice Pizza",cuisine:"pizza",name:"Freshslice Pizza",takeaway:"yes"}},"amenity/fast_food|Gabriel Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Gabriel Pizza","brand:wikidata":"Q5515791","brand:wikipedia":"en:Gabriel Pizza",cuisine:"pizza",name:"Gabriel Pizza",takeaway:"yes"}},"amenity/fast_food|Gino's Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Gino's Pizza","brand:wikidata":"Q5563205","brand:wikipedia":"en:Gino's Pizza and Spaghetti",cuisine:"pizza",name:"Gino's Pizza",takeaway:"yes"}},"amenity/fast_food|Gold Star Chili":{countryCodes:["us"],tags:{alt_name:"Gold Star",amenity:"fast_food",brand:"Gold Star Chili","brand:wikidata":"Q16994254","brand:wikipedia":"en:Gold Star Chili",cuisine:"chili",name:"Gold Star Chili",takeaway:"yes"}},"amenity/fast_food|Golden Chick":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Golden Chick","brand:wikidata":"Q3772930","brand:wikipedia":"en:Golden Chick",cuisine:"chicken",name:"Golden Chick",takeaway:"yes"}},"amenity/fast_food|Golden Krust Caribbean Bakery & Grill":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Golden Krust Caribbean Bakery & Grill","brand:wikidata":"Q5579615","brand:wikipedia":"en:Golden Krust Caribbean Bakery & Grill",cuisine:"caribbean",name:"Golden Krust",takeaway:"yes"}},"amenity/fast_food|Good Times":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Good Times","brand:wikidata":"Q1143589","brand:wikipedia":"en:Good Times Burgers & Frozen Custard",cuisine:"burger;ice_cream",name:"Good Times",official_name:"Good Times Burgers & Frozen Custard",takeaway:"yes"}},"amenity/fast_food|Great American Cookies":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Great American Cookies","brand:wikidata":"Q5598629","brand:wikipedia":"en:Great American Cookies",cuisine:"cookies",name:"Great American Cookies",takeaway:"yes"}},"amenity/fast_food|Greenwich":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich",takeaway:"yes"}},"amenity/fast_food|Greggs":{countryCodes:["gb"],tags:{amenity:"fast_food",brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",cuisine:"sandwich;bakery",name:"Greggs",takeaway:"yes"}},"amenity/fast_food|Grill'd":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Grill'd","brand:wikidata":"Q18165852","brand:wikipedia":"en:Grill'd",cuisine:"burger",name:"Grill'd",takeaway:"yes"}},"amenity/fast_food|Habib's":{countryCodes:["br","mx"],tags:{amenity:"fast_food",brand:"Habib's","brand:wikidata":"Q2504930","brand:wikipedia":"en:Habib's",cuisine:"middle_eastern",name:"Habib's",takeaway:"yes"}},"amenity/fast_food|Hallo Pizza":{countryCodes:["de"],tags:{amenity:"fast_food",brand:"Hallo Pizza","brand:wikidata":"Q1571798","brand:wikipedia":"de:Hallo Pizza",cuisine:"pizza",name:"Hallo Pizza",takeaway:"yes"}},"amenity/fast_food|Hardee's":{tags:{amenity:"fast_food",brand:"Hardee's","brand:wikidata":"Q1585088","brand:wikipedia":"en:Hardee's",cuisine:"burger",name:"Hardee's",takeaway:"yes"}},"amenity/fast_food|Harry Ramsden's":{countryCodes:["gb","ie"],tags:{amenity:"fast_food",brand:"Harry Ramsden's","brand:wikidata":"Q5671849","brand:wikipedia":"en:Harry Ramsden's",cuisine:"fish_and_chips",name:"Harry Ramsden's",takeaway:"yes"}},"amenity/fast_food|Harvey's":{countryCodes:["ca"],nomatch:["shop/furniture|Harveys"],tags:{amenity:"fast_food",brand:"Harvey's","brand:wikidata":"Q1466184","brand:wikipedia":"en:Harvey's",cuisine:"burger",name:"Harvey's",takeaway:"yes"}},"amenity/fast_food|Herfy":{countryCodes:["ae","bd","bh","kw","sa"],tags:{amenity:"fast_food",brand:"Herfy","brand:ar":"هرفي","brand:en":"Herfy","brand:wikidata":"Q5738371","brand:wikipedia":"en:Herfy",cuisine:"burger",name:"Herfy","name:ar":"هرفي","name:en":"Herfy",takeaway:"yes"}},"amenity/fast_food|Hero Certified Burgers":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Hero Certified Burgers","brand:wikidata":"Q5742641","brand:wikipedia":"en:Hero Certified Burgers",cuisine:"burger",name:"Hero Certified Burgers",takeaway:"yes"}},"amenity/fast_food|Hesburger":{tags:{amenity:"fast_food",brand:"Hesburger","brand:wikidata":"Q1276832","brand:wikipedia":"en:Hesburger",cuisine:"burger",name:"Hesburger",takeaway:"yes"}},"amenity/fast_food|Honey Baked Ham":{countryCodes:["us"],matchNames:["honey baked ham company"],matchTags:["shop/butcher","shop/deli"],tags:{alt_name:"HoneyBaked Ham",amenity:"fast_food",brand:"Honey Baked Ham","brand:wikidata":"Q5893363","brand:wikipedia":"en:The Honey Baked Ham Company",cuisine:"american",name:"Honey Baked Ham",official_name:"The Honey Baked Ham Company",takeaway:"yes"}},"amenity/fast_food|Hot Dog on a Stick":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Hot Dog on a Stick","brand:wikidata":"Q5909922","brand:wikipedia":"en:Hot Dog on a Stick",cuisine:"hot_dog",name:"Hot Dog on a Stick",takeaway:"yes"}},"amenity/fast_food|Hot Head Burritos":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Hot Head Burritos","brand:wikidata":"Q5910008","brand:wikipedia":"en:Hot Head Burritos",cuisine:"mexican",name:"Hot Head Burritos",short_name:"Hot Head",takeaway:"yes"}},"amenity/fast_food|HuHot":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"HuHot","brand:wikidata":"Q5924606","brand:wikipedia":"en:HuHot Mongolian Grill",cuisine:"bbq",name:"HuHot",official_name:"HuHot Mongolian Grill",takeaway:"yes"}},"amenity/fast_food|Hungry Howie's":{countryCodes:["us"],matchNames:["hungry howies pizza"],tags:{amenity:"fast_food",brand:"Hungry Howie's","brand:wikidata":"Q16985303","brand:wikipedia":"en:Hungry Howie's Pizza",cuisine:"pizza",name:"Hungry Howie's",takeaway:"yes"}},"amenity/fast_food|Hungry Jacks":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Hungry Jacks","brand:wikidata":"Q3036373","brand:wikipedia":"en:Hungry Jack's",cuisine:"burger",name:"Hungry Jacks",takeaway:"yes"}},"amenity/fast_food|IKEA Restaurant":{tags:{amenity:"fast_food",brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",cuisine:"swedish",name:"IKEA Restaurant",takeaway:"yes"}},"amenity/fast_food|Imo's Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Imo's Pizza","brand:wikidata":"Q6005623","brand:wikipedia":"en:Imo's Pizza",cuisine:"pizza",name:"Imo's Pizza",takeaway:"yes"}},"amenity/fast_food|In-N-Out Burger":{countryCodes:["us"],tags:{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",takeaway:"yes"}},"amenity/fast_food|Jack in the Box":{countryCodes:["us"],tags:{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",takeaway:"yes"}},"amenity/fast_food|Jamba Juice":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Jamba Juice","brand:wikidata":"Q3088784","brand:wikipedia":"en:Jamba Juice",cuisine:"juice",name:"Jamba Juice",takeaway:"yes"}},"amenity/fast_food|Jersey Mike's Subs":{countryCodes:["us"],tags:{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",short_name:"Jersey Mike's",takeaway:"yes"}},"amenity/fast_food|Jimmy John's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Jimmy John's","brand:wikidata":"Q1689380","brand:wikipedia":"en:Jimmy John's",cuisine:"sandwich",name:"Jimmy John's",official_name:"Jimmy John's Gourmet Sandwiches",takeaway:"yes"}},"amenity/fast_food|Jimmy the Greek":{countryCodes:["ae","ca"],tags:{amenity:"fast_food",brand:"Jimmy the Greek","brand:wikidata":"Q17077817","brand:wikipedia":"en:Jimmy the Greek (restaurant)",cuisine:"greek",name:"Jimmy the Greek",takeaway:"yes"}},"amenity/fast_food|Jollibee":{tags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee",takeaway:"yes"}},"amenity/fast_food|Just Salad":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Just Salad","brand:wikidata":"Q23091823","brand:wikipedia":"en:Just Salad",cuisine:"salad",name:"Just Salad",takeaway:"yes"}},"amenity/fast_food|KFC":{tags:{alt_name:"Kentucky Fried Chicken",amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC",takeaway:"yes"}},"amenity/fast_food|Kernels Popcorn":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Kernels Popcorn","brand:wikidata":"Q64876684",cuisine:"popcorn",name:"Kernels Popcorn",takeaway:"yes"}},"amenity/fast_food|Kochlöffel":{countryCodes:["de","tr"],tags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel",takeaway:"yes"}},"amenity/fast_food|Kotipizza":{countryCodes:["fi"],tags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza",takeaway:"yes"}},"amenity/fast_food|Krispy Kreme":{matchNames:["krispy kreme doughnuts"],tags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme",takeaway:"yes"}},"amenity/fast_food|Krispy Krunchy Chicken":{countryCodes:["mx","us"],matchNames:["crispy crunchy chicken"],tags:{amenity:"fast_food",brand:"Krispy Krunchy Chicken","brand:wikidata":"Q65087447","brand:wikipedia":"en:Krispy Krunchy Chicken",cuisine:"chicken",name:"Krispy Krunchy Chicken",takeaway:"yes"}},"amenity/fast_food|Krystal":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal",takeaway:"yes"}},"amenity/fast_food|Kudu":{countryCodes:["bh","jo","sa"],tags:{amenity:"fast_food",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu",takeaway:"yes"}},"amenity/fast_food|L&L Drive-Inn~(Hawaii)":{countryCodes:["us"],matchNames:["l&l","l&l drive-in"],tags:{amenity:"fast_food",brand:"L&L Drive-Inn","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Drive-Inn",takeaway:"yes"}},"amenity/fast_food|L&L Hawaiian Barbecue":{countryCodes:["us"],matchNames:["l&l","l&l hawaiian bbq"],tags:{amenity:"fast_food",brand:"L&L Hawaiian Barbecue","brand:wikidata":"Q6455441","brand:wikipedia":"en:L&L Hawaiian Barbecue",cuisine:"hawaiian",name:"L&L Hawaiian Barbecue",takeaway:"yes"}},"amenity/fast_food|LEON":{countryCodes:["ch","gb","ie","nl","us"],tags:{amenity:"fast_food",brand:"LEON","brand:wikidata":"Q6524851","brand:wikipedia":"en:Leon Restaurants",name:"LEON",takeaway:"yes"}},"amenity/fast_food|La Belle Province":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"La Belle Province","brand:wikidata":"Q3206579","brand:wikipedia":"fr:La Belle Province (restaurant)",cuisine:"burger;sandwich",name:"La Belle Province",takeaway:"yes"}},"amenity/fast_food|La Salsa":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"La Salsa","brand:wikidata":"Q48835190","brand:wikipedia":"en:La Salsa",cuisine:"tex-mex",name:"La Salsa",takeaway:"yes"}},"amenity/fast_food|Lee's Famous Recipe Chicken":{countryCodes:["ca","us"],matchNames:["lee's"],tags:{amenity:"fast_food",brand:"Lee's Famous Recipe Chicken","brand:wikidata":"Q6512810","brand:wikipedia":"en:Lee's Famous Recipe Chicken",cuisine:"chicken",name:"Lee's Famous Recipe Chicken",takeaway:"yes"}},"amenity/fast_food|Lee's Sandwiches":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Lee's Sandwiches","brand:wikidata":"Q6512823","brand:wikipedia":"en:Lee's Sandwiches",cuisine:"vietnamese;sandwich",name:"Lee's Sandwiches",takeaway:"yes"}},"amenity/fast_food|Little Caesars":{matchNames:["little caesars pizza","little ceasars","little ceasars pizza"],tags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars",takeaway:"yes"}},"amenity/fast_food|Long John Silver's":{tags:{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",takeaway:"yes"}},"amenity/fast_food|Lotteria":{tags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria",takeaway:"yes"}},"amenity/fast_food|MOD Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza",takeaway:"yes"}},"amenity/fast_food|Manchu Wok":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Manchu Wok","brand:wikidata":"Q6747622","brand:wikipedia":"en:Manchu Wok",cuisine:"chinese",name:"Manchu Wok",takeaway:"yes"}},"amenity/fast_food|Mang Inasal":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal",takeaway:"yes"}},"amenity/fast_food|Manhattan Bagel":{countryCodes:["us"],matchNames:["manhattan bagels"],tags:{amenity:"fast_food",brand:"Manhattan Bagel","brand:wikidata":"Q64517333",cuisine:"bagel",name:"Manhattan Bagel",takeaway:"yes"}},"amenity/fast_food|Mary Brown's":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Mary Brown's","brand:wikidata":"Q6779125","brand:wikipedia":"en:Mary Brown's",cuisine:"chicken",name:"Mary Brown's",takeaway:"yes"}},"amenity/fast_food|Max":{countryCodes:["se"],tags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max",takeaway:"yes"}},"amenity/fast_food|McDonald's":{tags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's",takeaway:"yes"}},"amenity/fast_food|Meson Sandwiches":{countryCodes:["us"],matchNames:["el meson"],tags:{alt_name:"El Meson Sandwiches",amenity:"fast_food",brand:"Meson Sandwiches","brand:wikidata":"Q5351585","brand:wikipedia":"en:El Meson Sandwiches",cuisine:"sandwich",name:"Meson Sandwiches",short_name:"Meson",takeaway:"yes"}},"amenity/fast_food|Mighty Taco":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Mighty Taco","brand:wikidata":"Q6844210","brand:wikipedia":"en:Mighty Taco",cuisine:"mexican",name:"Mighty Taco",takeaway:"yes"}},"amenity/fast_food|Minute Burger":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Minute Burger","brand:wikidata":"Q62273503",cuisine:"burger",name:"Minute Burger",takeaway:"yes"}},"amenity/fast_food|Moe's Southwest Grill":{countryCodes:["us"],tags:{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",short_name:"Moe's",takeaway:"yes"}},"amenity/fast_food|Morley's":{countryCodes:["gb"],tags:{amenity:"fast_food",brand:"Morley's","brand:wikidata":"Q21008528","brand:wikipedia":"en:Morley's",cuisine:"chicken",name:"Morley's",takeaway:"yes"}},"amenity/fast_food|Mr. Sub":{tags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub",takeaway:"yes"}},"amenity/fast_food|Mucho Burrito":{countryCodes:["ca","gb","us"],tags:{amenity:"fast_food",brand:"Mucho Burrito","brand:wikidata":"Q65148332",cuisine:"mexican",name:"Mucho Burrito",takeaway:"yes"}},"amenity/fast_food|Nathan's":{countryCodes:["us"],matchNames:["nathans famous"],tags:{amenity:"fast_food",brand:"Nathan's","brand:wikidata":"Q1319505","brand:wikipedia":"en:Nathan's Famous",cuisine:"hot_dog",name:"Nathan's",takeaway:"yes"}},"amenity/fast_food|Nestlé Toll House Café":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Nestlé Toll House Café","brand:wikidata":"Q6997922","brand:wikipedia":"en:Nestlé Toll House Café",cuisine:"dessert",name:"Nestlé Toll House Café",takeaway:"yes"}},"amenity/fast_food|New York Fries":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"New York Fries","brand:wikidata":"Q7013558","brand:wikipedia":"en:New York Fries",cuisine:"fries",name:"New York Fries",takeaway:"yes"}},"amenity/fast_food|New York Pizza":{countryCodes:["nl"],tags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza",takeaway:"yes"}},"amenity/fast_food|Noah's Bagels":{countryCodes:["us"],matchNames:["noahs ny bagels"],tags:{amenity:"fast_food",brand:"Noah's Bagels","brand:wikidata":"Q64517373",cuisine:"bagel",name:"Noah's Bagels",official_name:"Noah's New York Bagels",takeaway:"yes"}},"amenity/fast_food|Noodle Box":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Noodle Box","brand:wikidata":"Q7049671","brand:wikipedia":"en:Noodle Box",cuisine:"noodle",name:"Noodle Box",takeaway:"yes"}},"amenity/fast_food|Nordsee":{countryCodes:["at","ch","de"],tags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee",takeaway:"yes"}},"amenity/fast_food|Num Pang":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Num Pang","brand:wikidata":"Q62079702","brand:wikipedia":"en:Num Pang",cuisine:"cambodian;sandwich",name:"Num Pang",takeaway:"yes"}},"amenity/fast_food|O'Tacos":{countryCodes:["be","fr"],tags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos",takeaway:"yes"}},"amenity/fast_food|Oporto":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Oporto","brand:wikidata":"Q4412342","brand:wikipedia":"en:Oporto (restaurant)",cuisine:"burger;chicken",name:"Oporto",takeaway:"yes"}},"amenity/fast_food|Orange Julius":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Orange Julius","brand:wikidata":"Q3355059","brand:wikipedia":"en:Orange Julius",cuisine:"juice",name:"Orange Julius",takeaway:"yes"}},"amenity/fast_food|P. Terry's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"P. Terry's","brand:wikidata":"Q19903521","brand:wikipedia":"en:P. Terry's",cuisine:"burger",name:"P. Terry's",official_name:"P. Terry's Burger Stand",takeaway:"yes"}},"amenity/fast_food|Pal's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's",official_name:"Pal's Sudden Service",takeaway:"yes"}},"amenity/fast_food|Panago":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago",takeaway:"yes"}},"amenity/fast_food|Panda Express":{matchNames:["panda"],tags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express",takeaway:"yes"}},"amenity/fast_food|Panera Bread":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich;bakery",name:"Panera Bread",short_name:"Panera",takeaway:"yes"}},"amenity/fast_food|Panos":{countryCodes:["ae","be","cz","nl","pl","sk","tw"],tags:{amenity:"fast_food",brand:"Panos","brand:wikidata":"Q3384496","brand:wikipedia":"nl:Panos",cuisine:"sandwich",name:"Panos",takeaway:"yes"}},"amenity/fast_food|Pans & Company":{countryCodes:["es","it","pt"],tags:{amenity:"fast_food",brand:"Pans & Company","brand:wikidata":"Q11697586","brand:wikipedia":"es:Pans & Company",cuisine:"sandwich",name:"Pans & Company",takeaway:"yes"}},"amenity/fast_food|Papa John's":{matchNames:["papa john","papa john pizza","papa johns pizza"],tags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's",takeaway:"yes"}},"amenity/fast_food|Papa Murphy's":{countryCodes:["ca","us"],matchNames:["papa murphy","papa murphy pizza","papa murphys pizza"],tags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's",official_name:"Papa Murphy's Take 'N' Bake Pizza",takeaway:"only"}},"amenity/fast_food|Penn Station":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Penn Station","brand:wikidata":"Q7163311","brand:wikipedia":"en:Penn Station (restaurant)",cuisine:"sandwich",name:"Penn Station",takeaway:"yes"}},"amenity/fast_food|Philly Pretzel Factory":{countryCodes:["us"],matchNames:["philadelphia pretzel factory","philadelphia soft pretzel factory","philly soft pretzel factory"],tags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory",takeaway:"yes"}},"amenity/fast_food|Pinulito":{countryCodes:["gt"],tags:{amenity:"fast_food",brand:"Pinulito","brand:wikidata":"Q62273613",cuisine:"chicken",name:"Pinulito",takeaway:"yes"}},"amenity/fast_food|Pita Pit":{tags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit",takeaway:"yes"}},"amenity/fast_food|Pizza 73":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Pizza 73","brand:wikidata":"Q7199950","brand:wikipedia":"en:Pizza 73",cuisine:"pizza",name:"Pizza 73",takeaway:"yes"}},"amenity/fast_food|Pizza Capers":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Pizza Capers",cuisine:"pizza",name:"Pizza Capers",takeaway:"yes"}},"amenity/fast_food|Pizza Hut Delivery":{tags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery",takeaway:"yes"}},"amenity/fast_food|Pizza Hut Express":{nomatch:["amenity/restaurant|Pizza Hut"],tags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Express",takeaway:"yes"}},"amenity/fast_food|Pizza Inn":{tags:{amenity:"fast_food",brand:"Pizza Inn","brand:wikidata":"Q4118850","brand:wikipedia":"en:Pizza Inn",cuisine:"pizza",name:"Pizza Inn",takeaway:"yes"}},"amenity/fast_food|Pizza King":{tags:{amenity:"fast_food",brand:"Pizza King",cuisine:"pizza",name:"Pizza King",takeaway:"yes"}},"amenity/fast_food|Pizza Móvil":{countryCodes:["es"],tags:{amenity:"fast_food",brand:"Pizza Móvil","brand:wikidata":"Q12397697","brand:wikipedia":"gl:Pizza Móvil",cuisine:"pizza",name:"Pizza Móvil",takeaway:"yes"}},"amenity/fast_food|Pizza Nova":{tags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova",takeaway:"yes"}},"amenity/fast_food|Pizza Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza",takeaway:"yes"}},"amenity/fast_food|Pizza Schmizza":{tags:{amenity:"fast_food",brand:"Pizza Schmizza","brand:wikidata":"Q7199979","brand:wikipedia":"en:Pizza Schmizza",cuisine:"pizza",name:"Pizza Schmizza",takeaway:"yes"}},"amenity/fast_food|Pizza Tutto":{countryCodes:["es"],tags:{amenity:"fast_food",brand:"Pizza Tutto",cuisine:"pizza",name:"Pizza Tutto",takeaway:"yes"}},"amenity/fast_food|Pizzaville":{tags:{amenity:"fast_food",brand:"Pizzaville",name:"Pizzaville",takeaway:"yes"}},"amenity/fast_food|Pollo Campero":{tags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero",takeaway:"yes"}},"amenity/fast_food|Pollo Granjero~(Costa Rica)":{countryCodes:["cr"],tags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273665",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"}},"amenity/fast_food|Pollo Granjero~(Guatemala)":{countryCodes:["gt"],tags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273652",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"}},"amenity/fast_food|Pollo Tropical":{tags:{amenity:"fast_food",brand:"Pollo Tropical","brand:wikidata":"Q3395356","brand:wikipedia":"en:Pollo Tropical",cuisine:"chicken",name:"Pollo Tropical",takeaway:"yes"}},"amenity/fast_food|Pollolandia":{tags:{amenity:"fast_food",brand:"Pollolandia",cuisine:"chicken",name:"Pollolandia",takeaway:"yes"}},"amenity/fast_food|Popeyes":{tags:{amenity:"fast_food",brand:"Popeyes","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeyes",official_name:"Popeyes Louisiana Kitchen",takeaway:"yes"}},"amenity/fast_food|Portillo's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Portillo's","brand:wikidata":"Q3399307","brand:wikipedia":"en:Portillo's Restaurants",cuisine:"hot_dog;burger",name:"Portillo's",takeaway:"yes"}},"amenity/fast_food|Potbelly":{countryCodes:["us"],matchNames:["potbelly sandwich shop"],tags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Shop",cuisine:"sandwich",name:"Potbelly",official_name:"Potbelly Sandwich Works",takeaway:"yes"}},"amenity/fast_food|Pret A Manger":{countryCodes:["ae","cn","de","dk","fr","gb","hk","nl","sg","us"],tags:{amenity:"fast_food",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",cuisine:"sandwich",name:"Pret A Manger",short_name:"Pret",takeaway:"yes"}},"amenity/fast_food|Pretzelmaker":{countryCodes:["us"],matchNames:["pretzel time"],tags:{amenity:"fast_food",brand:"Pretzelmaker","brand:wikidata":"Q7242321","brand:wikipedia":"en:Pretzelmaker",cuisine:"pretzel",name:"Pretzelmaker",takeaway:"yes"}},"amenity/fast_food|Qdoba":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba",official_name:"Qdoba Mexican Grill",takeaway:"yes"}},"amenity/fast_food|Quesada":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Quesada","brand:wikidata":"Q66070360",cuisine:"mexican",name:"Quesada",official_name:"Quesada Burritos & Tacos",takeaway:"yes"}},"amenity/fast_food|Quick":{countryCodes:["be","fr","lu"],tags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick",takeaway:"yes"}},"amenity/fast_food|Quiznos":{matchNames:["quiznos sub","quiznos subs"],tags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos",takeaway:"yes"}},"amenity/fast_food|Raising Cane's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's",official_name:"Raising Cane's Chicken Fingers",takeaway:"yes"}},"amenity/fast_food|Rally's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q63919323",cuisine:"burger",name:"Rally's",takeaway:"yes"}},"amenity/fast_food|Red Rooster":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster",takeaway:"yes"}},"amenity/fast_food|Robin's Donuts":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Robin's Donuts","brand:wikidata":"Q7352199","brand:wikipedia":"en:Robin's Donuts",cuisine:"donut",name:"Robin's Donuts",short_name:"Robin's",takeaway:"yes"}},"amenity/fast_food|Roy Rogers":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Roy Rogers","brand:wikidata":"Q7373311","brand:wikipedia":"en:Roy Rogers Restaurants",cuisine:"burger;sandwich;chicken",name:"Roy Rogers",takeaway:"yes"}},"amenity/fast_food|Rubio's":{countryCodes:["us"],matchNames:["rubios fresh mexican grill"],tags:{amenity:"fast_food",brand:"Rubio's","brand:wikidata":"Q7376154","brand:wikipedia":"en:Rubio's Coastal Grill",cuisine:"mexican",name:"Rubio's",official_name:"Rubio's Coastal Grill",takeaway:"yes"}},"amenity/fast_food|SUSU & Sons":{countryCodes:["il"],matchNames:["סוסו ובניו"],tags:{amenity:"fast_food",brand:"SUSU & Sons","brand:en":"SUSU & Sons","brand:he":"סוסו אנד סאנס","brand:wikidata":"Q64760081",cuisine:"burger",name:"SUSU & Sons","name:en":"SUSU & Sons","name:he":"סוסו אנד סאנס",takeaway:"yes"}},"amenity/fast_food|Sarku Japan":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Sarku Japan","brand:wikidata":"Q7424243",cuisine:"japanese",name:"Sarku Japan",takeaway:"yes"}},"amenity/fast_food|Sarpino's Pizzeria":{tags:{amenity:"fast_food",brand:"Sarpino's Pizzeria","brand:wikidata":"Q28229116","brand:wikipedia":"en:Sarpino's Pizzeria",cuisine:"pizza",name:"Sarpino's Pizzeria",takeaway:"yes"}},"amenity/fast_food|Sbarro":{matchNames:["sbarro pizzeria"],tags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro",takeaway:"yes"}},"amenity/fast_food|Schlotzsky's":{countryCodes:["us"],matchNames:["schlotzskys deli"],tags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's",takeaway:"yes"}},"amenity/fast_food|Schnitz":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Schnitz","brand:wikidata":"Q48792277","brand:wikipedia":"en:Schnitz",cuisine:"chicken",name:"Schnitz",takeaway:"yes"}},"amenity/fast_food|Shake Shack":{countryCodes:["gb","us"],tags:{amenity:"fast_food",brand:"Shake Shack","brand:wikidata":"Q1058722","brand:wikipedia":"en:Shake Shack",cuisine:"burger",name:"Shake Shack",takeaway:"yes"}},"amenity/fast_food|Sibylla":{countryCodes:["fi","se"],tags:{amenity:"fast_food",brand:"Sibylla","brand:wikidata":"Q488643","brand:wikipedia":"en:Sibylla (fast food)",cuisine:"burger",name:"Sibylla",takeaway:"yes"}},"amenity/fast_food|Smashburger":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Smashburger","brand:wikidata":"Q17061332","brand:wikipedia":"en:Smashburger",cuisine:"burger",name:"Smashburger",takeaway:"yes"}},"amenity/fast_food|Smoothie King":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Smoothie King","brand:wikidata":"Q5491421","brand:wikipedia":"en:Smoothie King",cuisine:"juice",name:"Smoothie King",takeaway:"yes"}},"amenity/fast_food|Sonic":{matchNames:["sonic drive in"],nomatch:["amenity/fuel|Sonic"],tags:{amenity:"fast_food",brand:"Sonic","brand:wikidata":"Q7561808","brand:wikipedia":"en:Sonic Drive-In",cuisine:"burger",drive_in:"yes",name:"Sonic",takeaway:"yes"}},"amenity/fast_food|Specialty's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Specialty's","brand:wikidata":"Q64339210",cuisine:"sandwich;bakery",name:"Specialty's",takeaway:"yes"}},"amenity/fast_food|St-Hubert Express":{countryCodes:["ca"],nomatch:["amenity/restaurant|St-Hubert"],tags:{amenity:"fast_food",brand:"St-Hubert","brand:wikidata":"Q3495225","brand:wikipedia":"fr:St-Hubert (restaurant)",cuisine:"chicken;barbecue",name:"St-Hubert Express",takeaway:"yes"}},"amenity/fast_food|Steak 'n Shake":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake",takeaway:"yes"}},"amenity/fast_food|Steak Escape":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Steak Escape","brand:wikidata":"Q7605235","brand:wikipedia":"en:Steak Escape",cuisine:"sandwich",name:"Steak Escape",takeaway:"yes"}},"amenity/fast_food|Steers":{tags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers",takeaway:"yes"}},"amenity/fast_food|Subway":{matchNames:["subway sandwiches"],tags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway",takeaway:"yes"}},"amenity/fast_food|Sumo Salad":{countryCodes:["ae","au","br","nz","sg","us"],tags:{amenity:"fast_food",brand:"Sumo Salad","brand:wikidata":"Q16951700","brand:wikipedia":"en:Sumo Salad",cuisine:"salad",name:"Sumo Salad",takeaway:"yes"}},"amenity/fast_food|Supermac's":{countryCodes:["gb","ie"],tags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's",takeaway:"yes"}},"amenity/fast_food|Sushi Shop":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Sushi Shop","brand:wikidata":"Q64840990",cuisine:"sushi",name:"Sushi Shop",takeaway:"yes"}},"amenity/fast_food|Taco Bell":{tags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell",takeaway:"yes"}},"amenity/fast_food|Taco Bueno":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno",takeaway:"yes"}},"amenity/fast_food|Taco Cabana":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana",takeaway:"yes"}},"amenity/fast_food|Taco Del Mar":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar",takeaway:"yes"}},"amenity/fast_food|Taco John's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's",takeaway:"yes"}},"amenity/fast_food|Taco Mayo":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco Mayo","brand:wikidata":"Q2386946","brand:wikipedia":"en:Taco Mayo",cuisine:"tex-mex",name:"Taco Mayo",takeaway:"yes"}},"amenity/fast_food|Taco Time":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time",takeaway:"yes"}},"amenity/fast_food|Ted's Hot Dogs":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Ted's Hot Dogs","brand:wikidata":"Q7692930","brand:wikipedia":"en:Ted's Hot Dogs",cuisine:"hot_dog",name:"Ted's Hot Dogs",takeaway:"yes"}},"amenity/fast_food|Telepizza":{tags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza",takeaway:"yes"}},"amenity/fast_food|Teriyaki Experience":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Teriyaki Experience","brand:wikidata":"Q7702453",cuisine:"japanese",name:"Teriyaki Experience",takeaway:"yes"}},"amenity/fast_food|Texas Burger":{tags:{amenity:"fast_food",brand:"Texas Burger",cuisine:"burger",name:"Texas Burger",takeaway:"yes"}},"amenity/fast_food|Texas Chicken":{tags:{amenity:"fast_food",brand:"Texas Chicken",cuisine:"chicken",name:"Texas Chicken",takeaway:"yes"}},"amenity/fast_food|Thai Express~(Singapore)":{countryCodes:["sg"],nomatch:["amenity/fast_food|Thaï Express~(North America)"],tags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express",takeaway:"yes"}},"amenity/fast_food|Thaï Express~(North America)":{countryCodes:["ca","us"],matchNames:["thai express"],nomatch:["amenity/fast_food|Thai Express~(Singapore)"],tags:{amenity:"fast_food",brand:"Thaï Express","brand:wikidata":"Q7711610","brand:wikipedia":"en:Thaï Express",cuisine:"thai",name:"Thaï Express",takeaway:"yes"}},"amenity/fast_food|The Habit Burger Grill":{countryCodes:["us"],matchNames:["the habit burger"],tags:{alt_name:"Habit Burger Grill",amenity:"fast_food",brand:"The Habit Burger Grill","brand:wikidata":"Q18158741","brand:wikipedia":"en:The Habit Burger Grill",cuisine:"burger",name:"The Habit Burger Grill",short_name:"Habit Burger",takeaway:"yes"}},"amenity/fast_food|The Pizza Company":{countryCodes:["ae","bh","cn","jo","kh","la","mm","my","sa","th","vn"],tags:{alt_name:"Pizza Company",amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company",takeaway:"yes"}},"amenity/fast_food|Togo's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Togo's","brand:wikidata":"Q3530375","brand:wikipedia":"en:Togo's",cuisine:"sandwich",name:"Togo's",takeaway:"yes"}},"amenity/fast_food|Tropical Smoothie Cafe":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Tropical Smoothie Cafe","brand:wikidata":"Q7845817","brand:wikipedia":"en:Tropical Smoothie Cafe",cuisine:"juice",name:"Tropical Smoothie Cafe",takeaway:"yes"}},"amenity/fast_food|Upper Crust":{countryCodes:["de","dk","eg","es","fi","gb","ie","no","se"],tags:{amenity:"fast_food",brand:"Upper Crust","brand:wikidata":"Q7898585","brand:wikipedia":"en:Upper Crust (restaurant chain)",cuisine:"sandwich",name:"Upper Crust",takeaway:"yes"}},"amenity/fast_food|Valentine":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Valentine","brand:wikidata":"Q3553635","brand:wikipedia":"fr:Valentine (restaurant)",cuisine:"burger",name:"Valentine",takeaway:"yes"}},"amenity/fast_food|Veggie Grill":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Veggie Grill","brand:wikidata":"Q18636427","brand:wikipedia":"en:Veggie Grill",cuisine:"american","diet:vegan":"only",name:"Veggie Grill",takeaway:"yes"}},"amenity/fast_food|Villa Madina":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Villa Madina","brand:wikidata":"Q64876884",cuisine:"mediterranean",name:"Villa Madina",takeaway:"yes"}},"amenity/fast_food|Wahoo's Fish Taco":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Wahoo's Fish Taco","brand:wikidata":"Q7959827","brand:wikipedia":"en:Wahoo's Fish Taco",cuisine:"seafood",name:"Wahoo's Fish Taco",short_name:"Wahoo's",takeaway:"yes"}},"amenity/fast_food|Wayback Burgers":{tags:{amenity:"fast_food",brand:"Wayback Burgers","brand:wikidata":"Q16997570","brand:wikipedia":"en:Wayback Burgers",cuisine:"burger",name:"Wayback Burgers",takeaway:"yes"}},"amenity/fast_food|Wendy's":{tags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's",takeaway:"yes"}},"amenity/fast_food|West Cornwall Pasty Co.":{countryCodes:["gb"],tags:{amenity:"fast_food",brand:"West Cornwall Pasty Co.","brand:wikidata":"Q7774268","brand:wikipedia":"en:The West Cornwall Pasty Company",cuisine:"pasty",name:"West Cornwall Pasty Co.",takeaway:"yes"}},"amenity/fast_food|Wetzel's Pretzels":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Wetzel's Pretzels","brand:wikidata":"Q7990205","brand:wikipedia":"en:Wetzel's Pretzels",cuisine:"pretzel",name:"Wetzel's Pretzels",takeaway:"yes"}},"amenity/fast_food|Whataburger":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger",takeaway:"yes"}},"amenity/fast_food|Which Wich?":{countryCodes:["ae","gb","gt","mx","om","qa","sa","us"],tags:{amenity:"fast_food",brand:"Which Wich?","brand:wikidata":"Q7993556","brand:wikipedia":"en:Which Wich?",cuisine:"sandwich",name:"Which Wich?",takeaway:"yes"}},"amenity/fast_food|White Castle":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle",takeaway:"yes"}},"amenity/fast_food|Wienerschnitzel":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel",takeaway:"yes"}},"amenity/fast_food|Wimpy":{tags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy",takeaway:"yes"}},"amenity/fast_food|WingStreet":{countryCodes:["au","ca","cy","us"],tags:{amenity:"fast_food",brand:"WingStreet","brand:wikidata":"Q946630","brand:wikipedia":"en:WingStreet",cuisine:"wings",name:"WingStreet",takeaway:"yes"}},"amenity/fast_food|Wingstop":{countryCodes:["mx","us"],tags:{amenity:"fast_food",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop",takeaway:"yes"}},"amenity/fast_food|Xi'an Famous Foods":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Xi'an Famous Foods","brand:wikidata":"Q8044020","brand:wikipedia":"en:Xi'an Famous Foods",cuisine:"chinese",name:"Xi'an Famous Foods",takeaway:"yes"}},"amenity/fast_food|Yellow Cab Pizza":{tags:{amenity:"fast_food",brand:"Yellow Cab Pizza","brand:wikidata":"Q8051689","brand:wikipedia":"en:Yellow Cab Pizza",cuisine:"pizza",name:"Yellow Cab Pizza",takeaway:"yes"}},"amenity/fast_food|Zaxby's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's",official_name:"Zaxby's Chicken Fingers & Buffalo Wings",takeaway:"yes"}},"amenity/fast_food|Zoës Kitchen":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Zoës Kitchen","brand:wikidata":"Q8074747","brand:wikipedia":"en:Zoës Kitchen",cuisine:"mediterranean",name:"Zoës Kitchen",takeaway:"yes"}},"amenity/fast_food|immergrün":{countryCodes:["de"],matchNames:["immergün"],tags:{amenity:"fast_food",brand:"immergrün","brand:wikidata":"Q62589254",cuisine:"sandwich;salad;juice",name:"immergün",takeaway:"yes"}},"amenity/fast_food|itsu":{countryCodes:["gb","us"],tags:{amenity:"fast_food",brand:"itsu","brand:wikidata":"Q6094914","brand:wikipedia":"en:Itsu",cuisine:"asian",name:"itsu",takeaway:"yes"}},"amenity/fast_food|Γρηγόρης":{countryCodes:["gr"],tags:{amenity:"fast_food",brand:"Γρηγόρης","brand:el":"Γρηγόρης","brand:en":"Gregorys","brand:wikidata":"Q62273834",cuisine:"sandwich",name:"Γρηγόρης","name:el":"Γρηγόρης","name:en":"Gregorys",takeaway:"yes"}},"amenity/fast_food|Бургер Кинг":{countryCodes:["by","kz","ru"],tags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:ru":"Бургер Кинг","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King","name:ru":"Бургер Кинг",takeaway:"yes"}},"amenity/fast_food|Домино'c":{matchNames:["доминоc пицца"],tags:{amenity:"fast_food",brand:"Домино'c","brand:en":"Domino's","brand:ru":"Домино'c","brand:wikidata":"Q839466","brand:wikipedia":"ru:Domino’s Pizza",cuisine:"pizza",name:"Домино'c","name:en":"Domino's","name:ru":"Домино'c",takeaway:"yes"}},"amenity/fast_food|Крошка Картошка":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Крошка Картошка","brand:en":"Kroshka Kartoshka","brand:ru":"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",cuisine:"potato",name:"Крошка Картошка","name:en":"Kroshka Kartoshka","name:ru":"Крошка Картошка",takeaway:"yes"}},"amenity/fast_food|Макдоналдс":{tags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:ru":"Макдоналдс","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's","name:ru":"Макдоналдс",takeaway:"yes"}},"amenity/fast_food|Папа Джонс":{countryCodes:["by","ru"],tags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:ru":"Папа Джонс","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's","name:ru":"Папа Джонс",takeaway:"yes"}},"amenity/fast_food|Пузата хата":{countryCodes:["ru"],matchTags:["amenity/cafe","amenity/restaurant"],tags:{amenity:"fast_food",brand:"Пузата Хата","brand:en":"Puzata hata","brand:ru":"Пузата Хата","brand:ua":"Пузата Хата","brand:wikidata":"Q11832009","brand:wikipedia":"uk:Пузата Хата",cuisine:"ukrainian;western",name:"Пузата Хата","name:en":"Puzata hata","name:ru":"Пузата Хата","name:ua":"Пузата Хата",takeaway:"yes"}},"amenity/fast_food|Робин Сдобин":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Робин Сдобин","brand:en":"Robins Dobin","brand:ru":"Робин Сдобин","brand:wikidata":"Q62273880",cuisine:"burger",name:"Робин Сдобин","name:en":"Robins Dobin","name:ru":"Робин Сдобин",takeaway:"yes"}},"amenity/fast_food|Русский Аппетит":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Русский Аппетит","brand:en":"Russkiy Appetit","brand:ru":"Русский Аппетит","brand:wikidata":"Q62086063",cuisine:"sandwich;salad;regional",name:"Русский Аппетит","name:en":"Russkiy Appetit","name:ru":"Русский Аппетит",takeaway:"yes"}},"amenity/fast_food|Стардог!s":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Стардог!s","brand:en":"Stardog!s","brand:ru":"Стардог!s","brand:wikidata":"Q4439856","brand:wikipedia":"ru:Стардогс",cuisine:"sausage",name:"Стардог!s","name:en":"Stardog!s","name:ru":"Стардог!s",takeaway:"yes"}},"amenity/fast_food|Суши Wok":{countryCodes:["ru","ua"],matchTags:["shop/convenience"],tags:{amenity:"fast_food",brand:"Суши Wok","brand:en":"Sushi Wok","brand:ru":"Суши Wok","brand:wikidata":"Q25444754","brand:wikipedia":"uk:Суши Wok (мережа магазинів)",cuisine:"asian",name:"Суши Wok","name:en":"Sushi Wok","name:ru":"Суши Wok",takeaway:"yes"}},"amenity/fast_food|Теремок":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{amenity:"fast_food",brand:"Теремок","brand:en":"Teremok","brand:ru":"Теремок","brand:wikidata":"Q4455593","brand:wikipedia":"ru:Теремок (сеть быстрого питания)",cuisine:"crepe;russian",name:"Теремок","name:en":"Teremok","name:ru":"Теремок",takeaway:"yes"}},"amenity/fast_food|אגדיר":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"אגדיר","brand:en":"Agadir","brand:he":"אגדיר","brand:wikidata":"Q64760070",cuisine:"burger",name:"אגדיר","name:en":"Agadir","name:he":"אגדיר",takeaway:"yes"}},"amenity/fast_food|מקדונלד'ס":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"מקדונלד'ס","brand:en":"McDonald's","brand:he":"מקדונלד'ס","brand:wikidata":"Q12061542","brand:wikipedia":"en:McDonald's Israel",cuisine:"burger",name:"מקדונלד'ס","name:en":"McDonald's","name:he":"מקדונלד'ס",takeaway:"yes"}},"amenity/fast_food|עד העצם אקספרס":{countryCodes:["il"],tags:{amenity:"fast_food",brand:"עד העצם אקספרס","brand:en":"Ad Haetzem Express","brand:he":"עד העצם אקספרס","brand:wikidata":"Q64760165",cuisine:"burger",name:"עד העצם אקספרס","name:en":"Ad Haetzem Express","name:he":"עד העצם אקספרס",takeaway:"yes"}},"amenity/fast_food|دجاج كنتاكي":{tags:{amenity:"fast_food",brand:"دجاج كنتاكي","brand:ar":"دجاج كنتاكي","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"ar:دجاج كنتاكي",cuisine:"chicken",name:"دجاج كنتاكي","name:ar":"دجاج كنتاكي","name:en":"KFC",takeaway:"yes"}},"amenity/fast_food|ماكدونالدز":{tags:{amenity:"fast_food",brand:"ماكدونالدز","brand:ar":"ماكدونالدز","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"ar:ماكدونالدز",cuisine:"burger",name:"ماكدونالدز","name:ar":"ماكدونالدز","name:en":"McDonald's",takeaway:"yes"}},"amenity/fast_food|هرفي":{countryCodes:["ae","bh","kw","sa"],tags:{amenity:"fast_food",brand:"هرفي","brand:ar":"هرفي","brand:en":"Herfy","brand:wikidata":"Q5738371","brand:wikipedia":"ar:هرفي",cuisine:"burger",name:"هرفي","name:ar":"هرفي","name:en":"Herfy",takeaway:"yes"}},"amenity/fast_food|かっぱ寿司":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"かっぱ寿司","brand:en":"Kappazushi","brand:ja":"かっぱ寿司","brand:wikidata":"Q11263916","brand:wikipedia":"ja:かっぱ寿司",cuisine:"sushi",name:"かっぱ寿司","name:en":"Kappazushi","name:ja":"かっぱ寿司",takeaway:"yes"}},"amenity/fast_food|かつや":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"かつや","brand:en":"Katsuya","brand:ja":"かつや","brand:wikidata":"Q2855257","brand:wikipedia":"ja:かつや",cuisine:"fried_food",name:"かつや","name:en":"Katsuya","name:ja":"かつや","name:ko":"카쯔야","name:zh":"吉豚屋",takeaway:"yes"}},"amenity/fast_food|くら寿司":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"くら寿司","brand:en":"Kurazushi","brand:ja":"くら寿司","brand:wikidata":"Q6445491","brand:wikipedia":"ja:くら寿司",cuisine:"sushi",name:"くら寿司","name:en":"Kurazushi","name:ja":"くら寿司",takeaway:"yes"}},"amenity/fast_food|すき家":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"すき家","brand:en":"Sukiya","brand:ja":"すき家","brand:wikidata":"Q6137375","brand:wikipedia":"ja:すき家",cuisine:"beef_bowl",name:"すき家","name:en":"Sukiya","name:ja":"すき家",takeaway:"yes"}},"amenity/fast_food|てんや":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"てんや","brand:en":"Tenya","brand:ja":"てんや","brand:wikidata":"Q11319830","brand:wikipedia":"ja:テンコーポレーション",cuisine:"fries",name:"てんや","name:en":"Tenya","name:ja":"てんや",takeaway:"yes"}},"amenity/fast_food|なか卯":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"なか卯","brand:en":"Nakau","brand:ja":"なか卯","brand:wikidata":"Q11274132","brand:wikipedia":"ja:なか卯",cuisine:"udon",name:"なか卯","name:en":"Nakau","name:ja":"なか卯",takeaway:"yes"}},"amenity/fast_food|はま寿司":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"はま寿司","brand:en":"Hamazushi","brand:ja":"はま寿司","brand:wikidata":"Q17220385","brand:wikipedia":"ja:はま寿司",cuisine:"sushi",name:"はま寿司","name:en":"Hamazushi","name:ja":"はま寿司",takeaway:"yes"}},"amenity/fast_food|ほっかほっか亭":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ほっかほっか亭","brand:en":"Hokka Hokka Tei","brand:ja":"ほっかほっか亭","brand:wikidata":"Q5878035","brand:wikipedia":"ja:ほっかほっか亭",cuisine:"japanese",name:"ほっかほっか亭","name:en":"Hokka Hokka Tei","name:ja":"ほっかほっか亭",takeaway:"yes"}},"amenity/fast_food|ほっともっと":{countryCodes:["jp"],nomatch:["shop/deli|ほっともっと"],tags:{amenity:"fast_food",brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",cuisine:"japanese",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",takeaway:"yes"}},"amenity/fast_food|ゆで太郎":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ゆで太郎","brand:en":"Yudetaro","brand:ja":"ゆで太郎","brand:wikidata":"Q11280824","brand:wikipedia":"ja:ゆで太郎",cuisine:"noodle",name:"ゆで太郎","name:en":"Yudetaro","name:ja":"ゆで太郎",takeaway:"yes"}},"amenity/fast_food|ウェンディーズ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ウェンディーズ","brand:en":"Wendy's","brand:ja":"ウェンディーズ","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"ウェンディーズ","name:en":"Wendy's","name:ja":"ウェンディーズ",takeaway:"yes"}},"amenity/fast_food|オリジン弁当":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"オリジン弁当","brand:en":"Origin Bentō","brand:ja":"オリジン弁当","brand:wikidata":"Q11292632","brand:wikipedia":"ja:オリジン東秀",cuisine:"japanese",name:"オリジン弁当","name:en":"Origin Bentō","name:ja":"オリジン弁当",takeaway:"yes"}},"amenity/fast_food|ケンタッキーフライドチキン":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ケンタッキーフライドチキン","brand:en":"KFC","brand:ja":"ケンタッキーフライドチキン","brand:wikidata":"Q524757","brand:wikipedia":"ja:KFCコーポレーション",cuisine:"chicken",name:"ケンタッキーフライドチキン","name:en":"KFC","name:ja":"ケンタッキーフライドチキン",takeaway:"yes"}},"amenity/fast_food|ゴーゴーカレー":{countryCodes:["jp"],tags:{"alt_name:en":"Go Go Curry",amenity:"fast_food",brand:"ゴーゴーカレー","brand:en":"Go!Go!Curry","brand:ja":"ゴーゴーカレー","brand:wikidata":"Q11303801","brand:wikipedia":"ja:ゴーゴーカレー",cuisine:"curry",name:"ゴーゴーカレー","name:en":"Go!Go!Curry","name:ja":"ゴーゴーカレー",takeaway:"yes"}},"amenity/fast_food|サブウェイ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"サブウェイ","brand:en":"Subway","brand:ja":"サブウェイ","brand:wikidata":"Q244457","brand:wikipedia":"ja:サブウェイ",cuisine:"sandwich",name:"サブウェイ","name:en":"Subway","name:ja":"サブウェイ",takeaway:"yes"}},"amenity/fast_food|スシロー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"スシロー","brand:en":"Sushiro","brand:ja":"スシロー","brand:wikidata":"Q11257037","brand:wikipedia":"ja:あきんどスシロー",cuisine:"sushi",name:"スシロー","name:en":"Sushiro","name:ja":"スシロー","name:zh":"壽司郎",takeaway:"yes"}},"amenity/fast_food|ドミノ":{countryCodes:["jp"],matchNames:["ドミノ・ピザ"],tags:{amenity:"fast_food",brand:"ドミノ","brand:en":"Domino's","brand:ja":"ドミノ","brand:wikidata":"Q839466","brand:wikipedia":"ja:ドミノ・ピザ",cuisine:"pizza",name:"ドミノ","name:en":"Domino's","name:ja":"ドミノ",takeaway:"yes"}},"amenity/fast_food|バーガーキング":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"バーガーキング","brand:en":"Burger King","brand:ja":"バーガーキング","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"バーガーキング","name:en":"Burger King","name:ja":"バーガーキング",takeaway:"yes"}},"amenity/fast_food|ピザハット":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:ja":"ピザハット","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut","name:ja":"ピザハット",takeaway:"yes"}},"amenity/fast_food|ピザ・カリフォルニア":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザ・カリフォルニア","brand:en":"Pizza California","brand:ja":"ピザ・カリフォルニア","brand:wikidata":"Q75324","brand:wikipedia":"ja:ピザ・カリフォルニア",cuisine:"pizza",name:"ピザ・カリフォルニア","name:en":"Pizza California","name:ja":"ピザ・カリフォルニア",takeaway:"yes"}},"amenity/fast_food|ピザーラ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザーラ","brand:en":"Pizza-La","brand:ja":"ピザーラ","brand:wikidata":"Q7199948","brand:wikipedia":"ja:ピザーラ",cuisine:"pizza",name:"ピザーラ","name:en":"Pizza-La","name:ja":"ピザーラ",takeaway:"yes"}},"amenity/fast_food|ファーストキッチン":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ファーストキッチン","brand:en":"First Kitchen","brand:ja":"ファーストキッチン","brand:wikidata":"Q5453133","brand:wikipedia":"ja:ファーストキッチン",cuisine:"pizza",name:"ファーストキッチン","name:en":"First Kitchen","name:ja":"ファーストキッチン",takeaway:"yes"}},"amenity/fast_food|フレッシュネスバーガー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"フレッシュネスバーガー","brand:en":"Freshness Burger","brand:ja":"フレッシュネスバーガー","brand:wikidata":"Q5503087","brand:wikipedia":"ja:フレッシュネスバーガー",cuisine:"burger",name:"フレッシュネスバーガー","name:en":"Freshness Burger","name:ja":"フレッシュネスバーガー",takeaway:"yes"}},"amenity/fast_food|マクドナルド":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:ja":"マクドナルド","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's","name:ja":"マクドナルド",takeaway:"yes"}},"amenity/fast_food|ミスタードーナツ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:ja":"ミスタードーナツ","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut","name:ja":"ミスタードーナツ",takeaway:"yes"}},"amenity/fast_food|モスバーガー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:ja":"モスバーガー","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger","name:ja":"モスバーガー",takeaway:"yes"}},"amenity/fast_food|ラーメン二郎":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ラーメン二郎","brand:en":"Ramen Jiro","brand:ja":"ラーメン二郎","brand:wikidata":"Q11347765","brand:wikipedia":"ja:ラーメン二郎",cuisine:"ramen",name:"ラーメン二郎","name:en":"Ramen Jiro","name:ja":"ラーメン二郎",takeaway:"yes"}},"amenity/fast_food|ロッテリア":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:ja":"ロッテリア","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria","name:ja":"ロッテリア",takeaway:"yes"}},"amenity/fast_food|吉野家":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:ja":"吉野家","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",cuisine:"beef_bowl",name:"吉野家","name:en":"Yoshinoya","name:ja":"吉野家",takeaway:"yes"}},"amenity/fast_food|富士そば":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:ja":"富士そば","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",cuisine:"soba",name:"富士そば","name:en":"Fuji Soba","name:ja":"富士そば",takeaway:"yes"}},"amenity/fast_food|幸楽苑":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:ja":"幸楽苑","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",cuisine:"ramen",name:"幸楽苑","name:en":"Kourakuen","name:ja":"幸楽苑",takeaway:"yes"}},"amenity/fast_food|摩斯漢堡":{countryCodes:["cn","hk","mo","sg","tw"],tags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡","brand:zh":"摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger","name:zh":"摩斯漢堡",takeaway:"yes"}},"amenity/fast_food|日高屋":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋","name:en":"Hidakaya",takeaway:"yes"}},"amenity/fast_food|松屋":{countryCodes:["cn","hk","jp","mo","sg","tw"],tags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya","brand:ja":"松屋","brand:wikidata":"Q848773","brand:wikipedia":"ja:松屋フーズ",cuisine:"japanese",name:"松屋","name:en":"Matsuya","name:ja":"松屋",official_name:"松屋フーズ","official_name:en":"Matsuya Foods","official_name:ja":"松屋フーズ",takeaway:"yes"}},"amenity/fast_food|箱根そば":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"箱根そば","brand:en":"Hakone Soba","brand:ja":"箱根そば","brand:wikidata":"Q11603345","brand:wikipedia":"ja:箱根そば",cuisine:"soba",name:"箱根そば","name:en":"Hakone Soba","name:ja":"箱根そば",takeaway:"yes"}},"amenity/fast_food|築地銀だこ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"築地銀だこ","brand:en":"Gindaco","brand:ja":"築地銀だこ","brand:wikidata":"Q11603490","brand:wikipedia":"ja:築地銀だこ",cuisine:"takoyaki",name:"築地銀だこ","name:en":"Gindaco","name:ja":"築地銀だこ",takeaway:"yes"}},"amenity/fast_food|肯德基":{countryCodes:["cn","hk","mo","sg","tw"],tags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",cuisine:"chicken",name:"肯德基","name:en":"KFC",takeaway:"yes"}},"amenity/fast_food|麥當勞":{countryCodes:["hk","mo","tw"],tags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麥當勞","brand:zh":"麥當勞","brand:zh-Hant":"麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's","name:zh":"麥當勞","name:zh-Hant":"麥當勞",takeaway:"yes"}},"amenity/fast_food|麦当劳":{countryCodes:["cn","sg"],tags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳","brand:zh":"麦当劳","brand:zh-Hans":"麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's","name:zh":"麦当劳","name:zh-Hans":"麦当劳",takeaway:"yes"}},"amenity/fast_food|롯데리아":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:ko":"롯데리아","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria","name:ko":"롯데리아",takeaway:"yes"}},"amenity/fast_food|맘스터치":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"맘스터치","brand:ko":"맘스터치","brand:wikidata":"Q23044856","brand:wikipedia":"en:Mom's Touch",cuisine:"burger",name:"맘스터치","name:ko":"맘스터치",takeaway:"yes"}},"amenity/fast_food|맥도날드":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"맥도날드","brand:en":"McDonald's","brand:ko":"맥도날드","brand:wikidata":"Q38076","brand:wikipedia":"ko:맥도날드",cuisine:"burger",name:"맥도날드","name:en":"McDonald's","name:ko":"맥도날드",takeaway:"yes"}},"amenity/fuel|1-2-3":{countryCodes:["dk","pl"],tags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"}},"amenity/fuel|7-Eleven":{matchNames:["7-11","seven eleven"],nomatch:["shop/convenience|7-Eleven"],tags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"}},"amenity/fuel|76":{nomatch:["shop/convenience|76"],tags:{amenity:"fuel",brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76"}},"amenity/fuel|8 à Huit":{countryCodes:["fr"],nomatch:["shop/convenience|8 à Huit","shop/supermarket|8 à Huit"],tags:{amenity:"fuel",brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit"}},"amenity/fuel|ABC":{countryCodes:["fi"],nomatch:["shop/convenience|ABC"],tags:{amenity:"fuel",brand:"ABC","brand:wikidata":"Q10397504","brand:wikipedia":"fi:ABC-ketju",name:"ABC"}},"amenity/fuel|ADNOC":{countryCodes:["ae"],tags:{amenity:"fuel",brand:"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ADNOC"}},"amenity/fuel|ANCAP":{countryCodes:["uy"],tags:{amenity:"fuel",brand:"ANCAP","brand:wikidata":"Q2824522","brand:wikipedia":"es:Administración Nacional de Combustibles, Alcohol y Portland",name:"ANCAP",official_name:"Administración Nacional de Combustibles, Alcoholes y Portland"}},"amenity/fuel|ANP":{countryCodes:["ru","ua"],tags:{amenity:"fuel",brand:"ANP",name:"ANP"}},"amenity/fuel|AS 24":{countryCodes:["at","be","bg","cz","de","dk","es","fr","gb","ge","gr","hr","hu","ie","it","lt","lu","mk","nl","pl","pt","ro","rs","se","si","sk","ua"],tags:{amenity:"fuel",brand:"AS 24","brand:wikidata":"Q2819394","brand:wikipedia":"fr:AS 24 (entreprise)",hgv:"only",name:"AS 24"}},"amenity/fuel|Aegean":{countryCodes:["gr"],tags:{amenity:"fuel",brand:"Aegean","brand:wikidata":"Q28146598","brand:wikipedia":"el:Aegean Oil",name:"Aegean"}},"amenity/fuel|Afriquia":{tags:{amenity:"fuel",brand:"Afriquia","brand:wikidata":"Q2829178","brand:wikipedia":"en:Akwa Group",name:"Afriquia"}},"amenity/fuel|Agil":{countryCodes:["tn"],tags:{amenity:"fuel",brand:"Agil",name:"Agil"}},"amenity/fuel|Agip":{tags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"}},"amenity/fuel|Agrola":{countryCodes:["ch"],tags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"}},"amenity/fuel|Aloha Petroleum":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Aloha Petroleum","brand:wikidata":"Q4734197","brand:wikipedia":"en:Aloha Petroleum",name:"Aloha Petroleum",official_name:"Aloha Petroleum Ltd"}},"amenity/fuel|Alon":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Alon","brand:wikidata":"Q62274304",name:"Alon"}},"amenity/fuel|Alpet":{countryCodes:["al","tr"],tags:{amenity:"fuel",brand:"Alpet","brand:wikidata":"Q62131561",name:"Alpet"}},"amenity/fuel|Amic":{tags:{amenity:"fuel",brand:"Amic",name:"Amic"}},"amenity/fuel|Amoco":{countryCodes:["us"],nomatch:["shop/convenience|Amoco"],tags:{amenity:"fuel",brand:"Amoco","brand:wikidata":"Q465952","brand:wikipedia":"en:Amoco",name:"Amoco"}},"amenity/fuel|Ampol":{countryCodes:["au"],tags:{amenity:"fuel",brand:"Ampol","brand:wikidata":"Q4748528","brand:wikipedia":"en:Ampol",name:"Ampol"}},"amenity/fuel|Api":{countryCodes:["it"],tags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"}},"amenity/fuel|Aral":{countryCodes:["de","lu"],matchNames:["aral tankstelle"],nomatch:["shop/convenience|Aral"],tags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"}},"amenity/fuel|Arco":{countryCodes:["mx","us"],tags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"}},"amenity/fuel|Asda":{countryCodes:["gb"],nomatch:["shop/supermarket|ASDA","shop/supermarket|Asda"],tags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"}},"amenity/fuel|Atem":{countryCodes:["br"],matchNames:["posto atem"],tags:{amenity:"fuel",brand:"Atem","brand:wikidata":"Q62332255",name:"Atem"}},"amenity/fuel|Auchan":{nomatch:["shop/supermarket|Auchan"],tags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"}},"amenity/fuel|Avanti":{countryCodes:["at"],tags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"}},"amenity/fuel|Avia":{countryCodes:["at","be","bg","ch","cz","de","es","fr","hu","it","nl","pl","pt","rs","ua"],matchNames:["station avia"],tags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"}},"amenity/fuel|Avin":{countryCodes:["gr"],tags:{amenity:"fuel",brand:"Avin","brand:wikidata":"Q19903165","brand:wikipedia":"en:Avin International",name:"Avin"}},"amenity/fuel|Axion":{countryCodes:["ar","py","uy"],tags:{amenity:"fuel",brand:"Axion","brand:wikidata":"Q62131749",name:"Axion"}},"amenity/fuel|Aytemiz":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Aytemiz","brand:wikidata":"Q62274352",name:"Aytemiz"}},"amenity/fuel|Azpetrol":{countryCodes:["az"],tags:{amenity:"fuel",brand:"Azpetrol","brand:wikidata":"Q4034661","brand:wikipedia":"az:Azpetrol",name:"Azpetrol"}},"amenity/fuel|BEBECO":{countryCodes:["ch"],tags:{amenity:"fuel",brand:"BEBECO","brand:wikidata":"Q62274373",name:"BEBECO"}},"amenity/fuel|BHPetrol":{countryCodes:["my"],tags:{amenity:"fuel",brand:"BHPetrol","brand:wikidata":"Q62274381",name:"BHPetrol"}},"amenity/fuel|BP":{matchNames:["bp gas station"],nomatch:["shop/convenience|BP Shop"],tags:{amenity:"fuel",brand:"BP","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP"}},"amenity/fuel|BR":{countryCodes:["br"],matchNames:["br petrobras","petrobras","posto br"],tags:{amenity:"fuel",brand:"BR","brand:wikidata":"Q4836468","brand:wikipedia":"pt:Petrobras Distribuidora",name:"BR"}},"amenity/fuel|BWOC":{countryCodes:["gb"],tags:{amenity:"fuel",brand:"BWOC","brand:wikidata":"Q4836845","brand:wikipedia":"en:BWOC",name:"BWOC",official_name:"Bob Wayne's Oil Company"}},"amenity/fuel|Baltic Petroleum":{tags:{amenity:"fuel",brand:"Baltic Petroleum",name:"Baltic Petroleum"}},"amenity/fuel|Bangchak":{countryCodes:["th"],tags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"}},"amenity/fuel|Bapco":{countryCodes:["bh"],matchNames:["bahrain petroleum"],tags:{amenity:"fuel",brand:"Bapco","brand:wikidata":"Q803640","brand:wikipedia":"en:Bahrain Petroleum Company",name:"Bapco",official_name:"Bahrain Petroleum Company"}},"amenity/fuel|Benzina":{countryCodes:["cz"],tags:{amenity:"fuel",brand:"Benzina","brand:wikidata":"Q11130894","brand:wikipedia":"cs:Benzina",name:"Benzina"}},"amenity/fuel|Beyfin":{tags:{amenity:"fuel",brand:"Beyfin",name:"Beyfin"}},"amenity/fuel|Bharat Petroleum":{countryCodes:["in"],tags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"}},"amenity/fuel|Biomax":{countryCodes:["co"],tags:{amenity:"fuel",brand:"Biomax","brand:wikidata":"Q62274413",name:"Biomax"}},"amenity/fuel|Bliska":{countryCodes:["pl"],tags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"}},"amenity/fuel|CAMPSA":{countryCodes:["es"],tags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA",official_name:"Compañía Arrendataria del Monopolio del Petróleo, S.A."}},"amenity/fuel|Caltex":{tags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"}},"amenity/fuel|Canadian Tire Gas+":{matchNames:["canadian tire","canadian tire gas bar"],nomatch:["shop/department_store|Canadian Tire"],tags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"}},"amenity/fuel|Carrefour":{matchNames:["carrefour market"],nomatch:["shop/convenience|Carrefour Express","shop/supermarket|Carrefour"],tags:{amenity:"fuel",brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour"}},"amenity/fuel|Casey's General Store":{matchNames:["caseys"],nomatch:["shop/convenience|Casey's General Store"],tags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"}},"amenity/fuel|Casino":{tags:{amenity:"fuel",brand:"Casino",name:"Casino"}},"amenity/fuel|Cenex":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"}},"amenity/fuel|Cepsa":{countryCodes:["es","pt"],tags:{amenity:"fuel",brand:"Cepsa","brand:wikidata":"Q608819","brand:wikipedia":"en:Cepsa",name:"Cepsa",official_name:"Compañía Española de Petróleos, S.A.U."}},"amenity/fuel|Ceypetco":{countryCodes:["lk"],matchNames:["lanka filling station"],tags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"}},"amenity/fuel|Challenge":{countryCodes:["nz"],tags:{amenity:"fuel",brand:"Challenge","brand:wikidata":"Q5068888","brand:wikipedia":"en:Challenge (gasoline)",name:"Challenge"}},"amenity/fuel|Chevron":{nomatch:["shop/convenience|Chevron"],tags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"}},"amenity/fuel|Circle K":{nomatch:["shop/convenience|Circle K"],tags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"}},"amenity/fuel|Citgo":{nomatch:["shop/convenience|Citgo"],tags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"}},"amenity/fuel|Clark":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"}},"amenity/fuel|Classic":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Classic",name:"Classic"}},"amenity/fuel|Co-op~(Canada)":{countryCodes:["ca"],matchNames:["coop"],nomatch:["shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"}},"amenity/fuel|Coles Express":{countryCodes:["au"],nomatch:["shop/convenience|Coles Express"],tags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"}},"amenity/fuel|Conoco":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"}},"amenity/fuel|Copec":{countryCodes:["cl"],tags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"}},"amenity/fuel|Copetrol":{countryCodes:["py"],tags:{amenity:"fuel",brand:"Copetrol","brand:wikidata":"Q62274431",name:"Copetrol"}},"amenity/fuel|Cosan":{countryCodes:["br"],tags:{amenity:"fuel",brand:"Cosan","brand:wikidata":"Q2998228","brand:wikipedia":"pt:Cosan",name:"Cosan"}},"amenity/fuel|Cosmo":{countryCodes:["jp"],nomatch:["amenity/restaurant|Cosmo"],tags:{amenity:"fuel",brand:"Cosmo","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"Cosmo"}},"amenity/fuel|Costco Gasoline":{countryCodes:["au","ca","mx","us"],matchNames:["costco","costco gas","costco wholesale"],nomatch:["amenity/pharmacy|Costco Pharmacy","shop/wholesale|Costco"],tags:{amenity:"fuel",brand:"Costco Gasoline","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Gasoline"}},"amenity/fuel|Couche-Tard":{countryCodes:["ca"],nomatch:["shop/convenience|Couche-Tard"],tags:{amenity:"fuel",brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard"}},"amenity/fuel|Crevier":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Crevier","brand:wikidata":"Q61743451",name:"Crevier"}},"amenity/fuel|Crodux":{countryCodes:["hr"],tags:{amenity:"fuel",brand:"Crodux","brand:wikidata":"Q62274622",name:"Crodux"}},"amenity/fuel|Cumberland Farms":{countryCodes:["us"],nomatch:["shop/convenience|Cumberland Farms"],tags:{amenity:"fuel",brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms"}},"amenity/fuel|Cupet":{countryCodes:["cu"],matchNames:["cuba oil union","cuba petróleo union"],tags:{amenity:"fuel",brand:"Cupet","brand:wikidata":"Q3007579","brand:wikipedia":"en:Cuba Petróleo Union",name:"Cupet"}},"amenity/fuel|Delek":{countryCodes:["il"],tags:{amenity:"fuel",brand:"Delek","brand:wikidata":"Q1184087","brand:wikipedia":"en:Delek",name:"Delek"}},"amenity/fuel|Delta~(Panama & Costa Rica)":{countryCodes:["cr","us"],tags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274638",name:"Delta"}},"amenity/fuel|Delta~(USA)":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Delta","brand:wikidata":"Q62274661",name:"Delta"}},"amenity/fuel|Depot Tela":{countryCodes:["kh"],tags:{amenity:"fuel",brand:"Depot Tela",name:"Depot Tela"}},"amenity/fuel|Diamond Shamrock":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Diamond Shamrock","brand:wikidata":"Q16973722","brand:wikipedia":"en:Diamond Shamrock",name:"Diamond Shamrock"}},"amenity/fuel|Domo":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Domo","brand:wikidata":"Q5291326","brand:wikipedia":"en:Domo Gasoline",name:"Domo"}},"amenity/fuel|Dyneff":{countryCodes:["es","fr"],tags:{amenity:"fuel",brand:"Dyneff","brand:wikidata":"Q16630266","brand:wikipedia":"fr:Dyneff",name:"Dyneff"}},"amenity/fuel|EKO~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|EKO~(Greece)","shop/supermarket|Eko"],tags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q3045934","brand:wikipedia":"fr:EKO",name:"EKO"}},"amenity/fuel|EKO~(Greece)":{countryCodes:["bg","cy","gr","me","mk","rs"],matchNames:["εκο"],nomatch:["amenity/fuel|EKO~(Canada)","shop/supermarket|Eko"],tags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q903198","brand:wikipedia":"el:Ελληνικά Πετρέλαια",name:"EKO"}},"amenity/fuel|ENEOS":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"ENEOS","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"ENEOS"}},"amenity/fuel|Elan":{countryCodes:["de","fr","nl"],tags:{amenity:"fuel",brand:"Elan","brand:wikidata":"Q57980752",name:"Elan"}},"amenity/fuel|Engen":{tags:{amenity:"fuel",brand:"Engen","brand:wikidata":"Q3054251","brand:wikipedia":"en:Engen Petroleum",name:"Engen"}},"amenity/fuel|Eni":{countryCodes:["at","ch","fr","it"],tags:{amenity:"fuel",brand:"Eni","brand:wikidata":"Q565594","brand:wikipedia":"en:Eni",name:"Eni"}},"amenity/fuel|Erg":{countryCodes:["it"],tags:{amenity:"fuel",brand:"Erg","brand:wikidata":"Q739503","brand:wikipedia":"it:ERG (azienda)",name:"Erg"}},"amenity/fuel|Esso":{matchNames:["station esso"],nomatch:["amenity/fuel|Esso Express","shop/convenience|Esso"],tags:{amenity:"fuel",brand:"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"Esso"}},"amenity/fuel|Esso Express":{nomatch:["amenity/fuel|Esso"],tags:{amenity:"fuel",brand:"Esso Express","brand:wikidata":"Q2350336","brand:wikipedia":"nl:Esso Express",name:"Esso Express"}},"amenity/fuel|Exxon":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Exxon","brand:wikidata":"Q4781944","brand:wikipedia":"en:Exxon",name:"Exxon"}},"amenity/fuel|F24":{countryCodes:["dk"],tags:{amenity:"fuel",brand:"F24","brand:wikidata":"Q12310853","brand:wikipedia":"da:F24",name:"F24"}},"amenity/fuel|Fas Gas":{countryCodes:["ca"],matchNames:["fas gas plus"],tags:{amenity:"fuel",brand:"Fas Gas","brand:wikidata":"Q61743505","brand:wikipedia":"en:Parkland Fuel",name:"Fas Gas"}},"amenity/fuel|Firezone":{countryCodes:["nl"],tags:{amenity:"fuel",brand:"Firezone","brand:wikidata":"Q14628080","brand:wikipedia":"nl:Firezone",name:"Firezone"}},"amenity/fuel|Flying J":{countryCodes:["ca","us"],matchNames:["flying j travel plaza"],tags:{amenity:"fuel",brand:"Flying J","brand:wikidata":"Q64130592",name:"Flying J"}},"amenity/fuel|Flying V":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Flying V","brand:wikidata":"Q62275048",name:"Flying V"}},"amenity/fuel|Freie Tankstelle":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Freie Tankstelle","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"Freie Tankstelle"}},"amenity/fuel|GALP":{tags:{amenity:"fuel",brand:"GALP","brand:wikidata":"Q1492739","brand:wikipedia":"en:Galp Energia",name:"GALP"}},"amenity/fuel|Gas Plus":{nomatch:["shop/mobile_phone|Plus","shop/supermarket|PLUS"],tags:{amenity:"fuel",brand:"Gas Plus",name:"Gas Plus"}},"amenity/fuel|Gazel":{countryCodes:["co","mx","pe"],tags:{amenity:"fuel",brand:"Gazel","brand:wikidata":"Q62529885",name:"Gazel"}},"amenity/fuel|Gazprom":{tags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"}},"amenity/fuel|GetGo":{countryCodes:["us"],matchNames:["giant eagle","giant eagle fuel"],tags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"}},"amenity/fuel|Giant~(Carlisle)":{countryCodes:["us"],nomatch:["shop/bicycle|Giant","shop/supermarket|Giant~(Carlisle)","shop/supermarket|Giant~(Landover)"],tags:{amenity:"fuel",brand:"Giant","brand:wikidata":"Q5558332","brand:wikipedia":"en:Giant Food Stores",name:"Giant"}},"amenity/fuel|Global":{tags:{amenity:"fuel",brand:"Global",name:"Global"}},"amenity/fuel|Glusco":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"Glusco","brand:wikidata":"Q62284719",name:"Glusco"}},"amenity/fuel|Goil":{countryCodes:["gh"],tags:{amenity:"fuel",brand:"Goil","brand:wikidata":"Q5555383","brand:wikipedia":"en:Ghana Oil Company",name:"Goil"}},"amenity/fuel|Gulf":{tags:{amenity:"fuel",brand:"Gulf","brand:wikidata":"Q1296860","brand:wikipedia":"en:Gulf Oil",name:"Gulf"}},"amenity/fuel|Gull":{countryCodes:["au","nz"],tags:{amenity:"fuel",brand:"Gull","brand:wikidata":"Q5617739","brand:wikipedia":"en:Gull Petroleum",name:"Gull"}},"amenity/fuel|H-E-B Fuel":{countryCodes:["us"],matchNames:["h-e-b gas"],nomatch:["shop/supermarket|H-E-B"],tags:{amenity:"fuel",brand:"H-E-B Fuel","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B Fuel"}},"amenity/fuel|HEM":{countryCodes:["de"],tags:{amenity:"fuel",brand:"HEM","brand:wikidata":"Q1563517","brand:wikipedia":"de:Deutsche Tamoil",name:"HEM"}},"amenity/fuel|HP":{countryCodes:["in"],matchNames:["hp petrol pump"],tags:{amenity:"fuel",brand:"Hindustan Petroleum","brand:wikidata":"Q1619375","brand:wikipedia":"en:Hindustan Petroleum",name:"HP",official_name:"Hindustan Petroleum"}},"amenity/fuel|Harnois":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Harnois","brand:wikidata":"Q61743558",name:"Harnois"}},"amenity/fuel|Hess":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Hess","brand:wikidata":"Q1615684","brand:wikipedia":"en:Hess Corporation",name:"Hess"}},"amenity/fuel|Hofer":{countryCodes:["at","si"],nomatch:["shop/supermarket|Hofer"],tags:{amenity:"fuel",brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer"}},"amenity/fuel|Holiday":{countryCodes:["us"],nomatch:["shop/convenience|Holiday"],tags:{amenity:"fuel",brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday"}},"amenity/fuel|Huck's Food & Fuel":{countryCodes:["us"],nomatch:["shop/convenience|Huck's Food & Fuel"],tags:{amenity:"fuel",brand:"Huck's Food & Fuel","brand:wikidata":"Q56276328","brand:wikipedia":"en:Huck's Food & Fuel",name:"Huck's Food & Fuel",short_name:"Huck's"}},"amenity/fuel|Husky":{countryCodes:["ca"],nomatch:["amenity/restaurant|Husky House","shop/convenience|Husky"],tags:{amenity:"fuel",brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",name:"Husky"}},"amenity/fuel|Hy-Vee Gas":{countryCodes:["us"],nomatch:["shop/supermarket|Hy-Vee"],tags:{amenity:"fuel",brand:"Hy-Vee Gas","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee Gas"}},"amenity/fuel|IES":{countryCodes:["it"],tags:{amenity:"fuel",brand:"IES","brand:wikidata":"Q62287387",name:"IES"}},"amenity/fuel|IP":{tags:{amenity:"fuel",brand:"IP","brand:wikidata":"Q646807","brand:wikipedia":"en:Anonima Petroli Italiana",name:"IP"}},"amenity/fuel|Indian Oil":{tags:{amenity:"fuel",brand:"Indian Oil","brand:wikidata":"Q1289348","brand:wikipedia":"en:Indian Oil Corporation",name:"Indian Oil"}},"amenity/fuel|Indian Oil Petrol Pump":{countryCodes:["in"],tags:{amenity:"fuel",brand:"Indian Oil Petrol Pump",name:"Indian Oil Petrol Pump"}},"amenity/fuel|Ingo":{countryCodes:["dk","se"],tags:{amenity:"fuel",brand:"Ingo","brand:wikidata":"Q17048617","brand:wikipedia":"en:Ingo (brand)",name:"Ingo"}},"amenity/fuel|Intermarché":{matchNames:["intermarché super"],nomatch:["shop/supermarket|Intermarché"],tags:{amenity:"fuel",brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché"}},"amenity/fuel|Ipiranga":{countryCodes:["br"],matchNames:["posto ipiranga"],tags:{amenity:"fuel",brand:"Ipiranga","brand:wikidata":"Q2081136","brand:wikipedia":"pt:Ipiranga (empresa)",name:"Ipiranga"}},"amenity/fuel|Irving":{countryCodes:["ca","us"],nomatch:["shop/convenience|Irving"],tags:{amenity:"fuel",brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving"}},"amenity/fuel|JA-SS":{countryCodes:["jp"],matchNames:["ja"],tags:{amenity:"fuel",brand:"JA-SS","brand:wikidata":"Q11225213","brand:wikipedia":"ja:JA-SS",name:"JA-SS"}},"amenity/fuel|Jet":{nomatch:["shop/clothes|Jet"],tags:{amenity:"fuel",brand:"Jet","brand:wikidata":"Q568940","brand:wikipedia":"en:Jet (brand)",name:"Jet"}},"amenity/fuel|Jetti":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Jetti","brand:wikidata":"Q62288720",name:"Jetti"}},"amenity/fuel|Kadoil":{tags:{amenity:"fuel",brand:"Kadoil",name:"Kadoil"}},"amenity/fuel|Kangaroo Express":{countryCodes:["us"],nomatch:["shop/convenience|Kangaroo Express"],tags:{amenity:"fuel",brand:"Kangaroo Express","brand:wikidata":"Q61747408",name:"Kangaroo Express",short_name:"Kangaroo"}},"amenity/fuel|Kastrati":{tags:{amenity:"fuel",brand:"Kastrati",name:"Kastrati"}},"amenity/fuel|Kobil":{countryCodes:["bi","et","ke","rw","tz","ug","zm"],tags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"}},"amenity/fuel|Krist":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Krist","brand:wikidata":"Q77885501",name:"Krist"}},"amenity/fuel|Kroger":{matchNames:["kroger fuel","kroger gas"],nomatch:["shop/supermarket|Kroger"],tags:{amenity:"fuel",brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger"}},"amenity/fuel|Kum & Go":{countryCodes:["us"],nomatch:["shop/convenience|Kum & Go"],tags:{amenity:"fuel",brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go"}},"amenity/fuel|Kwik Fill":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Kwik Fill",name:"Kwik Fill"}},"amenity/fuel|Kwik Trip":{countryCodes:["us"],nomatch:["shop/convenience|Kwik Trip"],tags:{amenity:"fuel",brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip"}},"amenity/fuel|Liberty":{countryCodes:["au","us"],nomatch:["amenity/bank|Liberty Bank"],tags:{amenity:"fuel",brand:"Liberty",name:"Liberty"}},"amenity/fuel|Lotos":{countryCodes:["pl"],nomatch:["amenity/fuel|Lotos Optima"],tags:{amenity:"fuel",brand:"Lotos","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos"}},"amenity/fuel|Lotos Optima":{countryCodes:["pl"],nomatch:["amenity/fuel|Lotos"],tags:{amenity:"fuel",brand:"Lotos Optima","brand:wikidata":"Q1256909","brand:wikipedia":"pl:Grupa Lotos",name:"Lotos Optima"}},"amenity/fuel|Love's":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's"}},"amenity/fuel|Lukoil":{tags:{amenity:"fuel",brand:"Lukoil","brand:wikidata":"Q329347","brand:wikipedia":"en:Lukoil",name:"Lukoil"}},"amenity/fuel|MEROIL":{countryCodes:["es"],tags:{amenity:"fuel",brand:"MEROIL","brand:wikidata":"Q62292559",name:"MEROIL"}},"amenity/fuel|MOL":{tags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"}},"amenity/fuel|MRS":{countryCodes:["ng"],tags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"}},"amenity/fuel|Mac's":{countryCodes:["ca"],nomatch:["shop/convenience|Mac's"],tags:{amenity:"fuel",brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's"}},"amenity/fuel|MacEwen":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"MacEwen","brand:wikidata":"Q61740335",name:"MacEwen"}},"amenity/fuel|Marathon":{matchNames:["marathon gas"],nomatch:["shop/convenience|Marathon"],tags:{amenity:"fuel",brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon"}},"amenity/fuel|Maverik":{countryCodes:["us"],nomatch:["shop/convenience|Maverik"],tags:{amenity:"fuel",brand:"Maverik","brand:wikidata":"Q64149010","brand:wikipedia":"en:Maverik, Inc.",name:"Maverik"}},"amenity/fuel|Maxol":{countryCodes:["gb","ie"],tags:{amenity:"fuel",brand:"Maxol","brand:wikidata":"Q3302837","brand:wikipedia":"en:Maxol",name:"Maxol"}},"amenity/fuel|Meijer":{countryCodes:["us"],nomatch:["shop/supermarket|Meijer"],tags:{amenity:"fuel",brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer"}},"amenity/fuel|Metano":{countryCodes:["it"],tags:{amenity:"fuel",brand:"Metano","brand:wikidata":"Q62294765",name:"Metano"}},"amenity/fuel|Migrol":{countryCodes:["ch"],tags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"}},"amenity/fuel|Mobil":{matchNames:["mobile"],nomatch:["shop/convenience|Mobil Mart"],tags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"}},"amenity/fuel|Mohawk":{countryCodes:["ca"],matchNames:["mohawk oil"],tags:{amenity:"fuel",brand:"Mohawk","brand:wikidata":"Q6893796","brand:wikipedia":"en:Mohawk Oil",name:"Mohawk"}},"amenity/fuel|Moil":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Moil","brand:wikidata":"Q62296914",name:"Moil"}},"amenity/fuel|Morrisons":{countryCodes:["gb"],nomatch:["shop/supermarket|Morrisons"],tags:{amenity:"fuel",brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons"}},"amenity/fuel|Moya":{countryCodes:["pl"],tags:{amenity:"fuel",brand:"Moya","brand:wikidata":"Q62297700",name:"Moya"}},"amenity/fuel|Murco":{countryCodes:["gb"],matchNames:["murco petroleum"],tags:{amenity:"fuel",brand:"Murco","brand:wikidata":"Q16998281","brand:wikipedia":"en:Murco Petroleum",name:"Murco"}},"amenity/fuel|Murphy USA":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Murphy USA","brand:wikidata":"Q19604459","brand:wikipedia":"en:Murphy USA",name:"Murphy USA"}},"amenity/fuel|N1":{countryCodes:["is"],tags:{amenity:"fuel",brand:"N1",name:"N1"}},"amenity/fuel|NP":{countryCodes:["tt"],tags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"}},"amenity/fuel|Neste":{tags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"}},"amenity/fuel|OIL!":{tags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"}},"amenity/fuel|OK":{countryCodes:["dk"],tags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"}},"amenity/fuel|OKQ8":{countryCodes:["se"],tags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"}},"amenity/fuel|OMV":{tags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"}},"amenity/fuel|Octa+":{tags:{amenity:"fuel",brand:"Octa+",name:"Octa+"}},"amenity/fuel|Oilibya":{matchNames:["oilibia","oilibiya","oillibia","oilliby","oillibya","oillybia","oilybia","olibya","olybia"],tags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"}},"amenity/fuel|Olerex":{countryCodes:["ee"],tags:{amenity:"fuel",brand:"Olerex","brand:wikidata":"Q16931205","brand:wikipedia":"et:AS Olerex",name:"Olerex"}},"amenity/fuel|Opet":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"}},"amenity/fuel|Orlen":{countryCodes:["lt","pl"],nomatch:["shop/convenience|Orlen"],tags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"}},"amenity/fuel|Oxxo":{nomatch:["shop/convenience|Oxxo"],tags:{amenity:"fuel",brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo"}},"amenity/fuel|PSO":{countryCodes:["pk"],matchNames:["pso petrol pump"],tags:{amenity:"fuel",brand:"PSO","brand:wikidata":"Q2741455","brand:wikipedia":"en:Pakistan State Oil",name:"PSO"}},"amenity/fuel|PT":{countryCodes:["th"],tags:{amenity:"fuel",brand:"PT","brand:wikidata":"Q62298612",name:"PT"}},"amenity/fuel|PTT":{nomatch:["amenity/post_office|PTT"],tags:{amenity:"fuel",brand:"PTT","brand:wikidata":"Q1810389","brand:wikipedia":"en:PTT Public Company Limited",name:"PTT"}},"amenity/fuel|PV Oil":{tags:{amenity:"fuel",brand:"PV Oil","brand:wikidata":"Q2089536","brand:wikipedia":"en:Petrovietnam",name:"PV Oil"}},"amenity/fuel|Pacific Pride":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Pacific Pride","brand:wikidata":"Q7122637","brand:wikipedia":"en:Pacific Pride",name:"Pacific Pride"}},"amenity/fuel|Pecsa":{countryCodes:["pe"],tags:{amenity:"fuel",brand:"Pecsa","brand:wikidata":"Q62299262",name:"Pecsa"}},"amenity/fuel|Pemex":{countryCodes:["mx"],tags:{amenity:"fuel",brand:"Pemex","brand:wikidata":"Q871308","brand:wikipedia":"en:Pemex",name:"Pemex"}},"amenity/fuel|Pertamina":{countryCodes:["id"],tags:{amenity:"fuel",brand:"Pertamina","brand:wikidata":"Q1641044","brand:wikipedia":"en:Pertamina",name:"Pertamina"}},"amenity/fuel|Petro":{countryCodes:["ca","us"],matchNames:["petro stopping center"],tags:{alt_name:"Petro Stopping Centers",amenity:"fuel",brand:"Petro","brand:wikidata":"Q64051305",name:"Petro"}},"amenity/fuel|Petro-Canada":{countryCodes:["ca"],nomatch:["shop/convenience|Petro-Canada"],tags:{amenity:"fuel",brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada"}},"amenity/fuel|Petro-T":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Petro-T","brand:wikidata":"Q61743540",name:"Petro-T"}},"amenity/fuel|PetroPerú":{countryCodes:["pe"],tags:{amenity:"fuel",brand:"PetroPerú","brand:wikidata":"Q2506390","brand:wikipedia":"es:Petroperú",name:"PetroPerú"}},"amenity/fuel|Petrochina":{countryCodes:["cn"],tags:{amenity:"fuel",brand:"Petrochina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"Petrochina"}},"amenity/fuel|Petroecuador":{countryCodes:["ec"],tags:{amenity:"fuel",brand:"Petroecuador","brand:wikidata":"Q1812822","brand:wikipedia":"en:Petroecuador",name:"Petroecuador"}},"amenity/fuel|Petrol Ofisi":{tags:{amenity:"fuel",brand:"Petrol Ofisi","brand:wikidata":"Q1278087","brand:wikipedia":"en:Petrol Ofisi",name:"Petrol Ofisi"}},"amenity/fuel|Petrolimex":{tags:{amenity:"fuel",brand:"Petrolimex","brand:wikidata":"Q10831598","brand:wikipedia":"en:Petrolimex",name:"Petrolimex"}},"amenity/fuel|Petrolina":{countryCodes:["cy"],tags:{amenity:"fuel",brand:"Petrolina","brand:wikidata":"Q17013948","brand:wikipedia":"en:Petrolina (company)",name:"Petrolina"}},"amenity/fuel|Petrom":{tags:{amenity:"fuel",brand:"Petrom","brand:wikidata":"Q1755034","brand:wikipedia":"en:Petrom",name:"Petrom"}},"amenity/fuel|Petron":{countryCodes:["my","ph"],tags:{amenity:"fuel",brand:"Petron","brand:wikidata":"Q7179011","brand:wikipedia":"en:Petron Corporation",name:"Petron"}},"amenity/fuel|Petronas":{tags:{amenity:"fuel",brand:"Petronas","brand:wikidata":"Q221692","brand:wikipedia":"en:Petronas",name:"Petronas"}},"amenity/fuel|Petronor":{countryCodes:["es"],tags:{amenity:"fuel",brand:"Petronor","brand:wikidata":"Q1726547","brand:wikipedia":"es:Petronor",name:"Petronor"}},"amenity/fuel|Phillips 66":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Phillips 66","brand:wikidata":"Q1656230","brand:wikipedia":"en:Phillips 66",name:"Phillips 66"}},"amenity/fuel|Phoenix":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Phoenix","brand:wikidata":"Q7186949","brand:wikipedia":"en:Phoenix Petroleum",name:"Phoenix"}},"amenity/fuel|Pilot":{countryCodes:["ca","us"],matchNames:["pilot travel centers"],tags:{amenity:"fuel",brand:"Pilot","brand:wikidata":"Q64128179",name:"Pilot"}},"amenity/fuel|Pioneer":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Pioneer","brand:wikidata":"Q7196684","brand:wikipedia":"en:Pioneer Energy",name:"Pioneer"}},"amenity/fuel|Power":{countryCodes:["be"],nomatch:["shop/electronics|Power"],tags:{amenity:"fuel",brand:"Power",name:"Power"}},"amenity/fuel|Preem":{countryCodes:["pl","se"],tags:{amenity:"fuel",brand:"Preem","brand:wikidata":"Q598835","brand:wikipedia":"en:Preem",name:"Preem"}},"amenity/fuel|Primax~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332857",name:"Primax"}},"amenity/fuel|Primax~(Peru)":{countryCodes:["pe"],tags:{amenity:"fuel",brand:"Primax","brand:wikidata":"Q62332638",name:"Primax"}},"amenity/fuel|Prio":{countryCodes:["pt"],tags:{amenity:"fuel",brand:"Prio","brand:wikidata":"Q62530421",name:"Prio"}},"amenity/fuel|Puma":{nomatch:["shop/clothes|Puma"],tags:{amenity:"fuel",brand:"Puma","brand:wikidata":"Q7259769","brand:wikipedia":"en:Puma Energy",name:"Puma"}},"amenity/fuel|Q1":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Q1","brand:wikidata":"Q62086498",name:"Q1"}},"amenity/fuel|Q8":{countryCodes:["be","dk","es","it","lu","nl","pt"],tags:{amenity:"fuel",brand:"Q8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"Q8"}},"amenity/fuel|Q8 Easy":{countryCodes:["be","it"],tags:{amenity:"fuel",brand:"Q8 Easy","brand:wikidata":"Q1806948","brand:wikipedia":"nl:Q8 Easy",name:"Q8 Easy"}},"amenity/fuel|Qstar":{countryCodes:["se"],tags:{amenity:"fuel",brand:"Qstar","brand:wikidata":"Q10647961","brand:wikipedia":"sv:Qstar",name:"Qstar"}},"amenity/fuel|QuickChek":{countryCodes:["us"],nomatch:["shop/convenience|QuickChek"],tags:{amenity:"fuel",brand:"QuickChek","brand:wikidata":"Q7271689","brand:wikipedia":"en:QuickChek",name:"QuickChek"}},"amenity/fuel|QuikTrip":{nomatch:["shop/convenience|QuikTrip"],tags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip",short_name:"QT"}},"amenity/fuel|RaceTrac":{nomatch:["shop/convenience|RaceTrac"],tags:{amenity:"fuel",brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac"}},"amenity/fuel|RaceWay":{countryCodes:["us"],nomatch:["shop/convenience|RaceWay"],tags:{amenity:"fuel",brand:"RaceWay","brand:wikidata":"Q73039084",name:"RaceWay"}},"amenity/fuel|Raiffeisen":{countryCodes:["de"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль"],tags:{amenity:"fuel",brand:"Raiffeisen",name:"Raiffeisen"}},"amenity/fuel|Repsol":{tags:{amenity:"fuel",brand:"Repsol","brand:wikidata":"Q174747","brand:wikipedia":"es:Repsol",name:"Repsol"}},"amenity/fuel|Revoil":{countryCodes:["gr"],tags:{amenity:"fuel",brand:"Revoil","brand:wikidata":"Q62530755",name:"Revoil"}},"amenity/fuel|Rompetrol":{tags:{amenity:"fuel",brand:"Rompetrol","brand:wikidata":"Q1788862","brand:wikipedia":"en:Rompetrol",name:"Rompetrol"}},"amenity/fuel|Royal Farms":{countryCodes:["us"],nomatch:["shop/convenience|Royal Farms"],tags:{amenity:"fuel",brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms"}},"amenity/fuel|Rubis":{tags:{amenity:"fuel",brand:"Rubis","brand:wikidata":"Q3446514","brand:wikipedia":"en:Rubis (company)",name:"Rubis"}},"amenity/fuel|Rutter's":{countryCodes:["us"],nomatch:["shop/convenience|Rutter's"],tags:{amenity:"fuel",brand:"Rutter's","brand:wikidata":"Q7383544","brand:wikipedia":"en:Rutter's",name:"Rutter's"}},"amenity/fuel|SK주유소":{countryCodes:["kr"],tags:{amenity:"fuel",brand:"SK주유소","brand:ko":"SK주유소",name:"SK주유소","name:ko":"SK주유소"}},"amenity/fuel|SP":{tags:{amenity:"fuel",brand:"SP",name:"SP"}},"amenity/fuel|Safeway":{nomatch:["amenity/pharmacy|Safeway","shop/supermarket|Safeway"],tags:{amenity:"fuel",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway"}},"amenity/fuel|Sainsbury's":{countryCodes:["gb"],nomatch:["shop/supermarket|Sainsbury's"],tags:{amenity:"fuel",brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's"}},"amenity/fuel|Sam's Club":{matchNames:["sams club fuel center","sams club gas"],nomatch:["shop/wholesale|Sam's Club"],tags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club"}},"amenity/fuel|Sasol":{countryCodes:["za"],tags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"}},"amenity/fuel|Sea Oil":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"}},"amenity/fuel|Sheetz":{nomatch:["shop/convenience|Sheetz"],tags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"}},"amenity/fuel|Shell":{matchNames:["posto shell","shell gas station","shell petrol station","shell station","station shell"],nomatch:["amenity/fuel|Shell Express","shop/convenience|Shell Select"],tags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"}},"amenity/fuel|Shell Express":{nomatch:["amenity/fuel|Shell","shop/convenience|Shell Select"],tags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"}},"amenity/fuel|Sinclair":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"}},"amenity/fuel|Slovnaft":{countryCodes:["cz","pl","sk"],tags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"}},"amenity/fuel|Socar":{tags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"}},"amenity/fuel|Sokimex":{countryCodes:["kh"],tags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"}},"amenity/fuel|Sonangol":{tags:{amenity:"fuel",brand:"Sonangol",name:"Sonangol"}},"amenity/fuel|Sonic":{countryCodes:["ca"],nomatch:["amenity/fast_food|Sonic"],tags:{amenity:"fuel",brand:"Sonic",name:"Sonic"}},"amenity/fuel|Speedway":{nomatch:["shop/convenience|Speedway"],tags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"}},"amenity/fuel|Sprint":{countryCodes:["de"],nomatch:["shop/mobile_phone|Sprint"],tags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"}},"amenity/fuel|St1":{countryCodes:["fi","se"],tags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"}},"amenity/fuel|Star":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"}},"amenity/fuel|Star Oil":{tags:{amenity:"fuel",brand:"Star Oil",name:"Star Oil"}},"amenity/fuel|Station Service E. Leclerc":{matchNames:["e. leclerc"],tags:{amenity:"fuel",brand:"E.Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Station Service E. Leclerc"}},"amenity/fuel|Statoil":{countryCodes:["dk","ee","ie","pl","ru","se"],tags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"}},"amenity/fuel|Stewart's":{countryCodes:["us"],nomatch:["shop/convenience|Stewart's"],tags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"}},"amenity/fuel|Sunoco":{nomatch:["shop/convenience|Sunoco"],tags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"}},"amenity/fuel|Super U":{countryCodes:["fr"],nomatch:["shop/convenience|Utile","shop/supermarket|Hyper U","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"}},"amenity/fuel|Susco":{countryCodes:["th"],tags:{amenity:"fuel",brand:"Susco",name:"Susco"}},"amenity/fuel|TA":{countryCodes:["us"],tags:{amenity:"fuel",brand:"TA","brand:wikidata":"Q7835892","brand:wikipedia":"en:TravelCenters of America",name:"TA"}},"amenity/fuel|Tamoil":{countryCodes:["ch","de","es","fr","it","nl"],tags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"}},"amenity/fuel|Tango":{countryCodes:["nl"],tags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"}},"amenity/fuel|Tanka":{countryCodes:["se"],tags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"}},"amenity/fuel|Teboil":{countryCodes:["fi"],tags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"}},"amenity/fuel|Tela":{countryCodes:["kh"],tags:{amenity:"fuel",brand:"Tela","brand:wikidata":"Q62534875",name:"Tela"}},"amenity/fuel|Tempo":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Tempo","brand:wikidata":"Q62535175",name:"Tempo"}},"amenity/fuel|Terpel":{tags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"}},"amenity/fuel|Terrible's":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Terrible's","brand:wikidata":"Q7703648","brand:wikipedia":"en:Terrible Herbst",name:"Terrible's"}},"amenity/fuel|Tesco":{nomatch:["shop/convenience|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco"}},"amenity/fuel|Tesoro":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Tesoro",name:"Tesoro"}},"amenity/fuel|Texaco":{nomatch:["shop/convenience|Texaco"],tags:{amenity:"fuel",brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco"}},"amenity/fuel|Thorntons":{countryCodes:["us"],nomatch:["shop/confectionery|Thorntons","shop/convenience|Thorntons"],tags:{amenity:"fuel",brand:"Thorntons","brand:wikidata":"Q7796584","brand:wikipedia":"en:Thorntons LLC",name:"Thorntons"}},"amenity/fuel|Tinq":{countryCodes:["nl"],tags:{amenity:"fuel",brand:"Tinq","brand:wikidata":"Q2132028","brand:wikipedia":"nl:Tinq",name:"Tinq"}},"amenity/fuel|Top":{countryCodes:["ie"],matchNames:["top oil"],nomatch:["shop/clothes|Topshop"],tags:{amenity:"fuel",brand:"Top","brand:wikidata":"Q7693933","brand:wikipedia":"en:Tedcastles Oil Products",name:"Top",official_name:"Tedcastles Oil Products"}},"amenity/fuel|Topaz":{countryCodes:["ie"],tags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"}},"amenity/fuel|Total":{matchNames:["station total"],nomatch:["shop/convenience|Total"],tags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"}},"amenity/fuel|Total Access":{countryCodes:["fr"],tags:{amenity:"fuel",brand:"Total Access","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total Access"}},"amenity/fuel|TotalErg":{countryCodes:["it"],tags:{amenity:"fuel",brand:"TotalErg","brand:wikidata":"Q3995933","brand:wikipedia":"it:TotalErg",name:"TotalErg"}},"amenity/fuel|Turkey Hill":{countryCodes:["us"],nomatch:["shop/convenience|Turkey Hill"],tags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"}},"amenity/fuel|Turmöl":{countryCodes:["at"],tags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"}},"amenity/fuel|UDF Fuel":{countryCodes:["us"],matchNames:["udf fuels","united dairy farmers"],nomatch:["shop/convenience|United Dairy Farmers"],tags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"}},"amenity/fuel|USA Gasoline":{countryCodes:["us"],tags:{amenity:"fuel",brand:"USA Gasoline","brand:wikidata":"Q17126373","brand:wikipedia":"en:USA Gasoline",name:"USA Gasoline"}},"amenity/fuel|Ultramar":{nomatch:["shop/convenience|Ultramar"],tags:{amenity:"fuel",brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar"}},"amenity/fuel|United":{countryCodes:["au"],matchNames:["united petroleum"],nomatch:["amenity/bank|United Bank~(Connecticut)","amenity/bank|United Bank~(West Virginia)","shop/convenience|United"],tags:{amenity:"fuel",brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United"}},"amenity/fuel|Uno":{countryCodes:["bz","cr","gt","hn","ni","sv"],tags:{amenity:"fuel",brand:"Uno","brand:wikidata":"Q62535574",name:"Uno"}},"amenity/fuel|Uno-X":{countryCodes:["dk"],tags:{amenity:"fuel",brand:"Uno-X","brand:wikidata":"Q3362746","brand:wikipedia":"en:Uno-X",name:"Uno-X"}},"amenity/fuel|Valero":{nomatch:["shop/convenience|Valero"],tags:{amenity:"fuel",brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero"}},"amenity/fuel|Viada":{countryCodes:["lt","lv"],tags:{amenity:"fuel",brand:"Viada","brand:wikidata":"Q12663942","brand:wikipedia":"en:Lukoil Baltija",name:"Viada"}},"amenity/fuel|Vito":{countryCodes:["fr"],tags:{amenity:"fuel",brand:"Vito","brand:wikidata":"Q62536473",name:"Vito"}},"amenity/fuel|WOG":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"WOG","brand:wikidata":"Q12072939","brand:wikipedia":"en:WOG (gas stations)",name:"WOG"}},"amenity/fuel|Walmart":{nomatch:["shop/department_store|Walmart","shop/supermarket|Walmart Neighborhood Market","shop/supermarket|Walmart Supercenter"],tags:{amenity:"fuel",brand:"Walmart","brand:wikidata":"Q62606411","brand:wikipedia":"en:Walmart",name:"Walmart"}},"amenity/fuel|Wawa":{nomatch:["shop/convenience|Wawa"],tags:{amenity:"fuel",brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa"}},"amenity/fuel|Westfalen":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Westfalen","brand:wikidata":"Q1411209","brand:wikipedia":"en:Westfalen AG",name:"Westfalen"}},"amenity/fuel|Woolworths Petrol":{countryCodes:["au"],nomatch:["shop/convenience|Woolworths Petrol"],tags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol"}},"amenity/fuel|XTR":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"XTR","brand:wikidata":"Q62537250",name:"XTR"}},"amenity/fuel|YPF":{tags:{amenity:"fuel",brand:"YPF","brand:wikidata":"Q2006989","brand:wikipedia":"en:YPF",name:"YPF"}},"amenity/fuel|YX Energi":{countryCodes:["dk","no"],tags:{amenity:"fuel",brand:"YX Energi","brand:wikidata":"Q4580519","brand:wikipedia":"en:YX Energi",name:"YX Energi"}},"amenity/fuel|Z":{countryCodes:["nz"],nomatch:["shop/clothes|Z"],tags:{amenity:"fuel",brand:"Z","brand:wikidata":"Q8063337","brand:wikipedia":"en:Z Energy",name:"Z"}},"amenity/fuel|bft":{countryCodes:["de"],tags:{amenity:"fuel",brand:"bft","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"bft"}},"amenity/fuel|bi1":{countryCodes:["fr"],nomatch:["shop/supermarket|bi1"],tags:{amenity:"fuel",brand:"bi1",name:"bi1"}},"amenity/fuel|din-X":{countryCodes:["se"],tags:{amenity:"fuel",brand:"din-X","brand:wikidata":"Q10472858","brand:wikipedia":"sv:Din-X",name:"din-X"}},"amenity/fuel|uSmile 昆仑好客":{countryCodes:["cn"],matchNames:["usmile","usmile 便利店","昆仑好","昆仑好客"],nomatch:["shop/convenience|uSmile 昆仑好客"],tags:{amenity:"fuel",brand:"uSmile 昆仑好客","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"昆仑好客",name:"uSmile 昆仑好","name:en":"uSmile","name:zh":"昆仑好客"}},"amenity/fuel|Авіас":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"Авіас","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"Авіас"}},"amenity/fuel|БРСМ-Нафта":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"}},"amenity/fuel|Башнефть":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"}},"amenity/fuel|Белоруснефть":{countryCodes:["by"],tags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"}},"amenity/fuel|Газпромнефть":{countryCodes:["by","kg","kz","ru","tj"],matchNames:["газпром"],tags:{amenity:"fuel",brand:"Газпромнефть","brand:wikidata":"Q1461799","brand:wikipedia":"en:Gazprom Neft",name:"Газпромнефть"}},"amenity/fuel|Гелиос":{countryCodes:["kz"],matchNames:["helios"],tags:{amenity:"fuel",brand:"Гелиос","brand:en":"Helios","brand:wikidata":"Q62286471",name:"Гелиос","name:en":"Helios"}},"amenity/fuel|Движение":{tags:{amenity:"fuel",brand:"Движение",name:"Движение"}},"amenity/fuel|ЕКА":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"ЕКА","brand:wikidata":"Q62543029",name:"ЕКА"}},"amenity/fuel|КЛО":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"КЛО","brand:en":"Klo","brand:wikidata":"Q60966526","brand:wikipedia":"ru:КЛО (сеть АЗС)",name:"КЛО","name:en":"Klo"}},"amenity/fuel|КазМунайГаз":{countryCodes:["kz"],nomatch:["shop/convenience|КазМунайГаз"],tags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"}},"amenity/fuel|Лукойл":{matchNames:["лукоил"],nomatch:["shop/convenience|Лукойл"],tags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"}},"amenity/fuel|Макпетрол":{countryCodes:["mk"],tags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"}},"amenity/fuel|НК Альянс":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"НК Альянс","brand:en":"Alliance Oil","brand:ru":"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс","name:en":"Alliance Oil","name:ru":"НК Альянс"}},"amenity/fuel|Нефтьмагистраль":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Нефтьмагистраль","brand:en":"Neftmagistral","brand:wikidata":"Q62544323",name:"Нефтьмагистраль","name:en":"Neftmagistral"}},"amenity/fuel|ОККО":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"}},"amenity/fuel|ОМВ":{countryCodes:["bg","rs"],tags:{amenity:"fuel",brand:"ОМВ","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"ОМВ"}},"amenity/fuel|ПТК":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:ru":"ПТК","brand:wikidata":"Q4360193","brand:wikipedia":"ru:Петербургская топливная компания",name:"ПТК","name:en":"The Petersburg Fuel Company","name:ru":"ПТК"}},"amenity/fuel|Петрол":{countryCodes:["bg"],tags:{amenity:"fuel",brand:"Петрол","brand:en":"Petrol AD","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол","name:en":"Petrol AD"}},"amenity/fuel|Роснефть":{tags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:ru":"Роснефть","brand:wikidata":"Q1141123","brand:wikipedia":"ru:Роснефть",name:"Роснефть","name:en":"Rosneft","name:ru":"Роснефть"}},"amenity/fuel|Сургутнефтегаз":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:ru":"Сургутнефтегаз","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas","name:ru":"Сургутнефтегаз"}},"amenity/fuel|ТНК":{countryCodes:["ru","ua"],tags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"}},"amenity/fuel|Татнефтепродукт":{countryCodes:["ru"],tags:{amenity:"fuel",brand:"Татнефтепродукт","brand:en":"Tatnefteprodukt","brand:ru":"Татнефтепродукт","brand:wikidata":"Q62545686",name:"Татнефтепродукт","name:en":"Tatnefteprodukt","name:ru":"Татнефтепродукт"}},"amenity/fuel|Татнефть":{countryCodes:["ru","ua"],tags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:ru":"Татнефть","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft","name:ru":"Татнефть"}},"amenity/fuel|Укрнафта":{countryCodes:["ua"],tags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:uk":"Укрнафта","brand:wikidata":"Q2447961","brand:wikipedia":"uk:Укрнафта",name:"Укрнафта","name:en":"Ukrnafta","name:uk":"Укрнафта"}},"amenity/fuel|דור אלון":{countryCodes:["il"],tags:{amenity:"fuel",brand:"דור אלון","brand:en":"Dor Alon","brand:he":"דור אלון","brand:wikidata":"Q16130352","brand:wikipedia":"he:דור אלון אנרגיה בישראל (1988)",name:"דור אלון","name:en":"Dor Alon","name:he":"דור אלון"}},"amenity/fuel|סונול":{countryCodes:["il"],tags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:he":"סונול","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol","name:he":"סונול"}},"amenity/fuel|פז":{countryCodes:["il"],tags:{amenity:"fuel",brand:"פז","brand:en":"Paz","brand:he":"פז","brand:wikidata":"Q2211731","brand:wikipedia":"en:Paz Oil Company",name:"פז","name:en":"Paz","name:he":"פז"}},"amenity/fuel|ادنوك":{countryCodes:["ae"],tags:{amenity:"fuel",brand:"ادنوك","brand:ar":"ادنوك","brand:en":"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ادنوك","name:ar":"ادنوك","name:en":"ADNOC"}},"amenity/fuel|اينوك":{tags:{amenity:"fuel",brand:"اينوك",name:"اينوك"}},"amenity/fuel|توتال":{tags:{amenity:"fuel",brand:"توتال",name:"توتال"}},"amenity/fuel|บางจาก":{countryCodes:["th"],tags:{amenity:"fuel",brand:"บางจาก","brand:en":"Bangchak","brand:th":"บางจาก","brand:wikidata":"Q6579719","brand:wikipedia":"th:บางจาก คอร์ปอเรชัน",name:"บางจาก","name:en":"Bangchak","name:th":"บางจาก"}},"amenity/fuel|ป.ต.ท.":{countryCodes:["th"],tags:{amenity:"fuel",brand:"ป.ต.ท.","brand:en":"PTT","brand:th":"ป.ต.ท.","brand:wikidata":"Q1810389","brand:wikipedia":"th:ปตท.",name:"ป.ต.ท.","name:en":"PTT","name:th":"ป.ต.ท."}},"amenity/fuel|เชลล์":{countryCodes:["th"],tags:{amenity:"fuel",brand:"เชลล์","brand:en":"Shell","brand:th":"เชลล์","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"เชลล์","name:en":"Shell","name:th":"เชลล์"}},"amenity/fuel|เอสโซ่":{countryCodes:["th"],tags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:th":"เอสโซ่","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso","name:th":"เอสโซ่"}},"amenity/fuel|エッソ":{countryCodes:["jp"],matchNames:["エッソ石油"],tags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:ja":"エッソ","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso","name:ja":"エッソ"}},"amenity/fuel|エネオス":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:ja":"エネオス","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy","name:ja":"エネオス"}},"amenity/fuel|キグナス石油":{countryCodes:["jp"],matchNames:["キグナス"],tags:{amenity:"fuel",brand:"キグナス石油","brand:en":"KYGNUS","brand:ja":"キグナス石油","brand:wikidata":"Q11296629","brand:wikipedia":"ja:キグナス石油",name:"キグナス石油","name:en":"Kygnus","name:ja":"キグナス石油"}},"amenity/fuel|コスモ石油":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:ja":"コスモ石油","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company","name:ja":"コスモ石油"}},"amenity/fuel|ゼネラル":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"ゼネラル","brand:en":"Tonen General","brand:ja":"ゼネラル","brand:wikidata":"Q11528048","brand:wikipedia":"ja:東燃ゼネラル石油",name:"ゼネラル","name:en":"Tonen General","name:ja":"ゼネラル"}},"amenity/fuel|モービル":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"モービル","brand:en":"Mobil","brand:ja":"モービル","brand:wikidata":"Q3088656","brand:wikipedia":"ja:モービル (ブランド)",name:"モービル","name:en":"Mobil","name:ja":"モービル"}},"amenity/fuel|中国石化 Sinopec":{countryCodes:["cn"],matchNames:["sinopec","sinopec fuel","中国石化","中国石化加油站"],tags:{amenity:"fuel",brand:"中国石化 Sinopec","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec","brand:zh":"中国石化",name:"中国石化 Sinopec","name:en":"Sinopec","name:zh":"中国石化"}},"amenity/fuel|中国石油":{countryCodes:["cn"],matchNames:["中油加油站"],tags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina","brand:zh":"中国石油",name:"中国石油","name:en":"PetroChina","name:zh":"中国石油"}},"amenity/fuel|全國加油站":{countryCodes:["tw"],tags:{amenity:"fuel",brand:"全國加油站","brand:en":"NPC","brand:wikidata":"Q20410455","brand:wikipedia":"zh:全國加油站","brand:zh":"全國加油站",name:"全國加油站","name:en":"NPC","name:zh":"全國加油站"}},"amenity/fuel|出光":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:ja":"出光","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan","name:ja":"出光"}},"amenity/fuel|台塑石油":{tags:{amenity:"fuel",brand:"台塑石油",name:"台塑石油"}},"amenity/fuel|台灣中油":{countryCodes:["tw"],matchNames:["中油"],tags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation, Taiwan","brand:zh":"台灣中油",name:"台灣中油","name:en":"CPC Corporation, Taiwan","name:zh":"台灣中油"}},"amenity/fuel|昭和シェル":{countryCodes:["jp"],matchNames:["昭和シェル石油"],tags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:ja":"昭和シェル","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu","name:ja":"昭和シェル"}},"amenity/fuel|福懋加油站":{tags:{amenity:"fuel",brand:"福懋加油站",name:"福懋加油站"}},"amenity/gambling|Buzz Bingo":{countryCodes:["gb"],matchTags:["leisure/adult_gaming_centre"],tags:{amenity:"gambling",brand:"Buzz Bingo","brand:wikidata":"Q60746117","brand:wikipedia":"en:Buzz Bingo",gambling:"bingo;slot_machines",name:"Buzz Bingo"}},"amenity/hospital|Cruz Roja":{tags:{amenity:"hospital",brand:"Cruz Roja",name:"Cruz Roja"}},"amenity/hospital|IMSS":{tags:{amenity:"hospital",brand:"IMSS",name:"IMSS"}},"amenity/hospital|Select Specialty Hospital":{countryCodes:["us"],matchNames:["select speciality"],tags:{amenity:"hospital",brand:"Select Specialty Hospital","brand:wikidata":"Q66360902",healthcare:"hospital",name:"Select Specialty Hospital"}},"amenity/hospital|Shriners Hospital for Children":{countryCodes:["us"],matchNames:["shriners burn hospital","shriners hospital","shriners hospitals for children"],tags:{amenity:"hospital",brand:"Shriners Hospitals for Children","brand:wikidata":"Q7504109","brand:wikipedia":"en:Shriners Hospitals for Children",healthcare:"hospital","healthcare:speciality":"paediatrics",name:"Shriners Hospitals for Children"}},"amenity/hospital|VA Medical Center":{countryCodes:["us"],matchNames:["department of veterans affairs medical center","veterans administration","veterans administration hospital","veterans administration medical center","veterans affairs","veterans affairs hospital","veterans affairs medical center"],tags:{amenity:"hospital",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"hospital","healthcare:for":"veterans",name:"VA Medical Center",short_name:"VA"}},"amenity/hospital|Больница":{tags:{amenity:"hospital",brand:"Больница",name:"Больница"}},"amenity/hospital|Городская больница":{tags:{amenity:"hospital",brand:"Городская больница",name:"Городская больница"}},"amenity/hospital|Детская больница":{tags:{amenity:"hospital",brand:"Детская больница",name:"Детская больница"}},"amenity/hospital|Медпункт":{tags:{amenity:"hospital",brand:"Медпункт",name:"Медпункт"}},"amenity/hospital|Противотуберкулезный диспансер":{tags:{amenity:"hospital",brand:"Противотуберкулезный диспансер",name:"Противотуберкулезный диспансер"}},"amenity/hospital|Районная больница":{tags:{amenity:"hospital",brand:"Районная больница",name:"Районная больница"}},"amenity/hospital|Роддом":{tags:{amenity:"hospital",brand:"Роддом",name:"Роддом"}},"amenity/hospital|Родильный дом":{tags:{amenity:"hospital",brand:"Родильный дом",name:"Родильный дом"}},"amenity/hospital|Скорая помощь":{tags:{amenity:"hospital",brand:"Скорая помощь",name:"Скорая помощь"}},"amenity/hospital|ЦРБ":{tags:{amenity:"hospital",brand:"ЦРБ",name:"ЦРБ"}},"amenity/hospital|Центральная районная больница":{tags:{amenity:"hospital",brand:"Центральная районная больница",name:"Центральная районная больница"}},"amenity/hospital|โรงพยาบาลส่งเสริมสุขภาพตำบล":{countryCodes:["th"],tags:{amenity:"hospital",brand:"โรงพยาบาลส่งเสริมสุขภาพตำบล","brand:th":"โรงพยาบาลส่งเสริมสุขภาพตำบล",name:"โรงพยาบาลส่งเสริมสุขภาพตำบล","name:th":"โรงพยาบาลส่งเสริมสุขภาพตำบล"}},"amenity/ice_cream|33 пингвина":{tags:{amenity:"ice_cream",brand:"33 пингвина",name:"33 пингвина"}},"amenity/ice_cream|Abbott's Frozen Custard":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Abbott's Frozen Custard","brand:wikidata":"Q4664334","brand:wikipedia":"en:Abbott's Frozen Custard",name:"Abbott's Frozen Custard",short_name:"Abbott's"}},"amenity/ice_cream|Amorino":{countryCodes:["ae","ch","cz","de","es","fr","gb","gr","ie","it","lu","ma","mt","mx","nc","pt","qa","re","us"],tags:{amenity:"ice_cream",brand:"Amorino","brand:wikidata":"Q2843884","brand:wikipedia":"fr:Amorino",name:"Amorino"}},"amenity/ice_cream|Amy's Ice Creams":{tags:{amenity:"ice_cream",brand:"Amy's Ice Creams","brand:wikidata":"Q4749045","brand:wikipedia":"en:Amy's Ice Creams",name:"Amy's Ice Creams"}},"amenity/ice_cream|Andy's Frozen Custard":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Andy's Frozen Custard","brand:wikidata":"Q4760327","brand:wikipedia":"en:Andy's Frozen Custard",name:"Andy's Frozen Custard",short_name:"Andy's"}},"amenity/ice_cream|Baskin-Robbins":{tags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"}},"amenity/ice_cream|Ben & Jerry's":{tags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"}},"amenity/ice_cream|Bruster's Ice Cream":{countryCodes:["us"],matchNames:["brusters"],tags:{amenity:"ice_cream",brand:"Bruster's Ice Cream","brand:wikidata":"Q4979810","brand:wikipedia":"en:Bruster's Ice Cream",cuisine:"ice_cream",name:"Bruster's Ice Cream"}},"amenity/ice_cream|Carvel":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Carvel","brand:wikidata":"Q5047520","brand:wikipedia":"en:Carvel (franchise)",cuisine:"ice_cream",name:"Carvel",takeaway:"yes"}},"amenity/ice_cream|Cold Rock Ice Creamery":{countryCodes:["au"],tags:{amenity:"ice_cream",brand:"Cold Rock Ice Creamery","brand:wikidata":"Q2982390","brand:wikipedia":"en:Cold Rock Ice Creamery",cuisine:"ice_cream",name:"Cold Rock Ice Creamery",takeaway:"yes"}},"amenity/ice_cream|Cold Stone Creamery":{countryCodes:["ng","us"],matchNames:["cold stone"],tags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"}},"amenity/ice_cream|D'Onofrio":{countryCodes:["pe"],tags:{amenity:"ice_cream",brand:"D'Onofrio","brand:wikidata":"Q5203166","brand:wikipedia":"es:D'Onofrio",cuisine:"ice_cream",name:"D'Onofrio"}},"amenity/ice_cream|Freddo":{tags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"}},"amenity/ice_cream|Graeter's":{countryCodes:["us"],matchNames:["greaters"],tags:{amenity:"ice_cream",brand:"Graeter's","brand:wikidata":"Q5592430","brand:wikipedia":"en:Graeter's",cuisine:"ice_cream",name:"Graeter's",takeaway:"yes"}},"amenity/ice_cream|Grido":{countryCodes:["ar"],matchNames:["grido helado"],matchTags:["shop/confectionary"],tags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"}},"amenity/ice_cream|Häagen-Dazs":{tags:{amenity:"ice_cream",brand:"Häagen-Dazs","brand:wikidata":"Q1143333","brand:wikipedia":"en:Häagen-Dazs",name:"Häagen-Dazs"}},"amenity/ice_cream|La Michoacana":{countryCodes:["mx"],matchNames:["paleteria la michoacana"],tags:{amenity:"ice_cream",brand:"La Michoacana","brand:wikidata":"Q17118857","brand:wikipedia":"en:Paletería La Michoacana",name:"La Michoacana"}},"amenity/ice_cream|Marble Slab Creamery":{countryCodes:["ca","us"],tags:{amenity:"ice_cream",brand:"Marble Slab Creamery","brand:wikidata":"Q17020087","brand:wikipedia":"en:Marble Slab Creamery",cuisine:"ice_cream",name:"Marble Slab Creamery"}},"amenity/ice_cream|Menchie's":{countryCodes:["ae","bh","bs","ca","cn","gb","in","jp","kw","qa","sa","us"],matchNames:["menchie's frozen yoghurt","menchie's frozen yogurt"],tags:{amenity:"ice_cream",brand:"Menchie's","brand:wikidata":"Q6816528","brand:wikipedia":"en:Menchie's Frozen Yogurt",cuisine:"frozen_yogurt",name:"Menchie's"}},"amenity/ice_cream|Pinkberry":{tags:{amenity:"ice_cream",brand:"Pinkberry","brand:wikidata":"Q2904053","brand:wikipedia":"en:Pinkberry",cuisine:"frozen_yogurt",name:"Pinkberry",takeaway:"yes"}},"amenity/ice_cream|Ralph's Italian Ices":{countryCodes:["us"],matchNames:["ralphs famous italian ices and ice cream","ralphs italian ice","ralphs italian ices and ice cream"],tags:{amenity:"ice_cream",brand:"Ralph's Italian Ices","brand:wikidata":"Q62576909",cuisine:"ice_cream",name:"Ralph's Italian Ices",official_name:"Ralph's Famous Italian Ices"}},"amenity/ice_cream|Rita's Italian Ice":{countryCodes:["us"],matchNames:["ritas","ritas water ice"],tags:{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"}},"amenity/ice_cream|Shake's":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Shake's","brand:wikidata":"Q17032842","brand:wikipedia":"en:Shake's Frozen Custard",name:"Shake's",official_name:"Shake’s Frozen Custard"}},"amenity/ice_cream|TCBY":{tags:{amenity:"ice_cream",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY",takeaway:"yes"}},"amenity/ice_cream|Yogen Früz":{tags:{amenity:"ice_cream",brand:"Yogen Früz","brand:wikidata":"Q8054358","brand:wikipedia":"en:Yogen Früz",cuisine:"frozen_yogurt",name:"Yogen Früz",takeaway:"yes"}},"amenity/ice_cream|Yogurt Mountain":{tags:{amenity:"ice_cream",brand:"Yogurt Mountain","brand:wikidata":"Q8054427","brand:wikipedia":"en:Yogurt Mountain",cuisine:"frozen_yogurt",name:"Yogurt Mountain",takeaway:"yes"}},"amenity/ice_cream|Yogurtland":{countryCodes:["ae","au","sg","th","us","ve"],tags:{amenity:"ice_cream",brand:"Yogurtland","brand:wikidata":"Q8054428","brand:wikipedia":"en:Yogurtland",cuisine:"frozen_yogurt",name:"Yogurtland",takeaway:"yes"}},"amenity/ice_cream|smöoy":{countryCodes:["ao","ci","cn","dz","ec","es","fr","gb","gn","it","ma","pa","pe","pt","re","sa"],tags:{amenity:"ice_cream",brand:"smöoy","brand:wikidata":"Q21573945","brand:wikipedia":"es:Smöoy",name:"smöoy",official_name:"Softy Cream"}},"amenity/ice_cream|sweetFrog":{countryCodes:["us"],matchNames:["sweetfrog frozen yogurt","sweetfrog premium frozen yogurt"],tags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"}},"amenity/ice_cream|サーティワンアイスクリーム":{countryCodes:["jp"],tags:{amenity:"ice_cream",brand:"バスキン・ロビンス","brand:en":"Baskin-Robbins","brand:ja":"バスキン・ロビンス","brand:wikidata":"Q584601","brand:wikipedia":"ja:バスキン・ロビンス",cuisine:"ice_cream",name:"サーティワンアイスクリーム","name:en":"Baskin-Robbins","name:ja":"サーティワンアイスクリーム"}},"amenity/kindergarten|Children's Learning Adventure":{countryCodes:["us"],tags:{after_school:"yes",amenity:"kindergarten",brand:"Children's Learning Adventure","brand:wikidata":"Q64821213","brand:wikipedia":"en:Children's Learning Adventure",fee:"yes","isced:level":"0",name:"Children's Learning Adventure",nursery:"yes",preschool:"yes",short_name:"CLA"}},"amenity/kindergarten|Childtime":{countryCodes:["us"],matchNames:["childtime learning center","childtime learning centers"],tags:{amenity:"kindergarten",brand:"Childtime","brand:wikidata":"Q64877793",fee:"yes","isced:level":"0",name:"Childtime",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|KinderCare":{countryCodes:["us"],tags:{after_school:"yes",alt_name:"KinderCare Learning Center",amenity:"kindergarten",brand:"KinderCare","brand:wikidata":"Q6410551","brand:wikipedia":"en:KinderCare Learning Centers",fee:"yes","isced:level":"0",name:"KinderCare",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|La Petite Academy":{countryCodes:["us"],matchNames:["la petite"],tags:{amenity:"kindergarten",brand:"La Petite Academy","brand:wikidata":"Q64877784",fee:"yes","isced:level":"0",name:"La Petite Academy",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|New Horizon Academy":{countryCodes:["us"],tags:{after_school:"yes",amenity:"kindergarten",brand:"New Horizon Academy","brand:wikidata":"Q64821306",fee:"yes","isced:level":"0",name:"New Horizon Academy",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|Primrose School":{countryCodes:["us"],matchNames:["primrose"],tags:{after_school:"yes",alt_name:"Primrose Schools",amenity:"kindergarten",brand:"Primrose School","brand:wikidata":"Q7243677","brand:wikipedia":"en:Primrose Schools",fee:"yes","isced:level":"0",max_age:"12",min_age:"6 weeks",name:"Primrose School",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|The Children's Courtyard":{countryCodes:["us"],matchNames:["children's courtyard"],tags:{amenity:"kindergarten",brand:"The Children's Courtyard","brand:wikidata":"Q64877852",fee:"yes","isced:level":"0",name:"The Children's Courtyard",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|The Goddard School":{countryCodes:["us"],tags:{after_school:"yes",alt_name:"Goddard School",amenity:"kindergarten",brand:"The Goddard School","brand:wikidata":"Q5576260","brand:wikipedia":"en:Goddard School",fee:"yes","isced:level":"0",min_age:"6 weeks",name:"The Goddard School",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|Tutor Time":{countryCodes:["us"],matchNames:["tutor time child care","tutor time child care learning center","tutor time learning center","tutor time learning centers"],tags:{amenity:"kindergarten",brand:"Tutor Time","brand:wikidata":"Q64877826",fee:"yes","isced:level":"0",name:"Tutor Time",nursery:"yes",preschool:"yes"}},"amenity/language_school|AEON":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"AEON","brand:en":"Aeon","brand:ja":"AEON","brand:ja-Hira":"イーオン","brand:ja-Latn":"AEON","brand:wikidata":"Q4687898","brand:wikipedia":"ja:イーオン","language:en":"main",name:"AEON","name:en":"Aeon","name:ja":"AEON","name:ja-Hira":"イーオン","name:ja-Latn":"AEON"}},"amenity/language_school|Berlitz":{tags:{amenity:"language_school",brand:"Berlitz","brand:wikidata":"Q821960","brand:wikipedia":"en:Berlitz Corporation",name:"Berlitz"}},"amenity/language_school|ECC外語学院":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"ECC外語学院","brand:en":"ECC Foreign Language Institute","brand:ja":"ECC外語学院","brand:ja-Hira":"イーシーシーがいごがくいん","brand:ja-Latn":"ECC Gaigo Gakuin","brand:wikidata":"Q5322655","brand:wikipedia":"ja:ECC総合教育機関","language:en":"main",name:"ECC外語学院","name:en":"ECC Foreign Language Institute","name:ja":"ECC外語学院","name:ja-Hira":"イーシーシーがいごがくいん","name:ja-Latn":"ECC Gaigo Gakuin",short_name:"ECC","short_name:en":"ECC","short_name:ja":"ECC","short_name:ja-Hira":"イーシーシー","short_name:ja-Latn":"ECC"}},"amenity/language_school|ELS":{countryCodes:["ca","in","my","pa","sa","tr","us","vn"],tags:{amenity:"language_school",brand:"ELS","brand:en":"ELS","brand:wikidata":"Q5323325","brand:wikipedia":"en:ELS Language Centers","language:en":"main",name:"ELS","name:en":"ELS",official_name:"ELS Language Centers","official_name:en":"ELS Language Centers"}},"amenity/language_school|GABA":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"GABA","brand:en":"Gaba","brand:ja":"GABA","brand:ja-Kana":"ガバ","brand:ja-Latn":"GABA","brand:wikidata":"Q5515241","brand:wikipedia":"ja:GABA (企業)","language:en":"main",name:"GABA","name:en":"Gaba","name:ja":"GABA","name:ja-Kana":"ガバ","name:ja-Latn":"GABA"}},"amenity/language_school|NOVA":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"NOVA","brand:en":"Nova","brand:ja":"NOVA","brand:ja-Hira":"ノヴァ","brand:ja-Latn":"NOVA","brand:wikidata":"Q7064000","brand:wikipedia":"ja:NOVA","language:en":"main",name:"NOVA","name:en":"Nova","name:ja":"NOVA","name:ja-Hira":"ノヴァ","name:ja-Latn":"NOVA"}},"amenity/language_school|Shane English School":{countryCodes:["cn","dz","gb","hk","id","kr","pl","th","tw","vn"],tags:{amenity:"language_school",brand:"Shane English School","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"en:Shane English School","language:en":"main",name:"Shane English School","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"}},"amenity/language_school|シェーン英会話":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"シェーン英会話","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"ja:シェーン英会話スクール","language:en":"main",name:"シェーン英会話","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"}},"amenity/language_school|セイハ英語学院":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"セイハ英語学院","brand:en":"Seiha English Academy","brand:ja":"セイハ英語学院","brand:ja-Hani":"セイハえいごがくいん","brand:ja-Latn":"Seiha Eigo Gakuin","brand:wikidata":"Q7446694","language:en":"main",name:"セイハ英語学院","name:en":"Seiha English Academy","name:ja":"セイハ英語学院","name:ja-Hani":"セイハえいごがくいん","name:ja-Latn":"Seiha Eigo Gakuin"}},"amenity/language_school|ベルリッツ":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"ベルリッツ","brand:en":"Berlitz","brand:ja":"ベルリッツ","brand:ja-Hira":"ベルリッツ","brand:wikidata":"Q4892545","brand:wikipedia":"ja:ベルリッツ・ジャパン",name:"ベルリッツ","name:en":"Berlitz","name:ja":"ベルリッツ","name:ja-Hira":"ベルリッツ"}},"amenity/language_school|ペッピーキッズクラブ":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"ペッピーキッズクラブ","brand:en":"Peppy Kids Club","brand:ja":"ペッピーキッズクラブ","brand:ja-Latn":"Peppi Kizzu Kurabu","brand:wikidata":"Q7166471","brand:wikipedia":"ja:ペッピーキッズクラブ","language:en":"main",name:"ペッピーキッズクラブ","name:en":"Peppy Kids Club","name:ja":"ペッピーキッズクラブ","name:ja-Latn":"Peppi Kizzu Kurabu"}},"amenity/money_transfer|Express Union":{countryCodes:["td"],matchTags:["amenity/bank"],nomatch:["amenity/bank|Banco Unión","amenity/bank|UnionBank"],tags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"}},"amenity/money_transfer|Hoa Phát":{countryCodes:["us"],matchNames:["hoa phat goi tien","hoa phat gui tien"],tags:{amenity:"money_transfer",brand:"Hoa Phát","brand:wikidata":"Q65116775",name:"Hoa Phát","name:vi":"Hoa Phát"}},"amenity/money_transfer|MoneyGram":{countryCodes:["de","fr","gr"],tags:{amenity:"money_transfer",brand:"MoneyGram","brand:wikidata":"Q1944412","brand:wikipedia":"en:MoneyGram",name:"MoneyGram"}},"amenity/money_transfer|Orange Money":{countryCodes:["ml"],tags:{amenity:"money_transfer",brand:"Orange Money","brand:wikidata":"Q16668220","brand:wikipedia":"en:Orange Money",name:"Orange Money"}},"amenity/money_transfer|Western Union":{matchTags:["amenity/bureau_de_change"],nomatch:["amenity/bank|Western Union"],tags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"}},"amenity/parking|Diamond Parking":{countryCodes:["ca","us"],tags:{amenity:"parking",brand:"Diamond Parking","brand:wikidata":"Q5270887","brand:wikipedia":"en:Diamond Parking",name:"Diamond Parking"}},"amenity/parking|Parking Company of America":{countryCodes:["us"],tags:{amenity:"parking",brand:"Parking Company of America","brand:wikidata":"Q65491376",fee:"yes",name:"Parking Company of America",short_name:"PCA"}},"amenity/parking|SP+":{countryCodes:["ca","us"],matchNames:["central parking","central parking system","standard parking"],nomatch:["amenity/fuel|SP"],tags:{alt_name:"SP Plus",amenity:"parking",brand:"SP+","brand:wikidata":"Q7598289","brand:wikipedia":"en:SP Plus Corporation",fee:"yes",name:"SP+"}},"amenity/parking|Wilson Parking":{countryCodes:["au","cn","hk","ko","nz","sg"],matchNames:["wilson"],tags:{amenity:"parking",brand:"Wilson Parking","brand:wikidata":"Q28448427","brand:wikipedia":"en:Wilson Parking",fee:"yes",name:"Wilson Parking"}},"amenity/parking|タイムズ":{countryCodes:["jp"],matchNames:["times 24th","タイムズ24"],tags:{amenity:"parking",brand:"タイムズ","brand:en":"Times","brand:ja":"タイムズ","brand:wikidata":"Q11089693","brand:wikipedia":"ja:パーク24",fee:"yes",name:"Times","name:en":"タイムズ","name:ja":"Times"}},"amenity/payment_centre|Abitab":{countryCodes:["uy"],matchTags:["amenity/bureau_de_change"],tags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"}},"amenity/payment_centre|Rapipago":{countryCodes:["ar"],tags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"}},"amenity/payment_terminal|Qiwi":{countryCodes:["ru"],tags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"}},"amenity/payment_terminal|ПриватБанк":{countryCodes:["ua"],tags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"}},"amenity/payment_terminal|Сбербанк":{tags:{amenity:"payment_terminal",brand:"Сбербанк",name:"Сбербанк"}},"amenity/payment_terminal|Элекснет":{countryCodes:["ru"],tags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"}},"amenity/pharmacy|36,6":{countryCodes:["ru"],matchNames:["аптека 36,6"],tags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"}},"amenity/pharmacy|Amavita":{countryCodes:["ch"],tags:{amenity:"pharmacy",brand:"Amavita",healthcare:"pharmacy",name:"Amavita"}},"amenity/pharmacy|Amcal":{countryCodes:["au"],matchNames:["amcal pharmacy"],tags:{amenity:"pharmacy",brand:"Amcal","brand:wikidata":"Q63367373",healthcare:"pharmacy",name:"Amcal"}},"amenity/pharmacy|Apollo Pharmacy":{countryCodes:["in"],nomatch:["shop/optician|Apollo-Optik"],tags:{amenity:"pharmacy",brand:"Apollo Pharmacy","brand:wikidata":"Q62562612",healthcare:"pharmacy",name:"Apollo Pharmacy"}},"amenity/pharmacy|Apotek Hjärtat":{countryCodes:["se"],tags:{amenity:"pharmacy",brand:"Apotek Hjärtat","brand:wikidata":"Q10416114","brand:wikipedia":"sv:Apotek Hjärtat",healthcare:"pharmacy",name:"Apotek Hjärtat"}},"amenity/pharmacy|Aptek":{tags:{amenity:"pharmacy",brand:"Aptek",healthcare:"pharmacy",name:"Aptek"}},"amenity/pharmacy|Bartell Drugs":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"}},"amenity/pharmacy|Benavides":{countryCodes:["mx"],tags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"}},"amenity/pharmacy|Benu":{tags:{amenity:"pharmacy",brand:"Benu","brand:wikidata":"Q62562792",healthcare:"pharmacy",name:"Benu"}},"amenity/pharmacy|Blooms The Chemist":{countryCodes:["au"],tags:{amenity:"pharmacy",brand:"Blooms The Chemist","brand:wikidata":"Q63367543",healthcare:"pharmacy",name:"Blooms The Chemist",shop:"chemist"}},"amenity/pharmacy|Boots":{countryCodes:["gb"],matchNames:["boots pharmacy"],nomatch:["shop/chemist|Boots"],tags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"}},"amenity/pharmacy|Boticas y Salud":{countryCodes:["pe"],tags:{amenity:"pharmacy",brand:"Boticas y Salud","brand:wikidata":"Q62563126",healthcare:"pharmacy",name:"Boticas y Salud"}},"amenity/pharmacy|Brookshire Brothers Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Brookshire Brothers Pharmacy","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",healthcare:"pharmacy",name:"Brookshire Brothers Pharmacy"}},"amenity/pharmacy|Brookshire's Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Brookshire's Pharmacy",healthcare:"pharmacy",name:"Brookshire's Pharmacy"}},"amenity/pharmacy|CVS Pharmacy":{countryCodes:["us"],nomatch:["amenity/vending_machine|CVS Pharmacy","shop/chemist|CVS Pharmacy"],tags:{amenity:"pharmacy",brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS Pharmacy",short_name:"CVS"}},"amenity/pharmacy|Camelia":{countryCodes:["lt"],tags:{amenity:"pharmacy",brand:"Camelia","brand:wikidata":"Q15867413","brand:wikipedia":"lt:Nemuno vaistinė",healthcare:"pharmacy",name:"Camelia"}},"amenity/pharmacy|Catena":{countryCodes:["ro"],tags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"}},"amenity/pharmacy|Chemist King Discount Pharmacy":{countryCodes:["au"],matchNames:["chemist king","chemist king discount pharmacies"],tags:{amenity:"pharmacy",brand:"Chemist King Discount Pharmacy","brand:wikidata":"Q63367667",healthcare:"pharmacy",name:"Chemist King Discount Pharmacy"}},"amenity/pharmacy|Chemist Warehouse":{countryCodes:["au","nz"],tags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"}},"amenity/pharmacy|Clicks":{countryCodes:["za"],tags:{amenity:"pharmacy",brand:"Clicks","brand:wikidata":"Q62563622",healthcare:"pharmacy",name:"Clicks"}},"amenity/pharmacy|Costco Pharmacy":{countryCodes:["us"],nomatch:["amenity/fuel|Costco Gasoline","shop/wholesale|Costco"],tags:{amenity:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",healthcare:"pharmacy",name:"Costco Pharmacy"}},"amenity/pharmacy|Cruz Azul":{countryCodes:["ec"],matchNames:["farmacias cruz azul"],tags:{amenity:"pharmacy",brand:"Cruz Azul","brand:wikidata":"Q62108219",healthcare:"pharmacy",name:"Cruz Azul"}},"amenity/pharmacy|Cruz Verde":{countryCodes:["cl"],matchNames:["farmacias cruz verde"],tags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"}},"amenity/pharmacy|Day Lewis Pharmacy":{countryCodes:["gb"],tags:{amenity:"pharmacy",brand:"Day Lewis Pharmacy","brand:wikidata":"Q62563772",healthcare:"pharmacy",name:"Day Lewis Pharmacy"}},"amenity/pharmacy|Dbam o Zdrowie":{countryCodes:["pl"],tags:{amenity:"pharmacy",brand:"Dbam o Zdrowie","brand:wikidata":"Q62563833",healthcare:"pharmacy",name:"Dbam o Zdrowie"}},"amenity/pharmacy|Dona":{tags:{amenity:"pharmacy",brand:"Dona",healthcare:"pharmacy",name:"Dona"}},"amenity/pharmacy|Dr. Max":{countryCodes:["cz","pl","sk"],tags:{amenity:"pharmacy",brand:"Dr. Max","brand:wikidata":"Q56317371","brand:wikipedia":"fr:Dr.Max",healthcare:"pharmacy",name:"Dr. Max"}},"amenity/pharmacy|Droga Raia":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Droga Raia","brand:wikidata":"Q10357101","brand:wikipedia":"pt:RaiaDrogasil",healthcare:"pharmacy",name:"Droga Raia"}},"amenity/pharmacy|Drogaria São Paulo":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Drogaria São Paulo","brand:wikidata":"Q5308184","brand:wikipedia":"en:Grupo DPSP",healthcare:"pharmacy",name:"Drogaria São Paulo"}},"amenity/pharmacy|Drogasil":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Drogasil","brand:wikidata":"Q5308185","brand:wikipedia":"pt:Drogasil",healthcare:"pharmacy",name:"Drogasil",wheelchair:"yes"}},"amenity/pharmacy|Duane Reade":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Duane Reade","brand:wikidata":"Q5310380","brand:wikipedia":"en:Duane Reade",healthcare:"pharmacy",name:"Duane Reade"}},"amenity/pharmacy|Einhorn-Apotheke":{tags:{amenity:"pharmacy",brand:"Einhorn-Apotheke",healthcare:"pharmacy",name:"Einhorn-Apotheke"}},"amenity/pharmacy|Eurovaistinė":{countryCodes:["lt"],tags:{amenity:"pharmacy",brand:"Eurovaistinė","brand:wikidata":"Q267205","brand:wikipedia":"en:Euroapotheca",healthcare:"pharmacy",name:"Eurovaistinė"}},"amenity/pharmacy|Extrafarma":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Extrafarma","brand:wikidata":"Q20055480","brand:wikipedia":"pt:Extrafarma",healthcare:"pharmacy",name:"Extrafarma"}},"amenity/pharmacy|Familiprix":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Familiprix","brand:wikidata":"Q3064881","brand:wikipedia":"fr:Familiprix",healthcare:"pharmacy",name:"Familiprix"}},"amenity/pharmacy|Farmacenter~(Colombia)":{countryCodes:["co"],tags:{amenity:"pharmacy",brand:"Farmacenter","brand:wikidata":"Q62563928",healthcare:"pharmacy",name:"Farmacenter"}},"amenity/pharmacy|Farmacenter~(Paraguay)":{countryCodes:["py"],tags:{amenity:"pharmacy",brand:"Farmacenter","brand:wikidata":"",healthcare:"pharmacy",name:"Farmacenter"}},"amenity/pharmacy|Farmacia Benavides":{countryCodes:["mx"],tags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"}},"amenity/pharmacy|Farmacia Familiei":{countryCodes:["md"],tags:{amenity:"pharmacy",brand:"Farmacia Familiei",healthcare:"pharmacy",name:"Farmacia Familiei"}},"amenity/pharmacy|Farmacia Guadalajara":{countryCodes:["mx"],matchNames:["farmacias guadalajara"],tags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"}},"amenity/pharmacy|Farmacias Ahumada":{tags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"}},"amenity/pharmacy|Farmacias Benavides":{tags:{amenity:"pharmacy",brand:"Farmacias Benavides",healthcare:"pharmacy",name:"Farmacias Benavides"}},"amenity/pharmacy|Farmacias Económicas~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108380",healthcare:"pharmacy",name:"Farmacias Económicas"}},"amenity/pharmacy|Farmacias Económicas~(El Salvador)":{countryCodes:["sv"],tags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108397",healthcare:"pharmacy",name:"Farmacias Económicas"}},"amenity/pharmacy|Farmacias Similares":{countryCodes:["cl","gt","mx"],matchNames:["similares"],tags:{amenity:"pharmacy",brand:"Farmacias Similares","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias Similares"}},"amenity/pharmacy|Farmacias del Ahorro":{countryCodes:["mx"],matchNames:["farmacia del ahorro"],tags:{amenity:"pharmacy",brand:"Farmacias del Ahorro","brand:wikidata":"Q62086647",healthcare:"pharmacy",name:"Farmacias del Ahorro"}},"amenity/pharmacy|Farmacias del Dr. Simi":{countryCodes:["cl","gt","mx"],tags:{amenity:"pharmacy",brand:"Farmacias del Dr. Simi","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias del Dr. Simi"}},"amenity/pharmacy|Farmacity":{countryCodes:["ra"],tags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"}},"amenity/pharmacy|Farmacorp":{countryCodes:["bo"],tags:{amenity:"pharmacy",brand:"Farmacorp",healthcare:"pharmacy",name:"Farmacorp"}},"amenity/pharmacy|Farmahorro":{tags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"}},"amenity/pharmacy|Farmatodo":{tags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"}},"amenity/pharmacy|Farmácia São João":{tags:{amenity:"pharmacy",brand:"Farmácia São João",healthcare:"pharmacy",name:"Farmácia São João"}},"amenity/pharmacy|Felicia":{countryCodes:["md"],tags:{amenity:"pharmacy",brand:"Felicia","brand:wikidata":"Q62564805",healthcare:"pharmacy",name:"Felicia"}},"amenity/pharmacy|Fred Meyer Pharmacy":{countryCodes:["us"],matchNames:["fred meyer"],nomatch:["shop/supermarket|Fred Meyer"],tags:{amenity:"pharmacy",brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",healthcare:"pharmacy",name:"Fred Meyer Pharmacy"}},"amenity/pharmacy|Fybeca":{countryCodes:["ec"],tags:{amenity:"pharmacy",brand:"Fybeca","brand:wikidata":"Q62564822",healthcare:"pharmacy",name:"Fybeca"}},"amenity/pharmacy|Generika":{countryCodes:["ph"],matchNames:["generika drugstore"],tags:{amenity:"pharmacy",brand:"Generika","brand:wikidata":"Q62564876",healthcare:"pharmacy",name:"Generika"}},"amenity/pharmacy|Gintarinė vaistinė":{countryCodes:["lt"],tags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"}},"amenity/pharmacy|Guardian~(Asia)":{countryCodes:["bn","id","kh","my","sg","vn"],tags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63371124","brand:wikipedia":"ms:Guardian Malaysia",healthcare:"pharmacy",name:"Guardian"}},"amenity/pharmacy|Guardian~(Australia)":{countryCodes:["au"],matchNames:["guardian pharmacies","guardian pharmacy"],tags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63367814",healthcare:"pharmacy",name:"Guardian"}},"amenity/pharmacy|Guardian~(Canada)":{countryCodes:["ca"],nomatch:["amenity/pharmacy|Guardian~(Asia)","amenity/pharmacy|Guardian~(Australia)"],tags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q65553864",healthcare:"pharmacy",name:"Guardian"}},"amenity/pharmacy|H-E-B Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"H-E-B Pharmacy","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",healthcare:"pharmacy",name:"H-E-B Pharmacy"}},"amenity/pharmacy|Health Mart":{countryCodes:["us"],matchNames:["health mart pharmacy"],tags:{amenity:"pharmacy",brand:"Health Mart","brand:wikidata":"Q5690597","brand:wikipedia":"en:Health Mart",healthcare:"pharmacy",name:"Health Mart"}},"amenity/pharmacy|Hy-Vee Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Hy-Vee Pharmacy","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",healthcare:"pharmacy",name:"Hy-Vee Pharmacy"}},"amenity/pharmacy|I.D.A.":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"I.D.A.","brand:wikidata":"Q65553883",healthcare:"pharmacy",name:"I.D.A."}},"amenity/pharmacy|Inkafarma":{countryCodes:["pe"],tags:{amenity:"pharmacy",brand:"Inkafarma","brand:wikidata":"Q10997748","brand:wikipedia":"es:Inkafarma",healthcare:"pharmacy",name:"Inkafarma"}},"amenity/pharmacy|Jean Coutu":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Jean Coutu","brand:wikidata":"Q3117457","brand:wikipedia":"fr:Groupe Jean Coutu",healthcare:"pharmacy",name:"Jean Coutu"}},"amenity/pharmacy|Kimia Farma":{countryCodes:["id"],tags:{amenity:"pharmacy",brand:"Kimia Farma","brand:wikidata":"Q11264892","brand:wikipedia":"en:Kimia Farma",healthcare:"pharmacy",name:"Kimia Farma"}},"amenity/pharmacy|Kinney Drugs":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Kinney Drugs","brand:wikidata":"Q6414090","brand:wikipedia":"en:Kinney Drugs",healthcare:"pharmacy",name:"Kinney Drugs"}},"amenity/pharmacy|Kroger Pharmacy":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Kroger Pharmacy",healthcare:"pharmacy",name:"Kroger Pharmacy"}},"amenity/pharmacy|Kronans Apotek":{countryCodes:["se"],tags:{amenity:"pharmacy",brand:"Kronans Apotek",healthcare:"pharmacy",name:"Kronans Apotek"}},"amenity/pharmacy|Life Pharmacy":{tags:{amenity:"pharmacy",brand:"Life Pharmacy",healthcare:"pharmacy",name:"Life Pharmacy"}},"amenity/pharmacy|Lloyds Pharmacy":{countryCodes:["be","gb","ie","im"],matchNames:["lloyds"],tags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"}},"amenity/pharmacy|Locatel":{tags:{amenity:"pharmacy",brand:"Locatel",healthcare:"pharmacy",name:"Locatel"}},"amenity/pharmacy|London Drugs":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"}},"amenity/pharmacy|Longs Drugs~(Hawaii)":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",healthcare:"pharmacy",name:"Longs Drugs",short_name:"Longs"}},"amenity/pharmacy|Mannings":{countryCodes:["cn","hk","mo"],tags:{amenity:"pharmacy",brand:"Mannings","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Mannings"}},"amenity/pharmacy|Marc's Pharmacy":{countryCodes:["us"],nomatch:["shop/supermarket|Marc's"],tags:{amenity:"pharmacy",brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",healthcare:"pharmacy",name:"Marc's Pharmacy"}},"amenity/pharmacy|MedPlus":{countryCodes:["in"],tags:{amenity:"pharmacy",brand:"MedPlus","brand:wikidata":"Q65684234","brand:wikipedia":"en:MedPlus",healthcare:"pharmacy",name:"MedPlus"}},"amenity/pharmacy|Mercury Drug":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"}},"amenity/pharmacy|Mifarma":{countryCodes:["pe"],tags:{amenity:"pharmacy",brand:"Mifarma","brand:wikidata":"Q62564998",healthcare:"pharmacy",name:"Mifarma"}},"amenity/pharmacy|Multipharma":{countryCodes:["be"],tags:{amenity:"pharmacy",brand:"Multipharma","brand:wikidata":"Q62565018",healthcare:"pharmacy",name:"Multipharma"}},"amenity/pharmacy|Mēness aptieka":{countryCodes:["lv"],tags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"}},"amenity/pharmacy|Pague Menos":{countryCodes:["br"],matchNames:["farmácia pague menos"],tags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"}},"amenity/pharmacy|Panvel":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Panvel","brand:wikidata":"Q10344254","brand:wikipedia":"pt:Panvel",healthcare:"pharmacy",name:"Panvel"}},"amenity/pharmacy|PharmaChoice":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"PharmaChoice","brand:wikidata":"Q7180716","brand:wikipedia":"en:PharmaChoice",healthcare:"pharmacy",name:"PharmaChoice"}},"amenity/pharmacy|PharmaSave~(Australia)":{countryCodes:["au"],nomatch:["amenity/pharmacy|Pharmasave~(Canada)"],tags:{amenity:"pharmacy",brand:"PharmaSave","brand:wikidata":"Q63367906",healthcare:"pharmacy",name:"PharmaSave"}},"amenity/pharmacy|Pharmacie Principale":{tags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:Groupe PP Holding",healthcare:"pharmacy",name:"Pharmacie Principale"}},"amenity/pharmacy|Pharmacy 4 Less":{countryCodes:["au"],tags:{amenity:"pharmacy",brand:"Pharmacy 4 Less","brand:wikidata":"Q63367608",healthcare:"pharmacy",name:"Pharmacy 4 Less"}},"amenity/pharmacy|Pharmaprix":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"fr:Pharmaprix",healthcare:"pharmacy",name:"Pharmaprix"}},"amenity/pharmacy|Pharmasave~(Canada)":{countryCodes:["ca"],nomatch:["amenity/pharmacy|Pharmasave~(Australia)"],tags:{amenity:"pharmacy",brand:"Pharmasave","brand:wikidata":"Q17093822","brand:wikipedia":"en:Pharmasave",healthcare:"pharmacy",name:"Pharmasave"}},"amenity/pharmacy|Priceline Pharmacy":{countryCodes:["au"],matchNames:["priceline"],tags:{amenity:"pharmacy",brand:"Priceline Pharmacy","brand:wikidata":"Q7242652","brand:wikipedia":"en:Priceline (Australia)",healthcare:"pharmacy",name:"Priceline Pharmacy"}},"amenity/pharmacy|Punto Farma~(Colombia)":{countryCodes:["co"],tags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595271",healthcare:"pharmacy",name:"Punto Farma"}},"amenity/pharmacy|Punto Farma~(Honduras)":{countryCodes:["hn"],tags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595229",healthcare:"pharmacy",name:"Punto Farma"}},"amenity/pharmacy|Punto Farma~(Paraguay)":{countryCodes:["py"],tags:{amenity:"pharmacy",brand:"Punto Farma","brand:wikidata":"Q62595220",healthcare:"pharmacy",name:"Punto Farma"}},"amenity/pharmacy|Remedy'sRx":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Remedy'sRx","brand:wikidata":"Q65553833",healthcare:"pharmacy",name:"Remedy'sRx"}},"amenity/pharmacy|Rexall":{countryCodes:["ca","us"],tags:{amenity:"pharmacy",brand:"Rexall","brand:wikidata":"Q7319360","brand:wikipedia":"en:Rexall",healthcare:"pharmacy",name:"Rexall"}},"amenity/pharmacy|Rite Aid":{countryCodes:["us"],matchNames:["rite aid pharmacy"],nomatch:["shop/chemist|Rite Aid"],tags:{amenity:"pharmacy",brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",healthcare:"pharmacy",name:"Rite Aid"}},"amenity/pharmacy|Rose Pharmacy":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"Rose Pharmacy","brand:wikidata":"Q62663208",healthcare:"pharmacy",name:"Rose Pharmacy"}},"amenity/pharmacy|Rowlands Pharmacy":{countryCodes:["gb"],tags:{amenity:"pharmacy",brand:"Rowlands Pharmacy","brand:wikidata":"Q62663235",healthcare:"pharmacy",name:"Rowlands Pharmacy"}},"amenity/pharmacy|Safeway":{countryCodes:["us"],nomatch:["amenity/fuel|Safeway","shop/supermarket|Safeway"],tags:{amenity:"pharmacy",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",healthcare:"pharmacy",name:"Safeway"}},"amenity/pharmacy|SalcoBrand":{countryCodes:["cl"],matchNames:["farmacias salcobrand"],tags:{amenity:"pharmacy",brand:"SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"SalcoBrand"}},"amenity/pharmacy|Sana Sana":{countryCodes:["ec"],matchNames:["farmacias sana sana"],tags:{amenity:"pharmacy",brand:"Sana Sana","brand:wikidata":"Q62564499",healthcare:"pharmacy",name:"Sana Sana"}},"amenity/pharmacy|Sensiblu":{countryCodes:["ro"],tags:{amenity:"pharmacy",brand:"Sensiblu","brand:wikidata":"Q12740640","brand:wikipedia":"ro:Sensiblu",healthcare:"pharmacy",name:"Sensiblu"}},"amenity/pharmacy|Shoppers Drug Mart":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Shoppers Drug Mart","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Shoppers Drug Mart"}},"amenity/pharmacy|South Star Drug":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"South Star Drug","brand:wikidata":"Q7568544","brand:wikipedia":"en:South Star Drug",healthcare:"pharmacy",name:"South Star Drug"}},"amenity/pharmacy|Superdrug":{countryCodes:["gb"],nomatch:["shop/chemist|Superdrug"],tags:{amenity:"pharmacy",brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",healthcare:"pharmacy",name:"Superdrug"}},"amenity/pharmacy|São João":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"São João","brand:wikidata":"Q62663306",healthcare:"pharmacy",name:"São João"}},"amenity/pharmacy|Słoneczna":{countryCodes:["pl"],tags:{amenity:"pharmacy",brand:"Słoneczna",healthcare:"pharmacy",name:"Słoneczna"}},"amenity/pharmacy|TGP":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"The Generics Pharmacy","brand:wikidata":"Q61948677",healthcare:"pharmacy",name:"TGP",official_name:"The Generics Pharmacy"}},"amenity/pharmacy|TerryWhite Chemmart":{countryCodes:["au"],matchNames:["terrywhite","terrywhite chemist","terrywhite chemists"],tags:{amenity:"pharmacy",brand:"TerryWhite Chemmart","brand:wikidata":"Q24089773","brand:wikipedia":"en:Terry White Chemmart",healthcare:"pharmacy",name:"TerryWhite Chemmart"}},"amenity/pharmacy|UFS":{countryCodes:["au"],matchNames:["ufs dispensaries"],tags:{amenity:"pharmacy",brand:"UFS","brand:wikidata":"Q63367573",healthcare:"pharmacy",name:"UFS"}},"amenity/pharmacy|Unichem Pharmacy":{countryCodes:["nz"],tags:{amenity:"pharmacy",brand:"Unichem Pharmacy","brand:wikidata":"Q62663379",healthcare:"pharmacy",name:"Unichem Pharmacy"}},"amenity/pharmacy|Uniprix":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Uniprix","brand:wikidata":"Q683265","brand:wikipedia":"fr:Uniprix (pharmacies)",healthcare:"pharmacy",name:"Uniprix"}},"amenity/pharmacy|Walgreens":{countryCodes:["us"],matchNames:["walgreens pharmacy"],nomatch:["shop/chemist|Walgreens"],tags:{amenity:"pharmacy",brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",healthcare:"pharmacy",name:"Walgreens"}},"amenity/pharmacy|Walmart Pharmacy":{countryCodes:["ca","us"],matchNames:["walmart"],nomatch:["amenity/fuel|Walmart","shop/department_store|Walmart","shop/supermarket|Walmart"],tags:{amenity:"pharmacy",brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",healthcare:"pharmacy",name:"Walmart Pharmacy"}},"amenity/pharmacy|Watsons":{nomatch:["shop/chemist|Watsons"],tags:{amenity:"pharmacy",brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",healthcare:"pharmacy",name:"Watsons"}},"amenity/pharmacy|Well Pharmacy":{countryCodes:["gb"],matchNames:["well"],tags:{amenity:"pharmacy",brand:"Well Pharmacy","brand:wikidata":"Q7726524","brand:wikipedia":"en:Well Pharmacy",healthcare:"pharmacy",name:"Well Pharmacy"}},"amenity/pharmacy|Ziko Apteka":{countryCodes:["pl"],tags:{amenity:"pharmacy",brand:"Ziko Apteka","brand:wikidata":"Q63432892",healthcare:"pharmacy",name:"Ziko Apteka",short_name:"Ziko"}},"amenity/pharmacy|А-мега":{tags:{amenity:"pharmacy",brand:"А-мега",healthcare:"pharmacy",name:"А-мега"}},"amenity/pharmacy|А5":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"А5","brand:wikidata":"Q62663476",healthcare:"pharmacy",name:"А5"}},"amenity/pharmacy|Алоэ":{tags:{amenity:"pharmacy",brand:"Алоэ",healthcare:"pharmacy",name:"Алоэ"}},"amenity/pharmacy|Апрель":{tags:{amenity:"pharmacy",brand:"Апрель",healthcare:"pharmacy",name:"Апрель"}},"amenity/pharmacy|Бажаємо здоров'я":{countryCodes:["ua"],tags:{amenity:"pharmacy",brand:"Бажаємо здоров'я",healthcare:"pharmacy",name:"Бажаємо здоров'я"}},"amenity/pharmacy|Бережная аптека":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Бережная аптека","brand:wikidata":"Q62664194",healthcare:"pharmacy",name:"Бережная аптека"}},"amenity/pharmacy|Будь здоров":{countryCodes:["ru","ua"],tags:{amenity:"pharmacy",brand:"Будь здоров",healthcare:"pharmacy",name:"Будь здоров"}},"amenity/pharmacy|Вита":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Вита",healthcare:"pharmacy",name:"Вита"}},"amenity/pharmacy|Горздрав":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Горздрав",healthcare:"pharmacy",name:"Горздрав"}},"amenity/pharmacy|Добрая аптека":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Добрая аптека",healthcare:"pharmacy",name:"Добрая аптека"}},"amenity/pharmacy|Доктор Столетов":{tags:{amenity:"pharmacy",brand:"Доктор Столетов",healthcare:"pharmacy",name:"Доктор Столетов"}},"amenity/pharmacy|Живика":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Живика",healthcare:"pharmacy",name:"Живика"}},"amenity/pharmacy|Здоровье":{countryCodes:["kz","ru","ua"],tags:{amenity:"pharmacy",brand:"Здоровье",healthcare:"pharmacy",name:"Здоровье"}},"amenity/pharmacy|Зеленая аптека":{countryCodes:["by"],matchTags:["shop/health_food"],tags:{amenity:"pharmacy",brand:"Зеленая аптека",healthcare:"pharmacy",name:"Зеленая аптека"}},"amenity/pharmacy|Имплозия":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Имплозия",healthcare:"pharmacy",name:"Имплозия"}},"amenity/pharmacy|Классика":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Классика",healthcare:"pharmacy",name:"Классика"}},"amenity/pharmacy|Ладушка":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Ладушка",healthcare:"pharmacy",name:"Ладушка"}},"amenity/pharmacy|Максавит":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Максавит",healthcare:"pharmacy",name:"Максавит"}},"amenity/pharmacy|Марешки":{countryCodes:["bg"],tags:{amenity:"pharmacy",brand:"Марешки",healthcare:"pharmacy",name:"Марешки"}},"amenity/pharmacy|Мед-сервіс":{countryCodes:["ua"],tags:{amenity:"pharmacy",brand:"Мед-сервіс",healthcare:"pharmacy",name:"Мед-сервіс"}},"amenity/pharmacy|Мелодия здоровья":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Мелодия здоровья",healthcare:"pharmacy",name:"Мелодия здоровья"}},"amenity/pharmacy|Невис":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Невис",healthcare:"pharmacy",name:"Невис"}},"amenity/pharmacy|Неофарм":{tags:{amenity:"pharmacy",brand:"Неофарм",healthcare:"pharmacy",name:"Неофарм"}},"amenity/pharmacy|Норма":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Норма",healthcare:"pharmacy",name:"Норма"}},"amenity/pharmacy|Озерки":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Озерки",healthcare:"pharmacy",name:"Озерки"}},"amenity/pharmacy|Панацея":{countryCodes:["kz","ru","ua"],tags:{amenity:"pharmacy",brand:"Панацея",healthcare:"pharmacy",name:"Панацея"}},"amenity/pharmacy|Первая помощь":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Первая помощь",healthcare:"pharmacy",name:"Первая помощь"}},"amenity/pharmacy|Планета здоровья":{countryCodes:["by","ru"],tags:{amenity:"pharmacy",brand:"Планета здоровья",healthcare:"pharmacy",name:"Планета здоровья"}},"amenity/pharmacy|Подорожник":{countryCodes:["ua"],tags:{amenity:"pharmacy",brand:"Подорожник",healthcare:"pharmacy",name:"Подорожник"}},"amenity/pharmacy|Пульс":{tags:{amenity:"pharmacy",brand:"Пульс",healthcare:"pharmacy",name:"Пульс"}},"amenity/pharmacy|Радуга":{tags:{amenity:"pharmacy",brand:"Радуга",healthcare:"pharmacy",name:"Радуга"}},"amenity/pharmacy|Ригла":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Ригла","brand:wikidata":"Q4394431","brand:wikipedia":"ru:Ригла",healthcare:"pharmacy",name:"Ригла"}},"amenity/pharmacy|Семейная":{countryCodes:["kz","ru"],tags:{amenity:"pharmacy",brand:"Семейная",healthcare:"pharmacy",name:"Семейная"}},"amenity/pharmacy|Семейная аптека":{countryCodes:["ru","ua"],tags:{amenity:"pharmacy",brand:"Семейная аптека",healthcare:"pharmacy",name:"Семейная аптека"}},"amenity/pharmacy|Социальная аптека":{countryCodes:["ru","ua"],tags:{amenity:"pharmacy",brand:"Социальная аптека",healthcare:"pharmacy",name:"Социальная аптека"}},"amenity/pharmacy|Столички":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Столички",healthcare:"pharmacy",name:"Столички"}},"amenity/pharmacy|Фармакопейка":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Фармакопейка",healthcare:"pharmacy",name:"Фармакопейка"}},"amenity/pharmacy|Фармакор":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Фармакор",healthcare:"pharmacy",name:"Фармакор"}},"amenity/pharmacy|Фармленд":{countryCodes:["ru"],tags:{amenity:"pharmacy",brand:"Фармленд",healthcare:"pharmacy",name:"Фармленд"}},"amenity/pharmacy|Центральная аптека":{countryCodes:["by","kz","ru","uz"],tags:{amenity:"pharmacy",brand:"Центральная аптека",healthcare:"pharmacy",name:"Центральная аптека"}},"amenity/pharmacy|Экона":{tags:{amenity:"pharmacy",brand:"Экона",healthcare:"pharmacy",name:"Экона"}},"amenity/pharmacy|סופר-פארם":{countryCodes:["il"],tags:{amenity:"pharmacy",brand:"סופר-פארם","brand:he":"סופר-פארם","brand:wikidata":"Q13220217","brand:wikipedia":"en:Super-Pharm",healthcare:"pharmacy",name:"סופר-פארם","name:he":"סופר-פארם"}},"amenity/pharmacy|くすりの福太郎":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"くすりの福太郎","brand:en":"Kusurino FUKUTARO","brand:ja":"くすりの福太郎","brand:wikidata":"Q17214460","brand:wikipedia":"ja:くすりの福太郎",healthcare:"pharmacy",name:"くすりの福太郎","name:en":"Kusurino Fukutaro","name:ja":"くすりの福太郎"}},"amenity/pharmacy|さくら薬局":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"さくら薬局","brand:ja":"さくら薬局",healthcare:"pharmacy",name:"さくら薬局","name:en":"Sakura Pharmacy","name:ja":"さくら薬局"}},"amenity/pharmacy|ウェルパーク":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウェルパーク","brand:ja":"ウェルパーク","brand:wikidata":"Q11288610","brand:wikipedia":"ja:ウェルパーク",healthcare:"pharmacy",name:"ウェルパーク","name:en":"Welpark","name:ja":"ウェルパーク"}},"amenity/pharmacy|ウエルシア":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウエルシア","brand:en":"Welcia","brand:ja":"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア","name:en":"Welcia","name:ja":"ウエルシア"}},"amenity/pharmacy|ウエルシア薬局":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:en":"Welcia Yakkyoku","brand:ja":"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局","name:en":"Welcia Yakkyoku","name:ja":"ウエルシア薬局"}},"amenity/pharmacy|カワチ薬品":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"カワチ薬品","brand:en":"Cawachi","brand:ja":"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品","name:en":"Cawachi","name:ja":"カワチ薬品"}},"amenity/pharmacy|キリン堂":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"キリン堂","brand:en":"Kirindo","brand:ja":"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂","name:en":"Kirindo","name:ja":"キリン堂"}},"amenity/pharmacy|クスリのアオキ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クスリのアオキ","brand:en":"Kusuri no Aoki","brand:ja":"クスリのアオキ","brand:wikidata":"Q11298661","brand:wikipedia":"ja:クスリのアオキ",healthcare:"pharmacy",name:"クスリのアオキ","name:en":"Kusuri no Aoki","name:ja":"クスリのアオキ"}},"amenity/pharmacy|クリエイト":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クリエイト","brand:en":"Create","brand:ja":"クリエイト","brand:wikidata":"Q17215731","brand:wikipedia":"ja:クリエイト",healthcare:"pharmacy",name:"クリエイト","name:en":"Create","name:ja":"クリエイト"}},"amenity/pharmacy|クリエイトSD":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クリエイトSD","brand:en":"CreateSD","brand:ja":"クリエイトSD","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイトSD","name:en":"CreateSD","name:ja":"クリエイトSD"}},"amenity/pharmacy|コクミン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"コクミン","brand:en":"Kokumin","brand:ja":"コクミン","brand:wikidata":"Q11301923","brand:wikipedia":"ja:コクミン",healthcare:"pharmacy",name:"コクミン","name:en":"Kokumin","name:ja":"コクミン",official_name:"コクミンドラッグ","official_name:en":"Kokumin Drug","official_name:ja":"コクミンドラッグ"}},"amenity/pharmacy|ココカラファイン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ココカラファイン","brand:en":"Cocokara Fine","brand:ja":"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン","name:en":"Cocokara Fine","name:ja":"ココカラファイン"}},"amenity/pharmacy|サツドラ":{countryCodes:["jp"],matchNames:["サッポロドラッグストアー"],tags:{"alt_name:en":"Satsudora",amenity:"pharmacy",brand:"サツドラ","brand:en":"Sapporo Drug Store","brand:ja":"サツドラ","brand:wikidata":"Q11304804",healthcare:"pharmacy",name:"サツドラ","name:en":"Sapporo Drug Store","name:ja":"サツドラ"}},"amenity/pharmacy|サンドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"サンドラッグ","brand:en":"Sundrug","brand:ja":"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ","name:en":"Sundrug","name:ja":"サンドラッグ"}},"amenity/pharmacy|スギ薬局":{countryCodes:["jp"],nomatch:["shop/chemist|スギ薬局"],tags:{amenity:"pharmacy",brand:"スギ薬局","brand:en":"Sugi Pharmacy","brand:ja":"スギ薬局","brand:wikidata":"Q11311460","brand:wikipedia":"ja:スギ薬局",healthcare:"pharmacy",name:"スギ薬局","name:en":"Sugi Pharmacy","name:ja":"スギ薬局"}},"amenity/pharmacy|セイジョー":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"セイジョー","brand:en":"Seijo","brand:ja":"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー","name:en":"Seijo","name:ja":"セイジョー"}},"amenity/pharmacy|ダイコクドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ダイコクドラッグ","brand:en":"Daikoku Drug","brand:ja":"ダイコクドラッグ","brand:wikidata":"Q11316754","brand:wikipedia":"ja:ダイコク",healthcare:"pharmacy",name:"ダイコクドラッグ","name:en":"Daikoku Drug","name:ja":"ダイコクドラッグ"}},"amenity/pharmacy|ツルハドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ツルハドラッグ","brand:en":"Tsuruha","brand:ja":"ツルハドラッグ","brand:wikidata":"Q11318826","brand:wikipedia":"ja:ツルハ",healthcare:"pharmacy",name:"ツルハドラッグ","name:en":"Tsuruha","name:ja":"ツルハドラッグ"}},"amenity/pharmacy|トモズ":{countryCodes:["jp"],matchNames:["トモズエキスプレス"],tags:{amenity:"pharmacy",brand:"トモズ","brand:en":"Tomod's","brand:ja":"トモズ","brand:wikidata":"Q7820097","brand:wikipedia":"ja:トモズ",healthcare:"pharmacy",name:"トモズ","name:en":"Tomod's","name:ja":"トモズ"}},"amenity/pharmacy|ドラッグイレブン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ドラッグイレブン","brand:en":"Drug Eleven","brand:ja":"ドラッグイレブン","brand:wikidata":"Q11323075","brand:wikipedia":"ja:ドラッグイレブン",healthcare:"pharmacy",name:"ドラッグイレブン","name:en":"Drug Eleven","name:ja":"ドラッグイレブン"}},"amenity/pharmacy|ドラッグセイムス":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ドラッグセイムス","brand:en":"Seims","brand:ja":"ドラッグセイムス","brand:wikidata":"Q11456137","brand:wikipedia":"ja:富士薬品",healthcare:"pharmacy",name:"ドラッグセイムス","name:en":"Drug Seims","name:ja":"ドラッグセイムス"}},"amenity/pharmacy|マツモトキヨシ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:en":"Matsukiyo","brand:ja":"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ","name:en":"Matsukiyo","name:ja":"マツモトキヨシ"}},"amenity/pharmacy|丁丁藥局":{nomatch:["shop/chemist|丁丁藥局"],tags:{amenity:"pharmacy",brand:"丁丁藥局",healthcare:"pharmacy",name:"丁丁藥局"}},"amenity/pharmacy|屈臣氏":{nomatch:["shop/chemist|屈臣氏"],tags:{amenity:"pharmacy",brand:"屈臣氏",healthcare:"pharmacy",name:"屈臣氏"}},"amenity/post_office|Australia Post":{countryCodes:["au"],tags:{amenity:"post_office",brand:"Australia Post","brand:wikidata":"Q1142936","brand:wikipedia":"en:Australia Post",name:"Australia Post"}},"amenity/post_office|CTT~(Macau)":{countryCodes:["mo"],nomatch:["amenity/post_office|CTT~(Portugal)"],tags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"}},"amenity/post_office|CTT~(Portugal)":{countryCodes:["pt"],nomatch:["amenity/post_office|CTT~(Macau)"],tags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q1024518","brand:wikipedia":"en:CTT Correios de Portugal, S.A.",name:"CTT"}},"amenity/post_office|Canada Post":{countryCodes:["ca"],nomatch:["amenity/post_box|Canada Post"],tags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"}},"amenity/post_office|Chilexpress":{countryCodes:["cl"],tags:{amenity:"post_office",brand:"Chilexpress",name:"Chilexpress"}},"amenity/post_office|Correios":{countryCodes:["br"],tags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"}},"amenity/post_office|Correo Argentino":{countryCodes:["ar"],tags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"}},"amenity/post_office|Correos de Chile":{countryCodes:["cl"],tags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"}},"amenity/post_office|Correos de Costa Rica":{countryCodes:["cr"],tags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"}},"amenity/post_office|Correos de México":{countryCodes:["mx"],tags:{amenity:"post_office",brand:"Correos de México","brand:wikidata":"Q5172898","brand:wikipedia":"en:Correos de México",name:"Correos de México"}},"amenity/post_office|DHL":{matchNames:["dhl paketshop"],tags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL",name:"DHL"}},"amenity/post_office|DPD Paketshop":{countryCodes:["at","de","pl"],tags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"}},"amenity/post_office|Deutsche Post":{countryCodes:["de"],matchNames:["deutsche post ag","deutsche post filiale"],tags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"}},"amenity/post_office|Fancourier":{countryCodes:["ro"],tags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"}},"amenity/post_office|FedEx":{nomatch:["amenity/post_box|FedEx"],tags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"}},"amenity/post_office|Hermes Paketshop":{countryCodes:["de"],matchNames:["hermes"],tags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"}},"amenity/post_office|LBC":{countryCodes:["ph"],matchNames:["lbc express"],tags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"}},"amenity/post_office|La Poste":{tags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"}},"amenity/post_office|MRW":{countryCodes:["ad","es","gi","pt","ve"],tags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"}},"amenity/post_office|Mail Boxes Etc.":{tags:{amenity:"post_office",brand:"Mail Boxes Etc.","brand:wikidata":"Q1139182","brand:wikipedia":"en:Mail Boxes Etc.",name:"Mail Boxes Etc."}},"amenity/post_office|OCA":{countryCodes:["ar"],tags:{amenity:"post_office",brand:"OCA","brand:wikidata":"Q5172887","brand:wikipedia":"es:Correo OCA",name:"OCA"}},"amenity/post_office|Oficina de Correos":{countryCodes:["es"],matchNames:["correos"],tags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"}},"amenity/post_office|PHLPost":{countryCodes:["ph"],matchNames:["phl"],tags:{amenity:"post_office",brand:"PHLPost","brand:wikidata":"Q1406037","brand:wikipedia":"en:Philippine Postal Corporation",name:"PHLPost",official_name:"Philippine Postal Corporation"}},"amenity/post_office|PTT":{nomatch:["amenity/fuel|PTT"],tags:{amenity:"post_office",brand:"PTT",name:"PTT"}},"amenity/post_office|Poczta Polska":{countryCodes:["pl"],tags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"pl:Poczta Polska",name:"Poczta Polska"}},"amenity/post_office|Post Office~(UK)":{countryCodes:["gb"],tags:{amenity:"post_office",brand:"Post Office","brand:wikidata":"Q1783168","brand:wikipedia":"en:Post Office Ltd",name:"Post Office"}},"amenity/post_office|PostalAnnex":{countryCodes:["us"],matchTags:["shop/post_office"],tags:{amenity:"post_office",brand:"PostalAnnex","brand:wikidata":"Q61960357",name:"PostalAnnex"}},"amenity/post_office|Postbank Finanzcenter":{tags:{amenity:"post_office",brand:"Postbank Finanzcenter",name:"Postbank Finanzcenter"}},"amenity/post_office|Poste Italiane":{countryCodes:["it"],tags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"}},"amenity/post_office|Posti":{tags:{amenity:"post_office",brand:"Posti",name:"Posti"}},"amenity/post_office|Serpost":{countryCodes:["pe"],matchNames:["servicios postales del perú"],matchTags:["shop/post_office"],tags:{amenity:"post_office",brand:"Serpost","brand:wikidata":"Q19521863","brand:wikipedia":"es:Servicios Postales del Perú",name:"Serpost"}},"amenity/post_office|Servientrega":{tags:{amenity:"post_office",brand:"Servientrega",name:"Servientrega"}},"amenity/post_office|Slovenská pošta":{countryCodes:["sk"],tags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"}},"amenity/post_office|The UPS Store":{countryCodes:["ca","us"],matchNames:["ups store"],matchTags:["shop/copyshop"],nomatch:["amenity/post_box|UPS"],tags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store",short_name:"UPS"}},"amenity/post_office|United States Post Office":{countryCodes:["us"],matchNames:["united states postal service","us post office","us postal service","usps","usps post office"],tags:{amenity:"post_office",brand:"United States Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"United States Post Office"}},"amenity/post_office|ΕΛΤΑ":{countryCodes:["gr"],tags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"}},"amenity/post_office|Белпошта":{countryCodes:["by"],matchNames:["белпочта"],tags:{amenity:"post_office",brand:"Белпошта","brand:be":"Белпошта","brand:en":"Belposhta","brand:ru":"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"be:Белпошта",name:"Белпошта","name:be":"Белпошта","name:en":"Belposhta","name:ru":"Белпочта"}},"amenity/post_office|Казпочта":{countryCodes:["kz"],tags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"}},"amenity/post_office|Нова Пошта":{countryCodes:["ua"],matchNames:["нова пошта №1","нова пошта №2","нова пошта №3","нова пошта №4"],tags:{amenity:"post_office",brand:"Нова Пошта","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта"}},"amenity/post_office|Почта России":{countryCodes:["ru"],tags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"}},"amenity/post_office|СДЭК":{countryCodes:["ru"],tags:{amenity:"post_office",brand:"СДЭК","brand:wikidata":"Q28665980","brand:wikipedia":"ru:СДЭК",name:"СДЭК"}},"amenity/post_office|Укрпошта":{countryCodes:["ua"],tags:{amenity:"post_office",brand:"Укрпошта","brand:wikidata":"Q2470783","brand:wikipedia":"en:Ukrposhta",name:"Укрпошта"}},"amenity/post_office|中国邮政":{countryCodes:["cn"],tags:{amenity:"post_office",brand:"中国邮政","brand:en":"China Post","brand:wikidata":"Q1066476","brand:wikipedia":"en:China Post",name:"中国邮政","name:en":"China Post"}},"amenity/prep_school|Huntington Learning Center":{countryCodes:["us"],matchNames:["huntington"],tags:{amenity:"prep_school",brand:"Huntington Learning Center","brand:wikidata":"Q5945399","brand:wikipedia":"en:Huntington Learning Center",name:"Huntington Learning Center"}},"amenity/prep_school|KUMON~(Japan)":{countryCodes:["jp"],matchNames:["くもん","公文"],tags:{amenity:"prep_school",brand:"KUMON","brand:wikidata":"Q142054","brand:wikipedia":"ja:日本公文教育研究会",name:"KUMON","name:ja":"公文","name:ja-Hira":"くもん","name:ja-Latn":"KUMON"}},"amenity/prep_school|Kumon~(International)":{matchNames:["kumon learning center"],tags:{amenity:"prep_school",brand:"Kumon","brand:wikidata":"Q142054","brand:wikipedia":"en:Kumon",name:"Kumon"}},"amenity/prep_school|Mathnasium":{countryCodes:["ca","us"],matchNames:["mathnasium learning center"],matchTags:["office/educational_institution"],tags:{amenity:"prep_school",brand:"Mathnasium","brand:wikidata":"Q6787302","brand:wikipedia":"en:Mathnasium",name:"Mathnasium"}},"amenity/prep_school|Russian School of Mathematics":{countryCodes:["us"],matchNames:["rsm","russian school of math"],tags:{amenity:"prep_school",brand:"Russian School of Mathematics","brand:wikidata":"Q7382122","brand:wikipedia":"en:Russian School of Mathematics",name:"Russian School of Mathematics"}},"amenity/prep_school|Sylvan":{countryCodes:["us"],matchNames:["sylvan learning"],tags:{alt_name:"Sylvan Learning Center",amenity:"prep_school",brand:"Sylvan","brand:wikidata":"Q7660663","brand:wikipedia":"en:Sylvan Learning",name:"Sylvan"}},"amenity/prep_school|栄光ゼミナール":{countryCodes:["jp"],matchNames:["eikoh"],tags:{amenity:"prep_school",brand:"栄光ゼミナール","brand:ja":"栄光ゼミナール","brand:ja-Hira":"えいこうゼミナール","brand:ja-Latn":"Eikō Zemināru","brand:wikidata":"Q11535632","brand:wikipedia":"ja:栄光ゼミナール",name:"栄光ゼミナール","name:en":"Eikoh Seminar","name:ja":"栄光ゼミナール","name:ja-Hira":"えいこうゼミナール","name:ja-Latn":"Eikō Zemināru"}},"amenity/pub|Ezītis miglā":{countryCodes:["lv"],tags:{amenity:"pub",brand:"Ezītis miglā",name:"Ezītis miglā"}},"amenity/pub|Walkabout":{countryCodes:["gb"],tags:{amenity:"pub",brand:"Walkabout","brand:wikidata":"Q7962149","brand:wikipedia":"en:Walkabout (pub chain)",name:"Walkabout"}},"amenity/public_bookcase|Little Free Library":{tags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"}},"amenity/recycling|Planet Aid":{countryCodes:["us"],tags:{amenity:"recycling",brand:"Planet Aid","brand:wikidata":"Q7201055","brand:wikipedia":"en:Planet Aid",name:"Planet Aid","recycling:clothes":"yes","recycling:shoes":"yes",recycling_type:"container"}},"amenity/recycling|Saint Vincent de Paul":{countryCodes:["us"],matchNames:["st vincent de paul"],tags:{amenity:"recycling",brand:"Saint Vincent de Paul","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul","recycling:clothes":"yes","recycling:shoes":"yes",short_name:"SVdP"}},"amenity/recycling|The Salvation Army":{countryCodes:["us"],matchNames:["salvation army"],nomatch:["shop/charity|The Salvation Army"],tags:{amenity:"recycling",brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army","recycling:clothes":"yes"}},"amenity/restaurant|100 Montaditos":{countryCodes:["es","it","pt"],tags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",cuisine:"sandwich",name:"100 Montaditos"}},"amenity/restaurant|3 Brewers~(On)":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brewers","name:fr":"3 Brasseurs",official_name:"Les 3 Brasseurs"}},"amenity/restaurant|ASK Italian":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"ASK Italian","brand:wikidata":"Q4807056","brand:wikipedia":"en:ASK Italian",cuisine:"italian",name:"ASK Italian"}},"amenity/restaurant|Amici's East Coast Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Amici","brand:wikidata":"Q66133409",cuisine:"pizza",name:"Amici"}},"amenity/restaurant|Applebee's":{matchNames:["applebees bar and grill","applebees grill and bar","applebees neighborhood bar and grill"],tags:{amenity:"restaurant",brand:"Applebee's Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee's",official_name:"Applebee's Neighborhood Grill & Bar"}},"amenity/restaurant|Arooga's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Arooga's","brand:wikidata":"Q72963322",cuisine:"american",name:"Arooga's",official_name:"Arooga's Grille House and Sports Bar"}},"amenity/restaurant|Au Bureau":{tags:{amenity:"restaurant",brand:"Au Bureau",name:"Au Bureau"}},"amenity/restaurant|Autogrill":{countryCodes:["at","es","fr","it"],tags:{amenity:"restaurant",brand:"Autogrill","brand:wikidata":"Q786790","brand:wikipedia":"en:Autogrill",cuisine:"italian;regional",name:"Autogrill"}},"amenity/restaurant|BBB":{countryCodes:["il"],tags:{alt_name:"Burgus Burger Bar","alt_name:en":"Burgus Burger Bar",amenity:"restaurant",brand:"Burgus Burger Bar","brand:en":"Burgus Burger Bar","brand:wikidata":"Q64760094",cuisine:"burger",name:"BBB","name:en":"BBB"}},"amenity/restaurant|BJ's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"BJ's","brand:wikidata":"Q4835755","brand:wikipedia":"en:BJ's Restaurants",cuisine:"american",name:"BJ's",official_name:"BJ's Restaurant & Brewhouse"}},"amenity/restaurant|Bella Italia":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Bella Italia","brand:wikidata":"Q4883362","brand:wikipedia":"en:Bella Italia",cuisine:"italian",name:"Bella Italia"}},"amenity/restaurant|Benihana":{countryCodes:["aw","br","ca","pa","sv","us"],matchNames:["benihana of tokyo"],tags:{amenity:"restaurant",brand:"Benihana","brand:wikidata":"Q4887996","brand:wikipedia":"en:Benihana",cuisine:"japanese;teppanyaki;steak",name:"Benihana"}},"amenity/restaurant|Bertucci's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Bertucci's","brand:wikidata":"Q4895917","brand:wikipedia":"en:Bertucci's",cuisine:"pizza;italian",name:"Bertucci's"}},"amenity/restaurant|Big Boy":{tags:{amenity:"restaurant",brand:"Big Boy","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"Big Boy",official_name:"Big Boy Restaurant & Bakery"}},"amenity/restaurant|Bill's":{countryCodes:["gb"],matchTags:["amenity/bar","amenity/pub"],tags:{amenity:"restaurant",brand:"Bill's","brand:wikidata":"Q47012702","brand:wikipedia":"en:Bill's",cuisine:"british",name:"Bill's"}},"amenity/restaurant|Black":{countryCodes:["il"],tags:{amenity:"restaurant",brand:"Black Bar Burger","brand:en":"Black Bar Burger","brand:he":"בלאק בורגר","brand:wikidata":"Q64760158",cuisine:"burger",name:"Black","name:en":"Black","name:he":"בלאק"}},"amenity/restaurant|Black Angus":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Black Angus","brand:wikidata":"Q4920269","brand:wikipedia":"en:Black Angus Steakhouse",cuisine:"steakhouse",name:"Black Angus"}},"amenity/restaurant|Black Bear Diner":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Black Bear Diner","brand:wikidata":"Q4920343","brand:wikipedia":"en:Black Bear Diner",cuisine:"american",name:"Black Bear Diner"}},"amenity/restaurant|Blaze Pizza":{countryCodes:["bh","ca","kw","sa","us"],tags:{amenity:"restaurant",brand:"Blaze Pizza","brand:wikidata":"Q23016666","brand:wikipedia":"en:Blaze Pizza",cuisine:"pizza",name:"Blaze Pizza"}},"amenity/restaurant|Bob Evans":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Bob Evans","brand:wikidata":"Q4932386","brand:wikipedia":"en:Bob Evans Restaurants",cuisine:"american",name:"Bob Evans"}},"amenity/restaurant|Bonanza Steakhouse":{countryCodes:["us"],matchNames:["bonanza"],tags:{amenity:"restaurant",brand:"Bonanza Steakhouse","brand:wikidata":"Q64045992",cuisine:"american;steak;buffet",name:"Bonanza Steakhouse"}},"amenity/restaurant|Bonchon Chicken":{countryCodes:["bh","kh","kr","kw","my","ph","sg","th","us"],tags:{amenity:"restaurant",brand:"Bonchon Chicken","brand:wikidata":"Q4941248","brand:wikipedia":"en:Bonchon Chicken",cuisine:"chicken;korean;sushi",name:"Bonchon Chicken"}},"amenity/restaurant|Bonefish Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"}},"amenity/restaurant|Boston Pizza":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"}},"amenity/restaurant|Bravo":{countryCodes:["us"],nomatch:["shop/supermarket|Bravo"],tags:{alt_name:"Bravo Cucina Italiana",amenity:"restaurant",brand:"Bravo","brand:wikidata":"Q64055574",cuisine:"italian",name:"Bravo"}},"amenity/restaurant|Brewers Fayre":{countryCodes:["gb"],matchTags:["amenity/pub"],tags:{amenity:"restaurant",brand:"Brewers Fayre","brand:wikidata":"Q4962678","brand:wikipedia":"en:Brewers Fayre",name:"Brewers Fayre"}},"amenity/restaurant|Brio":{countryCodes:["us"],tags:{alt_name:"Brio Tuscan Grille",amenity:"restaurant",brand:"Brio","brand:wikidata":"Q64055835",cuisine:"italian",name:"Brio"}},"amenity/restaurant|Bubba Gump Shrimp Company":{countryCodes:["ca","co","gb","hk","id","jp","mp","mx","ph","us"],tags:{amenity:"restaurant",brand:"Bubba Gump Shrimp Company","brand:wikidata":"Q50024","brand:wikipedia":"en:Bubba Gump Shrimp Company",cuisine:"seafood",name:"Bubba Gump Shrimp Company"}},"amenity/restaurant|Buca di Beppo":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Buca di Beppo","brand:wikidata":"Q4982340","brand:wikipedia":"en:Buca di Beppo",cuisine:"italian",name:"Buca di Beppo"}},"amenity/restaurant|Bucking Bull":{countryCodes:["au"],tags:{amenity:"restaurant",brand:"Bucking Bull","brand:wikidata":"Q18208286","brand:wikipedia":"en:Bucking Bull",cuisine:"steak_house",name:"Bucking Bull"}},"amenity/restaurant|Buffalo Grill":{countryCodes:["es","fr"],tags:{amenity:"restaurant",brand:"Buffalo Grill","brand:wikidata":"Q944655","brand:wikipedia":"en:Buffalo Grill",cuisine:"steak_house",name:"Buffalo Grill"}},"amenity/restaurant|Buffalo Wild Wings":{tags:{amenity:"restaurant",brand:"Buffalo Wild Wings","brand:wikidata":"Q509255","brand:wikipedia":"en:Buffalo Wild Wings",cuisine:"wings",name:"Buffalo Wild Wings"}},"amenity/restaurant|Buffalo Wings & Rings":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Buffalo Wings & Rings","brand:wikidata":"Q4985900","brand:wikipedia":"en:Buffalo Wings & Rings",cuisine:"wings",name:"Buffalo Wings & Rings",takeaway:"yes"}},"amenity/restaurant|Byron":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Byron","brand:wikidata":"Q16828673","brand:wikipedia":"en:Byron Hamburgers",cuisine:"burger",name:"Byron"}},"amenity/restaurant|Cafe Rio":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cafe Rio","brand:wikidata":"Q5017108","brand:wikipedia":"en:Cafe Rio",cuisine:"mexican",name:"Cafe Rio"}},"amenity/restaurant|Café Rouge":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Café Rouge","brand:wikidata":"Q5017261","brand:wikipedia":"en:Café Rouge",cuisine:"french",name:"Café Rouge"}},"amenity/restaurant|California Pizza Kitchen":{tags:{amenity:"restaurant",brand:"California Pizza Kitchen","brand:wikidata":"Q15109854","brand:wikipedia":"en:California Pizza Kitchen",cuisine:"pizza",name:"California Pizza Kitchen"}},"amenity/restaurant|Campanile":{countryCodes:["fr","gb","nl"],tags:{amenity:"restaurant",brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",cuisine:"french",name:"Campanile"}},"amenity/restaurant|Carluccio's":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Carluccio's","brand:wikidata":"Q25111797","brand:wikipedia":"en:Carluccio's Ltd",cuisine:"italian",name:"Carluccio's"}},"amenity/restaurant|Carrabba's Italian Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Carrabba's Italian Grill","brand:wikidata":"Q5045999","brand:wikipedia":"en:Carrabba's Italian Grill",cuisine:"italian",name:"Carrabba's Italian Grill"}},"amenity/restaurant|Cheddar's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cheddar's","brand:wikidata":"Q5089187","brand:wikipedia":"en:Cheddar's Scratch Kitchen",cuisine:"american",name:"Cheddar's",official_name:"Cheddar's Scratch Kitchen"}},"amenity/restaurant|Cheeburger Cheeburger":{countryCodes:["ca","sa","us"],tags:{amenity:"restaurant",brand:"Cheeburger Cheeburger","brand:wikidata":"Q5089247","brand:wikipedia":"en:Cheeburger Cheeburger",cuisine:"burger",name:"Cheeburger Cheeburger"}},"amenity/restaurant|Chevys":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Chevys Fresh Mex","brand:wikidata":"Q5094466","brand:wikipedia":"en:Chevys Fresh Mex",cuisine:"mexican",name:"Chevys",official_name:"Chevys Fresh Mex"}},"amenity/restaurant|Chili's":{tags:{amenity:"restaurant",brand:"Chili's","brand:wikidata":"Q1072948","brand:wikipedia":"en:Chili's",cuisine:"tex-mex",name:"Chili's",official_name:"Chili's Grill & Bar"}},"amenity/restaurant|China Palace":{tags:{amenity:"restaurant",brand:"China Palace",name:"China Palace"}},"amenity/restaurant|Chiquito":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Chiquito","brand:wikidata":"Q5101775","brand:wikipedia":"en:Chiquito (restaurant)",cuisine:"tex-mex",name:"Chiquito"}},"amenity/restaurant|Chuck E. Cheese's":{countryCodes:["ca","us"],matchNames:["chuck e cheese"],matchTags:["leisure/amusement_arcade"],tags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",leisure:"amusement_arcade",name:"Chuck E. Cheese's"}},"amenity/restaurant|Chuy's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Chuy's","brand:wikidata":"Q5118415","brand:wikipedia":"en:Chuy's",cuisine:"tex-mex",name:"Chuy's"}},"amenity/restaurant|Cici's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza;buffet",name:"Cici's Pizza"}},"amenity/restaurant|Claim Jumper":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Claim Jumper","brand:wikidata":"Q5125081","brand:wikipedia":"en:Claim Jumper",cuisine:"american",name:"Claim Jumper"}},"amenity/restaurant|Coast to Coast":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Coast to Coast","brand:wikidata":"Q22000729","brand:wikipedia":"en:Coast to Coast (restaurant)",cuisine:"american",name:"Coast to Coast"}},"amenity/restaurant|Copeland's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Copeland's","brand:wikidata":"Q5168346","brand:wikipedia":"en:Copeland's",cuisine:"american",name:"Copeland's"}},"amenity/restaurant|Cora~(Quebec)":{countryCodes:["ca"],nomatch:["amenity/restaurant|Cora~(non-Quebec)","shop/supermarket|Cora"],tags:{amenity:"restaurant",brand:"Cora","brand:wikidata":"Q2996960","brand:wikipedia":"fr:Cora (chaîne de restaurants)",cuisine:"breakfast",name:"Cora"}},"amenity/restaurant|Cora~(non-Quebec)":{countryCodes:["ca"],nomatch:["amenity/restaurant|Cora~(Quebec)","shop/supermarket|Cora"],tags:{amenity:"restaurant",brand:"Cora","brand:wikidata":"Q2996960","brand:wikipedia":"en:Cora (restaurant)",cuisine:"breakfast",name:"Cora"}},"amenity/restaurant|Cosmo":{countryCodes:["gb","ie"],nomatch:["amenity/fuel|Cosmo"],tags:{amenity:"restaurant",brand:"Cosmo","brand:wikidata":"Q5174239","brand:wikipedia":"en:Cosmo (restaurant)",cuisine:"international",name:"Cosmo"}},"amenity/restaurant|Country Pride":{countryCodes:["us"],matchNames:["country pride restaurant"],tags:{amenity:"restaurant",brand:"Country Pride","brand:wikidata":"Q64051992",cuisine:"american",name:"Country Pride"}},"amenity/restaurant|Courtepaille":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Courtepaille","brand:wikidata":"Q3116688","brand:wikipedia":"fr:Grill Courtepaille",cuisine:"french",name:"Courtepaille"}},"amenity/restaurant|Cracker Barrel":{countryCodes:["us"],nomatch:["shop/gift|Cracker Barrel"],tags:{amenity:"restaurant",brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",cuisine:"american",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store"}},"amenity/restaurant|Côte Brasserie":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Côte Brasserie","brand:wikidata":"Q48699908","brand:wikipedia":"en:Côte",cuisine:"french",name:"Côte Brasserie"}},"amenity/restaurant|Dave & Buster's":{countryCodes:["us"],matchTags:["leisure/amusement_arcade"],tags:{amenity:"restaurant",brand:"Dave & Buster's","brand:wikidata":"Q5228205","brand:wikipedia":"en:Dave & Buster's",cuisine:"american",leisure:"amusement_arcade",name:"Dave & Buster's"}},"amenity/restaurant|Denny's":{tags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"}},"amenity/restaurant|Dickey's Barbecue Pit":{countryCodes:["us"],matchNames:["dickeys barbecue"],tags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"}},"amenity/restaurant|Din Tai Fung":{countryCodes:["ae","au","gb","hk","id","jp","kr","mo","my","ph","sg","th","tw","us"],tags:{amenity:"restaurant",brand:"Din Tai Fung","brand:wikidata":"Q699142","brand:wikipedia":"en:Din Tai Fung",cuisine:"taiwanese",name:"Din Tai Fung","name:zh":"鼎泰丰"}},"amenity/restaurant|Donatos Pizza":{countryCodes:["us"],matchNames:["donatos"],tags:{amenity:"restaurant",brand:"Donatos Pizza","brand:wikidata":"Q1240741","brand:wikipedia":"en:Donatos Pizza",cuisine:"pizza",name:"Donatos Pizza",takeaway:"yes"}},"amenity/restaurant|East Side Mario's":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"}},"amenity/restaurant|Eat'n Park":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Eat'n Park","brand:wikidata":"Q5331211","brand:wikipedia":"en:Eat'n Park",cuisine:"american",name:"Eat'n Park"}},"amenity/restaurant|Elephant Bar":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Elephant Bar","brand:wikidata":"Q5359302","brand:wikipedia":"en:Elephant Bar",cuisine:"american",name:"Elephant Bar"}},"amenity/restaurant|Famous Dave's":{countryCodes:["us"],matchNames:["famous daves bbq"],tags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"}},"amenity/restaurant|Fernandez":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Fernandez",cuisine:"steak",name:"Fernandez"}},"amenity/restaurant|First Watch":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"First Watch","brand:wikidata":"Q5454064","brand:wikipedia":"en:First Watch (restaurant chain)",cuisine:"american;breakfast",name:"First Watch"}},"amenity/restaurant|Flunch":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"}},"amenity/restaurant|Foster's Hollywood":{countryCodes:["es"],tags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"}},"amenity/restaurant|Frankie & Benny's":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"american",name:"Frankie & Benny's"}},"amenity/restaurant|Freshii":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Freshii","brand:wikidata":"Q5503051","brand:wikipedia":"en:Freshii",cuisine:"salad",name:"Freshii"}},"amenity/restaurant|Friendly's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Friendly's","brand:wikidata":"Q1464513","brand:wikipedia":"en:Friendly's",cuisine:"american",name:"Friendly's"}},"amenity/restaurant|Frisch's Big Boy":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Frisch's Big Boy","brand:wikidata":"Q5504660","brand:wikipedia":"en:Frisch's",cuisine:"burger",name:"Frisch's Big Boy",takeaway:"yes"}},"amenity/restaurant|Fuddruckers":{tags:{amenity:"restaurant",brand:"Fuddruckers","brand:wikidata":"Q5507056","brand:wikipedia":"en:Fuddruckers",cuisine:"burger",name:"Fuddruckers"}},"amenity/restaurant|Gatti's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Gatti's Pizza","brand:wikidata":"Q5527509","brand:wikipedia":"en:Gatti's Pizza",cuisine:"pizza",name:"Gatti's Pizza"}},"amenity/restaurant|Giordano's Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Giordano's Pizzeria","brand:wikidata":"Q5563393","brand:wikipedia":"en:Giordano's Pizzeria",cuisine:"pizza",name:"Giordano's Pizzeria"}},"amenity/restaurant|Godfather's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Godfather's Pizza","brand:wikidata":"Q5576353","brand:wikipedia":"en:Godfather's Pizza",cuisine:"pizza",name:"Godfather's Pizza"}},"amenity/restaurant|Golden Corral":{countryCodes:["us"],matchNames:["golden corral buffet","golden corral buffet and grill"],tags:{amenity:"restaurant",brand:"Golden Corral","brand:wikidata":"Q4039560","brand:wikipedia":"en:Golden Corral",cuisine:"american;buffet",name:"Golden Corral"}},"amenity/restaurant|Gourmet Burger Kitchen":{countryCodes:["gb","gr","ie"],tags:{amenity:"restaurant",brand:"Gourmet Burger Kitchen","brand:wikidata":"Q5588445","brand:wikipedia":"en:Gourmet Burger Kitchen",cuisine:"burger",name:"Gourmet Burger Kitchen",short_name:"GBK"}},"amenity/restaurant|Grotto Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Grotto Pizza","brand:wikidata":"Q20709024","brand:wikipedia":"en:Grotto Pizza",cuisine:"pizza",name:"Grotto Pizza"}},"amenity/restaurant|Gusto~(United Kingdom)":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Gusto","brand:wikidata":"Q66087781",cuisine:"italian",name:"Gusto"}},"amenity/restaurant|Guzman y Gomez":{countryCodes:["au","jp","sg"],tags:{amenity:"restaurant",brand:"Guzman y Gomez","brand:wikidata":"Q23019759","brand:wikipedia":"en:Guzman y Gomez",cuisine:"mexican",name:"Guzman y Gomez"}},"amenity/restaurant|Handmade Burger Co.":{countryCodes:["gb"],matchNames:["handmade burger company"],tags:{amenity:"restaurant",brand:"Handmade Burger Co.","brand:wikidata":"Q56154673",cuisine:"burger",name:"Handmade Burger Co."}},"amenity/restaurant|Hans im Glück":{countryCodes:["at","ch","de","sg"],tags:{amenity:"restaurant",brand:"Hans im Glück","brand:wikidata":"Q22569868","brand:wikipedia":"de:Hans im Glück (Restaurantkette)",cuisine:"burger",name:"Hans im Glück"}},"amenity/restaurant|Happy's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Happy's Pizza","brand:wikidata":"Q5652393","brand:wikipedia":"en:Happy's Pizza",cuisine:"pizza",name:"Happy's Pizza"}},"amenity/restaurant|Hard Rock Cafe":{tags:{amenity:"restaurant",brand:"Hard Rock Cafe","brand:wikidata":"Q918151","brand:wikipedia":"en:Hard Rock Cafe",cuisine:"american",name:"Hard Rock Cafe"}},"amenity/restaurant|Harvester":{countryCodes:["gb"],matchTags:["amenity/pub"],tags:{amenity:"restaurant",brand:"Harvester","brand:wikidata":"Q5676915","brand:wikipedia":"en:Harvester (restaurant)",cuisine:"american",name:"Harvester"}},"amenity/restaurant|Hippopotamus":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Hippopotamus","brand:wikidata":"Q3136174","brand:wikipedia":"fr:Hippopotamus (restaurant)",cuisine:"steak_house",name:"Hippopotamus"}},"amenity/restaurant|Hog's Australia's Steakhouse":{countryCodes:["au"],tags:{amenity:"restaurant",brand:"Hog's Australia's Steakhouse","brand:wikidata":"Q5876920","brand:wikipedia":"en:Hog's Australia's Steakhouse",cuisine:"steak_house",name:"Hog's Australia's Steakhouse"}},"amenity/restaurant|Hooters":{tags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"}},"amenity/restaurant|House of Blues":{tags:{amenity:"restaurant",brand:"House of Blues","brand:wikidata":"Q648898","brand:wikipedia":"en:House of Blues",cuisine:"american",name:"House of Blues"}},"amenity/restaurant|Huddle House":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Huddle House","brand:wikidata":"Q5928324","brand:wikipedia":"en:Huddle House",cuisine:"american",name:"Huddle House"}},"amenity/restaurant|Husky House":{countryCodes:["ca"],nomatch:["amenity/fuel|Husky","shop/convenience|Husky"],tags:{amenity:"restaurant",brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",cuisine:"diner",name:"Husky House"}},"amenity/restaurant|IHOP":{matchNames:["international house of pancakes"],tags:{amenity:"restaurant",brand:"IHOP","brand:wikidata":"Q1185675","brand:wikipedia":"en:IHOP",cuisine:"breakfast;pancake",name:"IHOP"}},"amenity/restaurant|IL Патио":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"IL Патио","brand:wikidata":"Q4397763","brand:wikipedia":"en:Росинтер",cuisine:"italian",name:"IL Патио"}},"amenity/restaurant|Iron Skillet":{countryCodes:["us"],matchNames:["iron skillet restaurant"],tags:{amenity:"restaurant",brand:"Iron Skillet","brand:wikidata":"Q64052855",cuisine:"american;buffet",name:"Iron Skillet"}},"amenity/restaurant|Italia":{tags:{amenity:"restaurant",brand:"Italia",name:"Italia"}},"amenity/restaurant|Jack Astor's":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Jack Astor's","brand:wikidata":"Q6111066","brand:wikipedia":"en:Jack Astor's Bar and Grill",cuisine:"american",name:"Jack Astor's"}},"amenity/restaurant|Jason's Deli":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Jason's Deli","brand:wikidata":"Q16997641","brand:wikipedia":"en:Jason's Deli",cuisine:"sandwich",name:"Jason's Deli"}},"amenity/restaurant|Jet's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Jet's Pizza","brand:wikidata":"Q16997713","brand:wikipedia":"en:Jet's Pizza",cuisine:"pizza",name:"Jet's Pizza"}},"amenity/restaurant|Jinya Ramen Bar":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Jinya Ramen Bar","brand:wikidata":"Q16997755","brand:wikipedia":"en:Jinya Ramen Bar",cuisine:"ramen",name:"Jinya Ramen Bar"}},"amenity/restaurant|Joe's Crab Shack":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Joe's Crab Shack","brand:wikidata":"Q6208210","brand:wikipedia":"en:Joe's Crab Shack",cuisine:"seafood",name:"Joe's Crab Shack"}},"amenity/restaurant|Johnny Carino's":{countryCodes:["us"],matchNames:["carinios"],tags:{amenity:"restaurant",brand:"Johnny Carino's","brand:wikidata":"Q5039637","brand:wikipedia":"en:Carino's Italian",cuisine:"italian",name:"Johnny Carino's"}},"amenity/restaurant|Johnny Rockets":{matchNames:["johnny rocket"],tags:{amenity:"restaurant",brand:"Johnny Rockets","brand:wikidata":"Q1051593","brand:wikipedia":"en:Johnny Rockets",cuisine:"burger",name:"Johnny Rockets"}},"amenity/restaurant|Kelsey's":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Kelsey's","brand:wikidata":"Q6386459","brand:wikipedia":"en:Kelseys Original Roadhouse",cuisine:"american",name:"Kelsey's"}},"amenity/restaurant|Kona Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Kona Grill","brand:wikidata":"Q6428706","brand:wikipedia":"en:Kona Grill",cuisine:"sushi;cocktails",name:"Kona Grill"}},"amenity/restaurant|L'Atelier":{tags:{amenity:"restaurant",brand:"L'Atelier",cuisine:"french",name:"L'Atelier"}},"amenity/restaurant|L'Osteria":{countryCodes:["at","ch","cz","de","fr","gb","nl"],tags:{amenity:"restaurant",brand:"L'Osteria","brand:wikidata":"Q17323478","brand:wikipedia":"de:L’Osteria",cuisine:"italian",name:"L'Osteria"}},"amenity/restaurant|La Boucherie":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"La Boucherie","brand:wikidata":"Q21427479","brand:wikipedia":"fr:La Boucherie (restaurant)",cuisine:"steak_house",name:"La Boucherie"}},"amenity/restaurant|La Cage":{countryCodes:["ca"],matchNames:["la cage aux sports"],tags:{amenity:"restaurant",brand:"La Cage","brand:wikidata":"Q3206980","brand:wikipedia":"fr:La Cage aux Sports",cuisine:"burger;chicken;sandwich;fish;pasta",name:"La Cage"}},"amenity/restaurant|LaRosa's Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"LaRosa's Pizzeria","brand:wikidata":"Q6460833","brand:wikipedia":"en:LaRosa's Pizzeria",cuisine:"pizza",name:"LaRosa's Pizzeria",takeaway:"yes"}},"amenity/restaurant|Ledo Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Ledo Pizza","brand:wikidata":"Q6512734","brand:wikipedia":"en:Ledo Pizza",cuisine:"pizza",name:"Ledo Pizza"}},"amenity/restaurant|Legal Sea Foods":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Legal Sea Foods","brand:wikidata":"Q6517417","brand:wikipedia":"en:Legal Sea Foods",cuisine:"seafood",name:"Legal Sea Foods"}},"amenity/restaurant|Les 3 Brasseurs~(Qc,Br,Fr)":{countryCodes:["br","ca","fr"],matchNames:["3 brasseurs"],tags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brasseurs","name:en":"3 Brewers",official_name:"Les 3 Brasseurs"}},"amenity/restaurant|Logan's Roadhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"american",name:"Logan's Roadhouse"}},"amenity/restaurant|LongHorn Steakhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",cuisine:"steak_house",name:"LongHorn Steakhouse"}},"amenity/restaurant|Lou Malnati's Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Lou Malnati's Pizzeria","brand:wikidata":"Q6685628","brand:wikipedia":"en:Lou Malnati's Pizzeria",cuisine:"pizza",name:"Lou Malnati's Pizzeria"}},"amenity/restaurant|Loving Hut":{tags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",cuisine:"international","diet:vegan":"only","diet:vegetarian":"only",name:"Loving Hut"}},"amenity/restaurant|Luby's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Luby's","brand:wikidata":"Q6695701","brand:wikipedia":"en:Luby's",cuisine:"american",name:"Luby's"}},"amenity/restaurant|Léon de Bruxelles":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"}},"amenity/restaurant|MK Restaurants":{countryCodes:["th"],tags:{amenity:"restaurant",brand:"MK Restaurants","brand:wikidata":"Q62075359",cuisine:"thai",name:"MK Restaurants"}},"amenity/restaurant|Mad Mex Fresh Mexican":{countryCodes:["au","nz"],tags:{amenity:"restaurant",brand:"Mad Mex Fresh Mexican Grill","brand:wikidata":"Q19589766","brand:wikipedia":"en:Mad Mex Fresh Mexican Grill",cuisine:"mexican",name:"Mad Mex Fresh Mexican Grill"}},"amenity/restaurant|Marco's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Marco's Pizza","brand:wikidata":"Q6757382","brand:wikipedia":"en:Marco's Pizza",cuisine:"pizza",name:"Marco's Pizza"}},"amenity/restaurant|Marie Callender's":{countryCodes:["mx","us"],matchNames:["marie calendar","marie calendar's","marie callendar's"],tags:{amenity:"restaurant",brand:"Marie Callender's","brand:wikidata":"Q6762784","brand:wikipedia":"en:Marie Callender's",cuisine:"american",name:"Marie Callender's"}},"amenity/restaurant|Max's Restaurant":{countryCodes:["ph"],matchNames:["max's"],tags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's Restaurant",cuisine:"asian",name:"Max's Restaurant"}},"amenity/restaurant|McAlister's Deli":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",cuisine:"sandwich",name:"McAlister's Deli"}},"amenity/restaurant|McCormick & Schmick's":{countryCodes:["us"],matchNames:["mccormick and schmick","mccormick and schmicks grill"],tags:{amenity:"restaurant",brand:"McCormick & Schmick's","brand:wikidata":"Q6800562","brand:wikipedia":"en:McCormick & Schmick's",cuisine:"seafood;steak",name:"McCormick & Schmick's"}},"amenity/restaurant|Mellow Mushroom":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"}},"amenity/restaurant|Migros Restaurant":{tags:{amenity:"restaurant",brand:"Migros Restaurant",cuisine:"international",name:"Migros Restaurant"}},"amenity/restaurant|Mikes":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Mikes","brand:wikidata":"Q3313615","brand:wikipedia":"fr:Mikes",cuisine:"pizza;pasta;sandwich",name:"Mikes"}},"amenity/restaurant|Mimi's Cafe":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Mimi's Cafe","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",cuisine:"french",name:"Mimi's Cafe"}},"amenity/restaurant|Montana's":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Montana's","brand:wikidata":"Q17022490","brand:wikipedia":"en:Montana's BBQ & Bar",cuisine:"barbecue",name:"Montana's",official_name:"Montana's BBQ & Bar"}},"amenity/restaurant|Morton's The Steakhouse":{countryCodes:["us"],matchNames:["mortons"],tags:{amenity:"restaurant",brand:"Morton's The Steakhouse","brand:wikidata":"Q17022759","brand:wikipedia":"en:Morton's The Steakhouse",cuisine:"steak_house",name:"Morton's The Steakhouse"}},"amenity/restaurant|Moses":{countryCodes:["il"],tags:{amenity:"restaurant",brand:"Moses","brand:en":"Moses","brand:he":"מוזס","brand:wikidata":"Q64760150",cuisine:"burger",name:"Moses","name:en":"Moses","name:he":"מוזס"}},"amenity/restaurant|Mountain Mike's":{countryCodes:["us"],tags:{alt_name:"Mountain Mike's Pizza",amenity:"restaurant",brand:"Mountain Mike's","brand:wikidata":"Q6925120","brand:wikipedia":"en:Mountain Mike's Pizza",cuisine:"pizza",name:"Mountain Mike's",takeaway:"yes"}},"amenity/restaurant|Mr. Greek":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Mr. Greek","brand:wikidata":"Q6928719","brand:wikipedia":"en:Mr. Greek",cuisine:"greek",name:"Mr. Greek"}},"amenity/restaurant|Nando's":{tags:{amenity:"restaurant",brand:"Nando's","brand:wikidata":"Q3472954","brand:wikipedia":"en:Nando's",cuisine:"chicken;portuguese",name:"Nando's"}},"amenity/restaurant|Noodles & Company":{countryCodes:["us"],matchNames:["noodles and co","noodles co","noodles company"],tags:{amenity:"restaurant",brand:"Noodles & Company","brand:wikidata":"Q7049673","brand:wikipedia":"en:Noodles & Company",cuisine:"pasta",name:"Noodles & Company"}},"amenity/restaurant|Norky's":{countryCodes:["pe"],tags:{amenity:"restaurant",brand:"Norky's",cuisine:"peruvian",name:"Norky's"}},"amenity/restaurant|O'Charley's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"O'Charley's","brand:wikidata":"Q7071703","brand:wikipedia":"en:O'Charley's",cuisine:"american",name:"O'Charley's"}},"amenity/restaurant|Ocean Basket":{countryCodes:["za"],tags:{amenity:"restaurant",brand:"Ocean Basket","brand:wikidata":"Q62075311",cuisine:"seafood",name:"Ocean Basket"}},"amenity/restaurant|Old Chicago":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Old Chicago","brand:wikidata":"Q64411347",cuisine:"pizza",name:"Old Chicago",official_name:"Old Chicago Pizza & Taproom"}},"amenity/restaurant|Old Country Buffet":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Old Country Buffet","brand:wikidata":"Q75243208",cuisine:"american",name:"Old Country Buffet"}},"amenity/restaurant|Old Wild West":{countryCodes:["it"],tags:{amenity:"restaurant",brand:"Old Wild West","brand:wikidata":"Q25402475","brand:wikipedia":"it:Old Wild West",cuisine:"american",name:"Old Wild West"}},"amenity/restaurant|Olive Garden":{tags:{amenity:"restaurant",brand:"Olive Garden","brand:wikidata":"Q3045312","brand:wikipedia":"en:Olive Garden",cuisine:"italian",name:"Olive Garden"}},"amenity/restaurant|On The Border":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"On The Border","brand:wikidata":"Q7091305","brand:wikipedia":"en:On the Border Mexican Grill & Cantina",cuisine:"tex-mex",name:"On The Border",official_name:"On The Border Mexican Grill & Cantina"}},"amenity/restaurant|Outback Steakhouse":{tags:{amenity:"restaurant",brand:"Outback Steakhouse","brand:wikidata":"Q1064893","brand:wikipedia":"en:Outback Steakhouse",cuisine:"american;steak",name:"Outback Steakhouse"}},"amenity/restaurant|P.F. Chang's":{countryCodes:["mx","us"],matchNames:["pf chang"],tags:{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",official_name:"P.F. Chang's China Bistro"}},"amenity/restaurant|Papa Gino's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Papa Gino's","brand:wikidata":"Q7132333","brand:wikipedia":"en:Papa Gino's",cuisine:"pizza",name:"Papa Gino's"}},"amenity/restaurant|Pardos Chicken":{countryCodes:["pe"],tags:{amenity:"restaurant",brand:"Pardos Chicken","brand:wikidata":"Q17624435","brand:wikipedia":"en:Pardos chicken",cuisine:"peruvian",name:"Pardos Chicken"}},"amenity/restaurant|Pei Wei":{countryCodes:["us"],matchNames:["pei wei asian diner"],tags:{amenity:"restaurant",brand:"Pei Wei","brand:wikidata":"Q7160898","brand:wikipedia":"en:Pei Wei Asian Diner",cuisine:"asian",name:"Pei Wei"}},"amenity/restaurant|Perkins":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Perkins","brand:wikidata":"Q7169056","brand:wikipedia":"en:Perkins Restaurant and Bakery",cuisine:"american",name:"Perkins",official_name:"Perkins Restaurant and Bakery"}},"amenity/restaurant|Peter Pane":{countryCodes:["at","de"],tags:{amenity:"restaurant",brand:"Peter Pane","brand:wikidata":"Q66084419",cuisine:"burger",name:"Peter Pane"}},"amenity/restaurant|Peter Piper Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Peter Piper Pizza","brand:wikidata":"Q7176401",cuisine:"pizza",name:"Peter Piper Pizza"}},"amenity/restaurant|Phở 24":{countryCodes:["vn"],tags:{amenity:"restaurant",brand:"Phở 24","brand:wikidata":"Q63863118",cuisine:"vietnamese;noodle",name:"Phở 24","name:en":"Pho 24","name:vi":"Phở 24"}},"amenity/restaurant|Phở Hòa":{countryCodes:["ca","id","kr","ms","ph","tw","us"],tags:{alt_name:"Phở Hoà","alt_name:en":"Pho Hoa","alt_name:vi":"Phở Hoà",amenity:"restaurant",brand:"Phở Hòa","brand:wikidata":"Q55629932","brand:wikipedia":"en:Phở Hòa",cuisine:"vietnamese;noodle",name:"Phở Hòa","name:vi":"Phở Hòa"}},"amenity/restaurant|Pieology Pizzeria":{countryCodes:["us"],matchNames:["pieology"],tags:{amenity:"restaurant",brand:"Pieology Pizzeria","brand:wikidata":"Q60746053","brand:wikipedia":"en:Pieology",cuisine:"pizza",name:"Pieology Pizzeria"}},"amenity/restaurant|Pizza Delight":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Pizza Delight","brand:wikidata":"Q3389502","brand:wikipedia":"en:Pizza Delight",cuisine:"pizza",name:"Pizza Delight"}},"amenity/restaurant|Pizza Factory":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Pizza Factory","brand:wikidata":"Q39054369","brand:wikipedia":"en:Pizza Factory",cuisine:"pizza",name:"Pizza Factory"}},"amenity/restaurant|Pizza Hut":{nomatch:["amenity/fast_food|Pizza Hut Express"],tags:{amenity:"restaurant",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut"}},"amenity/restaurant|Pizza Ranch":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Pizza Ranch","brand:wikidata":"Q7199978","brand:wikipedia":"en:Pizza Ranch",cuisine:"pizza",name:"Pizza Ranch"}},"amenity/restaurant|PizzaExpress":{tags:{amenity:"restaurant",brand:"PizzaExpress","brand:wikidata":"Q662845","brand:wikipedia":"en:PizzaExpress",cuisine:"pizza",name:"PizzaExpress"}},"amenity/restaurant|Poivre Rouge":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Poivre Rouge","brand:wikidata":"Q7316076","brand:wikipedia":"fr:Poivre Rouge (restauration)",cuisine:"french",name:"Poivre Rouge"}},"amenity/restaurant|Ponderosa Steakhouse":{countryCodes:["ae","eg","qa","tw","us"],matchNames:["ponderosa"],tags:{amenity:"restaurant",brand:"Ponderosa Steakhouse","brand:wikidata":"Q64038204",cuisine:"american;steak;buffet",name:"Ponderosa Steakhouse"}},"amenity/restaurant|Prezzo":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Prezzo","brand:wikidata":"Q7242489","brand:wikipedia":"en:Prezzo (restaurant)",cuisine:"italian",name:"Prezzo"}},"amenity/restaurant|Primavera":{tags:{amenity:"restaurant",brand:"Primavera",name:"Primavera"}},"amenity/restaurant|Quaker Steak & Lube":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Quaker Steak & Lube","brand:wikidata":"Q7268570","brand:wikipedia":"en:Quaker Steak & Lube",cuisine:"wings",name:"Quaker Steak & Lube"}},"amenity/restaurant|Rainforest Cafe":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Rainforest Cafe","brand:wikidata":"Q3391111","brand:wikipedia":"en:Rainforest Cafe",cuisine:"american",name:"Rainforest Cafe"}},"amenity/restaurant|Red Lobster":{tags:{amenity:"restaurant",brand:"Red Lobster","brand:wikidata":"Q846301","brand:wikipedia":"en:Red Lobster",cuisine:"seafood",name:"Red Lobster"}},"amenity/restaurant|Red Robin":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Red Robin","brand:wikidata":"Q7304886","brand:wikipedia":"en:Red Robin",cuisine:"burger",name:"Red Robin",official_name:"Red Robin Gourmet Burgers and Brews"}},"amenity/restaurant|Romano's Macaroni Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Romano's Macaroni Grill","brand:wikidata":"Q7362714","brand:wikipedia":"en:Romano's Macaroni Grill",cuisine:"italian",name:"Romano's Macaroni Grill"}},"amenity/restaurant|Round Table Pizza":{countryCodes:["us"],matchNames:["round table"],tags:{amenity:"restaurant",brand:"Round Table Pizza","brand:wikidata":"Q7371139","brand:wikipedia":"en:Round Table Pizza",cuisine:"pizza",name:"Round Table Pizza"}},"amenity/restaurant|Ruby Tuesday":{tags:{amenity:"restaurant",brand:"Ruby Tuesday","brand:wikidata":"Q7376400","brand:wikipedia":"en:Ruby Tuesday (restaurant)",cuisine:"american",name:"Ruby Tuesday"}},"amenity/restaurant|Ruth's Chris Steak House":{countryCodes:["ca","mx","us"],tags:{amenity:"restaurant",brand:"Ruth's Chris Steak House","brand:wikidata":"Q7382829","brand:wikipedia":"en:Ruth's Chris Steak House",cuisine:"american",name:"Ruth's Chris Steak House"}},"amenity/restaurant|Saltgrass Steak House":{countryCodes:["us"],matchNames:["saltgrass"],tags:{amenity:"restaurant",brand:"Saltgrass Steak House","brand:wikidata":"Q7406113","brand:wikipedia":"en:Saltgrass Steak House",cuisine:"steak_house",name:"Saltgrass Steak House"}},"amenity/restaurant|Sausalitos":{countryCodes:["de"],matchTags:["amenity/bar"],tags:{amenity:"restaurant",brand:"Sausalitos","brand:wikidata":"Q2227783","brand:wikipedia":"de:Sausalitos",cuisine:"mexican",name:"Sausalitos"}},"amenity/restaurant|Scores":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Scores","brand:wikidata":"Q3476059","brand:wikipedia":"fr:Scores",cuisine:"chicken;barbecue",name:"Scores"}},"amenity/restaurant|Shakey's":{tags:{amenity:"restaurant",brand:"Shakey's","brand:wikidata":"Q6134929","brand:wikipedia":"en:Shakey's Pizza",cuisine:"pizza",name:"Shakey's"}},"amenity/restaurant|Shari's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Shari's","brand:wikidata":"Q7489612","brand:wikipedia":"en:Shari's Cafe & Pies",cuisine:"american",name:"Shari's"}},"amenity/restaurant|Shingle Inn":{countryCodes:["au"],tags:{amenity:"restaurant",brand:"Shingle Inn","brand:wikidata":"Q7497463","brand:wikipedia":"en:Shingle Inn",cuisine:"bakery",name:"Shingle Inn"}},"amenity/restaurant|Shoney's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Shoney's","brand:wikidata":"Q7500392","brand:wikipedia":"en:Shoney's",cuisine:"american",name:"Shoney's"}},"amenity/restaurant|Sizzler":{tags:{amenity:"restaurant",brand:"Sizzler","brand:wikidata":"Q1848822","brand:wikipedia":"en:Sizzler",cuisine:"steak_house",name:"Sizzler"}},"amenity/restaurant|Skyline Chili":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Skyline Chili","brand:wikidata":"Q151224","brand:wikipedia":"en:Skyline Chili",cuisine:"chili",name:"Skyline Chili",takeaway:"yes"}},"amenity/restaurant|Smitty's":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Smitty's","brand:wikidata":"Q7545728","brand:wikipedia":"en:Smitty's",cuisine:"pancake",name:"Smitty's"}},"amenity/restaurant|Snappy Tomato Pizza":{countryCodes:["gb","us"],tags:{amenity:"restaurant",brand:"Snappy Tomato Pizza","brand:wikidata":"Q7547352","brand:wikipedia":"en:Snappy Tomato Pizza",cuisine:"pizza",name:"Snappy Tomato Pizza",takeaway:"yes"}},"amenity/restaurant|Sonny's BBQ":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Sonny's BBQ","brand:wikidata":"Q7561989","brand:wikipedia":"en:Sonny's BBQ",cuisine:"bbq",name:"Sonny's BBQ"}},"amenity/restaurant|Spudbar":{countryCodes:["au"],tags:{amenity:"restaurant",brand:"Spudbar","brand:wikidata":"Q19589778","brand:wikipedia":"en:Spudbar",cuisine:"baked_potato",name:"Spudbar"}},"amenity/restaurant|Spur":{countryCodes:["za"],matchNames:["spur steak ranches"],tags:{amenity:"restaurant",brand:"Spur","brand:wikidata":"Q7581546","brand:wikipedia":"en:Spur Steak Ranches",cuisine:"steak_house",name:"Spur"}},"amenity/restaurant|St-Hubert":{countryCodes:["ca"],nomatch:["amenity/fast_food|St-Hubert Express"],tags:{amenity:"restaurant",brand:"St-Hubert","brand:wikidata":"Q3495225","brand:wikipedia":"fr:St-Hubert (restaurant)",cuisine:"chicken;barbecue",name:"St-Hubert"}},"amenity/restaurant|St. Louis Bar & Grill":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"St. Louis Bar & Grill","brand:wikidata":"Q65567668",cuisine:"chicken",name:"St. Louis Bar & Grill"}},"amenity/restaurant|Stoney River":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Stoney River","brand:wikidata":"Q7619422","brand:wikipedia":"en:Stoney River Legendary Steaks",cuisine:"steak_house",name:"Stoney River"}},"amenity/restaurant|Sunset Grill":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q62112489","brand:wikipedia":"en:Sunset Grill (Canadian restaurant chain)",cuisine:"american",name:"Sunset Grill"}},"amenity/restaurant|Swiss Chalet":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",cuisine:"chicken",name:"Swiss Chalet"}},"amenity/restaurant|TGI Friday's":{tags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"}},"amenity/restaurant|Ted's Montana Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Ted's Montana Grill","brand:wikidata":"Q16953170","brand:wikipedia":"en:Ted's Montana Grill",cuisine:"american",name:"Ted's Montana Grill"}},"amenity/restaurant|Tempero Manero":{countryCodes:["br"],tags:{amenity:"restaurant",brand:"Tempero Manero",cuisine:"brazilian",name:"Tempero Manero"}},"amenity/restaurant|Texas Roadhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"}},"amenity/restaurant|The Cheesecake Factory":{countryCodes:["us"],tags:{alt_name:"Cheesecake Factory",amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"The Cheesecake Factory"}},"amenity/restaurant|The Counter":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"The Counter","brand:wikidata":"Q7727763","brand:wikipedia":"en:The Counter",cuisine:"burger",name:"The Counter"}},"amenity/restaurant|The Keg":{countryCodes:["ca","us"],matchNames:["keg"],tags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"}},"amenity/restaurant|The Melting Pot":{countryCodes:["us"],tags:{alt_name:"Melting Pot",amenity:"restaurant",brand:"The Melting Pot","brand:wikidata":"Q7750948","brand:wikipedia":"en:The Melting Pot (restaurant)",cuisine:"fondue",name:"The Melting Pot"}},"amenity/restaurant|The Original Pancake House":{countryCodes:["jp","kr","us"],matchNames:["original pancake house"],tags:{amenity:"restaurant",brand:"The Original Pancake House","brand:wikidata":"Q7755384","brand:wikipedia":"en:The Original Pancake House",cuisine:"breakfast;pancake",name:"The Original Pancake House"}},"amenity/restaurant|Tinseltown":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Tinseltown",cuisine:"american",name:"Tinseltown"}},"amenity/restaurant|Toby Carvery":{countryCodes:["gb"],matchTags:["amenity/pub"],tags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",cuisine:"british",name:"Toby Carvery"}},"amenity/restaurant|Toks":{countryCodes:["mx"],tags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"}},"amenity/restaurant|Tony Roma's":{matchNames:["tony roma"],tags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"}},"amenity/restaurant|Topper's Pizza~(Canada)":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Topper's Pizza","brand:wikidata":"Q7825105","brand:wikipedia":"en:Topper's Pizza (Canadian restaurant)",cuisine:"pizza",name:"Topper's Pizza"}},"amenity/restaurant|Toppers Pizza~(USA)":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Toppers Pizza","brand:wikidata":"Q7825113","brand:wikipedia":"en:Toppers Pizza (American restaurant)",cuisine:"pizza",name:"Toppers Pizza"}},"amenity/restaurant|Unos":{tags:{amenity:"restaurant",brand:"Unos","brand:wikidata":"Q7897209","brand:wikipedia":"en:Uno Pizzeria & Grill",cuisine:"pizza",name:"Unos"}},"amenity/restaurant|Vapiano":{tags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"}},"amenity/restaurant|Village Inn":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"}},"amenity/restaurant|Vips~(Asia)":{countryCodes:["cn","kr"],tags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q12599540","brand:wikipedia":"ko:빕스",cuisine:"salad;steak_house",name:"Vips"}},"amenity/restaurant|Vips~(Mexico)":{countryCodes:["mx"],tags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q48783378","brand:wikipedia":"es:Vips",cuisine:"mexican",name:"Vips"}},"amenity/restaurant|Vips~(Spain)":{countryCodes:["es"],tags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q66087862",cuisine:"international",name:"Vips"}},"amenity/restaurant|Waffle House":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House",opening_hours:"24/7"}},"amenity/restaurant|Wagamama":{tags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"}},"amenity/restaurant|Wasabi":{tags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"}},"amenity/restaurant|Western Sizzlin'":{countryCodes:["us"],matchNames:["western sizzling"],tags:{amenity:"restaurant",brand:"Western Sizzlin'","brand:wikidata":"Q7988295","brand:wikipedia":"en:Western Sizzlin'",cuisine:"american;steak",name:"Western Sizzlin'"}},"amenity/restaurant|White Spot":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"}},"amenity/restaurant|Wild Wing":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Wild Wing","brand:wikidata":"Q8000869","brand:wikipedia":"en:Wild Wing Restaurants",cuisine:"chicken",name:"Wild Wing"}},"amenity/restaurant|YO! Sushi":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"}},"amenity/restaurant|Yard House":{countryCodes:["us"],tags:{alcohol:"yes",amenity:"restaurant",brand:"Yard House","brand:wikidata":"Q21189156","brand:wikipedia":"en:Yard House",cuisine:"american",name:"Yard House"}},"amenity/restaurant|Zambrero":{countryCodes:["au","ie","nl","th","us"],tags:{amenity:"restaurant",brand:"Zambrero","brand:wikidata":"Q18636431","brand:wikipedia":"en:Zambrero",cuisine:"mexican",name:"Zambrero"}},"amenity/restaurant|Zizzi":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"}},"amenity/restaurant|bd's Mongolian Grill":{countryCodes:["mn","us"],matchNames:["bd mongolian grill"],tags:{amenity:"restaurant",brand:"bd's Mongolian Grill","brand:wikidata":"Q69890408",cuisine:"mongolian_bbq",name:"bd's Mongolian Grill"}},"amenity/restaurant|dean&david":{countryCodes:["at","ch","de","lu","qa"],tags:{amenity:"restaurant",brand:"dean&david","brand:wikidata":"Q66132404",cuisine:"salad;sandwich",name:"dean&david"}},"amenity/restaurant|Евразия~(Russia)":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"Евразия","brand:wikidata":"Q66087936",cuisine:"international",name:"Евразия"}},"amenity/restaurant|Евразия~(Ukraine)":{countryCodes:["ua"],matchNames:["євразія"],tags:{amenity:"restaurant",brand:"Євразія","brand:ru":"Евразия","brand:ua":"Євразія","brand:wikidata":"Q66088028",cuisine:"western;japanese",name:"Євразія","name:ru":"Евразия","name:ua":"Євразія"}},"amenity/restaurant|Планета Суши":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"Планета Суши","brand:wikidata":"Q62739250",cuisine:"sushi",name:"Планета Суши","name:en":"Planet Sushi"}},"amenity/restaurant|Тануки":{countryCodes:["kz","ru"],tags:{amenity:"restaurant",brand:"Тануки","brand:wikidata":"Q62758690",cuisine:"japanese",name:"Тануки","name:en":"Tanuki","name:ru":"Тануки"}},"amenity/restaurant|Якитория":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"Якитория","brand:wikidata":"Q66088063",cuisine:"japanese;international",name:"Якитория"}},"amenity/restaurant|בורגר סאלון":{countryCodes:["il"],tags:{amenity:"restaurant",brand:"בורגר סאלון","brand:en":"Burger Saloon","brand:he":"בורגר סאלון","brand:wikidata":"Q64760057",cuisine:"burger",name:"בורגר סאלון","name:en":"Burger Saloon","name:he":"בורגר סאלון"}},"amenity/restaurant|あさくま":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"あさくま","brand:en":"Asakuma","brand:ja":"あさくま","brand:wikidata":"Q11257174","brand:wikipedia":"ja:あさくま",cuisine:"steak_house",name:"あさくま","name:en":"Asakuma","name:ja":"あさくま"}},"amenity/restaurant|いきなり!ステーキ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"いきなり!ステーキ","brand:en":"Ikinari Steak","brand:ja":"いきなり!ステーキ","brand:wikidata":"Q21652405","brand:wikipedia":"ja:いきなり!ステーキ",cuisine:"steak_house",name:"いきなり!ステーキ","name:en":"Ikinari Steak","name:ja":"いきなり!ステーキ"}},"amenity/restaurant|しゃぶ葉":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"しゃぶ葉","brand:ja":"しゃぶ葉",name:"しゃぶ葉","name:ja":"しゃぶ葉"}},"amenity/restaurant|とんでん":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"とんでん","brand:en":"Tonden","brand:ja":"とんでん","brand:wikidata":"Q11273585","brand:wikipedia":"jp:とんでん",name:"とんでん","name:en":"Tonden","name:ja":"とんでん"}},"amenity/restaurant|はなまるうどん":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"Hanamarūdon","brand:ja":"はなまるうどん","brand:wikidata":"Q11275674","brand:wikipedia":"ja:はなまるうどん",cuisine:"japanese;udon",name:"はなまるうどん","name:en":"Hanamarūdon","name:ja":"はなまるうどん"}},"amenity/restaurant|びっくりドンキー":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"びっくりドンキー","brand:en":"Bikkuri Donkey","brand:ja":"びっくりドンキー","brand:wikidata":"Q11276815","brand:wikipedia":"ja:びっくりドンキー",cuisine:"burger",name:"びっくりドンキー","name:en":"Bikkuri Donkey","name:ja":"びっくりドンキー"}},"amenity/restaurant|やよい軒":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"やよい軒","brand:en":"Yayoiken","brand:ja":"やよい軒","brand:wikidata":"Q11280577","brand:wikipedia":"ja:やよい軒",cuisine:"japanese",name:"やよい軒","name:en":"Yayoiken","name:ja":"やよい軒"}},"amenity/restaurant|カプリチョーザ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"カプリチョーザ","brand:en":"Capricciosa","brand:ja":"カプリチョーザ","brand:wikidata":"Q11294660","brand:wikipedia":"ja:カプリチョーザ",cuisine:"italian",name:"カプリチョーザ","name:en":"Capricciosa","name:ja":"カプリチョーザ"}},"amenity/restaurant|ガスト":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ガスト","brand:en":"Gusto","brand:ja":"ガスト",cuisine:"western;japanese",name:"ガスト","name:en":"Gusto","name:ja":"ガスト"}},"amenity/restaurant|ココス":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ココス","brand:en":"Coco's","brand:ja":"ココス","brand:wikidata":"Q11301951","brand:wikipedia":"ja:ココスジャパン",cuisine:"western;japanese",name:"ココス","name:en":"Coco's","name:ja":"ココス"}},"amenity/restaurant|サイゼリヤ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"サイゼリヤ","brand:en":"Saizeriya","brand:ja":"サイゼリヤ","brand:wikidata":"Q886564","brand:wikipedia":"en:Saizeriya",cuisine:"italian",name:"サイゼリヤ","name:en":"Saizeriya","name:ja":"サイゼリヤ"}},"amenity/restaurant|ジョイフル":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ジョイフル","brand:en":"Joyfull","brand:ja":"ジョイフル","brand:wikidata":"Q11310517","brand:wikipedia":"ja:ジョイフル",cuisine:"western",name:"ジョイフル","name:en":"Joyfull","name:ja":"ジョイフル"}},"amenity/restaurant|ジョナサン":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ジョナサン","brand:en":"Jonathan's","brand:ja":"ジョナサン","brand:wikidata":"Q11310628","brand:wikipedia":"ja:ジョナサン (ファミリーレストラン)",cuisine:"italian;japanese",name:"ジョナサン","name:en":"Jonathan's","name:ja":"ジョナサン"}},"amenity/restaurant|ジョリーパスタ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ジョリーパスタ","brand:en":"Jolly-Pasta","brand:ja":"ジョリーパスタ","brand:wikidata":"Q10852718","brand:wikipedia":"ja:ジョリーパスタ",cuisine:"pasta",name:"ジョリーパスタ","name:en":"Jolly-Pasta","name:ja":"ジョリーパスタ"}},"amenity/restaurant|ステーキガスト":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ステーキガスト","brand:en":"Skylark","brand:ja":"ステーキガスト","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"steak",name:"ステーキガスト","name:en":"Skylark","name:ja":"ステーキガスト"}},"amenity/restaurant|デニーズ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"デニーズ","brand:en":"Denny's","brand:ja":"デニーズ","brand:wikidata":"Q11320661","brand:wikipedia":"ja:デニーズ (日本)",cuisine:"western;japanese",name:"デニーズ","name:en":"Denny's","name:ja":"デニーズ"}},"amenity/restaurant|バーミヤン":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"バーミヤン","brand:en":"Bamiyan","brand:ja":"バーミヤン","brand:wikidata":"Q11328598","brand:wikipedia":"ja:バーミヤン (レストランチェーン)",cuisine:"chinese",name:"バーミヤン","name:en":"Bamiyan","name:ja":"バーミヤン"}},"amenity/restaurant|ビッグボーイ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ビッグボーイ","brand:en":"Big Boy Restaurants","brand:ja":"ビッグボーイ","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"ビッグボーイ","name:en":"Big Boy Restaurants","name:ja":"ビッグボーイ"}},"amenity/restaurant|リンガーハット":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"リンガーハット","brand:en":"Ringer Hut","brand:ja":"リンガーハット","brand:wikidata":"Q7334856","brand:wikipedia":"en:Ringer Hut",cuisine:"japanese",name:"リンガーハット","name:en":"Ringer Hut","name:ja":"リンガーハット"}},"amenity/restaurant|ロイヤルホスト":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"ロイヤルホスト","brand:en":"Royal Host","brand:ja":"ロイヤルホスト","brand:wikidata":"Q11120884","brand:wikipedia":"ja:ロイヤルホスト",cuisine:"japanese;italian;french",name:"ロイヤルホスト","name:en":"Royal Host","name:ja":"ロイヤルホスト"}},"amenity/restaurant|丸亀製麺":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"丸亀製麺","brand:en":"Marugame Seimen","brand:ja":"丸亀製麺","brand:wikidata":"Q10877253","brand:wikipedia":"ja:丸亀製麺",cuisine:"noodle",name:"丸亀製麺","name:en":"Marugame Seimen","name:ja":"丸亀製麺"}},"amenity/restaurant|八方雲集":{countryCodes:["cn","tw"],tags:{amenity:"restaurant",brand:"八方雲集","brand:en":"Eight Way","brand:wikidata":"Q28417381","brand:wikipedia":"zh:八方雲集","brand:zh":"八方雲集",cuisine:"chinese",name:"八方雲集","name:en":"Eight Way","name:zh":"八方雲集"}},"amenity/restaurant|和食さと":{countryCodes:["jp"],matchNames:["さと"],tags:{amenity:"restaurant",brand:"和食さと","brand:en":"Washoku Sato","brand:ja":"和食さと","brand:wikidata":"Q11304897","brand:wikipedia":"ja:SRSホールディングス",cuisine:"japanese",name:"和食さと","name:en":"Washoku Sato","name:ja":"和食さと"}},"amenity/restaurant|夢庵":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"夢庵","brand:en":"Yumean","brand:ja":"夢庵","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",cuisine:"japanese",name:"夢庵","name:en":"Yumean","name:ja":"夢庵"}},"amenity/restaurant|大戸屋":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"大戸屋","brand:en":"Ootoya","brand:ja":"大戸屋","brand:wikidata":"Q11435522","brand:wikipedia":"ja:大戸屋ホールディングス",cuisine:"japanese",name:"大戸屋","name:en":"Ootoya","name:ja":"大戸屋"}},"amenity/restaurant|大阪王将":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"大阪王将","brand:en":"Osaka Ohsho","brand:ja":"大阪王将","brand:wikidata":"Q48743717","brand:wikipedia":"ja:大阪王将",cuisine:"japanese;chinese",name:"大阪王将","name:en":"Osaka Ohsho","name:ja":"大阪王将"}},"amenity/restaurant|天下一品":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"天下一品","brand:en":"Tenkaippin","brand:wikidata":"Q11442172","brand:wikipedia":"en:Tenkaippin",cuisine:"ramen",name:"天下一品","name:en":"Tenkaippin"}},"amenity/restaurant|安楽亭":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"安楽亭","brand:en":"Anrakutei","brand:wikidata":"Q11450866","brand:wikipedia":"ja:安楽亭",cuisine:"barbecue",name:"安楽亭","name:en":"Anrakutei"}},"amenity/restaurant|木曽路":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"木曽路","brand:en":"Kisoji","brand:jp":"木曽路","brand:wikidata":"Q11518589","brand:wikipedia":"ja:木曽路 (企業)",cuisine:"japanese",name:"木曽路","name:en":"Kisoji","name:jp":"木曽路"}},"amenity/restaurant|永和豆浆":{countryCodes:["cn"],tags:{amenity:"restaurant",brand:"永和豆浆","brand:en":"Yonghe Soy Milk",cuisine:"chinese;breakfast",name:"永和豆浆","name:en":"Yonghe Soy Milk"}},"amenity/restaurant|海底捞火锅":{countryCodes:["cn"],tags:{amenity:"restaurant",brand:"海底捞火锅","brand:en":"Hai Di Lao Hot Pot","brand:wikidata":"Q5638920","brand:wikipedia":"zh:海底捞",cuisine:"chinese",name:"海底捞火锅","name:en":"Hai Di Lao Hot Pot"}},"amenity/restaurant|牛角":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"牛角","brand:en":"Gyū-Kaku","brand:wikidata":"Q11349387","brand:wikipedia":"en:Gyu-Kaku",cuisine:"barbecue",name:"牛角","name:en":"Gyū-Kaku"}},"amenity/restaurant|華屋与兵衛":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"華屋与兵衛","brand:en":"Hanaya Yohei","brand:ja":"華屋与兵衛","brand:wikidata":"Q11620063","brand:wikipedia":"ja:華屋与兵衛 (レストラン)",cuisine:"japanese",name:"華屋与兵衛","name:en":"Hanaya Yohei","name:ja":"華屋与兵衛"}},"amenity/restaurant|餃子の王将":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"餃子の王将","brand:en":"Gyoza no Ohsho","brand:ja":"餃子の王将","brand:wikidata":"Q11666805","brand:wikipedia":"en:Gyoza no Ohsho",cuisine:"chinese;gyoza",name:"餃子の王将","name:en":"Gyoza no Ohsho","name:ja":"餃子の王将"}},"amenity/restaurant|麥味登":{tags:{amenity:"restaurant",brand:"麥味登",name:"麥味登"}},"amenity/restaurant|바다횟집":{countryCodes:["kr"],tags:{amenity:"restaurant",brand:"바다횟집","brand:en":"Bada Fish Restaurant","brand:ko":"바다횟집",cuisine:"fish",name:"바다횟집","name:en":"Bada Fish Restaurant","name:ko":"바다횟집"}},"amenity/restaurant|빕스":{countryCodes:["kr"],tags:{amenity:"restaurant",brand:"빕스","brand:en":"Vips","brand:ko":"빕스","brand:wikidata":"Q12599540","brand:wikipedia":"ko:빕스",cuisine:"salad;steak_house",name:"빕스","name:en":"Vips","name:ko":"빕스"}},"amenity/school|Imagine Schools":{countryCodes:["us"],matchNames:["imagine","imagine school"],tags:{amenity:"school",brand:"Imagine Schools","brand:wikidata":"Q6002737","brand:wikipedia":"en:Imagine Schools",name:"Imagine Schools","operator:type":"private_non_profit"}},"amenity/school|KIPP":{countryCodes:["us"],tags:{amenity:"school",brand:"KIPP","brand:wikidata":"Q6423304","brand:wikipedia":"en:KIPP (organization)",name:"KIPP",official_name:"Knowledge Is Power Program","operator:type":"private_non_profit"}},"amenity/school|Success Academy":{countryCodes:["us"],tags:{amenity:"school",brand:"Success Academy","brand:wikidata":"Q14707388","brand:wikipedia":"en:Success Academy Charter Schools",name:"Success Academy","operator:type":"private_non_profit"}},"amenity/social_centre|American Legion Hall":{countryCodes:["us"],matchNames:["american legion"],tags:{amenity:"social_centre",brand:"American Legion","brand:wikidata":"Q468865","brand:wikipedia":"en:American Legion",name:"American Legion Hall","social_centre:for":"veterans"}},"amenity/social_centre|Eagles Lodge":{countryCodes:["us"],matchNames:["aeries","eagles"],tags:{alt_name:"Aeries Lodge",amenity:"social_centre",brand:"Fraternal Order of Eagles","brand:wikidata":"Q5493810","brand:wikipedia":"en:Fraternal Order of Eagles",name:"Eagles Lodge",official_name:"Fraternal Order of Eagles",short_name:"FOE"}},"amenity/social_centre|Elks Lodge":{countryCodes:["us"],matchNames:["elks"],tags:{amenity:"social_centre",brand:"Benevolent and Protective Order of Elks","brand:wikidata":"Q2895789","brand:wikipedia":"en:Benevolent and Protective Order of Elks",name:"Elks Lodge",official_name:"Benevolent and Protective Order of Elks",short_name:"BPOE"}},"amenity/social_centre|Lions Clubs International":{matchNames:["lions club","lions club international","lions clubs"],tags:{amenity:"social_centre",brand:"Lions Clubs International","brand:wikidata":"Q270029","brand:wikipedia":"en:Lions Clubs International",name:"Lions Clubs International"}},"amenity/social_centre|Moose Lodge":{countryCodes:["bm","ca","us"],matchNames:["moose"],tags:{amenity:"social_centre",brand:"Loyal Order of Moose","brand:wikidata":"Q6908585","brand:wikipedia":"en:Loyal Order of Moose",name:"Moose Lodge",official_name:"Loyal Order of Moose"}},"amenity/social_centre|Odd Fellows Hall":{matchNames:["odd fellow","odd fellows"],tags:{amenity:"social_centre",brand:"Independent Order of Odd Fellows","brand:wikidata":"Q1425508","brand:wikipedia":"en:Independent Order of Odd Fellows",name:"Odd Fellows Hall",official_name:"Independent Order of Odd Fellows",short_name:"IOOF"}},"amenity/social_centre|Orioles Nest":{countryCodes:["us"],matchNames:["fraternal order of orioles","oriole nest","orioles"],tags:{amenity:"social_centre",brand:"Fraternal Order Orioles","brand:wikidata":"Q5493805","brand:wikipedia":"en:Fraternal Order Orioles",name:"Orioles Nest",official_name:"Fraternal Order Orioles",short_name:"FOO"}},"amenity/social_centre|Royal Canadian Legion Hall":{countryCodes:["ca"],tags:{amenity:"social_centre",brand:"Royal Canadian Legion","brand:wikidata":"Q3270231","brand:wikipedia":"en:Royal Canadian Legion",name:"Royal Canadian Legion Hall",short_name:"RCL"}},"amenity/social_centre|VFW Post":{countryCodes:["de","jp","kr","ph","th","us"],tags:{amenity:"social_centre",brand:"Veterans of Foreign Wars of the United States","brand:wikidata":"Q3556413","brand:wikipedia":"en:Veterans of Foreign Wars",name:"VFW Post","name:en":"VFW Post",official_name:"Veterans of Foreign Wars of the United States",short_name:"VFW","social_centre:for":"veterans"}},"amenity/social_facility|Boys & Girls Club":{countryCodes:["us"],tags:{amenity:"social_facility",brand:"Boys & Girls Club","brand:wikidata":"Q2923055","brand:wikipedia":"en:Boys & Girls Clubs of America",name:"Boys & Girls Club",social_facility:"outreach","social_facility:for":"children"}},"amenity/social_facility|ONCE":{countryCodes:["es"],nomatch:["shop/lottery|ONCE"],tags:{amenity:"social_facility",brand:"ONCE","brand:wikidata":"Q1750397","brand:wikipedia":"es:Organización Nacional de Ciegos Españoles",name:"ONCE",official_name:"Organización Nacional de Ciegos Españoles",social_facility:"outreach","social_facility:for":"blind"}},"amenity/social_facility|Vet Center":{countryCodes:["us"],tags:{amenity:"social_facility",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"counselling","healthcare:counselling":"psychiatry","healthcare:for":"veterans",name:"Vet Center",social_facility:"healthcare;outreach","social_facility:for":"veterans"}},"amenity/university|DeVry University":{countryCodes:["us"],tags:{amenity:"university",brand:"DeVry University","brand:wikidata":"Q3298441","brand:wikipedia":"en:DeVry University",name:"DeVry University",short_name:"DeVry"}},"amenity/university|Strayer University":{countryCodes:["us"],tags:{amenity:"university",brand:"Strayer University","brand:wikidata":"Q7622587","brand:wikipedia":"en:Strayer University",name:"Strayer University",short_name:"Strayer"}},"amenity/university|University of Phoenix":{countryCodes:["us"],tags:{amenity:"university",brand:"University of Phoenix","brand:wikidata":"Q1889100","brand:wikipedia":"en:University of Phoenix",name:"University of Phoenix",short_name:"UOPX"}},"amenity/vehicle_inspection|Autosur":{countryCodes:["fr"],tags:{amenity:"vehicle_inspection",brand:"Autosur","brand:wikidata":"Q64224807",name:"Autosur"}},"amenity/vehicle_inspection|Autovision":{countryCodes:["fr"],tags:{amenity:"vehicle_inspection",brand:"Autovision","brand:wikidata":"Q64224842",name:"Autovision"}},"amenity/vehicle_inspection|Dekra":{countryCodes:["de","fr"],tags:{amenity:"vehicle_inspection",brand:"Dekra","brand:wikidata":"Q383711","brand:wikipedia":"en:Dekra",name:"Dekra",official_name:"Dekra Automotive"}},"amenity/vehicle_inspection|Sécuritest":{countryCodes:["fr"],tags:{amenity:"vehicle_inspection",brand:"Sécuritest","brand:wikidata":"Q64224992",name:"Sécuritest"}},"amenity/vehicle_inspection|TÜV Hanse":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Hanse","brand:wikidata":"Q2463537","brand:wikipedia":"de:TÜV Hanse",name:"TÜV Hanse",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Hessen":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Hessen","brand:wikidata":"Q2463542","brand:wikipedia":"de:TÜV Hessen",name:"TÜV Hessen",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Nord":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Nord","brand:wikidata":"Q2463547","brand:wikipedia":"de:TÜV Nord",name:"TÜV Nord",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Rheinland":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Rheinland","brand:wikidata":"Q632391","brand:wikipedia":"de:TÜV Rheinland",name:"TÜV Rheinland",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Saarland":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Saarland","brand:wikidata":"Q996314","brand:wikipedia":"de:TÜV Saarland",name:"TÜV Saarland",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Süd":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Süd","brand:wikidata":"Q880718","brand:wikipedia":"de:TÜV Süd",name:"TÜV Süd",short_name:"TÜV"}},"amenity/vehicle_inspection|TÜV Thüringen":{countryCodes:["de"],tags:{amenity:"vehicle_inspection",brand:"TÜV Thüringen","brand:wikidata":"Q2463551","brand:wikipedia":"de:TÜV Thüringen",name:"TÜV Thüringen",short_name:"TÜV"}},"amenity/vending_machine|Amazon Locker":{countryCodes:["de","us"],tags:{amenity:"vending_machine",brand:"Amazon Locker","brand:wikidata":"Q16974764","brand:wikipedia":"en:Amazon Locker",name:"Amazon Locker",vending:"parcel_pickup"}},"amenity/vending_machine|AmeriGas":{countryCodes:["us"],tags:{amenity:"vending_machine",brand:"AmeriGas","brand:wikidata":"Q23130318","fuel:lpg":"yes",name:"AmeriGas",vending:"gas"}},"amenity/vending_machine|Automat ŚKUP":{countryCodes:["pl"],tags:{amenity:"vending_machine",brand:"Automat ŚKUP","brand:wikidata":"Q24945427","brand:wikipedia":"pl:Śląska Karta Usług Publicznych",name:"Automat ŚKUP",vending:"public_transport_tickets"}},"amenity/vending_machine|BKK-automata":{countryCodes:["hu"],tags:{amenity:"vending_machine",brand:"BKK-automata","brand:wikidata":"Q608917","brand:wikipedia":"hu:Budapesti Közlekedési Központ",name:"BKK-automata",vending:"public_transport_tickets"}},"amenity/vending_machine|Best Buy Express":{countryCodes:["us"],nomatch:["shop/electronics|Best Buy","shop/mobile_phone|Best Buy Mobile"],tags:{amenity:"vending_machine",brand:"Best Buy Express","brand:wikidata":"Q533415",name:"Best Buy Express",vending:"electronics"}},"amenity/vending_machine|Blue Rhino":{countryCodes:["us"],tags:{amenity:"vending_machine",brand:"Blue Rhino","brand:wikidata":"Q65681213","fuel:lpg":"yes",name:"Blue Rhino",vending:"gas"}},"amenity/vending_machine|CVS Pharmacy":{countryCodes:["us"],nomatch:["amenity/pharmacy|CVS Pharmacy","shop/chemist|CVS Pharmacy"],tags:{amenity:"vending_machine",brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",name:"CVS Pharmacy",short_name:"CVS",vending:"chemist"}},"amenity/vending_machine|DHL Packstation":{countryCodes:["de"],matchTags:["amenity/post_box"],tags:{amenity:"vending_machine",brand:"Packstation","brand:wikidata":"Q1766703","brand:wikipedia":"en:Packstation",name:"DHL Packstation",vending:"parcel_pickup;parcel_mail_in"}},"amenity/vending_machine|DHL Paketbox":{countryCodes:["de"],tags:{amenity:"vending_machine",brand:"Paketbox","brand:wikidata":"Q2046604","brand:wikipedia":"de:Paketbox",name:"DHL Paketbox",vending:"parcel_mail_in"}},"amenity/vending_machine|Dog-Station":{countryCodes:["at","de","dk"],tags:{amenity:"vending_machine",brand:"Dog-Station","brand:wikidata":"Q63720061",name:"Dog-Station",vending:"excrement_bags"}},"amenity/vending_machine|Foxpost":{tags:{amenity:"vending_machine",brand:"Foxpost",name:"Foxpost"}},"amenity/vending_machine|Home City Ice":{countryCodes:["us"],tags:{amenity:"vending_machine",brand:"Home City Ice","brand:wikidata":"Q5888287",name:"Home City Ice",vending:"ice_cubes"}},"amenity/vending_machine|KKM":{countryCodes:["pl"],tags:{amenity:"vending_machine",brand:"KKM","brand:wikidata":"Q57515549",name:"KKM",vending:"public_transport_tickets"}},"amenity/vending_machine|Ozon Box":{countryCodes:["ru"],matchNames:["постамат ozon box"],matchTags:["amenity/post_box"],tags:{amenity:"vending_machine",brand:"Ozon Box","brand:wikidata":"Q2365235","brand:wikipedia":"ru:Ozon.ru",name:"Ozon Box",vending:"parcel_pickup"}},"amenity/vending_machine|Paczkomat InPost":{countryCodes:["pl"],tags:{amenity:"vending_machine",brand:"InPost","brand:wikidata":"Q3182097","brand:wikipedia":"pl:InPost",name:"Paczkomat InPost",vending:"parcel_pickup;parcel_mail_in"}},"amenity/vending_machine|ParkPlus~(Calgary)":{countryCodes:["ca"],tags:{amenity:"vending_machine",brand:"ParkPlus","brand:wikidata":"Q63719595",name:"ParkPlus",vending:"parking_tickets"}},"amenity/vending_machine|Redbox":{countryCodes:["us"],tags:{amenity:"vending_machine",brand:"Redbox","brand:wikidata":"Q7305489","brand:wikipedia":"en:Redbox",name:"Redbox",vending:"movies"}},"amenity/vending_machine|Reddy Ice":{countryCodes:["us"],tags:{amenity:"vending_machine",brand:"Reddy Ice","brand:wikidata":"Q7305666","brand:wikipedia":"en:Reddy Ice",name:"Reddy Ice",vending:"ice_cubes"}},"amenity/vending_machine|Robidog":{countryCodes:["ch"],tags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog",vending:"excrement_bags"}},"amenity/vending_machine|Schlauchomat":{countryCodes:["at","de","it"],tags:{amenity:"vending_machine",brand:"Schlauchomat",name:"Schlauchomat",vending:"bicycle_tube"}},"amenity/vending_machine|Smartpost":{countryCodes:["fi"],matchTags:["amenity/post_box"],tags:{amenity:"vending_machine",brand:"Smartpost","brand:wikidata":"Q7543889","brand:wikipedia":"fi:SmartPOST",name:"Smartpost",vending:"parcel_pickup;parcel_mail_in"}},"amenity/vending_machine|Tobaccoland":{countryCodes:["de"],tags:{amenity:"vending_machine",brand:"Tobaccoland","brand:wikidata":"Q1439872","brand:wikipedia":"de:Tobaccoland Automatengesellschaft",name:"Tobaccoland",vending:"cigarettes"}},"amenity/vending_machine|VVO Fahrausweise":{countryCodes:["de"],tags:{amenity:"vending_machine",brand:"VVO Fahrausweise",name:"VVO Fahrausweise",vending:"public_transport_tickets"}},"amenity/vending_machine|Ключ здоровья":{countryCodes:["ru"],matchTags:["shop/water"],tags:{amenity:"vending_machine",brand:"Ключ здоровья",name:"Ключ здоровья",vending:"water"}},"amenity/vending_machine|コカ・コーラ":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"コカ・コーラ","brand:en":"Coca-Cola","brand:ja":"コカ・コーラ","brand:wikidata":"Q2813","brand:wikipedia":"ja:コカ・コーラ",drink:"cola",name:"コカ・コーラ","name:en":"Coca-Cola","name:ja":"コカ・コーラ",vending:"drinks"}},"amenity/vending_machine|ポッカサッポロ":{countryCodes:["jp"],matchNames:["pokka sapporo"],tags:{amenity:"vending_machine",brand:"ポッカサッポロ","brand:en":"Pokka Sapporo","brand:ja":"ポッカサッポロ","brand:wikidata":"Q7208665","brand:wikipedia":"ja:ポッカサッポロフード&ビバレッジ",name:"ポッカサッポロ","name:en":"Pokka Sapporo","name:ja":"ポッカサッポロ",vending:"water;food"}},"amenity/veterinary|Banfield Pet Hospital":{countryCodes:["us"],tags:{amenity:"veterinary",brand:"Banfield Pet Hospital","brand:wikidata":"Q2882416","brand:wikipedia":"en:Banfield Pet Hospital",name:"Banfield Pet Hospital"}},"amenity/veterinary|VCA Animal Hospital":{countryCodes:["ca","us"],tags:{amenity:"veterinary",brand:"VCA Animal Hospital","brand:wikidata":"Q7906620","brand:wikipedia":"en:VCA Animal Hospitals",name:"VCA Animal Hospital"}},"craft/cleaning|Molly Maid":{countryCodes:["ca","gb","jp","pt","us"],tags:{brand:"Molly Maid","brand:wikidata":"Q6896624","brand:wikipedia":"en:Molly Maid",craft:"cleaning",name:"Molly Maid"}},"craft/plumber|Mr. Rooter":{countryCodes:["us"],tags:{alt_name:"Mister Rooter",brand:"Mr. Rooter","brand:wikidata":"Q6929145","brand:wikipedia":"en:Mr. Rooter",craft:"plumber",name:"Mr. Rooter",official_name:"Mr. Rooter Plumbing"}},"craft/signmaker|Fastsigns":{countryCodes:["ae","ca","cl","gb","ky","mx","sa","us"],matchTags:["shop/sign"],tags:{brand:"Fastsigns","brand:wikidata":"Q5437127","brand:wikipedia":"en:Fastsigns",craft:"signmaker",name:"Fastsigns"}},"craft/window_construction|K par K":{countryCodes:["fr"],tags:{brand:"K par K","brand:wikidata":"Q3191596","brand:wikipedia":"fr:K par K",craft:"window_construction",name:"K par K"}},"healthcare/blood_donation|American Red Cross":{countryCodes:["us"],tags:{brand:"American Red Cross","brand:wikidata":"Q470110","brand:wikipedia":"en:The American National Red Cross","donation:compensation":"no",healthcare:"blood_donation",name:"American Red Cross",official_name:"The American National Red Cross",short_name:"Red Cross"}},"healthcare/blood_donation|Australian Red Cross Blood Service":{countryCodes:["au"],tags:{brand:"Australian Red Cross Blood Service","brand:wikidata":"Q4824602","brand:wikipedia":"en:Australian Red Cross Blood Service","donation:compensation":"no",healthcare:"blood_donation",name:"Australian Red Cross Blood Service",short_name:"Blood Service"}},"healthcare/blood_donation|Thai Red Cross Society":{countryCodes:["th"],tags:{brand:"Thai Red Cross Society","brand:wikidata":"Q4922087","brand:wikipedia":"en:Thai Red Cross Society","donation:compensation":"no",healthcare:"blood_donation",name:"Thai Red Cross Society",short_name:"Thai Red Cross"}},"healthcare/counselling|Jenny Craig":{countryCodes:["au","ca","nz","us"],matchTags:["amenity/doctors","amenity/weight_clinic","leisure/fitness_centre","office/therapist","shop/beauty","shop/diet","shop/food","shop/health_food","shop/herbalist","shop/nutrition","shop/nutrition_supplements","shop/weight_loss"],tags:{brand:"Jenny Craig","brand:wikidata":"Q6179221","brand:wikipedia":"en:Jenny Craig, Inc.",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"Jenny Craig"}},"healthcare/counselling|WW Studio":{matchNames:["ww"],matchTags:["amenity/doctors","amenity/weight_clinic","leisure/fitness_centre","office/therapist","shop/beauty","shop/diet","shop/food","shop/health_food","shop/herbalist","shop/nutrition","shop/nutrition_supplements","shop/weight_loss"],tags:{alt_name:"Weight Watchers",brand:"WW Studio","brand:wikidata":"Q1929466","brand:wikipedia":"en:WW International",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"WW Studio"}},"landuse/residential|Avalon":{countryCodes:["us"],tags:{brand:"Avalon","brand:wikidata":"Q64665938",landuse:"residential",name:"Avalon",residential:"apartments"}},"leisure/bowling_alley|Hollywood Bowl":{countryCodes:["gb"],tags:{brand:"Hollywood Bowl","brand:wikidata":"Q80971952","brand:wikipedia":"en:Hollywood Bowl Group",leisure:"bowling_alley",name:"Hollywood Bowl"}},"leisure/bowling_alley|Strike Bowling Bar":{countryCodes:["au"],tags:{brand:"Strike Bowling Bar","brand:wikidata":"Q7623769","brand:wikipedia":"en:Strike Bowling Bar",leisure:"bowling_alley",name:"Strike Bowling Bar"}},"leisure/dog_park|Kamp K9":{countryCodes:["ca","us"],matchTags:["leisure/park"],tags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",leisure:"dog_park",name:"Kamp K9"}},"leisure/escape_game|Escapology":{countryCodes:["us"],matchTags:["tourism/attraction"],tags:{brand:"Escapology","brand:wikidata":"Q64137163",leisure:"escape_game",name:"Escapology"}},"leisure/fitness_centre|24 Hour Fitness":{countryCodes:["us"],tags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"}},"leisure/fitness_centre|Academia ao ar livre":{tags:{brand:"Academia ao ar livre",leisure:"fitness_centre",name:"Academia ao ar livre"}},"leisure/fitness_centre|Anytime Fitness":{tags:{brand:"Anytime Fitness","brand:wikidata":"Q4778364","brand:wikipedia":"en:Anytime Fitness",leisure:"fitness_centre",name:"Anytime Fitness"}},"leisure/fitness_centre|Basic-Fit":{countryCodes:["be","es","fr","lu","nl"],tags:{brand:"Basic-Fit","brand:wikidata":"Q40165577","brand:wikipedia":"nl:Basic-Fit",leisure:"fitness_centre",name:"Basic-Fit"}},"leisure/fitness_centre|Blink Fitness":{countryCodes:["us"],matchNames:["blink"],tags:{brand:"Blink Fitness","brand:wikidata":"Q65621568",leisure:"fitness_centre",name:"Blink Fitness"}},"leisure/fitness_centre|Clever fit":{countryCodes:["at","ch","de"],tags:{brand:"Clever fit","brand:wikidata":"Q27909675","brand:wikipedia":"de:Clever fit",leisure:"fitness_centre",name:"Clever fit"}},"leisure/fitness_centre|CorePower Yoga":{countryCodes:["us"],matchNames:["corepower"],matchTags:["club/sport","leisure/sports_centre"],tags:{brand:"CorePower Yoga","brand:wikidata":"Q21015663","brand:wikipedia":"en:CorePower Yoga",leisure:"fitness_centre",name:"CorePower Yoga",sport:"yoga"}},"leisure/fitness_centre|Crunch Fitness":{countryCodes:["au","ca","us"],matchNames:["crunch"],tags:{brand:"Crunch Fitness","brand:wikidata":"Q5190093","brand:wikipedia":"en:Crunch Fitness",leisure:"fitness_centre",name:"Crunch Fitness"}},"leisure/fitness_centre|Curves":{tags:{brand:"Curves","brand:wikidata":"Q5196080","brand:wikipedia":"en:Curves International",leisure:"fitness_centre",name:"Curves"}},"leisure/fitness_centre|F45 Training":{tags:{brand:"F45 Training","brand:wikidata":"Q64390973",leisure:"fitness_centre",name:"F45 Training"}},"leisure/fitness_centre|Fit4Less~(Canada)":{countryCodes:["ca"],tags:{brand:"Fit4Less","brand:wikidata":"Q64821050",leisure:"fitness_centre",name:"Fit4Less"}},"leisure/fitness_centre|Fit4less~(UK)":{countryCodes:["gb"],tags:{brand:"Fit4less","brand:wikidata":"Q64821053",leisure:"fitness_centre",name:"Fit4less"}},"leisure/fitness_centre|Fitness First":{countryCodes:["ae","au","de","gb","ph","th"],tags:{brand:"Fitness First","brand:wikidata":"Q127120","brand:wikipedia":"en:Fitness First",leisure:"fitness_centre",name:"Fitness First"}},"leisure/fitness_centre|Fitness24Seven":{countryCodes:["fi","se"],tags:{brand:"Fitness24Seven","brand:wikidata":"Q61112447","brand:wikipedia":"sv:Fitness24Seven",leisure:"fitness_centre",name:"Fitness24Seven"}},"leisure/fitness_centre|Gold's Gym":{countryCodes:["ae","in","ph","us"],tags:{brand:"Gold's Gym","brand:wikidata":"Q1536234","brand:wikipedia":"en:Gold's Gym",leisure:"fitness_centre",name:"Gold's Gym"}},"leisure/fitness_centre|GoodLife Fitness":{countryCodes:["ca"],tags:{brand:"GoodLife Fitness","brand:wikidata":"Q3110654","brand:wikipedia":"en:GoodLife Fitness",leisure:"fitness_centre",name:"GoodLife Fitness"}},"leisure/fitness_centre|Jazzercise":{countryCodes:["us"],matchTags:["leisure/dance"],tags:{brand:"Jazzercise","brand:wikidata":"Q6168434","brand:wikipedia":"en:Jazzercise",leisure:"fitness_centre",name:"Jazzercise"}},"leisure/fitness_centre|LA Fitness":{countryCodes:["ca","gb","us"],tags:{brand:"LA Fitness","brand:wikidata":"Q6457180","brand:wikipedia":"en:LA Fitness",leisure:"fitness_centre",name:"LA Fitness"}},"leisure/fitness_centre|Life Time":{countryCodes:["ca","us"],matchNames:["life time athletic","life time fitness"],tags:{brand:"Life Time","brand:wikidata":"Q6545004","brand:wikipedia":"en:Life Time Fitness",leisure:"fitness_centre",name:"Life Time"}},"leisure/fitness_centre|McFit":{countryCodes:["at","de","es","it","pl"],tags:{brand:"McFit","brand:wikidata":"Q871302","brand:wikipedia":"en:McFit",leisure:"fitness_centre",name:"McFit"}},"leisure/fitness_centre|Mrs. Sporty":{tags:{brand:"Mrs. Sporty",leisure:"fitness_centre",name:"Mrs. Sporty"}},"leisure/fitness_centre|Orangetheory Fitness":{countryCodes:["ca","es","us"],matchNames:["orangetheory"],tags:{brand:"Orangetheory Fitness","brand:wikidata":"Q25005163","brand:wikipedia":"en:Orangetheory Fitness",leisure:"fitness_centre",name:"Orangetheory Fitness"}},"leisure/fitness_centre|Planet Fitness":{countryCodes:["ca","us"],tags:{brand:"Planet Fitness","brand:wikidata":"Q7201095","brand:wikipedia":"en:Planet Fitness",leisure:"fitness_centre",name:"Planet Fitness"}},"leisure/fitness_centre|PureGym":{countryCodes:["gb"],tags:{brand:"PureGym","brand:wikidata":"Q18345898","brand:wikipedia":"en:PureGym",leisure:"fitness_centre",name:"PureGym"}},"leisure/fitness_centre|Retro Fitness":{countryCodes:["us"],tags:{brand:"Retro Fitness","brand:wikidata":"Q61994955",leisure:"fitness_centre",name:"Retro Fitness"}},"leisure/fitness_centre|Smart Fit":{countryCodes:["br","cl","co","do","mx","pe"],tags:{brand:"Smart Fit","brand:wikidata":"Q30930959","brand:wikipedia":"pt:Smart Fit",leisure:"fitness_centre",name:"Smart Fit"}},"leisure/fitness_centre|Snap Fitness":{tags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"}},"leisure/fitness_centre|SoulCycle":{countryCodes:["ca","us"],tags:{brand:"SoulCycle","brand:wikidata":"Q17084730","brand:wikipedia":"en:SoulCycle",leisure:"fitness_centre",name:"SoulCycle",sport:"cycling"}},"leisure/fitness_centre|The Gym":{countryCodes:["gb"],matchNames:["the gym group"],tags:{brand:"The Gym","brand:wikidata":"Q48815022","brand:wikipedia":"en:The Gym Group",leisure:"fitness_centre",name:"The Gym"}},"leisure/fitness_centre|Virgin Active":{tags:{brand:"Virgin Active","brand:wikidata":"Q4013942","brand:wikipedia":"en:Virgin Active",leisure:"fitness_centre",name:"Virgin Active"}},"leisure/fitness_centre|Xercise4Less":{countryCodes:["gb"],tags:{brand:"Xercise4Less","brand:wikidata":"Q79244612",leisure:"fitness_centre",name:"Xercise4Less"}},"leisure/fitness_centre|エニタイムフィットネス":{countryCodes:["jp"],tags:{"alt_name:en":"Fast Fitness",brand:"エニタイムフィットネス","brand:en":"Anytime Fitness","brand:ja":"エニタイムフィットネス","brand:wikidata":"Q4778364","brand:wikipedia":"ja:エニタイムフィットネス",leisure:"fitness_centre",name:"エニタイムフィットネス","name:en":"Anytime Fitness","name:ja":"エニタイムフィットネス"}},"leisure/fitness_centre|カーブス":{countryCodes:["jp"],tags:{brand:"カーブス","brand:en":"Curves","brand:ja":"カーブス","brand:wikidata":"Q5196080","brand:wikipedia":"ja:カーブス",leisure:"fitness_centre",name:"カーブス","name:en":"Curves","name:ja":"カーブス"}},"leisure/playground|McDonald's PlayPlace":{matchNames:["mcdonald's"],tags:{access:"customers",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",leisure:"playground",name:"McDonald's PlayPlace"}},"leisure/sports_centre|YMCA":{tags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"sports_centre",name:"YMCA"}},"leisure/sports_centre|iFLY":{tags:{brand:"iFLY","brand:wikidata":"Q64767105",leisure:"sports_centre",name:"iFLY",sport:"indoor_skydiving"}},"office/bail_bond_agent|Aladdin Bail Bonds":{countryCodes:["us"],matchNames:["aladdin","aladin bail bonds","alladin bail bonds"],matchTags:["amenity/bail_bond","amenity/bail_bonds","office/bail_bond","office/bail_bonds","shop/bail_bond","shop/bail_bonds","shop/money_lender"],tags:{brand:"Aladdin Bail Bonds","brand:wikidata":"Q64166257","brand:wikipedia":"en:Aladdin Bail Bonds",name:"Aladdin Bail Bonds",office:"bail_bond_agent",opening_hours:"24/7"}},"office/consulting|Deloitte":{matchTags:["office/accountant","office/financial","office/tax_adivsor"],tags:{brand:"Deloitte","brand:wikidata":"Q491748","brand:wikipedia":"en:Deloitte",name:"Deloitte",office:"consulting"}},"office/consulting|EY":{matchTags:["office/accountant","office/financial","office/tax_adivsor"],tags:{brand:"EY","brand:wikidata":"Q489097","brand:wikipedia":"en:Ernst & Young",name:"EY",office:"consulting",official_name:"Ernst & Young"}},"office/consulting|Indra":{matchTags:["office/financial","office/it","office/telecommunication"],tags:{brand:"Indra","brand:wikidata":"Q1661823","brand:wikipedia":"es:Indra Sistemas",name:"Indra",office:"consulting",official_name:"Indra Sistemas, S.A."}},"office/consulting|KPMG":{matchTags:["office/accountant","office/financial","office/tax_adivsor"],tags:{brand:"KPMG","brand:wikidata":"Q493751","brand:wikipedia":"en:KPMG",name:"KPMG",office:"consulting"}},"office/consulting|PwC":{matchTags:["office/accountant","office/financial","office/tax_adivsor"],tags:{brand:"PwC","brand:wikidata":"Q488048","brand:wikipedia":"en:PricewaterhouseCoopers",name:"PwC",office:"consulting",official_name:"PricewaterhouseCoopers"}},"office/coworking|Awfis":{countryCodes:["in"],tags:{brand:"Awfis","brand:wikidata":"Q60747757","brand:wikipedia":"en:Awfis",fee:"yes",name:"Awfis",office:"coworking"}},"office/coworking|Ucommune~(China)":{countryCodes:["cn"],tags:{brand:"优客工场","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"优客工场","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"}},"office/coworking|Ucommune~(Hong Kong)":{countryCodes:["hk"],tags:{brand:"優客工場 Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場 Ucommune","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"}},"office/coworking|Ucommune~(Singapore)":{countryCodes:["sg"],tags:{brand:"Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"Ucommune","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"}},"office/coworking|Ucommune~(Taiwan)":{countryCodes:["tw"],tags:{brand:"優客工場","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"}},"office/coworking|WeWork":{countryCodes:["us"],tags:{brand:"WeWork","brand:wikidata":"Q19995004","brand:wikipedia":"en:WeWork",fee:"yes",name:"WeWork",office:"coworking"}},"office/employment_agency|Adecco":{tags:{brand:"Adecco","brand:wikidata":"Q353494","brand:wikipedia":"en:The Adecco Group",name:"Adecco",office:"employment_agency"}},"office/employment_agency|Agentur für Arbeit":{countryCodes:["de"],tags:{brand:"Agentur für Arbeit","brand:wikidata":"Q1478016","brand:wikipedia":"de:Bundesagentur für Arbeit",name:"Agentur für Arbeit",office:"employment_agency"}},"office/employment_agency|Appel Médical":{countryCodes:["fr"],tags:{brand:"Appel Médical",name:"Appel Médical",office:"employment_agency"}},"office/employment_agency|Jobcentre Plus":{countryCodes:["gb"],tags:{brand:"Jobcentre Plus","brand:wikidata":"Q6206793","brand:wikipedia":"en:Jobcentre Plus",name:"Jobcentre Plus",office:"employment_agency"}},"office/employment_agency|Manpower":{tags:{brand:"Manpower","brand:wikidata":"Q1472539","brand:wikipedia":"en:ManpowerGroup",name:"Manpower",office:"employment_agency"}},"office/employment_agency|Pôle Emploi":{countryCodes:["fr"],tags:{brand:"Pôle Emploi","brand:wikidata":"Q8901192","brand:wikipedia":"en:Pôle emploi",name:"Pôle Emploi",office:"employment_agency"}},"office/employment_agency|Randstad":{tags:{brand:"Randstad","brand:wikidata":"Q267840","brand:wikipedia":"en:Randstad Holding",name:"Randstad",office:"employment_agency"}},"office/energy_supplier|Endesa":{tags:{brand:"Endesa","brand:wikidata":"Q1275336","brand:wikipedia":"es:Endesa",name:"Endesa",office:"energy_supplier"}},"office/energy_supplier|Iberdrola":{tags:{brand:"Iberdrola","brand:wikidata":"Q1437502","brand:wikipedia":"es:Iberdrola",name:"Iberdrola",office:"energy_supplier"}},"office/energy_supplier|Naturgy":{countryCodes:["ar","au","be","br","cl","cn","cr","de","do","dz","eg","es","fr","gb","ie","in","jm","jo","jp","lu","ma","mx","nl","om","pa","pe","pk","pr","pt","sg"],tags:{brand:"Naturgy","brand:wikidata":"Q474690","brand:wikipedia":"es:Naturgy",name:"Naturgy",office:"energy_supplier"}},"office/estate_agent|Allen & Harris":{countryCodes:["gb"],tags:{brand:"Allen & Harris","brand:wikidata":"Q81856601",name:"Allen & Harris",office:"estate_agent"}},"office/estate_agent|Bagshaws Residential":{countryCodes:["gb"],tags:{brand:"Bagshaws Residential","brand:wikidata":"Q81859084",name:"Bagshaws Residential",office:"estate_agent"}},"office/estate_agent|Bairstow Eves":{countryCodes:["gb"],tags:{brand:"Bairstow Eves","brand:wikidata":"Q81074787",name:"Bairstow Eves",office:"estate_agent"}},"office/estate_agent|Barnard Marcus":{countryCodes:["gb"],tags:{brand:"Barnard Marcus","brand:wikidata":"Q81860444",name:"Barnard Marcus",office:"estate_agent"}},"office/estate_agent|Brown & Merry":{countryCodes:["gb"],tags:{brand:"Brown & Merry","brand:wikidata":"Q81859714",name:"Brown & Merry",office:"estate_agent"}},"office/estate_agent|Century 21":{matchNames:["century 21 real estate"],nomatch:["shop/department_store|Century 21"],tags:{brand:"Century 21","brand:wikidata":"Q1054480","brand:wikipedia":"en:Century 21 (real estate)",name:"Century 21",office:"estate_agent"}},"office/estate_agent|Coldwell Banker":{matchNames:["coldwell banker real estate"],tags:{brand:"Coldwell Banker","brand:wikidata":"Q738853","brand:wikipedia":"en:Coldwell Banker",name:"Coldwell Banker",office:"estate_agent"}},"office/estate_agent|Connells":{countryCodes:["gb"],tags:{brand:"Connells","brand:wikidata":"Q5161738","brand:wikipedia":"en:Connells Group",name:"Connells",office:"estate_agent"}},"office/estate_agent|Engel & Völkers":{tags:{brand:"Engel & Völkers","brand:wikidata":"Q1341765","brand:wikipedia":"en:Engel & Völkers",name:"Engel & Völkers",office:"estate_agent"}},"office/estate_agent|Foncia":{countryCodes:["fr"],tags:{brand:"Foncia","brand:wikidata":"Q1435638","brand:wikipedia":"fr:Foncia",name:"Foncia",office:"estate_agent"}},"office/estate_agent|Fox & Sons":{countryCodes:["gb"],tags:{brand:"Fox & Sons","brand:wikidata":"Q81855298",name:"Fox & Sons",office:"estate_agent"}},"office/estate_agent|Foxtons":{countryCodes:["gb"],tags:{brand:"Foxtons","brand:wikidata":"Q5477251","brand:wikipedia":"en:Foxtons",name:"Foxtons",office:"estate_agent"}},"office/estate_agent|Greenslade Taylor Hunt":{countryCodes:["gb"],matchNames:["gth"],tags:{brand:"Greenslade Taylor Hunt","brand:wikidata":"Q81052826",name:"Greenslade Taylor Hunt",office:"estate_agent"}},"office/estate_agent|Guy Hoquet":{countryCodes:["fr"],tags:{brand:"Guy Hoquet","brand:wikidata":"Q25383970","brand:wikipedia":"fr:Guy Hoquet l'immobilier",name:"Guy Hoquet",office:"estate_agent"}},"office/estate_agent|Haart":{countryCodes:["gb"],tags:{brand:"Haart","brand:wikidata":"Q75006731","brand:wikipedia":"en: Spicerhaart",name:"Haart",office:"estate_agent"}},"office/estate_agent|Hamptons International":{countryCodes:["gb"],matchNames:["hamptons international lettings","hamptons international sales"],tags:{brand:"Hamptons International","brand:wikidata":"Q5646350","brand:wikipedia":"en:Hamptons International",name:"Hamptons International",office:"estate_agent",short_name:"Hamptons"}},"office/estate_agent|Harcourts":{tags:{brand:"Harcourts","brand:wikidata":"Q5655056","brand:wikipedia":"en:Harcourts International",name:"Harcourts",office:"estate_agent"}},"office/estate_agent|John L. Scott":{countryCodes:["us"],tags:{brand:"John L. Scott","brand:wikidata":"Q6243687","brand:wikipedia":"en:John L. Scott",name:"John L. Scott",office:"estate_agent"}},"office/estate_agent|Jones & Chapman":{countryCodes:["gb"],tags:{brand:"Jones & Chapman","brand:wikidata":"Q81858007",name:"Jones & Chapman",office:"estate_agent"}},"office/estate_agent|Knight Frank":{tags:{brand:"Knight Frank","brand:wikidata":"Q3197998","brand:wikipedia":"en:Knight Frank",name:"Knight Frank",office:"estate_agent"}},"office/estate_agent|Laforêt":{countryCodes:["fr"],tags:{brand:"Laforêt","brand:wikidata":"Q56310946","brand:wikipedia":"fr:Laforêt (immobilier)",name:"Laforêt",office:"estate_agent"}},"office/estate_agent|Manners & Harrison":{countryCodes:["gb"],tags:{brand:"Manners & Harrison","brand:wikidata":"Q81857241",name:"Manners & Harrison",office:"estate_agent"}},"office/estate_agent|Martin & Co":{countryCodes:["gb"],tags:{brand:"Martin & Co","brand:wikidata":"Q81066918",name:"Martin & Co",office:"estate_agent"}},"office/estate_agent|Orpi":{countryCodes:["fr"],tags:{brand:"Orpi","brand:wikidata":"Q3356080","brand:wikipedia":"fr:Organisation régionale des professionnels de l'immobilier",name:"Orpi",office:"estate_agent"}},"office/estate_agent|Palmer Snell":{countryCodes:["gb"],tags:{brand:"Palmer Snell","brand:wikidata":"Q81068923",name:"Palmer Snell",office:"estate_agent"}},"office/estate_agent|RE/MAX":{tags:{brand:"RE/MAX","brand:wikidata":"Q965845","brand:wikipedia":"en:RE/MAX",name:"RE/MAX",office:"estate_agent"}},"office/estate_agent|Ray White":{countryCodes:["au","nz"],tags:{brand:"Ray White","brand:wikidata":"Q81077729",name:"Ray White",office:"estate_agent"}},"office/estate_agent|Roger Platt":{countryCodes:["gb"],tags:{brand:"Roger Platt","brand:wikidata":"Q81859999",name:"Roger Platt",office:"estate_agent"}},"office/estate_agent|Royal LePage":{countryCodes:["ca"],tags:{brand:"Royal LePage","brand:wikidata":"Q7374385","brand:wikipedia":"en:Royal LePage",name:"Royal LePage",office:"estate_agent"}},"office/estate_agent|Shipways":{countryCodes:["gb"],tags:{brand:"Shipways","brand:wikidata":"Q81859397",name:"Shipways",office:"estate_agent"}},"office/estate_agent|Square Habitat":{countryCodes:["fr"],tags:{brand:"Square Habitat","brand:wikidata":"Q64027038","brand:wikipedia":"fr:Square Habitat",name:"Square Habitat",office:"estate_agent"}},"office/estate_agent|Stirling Ackroyd":{countryCodes:["gb"],tags:{brand:"Stirling Ackroyd","brand:wikidata":"Q81062228",name:"Stirling Ackroyd",office:"estate_agent"}},"office/estate_agent|Swetenhams":{countryCodes:["gb"],tags:{brand:"Swetenhams","brand:wikidata":"Q81858340",name:"Swetenhams",office:"estate_agent"}},"office/estate_agent|Tecnocasa":{countryCodes:["es","it","pl"],tags:{brand:"Tecnocasa","brand:wikidata":"Q2399658","brand:wikipedia":"de:Tecnocasa",name:"Tecnocasa",office:"estate_agent"}},"office/estate_agent|Townends":{countryCodes:["gb"],tags:{brand:"Townends","brand:wikidata":"Q81061275",name:"Townends",office:"estate_agent"}},"office/estate_agent|Webbers":{countryCodes:["gb"],tags:{brand:"Webbers","brand:wikidata":"Q81068176",name:"Webbers",office:"estate_agent"}},"office/estate_agent|William H. Brown":{countryCodes:["gb"],tags:{brand:"William H. Brown","brand:wikidata":"Q81787271",name:"William H. Brown",office:"estate_agent"}},"office/estate_agent|Your Move":{countryCodes:["gb"],tags:{brand:"Your Move","brand:wikidata":"Q81078416",name:"Your Move",office:"estate_agent"}},"office/estate_agent|アパマンショップ":{countryCodes:["jp"],tags:{brand:"アパマンショップ","brand:en":"Apaman Shop","brand:ja":"アパマンショップ","brand:wikidata":"Q11284512","brand:wikipedia":"ja:Apaman Network",name:"アパマンショップ","name:en":"Apaman Shop","name:ja":"アパマンショップ",office:"estate_agent"}},"office/estate_agent|エイブル":{countryCodes:["jp"],tags:{brand:"エイブル","brand:en":"Able","brand:ja":"エイブル","brand:wikidata":"Q11289620","brand:wikipedia":"ja:エイブル",name:"エイブル","name:en":"Able","name:ja":"エイブル",office:"estate_agent"}},"office/estate_agent|ピタットハウス":{countryCodes:["jp"],matchNames:["ピタットハウスネットワーク"],tags:{brand:"ピタットハウス","brand:en":"Pitat House","brand:ja":"ピタットハウス","brand:wikidata":"Q11331484","brand:wikipedia":"ja:ピタットハウスネットワーク",name:"ピタットハウス","name:en":"Pitat House","name:ja":"ピタットハウス",office:"estate_agent"}},"office/estate_agent|三菱UFJ不動産販売":{countryCodes:["jp"],tags:{brand:"三菱UFJ不動産販売","brand:en":"Mitsubishi UFJ Real Estate Services","brand:ja":"三菱UFJ不動産販売","brand:wikidata":"Q11357004","brand:wikipedia":"ja:三菱UFJ不動産販売",name:"三菱UFJ不動産販売","name:en":"Mitsubishi UFJ Real Estate Services","name:ja":"三菱UFJ不動産販売",office:"estate_agent"}},"office/estate_agent|信義房屋":{countryCodes:["tw"],tags:{brand:"信義房屋","brand:en":"Sinyi Realty","brand:wikidata":"Q10888034","brand:wikipedia":"zh:信義房屋","brand:zh":"信義房屋",name:"信義房屋","name:en":"Sinyi Realty","name:zh":"信義房屋",office:"estate_agent"}},"office/estate_agent|永慶房屋":{countryCodes:["tw"],tags:{brand:"永慶房屋","brand:en":"Yung Ching","brand:wikidata":"Q11132113","brand:wikipedia":"zh:永慶房屋","brand:zh":"永慶房屋",name:"永慶房屋","name:en":"Yung Ching","name:zh":"永慶房屋",office:"estate_agent"}},"office/financial_advisor|Edward Jones":{countryCodes:["ca","us"],tags:{alt_name:"Edward Jones Investments",brand:"Edward Jones","brand:wikidata":"Q5343830","brand:wikipedia":"en:Edward Jones Investments",name:"Edward Jones",office:"financial_advisor"}},"office/financial_advisor|TD Ameritrade":{countryCodes:["us"],tags:{brand:"TD Ameritrade","brand:wikidata":"Q7669886","brand:wikipedia":"en:TD Ameritrade",name:"TD Ameritrade",office:"financial_advisor"}},"office/insurance|A-MAX Auto Insurance":{countryCodes:["us"],tags:{brand:"A-MAX Auto Insurance","brand:wikidata":"Q75767609",name:"A-MAX Auto Insurance",office:"insurance",short_name:"A-MAX"}},"office/insurance|AAA Insurance":{countryCodes:["us"],matchNames:["american automobile association"],nomatch:["office/travel_agency|American Automobile Association"],tags:{brand:"American Automobile Association","brand:wikidata":"Q463436","brand:wikipedia":"en:American Automobile Association",name:"AAA Insurance",office:"insurance",short_name:"AAA"}},"office/insurance|AOK":{countryCodes:["de"],tags:{brand:"AOK","brand:wikidata":"Q835141","brand:wikipedia":"de:Allgemeine Ortskrankenkasse",name:"AOK",office:"insurance"}},"office/insurance|AXA":{nomatch:["amenity/bank|AXA"],tags:{brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA",office:"insurance"}},"office/insurance|Allianz":{tags:{brand:"Allianz","brand:wikidata":"Q487292","brand:wikipedia":"en:Allianz",name:"Allianz",office:"insurance"}},"office/insurance|Allstate":{countryCodes:["us"],matchNames:["allstate insurance"],tags:{brand:"Allstate","brand:wikidata":"Q2645636","brand:wikipedia":"en:Allstate",name:"Allstate",office:"insurance"}},"office/insurance|American Family Insurance":{countryCodes:["us"],matchNames:["american family","amfam"],tags:{brand:"American Family Insurance","brand:wikidata":"Q4743730","brand:wikipedia":"en:American Family Insurance",name:"American Family Insurance",office:"insurance"}},"office/insurance|Asepeyo":{countryCodes:["es"],nomatch:["amenity/clinic|Asepeyo"],tags:{brand:"Asepeyo","brand:wikidata":"Q11906879","brand:wikipedia":"es:Asepeyo",name:"Asepeyo",office:"insurance"}},"office/insurance|Assu 2000":{countryCodes:["fr"],tags:{brand:"Assu 2000",name:"Assu 2000",office:"insurance"}},"office/insurance|Aviva":{countryCodes:["fr","ie","pl"],tags:{brand:"Aviva","brand:wikidata":"Q791179","brand:wikipedia":"en:Aviva",name:"Aviva",office:"insurance"}},"office/insurance|BGV":{countryCodes:["de"],tags:{alt_name:"Badische Versicherungen",brand:"BGV","brand:wikidata":"Q795911","brand:wikipedia":"de:BGV / Badische Versicherungen",name:"BGV",office:"insurance"}},"office/insurance|Banco do Brasil Seguridade":{countryCodes:["br"],tags:{brand:"Banco do Brasil Seguridade","brand:wikidata":"Q18499520","brand:wikipedia":"pt:BB Seguridade",name:"Banco do Brasil Seguridade",office:"insurance",short_name:"BB Seguridade"}},"office/insurance|Bâloise":{countryCodes:["be","ch","de","li","lu"],tags:{brand:"Bâloise","brand:wikidata":"Q457912","brand:wikipedia":"en:Bâloise",name:"Bâloise",office:"insurance"}},"office/insurance|CUK Ubezpieczenia":{countryCodes:["pl"],tags:{brand:"CUK Ubezpieczenia",name:"CUK Ubezpieczenia",office:"insurance"}},"office/insurance|DAK":{countryCodes:["de"],tags:{brand:"DAK","brand:wikidata":"Q1151671","brand:wikipedia":"de:DAK-Gesundheit",name:"DAK",office:"insurance"}},"office/insurance|DEVK":{countryCodes:["de"],tags:{brand:"DEVK","brand:wikidata":"Q1153049","brand:wikipedia":"de:DEVK",name:"DEVK",office:"insurance"}},"office/insurance|Debeka":{countryCodes:["de"],tags:{brand:"Debeka","brand:wikidata":"Q1181452","brand:wikipedia":"de:Debeka",name:"Debeka",office:"insurance"}},"office/insurance|Erie Insurance":{countryCodes:["us"],matchNames:["erie"],tags:{brand:"Erie Insurance","brand:wikidata":"Q5388314","brand:wikipedia":"en:Erie Insurance Group",name:"Erie Insurance",office:"insurance"}},"office/insurance|Farmers Insurance":{countryCodes:["us"],matchNames:["farmers"],tags:{brand:"Farmers Insurance","brand:wikidata":"Q1396863","brand:wikipedia":"en:Farmers Insurance Group",name:"Farmers Insurance",office:"insurance"}},"office/insurance|Foyer":{countryCodes:["lu"],tags:{brand:"Foyer","brand:wikidata":"Q1344573","brand:wikipedia":"lb:Foyer",name:"Foyer",office:"insurance"}},"office/insurance|Fremap":{countryCodes:["es"],tags:{brand:"Fremap","brand:wikidata":"Q5869232","brand:wikipedia":"es:Fremap",name:"Fremap",office:"insurance"}},"office/insurance|GEICO":{countryCodes:["us"],tags:{brand:"GEICO","brand:wikidata":"Q1498689","brand:wikipedia":"en:GEICO",name:"GEICO",office:"insurance"}},"office/insurance|GMF":{countryCodes:["fr"],tags:{brand:"GMF","brand:wikidata":"Q3095296","brand:wikipedia":"fr:Garantie mutuelle des fonctionnaires",name:"GMF",office:"insurance"}},"office/insurance|Generali":{tags:{brand:"Generali","brand:wikidata":"Q670482","brand:wikipedia":"it:Assicurazioni Generali",name:"Generali",office:"insurance"}},"office/insurance|Grange Insurance":{countryCodes:["us"],matchNames:["grange"],tags:{brand:"Grange Insurance","brand:wikidata":"Q17183481","brand:wikipedia":"en:Grange Insurance",name:"Grange Insurance",office:"insurance"}},"office/insurance|Groupama":{matchTags:["amenity/bank|groupama"],tags:{brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"fr:Groupama",name:"Groupama",office:"insurance",official_name:"Groupe des Assurances Mutuelles Agricoles"}},"office/insurance|HUK-Coburg":{countryCodes:["de"],tags:{brand:"HUK-Coburg",name:"HUK-Coburg",office:"insurance"}},"office/insurance|Harmonie Mutuelle":{countryCodes:["fr"],tags:{brand:"Harmonie Mutuelle","brand:wikidata":"Q3127528","brand:wikipedia":"fr:Harmonie mutuelle",name:"Harmonie Mutuelle",office:"insurance"}},"office/insurance|Helvetia":{countryCodes:["at","ch","de","es","fr","it"],tags:{brand:"Helvetia","brand:wikidata":"Q933766","brand:wikipedia":"it:Helvetia Assicurazioni",name:"Helvetia",office:"insurance"}},"office/insurance|Knappschaft":{countryCodes:["de"],tags:{brand:"Knappschaft","brand:wikidata":"Q1313465","brand:wikipedia":"de:Knappschaft (Krankenkasse)",name:"Knappschaft",office:"insurance"}},"office/insurance|LaLux":{countryCodes:["lu"],matchNames:["la luxembourgeoise"],tags:{brand:"LaLux","brand:wikipedia":"lb:La Luxembourgeoise",name:"LaLux",office:"insurance"}},"office/insurance|MAAF":{countryCodes:["fr"],tags:{brand:"MAAF","brand:wikidata":"Q3331028","brand:wikipedia":"fr:Mutuelle d'assurance des artisans de France",name:"MAAF",office:"insurance"}},"office/insurance|MMA":{countryCodes:["fr"],tags:{brand:"MMA","brand:wikidata":"Q3331046","brand:wikipedia":"fr:MMA (assurance)",name:"MMA",office:"insurance",official_name:"Mutuelles du Mans Assurances"}},"office/insurance|Macif":{countryCodes:["fr"],tags:{brand:"Macif","brand:wikidata":"Q3331021","brand:wikipedia":"fr:Mutuelle assurance des commerçants et industriels de France et des cadres et des salariés de l'industrie et du commerce",name:"Macif",office:"insurance"}},"office/insurance|Maif":{countryCodes:["fr"],tags:{brand:"Maif","brand:wikidata":"Q3331029","brand:wikipedia":"fr:Mutuelle d'assurance des instituteurs de France",name:"Maif",office:"insurance",official_name:"Mutuelle d'assurance des instituteurs de France"}},"office/insurance|Mapfre":{tags:{brand:"Mapfre","brand:wikidata":"Q544532","brand:wikipedia":"en:Mapfre",name:"Mapfre",office:"insurance"}},"office/insurance|Matmut":{countryCodes:["fr"],tags:{brand:"Matmut","brand:wikidata":"Q3299185","brand:wikipedia":"fr:Matmut",name:"Matmut",office:"insurance"}},"office/insurance|Nationwide":{countryCodes:["us"],matchNames:["nationwide insurance"],nomatch:["amenity/bank|Nationwide"],tags:{brand:"Nationwide","brand:wikidata":"Q6979886","brand:wikipedia":"en:Nationwide Mutual Insurance Company",name:"Nationwide",office:"insurance"}},"office/insurance|Ocaso":{countryCodes:["es","gb"],matchNames:["ocaso seguros","seguros ocaso"],tags:{brand:"Ocaso","brand:wikidata":"Q6123955","brand:wikipedia":"es:Seguros Ocaso",name:"Ocaso",office:"insurance"}},"office/insurance|PZU":{countryCodes:["pl"],tags:{brand:"PZU","brand:wikidata":"Q1807170","brand:wikipedia":"pl:Powszechny Zakład Ubezpieczeń",name:"PZU",office:"insurance"}},"office/insurance|Progressive":{countryCodes:["us"],matchNames:["progressive insurance"],tags:{brand:"Progressive","brand:wikidata":"Q7248721","brand:wikipedia":"en:Progressive Corporation",name:"Progressive",office:"insurance"}},"office/insurance|Provinzial":{countryCodes:["de"],tags:{brand:"Provinzial",name:"Provinzial",office:"insurance"}},"office/insurance|Reale":{countryCodes:["cl","es","it"],matchNames:["reale chile","reale immobili","reale mutua assicurazioni","reale seguros","seguros reale"],tags:{brand:"Reale","brand:wikidata":"Q3931092","brand:wikipedia":"it:Reale Mutua Assicurazioni",name:"Reale",office:"insurance"}},"office/insurance|SV SparkassenVersicherung":{countryCodes:["de"],tags:{brand:"SV SparkassenVersicherung","brand:wikidata":"Q2208645","brand:wikipedia":"de:SV SparkassenVersicherung",name:"SV SparkassenVersicherung",office:"insurance"}},"office/insurance|State Farm":{countryCodes:["us"],matchNames:["state farm insurance"],tags:{brand:"State Farm","brand:wikidata":"Q2007336","brand:wikipedia":"en:State Farm",name:"State Farm",office:"insurance"}},"office/insurance|Swinton":{countryCodes:["gb"],tags:{brand:"Swinton","brand:wikidata":"Q7658785","brand:wikipedia":"en:Swinton Insurance",name:"Swinton",office:"insurance"}},"office/insurance|Techniker Krankenkasse":{countryCodes:["de"],tags:{brand:"Techniker Krankenkasse","brand:wikidata":"Q607531","brand:wikipedia":"de:Techniker Krankenkasse",name:"Techniker Krankenkasse",office:"insurance"}},"office/insurance|The Co-operators":{countryCodes:["ca"],tags:{brand:"The Co-operators","brand:wikidata":"Q3520320","brand:wikipedia":"en:The Co-operators",name:"The Co-operators",office:"insurance"}},"office/insurance|Tranquilidade":{countryCodes:["pt"],tags:{brand:"Tranquilidade Seguros","brand:wikidata":"Q7833457","brand:wikipedia":"en:Tranquilidade",name:"Tranquilidade",office:"insurance"}},"office/insurance|Württembergische":{countryCodes:["de"],tags:{brand:"Württembergische","brand:wikidata":"Q1412465","brand:wikipedia":"de:Württembergische Versicherung",name:"Württembergische",office:"insurance"}},"office/insurance|Wüstenrot":{countryCodes:["at","cz","de","sk"],tags:{brand:"Wüstenrot",name:"Wüstenrot",office:"insurance"}},"office/insurance|Zurich":{tags:{brand:"Zurich","brand:wikidata":"Q230426","brand:wikipedia":"en:Zurich Insurance Group",name:"Zurich",office:"insurance"}},"office/insurance|Белгосстрах":{countryCodes:["by"],tags:{brand:"Белгосстрах",name:"Белгосстрах",office:"insurance"}},"office/insurance|Ингосстрах":{countryCodes:["ru"],tags:{brand:"Ингосстрах","brand:en":"Ingosstrakh","brand:ru":"Ингосстрах","brand:wikidata":"Q4200631","brand:wikipedia":"ru:Ингосстрах",name:"Ингосстрах","name:en":"Ingosstrakh","name:ru":"Ингосстрах",office:"insurance"}},"office/insurance|РЕСО-Гарантия":{countryCodes:["ru"],tags:{brand:"РЕСО-Гарантия","brand:en":"RESO-Guarantee","brand:ru":"РЕСО-Гарантия","brand:wikidata":"Q4386516","brand:wikipedia":"ru:РЕСО-Гарантия",name:"РЕСО-Гарантия","name:en":"RESO-Guarantee","name:ru":"РЕСО-Гарантия",office:"insurance"}},"office/insurance|Росгосстрах":{countryCodes:["ru"],tags:{brand:"Росгосстрах","brand:wikidata":"Q4397745","brand:wikipedia":"en:Rosgosstrakh",name:"Росгосстрах",office:"insurance"}},"office/insurance|Согласие":{countryCodes:["ru"],tags:{brand:"Согласие","brand:en":"Soglasie","brand:ru":"Согласие","brand:wikidata":"Q4426689","brand:wikipedia":"ru:Согласие (компания)",name:"Согласие","name:en":"Soglasie","name:ru":"Согласие",office:"insurance"}},"office/insurance|بیمه ایران":{countryCodes:["ir"],tags:{brand:"بیمه ایران","brand:en":"Iran Insurance","brand:fa":"بیمه ایران","brand:wikidata":"Q5930269","brand:wikipedia":"fa:بیمه ایران",name:"بیمه ایران","name:en":"Iran Insurance","name:fa":"بیمه ایران",office:"insurance"}},"office/tax_advisor|Block Advisors":{countryCodes:["us"],tags:{brand:"Block Advisors","brand:wikidata":"Q64166231",name:"Block Advisors",office:"tax_advisor"}},"office/tax_advisor|H&R Block":{countryCodes:["au","ca","in","us"],tags:{brand:"H&R Block","brand:wikidata":"Q5627799","brand:wikipedia":"en:H&R Block",name:"H&R Block",office:"tax_advisor"}},"office/tax_advisor|Jackson Hewitt":{countryCodes:["us"],tags:{brand:"Jackson Hewitt","brand:wikidata":"Q6117132","brand:wikipedia":"en:Jackson Hewitt",name:"Jackson Hewitt",office:"tax_advisor",official_name:"Jackson Hewitt Tax Service"}},"office/tax_advisor|Liberty Tax":{countryCodes:["ca","us"],tags:{alt_name:"Liberty Tax Service",brand:"Liberty Tax","brand:wikidata":"Q6541978","brand:wikipedia":"en:Liberty Tax Service",name:"Liberty Tax",office:"tax_advisor"}},"shop/agrarian|Granngården":{countryCodes:["se"],tags:{brand:"Granngården","brand:wikidata":"Q10508136","brand:wikipedia":"sv:Granngården AB",name:"Granngården",shop:"agrarian"}},"shop/agrarian|Southern States":{countryCodes:["us"],tags:{agrarian:"seed;feed;tools",brand:"Southern States","brand:wikidata":"Q7570508","brand:wikipedia":"en:Southern States Cooperative",name:"Southern States",official_name:"Southern States Cooperative",shop:"agrarian"}},"shop/alcohol|Alko":{countryCodes:["fi"],tags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"}},"shop/alcohol|BC Liquor Store":{countryCodes:["ca"],tags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"}},"shop/alcohol|BWS":{countryCodes:["au"],tags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"}},"shop/alcohol|Bargain Booze":{countryCodes:["gb"],tags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"}},"shop/alcohol|BevMo!":{countryCodes:["us"],tags:{brand:"BevMo!","brand:wikidata":"Q4899308","brand:wikipedia":"en:BevMo!",name:"BevMo!",shop:"alcohol"}},"shop/alcohol|Cellarbrations":{countryCodes:["au"],tags:{brand:"Cellarbrations",name:"Cellarbrations",shop:"alcohol"}},"shop/alcohol|Dan Murphy's":{countryCodes:["au"],tags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"}},"shop/alcohol|Fine Wine & Good Spirits":{countryCodes:["us"],tags:{brand:"Fine Wine & Good Spirits","brand:wikidata":"Q64514776",name:"Fine Wine & Good Spirits",shop:"alcohol"}},"shop/alcohol|Gall & Gall":{countryCodes:["nl"],tags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"}},"shop/alcohol|LCBO":{countryCodes:["ca"],tags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"}},"shop/alcohol|Liquor Depot":{countryCodes:["ca"],tags:{brand:"Liquor Depot",name:"Liquor Depot",shop:"alcohol"}},"shop/alcohol|Liquorland":{countryCodes:["au"],tags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",shop:"alcohol"}},"shop/alcohol|Majestic":{countryCodes:["gb"],matchNames:["majestic wine","majestic wine warehouse"],tags:{brand:"Majestic","brand:wikidata":"Q6737725","brand:wikipedia":"en:Majestic Wine",name:"Majestic",shop:"alcohol"}},"shop/alcohol|Mitra":{countryCodes:["nl"],tags:{brand:"Mitra",name:"Mitra",shop:"alcohol"}},"shop/alcohol|Nicolas":{countryCodes:["be","fr","gb"],tags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"}},"shop/alcohol|Oddbins":{countryCodes:["gb"],tags:{brand:"Oddbins","brand:wikidata":"Q7077472","brand:wikipedia":"en:Oddbins",name:"Oddbins",shop:"alcohol"}},"shop/alcohol|SAQ":{countryCodes:["ca"],nomatch:["shop/alcohol|SAQ Express","shop/alcohol|SAQ Sélection"],tags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"}},"shop/alcohol|SAQ Express":{countryCodes:["ca"],nomatch:["shop/alcohol|SAQ","shop/alcohol|SAQ Sélection"],tags:{brand:"SAQ Express","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Express",shop:"alcohol"}},"shop/alcohol|SAQ Sélection":{countryCodes:["ca"],nomatch:["shop/alcohol|SAQ","shop/alcohol|SAQ Express"],tags:{brand:"SAQ Sélection","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Sélection",shop:"alcohol"}},"shop/alcohol|Spec's":{countryCodes:["us"],tags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"}},"shop/alcohol|Super Liquor":{countryCodes:["nz"],tags:{brand:"Super Liquor",name:"Super Liquor",shop:"alcohol"}},"shop/alcohol|Systembolaget":{countryCodes:["se"],tags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"}},"shop/alcohol|The Beer Store":{countryCodes:["ca"],tags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"}},"shop/alcohol|Thirsty Camel":{countryCodes:["au"],tags:{brand:"Thirsty Camel",name:"Thirsty Camel",shop:"alcohol"}},"shop/alcohol|Total Wine":{countryCodes:["us"],tags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",official_name:"Total Wine & More",shop:"alcohol"}},"shop/alcohol|Virginia ABC":{countryCodes:["us"],tags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"}},"shop/alcohol|Алкомаркет":{countryCodes:["kz"],tags:{brand:"Алкомаркет",name:"Алкомаркет",shop:"alcohol"}},"shop/alcohol|Ароматный мир":{countryCodes:["ru"],tags:{brand:"Ароматный мир",name:"Ароматный мир",shop:"alcohol"}},"shop/alcohol|Бристоль":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Бристоль","brand:wikidata":"Q59155583","brand:wikipedia":"ru:Бристоль (сеть магазинов)",name:"Бристоль",shop:"alcohol"}},"shop/alcohol|Винлаб":{countryCodes:["ru"],tags:{brand:"Винлаб",name:"Винлаб",shop:"alcohol"}},"shop/alcohol|Горилка":{countryCodes:["kz","ru"],tags:{brand:"Горилка",name:"Горилка",shop:"alcohol"}},"shop/alcohol|Градус":{countryCodes:["ru"],tags:{brand:"Градус",name:"Градус",shop:"alcohol"}},"shop/alcohol|Градусы":{countryCodes:["ru"],tags:{brand:"Градусы",name:"Градусы",shop:"alcohol"}},"shop/alcohol|Красное & Белое":{countryCodes:["ru"],matchNames:["красное и белое"],tags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Krasnoe & Beloe",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"}},"shop/alcohol|Кристалл":{countryCodes:["by","ru"],matchTags:["shop/convenience"],tags:{brand:"Кристалл",name:"Кристалл",shop:"alcohol"}},"shop/alcohol|Лион":{countryCodes:["ru"],tags:{brand:"Лион",name:"Лион",shop:"alcohol"}},"shop/alcohol|Норман":{countryCodes:["ru"],tags:{brand:"Норман",name:"Норман",shop:"alcohol"}},"shop/alcohol|Отдохни":{countryCodes:["ru"],tags:{brand:"Отдохни",name:"Отдохни",shop:"alcohol"}},"shop/alcohol|Чарка до свята":{tags:{brand:"Чарка до свята",name:"Чарка до свята",shop:"alcohol"}},"shop/alcohol|カクヤス":{countryCodes:["jp"],tags:{brand:"カクヤス","brand:en":"Kakuyasu","brand:ja":"カクヤス","brand:wikidata":"Q11293990","brand:wikipedia":"ja:カクヤス",name:"カクヤス","name:en":"Kakuyasu","name:ja":"カクヤス",shop:"alcohol"}},"shop/art|YellowKorner":{tags:{brand:"YellowKorner","brand:wikidata":"Q3572115","brand:wikipedia":"fr:YellowKorner",name:"YellowKorner",shop:"art"}},"shop/baby_goods|Aubert":{countryCodes:["fr"],tags:{brand:"Aubert","brand:wikidata":"Q62964657",name:"Aubert",shop:"baby_goods"}},"shop/baby_goods|Babies R Us":{countryCodes:["ca","us"],tags:{brand:"Babies R Us","brand:wikidata":"Q17232036",name:"Babies R Us",shop:"baby_goods"}},"shop/baby_goods|BabyOne":{countryCodes:["de"],tags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"}},"shop/baby_goods|Buy Buy Baby":{countryCodes:["ca","us"],tags:{brand:"Buy Buy Baby","brand:wikidata":"Q5003352","brand:wikipedia":"en:Buy Buy Baby",name:"Buy Buy Baby",shop:"baby_goods"}},"shop/baby_goods|Mothercare":{tags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"}},"shop/baby_goods|Zippy":{countryCodes:["es","pt"],tags:{brand:"Zippy","brand:wikidata":"Q10395161","brand:wikipedia":"en:Zippy Kidstore",name:"Zippy",shop:"baby_goods"}},"shop/baby_goods|Дочки-сыночки":{tags:{brand:"Дочки-сыночки",name:"Дочки-сыночки",shop:"baby_goods"}},"shop/baby_goods|西松屋":{countryCodes:["jp"],matchTags:["shop/clothes"],tags:{brand:"西松屋","brand:en":"Nishimatsuya Chain","brand:ja":"西松屋","brand:wikidata":"Q11628761","brand:wikipedia":"ja:西松屋",name:"西松屋","name:en":"Nishimatsuya Chain","name:ja":"西松屋",shop:"baby_goods"}},"shop/bag|Bentley":{countryCodes:["ca"],nomatch:["shop/car|Bentley"],tags:{brand:"Bentley","brand:wikidata":"Q65947700",name:"Bentley",shop:"bag"}},"shop/bag|Carpisa":{countryCodes:["it"],tags:{brand:"Carpisa","brand:wikidata":"Q28035409","brand:wikipedia":"en:Carpisa",name:"Carpisa",shop:"bag"}},"shop/bag|Coach":{countryCodes:["ca","us"],matchNames:["coach new york","coach ny"],tags:{brand:"Coach","brand:wikidata":"Q727697","brand:wikipedia":"en:Coach New York",name:"Coach",shop:"bag"}},"shop/bag|Kipling":{countryCodes:["be","gb"],tags:{brand:"Kipling","brand:wikidata":"Q6414641","brand:wikipedia":"en:Kipling (brand)",name:"Kipling",shop:"bag"}},"shop/bag|Samsonite":{tags:{brand:"Samsonite","brand:wikidata":"Q1203426","brand:wikipedia":"en:Samsonite",name:"Samsonite",shop:"bag"}},"shop/bag|Tumi":{tags:{brand:"Tumi","brand:wikidata":"Q4465402","brand:wikipedia":"en:Tumi Inc.",name:"Tumi",shop:"bag"}},"shop/bag|Vera Bradley":{countryCodes:["us"],tags:{brand:"Vera Bradley","brand:wikidata":"Q7920749","brand:wikipedia":"en:Vera Bradley",name:"Vera Bradley",shop:"bag"}},"shop/bakery|AILI":{countryCodes:["cn"],tags:{brand:"AILI",name:"AILI",shop:"bakery"}},"shop/bakery|Anker":{countryCodes:["at","sk"],tags:{brand:"Anker","brand:wikidata":"Q557116","brand:wikipedia":"de:Ankerbrot",name:"Anker",shop:"bakery"}},"shop/bakery|Armbruster":{countryCodes:["de"],tags:{brand:"Armbruster","brand:wikidata":"Q67987954",name:"Armbruster",shop:"bakery"}},"shop/bakery|Arome Bakery":{countryCodes:["hk"],tags:{brand:"Arome Bakery","brand:wikidata":"Q1305627","brand:wikipedia":"zh:東海堂",name:"Arome Bakery",shop:"bakery"}},"shop/bakery|Awiteks":{countryCodes:["pl"],tags:{brand:"Awiteks","brand:wikidata":"Q62054190",name:"Awiteks",shop:"bakery"}},"shop/bakery|Back-Factory":{countryCodes:["de"],tags:{brand:"Back-Factory","brand:wikidata":"Q21200483","brand:wikipedia":"de:Back-Factory",name:"Back-Factory",shop:"bakery"}},"shop/bakery|Backstube Wünsche":{countryCodes:["de"],matchNames:["wünsche"],tags:{brand:"Backstube Wünsche","brand:wikidata":"Q66085325",name:"Backstube Wünsche",shop:"bakery"}},"shop/bakery|Backwerk":{countryCodes:["at","ch","de","gb","nl"],tags:{brand:"BackWerk","brand:wikidata":"Q798298","brand:wikipedia":"de:BackWerk",name:"Backwerk",shop:"bakery"}},"shop/bakery|Baguette":{countryCodes:["at"],tags:{brand:"Baguette","brand:wikidata":"Q82512635",name:"Baguette",shop:"bakery"}},"shop/bakery|Bakers Delight":{countryCodes:["au","ca","nz","us"],tags:{brand:"Bakers Delight","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"Bakers Delight",shop:"bakery"}},"shop/bakery|Bakker Bart":{countryCodes:["be","nl"],tags:{brand:"Bakker Bart","brand:wikidata":"Q2177445","brand:wikipedia":"nl:Bakker Bart",name:"Bakker Bart",shop:"bakery"}},"shop/bakery|Balfours":{countryCodes:["au"],tags:{brand:"Balfours","brand:wikidata":"Q4850765",name:"Balfours",shop:"bakery",takeaway:"yes"}},"shop/bakery|Banette":{tags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",shop:"bakery"}},"shop/bakery|Beechworth Bakery":{countryCodes:["au"],tags:{brand:"Beechworth Bakery","brand:wikidata":"Q28183324","brand:wikipedia":"en:Beechworth Bakery",name:"Beechworth Bakery",shop:"bakery"}},"shop/bakery|Birds":{countryCodes:["gb"],tags:{brand:"Birds","brand:wikidata":"Q63001935","brand:wikipedia":"en:Birds Bakery",name:"Birds",official_name:"Birds Bakery",shop:"bakery"}},"shop/bakery|BreadTalk":{countryCodes:["sg"],tags:{brand:"BreadTalk","brand:wikidata":"Q1106640","brand:wikipedia":"en:BreadTalk",name:"BreadTalk",shop:"bakery"}},"shop/bakery|Breadtop":{countryCodes:["au"],tags:{brand:"Breadtop","brand:wikidata":"Q4959217","brand:wikipedia":"en:Breadtop",cuisine:"chinese",name:"Breadtop",shop:"bakery"}},"shop/bakery|Brumby's Bakeries":{countryCodes:["au"],tags:{brand:"Brumby's Bakeries","brand:wikidata":"Q4978794","brand:wikipedia":"en:Brumby's Bakeries",name:"Brumby's Bakeries",shop:"bakery"}},"shop/bakery|Bäckerei Fuchs":{countryCodes:["de"],tags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"}},"shop/bakery|Bäckerei Grimminger":{countryCodes:["de"],tags:{brand:"Bäckerei Grimminger",name:"Bäckerei Grimminger",shop:"bakery"}},"shop/bakery|Bäckerei Schmidt":{countryCodes:["de"],tags:{brand:"Bäckerei Schmidt",name:"Bäckerei Schmidt",shop:"bakery"}},"shop/bakery|Bäckerei Schneider":{countryCodes:["de"],tags:{brand:"Bäckerei Schneider",name:"Bäckerei Schneider",shop:"bakery"}},"shop/bakery|Büsch":{countryCodes:["de"],tags:{brand:"Büsch",name:"Büsch",shop:"bakery"}},"shop/bakery|COBS Bread":{countryCodes:["ca","us"],tags:{brand:"COBS Bread","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"COBS Bread",shop:"bakery"}},"shop/bakery|Cadera":{countryCodes:["de"],tags:{brand:"Cadera","brand:wikidata":"Q62086410",name:"Cadera",shop:"bakery"}},"shop/bakery|Castaño":{countryCodes:["cl"],tags:{brand:"Castaño","brand:wikidata":"Q5049629","brand:wikipedia":"en:Castaño (bakery)",name:"Castaño",shop:"bakery"}},"shop/bakery|Cooplands":{countryCodes:["gb"],tags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"}},"shop/bakery|Dat Backhus":{countryCodes:["de"],tags:{brand:"Dat Backhus","brand:wikidata":"Q62093175",name:"Dat Backhus",shop:"bakery"}},"shop/bakery|Der Beck":{countryCodes:["de"],tags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"}},"shop/bakery|Der Mann":{countryCodes:["at"],tags:{brand:"Der Mann",name:"Der Mann",shop:"bakery"}},"shop/bakery|Ditsch":{countryCodes:["de"],tags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"}},"shop/bakery|Fischer":{countryCodes:["be","fr","lu"],tags:{brand:"Fischer","brand:wikipedia":"lb:Panelux",name:"Fischer",shop:"bakery"}},"shop/bakery|Fornetti":{tags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"}},"shop/bakery|Goeken backen":{countryCodes:["de"],tags:{brand:"Goeken backen",name:"Goeken backen",shop:"bakery"}},"shop/bakery|Goldilocks":{countryCodes:["ca","ph","th","us"],tags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"}},"shop/bakery|Granier":{countryCodes:["es"],tags:{brand:"Granier",name:"Granier",shop:"bakery"}},"shop/bakery|Great Harvest Bread Company":{countryCodes:["us"],tags:{brand:"Great Harvest Bread Company","brand:wikidata":"Q5599297","brand:wikipedia":"en:Great Harvest Bread Company",name:"Great Harvest Bread Company",shop:"bakery"}},"shop/bakery|Görtz":{nomatch:["shop/shoes|Görtz"],tags:{brand:"Görtz",name:"Görtz",shop:"bakery"}},"shop/bakery|Hert":{countryCodes:["pl"],tags:{brand:"Hert",name:"Hert",shop:"bakery"}},"shop/bakery|Hinnerbäcker":{countryCodes:["de"],tags:{brand:"Hinnerbäcker",name:"Hinnerbäcker",shop:"bakery"}},"shop/bakery|Hofpfisterei":{countryCodes:["de"],tags:{brand:"Hofpfisterei","brand:wikidata":"Q1623217","brand:wikipedia":"en:Hofpfisterei",name:"Hofpfisterei",shop:"bakery"}},"shop/bakery|Hosselmann":{tags:{brand:"Hosselmann",name:"Hosselmann",shop:"bakery"}},"shop/bakery|Ihle":{countryCodes:["de"],matchNames:["landbäckerei ihle"],tags:{brand:"Ihle","brand:wikidata":"Q1626371","brand:wikipedia":"de:Landbäckerei Ihle",name:"Ihle",shop:"bakery"}},"shop/bakery|Il Fornaio":{tags:{brand:"Il Fornaio",name:"Il Fornaio",shop:"bakery"}},"shop/bakery|Julie's Bakeshop":{countryCodes:["ph"],tags:{brand:"Julie's Bakeshop",name:"Julie's Bakeshop",shop:"bakery"}},"shop/bakery|K&U Bäckerei":{countryCodes:["de"],matchNames:["k&u"],tags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"}},"shop/bakery|Kamps":{countryCodes:["de"],tags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"}},"shop/bakery|La Mie Câline":{countryCodes:["fr"],tags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"}},"shop/bakery|Le Crobag":{countryCodes:["at","de","pl","ru"],tags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"}},"shop/bakery|Le Fournil":{countryCodes:["fr"],tags:{brand:"Le Fournil",name:"Le Fournil",shop:"bakery"}},"shop/bakery|Leifert":{countryCodes:["de"],matchNames:["bäckerei leifert"],tags:{brand:"Leifert","brand:wikidata":"Q66086129",name:"Leifert",shop:"bakery"}},"shop/bakery|Lila Bäcker":{countryCodes:["de"],tags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"}},"shop/bakery|Lipóti Pékség":{countryCodes:["hu"],tags:{brand:"Lipóti Pékség",name:"Lipóti Pékség",shop:"bakery"}},"shop/bakery|Löwenbäcker Schaper":{countryCodes:["de"],matchNames:["schaper"],tags:{brand:"Löwenbäcker Schaper","brand:wikidata":"Q62075965",name:"Löwenbäcker Schaper",shop:"bakery"}},"shop/bakery|Marie Blachère":{countryCodes:["fr"],tags:{brand:"Marie Blachère","brand:wikidata":"Q62082410","brand:wikipedia":"fr:Marie Blachère",name:"Marie Blachère",shop:"bakery"}},"shop/bakery|Milkau":{countryCodes:["de"],tags:{brand:"Milkau","brand:wikidata":"Q66208652",name:"Milkau",shop:"bakery"}},"shop/bakery|Mlinar":{countryCodes:["ba","hr","sl"],tags:{brand:"Mlinar","brand:wikidata":"Q62082464",name:"Mlinar",shop:"bakery"}},"shop/bakery|Musmanni":{countryCodes:["cr"],tags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"}},"shop/bakery|Nothing Bundt Cakes":{countryCodes:["ca","us"],tags:{brand:"Nothing Bundt Cakes","brand:wikidata":"Q62082526",name:"Nothing Bundt Cakes",shop:"bakery"}},"shop/bakery|Nur Hier":{countryCodes:["de"],tags:{brand:"Nur Hier",name:"Nur Hier",shop:"bakery"}},"shop/bakery|Oebel":{countryCodes:["de"],tags:{brand:"Oebel",name:"Oebel",shop:"bakery"}},"shop/bakery|Pan de Manila":{countryCodes:["ph"],tags:{brand:"Pan de Manila",name:"Pan de Manila",shop:"bakery"}},"shop/bakery|Paris Baguette~(worldwide)":{countryCodes:["sg","us","vn"],matchNames:["paris baguette cafe"],nomatch:["shop/bakery|巴黎贝甜","shop/bakery|파리바게뜨"],tags:{brand:"Paris Baguette","brand:wikidata":"Q62605260",name:"Paris Baguette",shop:"bakery"}},"shop/bakery|Paul":{tags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"}},"shop/bakery|Peter's gute Backstube":{countryCodes:["de"],tags:{brand:"Peter's gute Backstube","brand:wikidata":"Q67987587",name:"Peter's gute Backstube",shop:"bakery"}},"shop/bakery|Red Ribbon":{countryCodes:["ph","us"],tags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"}},"shop/bakery|Richters Altstadt-Bäckerei":{countryCodes:["de"],tags:{brand:"Richters Altstadt-Bäckerei","brand:wikidata":"Q66212346",name:"Richters Altstadt-Bäckerei",shop:"bakery"}},"shop/bakery|Ronde des Pains":{countryCodes:["be","fr"],tags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"}},"shop/bakery|Schäfer's":{countryCodes:["de"],tags:{brand:"Schäfer's","brand:wikidata":"Q1464562","brand:wikipedia":"de:Schäfers Brot",name:"Schäfer's",shop:"bakery"}},"shop/bakery|Sehne":{countryCodes:["de"],tags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"}},"shop/bakery|Starke Bäcker":{countryCodes:["de"],tags:{brand:"Starke Bäcker","brand:wikidata":"Q66133336",name:"Starke Bäcker",shop:"bakery"}},"shop/bakery|Steinecke":{countryCodes:["de"],tags:{brand:"Steinecke","brand:wikidata":"Q57516278","brand:wikipedia":"de:Meisterbäckerei Steinecke",name:"Steinecke",shop:"bakery"}},"shop/bakery|Sternenbäck":{countryCodes:["de"],tags:{brand:"Sternenbäck","brand:wikidata":"Q62595021",name:"Sternenbäck",shop:"bakery"}},"shop/bakery|Ströck":{countryCodes:["at"],tags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"}},"shop/bakery|Wiener Feinbäcker":{countryCodes:["de"],tags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"}},"shop/bakery|Woops!":{countryCodes:["us"],tags:{brand:"Woops!",name:"Woops!",shop:"bakery"}},"shop/bakery|sander's backstube":{countryCodes:["de"],matchNames:["bäckerei sander"],tags:{brand:"sander's backstube","brand:wikidata":"Q66207337",name:"sander's backstube",shop:"bakery"}},"shop/bakery|von Allwörden":{countryCodes:["de"],tags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"}},"shop/bakery|Булочная Ф. Вольчека":{countryCodes:["ru"],tags:{brand:"Булочная Ф. Вольчека",name:"Булочная Ф. Вольчека",shop:"bakery"}},"shop/bakery|Кулинария":{tags:{brand:"Кулинария",name:"Кулинария",shop:"bakery"}},"shop/bakery|Кулиничи":{countryCodes:["ua"],tags:{brand:"Кулиничи",name:"Кулиничи",shop:"bakery"}},"shop/bakery|Кулиничі":{countryCodes:["ua"],tags:{brand:"Кулиничі",name:"Кулиничі",shop:"bakery"}},"shop/bakery|بربری":{tags:{brand:"بربری",name:"بربری",shop:"bakery"}},"shop/bakery|サンジェルマン":{countryCodes:["jp"],tags:{brand:"サンジェルマン","brand:en":"Saint-Germain","brand:ja":"サンジェルマン","brand:wikidata":"Q11305612","brand:wikipedia":"ja:サンジェルマン (製パン)",name:"サンジェルマン","name:en":"Saint-Germain","name:ja":"サンジェルマン",shop:"bakery"}},"shop/bakery|ヴィ・ド・フランス":{countryCodes:["jp"],tags:{brand:"ヴィ・ド・フランス","brand:en":"Vie de France","brand:ja":"ヴィ・ド・フランス","brand:wikidata":"Q7928249","brand:wikipedia":"ja:ヴィ・ド・フランス",name:"ヴィ・ド・フランス","name:en":"Vie de France","name:ja":"ヴィ・ド・フランス",shop:"bakery"}},"shop/bakery|巴黎贝甜~(China)":{countryCodes:["cn"],matchNames:["paris baguette","paris baguette cafe","巴黎貝甜"],nomatch:["shop/bakery|Paris Baguette","shop/bakery|파리바게뜨"],tags:{brand:"巴黎贝甜","brand:en":"Paris Baguette","brand:wikidata":"Q62605260","brand:zh":"巴黎贝甜",name:"巴黎贝甜","name:en":"Paris Baguette","name:zh":"巴黎贝甜",shop:"bakery"}},"shop/bakery|뚜레쥬르":{countryCodes:["kr"],matchNames:["뚜레주르"],tags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:ko":"뚜레쥬르","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours","name:ko":"뚜레쥬르",shop:"bakery"}},"shop/bakery|파리바게뜨~(South Korea)":{countryCodes:["kr"],matchNames:["paris baguette","paris baguette cafe","파리바게트"],nomatch:["shop/bakery|Paris Baguette","shop/bakery|巴黎贝甜"],tags:{"alt_name:ko":"파리바게트",brand:"파리바게뜨","brand:en":"Paris Baguette","brand:ko":"파리바게뜨","brand:wikidata":"Q62605260",name:"파리바게뜨","name:en":"Paris Baguette","name:ko":"파리바게뜨",shop:"bakery"}},"shop/beauty|Benefit Brow Bar":{countryCodes:["us"],matchNames:["benefit","ulta brow bar"],tags:{beauty:"eyebrow;eyelash;waxing",brand:"Benefit","brand:wikidata":"Q2895769","brand:wikipedia":"en:Benefit Cosmetics",name:"Benefit Brow Bar",shop:"beauty"}},"shop/beauty|Body Minute":{tags:{brand:"Body Minute",name:"Body Minute",shop:"beauty"}},"shop/beauty|European Wax Center":{countryCodes:["us"],tags:{beauty:"waxing",brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"}},"shop/beauty|Hollywood Nails":{countryCodes:["de","gb","us"],tags:{beauty:"nails",brand:"Hollywood Nails",name:"Hollywood Nails",shop:"beauty"}},"shop/beauty|Indigo Sun":{countryCodes:["gb"],matchTags:["leisure/tanning_salon","shop/solarium"],tags:{beauty:"tanning",brand:"Indigo Sun","brand:wikidata":"Q63436906",name:"Indigo Sun",shop:"beauty"}},"shop/beauty|Nails for You":{tags:{beauty:"nails",brand:"Nails for You",name:"Nails for You",shop:"beauty"}},"shop/beauty|Palm Beach Tan":{countryCodes:["us"],matchTags:["leisure/tanning_salon","shop/solarium"],tags:{beauty:"tanning",brand:"Palm Beach Tan","brand:wikidata":"Q64027086","brand:wikipedia":"en:Palm Beach Tan",name:"Palm Beach Tan",shop:"beauty"}},"shop/beauty|Perfect Brows NYC":{countryCodes:["us"],matchNames:["perfect brows"],tags:{beauty:"eyebrow;eyelash;waxing",brand:"Perfect Brows NYC",name:"Perfect Brows NYC",shop:"beauty"}},"shop/beauty|Sola Salons":{countryCodes:["us"],matchNames:["sola","sola salon studios"],tags:{beauty:"hair;nails;skin_care;massage",brand:"Sola Salons","brand:wikidata":"Q64337426",name:"Sola Salons",shop:"beauty"}},"shop/beauty|Star Nails":{tags:{beauty:"nails",brand:"Star Nails",name:"Star Nails",shop:"beauty"}},"shop/beauty|The Skin Bar at Ulta Beauty":{countryCodes:["us"],nomatch:["shop/beauty|Ulta Beauty","shop/cosmetics|Ulta Beauty"],tags:{alt_name:"Ulta Skin Bar",beauty:"skin_care",brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"The Skin Bar at Ulta Beauty",shop:"beauty"}},"shop/beauty|Yves Rocher":{matchNames:["ив роше"],matchTags:["shop/chemist","shop/cosmetics"],tags:{beauty:"cosmetics",brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"en:Yves Rocher (company)",name:"Yves Rocher",shop:"beauty"}},"shop/bed|Bensons for Beds":{countryCodes:["gb"],matchNames:["bensons"],tags:{brand:"Bensons for Beds","brand:wikidata":"Q4890299","brand:wikipedia":"en:Bensons for Beds",name:"Bensons for Beds",shop:"bed"}},"shop/bed|Beter Bed":{countryCodes:["be","nl"],tags:{brand:"Beter Bed","brand:wikidata":"Q831076","brand:wikipedia":"nl:Beter Bed",name:"Beter Bed",shop:"bed"}},"shop/bed|Casper":{tags:{brand:"Casper","brand:wikidata":"Q20539294","brand:wikipedia":"en:Casper Sleep",name:"Casper",shop:"bed"}},"shop/bed|Dreams":{countryCodes:["gb"],tags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"}},"shop/bed|Grand Litier":{countryCodes:["fr"],tags:{brand:"Grand Litier","brand:wikidata":"Q21030208","brand:wikipedia":"fr:Grand Litier",name:"Grand Litier",shop:"bed"}},"shop/bed|Maison de la Literie":{countryCodes:["fr"],tags:{brand:"Maison de la Literie","brand:wikidata":"Q80955776",name:"Maison de la Literie",shop:"bed"}},"shop/bed|Matratzen Concord":{countryCodes:["at","ch","de"],tags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"}},"shop/bed|Mattress Firm":{countryCodes:["us"],matchNames:["sleepys"],tags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"}},"shop/bed|Mattress Warehouse":{countryCodes:["us"],tags:{brand:"Mattress Warehouse","brand:wikidata":"Q61995079",name:"Mattress Warehouse",shop:"bed"}},"shop/bed|Sleep Country":{countryCodes:["ca"],matchNames:["sleep country canada"],tags:{brand:"Sleep Country","brand:wikidata":"Q7539684","brand:wikipedia":"en:Sleep Country Canada",name:"Sleep Country",shop:"bed"}},"shop/bed|Sleep Experts":{countryCodes:["us"],tags:{brand:"Sleep Experts","brand:wikidata":"Q7539688","brand:wikipedia":"en:Sleep Experts",name:"Sleep Experts",shop:"bed"}},"shop/bed|Sleep Number":{countryCodes:["us"],tags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"}},"shop/beverages|50嵐":{countryCodes:["cn","tw"],tags:{brand:"50嵐",name:"50嵐",shop:"beverages"}},"shop/beverages|CoCo都可":{tags:{brand:"CoCo都可",name:"CoCo都可",shop:"beverages"}},"shop/beverages|Dursty":{countryCodes:["de"],tags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"}},"shop/beverages|Edeka Getränkemarkt":{countryCodes:["de"],tags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"}},"shop/beverages|Fristo":{countryCodes:["at","de"],matchNames:["fristo getränkemarkt"],tags:{brand:"Fristo","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo",shop:"beverages"}},"shop/beverages|Getränke Hoffmann":{countryCodes:["de"],tags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"}},"shop/beverages|Getränkeland":{countryCodes:["de"],tags:{brand:"Getränkeland","brand:wikidata":"Q62594849",name:"Getränkeland",shop:"beverages"}},"shop/beverages|Hol'ab":{countryCodes:["de"],tags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"}},"shop/beverages|Orterer Getränkemarkt":{countryCodes:["de"],tags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"}},"shop/beverages|Rewe Getränkemarkt":{countryCodes:["de"],tags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"}},"shop/beverages|Trinkgut":{countryCodes:["de"],tags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"}},"shop/beverages|大苑子":{tags:{brand:"大苑子","brand:en":"DaYung's","brand:wikipedia":"zh:大苑子","brand:zh":"大苑子",name:"大苑子","name:en":"DaYung's","name:zh":"大苑子",shop:"beverages"}},"shop/beverages|清心福全":{countryCodes:["tw"],tags:{brand:"清心福全","brand:en":"Ching Shin","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站","brand:zh":"清心福全",name:"清心福全","name:en":"Ching Shin","name:zh":"清心福全",shop:"beverages"}},"shop/beverages|茶湯會":{countryCodes:["tw"],tags:{brand:"茶湯會",name:"茶湯會",shop:"beverages"}},"shop/bicycle|Cycle Republic":{countryCodes:["gb"],tags:{brand:"Cycle Republic","brand:wikidata":"Q65042920","brand:wikipedia":"en:Cycle Republic",name:"Cycle Republic",shop:"bicycle"}},"shop/bicycle|Evans Cycles":{countryCodes:["gb"],tags:{brand:"Evans Cycles","brand:wikidata":"Q5415901","brand:wikipedia":"en:Evans Cycles",name:"Evans Cycles",shop:"bicycle"}},"shop/bicycle|Fri BikeShop":{countryCodes:["dk"],tags:{brand:"Fri BikeShop","brand:wikidata":"Q26721030",name:"Fri BikeShop",shop:"bicycle"}},"shop/bicycle|Giant":{nomatch:["amenity/fuel|Giant","shop/supermarket|Giant"],tags:{brand:"Giant","brand:wikidata":"Q703557","brand:wikipedia":"en:Giant Bicycles",name:"Giant",shop:"bicycle"}},"shop/bicycle|Trek":{matchNames:["treck","trek bicycle"],tags:{alt_name:"Trek Bicycle Store",brand:"Trek","brand:wikidata":"Q1067617","brand:wikipedia":"en:Trek Bicycle Corporation",name:"Trek",shop:"bicycle"}},"shop/bicycle|サイクルベースあさひ":{countryCodes:["jp"],tags:{brand:"サイクルベースあさひ","brand:en":"Cycle Base Asahi","brand:ja":"サイクルベースあさひ","brand:wikidata":"Q11257202","brand:wikipedia":"ja:あさひ (企業)",name:"サイクルベースあさひ","name:en":"Cycle Base Asahi","name:ja":"サイクルベースあさひ",shop:"bicycle"}},"shop/boat|West Marine":{countryCodes:["us"],tags:{brand:"West Marine","brand:wikidata":"Q7985852","brand:wikipedia":"en:West Marine",name:"West Marine",shop:"boat"}},"shop/bookmaker|Betfred":{countryCodes:["gb"],tags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"}},"shop/bookmaker|Coral":{countryCodes:["gb"],tags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"}},"shop/bookmaker|Fortuna":{countryCodes:["cz","hr","pl","ro","sk"],tags:{brand:"Fortuna","brand:wikidata":"Q25857973","brand:wikipedia":"en:Fortuna Entertainment Group",name:"Fortuna",shop:"bookmaker"}},"shop/bookmaker|Ladbrokes":{countryCodes:["gb"],tags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"}},"shop/bookmaker|Paddy Power":{countryCodes:["gb","ie"],tags:{brand:"Paddy Power","brand:wikidata":"Q3888718","brand:wikipedia":"en:Paddy Power",name:"Paddy Power",shop:"bookmaker"}},"shop/bookmaker|Tipico":{countryCodes:["at","co","de","gi","hr","mt"],tags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"}},"shop/bookmaker|William Hill":{countryCodes:["gb"],tags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"}},"shop/bookmaker|ΟΠΑΠ":{countryCodes:["gr"],tags:{brand:"ΟΠΑΠ","brand:wikidata":"Q2007823","brand:wikipedia":"el:ΟΠΑΠ",name:"ΟΠΑΠ",shop:"bookmaker"}},"shop/bookmaker|Лига ставок":{countryCodes:["ru"],tags:{brand:"Лига ставок","brand:en":"Liga Stavok","brand:ru":"Лига ставок","brand:wikidata":"Q6545804","brand:wikipedia":"ru:Лига Ставок",name:"Лига ставок","name:en":"Liga Stavok","name:ru":"Лига ставок",shop:"bookmaker"}},"shop/bookmaker|Фонбет":{countryCodes:["ru"],tags:{brand:"Фонбет","brand:en":"Fonbet","brand:ru":"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет","name:en":"Fonbet","name:ru":"Фонбет",shop:"bookmaker"}},"shop/books|Akademibokhandeln":{countryCodes:["se"],tags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"}},"shop/books|Akateeminen Kirjakauppa":{countryCodes:["fi"],tags:{brand:"Akateeminen Kirjakauppa","brand:wikidata":"Q10403942","brand:wikipedia":"fi:Akateeminen Kirjakauppa",name:"Akateeminen Kirjakauppa",shop:"books"}},"shop/books|Barnes & Noble":{countryCodes:["us"],tags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"}},"shop/books|Bertrand":{countryCodes:["pt"],tags:{brand:"Bertrand","brand:wikidata":"Q1866547","brand:wikipedia":"en:Livraria Bertrand",name:"Bertrand",shop:"books"}},"shop/books|Books-A-Million":{countryCodes:["us"],tags:{brand:"Books-A-Million","brand:wikidata":"Q4943266","brand:wikipedia":"en:Books-A-Million",name:"Books-A-Million",shop:"books"}},"shop/books|Bruna":{countryCodes:["nl"],tags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"en:Bruna (company)",name:"Bruna",shop:"books"}},"shop/books|Chapters":{countryCodes:["ca","us"],tags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters (bookstore)",name:"Chapters",shop:"books"}},"shop/books|Coles":{countryCodes:["ca"],nomatch:["amenity/fuel|Coles Express","shop/convenience|Coles Express","shop/supermarket|Coles"],tags:{brand:"Coles","brand:wikidata":"Q5144641","brand:wikipedia":"en:Coles (bookstore)",name:"Coles",shop:"books"}},"shop/books|Cultura":{countryCodes:["fr"],tags:{brand:"Cultura","brand:wikidata":"Q3007154","brand:wikipedia":"fr:Cultura",name:"Cultura",shop:"books"}},"shop/books|Empik":{countryCodes:["pl"],tags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"pl:Empik",name:"Empik",shop:"books"}},"shop/books|Fnac":{countryCodes:["be","ch","es","fr","nl","pt"],tags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"}},"shop/books|Gramedia":{countryCodes:["id"],tags:{brand:"Gramedia","brand:wikidata":"Q19646130","brand:wikipedia":"id:Gramedia (toko buku)",name:"Gramedia",shop:"books"}},"shop/books|Half Price Books":{countryCodes:["us"],tags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"}},"shop/books|Hugendubel":{countryCodes:["de"],tags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"}},"shop/books|Indigo":{countryCodes:["ca","us"],tags:{alt_name:"!ndigo",brand:"Indigo","brand:wikidata":"Q2477358","brand:wikipedia":"en:Indigo Books and Music",name:"Indigo",shop:"books"}},"shop/books|Libro":{countryCodes:["at"],tags:{brand:"Libro","brand:wikidata":"Q1823138","brand:wikipedia":"de:Libro",name:"Libro",shop:"books"}},"shop/books|Mondadori":{countryCodes:["it"],tags:{brand:"Mondadori","brand:wikidata":"Q85355","brand:wikipedia":"en:Arnoldo Mondadori Editore",name:"Mondadori",shop:"books"}},"shop/books|National Book Store":{countryCodes:["ph"],tags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"}},"shop/books|Osiander":{countryCodes:["de"],tags:{brand:"Osiander","brand:wikidata":"Q1800686","brand:wikipedia":"de:Osiandersche Buchhandlung",name:"Osiander",shop:"books"}},"shop/books|Oxfam Bookshop":{countryCodes:["gb"],tags:{brand:"Oxfam Bookshop","brand:wikidata":"Q7115196","brand:wikipedia":"en:Oxfam bookshops",name:"Oxfam Bookshop",second_hand:"only",shop:"books"}},"shop/books|Saraiva":{countryCodes:["br"],tags:{alt_name:"Livraria Saraiva",brand:"Saraiva","brand:wikidata":"Q10319337","brand:wikipedia":"pt:Livraria Saraiva",name:"Saraiva",shop:"books"}},"shop/books|Seagull Book":{countryCodes:["us"],tags:{brand:"Seagull Book","brand:wikidata":"Q7440458","brand:wikipedia":"en:Seagull Book",name:"Seagull Book",shop:"books"}},"shop/books|Standaard Boekhandel":{countryCodes:["be"],tags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"}},"shop/books|Suomalainen Kirjakauppa":{countryCodes:["fi"],tags:{brand:"Suomalainen Kirjakauppa","brand:wikidata":"Q7641808","brand:wikipedia":"fi:Suomalainen Kirjakauppa",name:"Suomalainen Kirjakauppa",shop:"books"}},"shop/books|TSUTAYA":{countryCodes:["jp"],nomatch:["shop/music|TSUTAYA","shop/video|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"}},"shop/books|Thalia":{countryCodes:["at","ch","de"],tags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"}},"shop/books|The Works":{countryCodes:["gb","ie"],tags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"}},"shop/books|WHSmith":{nomatch:["shop/newsagent|WHSmith"],tags:{brand:"WHSmith","brand:wikidata":"Q1548712","brand:wikipedia":"en:WHSmith",name:"WHSmith",shop:"books"}},"shop/books|Waterstones":{countryCodes:["be","gb","ie","je","nl"],tags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"}},"shop/books|Weltbild":{countryCodes:["de"],tags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"}},"shop/books|Буквоед":{countryCodes:["ru"],tags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"}},"shop/books|Дом книги":{countryCodes:["ru"],tags:{brand:"Дом книги","brand:wikidata":"Q48950742","brand:wikipedia":"ru:Московский дом книги",name:"Дом книги",shop:"books"}},"shop/books|Читай-город":{countryCodes:["ru"],tags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"}},"shop/books|סטימצקי":{countryCodes:["il"],tags:{brand:"סטימצקי","brand:en":"Steimatzky","brand:he":"סטימצקי","brand:wikidata":"Q2903995","brand:wikipedia":"he:סטימצקי",name:"סטימצקי","name:en":"Steimatzky","name:he":"סטימצקי",shop:"books"}},"shop/books|צומת ספרים":{countryCodes:["il"],matchNames:["zomet sfarim"],tags:{brand:"צומת ספרים","brand:en":"Tzomet Sfarim","brand:he":"צומת ספרים","brand:wikidata":"Q6743833","brand:wikipedia":"he:צומת ספרים",name:"צומת ספרים","name:en":"Tzomet Sfarm","name:he":"צומת ספרים",shop:"books"}},"shop/books|あおい書店":{countryCodes:["jp"],tags:{brand:"あおい書店","brand:en":"AOI","brand:ja":"あおい書店","brand:wikidata":"Q11256783","brand:wikipedia":"ja:あおい書店",name:"あおい書店","name:en":"AOI","name:ja":"あおい書店",shop:"books"}},"shop/books|オリオン書房":{countryCodes:["jp"],tags:{brand:"オリオン書房","brand:en":"Orion Books","brand:ja":"オリオン書房","brand:wikidata":"Q11292597","brand:wikipedia":"ja:オリオン書房",name:"オリオン書房","name:en":"Orion Books","name:ja":"オリオン書房",shop:"books"}},"shop/books|ブックオフ":{countryCodes:["jp"],tags:{brand:"ブックオフ","brand:en":"Book Off","brand:ja":"ブックオフ","brand:wikidata":"Q893011","brand:wikipedia":"en:Book Off",name:"ブックオフ","name:en":"Book Off","name:ja":"ブックオフ",shop:"books"}},"shop/books|メロンブックス":{countryCodes:["jp"],tags:{brand:"メロンブックス","brand:en":"Melonbooks","brand:ja":"メロンブックス","brand:wikidata":"Q10851653","brand:wikipedia":"ja:メロンブックス",name:"メロンブックス","name:en":"Melonbooks","name:ja":"メロンブックス",shop:"books"}},"shop/books|リブロ":{countryCodes:["jp"],tags:{brand:"リブロ","brand:en":"LIBRO","brand:ja":"リブロ","brand:wikidata":"Q6542768","brand:wikipedia":"ja:リブロ",name:"リブロ","name:en":"Libro","name:ja":"リブロ",shop:"books"}},"shop/books|三省堂書店":{countryCodes:["jp"],tags:{brand:"三省堂書店","brand:en":"Books Sanseido","brand:ja":"三省堂書店","brand:wikidata":"Q10866539","brand:wikipedia":"ja:三省堂書店",name:"三省堂書店","name:en":"Books Sanseido","name:ja":"三省堂書店",shop:"books"}},"shop/books|宮脇書店":{tags:{brand:"宮脇書店",name:"宮脇書店",shop:"books"}},"shop/books|文教堂":{countryCodes:["jp"],matchNames:["文教堂書店"],tags:{brand:"文教堂","brand:en":"Bunkyodo","brand:ja":"文教堂","brand:wikidata":"Q11499974","brand:wikipedia":"ja:文教堂",name:"文教堂","name:en":"Bunkyodo","name:ja":"文教堂",shop:"books"}},"shop/books|新华书店":{countryCodes:["cn"],tags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore","brand:zh":"新华书店",name:"新华书店","name:en":"Xinhua Bookstore","name:zh":"新华书店",shop:"books"}},"shop/books|有隣堂":{countryCodes:["jp"],tags:{brand:"有隣堂","brand:en":"Yurindo","brand:ja":"有隣堂","brand:wikidata":"Q8061680","brand:wikipedia":"ja:有隣堂",name:"有隣堂","name:en":"Yurindo","name:ja":"有隣堂",shop:"books"}},"shop/books|未来屋書店":{countryCodes:["jp"],tags:{brand:"未来屋書店","brand:en":"Miraiya Shoten","brand:ja":"未来屋書店","brand:wikidata":"Q11519563","brand:wikipedia":"ja:未来屋書店",name:"未来屋書店","name:en":"Miraiya Shoten","name:ja":"未来屋書店",shop:"books"}},"shop/butcher|Coqivoire":{countryCodes:["ci"],tags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"}},"shop/butcher|Fleischerei Richter":{countryCodes:["de"],tags:{brand:"Fleischerei Richter",name:"Fleischerei Richter",shop:"butcher"}},"shop/butcher|Foani":{countryCodes:["ci"],tags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"}},"shop/butcher|Gzella":{countryCodes:["pl"],tags:{brand:"Gzella",name:"Gzella",shop:"butcher"}},"shop/butcher|M&M Food Market":{countryCodes:["ca"],tags:{brand:"M&M Food Market","brand:wikidata":"Q6711827","brand:wikipedia":"en:M&M Food Market",name:"M&M Food Market",shop:"butcher"}},"shop/butcher|Renmans":{tags:{brand:"Renmans",name:"Renmans",shop:"butcher"}},"shop/butcher|Vinzenzmurr":{countryCodes:["de"],tags:{brand:"Vinzenzmurr","brand:wikidata":"Q2527361","brand:wikipedia":"de:Vinzenzmurr",name:"Vinzenzmurr",shop:"butcher"}},"shop/butcher|Ариант":{countryCodes:["ru"],tags:{brand:"Ариант",name:"Ариант",shop:"butcher"}},"shop/butcher|Великолукский мясокомбинат":{countryCodes:["ru"],tags:{brand:"Великолукский мясокомбинат","brand:wikidata":"Q18401767","brand:wikipedia":"ru:Великолукский мясокомбинат",name:"Великолукский мясокомбинат",shop:"butcher"}},"shop/butcher|Мясницкий ряд":{countryCodes:["ru"],tags:{brand:"Мясницкий ряд",name:"Мясницкий ряд",shop:"butcher"}},"shop/butcher|Наша Ряба":{countryCodes:["ua"],tags:{brand:"Наша Ряба",name:"Наша Ряба",shop:"butcher"}},"shop/butcher|Родинна ковбаска":{countryCodes:["ua"],tags:{brand:"Родинна ковбаска","brand:en":"Rodynna-kovbaska","brand:wikidata":"Q30969660","brand:wikipedia":"uk:ТзОВ «Барком»",name:"Родинна ковбаска","name:en":"Rodynna-kovbaska",shop:"butcher"}},"shop/butcher|肉のハナマサ":{countryCodes:["jp"],matchNames:["ハナマサ"],tags:{brand:"ハナマサ","brand:en":"Hanamasa","brand:ja":"ハナマサ","brand:wikidata":"Q11326564","brand:wikipedia":"ja:ハナマサ",butcher:"beef",name:"肉のハナマサ","name:en":"Hanamasa Meat","name:ja":"肉のハナマサ",shop:"butcher"}},"shop/camera|Jessops":{countryCodes:["gb"],matchTags:["shop/electronics","shop/photo"],tags:{brand:"Jessops","brand:wikidata":"Q3191701","brand:wikipedia":"en:Jessops",name:"Jessops",shop:"camera"}},"shop/candles|Yankee Candle":{countryCodes:["ca","gb","us"],tags:{brand:"Yankee Candle","brand:wikidata":"Q8048733","brand:wikipedia":"en:Yankee Candle",name:"Yankee Candle",shop:"candles"}},"shop/car_parts|Advance Auto Parts":{countryCodes:["ca","us","vi"],matchTags:["shop/doityourself"],tags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"}},"shop/car_parts|Auto Plus":{countryCodes:["us"],tags:{brand:"Auto Plus","brand:wikidata":"Q65121114",name:"Auto Plus",official_name:"Auto Plus Auto Parts",shop:"car_parts"}},"shop/car_parts|AutoZone":{countryCodes:["br","mx","us"],matchTags:["shop/doityourself"],tags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"}},"shop/car_parts|Automat":{countryCodes:["nl"],tags:{brand:"Automat","brand:wikidata":"Q70623238",name:"Automat",shop:"car_parts"}},"shop/car_parts|Brezan":{countryCodes:["be","nl"],tags:{brand:"Brezan",name:"Brezan",shop:"car_parts"}},"shop/car_parts|Carquest":{countryCodes:["us"],tags:{brand:"Carquest","brand:wikidata":"Q5045948","brand:wikipedia":"en:Carquest",name:"Carquest",official_name:"Carquest Auto Parts",shop:"car_parts"}},"shop/car_parts|Euro Car Parts":{countryCodes:["gb","ie"],tags:{brand:"Euro Car Parts","brand:wikidata":"Q23782692","brand:wikipedia":"en:Euro Car Parts",name:"Euro Car Parts",shop:"car_parts"}},"shop/car_parts|GSF Car Parts":{countryCodes:["gb","ie"],tags:{brand:"GSF Car Parts","brand:wikidata":"Q80963064",name:"GSF Car Parts",shop:"car_parts"}},"shop/car_parts|Halfords":{countryCodes:["gb","ie"],matchTags:["shop/bicycle"],nomatch:["shop/car_repair|Halfords Autocentre"],tags:{brand:"Halfords","brand:wikidata":"Q3398786","brand:wikipedia":"en:Halfords",name:"Halfords","service:bicycle:retail":"yes",shop:"car_parts"}},"shop/car_parts|KOI Auto Parts":{countryCodes:["us"],tags:{brand:"KOI Auto Parts","brand:wikidata":"Q6334934","brand:wikipedia":"en:KOI Auto Parts",name:"KOI Auto Parts",shop:"car_parts",short_name:"KOI"}},"shop/car_parts|NAPA Auto Parts":{countryCodes:["ca","mx","us"],matchNames:["napa"],tags:{brand:"NAPA Auto Parts","brand:wikidata":"Q6970842","brand:wikipedia":"en:National Automotive Parts Association",name:"NAPA Auto Parts",shop:"car_parts"}},"shop/car_parts|O'Reilly Auto Parts":{countryCodes:["us"],matchNames:["o'reilly"],matchTags:["shop/doityourself"],tags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"}},"shop/car_parts|Repco":{countryCodes:["au","nz"],tags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"}},"shop/car_parts|Supercheap Auto":{countryCodes:["au","nz"],tags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"}},"shop/car_parts|The Parts Alliance":{countryCodes:["gb"],tags:{brand:"The Parts Alliance","brand:wikidata":"Q80964997",name:"The Parts Alliance",shop:"car_parts"}},"shop/car_parts|Tokić":{countryCodes:["ba","hr"],tags:{brand:"Tokić",name:"Tokić",shop:"car_parts"}},"shop/car_parts|Армтек":{countryCodes:["by","kz","ru"],tags:{brand:"Армтек",name:"Армтек",shop:"car_parts"}},"shop/car_parts|Форсаж":{tags:{brand:"Форсаж",name:"Форсаж",shop:"car_parts"}},"shop/car_parts|イエローハット":{countryCodes:["jp"],tags:{brand:"イエローハット","brand:en":"Yellow Hat","brand:ja":"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット","name:en":"Yellow Hat","name:ja":"イエローハット",shop:"car_parts"}},"shop/car_parts|オートバックス":{countryCodes:["jp"],tags:{brand:"オートバックス","brand:en":"Autobacs","brand:ja":"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス","name:en":"Autobacs","name:ja":"オートバックス",shop:"car_parts"}},"shop/car_parts|ジェームス":{countryCodes:["jp"],tags:{brand:"ジェームス","brand:en":"JMS","brand:ja":"ジェームス","brand:wikidata":"Q11309404","brand:wikipedia":"ja:ジェームス",name:"ジェームス","name:en":"JMS","name:ja":"ジェームス","official_name:en":"Joyful Motorist Shop",shop:"car_parts"}},"shop/car_parts|タイヤ館":{countryCodes:["jp"],tags:{brand:"タイヤ館","brand:en":"Taiyakan","brand:ja":"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館","name:en":"Taiyakan","name:ja":"タイヤ館",shop:"car_parts"}},"shop/car_repair|A.T.U":{countryCodes:["at","de"],matchNames:["auto-teile-unger"],tags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"}},"shop/car_repair|AAMCO":{countryCodes:["ca","us"],matchNames:["aamco transmissions","aamco transmissions and total car care"],tags:{brand:"AAMCO","brand:wikidata":"Q4649902","brand:wikipedia":"en:AAMCO Transmissions",name:"AAMCO","service:vehicle:transmission":"yes",shop:"car_repair"}},"shop/car_repair|ATS Euromaster":{countryCodes:["gb"],tags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"}},"shop/car_repair|Autoservis":{tags:{brand:"Autoservis",name:"Autoservis",shop:"car_repair"}},"shop/car_repair|Avatacar":{countryCodes:["fr"],tags:{brand:"Avatacar","brand:wikidata":"Q65156251","brand:wikipedia":"fr:Avatacar",name:"Avatacar",shop:"car_repair"}},"shop/car_repair|BestDrive":{countryCodes:["cz","fr","sk"],tags:{brand:"BestDrive","brand:wikidata":"Q63057183",name:"BestDrive",shop:"car_repair"}},"shop/car_repair|Bosch Car Service":{matchNames:["bosch service"],tags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"en:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"}},"shop/car_repair|Brakes Plus":{countryCodes:["us"],tags:{brand:"Brakes Plus","brand:wikidata":"Q62075246",name:"Brakes Plus",shop:"car_repair"}},"shop/car_repair|Car-X":{countryCodes:["us"],tags:{brand:"Car-X","brand:wikidata":"Q63859189",name:"Car-X",shop:"car_repair"}},"shop/car_repair|Carglass":{tags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"}},"shop/car_repair|Carstar":{countryCodes:["ca","us"],matchNames:["carstar auto body repair experts"],tags:{brand:"Carstar","brand:wikidata":"Q64187891",name:"Carstar","service:vehicle:body_repair":"yes",shop:"car_repair"}},"shop/car_repair|Citroën":{nomatch:["shop/car|Citroën"],tags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car_repair"}},"shop/car_repair|Euromaster":{countryCodes:["ch","de","es","fi","fr","nl","pt"],tags:{brand:"Euromaster","brand:wikidata":"Q3060668","brand:wikipedia":"de:Euromaster",name:"Euromaster",shop:"car_repair"}},"shop/car_repair|F1 Autocentre":{countryCodes:["gb"],tags:{brand:"F1 Autocentre","brand:wikidata":"Q79239635",name:"F1 Autocentre",shop:"car_repair"}},"shop/car_repair|Feu Vert":{countryCodes:["fr"],tags:{brand:"Feu Vert","brand:wikidata":"Q3070922","brand:wikipedia":"fr:Feu vert (entreprise)",name:"Feu Vert",shop:"car_repair"}},"shop/car_repair|Firestone":{countryCodes:["ca","cl","us"],tags:{brand:"Firestone","brand:wikidata":"Q420837","brand:wikipedia":"en:Firestone Tire and Rubber Company",name:"Firestone",official_name:"Firestone Complete Auto Care",shop:"car_repair"}},"shop/car_repair|First Stop":{tags:{brand:"First Stop","brand:wikidata":"Q3072965","brand:wikipedia":"fr:First Stop",name:"First Stop",shop:"car_repair"}},"shop/car_repair|Ford":{nomatch:["shop/car|Ford"],tags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car_repair"}},"shop/car_repair|Goodyear":{countryCodes:["au","ca","cl","pe","us"],tags:{brand:"Goodyear","brand:wikidata":"Q620875","brand:wikipedia":"en:Goodyear Tire and Rubber Company",name:"Goodyear",shop:"car_repair"}},"shop/car_repair|Grease Monkey":{countryCodes:["cn","us"],tags:{brand:"Grease Monkey","brand:wikidata":"Q5598563","brand:wikipedia":"en:Grease Monkey (business)",name:"Grease Monkey",shop:"car_repair"}},"shop/car_repair|Halfords Autocentre":{countryCodes:["gb"],matchNames:["halfords"],nomatch:["shop/car_parts|Halfords"],tags:{brand:"Halfords Autocentre","brand:wikidata":"Q5641894","brand:wikipedia":"en:Halfords Autocentre",name:"Halfords Autocentre",shop:"car_repair"}},"shop/car_repair|Jiffy Lube":{countryCodes:["ca","us"],tags:{brand:"Jiffy Lube","brand:wikidata":"Q6192247","brand:wikipedia":"en:Jiffy Lube",name:"Jiffy Lube",shop:"car_repair"}},"shop/car_repair|Kwik Fit":{countryCodes:["gb","ie"],tags:{brand:"Kwik Fit","brand:wikidata":"Q958053","brand:wikipedia":"en:Kwik Fit",name:"Kwik Fit",shop:"car_repair"}},"shop/car_repair|MAACO":{countryCodes:["ca","us"],matchNames:["maaco collision repair & auto painting"],tags:{brand:"MAACO","brand:wikidata":"Q6714015","brand:wikipedia":"en:MAACO",name:"MAACO","service:vehicle:body_repair":"yes","service:vehicle:painting":"yes",shop:"car_repair"}},"shop/car_repair|Meineke":{countryCodes:["us"],tags:{brand:"Meineke","brand:wikidata":"Q6810159","brand:wikipedia":"en:Meineke Car Care Centers",name:"Meineke",official_name:"Meineke Car Care Center",shop:"car_repair"}},"shop/car_repair|Mekonomen":{countryCodes:["dk","no","se"],tags:{brand:"Mekonomen","brand:wikidata":"Q10580079","brand:wikipedia":"sv:Mekonomen",name:"Mekonomen",shop:"car_repair"}},"shop/car_repair|Midas":{tags:{brand:"Midas","brand:wikidata":"Q3312613","brand:wikipedia":"en:Midas (automotive service)",name:"Midas",shop:"car_repair"}},"shop/car_repair|Monro Muffler Brake":{countryCodes:["us"],matchNames:["monro","monro muffler"],tags:{brand:"Monro Muffler Brake","brand:wikidata":"Q6902090","brand:wikipedia":"en:Monro Muffler Brake",name:"Monro Muffler Brake",shop:"car_repair"}},"shop/car_repair|Mr. Lube":{countryCodes:["ca"],tags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"}},"shop/car_repair|National Tire and Battery":{countryCodes:["us"],tags:{brand:"National Tire and Battery","brand:wikidata":"Q6978944","brand:wikipedia":"en:National Tire and Battery",name:"National Tire and Battery",shop:"car_repair"}},"shop/car_repair|Norauto":{countryCodes:["ar","es","fr","hu","it","pl","pt","ro"],tags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"}},"shop/car_repair|Pep Boys":{countryCodes:["us"],tags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"}},"shop/car_repair|Peugeot":{nomatch:["shop/car|Peugeot"],tags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"}},"shop/car_repair|Point S":{tags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"}},"shop/car_repair|Renault":{matchNames:["garage renault"],nomatch:["shop/car|Renault"],tags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"fr:Renault",name:"Renault",shop:"car_repair"}},"shop/car_repair|Roady":{countryCodes:["fr"],tags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"}},"shop/car_repair|Safelite AutoGlass":{countryCodes:["us"],matchNames:["safelight auto glass"],tags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",name:"Safelite AutoGlass","service:vehicle:glass":"yes",shop:"car_repair"}},"shop/car_repair|Sears Auto Center":{countryCodes:["mx","us"],nomatch:["shop/department_store|Sears"],tags:{brand:"Sears Auto Center","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears Auto Center",shop:"car_repair"}},"shop/car_repair|Speedy":{countryCodes:["fr"],nomatch:["shop/car_repair|Speedy Auto Service"],tags:{brand:"Speedy","brand:wikidata":"Q3492969","brand:wikipedia":"fr:Speedy (entreprise)",name:"Speedy",shop:"car_repair"}},"shop/car_repair|Speedy Auto Service":{countryCodes:["ca"],nomatch:["shop/car_repair|Speedy"],tags:{brand:"Speedy Auto Service","brand:wikidata":"Q22318193",name:"Speedy Auto Service",shop:"car_repair"}},"shop/car_repair|Toyota":{nomatch:["shop/car|Toyota"],tags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"}},"shop/car_repair|Tuffy":{countryCodes:["us"],matchNames:["tuffy auto service","tuffy auto service center","tuffy auto service centers","tuffy service","tuffy service center","tuffy service centers","tuffy tire and auto service","tuffy tire and auto service center","tuffy tire and auto service centers"],tags:{brand:"Tuffy","brand:wikidata":"Q17125314","brand:wikipedia":"en:Tuffy Auto Service Centers",name:"Tuffy",shop:"car_repair"}},"shop/car_repair|Valvoline":{countryCodes:["us"],tags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",official_name:"Valvoline Instant Oil Change",shop:"car_repair"}},"shop/car_repair|Valvoline Express Care":{countryCodes:["us"],tags:{alt_name:"Express Care",brand:"Valvoline Express Care","brand:wikidata":"Q74273584",name:"Valvoline Express Care",shop:"car_repair"}},"shop/car_repair|Vulco":{countryCodes:["fr"],tags:{brand:"Vulco","brand:wikidata":"Q80184403",name:"Vulco",shop:"car_repair"}},"shop/car_repair|pitstop":{countryCodes:["de"],tags:{brand:"pitstop","brand:wikidata":"Q1310014","brand:wikipedia":"de:Pitstop (Werkstattkette)",name:"pitstop",shop:"car_repair"}},"shop/car_repair|ÖAMTC":{countryCodes:["at"],tags:{brand:"ÖAMTC","brand:wikidata":"Q306057","brand:wikipedia":"de:Österreichischer Automobil-, Motorrad- und Touring Club",name:"ÖAMTC",shop:"car_repair"}},"shop/car_repair|Автоэлектрик":{tags:{brand:"Автоэлектрик",name:"Автоэлектрик",shop:"car_repair"}},"shop/car_repair|Вилгуд":{tags:{brand:"Вилгуд",name:"Вилгуд",shop:"car_repair"}},"shop/car_repair|СТО":{tags:{brand:"СТО",name:"СТО",shop:"car_repair"}},"shop/car_repair|カーコンビニ倶楽部":{countryCodes:["jp"],tags:{brand:"カーコンビニ倶楽部","brand:en":"Car Convenience Club","brand:ja":"カーコンビニ倶楽部","brand:wikidata":"Q11295590","brand:wikipedia":"ja:カーコンビニ倶楽部",name:"カーコンビニ倶楽部","name:en":"Car Convenience Club","name:ja":"カーコンビニ倶楽部",shop:"car_repair"}},"shop/car|Alfa Romeo":{tags:{brand:"Alfa Romeo","brand:wikidata":"Q26921","brand:wikipedia":"en:Alfa Romeo",name:"Alfa Romeo",shop:"car"}},"shop/car|Aston Martin":{tags:{brand:"Aston Martin","brand:wikidata":"Q27074","brand:wikipedia":"en:Aston Martin",name:"Aston Martin",shop:"car"}},"shop/car|Audi":{tags:{brand:"Audi","brand:wikidata":"Q23317","brand:wikipedia":"en:Audi",name:"Audi",shop:"car"}},"shop/car|BMW":{tags:{brand:"BMW","brand:wikidata":"Q26678","brand:wikipedia":"en:BMW",name:"BMW",shop:"car"}},"shop/car|Bentley":{nomatch:["shop/bag|Bentley"],tags:{brand:"Bentley","brand:wikidata":"Q27224","brand:wikipedia":"en:Bentley",name:"Bentley",shop:"car"}},"shop/car|Buick":{countryCodes:["ca","cn","mx","us"],tags:{brand:"Buick","brand:wikidata":"Q27415","brand:wikipedia":"en:Buick",name:"Buick",shop:"car"}},"shop/car|Cadillac":{tags:{brand:"Cadillac","brand:wikidata":"Q27436","brand:wikipedia":"en:Cadillac",name:"Cadillac",shop:"car"}},"shop/car|CarMax":{countryCodes:["us"],tags:{brand:"CarMax","brand:wikidata":"Q5037190","brand:wikipedia":"en:CarMax",name:"CarMax",second_hand:"only",shop:"car"}},"shop/car|Chevrolet":{tags:{brand:"Chevrolet","brand:wikidata":"Q29570","brand:wikipedia":"en:Chevrolet",name:"Chevrolet",shop:"car"}},"shop/car|Chrysler":{tags:{brand:"Chrysler","brand:wikidata":"Q181114","brand:wikipedia":"en:Chrysler",name:"Chrysler",shop:"car"}},"shop/car|Citroën":{nomatch:["shop/car_repair|Citroën"],tags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car"}},"shop/car|Dacia":{tags:{brand:"Dacia","brand:wikidata":"Q27460","brand:wikipedia":"en:Automobile Dacia",name:"Dacia",shop:"car"}},"shop/car|Dodge":{tags:{brand:"Dodge","brand:wikidata":"Q27564","brand:wikipedia":"en:Dodge",name:"Dodge",shop:"car"}},"shop/car|Fiat":{tags:{brand:"Fiat","brand:wikidata":"Q27597","brand:wikipedia":"en:Fiat Automobiles",name:"Fiat",shop:"car"}},"shop/car|Ford":{nomatch:["shop/car_repair|Ford"],tags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car"}},"shop/car|Freightliner":{tags:{brand:"Freightliner","brand:wikidata":"Q1420724","brand:wikipedia":"en:Freightliner Trucks",name:"Freightliner",shop:"car"}},"shop/car|GMC":{tags:{brand:"GMC","brand:wikidata":"Q28993","brand:wikipedia":"en:GMC (automobile)",name:"GMC",shop:"car"}},"shop/car|Holden":{countryCodes:["au","nz"],tags:{brand:"Holden","brand:wikidata":"Q29281","brand:wikipedia":"en:Holden",name:"Holden",shop:"car"}},"shop/car|Honda":{matchNames:["honda cars"],nomatch:["shop/motorcycle|Honda"],tags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"car"}},"shop/car|Hyundai":{tags:{brand:"Hyundai","brand:wikidata":"Q55931","brand:wikipedia":"en:Hyundai Motor Company",name:"Hyundai",shop:"car"}},"shop/car|Isuzu":{tags:{brand:"Isuzu","brand:wikidata":"Q29803","brand:wikipedia":"en:Isuzu Motors",name:"Isuzu",shop:"car"}},"shop/car|Jaguar":{tags:{brand:"Jaguar","brand:wikidata":"Q26742231",name:"Jaguar",shop:"car"}},"shop/car|Jeep":{tags:{brand:"Jeep","brand:wikidata":"Q30113","brand:wikipedia":"en:Jeep",name:"Jeep",shop:"car"}},"shop/car|Kia":{matchNames:["kia motors"],tags:{brand:"Kia","brand:wikidata":"Q35349","brand:wikipedia":"en:Kia Motors",name:"Kia",shop:"car"}},"shop/car|Lada":{tags:{brand:"Lada","brand:en":"Lada","brand:ru":"Лада","brand:wikidata":"Q35676","brand:wikipedia":"en:Lada",name:"Lada","name:en":"Lada","name:ru":"Лада",shop:"car"}},"shop/car|Land Rover":{tags:{brand:"Land Rover","brand:wikidata":"Q26777551",name:"Land Rover",shop:"car"}},"shop/car|Lexus":{tags:{brand:"Lexus","brand:wikidata":"Q35919","brand:wikipedia":"en:Lexus",name:"Lexus",shop:"car"}},"shop/car|Lincoln":{tags:{brand:"Lincoln","brand:wikidata":"Q216796","brand:wikipedia":"en:Lincoln Motor Company",name:"Lincoln",shop:"car"}},"shop/car|Mazda":{tags:{brand:"Mazda","brand:wikidata":"Q35996","brand:wikipedia":"en:Mazda",name:"Mazda",shop:"car"}},"shop/car|Mercedes-Benz":{matchNames:["mercedes"],tags:{brand:"Mercedes-Benz","brand:wikidata":"Q36008","brand:wikipedia":"en:Mercedes-Benz",name:"Mercedes-Benz",shop:"car"}},"shop/car|Mitsubishi":{matchNames:["mitsubishi motors"],tags:{brand:"Mitsubishi","brand:wikidata":"Q36033","brand:wikipedia":"en:Mitsubishi Motors",name:"Mitsubishi",shop:"car"}},"shop/car|Netz":{countryCodes:["jp"],tags:{brand:"Netz","brand:wikidata":"Q11325416","brand:wikipedia":"ja:ネッツ店",name:"Netz",shop:"car"}},"shop/car|Nissan":{tags:{brand:"Nissan","brand:wikidata":"Q20165","brand:wikipedia":"ja:日産自動車",name:"Nissan",shop:"car"}},"shop/car|Opel":{tags:{brand:"Opel","brand:wikidata":"Q40966","brand:wikipedia":"en:Opel",name:"Opel",shop:"car"}},"shop/car|Peterbilt":{tags:{brand:"Peterbilt","brand:wikidata":"Q944640","brand:wikipedia":"en:Peterbilt",name:"Peterbilt",shop:"car"}},"shop/car|Peugeot":{nomatch:["shop/car_repair|Peugeot"],tags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car"}},"shop/car|Porsche":{tags:{brand:"Porsche","brand:wikidata":"Q40993","brand:wikipedia":"en:Porsche",name:"Porsche",shop:"car"}},"shop/car|Proton":{countryCodes:["cl","eg","id","my","sg","th"],tags:{brand:"Proton","brand:wikidata":"Q827306","brand:wikipedia":"en:PROTON Holdings",name:"Proton",shop:"car"}},"shop/car|Ram":{tags:{brand:"Ram","brand:wikidata":"Q165708","brand:wikipedia":"en:Ram Trucks",name:"Ram",shop:"car"}},"shop/car|Renault":{nomatch:["shop/car_repair|Renault"],tags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"fr:Renault",name:"Renault",shop:"car"}},"shop/car|Seat":{tags:{brand:"Seat","brand:wikidata":"Q188217","brand:wikipedia":"en:SEAT",name:"Seat",shop:"car"}},"shop/car|Subaru":{tags:{brand:"Subaru","brand:wikidata":"Q172741","brand:wikipedia":"en:Subaru",name:"Subaru",shop:"car"}},"shop/car|Suzuki":{nomatch:["shop/motorcycle|Suzuki"],tags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"car"}},"shop/car|Tesla":{matchNames:["tesla motors"],tags:{brand:"Tesla","brand:wikidata":"Q478214","brand:wikipedia":"en:Tesla, Inc.",name:"Tesla",shop:"car"}},"shop/car|Toyota":{nomatch:["shop/car_repair|Toyota"],tags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car"}},"shop/car|Volkswagen":{matchNames:["vw"],tags:{brand:"Volkswagen","brand:wikidata":"Q246","brand:wikipedia":"en:Volkswagen",name:"Volkswagen",shop:"car"}},"shop/car|Volvo":{tags:{brand:"Volvo","brand:wikidata":"Q215293","brand:wikipedia":"en:Volvo Cars",name:"Volvo",shop:"car"}},"shop/car|Škoda":{tags:{brand:"Škoda","brand:wikidata":"Q29637","brand:wikipedia":"en:Škoda Auto",name:"Škoda",shop:"car"}},"shop/car|Автомир":{countryCodes:["ru"],matchTags:["shop/car_parts"],tags:{brand:"Автомир","brand:en":"Autoworld","brand:ru":"Автомир","brand:wikidata":"Q4056321","brand:wikipedia":"ru:Автомир (автодилер)",name:"Автомир","name:en":"Autoworld","name:ru":"Автомир",shop:"car"}},"shop/car|سایپا":{countryCodes:["ir"],tags:{brand:"سایپا","brand:en":"Saipa","brand:fa":"سایپا","brand:wikidata":"Q116234","brand:wikipedia":"en:Saipa",name:"سایپا","name:en":"Saipa","name:fa":"سایپا",shop:"car"}},"shop/car|ガリバー":{countryCodes:["jp"],tags:{brand:"ガリバー","brand:en":"Gulliver","brand:ja":"ガリバー","brand:wikidata":"Q11296264","brand:wikipedia":"ja:IDOM",name:"ガリバー","name:en":"Gulliver","name:ja":"ガリバー",shop:"car"}},"shop/car|ダイハツ":{countryCodes:["jp"],tags:{brand:"ダイハツ","brand:en":"Daihatsu","brand:ja":"ダイハツ","brand:wikidata":"Q27511","brand:wikipedia":"ja:ダイハツ工業",name:"ダイハツ","name:en":"Daihatsu","name:ja":"ダイハツ",shop:"car"}},"shop/car|トヨタ":{countryCodes:["jp"],matchNames:["トヨタカローラ","トヨタ自動車"],tags:{brand:"トヨタ","brand:en":"Toyota","brand:ja":"トヨタ","brand:wikidata":"Q53268","brand:wikipedia":"ja:トヨタ自動車",name:"トヨタ","name:en":"Toyota","name:ja":"トヨタ",shop:"car"}},"shop/car|ホンダ":{countryCodes:["jp"],tags:{brand:"ホンダ","brand:en":"Honda","brand:ja":"ホンダ","brand:wikidata":"Q9584","brand:wikipedia":"ja:本田技研工業",name:"ホンダ","name:en":"Honda","name:ja":"ホンダ",shop:"car"}},"shop/carpet|Carpetright":{countryCodes:["be","gb","ie","nl"],matchTags:["shop/furniture"],tags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"}},"shop/carpet|Tapi Carpets":{countryCodes:["gb"],tags:{brand:"Tapi Carpets","brand:wikidata":"Q79223951",name:"Tapi Carpets",shop:"carpet"}},"shop/catalogue|Argos":{countryCodes:["gb","ie"],matchTags:["shop/department_store"],tags:{brand:"Argos","brand:wikidata":"Q4789707","brand:wikipedia":"en:Argos (retailer)",name:"Argos",shop:"catalogue"}},"shop/charity|Age UK":{countryCodes:["gb"],tags:{brand:"Age UK","brand:wikidata":"Q4691850","brand:wikipedia":"en:Age UK",name:"Age UK",shop:"charity"}},"shop/charity|Barnardo's":{countryCodes:["gb","ie"],tags:{brand:"Barnardo's","brand:wikidata":"Q2884670","brand:wikipedia":"en:Barnardo's",name:"Barnardo's",shop:"charity"}},"shop/charity|British Heart Foundation":{countryCodes:["gb"],tags:{brand:"British Heart Foundation","brand:wikidata":"Q4970039","brand:wikipedia":"en:British Heart Foundation",name:"British Heart Foundation",shop:"charity"}},"shop/charity|British Red Cross":{countryCodes:["gb","gg","im"],tags:{brand:"British Red Cross","brand:wikidata":"Q4970966","brand:wikipedia":"en:British Red Cross",name:"British Red Cross",shop:"charity"}},"shop/charity|Cancer Research UK":{countryCodes:["gb","gg"],tags:{brand:"Cancer Research UK","brand:wikidata":"Q326079","brand:wikipedia":"en:Cancer Research UK",name:"Cancer Research UK",shop:"charity"}},"shop/charity|Goodwill":{countryCodes:["ca","us"],matchTags:["shop/clothes","shop/second_hand"],tags:{brand:"Goodwill","brand:wikidata":"Q5583655","brand:wikipedia":"en:Goodwill Industries",name:"Goodwill",shop:"charity"}},"shop/charity|Humana":{matchNames:["humana people to people"],matchTags:["shop/clothes","shop/second_hand"],tags:{brand:"Humana","brand:wikidata":"Q1636581","brand:wikipedia":"de:Humana People to People",name:"Humana",shop:"charity"}},"shop/charity|Kirkens Korshær Genbrug":{countryCodes:["dk"],tags:{brand:"Kirkens Korshær Genbrug","brand:wikidata":"Q12321915","brand:wikipedia":"da:Kirkens Korshær",name:"Kirkens Korshær Genbrug",shop:"charity"}},"shop/charity|Marie Curie":{countryCodes:["gb"],tags:{brand:"Marie Curie","brand:wikidata":"Q16997351","brand:wikipedia":"en:Marie Curie (charity)",name:"Marie Curie",shop:"charity"}},"shop/charity|Mind":{countryCodes:["gb"],tags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"}},"shop/charity|Myrorna":{countryCodes:["se"],matchTags:["shop/clothes","shop/second_hand"],tags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"}},"shop/charity|Oxfam":{countryCodes:["be","de","gb","ie","im"],tags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"}},"shop/charity|PDSA":{countryCodes:["gb"],tags:{brand:"PDSA","brand:wikidata":"Q7165541","brand:wikipedia":"en:People's Dispensary for Sick Animals",name:"PDSA",shop:"charity"}},"shop/charity|RSPCA":{countryCodes:["au","gb"],tags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"}},"shop/charity|Saint Vincent de Paul Thrift Store":{countryCodes:["us"],matchNames:["saint vincent de paul","saint vincent de paul society","society of saint vincent de paul","society of st vincent de paul","st vincent de paul","st vincent de paul society","st vincent de paul thrift store","svdp thrift store","the society of saint vincent de paul","the society of st vincent de paul"],matchTags:["shop/clothes","shop/department_store","shop/second_hand"],tags:{brand:"Saint Vincent de Paul Thrift Store","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul Thrift Store",shop:"charity",short_name:"SVdP"}},"shop/charity|Samaritans":{countryCodes:["gb","ie"],tags:{brand:"Samaritans","brand:wikidata":"Q7408851","brand:wikipedia":"en:Samaritans (charity)",name:"Samaritans",shop:"charity"}},"shop/charity|Scope":{countryCodes:["gb"],tags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"}},"shop/charity|Sue Ryder":{countryCodes:["gb","ie"],tags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"}},"shop/charity|The Children's Society":{countryCodes:["gb"],tags:{brand:"The Children's Society","brand:wikidata":"Q7722484","brand:wikipedia":"en:The Children's Society",name:"The Children's Society",shop:"charity"}},"shop/charity|The Salvation Army":{countryCodes:["au","ca","gb","us"],matchNames:["salvation army"],tags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"}},"shop/charity|Vinnies":{tags:{brand:"Vinnies",name:"Vinnies",shop:"charity"}},"shop/charity|YMCA":{nomatch:["leisure/sports_centre|YMCA"],tags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",name:"YMCA",shop:"charity"}},"shop/chemist|101 Drogerie":{countryCodes:["sk"],tags:{brand:"101 Drogerie","brand:wikidata":"Q67197464",name:"101 Drogerie",shop:"chemist"}},"shop/chemist|7 Дней":{countryCodes:["ru"],tags:{brand:"7 Дней",name:"7 Дней",shop:"chemist"}},"shop/chemist|Acqua & Sapone":{countryCodes:["it"],tags:{brand:"Acqua & Sapone","brand:wikidata":"Q51079044","brand:wikipedia":"it:Acqua & Sapone (azienda)",name:"Acqua & Sapone",shop:"chemist"}},"shop/chemist|Bipa":{countryCodes:["at","hr"],tags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"}},"shop/chemist|Boots":{countryCodes:["gb"],nomatch:["amenity/pharmacy|Boots"],tags:{brand:"Boots","brand:wikidata":"Q6123139",name:"Boots",shop:"chemist"}},"shop/chemist|Budnikowsky":{countryCodes:["de"],tags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"}},"shop/chemist|CVS Pharmacy":{countryCodes:["us"],nomatch:["amenity/pharmacy|CVS Pharmacy","amenity/vending_machine|CVS Pharmacy"],tags:{brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",name:"CVS Pharmacy",shop:"chemist",short_name:"CVS"}},"shop/chemist|Clarel":{tags:{brand:"Clarel",name:"Clarel",shop:"chemist"}},"shop/chemist|Drogeria Natura":{countryCodes:["pl"],tags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"}},"shop/chemist|Etos":{countryCodes:["nl"],tags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"}},"shop/chemist|Hebe":{countryCodes:["pl"],tags:{brand:"Hebe",name:"Hebe",shop:"chemist"}},"shop/chemist|Kruidvat":{countryCodes:["be","fr","nl"],tags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"}},"shop/chemist|Longs Drugs~(Hawaii)":{countryCodes:["us"],tags:{brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",name:"Longs Drugs",shop:"chemist",short_name:"Longs"}},"shop/chemist|Matas":{countryCodes:["dk"],tags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"}},"shop/chemist|Müller":{countryCodes:["at","ch","de","es","hr","hu"],tags:{brand:"Müller","brand:wikidata":"Q1958759","brand:wikipedia":"en:Müller (German trade company)",name:"Müller",shop:"chemist"}},"shop/chemist|Natura":{tags:{brand:"Natura",name:"Natura",shop:"chemist"}},"shop/chemist|Rite Aid":{nomatch:["amenity/pharmacy|Rite Aid"],tags:{brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",name:"Rite Aid",shop:"chemist"}},"shop/chemist|Rossmann":{countryCodes:["cz","de","hu","pl"],tags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"}},"shop/chemist|Savers":{countryCodes:["gb"],matchNames:["savers drugstores"],matchTags:["shop/variety_store"],nomatch:["shop/second_hand|Savers"],tags:{brand:"Savers","brand:wikidata":"Q7428189","brand:wikipedia":"en:Savers (UK retailer)",name:"Savers",official_name:"Savers Health & Beauty",shop:"chemist"}},"shop/chemist|Superdrug":{countryCodes:["gb"],nomatch:["amenity/pharmacy|Superdrug"],tags:{brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",name:"Superdrug",shop:"chemist"}},"shop/chemist|Teta":{countryCodes:["cz","sk"],tags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"}},"shop/chemist|Tigotà":{countryCodes:["it"],tags:{brand:"Tigotà",name:"Tigotà",shop:"chemist"}},"shop/chemist|Trekpleister":{countryCodes:["nl"],tags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"}},"shop/chemist|Walgreens":{countryCodes:["us"],matchNames:["walgreens pharmacy"],tags:{brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",name:"Walgreens",shop:"chemist"}},"shop/chemist|Watsons":{matchTags:["shop/cosmetics"],nomatch:["amenity/pharmacy|Watsons"],tags:{brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",name:"Watsons",shop:"chemist"}},"shop/chemist|dm":{countryCodes:["at","ba","bg","cz","de","hr","hu","it","mk","ro","rs","si","sk"],matchNames:["dm drogerie markt"],tags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"}},"shop/chemist|Мила":{countryCodes:["by"],tags:{brand:"Мила",name:"Мила",shop:"chemist"}},"shop/chemist|Новэкс":{countryCodes:["ru"],tags:{brand:"Новэкс",name:"Новэкс",shop:"chemist"}},"shop/chemist|Остров чистоты":{countryCodes:["by"],tags:{brand:"Остров чистоты",name:"Остров чистоты",shop:"chemist"}},"shop/chemist|Рубль Бум":{countryCodes:["ru"],tags:{brand:"Рубль Бум",name:"Рубль Бум",shop:"chemist"}},"shop/chemist|Улыбка радуги":{countryCodes:["ru"],tags:{brand:"Улыбка радуги",name:"Улыбка радуги",shop:"chemist"}},"shop/chemist|スギ薬局":{countryCodes:["jp"],nomatch:["amenity/pharmacy|スギ薬局"],tags:{brand:"スギ薬局","brand:ja":"スギ薬局",name:"スギ薬局","name:ja":"スギ薬局",shop:"chemist"}},"shop/chemist|丁丁藥局":{nomatch:["amenity/pharmacy|丁丁藥局"],tags:{brand:"丁丁藥局",name:"丁丁藥局",shop:"chemist"}},"shop/chemist|屈臣氏":{countryCodes:["cn","hk","tw"],nomatch:["amenity/pharmacy|屈臣氏"],tags:{brand:"屈臣氏","brand:wikidata":"Q7974785","brand:wikipedia":"zh:屈臣氏",name:"屈臣氏",shop:"chemist"}},"shop/chemist|康是美":{countryCodes:["tw"],tags:{brand:"康是美","brand:wikidata":"Q11063876","brand:wikipedia":"zh:康是美藥妝店",name:"康是美",shop:"chemist"}},"shop/chocolate|Cacau Show":{countryCodes:["br"],tags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau Show",name:"Cacau Show",shop:"chocolate"}},"shop/chocolate|Chocolates Brasil Cacau":{countryCodes:["br"],tags:{brand:"Chocolates Brasil Cacau","brand:wikidata":"Q9750569","brand:wikipedia":"pt:Chocolates Brasil Cacau",name:"Chocolates Brasil Cacau",shop:"chocolate",short_name:"Brasil Cacau"}},"shop/chocolate|Gertrude Hawk Chocolates":{countryCodes:["us"],tags:{brand:"Gertrude Hawk Chocolates","brand:wikidata":"Q5553326","brand:wikipedia":"en:Gertrude Hawk Chocolates",name:"Gertrude Hawk Chocolates",shop:"chocolate",short_name:"Gertrude Hawk"}},"shop/chocolate|Godiva Chocolatier":{countryCodes:["us"],tags:{brand:"Godiva Chocolatier","brand:wikidata":"Q931084","brand:wikipedia":"en:Godiva Chocolatier",name:"Godiva Chocolatier",shop:"chocolate",short_name:"Godiva"}},"shop/chocolate|Jeff de Bruges":{countryCodes:["ca","cz","fr","gb"],tags:{brand:"Jeff de Bruges","brand:wikidata":"Q3176626","brand:wikipedia":"fr:Jeff de Bruges",name:"Jeff de Bruges",shop:"chocolate"}},"shop/chocolate|Laura Secord":{countryCodes:["ca"],tags:{brand:"Laura Secord","brand:wikidata":"Q6499418","brand:wikipedia":"en:Laura Secord Chocolates",name:"Laura Secord",shop:"chocolate"}},"shop/chocolate|Leonidas":{countryCodes:["be","cz","fr","gb","gr","nl"],tags:{brand:"Leonidas","brand:wikidata":"Q80335","brand:wikipedia":"en:Leonidas (chocolate maker)",name:"Leonidas",shop:"chocolate"}},"shop/chocolate|Lindt":{tags:{brand:"Lindt","brand:wikidata":"Q152822","brand:wikipedia":"en:Lindt & Sprüngli",name:"Lindt",shop:"chocolate"}},"shop/chocolate|Purdys Chocolatier":{countryCodes:["ca"],tags:{brand:"Purdys Chocolatier","brand:wikidata":"Q7261007","brand:wikipedia":"en:Purdy's Chocolates",name:"Purdys Chocolatier",shop:"chocolate"}},"shop/clothes|A Pea in the Pod":{countryCodes:["us"],tags:{brand:"A Pea in the Pod","brand:wikidata":"Q79051737",clothes:"maternity",name:"A Pea in the Pod",shop:"clothes"}},"shop/clothes|AOKI":{countryCodes:["jp"],tags:{brand:"AOKI","brand:wikidata":"Q11189480","brand:wikipedia":"ja:AOKIホールディングス",clothes:"men",name:"AOKI","name:ja":"アオキ",shop:"clothes"}},"shop/clothes|AWG":{countryCodes:["bg","de"],tags:{brand:"AWG",name:"AWG",shop:"clothes"}},"shop/clothes|Abercrombie & Fitch":{countryCodes:["ae","be","ca","cn","de","es","fr","gb","hk","ie","it","jp","kw","mx","nl","qa","sa","sg"],tags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",clothes:"men;women",name:"Abercrombie & Fitch",shop:"clothes"}},"shop/clothes|Abercrombie Kids":{countryCodes:["ae","ca","cn","de","gb","it","nl","sg","sp","us"],tags:{brand:"Abercrombie Kids","brand:wikidata":"Q429856","brand:wikipedia":"en:Abercrombie Kids",clothes:"children",name:"Abercrombie Kids",shop:"clothes"}},"shop/clothes|Accessorize":{countryCodes:["gb","it","ru"],tags:{brand:"Accessorize","brand:wikidata":"Q65007482",name:"Accessorize",shop:"clothes"}},"shop/clothes|Ackermans":{tags:{brand:"Ackermans","brand:wikidata":"Q4674255","brand:wikipedia":"en:Ackermans",name:"Ackermans",shop:"clothes"}},"shop/clothes|Addition Elle":{countryCodes:["ca"],tags:{brand:"Addition Elle","brand:wikidata":"Q4681311","brand:wikipedia":"en:Addition Elle",clothes:"women",name:"Addition Elle",shop:"clothes"}},"shop/clothes|Adler":{countryCodes:["at","de","lu"],tags:{brand:"Adler",name:"Adler",shop:"clothes"}},"shop/clothes|Aerie":{countryCodes:["ca","us"],tags:{brand:"Aerie","brand:wikidata":"Q25351619","brand:wikipedia":"en:Aerie (clothing retailer)",name:"Aerie",shop:"clothes"}},"shop/clothes|Aeropostale":{tags:{brand:"Aeropostale","brand:wikidata":"Q794565","brand:wikipedia":"en:Aéropostale (clothing)",clothes:"men;women",name:"Aeropostale",shop:"clothes"}},"shop/clothes|Alia N TanJay":{countryCodes:["ca"],tags:{brand:"Alia N TanJay","brand:wikidata":"Q65947844",clothes:"women",name:"Alia N TanJay",shop:"clothes"}},"shop/clothes|AllSaints":{countryCodes:["gb"],tags:{brand:"AllSaints","brand:wikidata":"Q4728473","brand:wikipedia":"en:AllSaints",name:"AllSaints",shop:"clothes"}},"shop/clothes|Altar'd State":{countryCodes:["us"],tags:{brand:"Altar'd State","brand:wikidata":"Q71022008",name:"Altar'd State",shop:"clothes"}},"shop/clothes|American Eagle Outfitters":{countryCodes:["ca","us"],tags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",clothes:"men;women",name:"American Eagle Outfitters",shop:"clothes",short_name:"American Eagle"}},"shop/clothes|An Phước":{tags:{brand:"An Phước",name:"An Phước",shop:"clothes"}},"shop/clothes|Animal":{countryCodes:["gb"],tags:{brand:"Animal","brand:wikidata":"Q4764749",name:"Animal",shop:"clothes"}},"shop/clothes|Ann Taylor":{countryCodes:["ca","us"],tags:{brand:"Ann Taylor","brand:wikidata":"Q4766699","brand:wikipedia":"en:Ann Inc.",clothes:"women",name:"Ann Taylor",shop:"clothes"}},"shop/clothes|Anthropologie":{countryCodes:["ca","gb","us"],tags:{brand:"Anthropologie","brand:wikidata":"Q4773903","brand:wikipedia":"en:Anthropologie",clothes:"women",name:"Anthropologie",shop:"clothes"}},"shop/clothes|Arc'teryx":{tags:{brand:"Arc'teryx","brand:wikidata":"Q3271455","brand:wikipedia":"en:Arc'teryx",clothes:"men;women",name:"Arc'teryx",shop:"clothes"}},"shop/clothes|Ardene":{countryCodes:["ca","sn"],tags:{brand:"Ardene","brand:wikidata":"Q2860764","brand:wikipedia":"en:Ardene",name:"Ardene",shop:"clothes"}},"shop/clothes|Aritzia":{countryCodes:["ca","us"],tags:{brand:"Aritzia","brand:wikidata":"Q4791147","brand:wikipedia":"en:Aritzia",clothes:"women",name:"Aritzia",shop:"clothes"}},"shop/clothes|Armand Thiery":{countryCodes:["be","fr"],tags:{brand:"Armand Thiery","brand:wikidata":"Q2861975","brand:wikipedia":"fr:Armand Thiery",name:"Armand Thiery",shop:"clothes"}},"shop/clothes|Armani Exchange":{countryCodes:["us"],tags:{brand:"Armani Exchange","brand:wikidata":"Q56045740",clothes:"men;women",name:"Armani Exchange",shop:"clothes"}},"shop/clothes|Avenue":{tags:{brand:"Avenue","brand:wikidata":"Q4828182","brand:wikipedia":"en:Avenue (store)",clothes:"women;oversize",name:"Avenue",shop:"clothes"}},"shop/clothes|Baby Gap":{countryCodes:["us"],tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Baby Gap",shop:"clothes"}},"shop/clothes|Banana Republic":{countryCodes:["ca","gb","us"],tags:{brand:"Banana Republic","brand:wikidata":"Q806085","brand:wikipedia":"en:Banana Republic",clothes:"men;women",name:"Banana Republic",shop:"clothes"}},"shop/clothes|Bench.":{tags:{brand:"Bench.","brand:wikidata":"Q816714","brand:wikipedia":"en:Bench (British clothing brand)",name:"Bench.",shop:"clothes"}},"shop/clothes|Bershka":{tags:{brand:"Bershka","brand:wikidata":"Q827258","brand:wikipedia":"en:Bershka",name:"Bershka",shop:"clothes"}},"shop/clothes|Betty Barclay":{tags:{brand:"Betty Barclay","brand:wikidata":"Q850250","brand:wikipedia":"de:Betty Barclay",name:"Betty Barclay",shop:"clothes"}},"shop/clothes|Big Star":{countryCodes:["by","pl"],tags:{brand:"Big Star","brand:wikidata":"Q9171569","brand:wikipedia":"pl:Big Star Limited",name:"Big Star",shop:"clothes"}},"shop/clothes|Billabong":{tags:{brand:"Billabong","brand:wikidata":"Q862718","brand:wikipedia":"en:Billabong (clothing)",clothes:"men;women",name:"Billabong",shop:"clothes"}},"shop/clothes|Bluenotes":{countryCodes:["ca"],tags:{brand:"Bluenotes","brand:wikidata":"Q4930395","brand:wikipedia":"en:Bluenotes",name:"Bluenotes",shop:"clothes"}},"shop/clothes|BonWorth":{countryCodes:["us"],tags:{brand:"BonWorth","brand:wikidata":"Q4941034","brand:wikipedia":"en:BonWorth",clothes:"women",name:"BonWorth",shop:"clothes"}},"shop/clothes|Bonita":{countryCodes:["at","ch","de","nl"],tags:{brand:"Bonita","brand:wikidata":"Q892598","brand:wikipedia":"de:Bonita (Unternehmen)",name:"Bonita",shop:"clothes"}},"shop/clothes|Bonmarché":{countryCodes:["gb"],tags:{brand:"Bonmarché","brand:wikidata":"Q4942146","brand:wikipedia":"en:Bonmarché",name:"Bonmarché",shop:"clothes"}},"shop/clothes|Bonobo":{countryCodes:["fr"],nomatch:["shop/clothes|Bonobos"],tags:{brand:"Bonobo","brand:wikidata":"Q63682093",clothes:"men;women",name:"Bonobo",shop:"clothes"}},"shop/clothes|Bonobos":{countryCodes:["us"],nomatch:["shop/clothes|Bonobo"],tags:{brand:"Bonobos","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",clothes:"men",name:"Bonobos",shop:"clothes"}},"shop/clothes|Bootlegger":{tags:{brand:"Bootlegger","brand:wikidata":"Q65947984",clothes:"women",name:"Bootlegger",shop:"clothes"}},"shop/clothes|Boux Avenue":{tags:{brand:"Boux Avenue","brand:wikidata":"Q4950489","brand:wikipedia":"en:Boux Avenue",clothes:"underwear",name:"Boux Avenue",shop:"clothes"}},"shop/clothes|Brice":{countryCodes:["be","fr"],tags:{brand:"Brice","brand:wikidata":"Q2925067","brand:wikipedia":"fr:Brice (enseigne)",name:"Brice",shop:"clothes"}},"shop/clothes|Bristol":{countryCodes:["nl"],tags:{brand:"Bristol",name:"Bristol",shop:"clothes"}},"shop/clothes|Brooks Brothers":{tags:{brand:"Brooks Brothers","brand:wikidata":"Q929722","brand:wikipedia":"en:Brooks Brothers",name:"Brooks Brothers",shop:"clothes"}},"shop/clothes|Brunello Cucinelli":{tags:{brand:"Brunello Cucinelli","brand:wikidata":"Q3645582","brand:wikipedia":"en:Brunello Cucinelli (company)",name:"Brunello Cucinelli",shop:"clothes"}},"shop/clothes|Buckle":{countryCodes:["us"],matchNames:["the buckle"],tags:{brand:"Buckle","brand:wikidata":"Q4983306","brand:wikipedia":"en:Buckle (clothing retailer)",clothes:"men;women;children",name:"Buckle",shop:"clothes"}},"shop/clothes|Buffalo Exchange":{countryCodes:["us"],matchTags:["shop/second_hand"],tags:{brand:"Buffalo Exchange","brand:wikidata":"Q4985721","brand:wikipedia":"en:Buffalo Exchange",name:"Buffalo Exchange",second_hand:"only",shop:"clothes"}},"shop/clothes|Burberry":{tags:{brand:"Burberry","brand:wikidata":"Q390107","brand:wikipedia":"en:Burberry",clothes:"men;women",name:"Burberry",shop:"clothes"}},"shop/clothes|Burlington Coat Factory":{countryCodes:["us"],tags:{brand:"Burlington Coat Factory","brand:wikidata":"Q4999220","brand:wikipedia":"en:Burlington (department store)",name:"Burlington Coat Factory",shop:"clothes"}},"shop/clothes|Burton":{countryCodes:["fr","gb"],tags:{brand:"Burton","brand:wikidata":"Q5000795","brand:wikipedia":"en:Burton (retailer)",name:"Burton",shop:"clothes"}},"shop/clothes|C&A":{tags:{brand:"C&A","brand:wikidata":"Q701338","brand:wikipedia":"en:C&A",name:"C&A",shop:"clothes"}},"shop/clothes|COS":{tags:{brand:"COS","brand:wikidata":"Q60772401","brand:wikipedia":"en:COS (clothing)",name:"COS",shop:"clothes"}},"shop/clothes|Cache Cache":{countryCodes:["fr","it","lu"],tags:{brand:"Cache Cache","brand:wikidata":"Q63064086",name:"Cache Cache",shop:"clothes"}},"shop/clothes|Calvin Klein":{tags:{brand:"Calvin Klein","brand:wikidata":"Q1068628","brand:wikipedia":"en:Calvin Klein (company)",name:"Calvin Klein",shop:"clothes"}},"shop/clothes|Calzedonia":{tags:{brand:"Calzedonia","brand:wikidata":"Q1027874","brand:wikipedia":"en:Calzedonia",name:"Calzedonia",shop:"clothes"}},"shop/clothes|Camaïeu":{countryCodes:["be","cz","fr","it","pl"],tags:{brand:"Camaïeu","brand:wikidata":"Q2934647","brand:wikipedia":"en:Camaïeu (company)",name:"Camaïeu",shop:"clothes"}},"shop/clothes|Camp David":{countryCodes:["at","de","ee","sk"],tags:{brand:"Camp David","brand:wikidata":"Q50540636","brand:wikipedia":"en:Camp David (fashion)",name:"Camp David",shop:"clothes"}},"shop/clothes|Canada Goose":{tags:{brand:"Canada Goose","brand:wikidata":"Q2988422","brand:wikipedia":"en:Canada Goose (clothing)",name:"Canada Goose",shop:"clothes"}},"shop/clothes|Carhartt":{countryCodes:["gb","us"],tags:{brand:"Carhartt","brand:wikidata":"Q527877","brand:wikipedia":"en:Carhartt",clothes:"workwear",name:"Carhartt",shop:"clothes"}},"shop/clothes|Carlings":{countryCodes:["at","fi","no","se"],tags:{brand:"Carlings","brand:wikidata":"Q10443115","brand:wikipedia":"no:Carlings",name:"Carlings",shop:"clothes"}},"shop/clothes|Caroll":{countryCodes:["ch","fr"],tags:{brand:"Caroll","brand:wikidata":"Q63063871",name:"Caroll",shop:"clothes"}},"shop/clothes|Carter's":{matchNames:["carters babies and kids"],tags:{brand:"Carter's","brand:wikidata":"Q5047083","brand:wikipedia":"en:Carter's",clothes:"children",name:"Carter's",shop:"clothes"}},"shop/clothes|Carter's OshKosh":{tags:{brand:"Carter's OshKosh",name:"Carter's OshKosh",shop:"clothes"}},"shop/clothes|Catherines":{countryCodes:["us"],tags:{brand:"Catherines","brand:wikidata":"Q64026208",clothes:"oversize;women",name:"Catherines",shop:"clothes"}},"shop/clothes|Cato":{countryCodes:["us"],tags:{brand:"Cato","brand:wikidata":"Q16956136","brand:wikipedia":"en:Cato Corporation",clothes:"women",name:"Cato",official_name:"Cato Fashions",shop:"clothes"}},"shop/clothes|Cecil":{countryCodes:["at","de","nl"],tags:{brand:"Cecil",name:"Cecil",shop:"clothes"}},"shop/clothes|Celio":{tags:{brand:"Celio","brand:wikidata":"Q2672003","brand:wikipedia":"en:Celio (retailer)",name:"Celio",shop:"clothes"}},"shop/clothes|Chanel":{tags:{brand:"Chanel","brand:wikidata":"Q218115","brand:wikipedia":"en:Chanel",name:"Chanel",shop:"clothes"}},"shop/clothes|Charles Vögele":{countryCodes:["at","be","ch","de","hu","nl"],tags:{brand:"Charles Vögele","brand:wikidata":"Q1066326","brand:wikipedia":"de:Charles Vögele Holding",name:"Charles Vögele",shop:"clothes",short_name:"Vögele"}},"shop/clothes|Charlotte Russe":{countryCodes:["us"],tags:{brand:"Charlotte Russe","brand:wikidata":"Q5086126","brand:wikipedia":"en:Charlotte Russe (clothing retailer)",name:"Charlotte Russe",shop:"clothes"}},"shop/clothes|Charming Charlie":{countryCodes:["us"],tags:{brand:"Charming Charlie","brand:wikidata":"Q16829286","brand:wikipedia":"en:Charming Charlie",clothes:"women",name:"Charming Charlie",shop:"clothes"}},"shop/clothes|Chico's":{countryCodes:["ar","us"],tags:{brand:"Chico's","brand:wikidata":"Q5096393","brand:wikipedia":"en:Chico's (clothing retailer)",name:"Chico's",shop:"clothes"}},"shop/clothes|Christopher & Banks":{countryCodes:["us"],tags:{brand:"Christopher & Banks","brand:wikidata":"Q5111816","brand:wikipedia":"en:Christopher & Banks",name:"Christopher & Banks",shop:"clothes"}},"shop/clothes|Citi Trends":{countryCodes:["us"],tags:{brand:"Citi Trends","brand:wikidata":"Q5122438","brand:wikipedia":"en:Citi Trends",name:"Citi Trends",shop:"clothes"}},"shop/clothes|City Gear":{countryCodes:["us"],tags:{brand:"City Gear","brand:wikidata":"Q16958629","brand:wikipedia":"en:City Gear",name:"City Gear",shop:"clothes"}},"shop/clothes|Cleo":{tags:{brand:"Cleo","brand:wikidata":"Q65947963",clothes:"women",name:"Cleo",shop:"clothes"}},"shop/clothes|Club Monaco":{countryCodes:["ca","gb","us"],tags:{brand:"Club Monaco","brand:wikidata":"Q2979949","brand:wikipedia":"en:Club Monaco",name:"Club Monaco",shop:"clothes"}},"shop/clothes|Colin's":{tags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"}},"shop/clothes|Colloseum":{countryCodes:["at","cz","de","gr","lv","pl","ru","sk"],tags:{brand:"Colloseum","brand:wikidata":"Q15794685","brand:wikipedia":"de:Colloseum",name:"Colloseum",shop:"clothes"}},"shop/clothes|Columbia":{nomatch:["amenity/bank|Columbia Bank"],tags:{brand:"Columbia","brand:wikidata":"Q1112588","brand:wikipedia":"en:Columbia Sportswear",name:"Columbia",official_name:"Columbia Sportswear",shop:"clothes"}},"shop/clothes|Cotton On":{tags:{brand:"Cotton On","brand:wikidata":"Q5175717","brand:wikipedia":"en:Cotton On Group",name:"Cotton On",shop:"clothes"}},"shop/clothes|Cropp":{countryCodes:["cs","hu","pl","ro","ru","sk","ua"],tags:{brand:"Cropp","brand:wikidata":"Q9196793","brand:wikipedia":"pl:Cropp",name:"Cropp",shop:"clothes"}},"shop/clothes|Cubus":{countryCodes:["de","fi","lv","no","pl","se"],tags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"}},"shop/clothes|DTLR":{countryCodes:["us"],tags:{brand:"DTLR",name:"DTLR",shop:"clothes"}},"shop/clothes|DXL Men's Apparel":{countryCodes:["us"],matchNames:["casual male xl"],tags:{brand:"DXL Men's Apparel","brand:wikidata":"Q61981830",clothes:"oversize;men",name:"DXL Men's Apparel",shop:"clothes",short_name:"DXL"}},"shop/clothes|Damart":{countryCodes:["be","fr","lu"],tags:{brand:"Damart","brand:wikidata":"Q3012602","brand:wikipedia":"en:Damart",name:"Damart",shop:"clothes"}},"shop/clothes|David's Bridal":{countryCodes:["ca","us"],tags:{brand:"David's Bridal","brand:wikidata":"Q5230388","brand:wikipedia":"en:David's Bridal",clothes:"wedding",name:"David's Bridal",shop:"clothes"}},"shop/clothes|Desigual":{tags:{brand:"Desigual","brand:wikidata":"Q83750","brand:wikipedia":"en:Desigual",name:"Desigual",shop:"clothes"}},"shop/clothes|Destination Maternity":{countryCodes:["ca","us"],tags:{brand:"Destination Maternity","brand:wikidata":"Q79051770",clothes:"maternity",name:"Destination Maternity",shop:"clothes"}},"shop/clothes|Devred":{countryCodes:["be","fr","ma"],tags:{brand:"Devred","brand:wikidata":"Q3025542","brand:wikipedia":"fr:Devred 1902",name:"Devred",shop:"clothes"}},"shop/clothes|Didi":{countryCodes:["be","nl"],tags:{brand:"Didi",name:"Didi",shop:"clothes"}},"shop/clothes|Diesel":{tags:{brand:"Diesel","brand:wikidata":"Q158285","brand:wikipedia":"en:Diesel (brand)",name:"Diesel",shop:"clothes"}},"shop/clothes|Dior":{tags:{brand:"Dior","brand:wikidata":"Q542767","brand:wikipedia":"en:Christian Dior (fashion house)",name:"Dior",shop:"clothes"}},"shop/clothes|Diverse":{countryCodes:["pl"],tags:{brand:"Diverse","brand:wikidata":"Q11694298","brand:wikipedia":"pl:Diverse",name:"Diverse",shop:"clothes"}},"shop/clothes|Dolce & Gabbana":{matchNames:["d and g","dg","dolce and gabana","dolce and gabanna","dolce and gabbanna","dolce y gabana","dolce y gabanna","dolce y gabbana","dolce y gabbanna"],tags:{brand:"Dolce & Gabbana","brand:wikidata":"Q214480","brand:wikipedia":"en:Dolce & Gabbana",name:"Dolce & Gabbana",shop:"clothes"}},"shop/clothes|Dorothy Perkins":{countryCodes:["gb","gg","ie","im"],tags:{brand:"Dorothy Perkins","brand:wikidata":"Q5298588","brand:wikipedia":"en:Dorothy Perkins",name:"Dorothy Perkins",shop:"clothes"}},"shop/clothes|Dress Barn":{tags:{brand:"Dress Barn","brand:wikidata":"Q65090033","brand:wikipedia":"en:DressBarn",name:"Dress Barn",shop:"clothes"}},"shop/clothes|Dressmann":{countryCodes:["at","fi","no","se"],tags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"}},"shop/clothes|Du Pareil au Même":{tags:{brand:"Du Pareil au Même",name:"Du Pareil au Même",shop:"clothes"}},"shop/clothes|Dynamite":{countryCodes:["ca","jo","ku","sa","us"],tags:{brand:"Dynamite","brand:wikidata":"Q3117385","brand:wikipedia":"en:Groupe Dynamite",clothes:"women",name:"Dynamite",shop:"clothes"}},"shop/clothes|Eddie Bauer":{countryCodes:["ca","jp","us"],tags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"}},"shop/clothes|Edgars":{tags:{brand:"Edgars",name:"Edgars",shop:"clothes"}},"shop/clothes|Edinburgh Woollen Mill":{countryCodes:["gb"],tags:{brand:"Edinburgh Woollen Mill","brand:wikidata":"Q16834657","brand:wikipedia":"en:Edinburgh Woollen Mill",name:"Edinburgh Woollen Mill",shop:"clothes"}},"shop/clothes|Engbers":{countryCodes:["at","de"],tags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"}},"shop/clothes|Ermenegildo Zegna":{countryCodes:["ch","it"],tags:{brand:"Ermenegildo Zegna","brand:wikidata":"Q1355904","brand:wikipedia":"en:Ermenegildo Zegna",clothes:"men",name:"Ermenegildo Zegna",shop:"clothes",short_name:"Zegna"}},"shop/clothes|Ernsting's family":{countryCodes:["at","de"],tags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"}},"shop/clothes|Esprit":{tags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"}},"shop/clothes|Etam":{tags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"}},"shop/clothes|Evans":{tags:{brand:"Evans","brand:wikidata":"Q5415877","brand:wikipedia":"en:Evans (retailer)",clothes:"women",name:"Evans",shop:"clothes"}},"shop/clothes|Evereve":{countryCodes:["us"],tags:{brand:"Evereve","brand:wikidata":"Q69891997",clothes:"women",name:"Evereve",shop:"clothes"}},"shop/clothes|Everything But Water":{countryCodes:["us"],tags:{brand:"Everything But Water",clothes:"swimwear",name:"Everything But Water",shop:"clothes"}},"shop/clothes|Express":{nomatch:["shop/convenience|Express"],tags:{brand:"Express","brand:wikidata":"Q1384784","brand:wikipedia":"en:Express, Inc.",name:"Express",shop:"clothes"}},"shop/clothes|Fairweather":{countryCodes:["ca"],tags:{brand:"Fairweather","brand:wikidata":"Q64861806",clothes:"women",name:"Fairweather",shop:"clothes"}},"shop/clothes|Fat Face":{countryCodes:["gb","gg","ie"],tags:{brand:"Fat Face","brand:wikidata":"Q5437186","brand:wikipedia":"en:Fat Face",name:"Fat Face",shop:"clothes"}},"shop/clothes|Fendi":{countryCodes:["fr","it"],tags:{brand:"Fendi","brand:wikidata":"Q926575","brand:wikipedia":"en:Fendi",name:"Fendi",shop:"clothes"}},"shop/clothes|Forever 21":{tags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"Forever 21",shop:"clothes"}},"shop/clothes|Francesca's":{countryCodes:["us"],tags:{brand:"Francesca's","brand:wikidata":"Q72982331",clothes:"women;luxury",name:"Francesca's",shop:"clothes"}},"shop/clothes|Free People":{countryCodes:["ca","us"],tags:{brand:"Free People","brand:wikidata":"Q5499945","brand:wikipedia":"en:Free People",name:"Free People",shop:"clothes"}},"shop/clothes|French Connection":{tags:{brand:"French Connection","brand:wikidata":"Q306457","brand:wikipedia":"en:French Connection (clothing)",name:"French Connection",shop:"clothes",short_name:"FCUK"}},"shop/clothes|Fussl":{countryCodes:["at","de"],matchNames:["fussl modestraße"],tags:{alt_name:"Fussl Modestraße",brand:"Fussl","brand:wikidata":"Q24266366","brand:wikipedia":"de:Fussl Modestraße",name:"Fussl",shop:"clothes"}},"shop/clothes|G-Star Raw":{matchNames:["g-star"],tags:{brand:"G-Star Raw","brand:wikidata":"Q1484081","brand:wikipedia":"en:G-Star Raw",name:"G-Star Raw",shop:"clothes"}},"shop/clothes|GU":{countryCodes:["cl","jp","tw"],tags:{brand:"GU","brand:wikidata":"Q5512642","brand:wikipedia":"en:GU (retailer)",name:"GU",shop:"clothes"}},"shop/clothes|Gabe's":{countryCodes:["us"],matchNames:["gabriel brothers"],tags:{brand:"Gabe's","brand:wikidata":"Q5515554","brand:wikipedia":"en:Gabe's",name:"Gabe's",shop:"clothes"}},"shop/clothes|Gant":{tags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"}},"shop/clothes|Gap":{matchNames:["the gap"],tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"}},"shop/clothes|Gap Factory":{countryCodes:["us"],tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap Factory",shop:"clothes"}},"shop/clothes|Gap Kids":{tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap Kids",shop:"clothes"}},"shop/clothes|Garage":{countryCodes:["am","ca","jo","om","qa","sa","us"],tags:{brand:"Garage","brand:wikidata":"Q5521860","brand:wikipedia":"en:Garage (clothing retailer)",clothes:"women",name:"Garage",shop:"clothes"}},"shop/clothes|Gerry Weber":{tags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"}},"shop/clothes|Gina Laura":{countryCodes:["at","de"],tags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"}},"shop/clothes|Gloria Jeans":{countryCodes:["ru","ua"],nomatch:["amenity/cafe|Gloria Jean's"],tags:{brand:"Gloria Jeans","brand:wikidata":"Q4139985","brand:wikipedia":"ru:Глория Джинс",name:"Gloria Jeans",shop:"clothes"}},"shop/clothes|Gucci":{tags:{brand:"Gucci","brand:wikidata":"Q178516","brand:wikipedia":"en:Gucci",name:"Gucci",shop:"clothes"}},"shop/clothes|Guess":{tags:{brand:"Guess","brand:wikidata":"Q2470307","brand:wikipedia":"en:Guess (clothing)",name:"Guess",shop:"clothes"}},"shop/clothes|Gymboree":{countryCodes:["ca","us"],tags:{brand:"Gymboree","brand:wikidata":"Q4039771","brand:wikipedia":"en:Gymboree",name:"Gymboree",shop:"clothes"}},"shop/clothes|Gémo":{countryCodes:["be","ch","fr"],tags:{brand:"Gémo","brand:wikidata":"Q3122954","brand:wikipedia":"fr:Gémo",name:"Gémo",shop:"clothes"}},"shop/clothes|H&M":{tags:{brand:"H&M","brand:wikidata":"Q188326","brand:wikipedia":"en:H&M",name:"H&M",shop:"clothes"}},"shop/clothes|Haggar":{countryCodes:["us"],matchNames:["haggar clothing"],tags:{alt_name:"Haggar Clothing Co.",brand:"Haggar","brand:wikidata":"Q5638669","brand:wikipedia":"en:Haggar Clothing",name:"Haggar",shop:"clothes"}},"shop/clothes|Hallhuber":{countryCodes:["at","ch","de","lu","nl"],tags:{brand:"Hallhuber","brand:wikidata":"Q1571714","brand:wikipedia":"de:Hallhuber (Bekleidungshaus)",name:"Hallhuber",shop:"clothes"}},"shop/clothes|Hanna Andersson":{countryCodes:["us"],matchNames:["hanna anderssen"],tags:{brand:"Hanna Andersson","brand:wikidata":"Q17460802","brand:wikipedia":"en:Hanna Andersson",clothes:"baby;children;women",name:"Hanna Andersson",shop:"clothes"}},"shop/clothes|Hermès":{countryCodes:["ch","fr"],nomatch:["amenity/post_office|Hermes Paketshop"],tags:{brand:"Hermès","brand:wikidata":"Q843887","brand:wikipedia":"en:Hermès",name:"Hermès",shop:"clothes"}},"shop/clothes|Hobbs":{countryCodes:["gb"],tags:{brand:"Hobbs","brand:wikidata":"Q25108740",name:"Hobbs",shop:"clothes"}},"shop/clothes|Hollister":{tags:{brand:"Hollister","brand:wikidata":"Q1257477","brand:wikipedia":"en:Hollister Co.",name:"Hollister",official_name:"Hollister Co.",shop:"clothes"}},"shop/clothes|Hot Topic":{countryCodes:["ca","us"],tags:{brand:"Hot Topic","brand:wikidata":"Q9294032","brand:wikipedia":"en:Hot Topic",name:"Hot Topic",shop:"clothes"}},"shop/clothes|House":{tags:{brand:"House","brand:wikidata":"Q9294202","brand:wikipedia":"pl:House (marka)",name:"House",shop:"clothes"}},"shop/clothes|Hugo Boss":{tags:{brand:"Hugo Boss","brand:wikidata":"Q491627","brand:wikipedia":"en:Hugo Boss",name:"Hugo Boss",shop:"clothes",short_name:"Boss"}},"shop/clothes|Hunkemöller":{countryCodes:["at","be","de","dk","es","lu","nl"],tags:{brand:"Hunkemöller","brand:wikidata":"Q2604175","brand:wikipedia":"en:Hunkemöller",name:"Hunkemöller",shop:"clothes"}},"shop/clothes|IZOD":{tags:{brand:"IZOD","brand:wikidata":"Q17152556","brand:wikipedia":"en:Izod",clothes:"men",name:"IZOD",shop:"clothes"}},"shop/clothes|Indochino":{countryCodes:["ca","us"],tags:{brand:"Indochino","brand:wikidata":"Q64448127","brand:wikipedia":"en:Indochino",clothes:"suits",name:"Indochino",shop:"clothes"}},"shop/clothes|Inside":{tags:{brand:"Inside",name:"Inside",shop:"clothes"}},"shop/clothes|Intimissimi":{tags:{brand:"Intimissimi","brand:wikidata":"Q305404","brand:wikipedia":"en:Intimissimi",clothes:"underwear",name:"Intimissimi",shop:"clothes"}},"shop/clothes|J.Crew":{countryCodes:["ca","gb","us"],tags:{brand:"J.Crew","brand:wikidata":"Q5370765","brand:wikipedia":"en:J.Crew",clothes:"men;women;children",name:"J.Crew",shop:"clothes"}},"shop/clothes|J.Jill":{countryCodes:["us"],tags:{brand:"J.Jill","brand:wikidata":"Q64448268","brand:wikipedia":"en:J.Jill",clothes:"women",name:"J.Jill",shop:"clothes"}},"shop/clothes|JBC":{countryCodes:["be","lu"],tags:{brand:"JBC","brand:wikidata":"Q2671470","brand:wikipedia":"nl:JBC",name:"JBC",shop:"clothes"}},"shop/clothes|Jack & Jones":{tags:{brand:"Jack & Jones","brand:wikidata":"Q6077665","brand:wikipedia":"en:Jack & Jones",name:"Jack & Jones",shop:"clothes"}},"shop/clothes|Jack Wills":{countryCodes:["ae","gb","hk","ie","kw","lb","mo","sg","us"],tags:{brand:"Jack Wills","brand:wikidata":"Q6115814","brand:wikipedia":"en:Jack Wills",name:"Jack Wills",shop:"clothes"}},"shop/clothes|Janie & Jack":{countryCodes:["ca","us"],tags:{brand:"Janie & Jack","brand:wikidata":"Q64449634","brand:wikipedia":"en:Janie & Jack",clothes:"children",name:"Janie & Jack",shop:"clothes"}},"shop/clothes|Jeans Centre":{countryCodes:["nl"],tags:{brand:"Jeans Centre",name:"Jeans Centre",shop:"clothes"}},"shop/clothes|Jeans Fritz":{countryCodes:["de"],tags:{brand:"Jeans Fritz","brand:wikidata":"Q1686071","brand:wikipedia":"de:Jeans Fritz",name:"Jeans Fritz",shop:"clothes"}},"shop/clothes|Jennyfer":{countryCodes:["fr","it","lu"],tags:{brand:"Jennyfer","brand:wikidata":"Q3177174","brand:wikipedia":"fr:Jennyfer",name:"Jennyfer",shop:"clothes"}},"shop/clothes|Jet":{countryCodes:["za"],nomatch:["amenity/fuel|Jet"],tags:{brand:"Jet","brand:wikidata":"Q61995123",name:"Jet",shop:"clothes"}},"shop/clothes|Jigsaw":{countryCodes:["au","gb","us"],tags:{brand:"Jigsaw","brand:wikidata":"Q6192383","brand:wikipedia":"en:Jigsaw (clothing retailer)",name:"Jigsaw",shop:"clothes"}},"shop/clothes|JoJo Maman Bébé":{countryCodes:["gb"],tags:{brand:"JoJo Maman Bébé","brand:wikidata":"Q6204064",clothes:"maternity;babies",name:"JoJo Maman Bébé",shop:"clothes"}},"shop/clothes|JoS. A. Bank":{countryCodes:["us"],matchNames:["jos bank","joseph a bank"],tags:{brand:"JoS. A. Bank","brand:wikidata":"Q6204078","brand:wikipedia":"en:JoS. A. Bank Clothiers",name:"JoS. A. Bank",official_name:"Jos. A. Bank Clothiers",shop:"clothes"}},"shop/clothes|Jockey":{tags:{brand:"Jockey","brand:wikidata":"Q534235","brand:wikipedia":"en:Jockey International",name:"Jockey",shop:"clothes"}},"shop/clothes|Joe Fresh":{tags:{brand:"Joe Fresh","brand:wikidata":"Q6209926","brand:wikipedia":"en:Joe Fresh",name:"Joe Fresh",shop:"clothes"}},"shop/clothes|Johnny Was":{countryCodes:["us"],tags:{brand:"Johnny Was",clothes:"women",name:"Johnny Was",shop:"clothes"}},"shop/clothes|Joules":{countryCodes:["gb","gg","ie"],tags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"}},"shop/clothes|Jules":{countryCodes:["be","fr","it"],tags:{brand:"Jules","brand:wikidata":"Q3188386","brand:wikipedia":"fr:Jules (enseigne)",clothes:"men",name:"Jules",shop:"clothes"}},"shop/clothes|Justice":{countryCodes:["ca","us"],tags:{brand:"Justice","brand:wikidata":"Q7857512","brand:wikipedia":"en:Tween Brands",name:"Justice",shop:"clothes"}},"shop/clothes|K&Ö":{countryCodes:["at"],matchNames:["kastner & öhler"],tags:{alt_name:"Kastner & Öhler",brand:"K&Ö","brand:wikidata":"Q1735474","brand:wikipedia":"de:Kastner & Öhler",name:"K&Ö",shop:"clothes"}},"shop/clothes|KappAhl":{countryCodes:["fi","no","pl","se"],tags:{brand:"KappAhl","brand:wikidata":"Q4349016","brand:wikipedia":"sv:Kappahl",name:"KappAhl",shop:"clothes"}},"shop/clothes|Karen Millen":{countryCodes:["gb"],tags:{brand:"Karen Millen","brand:wikidata":"Q6369889",name:"Karen Millen",shop:"clothes"}},"shop/clothes|Kate Spade New York":{countryCodes:["ca","us"],matchNames:["kate spade ny"],tags:{brand:"Kate Spade New York","brand:wikidata":"Q6375797","brand:wikipedia":"en:Kate Spade New York",name:"Kate Spade New York",shop:"clothes",short_name:"Kate Spade"}},"shop/clothes|Kendra Scott":{tags:{brand:"Kendra Scott",name:"Kendra Scott",shop:"clothes"}},"shop/clothes|KiK":{tags:{brand:"KiK","brand:wikidata":"Q883965","brand:wikipedia":"en:KiK",name:"KiK",shop:"clothes"}},"shop/clothes|Kiabi":{tags:{brand:"Kiabi","brand:wikidata":"Q3196299","brand:wikipedia":"fr:Kiabi",name:"Kiabi",shop:"clothes"}},"shop/clothes|Koton":{tags:{brand:"Koton","brand:wikidata":"Q6063877","brand:wikipedia":"tr:Koton",name:"Koton",shop:"clothes"}},"shop/clothes|LC Waikiki":{tags:{brand:"LC Waikiki","brand:wikidata":"Q3205965","brand:wikipedia":"fr:LC Waikiki",name:"LC Waikiki",shop:"clothes"}},"shop/clothes|La Halle":{countryCodes:["ch","fr"],tags:{brand:"La Halle",name:"La Halle",shop:"clothes"}},"shop/clothes|La Senza":{countryCodes:["ca","gb"],tags:{brand:"La Senza","brand:wikidata":"Q3212802","brand:wikipedia":"en:La Senza",name:"La Senza",shop:"clothes"}},"shop/clothes|La Vie en Rose":{tags:{brand:"La Vie en Rose","brand:wikidata":"Q4950452","brand:wikipedia":"en:Boutique La Vie en Rose",clothes:"underwear;women",name:"La Vie en Rose",shop:"clothes"}},"shop/clothes|Lacoste":{tags:{brand:"Lacoste","brand:wikidata":"Q309031","brand:wikipedia":"en:Lacoste",name:"Lacoste",shop:"clothes"}},"shop/clothes|Lane Bryant":{countryCodes:["us"],tags:{brand:"Lane Bryant","brand:wikidata":"Q6485350","brand:wikipedia":"en:Lane Bryant",clothes:"oversize;women",name:"Lane Bryant",shop:"clothes"}},"shop/clothes|Laura":{countryCodes:["ca"],tags:{brand:"Laura","brand:wikidata":"Q6498590","brand:wikipedia":"en:Laura (clothing retailer)",clothes:"women",name:"Laura",shop:"clothes"}},"shop/clothes|Laura Ashley":{countryCodes:["gb"],tags:{brand:"Laura Ashley","brand:wikidata":"Q1523089","brand:wikipedia":"en:Laura Ashley plc",name:"Laura Ashley",shop:"clothes"}},"shop/clothes|Le Château":{countryCodes:["ae","ca","sa"],tags:{brand:"Le Château","brand:wikidata":"Q6506731","brand:wikipedia":"en:Le Château",name:"Le Château",shop:"clothes"}},"shop/clothes|Levi's":{tags:{brand:"Levi's","brand:wikidata":"Q127962","brand:wikipedia":"en:Levi Strauss & Co.",clothes:"denim;men;women",name:"Levi's",shop:"clothes"}},"shop/clothes|Lids":{countryCodes:["ca","us"],tags:{brand:"Lids","brand:wikidata":"Q19841609","brand:wikipedia":"en:Lids (store)",clothes:"hats",name:"Lids",shop:"clothes"}},"shop/clothes|Lindex":{countryCodes:["cz","ee","fi","no","se","sk"],tags:{brand:"Lindex","brand:wikidata":"Q1786717","brand:wikipedia":"en:Lindex",name:"Lindex",shop:"clothes"}},"shop/clothes|Loft":{matchNames:["ann taylor loft","the loft"],tags:{brand:"Loft","brand:wikidata":"Q62075137",clothes:"women",name:"Loft",shop:"clothes"}},"shop/clothes|Loro Piana":{countryCodes:["fr","it"],tags:{brand:"Loro Piana","brand:wikidata":"Q1686544","brand:wikipedia":"en:Loro Piana",name:"Loro Piana",shop:"clothes"}},"shop/clothes|Louis Vuitton":{tags:{brand:"Louis Vuitton","brand:wikidata":"Q191485","brand:wikipedia":"en:Louis Vuitton",name:"Louis Vuitton",shop:"clothes"}},"shop/clothes|Lowes":{countryCodes:["au"],nomatch:["shop/doityourself|Lowe's","shop/supermarket|Lowe's Market","shop/supermarket|Lowes Foods"],tags:{brand:"Lowes","brand:wikidata":"Q6693996","brand:wikipedia":"en:Lowes Menswear",name:"Lowes",shop:"clothes"}},"shop/clothes|Lucky Brand":{countryCodes:["ca","us"],matchNames:["lucky brand jeans"],tags:{brand:"Lucky Brand","brand:wikidata":"Q6697865","brand:wikipedia":"en:Lucky Brand Jeans",name:"Lucky Brand",shop:"clothes"}},"shop/clothes|Lululemon":{countryCodes:["au","ca","us"],tags:{brand:"Lululemon","brand:wikidata":"Q6702957","brand:wikipedia":"en:Lululemon Athletica",clothes:"men;women",name:"Lululemon",official_name:"Lululemon Athletica",shop:"clothes"}},"shop/clothes|M&Co":{countryCodes:["gb"],tags:{brand:"M&Co","brand:wikidata":"Q6711808","brand:wikipedia":"en:M&Co.",name:"M&Co",shop:"clothes"}},"shop/clothes|MO":{countryCodes:["pt"],tags:{brand:"MO","brand:wikidata":"Q51882883","brand:wikipedia":"pt:MO (lojas)",name:"MO",shop:"clothes"}},"shop/clothes|MS Mode":{countryCodes:["be","de","fr","lu","nl"],tags:{brand:"MS Mode","brand:wikidata":"Q6718117","brand:wikipedia":"nl:MS Mode",name:"MS Mode",shop:"clothes"}},"shop/clothes|Mackage":{tags:{brand:"Mackage",name:"Mackage",shop:"clothes"}},"shop/clothes|Madewell":{countryCodes:["us"],tags:{brand:"Madewell","brand:wikidata":"Q64026213",clothes:"men;women",name:"Madewell",shop:"clothes"}},"shop/clothes|Maidenform":{countryCodes:["us"],tags:{brand:"Maidenform","brand:wikidata":"Q6735419","brand:wikipedia":"en:Maidenform",clothes:"underwear;women",name:"Maidenform",shop:"clothes"}},"shop/clothes|Mandee":{countryCodes:["us"],tags:{brand:"Mandee","brand:wikidata":"Q71035705",clothes:"women",name:"Mandee",shop:"clothes"}},"shop/clothes|Mango":{tags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"}},"shop/clothes|Marc O'Polo":{countryCodes:["at","be","ch","de","nl","pl"],tags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"}},"shop/clothes|Marimekko":{countryCodes:["fi"],tags:{brand:"Marimekko","brand:wikidata":"Q534903","brand:wikipedia":"fi:Marimekko",name:"Marimekko",shop:"clothes"}},"shop/clothes|Marisa":{tags:{brand:"Marisa",name:"Marisa",shop:"clothes"}},"shop/clothes|Mark Formelle":{countryCodes:["by","kz","ru"],tags:{brand:"Mark Formelle","brand:wikidata":"Q25381083","brand:wikipedia":"ru:Mark Formelle",name:"Mark Formelle",shop:"clothes"}},"shop/clothes|Mark's":{countryCodes:["ca"],tags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"}},"shop/clothes|Massimo Dutti":{tags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"}},"shop/clothes|Matalan":{countryCodes:["ae","gb"],tags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"}},"shop/clothes|Maurices":{countryCodes:["ca","fr","us"],tags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",clothes:"women",name:"Maurices",shop:"clothes"}},"shop/clothes|Max Mara":{tags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"}},"shop/clothes|Melanie Lyne":{countryCodes:["ca"],tags:{brand:"Melanie Lyne","brand:wikidata":"Q64861470",clothes:"women",name:"Melanie Lyne",shop:"clothes"}},"shop/clothes|Men's Wearhouse":{countryCodes:["us"],matchNames:["mens warehouse"],tags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513","brand:wikipedia":"en:Men's Wearhouse",clothes:"suits",name:"Men's Wearhouse",shop:"clothes"}},"shop/clothes|Mexx":{tags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"}},"shop/clothes|Michael Kors":{tags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Capri Holdings",name:"Michael Kors",shop:"clothes"}},"shop/clothes|Miller & Monroe":{countryCodes:["at","de","nl"],tags:{brand:"Miller & Monroe",name:"Miller & Monroe",shop:"clothes"}},"shop/clothes|Mim":{countryCodes:["fr","it"],tags:{brand:"Mim",name:"Mim",shop:"clothes"}},"shop/clothes|Minimax":{countryCodes:["by"],tags:{brand:"Minimax",name:"Minimax",shop:"clothes"}},"shop/clothes|Miss Etam":{countryCodes:["nl"],tags:{brand:"Miss Etam",name:"Miss Etam",shop:"clothes"}},"shop/clothes|Miss Selfridge":{tags:{brand:"Miss Selfridge","brand:wikidata":"Q6877374","brand:wikipedia":"en:Miss Selfridge",clothes:"women",name:"Miss Selfridge",shop:"clothes"}},"shop/clothes|Mohito":{tags:{brand:"Mohito",name:"Mohito",shop:"clothes"}},"shop/clothes|Monsoon":{countryCodes:["gb","gg","ie"],tags:{brand:"Monsoon","brand:wikidata":"Q65007501",name:"Monsoon",shop:"clothes"}},"shop/clothes|Moores":{countryCodes:["ca"],tags:{brand:"Moores","brand:wikidata":"Q6908309","brand:wikipedia":"en:Moores",clothes:"men",name:"Moores",shop:"clothes"}},"shop/clothes|Moss Bros":{countryCodes:["ae","gb","gg","je"],tags:{brand:"Moss Bros","brand:wikidata":"Q6916538","brand:wikipedia":"en:Moss Bros Group",clothes:"men",name:"Moss Bros",shop:"clothes"}},"shop/clothes|Motherhood Maternity":{countryCodes:["ca","us"],tags:{brand:"Motherhood Maternity","brand:wikidata":"Q79051139",clothes:"maternity",name:"Motherhood Maternity",shop:"clothes"}},"shop/clothes|Motivi":{tags:{brand:"Motivi",name:"Motivi",shop:"clothes"}},"shop/clothes|Mr Price":{tags:{brand:"Mr Price","brand:wikidata":"Q6929120","brand:wikipedia":"en:Mr. Price",name:"Mr Price",shop:"clothes"}},"shop/clothes|Mustang":{tags:{brand:"Mustang","brand:wikidata":"Q221562","brand:wikipedia":"de:Mustang (Jeans)",name:"Mustang",shop:"clothes"}},"shop/clothes|NKD":{countryCodes:["at","de","it","si"],tags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"}},"shop/clothes|Naf Naf":{countryCodes:["ch","fr"],tags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"}},"shop/clothes|Napapijri":{tags:{brand:"Napapijri","brand:wikidata":"Q2782017","brand:wikipedia":"en:Napapijri",name:"Napapijri",shop:"clothes"}},"shop/clothes|Nautica":{tags:{brand:"Nautica","brand:wikidata":"Q6981479","brand:wikipedia":"en:Nautica (clothing company)",name:"Nautica",shop:"clothes"}},"shop/clothes|New Look":{countryCodes:["be","de","fr","gb","ie","pl"],tags:{brand:"New Look","brand:wikidata":"Q12063852","brand:wikipedia":"en:New Look (company)",name:"New Look",shop:"clothes"}},"shop/clothes|New York & Company":{countryCodes:["us"],tags:{brand:"New York & Company","brand:wikidata":"Q7012977","brand:wikipedia":"en:New York & Company",name:"New York & Company",shop:"clothes"}},"shop/clothes|New Yorker":{tags:{brand:"New Yorker","brand:wikidata":"Q706421","brand:wikipedia":"en:New Yorker (clothing)",name:"New Yorker",shop:"clothes"}},"shop/clothes|Next":{tags:{brand:"Next","brand:wikidata":"Q246655","brand:wikipedia":"en:Next plc",name:"Next",shop:"clothes"}},"shop/clothes|Nike":{tags:{brand:"Nike","brand:wikidata":"Q483915","brand:wikipedia":"en:Nike, Inc.",name:"Nike",shop:"clothes"}},"shop/clothes|Nordstrom Rack":{countryCodes:["ca","us"],tags:{brand:"Nordstrom Rack","brand:wikidata":"Q21463374","brand:wikipedia":"en:Nordstrom Rack",name:"Nordstrom Rack",shop:"clothes"}},"shop/clothes|Northern Reflections":{countryCodes:["ca"],tags:{brand:"Northern Reflections","brand:wikidata":"Q65947797",name:"Northern Reflections",shop:"clothes"}},"shop/clothes|OVS":{countryCodes:["at","ch","fr","it","si"],tags:{brand:"OVS","brand:wikidata":"Q2042514","brand:wikipedia":"en:OVS (company)",name:"OVS",shop:"clothes"}},"shop/clothes|Oasis":{countryCodes:["es","gb","ie"],tags:{brand:"Oasis","brand:wikidata":"Q64532852",name:"Oasis",shop:"clothes"}},"shop/clothes|Okaïdi":{countryCodes:["be","ch","es","fr","it","pl"],tags:{brand:"Okaïdi","brand:wikidata":"Q3350027","brand:wikipedia":"fr:Okaïdi",name:"Okaïdi",shop:"clothes"}},"shop/clothes|Old Navy":{tags:{brand:"Old Navy","brand:wikidata":"Q2735242","brand:wikipedia":"en:Old Navy",name:"Old Navy",shop:"clothes"}},"shop/clothes|Only":{tags:{brand:"Only","brand:wikidata":"Q61799370",name:"Only",shop:"clothes"}},"shop/clothes|Orchestra":{tags:{brand:"Orchestra","brand:wikidata":"Q28042940","brand:wikipedia":"fr:Orchestra Prémaman",name:"Orchestra",shop:"clothes"}},"shop/clothes|Original Marines":{countryCodes:["it"],tags:{brand:"Original Marines",name:"Original Marines",shop:"clothes"}},"shop/clothes|Orsay":{tags:{brand:"Orsay","brand:wikidata":"Q883245","brand:wikipedia":"de:Orsay (Modeunternehmen)",name:"Orsay",shop:"clothes"}},"shop/clothes|Outfit":{countryCodes:["de","gb"],tags:{brand:"Outfit","brand:wikidata":"Q7112061","brand:wikipedia":"en:Outfit (retailer)",name:"Outfit",shop:"clothes"}},"shop/clothes|Oysho":{tags:{brand:"Oysho","brand:wikidata":"Q3327046","brand:wikipedia":"en:Oysho",name:"Oysho",shop:"clothes"}},"shop/clothes|PacSun":{countryCodes:["us"],tags:{brand:"PacSun","brand:wikidata":"Q7121857","brand:wikipedia":"en:PacSun",name:"PacSun",shop:"clothes"}},"shop/clothes|Palmers":{countryCodes:["at","de"],tags:{brand:"Palmers","brand:wikidata":"Q1509985","brand:wikipedia":"de:Palmers",name:"Palmers",shop:"clothes"}},"shop/clothes|Peacocks":{countryCodes:["cy","gb"],tags:{brand:"Peacocks","brand:wikidata":"Q7157762","brand:wikipedia":"en:Peacocks (clothing)",name:"Peacocks",shop:"clothes"}},"shop/clothes|Peek & Cloppenburg":{countryCodes:["at","be","de","nl","pl"],tags:{brand:"Peek & Cloppenburg","brand:wikidata":"Q2066959","brand:wikipedia":"en:Peek & Cloppenburg",name:"Peek & Cloppenburg",shop:"clothes"}},"shop/clothes|Penningtons":{countryCodes:["ca"],tags:{brand:"Penningtons","brand:wikidata":"Q16956527","brand:wikipedia":"en:Penningtons",clothes:"women",name:"Penningtons",shop:"clothes"}},"shop/clothes|Pep":{tags:{brand:"Pep","brand:wikidata":"Q7166182","brand:wikipedia":"en:Pep (store)",name:"Pep",shop:"clothes"}},"shop/clothes|Pep&Co":{countryCodes:["gb","ie"],nomatch:["shop/clothes|Pepco"],tags:{brand:"Pep&Co","brand:wikidata":"Q24908166","brand:wikipedia":"en:Pep&Co",name:"Pep&Co",shop:"clothes"}},"shop/clothes|Pepco":{countryCodes:["cz","hu","pl","ro","sk"],matchTags:["shop/variety_store"],nomatch:["shop/clothes|Pep&Co"],tags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"}},"shop/clothes|Pepe Jeans":{tags:{brand:"Pepe Jeans","brand:wikidata":"Q426992","brand:wikipedia":"en:Pepe Jeans",name:"Pepe Jeans",shop:"clothes"}},"shop/clothes|Petit Bateau":{countryCodes:["be","de","fr","gb","it","lu"],tags:{brand:"Petit Bateau","brand:wikidata":"Q3377090","brand:wikipedia":"en:Petit Bateau",name:"Petit Bateau",shop:"clothes"}},"shop/clothes|Phase Eight":{countryCodes:["ch","de","gb"],tags:{brand:"Phase Eight","brand:wikidata":"Q17020730","brand:wikipedia":"en:Phase Eight",name:"Phase Eight",shop:"clothes"}},"shop/clothes|Piazza Italia":{countryCodes:["it"],tags:{brand:"Piazza Italia","brand:wikidata":"Q3902241","brand:wikipedia":"it:Piazza Italia (azienda)",name:"Piazza Italia",shop:"clothes"}},"shop/clothes|Pierre Cardin":{tags:{brand:"Pierre Cardin","brand:wikidata":"Q22921009",name:"Pierre Cardin",shop:"clothes"}},"shop/clothes|Pimkie":{countryCodes:["at","be","de","es","fr","it"],tags:{brand:"Pimkie","brand:wikidata":"Q1758066","brand:wikipedia":"en:Pimkie",name:"Pimkie",shop:"clothes"}},"shop/clothes|Pink":{tags:{brand:"Pink","brand:wikidata":"Q20716793","brand:wikipedia":"en:Pink (Victoria's Secret)",clothes:"underwear;women",name:"Pink",shop:"clothes"}},"shop/clothes|Plato's Closet":{countryCodes:["ca","us"],tags:{brand:"Plato's Closet","brand:wikidata":"Q61779112",name:"Plato's Closet",second_hand:"only",shop:"clothes"}},"shop/clothes|Polo Ralph Lauren":{tags:{brand:"Polo Ralph Lauren","brand:wikidata":"Q1641437","brand:wikipedia":"en:Ralph Lauren Corporation",name:"Polo Ralph Lauren",shop:"clothes"}},"shop/clothes|Prada":{tags:{brand:"Prada","brand:wikidata":"Q193136","brand:wikipedia":"en:Prada",name:"Prada",shop:"clothes"}},"shop/clothes|Primark":{tags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"}},"shop/clothes|Promod":{tags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"}},"shop/clothes|Pull & Bear":{tags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"}},"shop/clothes|Puma":{nomatch:["amenity/fuel|Puma"],tags:{brand:"Puma","brand:wikidata":"Q157064","brand:wikipedia":"en:Puma (brand)",name:"Puma",shop:"clothes"}},"shop/clothes|Quiksilver":{matchNames:["quicksilver"],tags:{brand:"Quiksilver","brand:wikidata":"Q1329463","brand:wikipedia":"en:Quiksilver",name:"Quiksilver",shop:"clothes"}},"shop/clothes|Quiz":{tags:{brand:"Quiz","brand:wikidata":"Q29995941","brand:wikipedia":"en:Quiz (clothing)",clothes:"women",name:"Quiz",shop:"clothes"}},"shop/clothes|RW&CO.":{countryCodes:["ca"],tags:{brand:"RW&CO.","brand:wikidata":"Q65965663",clothes:"women;men",name:"RW&CO.",shop:"clothes"}},"shop/clothes|Rainbow":{countryCodes:["de","us"],tags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"}},"shop/clothes|Reebok":{tags:{brand:"Reebok","brand:wikidata":"Q466183","brand:wikipedia":"en:Reebok",name:"Reebok",shop:"clothes"}},"shop/clothes|Reiss":{tags:{brand:"Reiss","brand:wikidata":"Q7310479","brand:wikipedia":"en:Reiss (brand)",name:"Reiss",shop:"clothes"}},"shop/clothes|Reitmans":{countryCodes:["ca"],tags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"}},"shop/clothes|Reserved":{tags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved",name:"Reserved",shop:"clothes"}},"shop/clothes|Ricki's":{tags:{brand:"Ricki's","brand:wikidata":"Q65947929",clothes:"women",name:"Ricki's",shop:"clothes"}},"shop/clothes|River Island":{countryCodes:["gb","ie","im","nl","pl"],tags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"}},"shop/clothes|Robert Graham":{countryCodes:["us"],tags:{brand:"Robert Graham","brand:wikidata":"Q18390679","brand:wikipedia":"en:Robert Graham (fashion brand)",clothes:"men",name:"Robert Graham",shop:"clothes"}},"shop/clothes|Roots":{tags:{brand:"Roots","brand:wikidata":"Q7366633","brand:wikipedia":"en:Roots Canada",name:"Roots",shop:"clothes"}},"shop/clothes|Saint Laurent":{tags:{alt_name:"Yves Saint Laurent",brand:"Saint Laurent","brand:wikidata":"Q2282172","brand:wikipedia":"en:Yves Saint Laurent (brand)",name:"Saint Laurent",shop:"clothes",short_name:"YSL"}},"shop/clothes|Saltrock":{countryCodes:["gb"],tags:{brand:"Saltrock","brand:wikidata":"Q7406195","brand:wikipedia":"en:Saltrock",name:"Saltrock",shop:"clothes"}},"shop/clothes|Sandro":{tags:{brand:"Sandro",name:"Sandro",shop:"clothes"}},"shop/clothes|Scotch & Soda":{tags:{brand:"Scotch & Soda","brand:wikidata":"Q17141914","brand:wikipedia":"en:Scotch and Soda (clothing)",name:"Scotch & Soda",shop:"clothes"}},"shop/clothes|Sela":{countryCodes:["kg","ru"],tags:{brand:"Sela","brand:wikidata":"Q62075111",name:"Sela",shop:"clothes"}},"shop/clothes|Select":{countryCodes:["gb"],nomatch:["shop/convenience|Select"],tags:{brand:"Select",name:"Select",shop:"clothes"}},"shop/clothes|Sergent Major":{countryCodes:["be","de","es","fr","gb","it"],tags:{brand:"Sergent Major","brand:wikidata":"Q62521738","brand:wikipedia":"fr:Sergent Major (entreprise)",clothes:"babies;children",name:"Sergent Major",shop:"clothes"}},"shop/clothes|Shoeby":{countryCodes:["nl"],tags:{brand:"Shoeby",name:"Shoeby",shop:"clothes"}},"shop/clothes|Sinsay":{countryCodes:["pl"],tags:{brand:"Sinsay",name:"Sinsay",shop:"clothes"}},"shop/clothes|Sisley":{countryCodes:["at","ch","de","hr","it","ru"],tags:{brand:"Sisley","brand:wikidata":"Q12054325","brand:wikipedia":"cs:Sisley",name:"Sisley",shop:"clothes"}},"shop/clothes|Slaters":{countryCodes:["gb"],tags:{brand:"Slaters","brand:wikidata":"Q7538912","brand:wikipedia":"en:Slater Menswear",clothes:"suits",name:"Slaters",shop:"clothes"}},"shop/clothes|Soma":{countryCodes:["us"],tags:{alt_name:"Soma Intimates",brand:"Soma","brand:wikidata":"Q69882213",clothes:"underwear;women",name:"Soma",shop:"clothes"}},"shop/clothes|Spanx":{countryCodes:["us"],tags:{brand:"Spanx","brand:wikidata":"Q1932886","brand:wikipedia":"en:Spanx",clothes:"underwear",name:"Spanx",shop:"clothes"}},"shop/clothes|Springfield":{tags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"}},"shop/clothes|Stefanel":{countryCodes:["at","de","fr","it"],tags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"}},"shop/clothes|Steps":{countryCodes:["nl"],tags:{brand:"Steps",name:"Steps",shop:"clothes"}},"shop/clothes|Stitches":{countryCodes:["ca"],tags:{brand:"Stitches","brand:wikidata":"Q7617652","brand:wikipedia":"en:Stitches (store)",name:"Stitches",shop:"clothes"}},"shop/clothes|Stradivarius":{tags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"}},"shop/clothes|Street One":{countryCodes:["at","be","ch","de","dk","nl"],tags:{brand:"Street One","brand:wikidata":"Q61997265",name:"Street One",shop:"clothes"}},"shop/clothes|Suburbia":{countryCodes:["mx"],tags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"}},"shop/clothes|Superdry":{tags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"}},"shop/clothes|Suzy Shier":{countryCodes:["ca"],tags:{brand:"Suzy Shier","brand:wikidata":"Q65464976",clothes:"women",name:"Suzy Shier",shop:"clothes"}},"shop/clothes|T.M.Lewin":{tags:{brand:"T.M.Lewin","brand:wikidata":"Q16933755","brand:wikipedia":"en:T. M. Lewin",name:"T.M.Lewin",shop:"clothes"}},"shop/clothes|Takko":{countryCodes:["at","cz","de","hu","nl"],matchNames:["takko fashion"],tags:{brand:"Takko","brand:wikidata":"Q1371302","brand:wikipedia":"de:Takko",name:"Takko",shop:"clothes"}},"shop/clothes|Talbots":{countryCodes:["ca","us"],tags:{brand:"Talbots","brand:wikidata":"Q7679064","brand:wikipedia":"en:Talbots",name:"Talbots",shop:"clothes"}},"shop/clothes|Tally Weijl":{tags:{brand:"Tally Weijl","brand:wikidata":"Q689695","brand:wikipedia":"en:Tally Weijl",name:"Tally Weijl",shop:"clothes"}},"shop/clothes|Tati":{countryCodes:["dz","fr"],tags:{brand:"Tati","brand:wikidata":"Q3516026","brand:wikipedia":"fr:Tati (entreprise)",name:"Tati",shop:"clothes"}},"shop/clothes|Ted Baker":{tags:{brand:"Ted Baker","brand:wikidata":"Q2913458","brand:wikipedia":"en:Ted Baker",name:"Ted Baker",shop:"clothes"}},"shop/clothes|Terranova":{tags:{brand:"Terranova",name:"Terranova",shop:"clothes"}},"shop/clothes|Tezenis":{tags:{brand:"Tezenis","brand:wikidata":"Q28056374",name:"Tezenis",shop:"clothes"}},"shop/clothes|The Children's Place":{countryCodes:["ca","us"],tags:{alt_name:"Children's Place",brand:"The Children's Place","brand:wikidata":"Q3520257","brand:wikipedia":"en:The Children's Place",name:"The Children's Place",shop:"clothes"}},"shop/clothes|The Kooples":{tags:{brand:"The Kooples","brand:wikidata":"Q3521493","brand:wikipedia":"fr:The Kooples",name:"The Kooples",shop:"clothes"}},"shop/clothes|The North Face":{tags:{alt_name:"North Face",brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"}},"shop/clothes|The Sting":{countryCodes:["be","de","gb","nl"],tags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"}},"shop/clothes|The Walking Company":{tags:{alt_name:"Walking Company",brand:"The Walking Company","brand:wikidata":"Q30716262","brand:wikipedia":"en:The Walking Company",name:"The Walking Company",shop:"clothes"}},"shop/clothes|Thyme Maternity":{countryCodes:["ca"],tags:{brand:"Thyme Maternity","brand:wikidata":"Q17033572","brand:wikipedia":"en:Thyme Maternity",clothes:"maternity",name:"Thyme Maternity",shop:"clothes"}},"shop/clothes|Tillys":{countryCodes:["us"],tags:{brand:"Tillys","brand:wikidata":"Q7802889","brand:wikipedia":"en:Tillys",clothes:"children;men;women",name:"Tillys",shop:"clothes"}},"shop/clothes|Timberland":{tags:{brand:"Timberland","brand:wikidata":"Q1539185","brand:wikipedia":"en:The Timberland Company",name:"Timberland",shop:"clothes"}},"shop/clothes|Tip Top Tailors":{countryCodes:["ca"],tags:{brand:"Tip Top Tailors","brand:wikidata":"Q7808781","brand:wikipedia":"en:Tip Top Tailors",clothes:"men",name:"Tip Top Tailors",shop:"clothes"}},"shop/clothes|Tom Tailor":{tags:{brand:"Tom Tailor","brand:wikidata":"Q571206","brand:wikipedia":"en:Tom Tailor",name:"Tom Tailor",shop:"clothes"}},"shop/clothes|Tommy Bahama":{countryCodes:["ca","us"],tags:{brand:"Tommy Bahama","brand:wikidata":"Q3531299","brand:wikipedia":"en:Tommy Bahama",name:"Tommy Bahama",shop:"clothes"}},"shop/clothes|Tommy Hilfiger":{tags:{brand:"Tommy Hilfiger","brand:wikidata":"Q634881","brand:wikipedia":"en:Tommy Hilfiger (company)",name:"Tommy Hilfiger",shop:"clothes"}},"shop/clothes|Top Secret":{countryCodes:["fr","pl","ru"],tags:{brand:"Top Secret",name:"Top Secret",shop:"clothes"}},"shop/clothes|Topman":{tags:{brand:"Topman","brand:wikidata":"Q1090880","brand:wikipedia":"en:Topman",clothes:"men",name:"Topman",shop:"clothes"}},"shop/clothes|Topshop":{nomatch:["amenity/fuel|Top"],tags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",clothes:"women",name:"Topshop",shop:"clothes"}},"shop/clothes|Torrid":{countryCodes:["us"],tags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"}},"shop/clothes|Tory Burch":{countryCodes:["us"],tags:{brand:"Tory Burch","brand:wikidata":"Q19988222","brand:wikipedia":"en:Tory Burch (company)",name:"Tory Burch",shop:"clothes"}},"shop/clothes|Triumph":{tags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"}},"shop/clothes|Truworths":{countryCodes:["za"],tags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"}},"shop/clothes|UNTUCKit":{countryCodes:["ca","us"],tags:{brand:"UNTUCKit","brand:wikidata":"Q28207006","brand:wikipedia":"en:Untuckit",name:"UNTUCKit",shop:"clothes"}},"shop/clothes|USC":{countryCodes:["gb","ie"],tags:{brand:"USC","brand:wikidata":"Q7866331","brand:wikipedia":"en:USC (clothing retailer)",name:"USC",shop:"clothes"}},"shop/clothes|Ulla Popken":{countryCodes:["at","be","ch","de","fr","nl"],tags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"}},"shop/clothes|Under Armour":{matchNames:["under armor"],tags:{brand:"Under Armour","brand:wikidata":"Q2031485","brand:wikipedia":"en:Under Armour",clothes:"men;women",name:"Under Armour",shop:"clothes"}},"shop/clothes|Undiz":{tags:{brand:"Undiz",name:"Undiz",shop:"clothes"}},"shop/clothes|Uniqlo":{tags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"}},"shop/clothes|United Colors of Benetton":{tags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes",short_name:"Benetton"}},"shop/clothes|Urban Outfitters":{tags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"}},"shop/clothes|Urban Planet":{tags:{brand:"Urban Planet",name:"Urban Planet",shop:"clothes"}},"shop/clothes|V.I.M.":{countryCodes:["us"],tags:{brand:"V.I.M.","brand:wikidata":"Q71042495",clothes:"children;men;women",name:"V.I.M.",shop:"clothes"}},"shop/clothes|Van Heusen":{tags:{brand:"Van Heusen","brand:wikidata":"Q7913397","brand:wikipedia":"en:Van Heusen",clothes:"men",name:"Van Heusen",shop:"clothes"}},"shop/clothes|Vero Moda":{tags:{brand:"Vero Moda","brand:wikidata":"Q594721","brand:wikipedia":"en:Bestseller (company)",name:"Vero Moda",shop:"clothes"}},"shop/clothes|Victoria's Secret":{tags:{brand:"Victoria's Secret","brand:wikidata":"Q332477","brand:wikipedia":"en:Victoria's Secret",clothes:"underwear;women",name:"Victoria's Secret",shop:"clothes"}},"shop/clothes|Vilebrequin":{countryCodes:["fr","it"],tags:{brand:"Vilebrequin","brand:wikidata":"Q3558391","brand:wikipedia":"en:Vilebrequin",clothes:"swimwear",name:"Vilebrequin",shop:"clothes"}},"shop/clothes|Vineyard Vines":{countryCodes:["us"],tags:{brand:"Vineyard Vines","brand:wikidata":"Q7932495","brand:wikipedia":"en:Vineyard Vines",name:"Vineyard Vines",shop:"clothes"}},"shop/clothes|Volcom":{tags:{brand:"Volcom","brand:wikidata":"Q2021416","brand:wikipedia":"en:Volcom",name:"Volcom",shop:"clothes"}},"shop/clothes|WE":{countryCodes:["be","ch","de","nl"],tags:{brand:"WE","brand:wikidata":"Q1987861","brand:wikipedia":"en:WE (clothing)",name:"WE",shop:"clothes"}},"shop/clothes|Wacoal":{tags:{brand:"Wacoal","brand:wikidata":"Q909522","brand:wikipedia":"en:Wacoal",clothes:"underwear",name:"Wacoal",shop:"clothes"}},"shop/clothes|Wallis":{countryCodes:["gb","ie"],tags:{brand:"Wallis","brand:wikidata":"Q7963123","brand:wikipedia":"en:Wallis (retailer)",name:"Wallis",shop:"clothes"}},"shop/clothes|Warehouse":{countryCodes:["gb"],tags:{brand:"Warehouse","brand:wikidata":"Q28135370",name:"Warehouse",shop:"clothes"}},"shop/clothes|Wellensteyn":{tags:{brand:"Wellensteyn",name:"Wellensteyn",shop:"clothes"}},"shop/clothes|West 49":{countryCodes:["ca"],tags:{brand:"West 49","brand:wikidata":"Q7984218","brand:wikipedia":"en:West 49",name:"West 49",shop:"clothes"}},"shop/clothes|White House Black Market":{countryCodes:["ca","us"],matchNames:["white house | black market"],tags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"}},"shop/clothes|White Stuff":{countryCodes:["de","dk","gb","gg"],tags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"}},"shop/clothes|Wibra":{countryCodes:["be","nl"],tags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"}},"shop/clothes|Wilsons Leather":{countryCodes:["ca","us"],tags:{brand:"Wilsons Leather","brand:wikidata":"Q8023296","brand:wikipedia":"en:Wilsons Leather",clothes:"men;women",name:"Wilsons Leather",shop:"clothes"}},"shop/clothes|Windsor":{countryCodes:["us"],tags:{brand:"Windsor","brand:wikidata":"Q72981668",clothes:"women",name:"Windsor",shop:"clothes"}},"shop/clothes|Winners":{countryCodes:["ca","es"],tags:{brand:"Winners","brand:wikidata":"Q845257","brand:wikipedia":"en:Winners",name:"Winners",shop:"clothes"}},"shop/clothes|Wolford":{countryCodes:["at","de","fr","gb","it","nl"],tags:{brand:"Wolford","brand:wikidata":"Q431607","brand:wikipedia":"en:Wolford",name:"Wolford",shop:"clothes"}},"shop/clothes|Women'secret":{matchNames:["women's secret"],tags:{brand:"Women'secret","brand:wikidata":"Q16648226","brand:wikipedia":"es:Women'secret",clothes:"underwear;women",name:"Women'secret",shop:"clothes"}},"shop/clothes|Woolworths":{countryCodes:["za"],nomatch:["shop/supermarket|Woolworths"],tags:{brand:"Woolworths","brand:wikidata":"Q8033997","brand:wikipedia":"en:Woolworths Holdings Limited",name:"Woolworths",shop:"clothes"}},"shop/clothes|XIOS":{countryCodes:["us"],tags:{brand:"XIOS","brand:wikidata":"Q66149584",clothes:"men",name:"XIOS",shop:"clothes"}},"shop/clothes|XXI Forever":{countryCodes:["us"],tags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"XXI Forever",shop:"clothes"}},"shop/clothes|Yamamay":{countryCodes:["es","it"],tags:{brand:"Yamamay","brand:wikidata":"Q2599214","brand:wikipedia":"it:Yamamay",name:"Yamamay",shop:"clothes"}},"shop/clothes|Z":{nomatch:["amenity/fuel|Z"],tags:{brand:"Z",clothes:"babies;children",name:"Z",shop:"clothes"}},"shop/clothes|Zara":{tags:{brand:"Zara","brand:wikidata":"Q147662","brand:wikipedia":"en:Zara (retailer)",name:"Zara",shop:"clothes"}},"shop/clothes|Zeeman":{countryCodes:["be","de","fr","lu","nl"],tags:{brand:"Zeeman","brand:wikidata":"Q184399","brand:wikipedia":"en:Zeeman (store)",name:"Zeeman",shop:"clothes"}},"shop/clothes|Zolla":{tags:{brand:"Zolla",name:"Zolla",shop:"clothes"}},"shop/clothes|Zumiez":{countryCodes:["ca","us"],tags:{brand:"Zumiez","brand:wikidata":"Q8075252","brand:wikipedia":"en:Zumiez",name:"Zumiez",shop:"clothes"}},"shop/clothes|mister*lady":{countryCodes:["at","de"],tags:{brand:"mister*lady","brand:wikidata":"Q18640136","brand:wikipedia":"de:Mister*lady",name:"mister*lady",shop:"clothes"}},"shop/clothes|rue21":{countryCodes:["us"],tags:{brand:"rue21","brand:wikidata":"Q7377762","brand:wikipedia":"en:Rue21",name:"rue21",shop:"clothes"}},"shop/clothes|s.Oliver":{countryCodes:["at","be","de","fr","hr"],tags:{brand:"s.Oliver","brand:wikidata":"Q265056","brand:wikipedia":"en:S.Oliver",name:"s.Oliver",shop:"clothes"}},"shop/clothes|Липненски":{countryCodes:["bg"],tags:{brand:"Липненски",name:"Липненски",shop:"clothes"}},"shop/clothes|Московская ярмарка":{countryCodes:["ru"],tags:{brand:"Московская ярмарка",name:"Московская ярмарка",shop:"clothes"}},"shop/clothes|Смешные цены":{countryCodes:["kz","ru"],tags:{brand:"Смешные цены",name:"Смешные цены",shop:"clothes"}},"shop/clothes|しまむら":{countryCodes:["jp"],tags:{brand:"しまむら","brand:en":"Shimamura","brand:ja":"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",name:"しまむら","name:en":"Shimamura","name:ja":"しまむら",shop:"clothes"}},"shop/clothes|はるやま":{countryCodes:["jp"],tags:{brand:"はるやま","brand:en":"Haruyama","brand:ja":"はるやま","brand:wikidata":"Q11275918","brand:wikipedia":"ja:はるやま商事",name:"はるやま","name:en":"Haruyama","name:ja":"はるやま",shop:"clothes"}},"shop/clothes|コナカ":{countryCodes:["jp"],tags:{brand:"コナカ","brand:en":"Konaka","brand:ja":"コナカ","brand:wikidata":"Q11302278","brand:wikipedia":"jp:コナカ",name:"コナカ","name:en":"Konaka","name:ja":"コナカ",shop:"clothes"}},"shop/clothes|ユニクロ":{countryCodes:["jp"],tags:{brand:"ユニクロ","brand:en":"UNIQLO","brand:ja":"ユニクロ","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"ユニクロ","name:en":"UNIQLO","name:ja":"ユニクロ",shop:"clothes"}},"shop/clothes|ライトオン":{countryCodes:["jp"],tags:{brand:"ライトオン","brand:en":"Right-on","brand:ja":"ライトオン","brand:wikidata":"Q11346416","brand:wikipedia":"ja:ライトオン",name:"ライトオン","name:en":"Right-on","name:ja":"ライトオン",shop:"clothes"}},"shop/clothes|ワークマン":{countryCodes:["jp"],tags:{brand:"ワークマン","brand:en":"Workman","brand:ja":"ワークマン","brand:wikidata":"Q11351660","brand:wikipedia":"ja:ワークマン",name:"ワークマン","name:en":"Workman","name:ja":"ワークマン",shop:"clothes"}},"shop/clothes|洋服の青山":{countryCodes:["jp"],tags:{brand:"洋服の青山","brand:en":"Aoyama Tailor","brand:ja":"洋服の青山","brand:wikidata":"Q11661241","brand:wikipedia":"ja:青山商事",name:"洋服の青山","name:en":"Aoyama Tailor","name:ja":"洋服の青山",shop:"clothes"}},"shop/coffee|Nespresso":{tags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"}},"shop/coffee|Tchibo":{countryCodes:["at","ch","cz","de","pl","sk"],matchTags:["shop/convenience"],tags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"}},"shop/computer|DNS":{countryCodes:["ru","ua"],tags:{alt_name:"ДНС",brand:"DNS","brand:en":"DNS","brand:ru":"ДНС","brand:wikidata":"Q4036922","brand:wikipedia":"ru:DNS (компания)",name:"DNS","name:en":"DNS","name:ru":"ДНС",shop:"computer"}},"shop/computer|PCデポ":{countryCodes:["jp"],matchNames:["pc depot","ピーシーデポ"],tags:{brand:"PCデポ","brand:en":"PC Depot","brand:ja":"PCデポ","brand:wikidata":"Q11331723","brand:wikipedia":"ja:ピーシーデポコーポレーション",name:"PCデポ","name:en":"PC Depot","name:ja":"PCデポ",shop:"computer"}},"shop/computer|じゃんぱら":{countryCodes:["jp"],tags:{brand:"じゃんぱら","brand:en":"Janpara","brand:ja":"じゃんぱら","brand:wikidata":"Q11306198","brand:wikipedia":"ja:じゃんぱら",name:"じゃんぱら","name:en":"Janpara","name:ja":"じゃんぱら",shop:"computer"}},"shop/confectionery|Adyar Ananda Bhavan":{countryCodes:["in"],matchTags:["amenity/restaurant"],tags:{brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan",shop:"confectionery"}},"shop/confectionery|Hemmakvall":{countryCodes:["se"],tags:{brand:"Hemmakväll","brand:wikidata":"Q10521791","brand:wikipedia":"sv:Hemmakväll",name:"Hemmakväll",shop:"confectionery"}},"shop/confectionery|Hotel Chocolat":{countryCodes:["gb"],tags:{brand:"Hotel Chocolat","brand:wikidata":"Q5911369","brand:wikipedia":"en:Hotel Chocolat",name:"Hotel Chocolat",shop:"confectionery"}},"shop/confectionery|Hussel":{countryCodes:["at","de"],tags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"}},"shop/confectionery|Jamin":{countryCodes:["nl"],tags:{brand:"Jamin","brand:wikidata":"Q2291848","brand:wikipedia":"nl:Jamin",name:"Jamin",shop:"confectionery"}},"shop/confectionery|Kilwins":{countryCodes:["us"],matchTags:["amenity/ice_cream"],tags:{brand:"Kilwins","brand:wikidata":"Q38250832","brand:wikipedia":"en:Kilwins",cuisine:"chocolate;ice_cream;popcorn",name:"Kilwins",shop:"confectionery"}},"shop/confectionery|Rocky Mountain Chocolate Factory":{countryCodes:["ca","us"],tags:{brand:"Rocky Mountain Chocolate Factory","brand:wikidata":"Q7355878","brand:wikipedia":"en:Rocky Mountain Chocolate Factory",name:"Rocky Mountain Chocolate Factory",shop:"confectionery"}},"shop/confectionery|See's Candies":{countryCodes:["us"],matchNames:["sees candy"],tags:{brand:"See's Candies","brand:wikidata":"Q2103510","brand:wikipedia":"en:See's Candies",name:"See's Candies",shop:"confectionery"}},"shop/confectionery|T. SN":{countryCodes:["ec"],tags:{brand:"T. SN",name:"T. SN",shop:"confectionery"}},"shop/confectionery|Thorntons":{countryCodes:["gb"],tags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"}},"shop/confectionery|Вацак":{countryCodes:["ua"],tags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"}},"shop/confectionery|Лакомка":{tags:{brand:"Лакомка",name:"Лакомка",shop:"confectionery"}},"shop/confectionery|シャトレーゼ":{countryCodes:["jp"],tags:{brand:"シャトレーゼ","brand:en":"Chateraise","brand:ja":"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ","name:en":"Chateraise","name:ja":"シャトレーゼ",shop:"confectionery"}},"shop/confectionery|不二家":{countryCodes:["jp"],tags:{brand:"不二家","brand:en":"Fujiya","brand:ja":"不二家","brand:wikidata":"Q858452","brand:wikipedia":"ja:不二家",name:"不二家","name:en":"Fujiya","name:ja":"不二家",shop:"confectionery"}},"shop/convenience|10-11":{countryCodes:["is"],tags:{brand:"10-11","brand:wikidata":"Q65336720","brand:wikipedia":"is:10-11",name:"10-11",shop:"convenience"}},"shop/convenience|1st Stop":{countryCodes:["us"],matchNames:["first stop"],tags:{brand:"1st Stop","brand:wikidata":"Q65706152",name:"1st Stop",shop:"convenience"}},"shop/convenience|3COINS":{countryCodes:["jp"],matchNames:["スリーコインズ"],tags:{alt_name:"スリーコインズ",brand:"3COINS","brand:wikidata":"Q60997353","brand:wikipedia":"ja:3COINS",name:"3COINS",shop:"convenience"}},"shop/convenience|7-Eleven":{matchNames:["7-11","seven eleven"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|7-Eleven"],tags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"}},"shop/convenience|759 Store":{countryCodes:["hk"],tags:{brand:"759 Store","brand:wikidata":"Q10846179","brand:wikipedia":"en:759 Store",name:"759 Store",shop:"convenience"}},"shop/convenience|76":{nomatch:["amenity/fuel|76"],tags:{brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76",shop:"convenience"}},"shop/convenience|8 à Huit":{countryCodes:["fr"],nomatch:["amenity/fuel|8 à Huit","shop/supermarket|8 à Huit"],tags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"convenience"}},"shop/convenience|99 Speedmart":{countryCodes:["br","my","us"],tags:{brand:"99 Speedmart","brand:wikidata":"Q62075061",name:"99 Speedmart",shop:"convenience"}},"shop/convenience|ABC~(Hawaii)":{countryCodes:["us"],matchNames:["abc stores"],nomatch:["amenity/fuel|ABC"],tags:{brand:"ABC","brand:wikidata":"Q4650251","brand:wikipedia":"en:ABC Stores (Hawaii)",name:"ABC",shop:"convenience"}},"shop/convenience|Aibė":{countryCodes:["lt"],tags:{brand:"Aibė","brand:wikidata":"Q1022952","brand:wikipedia":"de:Aibė",name:"Aibė",shop:"convenience"}},"shop/convenience|Albert Heijn to go":{countryCodes:["nl"],tags:{brand:"Albert Heijn to go","brand:wikidata":"Q77971185","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",official_name:"AH to go",shop:"convenience"}},"shop/convenience|Alepa":{countryCodes:["fi"],tags:{brand:"Alepa","brand:wikidata":"Q4716167","brand:wikipedia":"fi:Alepa",name:"Alepa",shop:"convenience"}},"shop/convenience|Alfamidi":{countryCodes:["id"],tags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"}},"shop/convenience|Allsup's":{countryCodes:["us"],tags:{brand:"Allsup's","brand:wikidata":"Q4733292","brand:wikipedia":"en:Allsup's",name:"Allsup's",shop:"convenience"}},"shop/convenience|AmeriStop":{countryCodes:["us"],tags:{brand:"AmeriStop","brand:wikidata":"Q66048258",name:"AmeriStop",shop:"convenience"}},"shop/convenience|Amoco":{countryCodes:["us"],nomatch:["amenity/fuel|Amoco"],tags:{brand:"Amoco","brand:wikidata":"Q465952","brand:wikipedia":"en:Amoco",name:"Amoco",shop:"convenience"}},"shop/convenience|Aral":{countryCodes:["de"],matchNames:["aral tankstelle"],matchTags:["shop/kiosk"],nomatch:["amenity/fuel|Aral"],tags:{brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral",shop:"convenience"}},"shop/convenience|BP Shop":{countryCodes:["au","ch","fr","gb","us"],nomatch:["amenity/fuel|BP"],tags:{brand:"BP Shop","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP Shop",shop:"convenience"}},"shop/convenience|Best-one":{countryCodes:["gb"],tags:{brand:"Best-one","brand:wikidata":"Q4896532","brand:wikipedia":"en:Best-one",name:"Best-one",shop:"convenience"}},"shop/convenience|Bonjour":{tags:{brand:"Bonjour",name:"Bonjour",shop:"convenience"}},"shop/convenience|Buc-ee's":{countryCodes:["us"],tags:{brand:"Buc-ee's","brand:wikidata":"Q4982335","brand:wikipedia":"en:Buc-ee's",name:"Buc-ee's",shop:"convenience"}},"shop/convenience|Budgens":{nomatch:["shop/supermarket|Budgens"],tags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"convenience"}},"shop/convenience|CBA":{nomatch:["shop/supermarket|CBA"],tags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"convenience"}},"shop/convenience|COOP Jednota":{countryCodes:["cz","sk"],matchNames:["jednota"],nomatch:["shop/supermarket|COOP Jednota"],tags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"}},"shop/convenience|CU":{countryCodes:["kr"],tags:{brand:"CU","brand:wikidata":"Q12580836","brand:wikipedia":"ko:CU (편의점)",name:"CU",shop:"convenience"}},"shop/convenience|Carrefour Express":{matchTags:["shop/supermarket"],nomatch:["amenity/fuel|Carrefour","shop/supermarket|Carrefour"],tags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",shop:"convenience"}},"shop/convenience|Casey's General Store":{nomatch:["amenity/fuel|Casey's General Store"],tags:{brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store",shop:"convenience"}},"shop/convenience|Casino":{tags:{brand:"Casino",name:"Casino",shop:"convenience"}},"shop/convenience|Casino Shop":{countryCodes:["fr"],tags:{brand:"Casino Shop",name:"Casino Shop",shop:"convenience"}},"shop/convenience|Centra":{countryCodes:["gb","ie"],tags:{brand:"Centra","brand:wikidata":"Q747678","brand:wikipedia":"en:Centra",name:"Centra",shop:"convenience"}},"shop/convenience|Central Convenience Store":{tags:{brand:"Central Convenience Store",name:"Central Convenience Store",shop:"convenience"}},"shop/convenience|Chata Polska":{nomatch:["shop/supermarket|Chata Polska"],tags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"convenience"}},"shop/convenience|Cheers":{countryCodes:["sg","vn"],tags:{brand:"Cheers","brand:wikidata":"Q64154066",name:"Cheers",opening_hours:"24/7",shop:"convenience"}},"shop/convenience|Chevron":{nomatch:["amenity/fuel|Chevron"],tags:{brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron",shop:"convenience"}},"shop/convenience|Circle K":{matchNames:["ok","ok-mart"],nomatch:["amenity/fuel|Circle K"],tags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"}},"shop/convenience|Citgo":{nomatch:["amenity/fuel|Citgo"],tags:{brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo",shop:"convenience"}},"shop/convenience|Clark's Pump-N-Shop":{countryCodes:["us"],tags:{brand:"Clark's Pump-N-Shop","brand:wikidata":"Q65118218",name:"Clark's Pump-N-Shop",shop:"convenience"}},"shop/convenience|Co-op~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"}},"shop/convenience|CocciMarket":{countryCodes:["fr"],tags:{brand:"CocciMarket",name:"CocciMarket",shop:"convenience"}},"shop/convenience|Coles Express":{nomatch:["amenity/fuel|Coles Express","shop/books|Coles","shop/supermarket|Coles"],tags:{brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express",shop:"convenience"}},"shop/convenience|Coop Pronto":{countryCodes:["ch","li"],nomatch:["amenity/cafe|Pronto"],tags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"}},"shop/convenience|Coop~(Schweiz)":{countryCodes:["ch"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"convenience"}},"shop/convenience|Costcutter":{nomatch:["shop/supermarket|Costcutter"],tags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"convenience"}},"shop/convenience|Couche-Tard":{nomatch:["amenity/fuel|Couche-Tard"],tags:{brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard",shop:"convenience"}},"shop/convenience|Cruizers":{countryCodes:["us"],tags:{brand:"Cruizers","brand:wikidata":"Q66134801",name:"Cruizers",shop:"convenience"}},"shop/convenience|Cumberland Farms":{nomatch:["amenity/fuel|Cumberland Farms"],tags:{brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms",shop:"convenience"}},"shop/convenience|Daisy Mart":{countryCodes:["ca"],tags:{brand:"Daisy Mart","brand:wikidata":"Q61994934",name:"Daisy Mart",shop:"convenience"}},"shop/convenience|Dari Mart":{countryCodes:["us"],tags:{brand:"Dari Mart","brand:wikidata":"Q5222675","brand:wikipedia":"en:Dari Mart",name:"Dari Mart",shop:"convenience"}},"shop/convenience|Delikatesy Centrum":{countryCodes:["pl"],nomatch:["shop/supermarket|Delikatesy Centrum"],tags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"convenience"}},"shop/convenience|Express":{nomatch:["shop/clothes|Express"],tags:{brand:"Express",name:"Express",shop:"convenience"}},"shop/convenience|ExtraMile":{countryCodes:["us"],tags:{brand:"ExtraMile","brand:wikidata":"Q64224605",name:"ExtraMile",shop:"convenience"}},"shop/convenience|FamilyMart":{tags:{brand:"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"FamilyMart",shop:"convenience"}},"shop/convenience|Food Mart":{tags:{brand:"Food Mart",name:"Food Mart",shop:"convenience"}},"shop/convenience|Four Square":{countryCodes:["nz"],tags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"convenience"}},"shop/convenience|Franprix":{countryCodes:["fr"],matchTags:["shop/supermarket"],tags:{brand:"Franprix","brand:wikidata":"Q2420096","brand:wikipedia":"fr:Franprix",name:"Franprix",shop:"convenience"}},"shop/convenience|Fresh":{tags:{brand:"Fresh",name:"Fresh",shop:"convenience"}},"shop/convenience|Freshmarket":{countryCodes:["pl"],tags:{brand:"Freshmarket","brand:wikidata":"Q16546326","brand:wikipedia":"pl:Freshmarket",name:"Freshmarket",shop:"convenience"}},"shop/convenience|GS25":{countryCodes:["kr"],matchTags:["shop/supermarket"],tags:{brand:"GS25","brand:wikidata":"Q624041","brand:wikipedia":"ko:GS25",name:"GS25",shop:"convenience"}},"shop/convenience|Groszek":{countryCodes:["pl"],nomatch:["shop/supermarket|Groszek"],tags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"convenience"}},"shop/convenience|Hasty Market":{countryCodes:["ca"],tags:{brand:"Hasty Market","brand:wikidata":"Q58022603",name:"Hasty Market",shop:"convenience"}},"shop/convenience|Holiday":{countryCodes:["us"],nomatch:["amenity/fuel|Holiday"],tags:{brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday",shop:"convenience"}},"shop/convenience|Hruška":{countryCodes:["cz"],nomatch:["shop/supermarket|Hruška"],tags:{brand:"Hruška",name:"Hruška",shop:"convenience"}},"shop/convenience|Huck's Food & Fuel":{countryCodes:["us"],nomatch:["amenity/fuel|Huck's Food & Fuel"],tags:{brand:"Huck's Food & Fuel","brand:wikidata":"Q56276328","brand:wikipedia":"en:Huck's Food & Fuel",name:"Huck's Food & Fuel",shop:"convenience",short_name:"Huck's"}},"shop/convenience|Hudson":{nomatch:["shop/newsagent|Hudson News"],tags:{brand:"Hudson","brand:wikidata":"Q5928682","brand:wikipedia":"en:Hudson Group",name:"Hudson",shop:"convenience"}},"shop/convenience|Hursts":{countryCodes:["gb"],tags:{brand:"Hursts","brand:wikidata":"Q80975681",name:"Hursts",shop:"convenience"}},"shop/convenience|Husky":{countryCodes:["ca"],nomatch:["amenity/fuel|Husky","amenity/restaurant|Husky House"],tags:{brand:"Husky","brand:wikidata":"Q702049","brand:wikipedia":"en:Husky Energy",name:"Husky",shop:"convenience"}},"shop/convenience|Indomaret":{countryCodes:["id"],matchTags:["shop/supermarket"],tags:{brand:"Indomaret","brand:wikidata":"Q4262825","brand:wikipedia":"en:Indomaret",name:"Indomaret",shop:"convenience"}},"shop/convenience|Indomart":{countryCodes:["id"],tags:{brand:"Indomart",name:"Indomart",shop:"convenience"}},"shop/convenience|Intermarché Contact":{countryCodes:["fr"],matchTags:["shop/supermarket"],tags:{brand:"Intermarché Contact","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Contact",shop:"convenience"}},"shop/convenience|Irving":{countryCodes:["ca","us"],nomatch:["amenity/fuel|Irving"],tags:{brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving",shop:"convenience"}},"shop/convenience|Jacksons":{countryCodes:["us"],tags:{brand:"Jacksons","brand:wikidata":"Q64617393",name:"Jacksons",shop:"convenience"}},"shop/convenience|Jiffy":{tags:{brand:"Jiffy",name:"Jiffy",shop:"convenience"}},"shop/convenience|Joker":{countryCodes:["no"],matchTags:["shop/supermarket"],tags:{brand:"Joker","brand:wikidata":"Q716328","brand:wikipedia":"en:Joker (store)",name:"Joker",shop:"convenience"}},"shop/convenience|K-Market":{countryCodes:["fi"],matchTags:["shop/supermarket"],tags:{brand:"K-Market","brand:wikidata":"Q11868562","brand:wikipedia":"fi:K-Market",name:"K-Market",shop:"convenience"}},"shop/convenience|Kangaroo Express":{countryCodes:["us"],nomatch:["amenity/fuel|Kangaroo Express"],tags:{brand:"Kangaroo Express","brand:wikidata":"Q61747408",name:"Kangaroo Express",shop:"convenience",short_name:"Kangaroo"}},"shop/convenience|Konzum~(Balkans)":{countryCodes:["ba","hr","rs"],nomatch:["shop/convenience|Konzum~(Czechia)","shop/supermarket|Konzum~(Balkans)","shop/supermarket|Konzum~(Czechia)"],tags:{brand:"Konzum","brand:wikidata":"Q518563","brand:wikipedia":"hr:Konzum",name:"Konzum",shop:"convenience"}},"shop/convenience|Konzum~(Czechia)":{countryCodes:["cz","sk"],nomatch:["shop/convenience|Konzum~(Balkans)","shop/supermarket|Konzum~(Balkans)","shop/supermarket|Konzum~(Czechia)"],tags:{brand:"Konzum",name:"Konzum",shop:"convenience"}},"shop/convenience|Kum & Go":{nomatch:["amenity/fuel|Kum & Go"],tags:{brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go",shop:"convenience"}},"shop/convenience|Kwik Shop":{countryCodes:["us"],tags:{brand:"Kwik Shop","brand:wikidata":"Q6450417","brand:wikipedia":"en:Kwik Shop",name:"Kwik Shop",shop:"convenience"}},"shop/convenience|Kwik Trip":{countryCodes:["us"],nomatch:["amenity/fuel|Kwik Trip"],tags:{brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip",shop:"convenience"}},"shop/convenience|La Vie Claire":{countryCodes:["fr"],nomatch:["shop/supermarket|La Vie Claire"],tags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"fr:La Vie Claire",name:"La Vie Claire",organic:"only",shop:"convenience"}},"shop/convenience|Lawson":{tags:{brand:"Lawson","brand:wikidata":"Q1557223","brand:wikipedia":"en:Lawson (store)",name:"Lawson",shop:"convenience"}},"shop/convenience|Lewiatan":{countryCodes:["pl"],nomatch:["shop/supermarket|Lewiatan"],tags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"convenience"}},"shop/convenience|Lifestyle Express":{countryCodes:["gb"],tags:{brand:"Lifestyle Express","brand:wikidata":"Q61994869",name:"Lifestyle Express",shop:"convenience"}},"shop/convenience|Little Waitrose":{countryCodes:["gb","je"],nomatch:["shop/convenience|Waitrose","shop/supermarket|Waitrose"],tags:{brand:"Little Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Little Waitrose",shop:"convenience"}},"shop/convenience|Livio":{tags:{brand:"Livio",name:"Livio",shop:"convenience"}},"shop/convenience|Loaf 'N Jug":{countryCodes:["us"],tags:{brand:"Loaf 'N Jug","brand:wikidata":"Q6663398","brand:wikipedia":"en:Loaf 'N Jug",name:"Loaf 'N Jug",shop:"convenience"}},"shop/convenience|Londis~(Ireland)":{countryCodes:["ie"],nomatch:["shop/convenience|Londis~(UK)","shop/supermarket|Londis~(Ireland)","shop/supermarket|Londis~(UK)"],tags:{brand:"Londis","brand:wikidata":"Q21015800","brand:wikipedia":"en:Londis (Ireland)",name:"Londis",shop:"convenience"}},"shop/convenience|Londis~(UK)":{countryCodes:["gb"],nomatch:["shop/convenience|Londis~(Ireland)","shop/supermarket|Londis~(Ireland)","shop/supermarket|Londis~(UK)"],tags:{brand:"Londis","brand:wikidata":"Q21008564","brand:wikipedia":"en:Londis (United Kingdom)",name:"Londis",shop:"convenience"}},"shop/convenience|Lonia":{countryCodes:["hr"],tags:{brand:"Lonia",name:"Lonia",shop:"convenience"}},"shop/convenience|M&S Simply Food":{matchNames:["marks & spencer simply food"],nomatch:["shop/supermarket|M&S Simply Food"],tags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"convenience"}},"shop/convenience|METSS":{tags:{brand:"METSS",name:"METSS",shop:"convenience"}},"shop/convenience|Mac's":{countryCodes:["ca"],nomatch:["amenity/fuel|Mac's"],tags:{brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's",shop:"convenience"}},"shop/convenience|Mace~(Ireland)":{countryCodes:["ie"],nomatch:["shop/convenience|Mace~(Northern Ireland)","shop/convenience|Mace~(UK)"],tags:{brand:"Mace","brand:wikidata":"Q75236910","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"}},"shop/convenience|Mace~(Northern Ireland)":{countryCodes:["gb"],nomatch:["shop/convenience|Mace~(Ireland)","shop/convenience|Mace~(UK)"],tags:{brand:"Mace","brand:wikidata":"Q75238536","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"}},"shop/convenience|Mace~(UK)":{countryCodes:["gb"],nomatch:["shop/convenience|Mace~(Ireland)","shop/convenience|Mace~(Northern Ireland)"],tags:{brand:"Mace","brand:wikidata":"Q75240338","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"}},"shop/convenience|Maisto prekės":{tags:{brand:"Maisto prekės",name:"Maisto prekės",shop:"convenience"}},"shop/convenience|Marathon":{nomatch:["amenity/fuel|Marathon"],tags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"}},"shop/convenience|Maverik":{countryCodes:["us"],nomatch:["amenity/fuel|Maverik"],tags:{brand:"Maverik","brand:wikidata":"Q64149010","brand:wikipedia":"en:Maverik, Inc.",name:"Maverik",shop:"convenience"}},"shop/convenience|Maxikiosco":{countryCodes:["ar","uy"],tags:{brand:"Maxikiosco",name:"Maxikiosco",shop:"convenience"}},"shop/convenience|Małpka Express":{countryCodes:["pl"],tags:{brand:"Małpka Express","brand:wikidata":"Q18431946","brand:wikipedia":"pl:Małpka Express",name:"Małpka Express",shop:"convenience"}},"shop/convenience|McColl's":{countryCodes:["gb"],matchTags:["shop/newsagent"],tags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"}},"shop/convenience|Mercator":{countryCodes:["ba","hr","me","rs","si"],nomatch:["shop/supermarket|Mercator"],tags:{brand:"Mercator","brand:wikidata":"Q738412","brand:wikipedia":"en:Mercator (retail)",name:"Mercator",shop:"convenience"}},"shop/convenience|Migrolino":{countryCodes:["ch"],tags:{brand:"Migrolino","brand:wikidata":"Q56745088","brand:wikipedia":"de:Migrolino",name:"Migrolino",shop:"convenience"}},"shop/convenience|Ministop":{tags:{brand:"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"Ministop",shop:"convenience"}},"shop/convenience|Minit Mart":{countryCodes:["us"],tags:{brand:"Minit Mart","brand:wikidata":"Q18154470","brand:wikipedia":"en:Minit Mart Foods Inc.",name:"Minit Mart",shop:"convenience"}},"shop/convenience|Mlin i pekare":{countryCodes:["hr"],tags:{brand:"Mlin i pekare",name:"Mlin i pekare",shop:"convenience"}},"shop/convenience|Mobil Mart":{nomatch:["amenity/fuel|Mobil"],tags:{brand:"Mobil Mart","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil Mart",shop:"convenience"}},"shop/convenience|MrMax":{countryCodes:["jp"],matchNames:["ミスターマックス"],tags:{alt_name:"ミスターマックス",brand:"MrMax","brand:wikidata":"Q11342034","brand:wikipedia":"ja:ミスターマックス",name:"MrMax",shop:"convenience"}},"shop/convenience|Nasz Sklep":{countryCodes:["pl"],tags:{brand:"Nasz Sklep","brand:wikidata":"Q62070369",name:"Nasz Sklep",shop:"convenience"}},"shop/convenience|Neste K":{countryCodes:["fi"],tags:{brand:"Neste K","brand:wikidata":"Q42901270","brand:wikipedia":"fi:Neste K",name:"Neste K",shop:"convenience"}},"shop/convenience|NewDays":{countryCodes:["jp"],matchNames:["newdays ミニ"],tags:{alt_name:"ニューデイズ",brand:"NewDays","brand:wikidata":"Q11234763","brand:wikipedia":"ja:NewDays",name:"NewDays",shop:"convenience"}},"shop/convenience|Nisa":{countryCodes:["gb"],tags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"}},"shop/convenience|Nisa Local":{countryCodes:["gb"],tags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"}},"shop/convenience|OK Market":{countryCodes:["cl"],tags:{brand:"OK Market","brand:wikidata":"Q6047736","brand:wikipedia":"es:OK Market",name:"OK Market",shop:"convenience"}},"shop/convenience|OK便利店":{countryCodes:["cn","hk","mo"],matchNames:["ok便利商店","ok便利店 circle k"],tags:{brand:"OK便利店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利店","name:en":"Circle K",shop:"convenience"}},"shop/convenience|OK超商":{countryCodes:["tw"],tags:{brand:"OK超商","brand:en":"OK mart","brand:wikidata":"Q10851968","brand:wikipedia":"zh:OK超商",name:"OK超商","name:en":"OK mart",shop:"convenience"}},"shop/convenience|Odido":{countryCodes:["pl"],tags:{brand:"Odido",name:"Odido",shop:"convenience"}},"shop/convenience|On the Run":{tags:{brand:"On the Run","brand:wikidata":"Q16931259","brand:wikipedia":"en:On the Run (convenience store)",name:"On the Run",shop:"convenience"}},"shop/convenience|One Stop":{countryCodes:["gb"],tags:{brand:"One Stop","brand:wikidata":"Q65954217",name:"One Stop",shop:"convenience"}},"shop/convenience|Orlen":{countryCodes:["pl"],nomatch:["amenity/fuel|Orlen"],tags:{brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen",shop:"convenience"}},"shop/convenience|Oxxo":{matchTags:["shop/supermarket"],nomatch:["amenity/fuel|Oxxo"],tags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",shop:"convenience"}},"shop/convenience|Panier Sympa":{tags:{brand:"Panier Sympa",name:"Panier Sympa",shop:"convenience"}},"shop/convenience|Petit Casino":{countryCodes:["fr"],matchTags:["shop/supermarket"],tags:{brand:"Petit Casino",name:"Petit Casino",shop:"convenience"}},"shop/convenience|Petro-Canada":{nomatch:["amenity/fuel|Petro-Canada"],tags:{brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada",shop:"convenience"}},"shop/convenience|Plaid Pantry":{countryCodes:["us"],tags:{brand:"Plaid Pantry","brand:wikidata":"Q7200591","brand:wikipedia":"en:Plaid Pantry",name:"Plaid Pantry",shop:"convenience"}},"shop/convenience|Premier":{countryCodes:["gb"],tags:{brand:"Premier","brand:wikidata":"Q7240340","brand:wikipedia":"en:Premier Stores",name:"Premier",shop:"convenience"}},"shop/convenience|Proxi":{countryCodes:["ch","fr"],matchTags:["shop/supermarket"],tags:{brand:"Proxi","brand:wikidata":"Q3408522","brand:wikipedia":"fr:Proxi",name:"Proxi",shop:"convenience"}},"shop/convenience|Proxy":{countryCodes:["fr"],tags:{brand:"Proxy",name:"Proxy",shop:"convenience"}},"shop/convenience|Quality Mart":{countryCodes:["us"],tags:{brand:"Quality Mart","brand:wikidata":"Q66134834",name:"Quality Mart",shop:"convenience"}},"shop/convenience|Quick Stop":{tags:{brand:"Quick Stop",name:"Quick Stop",shop:"convenience"}},"shop/convenience|QuickChek":{countryCodes:["us"],nomatch:["amenity/fuel|QuickChek"],tags:{brand:"QuickChek","brand:wikidata":"Q7271689","brand:wikipedia":"en:QuickChek",name:"QuickChek",shop:"convenience"}},"shop/convenience|QuikTrip":{nomatch:["amenity/fuel|QuikTrip"],tags:{brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip",shop:"convenience",short_name:"QT"}},"shop/convenience|Rabat":{countryCodes:["pl"],tags:{brand:"Rabat",name:"Rabat",shop:"convenience"}},"shop/convenience|RaceTrac":{countryCodes:["us"],nomatch:["amenity/fuel|RaceTrac"],tags:{brand:"RaceTrac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"RaceTrac",shop:"convenience"}},"shop/convenience|RaceWay":{countryCodes:["us"],nomatch:["amenity/fuel|RaceWay"],tags:{brand:"RaceWay","brand:wikidata":"Q73039084",name:"RaceWay",shop:"convenience"}},"shop/convenience|Rewe To Go":{countryCodes:["de"],nomatch:["shop/supermarket|Rewe","shop/supermarket|Rewe City"],tags:{brand:"Rewe To Go","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe To Go",shop:"convenience"}},"shop/convenience|Royal Farms":{countryCodes:["us"],nomatch:["amenity/fuel|Royal Farms"],tags:{brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms",shop:"convenience"}},"shop/convenience|Rutter's":{countryCodes:["us"],nomatch:["amenity/fuel|Rutter's"],tags:{brand:"Rutter's","brand:wikidata":"Q7383544","brand:wikipedia":"en:Rutter's",name:"Rutter's",shop:"convenience"}},"shop/convenience|Sainsbury's Local":{countryCodes:["gb"],matchTags:["shop/supermarket"],tags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"}},"shop/convenience|Sale":{countryCodes:["fi"],tags:{brand:"Sale","brand:wikidata":"Q11892046","brand:wikipedia":"fi:Sale",name:"Sale",shop:"convenience"}},"shop/convenience|Select":{nomatch:["shop/clothes|Select"],tags:{brand:"Select",name:"Select",shop:"convenience"}},"shop/convenience|Sheetz":{nomatch:["amenity/fuel|Sheetz"],tags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"}},"shop/convenience|Shell":{nomatch:["amenity/fuel|Shell","amenity/fuel|Shell Express"],tags:{brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell",shop:"convenience"}},"shop/convenience|Shell Select":{nomatch:["amenity/fuel|Shell","amenity/fuel|Shell Express"],tags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"}},"shop/convenience|Shop & Go":{tags:{brand:"Shop & Go",name:"Shop & Go",shop:"convenience"}},"shop/convenience|Siwa":{countryCodes:["fi"],tags:{brand:"Siwa","brand:wikidata":"Q11893827","brand:wikipedia":"fi:Siwa",name:"Siwa",shop:"convenience"}},"shop/convenience|Spar":{nomatch:["shop/convenience|Spar Express","shop/supermarket|Spar"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"convenience"}},"shop/convenience|Spar Express":{matchTags:["shop/supermarket"],nomatch:["shop/convenience|Spar","shop/supermarket|Spar"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar Express",shop:"convenience"}},"shop/convenience|Speedway":{nomatch:["amenity/fuel|Speedway"],tags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"}},"shop/convenience|Społem":{nomatch:["shop/supermarket|Społem"],tags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"convenience"}},"shop/convenience|Star Mart":{tags:{brand:"Star Mart","brand:wikidata":"Q61994857",name:"Star Mart",shop:"convenience"}},"shop/convenience|Stewart's Shops":{countryCodes:["us"],matchNames:["stewarts"],nomatch:["amenity/fuel|Stewart's"],tags:{brand:"Stewart's Shops","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's Shops",shop:"convenience"}},"shop/convenience|Stripes":{countryCodes:["cl","us"],tags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"}},"shop/convenience|Studenac":{tags:{brand:"Studenac",name:"Studenac",shop:"convenience"}},"shop/convenience|Sunoco":{nomatch:["amenity/fuel|Sunoco"],tags:{brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco",shop:"convenience"}},"shop/convenience|Supérette":{tags:{brand:"Supérette",name:"Supérette",shop:"convenience"}},"shop/convenience|Słoneczko":{countryCodes:["pl"],tags:{brand:"Słoneczko",name:"Słoneczko",shop:"convenience"}},"shop/convenience|Tesco":{nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"convenience"}},"shop/convenience|Tesco Express":{nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"convenience"}},"shop/convenience|Tesco Lotus Express":{countryCodes:["th"],nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco Lotus Express",name:"Tesco Lotus Express",shop:"convenience"}},"shop/convenience|Texaco":{nomatch:["amenity/fuel|Texaco"],tags:{brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco",shop:"convenience"}},"shop/convenience|The Co-operative Food~(UK)":{countryCodes:["gb"],matchNames:["coop","coop food","cooperative food","the cooperative"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"convenience"}},"shop/convenience|Thorntons":{countryCodes:["us"],nomatch:["amenity/fuel|Thorntons","shop/confectionery|Thorntons"],tags:{brand:"Thorntons","brand:wikidata":"Q7796584","brand:wikipedia":"en:Thorntons LLC",name:"Thorntons",shop:"convenience"}},"shop/convenience|Tiendita":{countryCodes:["mx"],tags:{brand:"Tiendita",name:"Tiendita",shop:"convenience"}},"shop/convenience|Tiger Mart":{tags:{brand:"Tiger Mart","brand:wikidata":"Q57643977",name:"Tiger Mart",shop:"convenience"}},"shop/convenience|Total":{nomatch:["amenity/fuel|Total"],tags:{brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total",shop:"convenience"}},"shop/convenience|Turkey Hill":{nomatch:["amenity/fuel|Turkey Hill"],tags:{brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill",shop:"convenience"}},"shop/convenience|Ultramar":{nomatch:["amenity/fuel|Ultramar"],tags:{brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar",shop:"convenience"}},"shop/convenience|United":{countryCodes:["au"],matchNames:["united petroleum"],nomatch:["amenity/bank|United Bank~(Connecticut)","amenity/bank|United Bank~(West Virginia)","amenity/fuel|United"],tags:{brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United",shop:"convenience"}},"shop/convenience|United Dairy Farmers":{countryCodes:["us"],matchTags:["amenity/ice_cream","shop/ice_cream"],nomatch:["amenity/fuel|United Dairy Farmers"],tags:{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"}},"shop/convenience|Utile":{countryCodes:["fr"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|Super U","shop/supermarket|Hyper U","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"}},"shop/convenience|Valero":{nomatch:["amenity/fuel|Valero"],tags:{brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero",shop:"convenience"}},"shop/convenience|VinMart+":{countryCodes:["vn"],nomatch:["shop/supermarket|VinMart"],tags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart+",shop:"convenience"}},"shop/convenience|Vival":{countryCodes:["fr","pe"],matchTags:["shop/supermarket"],tags:{brand:"Vival","brand:wikidata":"Q7937525","brand:wikipedia":"en:Vival (shop)",name:"Vival",shop:"convenience"}},"shop/convenience|Waitrose":{countryCodes:["gb","je"],nomatch:["shop/convenience|Little Waitrose","shop/supermarket|Waitrose"],tags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",shop:"convenience"}},"shop/convenience|Wawa":{nomatch:["amenity/fuel|Wawa"],tags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"}},"shop/convenience|Weltladen":{countryCodes:["at","ch","de"],tags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"}},"shop/convenience|Woolworths Petrol":{countryCodes:["au"],nomatch:["amenity/fuel|Woolworths Petrol"],tags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"}},"shop/convenience|abc~(Poland)":{countryCodes:["pl"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|ABC"],tags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:Abc (sieć handlowa)",name:"abc",shop:"convenience"}},"shop/convenience|ampm":{tags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"}},"shop/convenience|miniピアゴ":{countryCodes:["jp"],matchNames:["ミニピアゴ"],tags:{brand:"miniピアゴ","brand:en":"mini Piago","brand:ja":"miniピアゴ","brand:wikidata":"Q11188499","brand:wikipedia":"ja:Miniピアゴ",name:"miniピアゴ","name:en":"mini Piago","name:ja":"miniピアゴ",shop:"convenience"}},"shop/convenience|uSmile 昆仑好客":{countryCodes:["cn"],matchNames:["usmile","usmile 便利店","昆仑好","昆仑好客"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|uSmile 昆仑好"],tags:{brand:"uSmile 昆仑好客","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"昆仑好客",name:"uSmile 昆仑好客","name:en":"uSmile","name:zh":"昆仑好客",shop:"convenience"}},"shop/convenience|Żabka":{countryCodes:["pl"],tags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"pl:Żabka (sieć sklepów)",name:"Żabka",shop:"convenience"}},"shop/convenience|АВ Daily":{countryCodes:["ru"],tags:{brand:"АВ Daily",name:"АВ Daily",shop:"convenience"}},"shop/convenience|АТБ":{countryCodes:["ua"],tags:{brand:"АТБ",name:"АТБ",shop:"convenience"}},"shop/convenience|Абсолют":{countryCodes:["ru"],matchNames:["абсолют cash&carry"],tags:{brand:"Абсолют",name:"Абсолют",shop:"convenience"}},"shop/convenience|Авоська":{countryCodes:["ru"],tags:{brand:"Авоська",name:"Авоська",shop:"convenience"}},"shop/convenience|Агрокомплекс":{countryCodes:["ru"],tags:{brand:"Агрокомплекс",name:"Агрокомплекс",shop:"convenience"}},"shop/convenience|Ассорти-продукт":{countryCodes:["ru"],tags:{brand:"Ассорти-продукт",name:"Ассорти-продукт",shop:"convenience"}},"shop/convenience|Береке":{countryCodes:["kg","kz"],tags:{brand:"Береке",name:"Береке",shop:"convenience"}},"shop/convenience|Везунчик":{countryCodes:["ru","ua"],tags:{brand:"Везунчик",name:"Везунчик",shop:"convenience"}},"shop/convenience|Верный":{countryCodes:["ru"],tags:{brand:"Верный",name:"Верный",shop:"convenience"}},"shop/convenience|ВкусВилл":{countryCodes:["ru"],tags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:Вкусвилл",name:"ВкусВилл",shop:"convenience"}},"shop/convenience|Гастрономчикъ":{countryCodes:["ru"],matchNames:["гастрономчик"],tags:{brand:"Гастрономчикъ",name:"Гастрономчикъ",shop:"convenience"}},"shop/convenience|Гроздь":{countryCodes:["ru"],nomatch:["shop/supermarketk|Гроздь"],tags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"convenience"}},"shop/convenience|Доброном":{countryCodes:["by","ru"],tags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"}},"shop/convenience|Евроопт Market":{countryCodes:["by"],matchNames:["евроопт маркет"],matchTags:["shop/supermarket"],tags:{brand:"Евроопт Market","brand:wikidata":"Q65455869",name:"Евроопт Market",shop:"convenience"}},"shop/convenience|Евроопт Минимаркет":{countryCodes:["by"],matchTags:["shop/supermarket"],tags:{brand:"Евроопт Минимаркет","brand:wikidata":"Q65455911",name:"Евроопт Минимаркет",shop:"convenience"}},"shop/convenience|Ермолино":{countryCodes:["ru","ua"],matchNames:["продукты ермолино"],tags:{brand:"Ермолино",name:"Ермолино",shop:"convenience"}},"shop/convenience|КазМунайГаз":{nomatch:["amenity/fuel|КазМунайГаз"],tags:{brand:"КазМунайГаз",name:"КазМунайГаз",shop:"convenience"}},"shop/convenience|Квартал вкуса":{countryCodes:["by"],tags:{brand:"Квартал вкуса",name:"Квартал вкуса",shop:"convenience"}},"shop/convenience|Копеечка":{countryCodes:["by"],tags:{brand:"Копеечка","brand:wikidata":"Q68207105",name:"Копеечка",shop:"convenience"}},"shop/convenience|Копейка":{countryCodes:["ru"],tags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"}},"shop/convenience|Лукойл":{nomatch:["amenity/fuel|Лукойл"],tags:{brand:"Лукойл",name:"Лукойл",shop:"convenience"}},"shop/convenience|Магнит":{matchNames:["магнит у дома"],nomatch:["shop/cosmetics|Магнит Косметик","shop/supermarket|Магнит"],tags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"}},"shop/convenience|Мария-Ра":{countryCodes:["ru"],nomatch:["shop/supermarket|Мария-Ра"],tags:{brand:"Мария-Ра","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра",shop:"convenience"}},"shop/convenience|Маяк":{countryCodes:["ru"],tags:{brand:"Маяк",name:"Маяк",shop:"convenience"}},"shop/convenience|Монетка":{countryCodes:["ru"],tags:{brand:"Монетка",name:"Монетка",shop:"convenience"}},"shop/convenience|Мрія":{countryCodes:["ua"],tags:{brand:"Мрія",name:"Мрія",shop:"convenience"}},"shop/convenience|Продовольственный магазин":{tags:{brand:"Продовольственный магазин",name:"Продовольственный магазин",shop:"convenience"}},"shop/convenience|Родны кут":{tags:{brand:"Родны кут",name:"Родны кут",shop:"convenience"}},"shop/convenience|Руслан":{tags:{brand:"Руслан",name:"Руслан",shop:"convenience"}},"shop/convenience|Сильпо":{countryCodes:["ua"],tags:{brand:"Сильпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сильпо",shop:"convenience"}},"shop/convenience|У Палыча":{countryCodes:["ru"],tags:{brand:"У Палыча",name:"У Палыча",shop:"convenience"}},"shop/convenience|Фасоль":{countryCodes:["ru"],tags:{brand:"Фасоль",name:"Фасоль",shop:"convenience"}},"shop/convenience|Ярче":{countryCodes:["ru"],tags:{brand:"Ярче",name:"Ярче",shop:"convenience"}},"shop/convenience|アンスリー":{countryCodes:["jp"],tags:{brand:"アンスリー","brand:en":"Ansuri","brand:ja":"アンスリー","brand:wikidata":"Q17192555","brand:wikipedia":"ja:アンスリー",name:"アンスリー","name:en":"Ansuri","name:ja":"アンスリー",shop:"convenience"}},"shop/convenience|サンクス":{countryCodes:["jp"],tags:{brand:"サンクス","brand:en":"Sunkus","brand:ja":"サンクス","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus","name:ja":"サンクス",shop:"convenience"}},"shop/convenience|サークルK":{countryCodes:["jp"],tags:{brand:"サークルK","brand:en":"Circle K","brand:ja":"サークルK","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K","name:ja":"サークルK",shop:"convenience"}},"shop/convenience|スリーエフ":{countryCodes:["jp"],tags:{brand:"スリーエフ","brand:en":"Three F","brand:ja":"スリーエフ","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F","name:ja":"スリーエフ",shop:"convenience"}},"shop/convenience|セイコーマート":{countryCodes:["jp"],tags:{brand:"セイコーマート","brand:en":"Seicomart","brand:ja":"セイコーマート","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart","name:ja":"セイコーマート",shop:"convenience"}},"shop/convenience|セブン-イレブン":{countryCodes:["jp"],matchNames:["セブンイレブン(7-11)","セブンイレブン(seven-eleven)"],tags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:ja":"セブン-イレブン","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven","name:ja":"セブン-イレブン","official_name:en":"Seven-Eleven",shop:"convenience"}},"shop/convenience|セーブオン":{countryCodes:["jp"],tags:{brand:"セーブオン","brand:en":"Save On","brand:ja":"セーブオン","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On","name:ja":"セーブオン",shop:"convenience"}},"shop/convenience|デイリーヤマザキ":{countryCodes:["jp"],tags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:ja":"デイリーヤマザキ","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki","name:ja":"デイリーヤマザキ",shop:"convenience"}},"shop/convenience|ナチュラルローソン":{countryCodes:["jp"],tags:{brand:"ナチュラルローソン","brand:en":"NATURAL LAWSON","brand:ja":"ナチュラルローソン","brand:wikidata":"Q11323850","brand:wikipedia":"ja:ナチュラルローソン",name:"ナチュラルローソン","name:en":"Natural Lawson","name:ja":"ナチュラルローソン",shop:"convenience"}},"shop/convenience|ファミリーマート":{countryCodes:["jp"],tags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:ja":"ファミリーマート","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart","name:ja":"ファミリーマート",shop:"convenience"}},"shop/convenience|ポプラ":{countryCodes:["jp"],tags:{brand:"ポプラ","brand:en":"Poplar","brand:ja":"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar","name:ja":"ポプラ",shop:"convenience"}},"shop/convenience|ミニストップ":{countryCodes:["jp"],tags:{brand:"ミニストップ","brand:en":"Ministop","brand:ja":"ミニストップ","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop","name:ja":"ミニストップ",shop:"convenience"}},"shop/convenience|ヤマザキショップ":{countryCodes:["jp"],tags:{brand:"ヤマザキショップ","brand:ja":"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop","name:ja":"ヤマザキショップ",shop:"convenience"}},"shop/convenience|ローソン":{countryCodes:["jp"],matchNames:["ローソン"],tags:{brand:"ローソン","brand:en":"LAWSON","brand:ja":"ローソン","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson","name:ja":"ローソン",shop:"convenience"}},"shop/convenience|ローソンストア100":{countryCodes:["jp"],tags:{brand:"ローソンストア100","brand:en":"LAWSON STORE 100","brand:ja":"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100","name:en":"Lawson Store 100","name:ja":"ローソンストア100",shop:"convenience"}},"shop/convenience|ローソン・スリーエフ":{countryCodes:["jp"],matchNames:["lawson+スリーエフ","ローソン・スリーエフ"],tags:{brand:"ローソン・スリーエフ","brand:en":"LAWSON・Three F","brand:ja":"ローソン・スリーエフ","brand:wikidata":"Q24866804","brand:wikipedia":"ja:ローソン・スリーエフ",name:"ローソン・スリーエフ","name:en":"Lawson・Three F","name:ja":"ローソン・スリーエフ",shop:"convenience"}},"shop/convenience|全家":{countryCodes:["cn"],tags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"zh:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"}},"shop/convenience|全家便利商店":{countryCodes:["tw"],tags:{brand:"全家便利商店","brand:en":"FamilyMart","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店","name:en":"FamilyMart",shop:"convenience"}},"shop/convenience|萊爾富":{countryCodes:["tw"],tags:{brand:"萊爾富","brand:en":"Hi-Life","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富","name:en":"Hi-Life",shop:"convenience"}},"shop/convenience|미니스톱":{countryCodes:["kr"],tags:{brand:"미니스톱","brand:ko":"미니스톱",name:"미니스톱","name:ko":"미니스톱",shop:"convenience"}},"shop/convenience|세븐일레븐":{countryCodes:["kr"],tags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:ko":"세븐일레븐","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven","name:ko":"세븐일레븐",shop:"convenience"}},"shop/copyshop|FedEx Office":{countryCodes:["us"],matchNames:["fedex office print and ship center"],matchTags:["amenity/post_office"],tags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"}},"shop/copyshop|Minuteman Press":{tags:{brand:"Minuteman Press","brand:wikidata":"Q64866081",name:"Minuteman Press",shop:"copyshop"}},"shop/copyshop|Photocopie":{tags:{brand:"Photocopie",name:"Photocopie",shop:"copyshop"}},"shop/copyshop|Sir Speedy":{countryCodes:["us"],matchTags:["amenity/post_office"],tags:{brand:"Sir Speedy","brand:wikidata":"Q17088225","brand:wikipedia":"en:Sir Speedy",name:"Sir Speedy",shop:"copyshop"}},"shop/copyshop|Xerox":{tags:{brand:"Xerox",name:"Xerox",shop:"copyshop"}},"shop/copyshop|Копирка":{tags:{brand:"Копирка",name:"Копирка",shop:"copyshop"}},"shop/cosmetics|Aveda":{countryCodes:["us"],tags:{brand:"Aveda","brand:wikidata":"Q4827965","brand:wikipedia":"en:Aveda",name:"Aveda",shop:"cosmetics"}},"shop/cosmetics|Bath & Body Works":{tags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"cosmetics"}},"shop/cosmetics|Eva":{countryCodes:["ru","ua"],tags:{brand:"Eva",name:"Eva",shop:"cosmetics"}},"shop/cosmetics|Jurlique":{tags:{brand:"Jurlique","brand:wikidata":"Q17008691","brand:wikipedia":"en:Jurlique",name:"Jurlique",shop:"cosmetics"}},"shop/cosmetics|KIKO Milano":{countryCodes:["be","de","es","fr","gb","nl"],matchNames:["kiko"],tags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"}},"shop/cosmetics|Kiehl's":{countryCodes:["ca","us"],matchNames:["kiehl's since 1851"],tags:{brand:"Kiehl's","brand:wikidata":"Q3196447","brand:wikipedia":"en:Kiehl's",name:"Kiehl's",shop:"cosmetics"}},"shop/cosmetics|L'Occitane":{matchNames:["l'occitane en provence"],tags:{brand:"L'Occitane","brand:wikidata":"Q1880676","brand:wikipedia":"en:L'Occitane en Provence",name:"L'Occitane",shop:"cosmetics"}},"shop/cosmetics|Lush":{tags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"}},"shop/cosmetics|MAC Cosmetics":{countryCodes:["ca","de","us"],tags:{brand:"MAC Cosmetics","brand:wikidata":"Q2624442","brand:wikipedia":"en:MAC Cosmetics",name:"MAC Cosmetics",shop:"cosmetics",short_name:"M·A·C"}},"shop/cosmetics|Mixit":{countryCodes:["by","kz","ru"],tags:{brand:"Mixit",name:"Mixit",shop:"cosmetics"}},"shop/cosmetics|Nature Republic":{tags:{brand:"Nature Republic","brand:wikidata":"Q16935507","brand:wikipedia":"en:Nature Republic",name:"Nature Republic",shop:"cosmetics"}},"shop/cosmetics|Nocibé":{countryCodes:["fr"],tags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"}},"shop/cosmetics|Origins":{countryCodes:["us"],tags:{brand:"Origins","brand:wikidata":"Q6643229","brand:wikipedia":"en:Origins (cosmetics)",name:"Origins",shop:"cosmetics"}},"shop/cosmetics|Rituals":{countryCodes:["be","ch","de","es","gb","nl","se","us"],tags:{brand:"Rituals","brand:wikidata":"Q62874140",name:"Rituals",shop:"cosmetics"}},"shop/cosmetics|Saje":{countryCodes:["ca","us"],tags:{brand:"Saje","brand:wikidata":"Q44631749","brand:wikipedia":"en:Saje Natural Wellness",name:"Saje",shop:"cosmetics"}},"shop/cosmetics|Sephora":{matchTags:["shop/perfumery"],tags:{brand:"Sephora","brand:wikidata":"Q2408041","brand:wikipedia":"en:Sephora",name:"Sephora",shop:"cosmetics"}},"shop/cosmetics|The Body Shop":{matchTags:["shop/chemist"],tags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"}},"shop/cosmetics|Ulta Beauty":{countryCodes:["us"],matchNames:["ulta"],tags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"cosmetics"}},"shop/cosmetics|bareMinerals":{countryCodes:["au","ca","dk","gb","ie","us"],tags:{brand:"bareMinerals","brand:wikidata":"Q66740659",name:"bareMinerals",shop:"cosmetics"}},"shop/cosmetics|Л'Этуаль":{countryCodes:["ru"],tags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"}},"shop/cosmetics|Магнит Косметик":{countryCodes:["ru"],matchTags:["shop/chemist"],nomatch:["shop/convenience|Магнит","shop/supermarket|Магнит"],tags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"}},"shop/cosmetics|Подружка":{countryCodes:["ru","ua"],tags:{brand:"Подружка",name:"Подружка",shop:"cosmetics"}},"shop/cosmetics|Чистый дом":{countryCodes:["ru","ua"],tags:{brand:"Чистый дом",name:"Чистый дом",shop:"cosmetics"}},"shop/country_store|Atwoods":{countryCodes:["us"],tags:{brand:"Atwoods","brand:wikidata":"Q4818874","brand:wikipedia":"en:Atwoods",name:"Atwoods",shop:"country_store"}},"shop/country_store|Blain's Farm & Fleet":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"Blain's Farm & Fleet","brand:wikidata":"Q4923906","brand:wikipedia":"en:Blain's Farm & Fleet",name:"Blain's Farm & Fleet",shop:"country_store"}},"shop/country_store|Bomgaars":{countryCodes:["us"],tags:{brand:"Bomgaars","brand:wikidata":"Q22059070","brand:wikipedia":"en:Bomgaars",name:"Bomgaars",shop:"country_store"}},"shop/country_store|Fleet Farm":{countryCodes:["us"],matchNames:["mills fleet farm"],tags:{brand:"Fleet Farm","brand:wikidata":"Q6859973","brand:wikipedia":"en:Fleet Farm",name:"Fleet Farm",shop:"country_store"}},"shop/country_store|Grange Co-op":{countryCodes:["us"],tags:{brand:"Grange Co-op","brand:wikidata":"Q5595639","brand:wikipedia":"en:Grange Cooperative",name:"Grange Co-op",shop:"country_store"}},"shop/country_store|Home of Economy":{countryCodes:["us"],tags:{brand:"Home of Economy","brand:wikidata":"Q5889100","brand:wikipedia":"en:Home of Economy",name:"Home of Economy",shop:"country_store"}},"shop/country_store|Norbys Farm Fleet":{countryCodes:["us"],tags:{brand:"Norbys Farm Fleet","brand:wikidata":"Q7050461","brand:wikipedia":"en:Norby's Farm Fleet",name:"Norbys Farm Fleet",shop:"country_store"}},"shop/country_store|Orscheln Farm & Home":{countryCodes:["us"],tags:{brand:"Orscheln Farm & Home","brand:wikidata":"Q22060331","brand:wikipedia":"en:Orscheln Farm & Home",name:"Orscheln Farm & Home",shop:"country_store"}},"shop/country_store|Peavey Mart":{countryCodes:["ca"],tags:{brand:"Peavey Mart","brand:wikidata":"Q7158483","brand:wikipedia":"en:Peavey Mart",name:"Peavey Mart",shop:"country_store"}},"shop/country_store|Rural King":{countryCodes:["us"],tags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"}},"shop/country_store|TSC Stores":{countryCodes:["ca"],tags:{brand:"TSC Stores","brand:wikidata":"Q62720230",name:"TSC Stores",shop:"country_store"}},"shop/country_store|Theisen's":{countryCodes:["us"],tags:{brand:"Theisen's","brand:wikidata":"Q7777850","brand:wikipedia":"en:Theisen's",name:"Theisen's",shop:"country_store"}},"shop/country_store|Tractor Supply Company":{countryCodes:["us"],matchNames:["tractor supply co"],tags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"}},"shop/country_store|Wynnstay":{countryCodes:["gb"],tags:{brand:"Wynnstay","brand:wikidata":"Q63016351",name:"Wynnstay",shop:"country_store"}},"shop/craft|A.C. Moore":{countryCodes:["us"],tags:{brand:"A.C. Moore","brand:wikidata":"Q4647066","brand:wikipedia":"en:A.C. Moore",name:"A.C. Moore",shop:"craft"}},"shop/craft|Hobby Lobby":{countryCodes:["in","us"],tags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"}},"shop/craft|Hobbycraft":{countryCodes:["gb"],matchTags:["shop/art"],tags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"}},"shop/craft|Jo-Ann":{countryCodes:["us"],tags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"}},"shop/craft|Michaels":{countryCodes:["ca","us"],tags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"}},"shop/craft|Woodcraft":{countryCodes:["us"],matchTags:["craft/carpenter","shop/doityourself","shop/hardware","shop/hobby"],tags:{brand:"Woodcraft","brand:wikidata":"Q22026341","brand:wikipedia":"en:Woodcraft Supply",name:"Woodcraft",shop:"craft"}},"shop/deli|ほっともっと":{countryCodes:["jp"],nomatch:["amenity/fast_food|ほっともっと"],tags:{brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",shop:"deli"}},"shop/deli|京樽":{countryCodes:["jp"],matchTags:["amenity/fast_food"],tags:{brand:"京樽","brand:en":"Kyotaru","brand:ja":"京樽","brand:wikidata":"Q11374503","brand:wikipedia":"ja:京樽",name:"京樽","name:en":"Kyotaru","name:ja":"京樽",shop:"deli"}},"shop/department_store|Barneys New York":{countryCodes:["us"],matchNames:["barneys"],tags:{brand:"Barneys New York","brand:wikidata":"Q59465","brand:wikipedia":"en:Barneys New York",name:"Barneys New York",shop:"department_store"}},"shop/department_store|Beales":{countryCodes:["gb"],tags:{brand:"Beales","brand:wikidata":"Q4876141","brand:wikipedia":"en:Beales (department store)",name:"Beales",shop:"department_store"}},"shop/department_store|Bealls~(Florida-based)":{countryCodes:["us"],tags:{brand:"Bealls","brand:wikidata":"Q4876153","brand:wikipedia":"en:Bealls (Florida)",name:"Bealls",shop:"department_store"}},"shop/department_store|Bealls~(Texas-based)":{countryCodes:["us"],tags:{brand:"Bealls","brand:wikidata":"Q4876156","brand:wikipedia":"en:Bealls (Texas)",name:"Bealls",shop:"department_store"}},"shop/department_store|Belk":{countryCodes:["us"],tags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"}},"shop/department_store|Bi-Mart":{countryCodes:["us"],tags:{brand:"Bi-Mart","brand:wikidata":"Q4902331","brand:wikipedia":"en:Bi-Mart",name:"Bi-Mart",shop:"department_store"}},"shop/department_store|Big Lots":{countryCodes:["us"],matchTags:["shop/variety_store"],tags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"}},"shop/department_store|Big W":{countryCodes:["au"],tags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"}},"shop/department_store|Bloomingdale's":{countryCodes:["us"],tags:{brand:"Bloomingdale's","brand:wikidata":"Q283383","brand:wikipedia":"en:Bloomingdale's",name:"Bloomingdale's",shop:"department_store"}},"shop/department_store|Boscov's":{countryCodes:["us"],tags:{brand:"Boscov's","brand:wikidata":"Q4947190","brand:wikipedia":"en:Boscov's",name:"Boscov's",shop:"department_store"}},"shop/department_store|Boyes":{countryCodes:["gb"],tags:{brand:"Boyes","brand:wikidata":"Q7958471","brand:wikipedia":"en:Boyes (retailer)",name:"Boyes",shop:"department_store"}},"shop/department_store|BrightHouse":{countryCodes:["gb"],tags:{brand:"BrightHouse","brand:wikidata":"Q4967357","brand:wikipedia":"en:BrightHouse (retailer)",name:"BrightHouse",shop:"department_store"}},"shop/department_store|Canadian Tire":{countryCodes:["ca"],matchTags:["shop/doityourself"],nomatch:["amenity/fuel|Canadian Tire"],tags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"}},"shop/department_store|Casas Bahia":{countryCodes:["br"],tags:{brand:"Casas Bahia","brand:wikidata":"Q5048048","brand:wikipedia":"en:Casas Bahia",name:"Casas Bahia",shop:"department_store"}},"shop/department_store|Century 21":{countryCodes:["us"],matchNames:["c21"],nomatch:["office/estate_agent|Century 21"],tags:{brand:"Century 21","brand:wikidata":"Q5063125","brand:wikipedia":"en:Century 21 (department store)",name:"Century 21",shop:"department_store"}},"shop/department_store|Coppel":{tags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"}},"shop/department_store|David Jones":{countryCodes:["au"],tags:{brand:"David Jones","brand:wikidata":"Q5235753","brand:wikipedia":"en:David Jones Limited",name:"David Jones",shop:"department_store"}},"shop/department_store|Debenhams":{countryCodes:["gb","ie"],tags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"}},"shop/department_store|Dillard's":{countryCodes:["us"],tags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"}},"shop/department_store|El Corte Inglés":{countryCodes:["es"],matchNames:["corte ingles"],tags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"}},"shop/department_store|Falabella":{matchNames:["saga falabella"],nomatch:["amenity/bank|Banco Falabella"],tags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"}},"shop/department_store|Galeria Kaufhof":{countryCodes:["de"],tags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"}},"shop/department_store|Giant Tiger":{countryCodes:["ca"],tags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"}},"shop/department_store|Goody's":{countryCodes:["us"],tags:{brand:"Goody's","brand:wikidata":"Q5583733","brand:wikipedia":"en:Goody's (store)",name:"Goody's",shop:"department_store"}},"shop/department_store|Gordmans":{countryCodes:["us"],tags:{brand:"Gordmans","brand:wikidata":"Q5584725","brand:wikipedia":"en:Gordmans",name:"Gordmans",shop:"department_store"}},"shop/department_store|HEMA":{countryCodes:["ae","at","be","de","es","fr","gb","lu","nl","qa"],tags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"}},"shop/department_store|Harvey Norman":{countryCodes:["au","nz"],tags:{brand:"Harvey Norman","brand:wikidata":"Q4040441","brand:wikipedia":"en:Harvey Norman",name:"Harvey Norman",shop:"department_store"}},"shop/department_store|Havan":{countryCodes:["br"],tags:{brand:"Havan","brand:wikidata":"Q10294065","brand:wikipedia":"pt:Havan",name:"Havan",shop:"department_store"}},"shop/department_store|House of Fraser":{countryCodes:["gb"],tags:{brand:"House of Fraser","brand:wikidata":"Q5928422","brand:wikipedia":"en:House of Fraser",name:"House of Fraser",shop:"department_store"}},"shop/department_store|Hudson's Bay":{countryCodes:["ca","nl"],tags:{alt_name:"The Bay",brand:"Hudson's Bay","brand:wikidata":"Q641129","brand:wikipedia":"en:Hudson's Bay (retailer)",name:"Hudson's Bay",shop:"department_store"}},"shop/department_store|JCPenney":{countryCodes:["us"],matchNames:["jcpenny"],tags:{brand:"JCPenney","brand:wikidata":"Q920037","brand:wikipedia":"en:J. C. Penney",name:"JCPenney",official_name:"J.C. Penney Company",shop:"department_store"}},"shop/department_store|John Lewis":{countryCodes:["gb"],tags:{brand:"John Lewis","brand:wikidata":"Q1918981","brand:wikipedia":"en:John Lewis & Partners",name:"John Lewis",official_name:"John Lewis & Partners",shop:"department_store"}},"shop/department_store|Karstadt":{countryCodes:["de"],tags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"}},"shop/department_store|Kmart~(Australia)":{countryCodes:["au"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Kmart~(USA)"],tags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"}},"shop/department_store|Kmart~(USA)":{countryCodes:["us"],matchNames:["k-mart"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Kmart~(Australia)"],tags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"}},"shop/department_store|Kohl's":{countryCodes:["us"],tags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"}},"shop/department_store|Lojas Americanas":{countryCodes:["br"],tags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"}},"shop/department_store|Lord & Taylor":{countryCodes:["us"],tags:{brand:"Lord & Taylor","brand:wikidata":"Q2749082","brand:wikipedia":"en:Lord & Taylor",name:"Lord & Taylor",shop:"department_store"}},"shop/department_store|Lotte Department Store":{matchNames:["lotte"],tags:{brand:"Lotte Department Store","brand:wikidata":"Q489905","brand:wikipedia":"en:Lotte Department Store",name:"Lotte Department Store",shop:"department_store"}},"shop/department_store|M&S Outlet":{matchNames:["marks & spencer outlet"],matchTags:["shop/supermarket"],tags:{brand:"M&S Outlet","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Outlet",shop:"department_store"}},"shop/department_store|Macy's":{countryCodes:["us"],tags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"}},"shop/department_store|Manor":{countryCodes:["ch"],tags:{brand:"Manor","brand:wikidata":"Q382686","brand:wikipedia":"en:Manor (department store)",name:"Manor",shop:"department_store"}},"shop/department_store|Marks & Spencer":{countryCodes:["gb","gr","ie"],matchNames:["m and s"],matchTags:["shop/supermarket"],tags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"}},"shop/department_store|Marshalls":{countryCodes:["ca","us"],tags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"}},"shop/department_store|Muji":{countryCodes:["it"],tags:{brand:"Muji","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"en:Muji",name:"Muji","name:en":"Muji","name:ja":"無印良品",shop:"department_store"}},"shop/department_store|Myer":{countryCodes:["au"],tags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"}},"shop/department_store|Neiman Marcus":{countryCodes:["us"],tags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"}},"shop/department_store|Nordstrom":{countryCodes:["ca","us"],tags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"}},"shop/department_store|Oechsle":{countryCodes:["pe"],tags:{brand:"Oechsle","brand:wikidata":"Q6049096","brand:wikipedia":"es:Oechsle",name:"Oechsle",shop:"department_store"}},"shop/department_store|París":{countryCodes:["cl","pe"],tags:{brand:"París","brand:wikidata":"Q20812805","brand:wikipedia":"en:París (retail store)",name:"París",shop:"department_store"}},"shop/department_store|Printemps":{countryCodes:["ad","cn","fr","jp","sa"],tags:{brand:"Printemps","brand:wikidata":"Q1535260","brand:wikipedia":"fr:Printemps (grands magasins)",name:"Printemps",shop:"department_store"}},"shop/department_store|Ripley":{countryCodes:["cl","pe"],tags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"}},"shop/department_store|Ross":{countryCodes:["us"],tags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",official_name:"Ross Dress for Less",shop:"department_store"}},"shop/department_store|Saks Fifth Avenue":{countryCodes:["ca","us"],tags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"}},"shop/department_store|Saks Off 5th":{countryCodes:["ca","us"],tags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"}},"shop/department_store|Sears":{countryCodes:["mx","us"],nomatch:["shop/car_repair|Sears Auto Center"],tags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"}},"shop/department_store|Sears Hometown":{countryCodes:["us"],matchNames:["sears hometown store","sears hometown stores"],tags:{brand:"Sears Hometown","brand:wikidata":"Q69926963",name:"Sears Hometown",shop:"department_store"}},"shop/department_store|Sears Outlet":{countryCodes:["us"],matchNames:["sears outlet store","sears outlet stores"],tags:{brand:"Sears Outlet","brand:wikidata":"Q20080412",name:"Sears Outlet",shop:"department_store"}},"shop/department_store|Shopko":{countryCodes:["us"],tags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"}},"shop/department_store|Shoppers Stop":{countryCodes:["in"],tags:{brand:"Shoppers Stop","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shoppers Stop",name:"Shoppers Stop",shop:"department_store"}},"shop/department_store|Stein Mart":{countryCodes:["us"],tags:{brand:"Stein Mart","brand:wikidata":"Q7606770","brand:wikipedia":"en:Stein Mart",name:"Stein Mart",shop:"department_store"}},"shop/department_store|Stockmann":{countryCodes:["fi"],tags:{brand:"Stockmann","brand:wikidata":"Q1543093","brand:wikipedia":"fi:Stockmann",name:"Stockmann",shop:"department_store"}},"shop/department_store|TJ Maxx":{countryCodes:["us"],tags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"department_store"}},"shop/department_store|TK Maxx":{tags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"department_store"}},"shop/department_store|Target~(Australia)":{countryCodes:["au"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Target~(USA)"],tags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"}},"shop/department_store|Target~(USA)":{countryCodes:["us"],matchNames:["super target"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Target~(Australia)"],tags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"}},"shop/department_store|The Warehouse":{countryCodes:["nz"],tags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"}},"shop/department_store|Walmart":{matchTags:["shop/supermarket"],tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",shop:"department_store"}},"shop/department_store|Woolworth":{countryCodes:["de"],tags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"}},"shop/department_store|Åhléns":{countryCodes:["se"],tags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"}},"shop/department_store|Épicerie":{countryCodes:["ma"],tags:{brand:"Épicerie",name:"Épicerie",shop:"department_store"}},"shop/department_store|Éxito":{countryCodes:["co"],matchTags:["shop/supermarket"],tags:{brand:"Éxito",name:"Éxito",shop:"department_store"}},"shop/department_store|東急ハンズ":{countryCodes:["jp"],tags:{brand:"東急ハンズ","brand:en":"Tokyu Hands","brand:ja":"東急ハンズ","brand:wikidata":"Q859212","brand:wikipedia":"ja:東急ハンズ",name:"東急ハンズ","name:en":"Tokyu Hands","name:ja":"東急ハンズ",shop:"department_store"}},"shop/department_store|無印良品":{countryCodes:["jp","tw"],tags:{brand:"無印良品","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"ja:無印良品",name:"無印良品","name:en":"Muji","name:ja":"無印良品",shop:"department_store"}},"shop/department_store|롯데백화점":{countryCodes:["kr"],tags:{brand:"롯데백화점","brand:ko":"롯데백화점","brand:wikidata":"Q489905","brand:wikipedia":"ko:롯데백화점",name:"롯데백화점","name:en":"Lotte Department Store","name:ko":"롯데백화점",shop:"department_store"}},"shop/doityourself|Ace Hardware":{tags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"}},"shop/doityourself|B&Q":{tags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"}},"shop/doityourself|Bauhaus":{countryCodes:["at","bg","ch","cz","de","dk","ee","es","fi","hr","hu","is","lu","nl","no","se","si","sk","tr"],tags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"}},"shop/doityourself|Biltema":{countryCodes:["dk","fi","no","se"],tags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"}},"shop/doityourself|Brico":{countryCodes:["be","fr","it"],tags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"}},"shop/doityourself|Brico Dépôt":{countryCodes:["es","fr","pt","ro"],tags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"fr:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"}},"shop/doityourself|Bricoman":{countryCodes:["fr","it","pl"],tags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"}},"shop/doityourself|Bricomarché":{countryCodes:["fr","pl","pt"],tags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"}},"shop/doityourself|Bricorama":{countryCodes:["es","fr"],tags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"}},"shop/doityourself|Bunnings Warehouse":{countryCodes:["au","nz"],tags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"}},"shop/doityourself|Castorama":{countryCodes:["fr","pl","ru"],tags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"}},"shop/doityourself|Chausson Matériaux":{countryCodes:["fr"],tags:{brand:"Chausson Matériaux",name:"Chausson Matériaux",shop:"doityourself"}},"shop/doityourself|Clas Ohlson":{countryCodes:["fi","no","se"],tags:{brand:"Clas Ohlson","brand:wikidata":"Q3356220","brand:wikipedia":"en:Clas Ohlson",name:"Clas Ohlson",shop:"doityourself"}},"shop/doityourself|Easy":{countryCodes:["ar","cl","co"],tags:{brand:"Easy","brand:wikidata":"Q5331091","brand:wikipedia":"en:Easy (store)",name:"Easy",shop:"doityourself"}},"shop/doityourself|Gamma":{countryCodes:["be","nl"],tags:{brand:"Gamma","brand:wikidata":"Q2294120","brand:wikipedia":"en:Gamma (store)",name:"Gamma",shop:"doityourself"}},"shop/doityourself|Gedimat":{countryCodes:["fr"],tags:{brand:"Gedimat",name:"Gedimat",shop:"doityourself"}},"shop/doityourself|Globus Baumarkt":{countryCodes:["de","lu"],tags:{brand:"Globus Baumarkt","brand:wikidata":"Q457503","brand:wikipedia":"de:Globus Holding",name:"Globus Baumarkt",shop:"doityourself"}},"shop/doityourself|Hagebaumarkt":{countryCodes:["at","be","ch","de","es","fr","lu","nl"],matchNames:["hagebau"],tags:{brand:"Hagebaumarkt","brand:wikidata":"Q1568279","brand:wikipedia":"de:Hagebau",name:"Hagebaumarkt",shop:"doityourself"}},"shop/doityourself|Hammer":{countryCodes:["de"],tags:{brand:"Hammer","brand:wikidata":"Q52159668","brand:wikipedia":"de:Hammer (Fachmarktkette)",name:"Hammer",shop:"doityourself"}},"shop/doityourself|Hellweg":{countryCodes:["at","de"],tags:{brand:"Hellweg","brand:wikidata":"Q1603084","brand:wikipedia":"de:Hellweg (Baumarkt)",name:"Hellweg",shop:"doityourself"}},"shop/doityourself|Home Building Centre~(Canada)":{countryCodes:["ca"],nomatch:["shop/hardware|Home Hardware Building Centre"],tags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Building Centre",shop:"doityourself"}},"shop/doityourself|Home Hardware Building Centre~(Canada)":{countryCodes:["ca"],matchNames:["home hardware"],nomatch:["shop/hardware|Home Hardware"],tags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware Building Centre",shop:"doityourself"}},"shop/doityourself|Home Timber & Hardware~(Australia)":{countryCodes:["au"],tags:{alt_name:"Home Hardware",brand:"Home Timber & Hardware","brand:wikidata":"Q17006984","brand:wikipedia":"en:Home Timber & Hardware",name:"Home Timber & Hardware",shop:"doityourself",short_name:"Home"}},"shop/doityourself|Homebase":{countryCodes:["gb","ie"],tags:{brand:"Homebase","brand:wikidata":"Q9293447","brand:wikipedia":"en:Homebase",name:"Homebase",shop:"doityourself"}},"shop/doityourself|Hornbach":{countryCodes:["at","ch","cz","de","lu","nl","ro","se","sk"],tags:{brand:"Hornbach","brand:wikidata":"Q685926","brand:wikipedia":"en:Hornbach (retailer)",name:"Hornbach",shop:"doityourself"}},"shop/doityourself|Hubo":{countryCodes:["be","nl"],tags:{brand:"Hubo","brand:wikidata":"Q3142153","brand:wikipedia":"en:Hubo Belgium",name:"Hubo",shop:"doityourself"}},"shop/doityourself|Jewson":{countryCodes:["gb"],tags:{brand:"Jewson","brand:wikidata":"Q6190226","brand:wikipedia":"en:Jewson",name:"Jewson",shop:"doityourself"}},"shop/doityourself|Jula":{tags:{brand:"Jula",name:"Jula",shop:"doityourself"}},"shop/doityourself|Karwei":{countryCodes:["nl"],tags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"}},"shop/doityourself|Lapeyre":{tags:{brand:"Lapeyre",name:"Lapeyre",shop:"doityourself"}},"shop/doityourself|Leroy Merlin":{tags:{brand:"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Leroy Merlin",shop:"doityourself"}},"shop/doityourself|Lowe's":{countryCodes:["ca","mx","us"],matchNames:["lowes home improvement"],nomatch:["shop/clothes|Lowes","shop/supermarket|Lowe's Market","shop/supermarket|Lowes Foods"],tags:{brand:"Lowe's","brand:wikidata":"Q1373493","brand:wikipedia":"en:Lowe's",name:"Lowe's",shop:"doityourself"}},"shop/doityourself|Menards":{countryCodes:["us"],tags:{brand:"Menards","brand:wikidata":"Q1639897","brand:wikipedia":"en:Menards",name:"Menards",shop:"doityourself"}},"shop/doityourself|Mitre 10":{countryCodes:["au"],tags:{brand:"Mitre 10","brand:wikidata":"Q6882393","brand:wikipedia":"en:Mitre 10",name:"Mitre 10",shop:"doityourself"}},"shop/doityourself|Mr.Bricolage":{countryCodes:["be","fr"],tags:{brand:"Mr.Bricolage","brand:wikidata":"Q3141657","brand:wikipedia":"fr:Mr Bricolage",name:"Mr.Bricolage",shop:"doityourself"}},"shop/doityourself|OBI":{tags:{brand:"OBI","brand:wikidata":"Q300518","brand:wikipedia":"en:Obi (store)",name:"OBI",shop:"doityourself"}},"shop/doityourself|Point P":{countryCodes:["fr"],tags:{brand:"Point P",name:"Point P",shop:"doityourself"}},"shop/doityourself|Praktiker":{countryCodes:["bg","gr","hu","ro"],tags:{brand:"Praktiker","brand:wikidata":"Q680214","brand:wikipedia":"en:Praktiker",name:"Praktiker",shop:"doityourself"}},"shop/doityourself|Praxis":{countryCodes:["nl"],tags:{brand:"Praxis","brand:wikidata":"Q2741995","brand:wikipedia":"nl:Praxis (winkel)",name:"Praxis",shop:"doityourself"}},"shop/doityourself|Promart":{countryCodes:["pe"],tags:{brand:"Promart","brand:wikidata":"Q17626095","brand:wikipedia":"en:Promart",name:"Promart",shop:"doityourself"}},"shop/doityourself|Rona":{countryCodes:["ca"],tags:{brand:"Rona","brand:wikidata":"Q3415283","brand:wikipedia":"en:Rona, Inc.",name:"Rona",shop:"doityourself"}},"shop/doityourself|Screwfix":{countryCodes:["de","gb"],tags:{brand:"Screwfix","brand:wikidata":"Q7439115","brand:wikipedia":"en:Screwfix",name:"Screwfix",shop:"doityourself"}},"shop/doityourself|Sodimac":{countryCodes:["ar","br","cl","co","mx","pe","uy"],matchNames:["sodimac constructor"],tags:{brand:"Sodimac","brand:wikidata":"Q7553274","brand:wikipedia":"es:Sodimac",name:"Sodimac",shop:"doityourself"}},"shop/doityourself|Sonderpreis Baumarkt":{countryCodes:["de"],tags:{brand:"Sonderpreis Baumarkt",name:"Sonderpreis Baumarkt",shop:"doityourself"}},"shop/doityourself|Tekzen":{countryCodes:["tr"],tags:{brand:"Tekzen","brand:wikidata":"Q25475379","brand:wikipedia":"tr:Tekzen",name:"Tekzen",shop:"doityourself"}},"shop/doityourself|The Home Depot":{countryCodes:["ca","mx","us"],tags:{alt_name:"Home Depot",brand:"The Home Depot","brand:wikidata":"Q864407","brand:wikipedia":"en:The Home Depot",name:"The Home Depot",shop:"doityourself"}},"shop/doityourself|Toolstation":{countryCodes:["fr","gb","nl"],tags:{brand:"Toolstation","brand:wikidata":"Q7824103","brand:wikipedia":"en:Toolstation",name:"Toolstation",shop:"doityourself"}},"shop/doityourself|Toom Baumarkt":{countryCodes:["de"],matchNames:["toom"],tags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"}},"shop/doityourself|Travis Perkins":{countryCodes:["gb"],tags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"}},"shop/doityourself|Weldom":{countryCodes:["fr"],tags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"}},"shop/doityourself|Wickes":{countryCodes:["gb"],tags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"}},"shop/doityourself|jem & fix":{countryCodes:["dk"],tags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:Jem & fix",name:"jem & fix",shop:"doityourself"}},"shop/doityourself|Леруа Мерлен":{countryCodes:["ru","ua"],tags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"}},"shop/doityourself|Мастер":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Мастер",name:"Мастер",shop:"doityourself"}},"shop/doityourself|Строитель":{tags:{brand:"Строитель",name:"Строитель",shop:"doityourself"}},"shop/doityourself|カインズホーム":{countryCodes:["jp"],tags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:ja":"カインズホーム","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home","name:ja":"カインズホーム",shop:"doityourself"}},"shop/doityourself|ケーヨー":{countryCodes:["jp"],tags:{brand:"ケーヨー","brand:en":"Keiyo","brand:ja":"ケーヨー","brand:wikidata":"Q11301462","brand:wikipedia":"ja:ケーヨー",name:"ケーヨー","name:en":"Keiyo","name:ja":"ケーヨー",shop:"doityourself"}},"shop/doityourself|コメリ":{countryCodes:["jp"],tags:{brand:"コメリ","brand:en":"Komeri","brand:ja":"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri","name:ja":"コメリ",shop:"doityourself"}},"shop/doityourself|コーナン":{countryCodes:["jp"],tags:{brand:"コーナン","brand:en":"Kohnan","brand:ja":"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan","name:ja":"コーナン",shop:"doityourself"}},"shop/doityourself|ナフコ":{countryCodes:["jp"],tags:{brand:"ナフコ","brand:en":"Nafco","brand:ja":"ナフコ","brand:wikidata":"Q11323981","brand:wikipedia":"ja:ナフコ (ホームセンター)",name:"ナフコ","name:en":"Nafco","name:ja":"ナフコ",shop:"doityourself"}},"shop/doors|Юркас":{countryCodes:["by"],tags:{brand:"Юркас",name:"Юркас",shop:"doors"}},"shop/dry_cleaning|5àsec":{tags:{brand:"5àsec","brand:wikidata":"Q2817899","brand:wikipedia":"fr:5àsec",name:"5àsec",shop:"dry_cleaning"}},"shop/dry_cleaning|Johnsons":{countryCodes:["gb"],matchNames:["johnson","johnsons cleaners"],tags:{brand:"Johnsons","brand:wikidata":"Q6268527","brand:wikipedia":"en:Johnsons Cleaners UK",name:"Johnsons",shop:"dry_cleaning"}},"shop/dry_cleaning|Martinizing Dry Cleaning":{tags:{brand:"Martinizing Dry Cleaning","brand:wikidata":"Q6777169","brand:wikipedia":"en:Martinizing Dry Cleaning",name:"Martinizing Dry Cleaning",shop:"dry_cleaning"}},"shop/dry_cleaning|Tide Cleaners":{countryCodes:["us"],matchNames:["tide","tide dry cleaners"],tags:{brand:"Tide Cleaners","brand:wikidata":"Q66048841",name:"Tide Cleaners",shop:"dry_cleaning"}},"shop/dry_cleaning|Диана":{countryCodes:["ru"],tags:{brand:"Диана","brand:wikidata":"Q62105088",name:"Диана",shop:"dry_cleaning"}},"shop/dry_cleaning|タカケンサンシャイン":{countryCodes:["jp"],matchNames:["タカケンクリーング"],tags:{brand:"タカケンサンシャイン","brand:en":"Takaken Sunshine","brand:ja":"タカケンサンシャイン","brand:wikidata":"Q11315914","brand:wikipedia":"ja:タカケンサンシャイン",name:"タカケンサンシャイン","name:en":"Takaken Sunshine","name:ja":"タカケンサンシャイン",shop:"dry_cleaning"}},"shop/dry_cleaning|ホワイト急便":{countryCodes:["jp"],tags:{brand:"ホワイト急便","brand:en":"White Kyuubin","brand:ja":"ホワイト急便","brand:wikidata":"Q11505557","brand:wikipedia":"ja:日本さわやかグループ",name:"ホワイト急便","name:en":"White Kyuubin","name:ja":"ホワイト急便",shop:"dry_cleaning"}},"shop/dry_cleaning|白洋舎":{countryCodes:["jp"],tags:{brand:"白洋舎","brand:en":"Hakuyosha","brand:wikidata":"Q11579995","brand:wikipedia":"ja:白洋舎",name:"白洋舎","name:en":"Hakuyosha",shop:"dry_cleaning"}},"shop/e-cigarette|Vardex":{tags:{brand:"Vardex",name:"Vardex",shop:"e-cigarette"}},"shop/electrical|Kafkas":{countryCodes:["gr"],tags:{brand:"Kafkas","brand:wikidata":"Q68201770",name:"Kafkas",shop:"electrical"}},"shop/electronics|Apple Store":{nomatch:["amenity/bank|Apple Bank"],tags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics",short_name:"Apple"}},"shop/electronics|BCC":{countryCodes:["nl"],nomatch:["amenity/bank|Bcc"],tags:{brand:"BCC",name:"BCC",shop:"electronics"}},"shop/electronics|Batteries Plus Bulbs":{countryCodes:["us"],matchNames:["batteries plus"],tags:{brand:"Batteries Plus Bulbs","brand:wikidata":"Q17005157","brand:wikipedia":"en:Batteries Plus Bulbs",name:"Batteries Plus Bulbs",shop:"electronics"}},"shop/electronics|Best Buy":{nomatch:["amenity/vending_machine|Best Buy Express","shop/mobile_phone|Best Buy Mobile"],tags:{brand:"Best Buy","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy",shop:"electronics"}},"shop/electronics|Boulanger":{countryCodes:["fr"],tags:{brand:"Boulanger","brand:wikidata":"Q2921695","brand:wikipedia":"fr:Boulanger (entreprise)",name:"Boulanger",shop:"electronics"}},"shop/electronics|CeX":{countryCodes:["au","es","gb","ie","in","it","mx","nl","pl","pt"],tags:{brand:"CeX","brand:wikidata":"Q5055676","brand:wikipedia":"en:CeX (company)",name:"CeX",shop:"electronics"}},"shop/electronics|Coolblue":{countryCodes:["be","nl"],tags:{brand:"Coolblue","brand:wikidata":"Q4992516","brand:wikipedia":"en:Coolblue",name:"Coolblue",shop:"electronics"}},"shop/electronics|Currys PC World":{countryCodes:["gb","ie"],matchNames:["currys","pc world"],tags:{brand:"Currys PC World","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys PC World",shop:"electronics"}},"shop/electronics|Darty":{countryCodes:["fr"],tags:{brand:"Darty","brand:wikidata":"Q2439098","brand:wikipedia":"fr:Darty",name:"Darty",shop:"electronics"}},"shop/electronics|Elektra":{countryCodes:["gt","hn","pa","pe","sv"],tags:{brand:"Elektra","brand:wikidata":"Q1142753","brand:wikipedia":"es:Grupo Elektra",name:"Elektra",shop:"electronics"}},"shop/electronics|Elgiganten":{countryCodes:["dk","se"],tags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"}},"shop/electronics|Euronics":{tags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"}},"shop/electronics|Expert":{tags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"}},"shop/electronics|Fry's Electronics":{countryCodes:["us"],tags:{brand:"Fry's Electronics","brand:wikidata":"Q5506545","brand:wikipedia":"en:Fry's Electronics",name:"Fry's Electronics",shop:"electronics",short_name:"Fry's"}},"shop/electronics|Frávega":{countryCodes:["ar"],tags:{brand:"Frávega","brand:wikidata":"Q5401467","brand:wikipedia":"es:Frávega",name:"Frávega",shop:"electronics"}},"shop/electronics|Garbarino":{tags:{brand:"Garbarino","brand:wikidata":"Q5875270","brand:wikipedia":"es:Garbarino",name:"Garbarino",shop:"electronics"}},"shop/electronics|Gigantti":{countryCodes:["fi"],tags:{brand:"Gigantti","brand:wikidata":"Q42512186","brand:wikipedia":"fi:Gigantti (tavarataloketju)",name:"Gigantti",shop:"electronics"}},"shop/electronics|Hartlauer":{countryCodes:["at"],tags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"}},"shop/electronics|Interdiscount":{countryCodes:["ch"],tags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"}},"shop/electronics|JB Hi-Fi":{countryCodes:["au","nz"],tags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"}},"shop/electronics|Jaycar":{countryCodes:["au","nz"],tags:{brand:"Jaycar","brand:wikidata":"Q6167713","brand:wikipedia":"en:Jaycar",name:"Jaycar",shop:"electronics"}},"shop/electronics|Kjell & Company":{countryCodes:["no","se"],matchNames:["kjell och company"],tags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"}},"shop/electronics|Komputronik":{countryCodes:["pl"],tags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"}},"shop/electronics|LG":{matchNames:["lg electronics"],tags:{brand:"LG","brand:wikidata":"Q162345","brand:wikipedia":"en:LG Electronics",name:"LG",shop:"electronics"}},"shop/electronics|La Curacao":{tags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"}},"shop/electronics|MDA":{countryCodes:["fr"],tags:{brand:"MDA",name:"MDA",shop:"electronics"}},"shop/electronics|Maplin":{countryCodes:["gb"],tags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"}},"shop/electronics|Media Expert":{countryCodes:["pl"],tags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"}},"shop/electronics|Media Markt":{tags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"}},"shop/electronics|Medimax":{countryCodes:["de"],tags:{brand:"Medimax","brand:wikidata":"Q62872450",name:"Medimax",shop:"electronics"}},"shop/electronics|Microsoft Store":{tags:{brand:"Microsoft Store","brand:wikidata":"Q1688786","brand:wikipedia":"en:Microsoft Store",name:"Microsoft Store",shop:"electronics",short_name:"Microsoft"}},"shop/electronics|Musimundo":{countryCodes:["ar"],tags:{brand:"Musimundo","brand:wikidata":"Q6034719","brand:wikipedia":"es:Musimundo",name:"Musimundo",shop:"electronics"}},"shop/electronics|Neonet":{countryCodes:["pl"],tags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"}},"shop/electronics|P. C. Richard & Son":{countryCodes:["us"],matchNames:["pc richard"],tags:{brand:"P. C. Richard & Son","brand:wikidata":"Q7117161","brand:wikipedia":"en:P. C. Richard & Son",name:"P. C. Richard & Son",shop:"electronics"}},"shop/electronics|Power":{countryCodes:["dk","fi","no","se"],nomatch:["amenity/fuel|Power"],tags:{brand:"Power","brand:wikidata":"Q20857751","brand:wikipedia":"fi:Power",name:"Power",shop:"electronics"}},"shop/electronics|RTV Euro AGD":{countryCodes:["pl"],tags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"pl:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"}},"shop/electronics|RadioShack":{tags:{brand:"RadioShack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"RadioShack",shop:"electronics"}},"shop/electronics|Robert Dyas":{countryCodes:["gb"],tags:{brand:"Robert Dyas","brand:wikidata":"Q7343720","brand:wikipedia":"en:Robert Dyas",name:"Robert Dyas",shop:"electronics"}},"shop/electronics|Samsung":{tags:{brand:"Samsung","brand:wikidata":"Q20718","brand:wikipedia":"en:Samsung Electronics",name:"Samsung",shop:"electronics"}},"shop/electronics|Saturn":{countryCodes:["at","de","lu","pl"],tags:{brand:"Saturn","brand:wikidata":"Q2543504","brand:wikipedia":"en:Saturn (retailer)",name:"Saturn",shop:"electronics"}},"shop/electronics|Sony":{tags:{brand:"Sony","brand:wikidata":"Q41187","brand:wikipedia":"en:Sony",name:"Sony",shop:"electronics"}},"shop/electronics|Sony Centre":{matchNames:["sony center"],tags:{brand:"Sony Centre","brand:wikidata":"Q3437496","brand:wikipedia":"en:Sony Centre",name:"Sony Centre",shop:"electronics"}},"shop/electronics|Teknikmagasinet":{countryCodes:["fi","no","se"],tags:{brand:"Teknikmagasinet","brand:wikidata":"Q3357520","brand:wikipedia":"en:Teknikmagasinet",name:"Teknikmagasinet",shop:"electronics"}},"shop/electronics|The Good Guys":{countryCodes:["au"],tags:{brand:"The Good Guys","brand:wikidata":"Q7737217","brand:wikipedia":"en:The Good Guys (Australian company)",name:"The Good Guys",shop:"electronics"}},"shop/electronics|The Source":{countryCodes:["ca"],tags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"}},"shop/electronics|Trony":{countryCodes:["it"],tags:{brand:"Trony","brand:wikidata":"Q3999692","brand:wikipedia":"it:Trony",name:"Trony",shop:"electronics"}},"shop/electronics|Unieuro":{countryCodes:["it"],tags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"}},"shop/electronics|Worten":{countryCodes:["es","pt"],tags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"}},"shop/electronics|b8ta":{countryCodes:["us"],tags:{brand:"b8ta","brand:wikidata":"Q55604609","brand:wikipedia":"en:B8ta",name:"b8ta",shop:"electronics"}},"shop/electronics|М.Видео":{countryCodes:["ru"],tags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"}},"shop/electronics|Фокстрот":{countryCodes:["ua"],tags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"}},"shop/electronics|Эксперт":{countryCodes:["ru"],tags:{brand:"Эксперт","brand:en":"Expert","brand:ru":"Эксперт","brand:wikidata":"Q4530590","brand:wikipedia":"ru:Эксперт (сеть магазинов)",name:"Эксперт","name:en":"Expert","name:ru":"Эксперт",shop:"electronics"}},"shop/electronics|Эльдорадо":{countryCodes:["ru","ua"],tags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"}},"shop/electronics|あきばお〜":{countryCodes:["jp"],matchNames:["あきばお~"],tags:{brand:"あきばお〜","brand:en":"Akibaoo","brand:ja":"あきばお〜","brand:wikidata":"Q11257009","brand:wikipedia":"ja:あきばお〜",name:"あきばお〜","name:en":"Akibaoo","name:ja":"あきばお〜",shop:"electronics"}},"shop/electronics|エディオン":{countryCodes:["jp"],tags:{brand:"エディオン","brand:en":"EDION","brand:ja":"エディオン","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION","name:ja":"エディオン",shop:"electronics"}},"shop/electronics|ケーズデンキ":{countryCodes:["jp"],matchTags:["shop/appliance"],tags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:ja":"ケーズデンキ","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki","name:ja":"ケーズデンキ",shop:"electronics"}},"shop/electronics|コジマ":{countryCodes:["jp"],tags:{brand:"コジマ","brand:en":"Kojima","brand:ja":"コジマ","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima","name:ja":"コジマ",shop:"electronics"}},"shop/electronics|ソフマップ":{countryCodes:["jp"],tags:{brand:"ソフマップ","brand:en":"Sofmap","brand:ja":"ソフマップ","brand:wikidata":"Q7553789","brand:wikipedia":"ja:ソフマップ",name:"ソフマップ","name:en":"Sofmap","name:ja":"ソフマップ",shop:"electronics"}},"shop/electronics|ノジマ":{countryCodes:["jp"],tags:{brand:"ノジマ","brand:en":"Nojima","brand:ja":"ノジマ","brand:wikidata":"Q11325660","brand:wikipedia":"ja:ノジマ",name:"ノジマ","name:en":"Nojima","name:ja":"ノジマ",shop:"electronics"}},"shop/electronics|ビックカメラ":{countryCodes:["jp"],tags:{brand:"ビックカメラ","brand:en":"Bic Camera","brand:ja":"ビックカメラ","brand:wikidata":"Q4903531","brand:wikipedia":"ja:ビックカメラ",name:"ビックカメラ","name:en":"Bic Camera","name:ja":"ビックカメラ",shop:"electronics"}},"shop/electronics|ヤマダ電機":{countryCodes:["jp"],tags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:ja":"ヤマダ電機","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki","name:ja":"ヤマダ電機",shop:"electronics"}},"shop/electronics|ヨドバシカメラ":{countryCodes:["jp"],tags:{brand:"ヨドバシカメラ","brand:en":"Yodobashi Camera","brand:ja":"ヨドバシカメラ","brand:wikidata":"Q168467","brand:wikipedia":"ja:ヨドバシカメラ",name:"ヨドバシカメラ","name:en":"Yodobashi Camera","name:ja":"ヨドバシカメラ",shop:"electronics"}},"shop/electronics|全國電子":{countryCodes:["tw"],tags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"}},"shop/electronics|燦坤3C":{countryCodes:["tw"],tags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"}},"shop/erotic|Adam & Eve":{countryCodes:["ca","pe","us"],tags:{brand:"Adam & Eve","brand:wikidata":"Q4678604","brand:wikipedia":"en:Adam & Eve (company)",name:"Adam & Eve",shop:"erotic"}},"shop/erotic|Amazing Intimate Essentials":{countryCodes:["us"],tags:{brand:"Amazing Intimate Essentials","brand:wikidata":"Q66305936",name:"Amazing Intimate Essentials",shop:"erotic",short_name:"Amazing.net"}},"shop/erotic|Ann Summers":{countryCodes:["gb","ie"],tags:{brand:"Ann Summers","brand:wikidata":"Q579524","brand:wikipedia":"en:Ann Summers",name:"Ann Summers",shop:"erotic"}},"shop/erotic|Orion":{countryCodes:["at","de"],tags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"}},"shop/erotic|Pulse and Cocktails":{countryCodes:["gb"],tags:{brand:"Pulse and Cocktails","brand:wikidata":"Q7259672","brand:wikipedia":"en:Pulse and Cocktails",name:"Pulse and Cocktails",shop:"erotic"}},"shop/fabric|Mondial Tissus":{countryCodes:["fr"],matchTags:["shop/curtain","shop/department_store"],tags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"}},"shop/fashion_accessories|Brighton Collectibles":{countryCodes:["us"],matchNames:["brighton"],tags:{brand:"Brighton Collectibles","brand:wikidata":"Q4967623","brand:wikipedia":"en:Brighton Collectibles",name:"Brighton Collectibles",shop:"fashion_accessories"}},"shop/fashion_accessories|Bvlgari":{matchNames:["bulgari"],tags:{brand:"Bulgari","brand:wikidata":"Q752515","brand:wikipedia":"en:Bulgari",name:"Bvlgari",shop:"fashion_accessories"}},"shop/fashion_accessories|Claire's":{matchTags:["shop/jewelry"],tags:{brand:"Claire's","brand:wikidata":"Q2974996","brand:wikipedia":"en:Claire's",name:"Claire's",shop:"fashion_accessories"}},"shop/fashion_accessories|Radley London":{countryCodes:["gb"],tags:{brand:"Radley London","brand:wikidata":"Q7281436",name:"Radley London",shop:"fashion_accessories",short_name:"Radley"}},"shop/fashion_accessories|Van Cleef & Arpels":{matchNames:["van cleef & arples"],tags:{brand:"Van Cleef & Arpels","brand:wikidata":"Q2708181","brand:wikipedia":"en:Van Cleef & Arpels",name:"Van Cleef & Arpels",shop:"fashion_accessories"}},"shop/flooring|Floor & Decor":{countryCodes:["us"],tags:{brand:"Floor & Decor","brand:wikidata":"Q56280964","brand:wikipedia":"en:Floor & Decor",name:"Floor & Decor",shop:"flooring"}},"shop/florist|Blume 2000":{countryCodes:["de"],tags:{brand:"Blume 2000","brand:wikidata":"Q886166","brand:wikipedia":"de:Blume 2000",name:"Blume 2000",shop:"florist"}},"shop/florist|Blumen Risse":{countryCodes:["de"],tags:{brand:"Blumen Risse","brand:wikidata":"Q886177","brand:wikipedia":"de:Blumen Risse",name:"Blumen Risse",shop:"florist"}},"shop/florist|Holland Blumen Mark":{countryCodes:["at"],matchNames:["holland blumen"],tags:{brand:"Holland Blumen Mark","brand:wikidata":"Q1624739","brand:wikipedia":"de:Holland Blumen Mark",name:"Holland Blumen Mark",shop:"florist"}},"shop/florist|Interflora":{countryCodes:["fr","gb","no","se"],tags:{brand:"Interflora","brand:wikidata":"Q692179","brand:wikipedia":"en:Interflora",name:"Interflora",shop:"florist"}},"shop/florist|Monceau Fleurs":{countryCodes:["be","fr"],tags:{brand:"Monceau Fleurs","brand:wikidata":"Q17629431","brand:wikipedia":"fr:Emova Group",name:"Monceau Fleurs",shop:"florist"}},"shop/florist|Азалия":{tags:{brand:"Азалия",name:"Азалия",shop:"florist"}},"shop/florist|Мосцветторг":{countryCodes:["ru"],tags:{brand:"Мосцветторг",name:"Мосцветторг",shop:"florist"}},"shop/frame|Aaron Brothers":{countryCodes:["us"],matchNames:["aaron brothers art & framing","aaron brothers custom framing"],tags:{brand:"Aaron Brothers","brand:wikidata":"Q64979251",name:"Aaron Brothers",shop:"frame"}},"shop/frozen_food|Dream Dinners":{countryCodes:["us"],matchTags:["amenity/fast_food","amenity/restaurant"],tags:{brand:"Dream Dinners","brand:wikidata":"Q5306355","brand:wikipedia":"en:Dream Dinners",name:"Dream Dinners",opening_hours:"\"by appointment\"",shop:"frozen_food"}},"shop/frozen_food|Farmfoods":{countryCodes:["gb"],matchTags:["shop/convenience","shop/supermarket"],tags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"frozen_food"}},"shop/frozen_food|Fulton's Foods":{countryCodes:["gb"],matchTags:["shop/convenience","shop/supermarket"],tags:{brand:"Fulton's Foods","brand:wikidata":"Q6112633","brand:wikipedia":"en:Fulton's Foods",name:"Fulton's Foods",shop:"frozen_food"}},"shop/frozen_food|Iceland":{matchTags:["shop/convenience"],tags:{brand:"Iceland","brand:wikidata":"Q721810","brand:wikipedia":"en:Iceland (supermarket)",name:"Iceland",shop:"frozen_food"}},"shop/frozen_food|Picard":{countryCodes:["be","fr","lu"],tags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",shop:"frozen_food"}},"shop/frozen_food|Thiriet":{countryCodes:["fr"],tags:{brand:"Thiriet","brand:wikidata":"Q3524695","brand:wikipedia":"fr:Thiriet (entreprise)",name:"Thiriet",shop:"frozen_food"}},"shop/funeral_directors|PFG":{countryCodes:["fr"],tags:{brand:"PFG","brand:wikidata":"Q3396087","brand:wikipedia":"fr:Pompes funèbres générales",name:"PFG",official_name:"Pompes Funèbres Générales",shop:"funeral_directors"}},"shop/funeral_directors|Roblot":{countryCodes:["fr"],tags:{brand:"Roblot","brand:wikidata":"Q63247414",name:"Roblot",shop:"funeral_directors"}},"shop/funeral_directors|Roc-Eclerc":{countryCodes:["fr"],tags:{brand:"Roc-Eclerc","brand:wikidata":"Q62558102",name:"Roc-Eclerc",shop:"funeral_directors"}},"shop/funeral_directors|The Co-operative Funeralcare":{countryCodes:["gb"],tags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"}},"shop/furniture|AHF":{countryCodes:["gb"],tags:{brand:"AHF","brand:wikidata":"Q50132485",name:"AHF",shop:"furniture"}},"shop/furniture|Aaron's":{countryCodes:["ca","us"],tags:{brand:"Aaron's","brand:wikidata":"Q10397787","brand:wikipedia":"en:Aaron's, Inc.",name:"Aaron's",shop:"furniture"}},"shop/furniture|American Signature Furniture":{countryCodes:["us"],tags:{brand:"American Signature Furniture","brand:wikidata":"Q63859411",name:"American Signature Furniture",shop:"furniture"}},"shop/furniture|Arhaus":{countryCodes:["us"],tags:{brand:"Arhaus","brand:wikidata":"Q35689887","brand:wikipedia":"en:Arhaus",name:"Arhaus",shop:"furniture"}},"shop/furniture|Ashley HomeStore":{countryCodes:["ca","us"],matchNames:["ashley furniture homestore"],tags:{alt_name:"Ashley Furniture",brand:"Ashley HomeStore","brand:wikidata":"Q4805437","brand:wikipedia":"en:Ashley HomeStore",name:"Ashley HomeStore",shop:"furniture"}},"shop/furniture|Asko":{countryCodes:["fi"],tags:{brand:"Asko","brand:wikidata":"Q11853132","brand:wikipedia":"fi:Asko",name:"Asko",shop:"furniture"}},"shop/furniture|Askona":{countryCodes:["ru"],tags:{brand:"Askona","brand:wikidata":"Q4071319","brand:wikipedia":"ru:Аскона (компания)",name:"Askona",shop:"furniture"}},"shop/furniture|Black Red White":{tags:{brand:"Black Red White","brand:wikidata":"Q4921546","brand:wikipedia":"en:Black Red White",name:"Black Red White",shop:"furniture"}},"shop/furniture|BoConcept":{tags:{brand:"BoConcept","brand:wikidata":"Q11338915","brand:wikipedia":"en:BoConcept",name:"BoConcept",shop:"furniture"}},"shop/furniture|Bob's Discount Furniture":{countryCodes:["us"],tags:{brand:"Bob's Discount Furniture","brand:wikidata":"Q4931582","brand:wikipedia":"en:Bob's Discount Furniture",name:"Bob's Discount Furniture",shop:"furniture"}},"shop/furniture|Bodzio":{countryCodes:["pl"],tags:{brand:"Bodzio","brand:wikidata":"Q20034845","brand:wikipedia":"pl:Fabryka Mebli Bodzio",name:"Bodzio",shop:"furniture"}},"shop/furniture|But":{countryCodes:["fr"],tags:{brand:"But","brand:wikidata":"Q18720442","brand:wikipedia":"en:BUT (retailer)",name:"But",shop:"furniture"}},"shop/furniture|Cabinets To Go":{countryCodes:["us"],tags:{brand:"Cabinets To Go","brand:wikidata":"Q25245346","brand:wikipedia":"en:Cabinets To Go",name:"Cabinets To Go",shop:"furniture"}},"shop/furniture|Casa":{countryCodes:["be","ch","es","fr","it","lu","pt"],matchTags:["shop/interior_decoration"],tags:{brand:"Casa","brand:wikidata":"Q1991755","brand:wikipedia":"fr:Casa (enseigne)",name:"Casa",shop:"furniture"}},"shop/furniture|Conforama":{countryCodes:["ch","es","fr","it","lu"],tags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"}},"shop/furniture|Crate & Barrel":{countryCodes:["us"],tags:{brand:"Crate & Barrel","brand:wikidata":"Q5182604","brand:wikipedia":"en:Crate & Barrel",name:"Crate & Barrel",shop:"furniture"}},"shop/furniture|DFS":{countryCodes:["gb"],tags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"}},"shop/furniture|Dunelm":{countryCodes:["gb"],matchNames:["dunelm hill"],tags:{brand:"Dunelm","brand:wikidata":"Q5315020","brand:wikipedia":"en:Dunelm Group",name:"Dunelm",shop:"furniture"}},"shop/furniture|Dänisches Bettenlager":{countryCodes:["at","de"],matchTags:["shop/bed"],tags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"}},"shop/furniture|Ethan Allen":{countryCodes:["ca","us"],tags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (company)",name:"Ethan Allen",shop:"furniture"}},"shop/furniture|Fly":{countryCodes:["fr"],tags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"}},"shop/furniture|Freedom":{countryCodes:["au"],matchNames:["freedom furniture"],tags:{brand:"Freedom","brand:wikidata":"Q5500546","brand:wikipedia":"en:Freedom Furniture",name:"Freedom",shop:"furniture"}},"shop/furniture|Furniture Village":{countryCodes:["gb"],tags:{brand:"Furniture Village","brand:wikidata":"Q5509685","brand:wikipedia":"en:Furniture Village",name:"Furniture Village",shop:"furniture"}},"shop/furniture|HSL":{countryCodes:["gb"],tags:{brand:"HSL","brand:wikidata":"Q64284324",name:"HSL",official_name:"High Seat Limited",shop:"furniture"}},"shop/furniture|Harveys":{countryCodes:["gb"],nomatch:["amenity/fast_food|Harvey's"],tags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"}},"shop/furniture|Havertys":{countryCodes:["us"],tags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"}},"shop/furniture|IKEA":{tags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"}},"shop/furniture|Isku":{countryCodes:["fi"],tags:{brand:"Isku","brand:wikidata":"Q11865127","brand:wikipedia":"fi:Isku (yritys)",name:"Isku",shop:"furniture"}},"shop/furniture|JYSK":{tags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"}},"shop/furniture|Jerome's Furniture":{countryCodes:["us"],tags:{brand:"Jerome's Furniture","brand:wikidata":"Q16997693","brand:wikipedia":"en:Jerome's",name:"Jerome's Furniture",shop:"furniture",short_name:"Jerome's"}},"shop/furniture|Kika":{countryCodes:["at"],tags:{brand:"Kika","brand:wikidata":"Q256456","brand:wikipedia":"de:Kika (Möbelhaus)",name:"Kika",shop:"furniture"}},"shop/furniture|Kwantum":{countryCodes:["nl"],tags:{brand:"Kwantum","brand:wikidata":"Q2262591","brand:wikipedia":"nl:Kwantum (winkelketen)",name:"Kwantum",shop:"furniture"}},"shop/furniture|La-Z-Boy":{countryCodes:["ca","us"],matchNames:["la-z-boy furniture gallery"],tags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"}},"shop/furniture|Laura Ashley Home":{countryCodes:["gb"],tags:{brand:"Laura Ashley","brand:wikidata":"Q1523089","brand:wikipedia":"en:Laura Ashley plc",name:"Laura Ashley Home",shop:"furniture"}},"shop/furniture|Leen Bakker":{countryCodes:["nl"],tags:{brand:"Leen Bakker","brand:wikidata":"Q3333662","brand:wikipedia":"nl:Leen Bakker",name:"Leen Bakker",shop:"furniture"}},"shop/furniture|Leiner":{countryCodes:["at"],tags:{brand:"Leiner","brand:wikidata":"Q1661472","brand:wikipedia":"de:Rudolf Leiner (Unternehmen)",name:"Leiner",shop:"furniture"}},"shop/furniture|LoveSac":{countryCodes:["us"],tags:{brand:"LoveSac","brand:wikidata":"Q6690181","brand:wikipedia":"en:LoveSac",name:"LoveSac",shop:"furniture"}},"shop/furniture|Maisons du Monde":{countryCodes:["be","ch","de","es","fr","gb","it","lu"],tags:{brand:"Maisons du Monde","brand:wikidata":"Q3280364","brand:wikipedia":"fr:Maisons du Monde",name:"Maisons du Monde",shop:"furniture"}},"shop/furniture|Möbelix":{countryCodes:["at","cz","hu","sk"],tags:{brand:"Möbelix","brand:wikidata":"Q877547","brand:wikipedia":"hu:Möbelix",name:"Möbelix",shop:"furniture"}},"shop/furniture|Mömax":{countryCodes:["at","de","hu","si"],tags:{brand:"Mömax","brand:wikidata":"Q56388481","brand:wikipedia":"hu:Mömax",name:"Mömax",shop:"furniture"}},"shop/furniture|Oak Furnitureland":{countryCodes:["gb"],tags:{brand:"Oak Furnitureland","brand:wikidata":"Q16959724","brand:wikipedia":"en:Oak Furniture Land",name:"Oak Furnitureland",shop:"furniture"}},"shop/furniture|Poltronesofà":{countryCodes:["be","ch","cy","fr","it","mt"],tags:{brand:"Poltronesofà","brand:wikidata":"Q80833069",name:"Poltronesofà",shop:"furniture"}},"shop/furniture|Pottery Barn":{countryCodes:["au","ca","mx","ph","us"],tags:{brand:"Pottery Barn","brand:wikidata":"Q3400126","brand:wikipedia":"en:Pottery Barn",name:"Pottery Barn",shop:"furniture"}},"shop/furniture|Raymour & Flanigan":{countryCodes:["us"],tags:{brand:"Raymour & Flanigan","brand:wikidata":"Q7299290","brand:wikipedia":"en:Raymour & Flanigan",name:"Raymour & Flanigan",shop:"furniture"}},"shop/furniture|Rent-A-Center":{countryCodes:["mx","us"],tags:{brand:"Rent-A-Center","brand:wikidata":"Q7313497","brand:wikipedia":"en:Rent-A-Center",name:"Rent-A-Center",shop:"furniture"}},"shop/furniture|Restoration Hardware":{countryCodes:["ca","us"],tags:{brand:"Restoration Hardware","brand:wikidata":"Q7316207","brand:wikipedia":"en:Restoration Hardware",name:"Restoration Hardware",shop:"furniture"}},"shop/furniture|Roche Bobois":{tags:{brand:"Roche Bobois","brand:wikidata":"Q3437504","brand:wikipedia":"fr:Roche Bobois",name:"Roche Bobois",shop:"furniture"}},"shop/furniture|Roller":{countryCodes:["de","lu"],tags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"}},"shop/furniture|Rooms To Go":{countryCodes:["us"],tags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"}},"shop/furniture|Rutar":{countryCodes:["at"],tags:{brand:"Rutar","brand:wikidata":"Q22910157","brand:wikipedia":"de:RUTAR Group",name:"Rutar",shop:"furniture"}},"shop/furniture|ScS":{countryCodes:["gb"],tags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"}},"shop/furniture|The Brick":{countryCodes:["ca"],tags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"}},"shop/furniture|Urban Barn":{countryCodes:["ca"],tags:{brand:"Urban Barn","brand:wikidata":"Q62515207",name:"Urban Barn",shop:"furniture"}},"shop/furniture|Value City Furniture":{countryCodes:["us"],tags:{brand:"Value City Furniture","brand:wikidata":"Q63859417",name:"Value City Furniture",shop:"furniture"}},"shop/furniture|XXXLutz":{countryCodes:["at","de"],tags:{brand:"XXXLutz","brand:wikidata":"Q70339467","brand:wikipedia":"de:XXXLutz",name:"XXXLutz",shop:"furniture"}},"shop/furniture|west elm":{tags:{brand:"west elm","brand:wikidata":"Q7985021","brand:wikipedia":"en:Williams-Sonoma",name:"west elm",shop:"furniture"}},"shop/furniture|İstikbal":{countryCodes:["tr"],tags:{brand:"İstikbal","brand:wikidata":"Q6031999","brand:wikipedia":"tr:İstikbal",name:"İstikbal",shop:"furniture"}},"shop/furniture|Много мебели":{countryCodes:["ru"],tags:{brand:"Много мебели",name:"Много мебели",shop:"furniture"}},"shop/furniture|ニトリ":{countryCodes:["jp"],tags:{brand:"ニトリ","brand:en":"Nitori","brand:ja":"ニトリ","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori","name:ja":"ニトリ",shop:"furniture"}},"shop/games|Games Workshop":{countryCodes:["de","fr","gb","nl","us"],tags:{brand:"Games Workshop","brand:wikidata":"Q587270","brand:wikipedia":"en:Games Workshop",name:"Games Workshop",shop:"games"}},"shop/garden_centre|Bellaflora":{countryCodes:["at"],tags:{brand:"Bellaflora","brand:wikidata":"Q815787","brand:wikipedia":"de:Bellaflora",name:"Bellaflora",shop:"garden_centre"}},"shop/garden_centre|Blue Diamond Garden Centres":{tags:{brand:"Blue Diamond Garden Centres","brand:wikidata":"Q81097207",name:"Blue Diamond Garden Centres",shop:"garden_centre"}},"shop/garden_centre|Dehner":{countryCodes:["at","de"],tags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",shop:"garden_centre"}},"shop/garden_centre|Dobbies":{countryCodes:["gb"],tags:{brand:"Dobbies","brand:wikidata":"Q5286529","brand:wikipedia":"en:Dobbies Garden Centres",name:"Dobbies",shop:"garden_centre"}},"shop/garden_centre|Gamm Vert":{countryCodes:["fr"],tags:{brand:"Gamm Vert","brand:wikidata":"Q3095006","brand:wikipedia":"fr:Gamm Vert",name:"Gamm Vert",shop:"garden_centre"}},"shop/garden_centre|Intratuin":{countryCodes:["be","nl"],tags:{brand:"Intratuin","brand:wikidata":"Q2927176","brand:wikipedia":"nl:Intratuin",name:"Intratuin",shop:"garden_centre"}},"shop/garden_centre|Jardiland":{countryCodes:["fr"],tags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",shop:"garden_centre"}},"shop/garden_centre|Otter Garden Centres":{countryCodes:["gb"],tags:{brand:"Otter Garden Centres","brand:wikidata":"Q81095450",name:"Otter Garden Centres",shop:"garden_centre"}},"shop/garden_centre|Point Vert":{countryCodes:["fr"],tags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"}},"shop/garden_centre|Truffaut":{countryCodes:["fr"],tags:{brand:"Truffaut","brand:wikidata":"Q3162640","brand:wikipedia":"fr:Jardineries Truffaut",name:"Truffaut",shop:"garden_centre"}},"shop/garden_centre|Walmart Garden Center":{tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Garden Center",shop:"garden_centre"}},"shop/garden_centre|Welkoop":{countryCodes:["nl"],tags:{brand:"Welkoop","brand:wikidata":"Q72799253",name:"Welkoop",shop:"garden_centre"}},"shop/garden_centre|Wyevale":{countryCodes:["gb"],tags:{brand:"Wyevale","brand:wikidata":"Q7735819","brand:wikipedia":"en:Wyevale Garden Centres",name:"Wyevale",shop:"garden_centre"}},"shop/garden_centre|ZG Raiffeisen":{countryCodes:["de"],nomatch:["amenity/fuel|ZG Raiffeisen"],tags:{brand:"ZG Raiffeisen","brand:wikidata":"Q136135","brand:wikipedia":"de:ZG Raiffeisen",name:"ZG Raiffeisen",shop:"garden_centre"}},"shop/gas|Airgas":{countryCodes:["us"],matchTags:["amenity/fuel","shop/fuel","shop/trade"],tags:{brand:"Airgas","brand:wikidata":"Q80635","brand:wikipedia":"en:Airgas",name:"Airgas",shop:"gas"}},"shop/gas|AmeriGas":{countryCodes:["us"],nomatch:["amenity/vending_machine|AmeriGas"],tags:{brand:"AmeriGas","brand:wikidata":"Q23130318","brand:wikipedia":"en:AmeriGas","fuel:lpg":"yes",name:"AmeriGas",shop:"gas"}},"shop/gas|Ferrellgas":{countryCodes:["us"],tags:{brand:"Ferrellgas","brand:wikidata":"Q5445299","brand:wikipedia":"en:Ferrellgas","fuel:lpg":"yes",name:"Ferrellgas",shop:"gas"}},"shop/gift|American Greetings":{countryCodes:["us"],tags:{brand:"American Greetings","brand:wikidata":"Q464767","brand:wikipedia":"en:American Greetings",name:"American Greetings",shop:"gift"}},"shop/gift|Card Factory":{countryCodes:["gb","im"],tags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"}},"shop/gift|Carlton Cards":{countryCodes:["ca"],matchNames:["carlton"],tags:{brand:"Carlton Cards","brand:wikidata":"Q5042968","brand:wikipedia":"en:Carlton Cards",name:"Carlton Cards",shop:"gift"}},"shop/gift|Clintons":{countryCodes:["gb"],matchNames:["clinton cards"],tags:{brand:"Clintons","brand:wikidata":"Q5134299","brand:wikipedia":"en:Clintons",name:"Clintons",shop:"gift"}},"shop/gift|Cracker Barrel":{countryCodes:["us"],nomatch:["amenity/restaurant|Cracker Barrel"],tags:{brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store",shop:"gift"}},"shop/gift|Disney Store":{countryCodes:["ca","fr","us"],matchNames:["the disney store"],matchTags:["shop/toys"],tags:{brand:"Disney Store","brand:wikidata":"Q1047009","brand:wikipedia":"en:Disney Store",name:"Disney Store",shop:"gift"}},"shop/gift|Edible Arrangements":{countryCodes:["ca","us"],tags:{brand:"Edible Arrangements","brand:wikidata":"Q5337996","brand:wikipedia":"en:Edible Arrangements",name:"Edible Arrangements",shop:"gift"}},"shop/gift|Hallmark":{countryCodes:["ca","gb","us"],matchNames:["hallmark gold crown"],tags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"}},"shop/gift|Nanu-Nana":{countryCodes:["at","de"],tags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"}},"shop/gift|Papyrus":{countryCodes:["us"],tags:{brand:"Papyrus","brand:wikidata":"Q28222692","brand:wikipedia":"en:Papyrus (company)",name:"Papyrus",shop:"gift"}},"shop/gift|Showcase":{countryCodes:["ca","us"],tags:{brand:"Showcase","brand:wikidata":"Q7503163","brand:wikipedia":"en:Showcase (retailer)",name:"Showcase",shop:"gift"}},"shop/gift|Spencer's":{countryCodes:["ca","us"],tags:{brand:"Spencer Gifts","brand:wikidata":"Q7576055","brand:wikipedia":"en:Spencer Gifts",name:"Spencer's",official_name:"Spencer Gifts",shop:"gift"}},"shop/gift|Things Remembered":{countryCodes:["ca","us"],tags:{brand:"Things Remembered","brand:wikidata":"Q54958287","brand:wikipedia":"en:Things Remembered",name:"Things Remembered",shop:"gift"}},"shop/gift|Wereldwinkel":{countryCodes:["be","nl"],tags:{brand:"Wereldwinkel",name:"Wereldwinkel",shop:"gift"}},"shop/greengrocer|Produce Junction":{countryCodes:["us"],tags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"}},"shop/hairdresser_supply|Sally Beauty Supply":{countryCodes:["be","ca","cl","de","es","fr","gb","ie","mx","nl","pe","pr","us"],matchNames:["sally beauty"],tags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"}},"shop/hairdresser|Camille Albane":{countryCodes:["fr"],tags:{brand:"Camille Albane","brand:wikidata":"Q62965183",name:"Camille Albane",shop:"hairdresser"}},"shop/hairdresser|Coiff&Co":{countryCodes:["fr"],tags:{brand:"Coiff&Co",name:"Coiff&Co",shop:"hairdresser"}},"shop/hairdresser|Cost Cutters":{countryCodes:["us"],tags:{brand:"Cost Cutters","brand:wikidata":"Q62029366",name:"Cost Cutters",shop:"hairdresser"}},"shop/hairdresser|Dessange":{tags:{brand:"Dessange","brand:wikidata":"Q62979914",name:"Dessange",shop:"hairdresser"}},"shop/hairdresser|Fantastic Sams":{countryCodes:["us"],tags:{brand:"Fantastic Sams","brand:wikidata":"Q5434222","brand:wikipedia":"en:Fantastic Sams",name:"Fantastic Sams",shop:"hairdresser"}},"shop/hairdresser|First Choice Haircutters":{countryCodes:["ca"],tags:{brand:"First Choice Haircutters","brand:wikidata":"Q5452622","brand:wikipedia":"en:First Choice Haircutters",name:"First Choice Haircutters",shop:"hairdresser"}},"shop/hairdresser|Fodrászat":{tags:{brand:"Fodrászat",name:"Fodrászat",shop:"hairdresser"}},"shop/hairdresser|Franck Provost":{countryCodes:["be","fr","pl"],tags:{brand:"Franck Provost","brand:wikidata":"Q62805922","brand:wikipedia":"fr:Franck Provost (Salons de coiffure)",name:"Franck Provost",shop:"hairdresser"}},"shop/hairdresser|Great Clips":{countryCodes:["ca","us"],tags:{brand:"Great Clips","brand:wikidata":"Q5598967","brand:wikipedia":"en:Great Clips",name:"Great Clips",shop:"hairdresser"}},"shop/hairdresser|Hair Cuttery":{countryCodes:["us"],tags:{brand:"Hair Cuttery","brand:wikidata":"Q5639484","brand:wikipedia":"en:Hair Cuttery",name:"Hair Cuttery",shop:"hairdresser"}},"shop/hairdresser|Hair Express":{countryCodes:["de","us"],tags:{brand:"Hair Express","brand:wikidata":"Q57550814",name:"Hair Express",shop:"hairdresser"}},"shop/hairdresser|Hair Studio":{tags:{brand:"Hair Studio",name:"Hair Studio",shop:"hairdresser"}},"shop/hairdresser|Hairkiller":{countryCodes:["at","de","lu"],tags:{brand:"Hairkiller","brand:wikidata":"Q58305998",name:"Hairkiller",shop:"hairdresser"}},"shop/hairdresser|Jean Louis David":{countryCodes:["es","fr","it","pl"],tags:{brand:"Jean Louis David","brand:wikidata":"Q64445174",name:"Jean Louis David",shop:"hairdresser"}},"shop/hairdresser|Kirpykla":{countryCodes:["lt"],tags:{brand:"Kirpykla",name:"Kirpykla",shop:"hairdresser"}},"shop/hairdresser|Klier":{countryCodes:["at","cz","de","sk"],tags:{brand:"Klier","brand:wikidata":"Q1465159","brand:wikipedia":"de:Frisör Klier",name:"Klier",shop:"hairdresser"}},"shop/hairdresser|Klipp":{countryCodes:["at"],tags:{brand:"Klipp","brand:wikidata":"Q1737304","brand:wikipedia":"de:Klipp Frisör",name:"Klipp",shop:"hairdresser"}},"shop/hairdresser|Magicuts":{tags:{brand:"Magicuts",name:"Magicuts",shop:"hairdresser"}},"shop/hairdresser|Marco Aldany":{tags:{brand:"Marco Aldany",name:"Marco Aldany",shop:"hairdresser"}},"shop/hairdresser|Mastercuts":{countryCodes:["ca","us"],tags:{brand:"Mastercuts","brand:wikidata":"Q64026258",name:"Mastercuts",shop:"hairdresser"}},"shop/hairdresser|Pascal Coste":{countryCodes:["fr"],tags:{brand:"Pascal Coste","brand:wikidata":"Q66555630",name:"Pascal Coste",shop:"hairdresser"}},"shop/hairdresser|Saint Algue":{tags:{brand:"Saint Algue","brand:wikidata":"Q62973210",name:"Saint Algue",shop:"hairdresser"}},"shop/hairdresser|Sport Clips":{countryCodes:["ca","us"],matchNames:["sport clips haircuts","sports clips"],tags:{brand:"Sport Clips","brand:wikidata":"Q7579310",name:"Sport Clips",shop:"hairdresser"}},"shop/hairdresser|Super Cut":{tags:{brand:"Super Cut","brand:wikidata":"Q64139077",name:"Super Cut",shop:"hairdresser"}},"shop/hairdresser|Supercuts":{countryCodes:["ca","gb","us"],tags:{brand:"Supercuts","brand:wikidata":"Q7643239","brand:wikipedia":"en:Supercuts",name:"Supercuts",shop:"hairdresser"}},"shop/hairdresser|Tchip":{countryCodes:["fr"],tags:{brand:"Tchip","brand:wikidata":"Q62871250",name:"Tchip",shop:"hairdresser"}},"shop/hairdresser|The Salon at Ulta Beauty":{countryCodes:["us"],tags:{alt_name:"Ulta Salon",brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"The Salon at Ulta Beauty",shop:"hairdresser"}},"shop/hairdresser|Toni & Guy":{tags:{brand:"Toni & Guy","brand:wikidata":"Q324784","brand:wikipedia":"en:Toni & Guy",name:"Toni & Guy",shop:"hairdresser"}},"shop/hairdresser|Top Hair":{countryCodes:["de"],tags:{brand:"Top Hair","brand:wikidata":"Q62523343",name:"Top Hair",shop:"hairdresser"}},"shop/hairdresser|Виктория":{nomatch:["amenity/cafe|Виктория","shop/supermarket|Виктория"],tags:{brand:"Виктория",name:"Виктория",shop:"hairdresser"}},"shop/hairdresser|Елена":{tags:{brand:"Елена",name:"Елена",shop:"hairdresser"}},"shop/hairdresser|Каприз":{countryCodes:["ru","ua"],tags:{brand:"Каприз",name:"Каприз",shop:"hairdresser"}},"shop/hairdresser|Фея":{countryCodes:["ru","ua"],tags:{brand:"Фея",name:"Фея",shop:"hairdresser"}},"shop/hairdresser|Чио Чио":{tags:{brand:"Чио Чио",name:"Чио Чио",shop:"hairdresser"}},"shop/hardware|220 вольт":{countryCodes:["by","ru","ua"],tags:{brand:"220 вольт","brand:en":"220 Volt","brand:ru":"220 вольт","brand:wikidata":"Q18635304","brand:wikipedia":"ru:220 Вольт (компания)",name:"220 вольт","name:en":"220 Volt","name:ru":"220 вольт",shop:"hardware"}},"shop/hardware|Harbor Freight Tools":{countryCodes:["us"],tags:{brand:"Harbor Freight Tools","brand:wikidata":"Q5654601","brand:wikipedia":"en:Harbor Freight Tools",name:"Harbor Freight Tools",shop:"hardware"}},"shop/hardware|Home Hardware":{countryCodes:["ca"],nomatch:["shop/doityourself|Home Hardware Building Centre"],tags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware",shop:"hardware"}},"shop/hardware|K-Rauta":{countryCodes:["fi"],tags:{brand:"K-Rauta","brand:wikidata":"Q4206187","brand:wikipedia":"fi:K-Rauta",name:"K-Rauta",shop:"hardware"}},"shop/hardware|Kodin Terra":{countryCodes:["fi"],tags:{brand:"Kodin Terra","brand:wikidata":"Q11872038","brand:wikipedia":"fi:Kodin Terra",name:"Kodin Terra",shop:"hardware"}},"shop/hardware|True Value":{countryCodes:["us"],tags:{brand:"True Value","brand:wikidata":"Q7847545","brand:wikipedia":"en:True Value",name:"True Value",shop:"hardware"}},"shop/hardware|Würth":{countryCodes:["be","de","fi","fr","it","no"],tags:{brand:"Würth","brand:wikidata":"Q679750","brand:wikipedia":"de:Würth-Gruppe",name:"Würth",shop:"hardware"}},"shop/hardware|Мосхозторг":{countryCodes:["ru"],tags:{brand:"Мосхозторг","brand:wikidata":"Q62499092",name:"Мосхозторг",shop:"hardware"}},"shop/hardware|Хозяин":{countryCodes:["by","ru","ua"],tags:{brand:"Хозяин",name:"Хозяин",shop:"hardware"}},"shop/hardware|ロフト":{countryCodes:["jp"],tags:{brand:"ロフト","brand:en":"Loft","brand:ja":"ロフト","brand:wikidata":"Q5358428","brand:wikipedia":"ja:ロフト (雑貨店)",name:"ロフト","name:en":"Loft","name:ja":"ロフト",shop:"hardware"}},"shop/health_food|Holland & Barrett":{countryCodes:["gb","ie","nl"],matchTags:["shop/chemist","shop/supermarket"],tags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"}},"shop/hearing_aids|Amplifon":{tags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"}},"shop/hearing_aids|Audika":{countryCodes:["ch","fr"],tags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"}},"shop/hearing_aids|Beter Horen":{countryCodes:["nl"],tags:{brand:"Beter Horen",name:"Beter Horen",shop:"hearing_aids"}},"shop/hearing_aids|Geers":{countryCodes:["de","pl"],tags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"}},"shop/hearing_aids|Kind Hörgeräte":{countryCodes:["de"],matchNames:["kind"],tags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"}},"shop/hearing_aids|Miracle-Ear":{countryCodes:["ca","us"],tags:{brand:"Miracle-Ear","brand:wikidata":"Q17108572","brand:wikipedia":"en:Miracle-Ear",name:"Miracle-Ear",shop:"hearing_aids"}},"shop/hearing_aids|Neuroth":{countryCodes:["at","de"],tags:{brand:"Neuroth","brand:wikidata":"Q15836645","brand:wikipedia":"de:Neuroth AG",name:"Neuroth",shop:"hearing_aids"}},"shop/hifi|Bang & Olufsen":{tags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"}},"shop/hifi|Bose":{tags:{brand:"Bose","brand:wikidata":"Q328568","brand:wikipedia":"en:Bose Corporation",name:"Bose",shop:"hifi"}},"shop/hifi|Devialet":{tags:{brand:"Devialet","brand:wikidata":"Q3025419","brand:wikipedia":"fr:Devialet",name:"Devialet",shop:"hifi"}},"shop/hifi|Harman Kardon":{tags:{brand:"Harman Kardon","brand:wikidata":"Q1476454","brand:wikipedia":"en:Harman Kardon",name:"Harman Kardon",shop:"hifi"}},"shop/hifi|JBL":{tags:{brand:"JBL","brand:wikidata":"Q1153754","brand:wikipedia":"en:JBL",name:"JBL",shop:"hifi"}},"shop/hobby|アニメイト":{countryCodes:["jp"],tags:{brand:"アニメイト","brand:en":"Animate","brand:ja":"アニメイト","brand:wikidata":"Q1041890","brand:wikipedia":"ja:アニメイト",name:"アニメイト","name:en":"Animate","name:ja":"アニメイト",shop:"hobby"}},"shop/houseware|At Home":{countryCodes:["us"],matchNames:["garden ridge"],tags:{brand:"At Home","brand:wikidata":"Q5522290","brand:wikipedia":"en:At Home (store)",name:"At Home",shop:"houseware"}},"shop/houseware|Bed Bath & Beyond":{countryCodes:["ca","mx","nz","us"],matchTags:["shop/department_store"],tags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"}},"shop/houseware|Blokker":{countryCodes:["be","nl"],tags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"}},"shop/houseware|Cervera":{countryCodes:["se"],tags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"}},"shop/houseware|HomeGoods":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"}},"shop/houseware|Kitchen Collection":{countryCodes:["us"],tags:{brand:"Kitchen Collection","brand:wikidata":"Q64149036",name:"Kitchen Collection",shop:"houseware"}},"shop/houseware|Lagerhaus":{matchTags:["shop/doityourself"],tags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"houseware"}},"shop/houseware|Lakeland":{countryCodes:["gb"],tags:{brand:"Lakeland","brand:wikidata":"Q16256199","brand:wikipedia":"en:Lakeland (company)",name:"Lakeland",shop:"houseware"}},"shop/houseware|Le Creuset":{matchTags:["shop/kitchen"],tags:{brand:"Le Creuset","brand:wikidata":"Q555861","brand:wikipedia":"en:Le Creuset",name:"Le Creuset",shop:"houseware"}},"shop/houseware|Marskramer":{countryCodes:["nl"],tags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"}},"shop/houseware|Old Time Pottery":{countryCodes:["us"],tags:{brand:"Old Time Pottery","brand:wikidata":"Q7085222","brand:wikipedia":"en:Old Time Pottery",name:"Old Time Pottery",shop:"houseware"}},"shop/houseware|Stokes":{countryCodes:["ca"],tags:{brand:"Stokes","brand:wikidata":"Q66481382",name:"Stokes",shop:"houseware"}},"shop/houseware|Sur La Table":{countryCodes:["us"],tags:{brand:"Sur La Table","brand:wikidata":"Q7645220","brand:wikipedia":"en:Sur La Table",name:"Sur La Table",shop:"houseware"}},"shop/houseware|Tescoma":{tags:{brand:"Tescoma",name:"Tescoma",shop:"houseware"}},"shop/houseware|The Container Store":{countryCodes:["us"],tags:{brand:"The Container Store","brand:wikidata":"Q7727445","brand:wikipedia":"en:The Container Store",name:"The Container Store",shop:"houseware"}},"shop/houseware|The Range":{countryCodes:["gb","ie"],matchTags:["shop/department_store","shop/doityourself","shop/furniture","shop/garden_centre","shop/variety_store"],tags:{brand:"The Range","brand:wikidata":"Q7759409",name:"The Range",shop:"houseware"}},"shop/houseware|Think Kitchen":{countryCodes:["ca"],tags:{brand:"Think Kitchen","brand:wikidata":"Q66481390",name:"Think Kitchen",shop:"houseware"}},"shop/houseware|Tuesday Morning":{countryCodes:["us"],matchTags:["shop/convenience","shop/department_store","shop/gift","shop/variety_store"],tags:{brand:"Tuesday Morning","brand:wikidata":"Q7851426","brand:wikipedia":"en:Tuesday Morning",name:"Tuesday Morning",shop:"houseware"}},"shop/houseware|WMF":{countryCodes:["at","de"],tags:{brand:"WMF","brand:wikidata":"Q451423","brand:wikipedia":"en:WMF Group",name:"WMF",shop:"houseware"}},"shop/houseware|Williams-Sonoma":{countryCodes:["ca","us"],matchNames:["william sonoma"],matchTags:["shop/furniture"],tags:{brand:"Williams-Sonoma","brand:wikidata":"Q2581220","brand:wikipedia":"en:Williams-Sonoma",name:"Williams-Sonoma",shop:"houseware"}},"shop/houseware|Xenos":{countryCodes:["de","nl"],tags:{brand:"Xenos","brand:wikidata":"Q16547960","brand:wikipedia":"nl:Xenos",name:"Xenos",shop:"houseware"}},"shop/houseware|Еврочехол":{countryCodes:["ru"],tags:{brand:"Еврочехол",name:"Еврочехол",shop:"houseware"}},"shop/houseware|京王アートマン":{countryCodes:["jp"],matchNames:["アートマン"],matchTags:["shop/variety_store"],tags:{brand:"京王アートマン","brand:en":"Keio Atman","brand:ja":"京王アートマン","brand:wikidata":"Q11374580","brand:wikipedia":"ja:京王アートマン",name:"京王アートマン","name:en":"Keio Atman","name:ja":"京王アートマン",shop:"houseware"}},"shop/interior_decoration|Centrakor":{countryCodes:["fr"],matchTags:["shop/variety_store"],tags:{brand:"Centrakor","brand:wikidata":"Q64079345","brand:wikipedia":"fr:Centrakor",name:"Centrakor",shop:"interior_decoration"}},"shop/interior_decoration|Depot":{countryCodes:["at","ch","de"],tags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"}},"shop/interior_decoration|Fired Earth":{countryCodes:["gb"],matchTags:["shop/bathroom_furnishing","shop/tiles"],tags:{brand:"Fired Earth","brand:wikidata":"Q20594569",name:"Fired Earth",shop:"interior_decoration"}},"shop/interior_decoration|Hemtex":{countryCodes:["ee","fi","se"],tags:{brand:"Hemtex","brand:wikidata":"Q10521868","brand:wikipedia":"sv:Hemtex",name:"Hemtex",shop:"interior_decoration"}},"shop/interior_decoration|HomeSense":{countryCodes:["ca","gb","ie","us"],matchTags:["shop/department_store","shop/furniture"],tags:{brand:"HomeSense","brand:wikidata":"Q16844433","brand:wikipedia":"en:HomeSense",name:"HomeSense",shop:"interior_decoration"}},"shop/interior_decoration|Kirkland's":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"Kirkland's","brand:wikidata":"Q6415714","brand:wikipedia":"en:Kirkland's",name:"Kirkland's",shop:"interior_decoration"}},"shop/interior_decoration|Pier 1 Imports":{countryCodes:["ca","us"],matchTags:["shop/furniture"],tags:{brand:"Pier 1 Imports","brand:wikidata":"Q7191691","brand:wikipedia":"en:Pier 1 Imports",name:"Pier 1 Imports",shop:"interior_decoration"}},"shop/interior_decoration|Ten Thousand Villages":{countryCodes:["ca","us"],matchNames:["10 thousand villages","10,000 villages"],matchTags:["shop/boutique","shop/gift"],tags:{brand:"Ten Thousand Villages","brand:wikidata":"Q2403252","brand:wikipedia":"en:Ten Thousand Villages",fair_trade:"only",name:"Ten Thousand Villages",shop:"interior_decoration"}},"shop/interior_decoration|World Market":{countryCodes:["us"],matchNames:["cost plus"],matchTags:["shop/department_store","shop/furniture","shop/supermarket"],tags:{brand:"World Market","brand:wikidata":"Q5174750","brand:wikipedia":"en:Cost Plus World Market",name:"World Market",official_name:"Cost Plus World Market",shop:"interior_decoration"}},"shop/interior_decoration|Zara Home":{tags:{brand:"Zara Home",name:"Zara Home",shop:"interior_decoration"}},"shop/jewelry|Alex and Ani":{countryCodes:["us"],tags:{brand:"Alex and Ani","brand:wikidata":"Q16198810","brand:wikipedia":"en:Alex and Ani",name:"Alex and Ani",shop:"jewelry"}},"shop/jewelry|Apart":{countryCodes:["pl"],tags:{brand:"Apart","brand:wikidata":"Q11686561","brand:wikipedia":"pl:Apart",name:"Apart",shop:"jewelry"}},"shop/jewelry|Bijou Brigitte":{tags:{brand:"Bijou Brigitte","brand:wikidata":"Q599545","brand:wikipedia":"de:Bijou Brigitte",name:"Bijou Brigitte",shop:"jewelry"}},"shop/jewelry|Cartier":{tags:{brand:"Cartier","brand:wikidata":"Q538587","brand:wikipedia":"en:Cartier (jeweler)",name:"Cartier",shop:"jewelry"}},"shop/jewelry|Charm Diamond Centres":{countryCodes:["ca"],matchNames:["charm diamond","charm diamond centre"],tags:{brand:"Charm Diamond Centres","brand:wikidata":"Q5086396","brand:wikipedia":"en:Charm Diamond Centres",name:"Charm Diamond Centres",shop:"jewelry"}},"shop/jewelry|Chisholm Hunter":{countryCodes:["gb"],tags:{brand:"Chisholm Hunter","brand:wikidata":"Q66662001",name:"Chisholm Hunter",shop:"jewelry"}},"shop/jewelry|Christ":{countryCodes:["ch","de","nl"],tags:{brand:"Christ","brand:wikidata":"Q1077957","brand:wikipedia":"de:Christ (Juwelier)",name:"Christ",shop:"jewelry"}},"shop/jewelry|David Yurman":{countryCodes:["us"],tags:{brand:"David Yurman","brand:wikidata":"Q5241390","brand:wikipedia":"en:David Yurman",name:"David Yurman",shop:"jewelry"}},"shop/jewelry|Ernest Jones":{countryCodes:["gb"],tags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"}},"shop/jewelry|F.Hinds":{countryCodes:["gb"],tags:{brand:"F.Hinds","brand:wikidata":"Q5423915","brand:wikipedia":"en:F. Hinds",name:"F.Hinds",shop:"jewelry"}},"shop/jewelry|Fred Meyer":{countryCodes:["us"],nomatch:["shop/department_store|Fred Meyer","shop/supermarket|Fred Meyer"],tags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"jewelry"}},"shop/jewelry|Goldsmiths":{countryCodes:["gb"],tags:{brand:"Goldsmiths","brand:wikidata":"Q16993095","brand:wikipedia":"en:Goldsmiths (retailer)",name:"Goldsmiths",shop:"jewelry"}},"shop/jewelry|Guldfynd":{countryCodes:["se"],tags:{brand:"Guldfynd","brand:wikidata":"Q49099223","brand:wikipedia":"sv:Guldfynd",name:"Guldfynd",shop:"jewelry"}},"shop/jewelry|H.Samuel":{countryCodes:["gb"],tags:{brand:"H.Samuel","brand:wikidata":"Q5628558","brand:wikipedia":"en:H. Samuel",name:"H.Samuel",shop:"jewelry"}},"shop/jewelry|Helzberg Diamonds":{countryCodes:["us"],tags:{brand:"Helzberg Diamonds","brand:wikidata":"Q16995161","brand:wikipedia":"en:Helzberg Diamonds",name:"Helzberg Diamonds",shop:"jewelry"}},"shop/jewelry|Histoire d'Or":{countryCodes:["be","fr","it","nl"],tags:{brand:"Histoire d'Or","brand:wikidata":"Q62529245",name:"Histoire d'Or",shop:"jewelry"}},"shop/jewelry|Icing":{countryCodes:["ca","us"],tags:{brand:"Icing",name:"Icing",shop:"jewelry"}},"shop/jewelry|James Avery Jewelry":{countryCodes:["us"],tags:{brand:"James Avery Jewelry","brand:wikidata":"Q6129024","brand:wikipedia":"en:James Avery Artisan Jewelry",name:"James Avery Jewelry",shop:"jewelry"}},"shop/jewelry|Jared":{countryCodes:["us"],tags:{brand:"Jared","brand:wikidata":"Q62029282",name:"Jared",shop:"jewelry"}},"shop/jewelry|Jubiler":{tags:{brand:"Jubiler",name:"Jubiler",shop:"jewelry"}},"shop/jewelry|Julien d'Orcel":{countryCodes:["fr"],tags:{brand:"Julien d'Orcel","brand:wikidata":"Q62497463",name:"Julien d'Orcel",shop:"jewelry"}},"shop/jewelry|Kay Jewelers":{countryCodes:["us"],tags:{brand:"Kay Jewelers","brand:wikidata":"Q62029290",name:"Kay Jewelers",shop:"jewelry"}},"shop/jewelry|Lucardi":{countryCodes:["nl"],tags:{brand:"Lucardi","brand:wikidata":"Q13774940","brand:wikipedia":"nl:Lucardi",name:"Lucardi",shop:"jewelry"}},"shop/jewelry|Michael Hill":{countryCodes:["au","ca","nz","us"],tags:{brand:"Michael Hill","brand:wikidata":"Q3308250","brand:wikipedia":"en:Michael Hill Jeweller",name:"Michael Hill",shop:"jewelry"}},"shop/jewelry|PNJ":{countryCodes:["vn"],tags:{brand:"PNJ","brand:wikidata":"Q61129183","brand:wikipedia":"vi:PNJ",name:"PNJ",shop:"jewelry"}},"shop/jewelry|Pandora":{tags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"}},"shop/jewelry|Peoples Jewellers":{countryCodes:["ca"],tags:{brand:"Peoples Jewellers","brand:wikidata":"Q64995558",name:"Peoples Jewellers",shop:"jewelry"}},"shop/jewelry|Piercing Pagoda":{countryCodes:["us"],tags:{brand:"Piercing Pagoda",name:"Piercing Pagoda",shop:"jewelry"}},"shop/jewelry|Swarovski":{tags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"}},"shop/jewelry|Thomas Sabo":{tags:{brand:"Thomas Sabo","brand:wikidata":"Q13415716","brand:wikipedia":"en:Thomas Sabo",name:"Thomas Sabo",shop:"jewelry"}},"shop/jewelry|Tiffany & Company":{countryCodes:["us"],matchNames:["tiffany","tiffany's"],tags:{brand:"Tiffany & Company","brand:wikidata":"Q1066858","brand:wikipedia":"en:Tiffany & Co.",name:"Tiffany & Company",official_name:"Tiffany & Co.",shop:"jewelry"}},"shop/jewelry|Tous":{tags:{brand:"Tous","brand:wikidata":"Q3815128","brand:wikipedia":"en:Tous (company)",name:"Tous",shop:"jewelry"}},"shop/jewelry|Warren James":{countryCodes:["gb"],tags:{brand:"Warren James","brand:wikidata":"Q19604616","brand:wikipedia":"en:Warren James Jewellers",name:"Warren James",shop:"jewelry"}},"shop/jewelry|Zales":{countryCodes:["us"],tags:{brand:"Zales","brand:wikidata":"Q8065305","brand:wikipedia":"en:Zale Corporation",name:"Zales",shop:"jewelry"}},"shop/jewelry|Адамас":{countryCodes:["ru"],tags:{brand:"Адамас","brand:en":"Adamas","brand:ru":"Адамас","brand:wikidata":"Q62393709",name:"Адамас","name:en":"Adamas","name:ru":"Адамас",shop:"jewelry"}},"shop/jewelry|Золотая мечта":{countryCodes:["by"],tags:{brand:"Золотая мечта","brand:en":"Gold Dream","brand:ru":"Золотая мечта",name:"Золотая мечта","name:en":"Gold Dream","name:ru":"Золотая мечта",shop:"jewelry"}},"shop/kiosk|Lietuvos spauda":{countryCodes:["lt"],tags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"}},"shop/kiosk|Lotto":{tags:{brand:"Lotto",name:"Lotto",shop:"kiosk"}},"shop/kiosk|Narvesen":{countryCodes:["lt","lv","no"],tags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"}},"shop/kiosk|Pressbyrån":{countryCodes:["se"],tags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"}},"shop/kiosk|R-Kioski":{countryCodes:["fi"],tags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"}},"shop/kiosk|Ruch":{countryCodes:["pl"],tags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"}},"shop/kiosk|Tisak":{countryCodes:["hr"],tags:{brand:"Tisak","brand:wikidata":"Q12643627","brand:wikipedia":"hr:Tisak (tvrtka)",name:"Tisak",shop:"kiosk"}},"shop/kiosk|k kiosk":{countryCodes:["ch"],nomatch:["shop/newsagent|k kiosk"],tags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"}},"shop/kiosk|Роспечать":{tags:{brand:"Роспечать",name:"Роспечать",shop:"kiosk"}},"shop/kiosk|キヨスク":{countryCodes:["jp"],tags:{brand:"キヨスク","brand:en":"KIOSK","brand:ja":"キヨスク","brand:wikidata":"Q1334796","brand:wikipedia":"ja:キヨスク",name:"キヨスク","name:en":"KIOSK","name:ja":"キヨスク",shop:"kiosk"}},"shop/kitchen|Cuisinella":{countryCodes:["fr","tn"],tags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"}},"shop/kitchen|Ixina":{countryCodes:["ae","au","be","bf","bh","bj","ca","ci","cm","cn","cz","dz","ee","eg","fr","gh","hr","ke","kw","lu","ly","ma","mu","nl","pl","qa","ro","ru","sa","se","sn","tg","th","tn","vn"],tags:{brand:"Ixina","brand:wikidata":"Q3156424","brand:wikipedia":"fr:Ixina",name:"Ixina",shop:"kitchen"}},"shop/kitchen|Magnet":{countryCodes:["gb"],matchNames:["magnet kitchens"],tags:{brand:"Magnet","brand:wikidata":"Q6731427","brand:wikipedia":"en:Magnet Kitchens",name:"Magnet",shop:"kitchen"}},"shop/kitchen|Mobalpa":{countryCodes:["be","fr","gb"],tags:{brand:"Mobalpa","brand:wikidata":"Q3317571","brand:wikipedia":"fr:Mobalpa",name:"Mobalpa",shop:"kitchen"}},"shop/kitchen|Schmidt":{countryCodes:["be","es","fr","gb"],tags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"}},"shop/kitchen|SoCoo'c":{countryCodes:["fr"],tags:{brand:"SoCoo'c","brand:wikidata":"Q62783840","brand:wikipedia":"fr:SoCoo'c",name:"SoCoo'c",shop:"kitchen"}},"shop/lottery|Loterías y Apuestas del Estado":{countryCodes:["es"],matchNames:["apuestas del estado","lotería del estado","loterías del estado"],tags:{brand:"Loterías y Apuestas del Estado","brand:wikidata":"Q1311806","brand:wikipedia":"es:Loterías y Apuestas del Estado",name:"Loterías y Apuestas del Estado",shop:"lottery"}},"shop/lottery|ONCE":{countryCodes:["es"],nomatch:["amenity/social_facility|ONCE"],tags:{brand:"ONCE","brand:wikidata":"Q1750397","brand:wikipedia":"es:Organización Nacional de Ciegos Españoles",name:"ONCE",official_name:"Organización Nacional de Ciegos Españoles",shop:"lottery"}},"shop/massage|Hand & Stone Massage and Facial Spa":{countryCodes:["us"],matchNames:["hand and stone massage"],tags:{brand:"Hand & Stone Massage and Facial Spa","brand:wikidata":"Q55613342","brand:wikipedia":"en:Hand & Stone Massage and Facial Spa",name:"Hand & Stone Massage and Facial Spa",shop:"massage"}},"shop/massage|Massage Envy":{countryCodes:["us"],matchNames:["massage envy spa"],tags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"}},"shop/massage|Massage Heights":{countryCodes:["ca","us"],tags:{brand:"Massage Heights","brand:wikidata":"Q64573956",name:"Massage Heights",shop:"massage"}},"shop/medical_supply|Pofam-Poznań":{countryCodes:["pl"],tags:{brand:"Pofam-Poznań","brand:wikidata":"Q62057457",name:"Pofam-Poznań",shop:"medical_supply"}},"shop/medical_supply|Ортека":{countryCodes:["ru"],tags:{brand:"Ортека","brand:wikidata":"Q62393660",name:"Ортека",shop:"medical_supply"}},"shop/mobile_phone|3 Store":{countryCodes:["gb","it"],matchNames:["3","three","three store"],tags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"}},"shop/mobile_phone|A1":{countryCodes:["at","bg","by","hr","si"],matchNames:["velcom","velcom|a1","велком"],nomatch:["shop/telecommunication|A1"],tags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"mobile_phone"}},"shop/mobile_phone|AT&T":{countryCodes:["mx","us"],matchNames:["att mobile","att mobility","att wireless"],tags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"}},"shop/mobile_phone|Bell":{countryCodes:["ca"],matchNames:["bell mobile","bell mobility","bell wireless"],nomatch:["shop/telecommunication|Bell"],tags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"}},"shop/mobile_phone|Best Buy Mobile":{countryCodes:["ca"],nomatch:["amenity/vending_machine|Best Buy Express","shop/electronics|Best Buy"],tags:{brand:"Best Buy Mobile","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Bitė":{countryCodes:["lt"],tags:{brand:"Bitė","brand:wikidata":"Q796010","brand:wikipedia":"lt:Bitės grupė",name:"Bitė",shop:"mobile_phone"}},"shop/mobile_phone|Boost Mobile":{countryCodes:["us"],matchNames:["boost"],tags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Bouygues Telecom":{countryCodes:["fr"],tags:{brand:"Bouygues Telecom","brand:wikidata":"Q581438","brand:wikipedia":"fr:Bouygues Telecom",name:"Bouygues Telecom",shop:"mobile_phone"}},"shop/mobile_phone|Carphone Warehouse":{countryCodes:["by","gb","ie"],matchNames:["the carphone warehouse"],tags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"}},"shop/mobile_phone|Chatr":{countryCodes:["ca"],matchNames:["chatr mobile"],tags:{brand:"Chatr","brand:wikidata":"Q5087766","brand:wikipedia":"en:Chatr",name:"Chatr",shop:"mobile_phone"}},"shop/mobile_phone|Claro":{tags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"}},"shop/mobile_phone|Cricket Wireless":{countryCodes:["us"],matchNames:["cricket"],tags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"}},"shop/mobile_phone|Digicel":{tags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"}},"shop/mobile_phone|EE":{countryCodes:["gb"],tags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"}},"shop/mobile_phone|Entel":{countryCodes:["cl","pe"],tags:{brand:"Entel","brand:wikidata":"Q450420","brand:wikipedia":"en:Entel (Chile)",name:"Entel",shop:"mobile_phone"}},"shop/mobile_phone|Fido":{countryCodes:["ca"],tags:{brand:"Fido","brand:wikidata":"Q3071471","brand:wikipedia":"en:Fido Solutions",name:"Fido",shop:"mobile_phone"}},"shop/mobile_phone|Freedom Mobile":{countryCodes:["ca"],matchNames:["freedom","wind mobile"],tags:{brand:"Freedom Mobile","brand:wikidata":"Q8023931","brand:wikipedia":"en:Freedom Mobile",name:"Freedom Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Koodo":{countryCodes:["ca"],tags:{brand:"Koodo","brand:wikidata":"Q6430529","brand:wikipedia":"en:Koodo Mobile",name:"Koodo",shop:"mobile_phone"}},"shop/mobile_phone|MEO":{matchNames:["loja meo"],tags:{brand:"MEO","brand:wikidata":"Q3306167","brand:wikipedia":"en:MEO (telecommunications company)",name:"MEO",shop:"mobile_phone"}},"shop/mobile_phone|MTN":{matchNames:["agence mtn"],tags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"}},"shop/mobile_phone|MetroPCS":{countryCodes:["us"],nomatch:["amenity/bank|Metro Bank~(UK)","amenity/bank|Metrobank~(Philippines)","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Peru)","shop/supermarket|Metro~(Quebec)","shop/wholesale|Metro"],tags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"}},"shop/mobile_phone|Mobilcom Debitel":{countryCodes:["de","ir"],matchNames:["debitel"],tags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"}},"shop/mobile_phone|Moov":{countryCodes:["ci","tg"],matchNames:["agence moov"],tags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"}},"shop/mobile_phone|Movistar":{tags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"}},"shop/mobile_phone|NOS":{tags:{brand:"NOS","brand:wikidata":"Q136331","brand:wikipedia":"en:NOS (Portuguese media company)",name:"NOS",shop:"mobile_phone"}},"shop/mobile_phone|O2":{countryCodes:["cz","de","gb","ie","sk"],tags:{brand:"O2","brand:wikidata":"Q1759255","brand:wikipedia":"en:Telefónica Europe",name:"O2",shop:"mobile_phone"}},"shop/mobile_phone|Optie1":{countryCodes:["nl"],tags:{brand:"Optie1","brand:wikidata":"Q62393564",name:"Optie1",shop:"mobile_phone"}},"shop/mobile_phone|Optus":{countryCodes:["au"],tags:{brand:"Optus","brand:wikidata":"Q865038",name:"Optus",shop:"mobile_phone"}},"shop/mobile_phone|Orange":{matchNames:["agence orange"],tags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange (entreprise)",name:"Orange",shop:"mobile_phone"}},"shop/mobile_phone|Personal":{countryCodes:["ar","py"],tags:{brand:"Personal","brand:wikidata":"Q10933021","brand:wikipedia":"es:Personal (Argentina)",name:"Personal",shop:"mobile_phone"}},"shop/mobile_phone|Phone House":{countryCodes:["de","es","fr","nl","pt"],matchNames:["the phone house"],tags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"}},"shop/mobile_phone|Play":{countryCodes:["pl"],tags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"pl:Play (sieć telefonii komórkowej)",name:"Play",shop:"mobile_phone"}},"shop/mobile_phone|Plus":{countryCodes:["pl"],nomatch:["amenity/fuel|Gas Plus","shop/supermarket|PLUS"],tags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"}},"shop/mobile_phone|Rogers":{countryCodes:["ca"],tags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"}},"shop/mobile_phone|SFR":{countryCodes:["fr","lu"],matchNames:["espace sfr"],tags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"}},"shop/mobile_phone|Sprint":{nomatch:["amenity/fuel|Sprint"],tags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"}},"shop/mobile_phone|T-Mobile":{tags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"}},"shop/mobile_phone|TIM":{countryCodes:["br","it"],tags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"}},"shop/mobile_phone|Tbooth Wireless":{countryCodes:["ca"],tags:{brand:"Tbooth Wireless","brand:wikidata":"Q7690597",name:"Tbooth Wireless",shop:"mobile_phone"}},"shop/mobile_phone|Telcel":{countryCodes:["cu","mx"],tags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"}},"shop/mobile_phone|Tele2":{tags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"}},"shop/mobile_phone|Telekom":{countryCodes:["de","hu","ro","si","sk"],matchNames:["telekom shop"],tags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"}},"shop/mobile_phone|Telenor":{tags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"}},"shop/mobile_phone|Telia":{countryCodes:["dk","fi","lt","no","se"],tags:{brand:"Telia","brand:wikidata":"Q862303","brand:wikipedia":"en:Telia Company",name:"Telia",shop:"mobile_phone"}},"shop/mobile_phone|Telstra":{countryCodes:["au"],tags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"}},"shop/mobile_phone|Telus":{countryCodes:["ca"],tags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"}},"shop/mobile_phone|Turkcell":{countryCodes:["cy","tr"],tags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"}},"shop/mobile_phone|U.S. Cellular":{countryCodes:["us"],tags:{brand:"U.S. Cellular","brand:wikidata":"Q2466256","brand:wikipedia":"en:U.S. Cellular",name:"U.S. Cellular",shop:"mobile_phone"}},"shop/mobile_phone|UQモバイル":{countryCodes:["jp"],matchNames:["ユーキューモバイル"],tags:{brand:"UQモバイル","brand:en":"UQ mobile","brand:ja":"UQモバイル","brand:wikidata":"Q11252091","brand:wikipedia":"ja:UQコミュニケーションズ",name:"UQモバイル","name:en":"UQ mobile","name:ja":"UQモバイル",shop:"mobile_phone"}},"shop/mobile_phone|Verizon Wireless":{countryCodes:["us"],matchNames:["verizon"],tags:{brand:"Verizon Wireless","brand:wikidata":"Q919641","brand:wikipedia":"en:Verizon Wireless",name:"Verizon Wireless",shop:"mobile_phone"}},"shop/mobile_phone|Vidéotron":{countryCodes:["ca"],tags:{brand:"Vidéotron","brand:wikidata":"Q2396830","brand:wikipedia":"en:Vidéotron",name:"Vidéotron",shop:"mobile_phone"}},"shop/mobile_phone|Virgin Mobile~(Canada)":{countryCodes:["ca"],tags:{brand:"Virgin Mobile","brand:wikidata":"Q3560641","brand:wikipedia":"en:Virgin Mobile Canada",name:"Virgin Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Vivo":{tags:{brand:"Vivo","brand:wikidata":"Q18301787","brand:wikipedia":"en:Vivo (technology company)",name:"Vivo",shop:"mobile_phone"}},"shop/mobile_phone|Vodafone":{matchNames:["vodafone shop"],tags:{brand:"Vodafone","brand:wikidata":"Q122141","brand:wikipedia":"en:Vodafone",name:"Vodafone",shop:"mobile_phone"}},"shop/mobile_phone|WIFI_ETECSA":{countryCodes:["cu"],tags:{brand:"WIFI_ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"WIFI_ETECSA",shop:"mobile_phone"}},"shop/mobile_phone|WOW! Mobile Boutique":{countryCodes:["ca"],tags:{brand:"WOW! Mobile Boutique","brand:wikidata":"Q64847598",name:"WOW! Mobile Boutique",shop:"mobile_phone"}},"shop/mobile_phone|Wind":{countryCodes:["it"],tags:{brand:"Wind","brand:wikidata":"Q650467","brand:wikipedia":"en:WIND (Italy)",name:"Wind",shop:"mobile_phone"}},"shop/mobile_phone|WirelessWave":{countryCodes:["ca"],tags:{brand:"WirelessWave","brand:wikidata":"Q8026815",name:"WirelessWave",shop:"mobile_phone"}},"shop/mobile_phone|Yoigo":{countryCodes:["es"],tags:{brand:"Yoigo","brand:wikidata":"Q2630989","brand:wikipedia":"en:Yoigo",name:"Yoigo",shop:"mobile_phone"}},"shop/mobile_phone|auショップ":{countryCodes:["jp"],matchNames:["au"],tags:{brand:"au","brand:ja":"au","brand:wikidata":"Q307110","brand:wikipedia":"ja:Au (携帯電話)",name:"auショップ","name:en":"au","name:ja":"auショップ",shop:"mobile_phone"}},"shop/mobile_phone|lifecell":{matchNames:["магазин lifecell"],matchTags:["shop/telecommunication"],tags:{brand:"lifecell","brand:wikidata":"Q1936895","brand:wikipedia":"uk:Lifecell",name:"lifecell",shop:"mobile_phone"}},"shop/mobile_phone|Алло":{countryCodes:["md","ua"],tags:{brand:"Алло","brand:wikidata":"Q18683057","brand:wikipedia":"uk:Алло (торгова мережа)",name:"Алло",shop:"mobile_phone"}},"shop/mobile_phone|Билайн":{countryCodes:["kg","kz","ru"],tags:{brand:"Билайн","brand:en":"Beeline","brand:wikidata":"Q402880","brand:wikipedia":"en:Beeline (brand)",name:"Билайн","name:en":"Beeline",shop:"mobile_phone"}},"shop/mobile_phone|Евросеть":{countryCodes:["by","kz","ru","ua"],tags:{brand:"Евросеть","brand:en":"Euroset","brand:wikidata":"Q65310","brand:wikipedia":"en:Euroset",name:"Евросеть","name:en":"Euroset",shop:"mobile_phone"}},"shop/mobile_phone|Київстар":{countryCodes:["ua"],tags:{brand:"Київстар","brand:en":"Kyivstar","brand:wikidata":"Q2288463","brand:wikipedia":"en:Kyivstar",name:"Київстар","name:en":"Kyivstar",shop:"mobile_phone"}},"shop/mobile_phone|МТС":{countryCodes:["by","ru","ua"],nomatch:["shop/telecommunication|МТС"],tags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"}},"shop/mobile_phone|Мегафон":{countryCodes:["ru","tj"],tags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"}},"shop/mobile_phone|НА'СВЯЗИ":{countryCodes:["by"],tags:{brand:"НА'СВЯЗИ",name:"НА'СВЯЗИ",shop:"mobile_phone"}},"shop/mobile_phone|Связной":{countryCodes:["by","ru","uz"],tags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"}},"shop/mobile_phone|Теле2":{countryCodes:["ru"],tags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"}},"shop/mobile_phone|ソフトバンク":{countryCodes:["jp"],tags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:ja":"ソフトバンク","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom","name:ja":"ソフトバンク",shop:"mobile_phone"}},"shop/mobile_phone|ソフトバンクショップ":{countryCodes:["jp"],tags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:ja":"ソフトバンクショップ","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop","name:ja":"ソフトバンクショップ",shop:"mobile_phone"}},"shop/mobile_phone|ドコモショップ":{countryCodes:["jp"],tags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:ja":"ドコモショップ","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop","name:ja":"ドコモショップ",shop:"mobile_phone"}},"shop/mobile_phone|ワイモバイル":{countryCodes:["jp"],matchNames:["ymobile, y!mobile"],tags:{brand:"ワイモバイル","brand:en":"Ymobile","brand:ja":"ワイモバイル","brand:wikidata":"Q5322556","brand:wikipedia":"ja:ワイモバイル",name:"ワイモバイル","name:en":"Ymobile","name:ja":"ワイモバイル",shop:"mobile_phone"}},"shop/mobile_phone|台灣大哥大":{countryCodes:["tw"],tags:{brand:"台灣大哥大","brand:en":"Taiwan Mobile","brand:wikidata":"Q5943259","brand:wikipedia":"zh:台灣大哥大","brand:zh":"台灣大哥大",name:"台灣大哥大","name:en":"Taiwan Mobile","name:zh":"台灣大哥大",shop:"mobile_phone"}},"shop/money_lender|ACE Cash Express":{countryCodes:["us"],matchNames:["ace"],tags:{brand:"ACE Cash Express","brand:wikidata":"Q24260962","brand:wikipedia":"en:ACE Cash Express",name:"ACE Cash Express",shop:"money_lender"}},"shop/money_lender|Advance America":{countryCodes:["us"],tags:{brand:"Advance America","brand:wikidata":"Q4686044",name:"Advance America",shop:"money_lender"}},"shop/money_lender|California Check Cashing Stores":{countryCodes:["us"],matchNames:["california check cashing"],tags:{brand:"California Check Cashing Stores","brand:wikidata":"Q64390932",name:"California Check Cashing Stores",shop:"money_lender"}},"shop/money_lender|Cash Money":{tags:{brand:"Cash Money",name:"Cash Money",shop:"money_lender"}},"shop/money_lender|Cash Store":{countryCodes:["us"],tags:{brand:"Cash Store","brand:wikidata":"Q61943411",name:"Cash Store",shop:"money_lender"}},"shop/money_lender|CashMax":{countryCodes:["us"],tags:{brand:"CashMax","brand:wikidata":"Q69365478",name:"CashMax",shop:"money_lender"}},"shop/money_lender|Check Into Cash":{countryCodes:["us"],tags:{brand:"Check Into Cash","brand:wikidata":"Q16961246","brand:wikipedia":"en:Check Into Cash",name:"Check Into Cash",shop:"money_lender"}},"shop/money_lender|CheckSmart":{countryCodes:["us"],tags:{alt_name:"Check$mart",brand:"CheckSmart","brand:wikidata":"Q65640213",name:"CheckSmart",shop:"money_lender"}},"shop/money_lender|First Virginia":{countryCodes:["us"],matchNames:["1st virginia"],tags:{brand:"First Virginia","brand:wikidata":"Q65640051",name:"First Virginia",shop:"money_lender"}},"shop/money_lender|Money Mart":{countryCodes:["ca","us"],tags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"}},"shop/money_lender|Moneytree":{countryCodes:["us"],tags:{brand:"Moneytree","brand:wikidata":"Q6899361","brand:wikipedia":"en:Moneytree",name:"Moneytree",shop:"money_lender"}},"shop/motorcycle|Harley-Davidson":{tags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"}},"shop/motorcycle|Honda":{nomatch:["shop/car|Honda"],tags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"}},"shop/motorcycle|Kawasaki":{tags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"}},"shop/motorcycle|Motortrade":{countryCodes:["ph"],tags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"}},"shop/motorcycle|Suzuki":{nomatch:["shop/car|Suzuki"],tags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"}},"shop/motorcycle|Yamaha":{tags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"}},"shop/motorcycle|レッドバロン":{countryCodes:["jp"],tags:{brand:"レッドバロン","brand:en":"Red Baron","brand:ja":"レッドバロン","brand:wikidata":"Q11349759","brand:wikipedia":"ja:レッドバロン (企業)",name:"レッドバロン","name:en":"Red Baron","name:ja":"レッドバロン",shop:"motorcycle"}},"shop/music|FYE":{countryCodes:["us"],tags:{brand:"FYE","brand:wikidata":"Q5424141","brand:wikipedia":"en:FYE (retailer)",name:"FYE",shop:"music"}},"shop/music|HMV":{countryCodes:["ca","gb"],tags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"}},"shop/music|Sunrise Records":{countryCodes:["ca","gb"],tags:{brand:"Sunrise Records","brand:wikidata":"Q30600373","brand:wikipedia":"en:Sunrise Records (retailer)",name:"Sunrise Records",shop:"music"}},"shop/music|TSUTAYA":{nomatch:["shop/books|TSUTAYA","shop/video|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"}},"shop/music|タワーレコード":{countryCodes:["jp"],matchNames:["タワレコ"],tags:{alt_name:"タワレコ",brand:"タワーレコード","brand:en":"Tower Records","brand:ja":"タワーレコード","brand:wikidata":"Q3265728","brand:wikipedia":"ja:タワーレコード",name:"タワーレコード","name:en":"Tower Records","name:ja":"タワーレコード",shop:"music"}},"shop/musical_instrument|Guitar Center":{countryCodes:["us"],tags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"}},"shop/musical_instrument|Long & McQuade":{countryCodes:["ca"],tags:{brand:"Long & McQuade","brand:wikidata":"Q6672180","brand:wikipedia":"en:Long & McQuade",name:"Long & McQuade",shop:"musical_instrument"}},"shop/newsagent|Cigo":{countryCodes:["de","nl"],tags:{brand:"Cigo","brand:wikidata":"Q62391977",name:"Cigo",shop:"newsagent"}},"shop/newsagent|Hudson News":{tags:{brand:"Hudson News",name:"Hudson News",shop:"newsagent"}},"shop/newsagent|Inmedio":{countryCodes:["hu","pl","ro"],tags:{brand:"Inmedio",name:"Inmedio",shop:"newsagent"}},"shop/newsagent|Kolporter":{countryCodes:["pl"],matchTags:["shop/kiosk"],tags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"newsagent"}},"shop/newsagent|Maison de la Presse":{countryCodes:["fr"],matchTags:["shop/books"],tags:{brand:"Maison de la Presse","brand:wikidata":"Q62085960",name:"Maison de la Presse",shop:"newsagent"}},"shop/newsagent|Martin's":{countryCodes:["gb"],matchTags:["shop/convenience"],tags:{brand:"Martin's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"Martin's",shop:"newsagent"}},"shop/newsagent|Primera":{countryCodes:["nl"],tags:{brand:"Primera","brand:wikidata":"Q2176149","brand:wikipedia":"nl:Primera (winkelketen)",name:"Primera",shop:"newsagent"}},"shop/newsagent|Relay":{matchTags:["shop/kiosk"],tags:{brand:"Relay","brand:wikidata":"Q3424298","brand:wikipedia":"en:Relay (shop)",name:"Relay",shop:"newsagent"}},"shop/newsagent|WHSmith":{matchTags:["shop/convenience","shop/kiosk","shop/stationery"],nomatch:["shop/books|WHSmith"],tags:{brand:"WHSmith","brand:wikidata":"Q1548712","brand:wikipedia":"en:WHSmith",name:"WHSmith",shop:"newsagent"}},"shop/newsagent|k kiosk":{countryCodes:["ch"],nomatch:["shop/kiosk|k kiosk"],tags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"newsagent"}},"shop/newsagent|Белсоюзпечать":{countryCodes:["by"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Витебскоблсоюзпечать","shop/newsagent|Союзпечать"],tags:{brand:"Белсоюзпечать","brand:wikidata":"Q67723214",name:"Белсоюзпечать",shop:"newsagent"}},"shop/newsagent|Витебскоблсоюзпечать":{countryCodes:["by"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Белсоюзпечать","shop/newsagent|Союзпечать"],tags:{brand:"Витебскоблсоюзпечать","brand:wikidata":"Q67723214",name:"Витебскоблсоюзпечать",shop:"newsagent"}},"shop/newsagent|Первая полоса":{countryCodes:["ru"],tags:{brand:"Первая полоса","brand:wikidata":"Q62736412",name:"Первая полоса",shop:"newsagent"}},"shop/newsagent|Роспечать":{tags:{brand:"Роспечать",name:"Роспечать",shop:"newsagent"}},"shop/newsagent|Союзпечать":{countryCodes:["ru","ua"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Белсоюзпечать","shop/newsagent|Витебскоблсоюзпечать"],tags:{brand:"Союзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Союзпечать",shop:"newsagent"}},"shop/newsagent|読売新聞":{countryCodes:["jp"],tags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"}},"shop/nutrition_supplements|GNC":{matchNames:["gnc live well"],tags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"}},"shop/nutrition_supplements|Popeye's Supplements":{countryCodes:["ca"],tags:{brand:"Popeye's Supplements","brand:wikidata":"Q71096495",name:"Popeye's Supplements",shop:"nutrition_supplements"}},"shop/nutrition_supplements|The Vitamin Shoppe":{countryCodes:["us"],matchTags:["shop/chemist"],tags:{brand:"The Vitamin Shoppe","brand:wikidata":"Q7772938","brand:wikipedia":"en:The Vitamin Shoppe",name:"The Vitamin Shoppe",shop:"nutrition_supplements"}},"shop/nutrition_supplements|Vitamin World":{countryCodes:["us"],tags:{brand:"Vitamin World","brand:wikidata":"Q7936979","brand:wikipedia":"en:Vitamin World",name:"Vitamin World",shop:"nutrition_supplements"}},"shop/optician|Alain Afflelou":{countryCodes:["be","ch","es","fr","pt"],tags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"}},"shop/optician|America's Best Contacts & Eyeglasses":{countryCodes:["us"],tags:{brand:"America's Best Contacts & Eyeglasses","brand:wikidata":"Q4742504","brand:wikipedia":"en:America's Best Contacts & Eyeglasses",name:"America's Best Contacts & Eyeglasses",shop:"optician",short_name:"America's Best"}},"shop/optician|Apollo-Optik":{countryCodes:["de"],nomatch:["amenity/pharmacy|Apollo Pharmacy"],tags:{brand:"Apollo-Optik","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo-Optik",shop:"optician",short_name:"Apollo"}},"shop/optician|Atol":{countryCodes:["fr"],tags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"}},"shop/optician|Boots Opticians":{countryCodes:["gb"],tags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician",short_name:"Boots"}},"shop/optician|Clarkson Eyecare":{countryCodes:["us"],tags:{brand:"Clarkson Eyecare","brand:wikidata":"Q64027001",healthcare:"optometrist",name:"Clarkson Eyecare",shop:"optician",short_name:"Clarkson"}},"shop/optician|Cohen's Fashion Optical":{countryCodes:["us"],matchNames:["cohen's optical"],tags:{brand:"Cohen's Fashion Optical","brand:wikidata":"Q5141313","brand:wikipedia":"en:Cohen's Fashion Optical",healthcare:"optometrist",name:"Cohen's Fashion Optical",shop:"optician",short_name:"Cohen's"}},"shop/optician|Die Brille":{countryCodes:["de"],tags:{brand:"Die Brille",name:"Die Brille",shop:"optician"}},"shop/optician|Eye Wish":{countryCodes:["nl"],tags:{brand:"Eye Wish","brand:wikidata":"Q62391641",name:"Eye Wish",shop:"optician"}},"shop/optician|Fielmann":{tags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"}},"shop/optician|GMO":{countryCodes:["cl","co","ec","pe"],tags:{brand:"GMO",name:"GMO",shop:"optician"}},"shop/optician|General Óptica":{countryCodes:["es"],tags:{brand:"General Óptica","brand:wikidata":"Q62391672",name:"General Óptica",shop:"optician"}},"shop/optician|Grand Optical":{countryCodes:["fr"],tags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"}},"shop/optician|Générale d'Optique":{countryCodes:["fr"],tags:{brand:"Générale d'Optique","brand:wikidata":"Q62391701",name:"Générale d'Optique",shop:"optician"}},"shop/optician|Hakim Optical":{countryCodes:["ca"],tags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"}},"shop/optician|Hans Anders":{countryCodes:["be","fr","nl"],tags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"}},"shop/optician|Instrumentarium":{countryCodes:["fi"],tags:{brand:"Instrumentarium","brand:wikidata":"Q11864937","brand:wikipedia":"fi:Instrumentarium",name:"Instrumentarium",shop:"optician"}},"shop/optician|Krys":{countryCodes:["fr"],tags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"}},"shop/optician|LensCrafters":{countryCodes:["ca","us"],tags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"}},"shop/optician|Lenskart":{countryCodes:["in"],tags:{brand:"Lenskart","brand:wikidata":"Q17068753",name:"Lenskart",shop:"optician"}},"shop/optician|Les Opticiens Mutualistes":{countryCodes:["fr"],tags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"}},"shop/optician|Lissac":{countryCodes:["fr"],tags:{brand:"Lissac","brand:wikidata":"Q63102559",name:"Lissac",shop:"optician"}},"shop/optician|Multiópticas~(Portugal)":{countryCodes:["pt"],tags:{brand:"Multiópticas","brand:wikidata":"Q62391722",name:"Multiópticas",shop:"optician"}},"shop/optician|Multiópticas~(Spain)":{countryCodes:["es"],tags:{brand:"Multiópticas","brand:wikidata":"Q62391719",name:"Multiópticas",shop:"optician"}},"shop/optician|Nissen":{countryCodes:["fi"],tags:{brand:"Nissen",name:"Nissen",shop:"optician"}},"shop/optician|Oakley":{countryCodes:["us"],matchTags:["shop/clothes","shop/sports"],tags:{brand:"Oakley","brand:wikidata":"Q161906","brand:wikipedia":"en:Oakley, Inc.",name:"Oakley",shop:"optician"}},"shop/optician|Oliver Peoples":{tags:{brand:"Oliver Peoples","brand:wikidata":"Q7087746","brand:wikipedia":"en:Oliver Peoples",name:"Oliver Peoples",shop:"optician"}},"shop/optician|Optic 2000":{countryCodes:["ch","fr"],tags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"}},"shop/optician|Optical Center":{tags:{brand:"Optical Center","brand:wikidata":"Q3354448","brand:wikipedia":"fr:Optical Center",name:"Optical Center",shop:"optician"}},"shop/optician|Optical Express":{countryCodes:["gb"],tags:{brand:"Optical Express","brand:wikidata":"Q7098810","brand:wikipedia":"en:Optical Express",name:"Optical Express",shop:"optician"}},"shop/optician|Opticalia":{tags:{brand:"Opticalia","brand:wikidata":"Q62082114",name:"Opticalia",shop:"optician"}},"shop/optician|Pearle Vision":{countryCodes:["ca","us"],tags:{brand:"Pearle Vision","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle Vision",shop:"optician",short_name:"Pearle"}},"shop/optician|Scrivens":{countryCodes:["gb"],tags:{brand:"Scrivens","brand:wikidata":"Q79424133",name:"Scrivens",shop:"optician"}},"shop/optician|Silmäasema":{countryCodes:["fi"],tags:{brand:"Silmäasema","brand:wikidata":"Q15994200","brand:wikipedia":"fi:Silmäasema",name:"Silmäasema",shop:"optician"}},"shop/optician|Solstice Sunglasses":{tags:{brand:"Solstice Sunglasses",name:"Solstice Sunglasses",shop:"optician",short_name:"Solstice"}},"shop/optician|Specsavers":{tags:{brand:"Specsavers","brand:wikidata":"Q2000610","brand:wikipedia":"en:Specsavers",name:"Specsavers",shop:"optician"}},"shop/optician|Sunglass Hut":{matchTags:["shop/sunglasses"],tags:{brand:"Sunglass Hut","brand:wikidata":"Q136311","brand:wikipedia":"en:Sunglass Hut",name:"Sunglass Hut",shop:"optician"}},"shop/optician|Synoptik":{countryCodes:["se"],tags:{brand:"Synoptik","brand:wikidata":"Q10687541","brand:wikipedia":"sv:Synoptik",name:"Synoptik",shop:"optician"}},"shop/optician|Synsam":{countryCodes:["fi","no","se"],tags:{brand:"Synsam","brand:wikidata":"Q12004589","brand:wikipedia":"sv:Synsam",name:"Synsam",shop:"optician"}},"shop/optician|Target Optical":{countryCodes:["us"],tags:{brand:"Target Optical","brand:wikidata":"Q19903688","brand:wikipedia":"en:Target Optical",name:"Target Optical",shop:"optician"}},"shop/optician|Vision Express":{tags:{brand:"Vision Express","brand:wikidata":"Q7936150","brand:wikipedia":"en:Vision Express",name:"Vision Express",shop:"optician"}},"shop/optician|Visionworks":{countryCodes:["us"],tags:{brand:"Visionworks","brand:wikidata":"Q5422607","brand:wikipedia":"en:Visionworks",name:"Visionworks",shop:"optician"}},"shop/optician|Warby Parker":{countryCodes:["ca","us"],tags:{brand:"Warby Parker","brand:wikidata":"Q7968882","brand:wikipedia":"en:Warby Parker",name:"Warby Parker",shop:"optician"}},"shop/optician|Люксоптика":{tags:{brand:"Люксоптика",name:"Люксоптика",shop:"optician"}},"shop/optician|Оптимист Оптика":{countryCodes:["ru"],tags:{brand:"Оптимист Оптика",name:"Оптимист Оптика",shop:"optician"}},"shop/optician|Счастливый взгляд":{tags:{brand:"Счастливый взгляд",name:"Счастливый взгляд",shop:"optician"}},"shop/optician|แว่นท็อปเจริญ":{countryCodes:["th"],tags:{brand:"แว่นท็อปเจริญ","brand:th":"แว่นท็อปเจริญ","brand:wikidata":"Q62391732",name:"แว่นท็อปเจริญ","name:th":"แว่นท็อปเจริญ",shop:"optician"}},"shop/optician|メガネの三城":{countryCodes:["jp"],tags:{brand:"メガネの三城","brand:ja":"メガネの三城",name:"メガネの三城","name:ja":"メガネの三城",shop:"optician"}},"shop/optician|メガネストアー":{countryCodes:["jp"],tags:{brand:"メガネストアー","brand:ja":"メガネストアー",name:"メガネストアー","name:ja":"メガネストアー",shop:"optician"}},"shop/optician|メガネスーパー":{countryCodes:["jp"],tags:{brand:"メガネスーパー","brand:ja":"メガネスーパー","brand:wikidata":"Q11343504","brand:wikipedia":"ja:メガネスーパー",name:"メガネスーパー","name:en":"Meganesuper","name:ja":"メガネスーパー",shop:"optician"}},"shop/optician|寶島眼鏡":{countryCodes:["zh"],tags:{brand:"寶島眼鏡","brand:wikidata":"Q62391741",name:"寶島眼鏡",shop:"optician"}},"shop/optician|眼鏡市場":{countryCodes:["jp"],tags:{brand:"眼鏡市場","brand:en":"Megane Ichiba","brand:wikidata":"Q11343506","brand:wikipedia":"ja:メガネトップ",name:"眼鏡市場","name:en":"Megane Ichiba",shop:"optician"}},"shop/outdoor|Bass Pro Shops":{countryCodes:["ca","us"],tags:{brand:"Bass Pro Shops","brand:wikidata":"Q4867953","brand:wikipedia":"en:Bass Pro Shops",name:"Bass Pro Shops",shop:"outdoor"}},"shop/outdoor|Blacks":{countryCodes:["gb"],tags:{brand:"Blacks","brand:wikidata":"Q64822933",name:"Blacks",shop:"outdoor"}},"shop/outdoor|Cabela's":{countryCodes:["ca","us"],tags:{brand:"Cabela's","brand:wikidata":"Q2793714","brand:wikipedia":"en:Cabela's",name:"Cabela's",shop:"outdoor"}},"shop/outdoor|Cotswold Outdoor":{countryCodes:["gb"],matchNames:["cotswold"],tags:{brand:"Cotswold Outdoor","brand:wikidata":"Q5175488","brand:wikipedia":"en:Cotswold Outdoor",name:"Cotswold Outdoor",shop:"outdoor"}},"shop/outdoor|Gander Outdoors":{countryCodes:["us"],matchNames:["gander mountain"],tags:{brand:"Gander Outdoors","brand:wikidata":"Q64357426","brand:wikipedia":"en:Gander Outdoors",name:"Gander Outdoors",shop:"outdoor"}},"shop/outdoor|Go Outdoors":{countryCodes:["gb"],tags:{brand:"Go Outdoors","brand:wikidata":"Q75293941",name:"Go Outdoors",shop:"outdoor"}},"shop/outdoor|Jack Wolfskin":{countryCodes:["ch","de","fr"],matchTags:["shop/clothes"],tags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"}},"shop/outdoor|Kathmandu":{countryCodes:["au","nz"],tags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"}},"shop/outdoor|Millets":{countryCodes:["gb"],tags:{brand:"Millets","brand:wikidata":"Q64822903",name:"Millets",shop:"outdoor"}},"shop/outdoor|Mountain Warehouse":{countryCodes:["gb","pl"],tags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"}},"shop/outdoor|REI":{countryCodes:["id","us"],tags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",official_name:"Recreational Equipment, Inc.",shop:"outdoor"}},"shop/outdoor|Sportsman's Warehouse":{countryCodes:["us"],tags:{brand:"Sportsman's Warehouse","brand:wikidata":"Q7579979","brand:wikipedia":"en:Sportsman's Warehouse",name:"Sportsman's Warehouse",shop:"outdoor"}},"shop/outdoor|Trespass":{countryCodes:["fr","gb","ie"],tags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"}},"shop/outpost|Wildberries":{countryCodes:["by","ru"],matchTags:["shop/clothes"],tags:{brand:"Wildberries","brand:wikidata":"Q24933714","brand:wikipedia":"ru:Wildberries",name:"Wildberries",shop:"outpost"}},"shop/paint|Benjamin Moore":{countryCodes:["ca","us"],tags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"}},"shop/paint|Comex":{tags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"}},"shop/paint|Jotun":{tags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"}},"shop/paint|National Paints":{countryCodes:["ae","qa"],tags:{brand:"National Paints","brand:wikidata":"Q62073521",name:"National Paints",shop:"paint"}},"shop/paint|Sherwin-Williams":{matchNames:["sherwin williams paint store","sherwin williams paints"],tags:{brand:"Sherwin-Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin-Williams",shop:"paint"}},"shop/party|Party City":{countryCodes:["ca","us"],tags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"}},"shop/pastry|Cookies by Design":{countryCodes:["us"],matchTags:["shop/confectionery","shop/gift"],tags:{brand:"Cookies by Design","brand:wikidata":"Q5167112","brand:wikipedia":"en:Cookies by Design",craft:"bakery",name:"Cookies by Design",shop:"pastry"}},"shop/pastry|Namur":{countryCodes:["lu"],matchTags:["shop/bakery","shop/confectionery"],tags:{brand:"Namur",name:"Namur",shop:"pastry"}},"shop/pastry|Oberweis":{countryCodes:["lu"],matchTags:["shop/bakery","shop/confectionery"],tags:{brand:"Oberweis",name:"Oberweis",shop:"pastry"}},"shop/pastry|Smallcakes":{countryCodes:["us"],tags:{brand:"Smallcakes","brand:wikidata":"Q62384749",name:"Smallcakes",shop:"pastry"}},"shop/pawnbroker|Cash Converters":{tags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"}},"shop/pawnbroker|Cebuana Lhuillier":{countryCodes:["ph"],matchNames:["agencia cebuana","m lhuillier"],tags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker",short_name:"Cebuana"}},"shop/pawnbroker|Loombard":{countryCodes:["pl"],tags:{brand:"Loombard",name:"Loombard",shop:"pawnbroker"}},"shop/pawnbroker|Palawan Pawnshop":{countryCodes:["ph"],tags:{brand:"Palawan Pawnshop","brand:wikidata":"Q62391488",name:"Palawan Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|RD Pawnshop":{countryCodes:["ph"],tags:{brand:"RD Pawnshop",name:"RD Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|Villarica Pawnshop":{countryCodes:["ph"],tags:{brand:"Villarica Pawnshop","brand:wikidata":"Q62391438",name:"Villarica Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|Скарбниця":{countryCodes:["ua"],tags:{brand:"Скарбниця",name:"Скарбниця",shop:"pawnbroker"}},"shop/pawnbroker|大黒屋":{countryCodes:["jp"],tags:{brand:"大黒屋","brand:en":"Daikokuya","brand:ja":"大黒屋","brand:wikidata":"Q11442068","brand:wikipedia":"ja:大黒屋 (チケット)",name:"大黒屋","name:en":"Daikokuya","name:ja":"大黒屋",shop:"pawnbroker"}},"shop/perfumery|Douglas":{countryCodes:["at","ch","de","es","it","nl","pl"],matchTags:["shop/beauty","shop/chemist","shop/cosmetics"],tags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"}},"shop/perfumery|FAnn":{countryCodes:["cz","sk"],tags:{brand:"FAnn","brand:wikidata":"Q62391353",name:"FAnn",shop:"perfumery"}},"shop/perfumery|ICI PARIS XL":{countryCodes:["be","lu","nl"],tags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"}},"shop/perfumery|Marionnaud":{countryCodes:["at","ch","es","fr","it","sk"],matchTags:["shop/beauty","shop/cosmetics"],tags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud",name:"Marionnaud",shop:"perfumery"}},"shop/perfumery|O Boticário":{countryCodes:["br"],tags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"}},"shop/perfumery|Perfumania":{countryCodes:["us"],matchTags:["shop/beauty","shop/cosmetics"],tags:{brand:"Perfumania","brand:wikidata":"Q72983916",name:"Perfumania",shop:"perfumery"}},"shop/perfumery|The Perfume Shop":{countryCodes:["gb"],matchTags:["shop/beauty","shop/cosmetics"],tags:{brand:"The Perfume Shop","brand:wikidata":"Q7756719","brand:wikipedia":"en:The Perfume Shop",name:"The Perfume Shop",shop:"perfumery"}},"shop/pet|Arcaplanet":{tags:{brand:"Arcaplanet",name:"Arcaplanet",shop:"pet"}},"shop/pet|Das Futterhaus":{countryCodes:["at","de"],tags:{brand:"Das Futterhaus","brand:wikidata":"Q1167914","brand:wikipedia":"de:Das Futterhaus",name:"Das Futterhaus",shop:"pet"}},"shop/pet|Faunatar":{countryCodes:["fi"],tags:{brand:"Faunatar","brand:wikidata":"Q11859415","brand:wikipedia":"fi:Faunatar",name:"Faunatar",shop:"pet"}},"shop/pet|Fressnapf":{countryCodes:["at","ch","de","hu","lu"],tags:{brand:"Fressnapf","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Fressnapf",shop:"pet"}},"shop/pet|Global Pet Foods":{countryCodes:["ca"],tags:{brand:"Global Pet Foods","brand:wikidata":"Q57985699",name:"Global Pet Foods",shop:"pet"}},"shop/pet|Maxi Zoo":{countryCodes:["be","ch","dk","fr","ie","it","pl"],tags:{brand:"Maxi Zoo","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Maxi Zoo",shop:"pet"}},"shop/pet|Mud Bay":{countryCodes:["us"],tags:{brand:"Mud Bay","brand:wikidata":"Q30324179","brand:wikipedia":"en:Mud Bay pet store",name:"Mud Bay",shop:"pet"}},"shop/pet|Musti ja Mirri":{countryCodes:["fi"],tags:{brand:"Musti ja Mirri","brand:wikidata":"Q11883558","brand:wikipedia":"fi:Musti ja Mirri",name:"Musti ja Mirri",shop:"pet"}},"shop/pet|Pet Food Express":{countryCodes:["us"],tags:{brand:"Pet Food Express","brand:wikidata":"Q7171541","brand:wikipedia":"en:Pet Food Express",name:"Pet Food Express",shop:"pet"}},"shop/pet|Pet Supermarket":{countryCodes:["us"],tags:{brand:"Pet Supermarket","brand:wikidata":"Q61968363",name:"Pet Supermarket",shop:"pet"}},"shop/pet|Pet Supplies Plus":{countryCodes:["us"],tags:{brand:"Pet Supplies Plus","brand:wikidata":"Q7171563","brand:wikipedia":"en:Pet Supplies Plus",name:"Pet Supplies Plus",shop:"pet"}},"shop/pet|Pet Valu":{countryCodes:["ca","us"],tags:{brand:"Pet Valu","brand:wikidata":"Q58009635",name:"Pet Valu",shop:"pet"}},"shop/pet|PetSmart":{countryCodes:["ca","us"],tags:{brand:"PetSmart","brand:wikidata":"Q3307147","brand:wikipedia":"en:PetSmart",name:"PetSmart",shop:"pet"}},"shop/pet|Petco":{countryCodes:["us"],tags:{brand:"Petco","brand:wikidata":"Q7171798","brand:wikipedia":"en:Petco",name:"Petco",shop:"pet"}},"shop/pet|Petland":{countryCodes:["us"],tags:{brand:"Petland","brand:wikidata":"Q17111474","brand:wikipedia":"en:Petland",name:"Petland",shop:"pet"}},"shop/pet|Petland Discounts":{countryCodes:["us"],tags:{brand:"Petland Discounts","brand:wikidata":"Q7178463","brand:wikipedia":"en:Petland Discounts",name:"Petland Discounts",shop:"pet"}},"shop/pet|Pets at Home":{countryCodes:["gb"],tags:{brand:"Pets at Home","brand:wikidata":"Q7179258","brand:wikipedia":"en:Pets at Home",name:"Pets at Home",shop:"pet"}},"shop/pet|Unleashed":{countryCodes:["us"],tags:{alt_name:"Unleashed by Petco",brand:"Unleashed","brand:wikidata":"Q62122874",name:"Unleashed",shop:"pet"}},"shop/pet|Wild Birds Unlimited":{countryCodes:["us"],tags:{brand:"Wild Birds Unlimited","brand:wikidata":"Q8000542","brand:wikipedia":"en:Wild Birds Unlimited",name:"Wild Birds Unlimited",shop:"pet"}},"shop/pet|Бетховен":{countryCodes:["ru"],tags:{brand:"Бетховен","brand:wikidata":"Q62390798",name:"Бетховен",shop:"pet"}},"shop/pet|Четыре лапы":{countryCodes:["kz","ru"],tags:{brand:"Четыре лапы","brand:wikidata":"Q62390783",name:"Четыре лапы",shop:"pet"}},"shop/pet|イオンペット":{countryCodes:["jp"],tags:{brand:"イオンペット","brand:en":"Aeonpet","brand:ja":"イオンペット","brand:wikidata":"Q11286064","brand:wikipedia":"ja:イオンペット",name:"イオンペット","name:en":"Aeonpet","name:ja":"イオンペット",shop:"pet"}},"shop/photo|Kamera Express":{countryCodes:["be","de","nl"],tags:{brand:"Kamera Express","brand:wikidata":"Q77976400",name:"Kamera Express",shop:"photo"}},"shop/photo|Kodak Express":{matchNames:["kodak"],tags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"}},"shop/photo|Max Spielmann":{countryCodes:["gb"],tags:{brand:"Max Spielmann","brand:wikidata":"Q76221051",name:"Max Spielmann",shop:"photo"}},"shop/photo|カメラのキタムラ":{countryCodes:["jp"],tags:{brand:"カメラのキタムラ","brand:en":"Kitamura Camera","brand:ja":"カメラのキタムラ","brand:wikidata":"Q11294821","brand:wikipedia":"ja:カメラのキタムラ",name:"カメラのキタムラ","name:en":"Kitamura Camera","name:ja":"カメラのキタムラ",shop:"photo"}},"shop/pottery|Sargadelos":{tags:{brand:"Sargadelos","brand:wikidata":"Q12390201","brand:wikipedia":"gl:Grupo Sargadelos",name:"Sargadelos",shop:"pottery"}},"shop/printer_ink|Cartridge World":{matchTags:["shop/computer"],tags:{brand:"Cartridge World","brand:wikidata":"Q5047439","brand:wikipedia":"en:Cartridge World",name:"Cartridge World",shop:"printer_ink"}},"shop/rental|Penske Truck Rental":{countryCodes:["ca","us"],matchTags:["amenity/car_rental","office/moving_company"],tags:{brand:"Penske Truck Rental","brand:wikidata":"Q81234570",name:"Penske Truck Rental",shop:"rental",short_name:"Penske"}},"shop/rental|Ryder":{countryCodes:["ca","gb","mx","us"],matchTags:["amenity/car_rental"],tags:{brand:"Ryder","brand:wikidata":"Q2178198","brand:wikipedia":"en:Ryder",name:"Ryder",shop:"rental"}},"shop/rental|U-Haul":{countryCodes:["ca","us"],matchNames:["uhaul neighborhood dealer"],nomatch:["shop/storage_rental|U-Haul"],tags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"rental"}},"shop/rental|United Rentals":{countryCodes:["ca","us"],matchNames:["united rental"],matchTags:["amenity/car_rental","amenity/tool_rental","shop/doityourself","shop/hardware","shop/tool_hire","shop/trade"],tags:{brand:"United Rentals","brand:wikidata":"Q7889101","brand:wikipedia":"en:United Rentals",name:"United Rentals",shop:"rental"}},"shop/seafood|Рыба":{tags:{brand:"Рыба",name:"Рыба",shop:"seafood"}},"shop/second_hand|Savers":{countryCodes:["au","ca","us"],nomatch:["shop/chemist|Savers"],tags:{brand:"Savers","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Savers",shop:"second_hand"}},"shop/second_hand|Value Village":{countryCodes:["ca","us"],tags:{brand:"Value Village","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Value Village",shop:"second_hand"}},"shop/shoes|ABC Schuh-Center":{countryCodes:["de"],matchNames:["abc schuhe"],tags:{brand:"ABC Schuh-Center","brand:wikidata":"Q66007228",name:"ABC Schuh-Center",shop:"shoes"}},"shop/shoes|ABCマート":{countryCodes:["jp"],tags:{brand:"ABCマート","brand:ja":"ABCマート","brand:wikidata":"Q11188787","brand:wikipedia":"en:ABC-Mart",name:"ABCマート","name:ja":"ABCマート",shop:"shoes"}},"shop/shoes|Aldo":{tags:{brand:"Aldo","brand:wikidata":"Q2832297","brand:wikipedia":"en:Aldo Group",name:"Aldo",shop:"shoes"}},"shop/shoes|Allen Edmonds":{countryCodes:["us"],tags:{brand:"Allen Edmonds","brand:wikidata":"Q4731627","brand:wikipedia":"en:Allen Edmonds",name:"Allen Edmonds",shop:"shoes"}},"shop/shoes|André":{countryCodes:["fr"],tags:{brand:"André","brand:wikidata":"Q2847114","brand:wikipedia":"fr:André (chaussure)",name:"André",shop:"shoes"}},"shop/shoes|Bata":{tags:{brand:"Bata","brand:wikidata":"Q688082","brand:wikipedia":"en:Bata (company)",name:"Bata",shop:"shoes"}},"shop/shoes|Belwest":{countryCodes:["by","ru"],matchNames:["белвест"],tags:{brand:"Belwest",name:"Belwest",shop:"shoes"}},"shop/shoes|Besson Chaussures":{countryCodes:["fr"],tags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",shop:"shoes"}},"shop/shoes|Birkenstock":{tags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"}},"shop/shoes|Brantano":{countryCodes:["be","gb","lu"],tags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"}},"shop/shoes|Browns":{countryCodes:["ca"],tags:{brand:"Browns","brand:wikidata":"Q16954153","brand:wikipedia":"en:Browns Shoes",name:"Browns",shop:"shoes"}},"shop/shoes|CCC":{tags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"}},"shop/shoes|Call It Spring":{tags:{brand:"Call It Spring","brand:wikidata":"Q7580363","brand:wikipedia":"en:Call It Spring",name:"Call It Spring",shop:"shoes"}},"shop/shoes|Camper":{tags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"}},"shop/shoes|Chaussea":{countryCodes:["be","es","fr","lu"],tags:{brand:"Chaussea","brand:wikidata":"Q62082044",name:"Chaussea",shop:"shoes"}},"shop/shoes|Christian Louboutin":{tags:{brand:"Christian Louboutin","brand:wikidata":"Q23681835",name:"Christian Louboutin",shop:"shoes"}},"shop/shoes|Clarks":{tags:{brand:"Clarks","brand:wikidata":"Q1095857","brand:wikipedia":"en:C. & J. Clark",name:"Clarks",shop:"shoes"}},"shop/shoes|Cole Haan":{countryCodes:["us"],tags:{brand:"Cole Haan","brand:wikidata":"Q4356504","brand:wikipedia":"en:Cole Haan",name:"Cole Haan",shop:"shoes"}},"shop/shoes|Converse":{tags:{brand:"Converse","brand:wikidata":"Q319515","brand:wikipedia":"en:Converse (shoe company)",name:"Converse",shop:"shoes"}},"shop/shoes|Courir":{tags:{brand:"Courir","brand:wikidata":"Q3001258","brand:wikipedia":"fr:Courir (chaîne de magasins)",name:"Courir",shop:"shoes"}},"shop/shoes|Crocs":{tags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"}},"shop/shoes|DSW":{countryCodes:["ca","us"],matchNames:["designer shoe warehouse","dsw shoes"],tags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:Designer Brands",name:"DSW",shop:"shoes"}},"shop/shoes|Deichmann":{tags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"}},"shop/shoes|Din sko":{countryCodes:["no","se"],tags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"}},"shop/shoes|Dosenbach":{countryCodes:["ch"],tags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"}},"shop/shoes|Dr. Martens":{matchNames:["doc marten","doc martens","doctor marten","doctor martens","martens"],tags:{brand:"Dr. Martens","brand:wikidata":"Q1126126","brand:wikipedia":"en:Dr. Martens",name:"Dr. Martens",shop:"shoes"}},"shop/shoes|Dune London":{countryCodes:["ch","de","fr","gb","nl"],tags:{brand:"Dune London","brand:wikidata":"Q65557112",name:"Dune London",shop:"shoes",short_name:"Dune"}},"shop/shoes|Ecco":{tags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"}},"shop/shoes|FLO":{countryCodes:["al","tr"],nomatch:["amenity/charging_station|FLO"],tags:{brand:"FLO","brand:wikidata":"Q61994802",name:"FLO",shop:"shoes"}},"shop/shoes|Famous Footwear":{countryCodes:["us"],tags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"}},"shop/shoes|Foot Locker":{tags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"}},"shop/shoes|Foot Solutions":{tags:{brand:"Foot Solutions","brand:wikidata":"Q69982369","healthcare:speciality":"pedorthist",name:"Foot Solutions",shoes:"orthopaedic",shop:"shoes"}},"shop/shoes|Footaction":{countryCodes:["ca","pr","us"],tags:{brand:"Footaction","brand:wikidata":"Q71022064",name:"Footaction",shop:"shoes"}},"shop/shoes|G.H. Bass & Co.":{countryCodes:["gb","us"],tags:{brand:"G.H. Bass & Co.","brand:wikidata":"Q16993893","brand:wikipedia":"en:G.H. Bass & Co.",name:"G.H. Bass & Co.",shop:"shoes"}},"shop/shoes|Gabor":{countryCodes:["de","it"],tags:{brand:"Gabor","brand:wikidata":"Q1488760","brand:wikipedia":"de:Gabor Shoes",name:"Gabor",shop:"shoes"}},"shop/shoes|Geox":{tags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"}},"shop/shoes|Görtz":{countryCodes:["de"],nomatch:["shop/bakery|Görtz"],tags:{brand:"Görtz","brand:wikidata":"Q1559593","brand:wikipedia":"de:Ludwig Görtz",name:"Görtz",shop:"shoes"}},"shop/shoes|Havaianas":{tags:{brand:"Havaianas","brand:wikidata":"Q3128675","brand:wikipedia":"en:Havaianas",name:"Havaianas",shop:"shoes"}},"shop/shoes|Humanic":{countryCodes:["at","cz","de","hu","ro","sk"],tags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"}},"shop/shoes|Hush Puppies":{tags:{brand:"Hush Puppies","brand:wikidata":"Q1828588","brand:wikipedia":"en:Hush Puppies",name:"Hush Puppies",shop:"shoes"}},"shop/shoes|Jimmy Choo":{tags:{brand:"Jimmy Choo","brand:wikidata":"Q5213855","brand:wikipedia":"en:Jimmy Choo Ltd",name:"Jimmy Choo",shop:"shoes"}},"shop/shoes|Johnston & Murphy":{countryCodes:["ca","us"],tags:{brand:"Johnston & Murphy","brand:wikidata":"Q6268615","brand:wikipedia":"en:Johnston & Murphy",name:"Johnston & Murphy",shop:"shoes"}},"shop/shoes|Jones Bootmaker":{countryCodes:["gb"],tags:{brand:"Jones Bootmaker","brand:wikidata":"Q6275139","brand:wikipedia":"en:Jones Bootmaker",name:"Jones Bootmaker",shop:"shoes",short_name:"Jones"}},"shop/shoes|Journeys":{countryCodes:["ca","us"],tags:{brand:"Journeys","brand:wikidata":"Q61994838",name:"Journeys",shop:"shoes"}},"shop/shoes|Kari":{tags:{brand:"Kari","brand:wikidata":"Q47155680","brand:wikipedia":"ru:Kari (компания)",name:"Kari",shop:"shoes"}},"shop/shoes|Kids Foot Locker":{countryCodes:["us"],tags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Kids Foot Locker",shop:"shoes"}},"shop/shoes|Kurt Geiger":{countryCodes:["gb"],tags:{brand:"Kurt Geiger","brand:wikidata":"Q17063744",name:"Kurt Geiger",shop:"shoes"}},"shop/shoes|La Halle aux Chaussures":{countryCodes:["fr"],tags:{brand:"La Halle aux Chaussures","brand:wikidata":"Q62390731",name:"La Halle aux Chaussures",shop:"shoes"}},"shop/shoes|Lady Foot Locker":{countryCodes:["us"],tags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Lady Foot Locker",shop:"shoes"}},"shop/shoes|Little Burgundy":{countryCodes:["ca"],tags:{brand:"Little Burgundy","brand:wikidata":"Q72984664",name:"Little Burgundy",shop:"shoes"}},"shop/shoes|Manfield~(France)":{countryCodes:["fr"],tags:{brand:"Manfield",name:"Manfield",shop:"shoes"}},"shop/shoes|Manfield~(Netherlands)":{countryCodes:["be","de","nl"],tags:{brand:"Manfield","brand:wikidata":"Q58328872","brand:wikipedia":"nl:Manfield schoenen",name:"Manfield",shop:"shoes"}},"shop/shoes|Marko":{countryCodes:["by","ru"],matchNames:["марко"],tags:{brand:"Marko","brand:wikidata":"Q67861181",name:"Marko","name:ru":"Марко",shop:"shoes"}},"shop/shoes|Mephisto":{tags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"}},"shop/shoes|Merrell":{countryCodes:["us"],tags:{brand:"Merrell","brand:wikidata":"Q1921997","brand:wikipedia":"en:Merrell (company)",name:"Merrell",shop:"shoes"}},"shop/shoes|Minelli":{tags:{brand:"Minelli","brand:wikidata":"Q61994831",name:"Minelli",shop:"shoes"}},"shop/shoes|Moshulu":{countryCodes:["gb"],tags:{brand:"Moshulu","brand:wikidata":"Q81555702",name:"Moshulu",shop:"shoes"}},"shop/shoes|Naturalizer":{countryCodes:["ca","cn","gu","us"],tags:{brand:"Naturalizer","brand:wikidata":"Q65012038",name:"Naturalizer",shop:"shoes"}},"shop/shoes|New Balance":{tags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"}},"shop/shoes|Office":{countryCodes:["de","gb","ie","ro"],tags:{brand:"Office","brand:wikidata":"Q7079121","brand:wikipedia":"en:Office Holdings",name:"Office",shop:"shoes"}},"shop/shoes|Payless ShoeSource":{matchNames:["payless"],tags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"}},"shop/shoes|Quick Schuh":{countryCodes:["at","de"],tags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"}},"shop/shoes|R.M.Williams":{tags:{brand:"R.M.Williams","brand:wikidata":"Q65042966","brand:wikipedia":"en:R. M. Williams (company)",name:"R.M.Williams",shop:"shoes"}},"shop/shoes|Rack Room Shoes":{countryCodes:["us"],tags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"}},"shop/shoes|Ralf Ringer":{countryCodes:["ru"],tags:{brand:"Ralf Ringer",name:"Ralf Ringer",shop:"shoes"}},"shop/shoes|Red Wing":{countryCodes:["de","gb","nl","us"],matchNames:["red wing shoes"],tags:{brand:"Red Wing","brand:wikidata":"Q934096","brand:wikipedia":"en:Red Wing Shoes",name:"Red Wing",shop:"shoes"}},"shop/shoes|Reno":{countryCodes:["at","ch","de","hu","sk"],tags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"}},"shop/shoes|Respect":{countryCodes:["by","ru","ua"],tags:{brand:"Respect",name:"Respect",shop:"shoes"}},"shop/shoes|Rieker":{tags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"}},"shop/shoes|Rockport":{tags:{brand:"Rockport","brand:wikidata":"Q4048384","brand:wikipedia":"en:Rockport (company)",name:"Rockport",shop:"shoes"}},"shop/shoes|Runners Point":{countryCodes:["de"],tags:{brand:"Runners Point","brand:wikidata":"Q2176418","brand:wikipedia":"de:Runners Point",name:"Runners Point",shop:"shoes"}},"shop/shoes|Salamander":{tags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"}},"shop/shoes|Salvatore Ferragamo":{tags:{brand:"Salvatore Ferragamo","brand:wikidata":"Q3946053","brand:wikipedia":"en:Salvatore Ferragamo S.p.A.",name:"Salvatore Ferragamo",shop:"shoes"}},"shop/shoes|San Marina":{countryCodes:["fr"],tags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"}},"shop/shoes|Scapino":{countryCodes:["nl"],tags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"}},"shop/shoes|Schuh":{countryCodes:["de","gb","gg","ie"],tags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"}},"shop/shoes|Schuh-Mann":{countryCodes:["de"],tags:{brand:"Schuh-Mann","brand:wikidata":"Q66133314",name:"Schuh-Mann",shop:"shoes"}},"shop/shoes|Schuhkay":{countryCodes:["de"],tags:{brand:"Schuhkay","brand:wikidata":"Q66009415",name:"Schuhkay",shop:"shoes"}},"shop/shoes|Shoe Carnival":{countryCodes:["us"],tags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"}},"shop/shoes|Shoe Show":{tags:{brand:"Shoe Show",name:"Shoe Show",shop:"shoes"}},"shop/shoes|Shoe Zone":{countryCodes:["gb","ie"],tags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"}},"shop/shoes|Siemes Schuhcenter":{countryCodes:["de"],tags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"}},"shop/shoes|Skechers":{matchNames:["sketchers"],tags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"}},"shop/shoes|Snipes":{countryCodes:["at","ch","de","es","fr","it","nl","us"],tags:{brand:"Snipes","brand:wikidata":"Q42306166","brand:wikipedia":"de:Snipes (Unternehmen)",name:"Snipes",shop:"shoes"}},"shop/shoes|Soft Moc":{countryCodes:["ca"],tags:{brand:"Soft Moc","brand:wikidata":"Q65012391",name:"Soft Moc",shop:"shoes"}},"shop/shoes|Sperry":{countryCodes:["us"],matchNames:["sperry top sider"],tags:{brand:"Sperry","brand:wikidata":"Q7576421","brand:wikipedia":"en:Sperry Top-Sider",name:"Sperry",shop:"shoes"}},"shop/shoes|Steve Madden":{countryCodes:["ca","us"],tags:{brand:"Steve Madden","brand:wikidata":"Q25352034","brand:wikipedia":"en:Steve Madden (company)",name:"Steve Madden",shop:"shoes"}},"shop/shoes|Stride Rite":{countryCodes:["us"],tags:{brand:"Stride Rite","brand:wikidata":"Q2356171","brand:wikipedia":"en:Stride Rite Corporation",name:"Stride Rite",shop:"shoes"}},"shop/shoes|Stuart Weitzman":{countryCodes:["ca","us"],tags:{brand:"Stuart Weitzman","brand:wikidata":"Q75244763",name:"Stuart Weitzman",shop:"shoes"}},"shop/shoes|Tamaris":{countryCodes:["at","be","de","fr","nl"],tags:{brand:"Tamaris","brand:wikidata":"Q61994827",name:"Tamaris",shop:"shoes"}},"shop/shoes|The Shoe Company":{countryCodes:["ca"],tags:{brand:"The Shoe Company","brand:wikidata":"Q7763892","brand:wikipedia":"en:The Shoe Company",name:"The Shoe Company",shop:"shoes"}},"shop/shoes|UGG":{countryCodes:["au","us"],tags:{brand:"UGG","brand:wikidata":"Q1138480","brand:wikipedia":"en:UGG (brand)",name:"UGG",shop:"shoes"}},"shop/shoes|Vans":{tags:{brand:"Vans","brand:wikidata":"Q1135366","brand:wikipedia":"en:Vans",name:"Vans",shop:"shoes"}},"shop/shoes|Walking on a Cloud":{countryCodes:["ca"],tags:{brand:"Walking on a Cloud","brand:wikidata":"Q65012662",name:"Walking on a Cloud",shop:"shoes"}},"shop/shoes|tReds":{countryCodes:["gb"],matchTags:["shop/clothes"],tags:{brand:"tReds","brand:wikidata":"Q81647338",name:"tReds",shop:"shoes"}},"shop/shoes|vanHaren":{countryCodes:["be","nl"],tags:{brand:"vanHaren","brand:wikidata":"Q62390668",name:"vanHaren",shop:"shoes"}},"shop/shoes|Éram":{countryCodes:["be","fr"],tags:{brand:"Éram","brand:wikidata":"Q16684192","brand:wikipedia":"fr:Éram",name:"Éram",shop:"shoes"}},"shop/shoes|ЦентрОбувь":{countryCodes:["by","ru","ua"],tags:{brand:"ЦентрОбувь","brand:wikidata":"Q4504072","brand:wikipedia":"ru:ЦентрОбувь",name:"ЦентрОбувь",shop:"shoes"}},"shop/shoes|Юничел":{countryCodes:["kz","ru"],tags:{brand:"Юничел","brand:wikidata":"Q62390569",name:"Юничел",shop:"shoes"}},"shop/shoes|つるや":{countryCodes:["jp"],tags:{brand:"つるや","brand:en":"Tsuruya","brand:ja":"つるや","brand:wikidata":"Q11272578","brand:wikipedia":"ja:つるや (靴屋)",name:"つるや","name:en":"Tsuruya","name:ja":"つるや",shop:"shoes"}},"shop/shoes|東京靴流通センター":{countryCodes:["jp"],tags:{brand:"東京靴流通センター","brand:en":"Tokyo Shoes Retailing Center","brand:ja":"東京靴流通センター","brand:wikidata":"Q11318515","brand:wikipedia":"ja:チヨダ",name:"東京靴流通センター","name:en":"Tokyo Shoes Retailing Center","name:ja":"東京靴流通センター",shop:"shoes"}},"shop/sports|Academy Sports + Outdoors":{countryCodes:["us"],matchNames:["academy","academy sports and outdoors"],matchTags:["shop/outdoor"],tags:{brand:"Academy Sports + Outdoors","brand:wikidata":"Q4671380","brand:wikipedia":"en:Academy Sports + Outdoors",name:"Academy Sports + Outdoors",shop:"sports"}},"shop/sports|Adidas":{tags:{brand:"Adidas","brand:wikidata":"Q3895","brand:wikipedia":"en:Adidas",name:"Adidas",shop:"sports"}},"shop/sports|Aktiesport":{countryCodes:["nl"],tags:{brand:"Aktiesport","brand:wikidata":"Q57546889",name:"Aktiesport",shop:"sports"}},"shop/sports|American Golf":{countryCodes:["gb","ie"],matchTags:["shop/golf"],tags:{brand:"American Golf","brand:wikidata":"Q62657494",name:"American Golf",shop:"sports",sport:"golf"}},"shop/sports|Big 5 Sporting Goods":{countryCodes:["us"],matchNames:["big 5"],tags:{brand:"Big 5 Sporting Goods","brand:wikidata":"Q4904902","brand:wikipedia":"en:Big 5 Sporting Goods",name:"Big 5 Sporting Goods",shop:"sports"}},"shop/sports|Centauro":{countryCodes:["br"],tags:{brand:"Centauro","brand:wikidata":"Q28679561","brand:wikipedia":"pt:Lojas Centauro",name:"Centauro",shop:"sports"}},"shop/sports|Champs Sports":{countryCodes:["ca","pr","us"],tags:{brand:"Champs Sports","brand:wikidata":"Q2955924","brand:wikipedia":"en:Champs Sports",name:"Champs Sports",shop:"sports"}},"shop/sports|Decathlon":{tags:{brand:"Decathlon","brand:wikidata":"Q509349","brand:wikipedia":"en:Decathlon Group",name:"Decathlon",shop:"sports"}},"shop/sports|Dick's Sporting Goods":{countryCodes:["us"],matchNames:["dicks"],tags:{brand:"Dick's Sporting Goods","brand:wikidata":"Q5272601","brand:wikipedia":"en:Dick's Sporting Goods",name:"Dick's Sporting Goods",shop:"sports"}},"shop/sports|Finish Line":{countryCodes:["us"],tags:{brand:"Finish Line","brand:wikidata":"Q5450341","brand:wikipedia":"en:Finish Line, Inc.",name:"Finish Line",shop:"sports"}},"shop/sports|Golf Galaxy":{countryCodes:["us"],matchTags:["shop/golf"],tags:{brand:"Golf Galaxy","brand:wikidata":"Q69364358",name:"Golf Galaxy",shop:"sports",sport:"golf"}},"shop/sports|Hervis":{countryCodes:["at","cz","de","hr","hu","ro","si"],matchNames:["hervis sport","hervis sports"],tags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"}},"shop/sports|Hibbett Sports":{countryCodes:["us"],tags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"}},"shop/sports|Intersport":{tags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"}},"shop/sports|JD Sports":{countryCodes:["de","es","fr","gb","ie","nl"],matchNames:["jd"],tags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"}},"shop/sports|Marathon Sports":{countryCodes:["bo","ec","pe"],tags:{brand:"Marathon Sports","brand:wikidata":"Q3027516","brand:wikipedia":"es:Marathon Sports",name:"Marathon Sports",shop:"sports"}},"shop/sports|Martes Sport":{countryCodes:["pl"],tags:{brand:"Martes Sport","brand:wikidata":"Q62073490",name:"Martes Sport",shop:"sports"}},"shop/sports|Modell's Sporting Goods":{countryCodes:["us"],matchNames:["modells"],tags:{brand:"Modell's Sporting Goods","brand:wikidata":"Q3317844","brand:wikipedia":"en:Modell's Sporting Goods",name:"Modell's Sporting Goods",shop:"sports"}},"shop/sports|Peloton":{countryCodes:["ca","gb","us"],tags:{brand:"Peloton","brand:wikidata":"Q56276186","brand:wikipedia":"en:Peloton (company)",name:"Peloton",shop:"sports"}},"shop/sports|Planeta Sport":{countryCodes:["rs"],matchNames:["planeta"],tags:{brand:"Planeta Sport","brand:en":"Planeta Sport","brand:rs":"Planeta Sport","brand:wikidata":"Q72193528",name:"Planeta Sport",shop:"sports"}},"shop/sports|Play It Again Sports":{countryCodes:["ca","us"],tags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"}},"shop/sports|Rebel":{countryCodes:["au","nz"],tags:{brand:"Rebel","brand:wikidata":"Q18636397","brand:wikipedia":"en:Rebel (company)",name:"Rebel",shop:"sports"}},"shop/sports|Sport 2000":{countryCodes:["at","de","fr","nl"],tags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"}},"shop/sports|Sport Chek":{countryCodes:["ca"],tags:{brand:"Sport Chek","brand:wikidata":"Q3494037","brand:wikipedia":"en:Sport Chek",name:"Sport Chek",shop:"sports"}},"shop/sports|Sport Zone":{countryCodes:["pt"],tags:{brand:"Sport Zone","brand:wikidata":"Q18485899","brand:wikipedia":"pt:Sport Zone",name:"Sport Zone",shop:"sports"}},"shop/sports|Sporting Life":{countryCodes:["ca"],tags:{brand:"Sporting Life","brand:wikidata":"Q7579583","brand:wikipedia":"en:Sporting Life (retailer)",name:"Sporting Life",shop:"sports"}},"shop/sports|Sportisimo":{countryCodes:["cz","sk"],tags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"}},"shop/sports|Sports Authority":{tags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"}},"shop/sports|Sports Direct":{matchNames:["sportsdirect.com"],tags:{brand:"Sports Direct","brand:wikidata":"Q7579661","brand:wikipedia":"en:SportsDirect.com",name:"Sports Direct",shop:"sports"}},"shop/sports|Sprinter":{countryCodes:["es"],tags:{brand:"Sprinter","brand:wikidata":"Q6133465","brand:wikipedia":"es:Sprinter (tienda)",name:"Sprinter",shop:"sports"}},"shop/sports|Stadium":{countryCodes:["de","dk","fi","se"],tags:{brand:"Stadium","brand:wikidata":"Q4993863","brand:wikipedia":"sv:Stadium (detaljhandelskedja)",name:"Stadium",shop:"sports"}},"shop/sports|XXL":{countryCodes:["fi","no","se"],tags:{brand:"XXL","brand:wikidata":"Q12010840","brand:wikipedia":"no:XXL",name:"XXL",shop:"sports"}},"shop/sports|Декатлон":{countryCodes:["bg","ru","ua"],tags:{brand:"Декатлон","brand:en":"Decathlon","brand:ru":"Декатлон","brand:wikidata":"Q509349","brand:wikipedia":"ru:Decathlon",name:"Декатлон","name:en":"Decathlon","name:ru":"Декатлон",shop:"sports"}},"shop/sports|Спортмастер":{countryCodes:["by","kz","ru","ua"],matchNames:["спортмастер гипер"],tags:{brand:"Спортмастер","brand:en":"Sportmaster","brand:ru":"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер","name:en":"Sportmaster","name:ru":"Спортмастер",shop:"sports"}},"shop/stationery|Buffetti":{countryCodes:["it"],tags:{brand:"Buffetti",name:"Buffetti",shop:"stationery"}},"shop/stationery|Bureau Vallée":{countryCodes:["fr"],tags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"}},"shop/stationery|McPaper":{countryCodes:["ch","de"],tags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"}},"shop/stationery|Office Depot":{matchTags:["shop/office_supplies"],tags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"}},"shop/stationery|OfficeMax":{countryCodes:["mx","nz","us"],tags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"}},"shop/stationery|Officeworks":{countryCodes:["au"],tags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"}},"shop/stationery|Pagro":{countryCodes:["at"],tags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"}},"shop/stationery|Paper Source":{countryCodes:["us"],tags:{brand:"Paper Source","brand:wikidata":"Q25000269","brand:wikipedia":"en:Paper Source",name:"Paper Source",shop:"stationery"}},"shop/stationery|Paperchase":{countryCodes:["gb"],tags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"}},"shop/stationery|Ryman":{countryCodes:["gb"],tags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"}},"shop/stationery|Smiggle":{countryCodes:["at","gb","hk","ie","my","nz","sg"],tags:{brand:"Smiggle","brand:wikidata":"Q7544536",name:"Smiggle",shop:"stationery"}},"shop/stationery|Staples":{matchTags:["shop/office_supplies"],tags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"}},"shop/stationery|Комус":{countryCodes:["ru"],tags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"}},"shop/storage_rental|Extra Space Storage":{countryCodes:["us"],matchNames:["extra space"],tags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"}},"shop/storage_rental|Public Storage":{countryCodes:["ca","us"],matchTags:["shop/storage_units"],tags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"}},"shop/storage_rental|U-Haul":{countryCodes:["ca","us"],matchNames:["uhaul neighborhood dealer"],nomatch:["shop/rental|U-Haul"],tags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"storage_rental"}},"shop/supermarket|8 à Huit":{nomatch:["amenity/fuel|8 à Huit","shop/convenience|8 à Huit"],tags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"supermarket"}},"shop/supermarket|99 Ranch Market":{countryCodes:["us"],matchNames:["99 ranch","ranch 99"],tags:{brand:"99 Ranch Market","brand:wikidata":"Q4646307","brand:wikipedia":"en:99 Ranch Market",cuisine:"asian",name:"99 Ranch Market","name:en":"99 Ranch Market","name:zh-Hans":"大华超级市场","name:zh-Hant":"大華超級市場",shop:"supermarket"}},"shop/supermarket|A&O":{countryCodes:["it"],tags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"}},"shop/supermarket|A101":{countryCodes:["tr"],tags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"}},"shop/supermarket|AD Delhaize":{countryCodes:["be","lu"],tags:{brand:"AD Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"AD Delhaize",shop:"supermarket"}},"shop/supermarket|ADEG":{countryCodes:["at"],tags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"}},"shop/supermarket|Acme":{countryCodes:["us"],tags:{brand:"Acme","brand:wikidata":"Q341975","brand:wikipedia":"en:Acme Markets",name:"Acme",shop:"supermarket"}},"shop/supermarket|Ahorramás":{countryCodes:["es"],tags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"}},"shop/supermarket|Albert":{countryCodes:["cz"],tags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"}},"shop/supermarket|Albert Heijn":{countryCodes:["be","nl"],tags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"}},"shop/supermarket|Albert Heijn XL":{countryCodes:["nl"],tags:{brand:"Albert Heijn XL","brand:wikidata":"Q78163765","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn XL",shop:"supermarket"}},"shop/supermarket|Albertsons":{countryCodes:["us"],matchNames:["albertsons supermarket"],tags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"}},"shop/supermarket|Alcampo":{countryCodes:["es"],tags:{brand:"Alcampo","brand:wikidata":"Q2832081","brand:wikipedia":"es:Alcampo",name:"Alcampo",shop:"supermarket"}},"shop/supermarket|Aldi":{tags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"}},"shop/supermarket|Aldi Nord":{countryCodes:["de"],tags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"}},"shop/supermarket|Aldi Süd":{countryCodes:["de"],tags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"}},"shop/supermarket|Alfamart":{countryCodes:["id","ph"],matchTags:["shop/convenience"],tags:{brand:"Alfamart","brand:wikidata":"Q23745600","brand:wikipedia":"en:Alfamart",name:"Alfamart",shop:"supermarket"}},"shop/supermarket|Alimerka":{countryCodes:["es"],tags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"}},"shop/supermarket|Alnatura":{countryCodes:["ch","de"],tags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",organic:"only",shop:"supermarket"}},"shop/supermarket|Amigo":{countryCodes:["us"],matchNames:["amigo puerto rico","amigo supermarket","supermercado amigo"],tags:{alt_name:"Supermercados Amigo",brand:"Amigo","brand:wikidata":"Q4746234","brand:wikipedia":"en:Amigo Supermarkets",name:"Amigo",shop:"supermarket"}},"shop/supermarket|Ara":{countryCodes:["co"],tags:{brand:"Ara",name:"Ara",shop:"supermarket"}},"shop/supermarket|Asda":{countryCodes:["gb"],nomatch:["amenity/fuel|Asda"],tags:{brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda",shop:"supermarket"}},"shop/supermarket|Assaí Atacadista":{tags:{brand:"Assaí Atacadista",name:"Assaí Atacadista",shop:"supermarket"}},"shop/supermarket|Atacadão":{countryCodes:["br"],tags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"}},"shop/supermarket|Auchan":{nomatch:["amenity/fuel|Auchan"],tags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"}},"shop/supermarket|Auchan Drive":{countryCodes:["fr","lu"],tags:{brand:"Auchan Drive",name:"Auchan Drive",shop:"supermarket"}},"shop/supermarket|BI-LO":{countryCodes:["us"],tags:{brand:"BI-LO","brand:wikidata":"Q4835620","brand:wikipedia":"en:BI-LO (United States)",name:"BI-LO",shop:"supermarket"}},"shop/supermarket|BM":{countryCodes:["es"],tags:{brand:"BM","brand:wikidata":"Q62073462",name:"BM",shop:"supermarket"}},"shop/supermarket|Bashas'":{countryCodes:["us"],tags:{brand:"Bashas'","brand:wikidata":"Q4866786","brand:wikipedia":"en:Bashas'",name:"Bashas'",shop:"supermarket"}},"shop/supermarket|Biedronka":{countryCodes:["pl"],tags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"pl:Biedronka (sieć handlowa)",name:"Biedronka",shop:"supermarket"}},"shop/supermarket|Big Bazaar":{countryCodes:["in"],tags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"supermarket"}},"shop/supermarket|Big C":{countryCodes:["th","vn"],tags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"}},"shop/supermarket|Big Market":{tags:{brand:"Big Market",name:"Big Market",shop:"supermarket"}},"shop/supermarket|Big-A":{countryCodes:["jp"],tags:{brand:"Big-A","brand:en":"Big-A","brand:jp":"ビッグ・エー","brand:wikidata":"Q11330804","brand:wikipedia":"jp:ビッグ・エー",name:"Big-A","name:en":"Big-A","name:ja":"ビッグ・エー",shop:"supermarket"}},"shop/supermarket|Billa":{tags:{brand:"Billa","brand:wikidata":"Q537781","brand:wikipedia":"en:Billa (supermarket)",name:"Billa",shop:"supermarket"}},"shop/supermarket|Bim":{countryCodes:["ma","tr"],tags:{brand:"Bim","brand:wikidata":"Q1022075","brand:wikipedia":"en:Bim (company)",name:"Bim",shop:"supermarket"}},"shop/supermarket|Bingo":{countryCodes:["ba"],tags:{brand:"Bingo","brand:wikidata":"Q16842066","brand:wikipedia":"bs:Bingo (kompanija)",name:"Bingo",shop:"supermarket"}},"shop/supermarket|Bio C' Bon":{countryCodes:["es","fr","jp"],tags:{brand:"Bio C' Bon","brand:wikidata":"Q54312551","brand:wikipedia":"fr:Bio c'bon",name:"Bio C' Bon",shop:"supermarket"}},"shop/supermarket|Bio Company":{countryCodes:["de"],tags:{brand:"Bio Company","brand:wikidata":"Q864179","brand:wikipedia":"de:Bio Company",name:"Bio Company",organic:"only",shop:"supermarket"}},"shop/supermarket|Biocoop":{countryCodes:["fr"],tags:{brand:"Biocoop","brand:wikidata":"Q2904039","brand:wikipedia":"fr:Biocoop",name:"Biocoop",shop:"supermarket"}},"shop/supermarket|Bodega Aurrera":{tags:{brand:"Bodega Aurrera","brand:wikidata":"Q3365858","brand:wikipedia":"en:Bodega Aurrerá",name:"Bodega Aurrera",shop:"supermarket"}},"shop/supermarket|Bodega Aurrera Express":{countryCodes:["mx"],tags:{brand:"Bodega Aurrera Express",name:"Bodega Aurrera Express",shop:"supermarket"}},"shop/supermarket|Bonpreu":{countryCodes:["es"],tags:{brand:"Bonpreu",name:"Bonpreu",shop:"supermarket"}},"shop/supermarket|Bravo":{countryCodes:["us"],tags:{brand:"Bravo","brand:wikidata":"Q16985159","brand:wikipedia":"en:Bravo (supermarket)",name:"Bravo",shop:"supermarket"}},"shop/supermarket|Brookshire Brothers":{countryCodes:["us"],tags:{brand:"Brookshire Brothers","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",name:"Brookshire Brothers",shop:"supermarket"}},"shop/supermarket|Brookshire's":{countryCodes:["us"],tags:{brand:"Brookshire's","brand:wikidata":"Q4975085","brand:wikipedia":"en:Brookshire Grocery Company",name:"Brookshire's",shop:"supermarket"}},"shop/supermarket|Budgens":{countryCodes:["gb"],nomatch:["shop/convenience|Budgens"],tags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"supermarket"}},"shop/supermarket|Bulk Barn":{countryCodes:["ca"],tags:{brand:"Bulk Barn","brand:wikidata":"Q4996466",name:"Bulk Barn",shop:"supermarket"}},"shop/supermarket|Bunnpris":{countryCodes:["no"],tags:{brand:"Bunnpris","brand:wikidata":"Q1774634","brand:wikipedia":"en:Bunnpris",name:"Bunnpris",shop:"supermarket"}},"shop/supermarket|Bónus":{countryCodes:["fo","is"],tags:{brand:"Bónus","brand:wikidata":"Q3480158","brand:wikipedia":"en:Bónus",name:"Bónus",shop:"supermarket"}},"shop/supermarket|C-Town Supermarkets":{countryCodes:["us"],tags:{brand:"C-Town Supermarkets","brand:wikidata":"Q5005929","brand:wikipedia":"en:C-Town Supermarkets",name:"C-Town",shop:"supermarket"}},"shop/supermarket|CAP-Markt":{countryCodes:["de"],matchNames:["cap"],tags:{brand:"CAP","brand:wikidata":"Q1022827","brand:wikipedia":"de:CAP (Markt)",name:"CAP-Markt",shop:"supermarket"}},"shop/supermarket|CBA":{nomatch:["shop/convenience|CBA"],tags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"supermarket"}},"shop/supermarket|COOP Jednota":{countryCodes:["cz","sk"],matchNames:["jednota"],nomatch:["shop/convenience|COOP Jednota"],tags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"}},"shop/supermarket|Cactus":{countryCodes:["lu"],tags:{brand:"Cactus","brand:wikidata":"Q466918","brand:wikipedia":"lb:Cactus",name:"Cactus",shop:"supermarket"}},"shop/supermarket|Caprabo":{countryCodes:["ad","es"],tags:{brand:"Caprabo","brand:wikidata":"Q1980781","brand:wikipedia":"en:Caprabo",name:"Caprabo",shop:"supermarket"}},"shop/supermarket|Cardenas":{countryCodes:["us"],matchNames:["mi pueblo","mi pueblo food center"],tags:{brand:"Cardenas","brand:wikidata":"Q64149543","brand:wikipedia":"en:Cardenas (supermarket)",cuisine:"latin_american",name:"Cardenas",shop:"supermarket"}},"shop/supermarket|Cargills Food City~(Sri Lanka)":{countryCodes:["lk"],nomatch:["shop/supermarket|Food City~(USA)"],tags:{brand:"Cargills Food City","brand:wikidata":"Q58353955",name:"Cargills Food City",shop:"supermarket"}},"shop/supermarket|Carrefour":{nomatch:["amenity/fuel|Carrefour","shop/convenience|Carrefour Express"],tags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour",shop:"supermarket"}},"shop/supermarket|Carrefour City":{countryCodes:["be","fr"],matchTags:["shop/convenience"],tags:{brand:"Carrefour City","brand:wikidata":"Q2940187","brand:wikipedia":"fr:Carrefour City",name:"Carrefour City",shop:"supermarket"}},"shop/supermarket|Carrefour Contact":{countryCodes:["fr"],tags:{brand:"Carrefour Contact","brand:wikidata":"Q2940188","brand:wikipedia":"fr:Carrefour Contact",name:"Carrefour Contact",shop:"supermarket"}},"shop/supermarket|Carrefour Market":{tags:{brand:"Carrefour Market","brand:wikidata":"Q2689639","brand:wikipedia":"fr:Carrefour Market",name:"Carrefour Market",shop:"supermarket"}},"shop/supermarket|Carulla":{countryCodes:["co"],tags:{brand:"Carulla","brand:wikidata":"Q5047480","brand:wikipedia":"en:Carulla",name:"Carulla",shop:"supermarket"}},"shop/supermarket|Casino":{tags:{brand:"Casino",name:"Casino",shop:"supermarket"}},"shop/supermarket|Centra":{tags:{brand:"Centra",name:"Centra",shop:"supermarket"}},"shop/supermarket|Centre Commercial E. Leclerc":{countryCodes:["fr","pl"],tags:{brand:"Centre Commercial E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Centre Commercial E. Leclerc",shop:"supermarket"}},"shop/supermarket|Chata Polska":{countryCodes:["pl"],nomatch:["shop/convenience|Chata Polska"],tags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"supermarket"}},"shop/supermarket|Checkers":{countryCodes:["bw","na","za"],nomatch:["amenity/fast_food|Checkers"],tags:{brand:"Checkers","brand:wikidata":"Q5089126","brand:wikipedia":"en:Checkers (supermarket chain)",name:"Checkers",shop:"supermarket"}},"shop/supermarket|Chedraui":{countryCodes:["mx"],tags:{brand:"Chedraui","brand:wikidata":"Q2961952","brand:wikipedia":"en:Chedraui",name:"Chedraui",shop:"supermarket"}},"shop/supermarket|City Market":{tags:{brand:"City Market","brand:wikidata":"Q5123299","brand:wikipedia":"en:City Market (US grocery store chain)",name:"City Market",shop:"supermarket"}},"shop/supermarket|Co-op~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Coop~(Schweiz)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"}},"shop/supermarket|Coles":{countryCodes:["au","gb"],nomatch:["amenity/fuel|Coles Express","shop/books|Coles","shop/convenience|Coles Express"],tags:{brand:"Coles","brand:wikidata":"Q1108172","brand:wikipedia":"en:Coles Supermarkets",name:"Coles",shop:"supermarket"}},"shop/supermarket|Colruyt":{countryCodes:["be","fr","lu"],tags:{brand:"Colruyt","brand:wikidata":"Q2363991","brand:wikipedia":"en:Colruyt (supermarket)",name:"Colruyt",shop:"supermarket"}},"shop/supermarket|Combi":{countryCodes:["de"],tags:{brand:"Combi","brand:wikidata":"Q1113618","brand:wikipedia":"de:Combi (Einkaufsmarkt)",name:"Combi",shop:"supermarket"}},"shop/supermarket|Comercial Mexicana":{countryCodes:["mx"],tags:{brand:"Comercial Mexicana","brand:wikidata":"Q2985173","brand:wikipedia":"es:Comercial Mexicana",name:"Comercial Mexicana",shop:"supermarket"}},"shop/supermarket|Conad":{countryCodes:["al","it"],tags:{brand:"Conad","brand:wikidata":"Q639075","brand:wikipedia":"it:Conad",name:"Conad",shop:"supermarket"}},"shop/supermarket|Conad City":{countryCodes:["it"],tags:{brand:"Conad City","brand:wikidata":"Q57543102",name:"Conad City",shop:"supermarket"}},"shop/supermarket|Condis":{countryCodes:["es"],tags:{brand:"Condis","brand:wikidata":"Q57417581",name:"Condis",shop:"supermarket"}},"shop/supermarket|Consum":{countryCodes:["es"],tags:{brand:"Consum","brand:wikidata":"Q8350308","brand:wikipedia":"es:Consum",name:"Consum",shop:"supermarket"}},"shop/supermarket|Continente":{countryCodes:["pt"],tags:{brand:"Continente","brand:wikidata":"Q2995683","brand:wikipedia":"en:Continente (Supermarket)",name:"Continente",shop:"supermarket"}},"shop/supermarket|Coop Konsum":{countryCodes:["se"],tags:{brand:"Coop Konsum",name:"Coop Konsum",shop:"supermarket"}},"shop/supermarket|Coop Prix":{countryCodes:["no"],tags:{brand:"Coop Prix","brand:wikidata":"Q5167705","brand:wikipedia":"no:Coop Prix",name:"Coop Prix",shop:"supermarket"}},"shop/supermarket|Coop~(Schweiz)":{countryCodes:["ch"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|The Co-operative Food~(UK)"],tags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"supermarket"}},"shop/supermarket|Cora":{countryCodes:["be","fr","lu","ro"],nomatch:["amenity/restaurant|Cora~(Quebec)","amenity/restaurant|Cora~(non-Quebec)"],tags:{brand:"Cora","brand:wikidata":"Q686643","brand:wikipedia":"en:Cora (hypermarket)",name:"Cora",shop:"supermarket"}},"shop/supermarket|Costcutter":{nomatch:["shop/convenience|Costcutter"],tags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"supermarket"}},"shop/supermarket|Coto":{countryCodes:["ar"],tags:{brand:"Coto","brand:wikidata":"Q5175411","brand:wikipedia":"es:Coto (supermercado)",name:"Coto",shop:"supermarket"}},"shop/supermarket|Countdown":{countryCodes:["nz"],tags:{brand:"Countdown","brand:wikidata":"Q5176845","brand:wikipedia":"en:Countdown (supermarket)",name:"Countdown",shop:"supermarket"}},"shop/supermarket|Covirán":{countryCodes:["es","pt"],tags:{brand:"Covirán","brand:wikidata":"Q61070539","brand:wikipedia":"eu:Covirán",name:"Covirán","name:pt":"Coviran",shop:"supermarket"}},"shop/supermarket|Crai":{countryCodes:["ch","it"],tags:{brand:"Crai",name:"Crai",shop:"supermarket"}},"shop/supermarket|Cub Foods":{countryCodes:["us"],tags:{brand:"Cub Foods","brand:wikidata":"Q5191916","brand:wikipedia":"en:Cub Foods",name:"Cub Foods",shop:"supermarket"}},"shop/supermarket|D'Agostino":{countryCodes:["us"],tags:{brand:"D'Agostino","brand:wikidata":"Q20656844","brand:wikipedia":"en:D'Agostino Supermarkets",name:"D'Agostino",shop:"supermarket"}},"shop/supermarket|D1":{countryCodes:["co"],tags:{brand:"D1","brand:wikidata":"Q43403418","brand:wikipedia":"es:Tiendas D1",name:"D1",shop:"supermarket"}},"shop/supermarket|Dagli'Brugsen":{countryCodes:["dk"],tags:{brand:"Dagli'Brugsen","brand:wikidata":"Q12307017","brand:wikipedia":"en:Dagli'Brugsen",name:"Dagli'Brugsen",shop:"supermarket"}},"shop/supermarket|Decò":{countryCodes:["it"],tags:{brand:"Decò","brand:wikidata":"Q65127915","brand:wikipedia":"it:Decò",name:"Decò",shop:"supermarket"}},"shop/supermarket|Deen":{countryCodes:["nl"],tags:{brand:"Deen","brand:wikidata":"Q13571727","brand:wikipedia":"nl:Deen (supermarkt)",name:"Deen",shop:"supermarket"}},"shop/supermarket|Delhaize":{countryCodes:["be","lu"],tags:{brand:"Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"Delhaize",shop:"supermarket"}},"shop/supermarket|Delikatesy Centrum":{countryCodes:["pl"],nomatch:["shop/convenience|Delikatesy Centrum"],tags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"supermarket"}},"shop/supermarket|Denner":{countryCodes:["ch","li"],tags:{brand:"Denner","brand:wikidata":"Q379911","brand:wikipedia":"en:Denner (supermarket)",name:"Denner",shop:"supermarket"}},"shop/supermarket|Despar":{countryCodes:["it"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Despar",shop:"supermarket"}},"shop/supermarket|Despensa Familiar":{countryCodes:["gt","hn","sv"],tags:{brand:"Despensa Familiar","brand:wikidata":"Q61994849",name:"Despensa Familiar",shop:"supermarket"}},"shop/supermarket|Dia":{matchNames:["supermercado dia"],tags:{brand:"Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia",shop:"supermarket"}},"shop/supermarket|Dia Market":{tags:{brand:"Dia Market","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Dia Market",shop:"supermarket"}},"shop/supermarket|Dierbergs":{countryCodes:["us"],tags:{brand:"Dierbergs","brand:wikidata":"Q5274978","brand:wikipedia":"en:Dierbergs Markets",name:"Dierbergs",shop:"supermarket"}},"shop/supermarket|Dino":{countryCodes:["pl"],tags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"}},"shop/supermarket|Dirk van den Broek":{countryCodes:["nl"],tags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"}},"shop/supermarket|Disco~(Argentina)":{countryCodes:["ar"],tags:{brand:"Disco","brand:wikidata":"Q6135978","brand:wikipedia":"es:Disco (supermercado de Argentina)",name:"Disco",shop:"supermarket"}},"shop/supermarket|Disco~(Uruguay)":{countryCodes:["uy"],tags:{brand:"Disco","brand:wikidata":"Q16636819","brand:wikipedia":"es:Disco (supermercado de Uruguay)",name:"Disco",shop:"supermarket"}},"shop/supermarket|Diska":{countryCodes:["de"],tags:{brand:"Diska","brand:wikidata":"Q62390177",name:"Diska",shop:"supermarket"}},"shop/supermarket|Dollar General Market":{countryCodes:["us"],matchTags:["shop/convenience","shop/variet_store"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{brand:"Dollar General Market","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General Market",shop:"supermarket"}},"shop/supermarket|Dunnes Stores":{countryCodes:["gb","ie"],tags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"}},"shop/supermarket|E-Center":{countryCodes:["de"],tags:{brand:"E-Center","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"E-Center",shop:"supermarket"}},"shop/supermarket|E. Leclerc":{countryCodes:["es","fr","pl","pt"],tags:{brand:"E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"en:E.Leclerc",name:"E. Leclerc",shop:"supermarket"}},"shop/supermarket|E. Leclerc Drive":{countryCodes:["fr"],tags:{brand:"E. Leclerc Drive","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"E. Leclerc Drive",shop:"supermarket"}},"shop/supermarket|EMTÉ":{countryCodes:["nl"],tags:{brand:"EMTÉ","brand:wikidata":"Q3119122","brand:wikipedia":"en:EMTÉ",name:"EMTÉ",shop:"supermarket"}},"shop/supermarket|Edeka":{countryCodes:["de"],matchNames:["edeka neukauf"],tags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Edeka",shop:"supermarket"}},"shop/supermarket|Edeka xpress":{countryCodes:["de"],tags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Edeka xpress",shop:"supermarket"}},"shop/supermarket|Eko":{countryCodes:["pl"],nomatch:["amenity/fuel|EKO~(Canada)","amenity/fuel|EKO~(Greece)"],tags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"}},"shop/supermarket|Ekom":{countryCodes:["it"],tags:{brand:"Ekom","brand:wikidata":"Q62073442",name:"Ekom",shop:"supermarket"}},"shop/supermarket|Ekono":{countryCodes:["cl"],tags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"}},"shop/supermarket|Eroski":{countryCodes:["es","gi"],matchNames:["charter","eroski center"],tags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"}},"shop/supermarket|Eroski City":{countryCodes:["es"],tags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski City",shop:"supermarket"}},"shop/supermarket|Esselunga":{countryCodes:["it"],tags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"}},"shop/supermarket|EuroSpin":{countryCodes:["it","si"],tags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:Eurospin",name:"EuroSpin",shop:"supermarket"}},"shop/supermarket|Eurospar":{tags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"}},"shop/supermarket|Extra":{matchNames:["coop extra"],matchTags:["shop/convenience"],tags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"}},"shop/supermarket|Famila":{countryCodes:["de","it"],tags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"}},"shop/supermarket|Family Fare":{countryCodes:["us"],tags:{brand:"Family Fare","brand:wikidata":"Q19868045","brand:wikipedia":"en:Family Fare",name:"Family Fare",shop:"supermarket"}},"shop/supermarket|Fareway":{countryCodes:["us"],tags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"}},"shop/supermarket|Farm Boy":{countryCodes:["ca"],tags:{brand:"Farm Boy","brand:wikidata":"Q5435469","brand:wikipedia":"en:Farm Boy",name:"Farm Boy",shop:"supermarket"}},"shop/supermarket|Feneberg":{countryCodes:["at","de"],tags:{brand:"Feneberg","brand:wikidata":"Q5345378","brand:wikipedia":"de:Feneberg Lebensmittel",name:"Feneberg",shop:"supermarket"}},"shop/supermarket|Food 4 Less":{countryCodes:["us"],tags:{brand:"Food 4 Less","brand:wikidata":"Q5465282","brand:wikipedia":"en:Food 4 Less",name:"Food 4 Less",shop:"supermarket"}},"shop/supermarket|Food Basics":{tags:{brand:"Food Basics","brand:wikidata":"Q5465300","brand:wikipedia":"en:Food Basics",name:"Food Basics",shop:"supermarket"}},"shop/supermarket|Food City~(USA)":{countryCodes:["us"],nomatch:["shop/supermarket|Cargills Food City~(Sri Lanka)"],tags:{brand:"Food City","brand:wikidata":"Q16981107","brand:wikipedia":"en:Food City (K-VA-T)",name:"Food City",shop:"supermarket"}},"shop/supermarket|Food Lion":{countryCodes:["es","us"],tags:{brand:"Food Lion","brand:wikidata":"Q1435950","brand:wikipedia":"en:Food Lion",name:"Food Lion",shop:"supermarket"}},"shop/supermarket|FoodLand~(USA)":{countryCodes:["us"],nomatch:["shop/supermarket|Foodland~(Australia)","shop/supermarket|Foodland~(Canada)","shop/supermarket|Foodland~(Hawaii)"],tags:{brand:"FoodLand","brand:wikidata":"Q5465271","brand:wikipedia":"en:FoodLand",name:"FoodLand",shop:"supermarket"}},"shop/supermarket|FoodMaxx":{countryCodes:["us"],tags:{brand:"FoodMaxx","brand:wikidata":"Q61894844",name:"FoodMaxx",shop:"supermarket"}},"shop/supermarket|Foodland~(Australia)":{countryCodes:["au"],nomatch:["shop/supermarket|Foodland~(Canada)","shop/supermarket|Foodland~(Hawaii)","shop/supermarket|Foodland~(USA)"],tags:{brand:"Foodland","brand:wikidata":"Q5465555","brand:wikipedia":"en:Foodland (South Australia)",name:"Foodland",shop:"supermarket"}},"shop/supermarket|Foodland~(Canada)":{countryCodes:["ca"],nomatch:["shop/supermarket|Foodland~(Australia)","shop/supermarket|Foodland~(Hawaii)","shop/supermarket|Foodland~(USA)"],tags:{brand:"Foodland","brand:wikidata":"Q5465554","brand:wikipedia":"en:Foodland (Canada)",name:"Foodland",shop:"supermarket"}},"shop/supermarket|Foodland~(Hawaii)":{countryCodes:["us"],nomatch:["shop/supermarket|Foodland~(Australia)","shop/supermarket|Foodland~(Canada)","shop/supermarket|Foodland~(USA)"],tags:{brand:"Foodland","brand:wikidata":"Q5465560","brand:wikipedia":"en:Foodland Hawaii",name:"Foodland",shop:"supermarket"}},"shop/supermarket|Foodworks":{countryCodes:["au"],tags:{brand:"Foodworks","brand:wikidata":"Q5465579","brand:wikipedia":"en:FoodWorks",name:"Foodworks",shop:"supermarket"}},"shop/supermarket|Fortinos":{countryCodes:["ca"],tags:{brand:"Fortinos","brand:wikidata":"Q5472662","brand:wikipedia":"en:Fortinos",name:"Fortinos",shop:"supermarket"}},"shop/supermarket|Four Square":{countryCodes:["nz"],tags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"supermarket"}},"shop/supermarket|Fred Meyer":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"supermarket"}},"shop/supermarket|Fresh":{tags:{brand:"Fresh","brand:wikidata":"Q50737403","brand:wikipedia":"sk:Fresh",name:"Fresh",shop:"supermarket"}},"shop/supermarket|Fresh Thyme":{countryCodes:["us"],matchNames:["fresh thyme farmers market"],tags:{brand:"Fresh Thyme","brand:wikidata":"Q64132791",name:"Fresh Thyme",shop:"supermarket"}},"shop/supermarket|FreshCo":{countryCodes:["ca"],tags:{brand:"FreshCo","brand:wikidata":"Q5502915","brand:wikipedia":"en:FreshCo",name:"FreshCo",shop:"supermarket"}},"shop/supermarket|Froiz":{countryCodes:["es","pt"],tags:{brand:"Froiz","brand:wikidata":"Q17070775","brand:wikipedia":"en:Froiz",name:"Froiz",shop:"supermarket"}},"shop/supermarket|Fry's Food and Drug":{countryCodes:["us"],matchNames:["frys"],nomatch:["shop/electronics|Fry's Electronics"],tags:{brand:"Fry's Food and Drug","brand:wikidata":"Q5506547","brand:wikipedia":"en:Fry's Food and Drug",name:"Fry's Food and Drug",shop:"supermarket"}},"shop/supermarket|Føtex":{countryCodes:["dk"],tags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"}},"shop/supermarket|G20":{countryCodes:["fr"],tags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"}},"shop/supermarket|GBarbosa":{countryCodes:["br"],tags:{brand:"GBarbosa","brand:wikidata":"Q10287817","brand:wikipedia":"pt:GBarbosa",name:"GBarbosa",shop:"supermarket"}},"shop/supermarket|Gadis":{countryCodes:["es"],tags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"}},"shop/supermarket|Giant Eagle":{countryCodes:["us"],matchNames:["giant eagle supermarket"],tags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"}},"shop/supermarket|Giant Hypermarket":{countryCodes:["id","my","sg","vn"],tags:{brand:"Giant Hypermarket","brand:wikidata":"Q4217013","brand:wikipedia":"en:Giant Hypermarket",name:"Giant Hypermarket",shop:"supermarket"}},"shop/supermarket|Giant~(Carlisle)":{countryCodes:["us"],nomatch:["amenity/fuel|Giant~(Carlisle)","shop/bicycle|Giant","shop/supermarket|Giant~(Landover)"],tags:{brand:"Giant","brand:wikidata":"Q5558332","brand:wikipedia":"en:Giant Food Stores",name:"Giant",shop:"supermarket"}},"shop/supermarket|Giant~(Landover)":{countryCodes:["us"],nomatch:["amenity/fuel|Giant~(Carlisle)","shop/bicycle|Giant","shop/supermarket|Giant~(Carlisle)"],tags:{brand:"Giant","brand:wikidata":"Q5558336","brand:wikipedia":"en:Giant Food (Landover)",name:"Giant",shop:"supermarket"}},"shop/supermarket|Globus":{tags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"}},"shop/supermarket|Gordon Food Service":{countryCodes:["ca","us"],tags:{brand:"Gordon Food Service","brand:wikidata":"Q1538006","brand:wikipedia":"en:Gordon Food Service",name:"Gordon Food Service",shop:"supermarket"}},"shop/supermarket|Grand Frais":{countryCodes:["fr"],tags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"}},"shop/supermarket|Grocery Outlet":{countryCodes:["us"],tags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",official_name:"Grocery Outlet Bargain Market",shop:"supermarket"}},"shop/supermarket|Groszek":{countryCodes:["pl"],nomatch:["shop/convenience|Groszek"],tags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"supermarket"}},"shop/supermarket|Géant Casino":{countryCodes:["cg","fr"],tags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"fr:Enseignes du groupe Casino",name:"Géant Casino",shop:"supermarket"}},"shop/supermarket|H Mart":{countryCodes:["ca","gb","us"],tags:{"alt_name:ko":"H 마트",brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"H Mart","name:en":"H Mart","name:ko":"한아름","name:zh-Hans":"韩亚龙","name:zh-Hant":"韓亞龍",shop:"supermarket"}},"shop/supermarket|H-E-B":{countryCodes:["mx","us"],tags:{brand:"H-E-B","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B",shop:"supermarket"}},"shop/supermarket|HIT":{countryCodes:["de"],tags:{brand:"HIT","brand:wikidata":"Q1548713","brand:wikipedia":"de:HIT Handelsgruppe",name:"HIT",shop:"supermarket"}},"shop/supermarket|HalpaHalli":{countryCodes:["ee","fi","ru"],tags:{brand:"HalpaHalli","brand:wikidata":"Q11861256","brand:wikipedia":"fi:HalpaHalli",name:"HalpaHalli",shop:"supermarket"}},"shop/supermarket|Hannaford":{countryCodes:["us"],tags:{brand:"Hannaford","brand:wikidata":"Q5648760","brand:wikipedia":"en:Hannaford Brothers Company",name:"Hannaford",shop:"supermarket"}},"shop/supermarket|Harris Teeter":{countryCodes:["us"],tags:{brand:"Harris Teeter","brand:wikidata":"Q5665067","brand:wikipedia":"en:Harris Teeter",name:"Harris Teeter",shop:"supermarket"}},"shop/supermarket|Hemköp":{countryCodes:["se"],tags:{brand:"Hemköp","brand:wikidata":"Q10521746","brand:wikipedia":"sv:Hemköp",name:"Hemköp",shop:"supermarket"}},"shop/supermarket|Hero Supermarket":{countryCodes:["id"],tags:{brand:"Hero Supermarket","brand:wikidata":"Q12485604","brand:wikipedia":"en:Hero Supermarket",name:"Hero Supermarket",shop:"supermarket"}},"shop/supermarket|Heron Foods":{countryCodes:["gb"],tags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"}},"shop/supermarket|Hofer":{countryCodes:["at","si"],nomatch:["amenity/fuel|Hofer"],tags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"}},"shop/supermarket|Hoogvliet":{countryCodes:["nl"],tags:{brand:"Hoogvliet","brand:wikidata":"Q2770647","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"}},"shop/supermarket|Hruška":{countryCodes:["cz"],nomatch:["shop/convenience|Hruška"],tags:{brand:"Hruška",name:"Hruška",shop:"supermarket"}},"shop/supermarket|Hy-Vee":{countryCodes:["us"],nomatch:["amenity/fuel|Hy-Vee Gas"],tags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"}},"shop/supermarket|Hyper U":{countryCodes:["fr"],nomatch:["amenity/fuel|Super U","shop/convenience|Utile","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"}},"shop/supermarket|ICA":{countryCodes:["no","se"],matchNames:["ica supermarket"],nomatch:["shop/supermarket|ICA Kvantum","shop/supermarket|ICA Maxi"],tags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"}},"shop/supermarket|ICA Kvantum":{countryCodes:["se"],nomatch:["shop/supermarket|ICA","shop/supermarket|ICA Maxi"],tags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"}},"shop/supermarket|ICA Maxi":{countryCodes:["no","se"],matchNames:["maxi"],nomatch:["shop/supermarket|ICA","shop/supermarket|ICA Kvantum"],tags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"}},"shop/supermarket|IDEA":{countryCodes:["rs"],tags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"}},"shop/supermarket|IGA":{countryCodes:["au","ca","us"],tags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"}},"shop/supermarket|Ingles":{countryCodes:["us"],tags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"}},"shop/supermarket|Intermarché":{tags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"}},"shop/supermarket|Intermarché Super":{countryCodes:["be","fr","pl","pt"],tags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"}},"shop/supermarket|Interspar":{countryCodes:["at"],tags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"}},"shop/supermarket|Ipercoop":{tags:{brand:"Ipercoop",name:"Ipercoop",shop:"supermarket"}},"shop/supermarket|Irma":{countryCodes:["dk"],tags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"}},"shop/supermarket|Jack's":{countryCodes:["gb"],tags:{brand:"Jack's","brand:wikidata":"Q60741213","brand:wikipedia":"en:Jack's (store)",name:"Jack's",shop:"supermarket"}},"shop/supermarket|Jan Linders":{countryCodes:["nl"],tags:{brand:"Jan Linders","brand:wikidata":"Q2200982","brand:wikipedia":"nl:Jan Linders Supermarkten",name:"Jan Linders",shop:"supermarket"}},"shop/supermarket|Jewel-Osco":{countryCodes:["us"],tags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"}},"shop/supermarket|Jumbo":{tags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"}},"shop/supermarket|K+K":{countryCodes:["de"],tags:{brand:"K+K","brand:wikidata":"Q1718009","brand:wikipedia":"de:K+K Klaas & Kock",name:"K+K",shop:"supermarket"}},"shop/supermarket|K-Citymarket":{countryCodes:["fi"],tags:{brand:"K-Citymarket","brand:wikidata":"Q11868561","brand:wikipedia":"fi:K-Citymarket",name:"K-Citymarket",shop:"supermarket"}},"shop/supermarket|K-Supermarket":{countryCodes:["fi"],tags:{brand:"K-Supermarket","brand:wikidata":"Q5408668","brand:wikipedia":"fi:K-Supermarket",name:"K-Supermarket",shop:"supermarket"}},"shop/supermarket|Kaufland":{countryCodes:["bg","cz","de","hr","pl","ro","sk"],tags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"}},"shop/supermarket|King Soopers":{countryCodes:["us"],tags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"}},"shop/supermarket|Kings":{countryCodes:["us"],tags:{brand:"Kings","brand:wikidata":"Q6412914","brand:wikipedia":"en:Kings Food Markets",name:"Kings",shop:"supermarket"}},"shop/supermarket|Kiwi":{countryCodes:["dk","no"],tags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"}},"shop/supermarket|Konsum":{countryCodes:["de","ee","se"],tags:{brand:"Konsum",name:"Konsum",shop:"supermarket"}},"shop/supermarket|Konzum~(Balkans)":{countryCodes:["ba","hr","rs"],nomatch:["shop/convenience|Konzum~(Balkans)","shop/convenience|Konzum~(Czechia)","shop/supermarket|Konzum~(Czechia)"],tags:{brand:"Konzum","brand:wikidata":"Q518563","brand:wikipedia":"hr:Konzum",name:"Konzum",shop:"supermarket"}},"shop/supermarket|Konzum~(Czechia)":{countryCodes:["cz","sk"],nomatch:["shop/convenience|Konzum~(Balkans)","shop/convenience|Konzum~(Czechia)","shop/supermarket|Konzum~(Balkans)"],tags:{brand:"Konzum",name:"Konzum",shop:"supermarket"}},"shop/supermarket|Kroger":{matchNames:["kroger food and drug","krogers"],nomatch:["amenity/fuel|Kroger"],tags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"}},"shop/supermarket|Kroger Marketplace":{nomatch:["amenity/fuel|Kroger"],tags:{brand:"Kroger Marketplace","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger Marketplace",shop:"supermarket"}},"shop/supermarket|Krónan":{countryCodes:["is"],tags:{brand:"Krónan","brand:wikidata":"Q16419327","brand:wikipedia":"is:Krónan (verslun)",name:"Krónan",shop:"supermarket"}},"shop/supermarket|Kvickly":{countryCodes:["dk"],tags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"}},"shop/supermarket|La Anónima":{countryCodes:["ar"],tags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"}},"shop/supermarket|La Comer":{countryCodes:["mx"],tags:{brand:"La Comer","brand:wikidata":"Q26765126","brand:wikipedia":"es:La Comer",name:"La Comer",shop:"supermarket"}},"shop/supermarket|La Michoacana Meat Market":{countryCodes:["us"],matchNames:["la michoacana"],tags:{brand:"La Michoacana Meat Market","brand:en":"La Michoacana Meat Market","brand:es":"La Michoacana","brand:wikidata":"Q6463872","brand:wikipedia":"en:La Michoacana Meat Market",cuisine:"latin_american",name:"La Michoacana Meat Market","name:en":"La Michoacana Meat Market","name:es":"La Michoacana",shop:"supermarket"}},"shop/supermarket|La Plaza de DIA":{countryCodes:["es"],tags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA",shop:"supermarket"}},"shop/supermarket|La Vie Claire":{countryCodes:["fr"],nomatch:["shop/convenience|La Vie Claire"],tags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"fr:La Vie Claire",name:"La Vie Claire",organic:"only",shop:"supermarket"}},"shop/supermarket|Landi":{countryCodes:["ch"],tags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"de:Landi (Unternehmen)",name:"Landi",shop:"supermarket"}},"shop/supermarket|Leader Price":{tags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"fr:Leader Price",name:"Leader Price",shop:"supermarket"}},"shop/supermarket|Leclerc Drive":{countryCodes:["fr"],tags:{brand:"Leclerc Drive",name:"Leclerc Drive",shop:"supermarket"}},"shop/supermarket|Lewiatan":{countryCodes:["pl"],nomatch:["shop/convenience|Lewiatan"],tags:{brand:"Lewiatan","brand:wikidata":"Q11755396","brand:wikipedia":"pl:Lewiatan (sieć handlowa)",name:"Lewiatan",shop:"supermarket"}},"shop/supermarket|Lider":{countryCodes:["cl"],nomatch:["shop/supermarket|Lider Express"],tags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider",shop:"supermarket"}},"shop/supermarket|Lider Express":{countryCodes:["cl"],nomatch:["shop/supermarket|Lider"],tags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider Express",shop:"supermarket"}},"shop/supermarket|Lidl":{tags:{brand:"Lidl","brand:wikidata":"Q151954","brand:wikipedia":"en:Lidl",name:"Lidl",shop:"supermarket"}},"shop/supermarket|Lincolnshire Co-op":{countryCodes:["gb"],tags:{brand:"Lincolnshire Co-op","brand:wikidata":"Q6551231","brand:wikipedia":"en:Lincolnshire Co-operative",name:"Lincolnshire Co-op",shop:"supermarket"}},"shop/supermarket|Linella":{countryCodes:["md"],tags:{brand:"Linella","brand:wikidata":"Q61085990","brand:wikipedia":"ro:Linella",name:"Linella",shop:"supermarket"}},"shop/supermarket|Loblaws":{countryCodes:["ca"],matchNames:["loblaws great food"],tags:{brand:"Loblaws","brand:wikidata":"Q3257626","brand:wikipedia":"en:Loblaws",name:"Loblaws",shop:"supermarket"}},"shop/supermarket|Londis~(Ireland)":{countryCodes:["ie"],nomatch:["shop/convenience|Londis~(Ireland)","shop/convenience|Londis~(UK)","shop/supermarket|Londis~(UK)"],tags:{brand:"Londis","brand:wikidata":"Q21015800","brand:wikipedia":"en:Londis (Ireland)",name:"Londis",shop:"supermarket"}},"shop/supermarket|Londis~(UK)":{countryCodes:["gb"],nomatch:["shop/convenience|Londis~(Ireland)","shop/convenience|Londis~(UK)","shop/supermarket|Londis~(Ireland)"],tags:{brand:"Londis","brand:wikidata":"Q21008564","brand:wikipedia":"en:Londis (United Kingdom)",name:"Londis",shop:"supermarket"}},"shop/supermarket|Lotte Mart":{countryCodes:["id","kr"],tags:{brand:"Lotte Mart","brand:wikidata":"Q326715","brand:wikipedia":"en:Lotte Mart",name:"Lotte Mart",shop:"supermarket"}},"shop/supermarket|Lowe's Market":{countryCodes:["us"],nomatch:["shop/clothes|Lowes","shop/doityourself|Lowe's","shop/supermarket|Lowes Foods"],tags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"}},"shop/supermarket|Lowes Foods":{countryCodes:["us"],nomatch:["shop/clothes|Lowes","shop/doityourself|Lowe's","shop/supermarket|Lowe's Market"],tags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"}},"shop/supermarket|Lucky":{countryCodes:["us"],matchNames:["luckys"],tags:{brand:"Lucky","brand:wikidata":"Q6698032","brand:wikipedia":"en:Lucky Stores",name:"Lucky",shop:"supermarket"}},"shop/supermarket|Lupa":{countryCodes:["es"],tags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"}},"shop/supermarket|M&S Foodhall":{matchNames:["marks & spencer foodhall"],tags:{brand:"M&S Foodhall","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Foodhall",shop:"supermarket"}},"shop/supermarket|M&S Simply Food":{matchNames:["marks & spencer simply food"],nomatch:["shop/convenience|M&S Simply Food"],tags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"supermarket"}},"shop/supermarket|MD":{countryCodes:["it"],matchNames:["md discount"],tags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"}},"shop/supermarket|MPREIS":{countryCodes:["at","it"],tags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"}},"shop/supermarket|Marc's":{countryCodes:["us"],nomatch:["amenity/pharmacy|Marc's"],tags:{brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",name:"Marc's",shop:"supermarket"}},"shop/supermarket|Markant":{countryCodes:["de"],tags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"}},"shop/supermarket|Market Basket":{tags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"}},"shop/supermarket|Market In":{tags:{brand:"Market In",name:"Market In",shop:"supermarket"}},"shop/supermarket|Marktkauf":{countryCodes:["de"],tags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"}},"shop/supermarket|Martin's Super Markets":{countryCodes:["us"],tags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"}},"shop/supermarket|Masymas":{countryCodes:["es"],tags:{brand:"Masymas","brand:wikidata":"Q6135987","brand:wikipedia":"es:Supermercados Masymas",name:"Masymas",shop:"supermarket"}},"shop/supermarket|Match":{countryCodes:["be","fr","hu","lu"],tags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"}},"shop/supermarket|Maxi Dia":{countryCodes:["es"],tags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Maxi Dia",shop:"supermarket"}},"shop/supermarket|Maxima X":{countryCodes:["bg","ee","lt","lv"],nomatch:["shop/supermarket|Maxima XX","shop/supermarket|Maxima XXX"],tags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"}},"shop/supermarket|Maxima XX":{countryCodes:["bg","ee","lt","lv","pl"],nomatch:["shop/supermarket|Maxima X","shop/supermarket|Maxima XXX"],tags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"}},"shop/supermarket|Maxima XXX":{countryCodes:["bg","ee","lt","lv","pl"],matchNames:["maxima"],nomatch:["shop/supermarket|Maxima X","shop/supermarket|Maxima XX"],tags:{brand:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XXX",shop:"supermarket"}},"shop/supermarket|Maximarkt":{countryCodes:["at"],tags:{brand:"Maximarkt","brand:wikidata":"Q55524814","brand:wikipedia":"de:Maximarkt",name:"Maximarkt",shop:"supermarket"}},"shop/supermarket|Maxi~(Canada)":{countryCodes:["ca"],nomatch:["shop/supermarket|Maxi~(Serbia)"],tags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"fr:Maxi (supermarché)",name:"Maxi",shop:"supermarket"}},"shop/supermarket|Maxi~(Serbia)":{countryCodes:["rs"],nomatch:["shop/supermarket|Maxi~(Canada)"],tags:{brand:"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"en:Maxi (Serbian supermarket)",name:"Maxi",shop:"supermarket"}},"shop/supermarket|Mega Image":{countryCodes:["ro"],tags:{brand:"Mega Image","brand:wikidata":"Q6808085","brand:wikipedia":"en:Mega Image",name:"Mega Image",shop:"supermarket"}},"shop/supermarket|Mego":{countryCodes:["lv"],tags:{brand:"Mego","brand:wikidata":"Q16363314","brand:wikipedia":"lv:Mego",name:"Mego",shop:"supermarket"}},"shop/supermarket|Meijer":{countryCodes:["us"],tags:{brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer",shop:"supermarket"}},"shop/supermarket|Meny":{countryCodes:["dk","no"],tags:{brand:"Meny","brand:wikidata":"Q10581720","brand:wikipedia":"en:Meny",name:"Meny",shop:"supermarket"}},"shop/supermarket|Mercadona":{countryCodes:["es","pt"],tags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"}},"shop/supermarket|Mercator":{countryCodes:["ba","hr","me","rs","si"],nomatch:["shop/convenience|Mercator"],tags:{brand:"Mercator","brand:wikidata":"Q738412","brand:wikipedia":"en:Mercator (retail)",name:"Mercator",shop:"supermarket"}},"shop/supermarket|Merkur":{countryCodes:["at"],tags:{brand:"Merkur","brand:wikidata":"Q1921857","brand:wikipedia":"de:Merkur (Österreich)",name:"Merkur",shop:"supermarket"}},"shop/supermarket|Metro~(Ontario)":{countryCodes:["ca"],nomatch:["amenity/bank|Metro Bank~(UK)","amenity/bank|Metrobank~(Philippines)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Peru)","shop/supermarket|Metro~(Quebec)","shop/wholesale|Metro"],tags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"en:Metro Inc.",name:"Metro",shop:"supermarket"}},"shop/supermarket|Metro~(Peru)":{countryCodes:["pe"],nomatch:["amenity/bank|Metro Bank~(UK)","amenity/bank|Metrobank~(Philippines)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Quebec)","shop/wholesale|Metro"],tags:{brand:"Metro","brand:wikidata":"Q16640217","brand:wikipedia":"en:Tiendas Metro",name:"Metro",shop:"supermarket"}},"shop/supermarket|Metro~(Quebec)":{countryCodes:["ca"],nomatch:["amenity/bank|Metro Bank~(UK)","amenity/bank|Metrobank~(Philippines)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Peru)","shop/wholesale|Metro"],tags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"fr:Metro (entreprise québécoise)",name:"Metro",shop:"supermarket"}},"shop/supermarket|Migros":{tags:{brand:"Migros","brand:wikidata":"Q680727","brand:wikipedia":"en:Migros",name:"Migros",shop:"supermarket"}},"shop/supermarket|Mila":{countryCodes:["pl"],tags:{brand:"Mila","brand:wikidata":"Q48844636","brand:wikipedia":"pl:Mila (sieć sklepów)",name:"Mila",shop:"supermarket"}},"shop/supermarket|Minipreço":{tags:{brand:"Minipreço","brand:wikidata":"Q3042224","brand:wikipedia":"en:Minipreço",name:"Minipreço",shop:"supermarket"}},"shop/supermarket|Mix Markt":{countryCodes:["de"],tags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"}},"shop/supermarket|Monoprix":{tags:{brand:"Monoprix","brand:wikidata":"Q3321241","brand:wikipedia":"en:Monoprix",name:"Monoprix",shop:"supermarket"}},"shop/supermarket|More":{countryCodes:["in"],tags:{brand:"More","brand:wikidata":"Q6910891","brand:wikipedia":"en:More (store)",name:"More",shop:"supermarket"}},"shop/supermarket|Morrisons":{countryCodes:["gb"],nomatch:["amenity/fuel|Morrisons"],tags:{brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons",shop:"supermarket"}},"shop/supermarket|My Basket":{tags:{brand:"My Basket",name:"My Basket",shop:"supermarket"}},"shop/supermarket|NP":{matchNames:["np-markt"],nomatch:["amenity/fuel|NP"],tags:{brand:"NP","brand:wikidata":"Q15836148","brand:wikipedia":"de:NP-Markt",name:"NP",shop:"supermarket"}},"shop/supermarket|NTUC Fairprice":{tags:{brand:"NTUC Fairprice",name:"NTUC Fairprice",shop:"supermarket"}},"shop/supermarket|Nah & Frisch":{countryCodes:["at","de"],matchNames:["nah und frisch"],tags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"}},"shop/supermarket|Nahkauf":{countryCodes:["de"],tags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"}},"shop/supermarket|Natural Grocers":{countryCodes:["us"],tags:{brand:"Natural Grocers",name:"Natural Grocers",shop:"supermarket"}},"shop/supermarket|Naturalia":{countryCodes:["fr"],tags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"}},"shop/supermarket|Netto City":{tags:{brand:"Netto City",name:"Netto City",shop:"supermarket"}},"shop/supermarket|Netto Marken-Discount":{countryCodes:["de"],tags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"de:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"}},"shop/supermarket|Netto~(Les Mousquetaires)":{countryCodes:["fr","pt"],tags:{brand:"Netto","brand:wikidata":"Q2720988","brand:wikipedia":"fr:Netto",name:"Netto",shop:"supermarket"}},"shop/supermarket|Netto~(Salling)":{countryCodes:["da","de","pl","se"],tags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"da:Netto (supermarkedskæde)",name:"Netto",shop:"supermarket"}},"shop/supermarket|Nettó~(Iceland)":{countryCodes:["is"],tags:{brand:"Nettó","brand:wikidata":"Q67205962",name:"Nettó",shop:"supermarket"}},"shop/supermarket|New World":{countryCodes:["nz"],tags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"}},"shop/supermarket|Nisa Extra":{countryCodes:["gb"],tags:{brand:"Nisa Extra","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Extra",shop:"supermarket"}},"shop/supermarket|No Frills":{countryCodes:["ca"],tags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"}},"shop/supermarket|Norfa XL":{countryCodes:["lt"],tags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"}},"shop/supermarket|Norma":{countryCodes:["at","cz","de","fr"],tags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"}},"shop/supermarket|Northern Store":{countryCodes:["ca"],tags:{brand:"Northern Store","brand:wikidata":"Q7754361","brand:wikipedia":"en:The North West Company",name:"Northern Store",shop:"supermarket"}},"shop/supermarket|Okay":{countryCodes:["be"],tags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"}},"shop/supermarket|Olímpica":{countryCodes:["co"],tags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Grupo Empresarial Olímpica",name:"Olímpica",shop:"supermarket"}},"shop/supermarket|PLUS":{countryCodes:["nl"],nomatch:["amenity/fuel|Gas Plus","shop/mobile_phone|Plus"],tags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"}},"shop/supermarket|POLOmarket":{countryCodes:["pl"],tags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"pl:Polomarket",name:"POLOmarket",shop:"supermarket"}},"shop/supermarket|Palí":{countryCodes:["cr","ni"],tags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"}},"shop/supermarket|Pam":{countryCodes:["ch","it"],tags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"}},"shop/supermarket|Patel Brothers":{countryCodes:["us"],tags:{brand:"Patel Brothers","brand:wikidata":"Q55641396","brand:wikipedia":"en:Patel Brothers",cuisine:"indian",name:"Patel Brothers",shop:"supermarket"}},"shop/supermarket|Pavilions":{countryCodes:["us"],tags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"}},"shop/supermarket|Penny":{countryCodes:["at","cz","de","hu","it","ro"],matchNames:["penny market","penny markt"],tags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"}},"shop/supermarket|Pick 'n Save":{countryCodes:["us","za"],tags:{brand:"Pick 'n Save","brand:wikidata":"Q7371288","brand:wikipedia":"en:Roundy's",name:"Pick 'n Save",shop:"supermarket"}},"shop/supermarket|Pick n Pay":{tags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"}},"shop/supermarket|Piggly Wiggly":{countryCodes:["gb","us"],tags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"}},"shop/supermarket|Pingo Doce":{countryCodes:["pt"],tags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"}},"shop/supermarket|Piotr i Paweł":{countryCodes:["pl"],tags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"pl:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"}},"shop/supermarket|Plaza Vea":{tags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"}},"shop/supermarket|Plodine":{countryCodes:["hr"],tags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"}},"shop/supermarket|Poiesz":{countryCodes:["nl"],tags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"}},"shop/supermarket|Price Chopper~(Kansas City)":{countryCodes:["us"],nomatch:["shop/supermarket|Price Chopper~(New York)"],tags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"}},"shop/supermarket|Price Chopper~(New York)":{countryCodes:["us"],nomatch:["shop/supermarket|Price Chopper~(Kansas City)"],tags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"}},"shop/supermarket|Prisma":{countryCodes:["ee","fi","ru"],tags:{brand:"Prisma","brand:wikidata":"Q12047031","brand:wikipedia":"fi:Prisma (kauppaketju)",name:"Prisma",shop:"supermarket"}},"shop/supermarket|Prix":{countryCodes:["it"],matchNames:["prix quality"],tags:{brand:"Prix","brand:wikidata":"Q61994819",name:"Prix",shop:"supermarket"}},"shop/supermarket|Profi":{countryCodes:["be","hu","ro"],tags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"}},"shop/supermarket|Profi City":{countryCodes:["ro"],tags:{brand:"Profi City",name:"Profi City",shop:"supermarket"}},"shop/supermarket|Provigo":{countryCodes:["ca"],tags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"fr:Provigo",name:"Provigo",shop:"supermarket"}},"shop/supermarket|Proxy Delhaize":{countryCodes:["be","lu"],tags:{brand:"Proxy Delhaize","brand:wikidata":"Q14903417","brand:wikipedia":"en:Delhaize Group",name:"Proxy Delhaize",shop:"supermarket"}},"shop/supermarket|Publix":{countryCodes:["br","us"],tags:{brand:"Publix","brand:wikidata":"Q672170","brand:wikipedia":"en:Publix",name:"Publix",shop:"supermarket"}},"shop/supermarket|Pueblo":{countryCodes:["us"],tags:{brand:"Pueblo","brand:wikidata":"Q7258464","brand:wikipedia":"en:Pueblo Supermarkets",name:"Pueblo",official_name:"Supermercados Pueblo","official_name:en":"Pueblo Supermarkets","official_name:es":"Supermercados Pueblo",shop:"supermarket"}},"shop/supermarket|Punto Simply":{countryCodes:["it"],tags:{brand:"Punto Simply","brand:wikidata":"Q3484790","brand:wikipedia":"it:Simply Market",name:"Punto Simply",shop:"supermarket"}},"shop/supermarket|Puregold":{countryCodes:["ph"],tags:{brand:"Puregold","brand:wikidata":"Q7261170","brand:wikipedia":"en:Puregold",name:"Puregold",shop:"supermarket"}},"shop/supermarket|Pão de Açúcar":{countryCodes:["br","pt"],tags:{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"}},"shop/supermarket|QFC":{countryCodes:["us"],tags:{brand:"QFC","brand:wikidata":"Q7265425","brand:wikipedia":"en:QFC",name:"QFC",shop:"supermarket"}},"shop/supermarket|Raley's":{countryCodes:["us"],tags:{brand:"Raley's","brand:wikidata":"Q7286970","brand:wikipedia":"en:Raley's Supermarkets",name:"Raley's",shop:"supermarket"}},"shop/supermarket|Ralphs":{countryCodes:["us"],tags:{brand:"Ralphs","brand:wikidata":"Q3929820","brand:wikipedia":"en:Ralphs",name:"Ralphs",shop:"supermarket"}},"shop/supermarket|Real":{tags:{brand:"Real","brand:wikidata":"Q698473","brand:wikipedia":"en:Real (hypermarket)",name:"Real",shop:"supermarket"}},"shop/supermarket|Real Canadian Superstore":{countryCodes:["ca"],tags:{brand:"Real Canadian Superstore","brand:wikidata":"Q7300856","brand:wikipedia":"en:Real Canadian Superstore",name:"Real Canadian Superstore",shop:"supermarket"}},"shop/supermarket|Redner's":{countryCodes:["us"],matchNames:["redners warehouse market"],tags:{brand:"Redner's","brand:wikidata":"Q7306166","brand:wikipedia":"en:Redner's Markets",name:"Redner's",shop:"supermarket"}},"shop/supermarket|Reliance Fresh":{countryCodes:["in"],tags:{brand:"Reliance Fresh","brand:wikidata":"Q7311014","brand:wikipedia":"en:Reliance Fresh",name:"Reliance Fresh",shop:"supermarket"}},"shop/supermarket|Rema 1000":{countryCodes:["dk","no"],tags:{brand:"Rema 1000","brand:wikidata":"Q28459","brand:wikipedia":"en:REMA 1000",name:"Rema 1000",shop:"supermarket"}},"shop/supermarket|Rewe":{countryCodes:["de"],nomatch:["shop/convenience|Rewe To Go","shop/supermarket|Rewe City"],tags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"}},"shop/supermarket|Rewe City":{countryCodes:["de"],nomatch:["shop/convenience|Rewe To Go","shop/supermarket|Rewe"],tags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"}},"shop/supermarket|Rimi":{countryCodes:["ee","lt","lv"],tags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"}},"shop/supermarket|S-market":{countryCodes:["fi"],tags:{brand:"S-market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-market",shop:"supermarket"}},"shop/supermarket|Safeway":{nomatch:["amenity/fuel|Safeway","amenity/pharmacy|Safeway"],tags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"}},"shop/supermarket|Sainsbury's":{countryCodes:["gb"],nomatch:["amenity/fuel|Sainsbury's"],tags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"}},"shop/supermarket|Santa Isabel":{countryCodes:["cl"],tags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"}},"shop/supermarket|Save-A-Lot":{countryCodes:["us"],tags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"}},"shop/supermarket|Save-On-Foods":{countryCodes:["ca"],tags:{brand:"Save-On-Foods","brand:wikidata":"Q7427974","brand:wikipedia":"en:Save-On-Foods",name:"Save-On-Foods",shop:"supermarket"}},"shop/supermarket|Schnucks":{countryCodes:["us"],tags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"}},"shop/supermarket|Shaw's":{countryCodes:["us"],tags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"}},"shop/supermarket|Sheng Siong":{tags:{brand:"Sheng Siong","brand:wikidata":"Q3481878","brand:wikipedia":"en:Sheng Siong",name:"Sheng Siong",shop:"supermarket"}},"shop/supermarket|ShopRite~(USA)":{countryCodes:["us"],nomatch:["shop/supermarket|Shoprite~(Africa)","shop/supermarket|Shoprite~(Isle of Man)"],tags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"}},"shop/supermarket|Shoprite~(Africa)":{countryCodes:["ao","bw","cd","gh","ls","mg","mu","mw","mz","na","ng","sz","ug","za","zm"],nomatch:["shop/supermarket|ShopRite~(USA)","shop/supermarket|Shoprite~(Isle of Man)"],tags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:Shoprite (South Africa)",name:"Shoprite",shop:"supermarket"}},"shop/supermarket|Shoprite~(Isle of Man)":{countryCodes:["im"],nomatch:["shop/supermarket|ShopRite~(USA)","shop/supermarket|Shoprite~(Africa)"],tags:{brand:"Shoprite","brand:wikidata":"Q7501242","brand:wikipedia":"en:Shoprite (Isle of Man)",name:"Shoprite",shop:"supermarket"}},"shop/supermarket|Sigma":{countryCodes:["it"],tags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"}},"shop/supermarket|Simply Market":{matchNames:["simply"],tags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"}},"shop/supermarket|Sky":{countryCodes:["de","lv","nl"],tags:{brand:"Sky","brand:wikidata":"Q1129779","brand:wikipedia":"de:Coop eG",name:"Sky",shop:"supermarket"}},"shop/supermarket|Smart & Final":{countryCodes:["mx","us"],tags:{brand:"Smart & Final","brand:wikidata":"Q7543916","brand:wikipedia":"en:Smart & Final",name:"Smart & Final",shop:"supermarket"}},"shop/supermarket|Smith's":{countryCodes:["ca","us"],nomatch:["amenity/fuel|Smith's"],tags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"}},"shop/supermarket|Sobeys":{countryCodes:["ca"],tags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"}},"shop/supermarket|Soriana":{countryCodes:["mx"],tags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"}},"shop/supermarket|Spar":{nomatch:["shop/convenience|Spar","shop/convenience|Spar Express"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"supermarket"}},"shop/supermarket|Społem":{nomatch:["shop/convenience|Społem"],tags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"supermarket"}},"shop/supermarket|Sprouts Farmers Market":{countryCodes:["us"],tags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket",short_name:"Sprouts"}},"shop/supermarket|Stater Bros.":{countryCodes:["us"],matchNames:["stater brothers"],tags:{brand:"Stater Bros.","brand:wikidata":"Q7604016","brand:wikipedia":"en:Stater Bros.",name:"Stater Bros.",shop:"supermarket"}},"shop/supermarket|Stokrotka":{countryCodes:["pl"],tags:{brand:"Stokrotka","brand:wikidata":"Q9345945","brand:wikipedia":"pl:Stokrotka (sieć handlowa)",name:"Stokrotka",shop:"supermarket"}},"shop/supermarket|Stop & Shop":{countryCodes:["us"],tags:{brand:"Stop & Shop","brand:wikidata":"Q3658429","brand:wikipedia":"en:Stop & Shop",name:"Stop & Shop",shop:"supermarket"}},"shop/supermarket|Studenac":{tags:{brand:"Studenac",name:"Studenac",shop:"supermarket"}},"shop/supermarket|Suma":{countryCodes:["es"],tags:{brand:"Suma","brand:wikidata":"Q58012362",name:"Suma",shop:"supermarket"}},"shop/supermarket|Supabarn":{countryCodes:["au"],tags:{brand:"Supabarn","brand:wikidata":"Q7641883","brand:wikipedia":"en:Supabarn Supermarkets",name:"Supabarn",official_name:"Supabarn Supermarkets",shop:"supermarket"}},"shop/supermarket|Super 1 Foods":{countryCodes:["us"],tags:{brand:"Super 1 Foods",name:"Super 1 Foods",shop:"supermarket"}},"shop/supermarket|Super C":{tags:{brand:"Super C","brand:wikidata":"Q3504127","brand:wikipedia":"fr:Super C (entreprise)",name:"Super C",shop:"supermarket"}},"shop/supermarket|Super H Mart":{countryCodes:["us"],tags:{brand:"H Mart","brand:wikidata":"Q5636306","brand:wikipedia":"en:H Mart",cuisine:"asian",name:"Super H Mart",shop:"supermarket"}},"shop/supermarket|Super One Foods":{countryCodes:["us"],tags:{brand:"Super One Foods","brand:wikidata":"Q17108733","brand:wikipedia":"en:Super One Foods",name:"Super One Foods",shop:"supermarket"}},"shop/supermarket|Super U":{countryCodes:["fr"],nomatch:["amenity/fuel|Super U","shop/convenience|Utile","shop/supermarket|Hyper U","shop/supermarket|U Express"],tags:{brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U",shop:"supermarket"}},"shop/supermarket|SuperBrugsen":{countryCodes:["dk"],tags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"}},"shop/supermarket|SuperValu":{tags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)",name:"SuperValu",shop:"supermarket"}},"shop/supermarket|Superama":{countryCodes:["mx"],tags:{brand:"Superama","brand:wikidata":"Q6135762","brand:wikipedia":"es:Superama",name:"Superama",shop:"supermarket"}},"shop/supermarket|Supercor":{countryCodes:["es","pt"],tags:{brand:"Supercor","brand:wikidata":"Q6135841","brand:wikipedia":"es:Supercor",name:"Supercor",shop:"supermarket"}},"shop/supermarket|Supersol":{countryCodes:["ar","es","ma","uy"],tags:{brand:"Supersol","brand:wikidata":"Q62073427",name:"Supersol",shop:"supermarket"}},"shop/supermarket|Superspar":{countryCodes:["es","za"],tags:{brand:"Superspar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Superspar",shop:"supermarket"}},"shop/supermarket|T&T Supermarket":{countryCodes:["ca"],tags:{brand:"T&T Supermarket","brand:wikidata":"Q837893","brand:wikipedia":"en:T & T Supermarket",name:"T&T Supermarket",shop:"supermarket"}},"shop/supermarket|Tegut":{countryCodes:["de"],tags:{brand:"Tegut","brand:wikidata":"Q1547993","brand:wikipedia":"en:Tegut",name:"Tegut",shop:"supermarket"}},"shop/supermarket|Tesco":{nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"}},"shop/supermarket|Tesco Extra":{nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Lotus","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"}},"shop/supermarket|Tesco Lotus":{countryCodes:["th"],nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Metro"],tags:{brand:"Tesco Lotus","brand:wikidata":"Q2378901","brand:wikipedia":"th:เทสโก้ โลตัส",name:"Tesco Lotus",shop:"supermarket"}},"shop/supermarket|Tesco Metro":{countryCodes:["gb"],nomatch:["amenity/fuel|Tesco","shop/convenience|Tesco","shop/convenience|Tesco Express","shop/convenience|Tesco Lotus Express","shop/supermarket|Tesco","shop/supermarket|Tesco Extra","shop/supermarket|Tesco Lotus"],tags:{brand:"Tesco Metro","brand:wikidata":"Q57551648",name:"Tesco Metro",shop:"supermarket"}},"shop/supermarket|The Co-operative Food~(UK)":{countryCodes:["gb"],matchNames:["coop","coop food","cooperative food","the cooperative"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/convenience|The Co-operative Food~(UK)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)"],tags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"supermarket"}},"shop/supermarket|The Fresh Market":{countryCodes:["us"],matchNames:["fresh market"],tags:{brand:"The Fresh Market","brand:wikidata":"Q7735265","brand:wikipedia":"en:The Fresh Market",name:"The Fresh Market",shop:"supermarket"}},"shop/supermarket|The Grocery Outlet":{countryCodes:["ca"],tags:{brand:"The Grocery Outlet","brand:wikidata":"Q16062155","brand:wikipedia":"en:The Grocery Outlet",name:"The Grocery Outlet",shop:"supermarket"}},"shop/supermarket|Tigros":{countryCodes:["it"],tags:{brand:"Tigros","brand:wikidata":"Q24935610","brand:wikipedia":"it:Tigros",name:"Tigros",shop:"supermarket"}},"shop/supermarket|Todis":{countryCodes:["it"],tags:{brand:"Todis","brand:wikidata":"Q3992174","brand:wikipedia":"it:Todis",name:"Todis",shop:"supermarket"}},"shop/supermarket|Tommy":{countryCodes:["hr"],tags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"supermarket"}},"shop/supermarket|Top Market":{countryCodes:["pl"],tags:{brand:"Top Market","brand:wikidata":"Q9360044","brand:wikipedia":"pl:Top Market",name:"Top Market",shop:"supermarket"}},"shop/supermarket|Tops":{countryCodes:["us"],tags:{brand:"Tops","brand:wikidata":"Q7825137","brand:wikipedia":"en:Tops Friendly Markets",name:"Tops",official_name:"Tops Friendly Markets",shop:"supermarket"}},"shop/supermarket|Tottus":{countryCodes:["cl","pe"],tags:{brand:"Tottus","brand:wikidata":"Q7828510","brand:wikipedia":"en:Tottus",name:"Tottus",shop:"supermarket"}},"shop/supermarket|Trader Joe's":{countryCodes:["us"],tags:{brand:"Trader Joe's","brand:wikidata":"Q688825","brand:wikipedia":"en:Trader Joe's",name:"Trader Joe's",shop:"supermarket"}},"shop/supermarket|Treff 3000":{countryCodes:["de"],tags:{brand:"Treff 3000","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Treff 3000",shop:"supermarket"}},"shop/supermarket|Tuodì":{countryCodes:["it"],tags:{brand:"Tuodì","brand:wikidata":"Q3706995","brand:wikipedia":"it:Tuodì",name:"Tuodì",shop:"supermarket"}},"shop/supermarket|U Express":{countryCodes:["fr"],nomatch:["amenity/fuel|Super U","shop/convenience|Utile","shop/supermarket|Hyper U","shop/supermarket|Super U"],tags:{brand:"U Express","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"U Express",shop:"supermarket"}},"shop/supermarket|Unimarc":{countryCodes:["cl"],tags:{brand:"Unimarc","brand:wikidata":"Q6156244","brand:wikipedia":"es:Unimarc",name:"Unimarc",shop:"supermarket"}},"shop/supermarket|Unimarkt":{countryCodes:["at"],tags:{brand:"Unimarkt","brand:wikidata":"Q1169599","brand:wikipedia":"de:Unimarkt",name:"Unimarkt",shop:"supermarket"}},"shop/supermarket|Vallarta":{countryCodes:["us"],tags:{brand:"Vallarta","brand:wikidata":"Q7911833","brand:wikipedia":"en:Vallarta Supermarkets",cuisine:"latin_american",name:"Vallarta","name:es":"Vallarta",official_name:"Vallarta Supermarkets",shop:"supermarket"}},"shop/supermarket|Valu-mart":{countryCodes:["ca"],tags:{brand:"Valu-mart","brand:wikidata":"Q7912687","brand:wikipedia":"en:Valu-mart",name:"Valu-mart",shop:"supermarket"}},"shop/supermarket|Vea":{countryCodes:["ar"],tags:{brand:"Vea","brand:wikidata":"Q5858167","brand:wikipedia":"es:Vea (supermercado)",name:"Vea",shop:"supermarket"}},"shop/supermarket|VinMart":{countryCodes:["vn"],matchTags:["shop/department_store"],nomatch:["shop/convenience|VinMart+"],tags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart",shop:"supermarket"}},"shop/supermarket|Volg":{countryCodes:["ch","li"],matchTags:["shop/convenience"],tags:{brand:"Volg","brand:wikidata":"Q2530746","brand:wikipedia":"de:Volg",name:"Volg",shop:"supermarket"}},"shop/supermarket|Vomar":{countryCodes:["nl"],tags:{brand:"Vomar","brand:wikidata":"Q3202837","brand:wikipedia":"nl:Vomar",name:"Vomar",shop:"supermarket"}},"shop/supermarket|Vons":{countryCodes:["us"],tags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"}},"shop/supermarket|Waitrose":{countryCodes:["gb","je"],nomatch:["shop/convenience|Little Waitrose","shop/convenience|Waitrose"],tags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose & Partners",name:"Waitrose",official_name:"Waitrose & Partners",shop:"supermarket"}},"shop/supermarket|Walmart Neighborhood Market":{countryCodes:["ca","mx","us"],tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Neighborhood Market",shop:"supermarket"}},"shop/supermarket|Walmart Supercenter":{matchNames:["walmart supercentre"],matchTags:["shop/department_store"],tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Supercenter",shop:"supermarket"}},"shop/supermarket|Wasgau":{countryCodes:["de"],tags:{brand:"Wasgau","brand:wikidata":"Q2536857","brand:wikipedia":"de:Wasgau (Unternehmen)",name:"Wasgau",shop:"supermarket"}},"shop/supermarket|Wegmans":{countryCodes:["us"],tags:{brand:"Wegmans","brand:wikidata":"Q11288478","brand:wikipedia":"en:Wegmans",name:"Wegmans",shop:"supermarket"}},"shop/supermarket|Weis":{countryCodes:["us"],tags:{brand:"Weis","brand:wikidata":"Q7980370","brand:wikipedia":"en:Weis Markets",name:"Weis",shop:"supermarket"}},"shop/supermarket|Whole Foods Market":{countryCodes:["ca","gb","us"],matchNames:["whole foods"],tags:{brand:"Whole Foods Market","brand:wikidata":"Q1809448","brand:wikipedia":"en:Whole Foods Market",name:"Whole Foods Market",shop:"supermarket"}},"shop/supermarket|Willys":{countryCodes:["se"],tags:{brand:"Willys","brand:wikidata":"Q10720214","brand:wikipedia":"sv:Willys",name:"Willys",shop:"supermarket"}},"shop/supermarket|WinCo Foods":{countryCodes:["us"],tags:{brand:"WinCo Foods","brand:wikidata":"Q8023592","brand:wikipedia":"en:WinCo Foods",name:"WinCo Foods",shop:"supermarket"}},"shop/supermarket|Winn-Dixie":{countryCodes:["us"],tags:{brand:"Winn-Dixie","brand:wikidata":"Q1264366","brand:wikipedia":"en:Winn-Dixie",name:"Winn-Dixie",shop:"supermarket"}},"shop/supermarket|Woolworths":{countryCodes:["au"],nomatch:["shop/clothes|Woolworths"],tags:{brand:"Woolworths","brand:wikidata":"Q3249145","brand:wikipedia":"en:Woolworths Supermarkets",name:"Woolworths",shop:"supermarket"}},"shop/supermarket|Your Independent Grocer":{countryCodes:["ca"],matchNames:["independent"],tags:{brand:"Your Independent Grocer","brand:wikidata":"Q8058833","brand:wikipedia":"en:Your Independent Grocer",name:"Your Independent Grocer",shop:"supermarket"}},"shop/supermarket|Zehrs":{countryCodes:["ca"],tags:{brand:"Zehrs","brand:wikidata":"Q8068546","brand:wikipedia":"en:Zehrs Markets",name:"Zehrs",shop:"supermarket"}},"shop/supermarket|basic":{countryCodes:["de"],tags:{brand:"basic","brand:wikidata":"Q809994","brand:wikipedia":"de:Basic AG",name:"basic",organic:"only",shop:"supermarket"}},"shop/supermarket|bi1":{countryCodes:["fr"],nomatch:["amenity/fuel|bi1"],tags:{brand:"bi1",name:"bi1",shop:"supermarket"}},"shop/supermarket|denn's Biomarkt":{countryCodes:["at","de"],tags:{brand:"denn's Biomarkt","brand:wikidata":"Q48883773",name:"denn's Biomarkt",organic:"only",shop:"supermarket"}},"shop/supermarket|fakta":{countryCodes:["dk"],tags:{brand:"fakta","brand:wikidata":"Q3172238","brand:wikipedia":"en:Fakta",name:"fakta",shop:"supermarket"}},"shop/supermarket|nah und gut":{countryCodes:["de"],tags:{brand:"nah und gut","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"nah und gut",shop:"supermarket"}},"shop/supermarket|Şok":{countryCodes:["tr"],tags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"}},"shop/supermarket|ΑΒ Βασιλόπουλος":{countryCodes:["gr"],tags:{brand:"ΑΒ Βασιλόπουλος","brand:el":"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:el":"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"}},"shop/supermarket|Γαλαξίας":{countryCodes:["gr"],tags:{brand:"Γαλαξίας","brand:el":"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:el":"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"}},"shop/supermarket|Μασούτης":{countryCodes:["gr"],tags:{brand:"Μασούτης","brand:el":"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:el":"Μασούτης","name:en":"Masoutis",shop:"supermarket"}},"shop/supermarket|Σκλαβενίτης":{countryCodes:["gr"],tags:{brand:"Σκλαβενίτης","brand:el":"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:el":"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"}},"shop/supermarket|АТБ":{tags:{brand:"АТБ",name:"АТБ",shop:"supermarket"}},"shop/supermarket|Абсолют~(Russia)":{countryCodes:["ru"],tags:{brand:"Абсолют","brand:wikidata":"Q62389597",name:"Абсолют",shop:"supermarket"}},"shop/supermarket|Абсолют~(Ukraine)":{countryCodes:["ua"],tags:{brand:"Абсолют","brand:wikidata":"Q62389546",name:"Абсолют",shop:"supermarket"}},"shop/supermarket|Авоська":{tags:{brand:"Авоська",name:"Авоська",shop:"supermarket"}},"shop/supermarket|Азбука Вкуса":{countryCodes:["ru"],tags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"}},"shop/supermarket|Атак":{countryCodes:["ru"],tags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"}},"shop/supermarket|Ашан":{countryCodes:["ru","ua"],tags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"}},"shop/supermarket|Байрам":{countryCodes:["ru"],tags:{brand:"Байрам",name:"Байрам",shop:"supermarket"}},"shop/supermarket|Брусничка":{countryCodes:["ua"],tags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"}},"shop/supermarket|Булмаг":{countryCodes:["bg"],tags:{brand:"Булмаг","brand:en":"BulMag","brand:wikidata":"Q66133376",name:"Булмаг","name:en":"BulMag",shop:"supermarket"}},"shop/supermarket|Верный":{tags:{brand:"Верный",name:"Верный",shop:"supermarket"}},"shop/supermarket|Виктория":{countryCodes:["ru"],matchTags:["shop/convenience"],nomatch:["amenity/cafe|Виктория","shop/hairdresser|Виктория"],tags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"}},"shop/supermarket|Виталюр":{countryCodes:["by"],tags:{brand:"Виталюр","brand:wikidata":"Q55663075","brand:wikipedia":"ru:Виталюр",name:"Виталюр",shop:"supermarket"}},"shop/supermarket|Вопак":{countryCodes:["ua"],tags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"}},"shop/supermarket|Гастроном":{tags:{brand:"Гастроном",name:"Гастроном",shop:"supermarket"}},"shop/supermarket|Гроздь":{nomatch:["shop/convenience|Гроздь"],tags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"supermarket"}},"shop/supermarket|Гулливер":{countryCodes:["ru"],tags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"}},"shop/supermarket|Десяточка":{countryCodes:["ru"],tags:{brand:"Десяточка","brand:en":"Desyatochka","brand:wikidata":"Q61876182",name:"Десяточка",shop:"supermarket"}},"shop/supermarket|Дикси":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"}},"shop/supermarket|Евроопт":{countryCodes:["by"],matchTags:["shop/convenience"],tags:{brand:"Евроопт","brand:en":"Euroopt","brand:ru":"Евроопт","brand:wikidata":"Q2565040","brand:wikipedia":"be:Еўрагандаль",name:"Евроопт","name:en":"Euroopt","name:ru":"Евроопт",shop:"supermarket"}},"shop/supermarket|Евроопт Hyper":{countryCodes:["by"],matchNames:["евроопт гипер"],tags:{brand:"Евроопт Hyper","brand:wikidata":"Q65455975",name:"Евроопт Hyper",shop:"supermarket"}},"shop/supermarket|Евроопт Super":{countryCodes:["by"],matchNames:["евроопт супер"],tags:{brand:"Евроопт Super","brand:wikidata":"Q65455960",name:"Евроопт Super",shop:"supermarket"}},"shop/supermarket|Караван":{countryCodes:["ru","ua"],tags:{brand:"Караван",name:"Караван",shop:"supermarket"}},"shop/supermarket|Карусель":{countryCodes:["ru"],tags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"}},"shop/supermarket|Квартал":{tags:{brand:"Квартал",name:"Квартал",shop:"supermarket"}},"shop/supermarket|Кировский":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Кировский","brand:wikidata":"Q63301903",name:"Кировский",shop:"supermarket"}},"shop/supermarket|Командор":{countryCodes:["ru"],tags:{brand:"Командор","brand:en":"Komandor","brand:wikidata":"Q61876152",name:"Командор",shop:"supermarket"}},"shop/supermarket|Красный Яр":{countryCodes:["ru"],tags:{brand:"Красный Яр","brand:en":"Krasnyj Jar","brand:wikidata":"Q1786753","brand:wikipedia":"ru:Красный Яр",name:"Красный Яр",shop:"supermarket"}},"shop/supermarket|Лента":{countryCodes:["ru"],tags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"}},"shop/supermarket|ЛотОК":{tags:{brand:"ЛотОК",name:"ЛотОК",shop:"supermarket"}},"shop/supermarket|Магазин":{tags:{brand:"Магазин",name:"Магазин",shop:"supermarket"}},"shop/supermarket|Магнит":{matchTags:["shop/department_store"],nomatch:["shop/convenience|Магнит","shop/cosmetics|Магнит Косметик"],tags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"}},"shop/supermarket|Магнит у дома":{countryCodes:["ru"],tags:{brand:"Магнит у дома",name:"Магнит у дома",shop:"supermarket"}},"shop/supermarket|Магнолия":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Магнолия","brand:wikipedia":"ru:Магнолия (сеть магазинов)",name:"Магнолия",shop:"supermarket"}},"shop/supermarket|Мария-Ра":{countryCodes:["ru"],nomatch:["shop/convenience|Мария-Ра"],tags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"}},"shop/supermarket|Мираторг":{countryCodes:["ru"],tags:{brand:"Мираторг",name:"Мираторг",shop:"supermarket"}},"shop/supermarket|Монетка":{countryCodes:["ru"],tags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"}},"shop/supermarket|Народная 7Я семьЯ":{countryCodes:["ru"],matchNames:["семья"],tags:{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"}},"shop/supermarket|Перекрёсток":{countryCodes:["ru"],matchNames:["перекресток"],matchTags:["shop/convenience"],tags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"}},"shop/supermarket|Покупочка":{countryCodes:["ru"],tags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"}},"shop/supermarket|Полушка":{countryCodes:["ru"],tags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"}},"shop/supermarket|Пятёрочка":{countryCodes:["ru"],matchNames:["пятерочка"],matchTags:["shop/convenience"],tags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"}},"shop/supermarket|Радеж":{countryCodes:["ru"],tags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"}},"shop/supermarket|Рублёвский":{countryCodes:["by"],tags:{brand:"Рублёвский",name:"Рублёвский",shop:"supermarket"}},"shop/supermarket|Рукавичка":{countryCodes:["ua"],tags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"}},"shop/supermarket|Светофор":{countryCodes:["ru"],tags:{brand:"Светофор","brand:en":"Svetofor","brand:wikidata":"Q61875920",name:"Светофор",shop:"supermarket"}},"shop/supermarket|Семишагофф":{countryCodes:["ru"],tags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"}},"shop/supermarket|Сільпо":{countryCodes:["ua"],tags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"}},"shop/supermarket|Таврия В":{countryCodes:["ua"],tags:{brand:"Таврия В","brand:wikidata":"Q61823146","brand:wikipedia":"uk:Таврія В",name:"Таврия В",shop:"supermarket"}},"shop/supermarket|Фора":{countryCodes:["ua"],tags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"}},"shop/supermarket|Фуршет":{countryCodes:["ua"],tags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"}},"shop/supermarket|Эдельвейс":{countryCodes:["ru"],tags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"}},"shop/supermarket|Ярче":{tags:{brand:"Ярче",name:"Ярче",shop:"supermarket"}},"shop/supermarket|שופרסל דיל":{countryCodes:["il"],tags:{brand:"שופרסל דיל","brand:he":"שופרסל דיל",name:"שופרסל דיל","name:he":"שופרסל דיל",shop:"supermarket"}},"shop/supermarket|سوبر ماركت":{tags:{brand:"سوبر ماركت",name:"سوبر ماركت",shop:"supermarket"}},"shop/supermarket|いなげや":{countryCodes:["jp"],tags:{brand:"いなげや","brand:en":"Inageya","brand:ja":"いなげや","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya","name:ja":"いなげや",shop:"supermarket"}},"shop/supermarket|まいばすけっと":{countryCodes:["jp"],tags:{brand:"まいばすけっと","brand:en":"My Basket","brand:ja":"まいばすけっと","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket","name:ja":"まいばすけっと",shop:"supermarket"}},"shop/supermarket|アコレ":{countryCodes:["jp"],tags:{"alt_name:en":"Acolle",brand:"アコレ","brand:en":"A・Colle","brand:ja":"アコレ","brand:wikidata":"Q11283128","brand:wikipedia":"ja:アコレ",name:"アコレ","name:en":"A・Colle","name:ja":"アコレ",shop:"supermarket"}},"shop/supermarket|イオン":{countryCodes:["jp"],tags:{brand:"イオン","brand:en":"AEON","brand:ja":"イオン","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON","name:ja":"イオン",shop:"supermarket"}},"shop/supermarket|イズミヤ":{countryCodes:["jp"],matchNames:["いづみや"],tags:{brand:"イズミヤ","brand:en":"Izumiya","brand:ja":"イズミヤ","brand:wikidata":"Q11286632","brand:wikipedia":"ja:イズミヤ",name:"イズミヤ","name:en":"Izumiya","name:ja":"イズミヤ",shop:"supermarket"}},"shop/supermarket|イトーヨーカドー":{countryCodes:["jp"],matchNames:["イトーヨーカ堂"],tags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:ja":"イトーヨーカドー","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado","name:ja":"イトーヨーカドー",shop:"supermarket"}},"shop/supermarket|オリンピック":{countryCodes:["jp"],tags:{brand:"オリンピック","brand:en":"Olympic","brand:ja":"オリンピック","brand:wikidata":"Q11292764","brand:wikipedia":"ja:Olympicグループ",name:"オリンピック","name:en":"Olympic","name:ja":"オリンピック",shop:"supermarket"}},"shop/supermarket|カスミ":{countryCodes:["jp"],tags:{brand:"カスミ","brand:en":"Kasumi","brand:ja":"カスミ","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi","name:ja":"カスミ",shop:"supermarket"}},"shop/supermarket|コープ":{countryCodes:["jp"],tags:{"alt_name:en":"Co-op",brand:"コープ","brand:en":"CO・OP","brand:ja":"コープ","brand:wikidata":"Q11508615","brand:wikipedia":"ja:日本生活協同組合連合会",name:"コープ","name:ja":"コープ",official_name:"日本生活協同組合連合会","official_name:en":"Japanese Consumers' Co-operative Union",shop:"supermarket"}},"shop/supermarket|コープこう":{countryCodes:["jp"],tags:{"alt_name:en":"Co-op Kobe",brand:"コープこう","brand:en":"CO・OP Kobe","brand:ja":"コープこう","brand:wikidata":"Q5137453","brand:wikipedia":"ja:生活協同組合コープこうべ",name:"コープこう","name:en":"CO・OP Kobe","name:ja":"コープこう",official_name:"生活協同組合コープこうべ","official_name:en":"The Consumer Co-operative Kobe",shop:"supermarket"}},"shop/supermarket|サミット":{countryCodes:["jp"],tags:{brand:"サミット","brand:en":"Summit","brand:ja":"サミット","brand:wikidata":"Q11305129","brand:wikipedia":"ja:サミット (チェーンストア)",name:"サミット","name:en":"Summit","name:ja":"サミット",shop:"supermarket"}},"shop/supermarket|スーパーバリュー":{countryCodes:["jp"],tags:{brand:"スーパーバリュー","brand:en":"Super Value","brand:ja":"スーパーバリュー","brand:wikidata":"Q11313802","brand:wikipedia":"ja:スーパーバリュー",name:"スーパーバリュー","name:en":"Super Value","name:ja":"スーパーバリュー",shop:"supermarket"}},"shop/supermarket|ダイエー":{countryCodes:["jp"],tags:{brand:"ダイエー","brand:en":"daiei","brand:ja":"ダイエー","brand:wikidata":"Q11316644","brand:wikipedia":"ja:ダイエー (店舗ブランド)",name:"ダイエー","name:en":"Daiei","name:ja":"ダイエー",shop:"supermarket"}},"shop/supermarket|トウズ":{countryCodes:["jp"],tags:{brand:"トウズ","brand:en":"Tou's","brand:ja":"トウズ","brand:wikidata":"Q53308796","brand:wikipedia":"ja:トウズ",name:"トウズ","name:en":"Tou's","name:ja":"トウズ",shop:"supermarket"}},"shop/supermarket|バロー":{countryCodes:["jp"],tags:{brand:"バロー","brand:en":"Valor","brand:ja":"バロー","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor","name:ja":"バロー",shop:"supermarket"}},"shop/supermarket|ベイシア":{countryCodes:["jp"],tags:{brand:"ベイシア","brand:en":"Beisia","brand:ja":"ベイシア","brand:wikidata":"Q11336776","brand:wikipedia":"ja:ベイシア",name:"ベイシア","name:en":"Beisia","name:ja":"ベイシア",shop:"supermarket"}},"shop/supermarket|マックスバリュ":{countryCodes:["jp"],tags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:ja":"マックスバリュ","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai","name:ja":"マックスバリュ",shop:"supermarket"}},"shop/supermarket|マルエツ":{countryCodes:["jp"],tags:{brand:"マルエツ","brand:en":"Maruetsu","brand:ja":"マルエツ","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu","name:ja":"マルエツ",shop:"supermarket"}},"shop/supermarket|ヤオコー":{countryCodes:["jp"],tags:{brand:"ヤオコー","brand:en":"Yaoko","brand:ja":"ヤオコー","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko","name:ja":"ヤオコー",shop:"supermarket"}},"shop/supermarket|ヨークベニマル":{countryCodes:["jp"],tags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:ja":"ヨークベニマル","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru","name:ja":"ヨークベニマル",shop:"supermarket"}},"shop/supermarket|ヨークマート":{countryCodes:["jp"],tags:{brand:"ヨークマート","brand:en":"YorkMart","brand:ja":"ヨークマート","brand:wikidata":"Q11346201","brand:wikipedia":"ja:ヨークマート",name:"ヨークマート","name:en":"YorkMart","name:ja":"ヨークマート",shop:"supermarket"}},"shop/supermarket|ライフ":{countryCodes:["jp"],tags:{brand:"ライフ","brand:en":"Life","brand:ja":"ライフ","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life","name:ja":"ライフ",shop:"supermarket"}},"shop/supermarket|ワイズマート":{countryCodes:["jp"],matchNames:["よしのぶっさん"],tags:{brand:"ワイズマート","brand:en":"Y'smart","brand:ja":"ワイズマート","brand:wikidata":"Q11351175","brand:wikipedia":"ja:ワイズマート",name:"ワイズマート","name:en":"Y'smart","name:ja":"ワイズマート",shop:"supermarket"}},"shop/supermarket|全聯":{countryCodes:["tw"],tags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"}},"shop/supermarket|全聯福利中心":{countryCodes:["tw"],tags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"}},"shop/supermarket|家乐福":{countryCodes:["cn"],tags:{brand:"家乐福","brand:wikidata":"Q217599","brand:wikipedia":"wuu:家乐福",name:"家乐福",shop:"supermarket"}},"shop/supermarket|惠康 Wellcome":{countryCodes:["hk"],tags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"}},"shop/supermarket|東急ストア":{countryCodes:["jp"],tags:{brand:"東急ストア","brand:en":"Tokyu Store","brand:ja":"東急ストア","brand:wikidata":"Q11526963","brand:wikipedia":"ja:東急ストア",name:"東急ストア","name:en":"Tokyu Store","name:ja":"東急ストア",shop:"supermarket"}},"shop/supermarket|東武ストア":{countryCodes:["jp"],tags:{brand:"東武ストア","brand:en":"Tobu Store","brand:ja":"東武ストア","brand:wikidata":"Q11527478","brand:wikipedia":"ja:東武ストア",name:"東武ストア","name:en":"Tobu Store","name:ja":"東武ストア",shop:"supermarket"}},"shop/supermarket|業務スーパー":{countryCodes:["jp"],tags:{brand:"業務スーパー","brand:en":"Gyomu Super","brand:ja":"業務スーパー","brand:wikidata":"Q11590183","brand:wikipedia":"ja:神戸物産",name:"業務スーパー","name:en":"Gyōmu sūpā","name:ja":"業務スーパー",shop:"supermarket"}},"shop/supermarket|沃尔玛":{countryCodes:["cn"],tags:{brand:"沃尔玛","brand:en":"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"wuu:沃尔玛",name:"沃尔玛","name:en":"Walmart",shop:"supermarket"}},"shop/supermarket|美廉社":{countryCodes:["tw"],tags:{brand:"美廉社","brand:en":"Simple Mart","brand:wikidata":"Q15914017","brand:wikipedia":"zh:美廉社",name:"美廉社","name:en":"Simple Mart",shop:"supermarket"}},"shop/supermarket|西友":{countryCodes:["jp"],tags:{brand:"西友","brand:en":"Seiyu","brand:wikidata":"Q3108542","brand:wikipedia":"en:Seiyu Group",name:"西友","name:en":"Seiyu",shop:"supermarket"}},"shop/supermarket|頂好":{countryCodes:["tw"],tags:{brand:"頂好","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好","name:en":"Wellcome",shop:"supermarket"}},"shop/supermarket|頂好超市":{countryCodes:["tw"],tags:{brand:"頂好超市","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好超市","name:en":"Wellcome",shop:"supermarket"}},"shop/supermarket|롯데마트":{countryCodes:["kr"],tags:{brand:"롯데마트","brand:ko":"롯데마트","brand:wikidata":"Q326715","brand:wikipedia":"ko:롯데마트",name:"롯데마트","name:en":"Lotte Mart","name:ko":"롯데마트",shop:"supermarket"}},"shop/supermarket|우리마트":{countryCodes:["kr"],tags:{brand:"우리마트","brand:ko":"우리마트",name:"우리마트","name:ko":"우리마트",shop:"supermarket"}},"shop/supermarket|하나로마트":{countryCodes:["kr"],tags:{brand:"하나로마트","brand:en":"Hanaro Mart","brand:ko":"하나로마트","brand:wikidata":"Q12590611","brand:wikipedia":"ko:농협유통",name:"하나로마트","name:ko":"하나로마트",shop:"supermarket"}},"shop/swimming_pool|Leslie's Pool Supplies":{countryCodes:["us"],matchNames:["leslies pool supply","leslies swimming pool supplies"],matchTags:["shop/outdoor","shop/pool","shop/water_sports"],tags:{brand:"Leslie's Pool Supplies","brand:wikidata":"Q6530568","brand:wikipedia":"en:Leslie's Poolmart",name:"Leslie's Pool Supplies",official_name:"Leslie's Pool Supplies Service & Repair",shop:"swimming_pool"}},"shop/tea|DavidsTea":{countryCodes:["ca","us"],tags:{brand:"DavidsTea","brand:wikidata":"Q3019129","brand:wikipedia":"en:DavidsTea",name:"DavidsTea",shop:"tea"}},"shop/tea|T2":{countryCodes:["au"],tags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"}},"shop/tea|TeeGschwendner":{countryCodes:["de"],tags:{brand:"TeeGschwendner","brand:wikidata":"Q2399969","brand:wikipedia":"de:TeeGschwendner",name:"TeeGschwendner",shop:"tea"}},"shop/telecommunication|A1":{countryCodes:["at","bg","by","hr","si"],matchNames:["velcom","velcom|a1","велком"],nomatch:["shop/mobile_phone|A1"],tags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"telecommunication"}},"shop/telecommunication|Agencia ICE":{tags:{brand:"Agencia ICE",name:"Agencia ICE",shop:"telecommunication"}},"shop/telecommunication|Bell":{countryCodes:["ca"],matchNames:["bell canada"],nomatch:["shop/mobile_phone|Bell"],tags:{brand:"Bell","brand:wikidata":"Q815694","brand:wikipedia":"en:Bell Canada",name:"Bell",shop:"telecommunication"}},"shop/telecommunication|Malitel":{countryCodes:["ml"],tags:{brand:"Malitel","brand:wikidata":"Q6743829","brand:wikipedia":"en:Malitel",name:"Malitel",shop:"telecommunication"}},"shop/telecommunication|Ooredoo":{tags:{brand:"Ooredoo","brand:wikidata":"Q919935","brand:wikipedia":"en:Ooredoo",name:"Ooredoo",shop:"telecommunication"}},"shop/telecommunication|Orange Mali":{countryCodes:["ml"],tags:{brand:"Orange Mali","brand:wikidata":"Q3355061","brand:wikipedia":"fr:Orange Mali",name:"Orange Mali",shop:"telecommunication"}},"shop/telecommunication|Spectrum":{countryCodes:["us"],tags:{brand:"Spectrum","brand:wikidata":"Q7805197","brand:wikipedia":"en:Spectrum (cable service)",name:"Spectrum",shop:"telecommunication"}},"shop/telecommunication|Xfinity":{countryCodes:["us"],tags:{brand:"Xfinity","brand:wikidata":"Q5151002","brand:wikipedia":"en:Xfinity",name:"Xfinity",shop:"telecommunication"}},"shop/telecommunication|Дом.ru":{tags:{brand:"Дом.ru",name:"Дом.ru",shop:"telecommunication"}},"shop/telecommunication|МТС":{countryCodes:["by","ru","ua"],nomatch:["shop/mobile_phone|МТС"],tags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"telecommunication"}},"shop/telecommunication|Ростелеком":{countryCodes:["ru"],tags:{brand:"Ростелеком","brand:wikidata":"Q1477012","brand:wikipedia":"en:Rostelecom",name:"Ростелеком",shop:"telecommunication"}},"shop/telecommunication|Укртелеком":{countryCodes:["ua"],tags:{brand:"Укртелеком","brand:wikidata":"Q1505321","brand:wikipedia":"en:Ukrtelecom",name:"Укртелеком",shop:"telecommunication"}},"shop/telecommunication|中華電信":{countryCodes:["tw"],tags:{brand:"中華電信","brand:en":"Chunghwa Telecom","brand:wikidata":"Q717531","brand:wikipedia":"zh:中華電信","brand:zh":"中華電信",name:"中華電信","name:en":"Chunghwa Telecom","name:zh":"中華電信",shop:"telecommunication"}},"shop/telecommunication|遠傳電信":{countryCodes:["tw"],tags:{brand:"遠傳電信","brand:en":"FarEasTone","brand:wikidata":"Q5434486","brand:wikipedia":"zh:遠傳電信","brand:zh":"遠傳電信",name:"遠傳電信","name:en":"FarEasTone","name:zh":"遠傳電信",shop:"telecommunication"}},"shop/ticket|Boutique Grandes Lignes":{countryCodes:["fr"],tags:{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"}},"shop/ticket|DB Reisezentrum":{countryCodes:["de"],matchNames:["reisezentrum"],tags:{brand:"DB Reisezentrum","brand:wikidata":"Q15842100","brand:wikipedia":"de:Reisezentrum",name:"DB Reisezentrum",shop:"ticket"}},"shop/ticket|Guichet Transilien":{countryCodes:["fr"],tags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"}},"shop/tiles|Topps Tiles":{countryCodes:["gb"],matchTags:["shop/diy"],tags:{brand:"Topps Tiles","brand:wikidata":"Q17026595","brand:wikipedia":"en:Topps Tiles",name:"Topps Tiles",shop:"tiles"}},"shop/tobacco|Nemzeti Dohánybolt":{countryCodes:["hu"],matchNames:["dohánybolt"],matchTags:["shop/kiosk"],tags:{brand:"Nemzeti Dohánybolt","brand:wikidata":"Q20639040","brand:wikipedia":"en:Dohánybolt",name:"Nemzeti Dohánybolt",shop:"tobacco"}},"shop/tool_hire|HSS Hire":{countryCodes:["gb","ie"],tags:{brand:"HSS Hire","brand:wikidata":"Q5636000","brand:wikipedia":"en:HSS Hire",name:"HSS Hire",shop:"tool_hire"}},"shop/toys|Build-A-Bear Workshop":{countryCodes:["ca","gb","us"],matchNames:["build a bear"],matchTags:["shop/gift"],tags:{brand:"Build-A-Bear Workshop","brand:wikidata":"Q1002992","brand:wikipedia":"en:Build-A-Bear Workshop",name:"Build-A-Bear Workshop",shop:"toys"}},"shop/toys|Dráčik":{countryCodes:["cz","sk"],tags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"}},"shop/toys|Early Learning Centre":{matchNames:["early learning center"],tags:{alt_name:"ELC",brand:"Early Learning Centre","brand:wikidata":"Q5326681","brand:wikipedia":"en:Early Learning Centre",name:"Early Learning Centre",shop:"toys"}},"shop/toys|Hawkin's Bazaar":{countryCodes:["gb"],tags:{brand:"Hawkin's Bazaar","brand:wikidata":"Q16983539",name:"Hawkin's Bazaar",shop:"toys"}},"shop/toys|Intertoys":{countryCodes:["be","de","nl"],tags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"}},"shop/toys|JouéClub":{countryCodes:["ad","fr","it","lb","ma","qa"],tags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"}},"shop/toys|Juguettos":{tags:{brand:"Juguettos",name:"Juguettos",shop:"toys"}},"shop/toys|King Jouet":{countryCodes:["fr"],tags:{brand:"King Jouet","brand:en":"King Toy","brand:wikidata":"Q3197009","brand:wikipedia":"fr:King Jouet",name:"King Jouet","name:en":"King Toy",shop:"toys"}},"shop/toys|La Grande Récré":{countryCodes:["be","ci","es","fr","ma"],tags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"}},"shop/toys|Lego":{matchNames:["lego store"],tags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"}},"shop/toys|Lekia":{countryCodes:["no","se"],tags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"}},"shop/toys|Maxi Toys":{countryCodes:["be","de","fr","it"],tags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"}},"shop/toys|Menkind":{countryCodes:["gb"],tags:{brand:"Menkind","brand:wikidata":"Q66725844",name:"Menkind",shop:"toys"}},"shop/toys|Ri Happy Brinquedos":{countryCodes:["pt"],tags:{brand:"Ri Happy Brinquedos","brand:wikidata":"Q10360441","brand:wikipedia":"pt:Ri Happy Brinquedos",name:"Ri Happy Brinquedos",shop:"toys"}},"shop/toys|Smyths":{countryCodes:["at","ch","de","gb","ie"],tags:{brand:"Smyths","brand:wikidata":"Q7546779","brand:wikipedia":"en:Smyths",name:"Smyths",shop:"toys"}},"shop/toys|The Entertainer":{countryCodes:["gb","je"],tags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"}},"shop/toys|Toys Center":{countryCodes:["it"],tags:{brand:"Toys Center",name:"Toys Center",shop:"toys"}},"shop/toys|Toys R Us":{tags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"}},"shop/toys|Бегемотик":{countryCodes:["ru"],tags:{brand:"Бегемотик",name:"Бегемотик",shop:"toys"}},"shop/toys|Детский мир":{countryCodes:["kz","ru"],tags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"}},"shop/toys|Кораблик":{countryCodes:["ru"],tags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"}},"shop/trade|84 Lumber":{countryCodes:["us"],matchNames:["84","eighty-four lumber"],tags:{brand:"84 Lumber","brand:wikidata":"Q4644779","brand:wikipedia":"en:84 Lumber",name:"84 Lumber",shop:"trade",trade:"building_supplies"}},"shop/trade|Caterpillar":{matchTags:["shop/car","shop/farm","shop/hardware","shop/tractor"],tags:{brand:"Caterpillar","brand:wikidata":"Q459965","brand:wikipedia":"en:Caterpillar Inc.",name:"Caterpillar",shop:"trade",short_name:"CAT",trade:"agricultural_equipment"}},"shop/trade|Fastenal":{countryCodes:["ca","pa","us"],tags:{brand:"Fastenal","brand:wikidata":"Q3067119","brand:wikipedia":"en:Fastenal",name:"Fastenal",shop:"trade"}},"shop/trade|Grainger":{countryCodes:["ca","us"],matchNames:["granger","w. w. grainger"],tags:{brand:"Grainger","brand:wikidata":"Q1627894","brand:wikipedia":"en:W. W. Grainger",name:"Grainger",shop:"trade"}},"shop/trade|John Deere":{countryCodes:["ca","us"],matchTags:["shop/car","shop/farm","shop/hardware","shop/tractor"],tags:{brand:"John Deere","brand:wikidata":"Q496302","brand:wikipedia":"en:John Deere",name:"John Deere",shop:"trade",trade:"agricultural_equipment"}},"shop/travel_agency|Alltours":{countryCodes:["de"],tags:{brand:"Alltours","brand:wikidata":"Q2649481","brand:wikipedia":"de:Alltours",name:"Alltours",shop:"travel_agency"}},"shop/travel_agency|American Automobile Association":{countryCodes:["us"],matchTags:["office/travel_agent","shop/car"],nomatch:["office/insurance|AAA Insurance"],tags:{brand:"American Automobile Association","brand:wikidata":"Q463436","brand:wikipedia":"en:American Automobile Association",name:"American Automobile Association",shop:"travel_agency",short_name:"AAA"}},"shop/travel_agency|Coral Travel":{countryCodes:["pl","ru","ua"],tags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"}},"shop/travel_agency|D-reizen":{countryCodes:["nl"],tags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"}},"shop/travel_agency|DER Reisebüro":{countryCodes:["de"],matchNames:["der deutsches reisebüro"],tags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"}},"shop/travel_agency|Expedia CruiseShipCenters":{countryCodes:["ca","us"],tags:{brand:"Expedia CruiseShipCenters","brand:wikidata":"Q5189985","brand:wikipedia":"en:Expedia CruiseShipCenters",name:"Expedia CruiseShipCenters",shop:"travel_agency"}},"shop/travel_agency|First Reisebüro":{countryCodes:["de"],tags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"First Reisebüro",shop:"travel_agency"}},"shop/travel_agency|Flight Centre":{tags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"}},"shop/travel_agency|Halcón Viajes":{countryCodes:["es"],tags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"}},"shop/travel_agency|Havas Voyages":{countryCodes:["fr"],tags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"}},"shop/travel_agency|Hays Travel":{countryCodes:["gb"],tags:{brand:"Hays Travel","brand:wikidata":"Q70250954","brand:wikipedia":"en:Hays Travel",name:"Hays Travel",shop:"travel_agency"}},"shop/travel_agency|JTB":{countryCodes:["jp"],tags:{brand:"JTB","brand:wikidata":"Q6109053","brand:wikipedia":"ja:JTB",name:"JTB",official_name:"日本交通公社","official_name:en":"Japan Travel Bureau",shop:"travel_agency"}},"shop/travel_agency|Kuoni":{tags:{brand:"Kuoni","brand:wikidata":"Q684355","brand:wikipedia":"en:Kuoni Travel",name:"Kuoni",shop:"travel_agency"}},"shop/travel_agency|Last Minute Tour":{countryCodes:["it"],tags:{brand:"Last Minute Tour",name:"Last Minute Tour",shop:"travel_agency"}},"shop/travel_agency|Liberty Travel":{countryCodes:["us"],tags:{brand:"Liberty Travel","brand:wikidata":"Q17031665","brand:wikipedia":"en:Liberty Travel",name:"Liberty Travel",shop:"travel_agency"}},"shop/travel_agency|Neckermann Reisen":{countryCodes:["de"],tags:{brand:"Neckermann Reisen","brand:wikidata":"Q17300280",name:"Neckermann Reisen",shop:"travel_agency"}},"shop/travel_agency|Reiseland":{countryCodes:["de"],tags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"}},"shop/travel_agency|Selectour":{countryCodes:["fr"],tags:{brand:"Selectour","brand:wikidata":"Q3478073","brand:wikipedia":"fr:Selectour",name:"Selectour",shop:"travel_agency"}},"shop/travel_agency|TUI~(Group)":{matchNames:["tui reisecenter"],tags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"TUI",shop:"travel_agency"}},"shop/travel_agency|TUI~(UK)":{countryCodes:["gb"],matchNames:["thomson"],tags:{brand:"TUI","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"TUI",shop:"travel_agency"}},"shop/travel_agency|The Co-operative Travel":{countryCodes:["gb"],tags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"}},"shop/travel_agency|Thomas Cook":{tags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"}},"shop/travel_agency|Turkish Airlines":{tags:{brand:"Turkish Airlines","brand:wikidata":"Q4548","brand:wikipedia":"en:Turkish Airlines",name:"Turkish Airlines",shop:"travel_agency"}},"shop/travel_agency|ltur":{countryCodes:["de"],tags:{brand:"ltur","brand:wikidata":"Q519040","brand:wikipedia":"de:L’TUR",name:"ltur",shop:"travel_agency"}},"shop/travel_agency|Поехали с нами":{countryCodes:["ua"],tags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"}},"shop/travel_agency|エイチ・アイ・エス":{countryCodes:["jp"],tags:{"alt_name:en":"HIS",brand:"エイチ・アイ・エス","brand:en":"H.I.S.","brand:ja":"エイチ・アイ・エス","brand:wikidata":"Q1452225","brand:wikipedia":"ja:エイチ・アイ・エス",name:"エイチ・アイ・エス","name:en":"H.I.S.","name:ja":"エイチ・アイ・エス",shop:"travel_agency"}},"shop/travel_agency|近畿日本ツーリスト":{countryCodes:["jp"],tags:{brand:"近畿日本ツーリスト","brand:en":"KNT","brand:ja":"近畿日本ツーリスト","brand:wikidata":"Q11638632","brand:wikipedia":"ja:近畿日本ツーリスト",name:"近畿日本ツーリスト","name:en":"KNT","name:ja":"近畿日本ツーリスト","official_name:en":"Kinki Nippon Tourist",shop:"travel_agency"}},"shop/tyres|Big O Tires":{countryCodes:["ca","us"],tags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"}},"shop/tyres|Bridgestone":{tags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"}},"shop/tyres|Discount Tire":{countryCodes:["us"],tags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"}},"shop/tyres|Express Oil Change & Tire Engineers":{countryCodes:["us"],tags:{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"}},"shop/tyres|Les Schwab Tire Center":{countryCodes:["us"],matchNames:["les schwab"],tags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"}},"shop/tyres|Michelin":{tags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"}},"shop/tyres|Pneuhage":{countryCodes:["de"],tags:{brand:"Pneuhage","brand:wikidata":"Q2099972","brand:wikipedia":"de:Pneuhage",name:"Pneuhage",shop:"tyres"}},"shop/tyres|Tire Discounters":{countryCodes:["us"],tags:{brand:"Tire Discounters","brand:wikidata":"Q29093639","brand:wikipedia":"en:Tire Discounters",name:"Tire Discounters",shop:"tyres"}},"shop/tyres|Tires Plus":{countryCodes:["us"],tags:{brand:"Tires Plus","brand:wikidata":"Q64015091",name:"Tires Plus",shop:"tyres"}},"shop/tyres|Vianor":{tags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"}},"shop/vacuum_cleaner|Oreck":{countryCodes:["us"],matchNames:["oreck vacuums"],tags:{brand:"Oreck","brand:wikidata":"Q57273844",name:"Oreck",shop:"vacuum_cleaner"}},"shop/variety_store|99 Cents Only Stores":{countryCodes:["us"],matchNames:["99 cent only stores","99 cents only"],tags:{brand:"99 Cents Only Stores","brand:wikidata":"Q4646294","brand:wikipedia":"en:99 Cents Only Stores",name:"99 Cents Only Stores",shop:"variety_store"}},"shop/variety_store|Action":{countryCodes:["at","be","de","fr","lu","nl","pl"],tags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"}},"shop/variety_store|B&M":{tags:{brand:"B&M",name:"B&M",shop:"variety_store"}},"shop/variety_store|B&M Bargains":{countryCodes:["gb"],tags:{brand:"B&M Bargains","brand:wikidata":"Q4836931","brand:wikipedia":"en:B & M",name:"B&M Bargains",shop:"variety_store"}},"shop/variety_store|Big Bazar":{countryCodes:["be","nl"],tags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"}},"shop/variety_store|D9150":{tags:{brand:"D9150",name:"D9150",shop:"variety_store"}},"shop/variety_store|D9300":{tags:{brand:"D9300",name:"D9300",shop:"variety_store"}},"shop/variety_store|Daiso Japan":{countryCodes:["au","us"],tags:{brand:"Daiso","brand:wikidata":"Q866991","brand:wikipedia":"en:Daiso",name:"Daiso Japan",shop:"variety_store",short_name:"Daiso"}},"shop/variety_store|Dealz":{tags:{brand:"Dealz","brand:wikidata":"Q16942585","brand:wikipedia":"en:Dealz",name:"Dealz",shop:"variety_store"}},"shop/variety_store|Dollar General":{countryCodes:["us"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/supermarket|Dollar General Market","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"}},"shop/variety_store|Dollar Tree":{countryCodes:["ca","us"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"}},"shop/variety_store|Dollarama":{countryCodes:["ca"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Family Dollar"],tags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"}},"shop/variety_store|EuroShop":{countryCodes:["de"],tags:{brand:"EuroShop","brand:wikidata":"Q15846763","brand:wikipedia":"de:Schum EuroShop",name:"EuroShop",shop:"variety_store"}},"shop/variety_store|Family Dollar":{countryCodes:["us"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama"],tags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"}},"shop/variety_store|Five Below":{countryCodes:["us"],tags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"}},"shop/variety_store|Fix Price":{countryCodes:["by","ru"],tags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"}},"shop/variety_store|Flying Tiger Copenhagen":{matchNames:["tgr","tiger"],matchTags:["shop/gift"],tags:{brand:"Flying Tiger Copenhagen","brand:wikidata":"Q2786319","brand:wikipedia":"en:Flying Tiger Copenhagen",name:"Flying Tiger Copenhagen",shop:"variety_store",short_name:"Flying Tiger"}},"shop/variety_store|GiFi":{countryCodes:["fr"],tags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"}},"shop/variety_store|Home Bargains":{countryCodes:["gb"],tags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"}},"shop/variety_store|La Foir'Fouille":{countryCodes:["be","fr","lu","mu","nc"],tags:{brand:"La Foir'Fouille","brand:wikidata":"Q3209040","brand:wikipedia":"fr:La Foir'Fouille",name:"La Foir'Fouille",shop:"variety_store"}},"shop/variety_store|M9":{tags:{brand:"M9",name:"M9",shop:"variety_store"}},"shop/variety_store|Miniso":{tags:{brand:"Miniso","brand:wikidata":"Q20732498","brand:wikipedia":"en:Miniso",name:"Miniso",shop:"variety_store"}},"shop/variety_store|Mäc-Geiz":{countryCodes:["de"],tags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"}},"shop/variety_store|NOZ":{countryCodes:["fr"],tags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"}},"shop/variety_store|Ocean State Job Lot":{countryCodes:["us"],tags:{brand:"Ocean State Job Lot","brand:wikidata":"Q7076076","brand:wikipedia":"en:Ocean State Job Lot",name:"Ocean State Job Lot",shop:"variety_store",short_name:"Job Lot"}},"shop/variety_store|Ollie's Bargain Outlet":{countryCodes:["us"],tags:{brand:"Ollie's Bargain Outlet","brand:wikidata":"Q7088304","brand:wikipedia":"en:Ollie's Bargain Outlet",name:"Ollie's Bargain Outlet",shop:"variety_store",short_name:"Ollie's"}},"shop/variety_store|Poundland":{countryCodes:["gb"],tags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"}},"shop/variety_store|Poundstretcher":{countryCodes:["gb"],tags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"}},"shop/variety_store|Poundworld":{countryCodes:["gb","ie"],tags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"}},"shop/variety_store|Roses":{countryCodes:["us"],tags:{brand:"Roses","brand:wikidata":"Q7368644","brand:wikipedia":"en:Roses (store)",name:"Roses",shop:"variety_store"}},"shop/variety_store|TEDi":{countryCodes:["at","de","es","hr","si","sk"],tags:{brand:"TEDi","brand:wikidata":"Q1364603","brand:wikipedia":"de:TEDi",name:"TEDi",shop:"variety_store"}},"shop/variety_store|Tokmanni":{countryCodes:["fi"],tags:{brand:"Tokmanni","brand:wikidata":"Q13423470","brand:wikipedia":"fi:Tokmanni",name:"Tokmanni",shop:"variety_store"}},"shop/variety_store|Wilko":{countryCodes:["gb"],tags:{brand:"Wilko","brand:wikidata":"Q8002536","brand:wikipedia":"en:Wilko (retailer)",name:"Wilko",shop:"variety_store"}},"shop/variety_store|キャンドゥ":{countryCodes:["jp"],tags:{brand:"キャンドゥ","brand:en":"CAN DO","brand:ja":"キャンドゥ","brand:wikidata":"Q11297367","brand:wikipedia":"ja:キャンドゥ",name:"キャンドゥ","name:en":"CAN DO","name:ja":"キャンドゥ",shop:"variety_store"}},"shop/variety_store|セリア":{countryCodes:["jp"],tags:{brand:"セリア","brand:en":"Seria","brand:ja":"セリア","brand:wikidata":"Q11314509","brand:wikipedia":"ja:セリア (100円ショップ)",name:"セリア","name:en":"Seria","name:ja":"セリア",shop:"variety_store"}},"shop/variety_store|ダイソー":{countryCodes:["jp"],matchNames:["ザ・ダイソー"],tags:{brand:"ダイソー","brand:en":"Daiso","brand:ja":"ダイソー","brand:wikidata":"Q866991","brand:wikipedia":"ja:大創産業",name:"ダイソー","name:en":"Daiso","name:ja":"ダイソー",shop:"variety_store"}},"shop/variety_store|ダイレックス":{countryCodes:["jp"],tags:{brand:"ダイレックス","brand:en":"Direx","brand:ja":"ダイレックス","brand:wikidata":"Q11317051","brand:wikipedia":"ja:ダイレックス (ディスカウントストア)",name:"ダイレックス","name:en":"Direx","name:ja":"ダイレックス",shop:"variety_store"}},"shop/variety_store|トライアル":{countryCodes:["jp"],tags:{brand:"トライアル","brand:en":"Trial","brand:ja":"トライアル","brand:wikidata":"Q11321723","brand:wikipedia":"ja:トライアルカンパニー",name:"トライアル","name:en":"Trial","name:ja":"トライアル",shop:"variety_store"}},"shop/variety_store|ドン・キホーテ":{countryCodes:["jp"],tags:{brand:"ドン・キホーテ","brand:en":"Don Quijote","brand:ja":"ドン・キホーテ","brand:wikidata":"Q1185381","brand:wikipedia":"ja:ドン・キホーテ (企業)",name:"ドン・キホーテ","name:en":"Don Quijote","name:ja":"ドン・キホーテ",opening_hours:"24/7",shop:"variety_store",short_name:"ドンキ","short_name:en":"Donki","short_name:ja":"ドンキ"}},"shop/video_games|EB Games":{countryCodes:["au","ca","nz"],tags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"}},"shop/video_games|Game":{countryCodes:["es","gb"],tags:{brand:"Game","brand:wikidata":"Q5519813","brand:wikipedia":"en:Game (retailer)",name:"Game",shop:"video_games"}},"shop/video_games|Game Mania":{countryCodes:["be","nl"],tags:{brand:"Game Mania","brand:wikidata":"Q18069429","brand:wikipedia":"nl:Game Mania",name:"Game Mania",shop:"video_games"}},"shop/video_games|GameStop":{tags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"}},"shop/video_games|Micromania":{countryCodes:["fr"],tags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"}},"shop/video|Blockbuster":{tags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"}},"shop/video|Family Video":{countryCodes:["us"],tags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"}},"shop/video|TSUTAYA":{nomatch:["shop/books|TSUTAYA","shop/music|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"}},"shop/video|ゲオ":{countryCodes:["jp"],matchNames:["geo"],tags:{brand:"GEO","brand:ja":"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ","name:en":"GEO","name:ja":"ゲオ",shop:"video"}},"shop/watches|Fossil":{countryCodes:["ca","de","us"],matchTags:["shop/jewelry"],tags:{brand:"Fossil","brand:wikidata":"Q356212","brand:wikipedia":"en:Fossil Group",name:"Fossil",shop:"watches"}},"shop/watches|Omega":{countryCodes:["ch","fr"],tags:{brand:"Omega","brand:wikidata":"Q659224","brand:wikipedia":"en:Omega SA",name:"Omega",shop:"watches"}},"shop/watches|Rolex":{countryCodes:["us"],tags:{brand:"Rolex","brand:wikidata":"Q62288","brand:wikipedia":"en:Rolex",name:"Rolex",shop:"watches"}},"shop/watches|Swatch":{matchTags:["shop/jewelry"],tags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"}},"shop/wholesale|BJ's Wholesale Club":{countryCodes:["us"],matchNames:["bjs","bjs wholesale"],tags:{brand:"BJ's Wholesale Club","brand:wikidata":"Q4835754","brand:wikipedia":"en:BJ's Wholesale Club",name:"BJ's Wholesale Club",shop:"wholesale"}},"shop/wholesale|Costco":{matchNames:["costco wholesale"],nomatch:["amenity/fuel|Costco Gasoline","amenity/pharmacy|Costco Pharmacy"],tags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",shop:"wholesale"}},"shop/wholesale|Makro":{tags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"}},"shop/wholesale|Metro":{nomatch:["amenity/bank|Metro Bank~(UK)","amenity/bank|Metrobank~(Philippines)","shop/mobile_phone|MetroPCS","shop/supermarket|Metro~(Ontario)","shop/supermarket|Metro~(Peru)","shop/supermarket|Metro~(Quebec)"],tags:{brand:"Metro","brand:wikidata":"Q13610282","brand:wikipedia":"en:Metro Cash & Carry",name:"Metro",shop:"wholesale"}},"shop/wholesale|Sam's Club":{nomatch:["amenity/fuel|Sam's Club"],tags:{brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",shop:"wholesale"}},"shop/wholesale|Sligro":{tags:{brand:"Sligro","brand:wikidata":"Q3170052","brand:wikipedia":"nl:Sligro Food Group",name:"Sligro",shop:"wholesale"}},"shop/wholesale|コストコ":{countryCodes:["jp"],tags:{brand:"コストコ","brand:en":"Costco","brand:ja":"コストコ","brand:wikidata":"Q715583","brand:wikipedia":"ja:コストコ",name:"コストコ","name:en":"Costco","name:ja":"コストコ",shop:"wholesale"}},"tourism/caravan_site|Big 4 Holiday Parks":{countryCodes:["au","nz"],tags:{brand:"Big 4 Holiday Parks","brand:wikidata":"Q18636678","brand:wikipedia":"en:BIG4 Holiday Parks",name:"BIG4 Holiday Parks",short_name:"Big4",tourism:"caravan_site"}},"tourism/caravan_site|KOA Holiday":{countryCodes:["ca","us"],tags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Holiday",short_name:"KOA",tourism:"caravan_site"}},"tourism/caravan_site|KOA Journey":{countryCodes:["ca","us"],tags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Journey",short_name:"KOA",tourism:"caravan_site"}},"tourism/caravan_site|KOA Kampground":{countryCodes:["ca","us"],matchNames:["kampgrounds of america","koa"],tags:{alt_name:"KOA Campground",brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Kampground",short_name:"KOA",tourism:"caravan_site"}},"tourism/caravan_site|KOA Resort":{countryCodes:["ca","us"],tags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",name:"KOA Resort",short_name:"KOA",tourism:"caravan_site"}},"tourism/hotel|AC Hotel":{tags:{brand:"AC Hotel","brand:wikidata":"Q5653536","brand:wikipedia":"en:AC Hotels",name:"AC Hotel",tourism:"hotel"}},"tourism/hotel|Aloft":{tags:{brand:"Aloft","brand:wikidata":"Q4734166","brand:wikipedia":"en:Aloft Hotels",name:"Aloft",tourism:"hotel"}},"tourism/hotel|AmericInn":{countryCodes:["us"],tags:{brand:"AmericInn","brand:wikidata":"Q4742493","brand:wikipedia":"en:AmericInn",name:"AmericInn",official_name:"AmericInn by Wyndham",tourism:"hotel"}},"tourism/hotel|B&B Hôtel":{countryCodes:["fr"],tags:{brand:"B&B Hôtel","brand:wikidata":"Q794939","brand:wikipedia":"en:B&B Hotels",name:"B&B Hôtel",tourism:"hotel"}},"tourism/hotel|Baymont":{countryCodes:["ca","mx","us"],matchNames:["baymont inn","baymont inn & suites"],tags:{brand:"Baymont","brand:wikidata":"Q4874634","brand:wikipedia":"en:Baymont Inn & Suites",name:"Baymont",official_name:"Baymont by Wyndham",tourism:"hotel"}},"tourism/hotel|Best Western":{nomatch:["tourism/hotel|Best Western Plus","tourism/hotel|Best Western Premier"],tags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"}},"tourism/hotel|Best Western Plus":{nomatch:["tourism/hotel|Best Western","tourism/hotel|Best Western Premier"],tags:{brand:"Best Western Plus","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"}},"tourism/hotel|Best Western Premier":{nomatch:["tourism/hotel|Best Western","tourism/hotel|Best Western Plus"],tags:{brand:"Best Western Premier","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Premier",tourism:"hotel"}},"tourism/hotel|Campanile":{nomatch:["amenity/restaurant|Campanile"],tags:{brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",name:"Campanile",tourism:"hotel"}},"tourism/hotel|Candlewood Suites":{countryCodes:["us"],tags:{brand:"Candlewood Suites","brand:wikidata":"Q5032010","brand:wikipedia":"en:Candlewood Suites",name:"Candlewood Suites",tourism:"hotel"}},"tourism/hotel|Centro Hotels":{countryCodes:["de"],tags:{brand:"Centro Hotels","brand:wikidata":"Q73645443",name:"Centro Hotel",tourism:"hotel"}},"tourism/hotel|Clarion":{countryCodes:["us"],tags:{brand:"Clarion","brand:wikidata":"Q78165540",name:"Clarion",tourism:"hotel"}},"tourism/hotel|Comfort Inn":{countryCodes:["ca","gb","us"],nomatch:["tourism/hotel|Comfort Suites"],tags:{brand:"Comfort Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn",tourism:"hotel"}},"tourism/hotel|Comfort Inn & Suites":{countryCodes:["ca","us"],tags:{brand:"Comfort Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn & Suites",tourism:"hotel"}},"tourism/hotel|Comfort Suites":{nomatch:["tourism/hotel|Comfort Inn"],tags:{brand:"Comfort Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Suites",tourism:"hotel"}},"tourism/hotel|Country Inn & Suites":{countryCodes:["ca","us"],tags:{brand:"Country Inn & Suites","brand:wikidata":"Q5177332","brand:wikipedia":"en:Country Inns & Suites",name:"Country Inn & Suites",tourism:"hotel"}},"tourism/hotel|Courtyard":{matchNames:["courtyard marriott"],tags:{brand:"Courtyard","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard",official_name:"Courtyard by Marriott",tourism:"hotel"}},"tourism/hotel|Crowne Plaza":{tags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"}},"tourism/hotel|Days Inn":{countryCodes:["ca","ch","gb","id","in","kr","mx","my","ph","sg","sn","th","us"],tags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",tourism:"hotel"}},"tourism/hotel|Delta Hotels":{matchNames:["delta"],tags:{brand:"Delta Hotels","brand:wikidata":"Q5254663","brand:wikipedia":"en:Delta Hotels",name:"Delta Hotels",tourism:"hotel"}},"tourism/hotel|DoubleTree":{tags:{brand:"DoubleTree","brand:wikidata":"Q2504643","brand:wikipedia":"en:DoubleTree",name:"DoubleTree",official_name:"DoubleTree by Hilton",tourism:"hotel"}},"tourism/hotel|Drury Inn & Suites":{countryCodes:["us"],tags:{brand:"Drury Inn & Suites","brand:wikidata":"Q5309391","brand:wikipedia":"en:Drury Hotels",name:"Drury Inn & Suites",tourism:"hotel"}},"tourism/hotel|EVEN Hotels":{countryCodes:["us"],tags:{brand:"EVEN Hotels","brand:wikidata":"Q5416522","brand:wikipedia":"en:Even Hotels",name:"EVEN Hotels",tourism:"hotel"}},"tourism/hotel|Embassy Suites":{countryCodes:["us"],tags:{brand:"Embassy Suites","brand:wikidata":"Q5369524","brand:wikipedia":"en:Embassy Suites by Hilton",name:"Embassy Suites",official_name:"Embassy Suites by Hilton",tourism:"hotel"}},"tourism/hotel|Extended Stay America":{countryCodes:["us"],tags:{brand:"Extended Stay America","brand:wikidata":"Q5421850","brand:wikipedia":"en:Extended Stay America",name:"Extended Stay America",tourism:"hotel"}},"tourism/hotel|Fairfield Inn":{countryCodes:["ca","cn","id","in","kr","mx","my","sv","us"],nomatch:["tourism/hotel|Fairfield Inn & Suites"],tags:{alt_name:"Fairfield by Marriott",brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"}},"tourism/hotel|Fairfield Inn & Suites":{countryCodes:["ca","mx","us"],nomatch:["tourism/hotel|Fairfield Inn"],tags:{brand:"Fairfield Inn & Suites","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn & Suites",tourism:"hotel"}},"tourism/hotel|Formule 1":{countryCodes:["fr"],tags:{brand:"Formule 1","brand:wikidata":"Q1630895","brand:wikipedia":"en:Hotel Formule 1",name:"Formule 1",tourism:"hotel"}},"tourism/hotel|Four Points by Sheraton":{tags:{brand:"Four Points by Sheraton","brand:wikidata":"Q1439966","brand:wikipedia":"en:Four Points by Sheraton",name:"Four Points by Sheraton",short_name:"Four Points",tourism:"hotel"}},"tourism/hotel|Gaylord":{tags:{brand:"Gaylord","brand:wikidata":"Q3099664","brand:wikipedia":"en:Gaylord Hotels",name:"Gaylord",tourism:"hotel"}},"tourism/hotel|Grand Hyatt":{tags:{brand:"Grand Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Grand Hyatt",tourism:"hotel"}},"tourism/hotel|Grupo Barceló":{countryCodes:["es","us"],tags:{brand:"Grupo Barceló","brand:en":"Barceló Group","brand:es":"Grupo Barceló","brand:wikidata":"Q15148996","brand:wikipedia":"es:Grupo Barceló",name:"Grupo Barceló","name:en":"Barceló Group","name:es":"Grupo Barceló",tourism:"hotel"}},"tourism/hotel|Hampton":{tags:{alt_name:"Hampton Inn",brand:"Hampton","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton",official_name:"Hampton by Hilton",tourism:"hotel"}},"tourism/hotel|Hampton Inn & Suites":{countryCodes:["us"],nomatch:["tourism/hotel|Hampton","tourism/hotel|Hampton Inn"],tags:{brand:"Hampton Inn & Suites","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton Inn & Suites",official_name:"Hampton Inn & Suites by Hilton",tourism:"hotel"}},"tourism/hotel|Hawthorn Suites":{countryCodes:["us"],tags:{brand:"Hawthorn Suites","brand:wikidata":"Q5685511","brand:wikipedia":"en:Hawthorn Suites",name:"Hawthorn Suites",official_name:"Hawthorn Suites by Wyndham",short_name:"Hawthorn",tourism:"hotel"}},"tourism/hotel|Hilton":{tags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"}},"tourism/hotel|Hilton Garden Inn":{countryCodes:["ca","mx","us"],tags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"}},"tourism/hotel|Holiday Inn":{nomatch:["tourism/hotel|Holiday Inn Express"],tags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"}},"tourism/hotel|Holiday Inn Express":{nomatch:["tourism/hotel|Holiday Inn"],tags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"}},"tourism/hotel|Holiday Inn Express & Suites":{tags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"}},"tourism/hotel|Home2 Suites":{countryCodes:["ca","mx","us"],matchNames:["home2"],tags:{brand:"Home2 Suites","brand:wikidata":"Q5887912","brand:wikipedia":"en:Home2 Suites by Hilton",name:"Home2 Suites",official_name:"Home2 Suites by Hilton",tourism:"hotel"}},"tourism/hotel|Homewood Suites":{countryCodes:["ca","us"],tags:{brand:"Homewood Suites","brand:wikidata":"Q5890701","brand:wikipedia":"en:Homewood Suites by Hilton",name:"Homewood Suites",official_name:"Homewood Suites by Hilton",tourism:"hotel"}},"tourism/hotel|Hotel Belvedere":{tags:{brand:"Hotel Belvedere",name:"Hotel Belvedere",tourism:"hotel"}},"tourism/hotel|Hotel Indigo":{countryCodes:["ca","us"],tags:{brand:"Hotel Indigo","brand:wikidata":"Q5911596","brand:wikipedia":"en:Hotel Indigo",name:"Hotel Indigo",tourism:"hotel"}},"tourism/hotel|Hyatt":{tags:{brand:"Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt",tourism:"hotel"}},"tourism/hotel|Hyatt Centric":{tags:{brand:"Hyatt Centric","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Centric",tourism:"hotel"}},"tourism/hotel|Hyatt House":{countryCodes:["us"],tags:{brand:"Hyatt House","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt House",tourism:"hotel"}},"tourism/hotel|Hyatt Place":{countryCodes:["us"],tags:{brand:"Hyatt Place","brand:wikidata":"Q72629292",name:"Hyatt Place",tourism:"hotel"}},"tourism/hotel|Hyatt Regency":{tags:{brand:"Hyatt Regency","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Regency",tourism:"hotel"}},"tourism/hotel|Ibis":{matchNames:["hotel ibis","ibis hotel"],tags:{brand:"Ibis","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis",tourism:"hotel"}},"tourism/hotel|Ibis Budget":{tags:{brand:"Ibis Budget","brand:wikidata":"Q1458135","brand:wikipedia":"en:Ibis Budget",name:"Ibis Budget",tourism:"hotel"}},"tourism/hotel|Ibis Styles":{tags:{brand:"Ibis Styles","brand:wikidata":"Q3147425","brand:wikipedia":"en:Ibis Styles",name:"Ibis Styles",tourism:"hotel"}},"tourism/hotel|InterContinental":{matchNames:["intercontinental hotels & resorts"],tags:{brand:"InterContinental","brand:wikidata":"Q1825730","brand:wikipedia":"en:InterContinental",name:"InterContinental",tourism:"hotel"}},"tourism/hotel|Intercity Hotel":{countryCodes:["at","cn","de","nl","om","sa"],tags:{brand:"Intercity Hotel","brand:wikidata":"Q73642490",name:"Intercity Hotel",tourism:"hotel"}},"tourism/hotel|JW Marriott":{matchNames:["jw marriott hotels"],tags:{brand:"JW Marriott","brand:wikidata":"Q1067636","brand:wikipedia":"en:JW Marriott Hotels",name:"JW Marriott",tourism:"hotel"}},"tourism/hotel|Jurys Inn":{countryCodes:["cz","gb","ie"],tags:{brand:"Jurys Inn","brand:wikidata":"Q12060924","brand:wikipedia":"en:Jurys Inn",name:"Jurys Inn",tourism:"hotel"}},"tourism/hotel|Kimpton":{tags:{brand:"Kimpton","brand:wikidata":"Q6410248","brand:wikipedia":"en:Kimpton Hotels & Restaurants",name:"Kimpton",tourism:"hotel"}},"tourism/hotel|Kyriad":{countryCodes:["fr"],tags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"}},"tourism/hotel|La Quinta Inn":{countryCodes:["ca","cl","co","hn","mx","us"],matchNames:["la quinta"],nomatch:["tourism/hotel|La Quinta Inn & Suites"],tags:{brand:"La Quinta Inn","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn",official_name:"La Quinta Inn by Wyndham",tourism:"hotel"}},"tourism/hotel|La Quinta Inn & Suites":{countryCodes:["ca","us"],matchNames:["la quinta inns and suites"],nomatch:["tourism/hotel|La Quinta Inn"],tags:{brand:"La Quinta Inn & Suites","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn & Suites",official_name:"La Quinta Inn & Suites by Wyndham",tourism:"hotel"}},"tourism/hotel|Le Méridien":{tags:{brand:"Le Méridien","brand:wikidata":"Q261077","brand:wikipedia":"en:Le Méridien",name:"Le Méridien",tourism:"hotel"}},"tourism/hotel|Marriott":{tags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"}},"tourism/hotel|Marriott Executive Apartments":{tags:{brand:"Marriott Executive Apartments","brand:wikidata":"Q72636824",name:"Marriott Executive Apartments",tourism:"hotel"}},"tourism/hotel|Meininger":{matchNames:["hoteles meininger"],tags:{brand:"Meininger","brand:wikidata":"Q42773330","brand:wikipedia":"de:Meininger Hotel Gruppe",name:"Meininger",official_name:"Meininger Hotels",tourism:"hotel"}},"tourism/hotel|Mercure":{tags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"}},"tourism/hotel|Microtel":{countryCodes:["ca","cn","mx","ph","us"],matchNames:["microtel inn"],nomatch:["tourism/hotel|Microtel Inn & Suites"],tags:{brand:"Microtel","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel",official_name:"Microtel by Wyndham",tourism:"hotel"}},"tourism/hotel|Microtel Inn & Suites":{countryCodes:["ca","mx","us"],nomatch:["tourism/hotel|Microtel"],tags:{brand:"Microtel Inn & Suites","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel Inn & Suites",official_name:"Microtel Inn & Suites by Wyndham",tourism:"hotel"}},"tourism/hotel|Moxy":{tags:{brand:"Moxy","brand:wikidata":"Q70287020","brand:wikipedia":"en:Marriott International",name:"Moxy",tourism:"hotel"}},"tourism/hotel|Novotel":{tags:{brand:"Novotel","brand:wikidata":"Q420545","brand:wikipedia":"en:Novotel",name:"Novotel",tourism:"hotel"}},"tourism/hotel|Park Hyatt":{tags:{brand:"Park Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Park Hyatt",tourism:"hotel"}},"tourism/hotel|Park Inn":{tags:{brand:"Park Inn","brand:wikidata":"Q60711675","brand:wikipedia":"ru:Park Inn by Radisson",name:"Park Inn",tourism:"hotel"}},"tourism/hotel|Park Plaza":{tags:{brand:"Park Plaza","brand:wikidata":"Q2052550","brand:wikipedia":"en:Park Plaza Hotels & Resorts",name:"Park Plaza Hotels",tourism:"hotel"}},"tourism/hotel|Premier Inn":{countryCodes:["gb"],tags:{brand:"Premier Inn","brand:wikidata":"Q2108626","brand:wikipedia":"en:Premier Inn",name:"Premier Inn",tourism:"hotel"}},"tourism/hotel|Première Classe":{countryCodes:["fr"],tags:{brand:"Première Classe","brand:wikidata":"Q5964551","brand:wikipedia":"en:Hôtel Première Classe",name:"Première Classe",tourism:"hotel"}},"tourism/hotel|Protea Hotel":{tags:{brand:"Protea Hotel","brand:wikidata":"Q17092570","brand:wikipedia":"en:Protea Hotels by Marriott",name:"Protea Hotel",tourism:"hotel"}},"tourism/hotel|Quality Inn":{countryCodes:["ca","mx","us"],tags:{brand:"Quality Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn",tourism:"hotel"}},"tourism/hotel|Quality Inn & Suites":{countryCodes:["ca","us"],tags:{brand:"Quality Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn & Suites",tourism:"hotel"}},"tourism/hotel|Qubus":{countryCodes:["pl"],tags:{brand:"Qubus","brand:wikidata":"Q11832868","brand:wikipedia":"pl:Qubus Hotel",name:"Qubus",official_name:"Qubus Hotel",tourism:"hotel"}},"tourism/hotel|Radisson":{matchNames:["radisson hotels"],tags:{brand:"Radisson","brand:wikidata":"Q1751979","brand:wikipedia":"en:Radisson Hotels",name:"Radisson",tourism:"hotel"}},"tourism/hotel|Radisson Blu":{tags:{brand:"Radisson Blu","brand:wikidata":"Q7281341","brand:wikipedia":"en:Radisson Blu",name:"Radisson Blu",tourism:"hotel"}},"tourism/hotel|Ramada":{tags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",tourism:"hotel"}},"tourism/hotel|Red Lion Hotels":{countryCodes:["us"],tags:{brand:"Red Lion Hotels","brand:wikidata":"Q25047720","brand:wikipedia":"en:Red Lion Hotels",name:"Red Lion Hotels",tourism:"hotel"}},"tourism/hotel|Red Roof Inn":{countryCodes:["us"],tags:{brand:"Red Roof Inn","brand:wikidata":"Q7304949","brand:wikipedia":"en:Red Roof Inn",name:"Red Roof Inn",tourism:"hotel"}},"tourism/hotel|Renaissance":{matchNames:["renaissance hotel"],tags:{brand:"Renaissance","brand:wikidata":"Q2143252","brand:wikipedia":"en:Renaissance Hotels",name:"Renaissance",tourism:"hotel"}},"tourism/hotel|Residence Inn":{tags:{brand:"Residence Inn","brand:wikidata":"Q7315394","brand:wikipedia":"en:Residence Inn by Marriott",name:"Residence Inn",tourism:"hotel"}},"tourism/hotel|Sheraton":{tags:{brand:"Sheraton","brand:wikidata":"Q634831","brand:wikipedia":"en:Sheraton Hotels and Resorts",name:"Sheraton",tourism:"hotel"}},"tourism/hotel|Sleep Inn":{countryCodes:["us"],tags:{brand:"Sleep Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Sleep Inn",tourism:"hotel"}},"tourism/hotel|SpringHill Suites":{countryCodes:["ca","mx","us"],tags:{brand:"SpringHill Suites","brand:wikidata":"Q7580351","brand:wikipedia":"en:SpringHill Suites",name:"SpringHill Suites",tourism:"hotel"}},"tourism/hotel|St. Regis":{tags:{alt_name:"Saint Regis",brand:"St. Regis","brand:wikidata":"Q30715430","brand:wikipedia":"en:St. Regis Hotels & Resorts",name:"St. Regis",tourism:"hotel"}},"tourism/hotel|Staybridge Suites":{countryCodes:["ca","gb","us"],tags:{brand:"Staybridge Suites","brand:wikidata":"Q7605116","brand:wikipedia":"en:Staybridge Suites",name:"Staybridge Suites",tourism:"hotel"}},"tourism/hotel|TRYP":{tags:{brand:"TRYP","brand:wikidata":"Q6153452","brand:wikipedia":"en:TRYP by Wyndham",name:"TRYP",official_name:"TRYP by Wyndham",tourism:"hotel"}},"tourism/hotel|The Ritz-Carlton":{matchNames:["ritz","ritz carlton","the ritz"],tags:{brand:"The Ritz-Carlton","brand:wikidata":"Q782200","brand:wikipedia":"en:The Ritz-Carlton Hotel Company",name:"The Ritz-Carlton",tourism:"hotel"}},"tourism/hotel|The Westin":{tags:{brand:"Westin","brand:wikidata":"Q1969162","brand:wikipedia":"en:Westin Hotels & Resorts",name:"The Westin",tourism:"hotel"}},"tourism/hotel|TownePlace Suites":{countryCodes:["ca","us"],matchNames:["towneplace marriott","towneplace suites marriott"],tags:{brand:"TownePlace Suites","brand:wikidata":"Q7830092","brand:wikipedia":"en:TownePlace Suites",name:"TownePlace Suites",official_name:"TownePlace Suites by Marriott",tourism:"hotel"}},"tourism/hotel|Travelodge~(Asia/Oceania)":{countryCodes:["au","hk","id","kr","my","nz","sg","th"],tags:{brand:"Travelodge","brand:wikidata":"Q24997583","brand:wikipedia":"en:Travelodge Australia",name:"Travelodge",tourism:"hotel"}},"tourism/hotel|Travelodge~(Europe)":{countryCodes:["es","gb","ie"],tags:{brand:"Travelodge","brand:wikidata":"Q9361374","brand:wikipedia":"en:Travelodge UK",name:"Travelodge",tourism:"hotel"}},"tourism/hotel|Travelodge~(North America)":{countryCodes:["ca","us"],tags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",tourism:"hotel"}},"tourism/hotel|Tru":{tags:{brand:"Tru","brand:wikidata":"Q24907770","brand:wikipedia":"en:Tru by Hilton",name:"Tru",official_name:"Tru by Hilton",tourism:"hotel"}},"tourism/hotel|Van der Valk Hotel":{countryCodes:["be","de","es","fr","nl","us"],tags:{brand:"Van der Valk","brand:wikidata":"Q2802214","brand:wikipedia":"en:Van der Valk (company)",name:"Van der Valk Hotel",tourism:"hotel"}},"tourism/hotel|W Hotels":{tags:{brand:"W Hotels","brand:wikidata":"Q7958488","brand:wikipedia":"en:W Hotels",name:"W Hotels",short_name:"W",tourism:"hotel"}},"tourism/hotel|Wingate":{countryCodes:["us"],matchNames:["wingate inn"],tags:{brand:"Wingate","brand:wikidata":"Q8025144","brand:wikipedia":"en:Wingate by Wyndham",name:"Wingate",official_name:"Wingate by Wyndham",tourism:"hotel"}},"tourism/hotel|easyHotel":{tags:{brand:"easyHotel","brand:wikidata":"Q17011598","brand:wikipedia":"en:EasyHotel",name:"easyHotel",tourism:"hotel"}},"tourism/hotel|Уют":{tags:{brand:"Уют",name:"Уют",tourism:"hotel"}},"tourism/hotel|東横イン":{countryCodes:["jp"],tags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:ja":"東横イン","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn","name:ja":"東横イン",tourism:"hotel"}},"tourism/motel|Americas Best Value Inn":{tags:{brand:"Americas Best Value Inn",name:"Americas Best Value Inn",tourism:"motel"}},"tourism/motel|Budget Host Inn":{countryCodes:["us"],tags:{alt_name:"Budget Host",brand:"Budget Host Inn","brand:wikidata":"Q16954336","brand:wikipedia":"en:Budget Host",name:"Budget Host Inn",tourism:"motel"}},"tourism/motel|Econo Lodge":{tags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"}},"tourism/motel|Knights Inn":{countryCodes:["ca","us"],tags:{brand:"Knights Inn","brand:wikidata":"Q6422409","brand:wikipedia":"en:Knights Inn",name:"Knights Inn",tourism:"motel"}},"tourism/motel|Motel 6":{countryCodes:["ca","us"],tags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"}},"tourism/motel|Rodeway Inn":{countryCodes:["ca","us"],tags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"}},"tourism/motel|Super 8":{countryCodes:["ca","us"],tags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",tourism:"motel"}}};
88609         var brands$1 = {
88610         brands: brands
88611         };
88612
88613         var keepTags = ["^amenity/bank$","^amenity/bicycle_rental$","^amenity/bureau_de_change$","^amenity/cafe$","^amenity/car_rental$","^amenity/car_sharing$","^amenity/charging_station$","^amenity/cinema$","^amenity/clinic$","^amenity/dentist$","^amenity/fast_food$","^amenity/fuel$","^amenity/hospital$","^amenity/ice_cream$","^amenity/money_transfer$","^amenity/payment_(centre|terminal)$","^amenity/pharmacy$","^amenity/post_office$","^amenity/public_bookcase$","^amenity/restaurant$","^amenity/social_(centre|facility)$","^amenity/vending_machine$","^amenity/veterinary$","^leisure/fitness_centre$","^office/accountant$","^office/employment_agency$","^office/estate_agent$","^office/financial(_advisor)?$","^office/insurance$","^office/tax_advisor$","^office/telecommunication$","^shop/(?!(yes|no|gas|convenience;gas|laundry|lottery|mall))","^tourism/(h|m)otel$"];
88614         var discardKeys = ["^amenity/bank\\|(bank zachodni|bz) wbk$","^amenity/bank\\|(kreis|stadt)?sparkasse.*$","^amenity/bank\\|bank spółdzielczy$","^amenity/bank\\|pko$","^amenity/bank\\|volks- und raiffeisenbank$","^amenity/bank\\|volksbank$","^amenity/bank\\|volksbank( |-)raiffeisenbank$","^amenity/bank\\|vr( |-)bank$","^amenity/bar\\|уют$","^amenity/bicycle_rental\\|nextbike$","^amenity/cafe\\|((eiscaf(e|é)\\s)?(dolomiti|venezia)|kiosque(\\sà)?\\scafé|caf(e|é)\\sexpress|встреча|рандеву|чайхана|жемчужина)$","^amenity/cinema\\|октябрь$","^amenity/clinic\\|(clinic|health center|health sub center|urgent care|consultorio|фап)$","^amenity/fast_food\\|(ali\\sbaba|antalya|asia\\s(bistro|imbiss|wok)|(berlin|city)\\sdöner|city\\s(grill|pizza)|kfc/taco\\sbell)$","^amenity/fast_food\\|(marmaris|pizza\\s(house|time))$","^amenity/fuel\\|gnv|gpl|posto|spbu|جایگاه\\scng$","^amenity/hospital\\|(clinic|health center|(government )?hospital( municipal)?)$","^amenity/hospital\\|фап$","^amenity/ice_cream\\|gelateria|venezia$","^amenity/pharmacy\\|(adler|bahnhof|brunnen|burg|bären|engel|hirsch|hubertus|kur|linden|löwen)(-| )?apotheke$","^amenity/pharmacy\\|(centrum|farm(a|á)cia\\s(central(e)?|comunale))$","^amenity/pharmacy\\|(marien|markt|neue|park|rathaus|rats|rosen|schloss|sonnen|stadt|stern)(-| )?apotheke$","^amenity/pharmacy\\|(айболит|арніка|фармация|фармація)$","^amenity/pharmacy\\|pharmacie\\s(centrale|comunale|de\\s(l'hôtel\\sde\\sville|la\\s(gare|mairie|poste))|du\\s(centre|marché|parc))$","^amenity/restaurant\\|((gasthaus|gasthof|schwarzer)?\\s?(adler|löwen))$","^amenity/restaurant\\|(ali\\sbaba|adria|akropolis|amici|aroma|asia|athen|athos|bahnhof|bamboo|bären|bella\\s(vista|napoli))","^amenity/restaurant\\|(belvedere|canteen|cantina|capri|carpe\\sdiem|casa\\s?(blanca|mia)|casino)","^amenity/restaurant\\|(china\\s(buffet|garden|house|king|star|town|wok)|(da|la|las|el)\\s)","^amenity/restaurant\\|(delphi|deutsches\\shaus|dionysos|dolce\\svita|dorfkrug|europa|frohsinn)","^amenity/restaurant\\|(golden\\sdragon|great\\swall)$","^amenity/restaurant\\|(grüner\\sbaum|hellas|hirsch(en)?|hong\\skong|ichiban|il\\sgiardino|jade\\sgarden|jägerhof)","^amenity/restaurant\\|(kirchenwirt|koliba|kreta|kreuz|krone|lamm|le\\s(bistrot|patio))","^amenity/restaurant\\|(l'escale|lemongrass|linde|lindenhof|little\\s(italy|india)|los\\s(amigos|arcos))","^amenity/restaurant\\|(lotus|löwen|maharaja|mamma\\smia|mandarin|marco\\spolo|marmaris|mediterraneo|mensa|milano|mykonos|mythos)","^amenity/restaurant\\|(namaste|napoli|new\\schina|oasis|ochsen|olympia|osaka|paradise|parrilla|peking|pho|pinocchio)","^amenity/restaurant\\|(pizza\\shouse|pizz(a|e)ria|pizza\\sking|pomodoro|portofino|poseidon|ratskeller|rhodos|ristorante\\s)","^amenity/restaurant\\|(roma|rose|rössl(e|i)|saffron|saigon|sakura|san\\smarco|santorini|schützenhaus|shalimar|shanghai|sonne|sphinx)","^amenity/restaurant\\|(sportheim|sternen|syrtaki|taj\\smahal|taste\\sof\\sindia|the\\skitchen|toscana|tokyo|traube)","^amenity/restaurant\\|(venezia|waldschänke|wok|zorbas|(zum|zur)\\s)","^amenity/restaurant\\|永和豆漿$","^amenity/social_facility\\|dom pomocy społecznej$","^amenity/social_facility\\|maison de retraite$","^amenity/social_facility\\|safe haven$","^shop/(convenience|kiosk)\\|(777|bp|esso|exxon|mobil|shell)$","^shop/bakery\\|(backshop|schneider|schäfer|каравай)$","^shop/bakery\\|(bäckerei\\s)?müller","^shop/butcher\\|butcher$","^shop/clothes\\|трикотаж$","^shop/convenience\\|(24 часа|августина|альянс|апельсин|ассорти|бер(е|ё)зка|бриз|валентина|весна|визит|ветеран|водолей|гастроном|гермес|гурман|диана|добрый|дружба|домашний|елена)$","^shop/convenience\\|(milk bar|юлия)$","^shop/convenience\\|(калинка|каштан|квартал|колобок|колос(ок)?|каравай|кооператор|корзинка|кулинария|лакомка|ласточка|лидер|луч|любава|любимый|людмила|люкс)$","^shop/convenience\\|(меркурий|мечта|мини маркет|мираж|белорусские продукты|продукты 24|натали|надежда|ника)$","^shop/convenience\\|(оазис|околица|олимп|парус|пеликан|престиж|подсолнух|радуга|росинка|ромашка|родник|рассвет|русь)$","^shop/convenience\\|(сельпо|семейный|сказка|солнышко|спутник|солнечный|светлана|удача|ивушка)$","^shop/convenience\\|(юбилейный|южный|эконом|шанс|чайка|центральный|хороший|хуторок|фаворит|фортуна|татьяна|тройка|эдем|уют)$","^shop/convenience\\|almac[eé]n$","^shop/cosmetics\\|(vente de )?cosm[eé]tiques?$","^shop/fishing\\|рыболов$","^shop/florist\\|(мир цветов|орхидея)$","^shop/frame\\|rumah\\spenduduk$","^shop/hairdresser\\|(haarwerk|стиль|локон|шарм)$","^shop/hardware\\|(всё для дома|1000 мелочей|хозяюшка)$","^shop/jewelry\\|585$","^shop/money_transfer|mobil(e)?\\smoney$","^shop/null|null$","^shop/optician\\|(vision plus|оптика|[oó]ptica)$","^shop/supermarket\\|(famiglia cooperativa|семейный)$","^shop/tailor\\|couture\\s?(dame|homme|mixte)?$","^shop/tailor|tailor$","^shop/ticket\\|ticket office$","^tourism/(h|m)otel\\|budget inn$","^tourism/hotel\\|(belvedere|krone|victoria)","^tourism/hotel\\|(central|city|europa|grand|palace|park|royal)\\s?hotel$","^tourism/hotel\\|h(o|ô)tel\\s(astoria|central|continental|europa|imperial|krone|panorama|plaza|royal|victoria|(zur\\s)?post|de france)$","^tourism/hotel\\|строитель$"];
88615         var discardNames = ["^((drummed|independent) )?(cng|filling|fuel|gas|lpg|petrol)(\\s(station|pump))?$","^((le|the) )?salo(o)?n( de)?( coiffure| fryzjerski| beauté)?( homme| dame)?$","^((горячий|свежий) )?хлеб(ница)?$","^((разливное|живое) )?пиво$","^(beer|convenience|corner|general|liquor|variety)(\\sstore)?$","^(bureau de |)change$","^(buzón\\sde\\s)?correos$","^(cl(i|í)nica )?dental$","^(cl(i|í)nica )?veterinari(a|o)$","^(clinique )?vétérinaire$","^(coffee|pet|vulcanizing|gift|local)(\\sshop)?$","^(hof|dorf)laden$","^(h|m)otel$","^(polyclinique|poliklinika)$","^(sklep )?(spożywcz(y|o))(-przemysłowy)?$","^(strom|milch)tankstelle$","^(the )?barber(ia|shop|\\sshop)?$","^(é|e)pic(erie|ier)$","^(агзс|азс|мережа азс приват|магазин при азс)$","^(газовая\\s)?заправка$","^(летнее )?кафе(терий)?$","^(парикмахерская|персона|перукарня)$","^(проездные )?билет(ы)?$","^(свежее )?мяс(ной|о)$","^(спец|детская|женская)?\\s?(одежда|консультация|поликлиника)$","^agencja pocztowa$","^alimentación$","^alimentar(a|i)$","^alimentation\\sgénérale$","^alte (apotheke|post)$","^apotek(a|et)$","^apotheke( am markt)?$","^apteka$","^atelier de couture$","^atm$","^auto serwis$","^bakery$","^bakkal$","^bank$","^baqala$","^bar (centrale|kafe)$","^bar$","^barbea?r(i|í)a$","^bazar$","^benzina$","^berber$","^bijouterie$","^bike sharing$","^biletomat$","^bistro$","^blumen(laden)?$","^bo(u)?tique$","^bodega$","^borrachar(i|í)a$","^botica$","^botiller(i|í)a$","^boucherie(\\scharcuterie)?$","^boulangerie(\\sp(a|â)tisserie)?$","^bread$","^briefkasten$","^bureau de poste$","^bäckerei$","^büfé$","^cabinet dentaire$","^caf(e|é) de(s)? (la )?(place|sports|gare)$","^caf(e|é)(t(e|é)r(i|í)a)?( )?(central)?$","^cajero\\sautomatico\\sbancared$","^carnicer(i|í)a$","^central$","^centro (de salud|de saúde|médico)$","^centro naturista$","^chifa$","^chinese restaurant$","^cine(ma)?$","^cleaners$","^co-operative$","^coffee$","^coiff(eur|ure)\\s?(homme|dame)?$","^colmado$","^comedor$","^comida china$","^commercial hotel$","^consultorio (dental|odontologico|local|médico)$","^credit union$","^currency exchange$","^d(ö|o)ner(\\skebab)?$","^delikatesy$","^dental(\\s(clinic|surgery))?$","^dentist(a|e)?$","^drinks$","^droguer(i|í)a$","^dép(ô|o)t de gaz$","^dépanneur$","^eczane$","^edicola$","^eiscaf(e|é)$","^eisdiele","^el árbol$","^estanco$","^exchange$","^fagyizó$","^family dentistry$","^farm(a|à|á)ci(a|à|á|e)?$","^fast food$","^ferramenta$","^ferreter(i|í)a$","^figaro$","^fish (and|&) chips$","^fleuriste$","^florărie$","^food court$","^fotocopias$","^fri(t|z)erie$","^fris(eu|ö)r$","^frituur$","^frutería$","^fryzjer$","^funeraria$","^game$","^garage\\s?(moto|auto)?$","^garba(drome)?$","^gasoline(ra)?$","^gast(haus|hof)\\s(krone|(zur)\\s(linde|post))?$","^getränkemarkt$","^gimnasio( municipal)?$","^gomer(i|í)a$","^gym(nase|nasium)?$","^gyógyszertár$","^haar(genau|monie|scharf)$","^hair\\s?(design|lounge|salon|dresser)$","^hardware$","^home\\sutensils$","^horodateur$","^hospedaje$","^húsbolt$","^imbiss$","^indipend\\.$","^internet cafe$","^istanbul(\\skebab)?$","^kaf(e|é)$","^kantine$","^kantor pos$","^kantor$","^kebab(ai|\\shouse)?$","^kios(co|k|ko|que)?$","^kisbolt$","^kitchen$","^księgarnia$","^kwiaciarnia$","^kwiaty$","^kулинария$","^ladestation$","^librairie$","^librer(i|í)a$","^libro$","^licorer(i|í)a$","^ljekarna$","^lombard$","^lot 1$","^lubri(centro|ficantes)$","^lékárna$","^maceller(i|í)a$","^magazin","^mailbox$","^maison$","^market$","^mercado( municipal)?$","^mercerie$","^mini\\s?(abc|market|mart|mercado|pump)","^money exchange$","^máquina de tickets$","^mécanique$","^nagelstudio$","^nails$","^no name$","^obuwie$","^odontologia$","^offener bücherschrank$","^oplaadpunt$","^opti(c|k)a$","^optical center$","^optyk$","^outlet$","^pa(r|cz)komat$","^pac?k(etbox|station)$","^padaria$","^panader(i|í)a$","^pancake house$","^panificio$","^panorama$","^papeler(i|í)a$","^parafarmacia$","^parduotuvė$","^parkscheinautomat$","^parquímetro$","^peluquer(i|í)a$","^pharmac(ie|y)$","^piekarnia$","^piscine$","^pizz(eri)?a$","^po(s|š)t(a|e|o)$","^poczta$","^poissonnerie$","^post\\s?(agentur|filiale|partner|stelle)?$","^potraviny$","^prehrana$","^pressing$","^pulper(i|í)a$","^punkt apteczny$","^quin?cai?llerie$","^quiosco$","^rent a car$","^repuestos automotrices$","^restaurant(e)?(\\suniversit(ário|aire))?$","^rzeźnik$","^sale$","^salle (omnisport|polyvalente)$","^salão de beleza$","^sari-sari store$","^sb\\stank$","^second\\shand$","^shops?$","^sklep$","^smíšené zboží$","^snacks?$","^souvenir(s)?( shop)?$","^spätkauf$","^stacja (benzynowa|paliw)$","^stadium$","^stadtbäckerei$","^station service$","^steak house$","^stores?$","^super ?america","^super\\s?m(arket|ercado)$","^sushi(\\sbar)?$","^taba(c|k)(os|chi)?(\\strafi(k|c))?$","^tabac\\spresse$","^tabaccher(i|í)a$","^tacos$","^taller( mec(á|a)nico)?$","^tanatorio$","^tankstelle$","^tattoo$","^taverna$","^tea stall$","^tesha$","^tienda(\\sde\\s(barrio|abarrotes))?$","^toko pakaian$","^trafik(a)?$","^trattoria$","^trinkhalle$","^télécentre$","^ufficio postale$","^unidade?( básica)? de (saúde|salud)$","^urząd pocztowy$","^vegyesbolt$","^verduler(i|í)a$","^večerka$","^virágbolt$","^vulcanizare$","^warung$","^warzywniak$","^windmill$","^wulkanizacja$","^zahnarzt$","^zigarettenautomat$","^zöldséges$","^änderungsschneiderei$","^élelmiszer(bolt)?$","^φαρμακε[ιί]ο$","^авто(рынок|ремонт|сервис|запчасти(ни)?)?$","^автома(г|газин|стерская)?$","^автосервис\\+шиномонтаж$","^амбулатор(и|і)я$","^аптека","^аптечный (пункт|склад)$","^ателье$","^бассейн$","^бистро$","^булочная$","^буфет$","^бытовая химия$","^ветеринарная клиника$","^ветлечебница$","^вс(е|ё) для дома$","^вулканизация$","^газ$","^главпочтамт$","^гостиница$","^детский дом$","^закусочная$","^замена масла$","^золото(й)?$","^зоо(магазин|товары)$","^игрушки$","^инфекционн(ая|ое) (больница|отделение)","^канцтовары$","^касса$","^квіти$","^киоск$","^книги$","^кожно-?венерологический диспансер","^кофе(йня|\\sхауз)$","^крамниця$","^купец$","^ломбард$","^магазин","^маркет$","^меб(ель|лі)$","^метан$","^мини-?маркет$","^мороженое$","^мясная лавка$","^обувь$","^овощи(\\sи\\s|-)фрукты$","^октан$","^памятники$","^парикмахер(ская)?$","^пекарня$","^пельменная$","^печать$","^пиццерия$","^по(чт|шт|щ)а$","^подарки$","^пол(и|і)кл(и|і)н(и|і)ка( №1)?$","^почтовое отделение$","^пресса$","^продукт(ы|и)?$","^продуктовый( магазин)?$","^промтовары$","^пропан$","^ремонт\\sобуви$","^ресторан$","^ритуал(ьные услуги)?$","^рыб(a|олов)$","^салон красоты$","^сантехника$","^семена$","^социальный участковый$","^спорт(зал|комплекс|товары)$","^столовая$","^стоматолог","^стройматериалы$","^сувениры$","^супермаркет$","^табак(ерка)?$","^ткани$","^товары для дома$","^универ(маг|сам)$","^фельдшерско-акушерский пункт$","^фрукты и овощи$","^химчистка$","^хинкальная$","^хоз(товары)$","^хүнсний дэлгүүр$","^цвет(овик|очный|ы)(\\sмагазин)?$","^церковная( лавка)?$","^чайхана$","^ша(ве|у)рма$","^шашлычная$","^шиномонтаж$","^דלק$","^اداره پست$","^باشگاه بدنسازی$","^بانک$","^بقال(ة)?$","^حلاق$","^داروخانه شبانه روزی$","^داروخانه$","^درمانگاه$","^رستوران$","^سوپر\\s?مارکت$","^صيدلية$","^قصابی$","^محط(ه|ة) وقود$","^مخابرات$","^مخبز(ة)?$","^مطعم$","^مقهى$","^مكتب البريد$","^میوه فروشی$","^نان\\s?(سنگک|بربری|لواش)?$","^نانوایی\\s?(سنگک|بربری|لواش)?ی?$","^پمپ (بنزین|گاز)$","^მარკეტი( \\(market\\))?","^カフェ$","^ポスト$","^体育館$","^加油站$","^早餐店$","^珈琲館$","^租$","^自動販売機$","^自販機$","^郵便ポスト$","^郵局$","^食堂$","automat na jizdenky"];
88616         var filters = {
88617         keepTags: keepTags,
88618         discardKeys: discardKeys,
88619         discardNames: discardNames
88620         };
88621
88622         // remove spaces, punctuation, diacritics
88623         var simplify = function simplify(str) {
88624           return diacritics.remove(
88625             str
88626               .replace(/&/g, 'and')
88627               .replace(/[\s\-=_!"#%'*{},.\/:;?\(\)\[\]@\\$\^*+<>~`’\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g,'')
88628               .toLowerCase()
88629           );
88630         };
88631
88632         // toParts - split a name-suggestion-index key into parts
88633         // {
88634         //   kvnd:        "amenity/fast_food|Thaï Express~(North America)",
88635         //   kvn:         "amenity/fast_food|Thaï Express",
88636         //   kv:          "amenity/fast_food",
88637         //   k:           "amenity",
88638         //   v:           "fast_food",
88639         //   n:           "Thaï Express",
88640         //   d:           "(North America)",
88641         //   nsimple:     "thaiexpress",
88642         //   kvnnsimple:  "amenity/fast_food|thaiexpress"
88643         // }
88644         var to_parts = function toParts(kvnd) {
88645           var parts = {};
88646           parts.kvnd = kvnd;
88647
88648           var kvndparts = kvnd.split('~', 2);
88649           if (kvndparts.length > 1) { parts.d = kvndparts[1]; }
88650
88651           parts.kvn = kvndparts[0];
88652           var kvnparts = parts.kvn.split('|', 2);
88653           if (kvnparts.length > 1) { parts.n = kvnparts[1]; }
88654
88655           parts.kv = kvnparts[0];
88656           var kvparts = parts.kv.split('/', 2);
88657           parts.k = kvparts[0];
88658           parts.v = kvparts[1];
88659
88660           parts.nsimple = simplify(parts.n);
88661           parts.kvnsimple = parts.kv + '|' + parts.nsimple;
88662           return parts;
88663         };
88664
88665         var matchGroups = {beauty:["shop/beauty","shop/hairdresser_supply"],bed:["shop/bed","shop/furniture"],beverages:["shop/alcohol","shop/beverages"],camping:["leisure/park","tourism/camp_site","tourism/caravan_site"],car_parts:["shop/car_parts","shop/car_repair","shop/tires","shop/tyres"],confectionery:["shop/candy","shop/chocolate","shop/confectionery"],convenience:["shop/beauty","shop/chemist","shop/convenience","shop/cosmetics"],coworking:["amenity/coworking_space","office/coworking","office/coworking_space"],electronics:["office/telecommunication","shop/computer","shop/electronics","shop/hifi","shop/mobile","shop/mobile_phone","shop/telecommunication"],fashion:["shop/accessories","shop/bag","shop/botique","shop/clothes","shop/department_store","shop/fashion","shop/fashion_accessories","shop/sports","shop/shoes"],financial:["amenity/bank","office/accountant","office/financial","office/financial_advisor","office/tax_advisor","shop/tax"],fitness:["leisure/fitness_centre","leisure/fitness_center","leisure/sports_centre","leisure/sports_center"],food:["amenity/cafe","amenity/fast_food","amenity/ice_cream","amenity/restaurant","shop/bakery","shop/ice_cream","shop/pastry","shop/tea","shop/coffee"],fuel:["amenity/fuel","shop/gas","shop/convenience;gas","shop/gas;convenience"],gift:["shop/gift","shop/card","shop/cards","shop/stationery"],hardware:["shop/carpet","shop/diy","shop/doityourself","shop/doors","shop/electrical","shop/flooring","shop/hardware","shop/power_tools","shop/tool_hire","shop/tools","shop/trade"],health_food:["shop/health","shop/health_food","shop/herbalist","shop/nutrition_supplements"],houseware:["shop/houseware","shop/interior_decoration"],lodging:["tourism/hotel","tourism/motel"],money_transfer:["amenity/money_transfer","shop/money_transfer"],outdoor:["shop/outdoor","shop/sports"],rental:["amenity/bicycle_rental","amenity/boat_rental","amenity/car_rental","amenity/truck_rental","amenity/vehicle_rental","shop/rental"],school:["amenity/childcare","amenity/college","amenity/kindergarten","amenity/language_school","amenity/prep_school","amenity/school","amenity/university"],supermarket:["shop/food","shop/frozen_food","shop/greengrocer","shop/grocery","shop/supermarket","shop/wholesale"],variety_store:["shop/variety_store","shop/supermarket","shop/discount","shop/convenience"],vending:["amenity/vending_machine","shop/vending_machine"],wholesale:["shop/wholesale","shop/supermarket","shop/department_store"]};
88666         var match_groups = {
88667         matchGroups: matchGroups
88668         };
88669
88670         var match_groups$1 = /*#__PURE__*/Object.freeze({
88671                 __proto__: null,
88672                 matchGroups: matchGroups,
88673                 'default': match_groups
88674         });
88675
88676         var require$$0 = getCjsExportFromNamespace(match_groups$1);
88677
88678         var matchGroups$1 = require$$0.matchGroups;
88679
88680
88681         var matcher$1 = function () {
88682           var _warnings = [];  // array of match conflict pairs
88683           var _ambiguous = {};
88684           var _matchIndex = {};
88685           var matcher = {};
88686
88687
88688           // Create an index of all the keys/simplenames for fast matching
88689           matcher.buildMatchIndex = function (brands) {
88690             // two passes - once for primary names, once for secondary/alternate names
88691             Object.keys(brands).forEach(function (kvnd) { return insertNames(kvnd, 'primary'); });
88692             Object.keys(brands).forEach(function (kvnd) { return insertNames(kvnd, 'secondary'); });
88693
88694
88695             function insertNames(kvnd, which) {
88696               var obj = brands[kvnd];
88697               var parts = to_parts(kvnd);
88698
88699               // Exit early for ambiguous names in the second pass.
88700               // They were collected in the first pass and we don't gather alt names for them.
88701               if (which === 'secondary' && parts.d) { return; }
88702
88703
88704               if (obj.countryCodes) {
88705                 parts.countryCodes = obj.countryCodes.slice();  // copy
88706               }
88707
88708               var nomatches = (obj.nomatch || []);
88709               if (nomatches.some(function (s) { return s === kvnd; })) {
88710                 console.log(("WARNING match/nomatch conflict for " + kvnd));
88711                 return;
88712               }
88713
88714               var match_kv = [parts.kv]
88715                 .concat(obj.matchTags || [])
88716                 .concat([((parts.k) + "/yes"), "building/yes"])   // #3454 - match some generic tags
88717                 .map(function (s) { return s.toLowerCase(); });
88718
88719               var match_nsimple = [];
88720               if (which === 'primary') {
88721                 match_nsimple = [parts.n]
88722                   .concat(obj.matchNames || [])
88723                   .concat(obj.tags.official_name || [])   // #2732 - match alternate names
88724                   .map(simplify);
88725
88726               } else if (which === 'secondary') {
88727                 match_nsimple = []
88728                   .concat(obj.tags.alt_name || [])        // #2732 - match alternate names
88729                   .concat(obj.tags.short_name || [])      // #2732 - match alternate names
88730                   .map(simplify);
88731               }
88732
88733               if (!match_nsimple.length) { return; }  // nothing to do
88734
88735               match_kv.forEach(function (kv) {
88736                 match_nsimple.forEach(function (nsimple) {
88737                   if (parts.d) {
88738                     // Known ambiguous names with disambiguation string ~(USA) / ~(Canada)
88739                     // FIXME: Name collisions will overwrite the initial entry (ok for now)
88740                     if (!_ambiguous[kv]) { _ambiguous[kv] = {}; }
88741                     _ambiguous[kv][nsimple] = parts;
88742
88743                   } else {
88744                     // Names we mostly expect to be unique..
88745                     if (!_matchIndex[kv]) { _matchIndex[kv] = {}; }
88746
88747                     var m = _matchIndex[kv][nsimple];
88748                     if (m) {  // There already is a match for this name, skip it
88749                       // Warn if we detect collisions in a primary name.
88750                       // Skip warning if a secondary name or a generic `*=yes` tag - #2972 / #3454
88751                       if (which === 'primary' && !/\/yes$/.test(kv)) {
88752                         _warnings.push([m.kvnd, (kvnd + " (" + kv + "/" + nsimple + ")")]);
88753                       }
88754                     } else {
88755                       _matchIndex[kv][nsimple] = parts;   // insert
88756                     }
88757                   }
88758                 });
88759               });
88760
88761             }
88762           };
88763
88764
88765           // pass a `key`, `value`, `name` and return the best match,
88766           // `countryCode` optional (if supplied, must match that too)
88767           matcher.matchKVN = function (key, value, name, countryCode) {
88768             return matcher.matchParts(to_parts((key + "/" + value + "|" + name)), countryCode);
88769           };
88770
88771
88772           // pass a parts object and return the best match,
88773           // `countryCode` optional (if supplied, must match that too)
88774           matcher.matchParts = function (parts, countryCode) {
88775             var match = null;
88776             var inGroup = false;
88777
88778             // fixme: we currently return a single match for ambiguous
88779             match = _ambiguous[parts.kv] && _ambiguous[parts.kv][parts.nsimple];
88780             if (match && matchesCountryCode(match)) { return match; }
88781
88782             // try to return an exact match
88783             match = _matchIndex[parts.kv] && _matchIndex[parts.kv][parts.nsimple];
88784             if (match && matchesCountryCode(match)) { return match; }
88785
88786             // look in match groups
88787             for (var mg in matchGroups$1) {
88788               var matchGroup = matchGroups$1[mg];
88789               match = null;
88790               inGroup = false;
88791
88792               for (var i = 0; i < matchGroup.length; i++) {
88793                 var otherkv = matchGroup[i].toLowerCase();
88794                 if (!inGroup) {
88795                   inGroup = otherkv === parts.kv;
88796                 }
88797                 if (!match) {
88798                   // fixme: we currently return a single match for ambiguous
88799                   match = _ambiguous[otherkv] && _ambiguous[otherkv][parts.nsimple];
88800                 }
88801                 if (!match) {
88802                   match = _matchIndex[otherkv] && _matchIndex[otherkv][parts.nsimple];
88803                 }
88804
88805                 if (match && !matchesCountryCode(match)) {
88806                   match = null;
88807                 }
88808
88809                 if (inGroup && match) {
88810                   return match;
88811                 }
88812               }
88813             }
88814
88815             return null;
88816
88817             function matchesCountryCode(match) {
88818               if (!countryCode) { return true; }
88819               if (!match.countryCodes) { return true; }
88820               return match.countryCodes.indexOf(countryCode) !== -1;
88821             }
88822           };
88823
88824           matcher.getWarnings = function () {
88825             return _warnings;
88826           };
88827
88828           return matcher;
88829         };
88830
88831         function validationOutdatedTags(context) {
88832             var type = 'outdated_tags';
88833
88834             // initialize name-suggestion-index matcher
88835             var nsiMatcher = matcher$1();
88836             nsiMatcher.buildMatchIndex(brands$1.brands);
88837             var nsiKeys = ['amenity', 'shop', 'tourism', 'leisure', 'office'];
88838
88839             var allWD = {};
88840             var allWP = {};
88841             Object.keys(brands$1.brands).forEach(function(kvnd) {
88842                 var brand = brands$1.brands[kvnd];
88843                 var wd = brand.tags['brand:wikidata'];
88844                 var wp = brand.tags['brand:wikipedia'];
88845                 if (wd) { allWD[wd] = kvnd; }
88846                 if (wp) { allWP[wp] = kvnd; }
88847             });
88848
88849
88850             function oldTagIssues(entity, graph) {
88851                 var oldTags = Object.assign({}, entity.tags);  // shallow copy
88852                 var preset = context.presets().match(entity, graph);
88853                 var subtype = 'deprecated_tags';
88854
88855                 // upgrade preset..
88856                 if (preset.replacement) {
88857                     var newPreset = context.presets().item(preset.replacement);
88858                     graph = actionChangePreset(entity.id, preset, newPreset)(graph);
88859                     entity = graph.entity(entity.id);
88860                     preset = newPreset;
88861                 }
88862
88863                 // upgrade tags..
88864                 var deprecatedTags = entity.deprecatedTags();
88865                 if (deprecatedTags.length) {
88866                     deprecatedTags.forEach(function(tag) {
88867                         graph = actionUpgradeTags(entity.id, tag.old, tag.replace)(graph);
88868                     });
88869                     entity = graph.entity(entity.id);
88870                 }
88871
88872                 // add missing addTags..
88873                 var newTags = Object.assign({}, entity.tags);  // shallow copy
88874                 if (preset.tags !== preset.addTags) {
88875                     Object.keys(preset.addTags).forEach(function(k) {
88876                         if (!newTags[k]) {
88877                             if (preset.addTags[k] === '*') {
88878                                 newTags[k] = 'yes';
88879                             } else {
88880                                 newTags[k] = preset.addTags[k];
88881                             }
88882                         }
88883                     });
88884                 }
88885
88886                 // Do `wikidata` or `wikipedia` identify this entity as a brand?  #6416
88887                 // If so, these tags can be swapped to `brand:wikidata`/`brand:wikipedia`
88888                 var isBrand;
88889                 if (newTags.wikidata) {                 // try matching `wikidata`
88890                     isBrand = allWD[newTags.wikidata];
88891                 }
88892                 if (!isBrand && newTags.wikipedia) {    // fallback to `wikipedia`
88893                     isBrand = allWP[newTags.wikipedia];
88894                 }
88895                 if (isBrand && !newTags.office) {       // but avoid doing this for corporate offices
88896                     if (newTags.wikidata) {
88897                         newTags['brand:wikidata'] = newTags.wikidata;
88898                         delete newTags.wikidata;
88899                     }
88900                     if (newTags.wikipedia) {
88901                         newTags['brand:wikipedia'] = newTags.wikipedia;
88902                         delete newTags.wikipedia;
88903                     }
88904                     // I considered setting `name` and other tags here, but they aren't unique per wikidata
88905                     // (Q2759586 -> in USA "Papa John's", in Russia "Папа Джонс")
88906                     // So users will really need to use a preset or assign `name` themselves.
88907                 }
88908
88909                 // try key/value|name match against name-suggestion-index
88910                 if (newTags.name) {
88911                     for (var i = 0; i < nsiKeys.length; i++) {
88912                         var k = nsiKeys[i];
88913                         if (!newTags[k]) { continue; }
88914
88915                         var center = entity.extent(graph).center();
88916                         var countryCode = iso1A2Code(center);
88917                         var match = nsiMatcher.matchKVN(k, newTags[k], newTags.name, countryCode && countryCode.toLowerCase());
88918                         if (!match) { continue; }
88919
88920                         // for now skip ambiguous matches (like Target~(USA) vs Target~(Australia))
88921                         if (match.d) { continue; }
88922
88923                         var brand = brands$1.brands[match.kvnd];
88924                         if (brand && brand.tags['brand:wikidata'] &&
88925                             brand.tags['brand:wikidata'] !== entity.tags['not:brand:wikidata']) {
88926                             subtype = 'noncanonical_brand';
88927
88928                             var keepTags = ['takeaway'].reduce(function(acc, k) {
88929                                 if (newTags[k]) {
88930                                     acc[k] = newTags[k];
88931                                 }
88932                                 return acc;
88933                             }, {});
88934
88935                             nsiKeys.forEach(function(k) { delete newTags[k]; });
88936                             Object.assign(newTags, brand.tags, keepTags);
88937                             break;
88938                         }
88939                     }
88940                 }
88941
88942                 // determine diff
88943                 var tagDiff = utilTagDiff(oldTags, newTags);
88944                 if (!tagDiff.length) { return []; }
88945
88946                 var isOnlyAddingTags = tagDiff.every(function(d) {
88947                     return d.type === '+';
88948                 });
88949
88950                 var prefix = '';
88951                 if (subtype === 'noncanonical_brand') {
88952                     prefix = 'noncanonical_brand.';
88953                 } else if (subtype === 'deprecated_tags' && isOnlyAddingTags) {
88954                     subtype = 'incomplete_tags';
88955                     prefix = 'incomplete.';
88956                 }
88957
88958                 // don't allow autofixing brand tags
88959                 var autoArgs = subtype !== 'noncanonical_brand' ? [doUpgrade, t('issues.fix.upgrade_tags.annotation')] : null;
88960
88961                 return [new validationIssue({
88962                     type: type,
88963                     subtype: subtype,
88964                     severity: 'warning',
88965                     message: showMessage,
88966                     reference: showReference,
88967                     entityIds: [entity.id],
88968                     hash: JSON.stringify(tagDiff),
88969                     dynamicFixes: function() {
88970                         return [
88971                             new validationIssueFix({
88972                                 autoArgs: autoArgs,
88973                                 title: t('issues.fix.upgrade_tags.title'),
88974                                 onClick: function(context) {
88975                                     context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
88976                                 }
88977                             })
88978                         ];
88979                     }
88980                 })];
88981
88982
88983                 function doUpgrade(graph) {
88984                     var currEntity = graph.hasEntity(entity.id);
88985                     if (!currEntity) { return graph; }
88986
88987                     var newTags = Object.assign({}, currEntity.tags);  // shallow copy
88988                     tagDiff.forEach(function(diff) {
88989                         if (diff.type === '-') {
88990                             delete newTags[diff.key];
88991                         } else if (diff.type === '+') {
88992                             newTags[diff.key] = diff.newVal;
88993                         }
88994                     });
88995
88996                     return actionChangeTags(currEntity.id, newTags)(graph);
88997                 }
88998
88999
89000                 function showMessage(context) {
89001                     var currEntity = context.hasEntity(entity.id);
89002                     if (!currEntity) { return ''; }
89003
89004                     var messageID = 'issues.outdated_tags.' + prefix + 'message';
89005
89006                     if (subtype === 'noncanonical_brand' && isOnlyAddingTags) {
89007                         messageID += '_incomplete';
89008                     }
89009
89010                     return t(messageID,
89011                         { feature: utilDisplayLabel(currEntity, context) }
89012                     );
89013                 }
89014
89015
89016                 function showReference(selection) {
89017                     var enter = selection.selectAll('.issue-reference')
89018                         .data([0])
89019                         .enter();
89020
89021                     enter
89022                         .append('div')
89023                         .attr('class', 'issue-reference')
89024                         .text(t('issues.outdated_tags.' + prefix + 'reference'));
89025
89026                     enter
89027                         .append('strong')
89028                         .text(t('issues.suggested'));
89029
89030                     enter
89031                         .append('table')
89032                         .attr('class', 'tagDiff-table')
89033                         .selectAll('.tagDiff-row')
89034                         .data(tagDiff)
89035                         .enter()
89036                         .append('tr')
89037                         .attr('class', 'tagDiff-row')
89038                         .append('td')
89039                         .attr('class', function(d) {
89040                             var klass = d.type === '+' ? 'add' : 'remove';
89041                             return 'tagDiff-cell tagDiff-cell-' + klass;
89042                         })
89043                         .text(function(d) { return d.display; });
89044                 }
89045             }
89046
89047
89048             function oldMultipolygonIssues(entity, graph) {
89049
89050                 var multipolygon, outerWay;
89051                 if (entity.type === 'relation') {
89052                     outerWay = osmOldMultipolygonOuterMemberOfRelation(entity, graph);
89053                     multipolygon = entity;
89054                 } else if (entity.type === 'way') {
89055                     multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
89056                     outerWay = entity;
89057                 } else {
89058                     return [];
89059                 }
89060
89061                 if (!multipolygon || !outerWay) { return []; }
89062
89063                 return [new validationIssue({
89064                     type: type,
89065                     subtype: 'old_multipolygon',
89066                     severity: 'warning',
89067                     message: showMessage,
89068                     reference: showReference,
89069                     entityIds: [outerWay.id, multipolygon.id],
89070                     dynamicFixes: function() {
89071                         return [
89072                             new validationIssueFix({
89073                                 autoArgs: [doUpgrade, t('issues.fix.move_tags.annotation')],
89074                                 title: t('issues.fix.move_tags.title'),
89075                                 onClick: function(context) {
89076                                     context.perform(doUpgrade, t('issues.fix.move_tags.annotation'));
89077                                 }
89078                             })
89079                         ];
89080                     }
89081                 })];
89082
89083
89084                 function doUpgrade(graph) {
89085                     var currMultipolygon = graph.hasEntity(multipolygon.id);
89086                     var currOuterWay = graph.hasEntity(outerWay.id);
89087                     if (!currMultipolygon || !currOuterWay) { return graph; }
89088
89089                     currMultipolygon = currMultipolygon.mergeTags(currOuterWay.tags);
89090                     graph = graph.replace(currMultipolygon);
89091                     return actionChangeTags(currOuterWay.id, {})(graph);
89092                 }
89093
89094
89095                 function showMessage(context) {
89096                     var currMultipolygon = context.hasEntity(multipolygon.id);
89097                     if (!currMultipolygon) { return ''; }
89098
89099                     return t('issues.old_multipolygon.message',
89100                         { multipolygon: utilDisplayLabel(currMultipolygon, context) }
89101                     );
89102                 }
89103
89104
89105                 function showReference(selection) {
89106                     selection.selectAll('.issue-reference')
89107                         .data([0])
89108                         .enter()
89109                         .append('div')
89110                         .attr('class', 'issue-reference')
89111                         .text(t('issues.old_multipolygon.reference'));
89112                 }
89113             }
89114
89115
89116             var validation = function checkOutdatedTags(entity, graph) {
89117                 var issues = oldMultipolygonIssues(entity, graph);
89118                 if (!issues.length) { issues = oldTagIssues(entity, graph); }
89119                 return issues;
89120             };
89121
89122
89123             validation.type = type;
89124
89125             return validation;
89126         }
89127
89128         function validationPrivateData() {
89129             var type = 'private_data';
89130
89131             // assume that some buildings are private
89132             var privateBuildingValues = {
89133                 detached: true,
89134                 farm: true,
89135                 house: true,
89136                 houseboat: true,
89137                 residential: true,
89138                 semidetached_house: true,
89139                 static_caravan: true
89140             };
89141
89142             // but they might be public if they have one of these other tags
89143             var publicKeys = {
89144                 amenity: true,
89145                 craft: true,
89146                 historic: true,
89147                 leisure: true,
89148                 office: true,
89149                 shop: true,
89150                 tourism: true
89151             };
89152
89153             // these tags may contain personally identifying info
89154             var personalTags = {
89155                 'contact:email': true,
89156                 'contact:fax': true,
89157                 'contact:phone': true,
89158                 email: true,
89159                 fax: true,
89160                 phone: true
89161             };
89162
89163
89164             var validation = function checkPrivateData(entity) {
89165                 var tags = entity.tags;
89166                 if (!tags.building || !privateBuildingValues[tags.building]) { return []; }
89167
89168                 var keepTags = {};
89169                 for (var k in tags) {
89170                     if (publicKeys[k]) { return []; }  // probably a public feature
89171                     if (!personalTags[k]) {
89172                         keepTags[k] = tags[k];
89173                     }
89174                 }
89175
89176                 var tagDiff = utilTagDiff(tags, keepTags);
89177                 if (!tagDiff.length) { return []; }
89178
89179                 var fixID = tagDiff.length === 1 ? 'remove_tag' : 'remove_tags';
89180
89181                 return [new validationIssue({
89182                     type: type,
89183                     severity: 'warning',
89184                     message: showMessage,
89185                     reference: showReference,
89186                     entityIds: [entity.id],
89187                     dynamicFixes: function() {
89188                         return [
89189                             new validationIssueFix({
89190                                 icon: 'iD-operation-delete',
89191                                 title: t('issues.fix.' + fixID + '.title'),
89192                                 onClick: function(context) {
89193                                     context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
89194                                 }
89195                             })
89196                         ];
89197                     }
89198                 })];
89199
89200
89201                 function doUpgrade(graph) {
89202                     var currEntity = graph.hasEntity(entity.id);
89203                     if (!currEntity) { return graph; }
89204
89205                     var newTags = Object.assign({}, currEntity.tags);  // shallow copy
89206                     tagDiff.forEach(function(diff) {
89207                         if (diff.type === '-') {
89208                             delete newTags[diff.key];
89209                         } else if (diff.type === '+') {
89210                             newTags[diff.key] = diff.newVal;
89211                         }
89212                     });
89213
89214                     return actionChangeTags(currEntity.id, newTags)(graph);
89215                 }
89216
89217
89218                 function showMessage(context) {
89219                     var currEntity = context.hasEntity(this.entityIds[0]);
89220                     if (!currEntity) { return ''; }
89221
89222                     return t('issues.private_data.contact.message',
89223                         { feature: utilDisplayLabel(currEntity, context) }
89224                     );
89225                 }
89226
89227
89228                 function showReference(selection) {
89229                     var enter = selection.selectAll('.issue-reference')
89230                         .data([0])
89231                         .enter();
89232
89233                     enter
89234                         .append('div')
89235                         .attr('class', 'issue-reference')
89236                         .text(t('issues.private_data.reference'));
89237
89238                     enter
89239                         .append('strong')
89240                         .text(t('issues.suggested'));
89241
89242                     enter
89243                         .append('table')
89244                         .attr('class', 'tagDiff-table')
89245                         .selectAll('.tagDiff-row')
89246                         .data(tagDiff)
89247                         .enter()
89248                         .append('tr')
89249                         .attr('class', 'tagDiff-row')
89250                         .append('td')
89251                         .attr('class', function(d) {
89252                             var klass = d.type === '+' ? 'add' : 'remove';
89253                             return 'tagDiff-cell tagDiff-cell-' + klass;
89254                         })
89255                         .text(function(d) { return d.display; });
89256                 }
89257             };
89258
89259
89260             validation.type = type;
89261
89262             return validation;
89263         }
89264
89265         function validationSuspiciousName() {
89266             var type = 'suspicious_name';
89267
89268             // known list of generic names (e.g. "bar")
89269             var discardNamesRegexes = filters.discardNames.map(function(discardName) {
89270                 return new RegExp(discardName, 'i');
89271             });
89272
89273             var keysToTestForGenericValues = ['amenity', 'building', 'leisure', 'man_made', 'shop', 'tourism'];
89274
89275             function isDiscardedSuggestionName(lowercaseName) {
89276                 for (var i = 0; i < discardNamesRegexes.length; i++) {
89277                     if (discardNamesRegexes[i].test(lowercaseName)) {
89278                         return true;
89279                     }
89280                 }
89281                 return false;
89282             }
89283
89284             // test if the name is just the key or tag value (e.g. "park")
89285             function nameMatchesRawTag(lowercaseName, tags) {
89286                 var i, key, val;
89287                 for (i = 0; i < keysToTestForGenericValues.length; i++) {
89288                     key = keysToTestForGenericValues[i];
89289                     val = tags[key];
89290                     if (val) {
89291                         val = val.toLowerCase();
89292                         if (key === lowercaseName ||
89293                             val === lowercaseName ||
89294                             key.replace(/\_/g, ' ') === lowercaseName ||
89295                             val.replace(/\_/g, ' ') === lowercaseName) {
89296                             return true;
89297                         }
89298                     }
89299                 }
89300                 return false;
89301             }
89302
89303             function isGenericName(name, tags) {
89304                 name = name.toLowerCase();
89305                 return nameMatchesRawTag(name, tags) || isDiscardedSuggestionName(name);
89306             }
89307
89308             function makeGenericNameIssue(entityId, nameKey, genericName, langCode) {
89309                 return new validationIssue({
89310                     type: type,
89311                     subtype: 'generic_name',
89312                     severity: 'warning',
89313                     message: function(context) {
89314                         var entity = context.hasEntity(this.entityIds[0]);
89315                         if (!entity) { return ''; }
89316                         var preset = utilPreset(entity, context);
89317                         var langName = langCode && languageName(langCode);
89318                         return t('issues.generic_name.message' + (langName ? '_language' : ''),
89319                             { feature: preset.name(), name: genericName, language: langName }
89320                         );
89321                     },
89322                     reference: showReference,
89323                     entityIds: [entityId],
89324                     hash: nameKey + '=' + genericName,
89325                     dynamicFixes: function() {
89326                         return [
89327                             new validationIssueFix({
89328                                 icon: 'iD-operation-delete',
89329                                 title: t('issues.fix.remove_the_name.title'),
89330                                 onClick: function(context) {
89331                                     var entityId = this.issue.entityIds[0];
89332                                     var entity = context.entity(entityId);
89333                                     var tags = Object.assign({}, entity.tags);   // shallow copy
89334                                     delete tags[nameKey];
89335                                     context.perform(
89336                                         actionChangeTags(entityId, tags),
89337                                         t('issues.fix.remove_generic_name.annotation')
89338                                     );
89339                                 }
89340                             })
89341                         ];
89342                     }
89343                 });
89344
89345                 function showReference(selection) {
89346                     selection.selectAll('.issue-reference')
89347                         .data([0])
89348                         .enter()
89349                         .append('div')
89350                         .attr('class', 'issue-reference')
89351                         .text(t('issues.generic_name.reference'));
89352                 }
89353             }
89354
89355             function makeIncorrectNameIssue(entityId, nameKey, incorrectName, langCode) {
89356                 return new validationIssue({
89357                     type: type,
89358                     subtype: 'not_name',
89359                     severity: 'warning',
89360                     message: function(context) {
89361                         var entity = context.hasEntity(this.entityIds[0]);
89362                         if (!entity) { return ''; }
89363                         var preset = utilPreset(entity, context);
89364                         var langName = langCode && languageName(langCode);
89365                         return t('issues.incorrect_name.message' + (langName ? '_language' : ''),
89366                             { feature: preset.name(), name: incorrectName, language: langName }
89367                         );
89368                     },
89369                     reference: showReference,
89370                     entityIds: [entityId],
89371                     hash: nameKey + '=' + incorrectName,
89372                     dynamicFixes: function() {
89373                         return [
89374                             new validationIssueFix({
89375                                 icon: 'iD-operation-delete',
89376                                 title: t('issues.fix.remove_the_name.title'),
89377                                 onClick: function(context) {
89378                                     var entityId = this.issue.entityIds[0];
89379                                     var entity = context.entity(entityId);
89380                                     var tags = Object.assign({}, entity.tags);   // shallow copy
89381                                     delete tags[nameKey];
89382                                     context.perform(
89383                                         actionChangeTags(entityId, tags),
89384                                         t('issues.fix.remove_mistaken_name.annotation')
89385                                     );
89386                                 }
89387                             })
89388                         ];
89389                     }
89390                 });
89391
89392                 function showReference(selection) {
89393                     selection.selectAll('.issue-reference')
89394                         .data([0])
89395                         .enter()
89396                         .append('div')
89397                         .attr('class', 'issue-reference')
89398                         .text(t('issues.generic_name.reference'));
89399                 }
89400             }
89401
89402
89403             var validation = function checkGenericName(entity) {
89404                 // a generic name is okay if it's a known brand or entity
89405                 if (entity.hasWikidata()) { return []; }
89406
89407                 var issues = [];
89408
89409                 var notNames = (entity.tags['not:name'] || '').split(';');
89410
89411                 for (var key in entity.tags) {
89412                     var m = key.match(/^name(?:(?::)([a-zA-Z_-]+))?$/);
89413                     if (!m) { continue; }
89414
89415                     var langCode = m.length >= 2 ? m[1] : null;
89416
89417                     var value = entity.tags[key];
89418                     if (notNames.length) {
89419                         for (var i in notNames) {
89420                             var notName = notNames[i];
89421                             if (notName && value === notName) {
89422                                 issues.push(makeIncorrectNameIssue(entity.id, key, value, langCode));
89423                                 continue;
89424                             }
89425                         }
89426                     }
89427                     if (isGenericName(value, entity.tags)) {
89428                         issues.push(makeGenericNameIssue(entity.id, key, value, langCode));
89429                     }
89430                 }
89431
89432                 return issues;
89433             };
89434
89435             validation.type = type;
89436
89437             return validation;
89438         }
89439
89440         function validationUnsquareWay(context) {
89441             var type = 'unsquare_way';
89442             var DEFAULT_DEG_THRESHOLD = 5;   // see also issues.js
89443
89444             // use looser epsilon for detection to reduce warnings of buildings that are essentially square already
89445             var epsilon = 0.05;
89446             var nodeThreshold = 10;
89447
89448             function isBuilding(entity, graph) {
89449                 if (entity.type !== 'way' || entity.geometry(graph) !== 'area') { return false; }
89450                 return entity.tags.building && entity.tags.building !== 'no';
89451             }
89452
89453
89454             var validation = function checkUnsquareWay(entity, graph) {
89455
89456                 if (!isBuilding(entity, graph)) { return []; }
89457
89458                 // don't flag ways marked as physically unsquare
89459                 if (entity.tags.nonsquare === 'yes') { return []; }
89460
89461                 var isClosed = entity.isClosed();
89462                 if (!isClosed) { return []; }        // this building has bigger problems
89463
89464                 // don't flag ways with lots of nodes since they are likely detail-mapped
89465                 var nodes = graph.childNodes(entity).slice();    // shallow copy
89466                 if (nodes.length > nodeThreshold + 1) { return []; }   // +1 because closing node appears twice
89467
89468                 // ignore if not all nodes are fully downloaded
89469                 var osm = services$1.osm;
89470                 if (!osm || nodes.some(function(node) { return !osm.isDataLoaded(node.loc); })) { return []; }
89471
89472                 // don't flag connected ways to avoid unresolvable unsquare loops
89473                 var hasConnectedSquarableWays = nodes.some(function(node) {
89474                     return graph.parentWays(node).some(function(way) {
89475                         if (way.id === entity.id) { return false; }
89476                         if (isBuilding(way, graph)) { return true; }
89477                         return graph.parentRelations(way).some(function(parentRelation) {
89478                             return parentRelation.isMultipolygon() &&
89479                                 parentRelation.tags.building &&
89480                                 parentRelation.tags.building !== 'no';
89481                         });
89482                     });
89483                 });
89484                 if (hasConnectedSquarableWays) { return []; }
89485
89486
89487                 // user-configurable square threshold
89488                 var storedDegreeThreshold = context.storage('validate-square-degrees');
89489                 var degreeThreshold = isNaN(storedDegreeThreshold) ? DEFAULT_DEG_THRESHOLD : parseFloat(storedDegreeThreshold);
89490
89491                 var points = nodes.map(function(node) { return context.projection(node.loc); });
89492                 if (!geoOrthoCanOrthogonalize(points, isClosed, epsilon, degreeThreshold, true)) { return []; }
89493
89494                 var autoArgs;
89495                 // don't allow autosquaring features linked to wikidata
89496                 if (!entity.tags.wikidata) {
89497                     // use same degree threshold as for detection
89498                     var autoAction = actionOrthogonalize(entity.id, context.projection, undefined, degreeThreshold);
89499                     autoAction.transitionable = false;  // when autofixing, do it instantly
89500                     autoArgs = [autoAction, t('operations.orthogonalize.annotation.feature.single')];
89501                 }
89502
89503                 return [new validationIssue({
89504                     type: type,
89505                     subtype: 'building',
89506                     severity: 'warning',
89507                     message: function(context) {
89508                         var entity = context.hasEntity(this.entityIds[0]);
89509                         return entity ? t('issues.unsquare_way.message', { feature: utilDisplayLabel(entity, context) }) : '';
89510                     },
89511                     reference: showReference,
89512                     entityIds: [entity.id],
89513                     hash: JSON.stringify(autoArgs !== undefined) + degreeThreshold,
89514                     dynamicFixes: function() {
89515                         return [
89516                             new validationIssueFix({
89517                                 icon: 'iD-operation-orthogonalize',
89518                                 title: t('issues.fix.square_feature.title'),
89519                                 autoArgs: autoArgs,
89520                                 onClick: function(context, completionHandler) {
89521                                     var entityId = this.issue.entityIds[0];
89522                                     // use same degree threshold as for detection
89523                                     context.perform(
89524                                         actionOrthogonalize(entityId, context.projection, undefined, degreeThreshold),
89525                                         t('operations.orthogonalize.annotation.feature.single')
89526                                     );
89527                                     // run after the squaring transition (currently 150ms)
89528                                     window.setTimeout(function() { completionHandler(); }, 175);
89529                                 }
89530                             }) ];
89531                     }
89532                 })];
89533
89534                 function showReference(selection) {
89535                     selection.selectAll('.issue-reference')
89536                         .data([0])
89537                         .enter()
89538                         .append('div')
89539                         .attr('class', 'issue-reference')
89540                         .text(t('issues.unsquare_way.buildings.reference'));
89541                 }
89542             };
89543
89544             validation.type = type;
89545
89546             return validation;
89547         }
89548
89549
89550
89551         var Validations = /*#__PURE__*/Object.freeze({
89552                 __proto__: null,
89553                 validationAlmostJunction: validationAlmostJunction,
89554                 validationCloseNodes: validationCloseNodes,
89555                 validationCrossingWays: validationCrossingWays,
89556                 validationDisconnectedWay: validationDisconnectedWay,
89557                 validationFormatting: validationFormatting,
89558                 validationHelpRequest: validationHelpRequest,
89559                 validationImpossibleOneway: validationImpossibleOneway,
89560                 validationIncompatibleSource: validationIncompatibleSource,
89561                 validationMaprules: validationMaprules,
89562                 validationMismatchedGeometry: validationMismatchedGeometry,
89563                 validationMissingRole: validationMissingRole,
89564                 validationMissingTag: validationMissingTag,
89565                 validationOutdatedTags: validationOutdatedTags,
89566                 validationPrivateData: validationPrivateData,
89567                 validationSuspiciousName: validationSuspiciousName,
89568                 validationUnsquareWay: validationUnsquareWay
89569         });
89570
89571         function coreValidator(context) {
89572             var dispatch$1 = dispatch('validated', 'focusedIssue');
89573             var validator = utilRebind({}, dispatch$1, 'on');
89574
89575             var _rules = {};
89576             var _disabledRules = {};
89577
89578             var _ignoredIssueIDs = {};          // issue.id -> true
89579             var _baseCache = validationCache(); // issues before any user edits
89580             var _headCache = validationCache(); // issues after all user edits
89581             var _validatedGraph = null;
89582             var _deferred = new Set();
89583
89584             //
89585             // initialize the validator rulesets
89586             //
89587             validator.init = function() {
89588                 Object.values(Validations).forEach(function(validation) {
89589                     if (typeof validation !== 'function') { return; }
89590
89591                     var fn = validation(context);
89592                     var key = fn.type;
89593                     _rules[key] = fn;
89594                 });
89595
89596                 var disabledRules = context.storage('validate-disabledRules');
89597                 if (disabledRules) {
89598                     disabledRules.split(',')
89599                         .forEach(function(key) { _disabledRules[key] = true; });
89600                 }
89601             };
89602
89603
89604             //
89605             // clear caches, called whenever iD resets after a save
89606             //
89607             validator.reset = function() {
89608                 Array.from(_deferred).forEach(function(handle) {
89609                     window.cancelIdleCallback(handle);
89610                     _deferred.delete(handle);
89611                 });
89612
89613                 // clear caches
89614                 _ignoredIssueIDs = {};
89615                 _baseCache = validationCache();
89616                 _headCache = validationCache();
89617                 _validatedGraph = null;
89618             };
89619
89620             validator.resetIgnoredIssues = function() {
89621                 _ignoredIssueIDs = {};
89622                 // reload UI
89623                 dispatch$1.call('validated');
89624             };
89625
89626
89627             // must update issues when the user changes the unsquare thereshold
89628             validator.reloadUnsquareIssues = function() {
89629
89630                 reloadUnsquareIssues(_headCache, context.graph());
89631                 reloadUnsquareIssues(_baseCache, context.history().base());
89632
89633                 dispatch$1.call('validated');
89634             };
89635
89636             function reloadUnsquareIssues(cache, graph) {
89637
89638                 var checkUnsquareWay = _rules.unsquare_way;
89639                 if (typeof checkUnsquareWay !== 'function') { return; }
89640
89641                 // uncache existing
89642                 cache.uncacheIssuesOfType('unsquare_way');
89643
89644                 var buildings = context.history().tree().intersects(geoExtent([-180,-90],[180, 90]), graph)  // everywhere
89645                     .filter(function(entity) {
89646                         return entity.type === 'way' && entity.tags.building && entity.tags.building !== 'no';
89647                     });
89648
89649                 // rerun for all buildings
89650                 buildings.forEach(function(entity) {
89651                     var detected = checkUnsquareWay(entity, graph);
89652                     if (detected.length !== 1) { return; }
89653                     var issue = detected[0];
89654                     if (!cache.issuesByEntityID[entity.id]) {
89655                         cache.issuesByEntityID[entity.id] = new Set();
89656                     }
89657                     cache.issuesByEntityID[entity.id].add(issue.id);
89658                     cache.issuesByIssueID[issue.id] = issue;
89659                 });
89660             }
89661
89662             // options = {
89663             //     what: 'all',     // 'all' or 'edited'
89664             //     where: 'all',   // 'all' or 'visible'
89665             //     includeIgnored: false   // true, false, or 'only'
89666             //     includeDisabledRules: false   // true, false, or 'only'
89667             // };
89668             validator.getIssues = function(options) {
89669                 var opts = Object.assign({ what: 'all', where: 'all', includeIgnored: false, includeDisabledRules: false }, options);
89670                 var issues = Object.values(_headCache.issuesByIssueID);
89671                 var view = context.map().extent();
89672
89673                 return issues.filter(function(issue) {
89674                     if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) { return false; }
89675                     if (!opts.includeDisabledRules && _disabledRules[issue.type]) { return false; }
89676
89677                     if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) { return false; }
89678                     if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) { return false; }
89679
89680                     // Sanity check:  This issue may be for an entity that not longer exists.
89681                     // If we detect this, uncache and return false so it is not included..
89682                     var entityIds = issue.entityIds || [];
89683                     for (var i = 0; i < entityIds.length; i++) {
89684                         var entityId = entityIds[i];
89685                         if (!context.hasEntity(entityId)) {
89686                             delete _headCache.issuesByEntityID[entityId];
89687                             delete _headCache.issuesByIssueID[issue.id];
89688                             return false;
89689                         }
89690                     }
89691
89692                     if (opts.what === 'edited' && _baseCache.issuesByIssueID[issue.id]) { return false; }
89693
89694                     if (opts.where === 'visible') {
89695                         var extent = issue.extent(context.graph());
89696                         if (!view.intersects(extent)) { return false; }
89697                     }
89698
89699                     return true;
89700                 });
89701             };
89702
89703             validator.getResolvedIssues = function() {
89704                 var baseIssues = Object.values(_baseCache.issuesByIssueID);
89705                 return baseIssues.filter(function(issue) {
89706                     return !_headCache.issuesByIssueID[issue.id];
89707                 });
89708             };
89709
89710             validator.focusIssue = function(issue) {
89711                 var extent = issue.extent(context.graph());
89712
89713                 if (extent) {
89714                     var setZoom = Math.max(context.map().zoom(), 19);
89715                     context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
89716
89717                     // select the first entity
89718                     if (issue.entityIds && issue.entityIds.length) {
89719                         window.setTimeout(function() {
89720                             var ids = issue.entityIds;
89721                             context.enter(modeSelect(context, [ids[0]]));
89722                             dispatch$1.call('focusedIssue', this, issue);
89723                         }, 250);  // after ease
89724                     }
89725                 }
89726             };
89727
89728
89729             validator.getIssuesBySeverity = function(options) {
89730                 var groups = utilArrayGroupBy(validator.getIssues(options), 'severity');
89731                 groups.error = groups.error || [];
89732                 groups.warning = groups.warning || [];
89733                 return groups;
89734             };
89735
89736             // show some issue types in a particular order
89737             var orderedIssueTypes = [
89738                 // flag missing data first
89739                 'missing_tag', 'missing_role',
89740                 // then flag identity issues
89741                 'outdated_tags', 'mismatched_geometry',
89742                 // flag geometry issues where fixing them might solve connectivity issues
89743                 'crossing_ways', 'almost_junction',
89744                 // then flag connectivity issues
89745                 'disconnected_way', 'impossible_oneway'
89746             ];
89747
89748             validator.getEntityIssues = function(entityID, options) {
89749                 var cache = _headCache;
89750
89751                 var issueIDs = cache.issuesByEntityID[entityID];
89752                 if (!issueIDs) { return []; }
89753
89754                 var opts = options || {};
89755
89756                 return Array.from(issueIDs)
89757                     .map(function(id) { return cache.issuesByIssueID[id]; })
89758                     .filter(function(issue) {
89759                         if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) { return false; }
89760                         if (!opts.includeDisabledRules && _disabledRules[issue.type]) { return false; }
89761
89762                         if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) { return false; }
89763                         if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) { return false; }
89764
89765                         return true;
89766                     }).sort(function(issue1, issue2) {
89767                         if (issue1.type === issue2.type) {
89768                             // issues of the same type, sort deterministically
89769                             return issue1.id < issue2.id ? -1 : 1;
89770                         }
89771                         var index1 = orderedIssueTypes.indexOf(issue1.type);
89772                         var index2 = orderedIssueTypes.indexOf(issue2.type);
89773                         if (index1 !== -1 && index2 !== -1) {
89774                             // both issue types have explicit sort orders
89775                             return index1 - index2;
89776                         } else if (index1 === -1 && index2 === -1) {
89777                             // neither issue type has an explicit sort order, sort by type
89778                             return issue1.type < issue2.type ? -1 : 1;
89779                         } else {
89780                             // order explicit types before everything else
89781                             return index1 !== -1 ? -1 : 1;
89782                         }
89783                     });
89784             };
89785
89786
89787             validator.getRuleKeys = function() {
89788                 return Object.keys(_rules)
89789                     .filter(function(key) { return key !== 'maprules'; })
89790                     .sort(function(key1, key2) {
89791                         // alphabetize by localized title
89792                         return t('issues.' + key1 + '.title') < t('issues.' + key2 + '.title') ? -1 : 1;
89793                     });
89794             };
89795
89796
89797             validator.isRuleEnabled = function(key) {
89798                 return !_disabledRules[key];
89799             };
89800
89801
89802             validator.toggleRule = function(key) {
89803                 if (_disabledRules[key]) {
89804                     delete _disabledRules[key];
89805                 } else {
89806                     _disabledRules[key] = true;
89807                 }
89808
89809                 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
89810                 validator.validate();
89811             };
89812
89813
89814             validator.disableRules = function(keys) {
89815                 _disabledRules = {};
89816                 keys.forEach(function(k) {
89817                     _disabledRules[k] = true;
89818                 });
89819
89820                 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
89821                 validator.validate();
89822             };
89823
89824
89825             validator.ignoreIssue = function(id) {
89826                 _ignoredIssueIDs[id] = true;
89827             };
89828
89829
89830             //
89831             // Run validation on a single entity for the given graph
89832             //
89833             function validateEntity(entity, graph) {
89834                 var entityIssues = [];
89835
89836                 // runs validation and appends resulting issues
89837                 function runValidation(key) {
89838
89839                     var fn = _rules[key];
89840                     if (typeof fn !== 'function') {
89841                         console.error('no such validation rule = ' + key);  // eslint-disable-line no-console
89842                         return;
89843                     }
89844
89845                     var detected = fn(entity, graph);
89846                     entityIssues = entityIssues.concat(detected);
89847                 }
89848
89849                 // run all rules
89850                 Object.keys(_rules).forEach(runValidation);
89851
89852                 return entityIssues;
89853             }
89854
89855             function entityIDsToValidate(entityIDs, graph) {
89856                 var processedIDs = new Set();
89857                 return entityIDs.reduce(function(acc, entityID) {
89858                     // keep redundancy check separate from `acc` because an `entityID`
89859                     // could have been added to `acc` as a related entity through an earlier pass
89860                     if (processedIDs.has(entityID)) { return acc; }
89861                     processedIDs.add(entityID);
89862
89863                     var entity = graph.hasEntity(entityID);
89864                     if (!entity) { return acc; }
89865
89866                     acc.add(entityID);
89867
89868                     var checkParentRels = [entity];
89869
89870                     if (entity.type === 'node') {
89871                         graph.parentWays(entity).forEach(function(parentWay) {
89872                             acc.add(parentWay.id); // include parent ways
89873                             checkParentRels.push(parentWay);
89874                         });
89875                     } else if (entity.type === 'relation') {
89876                         entity.members.forEach(function(member) {
89877                             acc.add(member.id); // include members
89878                         });
89879                     } else if (entity.type === 'way') {
89880                         entity.nodes.forEach(function(nodeID) {
89881                             acc.add(nodeID); // include child nodes
89882                             graph._parentWays[nodeID].forEach(function(wayID) {
89883                                 acc.add(wayID); // include connected ways
89884                             });
89885                         });
89886                     }
89887
89888                     checkParentRels.forEach(function(entity) {   // include parent relations
89889                         if (entity.type !== 'relation') {        // but not super-relations
89890                             graph.parentRelations(entity).forEach(function(parentRelation) {
89891                                 acc.add(parentRelation.id);
89892                             });
89893                         }
89894                     });
89895
89896                     return acc;
89897
89898                 }, new Set());
89899             }
89900
89901             //
89902             // Run validation for several entities, supplied `entityIDs`,
89903             // against `graph` for the given `cache`
89904             //
89905             function validateEntities(entityIDs, graph, cache) {
89906
89907                 // clear caches for existing issues related to these entities
89908                 entityIDs.forEach(cache.uncacheEntityID);
89909
89910                 // detect new issues and update caches
89911                 entityIDs.forEach(function(entityID) {
89912                     var entity = graph.hasEntity(entityID);
89913                     // don't validate deleted entities
89914                     if (!entity) { return; }
89915
89916                     var issues = validateEntity(entity, graph);
89917                     cache.cacheIssues(issues);
89918                 });
89919             }
89920
89921
89922             //
89923             // Validates anything that has changed since the last time it was run.
89924             // Also updates the "validatedGraph" to be the current graph
89925             // and dispatches a `validated` event when finished.
89926             //
89927             validator.validate = function() {
89928
89929                 var currGraph = context.graph();
89930                 _validatedGraph = _validatedGraph || context.history().base();
89931                 if (currGraph === _validatedGraph) {
89932                     dispatch$1.call('validated');
89933                     return;
89934                 }
89935                 var oldGraph = _validatedGraph;
89936                 var difference = coreDifference(oldGraph, currGraph);
89937                 _validatedGraph = currGraph;
89938
89939                 var createdAndModifiedEntityIDs = difference.extantIDs(true);   // created/modified (true = w/relation members)
89940                 var entityIDsToCheck = entityIDsToValidate(createdAndModifiedEntityIDs, currGraph);
89941
89942                 // check modified and deleted entities against the old graph in order to update their related entities
89943                 // (e.g. deleting the only highway connected to a road should create a disconnected highway issue)
89944                 var modifiedAndDeletedEntityIDs = difference.deleted().concat(difference.modified())
89945                     .map(function(entity) { return entity.id; });
89946                 var entityIDsToCheckForOldGraph = entityIDsToValidate(modifiedAndDeletedEntityIDs, oldGraph);
89947
89948                 // concat the sets
89949                 entityIDsToCheckForOldGraph.forEach(entityIDsToCheck.add, entityIDsToCheck);
89950
89951                 validateEntities(entityIDsToCheck, context.graph(), _headCache);
89952
89953                 dispatch$1.call('validated');
89954             };
89955
89956
89957             // WHEN TO RUN VALIDATION:
89958             // When graph changes:
89959             context.history()
89960                 .on('restore.validator', validator.validate)   // restore saved history
89961                 .on('undone.validator', validator.validate)    // undo
89962                 .on('redone.validator', validator.validate);   // redo
89963                 // but not on 'change' (e.g. while drawing)
89964
89965             // When user chages editing modes:
89966             context
89967                 .on('exit.validator', validator.validate);
89968
89969             // When merging fetched data:
89970             context.history()
89971                 .on('merge.validator', function(entities) {
89972                     if (!entities) { return; }
89973                     var handle = window.requestIdleCallback(function() {
89974                         var entityIDs = entities.map(function(entity) { return entity.id; });
89975                         var headGraph = context.graph();
89976                         validateEntities(entityIDsToValidate(entityIDs, headGraph), headGraph, _headCache);
89977
89978                         var baseGraph = context.history().base();
89979                         validateEntities(entityIDsToValidate(entityIDs, baseGraph), baseGraph, _baseCache);
89980
89981                         dispatch$1.call('validated');
89982                     });
89983                     _deferred.add(handle);
89984                 });
89985
89986
89987             return validator;
89988         }
89989
89990
89991         function validationCache() {
89992
89993             var cache = {
89994                 issuesByIssueID: {},  // issue.id -> issue
89995                 issuesByEntityID: {} // entity.id -> set(issue.id)
89996             };
89997
89998             cache.cacheIssues = function(issues) {
89999                 issues.forEach(function(issue) {
90000                     var entityIds = issue.entityIds || [];
90001                     entityIds.forEach(function(entityId) {
90002                         if (!cache.issuesByEntityID[entityId]) {
90003                             cache.issuesByEntityID[entityId] = new Set();
90004                         }
90005                         cache.issuesByEntityID[entityId].add(issue.id);
90006                     });
90007                     cache.issuesByIssueID[issue.id] = issue;
90008                 });
90009             };
90010
90011             cache.uncacheIssue = function(issue) {
90012                 // When multiple entities are involved (e.g. crossing_ways),
90013                 // remove this issue from the other entity caches too..
90014                 var entityIds = issue.entityIds || [];
90015                 entityIds.forEach(function(entityId) {
90016                     if (cache.issuesByEntityID[entityId]) {
90017                         cache.issuesByEntityID[entityId].delete(issue.id);
90018                     }
90019                 });
90020                 delete cache.issuesByIssueID[issue.id];
90021             };
90022
90023             cache.uncacheIssues = function(issues) {
90024                 issues.forEach(cache.uncacheIssue);
90025             };
90026
90027             cache.uncacheIssuesOfType = function(type) {
90028                 var issuesOfType = Object.values(cache.issuesByIssueID)
90029                     .filter(function(issue) { return issue.type === type; });
90030                 cache.uncacheIssues(issuesOfType);
90031             };
90032
90033             //
90034             // Remove a single entity and all its related issues from the caches
90035             //
90036             cache.uncacheEntityID = function(entityID) {
90037                 var issueIDs = cache.issuesByEntityID[entityID];
90038                 if (!issueIDs) { return; }
90039
90040                 issueIDs.forEach(function(issueID) {
90041                     var issue = cache.issuesByIssueID[issueID];
90042                     if (issue) {
90043                         cache.uncacheIssue(issue);
90044                     } else {
90045                         delete cache.issuesByIssueID[issueID];
90046                     }
90047                 });
90048
90049                 delete cache.issuesByEntityID[entityID];
90050             };
90051
90052             return cache;
90053         }
90054
90055         function presetCollection(collection) {
90056             var maxSearchResults = 50;
90057
90058             var presets = {
90059
90060                 collection: collection,
90061
90062
90063                 item: function(id) {
90064                     return this.collection.find(function(d) {
90065                         return d.id === id;
90066                     });
90067                 },
90068
90069                 index: function(id) {
90070                     return this.collection.findIndex(function(d) {
90071                         return d.id === id;
90072                     });
90073                 },
90074
90075                 matchGeometry: function(geometry) {
90076                     return presetCollection(this.collection.filter(function(d) {
90077                         return d.matchGeometry(geometry);
90078                     }));
90079                 },
90080
90081                 matchAnyGeometry: function(geometries) {
90082                     return presetCollection(this.collection.filter(function(d) {
90083                         return geometries.some(function(geometry) {
90084                             return d.matchGeometry(geometry);
90085                         });
90086                     }));
90087                 },
90088
90089                 fallback: function(geometry) {
90090                     var id = geometry;
90091                     if (id === 'vertex') { id = 'point'; }
90092                     return this.item(id);
90093                 },
90094
90095                 search: function(value, geometry, countryCode) {
90096                     if (!value) { return this; }
90097
90098                     value = value.toLowerCase().trim();
90099
90100                     // match at name beginning or just after a space (e.g. "office" -> match "Law Office")
90101                     function leading(a) {
90102                         var index = a.indexOf(value);
90103                         return index === 0 || a[index - 1] === ' ';
90104                     }
90105
90106                     // match at name beginning only
90107                     function leadingStrict(a) {
90108                         var index = a.indexOf(value);
90109                         return index === 0;
90110                     }
90111
90112                     function sortNames(a, b) {
90113                         var aCompare = (a.suggestion ? a.originalName : a.name()).toLowerCase();
90114                         var bCompare = (b.suggestion ? b.originalName : b.name()).toLowerCase();
90115
90116                         // priority if search string matches preset name exactly - #4325
90117                         if (value === aCompare) { return -1; }
90118                         if (value === bCompare) { return 1; }
90119
90120                         // priority for higher matchScore
90121                         var i = b.originalScore - a.originalScore;
90122                         if (i !== 0) { return i; }
90123
90124                         // priority if search string appears earlier in preset name
90125                         i = aCompare.indexOf(value) - bCompare.indexOf(value);
90126                         if (i !== 0) { return i; }
90127
90128                         // priority for shorter preset names
90129                         return aCompare.length - bCompare.length;
90130                     }
90131
90132                     var pool = this.collection;
90133                     if (countryCode) {
90134                         pool = pool.filter(function(a) {
90135                             if (a.countryCodes && a.countryCodes.indexOf(countryCode) === -1) {
90136                                 return false;
90137                             }
90138                             if (a.notCountryCodes && a.notCountryCodes.indexOf(countryCode) !== -1) {
90139                                 return false;
90140                             }
90141                             return true;
90142                         });
90143                     }
90144                     var searchable = pool.filter(function(a) {
90145                         return a.searchable !== false && a.suggestion !== true;
90146                     });
90147                     var suggestions = pool.filter(function(a) {
90148                         return a.suggestion === true;
90149                     });
90150
90151                     // matches value to preset.name
90152                     var leading_name = searchable
90153                         .filter(function(a) {
90154                             return leading(a.name().toLowerCase());
90155                         }).sort(sortNames);
90156
90157                     // matches value to preset.terms values
90158                     var leading_terms = searchable
90159                         .filter(function(a) {
90160                             return (a.terms() || []).some(leading);
90161                         });
90162
90163                     // matches value to preset.tags values
90164                     var leading_tag_values = searchable
90165                         .filter(function(a) {
90166                             return Object.values(a.tags || {})
90167                                 .filter(function(val) { return val !== '*'; })
90168                                 .some(leading);
90169                         });
90170
90171                     var leading_suggestions = suggestions
90172                         .filter(function(a) {
90173                             return leadingStrict(a.originalName.toLowerCase());
90174                         }).sort(sortNames);
90175
90176                     // finds close matches to value in preset.name
90177                     var similar_name = searchable
90178                         .map(function(a) {
90179                             return { preset: a, dist: utilEditDistance(value, a.name()) };
90180                         }).filter(function(a) {
90181                             return a.dist + Math.min(value.length - a.preset.name().length, 0) < 3;
90182                         }).sort(function(a, b) {
90183                             return a.dist - b.dist;
90184                         }).map(function(a) {
90185                             return a.preset;
90186                         });
90187
90188                     // finds close matches to value in preset.terms
90189                     var similar_terms = searchable
90190                         .filter(function(a) {
90191                             return (a.terms() || []).some(function(b) {
90192                                 return utilEditDistance(value, b) + Math.min(value.length - b.length, 0) < 3;
90193                             });
90194                         });
90195
90196                     var similar_suggestions = suggestions
90197                         .map(function(a) {
90198                             return { preset: a, dist: utilEditDistance(value, a.originalName.toLowerCase()) };
90199                         }).filter(function(a) {
90200                             return a.dist + Math.min(value.length - a.preset.originalName.length, 0) < 1;
90201                         }).sort(function(a, b) {
90202                             return a.dist - b.dist;
90203                         }).map(function(a) {
90204                             return a.preset;
90205                         });
90206
90207                     var results = leading_name.concat(
90208                         leading_suggestions,
90209                         leading_terms,
90210                         leading_tag_values,
90211                         similar_name,
90212                         similar_suggestions,
90213                         similar_terms
90214                     ).slice(0, maxSearchResults - 1);
90215
90216                     if (geometry) {
90217                         if (typeof geometry === 'string') {
90218                             results.push(presets.fallback(geometry));
90219                         } else {
90220                             geometry.forEach(function(geom) {
90221                                 results.push(presets.fallback(geom));
90222                             });
90223                         }
90224                     }
90225
90226                     return presetCollection(utilArrayUniq(results));
90227                 }
90228             };
90229
90230
90231             return presets;
90232         }
90233
90234         function presetCategory(id, category, all) {
90235             category = Object.assign({}, category);   // shallow copy
90236
90237             category.id = id;
90238
90239
90240             category.members = presetCollection(category.members.map(function(id) {
90241                 return all.item(id);
90242             }));
90243
90244
90245             category.geometry = category.members.collection.reduce(function(geometries, preset) {
90246                 for (var index in preset.geometry) {
90247                     var geometry = preset.geometry[index];
90248                     if (geometries.indexOf(geometry) === -1) {
90249                         geometries.push(geometry);
90250                     }
90251                 }
90252                 return geometries;
90253             }, []);
90254
90255
90256             category.matchGeometry = function(geometry) {
90257                 return category.geometry.indexOf(geometry) >= 0;
90258             };
90259
90260
90261             category.matchScore = function() {
90262                 return -1;
90263             };
90264
90265
90266             category.name = function() {
90267                 return t('presets.categories.' + id + '.name', {'default': id});
90268             };
90269
90270
90271             category.terms = function() {
90272                 return [];
90273             };
90274
90275
90276             return category;
90277         }
90278
90279         function presetField(id, field) {
90280             field = Object.assign({}, field);   // shallow copy
90281
90282             field.id = id;
90283
90284             // for use in classes, element ids, css selectors
90285             field.safeid = utilSafeClassName(id);
90286
90287             field.matchGeometry = function(geometry) {
90288                 return !field.geometry || field.geometry === geometry;
90289             };
90290
90291
90292             field.t = function(scope, options) {
90293                 return t('presets.fields.' + id + '.' + scope, options);
90294             };
90295
90296
90297             field.label = function() {
90298                 return field.overrideLabel || field.t('label', {'default': id});
90299             };
90300
90301
90302             var placeholder = field.placeholder;
90303             field.placeholder = function() {
90304                 return field.t('placeholder', {'default': placeholder});
90305             };
90306
90307
90308             field.originalTerms = (field.terms || []).join();
90309
90310             field.terms = function() {
90311                 return field.t('terms', { 'default': field.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
90312             };
90313
90314
90315             return field;
90316         }
90317
90318         function presetPreset(id, preset, fields, addable, rawPresets) {
90319             preset = Object.assign({}, preset);   // shallow copy
90320
90321             preset.id = id;
90322
90323             // for use in classes, element ids, css selectors
90324             preset.safeid = utilSafeClassName(id);
90325
90326             preset.parentPresetID = function() {
90327                 var endIndex = preset.id.lastIndexOf('/');
90328                 if (endIndex < 0) { return null; }
90329
90330                 return preset.id.substring(0, endIndex);
90331             };
90332
90333
90334             // For a preset without fields, use the fields of the parent preset.
90335             // Replace {preset} placeholders with the fields of the specified presets.
90336             function resolveFieldInheritance() {
90337
90338                 // Skip `fields` for the keys which define the preset.
90339                 // These are usually `typeCombo` fields like `shop=*`
90340                 function shouldInheritFieldWithID(fieldID) {
90341                     var f = fields[fieldID];
90342                     if (f.key) {
90343                         if (preset.tags[f.key] !== undefined &&
90344                             // inherit anyway if multiple values are allowed or just a checkbox
90345                             f.type !== 'multiCombo' && f.type !== 'semiCombo' && f.type !== 'check') {
90346                             return false;
90347                         }
90348                     }
90349                     return true;
90350                 }
90351
90352                 // returns an array of field IDs to inherit from the given presetID, if found
90353                 function inheritedFieldIDs(presetID, prop) {
90354                     if (!presetID) { return null; }
90355
90356                     var inheritPreset = rawPresets[presetID];
90357                     if (!inheritPreset) { return null; }
90358
90359                     var inheritFieldIDs = inheritPreset[prop] || [];
90360
90361                     if (prop === 'fields') {
90362                         inheritFieldIDs = inheritFieldIDs.filter(shouldInheritFieldWithID);
90363                     }
90364
90365                     return inheritFieldIDs;
90366                 }
90367
90368
90369                 ['fields', 'moreFields'].forEach(function(prop) {
90370                     var fieldIDs = [];
90371                     if (preset[prop] && preset[prop].length) {    // fields were defined
90372                         preset[prop].forEach(function(fieldID) {
90373                             var match = fieldID.match(/\{(.*)\}/);
90374                             if (match !== null) {        // presetID wrapped in braces {}
90375                                 var inheritIDs = inheritedFieldIDs(match[1], prop);
90376                                 if (inheritIDs !== null) {
90377                                     fieldIDs = fieldIDs.concat(inheritIDs);
90378                                 } else {
90379                                     /* eslint-disable no-console */
90380                                     console.log('Cannot resolve presetID ' + match[0] +
90381                                         ' found in ' + preset.id + ' ' + prop);
90382                                     /* eslint-enable no-console */
90383                                 }
90384                             } else {
90385                                 fieldIDs.push(fieldID);  // no braces - just a normal field
90386                             }
90387                         });
90388
90389                     } else {  // no fields defined, so use the parent's if possible
90390                         fieldIDs = inheritedFieldIDs(preset.parentPresetID(), prop);
90391                     }
90392                     // resolve duplicate fields
90393                     fieldIDs = utilArrayUniq(fieldIDs);
90394
90395                     // update this preset with the results
90396                     preset[prop] = fieldIDs;
90397
90398                     // update the raw object to allow for multiple levels of inheritance
90399                     rawPresets[preset.id][prop] = fieldIDs;
90400                 });
90401             }
90402
90403             if (rawPresets) {
90404                 resolveFieldInheritance();
90405             }
90406
90407             preset.fields = (preset.fields || []).map(getFields);
90408             preset.moreFields = (preset.moreFields || []).map(getFields);
90409             preset.geometry = (preset.geometry || []);
90410
90411             addable = addable || false;
90412
90413             function getFields(f) {
90414                 return fields[f];
90415             }
90416
90417
90418             preset.matchGeometry = function(geometry) {
90419                 return preset.geometry.indexOf(geometry) >= 0;
90420             };
90421
90422
90423             preset.originalScore = preset.matchScore || 1;
90424
90425
90426             preset.matchScore = function(entityTags) {
90427                 var tags = preset.tags;
90428                 var seen = {};
90429                 var score = 0;
90430                 var k;
90431
90432                 // match on tags
90433                 for (k in tags) {
90434                     seen[k] = true;
90435                     if (entityTags[k] === tags[k]) {
90436                         score += preset.originalScore;
90437                     } else if (tags[k] === '*' && k in entityTags) {
90438                         score += preset.originalScore / 2;
90439                     } else {
90440                         return -1;
90441                     }
90442                 }
90443
90444                 // boost score for additional matches in addTags - #6802
90445                 var addTags = preset.addTags;
90446                 for (k in addTags) {
90447                     if (!seen[k] && entityTags[k] === addTags[k]) {
90448                         score += preset.originalScore;
90449                     }
90450                 }
90451
90452                 return score;
90453             };
90454
90455
90456             var _textCache = {};
90457
90458             preset.t = function(scope, options) {
90459                 var textID = 'presets.presets.' + id + '.' + scope;
90460
90461                 if (_textCache[textID]) { return _textCache[textID]; }
90462
90463                 var text = t(textID, options);
90464                 _textCache[textID] = text;
90465                 return text;
90466             };
90467
90468
90469             preset.originalName = preset.name || '';
90470
90471
90472             preset.name = function() {
90473                 if (preset.suggestion) {
90474                     var path = id.split('/');
90475                     path.pop();  // remove brand name
90476                     // NOTE: insert an en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
90477                     return preset.originalName + ' – ' + t('presets.presets.' + path.join('/') + '.name');
90478                 }
90479                 return preset.t('name', { 'default': preset.originalName });
90480             };
90481
90482
90483             preset.originalTerms = (preset.terms || []).join();
90484
90485
90486             preset.terms = function() {
90487                 return preset.t('terms', { 'default': preset.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
90488             };
90489
90490
90491             preset.isFallback = function() {
90492                 var tagCount = Object.keys(preset.tags).length;
90493                 return tagCount === 0 || (tagCount === 1 && preset.tags.hasOwnProperty('area'));
90494             };
90495
90496             preset.addable = function(val) {
90497                 if (!arguments.length) { return addable; }
90498                 addable = val;
90499                 return addable;
90500             };
90501
90502
90503             var reference = preset.reference || {};
90504             preset.reference = function(geometry) {
90505                 // Lookup documentation on Wikidata...
90506                 var qid = preset.tags.wikidata || preset.tags['brand:wikidata'] || preset.tags['operator:wikidata'];
90507                 if (qid) {
90508                     return { qid: qid };
90509                 }
90510
90511                 // Lookup documentation on OSM Wikibase...
90512                 var key = reference.key || Object.keys(utilObjectOmit(preset.tags, 'name'))[0];
90513                 var value = reference.value || preset.tags[key];
90514
90515                 if (geometry === 'relation' && key === 'type') {
90516                     if (value in preset.tags) {
90517                         key = value;
90518                         value = preset.tags[key];
90519                     } else {
90520                         return { rtype: value };
90521                     }
90522                 }
90523
90524                 if (value === '*') {
90525                     return { key: key };
90526                 } else {
90527                     return { key: key, value: value };
90528                 }
90529             };
90530
90531
90532             preset.removeTags = preset.removeTags || preset.addTags || preset.tags || {};
90533             preset.unsetTags = function(tags, geometry) {
90534                 tags = utilObjectOmit(tags, Object.keys(preset.removeTags));
90535
90536                 for (var f in preset.fields) {
90537                     var field = preset.fields[f];
90538                     if (field.matchGeometry(geometry) && field.default === tags[field.key]) {
90539                         delete tags[field.key];
90540                     }
90541                 }
90542
90543                 delete tags.area;
90544                 return tags;
90545             };
90546
90547
90548             preset.addTags = preset.addTags || preset.tags || {};
90549             preset.setTags = function(tags, geometry, skipFieldDefaults) {
90550                 var addTags = preset.addTags;
90551                 var k;
90552
90553                 tags = Object.assign({}, tags);   // shallow copy
90554
90555                 for (k in addTags) {
90556                     if (addTags[k] === '*') {
90557                         tags[k] = 'yes';
90558                     } else {
90559                         tags[k] = addTags[k];
90560                     }
90561                 }
90562
90563                 // Add area=yes if necessary.
90564                 // This is necessary if the geometry is already an area (e.g. user drew an area) AND any of:
90565                 // 1. chosen preset could be either an area or a line (`barrier=city_wall`)
90566                 // 2. chosen preset doesn't have a key in osmAreaKeys (`railway=station`)
90567                 if (!addTags.hasOwnProperty('area')) {
90568                     delete tags.area;
90569                     if (geometry === 'area') {
90570                         var needsAreaTag = true;
90571                         if (preset.geometry.indexOf('line') === -1) {
90572                             for (k in addTags) {
90573                                 if (k in osmAreaKeys) {
90574                                     needsAreaTag = false;
90575                                     break;
90576                                 }
90577                             }
90578                         }
90579                         if (needsAreaTag) {
90580                             tags.area = 'yes';
90581                         }
90582                     }
90583                 }
90584                 if (geometry && !skipFieldDefaults) {
90585                     for (var f in preset.fields) {
90586                         var field = preset.fields[f];
90587                         if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) {
90588                             tags[field.key] = field.default;
90589                         }
90590                     }
90591                 }
90592
90593                 return tags;
90594             };
90595
90596
90597             return preset;
90598         }
90599
90600         function presetIndex(context) {
90601             // a presetCollection with methods for
90602             // loading new data and returning defaults
90603
90604             var dispatch$1 = dispatch('recentsChange');
90605
90606             var all = presetCollection([]);
90607             var _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
90608             var _fields = {};
90609             var _universal = [];
90610             var _recents;
90611             // presets that the user can add
90612             var _addablePresetIDs;
90613
90614             // Index of presets by (geometry, tag key).
90615             var _index = {
90616                 point: {},
90617                 vertex: {},
90618                 line: {},
90619                 area: {},
90620                 relation: {}
90621             };
90622
90623             all.match = function(entity, resolver) {
90624                 return resolver.transient(entity, 'presetMatch', function() {
90625                     var geometry = entity.geometry(resolver);
90626
90627                     // Treat entities on addr:interpolation lines as points, not vertices - #3241
90628                     if (geometry === 'vertex' && entity.isOnAddressLine(resolver)) {
90629                         geometry = 'point';
90630                     }
90631
90632                     return all.matchTags(entity.tags, geometry);
90633                 });
90634             };
90635
90636             all.matchTags = function(tags, geometry) {
90637
90638                 var address;
90639                 var geometryMatches = _index[geometry];
90640                 var best = -1;
90641                 var match;
90642
90643                 for (var k in tags) {
90644                     // If any part of an address is present,
90645                     // allow fallback to "Address" preset - #4353
90646                     if (/^addr:/.test(k) && geometryMatches['addr:*']) {
90647                         address = geometryMatches['addr:*'][0];
90648                     }
90649
90650                     var keyMatches = geometryMatches[k];
90651                     if (!keyMatches) { continue; }
90652
90653                     for (var i = 0; i < keyMatches.length; i++) {
90654                         var score = keyMatches[i].matchScore(tags);
90655                         if (score > best) {
90656                             best = score;
90657                             match = keyMatches[i];
90658                         }
90659                     }
90660
90661                 }
90662
90663                 if (address && (!match || match.isFallback())) {
90664                     match = address;
90665                 }
90666                 return match || all.fallback(geometry);
90667             };
90668
90669             all.allowsVertex = function(entity, resolver) {
90670                 if (entity.type !== 'node') { return false; }
90671                 if (Object.keys(entity.tags).length === 0) { return true; }
90672
90673                 return resolver.transient(entity, 'vertexMatch', function() {
90674                     // address lines allow vertices to act as standalone points
90675                     if (entity.isOnAddressLine(resolver)) { return true; }
90676
90677                     var geometries = osmNodeGeometriesForTags(entity.tags);
90678                     if (geometries.vertex) { return true; }
90679                     if (geometries.point) { return false; }
90680                     // allow vertices for unspecified points
90681                     return true;
90682                 });
90683             };
90684
90685
90686             // Because of the open nature of tagging, iD will never have a complete
90687             // list of tags used in OSM, so we want it to have logic like "assume
90688             // that a closed way with an amenity tag is an area, unless the amenity
90689             // is one of these specific types". This function computes a structure
90690             // that allows testing of such conditions, based on the presets designated
90691             // as as supporting (or not supporting) the area geometry.
90692             //
90693             // The returned object L is a whitelist/blacklist of tags. A closed way
90694             // with a tag (k, v) is considered to be an area if `k in L && !(v in L[k])`
90695             // (see `Way#isArea()`). In other words, the keys of L form the whitelist,
90696             // and the subkeys form the blacklist.
90697             all.areaKeys = function() {
90698                 var areaKeys = {};
90699                 var ignore = ['barrier', 'highway', 'footway', 'railway', 'junction', 'type'];  // probably a line..
90700
90701                 // ignore name-suggestion-index and deprecated presets
90702                 var presets = all.collection.filter(function(p) {
90703                     return !p.suggestion && !p.replacement;
90704                 });
90705
90706                 // whitelist
90707                 presets.forEach(function(d) {
90708                     for (var key in d.tags) { break; }
90709                     if (!key) { return; }
90710                     if (ignore.indexOf(key) !== -1) { return; }
90711
90712                     if (d.geometry.indexOf('area') !== -1) {    // probably an area..
90713                         areaKeys[key] = areaKeys[key] || {};
90714                     }
90715                 });
90716
90717                 // blacklist
90718                 presets.forEach(function(d) {
90719                     for (var key in d.addTags) {
90720                         // examine all addTags to get a better sense of what can be tagged on lines - #6800
90721                         var value = d.addTags[key];
90722                         if (key in areaKeys &&                      // probably an area...
90723                             d.geometry.indexOf('line') !== -1 &&    // but sometimes a line
90724                             value !== '*') {
90725                             areaKeys[key][value] = true;
90726                         }
90727                     }
90728                 });
90729
90730                 return areaKeys;
90731             };
90732
90733             all.pointTags = function() {
90734                 return all.collection.reduce(function(pointTags, d) {
90735                     // ignore name-suggestion-index, deprecated, and generic presets
90736                     if (d.suggestion || d.replacement || d.searchable === false) { return pointTags; }
90737
90738                     // only care about the primary tag
90739                     for (var key in d.tags) { break; }
90740                     if (!key) { return pointTags; }
90741
90742                     // if this can be a point
90743                     if (d.geometry.indexOf('point') !== -1) {
90744                         pointTags[key] = pointTags[key] || {};
90745                         pointTags[key][d.tags[key]] = true;
90746                     }
90747                     return pointTags;
90748                 }, {});
90749             };
90750
90751             all.vertexTags = function() {
90752                 return all.collection.reduce(function(vertexTags, d) {
90753                     // ignore name-suggestion-index, deprecated, and generic presets
90754                     if (d.suggestion || d.replacement || d.searchable === false) { return vertexTags; }
90755
90756                     // only care about the primary tag
90757                     for (var key in d.tags) { break; }
90758                     if (!key) { return vertexTags; }
90759
90760                     // if this can be a vertex
90761                     if (d.geometry.indexOf('vertex') !== -1) {
90762                         vertexTags[key] = vertexTags[key] || {};
90763                         vertexTags[key][d.tags[key]] = true;
90764                     }
90765                     return vertexTags;
90766                 }, {});
90767             };
90768
90769             all.build = function(d, addable) {
90770                 if (d.fields) {
90771                     Object.keys(d.fields).forEach(function(id) {
90772                         var f = d.fields[id];
90773                         _fields[id] = presetField(id, f);
90774                         if (f.universal) {
90775                             _universal.push(_fields[id]);
90776                         }
90777                     });
90778                 }
90779
90780                 if (d.presets) {
90781                     var rawPresets = d.presets;
90782                     Object.keys(d.presets).forEach(function(id) {
90783                         var p = d.presets[id];
90784                         var existing = all.index(id);
90785                         var isAddable = typeof addable === 'function' ? addable(id, p) : addable;
90786                         if (existing !== -1) {
90787                             all.collection[existing] = presetPreset(id, p, _fields, isAddable, rawPresets);
90788                         } else {
90789                             all.collection.push(presetPreset(id, p, _fields, isAddable, rawPresets));
90790                         }
90791                     });
90792                 }
90793
90794                 if (d.categories) {
90795                     Object.keys(d.categories).forEach(function(id) {
90796                         var c = d.categories[id];
90797                         var existing = all.index(id);
90798                         if (existing !== -1) {
90799                             all.collection[existing] = presetCategory(id, c, all);
90800                         } else {
90801                             all.collection.push(presetCategory(id, c, all));
90802                         }
90803                     });
90804                 }
90805
90806                 var getItem = (all.item).bind(all);
90807                 if (_addablePresetIDs) {
90808                     ['area', 'line', 'point', 'vertex', 'relation'].forEach(function(geometry) {
90809                         _defaults[geometry] = presetCollection(_addablePresetIDs.map(getItem).filter(function(preset) {
90810                             return preset.geometry.indexOf(geometry) !== -1;
90811                         }));
90812                     });
90813                 } else if (d.defaults) {
90814                     _defaults = {
90815                         area: presetCollection(d.defaults.area.map(getItem)),
90816                         line: presetCollection(d.defaults.line.map(getItem)),
90817                         point: presetCollection(d.defaults.point.map(getItem)),
90818                         vertex: presetCollection(d.defaults.vertex.map(getItem)),
90819                         relation: presetCollection(d.defaults.relation.map(getItem))
90820                     };
90821                 }
90822
90823                 for (var i = 0; i < all.collection.length; i++) {
90824                     var preset = all.collection[i];
90825                     var geometry = preset.geometry;
90826
90827                     for (var j = 0; j < geometry.length; j++) {
90828                         var g = _index[geometry[j]];
90829                         for (var k in preset.tags) {
90830                             (g[k] = g[k] || []).push(preset);
90831                         }
90832                     }
90833                 }
90834                 return all;
90835             };
90836
90837             all.init = function(addablePresetIDs) {
90838                 all.collection = [];
90839                 _recents = null;
90840                 _addablePresetIDs = addablePresetIDs;
90841                 _fields = {};
90842                 _universal = [];
90843                 _index = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
90844
90845                 var addable = true;
90846                 if (addablePresetIDs) {
90847                     addable = function(presetID) {
90848                         return addablePresetIDs.indexOf(presetID) !== -1;
90849                     };
90850                 }
90851
90852                 return all.build(data.presets, addable);
90853             };
90854
90855
90856             all.reset = function() {
90857                 all.collection = [];
90858                 _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
90859                 _fields = {};
90860                 _universal = [];
90861                 _recents = null;
90862
90863                 // Index of presets by (geometry, tag key).
90864                 _index = {
90865                     point: {},
90866                     vertex: {},
90867                     line: {},
90868                     area: {},
90869                     relation: {}
90870                 };
90871
90872                 return all;
90873             };
90874
90875             all.fromExternal = function(external, done) {
90876                 all.reset();
90877                 d3_json(external)
90878                     .then(function(externalPresets) {
90879                         all.build(data.presets, false);    // load the default presets as non-addable to start
90880
90881                         _addablePresetIDs = externalPresets.presets && Object.keys(externalPresets.presets);
90882
90883                         all.build(externalPresets, true);  // then load the external presets as addable
90884                     })
90885                     .catch(function() {
90886                         all.init();
90887                     })
90888                     .finally(function() {
90889                         done(all);
90890                     });
90891             };
90892
90893             all.field = function(id) {
90894                 return _fields[id];
90895             };
90896
90897             all.universal = function() {
90898                 return _universal;
90899             };
90900
90901             all.defaults = function(geometry, n) {
90902                 var rec = [];
90903                 if (!context.inIntro()) {
90904                     rec = all.recent().matchGeometry(geometry).collection.slice(0, 4);
90905                 }
90906                 var def = utilArrayUniq(rec.concat(_defaults[geometry].collection)).slice(0, n - 1);
90907                 return presetCollection(utilArrayUniq(rec.concat(def).concat(all.fallback(geometry))));
90908             };
90909
90910             all.recent = function() {
90911                 return presetCollection(utilArrayUniq(all.getRecents().map(function(d) {
90912                     return d.preset;
90913                 })));
90914             };
90915
90916             function RibbonItem(preset, geometry, source) {
90917                 var item = {};
90918                 item.preset = preset;
90919                 item.geometry = geometry;
90920                 item.source = source;
90921
90922                 item.isRecent = function() {
90923                     return item.source === 'recent';
90924                 };
90925                 item.matches = function(preset, geometry) {
90926                     return item.preset.id === preset.id && item.geometry === geometry;
90927                 };
90928                 item.minified = function() {
90929                     return {
90930                         pID: item.preset.id,
90931                         geom: item.geometry
90932                     };
90933                 };
90934                 return item;
90935             }
90936
90937             function ribbonItemForMinified(d, source) {
90938                 if (d && d.pID && d.geom) {
90939                     var preset = all.item(d.pID);
90940                     if (!preset) { return null; }
90941
90942                     var geom = d.geom;
90943                     // treat point and vertex features as one geometry
90944                     if (geom === 'vertex') { geom = 'point'; }
90945
90946                     // iD's presets could have changed since this was saved,
90947                     // so make sure it's still valid.
90948                     if (preset.matchGeometry(geom) || (geom === 'point' && preset.matchGeometry('vertex'))) {
90949                         return RibbonItem(preset, geom, source);
90950                     }
90951                 }
90952                 return null;
90953             }
90954
90955             function setRecents(items) {
90956                 _recents = items;
90957                 var minifiedItems = items.map(function(d) { return d.minified(); });
90958                 context.storage('preset_recents', JSON.stringify(minifiedItems));
90959
90960                 dispatch$1.call('recentsChange');
90961             }
90962
90963             all.getRecents = function() {
90964                 if (!_recents) {
90965                     // fetch from local storage
90966                     _recents = (JSON.parse(context.storage('preset_recents')) || [])
90967                         .reduce(function(output, d) {
90968                             var item = ribbonItemForMinified(d, 'recent');
90969                             if (item && item.preset.addable()) { output.push(item); }
90970                             return output;
90971                         }, []);
90972                 }
90973                 return _recents;
90974             };
90975
90976             all.removeRecent = function(preset, geometry) {
90977                 var item = all.recentMatching(preset, geometry);
90978                 if (item) {
90979                     var items = all.getRecents();
90980                     items.splice(items.indexOf(item), 1);
90981                     setRecents(items);
90982                 }
90983             };
90984
90985             all.recentMatching = function(preset, geometry) {
90986                 geometry = all.fallback(geometry).id;
90987                 var items = all.getRecents();
90988                 for (var index in items) {
90989                     if (items[index].matches(preset, geometry)) {
90990                         return items[index];
90991                     }
90992                 }
90993                 return null;
90994             };
90995
90996             all.moveItem = function(items, fromIndex, toIndex) {
90997                 if (fromIndex === toIndex ||
90998                     fromIndex < 0 || toIndex < 0 ||
90999                     fromIndex >= items.length || toIndex >= items.length) { return null; }
91000                 items.splice(toIndex, 0, items.splice(fromIndex, 1)[0]);
91001                 return items;
91002             };
91003
91004             all.moveRecent = function(item, beforeItem) {
91005                 var recents = all.getRecents();
91006                 var fromIndex = recents.indexOf(item);
91007                 var toIndex = recents.indexOf(beforeItem);
91008                 var items = all.moveItem(recents, fromIndex, toIndex);
91009                 if (items) { setRecents(items); }
91010             };
91011
91012             all.setMostRecent = function(preset, geometry) {
91013                 if (context.inIntro()) { return; }
91014                 if (preset.searchable === false) { return; }
91015
91016                 geometry = all.fallback(geometry).id;
91017
91018                 var items = all.getRecents();
91019                 var item = all.recentMatching(preset, geometry);
91020                 if (item) {
91021                     items.splice(items.indexOf(item), 1);
91022                 } else {
91023                     item = RibbonItem(preset, geometry, 'recent');
91024                 }
91025                 // allow 30 recents
91026                 if (items.length === 30) {
91027                     // remove the last recent (first in, first out)
91028                     items.pop();
91029                 }
91030                 // prepend array
91031                 items.unshift(item);
91032                 setRecents(items);
91033             };
91034
91035             return utilRebind(all, dispatch$1, 'on');
91036         }
91037
91038         function localeDateString(s) {
91039             if (!s) { return null; }
91040             var detected = utilDetect();
91041             var options = { day: 'numeric', month: 'short', year: 'numeric' };
91042             var d = new Date(s);
91043             if (isNaN(d.getTime())) { return null; }
91044             return d.toLocaleDateString(detected.locale, options);
91045         }
91046
91047         function vintageRange(vintage) {
91048             var s;
91049             if (vintage.start || vintage.end) {
91050                 s = (vintage.start || '?');
91051                 if (vintage.start !== vintage.end) {
91052                     s += ' - ' + (vintage.end || '?');
91053                 }
91054             }
91055             return s;
91056         }
91057
91058
91059         function rendererBackgroundSource(data) {
91060             var source = Object.assign({}, data);   // shallow copy
91061             var offset = [0, 0];
91062             var name = source.name;
91063             var description = source.description;
91064             var best = !!source.best;
91065             var template = source.encrypted ? utilAesDecrypt(source.template) : source.template;
91066
91067             source.tileSize = data.tileSize || 256;
91068             source.zoomExtent = data.zoomExtent || [0, 22];
91069             source.overzoom = data.overzoom !== false;
91070
91071             source.offset = function(_) {
91072                 if (!arguments.length) { return offset; }
91073                 offset = _;
91074                 return source;
91075             };
91076
91077
91078             source.nudge = function(val, zoomlevel) {
91079                 offset[0] += val[0] / Math.pow(2, zoomlevel);
91080                 offset[1] += val[1] / Math.pow(2, zoomlevel);
91081                 return source;
91082             };
91083
91084
91085             source.name = function() {
91086                 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
91087                 return t('imagery.' + id_safe + '.name', { default: name });
91088             };
91089
91090
91091             source.description = function() {
91092                 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
91093                 return t('imagery.' + id_safe + '.description', { default: description });
91094             };
91095
91096
91097             source.best = function() {
91098                 return best;
91099             };
91100
91101
91102             source.area = function() {
91103                 if (!data.polygon) { return Number.MAX_VALUE; }  // worldwide
91104                 var area = d3_geoArea({ type: 'MultiPolygon', coordinates: [ data.polygon ] });
91105                 return isNaN(area) ? 0 : area;
91106             };
91107
91108
91109             source.imageryUsed = function() {
91110                 return name || source.id;
91111             };
91112
91113
91114             source.template = function(_) {
91115                 if (!arguments.length) { return template; }
91116                 if (source.id === 'custom') { template = _; }
91117                 return source;
91118             };
91119
91120
91121             source.url = function(coord) {
91122                 if (this.type === 'wms') {
91123                     var tileToProjectedCoords = (function(x, y, z) {
91124                         //polyfill for IE11, PhantomJS
91125                         var sinh = Math.sinh || function(x) {
91126                             var y = Math.exp(x);
91127                             return (y - 1 / y) / 2;
91128                         };
91129
91130                         var zoomSize = Math.pow(2, z);
91131                         var lon = x / zoomSize * Math.PI * 2 - Math.PI;
91132                         var lat = Math.atan(sinh(Math.PI * (1 - 2 * y / zoomSize)));
91133
91134                         switch (this.projection) {
91135                             case 'EPSG:4326':
91136                                 return {
91137                                     x: lon * 180 / Math.PI,
91138                                     y: lat * 180 / Math.PI
91139                                 };
91140                             default: // EPSG:3857 and synonyms
91141                                 var mercCoords = mercatorRaw(lon, lat);
91142                                 return {
91143                                     x: 20037508.34 / Math.PI * mercCoords[0],
91144                                     y: 20037508.34 / Math.PI * mercCoords[1]
91145                                 };
91146                         }
91147                     }).bind(this);
91148
91149                     var tileSize = this.tileSize;
91150                     var projection = this.projection;
91151                     var minXmaxY = tileToProjectedCoords(coord[0], coord[1], coord[2]);
91152                     var maxXminY = tileToProjectedCoords(coord[0]+1, coord[1]+1, coord[2]);
91153                     return template.replace(/\{(\w+)\}/g, function (token, key) {
91154                       switch (key) {
91155                         case 'width':
91156                         case 'height':
91157                           return tileSize;
91158                         case 'proj':
91159                           return projection;
91160                         case 'wkid':
91161                           return projection.replace(/^EPSG:/, '');
91162                         case 'bbox':
91163                           return minXmaxY.x + ',' + maxXminY.y + ',' + maxXminY.x + ',' + minXmaxY.y;
91164                         case 'w':
91165                           return minXmaxY.x;
91166                         case 's':
91167                           return maxXminY.y;
91168                         case 'n':
91169                           return maxXminY.x;
91170                         case 'e':
91171                           return minXmaxY.y;
91172                         default:
91173                           return token;
91174                       }
91175                     });
91176                 }
91177                 return template
91178                     .replace('{x}', coord[0])
91179                     .replace('{y}', coord[1])
91180                     // TMS-flipped y coordinate
91181                     .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1)
91182                     .replace(/\{z(oom)?\}/, coord[2])
91183                     .replace(/\{switch:([^}]+)\}/, function(s, r) {
91184                         var subdomains = r.split(',');
91185                         return subdomains[(coord[0] + coord[1]) % subdomains.length];
91186                     })
91187                     .replace('{u}', function() {
91188                         var u = '';
91189                         for (var zoom = coord[2]; zoom > 0; zoom--) {
91190                             var b = 0;
91191                             var mask = 1 << (zoom - 1);
91192                             if ((coord[0] & mask) !== 0) { b++; }
91193                             if ((coord[1] & mask) !== 0) { b += 2; }
91194                             u += b.toString();
91195                         }
91196                         return u;
91197                     });
91198             };
91199
91200
91201             source.validZoom = function(z) {
91202                 return source.zoomExtent[0] <= z &&
91203                     (source.overzoom || source.zoomExtent[1] > z);
91204             };
91205
91206
91207             source.isLocatorOverlay = function() {
91208                 return source.id === 'mapbox_locator_overlay';
91209             };
91210
91211
91212             /* hides a source from the list, but leaves it available for use */
91213             source.isHidden = function() {
91214                 return source.id === 'DigitalGlobe-Premium-vintage' ||
91215                     source.id === 'DigitalGlobe-Standard-vintage';
91216             };
91217
91218
91219             source.copyrightNotices = function() {};
91220
91221
91222             source.getMetadata = function(center, tileCoord, callback) {
91223                 var vintage = {
91224                     start: localeDateString(source.startDate),
91225                     end: localeDateString(source.endDate)
91226                 };
91227                 vintage.range = vintageRange(vintage);
91228
91229                 var metadata = { vintage: vintage };
91230                 callback(null, metadata);
91231             };
91232
91233
91234             return source;
91235         }
91236
91237
91238         rendererBackgroundSource.Bing = function(data, dispatch) {
91239             // http://msdn.microsoft.com/en-us/library/ff701716.aspx
91240             // http://msdn.microsoft.com/en-us/library/ff701701.aspx
91241
91242             data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z';
91243
91244             var bing = rendererBackgroundSource(data);
91245             // var key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU'; // P2, JOSM, etc
91246             var key = 'Ak5oTE46TUbjRp08OFVcGpkARErDobfpuyNKa-W2mQ8wbt1K1KL8p1bIRwWwcF-Q';    // iD
91247
91248
91249             var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key;
91250             var cache = {};
91251             var inflight = {};
91252             var providers = [];
91253
91254             d3_json(url)
91255                 .then(function(json) {
91256                     providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) {
91257                         return {
91258                             attribution: provider.attribution,
91259                             areas: provider.coverageAreas.map(function(area) {
91260                                 return {
91261                                     zoom: [area.zoomMin, area.zoomMax],
91262                                     extent: geoExtent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]])
91263                                 };
91264                             })
91265                         };
91266                     });
91267                     dispatch.call('change');
91268                 })
91269                 .catch(function() {
91270                     /* ignore */
91271                 });
91272
91273
91274             bing.copyrightNotices = function(zoom, extent) {
91275                 zoom = Math.min(zoom, 21);
91276                 return providers.filter(function(provider) {
91277                     return provider.areas.some(function(area) {
91278                         return extent.intersects(area.extent) &&
91279                             area.zoom[0] <= zoom &&
91280                             area.zoom[1] >= zoom;
91281                     });
91282                 }).map(function(provider) {
91283                     return provider.attribution;
91284                 }).join(', ');
91285             };
91286
91287
91288             bing.getMetadata = function(center, tileCoord, callback) {
91289                 var tileID = tileCoord.slice(0, 3).join('/');
91290                 var zoom = Math.min(tileCoord[2], 21);
91291                 var centerPoint = center[1] + ',' + center[0];  // lat,lng
91292                 var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint +
91293                         '?zl=' + zoom + '&key=' + key;
91294
91295                 if (inflight[tileID]) { return; }
91296
91297                 if (!cache[tileID]) {
91298                     cache[tileID] = {};
91299                 }
91300                 if (cache[tileID] && cache[tileID].metadata) {
91301                     return callback(null, cache[tileID].metadata);
91302                 }
91303
91304                 inflight[tileID] = true;
91305                 d3_json(url)
91306                     .then(function(result) {
91307                         delete inflight[tileID];
91308                         if (!result) {
91309                             throw new Error('Unknown Error');
91310                         }
91311                         var vintage = {
91312                             start: localeDateString(result.resourceSets[0].resources[0].vintageStart),
91313                             end: localeDateString(result.resourceSets[0].resources[0].vintageEnd)
91314                         };
91315                         vintage.range = vintageRange(vintage);
91316
91317                         var metadata = { vintage: vintage };
91318                         cache[tileID].metadata = metadata;
91319                         if (callback) { callback(null, metadata); }
91320                     })
91321                     .catch(function(err) {
91322                         delete inflight[tileID];
91323                         if (callback) { callback(err.message); }
91324                     });
91325             };
91326
91327
91328             bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details';
91329
91330
91331             return bing;
91332         };
91333
91334
91335
91336         rendererBackgroundSource.Esri = function(data) {
91337             // in addition to using the tilemap at zoom level 20, overzoom real tiles - #4327 (deprecated technique, but it works)
91338             if (data.template.match(/blankTile/) === null) {
91339                 data.template = data.template + '?blankTile=false';
91340             }
91341
91342             var esri = rendererBackgroundSource(data);
91343             var cache = {};
91344             var inflight = {};
91345             var _prevCenter;
91346
91347             // use a tilemap service to set maximum zoom for esri tiles dynamically
91348             // https://developers.arcgis.com/documentation/tiled-elevation-service/
91349             esri.fetchTilemap = function(center) {
91350                 // skip if we have already fetched a tilemap within 5km
91351                 if (_prevCenter && geoSphericalDistance(center, _prevCenter) < 5000) { return; }
91352                 _prevCenter = center;
91353
91354                 // tiles are available globally to zoom level 19, afterward they may or may not be present
91355                 var z = 20;
91356
91357                 // first generate a random url using the template
91358                 var dummyUrl = esri.url([1,2,3]);
91359
91360                 // calculate url z/y/x from the lat/long of the center of the map
91361                 var x = (Math.floor((center[0] + 180) / 360 * Math.pow(2, z)));
91362                 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)));
91363
91364                 // fetch an 8x8 grid to leverage cache
91365                 var tilemapUrl = dummyUrl.replace(/tile\/[0-9]+\/[0-9]+\/[0-9]+\?blankTile=false/, 'tilemap') + '/' + z + '/' + y + '/' + x + '/8/8';
91366
91367                 // make the request and introspect the response from the tilemap server
91368                 d3_json(tilemapUrl)
91369                     .then(function(tilemap) {
91370                         if (!tilemap) {
91371                             throw new Error('Unknown Error');
91372                         }
91373                         var hasTiles = true;
91374                         for (var i = 0; i < tilemap.data.length; i++) {
91375                             // 0 means an individual tile in the grid doesn't exist
91376                             if (!tilemap.data[i]) {
91377                                 hasTiles = false;
91378                                 break;
91379                             }
91380                         }
91381
91382                         // if any tiles are missing at level 20 we restrict maxZoom to 19
91383                         esri.zoomExtent[1] = (hasTiles ? 22 : 19);
91384                     })
91385                     .catch(function() {
91386                         /* ignore */
91387                     });
91388             };
91389
91390
91391             esri.getMetadata = function(center, tileCoord, callback) {
91392                 var tileID = tileCoord.slice(0, 3).join('/');
91393                 var zoom = Math.min(tileCoord[2], esri.zoomExtent[1]);
91394                 var centerPoint = center[0] + ',' + center[1];  // long, lat (as it should be)
91395                 var unknown = t('info_panels.background.unknown');
91396                 var metadataLayer;
91397                 var vintage = {};
91398                 var metadata = {};
91399
91400                 if (inflight[tileID]) { return; }
91401
91402                 switch (true) {
91403                     case (zoom >= 20 && esri.id === 'EsriWorldImageryClarity'):
91404                         metadataLayer = 4;
91405                         break;
91406                     case zoom >= 19:
91407                         metadataLayer = 3;
91408                         break;
91409                     case zoom >= 17:
91410                         metadataLayer = 2;
91411                         break;
91412                     case zoom >= 13:
91413                         metadataLayer = 0;
91414                         break;
91415                     default:
91416                         metadataLayer = 99;
91417                 }
91418
91419                 var url;
91420                 // build up query using the layer appropriate to the current zoom
91421                 if (esri.id === 'EsriWorldImagery') {
91422                     url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/';
91423                 } else if (esri.id === 'EsriWorldImageryClarity') {
91424                     url = 'https://serviceslab.arcgisonline.com/arcgis/rest/services/Clarity_World_Imagery/MapServer/';
91425                 }
91426
91427                 url += metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json';
91428
91429                 if (!cache[tileID]) {
91430                     cache[tileID] = {};
91431                 }
91432                 if (cache[tileID] && cache[tileID].metadata) {
91433                     return callback(null, cache[tileID].metadata);
91434                 }
91435
91436                 // accurate metadata is only available >= 13
91437                 if (metadataLayer === 99) {
91438                     vintage = {
91439                         start: null,
91440                         end: null,
91441                         range: null
91442                     };
91443                     metadata = {
91444                         vintage: null,
91445                         source: unknown,
91446                         description: unknown,
91447                         resolution: unknown,
91448                         accuracy: unknown
91449                     };
91450
91451                     callback(null, metadata);
91452
91453                 } else {
91454                     inflight[tileID] = true;
91455                     d3_json(url)
91456                         .then(function(result) {
91457                             delete inflight[tileID];
91458                             if (!result) {
91459                                 throw new Error('Unknown Error');
91460                             } else if (result.features && result.features.length < 1) {
91461                                 throw new Error('No Results');
91462                             } else if (result.error && result.error.message) {
91463                                 throw new Error(result.error.message);
91464                             }
91465
91466                             // pass through the discrete capture date from metadata
91467                             var captureDate = localeDateString(result.features[0].attributes.SRC_DATE2);
91468                             vintage = {
91469                                 start: captureDate,
91470                                 end: captureDate,
91471                                 range: captureDate
91472                             };
91473                             metadata = {
91474                                 vintage: vintage,
91475                                 source: clean(result.features[0].attributes.NICE_NAME),
91476                                 description: clean(result.features[0].attributes.NICE_DESC),
91477                                 resolution: clean(result.features[0].attributes.SRC_RES),
91478                                 accuracy: clean(result.features[0].attributes.SRC_ACC)
91479                             };
91480
91481                             // append units - meters
91482                             if (isFinite(metadata.resolution)) {
91483                                 metadata.resolution += ' m';
91484                             }
91485                             if (isFinite(metadata.accuracy)) {
91486                                 metadata.accuracy += ' m';
91487                             }
91488
91489                             cache[tileID].metadata = metadata;
91490                             if (callback) { callback(null, metadata); }
91491                         })
91492                         .catch(function(err) {
91493                             delete inflight[tileID];
91494                             if (callback) { callback(err.message); }
91495                         });
91496                 }
91497
91498
91499                 function clean(val) {
91500                     return String(val).trim() || unknown;
91501                 }
91502             };
91503
91504             return esri;
91505         };
91506
91507
91508         rendererBackgroundSource.None = function() {
91509             var source = rendererBackgroundSource({ id: 'none', template: '' });
91510
91511
91512             source.name = function() {
91513                 return t('background.none');
91514             };
91515
91516
91517             source.imageryUsed = function() {
91518                 return null;
91519             };
91520
91521
91522             source.area = function() {
91523                 return -1;  // sources in background pane are sorted by area
91524             };
91525
91526
91527             return source;
91528         };
91529
91530
91531         rendererBackgroundSource.Custom = function(template) {
91532             var source = rendererBackgroundSource({ id: 'custom', template: template });
91533
91534
91535             source.name = function() {
91536                 return t('background.custom');
91537             };
91538
91539
91540             source.imageryUsed = function() {
91541                 return 'Custom (' + source.template() + ' )';
91542             };
91543
91544
91545             source.area = function() {
91546                 return -2;  // sources in background pane are sorted by area
91547             };
91548
91549
91550             return source;
91551         };
91552
91553         function rendererTileLayer(context) {
91554             var transformProp = utilPrefixCSSProperty('Transform');
91555             var tiler = utilTiler();
91556
91557             var _tileSize = 256;
91558             var _projection;
91559             var _cache = {};
91560             var _tileOrigin;
91561             var _zoom;
91562             var _source;
91563
91564
91565             function tileSizeAtZoom(d, z) {
91566                 var EPSILON = 0.002;    // close seams
91567                 return ((_tileSize * Math.pow(2, z - d[2])) / _tileSize) + EPSILON;
91568             }
91569
91570
91571             function atZoom(t, distance) {
91572                 var power = Math.pow(2, distance);
91573                 return [
91574                     Math.floor(t[0] * power),
91575                     Math.floor(t[1] * power),
91576                     t[2] + distance
91577                 ];
91578             }
91579
91580
91581             function lookUp(d) {
91582                 for (var up = -1; up > -d[2]; up--) {
91583                     var tile = atZoom(d, up);
91584                     if (_cache[_source.url(tile)] !== false) {
91585                         return tile;
91586                     }
91587                 }
91588             }
91589
91590
91591             function uniqueBy(a, n) {
91592                 var o = [];
91593                 var seen = {};
91594                 for (var i = 0; i < a.length; i++) {
91595                     if (seen[a[i][n]] === undefined) {
91596                         o.push(a[i]);
91597                         seen[a[i][n]] = true;
91598                     }
91599                 }
91600                 return o;
91601             }
91602
91603
91604             function addSource(d) {
91605                 d.push(_source.url(d));
91606                 return d;
91607             }
91608
91609
91610             // Update tiles based on current state of `projection`.
91611             function background(selection) {
91612                 _zoom = geoScaleToZoom(_projection.scale(), _tileSize);
91613
91614                 var pixelOffset;
91615                 if (_source) {
91616                     pixelOffset = [
91617                         _source.offset()[0] * Math.pow(2, _zoom),
91618                         _source.offset()[1] * Math.pow(2, _zoom)
91619                     ];
91620                 } else {
91621                     pixelOffset = [0, 0];
91622                 }
91623
91624                 var translate = [
91625                     _projection.translate()[0] + pixelOffset[0],
91626                     _projection.translate()[1] + pixelOffset[1]
91627                 ];
91628
91629                 tiler
91630                     .scale(_projection.scale() * 2 * Math.PI)
91631                     .translate(translate);
91632
91633                 _tileOrigin = [
91634                     _projection.scale() * Math.PI - translate[0],
91635                     _projection.scale() * Math.PI - translate[1]
91636                 ];
91637
91638                 render(selection);
91639             }
91640
91641
91642             // Derive the tiles onscreen, remove those offscreen and position them.
91643             // Important that this part not depend on `_projection` because it's
91644             // rentered when tiles load/error (see #644).
91645             function render(selection) {
91646                 if (!_source) { return; }
91647                 var requests = [];
91648                 var showDebug = context.getDebug('tile') && !_source.overlay;
91649
91650                 if (_source.validZoom(_zoom)) {
91651                     tiler.skipNullIsland(!!_source.overlay);
91652
91653                     tiler().forEach(function(d) {
91654                         addSource(d);
91655                         if (d[3] === '') { return; }
91656                         if (typeof d[3] !== 'string') { return; } // Workaround for #2295
91657                         requests.push(d);
91658                         if (_cache[d[3]] === false && lookUp(d)) {
91659                             requests.push(addSource(lookUp(d)));
91660                         }
91661                     });
91662
91663                     requests = uniqueBy(requests, 3).filter(function(r) {
91664                         // don't re-request tiles which have failed in the past
91665                         return _cache[r[3]] !== false;
91666                     });
91667                 }
91668
91669                 function load(d) {
91670                     _cache[d[3]] = true;
91671                     d3_select(this)
91672                         .on('error', null)
91673                         .on('load', null)
91674                         .classed('tile-loaded', true);
91675                     render(selection);
91676                 }
91677
91678                 function error(d) {
91679                     _cache[d[3]] = false;
91680                     d3_select(this)
91681                         .on('error', null)
91682                         .on('load', null)
91683                         .remove();
91684                     render(selection);
91685                 }
91686
91687                 function imageTransform(d) {
91688                     var ts = _tileSize * Math.pow(2, _zoom - d[2]);
91689                     var scale = tileSizeAtZoom(d, _zoom);
91690                     return 'translate(' +
91691                         ((d[0] * ts) - _tileOrigin[0]) + 'px,' +
91692                         ((d[1] * ts) - _tileOrigin[1]) + 'px) ' +
91693                         'scale(' + scale + ',' + scale + ')';
91694                 }
91695
91696                 function tileCenter(d) {
91697                     var ts = _tileSize * Math.pow(2, _zoom - d[2]);
91698                     return [
91699                         ((d[0] * ts) - _tileOrigin[0] + (ts / 2)),
91700                         ((d[1] * ts) - _tileOrigin[1] + (ts / 2))
91701                     ];
91702                 }
91703
91704                 function debugTransform(d) {
91705                     var coord = tileCenter(d);
91706                     return 'translate(' + coord[0] + 'px,' + coord[1] + 'px)';
91707                 }
91708
91709
91710                 // Pick a representative tile near the center of the viewport
91711                 // (This is useful for sampling the imagery vintage)
91712                 var dims = tiler.size();
91713                 var mapCenter = [dims[0] / 2, dims[1] / 2];
91714                 var minDist = Math.max(dims[0], dims[1]);
91715                 var nearCenter;
91716
91717                 requests.forEach(function(d) {
91718                     var c = tileCenter(d);
91719                     var dist = geoVecLength(c, mapCenter);
91720                     if (dist < minDist) {
91721                         minDist = dist;
91722                         nearCenter = d;
91723                     }
91724                 });
91725
91726
91727                 var image = selection.selectAll('img')
91728                     .data(requests, function(d) { return d[3]; });
91729
91730                 image.exit()
91731                     .style(transformProp, imageTransform)
91732                     .classed('tile-removing', true)
91733                     .classed('tile-center', false)
91734                     .each(function() {
91735                         var tile = d3_select(this);
91736                         window.setTimeout(function() {
91737                             if (tile.classed('tile-removing')) {
91738                                 tile.remove();
91739                             }
91740                         }, 300);
91741                     });
91742
91743                 image.enter()
91744                   .append('img')
91745                     .attr('class', 'tile')
91746                     .style('width', _tileSize + 'px')
91747                     .style('height', _tileSize + 'px')
91748                     .attr('src', function(d) { return d[3]; })
91749                     .on('error', error)
91750                     .on('load', load)
91751                   .merge(image)
91752                     .style(transformProp, imageTransform)
91753                     .classed('tile-debug', showDebug)
91754                     .classed('tile-removing', false)
91755                     .classed('tile-center', function(d) { return d === nearCenter; });
91756
91757
91758
91759                 var debug = selection.selectAll('.tile-label-debug')
91760                     .data(showDebug ? requests : [], function(d) { return d[3]; });
91761
91762                 debug.exit()
91763                     .remove();
91764
91765                 if (showDebug) {
91766                     var debugEnter = debug.enter()
91767                         .append('div')
91768                         .attr('class', 'tile-label-debug');
91769
91770                     debugEnter
91771                         .append('div')
91772                         .attr('class', 'tile-label-debug-coord');
91773
91774                     debugEnter
91775                         .append('div')
91776                         .attr('class', 'tile-label-debug-vintage');
91777
91778                     debug = debug.merge(debugEnter);
91779
91780                     debug
91781                         .style(transformProp, debugTransform);
91782
91783                     debug
91784                         .selectAll('.tile-label-debug-coord')
91785                         .text(function(d) { return d[2] + ' / ' + d[0] + ' / ' + d[1]; });
91786
91787                     debug
91788                         .selectAll('.tile-label-debug-vintage')
91789                         .each(function(d) {
91790                             var span = d3_select(this);
91791                             var center = context.projection.invert(tileCenter(d));
91792                             _source.getMetadata(center, d, function(err, result) {
91793                                 span.text((result && result.vintage && result.vintage.range) ||
91794                                     t('info_panels.background.vintage') + ': ' + t('info_panels.background.unknown')
91795                                 );
91796                             });
91797                         });
91798                 }
91799
91800             }
91801
91802
91803             background.projection = function(val) {
91804                 if (!arguments.length) { return _projection; }
91805                 _projection = val;
91806                 return background;
91807             };
91808
91809
91810             background.dimensions = function(val) {
91811                 if (!arguments.length) { return tiler.size(); }
91812                 tiler.size(val);
91813                 return background;
91814             };
91815
91816
91817             background.source = function(val) {
91818                 if (!arguments.length) { return _source; }
91819                 _source = val;
91820                 _tileSize = _source.tileSize;
91821                 _cache = {};
91822                 tiler.tileSize(_source.tileSize).zoomExtent(_source.zoomExtent);
91823                 return background;
91824             };
91825
91826
91827             return background;
91828         }
91829
91830         function rendererBackground(context) {
91831             var dispatch$1 = dispatch('change');
91832             var detected = utilDetect();
91833             var baseLayer = rendererTileLayer(context).projection(context.projection);
91834             var _isValid = true;
91835             var _overlayLayers = [];
91836             var _backgroundSources = [];
91837             var _brightness = 1;
91838             var _contrast = 1;
91839             var _saturation = 1;
91840             var _sharpness = 1;
91841
91842
91843             function background(selection) {
91844                 // If we are displaying an Esri basemap at high zoom,
91845                 // check its tilemap to see how high the zoom can go
91846                 if (context.map().zoom() > 18) {
91847                     var basemap = baseLayer.source();
91848                     if (basemap && /^EsriWorldImagery/.test(basemap.id)) {
91849                         var center = context.map().center();
91850                         basemap.fetchTilemap(center);
91851                     }
91852                 }
91853
91854                 // Is the imagery valid here? - #4827
91855                 var sources = background.sources(context.map().extent());
91856                 var wasValid = _isValid;
91857                 _isValid = !!sources
91858                     .filter(function(d) { return d === baseLayer.source(); }).length;
91859
91860                 if (wasValid !== _isValid) {      // change in valid status
91861                     background.updateImagery();
91862                 }
91863
91864
91865                 var baseFilter = '';
91866                 if (detected.cssfilters) {
91867                     if (_brightness !== 1) {
91868                         baseFilter += 'brightness(' + _brightness + ')';
91869                     }
91870                     if (_contrast !== 1) {
91871                         baseFilter += 'contrast(' + _contrast + ')';
91872                     }
91873                     if (_saturation !== 1) {
91874                         baseFilter += 'saturate(' + _saturation + ')';
91875                     }
91876                     if (_sharpness < 1) {  // gaussian blur
91877                         var blur = d3_interpolateNumber(0.5, 5)(1 - _sharpness);
91878                         baseFilter += 'blur(' + blur + 'px)';
91879                     }
91880                 }
91881
91882                 var base = selection.selectAll('.layer-background')
91883                     .data([0]);
91884
91885                 base = base.enter()
91886                     .insert('div', '.layer-data')
91887                     .attr('class', 'layer layer-background')
91888                     .merge(base);
91889
91890                 if (detected.cssfilters) {
91891                     base.style('filter', baseFilter || null);
91892                 } else {
91893                     base.style('opacity', _brightness);
91894                 }
91895
91896
91897                 var imagery = base.selectAll('.layer-imagery')
91898                     .data([0]);
91899
91900                 imagery.enter()
91901                     .append('div')
91902                     .attr('class', 'layer layer-imagery')
91903                     .merge(imagery)
91904                     .call(baseLayer);
91905
91906
91907                 var maskFilter = '';
91908                 var mixBlendMode = '';
91909                 if (detected.cssfilters && _sharpness > 1) {  // apply unsharp mask
91910                     mixBlendMode = 'overlay';
91911                     maskFilter = 'saturate(0) blur(3px) invert(1)';
91912
91913                     var contrast = _sharpness - 1;
91914                     maskFilter += ' contrast(' + contrast + ')';
91915
91916                     var brightness = d3_interpolateNumber(1, 0.85)(_sharpness - 1);
91917                     maskFilter += ' brightness(' + brightness + ')';
91918                 }
91919
91920                 var mask = base.selectAll('.layer-unsharp-mask')
91921                     .data(detected.cssfilters && _sharpness > 1 ? [0] : []);
91922
91923                 mask.exit()
91924                     .remove();
91925
91926                 mask.enter()
91927                     .append('div')
91928                     .attr('class', 'layer layer-mask layer-unsharp-mask')
91929                     .merge(mask)
91930                     .call(baseLayer)
91931                     .style('filter', maskFilter || null)
91932                     .style('mix-blend-mode', mixBlendMode || null);
91933
91934
91935                 var overlays = selection.selectAll('.layer-overlay')
91936                     .data(_overlayLayers, function(d) { return d.source().name(); });
91937
91938                 overlays.exit()
91939                     .remove();
91940
91941                 overlays.enter()
91942                     .insert('div', '.layer-data')
91943                     .attr('class', 'layer layer-overlay')
91944                     .merge(overlays)
91945                     .each(function(layer) { d3_select(this).call(layer); });
91946             }
91947
91948
91949             background.updateImagery = function() {
91950                 var b = baseLayer.source();
91951                 if (context.inIntro() || !b) { return; }
91952
91953                 var o = _overlayLayers
91954                     .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
91955                     .map(function (d) { return d.source().id; })
91956                     .join(',');
91957
91958                 var meters = geoOffsetToMeters(b.offset());
91959                 var epsilon = 0.01;
91960                 var x = +meters[0].toFixed(2);
91961                 var y = +meters[1].toFixed(2);
91962                 var q = utilStringQs(window.location.hash.substring(1));
91963
91964                 var id = b.id;
91965                 if (id === 'custom') {
91966                     id = 'custom:' + b.template();
91967                 }
91968
91969                 if (id) {
91970                     q.background = id;
91971                 } else {
91972                     delete q.background;
91973                 }
91974
91975                 if (o) {
91976                     q.overlays = o;
91977                 } else {
91978                     delete q.overlays;
91979                 }
91980
91981                 if (Math.abs(x) > epsilon || Math.abs(y) > epsilon) {
91982                     q.offset = x + ',' + y;
91983                 } else {
91984                     delete q.offset;
91985                 }
91986
91987                 if (!window.mocha) {
91988                     window.location.replace('#' + utilQsString(q, true));
91989                 }
91990
91991                 var imageryUsed = [];
91992                 var photoOverlaysUsed = [];
91993
91994                 var current = b.imageryUsed();
91995                 if (current && _isValid) {
91996                     imageryUsed.push(current);
91997                 }
91998
91999                 _overlayLayers
92000                     .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
92001                     .forEach(function (d) { imageryUsed.push(d.source().imageryUsed()); });
92002
92003                 var data = context.layers().layer('data');
92004                 if (data && data.enabled() && data.hasData()) {
92005                     imageryUsed.push(data.getSrc());
92006                 }
92007
92008                 var photoOverlayLayers = {
92009                     streetside: 'Bing Streetside',
92010                     mapillary: 'Mapillary Images',
92011                     'mapillary-map-features': 'Mapillary Map Features',
92012                     'mapillary-signs': 'Mapillary Signs',
92013                     openstreetcam: 'OpenStreetCam Images'
92014                 };
92015
92016                 for (var layerID in photoOverlayLayers) {
92017                     var layer = context.layers().layer(layerID);
92018                     if (layer && layer.enabled()) {
92019                         photoOverlaysUsed.push(layerID);
92020                         imageryUsed.push(photoOverlayLayers[layerID]);
92021                     }
92022                 }
92023
92024                 context.history().photoOverlaysUsed(photoOverlaysUsed);
92025                 context.history().imageryUsed(imageryUsed);
92026             };
92027
92028
92029             background.sources = function(extent, zoom, alwaysIncludeSelected) {
92030                 if (!data.imagery || !data.imagery.query) { return []; }   // called before init()?
92031
92032                 var matchIDs = {};
92033                 var matchImagery = data.imagery.query.bbox(extent.rectangle(), true) || [];
92034                 matchImagery.forEach(function(d) { matchIDs[d.id] = true; });
92035
92036                 var currentSource = baseLayer.source();
92037
92038                 return _backgroundSources.filter(function(source) {
92039                     // optionally always include the selected source
92040                     if (alwaysIncludeSelected && currentSource === source) { return true; }
92041
92042                     // always show sources with worldwide coverage
92043                     if (!source.polygon) { return true; }
92044
92045                     // optionally don't include non-worldwide sources at low zooms
92046                     if (zoom && zoom < 6) { return false; }
92047
92048                     // don't include sources outside the extent
92049                     return matchIDs[source.id];
92050                 });
92051             };
92052
92053
92054             background.dimensions = function(d) {
92055                 if (!d) { return; }
92056                 baseLayer.dimensions(d);
92057
92058                 _overlayLayers.forEach(function(layer) {
92059                     layer.dimensions(d);
92060                 });
92061             };
92062
92063
92064             background.baseLayerSource = function(d) {
92065                 if (!arguments.length) { return baseLayer.source(); }
92066
92067                 // test source against OSM imagery blacklists..
92068                 var osm = context.connection();
92069                 if (!osm) { return background; }
92070
92071                 var blacklists = context.connection().imageryBlacklists();
92072                 var template = d.template();
92073                 var fail = false;
92074                 var tested = 0;
92075                 var regex;
92076
92077                 for (var i = 0; i < blacklists.length; i++) {
92078                     try {
92079                         regex = new RegExp(blacklists[i]);
92080                         fail = regex.test(template);
92081                         tested++;
92082                         if (fail) { break; }
92083                     } catch (e) {
92084                         /* noop */
92085                     }
92086                 }
92087
92088                 // ensure at least one test was run.
92089                 if (!tested) {
92090                     regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
92091                     fail = regex.test(template);
92092                 }
92093
92094                 baseLayer.source(!fail ? d : background.findSource('none'));
92095                 dispatch$1.call('change');
92096                 background.updateImagery();
92097                 return background;
92098             };
92099
92100
92101             background.findSource = function(id) {
92102                 return _backgroundSources.find(function(d) {
92103                     return d.id && d.id === id;
92104                 });
92105             };
92106
92107
92108             background.bing = function() {
92109                 background.baseLayerSource(background.findSource('Bing'));
92110             };
92111
92112
92113             background.showsLayer = function(d) {
92114                 var baseSource = baseLayer.source();
92115                 if (!d || !baseSource) { return false; }
92116                 return d.id === baseSource.id ||
92117                     _overlayLayers.some(function(layer) { return d.id === layer.source().id; });
92118             };
92119
92120
92121             background.overlayLayerSources = function() {
92122                 return _overlayLayers.map(function (l) { return l.source(); });
92123             };
92124
92125
92126             background.toggleOverlayLayer = function(d) {
92127                 var layer;
92128                 for (var i = 0; i < _overlayLayers.length; i++) {
92129                     layer = _overlayLayers[i];
92130                     if (layer.source() === d) {
92131                         _overlayLayers.splice(i, 1);
92132                         dispatch$1.call('change');
92133                         background.updateImagery();
92134                         return;
92135                     }
92136                 }
92137
92138                 layer = rendererTileLayer(context)
92139                     .source(d)
92140                     .projection(context.projection)
92141                     .dimensions(baseLayer.dimensions()
92142                 );
92143
92144                 _overlayLayers.push(layer);
92145                 dispatch$1.call('change');
92146                 background.updateImagery();
92147             };
92148
92149
92150             background.nudge = function(d, zoom) {
92151                 baseLayer.source().nudge(d, zoom);
92152                 dispatch$1.call('change');
92153                 background.updateImagery();
92154                 return background;
92155             };
92156
92157
92158             background.offset = function(d) {
92159                 if (!arguments.length) { return baseLayer.source().offset(); }
92160                 baseLayer.source().offset(d);
92161                 dispatch$1.call('change');
92162                 background.updateImagery();
92163                 return background;
92164             };
92165
92166
92167             background.brightness = function(d) {
92168                 if (!arguments.length) { return _brightness; }
92169                 _brightness = d;
92170                 if (context.mode()) { dispatch$1.call('change'); }
92171                 return background;
92172             };
92173
92174
92175             background.contrast = function(d) {
92176                 if (!arguments.length) { return _contrast; }
92177                 _contrast = d;
92178                 if (context.mode()) { dispatch$1.call('change'); }
92179                 return background;
92180             };
92181
92182
92183             background.saturation = function(d) {
92184                 if (!arguments.length) { return _saturation; }
92185                 _saturation = d;
92186                 if (context.mode()) { dispatch$1.call('change'); }
92187                 return background;
92188             };
92189
92190
92191             background.sharpness = function(d) {
92192                 if (!arguments.length) { return _sharpness; }
92193                 _sharpness = d;
92194                 if (context.mode()) { dispatch$1.call('change'); }
92195                 return background;
92196             };
92197
92198
92199             background.init = function() {
92200                 function parseMap(qmap) {
92201                     if (!qmap) { return false; }
92202                     var args = qmap.split('/').map(Number);
92203                     if (args.length < 3 || args.some(isNaN)) { return false; }
92204                     return geoExtent([args[2], args[1]]);
92205                 }
92206
92207                 var q = utilStringQs(window.location.hash.substring(1));
92208                 var requested = q.background || q.layer;
92209                 var extent = parseMap(q.map);
92210                 var first;
92211                 var best;
92212
92213
92214                 data.imagery = data.imagery || [];
92215                 data.imagery.features = {};
92216
92217                 // build efficient index and querying for data.imagery
92218                 var features = data.imagery.map(function(source) {
92219                     if (!source.polygon) { return null; }
92220
92221                     // Add an extra array nest to each element in `source.polygon`
92222                     // so the rings are not treated as a bunch of holes:
92223                     // what we have: [ [[outer],[hole],[hole]] ]
92224                     // what we want: [ [[outer]],[[outer]],[[outer]] ]
92225                     var rings = source.polygon.map(function(ring) { return [ring]; });
92226
92227                     var feature = {
92228                         type: 'Feature',
92229                         properties: { id: source.id },
92230                         geometry: { type: 'MultiPolygon', coordinates: rings }
92231                     };
92232
92233                     data.imagery.features[source.id] = feature;
92234                     return feature;
92235
92236                 }).filter(Boolean);
92237
92238                 data.imagery.query = whichPolygon_1({
92239                     type: 'FeatureCollection',
92240                     features: features
92241                 });
92242
92243
92244                 // Add all the available imagery sources
92245                 _backgroundSources = data.imagery.map(function(source) {
92246                     if (source.type === 'bing') {
92247                         return rendererBackgroundSource.Bing(source, dispatch$1);
92248                     } else if (/^EsriWorldImagery/.test(source.id)) {
92249                         return rendererBackgroundSource.Esri(source);
92250                     } else {
92251                         return rendererBackgroundSource(source);
92252                     }
92253                 });
92254
92255                 first = _backgroundSources.length && _backgroundSources[0];
92256
92257                 // Add 'None'
92258                 _backgroundSources.unshift(rendererBackgroundSource.None());
92259
92260                 // Add 'Custom'
92261                 var template = context.storage('background-custom-template') || '';
92262                 var custom = rendererBackgroundSource.Custom(template);
92263                 _backgroundSources.unshift(custom);
92264
92265
92266                 // Decide which background layer to display
92267                 if (!requested && extent) {
92268                     best = this.sources(extent).find(function(s) { return s.best(); });
92269                 }
92270                 if (requested && requested.indexOf('custom:') === 0) {
92271                     template = requested.replace(/^custom:/, '');
92272                     background.baseLayerSource(custom.template(template));
92273                     context.storage('background-custom-template', template);
92274                 } else {
92275                     background.baseLayerSource(
92276                         background.findSource(requested) ||
92277                         best ||
92278                         background.findSource(context.storage('background-last-used')) ||
92279                         background.findSource('Bing') ||
92280                         first ||
92281                         background.findSource('none')
92282                     );
92283                 }
92284
92285                 var locator = _backgroundSources.find(function(d) {
92286                     return d.overlay && d.default;
92287                 });
92288
92289                 if (locator) {
92290                     background.toggleOverlayLayer(locator);
92291                 }
92292
92293                 var overlays = (q.overlays || '').split(',');
92294                 overlays.forEach(function(overlay) {
92295                     overlay = background.findSource(overlay);
92296                     if (overlay) {
92297                         background.toggleOverlayLayer(overlay);
92298                     }
92299                 });
92300
92301                 if (q.gpx) {
92302                     var gpx = context.layers().layer('data');
92303                     if (gpx) {
92304                         gpx.url(q.gpx, '.gpx');
92305                     }
92306                 }
92307
92308                 if (q.offset) {
92309                     var offset = q.offset.replace(/;/g, ',').split(',').map(function(n) {
92310                         return !isNaN(n) && n;
92311                     });
92312
92313                     if (offset.length === 2) {
92314                         background.offset(geoMetersToOffset(offset));
92315                     }
92316                 }
92317             };
92318
92319
92320             return utilRebind(background, dispatch$1, 'on');
92321         }
92322
92323         function rendererFeatures(context) {
92324             var dispatch$1 = dispatch('change', 'redraw');
92325             var features = utilRebind({}, dispatch$1, 'on');
92326             var _deferred = new Set();
92327
92328             var traffic_roads = {
92329                 'motorway': true,
92330                 'motorway_link': true,
92331                 'trunk': true,
92332                 'trunk_link': true,
92333                 'primary': true,
92334                 'primary_link': true,
92335                 'secondary': true,
92336                 'secondary_link': true,
92337                 'tertiary': true,
92338                 'tertiary_link': true,
92339                 'residential': true,
92340                 'unclassified': true,
92341                 'living_street': true
92342             };
92343
92344             var service_roads = {
92345                 'service': true,
92346                 'road': true,
92347                 'track': true
92348             };
92349
92350             var paths = {
92351                 'path': true,
92352                 'footway': true,
92353                 'cycleway': true,
92354                 'bridleway': true,
92355                 'steps': true,
92356                 'pedestrian': true,
92357                 'corridor': true
92358             };
92359
92360             var past_futures = {
92361                 'proposed': true,
92362                 'construction': true,
92363                 'abandoned': true,
92364                 'dismantled': true,
92365                 'disused': true,
92366                 'razed': true,
92367                 'demolished': true,
92368                 'obliterated': true
92369             };
92370
92371             var _cullFactor = 1;
92372             var _cache = {};
92373             var _rules = {};
92374             var _stats = {};
92375             var _keys = [];
92376             var _hidden = [];
92377             var _forceVisible = {};
92378
92379
92380             function update() {
92381                 if (!window.mocha) {
92382                     var q = utilStringQs(window.location.hash.substring(1));
92383                     var disabled = features.disabled();
92384                     if (disabled.length) {
92385                         q.disable_features = disabled.join(',');
92386                     } else {
92387                         delete q.disable_features;
92388                     }
92389                     window.location.replace('#' + utilQsString(q, true));
92390                     context.storage('disabled-features', disabled.join(','));
92391                 }
92392                 _hidden = features.hidden();
92393                 dispatch$1.call('change');
92394                 dispatch$1.call('redraw');
92395             }
92396
92397
92398             function defineRule(k, filter, max) {
92399                 var isEnabled = true;
92400
92401                 _keys.push(k);
92402                 _rules[k] = {
92403                     filter: filter,
92404                     enabled: isEnabled,   // whether the user wants it enabled..
92405                     count: 0,
92406                     currentMax: (max || Infinity),
92407                     defaultMax: (max || Infinity),
92408                     enable: function() { this.enabled = true; this.currentMax = this.defaultMax; },
92409                     disable: function() { this.enabled = false; this.currentMax = 0; },
92410                     hidden: function() {
92411                         return !context.editableDataEnabled() ||
92412                             (this.count === 0 && !this.enabled) ||
92413                             this.count > this.currentMax * _cullFactor;
92414                     },
92415                     autoHidden: function() { return this.hidden() && this.currentMax > 0; }
92416                 };
92417             }
92418
92419
92420             defineRule('points', function isPoint(tags, geometry) {
92421                 return geometry === 'point';
92422             }, 200);
92423
92424             defineRule('traffic_roads', function isTrafficRoad(tags) {
92425                 return traffic_roads[tags.highway];
92426             });
92427
92428             defineRule('service_roads', function isServiceRoad(tags) {
92429                 return service_roads[tags.highway];
92430             });
92431
92432             defineRule('paths', function isPath(tags) {
92433                 return paths[tags.highway];
92434             });
92435
92436             defineRule('buildings', function isBuilding(tags) {
92437                 return (
92438                     (!!tags.building && tags.building !== 'no') ||
92439                     tags.parking === 'multi-storey' ||
92440                     tags.parking === 'sheds' ||
92441                     tags.parking === 'carports' ||
92442                     tags.parking === 'garage_boxes'
92443                 );
92444             }, 250);
92445
92446             defineRule('building_parts', function isBuildingPart(tags) {
92447                 return tags['building:part'];
92448             });
92449
92450             defineRule('indoor', function isIndoor(tags) {
92451                 return tags.indoor;
92452             });
92453
92454             defineRule('landuse', function isLanduse(tags, geometry) {
92455                 return geometry === 'area' &&
92456                     !_rules.buildings.filter(tags) &&
92457                     !_rules.building_parts.filter(tags) &&
92458                     !_rules.indoor.filter(tags) &&
92459                     !_rules.water.filter(tags) &&
92460                     !_rules.pistes.filter(tags);
92461             });
92462
92463             defineRule('boundaries', function isBoundary(tags) {
92464                 return (
92465                     !!tags.boundary
92466                 ) && !(
92467                     traffic_roads[tags.highway] ||
92468                     service_roads[tags.highway] ||
92469                     paths[tags.highway] ||
92470                     tags.waterway ||
92471                     tags.railway ||
92472                     tags.landuse ||
92473                     tags.natural ||
92474                     tags.building ||
92475                     tags.power
92476                 );
92477             });
92478
92479             defineRule('water', function isWater(tags) {
92480                 return (
92481                     !!tags.waterway ||
92482                     tags.natural === 'water' ||
92483                     tags.natural === 'coastline' ||
92484                     tags.natural === 'bay' ||
92485                     tags.landuse === 'pond' ||
92486                     tags.landuse === 'basin' ||
92487                     tags.landuse === 'reservoir' ||
92488                     tags.landuse === 'salt_pond'
92489                 );
92490             });
92491
92492             defineRule('rail', function isRail(tags) {
92493                 return (
92494                     !!tags.railway ||
92495                     tags.landuse === 'railway'
92496                 ) && !(
92497                     traffic_roads[tags.highway] ||
92498                     service_roads[tags.highway] ||
92499                     paths[tags.highway]
92500                 );
92501             });
92502
92503             defineRule('pistes', function isPiste(tags) {
92504                 return tags['piste:type'];
92505             });
92506
92507             defineRule('aerialways', function isPiste(tags) {
92508                 return tags.aerialway &&
92509                     tags.aerialway !== 'yes' &&
92510                     tags.aerialway !== 'station';
92511             });
92512
92513             defineRule('power', function isPower(tags) {
92514                 return !!tags.power;
92515             });
92516
92517             // contains a past/future tag, but not in active use as a road/path/cycleway/etc..
92518             defineRule('past_future', function isPastFuture(tags) {
92519                 if (
92520                     traffic_roads[tags.highway] ||
92521                     service_roads[tags.highway] ||
92522                     paths[tags.highway]
92523                 ) { return false; }
92524
92525                 var strings = Object.keys(tags);
92526
92527                 for (var i = 0; i < strings.length; i++) {
92528                     var s = strings[i];
92529                     if (past_futures[s] || past_futures[tags[s]]) { return true; }
92530                 }
92531                 return false;
92532             });
92533
92534             // Lines or areas that don't match another feature filter.
92535             // IMPORTANT: The 'others' feature must be the last one defined,
92536             //   so that code in getMatches can skip this test if `hasMatch = true`
92537             defineRule('others', function isOther(tags, geometry) {
92538                 return (geometry === 'line' || geometry === 'area');
92539             });
92540
92541
92542
92543             features.features = function() {
92544                 return _rules;
92545             };
92546
92547
92548             features.keys = function() {
92549                 return _keys;
92550             };
92551
92552
92553             features.enabled = function(k) {
92554                 if (!arguments.length) {
92555                     return _keys.filter(function(k) { return _rules[k].enabled; });
92556                 }
92557                 return _rules[k] && _rules[k].enabled;
92558             };
92559
92560
92561             features.disabled = function(k) {
92562                 if (!arguments.length) {
92563                     return _keys.filter(function(k) { return !_rules[k].enabled; });
92564                 }
92565                 return _rules[k] && !_rules[k].enabled;
92566             };
92567
92568
92569             features.hidden = function(k) {
92570                 if (!arguments.length) {
92571                     return _keys.filter(function(k) { return _rules[k].hidden(); });
92572                 }
92573                 return _rules[k] && _rules[k].hidden();
92574             };
92575
92576
92577             features.autoHidden = function(k) {
92578                 if (!arguments.length) {
92579                     return _keys.filter(function(k) { return _rules[k].autoHidden(); });
92580                 }
92581                 return _rules[k] && _rules[k].autoHidden();
92582             };
92583
92584
92585             features.enable = function(k) {
92586                 if (_rules[k] && !_rules[k].enabled) {
92587                     _rules[k].enable();
92588                     update();
92589                 }
92590             };
92591
92592             features.enableAll = function() {
92593                 var didEnable = false;
92594                 for (var k in _rules) {
92595                     if (!_rules[k].enabled) {
92596                         didEnable = true;
92597                         _rules[k].enable();
92598                     }
92599                 }
92600                 if (didEnable) { update(); }
92601             };
92602
92603
92604             features.disable = function(k) {
92605                 if (_rules[k] && _rules[k].enabled) {
92606                     _rules[k].disable();
92607                     update();
92608                 }
92609             };
92610
92611             features.disableAll = function() {
92612                 var didDisable = false;
92613                 for (var k in _rules) {
92614                     if (_rules[k].enabled) {
92615                         didDisable = true;
92616                         _rules[k].disable();
92617                     }
92618                 }
92619                 if (didDisable) { update(); }
92620             };
92621
92622
92623             features.toggle = function(k) {
92624                 if (_rules[k]) {
92625                     (function(f) { return f.enabled ? f.disable() : f.enable(); }(_rules[k]));
92626                     update();
92627                 }
92628             };
92629
92630
92631             features.resetStats = function() {
92632                 for (var i = 0; i < _keys.length; i++) {
92633                     _rules[_keys[i]].count = 0;
92634                 }
92635                 dispatch$1.call('change');
92636             };
92637
92638
92639             features.gatherStats = function(d, resolver, dimensions) {
92640                 var needsRedraw = false;
92641                 var types = utilArrayGroupBy(d, 'type');
92642                 var entities = [].concat(types.relation || [], types.way || [], types.node || []);
92643                 var currHidden, geometry, matches, i, j;
92644
92645                 for (i = 0; i < _keys.length; i++) {
92646                     _rules[_keys[i]].count = 0;
92647                 }
92648
92649                 // adjust the threshold for point/building culling based on viewport size..
92650                 // a _cullFactor of 1 corresponds to a 1000x1000px viewport..
92651                 _cullFactor = dimensions[0] * dimensions[1] / 1000000;
92652
92653                 for (i = 0; i < entities.length; i++) {
92654                     geometry = entities[i].geometry(resolver);
92655                     matches = Object.keys(features.getMatches(entities[i], resolver, geometry));
92656                     for (j = 0; j < matches.length; j++) {
92657                         _rules[matches[j]].count++;
92658                     }
92659                 }
92660
92661                 currHidden = features.hidden();
92662                 if (currHidden !== _hidden) {
92663                     _hidden = currHidden;
92664                     needsRedraw = true;
92665                     dispatch$1.call('change');
92666                 }
92667
92668                 return needsRedraw;
92669             };
92670
92671
92672             features.stats = function() {
92673                 for (var i = 0; i < _keys.length; i++) {
92674                     _stats[_keys[i]] = _rules[_keys[i]].count;
92675                 }
92676
92677                 return _stats;
92678             };
92679
92680
92681             features.clear = function(d) {
92682                 for (var i = 0; i < d.length; i++) {
92683                     features.clearEntity(d[i]);
92684                 }
92685             };
92686
92687
92688             features.clearEntity = function(entity) {
92689                 delete _cache[osmEntity.key(entity)];
92690             };
92691
92692
92693             features.reset = function() {
92694                 Array.from(_deferred).forEach(function(handle) {
92695                     window.cancelIdleCallback(handle);
92696                     _deferred.delete(handle);
92697                 });
92698
92699                 _cache = {};
92700             };
92701
92702             // only certain relations are worth checking
92703             function relationShouldBeChecked(relation) {
92704                 // multipolygon features have `area` geometry and aren't checked here
92705                 return relation.tags.type === 'boundary';
92706             }
92707
92708             features.getMatches = function(entity, resolver, geometry) {
92709                 if (geometry === 'vertex' ||
92710                     (geometry === 'relation' && !relationShouldBeChecked(entity))) { return {}; }
92711
92712                 var ent = osmEntity.key(entity);
92713                 if (!_cache[ent]) {
92714                     _cache[ent] = {};
92715                 }
92716
92717                 if (!_cache[ent].matches) {
92718                     var matches = {};
92719                     var hasMatch = false;
92720
92721                     for (var i = 0; i < _keys.length; i++) {
92722                         if (_keys[i] === 'others') {
92723                             if (hasMatch) { continue; }
92724
92725                             // If an entity...
92726                             //   1. is a way that hasn't matched other 'interesting' feature rules,
92727                             if (entity.type === 'way') {
92728                                 var parents = features.getParents(entity, resolver, geometry);
92729
92730                                 //   2a. belongs only to a single multipolygon relation
92731                                 if ((parents.length === 1 && parents[0].isMultipolygon()) ||
92732                                     // 2b. or belongs only to boundary relations
92733                                     (parents.length > 0 && parents.every(function(parent) { return parent.tags.type === 'boundary'; }))) {
92734
92735                                     // ...then match whatever feature rules the parent relation has matched.
92736                                     // see #2548, #2887
92737                                     //
92738                                     // IMPORTANT:
92739                                     // For this to work, getMatches must be called on relations before ways.
92740                                     //
92741                                     var pkey = osmEntity.key(parents[0]);
92742                                     if (_cache[pkey] && _cache[pkey].matches) {
92743                                         matches = Object.assign({}, _cache[pkey].matches);  // shallow copy
92744                                         continue;
92745                                     }
92746                                 }
92747                             }
92748                         }
92749
92750                         if (_rules[_keys[i]].filter(entity.tags, geometry)) {
92751                             matches[_keys[i]] = hasMatch = true;
92752                         }
92753                     }
92754                     _cache[ent].matches = matches;
92755                 }
92756
92757                 return _cache[ent].matches;
92758             };
92759
92760
92761             features.getParents = function(entity, resolver, geometry) {
92762                 if (geometry === 'point') { return []; }
92763
92764                 var ent = osmEntity.key(entity);
92765                 if (!_cache[ent]) {
92766                     _cache[ent] = {};
92767                 }
92768
92769                 if (!_cache[ent].parents) {
92770                     var parents = [];
92771                     if (geometry === 'vertex') {
92772                         parents = resolver.parentWays(entity);
92773                     } else {   // 'line', 'area', 'relation'
92774                         parents = resolver.parentRelations(entity);
92775                     }
92776                     _cache[ent].parents = parents;
92777                 }
92778                 return _cache[ent].parents;
92779             };
92780
92781
92782             features.isHiddenPreset = function(preset, geometry) {
92783                 if (!_hidden.length) { return false; }
92784                 if (!preset.tags) { return false; }
92785
92786                 var test = preset.setTags({}, geometry);
92787                 for (var key in _rules) {
92788                     if (_rules[key].filter(test, geometry)) {
92789                         if (_hidden.indexOf(key) !== -1) {
92790                             return key;
92791                         }
92792                         return false;
92793                     }
92794                 }
92795                 return false;
92796             };
92797
92798
92799             features.isHiddenFeature = function(entity, resolver, geometry) {
92800                 if (!_hidden.length) { return false; }
92801                 if (!entity.version) { return false; }
92802                 if (_forceVisible[entity.id]) { return false; }
92803
92804                 var matches = Object.keys(features.getMatches(entity, resolver, geometry));
92805                 return matches.length && matches.every(function(k) { return features.hidden(k); });
92806             };
92807
92808
92809             features.isHiddenChild = function(entity, resolver, geometry) {
92810                 if (!_hidden.length) { return false; }
92811                 if (!entity.version || geometry === 'point') { return false; }
92812                 if (_forceVisible[entity.id]) { return false; }
92813
92814                 var parents = features.getParents(entity, resolver, geometry);
92815                 if (!parents.length) { return false; }
92816
92817                 for (var i = 0; i < parents.length; i++) {
92818                     if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) {
92819                         return false;
92820                     }
92821                 }
92822                 return true;
92823             };
92824
92825
92826             features.hasHiddenConnections = function(entity, resolver) {
92827                 if (!_hidden.length) { return false; }
92828
92829                 var childNodes, connections;
92830                 if (entity.type === 'midpoint') {
92831                     childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])];
92832                     connections = [];
92833                 } else {
92834                     childNodes = entity.nodes ? resolver.childNodes(entity) : [];
92835                     connections = features.getParents(entity, resolver, entity.geometry(resolver));
92836                 }
92837
92838                 // gather ways connected to child nodes..
92839                 connections = childNodes.reduce(function(result, e) {
92840                     return resolver.isShared(e) ? utilArrayUnion(result, resolver.parentWays(e)) : result;
92841                 }, connections);
92842
92843                 return connections.some(function(e) {
92844                     return features.isHidden(e, resolver, e.geometry(resolver));
92845                 });
92846             };
92847
92848
92849             features.isHidden = function(entity, resolver, geometry) {
92850                 if (!_hidden.length) { return false; }
92851                 if (!entity.version) { return false; }
92852
92853                 var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature);
92854                 return fn(entity, resolver, geometry);
92855             };
92856
92857
92858             features.filter = function(d, resolver) {
92859                 if (!_hidden.length) { return d; }
92860
92861                 var result = [];
92862                 for (var i = 0; i < d.length; i++) {
92863                     var entity = d[i];
92864                     if (!features.isHidden(entity, resolver, entity.geometry(resolver))) {
92865                         result.push(entity);
92866                     }
92867                 }
92868                 return result;
92869             };
92870
92871
92872             features.forceVisible = function(entityIDs) {
92873                 if (!arguments.length) { return Object.keys(_forceVisible); }
92874
92875                 _forceVisible = {};
92876                 for (var i = 0; i < entityIDs.length; i++) {
92877                     _forceVisible[entityIDs[i]] = true;
92878                     var entity = context.hasEntity(entityIDs[i]);
92879                     if (entity && entity.type === 'relation') {
92880                         // also show relation members (one level deep)
92881                         for (var j in entity.members) {
92882                             _forceVisible[entity.members[j].id] = true;
92883                         }
92884                     }
92885                 }
92886                 return features;
92887             };
92888
92889
92890             features.init = function() {
92891                 var storage = context.storage('disabled-features');
92892                 if (storage) {
92893                     var storageDisabled = storage.replace(/;/g, ',').split(',');
92894                     storageDisabled.forEach(features.disable);
92895                 }
92896
92897                 var q = utilStringQs(window.location.hash.substring(1));
92898                 if (q.disable_features) {
92899                     var hashDisabled = q.disable_features.replace(/;/g, ',').split(',');
92900                     hashDisabled.forEach(features.disable);
92901                 }
92902             };
92903
92904
92905             // warm up the feature matching cache upon merging fetched data
92906             context.history().on('merge.features', function(newEntities) {
92907                 if (!newEntities) { return; }
92908                 var handle = window.requestIdleCallback(function() {
92909                     var graph = context.graph();
92910                     var types = utilArrayGroupBy(newEntities, 'type');
92911                     // ensure that getMatches is called on relations before ways
92912                     var entities = [].concat(types.relation || [], types.way || [], types.node || []);
92913                     for (var i = 0; i < entities.length; i++) {
92914                         var geometry = entities[i].geometry(graph);
92915                         features.getMatches(entities[i], graph, geometry);
92916                     }
92917                 });
92918                 _deferred.add(handle);
92919             });
92920
92921
92922             return features;
92923         }
92924
92925         // Touch targets control which other vertices we can drag a vertex onto.
92926         //
92927         // - the activeID - nope
92928         // - 1 away (adjacent) to the activeID - yes (vertices will be merged)
92929         // - 2 away from the activeID - nope (would create a self intersecting segment)
92930         // - all others on a linear way - yes
92931         // - all others on a closed way - nope (would create a self intersecting polygon)
92932         //
92933         // returns
92934         // 0 = active vertex - no touch/connect
92935         // 1 = passive vertex - yes touch/connect
92936         // 2 = adjacent vertex - yes but pay attention segmenting a line here
92937         //
92938         function svgPassiveVertex(node, graph, activeID) {
92939             if (!activeID) { return 1; }
92940             if (activeID === node.id) { return 0; }
92941
92942             var parents = graph.parentWays(node);
92943
92944             for (var i = 0; i < parents.length; i++) {
92945                 var nodes = parents[i].nodes;
92946                 var isClosed = parents[i].isClosed();
92947                 for (var j = 0; j < nodes.length; j++) {   // find this vertex, look nearby
92948                     if (nodes[j] === node.id) {
92949                         var ix1 = j - 2;
92950                         var ix2 = j - 1;
92951                         var ix3 = j + 1;
92952                         var ix4 = j + 2;
92953
92954                         if (isClosed) {  // wraparound if needed
92955                             var max = nodes.length - 1;
92956                             if (ix1 < 0)   { ix1 = max + ix1; }
92957                             if (ix2 < 0)   { ix2 = max + ix2; }
92958                             if (ix3 > max) { ix3 = ix3 - max; }
92959                             if (ix4 > max) { ix4 = ix4 - max; }
92960                         }
92961
92962                         if (nodes[ix1] === activeID) { return 0; }        // no - prevent self intersect
92963                         else if (nodes[ix2] === activeID) { return 2; }   // ok - adjacent
92964                         else if (nodes[ix3] === activeID) { return 2; }   // ok - adjacent
92965                         else if (nodes[ix4] === activeID) { return 0; }   // no - prevent self intersect
92966                         else if (isClosed && nodes.indexOf(activeID) !== -1) { return 0; }  // no - prevent self intersect
92967                     }
92968                 }
92969             }
92970
92971             return 1;   // ok
92972         }
92973
92974
92975         function svgMarkerSegments(projection, graph, dt,
92976                                           shouldReverse,
92977                                           bothDirections) {
92978             return function(entity) {
92979                 var i = 0;
92980                 var offset = dt;
92981                 var segments = [];
92982                 var clip = d3_geoIdentity().clipExtent(projection.clipExtent()).stream;
92983                 var coordinates = graph.childNodes(entity).map(function(n) { return n.loc; });
92984                 var a, b;
92985
92986                 if (shouldReverse(entity)) {
92987                     coordinates.reverse();
92988                 }
92989
92990                 d3_geoStream({
92991                     type: 'LineString',
92992                     coordinates: coordinates
92993                 }, projection.stream(clip({
92994                     lineStart: function() {},
92995                     lineEnd: function() { a = null; },
92996                     point: function(x, y) {
92997                         b = [x, y];
92998
92999                         if (a) {
93000                             var span = geoVecLength(a, b) - offset;
93001
93002                             if (span >= 0) {
93003                                 var heading = geoVecAngle(a, b);
93004                                 var dx = dt * Math.cos(heading);
93005                                 var dy = dt * Math.sin(heading);
93006                                 var p = [
93007                                     a[0] + offset * Math.cos(heading),
93008                                     a[1] + offset * Math.sin(heading)
93009                                 ];
93010
93011                                 // gather coordinates
93012                                 var coord = [a, p];
93013                                 for (span -= dt; span >= 0; span -= dt) {
93014                                     p = geoVecAdd(p, [dx, dy]);
93015                                     coord.push(p);
93016                                 }
93017                                 coord.push(b);
93018
93019                                 // generate svg paths
93020                                 var segment = '';
93021                                 var j;
93022
93023                                 for (j = 0; j < coord.length; j++) {
93024                                     segment += (j === 0 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
93025                                 }
93026                                 segments.push({ id: entity.id, index: i++, d: segment });
93027
93028                                 if (bothDirections(entity)) {
93029                                     segment = '';
93030                                     for (j = coord.length - 1; j >= 0; j--) {
93031                                         segment += (j === coord.length - 1 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
93032                                     }
93033                                     segments.push({ id: entity.id, index: i++, d: segment });
93034                                 }
93035                             }
93036
93037                             offset = -span;
93038                         }
93039
93040                         a = b;
93041                     }
93042                 })));
93043
93044                 return segments;
93045             };
93046         }
93047
93048
93049         function svgPath(projection, graph, isArea) {
93050
93051             // Explanation of magic numbers:
93052             // "padding" here allows space for strokes to extend beyond the viewport,
93053             // so that the stroke isn't drawn along the edge of the viewport when
93054             // the shape is clipped.
93055             //
93056             // When drawing lines, pad viewport by 5px.
93057             // When drawing areas, pad viewport by 65px in each direction to allow
93058             // for 60px area fill stroke (see ".fill-partial path.fill" css rule)
93059
93060             var cache = {};
93061             var padding = isArea ? 65 : 5;
93062             var viewport = projection.clipExtent();
93063             var paddedExtent = [
93064                 [viewport[0][0] - padding, viewport[0][1] - padding],
93065                 [viewport[1][0] + padding, viewport[1][1] + padding]
93066             ];
93067             var clip = d3_geoIdentity().clipExtent(paddedExtent).stream;
93068             var project = projection.stream;
93069             var path = d3_geoPath()
93070                 .projection({stream: function(output) { return project(clip(output)); }});
93071
93072             var svgpath = function(entity) {
93073                 if (entity.id in cache) {
93074                     return cache[entity.id];
93075                 } else {
93076                     return cache[entity.id] = path(entity.asGeoJSON(graph));
93077                 }
93078             };
93079
93080             svgpath.geojson = function(d) {
93081                 if (d.__featurehash__ !== undefined) {
93082                     if (d.__featurehash__ in cache) {
93083                         return cache[d.__featurehash__];
93084                     } else {
93085                         return cache[d.__featurehash__] = path(d);
93086                     }
93087                 } else {
93088                     return path(d);
93089                 }
93090             };
93091
93092             return svgpath;
93093         }
93094
93095
93096         function svgPointTransform(projection) {
93097             var svgpoint = function(entity) {
93098                 // http://jsperf.com/short-array-join
93099                 var pt = projection(entity.loc);
93100                 return 'translate(' + pt[0] + ',' + pt[1] + ')';
93101             };
93102
93103             svgpoint.geojson = function(d) {
93104                 return svgpoint(d.properties.entity);
93105             };
93106
93107             return svgpoint;
93108         }
93109
93110
93111         function svgRelationMemberTags(graph) {
93112             return function(entity) {
93113                 var tags = entity.tags;
93114                 var shouldCopyMultipolygonTags = !entity.hasInterestingTags();
93115                 graph.parentRelations(entity).forEach(function(relation) {
93116                     var type = relation.tags.type;
93117                     if ((type === 'multipolygon' && shouldCopyMultipolygonTags) || type === 'boundary') {
93118                         tags = Object.assign({}, relation.tags, tags);
93119                     }
93120                 });
93121                 return tags;
93122             };
93123         }
93124
93125
93126         function svgSegmentWay(way, graph, activeID) {
93127             // When there is no activeID, we can memoize this expensive computation
93128             if (activeID === undefined) {
93129                 return graph.transient(way, 'waySegments', getWaySegments);
93130             } else {
93131                 return getWaySegments();
93132             }
93133
93134             function getWaySegments() {
93135                 var isActiveWay = (way.nodes.indexOf(activeID) !== -1);
93136                 var features = { passive: [], active: [] };
93137                 var start = {};
93138                 var end = {};
93139                 var node, type;
93140
93141                 for (var i = 0; i < way.nodes.length; i++) {
93142                     node = graph.entity(way.nodes[i]);
93143                     type = svgPassiveVertex(node, graph, activeID);
93144                     end = { node: node, type: type };
93145
93146                     if (start.type !== undefined) {
93147                         if (start.node.id === activeID || end.node.id === activeID) ; else if (isActiveWay && (start.type === 2 || end.type === 2)) {   // one adjacent vertex
93148                             pushActive(start, end, i);
93149                         } else if (start.type === 0 && end.type === 0) {   // both active vertices
93150                             pushActive(start, end, i);
93151                         } else {
93152                             pushPassive(start, end, i);
93153                         }
93154                     }
93155
93156                     start = end;
93157                 }
93158
93159                 return features;
93160
93161                 function pushActive(start, end, index) {
93162                     features.active.push({
93163                         type: 'Feature',
93164                         id: way.id + '-' + index + '-nope',
93165                         properties: {
93166                             nope: true,
93167                             target: true,
93168                             entity: way,
93169                             nodes: [start.node, end.node],
93170                             index: index
93171                         },
93172                         geometry: {
93173                             type: 'LineString',
93174                             coordinates: [start.node.loc, end.node.loc]
93175                         }
93176                     });
93177                 }
93178
93179                 function pushPassive(start, end, index) {
93180                     features.passive.push({
93181                         type: 'Feature',
93182                         id: way.id + '-' + index,
93183                         properties: {
93184                             target: true,
93185                             entity: way,
93186                             nodes: [start.node, end.node],
93187                             index: index
93188                         },
93189                         geometry: {
93190                             type: 'LineString',
93191                             coordinates: [start.node.loc, end.node.loc]
93192                         }
93193                     });
93194                 }
93195             }
93196         }
93197
93198         function svgTagClasses() {
93199             var primaries = [
93200                 'building', 'highway', 'railway', 'waterway', 'aeroway', 'aerialway',
93201                 'piste:type', 'boundary', 'power', 'amenity', 'natural', 'landuse',
93202                 'leisure', 'military', 'place', 'man_made', 'route', 'attraction',
93203                 'building:part', 'indoor'
93204             ];
93205             var statuses = [
93206                 'proposed', 'construction', 'disused', 'abandoned', 'dismantled',
93207                 'razed', 'demolished', 'obliterated', 'intermittent'
93208             ];
93209             var secondaries = [
93210                 'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier',
93211                 'surface', 'tracktype', 'footway', 'crossing', 'service', 'sport',
93212                 'public_transport', 'location', 'parking', 'golf', 'type', 'leisure',
93213                 'man_made', 'indoor'
93214             ];
93215             var _tags = function(entity) { return entity.tags; };
93216
93217
93218             var tagClasses = function(selection) {
93219                 selection.each(function tagClassesEach(entity) {
93220                     var value = this.className;
93221
93222                     if (value.baseVal !== undefined) {
93223                         value = value.baseVal;
93224                     }
93225
93226                     var t = _tags(entity);
93227
93228                     var computed = tagClasses.getClassesString(t, value);
93229
93230                     if (computed !== value) {
93231                         d3_select(this).attr('class', computed);
93232                     }
93233                 });
93234             };
93235
93236
93237             tagClasses.getClassesString = function(t, value) {
93238                 var primary, status;
93239                 var i, j, k, v;
93240
93241                 // in some situations we want to render perimeter strokes a certain way
93242                 var overrideGeometry;
93243                 if (/\bstroke\b/.test(value)) {
93244                     if (!!t.barrier && t.barrier !== 'no') {
93245                         overrideGeometry = 'line';
93246                     }
93247                 }
93248
93249                 // preserve base classes (nothing with `tag-`)
93250                 var classes = value.trim().split(/\s+/)
93251                     .filter(function(klass) {
93252                         return klass.length && !/^tag-/.test(klass);
93253                     })
93254                     .map(function(klass) {  // special overrides for some perimeter strokes
93255                         return (klass === 'line' || klass === 'area') ? (overrideGeometry || klass) : klass;
93256                     });
93257
93258                 // pick at most one primary classification tag..
93259                 for (i = 0; i < primaries.length; i++) {
93260                     k = primaries[i];
93261                     v = t[k];
93262                     if (!v || v === 'no') { continue; }
93263
93264                     if (k === 'piste:type') {  // avoid a ':' in the class name
93265                         k = 'piste';
93266                     } else if (k === 'building:part') {  // avoid a ':' in the class name
93267                         k = 'building_part';
93268                     }
93269
93270                     primary = k;
93271                     if (statuses.indexOf(v) !== -1) {   // e.g. `railway=abandoned`
93272                         status = v;
93273                         classes.push('tag-' + k);
93274                     } else {
93275                         classes.push('tag-' + k);
93276                         classes.push('tag-' + k + '-' + v);
93277                     }
93278
93279                     break;
93280                 }
93281
93282                 if (!primary) {
93283                     for (i = 0; i < statuses.length; i++) {
93284                         for (j = 0; j < primaries.length; j++) {
93285                             k = statuses[i] + ':' + primaries[j];  // e.g. `demolished:building=yes`
93286                             v = t[k];
93287                             if (!v || v === 'no') { continue; }
93288
93289                             status = statuses[i];
93290                             break;
93291                         }
93292                     }
93293                 }
93294
93295                 // add at most one status tag, only if relates to primary tag..
93296                 if (!status) {
93297                     for (i = 0; i < statuses.length; i++) {
93298                         k = statuses[i];
93299                         v = t[k];
93300                         if (!v || v === 'no') { continue; }
93301
93302                         if (v === 'yes') {   // e.g. `railway=rail + abandoned=yes`
93303                             status = k;
93304                         }
93305                         else if (primary && primary === v) {  // e.g. `railway=rail + abandoned=railway`
93306                             status = k;
93307                         } else if (!primary && primaries.indexOf(v) !== -1) {  // e.g. `abandoned=railway`
93308                             status = k;
93309                             primary = v;
93310                             classes.push('tag-' + v);
93311                         }  // else ignore e.g.  `highway=path + abandoned=railway`
93312
93313                         if (status) { break; }
93314                     }
93315                 }
93316
93317                 if (status) {
93318                     classes.push('tag-status');
93319                     classes.push('tag-status-' + status);
93320                 }
93321
93322                 // add any secondary tags
93323                 for (i = 0; i < secondaries.length; i++) {
93324                     k = secondaries[i];
93325                     v = t[k];
93326                     if (!v || v === 'no' || k === primary) { continue; }
93327                     classes.push('tag-' + k);
93328                     classes.push('tag-' + k + '-' + v);
93329                 }
93330
93331                 // For highways, look for surface tagging..
93332                 if (primary === 'highway' || primary === 'aeroway') {
93333                     var paved = (t.highway !== 'track');
93334                     for (k in t) {
93335                         v = t[k];
93336                         if (k in osmPavedTags) {
93337                             paved = !!osmPavedTags[k][v];
93338                             break;
93339                         }
93340                     }
93341                     if (!paved) {
93342                         classes.push('tag-unpaved');
93343                     }
93344                 }
93345
93346                 // If this is a wikidata-tagged item, add a class for that..
93347                 if (t.wikidata || t['brand:wikidata']) {
93348                     classes.push('tag-wikidata');
93349                 }
93350
93351                 return classes.join(' ').trim();
93352             };
93353
93354
93355             tagClasses.tags = function(val) {
93356                 if (!arguments.length) { return _tags; }
93357                 _tags = val;
93358                 return tagClasses;
93359             };
93360
93361             return tagClasses;
93362         }
93363
93364         // Patterns only work in Firefox when set directly on element.
93365         // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632)
93366         var patterns = {
93367             // tag - pattern name
93368             // -or-
93369             // tag - value - pattern name
93370             // -or-
93371             // tag - value - rules (optional tag-values, pattern name)
93372             // (matches earlier rules first, so fallback should be last entry)
93373             amenity: {
93374                 grave_yard: 'cemetery',
93375                 fountain: 'water_standing'
93376             },
93377             landuse: {
93378                 cemetery: [
93379                     { religion: 'christian', pattern: 'cemetery_christian' },
93380                     { religion: 'buddhist', pattern: 'cemetery_buddhist' },
93381                     { religion: 'muslim', pattern: 'cemetery_muslim' },
93382                     { religion: 'jewish', pattern: 'cemetery_jewish' },
93383                     { pattern: 'cemetery' }
93384                 ],
93385                 construction: 'construction',
93386                 farmland: 'farmland',
93387                 farmyard: 'farmyard',
93388                 forest: [
93389                     { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
93390                     { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
93391                     { leaf_type: 'leafless', pattern: 'forest_leafless' },
93392                     { pattern: 'forest' } // same as 'leaf_type:mixed'
93393                 ],
93394                 grave_yard: 'cemetery',
93395                 grass: [
93396                     { golf: 'green', pattern: 'golf_green' },
93397                     { pattern: 'grass' } ],
93398                 landfill: 'landfill',
93399                 meadow: 'meadow',
93400                 military: 'construction',
93401                 orchard: 'orchard',
93402                 quarry: 'quarry',
93403                 vineyard: 'vineyard'
93404             },
93405             natural: {
93406                 beach: 'beach',
93407                 grassland: 'grass',
93408                 sand: 'beach',
93409                 scrub: 'scrub',
93410                 water: [
93411                     { water: 'pond', pattern: 'pond' },
93412                     { water: 'reservoir', pattern: 'water_standing' },
93413                     { pattern: 'waves' }
93414                 ],
93415                 wetland: [
93416                     { wetland: 'marsh', pattern: 'wetland_marsh' },
93417                     { wetland: 'swamp', pattern: 'wetland_swamp' },
93418                     { wetland: 'bog', pattern: 'wetland_bog' },
93419                     { wetland: 'reedbed', pattern: 'wetland_reedbed' },
93420                     { pattern: 'wetland' }
93421                 ],
93422                 wood: [
93423                     { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
93424                     { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
93425                     { leaf_type: 'leafless', pattern: 'forest_leafless' },
93426                     { pattern: 'forest' } // same as 'leaf_type:mixed'
93427                 ]
93428             },
93429             traffic_calming: {
93430                 island: [
93431                     { surface: 'grass', pattern: 'grass' } ],
93432                 chicane: [
93433                     { surface: 'grass', pattern: 'grass' } ],
93434                 choker: [
93435                     { surface: 'grass', pattern: 'grass' } ]
93436             }
93437         };
93438
93439         function svgTagPattern(tags) {
93440             // Skip pattern filling if this is a building (buildings don't get patterns applied)
93441             if (tags.building && tags.building !== 'no') {
93442                 return null;
93443             }
93444
93445             for (var tag in patterns) {
93446                 var entityValue = tags[tag];
93447                 if (!entityValue) { continue; }
93448
93449                 if (typeof patterns[tag] === 'string') { // extra short syntax (just tag) - pattern name
93450                     return 'pattern-' + patterns[tag];
93451                 } else {
93452                     var values = patterns[tag];
93453                     for (var value in values) {
93454                         if (entityValue !== value) { continue; }
93455
93456                         var rules = values[value];
93457                         if (typeof rules === 'string') { // short syntax - pattern name
93458                             return 'pattern-' + rules;
93459                         }
93460
93461                         // long syntax - rule array
93462                         for (var ruleKey in rules) {
93463                             var rule = rules[ruleKey];
93464
93465                             var pass = true;
93466                             for (var criterion in rule) {
93467                                 if (criterion !== 'pattern') { // reserved for pattern name
93468                                     // The only rule is a required tag-value pair
93469                                     var v = tags[criterion];
93470                                     if (!v || v !== rule[criterion]) {
93471                                         pass = false;
93472                                         break;
93473                                     }
93474                                 }
93475                             }
93476
93477                             if (pass) {
93478                                 return 'pattern-' + rule.pattern;
93479                             }
93480                         }
93481                     }
93482                 }
93483             }
93484
93485             return null;
93486         }
93487
93488         function svgAreas(projection, context) {
93489
93490
93491             function getPatternStyle(tags) {
93492                 var imageID = svgTagPattern(tags);
93493                 if (imageID) {
93494                     return 'url("#' + imageID + '")';
93495                 }
93496                 return '';
93497             }
93498
93499
93500             function drawTargets(selection, graph, entities, filter) {
93501                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
93502                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
93503                 var getPath = svgPath(projection).geojson;
93504                 var activeID = context.activeID();
93505                 var base = context.history().base();
93506
93507                 // The targets and nopes will be MultiLineString sub-segments of the ways
93508                 var data = { targets: [], nopes: [] };
93509
93510                 entities.forEach(function(way) {
93511                     var features = svgSegmentWay(way, graph, activeID);
93512                     data.targets.push.apply(data.targets, features.passive);
93513                     data.nopes.push.apply(data.nopes, features.active);
93514                 });
93515
93516
93517                 // Targets allow hover and vertex snapping
93518                 var targetData = data.targets.filter(getPath);
93519                 var targets = selection.selectAll('.area.target-allowed')
93520                     .filter(function(d) { return filter(d.properties.entity); })
93521                     .data(targetData, function key(d) { return d.id; });
93522
93523                 // exit
93524                 targets.exit()
93525                     .remove();
93526
93527                 var segmentWasEdited = function(d) {
93528                     var wayID = d.properties.entity.id;
93529                     // if the whole line was edited, don't draw segment changes
93530                     if (!base.entities[wayID] ||
93531                         !fastDeepEqual(graph.entities[wayID].nodes, base.entities[wayID].nodes)) {
93532                         return false;
93533                     }
93534                     return d.properties.nodes.some(function(n) {
93535                         return !base.entities[n.id] ||
93536                                !fastDeepEqual(graph.entities[n.id].loc, base.entities[n.id].loc);
93537                     });
93538                 };
93539
93540                 // enter/update
93541                 targets.enter()
93542                     .append('path')
93543                     .merge(targets)
93544                     .attr('d', getPath)
93545                     .attr('class', function(d) { return 'way area target target-allowed ' + targetClass + d.id; })
93546                     .classed('segment-edited', segmentWasEdited);
93547
93548
93549                 // NOPE
93550                 var nopeData = data.nopes.filter(getPath);
93551                 var nopes = selection.selectAll('.area.target-nope')
93552                     .filter(function(d) { return filter(d.properties.entity); })
93553                     .data(nopeData, function key(d) { return d.id; });
93554
93555                 // exit
93556                 nopes.exit()
93557                     .remove();
93558
93559                 // enter/update
93560                 nopes.enter()
93561                     .append('path')
93562                     .merge(nopes)
93563                     .attr('d', getPath)
93564                     .attr('class', function(d) { return 'way area target target-nope ' + nopeClass + d.id; })
93565                     .classed('segment-edited', segmentWasEdited);
93566             }
93567
93568
93569             function drawAreas(selection, graph, entities, filter) {
93570                 var path = svgPath(projection, graph, true);
93571                 var areas = {};
93572                 var multipolygon;
93573                 var base = context.history().base();
93574
93575                 for (var i = 0; i < entities.length; i++) {
93576                     var entity = entities[i];
93577                     if (entity.geometry(graph) !== 'area') { continue; }
93578
93579                     multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
93580                     if (multipolygon) {
93581                         areas[multipolygon.id] = {
93582                             entity: multipolygon.mergeTags(entity.tags),
93583                             area: Math.abs(entity.area(graph))
93584                         };
93585                     } else if (!areas[entity.id]) {
93586                         areas[entity.id] = {
93587                             entity: entity,
93588                             area: Math.abs(entity.area(graph))
93589                         };
93590                     }
93591                 }
93592
93593                 var fills = Object.values(areas).filter(function hasPath(a) { return path(a.entity); });
93594                 fills.sort(function areaSort(a, b) { return b.area - a.area; });
93595                 fills = fills.map(function(a) { return a.entity; });
93596
93597                 var strokes = fills.filter(function(area) { return area.type === 'way'; });
93598
93599                 var data = {
93600                     clip: fills,
93601                     shadow: strokes,
93602                     stroke: strokes,
93603                     fill: fills
93604                 };
93605
93606                 var clipPaths = context.surface().selectAll('defs').selectAll('.clipPath-osm')
93607                    .filter(filter)
93608                    .data(data.clip, osmEntity.key);
93609
93610                 clipPaths.exit()
93611                    .remove();
93612
93613                 var clipPathsEnter = clipPaths.enter()
93614                    .append('clipPath')
93615                    .attr('class', 'clipPath-osm')
93616                    .attr('id', function(entity) { return entity.id + '-clippath'; });
93617
93618                 clipPathsEnter
93619                    .append('path');
93620
93621                 clipPaths.merge(clipPathsEnter)
93622                    .selectAll('path')
93623                    .attr('d', path);
93624
93625
93626                 var drawLayer = selection.selectAll('.layer-osm.areas');
93627                 var touchLayer = selection.selectAll('.layer-touch.areas');
93628
93629                 // Draw areas..
93630                 var areagroup = drawLayer
93631                     .selectAll('g.areagroup')
93632                     .data(['fill', 'shadow', 'stroke']);
93633
93634                 areagroup = areagroup.enter()
93635                     .append('g')
93636                     .attr('class', function(d) { return 'areagroup area-' + d; })
93637                     .merge(areagroup);
93638
93639                 var paths = areagroup
93640                     .selectAll('path')
93641                     .filter(filter)
93642                     .data(function(layer) { return data[layer]; }, osmEntity.key);
93643
93644                 paths.exit()
93645                     .remove();
93646
93647
93648                 var fillpaths = selection.selectAll('.area-fill path.area').nodes();
93649                 var bisect = d3_bisector(function(node) { return -node.__data__.area(graph); }).left;
93650
93651                 function sortedByArea(entity) {
93652                     if (this._parent.__data__ === 'fill') {
93653                         return fillpaths[bisect(fillpaths, -entity.area(graph))];
93654                     }
93655                 }
93656
93657                 paths = paths.enter()
93658                     .insert('path', sortedByArea)
93659                     .merge(paths)
93660                     .each(function(entity) {
93661                         var layer = this.parentNode.__data__;
93662                         this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id);
93663
93664                         if (layer === 'fill') {
93665                             this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)');
93666                             this.style.fill = this.style.stroke = getPatternStyle(entity.tags);
93667                         }
93668                     })
93669                     .classed('added', function(d) {
93670                         return !base.entities[d.id];
93671                     })
93672                     .classed('geometry-edited', function(d) {
93673                         return graph.entities[d.id] &&
93674                             base.entities[d.id] &&
93675                             !fastDeepEqual(graph.entities[d.id].nodes, base.entities[d.id].nodes);
93676                     })
93677                     .classed('retagged', function(d) {
93678                         return graph.entities[d.id] &&
93679                             base.entities[d.id] &&
93680                             !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
93681                     })
93682                     .call(svgTagClasses())
93683                     .attr('d', path);
93684
93685
93686                 // Draw touch targets..
93687                 touchLayer
93688                     .call(drawTargets, graph, data.stroke, filter);
93689             }
93690
93691             return drawAreas;
93692         }
93693
93694         //[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]
93695         //[4a]          NameChar           ::=          NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
93696         //[5]           Name       ::=          NameStartChar (NameChar)*
93697         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
93698         var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
93699         var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
93700         //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
93701         //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(',')
93702
93703         //S_TAG,        S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
93704         //S_ATTR_SPACE, S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
93705         var S_TAG = 0;//tag name offerring
93706         var S_ATTR = 1;//attr name offerring 
93707         var S_ATTR_SPACE=2;//attr name end and space offer
93708         var S_EQ = 3;//=space?
93709         var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
93710         var S_ATTR_END = 5;//attr value end and no space(quot end)
93711         var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
93712         var S_TAG_CLOSE = 7;//closed el<el />
93713
93714         function XMLReader(){
93715                 
93716         }
93717
93718         XMLReader.prototype = {
93719                 parse:function(source,defaultNSMap,entityMap){
93720                         var domBuilder = this.domBuilder;
93721                         domBuilder.startDocument();
93722                         _copy(defaultNSMap ,defaultNSMap = {});
93723                         parse$2(source,defaultNSMap,entityMap,
93724                                         domBuilder,this.errorHandler);
93725                         domBuilder.endDocument();
93726                 }
93727         };
93728         function parse$2(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
93729                 function fixedFromCharCode(code) {
93730                         // String.prototype.fromCharCode does not supports
93731                         // > 2 bytes unicode chars directly
93732                         if (code > 0xffff) {
93733                                 code -= 0x10000;
93734                                 var surrogate1 = 0xd800 + (code >> 10)
93735                                         , surrogate2 = 0xdc00 + (code & 0x3ff);
93736
93737                                 return String.fromCharCode(surrogate1, surrogate2);
93738                         } else {
93739                                 return String.fromCharCode(code);
93740                         }
93741                 }
93742                 function entityReplacer(a){
93743                         var k = a.slice(1,-1);
93744                         if(k in entityMap){
93745                                 return entityMap[k]; 
93746                         }else if(k.charAt(0) === '#'){
93747                                 return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
93748                         }else{
93749                                 errorHandler.error('entity not found:'+a);
93750                                 return a;
93751                         }
93752                 }
93753                 function appendText(end){//has some bugs
93754                         if(end>start){
93755                                 var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
93756                                 locator&&position(start);
93757                                 domBuilder.characters(xt,0,end-start);
93758                                 start = end;
93759                         }
93760                 }
93761                 function position(p,m){
93762                         while(p>=lineEnd && (m = linePattern.exec(source))){
93763                                 lineStart = m.index;
93764                                 lineEnd = lineStart + m[0].length;
93765                                 locator.lineNumber++;
93766                                 //console.log('line++:',locator,startPos,endPos)
93767                         }
93768                         locator.columnNumber = p-lineStart+1;
93769                 }
93770                 var lineStart = 0;
93771                 var lineEnd = 0;
93772                 var linePattern = /.*(?:\r\n?|\n)|.*$/g;
93773                 var locator = domBuilder.locator;
93774                 
93775                 var parseStack = [{currentNSMap:defaultNSMapCopy}];
93776                 var closeMap = {};
93777                 var start = 0;
93778                 while(true){
93779                         try{
93780                                 var tagStart = source.indexOf('<',start);
93781                                 if(tagStart<0){
93782                                         if(!source.substr(start).match(/^\s*$/)){
93783                                                 var doc = domBuilder.doc;
93784                                         var text = doc.createTextNode(source.substr(start));
93785                                         doc.appendChild(text);
93786                                         domBuilder.currentElement = text;
93787                                         }
93788                                         return;
93789                                 }
93790                                 if(tagStart>start){
93791                                         appendText(tagStart);
93792                                 }
93793                                 switch(source.charAt(tagStart+1)){
93794                                 case '/':
93795                                         var end = source.indexOf('>',tagStart+3);
93796                                         var tagName = source.substring(tagStart+2,end);
93797                                         var config = parseStack.pop();
93798                                         if(end<0){
93799                                                 
93800                                         tagName = source.substring(tagStart+2).replace(/[\s<].*/,'');
93801                                         //console.error('#@@@@@@'+tagName)
93802                                         errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName);
93803                                         end = tagStart+1+tagName.length;
93804                                 }else if(tagName.match(/\s</)){
93805                                         tagName = tagName.replace(/[\s<].*/,'');
93806                                         errorHandler.error("end tag name: "+tagName+' maybe not complete');
93807                                         end = tagStart+1+tagName.length;
93808                                         }
93809                                         //console.error(parseStack.length,parseStack)
93810                                         //console.error(config);
93811                                         var localNSMap = config.localNSMap;
93812                                         var endMatch = config.tagName == tagName;
93813                                         var endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase();
93814                                 if(endIgnoreCaseMach){
93815                                         domBuilder.endElement(config.uri,config.localName,tagName);
93816                                                 if(localNSMap){
93817                                                         for(var prefix in localNSMap){
93818                                                                 domBuilder.endPrefixMapping(prefix) ;
93819                                                         }
93820                                                 }
93821                                                 if(!endMatch){
93822                                         errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
93823                                                 }
93824                                 }else{
93825                                         parseStack.push(config);
93826                                 }
93827                                         
93828                                         end++;
93829                                         break;
93830                                         // end elment
93831                                 case '?':// <?...?>
93832                                         locator&&position(tagStart);
93833                                         end = parseInstruction(source,tagStart,domBuilder);
93834                                         break;
93835                                 case '!':// <!doctype,<![CDATA,<!--
93836                                         locator&&position(tagStart);
93837                                         end = parseDCC(source,tagStart,domBuilder,errorHandler);
93838                                         break;
93839                                 default:
93840                                         locator&&position(tagStart);
93841                                         var el = new ElementAttributes();
93842                                         var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
93843                                         //elStartEnd
93844                                         var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
93845                                         var len = el.length;
93846                                         
93847                                         
93848                                         if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
93849                                                 el.closed = true;
93850                                                 if(!entityMap.nbsp){
93851                                                         errorHandler.warning('unclosed xml attribute');
93852                                                 }
93853                                         }
93854                                         if(locator && len){
93855                                                 var locator2 = copyLocator(locator,{});
93856                                                 //try{//attribute position fixed
93857                                                 for(var i = 0;i<len;i++){
93858                                                         var a = el[i];
93859                                                         position(a.offset);
93860                                                         a.locator = copyLocator(locator,{});
93861                                                 }
93862                                                 //}catch(e){console.error('@@@@@'+e)}
93863                                                 domBuilder.locator = locator2;
93864                                                 if(appendElement(el,domBuilder,currentNSMap)){
93865                                                         parseStack.push(el);
93866                                                 }
93867                                                 domBuilder.locator = locator;
93868                                         }else{
93869                                                 if(appendElement(el,domBuilder,currentNSMap)){
93870                                                         parseStack.push(el);
93871                                                 }
93872                                         }
93873                                         
93874                                         
93875                                         
93876                                         if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
93877                                                 end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder);
93878                                         }else{
93879                                                 end++;
93880                                         }
93881                                 }
93882                         }catch(e){
93883                                 errorHandler.error('element parse error: '+e);
93884                                 //errorHandler.error('element parse error: '+e);
93885                                 end = -1;
93886                                 //throw e;
93887                         }
93888                         if(end>start){
93889                                 start = end;
93890                         }else{
93891                                 //TODO: 这里有可能sax回退,有位置错误风险
93892                                 appendText(Math.max(tagStart,start)+1);
93893                         }
93894                 }
93895         }
93896         function copyLocator(f,t){
93897                 t.lineNumber = f.lineNumber;
93898                 t.columnNumber = f.columnNumber;
93899                 return t;
93900         }
93901
93902         /**
93903          * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
93904          * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
93905          */
93906         function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){
93907                 var attrName;
93908                 var value;
93909                 var p = ++start;
93910                 var s = S_TAG;//status
93911                 while(true){
93912                         var c = source.charAt(p);
93913                         switch(c){
93914                         case '=':
93915                                 if(s === S_ATTR){//attrName
93916                                         attrName = source.slice(start,p);
93917                                         s = S_EQ;
93918                                 }else if(s === S_ATTR_SPACE){
93919                                         s = S_EQ;
93920                                 }else{
93921                                         //fatalError: equal must after attrName or space after attrName
93922                                         throw new Error('attribute equal must after attrName');
93923                                 }
93924                                 break;
93925                         case '\'':
93926                         case '"':
93927                                 if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE
93928                                         ){//equal
93929                                         if(s === S_ATTR){
93930                                                 errorHandler.warning('attribute value must after "="');
93931                                                 attrName = source.slice(start,p);
93932                                         }
93933                                         start = p+1;
93934                                         p = source.indexOf(c,start);
93935                                         if(p>0){
93936                                                 value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
93937                                                 el.add(attrName,value,start-1);
93938                                                 s = S_ATTR_END;
93939                                         }else{
93940                                                 //fatalError: no end quot match
93941                                                 throw new Error('attribute value no end \''+c+'\' match');
93942                                         }
93943                                 }else if(s == S_ATTR_NOQUOT_VALUE){
93944                                         value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
93945                                         //console.log(attrName,value,start,p)
93946                                         el.add(attrName,value,start);
93947                                         //console.dir(el)
93948                                         errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
93949                                         start = p+1;
93950                                         s = S_ATTR_END;
93951                                 }else{
93952                                         //fatalError: no equal before
93953                                         throw new Error('attribute value must after "="');
93954                                 }
93955                                 break;
93956                         case '/':
93957                                 switch(s){
93958                                 case S_TAG:
93959                                         el.setTagName(source.slice(start,p));
93960                                 case S_ATTR_END:
93961                                 case S_TAG_SPACE:
93962                                 case S_TAG_CLOSE:
93963                                         s =S_TAG_CLOSE;
93964                                         el.closed = true;
93965                                 case S_ATTR_NOQUOT_VALUE:
93966                                 case S_ATTR:
93967                                 case S_ATTR_SPACE:
93968                                         break;
93969                                 //case S_EQ:
93970                                 default:
93971                                         throw new Error("attribute invalid close char('/')")
93972                                 }
93973                                 break;
93974                         case ''://end document
93975                                 //throw new Error('unexpected end of input')
93976                                 errorHandler.error('unexpected end of input');
93977                                 if(s == S_TAG){
93978                                         el.setTagName(source.slice(start,p));
93979                                 }
93980                                 return p;
93981                         case '>':
93982                                 switch(s){
93983                                 case S_TAG:
93984                                         el.setTagName(source.slice(start,p));
93985                                 case S_ATTR_END:
93986                                 case S_TAG_SPACE:
93987                                 case S_TAG_CLOSE:
93988                                         break;//normal
93989                                 case S_ATTR_NOQUOT_VALUE://Compatible state
93990                                 case S_ATTR:
93991                                         value = source.slice(start,p);
93992                                         if(value.slice(-1) === '/'){
93993                                                 el.closed  = true;
93994                                                 value = value.slice(0,-1);
93995                                         }
93996                                 case S_ATTR_SPACE:
93997                                         if(s === S_ATTR_SPACE){
93998                                                 value = attrName;
93999                                         }
94000                                         if(s == S_ATTR_NOQUOT_VALUE){
94001                                                 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
94002                                                 el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start);
94003                                         }else{
94004                                                 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){
94005                                                         errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!');
94006                                                 }
94007                                                 el.add(value,value,start);
94008                                         }
94009                                         break;
94010                                 case S_EQ:
94011                                         throw new Error('attribute value missed!!');
94012                                 }
94013         //                      console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
94014                                 return p;
94015                         /*xml space '\x20' | #x9 | #xD | #xA; */
94016                         case '\u0080':
94017                                 c = ' ';
94018                         default:
94019                                 if(c<= ' '){//space
94020                                         switch(s){
94021                                         case S_TAG:
94022                                                 el.setTagName(source.slice(start,p));//tagName
94023                                                 s = S_TAG_SPACE;
94024                                                 break;
94025                                         case S_ATTR:
94026                                                 attrName = source.slice(start,p);
94027                                                 s = S_ATTR_SPACE;
94028                                                 break;
94029                                         case S_ATTR_NOQUOT_VALUE:
94030                                                 var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
94031                                                 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
94032                                                 el.add(attrName,value,start);
94033                                         case S_ATTR_END:
94034                                                 s = S_TAG_SPACE;
94035                                                 break;
94036                                         //case S_TAG_SPACE:
94037                                         //case S_EQ:
94038                                         //case S_ATTR_SPACE:
94039                                         //      void();break;
94040                                         //case S_TAG_CLOSE:
94041                                                 //ignore warning
94042                                         }
94043                                 }else{//not space
94044         //S_TAG,        S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
94045         //S_ATTR_SPACE, S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
94046                                         switch(s){
94047                                         //case S_TAG:void();break;
94048                                         //case S_ATTR:void();break;
94049                                         //case S_ATTR_NOQUOT_VALUE:void();break;
94050                                         case S_ATTR_SPACE:
94051                                                 var tagName =  el.tagName;
94052                                                 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){
94053                                                         errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!');
94054                                                 }
94055                                                 el.add(attrName,attrName,start);
94056                                                 start = p;
94057                                                 s = S_ATTR;
94058                                                 break;
94059                                         case S_ATTR_END:
94060                                                 errorHandler.warning('attribute space is required"'+attrName+'"!!');
94061                                         case S_TAG_SPACE:
94062                                                 s = S_ATTR;
94063                                                 start = p;
94064                                                 break;
94065                                         case S_EQ:
94066                                                 s = S_ATTR_NOQUOT_VALUE;
94067                                                 start = p;
94068                                                 break;
94069                                         case S_TAG_CLOSE:
94070                                                 throw new Error("elements closed character '/' and '>' must be connected to");
94071                                         }
94072                                 }
94073                         }//end outer switch
94074                         //console.log('p++',p)
94075                         p++;
94076                 }
94077         }
94078         /**
94079          * @return true if has new namespace define
94080          */
94081         function appendElement(el,domBuilder,currentNSMap){
94082                 var tagName = el.tagName;
94083                 var localNSMap = null;
94084                 //var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
94085                 var i = el.length;
94086                 while(i--){
94087                         var a = el[i];
94088                         var qName = a.qName;
94089                         var value = a.value;
94090                         var nsp = qName.indexOf(':');
94091                         if(nsp>0){
94092                                 var prefix = a.prefix = qName.slice(0,nsp);
94093                                 var localName = qName.slice(nsp+1);
94094                                 var nsPrefix = prefix === 'xmlns' && localName;
94095                         }else{
94096                                 localName = qName;
94097                                 prefix = null;
94098                                 nsPrefix = qName === 'xmlns' && '';
94099                         }
94100                         //can not set prefix,because prefix !== ''
94101                         a.localName = localName ;
94102                         //prefix == null for no ns prefix attribute 
94103                         if(nsPrefix !== false){//hack!!
94104                                 if(localNSMap == null){
94105                                         localNSMap = {};
94106                                         //console.log(currentNSMap,0)
94107                                         _copy(currentNSMap,currentNSMap={});
94108                                         //console.log(currentNSMap,1)
94109                                 }
94110                                 currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
94111                                 a.uri = 'http://www.w3.org/2000/xmlns/';
94112                                 domBuilder.startPrefixMapping(nsPrefix, value); 
94113                         }
94114                 }
94115                 var i = el.length;
94116                 while(i--){
94117                         a = el[i];
94118                         var prefix = a.prefix;
94119                         if(prefix){//no prefix attribute has no namespace
94120                                 if(prefix === 'xml'){
94121                                         a.uri = 'http://www.w3.org/XML/1998/namespace';
94122                                 }if(prefix !== 'xmlns'){
94123                                         a.uri = currentNSMap[prefix || ''];
94124                                         
94125                                         //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
94126                                 }
94127                         }
94128                 }
94129                 var nsp = tagName.indexOf(':');
94130                 if(nsp>0){
94131                         prefix = el.prefix = tagName.slice(0,nsp);
94132                         localName = el.localName = tagName.slice(nsp+1);
94133                 }else{
94134                         prefix = null;//important!!
94135                         localName = el.localName = tagName;
94136                 }
94137                 //no prefix element has default namespace
94138                 var ns = el.uri = currentNSMap[prefix || ''];
94139                 domBuilder.startElement(ns,localName,tagName,el);
94140                 //endPrefixMapping and startPrefixMapping have not any help for dom builder
94141                 //localNSMap = null
94142                 if(el.closed){
94143                         domBuilder.endElement(ns,localName,tagName);
94144                         if(localNSMap){
94145                                 for(prefix in localNSMap){
94146                                         domBuilder.endPrefixMapping(prefix); 
94147                                 }
94148                         }
94149                 }else{
94150                         el.currentNSMap = currentNSMap;
94151                         el.localNSMap = localNSMap;
94152                         //parseStack.push(el);
94153                         return true;
94154                 }
94155         }
94156         function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
94157                 if(/^(?:script|textarea)$/i.test(tagName)){
94158                         var elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);
94159                         var text = source.substring(elStartEnd+1,elEndStart);
94160                         if(/[&<]/.test(text)){
94161                                 if(/^script$/i.test(tagName)){
94162                                         //if(!/\]\]>/.test(text)){
94163                                                 //lexHandler.startCDATA();
94164                                                 domBuilder.characters(text,0,text.length);
94165                                                 //lexHandler.endCDATA();
94166                                                 return elEndStart;
94167                                         //}
94168                                 }//}else{//text area
94169                                         text = text.replace(/&#?\w+;/g,entityReplacer);
94170                                         domBuilder.characters(text,0,text.length);
94171                                         return elEndStart;
94172                                 //}
94173                                 
94174                         }
94175                 }
94176                 return elStartEnd+1;
94177         }
94178         function fixSelfClosed(source,elStartEnd,tagName,closeMap){
94179                 //if(tagName in closeMap){
94180                 var pos = closeMap[tagName];
94181                 if(pos == null){
94182                         //console.log(tagName)
94183                         pos =  source.lastIndexOf('</'+tagName+'>');
94184                         if(pos<elStartEnd){//忘记闭合
94185                                 pos = source.lastIndexOf('</'+tagName);
94186                         }
94187                         closeMap[tagName] =pos;
94188                 }
94189                 return pos<elStartEnd;
94190                 //} 
94191         }
94192         function _copy(source,target){
94193                 for(var n in source){target[n] = source[n];}
94194         }
94195         function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
94196                 var next= source.charAt(start+2);
94197                 switch(next){
94198                 case '-':
94199                         if(source.charAt(start + 3) === '-'){
94200                                 var end = source.indexOf('-->',start+4);
94201                                 //append comment source.substring(4,end)//<!--
94202                                 if(end>start){
94203                                         domBuilder.comment(source,start+4,end-start-4);
94204                                         return end+3;
94205                                 }else{
94206                                         errorHandler.error("Unclosed comment");
94207                                         return -1;
94208                                 }
94209                         }else{
94210                                 //error
94211                                 return -1;
94212                         }
94213                 default:
94214                         if(source.substr(start+3,6) == 'CDATA['){
94215                                 var end = source.indexOf(']]>',start+9);
94216                                 domBuilder.startCDATA();
94217                                 domBuilder.characters(source,start+9,end-start-9);
94218                                 domBuilder.endCDATA(); 
94219                                 return end+3;
94220                         }
94221                         //<!DOCTYPE
94222                         //startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) 
94223                         var matchs = split(source,start);
94224                         var len = matchs.length;
94225                         if(len>1 && /!doctype/i.test(matchs[0][0])){
94226                                 var name = matchs[1][0];
94227                                 var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0];
94228                                 var sysid = len>4 && matchs[4][0];
94229                                 var lastMatch = matchs[len-1];
94230                                 domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
94231                                                 sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
94232                                 domBuilder.endDTD();
94233                                 
94234                                 return lastMatch.index+lastMatch[0].length
94235                         }
94236                 }
94237                 return -1;
94238         }
94239
94240
94241
94242         function parseInstruction(source,start,domBuilder){
94243                 var end = source.indexOf('?>',start);
94244                 if(end){
94245                         var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
94246                         if(match){
94247                                 var len = match[0].length;
94248                                 domBuilder.processingInstruction(match[1], match[2]) ;
94249                                 return end+2;
94250                         }else{//error
94251                                 return -1;
94252                         }
94253                 }
94254                 return -1;
94255         }
94256
94257         /**
94258          * @param source
94259          */
94260         function ElementAttributes(source){
94261                 
94262         }
94263         ElementAttributes.prototype = {
94264                 setTagName:function(tagName){
94265                         if(!tagNamePattern.test(tagName)){
94266                                 throw new Error('invalid tagName:'+tagName)
94267                         }
94268                         this.tagName = tagName;
94269                 },
94270                 add:function(qName,value,offset){
94271                         if(!tagNamePattern.test(qName)){
94272                                 throw new Error('invalid attribute:'+qName)
94273                         }
94274                         this[this.length++] = {qName:qName,value:value,offset:offset};
94275                 },
94276                 length:0,
94277                 getLocalName:function(i){return this[i].localName},
94278                 getLocator:function(i){return this[i].locator},
94279                 getQName:function(i){return this[i].qName},
94280                 getURI:function(i){return this[i].uri},
94281                 getValue:function(i){return this[i].value}
94282         //      ,getIndex:function(uri, localName)){
94283         //              if(localName){
94284         //                      
94285         //              }else{
94286         //                      var qName = uri
94287         //              }
94288         //      },
94289         //      getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
94290         //      getType:function(uri,localName){}
94291         //      getType:function(i){},
94292         };
94293
94294
94295
94296
94297         function _set_proto_(thiz,parent){
94298                 thiz.__proto__ = parent;
94299                 return thiz;
94300         }
94301         if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
94302                 _set_proto_ = function(thiz,parent){
94303                         function p(){}          p.prototype = parent;
94304                         p = new p();
94305                         for(parent in thiz){
94306                                 p[parent] = thiz[parent];
94307                         }
94308                         return p;
94309                 };
94310         }
94311
94312         function split(source,start){
94313                 var match;
94314                 var buf = [];
94315                 var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
94316                 reg.lastIndex = start;
94317                 reg.exec(source);//skip <
94318                 while(match = reg.exec(source)){
94319                         buf.push(match);
94320                         if(match[1]){ return buf; }
94321                 }
94322         }
94323
94324         var XMLReader_1 = XMLReader;
94325
94326         var sax = {
94327                 XMLReader: XMLReader_1
94328         };
94329
94330         /*
94331          * DOM Level 2
94332          * Object DOMException
94333          * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
94334          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
94335          */
94336
94337         function copy$3(src,dest){
94338                 for(var p in src){
94339                         dest[p] = src[p];
94340                 }
94341         }
94342         /**
94343         ^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));?
94344         ^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));?
94345          */
94346         function _extends(Class,Super){
94347                 var pt = Class.prototype;
94348                 if(Object.create){
94349                         var ppt = Object.create(Super.prototype);
94350                         pt.__proto__ = ppt;
94351                 }
94352                 if(!(pt instanceof Super)){
94353                         function t(){}          t.prototype = Super.prototype;
94354                         t = new t();
94355                         copy$3(pt,t);
94356                         Class.prototype = pt = t;
94357                 }
94358                 if(pt.constructor != Class){
94359                         if(typeof Class != 'function'){
94360                                 console.error("unknow Class:"+Class);
94361                         }
94362                         pt.constructor = Class;
94363                 }
94364         }
94365         var htmlns = 'http://www.w3.org/1999/xhtml' ;
94366         // Node Types
94367         var NodeType = {};
94368         var ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;
94369         var ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;
94370         var TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;
94371         var CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;
94372         var ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;
94373         var ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;
94374         var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
94375         var COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;
94376         var DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;
94377         var DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;
94378         var DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;
94379         var NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;
94380
94381         // ExceptionCode
94382         var ExceptionCode = {};
94383         var ExceptionMessage = {};
94384         var INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]="Index size error"),1);
94385         var DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]="DOMString size error"),2);
94386         var HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]="Hierarchy request error"),3);
94387         var WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]="Wrong document"),4);
94388         var INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]="Invalid character"),5);
94389         var NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]="No data allowed"),6);
94390         var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
94391         var NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]="Not found"),8);
94392         var NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]="Not supported"),9);
94393         var INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]="Attribute in use"),10);
94394         //level2
94395         var INVALID_STATE_ERR           = ExceptionCode.INVALID_STATE_ERR               = ((ExceptionMessage[11]="Invalid state"),11);
94396         var SYNTAX_ERR                  = ExceptionCode.SYNTAX_ERR                      = ((ExceptionMessage[12]="Syntax error"),12);
94397         var INVALID_MODIFICATION_ERR    = ExceptionCode.INVALID_MODIFICATION_ERR        = ((ExceptionMessage[13]="Invalid modification"),13);
94398         var NAMESPACE_ERR               = ExceptionCode.NAMESPACE_ERR                   = ((ExceptionMessage[14]="Invalid namespace"),14);
94399         var INVALID_ACCESS_ERR          = ExceptionCode.INVALID_ACCESS_ERR              = ((ExceptionMessage[15]="Invalid access"),15);
94400
94401
94402         function DOMException$2(code, message) {
94403                 if(message instanceof Error){
94404                         var error = message;
94405                 }else{
94406                         error = this;
94407                         Error.call(this, ExceptionMessage[code]);
94408                         this.message = ExceptionMessage[code];
94409                         if(Error.captureStackTrace) { Error.captureStackTrace(this, DOMException$2); }
94410                 }
94411                 error.code = code;
94412                 if(message) { this.message = this.message + ": " + message; }
94413                 return error;
94414         }DOMException$2.prototype = Error.prototype;
94415         copy$3(ExceptionCode,DOMException$2);
94416         /**
94417          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177
94418          * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.
94419          * The items in the NodeList are accessible via an integral index, starting from 0.
94420          */
94421         function NodeList() {
94422         }NodeList.prototype = {
94423                 /**
94424                  * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
94425                  * @standard level1
94426                  */
94427                 length:0, 
94428                 /**
94429                  * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.
94430                  * @standard level1
94431                  * @param index  unsigned long 
94432                  *   Index into the collection.
94433                  * @return Node
94434                  *      The node at the indexth position in the NodeList, or null if that is not a valid index. 
94435                  */
94436                 item: function(index) {
94437                         return this[index] || null;
94438                 },
94439                 toString:function(isHTML,nodeFilter){
94440                         for(var buf = [], i = 0;i<this.length;i++){
94441                                 serializeToString(this[i],buf,isHTML,nodeFilter);
94442                         }
94443                         return buf.join('');
94444                 }
94445         };
94446         function LiveNodeList(node,refresh){
94447                 this._node = node;
94448                 this._refresh = refresh;
94449                 _updateLiveList(this);
94450         }
94451         function _updateLiveList(list){
94452                 var inc = list._node._inc || list._node.ownerDocument._inc;
94453                 if(list._inc != inc){
94454                         var ls = list._refresh(list._node);
94455                         //console.log(ls.length)
94456                         __set__(list,'length',ls.length);
94457                         copy$3(ls,list);
94458                         list._inc = inc;
94459                 }
94460         }
94461         LiveNodeList.prototype.item = function(i){
94462                 _updateLiveList(this);
94463                 return this[i];
94464         };
94465
94466         _extends(LiveNodeList,NodeList);
94467         /**
94468          * 
94469          * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes.
94470          * NamedNodeMap objects in the DOM are live.
94471          * used for attributes or DocumentType entities 
94472          */
94473         function NamedNodeMap() {
94474         }
94475         function _findNodeIndex(list,node){
94476                 var i = list.length;
94477                 while(i--){
94478                         if(list[i] === node){return i}
94479                 }
94480         }
94481
94482         function _addNamedNode(el,list,newAttr,oldAttr){
94483                 if(oldAttr){
94484                         list[_findNodeIndex(list,oldAttr)] = newAttr;
94485                 }else{
94486                         list[list.length++] = newAttr;
94487                 }
94488                 if(el){
94489                         newAttr.ownerElement = el;
94490                         var doc = el.ownerDocument;
94491                         if(doc){
94492                                 oldAttr && _onRemoveAttribute(doc,el,oldAttr);
94493                                 _onAddAttribute(doc,el,newAttr);
94494                         }
94495                 }
94496         }
94497         function _removeNamedNode(el,list,attr){
94498                 //console.log('remove attr:'+attr)
94499                 var i = _findNodeIndex(list,attr);
94500                 if(i>=0){
94501                         var lastIndex = list.length-1;
94502                         while(i<lastIndex){
94503                                 list[i] = list[++i];
94504                         }
94505                         list.length = lastIndex;
94506                         if(el){
94507                                 var doc = el.ownerDocument;
94508                                 if(doc){
94509                                         _onRemoveAttribute(doc,el,attr);
94510                                         attr.ownerElement = null;
94511                                 }
94512                         }
94513                 }else{
94514                         throw DOMException$2(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))
94515                 }
94516         }
94517         NamedNodeMap.prototype = {
94518                 length:0,
94519                 item:NodeList.prototype.item,
94520                 getNamedItem: function(key) {
94521         //              if(key.indexOf(':')>0 || key == 'xmlns'){
94522         //                      return null;
94523         //              }
94524                         //console.log()
94525                         var i = this.length;
94526                         while(i--){
94527                                 var attr = this[i];
94528                                 //console.log(attr.nodeName,key)
94529                                 if(attr.nodeName == key){
94530                                         return attr;
94531                                 }
94532                         }
94533                 },
94534                 setNamedItem: function(attr) {
94535                         var el = attr.ownerElement;
94536                         if(el && el!=this._ownerElement){
94537                                 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
94538                         }
94539                         var oldAttr = this.getNamedItem(attr.nodeName);
94540                         _addNamedNode(this._ownerElement,this,attr,oldAttr);
94541                         return oldAttr;
94542                 },
94543                 /* returns Node */
94544                 setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
94545                         var el = attr.ownerElement, oldAttr;
94546                         if(el && el!=this._ownerElement){
94547                                 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
94548                         }
94549                         oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
94550                         _addNamedNode(this._ownerElement,this,attr,oldAttr);
94551                         return oldAttr;
94552                 },
94553
94554                 /* returns Node */
94555                 removeNamedItem: function(key) {
94556                         var attr = this.getNamedItem(key);
94557                         _removeNamedNode(this._ownerElement,this,attr);
94558                         return attr;
94559                         
94560                         
94561                 },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
94562                 
94563                 //for level2
94564                 removeNamedItemNS:function(namespaceURI,localName){
94565                         var attr = this.getNamedItemNS(namespaceURI,localName);
94566                         _removeNamedNode(this._ownerElement,this,attr);
94567                         return attr;
94568                 },
94569                 getNamedItemNS: function(namespaceURI, localName) {
94570                         var i = this.length;
94571                         while(i--){
94572                                 var node = this[i];
94573                                 if(node.localName == localName && node.namespaceURI == namespaceURI){
94574                                         return node;
94575                                 }
94576                         }
94577                         return null;
94578                 }
94579         };
94580         /**
94581          * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490
94582          */
94583         function DOMImplementation(/* Object */ features) {
94584                 this._features = {};
94585                 if (features) {
94586                         for (var feature in features) {
94587                                  this._features = features[feature];
94588                         }
94589                 }
94590         }
94591         DOMImplementation.prototype = {
94592                 hasFeature: function(/* string */ feature, /* string */ version) {
94593                         var versions = this._features[feature.toLowerCase()];
94594                         if (versions && (!version || version in versions)) {
94595                                 return true;
94596                         } else {
94597                                 return false;
94598                         }
94599                 },
94600                 // Introduced in DOM Level 2:
94601                 createDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
94602                         var doc = new Document();
94603                         doc.implementation = this;
94604                         doc.childNodes = new NodeList();
94605                         doc.doctype = doctype;
94606                         if(doctype){
94607                                 doc.appendChild(doctype);
94608                         }
94609                         if(qualifiedName){
94610                                 var root = doc.createElementNS(namespaceURI,qualifiedName);
94611                                 doc.appendChild(root);
94612                         }
94613                         return doc;
94614                 },
94615                 // Introduced in DOM Level 2:
94616                 createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR
94617                         var node = new DocumentType();
94618                         node.name = qualifiedName;
94619                         node.nodeName = qualifiedName;
94620                         node.publicId = publicId;
94621                         node.systemId = systemId;
94622                         // Introduced in DOM Level 2:
94623                         //readonly attribute DOMString        internalSubset;
94624                         
94625                         //TODO:..
94626                         //  readonly attribute NamedNodeMap     entities;
94627                         //  readonly attribute NamedNodeMap     notations;
94628                         return node;
94629                 }
94630         };
94631
94632
94633         /**
94634          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247
94635          */
94636
94637         function Node$3() {
94638         }
94639         Node$3.prototype = {
94640                 firstChild : null,
94641                 lastChild : null,
94642                 previousSibling : null,
94643                 nextSibling : null,
94644                 attributes : null,
94645                 parentNode : null,
94646                 childNodes : null,
94647                 ownerDocument : null,
94648                 nodeValue : null,
94649                 namespaceURI : null,
94650                 prefix : null,
94651                 localName : null,
94652                 // Modified in DOM Level 2:
94653                 insertBefore:function(newChild, refChild){//raises 
94654                         return _insertBefore(this,newChild,refChild);
94655                 },
94656                 replaceChild:function(newChild, oldChild){//raises 
94657                         this.insertBefore(newChild,oldChild);
94658                         if(oldChild){
94659                                 this.removeChild(oldChild);
94660                         }
94661                 },
94662                 removeChild:function(oldChild){
94663                         return _removeChild(this,oldChild);
94664                 },
94665                 appendChild:function(newChild){
94666                         return this.insertBefore(newChild,null);
94667                 },
94668                 hasChildNodes:function(){
94669                         return this.firstChild != null;
94670                 },
94671                 cloneNode:function(deep){
94672                         return cloneNode(this.ownerDocument||this,this,deep);
94673                 },
94674                 // Modified in DOM Level 2:
94675                 normalize:function(){
94676                         var child = this.firstChild;
94677                         while(child){
94678                                 var next = child.nextSibling;
94679                                 if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
94680                                         this.removeChild(next);
94681                                         child.appendData(next.data);
94682                                 }else{
94683                                         child.normalize();
94684                                         child = next;
94685                                 }
94686                         }
94687                 },
94688                 // Introduced in DOM Level 2:
94689                 isSupported:function(feature, version){
94690                         return this.ownerDocument.implementation.hasFeature(feature,version);
94691                 },
94692             // Introduced in DOM Level 2:
94693             hasAttributes:function(){
94694                 return this.attributes.length>0;
94695             },
94696             lookupPrefix:function(namespaceURI){
94697                 var el = this;
94698                 while(el){
94699                         var map = el._nsMap;
94700                         //console.dir(map)
94701                         if(map){
94702                                 for(var n in map){
94703                                         if(map[n] == namespaceURI){
94704                                                 return n;
94705                                         }
94706                                 }
94707                         }
94708                         el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
94709                 }
94710                 return null;
94711             },
94712             // Introduced in DOM Level 3:
94713             lookupNamespaceURI:function(prefix){
94714                 var el = this;
94715                 while(el){
94716                         var map = el._nsMap;
94717                         //console.dir(map)
94718                         if(map){
94719                                 if(prefix in map){
94720                                         return map[prefix] ;
94721                                 }
94722                         }
94723                         el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
94724                 }
94725                 return null;
94726             },
94727             // Introduced in DOM Level 3:
94728             isDefaultNamespace:function(namespaceURI){
94729                 var prefix = this.lookupPrefix(namespaceURI);
94730                 return prefix == null;
94731             }
94732         };
94733
94734
94735         function _xmlEncoder(c){
94736                 return c == '<' && '&lt;' ||
94737                  c == '>' && '&gt;' ||
94738                  c == '&' && '&amp;' ||
94739                  c == '"' && '&quot;' ||
94740                  '&#'+c.charCodeAt()+';'
94741         }
94742
94743
94744         copy$3(NodeType,Node$3);
94745         copy$3(NodeType,Node$3.prototype);
94746
94747         /**
94748          * @param callback return true for continue,false for break
94749          * @return boolean true: break visit;
94750          */
94751         function _visitNode(node,callback){
94752                 if(callback(node)){
94753                         return true;
94754                 }
94755                 if(node = node.firstChild){
94756                         do{
94757                                 if(_visitNode(node,callback)){return true}
94758                 }while(node=node.nextSibling)
94759             }
94760         }
94761
94762
94763
94764         function Document(){
94765         }
94766         function _onAddAttribute(doc,el,newAttr){
94767                 doc && doc._inc++;
94768                 var ns = newAttr.namespaceURI ;
94769                 if(ns == 'http://www.w3.org/2000/xmlns/'){
94770                         //update namespace
94771                         el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value;
94772                 }
94773         }
94774         function _onRemoveAttribute(doc,el,newAttr,remove){
94775                 doc && doc._inc++;
94776                 var ns = newAttr.namespaceURI ;
94777                 if(ns == 'http://www.w3.org/2000/xmlns/'){
94778                         //update namespace
94779                         delete el._nsMap[newAttr.prefix?newAttr.localName:''];
94780                 }
94781         }
94782         function _onUpdateChild(doc,el,newChild){
94783                 if(doc && doc._inc){
94784                         doc._inc++;
94785                         //update childNodes
94786                         var cs = el.childNodes;
94787                         if(newChild){
94788                                 cs[cs.length++] = newChild;
94789                         }else{
94790                                 //console.log(1)
94791                                 var child = el.firstChild;
94792                                 var i = 0;
94793                                 while(child){
94794                                         cs[i++] = child;
94795                                         child =child.nextSibling;
94796                                 }
94797                                 cs.length = i;
94798                         }
94799                 }
94800         }
94801
94802         /**
94803          * attributes;
94804          * children;
94805          * 
94806          * writeable properties:
94807          * nodeValue,Attr:value,CharacterData:data
94808          * prefix
94809          */
94810         function _removeChild(parentNode,child){
94811                 var previous = child.previousSibling;
94812                 var next = child.nextSibling;
94813                 if(previous){
94814                         previous.nextSibling = next;
94815                 }else{
94816                         parentNode.firstChild = next;
94817                 }
94818                 if(next){
94819                         next.previousSibling = previous;
94820                 }else{
94821                         parentNode.lastChild = previous;
94822                 }
94823                 _onUpdateChild(parentNode.ownerDocument,parentNode);
94824                 return child;
94825         }
94826         /**
94827          * preformance key(refChild == null)
94828          */
94829         function _insertBefore(parentNode,newChild,nextChild){
94830                 var cp = newChild.parentNode;
94831                 if(cp){
94832                         cp.removeChild(newChild);//remove and update
94833                 }
94834                 if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
94835                         var newFirst = newChild.firstChild;
94836                         if (newFirst == null) {
94837                                 return newChild;
94838                         }
94839                         var newLast = newChild.lastChild;
94840                 }else{
94841                         newFirst = newLast = newChild;
94842                 }
94843                 var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
94844
94845                 newFirst.previousSibling = pre;
94846                 newLast.nextSibling = nextChild;
94847                 
94848                 
94849                 if(pre){
94850                         pre.nextSibling = newFirst;
94851                 }else{
94852                         parentNode.firstChild = newFirst;
94853                 }
94854                 if(nextChild == null){
94855                         parentNode.lastChild = newLast;
94856                 }else{
94857                         nextChild.previousSibling = newLast;
94858                 }
94859                 do{
94860                         newFirst.parentNode = parentNode;
94861                 }while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
94862                 _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
94863                 //console.log(parentNode.lastChild.nextSibling == null)
94864                 if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
94865                         newChild.firstChild = newChild.lastChild = null;
94866                 }
94867                 return newChild;
94868         }
94869         function _appendSingleChild(parentNode,newChild){
94870                 var cp = newChild.parentNode;
94871                 if(cp){
94872                         var pre = parentNode.lastChild;
94873                         cp.removeChild(newChild);//remove and update
94874                         var pre = parentNode.lastChild;
94875                 }
94876                 var pre = parentNode.lastChild;
94877                 newChild.parentNode = parentNode;
94878                 newChild.previousSibling = pre;
94879                 newChild.nextSibling = null;
94880                 if(pre){
94881                         pre.nextSibling = newChild;
94882                 }else{
94883                         parentNode.firstChild = newChild;
94884                 }
94885                 parentNode.lastChild = newChild;
94886                 _onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
94887                 return newChild;
94888                 //console.log("__aa",parentNode.lastChild.nextSibling == null)
94889         }
94890         Document.prototype = {
94891                 //implementation : null,
94892                 nodeName :  '#document',
94893                 nodeType :  DOCUMENT_NODE,
94894                 doctype :  null,
94895                 documentElement :  null,
94896                 _inc : 1,
94897                 
94898                 insertBefore :  function(newChild, refChild){//raises 
94899                         if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
94900                                 var child = newChild.firstChild;
94901                                 while(child){
94902                                         var next = child.nextSibling;
94903                                         this.insertBefore(child,refChild);
94904                                         child = next;
94905                                 }
94906                                 return newChild;
94907                         }
94908                         if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){
94909                                 this.documentElement = newChild;
94910                         }
94911                         
94912                         return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
94913                 },
94914                 removeChild :  function(oldChild){
94915                         if(this.documentElement == oldChild){
94916                                 this.documentElement = null;
94917                         }
94918                         return _removeChild(this,oldChild);
94919                 },
94920                 // Introduced in DOM Level 2:
94921                 importNode : function(importedNode,deep){
94922                         return importNode(this,importedNode,deep);
94923                 },
94924                 // Introduced in DOM Level 2:
94925                 getElementById :        function(id){
94926                         var rtv = null;
94927                         _visitNode(this.documentElement,function(node){
94928                                 if(node.nodeType == ELEMENT_NODE){
94929                                         if(node.getAttribute('id') == id){
94930                                                 rtv = node;
94931                                                 return true;
94932                                         }
94933                                 }
94934                         });
94935                         return rtv;
94936                 },
94937                 
94938                 //document factory method:
94939                 createElement : function(tagName){
94940                         var node = new Element();
94941                         node.ownerDocument = this;
94942                         node.nodeName = tagName;
94943                         node.tagName = tagName;
94944                         node.childNodes = new NodeList();
94945                         var attrs       = node.attributes = new NamedNodeMap();
94946                         attrs._ownerElement = node;
94947                         return node;
94948                 },
94949                 createDocumentFragment :        function(){
94950                         var node = new DocumentFragment();
94951                         node.ownerDocument = this;
94952                         node.childNodes = new NodeList();
94953                         return node;
94954                 },
94955                 createTextNode :        function(data){
94956                         var node = new Text();
94957                         node.ownerDocument = this;
94958                         node.appendData(data);
94959                         return node;
94960                 },
94961                 createComment : function(data){
94962                         var node = new Comment();
94963                         node.ownerDocument = this;
94964                         node.appendData(data);
94965                         return node;
94966                 },
94967                 createCDATASection :    function(data){
94968                         var node = new CDATASection();
94969                         node.ownerDocument = this;
94970                         node.appendData(data);
94971                         return node;
94972                 },
94973                 createProcessingInstruction :   function(target,data){
94974                         var node = new ProcessingInstruction();
94975                         node.ownerDocument = this;
94976                         node.tagName = node.target = target;
94977                         node.nodeValue= node.data = data;
94978                         return node;
94979                 },
94980                 createAttribute :       function(name){
94981                         var node = new Attr();
94982                         node.ownerDocument      = this;
94983                         node.name = name;
94984                         node.nodeName   = name;
94985                         node.localName = name;
94986                         node.specified = true;
94987                         return node;
94988                 },
94989                 createEntityReference : function(name){
94990                         var node = new EntityReference();
94991                         node.ownerDocument      = this;
94992                         node.nodeName   = name;
94993                         return node;
94994                 },
94995                 // Introduced in DOM Level 2:
94996                 createElementNS :       function(namespaceURI,qualifiedName){
94997                         var node = new Element();
94998                         var pl = qualifiedName.split(':');
94999                         var attrs       = node.attributes = new NamedNodeMap();
95000                         node.childNodes = new NodeList();
95001                         node.ownerDocument = this;
95002                         node.nodeName = qualifiedName;
95003                         node.tagName = qualifiedName;
95004                         node.namespaceURI = namespaceURI;
95005                         if(pl.length == 2){
95006                                 node.prefix = pl[0];
95007                                 node.localName = pl[1];
95008                         }else{
95009                                 //el.prefix = null;
95010                                 node.localName = qualifiedName;
95011                         }
95012                         attrs._ownerElement = node;
95013                         return node;
95014                 },
95015                 // Introduced in DOM Level 2:
95016                 createAttributeNS :     function(namespaceURI,qualifiedName){
95017                         var node = new Attr();
95018                         var pl = qualifiedName.split(':');
95019                         node.ownerDocument = this;
95020                         node.nodeName = qualifiedName;
95021                         node.name = qualifiedName;
95022                         node.namespaceURI = namespaceURI;
95023                         node.specified = true;
95024                         if(pl.length == 2){
95025                                 node.prefix = pl[0];
95026                                 node.localName = pl[1];
95027                         }else{
95028                                 //el.prefix = null;
95029                                 node.localName = qualifiedName;
95030                         }
95031                         return node;
95032                 }
95033         };
95034         _extends(Document,Node$3);
95035
95036
95037         function Element() {
95038                 this._nsMap = {};
95039         }Element.prototype = {
95040                 nodeType : ELEMENT_NODE,
95041                 hasAttribute : function(name){
95042                         return this.getAttributeNode(name)!=null;
95043                 },
95044                 getAttribute : function(name){
95045                         var attr = this.getAttributeNode(name);
95046                         return attr && attr.value || '';
95047                 },
95048                 getAttributeNode : function(name){
95049                         return this.attributes.getNamedItem(name);
95050                 },
95051                 setAttribute : function(name, value){
95052                         var attr = this.ownerDocument.createAttribute(name);
95053                         attr.value = attr.nodeValue = "" + value;
95054                         this.setAttributeNode(attr);
95055                 },
95056                 removeAttribute : function(name){
95057                         var attr = this.getAttributeNode(name);
95058                         attr && this.removeAttributeNode(attr);
95059                 },
95060                 
95061                 //four real opeartion method
95062                 appendChild:function(newChild){
95063                         if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
95064                                 return this.insertBefore(newChild,null);
95065                         }else{
95066                                 return _appendSingleChild(this,newChild);
95067                         }
95068                 },
95069                 setAttributeNode : function(newAttr){
95070                         return this.attributes.setNamedItem(newAttr);
95071                 },
95072                 setAttributeNodeNS : function(newAttr){
95073                         return this.attributes.setNamedItemNS(newAttr);
95074                 },
95075                 removeAttributeNode : function(oldAttr){
95076                         //console.log(this == oldAttr.ownerElement)
95077                         return this.attributes.removeNamedItem(oldAttr.nodeName);
95078                 },
95079                 //get real attribute name,and remove it by removeAttributeNode
95080                 removeAttributeNS : function(namespaceURI, localName){
95081                         var old = this.getAttributeNodeNS(namespaceURI, localName);
95082                         old && this.removeAttributeNode(old);
95083                 },
95084                 
95085                 hasAttributeNS : function(namespaceURI, localName){
95086                         return this.getAttributeNodeNS(namespaceURI, localName)!=null;
95087                 },
95088                 getAttributeNS : function(namespaceURI, localName){
95089                         var attr = this.getAttributeNodeNS(namespaceURI, localName);
95090                         return attr && attr.value || '';
95091                 },
95092                 setAttributeNS : function(namespaceURI, qualifiedName, value){
95093                         var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
95094                         attr.value = attr.nodeValue = "" + value;
95095                         this.setAttributeNode(attr);
95096                 },
95097                 getAttributeNodeNS : function(namespaceURI, localName){
95098                         return this.attributes.getNamedItemNS(namespaceURI, localName);
95099                 },
95100                 
95101                 getElementsByTagName : function(tagName){
95102                         return new LiveNodeList(this,function(base){
95103                                 var ls = [];
95104                                 _visitNode(base,function(node){
95105                                         if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
95106                                                 ls.push(node);
95107                                         }
95108                                 });
95109                                 return ls;
95110                         });
95111                 },
95112                 getElementsByTagNameNS : function(namespaceURI, localName){
95113                         return new LiveNodeList(this,function(base){
95114                                 var ls = [];
95115                                 _visitNode(base,function(node){
95116                                         if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
95117                                                 ls.push(node);
95118                                         }
95119                                 });
95120                                 return ls;
95121                                 
95122                         });
95123                 }
95124         };
95125         Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
95126         Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
95127
95128
95129         _extends(Element,Node$3);
95130         function Attr() {
95131         }Attr.prototype.nodeType = ATTRIBUTE_NODE;
95132         _extends(Attr,Node$3);
95133
95134
95135         function CharacterData() {
95136         }CharacterData.prototype = {
95137                 data : '',
95138                 substringData : function(offset, count) {
95139                         return this.data.substring(offset, offset+count);
95140                 },
95141                 appendData: function(text) {
95142                         text = this.data+text;
95143                         this.nodeValue = this.data = text;
95144                         this.length = text.length;
95145                 },
95146                 insertData: function(offset,text) {
95147                         this.replaceData(offset,0,text);
95148                 
95149                 },
95150                 appendChild:function(newChild){
95151                         throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])
95152                 },
95153                 deleteData: function(offset, count) {
95154                         this.replaceData(offset,count,"");
95155                 },
95156                 replaceData: function(offset, count, text) {
95157                         var start = this.data.substring(0,offset);
95158                         var end = this.data.substring(offset+count);
95159                         text = start + text + end;
95160                         this.nodeValue = this.data = text;
95161                         this.length = text.length;
95162                 }
95163         };
95164         _extends(CharacterData,Node$3);
95165         function Text() {
95166         }Text.prototype = {
95167                 nodeName : "#text",
95168                 nodeType : TEXT_NODE,
95169                 splitText : function(offset) {
95170                         var text = this.data;
95171                         var newText = text.substring(offset);
95172                         text = text.substring(0, offset);
95173                         this.data = this.nodeValue = text;
95174                         this.length = text.length;
95175                         var newNode = this.ownerDocument.createTextNode(newText);
95176                         if(this.parentNode){
95177                                 this.parentNode.insertBefore(newNode, this.nextSibling);
95178                         }
95179                         return newNode;
95180                 }
95181         };
95182         _extends(Text,CharacterData);
95183         function Comment() {
95184         }Comment.prototype = {
95185                 nodeName : "#comment",
95186                 nodeType : COMMENT_NODE
95187         };
95188         _extends(Comment,CharacterData);
95189
95190         function CDATASection() {
95191         }CDATASection.prototype = {
95192                 nodeName : "#cdata-section",
95193                 nodeType : CDATA_SECTION_NODE
95194         };
95195         _extends(CDATASection,CharacterData);
95196
95197
95198         function DocumentType() {
95199         }DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
95200         _extends(DocumentType,Node$3);
95201
95202         function Notation() {
95203         }Notation.prototype.nodeType = NOTATION_NODE;
95204         _extends(Notation,Node$3);
95205
95206         function Entity() {
95207         }Entity.prototype.nodeType = ENTITY_NODE;
95208         _extends(Entity,Node$3);
95209
95210         function EntityReference() {
95211         }EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
95212         _extends(EntityReference,Node$3);
95213
95214         function DocumentFragment() {
95215         }DocumentFragment.prototype.nodeName =  "#document-fragment";
95216         DocumentFragment.prototype.nodeType =   DOCUMENT_FRAGMENT_NODE;
95217         _extends(DocumentFragment,Node$3);
95218
95219
95220         function ProcessingInstruction() {
95221         }
95222         ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
95223         _extends(ProcessingInstruction,Node$3);
95224         function XMLSerializer$1(){}
95225         XMLSerializer$1.prototype.serializeToString = function(node,isHtml,nodeFilter){
95226                 return nodeSerializeToString.call(node,isHtml,nodeFilter);
95227         };
95228         Node$3.prototype.toString = nodeSerializeToString;
95229         function nodeSerializeToString(isHtml,nodeFilter){
95230                 var buf = [];
95231                 var refNode = this.nodeType == 9?this.documentElement:this;
95232                 var prefix = refNode.prefix;
95233                 var uri = refNode.namespaceURI;
95234                 
95235                 if(uri && prefix == null){
95236                         //console.log(prefix)
95237                         var prefix = refNode.lookupPrefix(uri);
95238                         if(prefix == null){
95239                                 //isHTML = true;
95240                                 var visibleNamespaces=[
95241                                 {namespace:uri,prefix:null} ];
95242                         }
95243                 }
95244                 serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);
95245                 //console.log('###',this.nodeType,uri,prefix,buf.join(''))
95246                 return buf.join('');
95247         }
95248         function needNamespaceDefine(node,isHTML, visibleNamespaces) {
95249                 var prefix = node.prefix||'';
95250                 var uri = node.namespaceURI;
95251                 if (!prefix && !uri){
95252                         return false;
95253                 }
95254                 if (prefix === "xml" && uri === "http://www.w3.org/XML/1998/namespace" 
95255                         || uri == 'http://www.w3.org/2000/xmlns/'){
95256                         return false;
95257                 }
95258                 
95259                 var i = visibleNamespaces.length; 
95260                 //console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces)
95261                 while (i--) {
95262                         var ns = visibleNamespaces[i];
95263                         // get namespace prefix
95264                         //console.log(node.nodeType,node.tagName,ns.prefix,prefix)
95265                         if (ns.prefix == prefix){
95266                                 return ns.namespace != uri;
95267                         }
95268                 }
95269                 //console.log(isHTML,uri,prefix=='')
95270                 //if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){
95271                 //      return false;
95272                 //}
95273                 //node.flag = '11111'
95274                 //console.error(3,true,node.flag,node.prefix,node.namespaceURI)
95275                 return true;
95276         }
95277         function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
95278                 if(nodeFilter){
95279                         node = nodeFilter(node);
95280                         if(node){
95281                                 if(typeof node == 'string'){
95282                                         buf.push(node);
95283                                         return;
95284                                 }
95285                         }else{
95286                                 return;
95287                         }
95288                         //buf.sort.apply(attrs, attributeSorter);
95289                 }
95290                 switch(node.nodeType){
95291                 case ELEMENT_NODE:
95292                         if (!visibleNamespaces) { visibleNamespaces = []; }
95293                         var startVisibleNamespaces = visibleNamespaces.length;
95294                         var attrs = node.attributes;
95295                         var len = attrs.length;
95296                         var child = node.firstChild;
95297                         var nodeName = node.tagName;
95298                         
95299                         isHTML =  (htmlns === node.namespaceURI) ||isHTML; 
95300                         buf.push('<',nodeName);
95301                         
95302                         
95303                         
95304                         for(var i=0;i<len;i++){
95305                                 // add namespaces for attributes
95306                                 var attr = attrs.item(i);
95307                                 if (attr.prefix == 'xmlns') {
95308                                         visibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });
95309                                 }else if(attr.nodeName == 'xmlns'){
95310                                         visibleNamespaces.push({ prefix: '', namespace: attr.value });
95311                                 }
95312                         }
95313                         for(var i=0;i<len;i++){
95314                                 var attr = attrs.item(i);
95315                                 if (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {
95316                                         var prefix = attr.prefix||'';
95317                                         var uri = attr.namespaceURI;
95318                                         var ns = prefix ? ' xmlns:' + prefix : " xmlns";
95319                                         buf.push(ns, '="' , uri , '"');
95320                                         visibleNamespaces.push({ prefix: prefix, namespace:uri });
95321                                 }
95322                                 serializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);
95323                         }
95324                         // add namespace for current node               
95325                         if (needNamespaceDefine(node,isHTML, visibleNamespaces)) {
95326                                 var prefix = node.prefix||'';
95327                                 var uri = node.namespaceURI;
95328                                 var ns = prefix ? ' xmlns:' + prefix : " xmlns";
95329                                 buf.push(ns, '="' , uri , '"');
95330                                 visibleNamespaces.push({ prefix: prefix, namespace:uri });
95331                         }
95332                         
95333                         if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
95334                                 buf.push('>');
95335                                 //if is cdata child node
95336                                 if(isHTML && /^script$/i.test(nodeName)){
95337                                         while(child){
95338                                                 if(child.data){
95339                                                         buf.push(child.data);
95340                                                 }else{
95341                                                         serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
95342                                                 }
95343                                                 child = child.nextSibling;
95344                                         }
95345                                 }else
95346                                 {
95347                                         while(child){
95348                                                 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
95349                                                 child = child.nextSibling;
95350                                         }
95351                                 }
95352                                 buf.push('</',nodeName,'>');
95353                         }else{
95354                                 buf.push('/>');
95355                         }
95356                         // remove added visible namespaces
95357                         //visibleNamespaces.length = startVisibleNamespaces;
95358                         return;
95359                 case DOCUMENT_NODE:
95360                 case DOCUMENT_FRAGMENT_NODE:
95361                         var child = node.firstChild;
95362                         while(child){
95363                                 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
95364                                 child = child.nextSibling;
95365                         }
95366                         return;
95367                 case ATTRIBUTE_NODE:
95368                         return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
95369                 case TEXT_NODE:
95370                         return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
95371                 case CDATA_SECTION_NODE:
95372                         return buf.push( '<![CDATA[',node.data,']]>');
95373                 case COMMENT_NODE:
95374                         return buf.push( "<!--",node.data,"-->");
95375                 case DOCUMENT_TYPE_NODE:
95376                         var pubid = node.publicId;
95377                         var sysid = node.systemId;
95378                         buf.push('<!DOCTYPE ',node.name);
95379                         if(pubid){
95380                                 buf.push(' PUBLIC "',pubid);
95381                                 if (sysid && sysid!='.') {
95382                                         buf.push( '" "',sysid);
95383                                 }
95384                                 buf.push('">');
95385                         }else if(sysid && sysid!='.'){
95386                                 buf.push(' SYSTEM "',sysid,'">');
95387                         }else{
95388                                 var sub = node.internalSubset;
95389                                 if(sub){
95390                                         buf.push(" [",sub,"]");
95391                                 }
95392                                 buf.push(">");
95393                         }
95394                         return;
95395                 case PROCESSING_INSTRUCTION_NODE:
95396                         return buf.push( "<?",node.target," ",node.data,"?>");
95397                 case ENTITY_REFERENCE_NODE:
95398                         return buf.push( '&',node.nodeName,';');
95399                 //case ENTITY_NODE:
95400                 //case NOTATION_NODE:
95401                 default:
95402                         buf.push('??',node.nodeName);
95403                 }
95404         }
95405         function importNode(doc,node,deep){
95406                 var node2;
95407                 switch (node.nodeType) {
95408                 case ELEMENT_NODE:
95409                         node2 = node.cloneNode(false);
95410                         node2.ownerDocument = doc;
95411                         //var attrs = node2.attributes;
95412                         //var len = attrs.length;
95413                         //for(var i=0;i<len;i++){
95414                                 //node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));
95415                         //}
95416                 case DOCUMENT_FRAGMENT_NODE:
95417                         break;
95418                 case ATTRIBUTE_NODE:
95419                         deep = true;
95420                         break;
95421                 //case ENTITY_REFERENCE_NODE:
95422                 //case PROCESSING_INSTRUCTION_NODE:
95423                 ////case TEXT_NODE:
95424                 //case CDATA_SECTION_NODE:
95425                 //case COMMENT_NODE:
95426                 //      deep = false;
95427                 //      break;
95428                 //case DOCUMENT_NODE:
95429                 //case DOCUMENT_TYPE_NODE:
95430                 //cannot be imported.
95431                 //case ENTITY_NODE:
95432                 //case NOTATION_NODE:
95433                 //can not hit in level3
95434                 //default:throw e;
95435                 }
95436                 if(!node2){
95437                         node2 = node.cloneNode(false);//false
95438                 }
95439                 node2.ownerDocument = doc;
95440                 node2.parentNode = null;
95441                 if(deep){
95442                         var child = node.firstChild;
95443                         while(child){
95444                                 node2.appendChild(importNode(doc,child,deep));
95445                                 child = child.nextSibling;
95446                         }
95447                 }
95448                 return node2;
95449         }
95450         //
95451         //var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,
95452         //                                      attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};
95453         function cloneNode(doc,node,deep){
95454                 var node2 = new node.constructor();
95455                 for(var n in node){
95456                         var v = node[n];
95457                         if(typeof v != 'object' ){
95458                                 if(v != node2[n]){
95459                                         node2[n] = v;
95460                                 }
95461                         }
95462                 }
95463                 if(node.childNodes){
95464                         node2.childNodes = new NodeList();
95465                 }
95466                 node2.ownerDocument = doc;
95467                 switch (node2.nodeType) {
95468                 case ELEMENT_NODE:
95469                         var attrs       = node.attributes;
95470                         var attrs2      = node2.attributes = new NamedNodeMap();
95471                         var len = attrs.length;
95472                         attrs2._ownerElement = node2;
95473                         for(var i=0;i<len;i++){
95474                                 node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
95475                         }
95476                         break;  case ATTRIBUTE_NODE:
95477                         deep = true;
95478                 }
95479                 if(deep){
95480                         var child = node.firstChild;
95481                         while(child){
95482                                 node2.appendChild(cloneNode(doc,child,deep));
95483                                 child = child.nextSibling;
95484                         }
95485                 }
95486                 return node2;
95487         }
95488
95489         function __set__(object,key,value){
95490                 object[key] = value;
95491         }
95492         //do dynamic
95493         try{
95494                 if(Object.defineProperty){
95495                         Object.defineProperty(LiveNodeList.prototype,'length',{
95496                                 get:function(){
95497                                         _updateLiveList(this);
95498                                         return this.$$length;
95499                                 }
95500                         });
95501                         Object.defineProperty(Node$3.prototype,'textContent',{
95502                                 get:function(){
95503                                         return getTextContent(this);
95504                                 },
95505                                 set:function(data){
95506                                         switch(this.nodeType){
95507                                         case ELEMENT_NODE:
95508                                         case DOCUMENT_FRAGMENT_NODE:
95509                                                 while(this.firstChild){
95510                                                         this.removeChild(this.firstChild);
95511                                                 }
95512                                                 if(data || String(data)){
95513                                                         this.appendChild(this.ownerDocument.createTextNode(data));
95514                                                 }
95515                                                 break;
95516                                         default:
95517                                                 //TODO:
95518                                                 this.data = data;
95519                                                 this.value = data;
95520                                                 this.nodeValue = data;
95521                                         }
95522                                 }
95523                         });
95524                         
95525                         function getTextContent(node){
95526                                 switch(node.nodeType){
95527                                 case ELEMENT_NODE:
95528                                 case DOCUMENT_FRAGMENT_NODE:
95529                                         var buf = [];
95530                                         node = node.firstChild;
95531                                         while(node){
95532                                                 if(node.nodeType!==7 && node.nodeType !==8){
95533                                                         buf.push(getTextContent(node));
95534                                                 }
95535                                                 node = node.nextSibling;
95536                                         }
95537                                         return buf.join('');
95538                                 default:
95539                                         return node.nodeValue;
95540                                 }
95541                         }
95542                         __set__ = function(object,key,value){
95543                                 //console.log(value)
95544                                 object['$$'+key] = value;
95545                         };
95546                 }
95547         }catch(e){//ie8
95548         }
95549
95550         //if(typeof require == 'function'){
95551                 var DOMImplementation_1 = DOMImplementation;
95552                 var XMLSerializer_1 = XMLSerializer$1;
95553         //}
95554
95555         var dom = {
95556                 DOMImplementation: DOMImplementation_1,
95557                 XMLSerializer: XMLSerializer_1
95558         };
95559
95560         var domParser = createCommonjsModule(function (module, exports) {
95561         function DOMParser(options){
95562                 this.options = options ||{locator:{}};
95563                 
95564         }
95565         DOMParser.prototype.parseFromString = function(source,mimeType){
95566                 var options = this.options;
95567                 var sax =  new XMLReader();
95568                 var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
95569                 var errorHandler = options.errorHandler;
95570                 var locator = options.locator;
95571                 var defaultNSMap = options.xmlns||{};
95572                 var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"};
95573                 if(locator){
95574                         domBuilder.setDocumentLocator(locator);
95575                 }
95576                 
95577                 sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
95578                 sax.domBuilder = options.domBuilder || domBuilder;
95579                 if(/\/x?html?$/.test(mimeType)){
95580                         entityMap.nbsp = '\xa0';
95581                         entityMap.copy = '\xa9';
95582                         defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
95583                 }
95584                 defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';
95585                 if(source){
95586                         sax.parse(source,defaultNSMap,entityMap);
95587                 }else{
95588                         sax.errorHandler.error("invalid doc source");
95589                 }
95590                 return domBuilder.doc;
95591         };
95592         function buildErrorHandler(errorImpl,domBuilder,locator){
95593                 if(!errorImpl){
95594                         if(domBuilder instanceof DOMHandler){
95595                                 return domBuilder;
95596                         }
95597                         errorImpl = domBuilder ;
95598                 }
95599                 var errorHandler = {};
95600                 var isCallback = errorImpl instanceof Function;
95601                 locator = locator||{};
95602                 function build(key){
95603                         var fn = errorImpl[key];
95604                         if(!fn && isCallback){
95605                                 fn = errorImpl.length == 2?function(msg){errorImpl(key,msg);}:errorImpl;
95606                         }
95607                         errorHandler[key] = fn && function(msg){
95608                                 fn('[xmldom '+key+']\t'+msg+_locator(locator));
95609                         }||function(){};
95610                 }
95611                 build('warning');
95612                 build('error');
95613                 build('fatalError');
95614                 return errorHandler;
95615         }
95616
95617         //console.log('#\n\n\n\n\n\n\n####')
95618         /**
95619          * +ContentHandler+ErrorHandler
95620          * +LexicalHandler+EntityResolver2
95621          * -DeclHandler-DTDHandler 
95622          * 
95623          * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
95624          * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
95625          * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
95626          */
95627         function DOMHandler() {
95628             this.cdata = false;
95629         }
95630         function position(locator,node){
95631                 node.lineNumber = locator.lineNumber;
95632                 node.columnNumber = locator.columnNumber;
95633         }
95634         /**
95635          * @see org.xml.sax.ContentHandler#startDocument
95636          * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
95637          */ 
95638         DOMHandler.prototype = {
95639                 startDocument : function() {
95640                 this.doc = new DOMImplementation().createDocument(null, null, null);
95641                 if (this.locator) {
95642                         this.doc.documentURI = this.locator.systemId;
95643                 }
95644                 },
95645                 startElement:function(namespaceURI, localName, qName, attrs) {
95646                         var doc = this.doc;
95647                     var el = doc.createElementNS(namespaceURI, qName||localName);
95648                     var len = attrs.length;
95649                     appendElement(this, el);
95650                     this.currentElement = el;
95651                     
95652                         this.locator && position(this.locator,el);
95653                     for (var i = 0 ; i < len; i++) {
95654                         var namespaceURI = attrs.getURI(i);
95655                         var value = attrs.getValue(i);
95656                         var qName = attrs.getQName(i);
95657                                 var attr = doc.createAttributeNS(namespaceURI, qName);
95658                                 this.locator &&position(attrs.getLocator(i),attr);
95659                                 attr.value = attr.nodeValue = value;
95660                                 el.setAttributeNode(attr);
95661                     }
95662                 },
95663                 endElement:function(namespaceURI, localName, qName) {
95664                         var current = this.currentElement;
95665                         var tagName = current.tagName;
95666                         this.currentElement = current.parentNode;
95667                 },
95668                 startPrefixMapping:function(prefix, uri) {
95669                 },
95670                 endPrefixMapping:function(prefix) {
95671                 },
95672                 processingInstruction:function(target, data) {
95673                     var ins = this.doc.createProcessingInstruction(target, data);
95674                     this.locator && position(this.locator,ins);
95675                     appendElement(this, ins);
95676                 },
95677                 ignorableWhitespace:function(ch, start, length) {
95678                 },
95679                 characters:function(chars, start, length) {
95680                         chars = _toString.apply(this,arguments);
95681                         //console.log(chars)
95682                         if(chars){
95683                                 if (this.cdata) {
95684                                         var charNode = this.doc.createCDATASection(chars);
95685                                 } else {
95686                                         var charNode = this.doc.createTextNode(chars);
95687                                 }
95688                                 if(this.currentElement){
95689                                         this.currentElement.appendChild(charNode);
95690                                 }else if(/^\s*$/.test(chars)){
95691                                         this.doc.appendChild(charNode);
95692                                         //process xml
95693                                 }
95694                                 this.locator && position(this.locator,charNode);
95695                         }
95696                 },
95697                 skippedEntity:function(name) {
95698                 },
95699                 endDocument:function() {
95700                         this.doc.normalize();
95701                 },
95702                 setDocumentLocator:function (locator) {
95703                     if(this.locator = locator){// && !('lineNumber' in locator)){
95704                         locator.lineNumber = 0;
95705                     }
95706                 },
95707                 //LexicalHandler
95708                 comment:function(chars, start, length) {
95709                         chars = _toString.apply(this,arguments);
95710                     var comm = this.doc.createComment(chars);
95711                     this.locator && position(this.locator,comm);
95712                     appendElement(this, comm);
95713                 },
95714                 
95715                 startCDATA:function() {
95716                     //used in characters() methods
95717                     this.cdata = true;
95718                 },
95719                 endCDATA:function() {
95720                     this.cdata = false;
95721                 },
95722                 
95723                 startDTD:function(name, publicId, systemId) {
95724                         var impl = this.doc.implementation;
95725                     if (impl && impl.createDocumentType) {
95726                         var dt = impl.createDocumentType(name, publicId, systemId);
95727                         this.locator && position(this.locator,dt);
95728                         appendElement(this, dt);
95729                     }
95730                 },
95731                 /**
95732                  * @see org.xml.sax.ErrorHandler
95733                  * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
95734                  */
95735                 warning:function(error) {
95736                         console.warn('[xmldom warning]\t'+error,_locator(this.locator));
95737                 },
95738                 error:function(error) {
95739                         console.error('[xmldom error]\t'+error,_locator(this.locator));
95740                 },
95741                 fatalError:function(error) {
95742                         console.error('[xmldom fatalError]\t'+error,_locator(this.locator));
95743                     throw error;
95744                 }
95745         };
95746         function _locator(l){
95747                 if(l){
95748                         return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
95749                 }
95750         }
95751         function _toString(chars,start,length){
95752                 if(typeof chars == 'string'){
95753                         return chars.substr(start,length)
95754                 }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
95755                         if(chars.length >= start+length || start){
95756                                 return new java.lang.String(chars,start,length)+'';
95757                         }
95758                         return chars;
95759                 }
95760         }
95761
95762         /*
95763          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
95764          * used method of org.xml.sax.ext.LexicalHandler:
95765          *  #comment(chars, start, length)
95766          *  #startCDATA()
95767          *  #endCDATA()
95768          *  #startDTD(name, publicId, systemId)
95769          *
95770          *
95771          * IGNORED method of org.xml.sax.ext.LexicalHandler:
95772          *  #endDTD()
95773          *  #startEntity(name)
95774          *  #endEntity(name)
95775          *
95776          *
95777          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
95778          * IGNORED method of org.xml.sax.ext.DeclHandler
95779          *      #attributeDecl(eName, aName, type, mode, value)
95780          *  #elementDecl(name, model)
95781          *  #externalEntityDecl(name, publicId, systemId)
95782          *  #internalEntityDecl(name, value)
95783          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
95784          * IGNORED method of org.xml.sax.EntityResolver2
95785          *  #resolveEntity(String name,String publicId,String baseURI,String systemId)
95786          *  #resolveEntity(publicId, systemId)
95787          *  #getExternalSubset(name, baseURI)
95788          * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
95789          * IGNORED method of org.xml.sax.DTDHandler
95790          *  #notationDecl(name, publicId, systemId) {};
95791          *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};
95792          */
95793         "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
95794                 DOMHandler.prototype[key] = function(){return null};
95795         });
95796
95797         /* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */
95798         function appendElement (hander,node) {
95799             if (!hander.currentElement) {
95800                 hander.doc.appendChild(node);
95801             } else {
95802                 hander.currentElement.appendChild(node);
95803             }
95804         }//appendChild and setAttributeNS are preformance key
95805
95806         //if(typeof require == 'function'){
95807                 var XMLReader = sax.XMLReader;
95808                 var DOMImplementation = exports.DOMImplementation = dom.DOMImplementation;
95809                 exports.XMLSerializer = dom.XMLSerializer ;
95810                 exports.DOMParser = DOMParser;
95811         //}
95812         });
95813         var domParser_1 = domParser.DOMImplementation;
95814         var domParser_2 = domParser.XMLSerializer;
95815         var domParser_3 = domParser.DOMParser;
95816
95817         var togeojson = createCommonjsModule(function (module, exports) {
95818         var toGeoJSON = (function() {
95819
95820             var removeSpace = /\s*/g,
95821                 trimSpace = /^\s*|\s*$/g,
95822                 splitSpace = /\s+/;
95823             // generate a short, numeric hash of a string
95824             function okhash(x) {
95825                 if (!x || !x.length) { return 0; }
95826                 for (var i = 0, h = 0; i < x.length; i++) {
95827                     h = ((h << 5) - h) + x.charCodeAt(i) | 0;
95828                 } return h;
95829             }
95830             // all Y children of X
95831             function get(x, y) { return x.getElementsByTagName(y); }
95832             function attr(x, y) { return x.getAttribute(y); }
95833             function attrf(x, y) { return parseFloat(attr(x, y)); }
95834             // one Y child of X, if any, otherwise null
95835             function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; }
95836             // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize
95837             function norm(el) { if (el.normalize) { el.normalize(); } return el; }
95838             // cast array x into numbers
95839             function numarray(x) {
95840                 for (var j = 0, o = []; j < x.length; j++) { o[j] = parseFloat(x[j]); }
95841                 return o;
95842             }
95843             // get the content of a text node, if any
95844             function nodeVal(x) {
95845                 if (x) { norm(x); }
95846                 return (x && x.textContent) || '';
95847             }
95848             // get the contents of multiple text nodes, if present
95849             function getMulti(x, ys) {
95850                 var o = {}, n, k;
95851                 for (k = 0; k < ys.length; k++) {
95852                     n = get1(x, ys[k]);
95853                     if (n) { o[ys[k]] = nodeVal(n); }
95854                 }
95855                 return o;
95856             }
95857             // add properties of Y to X, overwriting if present in both
95858             function extend(x, y) { for (var k in y) { x[k] = y[k]; } }
95859             // get one coordinate from a coordinate array, if any
95860             function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); }
95861             // get all coordinates from a coordinate array as [[],[]]
95862             function coord(v) {
95863                 var coords = v.replace(trimSpace, '').split(splitSpace),
95864                     o = [];
95865                 for (var i = 0; i < coords.length; i++) {
95866                     o.push(coord1(coords[i]));
95867                 }
95868                 return o;
95869             }
95870             function coordPair(x) {
95871                 var ll = [attrf(x, 'lon'), attrf(x, 'lat')],
95872                     ele = get1(x, 'ele'),
95873                     // handle namespaced attribute in browser
95874                     heartRate = get1(x, 'gpxtpx:hr') || get1(x, 'hr'),
95875                     time = get1(x, 'time'),
95876                     e;
95877                 if (ele) {
95878                     e = parseFloat(nodeVal(ele));
95879                     if (!isNaN(e)) {
95880                         ll.push(e);
95881                     }
95882                 }
95883                 return {
95884                     coordinates: ll,
95885                     time: time ? nodeVal(time) : null,
95886                     heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null
95887                 };
95888             }
95889
95890             // create a new feature collection parent object
95891             function fc() {
95892                 return {
95893                     type: 'FeatureCollection',
95894                     features: []
95895                 };
95896             }
95897
95898             var serializer;
95899             if (typeof XMLSerializer !== 'undefined') {
95900                 /* istanbul ignore next */
95901                 serializer = new XMLSerializer();
95902             // only require xmldom in a node environment
95903             } else if ( typeof process === 'object' && !process.browser) {
95904                 serializer = new (domParser.XMLSerializer)();
95905             }
95906             function xml2str(str) {
95907                 // IE9 will create a new XMLSerializer but it'll crash immediately.
95908                 // This line is ignored because we don't run coverage tests in IE9
95909                 /* istanbul ignore next */
95910                 if (str.xml !== undefined) { return str.xml; }
95911                 return serializer.serializeToString(str);
95912             }
95913
95914             var t = {
95915                 kml: function(doc) {
95916
95917                     var gj = fc(),
95918                         // styleindex keeps track of hashed styles in order to match features
95919                         styleIndex = {}, styleByHash = {},
95920                         // stylemapindex keeps track of style maps to expose in properties
95921                         styleMapIndex = {},
95922                         // atomic geospatial types supported by KML - MultiGeometry is
95923                         // handled separately
95924                         geotypes = ['Polygon', 'LineString', 'Point', 'Track', 'gx:Track'],
95925                         // all root placemarks in the file
95926                         placemarks = get(doc, 'Placemark'),
95927                         styles = get(doc, 'Style'),
95928                         styleMaps = get(doc, 'StyleMap');
95929
95930                     for (var k = 0; k < styles.length; k++) {
95931                         var hash = okhash(xml2str(styles[k])).toString(16);
95932                         styleIndex['#' + attr(styles[k], 'id')] = hash;
95933                         styleByHash[hash] = styles[k];
95934                     }
95935                     for (var l = 0; l < styleMaps.length; l++) {
95936                         styleIndex['#' + attr(styleMaps[l], 'id')] = okhash(xml2str(styleMaps[l])).toString(16);
95937                         var pairs = get(styleMaps[l], 'Pair');
95938                         var pairsMap = {};
95939                         for (var m = 0; m < pairs.length; m++) {
95940                             pairsMap[nodeVal(get1(pairs[m], 'key'))] = nodeVal(get1(pairs[m], 'styleUrl'));
95941                         }
95942                         styleMapIndex['#' + attr(styleMaps[l], 'id')] = pairsMap;
95943
95944                     }
95945                     for (var j = 0; j < placemarks.length; j++) {
95946                         gj.features = gj.features.concat(getPlacemark(placemarks[j]));
95947                     }
95948                     function kmlColor(v) {
95949                         var color, opacity;
95950                         v = v || '';
95951                         if (v.substr(0, 1) === '#') { v = v.substr(1); }
95952                         if (v.length === 6 || v.length === 3) { color = v; }
95953                         if (v.length === 8) {
95954                             opacity = parseInt(v.substr(0, 2), 16) / 255;
95955                             color = '#' + v.substr(6, 2) +
95956                                 v.substr(4, 2) +
95957                                 v.substr(2, 2);
95958                         }
95959                         return [color, isNaN(opacity) ? undefined : opacity];
95960                     }
95961                     function gxCoord(v) { return numarray(v.split(' ')); }
95962                     function gxCoords(root) {
95963                         var elems = get(root, 'coord'), coords = [], times = [];
95964                         if (elems.length === 0) { elems = get(root, 'gx:coord'); }
95965                         for (var i = 0; i < elems.length; i++) { coords.push(gxCoord(nodeVal(elems[i]))); }
95966                         var timeElems = get(root, 'when');
95967                         for (var j = 0; j < timeElems.length; j++) { times.push(nodeVal(timeElems[j])); }
95968                         return {
95969                             coords: coords,
95970                             times: times
95971                         };
95972                     }
95973                     function getGeometry(root) {
95974                         var geomNode, geomNodes, i, j, k, geoms = [], coordTimes = [];
95975                         if (get1(root, 'MultiGeometry')) { return getGeometry(get1(root, 'MultiGeometry')); }
95976                         if (get1(root, 'MultiTrack')) { return getGeometry(get1(root, 'MultiTrack')); }
95977                         if (get1(root, 'gx:MultiTrack')) { return getGeometry(get1(root, 'gx:MultiTrack')); }
95978                         for (i = 0; i < geotypes.length; i++) {
95979                             geomNodes = get(root, geotypes[i]);
95980                             if (geomNodes) {
95981                                 for (j = 0; j < geomNodes.length; j++) {
95982                                     geomNode = geomNodes[j];
95983                                     if (geotypes[i] === 'Point') {
95984                                         geoms.push({
95985                                             type: 'Point',
95986                                             coordinates: coord1(nodeVal(get1(geomNode, 'coordinates')))
95987                                         });
95988                                     } else if (geotypes[i] === 'LineString') {
95989                                         geoms.push({
95990                                             type: 'LineString',
95991                                             coordinates: coord(nodeVal(get1(geomNode, 'coordinates')))
95992                                         });
95993                                     } else if (geotypes[i] === 'Polygon') {
95994                                         var rings = get(geomNode, 'LinearRing'),
95995                                             coords = [];
95996                                         for (k = 0; k < rings.length; k++) {
95997                                             coords.push(coord(nodeVal(get1(rings[k], 'coordinates'))));
95998                                         }
95999                                         geoms.push({
96000                                             type: 'Polygon',
96001                                             coordinates: coords
96002                                         });
96003                                     } else if (geotypes[i] === 'Track' ||
96004                                         geotypes[i] === 'gx:Track') {
96005                                         var track = gxCoords(geomNode);
96006                                         geoms.push({
96007                                             type: 'LineString',
96008                                             coordinates: track.coords
96009                                         });
96010                                         if (track.times.length) { coordTimes.push(track.times); }
96011                                     }
96012                                 }
96013                             }
96014                         }
96015                         return {
96016                             geoms: geoms,
96017                             coordTimes: coordTimes
96018                         };
96019                     }
96020                     function getPlacemark(root) {
96021                         var geomsAndTimes = getGeometry(root), i, properties = {},
96022                             name = nodeVal(get1(root, 'name')),
96023                             address = nodeVal(get1(root, 'address')),
96024                             styleUrl = nodeVal(get1(root, 'styleUrl')),
96025                             description = nodeVal(get1(root, 'description')),
96026                             timeSpan = get1(root, 'TimeSpan'),
96027                             timeStamp = get1(root, 'TimeStamp'),
96028                             extendedData = get1(root, 'ExtendedData'),
96029                             lineStyle = get1(root, 'LineStyle'),
96030                             polyStyle = get1(root, 'PolyStyle'),
96031                             visibility = get1(root, 'visibility');
96032
96033                         if (!geomsAndTimes.geoms.length) { return []; }
96034                         if (name) { properties.name = name; }
96035                         if (address) { properties.address = address; }
96036                         if (styleUrl) {
96037                             if (styleUrl[0] !== '#') {
96038                                 styleUrl = '#' + styleUrl;
96039                             }
96040
96041                             properties.styleUrl = styleUrl;
96042                             if (styleIndex[styleUrl]) {
96043                                 properties.styleHash = styleIndex[styleUrl];
96044                             }
96045                             if (styleMapIndex[styleUrl]) {
96046                                 properties.styleMapHash = styleMapIndex[styleUrl];
96047                                 properties.styleHash = styleIndex[styleMapIndex[styleUrl].normal];
96048                             }
96049                             // Try to populate the lineStyle or polyStyle since we got the style hash
96050                             var style = styleByHash[properties.styleHash];
96051                             if (style) {
96052                                 if (!lineStyle) { lineStyle = get1(style, 'LineStyle'); }
96053                                 if (!polyStyle) { polyStyle = get1(style, 'PolyStyle'); }
96054                             }
96055                         }
96056                         if (description) { properties.description = description; }
96057                         if (timeSpan) {
96058                             var begin = nodeVal(get1(timeSpan, 'begin'));
96059                             var end = nodeVal(get1(timeSpan, 'end'));
96060                             properties.timespan = { begin: begin, end: end };
96061                         }
96062                         if (timeStamp) {
96063                             properties.timestamp = nodeVal(get1(timeStamp, 'when'));
96064                         }
96065                         if (lineStyle) {
96066                             var linestyles = kmlColor(nodeVal(get1(lineStyle, 'color'))),
96067                                 color = linestyles[0],
96068                                 opacity = linestyles[1],
96069                                 width = parseFloat(nodeVal(get1(lineStyle, 'width')));
96070                             if (color) { properties.stroke = color; }
96071                             if (!isNaN(opacity)) { properties['stroke-opacity'] = opacity; }
96072                             if (!isNaN(width)) { properties['stroke-width'] = width; }
96073                         }
96074                         if (polyStyle) {
96075                             var polystyles = kmlColor(nodeVal(get1(polyStyle, 'color'))),
96076                                 pcolor = polystyles[0],
96077                                 popacity = polystyles[1],
96078                                 fill = nodeVal(get1(polyStyle, 'fill')),
96079                                 outline = nodeVal(get1(polyStyle, 'outline'));
96080                             if (pcolor) { properties.fill = pcolor; }
96081                             if (!isNaN(popacity)) { properties['fill-opacity'] = popacity; }
96082                             if (fill) { properties['fill-opacity'] = fill === '1' ? properties['fill-opacity'] || 1 : 0; }
96083                             if (outline) { properties['stroke-opacity'] = outline === '1' ? properties['stroke-opacity'] || 1 : 0; }
96084                         }
96085                         if (extendedData) {
96086                             var datas = get(extendedData, 'Data'),
96087                                 simpleDatas = get(extendedData, 'SimpleData');
96088
96089                             for (i = 0; i < datas.length; i++) {
96090                                 properties[datas[i].getAttribute('name')] = nodeVal(get1(datas[i], 'value'));
96091                             }
96092                             for (i = 0; i < simpleDatas.length; i++) {
96093                                 properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]);
96094                             }
96095                         }
96096                         if (visibility) {
96097                             properties.visibility = nodeVal(visibility);
96098                         }
96099                         if (geomsAndTimes.coordTimes.length) {
96100                             properties.coordTimes = (geomsAndTimes.coordTimes.length === 1) ?
96101                                 geomsAndTimes.coordTimes[0] : geomsAndTimes.coordTimes;
96102                         }
96103                         var feature = {
96104                             type: 'Feature',
96105                             geometry: (geomsAndTimes.geoms.length === 1) ? geomsAndTimes.geoms[0] : {
96106                                 type: 'GeometryCollection',
96107                                 geometries: geomsAndTimes.geoms
96108                             },
96109                             properties: properties
96110                         };
96111                         if (attr(root, 'id')) { feature.id = attr(root, 'id'); }
96112                         return [feature];
96113                     }
96114                     return gj;
96115                 },
96116                 gpx: function(doc) {
96117                     var i,
96118                         tracks = get(doc, 'trk'),
96119                         routes = get(doc, 'rte'),
96120                         waypoints = get(doc, 'wpt'),
96121                         // a feature collection
96122                         gj = fc(),
96123                         feature;
96124                     for (i = 0; i < tracks.length; i++) {
96125                         feature = getTrack(tracks[i]);
96126                         if (feature) { gj.features.push(feature); }
96127                     }
96128                     for (i = 0; i < routes.length; i++) {
96129                         feature = getRoute(routes[i]);
96130                         if (feature) { gj.features.push(feature); }
96131                     }
96132                     for (i = 0; i < waypoints.length; i++) {
96133                         gj.features.push(getPoint(waypoints[i]));
96134                     }
96135                     function getPoints(node, pointname) {
96136                         var pts = get(node, pointname),
96137                             line = [],
96138                             times = [],
96139                             heartRates = [],
96140                             l = pts.length;
96141                         if (l < 2) { return {}; }  // Invalid line in GeoJSON
96142                         for (var i = 0; i < l; i++) {
96143                             var c = coordPair(pts[i]);
96144                             line.push(c.coordinates);
96145                             if (c.time) { times.push(c.time); }
96146                             if (c.heartRate) { heartRates.push(c.heartRate); }
96147                         }
96148                         return {
96149                             line: line,
96150                             times: times,
96151                             heartRates: heartRates
96152                         };
96153                     }
96154                     function getTrack(node) {
96155                         var segments = get(node, 'trkseg'),
96156                             track = [],
96157                             times = [],
96158                             heartRates = [],
96159                             line;
96160                         for (var i = 0; i < segments.length; i++) {
96161                             line = getPoints(segments[i], 'trkpt');
96162                             if (line) {
96163                                 if (line.line) { track.push(line.line); }
96164                                 if (line.times && line.times.length) { times.push(line.times); }
96165                                 if (line.heartRates && line.heartRates.length) { heartRates.push(line.heartRates); }
96166                             }
96167                         }
96168                         if (track.length === 0) { return; }
96169                         var properties = getProperties(node);
96170                         extend(properties, getLineStyle(get1(node, 'extensions')));
96171                         if (times.length) { properties.coordTimes = track.length === 1 ? times[0] : times; }
96172                         if (heartRates.length) { properties.heartRates = track.length === 1 ? heartRates[0] : heartRates; }
96173                         return {
96174                             type: 'Feature',
96175                             properties: properties,
96176                             geometry: {
96177                                 type: track.length === 1 ? 'LineString' : 'MultiLineString',
96178                                 coordinates: track.length === 1 ? track[0] : track
96179                             }
96180                         };
96181                     }
96182                     function getRoute(node) {
96183                         var line = getPoints(node, 'rtept');
96184                         if (!line.line) { return; }
96185                         var prop = getProperties(node);
96186                         extend(prop, getLineStyle(get1(node, 'extensions')));
96187                         var routeObj = {
96188                             type: 'Feature',
96189                             properties: prop,
96190                             geometry: {
96191                                 type: 'LineString',
96192                                 coordinates: line.line
96193                             }
96194                         };
96195                         return routeObj;
96196                     }
96197                     function getPoint(node) {
96198                         var prop = getProperties(node);
96199                         extend(prop, getMulti(node, ['sym']));
96200                         return {
96201                             type: 'Feature',
96202                             properties: prop,
96203                             geometry: {
96204                                 type: 'Point',
96205                                 coordinates: coordPair(node).coordinates
96206                             }
96207                         };
96208                     }
96209                     function getLineStyle(extensions) {
96210                         var style = {};
96211                         if (extensions) {
96212                             var lineStyle = get1(extensions, 'line');
96213                             if (lineStyle) {
96214                                 var color = nodeVal(get1(lineStyle, 'color')),
96215                                     opacity = parseFloat(nodeVal(get1(lineStyle, 'opacity'))),
96216                                     width = parseFloat(nodeVal(get1(lineStyle, 'width')));
96217                                 if (color) { style.stroke = color; }
96218                                 if (!isNaN(opacity)) { style['stroke-opacity'] = opacity; }
96219                                 // GPX width is in mm, convert to px with 96 px per inch
96220                                 if (!isNaN(width)) { style['stroke-width'] = width * 96 / 25.4; }
96221                             }
96222                         }
96223                         return style;
96224                     }
96225                     function getProperties(node) {
96226                         var prop = getMulti(node, ['name', 'cmt', 'desc', 'type', 'time', 'keywords']),
96227                             links = get(node, 'link');
96228                         if (links.length) { prop.links = []; }
96229                         for (var i = 0, link; i < links.length; i++) {
96230                             link = { href: attr(links[i], 'href') };
96231                             extend(link, getMulti(links[i], ['text', 'type']));
96232                             prop.links.push(link);
96233                         }
96234                         return prop;
96235                     }
96236                     return gj;
96237                 }
96238             };
96239             return t;
96240         })();
96241
96242         { module.exports = toGeoJSON; }
96243         });
96244
96245         var _initialized = false;
96246         var _enabled = false;
96247         var _geojson;
96248
96249
96250         function svgData(projection, context, dispatch) {
96251             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
96252             var _showLabels = true;
96253             var detected = utilDetect();
96254             var layer = d3_select(null);
96255             var _vtService;
96256             var _fileList;
96257             var _template;
96258             var _src;
96259
96260
96261             function init() {
96262                 if (_initialized) { return; }  // run once
96263
96264                 _geojson = {};
96265                 _enabled = true;
96266
96267                 function over() {
96268                     event.stopPropagation();
96269                     event.preventDefault();
96270                     event.dataTransfer.dropEffect = 'copy';
96271                 }
96272
96273                 d3_select('body')
96274                     .attr('dropzone', 'copy')
96275                     .on('drop.svgData', function() {
96276                         event.stopPropagation();
96277                         event.preventDefault();
96278                         if (!detected.filedrop) { return; }
96279                         drawData.fileList(event.dataTransfer.files);
96280                     })
96281                     .on('dragenter.svgData', over)
96282                     .on('dragexit.svgData', over)
96283                     .on('dragover.svgData', over);
96284
96285                 _initialized = true;
96286             }
96287
96288
96289             function getService() {
96290                 if (services$1.vectorTile && !_vtService) {
96291                     _vtService = services$1.vectorTile;
96292                     _vtService.event.on('loadedData', throttledRedraw);
96293                 } else if (!services$1.vectorTile && _vtService) {
96294                     _vtService = null;
96295                 }
96296
96297                 return _vtService;
96298             }
96299
96300
96301             function showLayer() {
96302                 layerOn();
96303
96304                 layer
96305                     .style('opacity', 0)
96306                     .transition()
96307                     .duration(250)
96308                     .style('opacity', 1)
96309                     .on('end', function () { dispatch.call('change'); });
96310             }
96311
96312
96313             function hideLayer() {
96314                 throttledRedraw.cancel();
96315
96316                 layer
96317                     .transition()
96318                     .duration(250)
96319                     .style('opacity', 0)
96320                     .on('end', layerOff);
96321             }
96322
96323
96324             function layerOn() {
96325                 layer.style('display', 'block');
96326             }
96327
96328
96329             function layerOff() {
96330                 layer.selectAll('.viewfield-group').remove();
96331                 layer.style('display', 'none');
96332             }
96333
96334
96335             // ensure that all geojson features in a collection have IDs
96336             function ensureIDs(gj) {
96337                 if (!gj) { return null; }
96338
96339                 if (gj.type === 'FeatureCollection') {
96340                     for (var i = 0; i < gj.features.length; i++) {
96341                         ensureFeatureID(gj.features[i]);
96342                     }
96343                 } else {
96344                     ensureFeatureID(gj);
96345                 }
96346                 return gj;
96347             }
96348
96349
96350             // ensure that each single Feature object has a unique ID
96351             function ensureFeatureID(feature) {
96352                 if (!feature) { return; }
96353                 feature.__featurehash__ = utilHashcode(fastJsonStableStringify(feature));
96354                 return feature;
96355             }
96356
96357
96358             // Prefer an array of Features instead of a FeatureCollection
96359             function getFeatures(gj) {
96360                 if (!gj) { return []; }
96361
96362                 if (gj.type === 'FeatureCollection') {
96363                     return gj.features;
96364                 } else {
96365                     return [gj];
96366                 }
96367             }
96368
96369
96370             function featureKey(d) {
96371                 return d.__featurehash__;
96372             }
96373
96374
96375             function isPolygon(d) {
96376                 return d.geometry.type === 'Polygon' || d.geometry.type === 'MultiPolygon';
96377             }
96378
96379
96380             function clipPathID(d) {
96381                 return 'data-' + d.__featurehash__ + '-clippath';
96382             }
96383
96384
96385             function featureClasses(d) {
96386                 return [
96387                     'data' + d.__featurehash__,
96388                     d.geometry.type,
96389                     isPolygon(d) ? 'area' : '',
96390                     d.__layerID__ || ''
96391                 ].filter(Boolean).join(' ');
96392             }
96393
96394
96395             function drawData(selection) {
96396                 var vtService = getService();
96397                 var getPath = svgPath(projection).geojson;
96398                 var getAreaPath = svgPath(projection, null, true).geojson;
96399                 var hasData = drawData.hasData();
96400
96401                 layer = selection.selectAll('.layer-mapdata')
96402                     .data(_enabled && hasData ? [0] : []);
96403
96404                 layer.exit()
96405                     .remove();
96406
96407                 layer = layer.enter()
96408                     .append('g')
96409                     .attr('class', 'layer-mapdata')
96410                     .merge(layer);
96411
96412                 var surface = context.surface();
96413                 if (!surface || surface.empty()) { return; }  // not ready to draw yet, starting up
96414
96415
96416                 // Gather data
96417                 var geoData, polygonData;
96418                 if (_template && vtService) {   // fetch data from vector tile service
96419                     var sourceID = _template;
96420                     vtService.loadTiles(sourceID, _template, projection);
96421                     geoData = vtService.data(sourceID, projection);
96422                 } else {
96423                     geoData = getFeatures(_geojson);
96424                 }
96425                 geoData = geoData.filter(getPath);
96426                 polygonData = geoData.filter(isPolygon);
96427
96428
96429                 // Draw clip paths for polygons
96430                 var clipPaths = surface.selectAll('defs').selectAll('.clipPath-data')
96431                    .data(polygonData, featureKey);
96432
96433                 clipPaths.exit()
96434                    .remove();
96435
96436                 var clipPathsEnter = clipPaths.enter()
96437                    .append('clipPath')
96438                    .attr('class', 'clipPath-data')
96439                    .attr('id', clipPathID);
96440
96441                 clipPathsEnter
96442                    .append('path');
96443
96444                 clipPaths.merge(clipPathsEnter)
96445                    .selectAll('path')
96446                    .attr('d', getAreaPath);
96447
96448
96449                 // Draw fill, shadow, stroke layers
96450                 var datagroups = layer
96451                     .selectAll('g.datagroup')
96452                     .data(['fill', 'shadow', 'stroke']);
96453
96454                 datagroups = datagroups.enter()
96455                     .append('g')
96456                     .attr('class', function(d) { return 'datagroup datagroup-' + d; })
96457                     .merge(datagroups);
96458
96459
96460                 // Draw paths
96461                 var pathData = {
96462                     fill: polygonData,
96463                     shadow: geoData,
96464                     stroke: geoData
96465                 };
96466
96467                 var paths = datagroups
96468                     .selectAll('path')
96469                     .data(function(layer) { return pathData[layer]; }, featureKey);
96470
96471                 // exit
96472                 paths.exit()
96473                     .remove();
96474
96475                 // enter/update
96476                 paths = paths.enter()
96477                     .append('path')
96478                     .attr('class', function(d) {
96479                         var datagroup = this.parentNode.__data__;
96480                         return 'pathdata ' + datagroup + ' ' + featureClasses(d);
96481                     })
96482                     .attr('clip-path', function(d) {
96483                         var datagroup = this.parentNode.__data__;
96484                         return datagroup === 'fill' ? ('url(#' + clipPathID(d) + ')') : null;
96485                     })
96486                     .merge(paths)
96487                     .attr('d', function(d) {
96488                         var datagroup = this.parentNode.__data__;
96489                         return datagroup === 'fill' ? getAreaPath(d) : getPath(d);
96490                     });
96491
96492
96493                 // Draw labels
96494                 layer
96495                     .call(drawLabels, 'label-halo', geoData)
96496                     .call(drawLabels, 'label', geoData);
96497
96498
96499                 function drawLabels(selection, textClass, data) {
96500                     var labelPath = d3_geoPath(projection);
96501                     var labelData = data.filter(function(d) {
96502                         return _showLabels && d.properties && (d.properties.desc || d.properties.name);
96503                     });
96504
96505                     var labels = selection.selectAll('text.' + textClass)
96506                         .data(labelData, featureKey);
96507
96508                     // exit
96509                     labels.exit()
96510                         .remove();
96511
96512                     // enter/update
96513                     labels = labels.enter()
96514                         .append('text')
96515                         .attr('class', function(d) { return textClass + ' ' + featureClasses(d); })
96516                         .merge(labels)
96517                         .text(function(d) {
96518                             return d.properties.desc || d.properties.name;
96519                         })
96520                         .attr('x', function(d) {
96521                             var centroid = labelPath.centroid(d);
96522                             return centroid[0] + 11;
96523                         })
96524                         .attr('y', function(d) {
96525                             var centroid = labelPath.centroid(d);
96526                             return centroid[1];
96527                         });
96528                 }
96529             }
96530
96531
96532             function getExtension(fileName) {
96533                 if (!fileName) { return; }
96534
96535                 var re = /\.(gpx|kml|(geo)?json)$/i;
96536                 var match = fileName.toLowerCase().match(re);
96537                 return match && match.length && match[0];
96538             }
96539
96540
96541             function xmlToDom(textdata) {
96542                 return (new DOMParser()).parseFromString(textdata, 'text/xml');
96543             }
96544
96545
96546             drawData.setFile = function(extension, data) {
96547                 _template = null;
96548                 _fileList = null;
96549                 _geojson = null;
96550                 _src = null;
96551
96552                 var gj;
96553                 switch (extension) {
96554                     case '.gpx':
96555                         gj = togeojson.gpx(xmlToDom(data));
96556                         break;
96557                     case '.kml':
96558                         gj = togeojson.kml(xmlToDom(data));
96559                         break;
96560                     case '.geojson':
96561                     case '.json':
96562                         gj = JSON.parse(data);
96563                         break;
96564                 }
96565
96566                 gj = gj || {};
96567                 if (Object.keys(gj).length) {
96568                     _geojson = ensureIDs(gj);
96569                     _src = extension + ' data file';
96570                     this.fitZoom();
96571                 }
96572
96573                 dispatch.call('change');
96574                 return this;
96575             };
96576
96577
96578             drawData.showLabels = function(val) {
96579                 if (!arguments.length) { return _showLabels; }
96580
96581                 _showLabels = val;
96582                 return this;
96583             };
96584
96585
96586             drawData.enabled = function(val) {
96587                 if (!arguments.length) { return _enabled; }
96588
96589                 _enabled = val;
96590                 if (_enabled) {
96591                     showLayer();
96592                 } else {
96593                     hideLayer();
96594                 }
96595
96596                 dispatch.call('change');
96597                 return this;
96598             };
96599
96600
96601             drawData.hasData = function() {
96602                 var gj = _geojson || {};
96603                 return !!(_template || Object.keys(gj).length);
96604             };
96605
96606
96607             drawData.template = function(val, src) {
96608                 if (!arguments.length) { return _template; }
96609
96610                 // test source against OSM imagery blacklists..
96611                 var osm = context.connection();
96612                 if (osm) {
96613                     var blacklists = osm.imageryBlacklists();
96614                     var fail = false;
96615                     var tested = 0;
96616                     var regex;
96617
96618                     for (var i = 0; i < blacklists.length; i++) {
96619                         try {
96620                             regex = new RegExp(blacklists[i]);
96621                             fail = regex.test(val);
96622                             tested++;
96623                             if (fail) { break; }
96624                         } catch (e) {
96625                             /* noop */
96626                         }
96627                     }
96628
96629                     // ensure at least one test was run.
96630                     if (!tested) {
96631                         regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
96632                         fail = regex.test(val);
96633                     }
96634                 }
96635
96636                 _template = val;
96637                 _fileList = null;
96638                 _geojson = null;
96639
96640                 // strip off the querystring/hash from the template,
96641                 // it often includes the access token
96642                 _src = src || ('vectortile:' + val.split(/[?#]/)[0]);
96643
96644                 dispatch.call('change');
96645                 return this;
96646             };
96647
96648
96649             drawData.geojson = function(gj, src) {
96650                 if (!arguments.length) { return _geojson; }
96651
96652                 _template = null;
96653                 _fileList = null;
96654                 _geojson = null;
96655                 _src = null;
96656
96657                 gj = gj || {};
96658                 if (Object.keys(gj).length) {
96659                     _geojson = ensureIDs(gj);
96660                     _src = src || 'unknown.geojson';
96661                 }
96662
96663                 dispatch.call('change');
96664                 return this;
96665             };
96666
96667
96668             drawData.fileList = function(fileList) {
96669                 if (!arguments.length) { return _fileList; }
96670
96671                 _template = null;
96672                 _fileList = fileList;
96673                 _geojson = null;
96674                 _src = null;
96675
96676                 if (!fileList || !fileList.length) { return this; }
96677                 var f = fileList[0];
96678                 var extension = getExtension(f.name);
96679                 var reader = new FileReader();
96680                 reader.onload = (function() {
96681                     return function(e) {
96682                         drawData.setFile(extension, e.target.result);
96683                     };
96684                 })();
96685
96686                 reader.readAsText(f);
96687
96688                 return this;
96689             };
96690
96691
96692             drawData.url = function(url, defaultExtension) {
96693                 _template = null;
96694                 _fileList = null;
96695                 _geojson = null;
96696                 _src = null;
96697
96698                 // strip off any querystring/hash from the url before checking extension
96699                 var testUrl = url.split(/[?#]/)[0];
96700                 var extension = getExtension(testUrl) || defaultExtension;
96701                 if (extension) {
96702                     _template = null;
96703                     d3_text(url)
96704                         .then(function(data) {
96705                             drawData.setFile(extension, data);
96706                         })
96707                         .catch(function() {
96708                             /* ignore */
96709                         });
96710
96711                 } else {
96712                     drawData.template(url);
96713                 }
96714
96715                 return this;
96716             };
96717
96718
96719             drawData.getSrc = function() {
96720                 return _src || '';
96721             };
96722
96723
96724             drawData.fitZoom = function() {
96725                 var features = getFeatures(_geojson);
96726                 if (!features.length) { return; }
96727
96728                 var map = context.map();
96729                 var viewport = map.trimmedExtent().polygon();
96730                 var coords = features.reduce(function(coords, feature) {
96731                     var c = feature.geometry.coordinates;
96732
96733                     /* eslint-disable no-fallthrough */
96734                     switch (feature.geometry.type) {
96735                         case 'Point':
96736                             c = [c];
96737                         case 'MultiPoint':
96738                         case 'LineString':
96739                             break;
96740
96741                         case 'MultiPolygon':
96742                             c = utilArrayFlatten(c);
96743                         case 'Polygon':
96744                         case 'MultiLineString':
96745                             c = utilArrayFlatten(c);
96746                             break;
96747                     }
96748                     /* eslint-enable no-fallthrough */
96749
96750                     return utilArrayUnion(coords, c);
96751                 }, []);
96752
96753                 if (!geoPolygonIntersectsPolygon(viewport, coords, true)) {
96754                     var extent = geoExtent(d3_geoBounds({ type: 'LineString', coordinates: coords }));
96755                     map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
96756                 }
96757
96758                 return this;
96759             };
96760
96761
96762             init();
96763             return drawData;
96764         }
96765
96766         function svgDebug(projection, context) {
96767
96768             function drawDebug(selection) {
96769                 var showsTile = context.getDebug('tile');
96770                 var showsCollision = context.getDebug('collision');
96771                 var showsImagery = context.getDebug('imagery');
96772                 var showsCommunity = context.getDebug('community');
96773                 var showsTouchTargets = context.getDebug('target');
96774                 var showsDownloaded = context.getDebug('downloaded');
96775
96776                 var debugData = [];
96777                 if (showsTile) {
96778                     debugData.push({ class: 'red', label: 'tile' });
96779                 }
96780                 if (showsCollision) {
96781                     debugData.push({ class: 'yellow', label: 'collision' });
96782                 }
96783                 if (showsImagery) {
96784                     debugData.push({ class: 'orange', label: 'imagery' });
96785                 }
96786                 if (showsCommunity) {
96787                     debugData.push({ class: 'blue', label: 'community' });
96788                 }
96789                 if (showsTouchTargets) {
96790                     debugData.push({ class: 'pink', label: 'touchTargets' });
96791                 }
96792                 if (showsDownloaded) {
96793                     debugData.push({ class: 'purple', label: 'downloaded' });
96794                 }
96795
96796
96797                 var legend = d3_select('#content')
96798                     .selectAll('.debug-legend')
96799                     .data(debugData.length ? [0] : []);
96800
96801                 legend.exit()
96802                     .remove();
96803
96804                 legend = legend.enter()
96805                     .append('div')
96806                     .attr('class', 'fillD debug-legend')
96807                     .merge(legend);
96808
96809
96810                 var legendItems = legend.selectAll('.debug-legend-item')
96811                     .data(debugData, function(d) { return d.label; });
96812
96813                 legendItems.exit()
96814                     .remove();
96815
96816                 legendItems.enter()
96817                     .append('span')
96818                     .attr('class', function(d) { return 'debug-legend-item ' + d.class; })
96819                     .text(function(d) { return d.label; });
96820
96821
96822                 var layer = selection.selectAll('.layer-debug')
96823                     .data(showsImagery || showsCommunity || showsDownloaded ? [0] : []);
96824
96825                 layer.exit()
96826                     .remove();
96827
96828                 layer = layer.enter()
96829                     .append('g')
96830                     .attr('class', 'layer-debug')
96831                     .merge(layer);
96832
96833
96834                 // imagery
96835                 var extent = context.map().extent();
96836                 var matchImagery = (showsImagery && data.imagery.query.bbox(extent.rectangle(), true)) || [];
96837                 var features = matchImagery.map(function(d) { return data.imagery.features[d.id]; });
96838
96839                 var imagery = layer.selectAll('path.debug-imagery')
96840                     .data(features);
96841
96842                 imagery.exit()
96843                     .remove();
96844
96845                 imagery.enter()
96846                     .append('path')
96847                     .attr('class', 'debug-imagery debug orange');
96848
96849
96850                 // community index
96851                 var community = layer.selectAll('path.debug-community')
96852                     .data(showsCommunity ? Object.values(data.community.features) : []);
96853
96854                 community.exit()
96855                     .remove();
96856
96857                 community.enter()
96858                     .append('path')
96859                     .attr('class', 'debug-community debug blue');
96860
96861
96862                 // downloaded
96863                 var osm = context.connection();
96864                 var dataDownloaded = [];
96865
96866                 if (osm) {
96867                     var rtree = osm.caches('get').tile.rtree;
96868                     dataDownloaded = rtree.all().map(function(bbox) {
96869                         return {
96870                             type: 'Feature',
96871                             properties: { id: bbox.id },
96872                             geometry: {
96873                                 type: 'Polygon',
96874                                 coordinates: [[
96875                                     [ bbox.minX, bbox.minY ],
96876                                     [ bbox.minX, bbox.maxY ],
96877                                     [ bbox.maxX, bbox.maxY ],
96878                                     [ bbox.maxX, bbox.minY ],
96879                                     [ bbox.minX, bbox.minY ]
96880                                 ]]
96881                             }
96882                         };
96883                     });
96884                 }
96885
96886
96887                 var downloaded = layer
96888                     .selectAll('path.debug-downloaded')
96889                     .data(showsDownloaded ? dataDownloaded : []);
96890
96891                 downloaded.exit()
96892                     .remove();
96893
96894                 downloaded.enter()
96895                     .append('path')
96896                     .attr('class', 'debug-downloaded debug purple');
96897
96898
96899                 // update
96900                 layer.selectAll('path')
96901                     .attr('d', svgPath(projection).geojson);
96902             }
96903
96904
96905             // This looks strange because `enabled` methods on other layers are
96906             // chainable getter/setters, and this one is just a getter.
96907             drawDebug.enabled = function() {
96908                 if (!arguments.length) {
96909                     return context.getDebug('tile') ||
96910                         context.getDebug('collision') ||
96911                         context.getDebug('imagery') ||
96912                         context.getDebug('target') ||
96913                         context.getDebug('downloaded');
96914                 } else {
96915                     return this;
96916                 }
96917             };
96918
96919
96920             return drawDebug;
96921         }
96922
96923         var _keepRightEnabled = false;
96924         var _keepRightService;
96925
96926
96927         function svgKeepRight(projection, context, dispatch) {
96928             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
96929             var minZoom = 12;
96930             var touchLayer = d3_select(null);
96931             var drawLayer = d3_select(null);
96932             var _keepRightVisible = false;
96933
96934
96935             function markerPath(selection, klass) {
96936                 selection
96937                     .attr('class', klass)
96938                     .attr('transform', 'translate(-4, -24)')
96939                     .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');
96940             }
96941
96942
96943             // Loosely-coupled keepRight service for fetching errors.
96944             function getService() {
96945                 if (services$1.keepRight && !_keepRightService) {
96946                     _keepRightService = services$1.keepRight;
96947                     _keepRightService.on('loaded', throttledRedraw);
96948                 } else if (!services$1.keepRight && _keepRightService) {
96949                     _keepRightService = null;
96950                 }
96951
96952                 return _keepRightService;
96953             }
96954
96955
96956             // Show the errors
96957             function editOn() {
96958                 if (!_keepRightVisible) {
96959                     _keepRightVisible = true;
96960                     drawLayer
96961                         .style('display', 'block');
96962                 }
96963             }
96964
96965
96966             // Immediately remove the errors and their touch targets
96967             function editOff() {
96968                 if (_keepRightVisible) {
96969                     _keepRightVisible = false;
96970                     drawLayer
96971                         .style('display', 'none');
96972                     drawLayer.selectAll('.qa_error.keepRight')
96973                         .remove();
96974                     touchLayer.selectAll('.qa_error.keepRight')
96975                         .remove();
96976                 }
96977             }
96978
96979
96980             // Enable the layer.  This shows the errors and transitions them to visible.
96981             function layerOn() {
96982                 editOn();
96983
96984                 drawLayer
96985                     .style('opacity', 0)
96986                     .transition()
96987                     .duration(250)
96988                     .style('opacity', 1)
96989                     .on('end interrupt', function () {
96990                         dispatch.call('change');
96991                     });
96992             }
96993
96994
96995             // Disable the layer.  This transitions the layer invisible and then hides the errors.
96996             function layerOff() {
96997                 throttledRedraw.cancel();
96998                 drawLayer.interrupt();
96999                 touchLayer.selectAll('.qa_error.keepRight')
97000                     .remove();
97001
97002                 drawLayer
97003                     .transition()
97004                     .duration(250)
97005                     .style('opacity', 0)
97006                     .on('end interrupt', function () {
97007                         editOff();
97008                         dispatch.call('change');
97009                     });
97010             }
97011
97012
97013             // Update the error markers
97014             function updateMarkers() {
97015                 if (!_keepRightVisible || !_keepRightEnabled) { return; }
97016
97017                 var service = getService();
97018                 var selectedID = context.selectedErrorID();
97019                 var data = (service ? service.getErrors(projection) : []);
97020                 var getTransform = svgPointTransform(projection);
97021
97022                 // Draw markers..
97023                 var markers = drawLayer.selectAll('.qa_error.keepRight')
97024                     .data(data, function(d) { return d.id; });
97025
97026                 // exit
97027                 markers.exit()
97028                     .remove();
97029
97030                 // enter
97031                 var markersEnter = markers.enter()
97032                     .append('g')
97033                     .attr('class', function(d) {
97034                         return [
97035                             'qa_error',
97036                             d.service,
97037                             'error_id-' + d.id,
97038                             'error_type-' + d.parent_error_type
97039                         ].join(' ');
97040                     });
97041
97042                 markersEnter
97043                     .append('ellipse')
97044                     .attr('cx', 0.5)
97045                     .attr('cy', 1)
97046                     .attr('rx', 6.5)
97047                     .attr('ry', 3)
97048                     .attr('class', 'stroke');
97049
97050                 markersEnter
97051                     .append('path')
97052                     .call(markerPath, 'shadow');
97053
97054                 markersEnter
97055                     .append('use')
97056                     .attr('class', 'qa_error-fill')
97057                     .attr('width', '20px')
97058                     .attr('height', '20px')
97059                     .attr('x', '-8px')
97060                     .attr('y', '-22px')
97061                     .attr('xlink:href', '#iD-icon-bolt');
97062
97063                 // update
97064                 markers
97065                     .merge(markersEnter)
97066                     .sort(sortY)
97067                     .classed('selected', function(d) { return d.id === selectedID; })
97068                     .attr('transform', getTransform);
97069
97070
97071                 // Draw targets..
97072                 if (touchLayer.empty()) { return; }
97073                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
97074
97075                 var targets = touchLayer.selectAll('.qa_error.keepRight')
97076                     .data(data, function(d) { return d.id; });
97077
97078                 // exit
97079                 targets.exit()
97080                     .remove();
97081
97082                 // enter/update
97083                 targets.enter()
97084                     .append('rect')
97085                     .attr('width', '20px')
97086                     .attr('height', '20px')
97087                     .attr('x', '-8px')
97088                     .attr('y', '-22px')
97089                     .merge(targets)
97090                     .sort(sortY)
97091                     .attr('class', function(d) {
97092                         return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
97093                     })
97094                     .attr('transform', getTransform);
97095
97096
97097                 function sortY(a, b) {
97098                     return (a.id === selectedID) ? 1
97099                         : (b.id === selectedID) ? -1
97100                         : (a.severity === 'error' && b.severity !== 'error') ? 1
97101                         : (b.severity === 'error' && a.severity !== 'error') ? -1
97102                         : b.loc[1] - a.loc[1];
97103                 }
97104             }
97105
97106
97107             // Draw the keepRight layer and schedule loading errors and updating markers.
97108             function drawKeepRight(selection) {
97109                 var service = getService();
97110
97111                 var surface = context.surface();
97112                 if (surface && !surface.empty()) {
97113                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
97114                 }
97115
97116                 drawLayer = selection.selectAll('.layer-keepRight')
97117                     .data(service ? [0] : []);
97118
97119                 drawLayer.exit()
97120                     .remove();
97121
97122                 drawLayer = drawLayer.enter()
97123                     .append('g')
97124                     .attr('class', 'layer-keepRight')
97125                     .style('display', _keepRightEnabled ? 'block' : 'none')
97126                     .merge(drawLayer);
97127
97128                 if (_keepRightEnabled) {
97129                     if (service && ~~context.map().zoom() >= minZoom) {
97130                         editOn();
97131                         service.loadErrors(projection);
97132                         updateMarkers();
97133                     } else {
97134                         editOff();
97135                     }
97136                 }
97137             }
97138
97139
97140             // Toggles the layer on and off
97141             drawKeepRight.enabled = function(val) {
97142                 if (!arguments.length) { return _keepRightEnabled; }
97143
97144                 _keepRightEnabled = val;
97145                 if (_keepRightEnabled) {
97146                     layerOn();
97147                 } else {
97148                     layerOff();
97149                     if (context.selectedErrorID()) {
97150                         context.enter(modeBrowse(context));
97151                     }
97152                 }
97153
97154                 dispatch.call('change');
97155                 return this;
97156             };
97157
97158
97159             drawKeepRight.supported = function() {
97160                 return !!getService();
97161             };
97162
97163
97164             return drawKeepRight;
97165         }
97166
97167         function svgGeolocate(projection) {
97168             var layer = d3_select(null);
97169             var _position;
97170
97171
97172             function init() {
97173                 if (svgGeolocate.initialized) { return; }  // run once
97174                 svgGeolocate.enabled = false;
97175                 svgGeolocate.initialized = true;
97176             }
97177
97178             function showLayer() {
97179                 layer.style('display', 'block');
97180             }
97181
97182
97183             function hideLayer() {
97184                 layer
97185                     .transition()
97186                     .duration(250)
97187                     .style('opacity', 0);
97188             }
97189
97190             function layerOn() {
97191                 layer
97192                     .style('opacity', 0)
97193                     .transition()
97194                     .duration(250)
97195                     .style('opacity', 1);
97196
97197             }
97198
97199             function layerOff() {
97200                 layer.style('display', 'none');
97201             }
97202
97203             function transform(d) {
97204                 return svgPointTransform(projection)(d);
97205             }
97206
97207             function accuracy(accuracy, loc) { // converts accuracy to pixels...
97208                 var degreesRadius = geoMetersToLat(accuracy),
97209                     tangentLoc = [loc[0], loc[1] + degreesRadius],
97210                     projectedTangent = projection(tangentLoc),
97211                     projectedLoc = projection([loc[0], loc[1]]);
97212
97213                 // southern most point will have higher pixel value...
97214                return Math.round(projectedLoc[1] - projectedTangent[1]).toString();
97215             }
97216
97217             function update() {
97218                 var geolocation = { loc: [_position.coords.longitude, _position.coords.latitude] };
97219
97220                 var groups = layer.selectAll('.geolocations').selectAll('.geolocation')
97221                     .data([geolocation]);
97222
97223                 groups.exit()
97224                     .remove();
97225
97226                 var pointsEnter = groups.enter()
97227                     .append('g')
97228                     .attr('class', 'geolocation');
97229
97230                 pointsEnter
97231                     .append('circle')
97232                     .attr('id', 'geolocate-radius')
97233                     .attr('dx', '0')
97234                     .attr('dy', '0')
97235                     .attr('fill', 'rgb(15,128,225)')
97236                     .attr('fill-opacity', '0.3')
97237                     .attr('r', '0');
97238
97239                 pointsEnter
97240                     .append('circle')
97241                     .attr('dx', '0')
97242                     .attr('dy', '0')
97243                     .attr('fill', 'rgb(15,128,225)')
97244                     .attr('stroke', 'white')
97245                     .attr('stroke-width', '1.5')
97246                     .attr('r', '6');
97247
97248                 groups.merge(pointsEnter)
97249                     .attr('transform', transform);
97250
97251                 d3_select('#geolocate-radius').attr('r', accuracy(_position.coords.accuracy, geolocation.loc));
97252             }
97253
97254             function drawLocation(selection) {
97255                 var enabled = svgGeolocate.enabled;
97256
97257                 layer = selection.selectAll('.layer-geolocate')
97258                     .data([0]);
97259
97260                 layer.exit()
97261                     .remove();
97262
97263                 var layerEnter = layer.enter()
97264                     .append('g')
97265                     .attr('class', 'layer-geolocate')
97266                     .style('display', enabled ? 'block' : 'none');
97267
97268                 layerEnter
97269                     .append('g')
97270                     .attr('class', 'geolocations');
97271
97272                 layer = layerEnter
97273                     .merge(layer);
97274
97275                 if (enabled) {
97276                     update();
97277                 } else {
97278                     layerOff();
97279                 }
97280             }
97281
97282             drawLocation.enabled = function (position, enabled) {
97283                 if (!arguments.length) { return svgGeolocate.enabled; }
97284                 _position = position;
97285                 svgGeolocate.enabled = enabled;
97286                 if (svgGeolocate.enabled) {
97287                     showLayer();
97288                     layerOn();
97289                 } else {
97290                     hideLayer();
97291                 }
97292                 return this;
97293             };
97294
97295             init();
97296             return drawLocation;
97297         }
97298
97299         function svgLabels(projection, context) {
97300             var path = d3_geoPath(projection);
97301             var detected = utilDetect();
97302             var baselineHack = (detected.ie ||
97303                 detected.browser.toLowerCase() === 'edge' ||
97304                 (detected.browser.toLowerCase() === 'firefox' && detected.version >= 70));
97305             var _rdrawn = new RBush();
97306             var _rskipped = new RBush();
97307             var _textWidthCache = {};
97308             var _entitybboxes = {};
97309
97310             // Listed from highest to lowest priority
97311             var labelStack = [
97312                 ['line', 'aeroway', '*', 12],
97313                 ['line', 'highway', 'motorway', 12],
97314                 ['line', 'highway', 'trunk', 12],
97315                 ['line', 'highway', 'primary', 12],
97316                 ['line', 'highway', 'secondary', 12],
97317                 ['line', 'highway', 'tertiary', 12],
97318                 ['line', 'highway', '*', 12],
97319                 ['line', 'railway', '*', 12],
97320                 ['line', 'waterway', '*', 12],
97321                 ['area', 'aeroway', '*', 12],
97322                 ['area', 'amenity', '*', 12],
97323                 ['area', 'building', '*', 12],
97324                 ['area', 'historic', '*', 12],
97325                 ['area', 'leisure', '*', 12],
97326                 ['area', 'man_made', '*', 12],
97327                 ['area', 'natural', '*', 12],
97328                 ['area', 'shop', '*', 12],
97329                 ['area', 'tourism', '*', 12],
97330                 ['area', 'camp_site', '*', 12],
97331                 ['point', 'aeroway', '*', 10],
97332                 ['point', 'amenity', '*', 10],
97333                 ['point', 'building', '*', 10],
97334                 ['point', 'historic', '*', 10],
97335                 ['point', 'leisure', '*', 10],
97336                 ['point', 'man_made', '*', 10],
97337                 ['point', 'natural', '*', 10],
97338                 ['point', 'shop', '*', 10],
97339                 ['point', 'tourism', '*', 10],
97340                 ['point', 'camp_site', '*', 10],
97341                 ['line', 'name', '*', 12],
97342                 ['area', 'name', '*', 12],
97343                 ['point', 'name', '*', 10]
97344             ];
97345
97346
97347             function blacklisted(preset) {
97348                 var noIcons = ['building', 'landuse', 'natural'];
97349                 return noIcons.some(function(s) {
97350                     return preset.id.indexOf(s) >= 0;
97351                 });
97352             }
97353
97354
97355             function get(array, prop) {
97356                 return function(d, i) { return array[i][prop]; };
97357             }
97358
97359
97360             function textWidth(text, size, elem) {
97361                 var c = _textWidthCache[size];
97362                 if (!c) { c = _textWidthCache[size] = {}; }
97363
97364                 if (c[text]) {
97365                     return c[text];
97366
97367                 } else if (elem) {
97368                     c[text] = elem.getComputedTextLength();
97369                     return c[text];
97370
97371                 } else {
97372                     var str = encodeURIComponent(text).match(/%[CDEFcdef]/g);
97373                     if (str === null) {
97374                         return size / 3 * 2 * text.length;
97375                     } else {
97376                         return size / 3 * (2 * text.length + str.length);
97377                     }
97378                 }
97379             }
97380
97381
97382             function drawLinePaths(selection, entities, filter, classes, labels) {
97383                 var paths = selection.selectAll('path')
97384                     .filter(filter)
97385                     .data(entities, osmEntity.key);
97386
97387                 // exit
97388                 paths.exit()
97389                     .remove();
97390
97391                 // enter/update
97392                 paths.enter()
97393                     .append('path')
97394                     .style('stroke-width', get(labels, 'font-size'))
97395                     .attr('id', function(d) { return 'labelpath-' + d.id; })
97396                     .attr('class', classes)
97397                     .merge(paths)
97398                     .attr('d', get(labels, 'lineString'));
97399             }
97400
97401
97402             function drawLineLabels(selection, entities, filter, classes, labels) {
97403                 var texts = selection.selectAll('text.' + classes)
97404                     .filter(filter)
97405                     .data(entities, osmEntity.key);
97406
97407                 // exit
97408                 texts.exit()
97409                     .remove();
97410
97411                 // enter
97412                 texts.enter()
97413                     .append('text')
97414                     .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; })
97415                     .attr('dy', baselineHack ? '0.35em' : null)
97416                     .append('textPath')
97417                     .attr('class', 'textpath');
97418
97419                 // update
97420                 selection.selectAll('text.' + classes).selectAll('.textpath')
97421                     .filter(filter)
97422                     .data(entities, osmEntity.key)
97423                     .attr('startOffset', '50%')
97424                     .attr('xlink:href', function(d) { return '#labelpath-' + d.id; })
97425                     .text(utilDisplayNameForPath);
97426             }
97427
97428
97429             function drawPointLabels(selection, entities, filter, classes, labels) {
97430                 var texts = selection.selectAll('text.' + classes)
97431                     .filter(filter)
97432                     .data(entities, osmEntity.key);
97433
97434                 // exit
97435                 texts.exit()
97436                     .remove();
97437
97438                 // enter/update
97439                 texts.enter()
97440                     .append('text')
97441                     .attr('class', function(d, i) {
97442                         return classes + ' ' + labels[i].classes + ' ' + d.id;
97443                     })
97444                     .merge(texts)
97445                     .attr('x', get(labels, 'x'))
97446                     .attr('y', get(labels, 'y'))
97447                     .style('text-anchor', get(labels, 'textAnchor'))
97448                     .text(utilDisplayName)
97449                     .each(function(d, i) {
97450                         textWidth(utilDisplayName(d), labels[i].height, this);
97451                     });
97452             }
97453
97454
97455             function drawAreaLabels(selection, entities, filter, classes, labels) {
97456                 entities = entities.filter(hasText);
97457                 labels = labels.filter(hasText);
97458                 drawPointLabels(selection, entities, filter, classes, labels);
97459
97460                 function hasText(d, i) {
97461                     return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y');
97462                 }
97463             }
97464
97465
97466             function drawAreaIcons(selection, entities, filter, classes, labels) {
97467                 var icons = selection.selectAll('use.' + classes)
97468                     .filter(filter)
97469                     .data(entities, osmEntity.key);
97470
97471                 // exit
97472                 icons.exit()
97473                     .remove();
97474
97475                 // enter/update
97476                 icons.enter()
97477                     .append('use')
97478                     .attr('class', 'icon ' + classes)
97479                     .attr('width', '17px')
97480                     .attr('height', '17px')
97481                     .merge(icons)
97482                     .attr('transform', get(labels, 'transform'))
97483                     .attr('xlink:href', function(d) {
97484                         var preset = context.presets().match(d, context.graph());
97485                         var picon = preset && preset.icon;
97486
97487                         if (!picon) {
97488                             return '';
97489                         } else {
97490                             var isMaki = /^maki-/.test(picon);
97491                             return '#' + picon + (isMaki ? '-15' : '');
97492                         }
97493                     });
97494             }
97495
97496
97497             function drawCollisionBoxes(selection, rtree, which) {
97498                 var classes = 'debug ' + which + ' ' + (which === 'debug-skipped' ? 'orange' : 'yellow');
97499
97500                 var gj = [];
97501                 if (context.getDebug('collision')) {
97502                     gj = rtree.all().map(function(d) {
97503                         return { type: 'Polygon', coordinates: [[
97504                             [d.minX, d.minY],
97505                             [d.maxX, d.minY],
97506                             [d.maxX, d.maxY],
97507                             [d.minX, d.maxY],
97508                             [d.minX, d.minY]
97509                         ]]};
97510                     });
97511                 }
97512
97513                 var boxes = selection.selectAll('.' + which)
97514                     .data(gj);
97515
97516                 // exit
97517                 boxes.exit()
97518                     .remove();
97519
97520                 // enter/update
97521                 boxes.enter()
97522                     .append('path')
97523                     .attr('class', classes)
97524                     .merge(boxes)
97525                     .attr('d', d3_geoPath());
97526             }
97527
97528
97529             function drawLabels(selection, graph, entities, filter, dimensions, fullRedraw) {
97530                 var wireframe = context.surface().classed('fill-wireframe');
97531                 var zoom = geoScaleToZoom(projection.scale());
97532
97533                 var labelable = [];
97534                 var renderNodeAs = {};
97535                 var i, j, k, entity, geometry;
97536
97537                 for (i = 0; i < labelStack.length; i++) {
97538                     labelable.push([]);
97539                 }
97540
97541                 if (fullRedraw) {
97542                     _rdrawn.clear();
97543                     _rskipped.clear();
97544                     _entitybboxes = {};
97545
97546                 } else {
97547                     for (i = 0; i < entities.length; i++) {
97548                         entity = entities[i];
97549                         var toRemove = []
97550                             .concat(_entitybboxes[entity.id] || [])
97551                             .concat(_entitybboxes[entity.id + 'I'] || []);
97552
97553                         for (j = 0; j < toRemove.length; j++) {
97554                             _rdrawn.remove(toRemove[j]);
97555                             _rskipped.remove(toRemove[j]);
97556                         }
97557                     }
97558                 }
97559
97560                 // Loop through all the entities to do some preprocessing
97561                 for (i = 0; i < entities.length; i++) {
97562                     entity = entities[i];
97563                     geometry = entity.geometry(graph);
97564
97565                     // Insert collision boxes around interesting points/vertices
97566                     if (geometry === 'point' || (geometry === 'vertex' && isInterestingVertex(entity))) {
97567                         var hasDirections = entity.directions(graph, projection).length;
97568                         var markerPadding;
97569
97570                         if (!wireframe && geometry === 'point' && !(zoom >= 18 && hasDirections)) {
97571                             renderNodeAs[entity.id] = 'point';
97572                             markerPadding = 20;   // extra y for marker height
97573                         } else {
97574                             renderNodeAs[entity.id] = 'vertex';
97575                             markerPadding = 0;
97576                         }
97577
97578                         var coord = projection(entity.loc);
97579                         var nodePadding = 10;
97580                         var bbox = {
97581                             minX: coord[0] - nodePadding,
97582                             minY: coord[1] - nodePadding - markerPadding,
97583                             maxX: coord[0] + nodePadding,
97584                             maxY: coord[1] + nodePadding
97585                         };
97586
97587                         doInsert(bbox, entity.id + 'P');
97588                     }
97589
97590                     // From here on, treat vertices like points
97591                     if (geometry === 'vertex') {
97592                         geometry = 'point';
97593                     }
97594
97595                     // Determine which entities are label-able
97596                     var preset = geometry === 'area' && context.presets().match(entity, graph);
97597                     var icon = preset && !blacklisted(preset) && preset.icon;
97598
97599                     if (!icon && !utilDisplayName(entity))
97600                         { continue; }
97601
97602                     for (k = 0; k < labelStack.length; k++) {
97603                         var matchGeom = labelStack[k][0];
97604                         var matchKey = labelStack[k][1];
97605                         var matchVal = labelStack[k][2];
97606                         var hasVal = entity.tags[matchKey];
97607
97608                         if (geometry === matchGeom && hasVal && (matchVal === '*' || matchVal === hasVal)) {
97609                             labelable[k].push(entity);
97610                             break;
97611                         }
97612                     }
97613                 }
97614
97615                 var positions = {
97616                     point: [],
97617                     line: [],
97618                     area: []
97619                 };
97620
97621                 var labelled = {
97622                     point: [],
97623                     line: [],
97624                     area: []
97625                 };
97626
97627                 // Try and find a valid label for labellable entities
97628                 for (k = 0; k < labelable.length; k++) {
97629                     var fontSize = labelStack[k][3];
97630
97631                     for (i = 0; i < labelable[k].length; i++) {
97632                         entity = labelable[k][i];
97633                         geometry = entity.geometry(graph);
97634
97635                         var getName = (geometry === 'line') ? utilDisplayNameForPath : utilDisplayName;
97636                         var name = getName(entity);
97637                         var width = name && textWidth(name, fontSize);
97638                         var p = null;
97639
97640                         if (geometry === 'point' || geometry === 'vertex') {
97641                             // no point or vertex labels in wireframe mode
97642                             // no vertex labels at low zooms (vertices have no icons)
97643                             if (wireframe) { continue; }
97644                             var renderAs = renderNodeAs[entity.id];
97645                             if (renderAs === 'vertex' && zoom < 17) { continue; }
97646
97647                             p = getPointLabel(entity, width, fontSize, renderAs);
97648
97649                         } else if (geometry === 'line') {
97650                             p = getLineLabel(entity, width, fontSize);
97651
97652                         } else if (geometry === 'area') {
97653                             p = getAreaLabel(entity, width, fontSize);
97654                         }
97655
97656                         if (p) {
97657                             if (geometry === 'vertex') { geometry = 'point'; }  // treat vertex like point
97658                             p.classes = geometry + ' tag-' + labelStack[k][1];
97659                             positions[geometry].push(p);
97660                             labelled[geometry].push(entity);
97661                         }
97662                     }
97663                 }
97664
97665
97666                 function isInterestingVertex(entity) {
97667                     var selectedIDs = context.selectedIDs();
97668
97669                     return entity.hasInterestingTags() ||
97670                         entity.isEndpoint(graph) ||
97671                         entity.isConnected(graph) ||
97672                         selectedIDs.indexOf(entity.id) !== -1 ||
97673                         graph.parentWays(entity).some(function(parent) {
97674                             return selectedIDs.indexOf(parent.id) !== -1;
97675                         });
97676                 }
97677
97678
97679                 function getPointLabel(entity, width, height, geometry) {
97680                     var y = (geometry === 'point' ? -12 : 0);
97681                     var pointOffsets = {
97682                         ltr: [15, y, 'start'],
97683                         rtl: [-15, y, 'end']
97684                     };
97685
97686                     var coord = projection(entity.loc);
97687                     var textPadding = 2;
97688                     var offset = pointOffsets[textDirection];
97689                     var p = {
97690                         height: height,
97691                         width: width,
97692                         x: coord[0] + offset[0],
97693                         y: coord[1] + offset[1],
97694                         textAnchor: offset[2]
97695                     };
97696
97697                     // insert a collision box for the text label..
97698                     var bbox;
97699                     if (textDirection === 'rtl') {
97700                         bbox = {
97701                             minX: p.x - width - textPadding,
97702                             minY: p.y - (height / 2) - textPadding,
97703                             maxX: p.x + textPadding,
97704                             maxY: p.y + (height / 2) + textPadding
97705                         };
97706                     } else {
97707                         bbox = {
97708                             minX: p.x - textPadding,
97709                             minY: p.y - (height / 2) - textPadding,
97710                             maxX: p.x + width + textPadding,
97711                             maxY: p.y + (height / 2) + textPadding
97712                         };
97713                     }
97714
97715                     if (tryInsert([bbox], entity.id, true)) {
97716                         return p;
97717                     }
97718                 }
97719
97720
97721                 function getLineLabel(entity, width, height) {
97722                     var viewport = geoExtent(context.projection.clipExtent()).polygon();
97723                     var points = graph.childNodes(entity)
97724                         .map(function(node) { return projection(node.loc); });
97725                     var length = geoPathLength(points);
97726
97727                     if (length < width + 20) { return; }
97728
97729                     // todo: properly clip points to viewport
97730
97731                     // % along the line to attempt to place the label
97732                     var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70,
97733                                        25, 75, 20, 80, 15, 95, 10, 90, 5, 95];
97734                     var padding = 3;
97735
97736                     for (var i = 0; i < lineOffsets.length; i++) {
97737                         var offset = lineOffsets[i];
97738                         var middle = offset / 100 * length;
97739                         var start = middle - width / 2;
97740
97741                         if (start < 0 || start + width > length) { continue; }
97742
97743                         // generate subpath and ignore paths that are invalid or don't cross viewport.
97744                         var sub = subpath(points, start, start + width);
97745                         if (!sub || !geoPolygonIntersectsPolygon(viewport, sub, true)) {
97746                             continue;
97747                         }
97748
97749                         var isReverse = reverse(sub);
97750                         if (isReverse) {
97751                             sub = sub.reverse();
97752                         }
97753
97754                         var bboxes = [];
97755                         var boxsize = (height + 2) / 2;
97756
97757                         for (var j = 0; j < sub.length - 1; j++) {
97758                             var a = sub[j];
97759                             var b = sub[j + 1];
97760
97761                             // split up the text into small collision boxes
97762                             var num = Math.max(1, Math.floor(geoVecLength(a, b) / boxsize / 2));
97763
97764                             for (var box = 0; box < num; box++) {
97765                                 var p = geoVecInterp(a, b, box / num);
97766                                 var x0 = p[0] - boxsize - padding;
97767                                 var y0 = p[1] - boxsize - padding;
97768                                 var x1 = p[0] + boxsize + padding;
97769                                 var y1 = p[1] + boxsize + padding;
97770
97771                                 bboxes.push({
97772                                     minX: Math.min(x0, x1),
97773                                     minY: Math.min(y0, y1),
97774                                     maxX: Math.max(x0, x1),
97775                                     maxY: Math.max(y0, y1)
97776                                 });
97777                             }
97778                         }
97779
97780                         if (tryInsert(bboxes, entity.id, false)) {   // accept this one
97781                             return {
97782                                 'font-size': height + 2,
97783                                 lineString: lineString(sub),
97784                                 startOffset: offset + '%'
97785                             };
97786                         }
97787                     }
97788
97789                     function reverse(p) {
97790                         var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]);
97791                         return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2);
97792                     }
97793
97794                     function lineString(points) {
97795                         return 'M' + points.join('L');
97796                     }
97797
97798                     function subpath(points, from, to) {
97799                         var sofar = 0;
97800                         var start, end, i0, i1;
97801
97802                         for (var i = 0; i < points.length - 1; i++) {
97803                             var a = points[i];
97804                             var b = points[i + 1];
97805                             var current = geoVecLength(a, b);
97806                             var portion;
97807                             if (!start && sofar + current >= from) {
97808                                 portion = (from - sofar) / current;
97809                                 start = [
97810                                     a[0] + portion * (b[0] - a[0]),
97811                                     a[1] + portion * (b[1] - a[1])
97812                                 ];
97813                                 i0 = i + 1;
97814                             }
97815                             if (!end && sofar + current >= to) {
97816                                 portion = (to - sofar) / current;
97817                                 end = [
97818                                     a[0] + portion * (b[0] - a[0]),
97819                                     a[1] + portion * (b[1] - a[1])
97820                                 ];
97821                                 i1 = i + 1;
97822                             }
97823                             sofar += current;
97824                         }
97825
97826                         var result = points.slice(i0, i1);
97827                         result.unshift(start);
97828                         result.push(end);
97829                         return result;
97830                     }
97831                 }
97832
97833
97834                 function getAreaLabel(entity, width, height) {
97835                     var centroid = path.centroid(entity.asGeoJSON(graph, true));
97836                     var extent = entity.extent(graph);
97837                     var areaWidth = projection(extent[1])[0] - projection(extent[0])[0];
97838
97839                     if (isNaN(centroid[0]) || areaWidth < 20) { return; }
97840
97841                     var preset = context.presets().match(entity, context.graph());
97842                     var picon = preset && preset.icon;
97843                     var iconSize = 17;
97844                     var padding = 2;
97845                     var p = {};
97846
97847                     if (picon) {  // icon and label..
97848                         if (addIcon()) {
97849                             addLabel(iconSize + padding);
97850                             return p;
97851                         }
97852                     } else {   // label only..
97853                         if (addLabel(0)) {
97854                             return p;
97855                         }
97856                     }
97857
97858
97859                     function addIcon() {
97860                         var iconX = centroid[0] - (iconSize / 2);
97861                         var iconY = centroid[1] - (iconSize / 2);
97862                         var bbox = {
97863                             minX: iconX,
97864                             minY: iconY,
97865                             maxX: iconX + iconSize,
97866                             maxY: iconY + iconSize
97867                         };
97868
97869                         if (tryInsert([bbox], entity.id + 'I', true)) {
97870                             p.transform = 'translate(' + iconX + ',' + iconY + ')';
97871                             return true;
97872                         }
97873                         return false;
97874                     }
97875
97876                     function addLabel(yOffset) {
97877                         if (width && areaWidth >= width + 20) {
97878                             var labelX = centroid[0];
97879                             var labelY = centroid[1] + yOffset;
97880                             var bbox = {
97881                                 minX: labelX - (width / 2) - padding,
97882                                 minY: labelY - (height / 2) - padding,
97883                                 maxX: labelX + (width / 2) + padding,
97884                                 maxY: labelY + (height / 2) + padding
97885                             };
97886
97887                             if (tryInsert([bbox], entity.id, true)) {
97888                                 p.x = labelX;
97889                                 p.y = labelY;
97890                                 p.textAnchor = 'middle';
97891                                 p.height = height;
97892                                 return true;
97893                             }
97894                         }
97895                         return false;
97896                     }
97897                 }
97898
97899
97900                 // force insert a singular bounding box
97901                 // singular box only, no array, id better be unique
97902                 function doInsert(bbox, id) {
97903                     bbox.id = id;
97904
97905                     var oldbox = _entitybboxes[id];
97906                     if (oldbox) {
97907                         _rdrawn.remove(oldbox);
97908                     }
97909                     _entitybboxes[id] = bbox;
97910                     _rdrawn.insert(bbox);
97911                 }
97912
97913
97914                 function tryInsert(bboxes, id, saveSkipped) {
97915                     var skipped = false;
97916
97917                     for (var i = 0; i < bboxes.length; i++) {
97918                         var bbox = bboxes[i];
97919                         bbox.id = id;
97920
97921                         // Check that label is visible
97922                         if (bbox.minX < 0 || bbox.minY < 0 || bbox.maxX > dimensions[0] || bbox.maxY > dimensions[1]) {
97923                             skipped = true;
97924                             break;
97925                         }
97926                         if (_rdrawn.collides(bbox)) {
97927                             skipped = true;
97928                             break;
97929                         }
97930                     }
97931
97932                     _entitybboxes[id] = bboxes;
97933
97934                     if (skipped) {
97935                         if (saveSkipped) {
97936                             _rskipped.load(bboxes);
97937                         }
97938                     } else {
97939                         _rdrawn.load(bboxes);
97940                     }
97941
97942                     return !skipped;
97943                 }
97944
97945
97946                 var layer = selection.selectAll('.layer-osm.labels');
97947                 layer.selectAll('.labels-group')
97948                     .data(['halo', 'label', 'debug'])
97949                     .enter()
97950                     .append('g')
97951                     .attr('class', function(d) { return 'labels-group ' + d; });
97952
97953                 var halo = layer.selectAll('.labels-group.halo');
97954                 var label = layer.selectAll('.labels-group.label');
97955                 var debug = layer.selectAll('.labels-group.debug');
97956
97957                 // points
97958                 drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point);
97959                 drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point);
97960
97961                 // lines
97962                 drawLinePaths(layer, labelled.line, filter, '', positions.line);
97963                 drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line);
97964                 drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line);
97965
97966                 // areas
97967                 drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area);
97968                 drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area);
97969                 drawAreaIcons(label, labelled.area, filter, 'areaicon', positions.area);
97970                 drawAreaIcons(halo, labelled.area, filter, 'areaicon-halo', positions.area);
97971
97972                 // debug
97973                 drawCollisionBoxes(debug, _rskipped, 'debug-skipped');
97974                 drawCollisionBoxes(debug, _rdrawn, 'debug-drawn');
97975
97976                 layer.call(filterLabels);
97977             }
97978
97979
97980             function filterLabels(selection) {
97981                 var drawLayer = selection.selectAll('.layer-osm.labels');
97982                 var layers = drawLayer.selectAll('.labels-group.halo, .labels-group.label');
97983
97984                 layers.selectAll('.nolabel')
97985                     .classed('nolabel', false);
97986
97987                 var mouse = context.mouse();
97988                 var graph = context.graph();
97989                 var selectedIDs = context.selectedIDs();
97990                 var ids = [];
97991                 var pad, bbox;
97992
97993                 // hide labels near the mouse
97994                 if (mouse) {
97995                     pad = 20;
97996                     bbox = { minX: mouse[0] - pad, minY: mouse[1] - pad, maxX: mouse[0] + pad, maxY: mouse[1] + pad };
97997                     var nearMouse = _rdrawn.search(bbox).map(function(entity) { return entity.id; });
97998                     ids.push.apply(ids, nearMouse);
97999                 }
98000
98001                 // hide labels on selected nodes (they look weird when dragging / haloed)
98002                 for (var i = 0; i < selectedIDs.length; i++) {
98003                     var entity = graph.hasEntity(selectedIDs[i]);
98004                     if (entity && entity.type === 'node') {
98005                         ids.push(selectedIDs[i]);
98006                     }
98007                 }
98008
98009                 layers.selectAll(utilEntitySelector(ids))
98010                     .classed('nolabel', true);
98011
98012
98013                 // draw the mouse bbox if debugging is on..
98014                 var debug = selection.selectAll('.labels-group.debug');
98015                 var gj = [];
98016                 if (context.getDebug('collision')) {
98017                     gj = bbox ? [{
98018                         type: 'Polygon',
98019                         coordinates: [[
98020                             [bbox.minX, bbox.minY],
98021                             [bbox.maxX, bbox.minY],
98022                             [bbox.maxX, bbox.maxY],
98023                             [bbox.minX, bbox.maxY],
98024                             [bbox.minX, bbox.minY]
98025                         ]]
98026                     }] : [];
98027                 }
98028
98029                 var box = debug.selectAll('.debug-mouse')
98030                     .data(gj);
98031
98032                 // exit
98033                 box.exit()
98034                     .remove();
98035
98036                 // enter/update
98037                 box.enter()
98038                     .append('path')
98039                     .attr('class', 'debug debug-mouse yellow')
98040                     .merge(box)
98041                     .attr('d', d3_geoPath());
98042             }
98043
98044
98045             var throttleFilterLabels = throttle(filterLabels, 100);
98046
98047
98048             drawLabels.observe = function(selection) {
98049                 var listener = function() { throttleFilterLabels(selection); };
98050                 selection.on('mousemove.hidelabels', listener);
98051                 context.on('enter.hidelabels', listener);
98052             };
98053
98054
98055             drawLabels.off = function(selection) {
98056                 throttleFilterLabels.cancel();
98057                 selection.on('mousemove.hidelabels', null);
98058                 context.on('enter.hidelabels', null);
98059             };
98060
98061
98062             return drawLabels;
98063         }
98064
98065         var _improveOsmEnabled = false;
98066         var _errorService;
98067
98068
98069         function svgImproveOSM(projection, context, dispatch) {
98070             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
98071             var minZoom = 12;
98072             var touchLayer = d3_select(null);
98073             var drawLayer = d3_select(null);
98074             var _improveOsmVisible = false;
98075
98076             function markerPath(selection, klass) {
98077                 selection
98078                     .attr('class', klass)
98079                     .attr('transform', 'translate(-10, -28)')
98080                     .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');
98081             }
98082
98083
98084             // Loosely-coupled improveOSM service for fetching errors.
98085             function getService() {
98086                 if (services$1.improveOSM && !_errorService) {
98087                     _errorService = services$1.improveOSM;
98088                     _errorService.on('loaded', throttledRedraw);
98089                 } else if (!services$1.improveOSM && _errorService) {
98090                     _errorService = null;
98091                 }
98092
98093                 return _errorService;
98094             }
98095
98096
98097             // Show the errors
98098             function editOn() {
98099                 if (!_improveOsmVisible) {
98100                     _improveOsmVisible = true;
98101                     drawLayer
98102                         .style('display', 'block');
98103                 }
98104             }
98105
98106
98107             // Immediately remove the errors and their touch targets
98108             function editOff() {
98109                 if (_improveOsmVisible) {
98110                     _improveOsmVisible = false;
98111                     drawLayer
98112                         .style('display', 'none');
98113                     drawLayer.selectAll('.qa_error.improveOSM')
98114                         .remove();
98115                     touchLayer.selectAll('.qa_error.improveOSM')
98116                         .remove();
98117                 }
98118             }
98119
98120
98121             // Enable the layer.  This shows the errors and transitions them to visible.
98122             function layerOn() {
98123                 editOn();
98124
98125                 drawLayer
98126                     .style('opacity', 0)
98127                     .transition()
98128                     .duration(250)
98129                     .style('opacity', 1)
98130                     .on('end interrupt', function () {
98131                         dispatch.call('change');
98132                     });
98133             }
98134
98135
98136             // Disable the layer.  This transitions the layer invisible and then hides the errors.
98137             function layerOff() {
98138                 throttledRedraw.cancel();
98139                 drawLayer.interrupt();
98140                 touchLayer.selectAll('.qa_error.improveOSM')
98141                     .remove();
98142
98143                 drawLayer
98144                     .transition()
98145                     .duration(250)
98146                     .style('opacity', 0)
98147                     .on('end interrupt', function () {
98148                         editOff();
98149                         dispatch.call('change');
98150                     });
98151             }
98152
98153
98154             // Update the error markers
98155             function updateMarkers() {
98156                 if (!_improveOsmVisible || !_improveOsmEnabled) { return; }
98157
98158                 var service = getService();
98159                 var selectedID = context.selectedErrorID();
98160                 var data = (service ? service.getErrors(projection) : []);
98161                 var getTransform = svgPointTransform(projection);
98162
98163                 // Draw markers..
98164                 var markers = drawLayer.selectAll('.qa_error.improveOSM')
98165                     .data(data, function(d) { return d.id; });
98166
98167                 // exit
98168                 markers.exit()
98169                     .remove();
98170
98171                 // enter
98172                 var markersEnter = markers.enter()
98173                     .append('g')
98174                     .attr('class', function(d) {
98175                         return [
98176                             'qa_error',
98177                             d.service,
98178                             'error_id-' + d.id,
98179                             'error_type-' + d.error_type,
98180                             'category-' + d.category
98181                         ].join(' ');
98182                     });
98183
98184                 markersEnter
98185                     .append('polygon')
98186                     .call(markerPath, 'shadow');
98187
98188                 markersEnter
98189                     .append('ellipse')
98190                     .attr('cx', 0)
98191                     .attr('cy', 0)
98192                     .attr('rx', 4.5)
98193                     .attr('ry', 2)
98194                     .attr('class', 'stroke');
98195
98196                 markersEnter
98197                     .append('polygon')
98198                     .attr('fill', 'currentColor')
98199                     .call(markerPath, 'qa_error-fill');
98200
98201                 markersEnter
98202                     .append('use')
98203                     .attr('transform', 'translate(-5.5, -21)')
98204                     .attr('class', 'icon-annotation')
98205                     .attr('width', '11px')
98206                     .attr('height', '11px')
98207                     .attr('xlink:href', function(d) {
98208                         var picon = d.icon;
98209
98210                         if (!picon) {
98211                             return '';
98212                         } else {
98213                             var isMaki = /^maki-/.test(picon);
98214                             return '#' + picon + (isMaki ? '-11' : '');
98215                         }
98216                     });
98217
98218                 // update
98219                 markers
98220                     .merge(markersEnter)
98221                     .sort(sortY)
98222                     .classed('selected', function(d) { return d.id === selectedID; })
98223                     .attr('transform', getTransform);
98224
98225
98226                 // Draw targets..
98227                 if (touchLayer.empty()) { return; }
98228                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
98229
98230                 var targets = touchLayer.selectAll('.qa_error.improveOSM')
98231                     .data(data, function(d) { return d.id; });
98232
98233                 // exit
98234                 targets.exit()
98235                     .remove();
98236
98237                 // enter/update
98238                 targets.enter()
98239                     .append('rect')
98240                     .attr('width', '20px')
98241                     .attr('height', '30px')
98242                     .attr('x', '-10px')
98243                     .attr('y', '-28px')
98244                     .merge(targets)
98245                     .sort(sortY)
98246                     .attr('class', function(d) {
98247                         return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
98248                     })
98249                     .attr('transform', getTransform);
98250
98251
98252                 function sortY(a, b) {
98253                     return (a.id === selectedID) ? 1
98254                         : (b.id === selectedID) ? -1
98255                         : b.loc[1] - a.loc[1];
98256                 }
98257             }
98258
98259
98260             // Draw the ImproveOSM layer and schedule loading errors and updating markers.
98261             function drawImproveOSM(selection) {
98262                 var service = getService();
98263
98264                 var surface = context.surface();
98265                 if (surface && !surface.empty()) {
98266                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
98267                 }
98268
98269                 drawLayer = selection.selectAll('.layer-improveOSM')
98270                     .data(service ? [0] : []);
98271
98272                 drawLayer.exit()
98273                     .remove();
98274
98275                 drawLayer = drawLayer.enter()
98276                     .append('g')
98277                     .attr('class', 'layer-improveOSM')
98278                     .style('display', _improveOsmEnabled ? 'block' : 'none')
98279                     .merge(drawLayer);
98280
98281                 if (_improveOsmEnabled) {
98282                     if (service && ~~context.map().zoom() >= minZoom) {
98283                         editOn();
98284                         service.loadErrors(projection);
98285                         updateMarkers();
98286                     } else {
98287                         editOff();
98288                     }
98289                 }
98290             }
98291
98292
98293             // Toggles the layer on and off
98294             drawImproveOSM.enabled = function(val) {
98295                 if (!arguments.length) { return _improveOsmEnabled; }
98296
98297                 _improveOsmEnabled = val;
98298                 if (_improveOsmEnabled) {
98299                     layerOn();
98300                 } else {
98301                     layerOff();
98302                     if (context.selectedErrorID()) {
98303                         context.enter(modeBrowse(context));
98304                     }
98305                 }
98306
98307                 dispatch.call('change');
98308                 return this;
98309             };
98310
98311
98312             drawImproveOSM.supported = function() {
98313                 return !!getService();
98314             };
98315
98316
98317             return drawImproveOSM;
98318         }
98319
98320         function svgStreetside(projection, context, dispatch) {
98321             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
98322             var minZoom = 14;
98323             var minMarkerZoom = 16;
98324             var minViewfieldZoom = 18;
98325             var layer = d3_select(null);
98326             var _viewerYaw = 0;
98327             var _selectedSequence = null;
98328             var _streetside;
98329
98330             /**
98331              * init().
98332              */
98333             function init() {
98334                 if (svgStreetside.initialized) { return; }  // run once
98335                 svgStreetside.enabled = false;
98336                 svgStreetside.initialized = true;
98337             }
98338
98339             /**
98340              * getService().
98341              */
98342             function getService() {
98343                 if (services$1.streetside && !_streetside) {
98344                     _streetside = services$1.streetside;
98345                     _streetside.event
98346                         .on('viewerChanged', viewerChanged)
98347                         .on('loadedBubbles', throttledRedraw);
98348                 } else if (!services$1.streetside && _streetside) {
98349                     _streetside = null;
98350                 }
98351
98352                 return _streetside;
98353             }
98354
98355             /**
98356              * showLayer().
98357              */
98358             function showLayer() {
98359                 var service = getService();
98360                 if (!service) { return; }
98361
98362                 editOn();
98363
98364                 layer
98365                     .style('opacity', 0)
98366                     .transition()
98367                     .duration(250)
98368                     .style('opacity', 1)
98369                     .on('end', function () { dispatch.call('change'); });
98370             }
98371
98372             /**
98373              * hideLayer().
98374              */
98375             function hideLayer() {
98376                 throttledRedraw.cancel();
98377
98378                 layer
98379                     .transition()
98380                     .duration(250)
98381                     .style('opacity', 0)
98382                     .on('end', editOff);
98383             }
98384
98385             /**
98386              * editOn().
98387              */
98388             function editOn() {
98389                 layer.style('display', 'block');
98390             }
98391
98392             /**
98393              * editOff().
98394              */
98395             function editOff() {
98396                 layer.selectAll('.viewfield-group').remove();
98397                 layer.style('display', 'none');
98398             }
98399
98400             /**
98401              * click() Handles 'bubble' point click event.
98402              */
98403             function click(d) {
98404                 var service = getService();
98405                 if (!service) { return; }
98406
98407                 // try to preserve the viewer rotation when staying on the same sequence
98408                 if (d.sequenceKey !== _selectedSequence) {
98409                     _viewerYaw = 0;  // reset
98410                 }
98411                 _selectedSequence = d.sequenceKey;
98412
98413                 service
98414                     .selectImage(d)
98415                     .then(function (response) {
98416                         if (response.status === 'ok'){
98417                             service.showViewer(_viewerYaw);
98418                         }
98419                     });
98420
98421
98422                 context.map().centerEase(d.loc);
98423             }
98424
98425             /**
98426              * mouseover().
98427              */
98428             function mouseover(d) {
98429                 var service = getService();
98430                 if (service) { service.setStyles(d); }
98431             }
98432
98433             /**
98434              * mouseout().
98435              */
98436             function mouseout() {
98437                 var service = getService();
98438                 if (service) { service.setStyles(null); }
98439             }
98440
98441             /**
98442              * transform().
98443              */
98444             function transform(d) {
98445                 var t = svgPointTransform(projection)(d);
98446                 var rot = d.ca + _viewerYaw;
98447                 if (rot) {
98448                     t += ' rotate(' + Math.floor(rot) + ',0,0)';
98449                 }
98450                 return t;
98451             }
98452
98453
98454             function viewerChanged() {
98455                 var service = getService();
98456                 if (!service) { return; }
98457
98458                 var viewer = service.viewer();
98459                 if (!viewer) { return; }
98460
98461                 // update viewfield rotation
98462                 _viewerYaw = viewer.getYaw();
98463
98464                 // avoid updating if the map is currently transformed
98465                 // e.g. during drags or easing.
98466                 if (context.map().isTransformed()) { return; }
98467
98468                 layer.selectAll('.viewfield-group.currentView')
98469                     .attr('transform', transform);
98470             }
98471
98472
98473             context.photos().on('change.streetside', update);
98474
98475             /**
98476              * update().
98477              */
98478             function update() {
98479                 var viewer = d3_select('#photoviewer');
98480                 var selected = viewer.empty() ? undefined : viewer.datum();
98481                 var z = ~~context.map().zoom();
98482                 var showMarkers = (z >= minMarkerZoom);
98483                 var showViewfields = (z >= minViewfieldZoom);
98484                 var service = getService();
98485
98486                 var sequences = [];
98487                 var bubbles = [];
98488
98489                 if (context.photos().showsPanoramic()) {
98490                     sequences = (service ? service.sequences(projection) : []);
98491                     bubbles = (service && showMarkers ? service.bubbles(projection) : []);
98492                 }
98493
98494                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
98495                     .data(sequences, function(d) { return d.properties.key; });
98496
98497                 // exit
98498                 traces.exit()
98499                     .remove();
98500
98501                 // enter/update
98502                 traces = traces.enter()
98503                     .append('path')
98504                     .attr('class', 'sequence')
98505                     .merge(traces)
98506                     .attr('d', svgPath(projection).geojson);
98507
98508
98509                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
98510                     .data(bubbles, function(d) {
98511                         // force reenter once bubbles are attached to a sequence
98512                         return d.key + (d.sequenceKey ? 'v1' : 'v0');
98513                     });
98514
98515                 // exit
98516                 groups.exit()
98517                     .remove();
98518
98519                 // enter
98520                 var groupsEnter = groups.enter()
98521                     .append('g')
98522                     .attr('class', 'viewfield-group')
98523                     .on('mouseenter', mouseover)
98524                     .on('mouseleave', mouseout)
98525                     .on('click', click);
98526
98527                 groupsEnter
98528                     .append('g')
98529                     .attr('class', 'viewfield-scale');
98530
98531                 // update
98532                 var markers = groups
98533                     .merge(groupsEnter)
98534                     .sort(function(a, b) {
98535                         return (a === selected) ? 1
98536                             : (b === selected) ? -1
98537                             : b.loc[1] - a.loc[1];
98538                     })
98539                     .attr('transform', transform)
98540                     .select('.viewfield-scale');
98541
98542
98543                 markers.selectAll('circle')
98544                     .data([0])
98545                     .enter()
98546                     .append('circle')
98547                     .attr('dx', '0')
98548                     .attr('dy', '0')
98549                     .attr('r', '6');
98550
98551                 var viewfields = markers.selectAll('.viewfield')
98552                     .data(showViewfields ? [0] : []);
98553
98554                 viewfields.exit()
98555                     .remove();
98556
98557                 // viewfields may or may not be drawn...
98558                 // but if they are, draw below the circles
98559                 viewfields.enter()
98560                     .insert('path', 'circle')
98561                     .attr('class', 'viewfield')
98562                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
98563                     .attr('d', viewfieldPath);
98564
98565                 function viewfieldPath() {
98566                     var d = this.parentNode.__data__;
98567                     if (d.pano) {
98568                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
98569                     } else {
98570                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
98571                     }
98572                 }
98573
98574             }
98575
98576             /**
98577              * drawImages()
98578              * drawImages is the method that is returned (and that runs) everytime 'svgStreetside()' is called.
98579              * 'svgStreetside()' is called from index.js
98580              */
98581             function drawImages(selection) {
98582                 var enabled = svgStreetside.enabled;
98583                 var service = getService();
98584
98585                 layer = selection.selectAll('.layer-streetside-images')
98586                     .data(service ? [0] : []);
98587
98588                 layer.exit()
98589                     .remove();
98590
98591                 var layerEnter = layer.enter()
98592                     .append('g')
98593                     .attr('class', 'layer-streetside-images')
98594                     .style('display', enabled ? 'block' : 'none');
98595
98596                 layerEnter
98597                     .append('g')
98598                     .attr('class', 'sequences');
98599
98600                 layerEnter
98601                     .append('g')
98602                     .attr('class', 'markers');
98603
98604                 layer = layerEnter
98605                     .merge(layer);
98606
98607                 if (enabled) {
98608                     if (service && ~~context.map().zoom() >= minZoom) {
98609                         editOn();
98610                         update();
98611                         service.loadBubbles(projection);
98612                     } else {
98613                         editOff();
98614                     }
98615                 }
98616             }
98617
98618
98619             /**
98620              * drawImages.enabled().
98621              */
98622             drawImages.enabled = function(_) {
98623                 if (!arguments.length) { return svgStreetside.enabled; }
98624                 svgStreetside.enabled = _;
98625                 if (svgStreetside.enabled) {
98626                     showLayer();
98627                 } else {
98628                     hideLayer();
98629                 }
98630                 dispatch.call('change');
98631                 return this;
98632             };
98633
98634             /**
98635              * drawImages.supported().
98636              */
98637             drawImages.supported = function() {
98638                 return !!getService();
98639             };
98640
98641             init();
98642
98643             return drawImages;
98644         }
98645
98646         function svgMapillaryImages(projection, context, dispatch) {
98647             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
98648             var minZoom = 12;
98649             var minMarkerZoom = 16;
98650             var minViewfieldZoom = 18;
98651             var layer = d3_select(null);
98652             var _mapillary;
98653             var viewerCompassAngle;
98654
98655
98656             function init() {
98657                 if (svgMapillaryImages.initialized) { return; }  // run once
98658                 svgMapillaryImages.enabled = false;
98659                 svgMapillaryImages.initialized = true;
98660             }
98661
98662
98663             function getService() {
98664                 if (services$1.mapillary && !_mapillary) {
98665                     _mapillary = services$1.mapillary;
98666                     _mapillary.event.on('loadedImages', throttledRedraw);
98667                     _mapillary.event.on('bearingChanged', function(e) {
98668                         viewerCompassAngle = e;
98669
98670                         // avoid updating if the map is currently transformed
98671                         // e.g. during drags or easing.
98672                         if (context.map().isTransformed()) { return; }
98673
98674                         layer.selectAll('.viewfield-group.currentView')
98675                             .filter(function(d) {
98676                                 return d.pano;
98677                             })
98678                             .attr('transform', transform);
98679                     });
98680                 } else if (!services$1.mapillary && _mapillary) {
98681                     _mapillary = null;
98682                 }
98683
98684                 return _mapillary;
98685             }
98686
98687
98688             function showLayer() {
98689                 var service = getService();
98690                 if (!service) { return; }
98691
98692                 editOn();
98693
98694                 layer
98695                     .style('opacity', 0)
98696                     .transition()
98697                     .duration(250)
98698                     .style('opacity', 1)
98699                     .on('end', function () { dispatch.call('change'); });
98700             }
98701
98702
98703             function hideLayer() {
98704                 throttledRedraw.cancel();
98705
98706                 layer
98707                     .transition()
98708                     .duration(250)
98709                     .style('opacity', 0)
98710                     .on('end', editOff);
98711             }
98712
98713
98714             function editOn() {
98715                 layer.style('display', 'block');
98716             }
98717
98718
98719             function editOff() {
98720                 layer.selectAll('.viewfield-group').remove();
98721                 layer.style('display', 'none');
98722             }
98723
98724
98725             function click(d) {
98726                 var service = getService();
98727                 if (!service) { return; }
98728
98729                 service
98730                     .selectImage(d.key)
98731                     .updateViewer(d.key, context)
98732                     .showViewer();
98733
98734                 context.map().centerEase(d.loc);
98735             }
98736
98737
98738             function mouseover(d) {
98739                 var service = getService();
98740                 if (service) { service.setStyles(d); }
98741             }
98742
98743
98744             function mouseout() {
98745                 var service = getService();
98746                 if (service) { service.setStyles(null); }
98747             }
98748
98749
98750             function transform(d) {
98751                 var t = svgPointTransform(projection)(d);
98752                 if (d.pano && viewerCompassAngle !== null && isFinite(viewerCompassAngle)) {
98753                     t += ' rotate(' + Math.floor(viewerCompassAngle) + ',0,0)';
98754                 } else if (d.ca) {
98755                     t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
98756                 }
98757                 return t;
98758             }
98759
98760             context.photos().on('change.mapillary_images', update);
98761
98762             function filterImages(images) {
98763                 var showsPano = context.photos().showsPanoramic();
98764                 var showsFlat = context.photos().showsFlat();
98765                 if (!showsPano || !showsFlat) {
98766                     images = images.filter(function(image) {
98767                         if (image.pano) { return showsPano; }
98768                         return showsFlat;
98769                     });
98770                 }
98771                 return images;
98772             }
98773
98774             function filterSequences(sequences, service) {
98775                 var showsPano = context.photos().showsPanoramic();
98776                 var showsFlat = context.photos().showsFlat();
98777                 if (!showsPano || !showsFlat) {
98778                     sequences = sequences.filter(function(sequence) {
98779                         if (sequence.properties.hasOwnProperty('pano')) {
98780                             if (sequence.properties.pano) { return showsPano; }
98781                             return showsFlat;
98782                         } else {
98783                             // if the sequence doesn't specify pano or not, search its images
98784                             var cProps = sequence.properties.coordinateProperties;
98785                             if (cProps && cProps.image_keys && cProps.image_keys.length > 0) {
98786                                 for (var index in cProps.image_keys) {
98787                                     var imageKey = cProps.image_keys[index];
98788                                     var image = service.cachedImage(imageKey);
98789                                     if (image && image.hasOwnProperty('pano')) {
98790                                         if (image.pano) { return showsPano; }
98791                                         return showsFlat;
98792                                     }
98793                                 }
98794                             }
98795                         }
98796                     });
98797                 }
98798                 return sequences;
98799             }
98800
98801             function update() {
98802
98803                 var z = ~~context.map().zoom();
98804                 var showMarkers = (z >= minMarkerZoom);
98805                 var showViewfields = (z >= minViewfieldZoom);
98806
98807                 var service = getService();
98808                 var selectedKey = service && service.getSelectedImageKey();
98809                 var sequences = (service ? service.sequences(projection) : []);
98810                 var images = (service && showMarkers ? service.images(projection) : []);
98811
98812                 images = filterImages(images);
98813                 sequences = filterSequences(sequences, service);
98814
98815                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
98816                     .data(sequences, function(d) { return d.properties.key; });
98817
98818                 // exit
98819                 traces.exit()
98820                     .remove();
98821
98822                 // enter/update
98823                 traces = traces.enter()
98824                     .append('path')
98825                     .attr('class', 'sequence')
98826                     .merge(traces)
98827                     .attr('d', svgPath(projection).geojson);
98828
98829
98830                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
98831                     .data(images, function(d) { return d.key; });
98832
98833                 // exit
98834                 groups.exit()
98835                     .remove();
98836
98837                 // enter
98838                 var groupsEnter = groups.enter()
98839                     .append('g')
98840                     .attr('class', 'viewfield-group')
98841                     .on('mouseenter', mouseover)
98842                     .on('mouseleave', mouseout)
98843                     .on('click', click);
98844
98845                 groupsEnter
98846                     .append('g')
98847                     .attr('class', 'viewfield-scale');
98848
98849                 // update
98850                 var markers = groups
98851                     .merge(groupsEnter)
98852                     .sort(function(a, b) {
98853                         return (a.key === selectedKey) ? 1
98854                             : (b.key === selectedKey) ? -1
98855                             : b.loc[1] - a.loc[1];  // sort Y
98856                     })
98857                     .attr('transform', transform)
98858                     .select('.viewfield-scale');
98859
98860
98861                 markers.selectAll('circle')
98862                     .data([0])
98863                     .enter()
98864                     .append('circle')
98865                     .attr('dx', '0')
98866                     .attr('dy', '0')
98867                     .attr('r', '6');
98868
98869                 var viewfields = markers.selectAll('.viewfield')
98870                     .data(showViewfields ? [0] : []);
98871
98872                 viewfields.exit()
98873                     .remove();
98874
98875                 viewfields.enter()               // viewfields may or may not be drawn...
98876                     .insert('path', 'circle')    // but if they are, draw below the circles
98877                     .attr('class', 'viewfield')
98878                     .classed('pano', function() { return this.parentNode.__data__.pano; })
98879                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
98880                     .attr('d', viewfieldPath);
98881
98882                 function viewfieldPath() {
98883                     var d = this.parentNode.__data__;
98884                     if (d.pano) {
98885                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
98886                     } else {
98887                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
98888                     }
98889                 }
98890             }
98891
98892
98893             function drawImages(selection) {
98894                 var enabled = svgMapillaryImages.enabled;
98895                 var service = getService();
98896
98897                 layer = selection.selectAll('.layer-mapillary')
98898                     .data(service ? [0] : []);
98899
98900                 layer.exit()
98901                     .remove();
98902
98903                 var layerEnter = layer.enter()
98904                     .append('g')
98905                     .attr('class', 'layer-mapillary')
98906                     .style('display', enabled ? 'block' : 'none');
98907
98908                 layerEnter
98909                     .append('g')
98910                     .attr('class', 'sequences');
98911
98912                 layerEnter
98913                     .append('g')
98914                     .attr('class', 'markers');
98915
98916                 layer = layerEnter
98917                     .merge(layer);
98918
98919                 if (enabled) {
98920                     if (service && ~~context.map().zoom() >= minZoom) {
98921                         editOn();
98922                         update();
98923                         service.loadImages(projection);
98924                     } else {
98925                         editOff();
98926                     }
98927                 }
98928             }
98929
98930
98931             drawImages.enabled = function(_) {
98932                 if (!arguments.length) { return svgMapillaryImages.enabled; }
98933                 svgMapillaryImages.enabled = _;
98934                 if (svgMapillaryImages.enabled) {
98935                     showLayer();
98936                 } else {
98937                     hideLayer();
98938                 }
98939                 dispatch.call('change');
98940                 return this;
98941             };
98942
98943
98944             drawImages.supported = function() {
98945                 return !!getService();
98946             };
98947
98948
98949             init();
98950             return drawImages;
98951         }
98952
98953         function svgMapillarySigns(projection, context, dispatch) {
98954             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
98955             var minZoom = 12;
98956             var layer = d3_select(null);
98957             var _mapillary;
98958
98959
98960             function init() {
98961                 if (svgMapillarySigns.initialized) { return; }  // run once
98962                 svgMapillarySigns.enabled = false;
98963                 svgMapillarySigns.initialized = true;
98964             }
98965
98966
98967             function getService() {
98968                 if (services$1.mapillary && !_mapillary) {
98969                     _mapillary = services$1.mapillary;
98970                     _mapillary.event.on('loadedSigns', throttledRedraw);
98971                 } else if (!services$1.mapillary && _mapillary) {
98972                     _mapillary = null;
98973                 }
98974                 return _mapillary;
98975             }
98976
98977
98978             function showLayer() {
98979                 var service = getService();
98980                 if (!service) { return; }
98981
98982                 editOn();
98983             }
98984
98985
98986             function hideLayer() {
98987                 throttledRedraw.cancel();
98988                 editOff();
98989             }
98990
98991
98992             function editOn() {
98993                 layer.style('display', 'block');
98994             }
98995
98996
98997             function editOff() {
98998                 layer.selectAll('.icon-sign').remove();
98999                 layer.style('display', 'none');
99000             }
99001
99002
99003             function click(d) {
99004                 var service = getService();
99005                 if (!service) { return; }
99006
99007                 context.map().centerEase(d.loc);
99008
99009                 var selectedImageKey = service.getSelectedImageKey();
99010                 var imageKey;
99011
99012                 // Pick one of the images the sign was detected in,
99013                 // preference given to an image already selected.
99014                 d.detections.forEach(function(detection) {
99015                     if (!imageKey || selectedImageKey === detection.image_key) {
99016                         imageKey = detection.image_key;
99017                     }
99018                 });
99019
99020                 service
99021                     .selectImage(imageKey)
99022                     .updateViewer(imageKey, context)
99023                     .showViewer();
99024             }
99025
99026
99027             function update() {
99028                 var service = getService();
99029                 var data = (service ? service.signs(projection) : []);
99030                 var selectedImageKey = service.getSelectedImageKey();
99031                 var transform = svgPointTransform(projection);
99032
99033                 var signs = layer.selectAll('.icon-sign')
99034                     .data(data, function(d) { return d.key; });
99035
99036                 // exit
99037                 signs.exit()
99038                     .remove();
99039
99040                 // enter
99041                 var enter = signs.enter()
99042                     .append('g')
99043                     .attr('class', 'icon-sign icon-detected')
99044                     .on('click', click);
99045
99046                 enter
99047                     .append('use')
99048                     .attr('width', '24px')
99049                     .attr('height', '24px')
99050                     .attr('x', '-12px')
99051                     .attr('y', '-12px')
99052                     .attr('xlink:href', function(d) { return '#' + d.value; });
99053
99054                 enter
99055                     .append('rect')
99056                     .attr('width', '24px')
99057                     .attr('height', '24px')
99058                     .attr('x', '-12px')
99059                     .attr('y', '-12px');
99060
99061                 // update
99062                 signs
99063                     .merge(enter)
99064                     .attr('transform', transform)
99065                     .classed('currentView', function(d) {
99066                         return d.detections.some(function(detection) {
99067                             return detection.image_key === selectedImageKey;
99068                         });
99069                     })
99070                     .sort(function(a, b) {
99071                         var aSelected = a.detections.some(function(detection) {
99072                             return detection.image_key === selectedImageKey;
99073                         });
99074                         var bSelected = b.detections.some(function(detection) {
99075                             return detection.image_key === selectedImageKey;
99076                         });
99077                         if (aSelected === bSelected) {
99078                             return b.loc[1] - a.loc[1]; // sort Y
99079                         } else if (aSelected) {
99080                             return 1;
99081                         }
99082                         return -1;
99083                     });
99084             }
99085
99086
99087             function drawSigns(selection) {
99088                 var enabled = svgMapillarySigns.enabled;
99089                 var service = getService();
99090
99091                 layer = selection.selectAll('.layer-mapillary-signs')
99092                     .data(service ? [0] : []);
99093
99094                 layer.exit()
99095                     .remove();
99096
99097                 layer = layer.enter()
99098                     .append('g')
99099                     .attr('class', 'layer-mapillary-signs layer-mapillary-detections')
99100                     .style('display', enabled ? 'block' : 'none')
99101                     .merge(layer);
99102
99103                 if (enabled) {
99104                     if (service && ~~context.map().zoom() >= minZoom) {
99105                         editOn();
99106                         update();
99107                         service.loadSigns(projection);
99108                     } else {
99109                         editOff();
99110                     }
99111                 }
99112             }
99113
99114
99115             drawSigns.enabled = function(_) {
99116                 if (!arguments.length) { return svgMapillarySigns.enabled; }
99117                 svgMapillarySigns.enabled = _;
99118                 if (svgMapillarySigns.enabled) {
99119                     showLayer();
99120                 } else {
99121                     hideLayer();
99122                 }
99123                 dispatch.call('change');
99124                 return this;
99125             };
99126
99127
99128             drawSigns.supported = function() {
99129                 return !!getService();
99130             };
99131
99132
99133             init();
99134             return drawSigns;
99135         }
99136
99137         function svgMapillaryMapFeatures(projection, context, dispatch) {
99138             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
99139             var minZoom = 12;
99140             var layer = d3_select(null);
99141             var _mapillary;
99142
99143
99144             function init() {
99145                 if (svgMapillaryMapFeatures.initialized) { return; }  // run once
99146                 svgMapillaryMapFeatures.enabled = false;
99147                 svgMapillaryMapFeatures.initialized = true;
99148             }
99149
99150
99151             function getService() {
99152                 if (services$1.mapillary && !_mapillary) {
99153                     _mapillary = services$1.mapillary;
99154                     _mapillary.event.on('loadedMapFeatures', throttledRedraw);
99155                 } else if (!services$1.mapillary && _mapillary) {
99156                     _mapillary = null;
99157                 }
99158                 return _mapillary;
99159             }
99160
99161
99162             function showLayer() {
99163                 var service = getService();
99164                 if (!service) { return; }
99165
99166                 editOn();
99167             }
99168
99169
99170             function hideLayer() {
99171                 throttledRedraw.cancel();
99172                 editOff();
99173             }
99174
99175
99176             function editOn() {
99177                 layer.style('display', 'block');
99178             }
99179
99180
99181             function editOff() {
99182                 layer.selectAll('.icon-map-feature').remove();
99183                 layer.style('display', 'none');
99184             }
99185
99186
99187             function click(d) {
99188                 var service = getService();
99189                 if (!service) { return; }
99190
99191                 context.map().centerEase(d.loc);
99192
99193                 var selectedImageKey = service.getSelectedImageKey();
99194                 var imageKey;
99195
99196                 // Pick one of the images the map feature was detected in,
99197                 // preference given to an image already selected.
99198                 d.detections.forEach(function(detection) {
99199                     if (!imageKey || selectedImageKey === detection.image_key) {
99200                         imageKey = detection.image_key;
99201                     }
99202                 });
99203
99204                 service
99205                     .selectImage(imageKey)
99206                     .updateViewer(imageKey, context)
99207                     .showViewer();
99208             }
99209
99210
99211             function update() {
99212                 var service = getService();
99213                 var data = (service ? service.mapFeatures(projection) : []);
99214                 var selectedImageKey = service && service.getSelectedImageKey();
99215                 var transform = svgPointTransform(projection);
99216
99217                 var mapFeatures = layer.selectAll('.icon-map-feature')
99218                     .data(data, function(d) { return d.key; });
99219
99220                 // exit
99221                 mapFeatures.exit()
99222                     .remove();
99223
99224                 // enter
99225                 var enter = mapFeatures.enter()
99226                     .append('g')
99227                     .attr('class', 'icon-map-feature icon-detected')
99228                     .on('click', click);
99229
99230                 enter
99231                     .append('title')
99232                     .text(function(d) {
99233                         var id = d.value.replace(/--/g, '.').replace(/-/g, '_');
99234                         return t('mapillary_map_features.' + id);
99235                     });
99236
99237                 enter
99238                     .append('use')
99239                     .attr('width', '24px')
99240                     .attr('height', '24px')
99241                     .attr('x', '-12px')
99242                     .attr('y', '-12px')
99243                     .attr('xlink:href', function(d) {
99244                         if (d.value === 'object--billboard') {
99245                             // no billboard icon right now, so use the advertisement icon
99246                             return '#object--sign--advertisement';
99247                         }
99248                         return '#' + d.value;
99249                     });
99250
99251                 enter
99252                     .append('rect')
99253                     .attr('width', '24px')
99254                     .attr('height', '24px')
99255                     .attr('x', '-12px')
99256                     .attr('y', '-12px');
99257
99258                 // update
99259                 mapFeatures
99260                     .merge(enter)
99261                     .attr('transform', transform)
99262                     .classed('currentView', function(d) {
99263                         return d.detections.some(function(detection) {
99264                             return detection.image_key === selectedImageKey;
99265                         });
99266                     })
99267                     .sort(function(a, b) {
99268                         var aSelected = a.detections.some(function(detection) {
99269                             return detection.image_key === selectedImageKey;
99270                         });
99271                         var bSelected = b.detections.some(function(detection) {
99272                             return detection.image_key === selectedImageKey;
99273                         });
99274                         if (aSelected === bSelected) {
99275                             return b.loc[1] - a.loc[1]; // sort Y
99276                         } else if (aSelected) {
99277                             return 1;
99278                         }
99279                         return -1;
99280                     });
99281             }
99282
99283
99284             function drawMapFeatures(selection) {
99285                 var enabled = svgMapillaryMapFeatures.enabled;
99286                 var service = getService();
99287
99288                 layer = selection.selectAll('.layer-mapillary-map-features')
99289                     .data(service ? [0] : []);
99290
99291                 layer.exit()
99292                     .remove();
99293
99294                 layer = layer.enter()
99295                     .append('g')
99296                     .attr('class', 'layer-mapillary-map-features layer-mapillary-detections')
99297                     .style('display', enabled ? 'block' : 'none')
99298                     .merge(layer);
99299
99300                 if (enabled) {
99301                     if (service && ~~context.map().zoom() >= minZoom) {
99302                         editOn();
99303                         update();
99304                         service.loadMapFeatures(projection);
99305                     } else {
99306                         editOff();
99307                     }
99308                 }
99309             }
99310
99311
99312             drawMapFeatures.enabled = function(_) {
99313                 if (!arguments.length) { return svgMapillaryMapFeatures.enabled; }
99314                 svgMapillaryMapFeatures.enabled = _;
99315                 if (svgMapillaryMapFeatures.enabled) {
99316                     showLayer();
99317                 } else {
99318                     hideLayer();
99319                 }
99320                 dispatch.call('change');
99321                 return this;
99322             };
99323
99324
99325             drawMapFeatures.supported = function() {
99326                 return !!getService();
99327             };
99328
99329
99330             init();
99331             return drawMapFeatures;
99332         }
99333
99334         function svgOpenstreetcamImages(projection, context, dispatch) {
99335             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
99336             var minZoom = 12;
99337             var minMarkerZoom = 16;
99338             var minViewfieldZoom = 18;
99339             var layer = d3_select(null);
99340             var _openstreetcam;
99341
99342
99343             function init() {
99344                 if (svgOpenstreetcamImages.initialized) { return; }  // run once
99345                 svgOpenstreetcamImages.enabled = false;
99346                 svgOpenstreetcamImages.initialized = true;
99347             }
99348
99349
99350             function getService() {
99351                 if (services$1.openstreetcam && !_openstreetcam) {
99352                     _openstreetcam = services$1.openstreetcam;
99353                     _openstreetcam.event.on('loadedImages', throttledRedraw);
99354                 } else if (!services$1.openstreetcam && _openstreetcam) {
99355                     _openstreetcam = null;
99356                 }
99357
99358                 return _openstreetcam;
99359             }
99360
99361
99362             function showLayer() {
99363                 var service = getService();
99364                 if (!service) { return; }
99365
99366                 editOn();
99367
99368                 layer
99369                     .style('opacity', 0)
99370                     .transition()
99371                     .duration(250)
99372                     .style('opacity', 1)
99373                     .on('end', function () { dispatch.call('change'); });
99374             }
99375
99376
99377             function hideLayer() {
99378                 throttledRedraw.cancel();
99379
99380                 layer
99381                     .transition()
99382                     .duration(250)
99383                     .style('opacity', 0)
99384                     .on('end', editOff);
99385             }
99386
99387
99388             function editOn() {
99389                 layer.style('display', 'block');
99390             }
99391
99392
99393             function editOff() {
99394                 layer.selectAll('.viewfield-group').remove();
99395                 layer.style('display', 'none');
99396             }
99397
99398
99399             function click(d) {
99400                 var service = getService();
99401                 if (!service) { return; }
99402
99403                 service
99404                     .selectImage(d)
99405                     .updateViewer(d)
99406                     .showViewer();
99407
99408                 context.map().centerEase(d.loc);
99409             }
99410
99411
99412             function mouseover(d) {
99413                 var service = getService();
99414                 if (service) { service.setStyles(d); }
99415             }
99416
99417
99418             function mouseout() {
99419                 var service = getService();
99420                 if (service) { service.setStyles(null); }
99421             }
99422
99423
99424             function transform(d) {
99425                 var t = svgPointTransform(projection)(d);
99426                 if (d.ca) {
99427                     t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
99428                 }
99429                 return t;
99430             }
99431
99432
99433             context.photos().on('change.openstreetcam_images', update);
99434
99435             function update() {
99436                 var viewer = d3_select('#photoviewer');
99437                 var selected = viewer.empty() ? undefined : viewer.datum();
99438
99439                 var z = ~~context.map().zoom();
99440                 var showMarkers = (z >= minMarkerZoom);
99441                 var showViewfields = (z >= minViewfieldZoom);
99442
99443                 var service = getService();
99444                 var sequences = [];
99445                 var images = [];
99446
99447                 if (context.photos().showsFlat()) {
99448                     sequences = (service ? service.sequences(projection) : []);
99449                     images = (service && showMarkers ? service.images(projection) : []);
99450                 }
99451
99452                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
99453                     .data(sequences, function(d) { return d.properties.key; });
99454
99455                 // exit
99456                 traces.exit()
99457                     .remove();
99458
99459                 // enter/update
99460                 traces = traces.enter()
99461                     .append('path')
99462                     .attr('class', 'sequence')
99463                     .merge(traces)
99464                     .attr('d', svgPath(projection).geojson);
99465
99466
99467                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
99468                     .data(images, function(d) { return d.key; });
99469
99470                 // exit
99471                 groups.exit()
99472                     .remove();
99473
99474                 // enter
99475                 var groupsEnter = groups.enter()
99476                     .append('g')
99477                     .attr('class', 'viewfield-group')
99478                     .on('mouseenter', mouseover)
99479                     .on('mouseleave', mouseout)
99480                     .on('click', click);
99481
99482                 groupsEnter
99483                     .append('g')
99484                     .attr('class', 'viewfield-scale');
99485
99486                 // update
99487                 var markers = groups
99488                     .merge(groupsEnter)
99489                     .sort(function(a, b) {
99490                         return (a === selected) ? 1
99491                             : (b === selected) ? -1
99492                             : b.loc[1] - a.loc[1];  // sort Y
99493                     })
99494                     .attr('transform', transform)
99495                     .select('.viewfield-scale');
99496
99497
99498                 markers.selectAll('circle')
99499                     .data([0])
99500                     .enter()
99501                     .append('circle')
99502                     .attr('dx', '0')
99503                     .attr('dy', '0')
99504                     .attr('r', '6');
99505
99506                 var viewfields = markers.selectAll('.viewfield')
99507                     .data(showViewfields ? [0] : []);
99508
99509                 viewfields.exit()
99510                     .remove();
99511
99512                 viewfields.enter()               // viewfields may or may not be drawn...
99513                     .insert('path', 'circle')    // but if they are, draw below the circles
99514                     .attr('class', 'viewfield')
99515                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
99516                     .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');
99517             }
99518
99519
99520             function drawImages(selection) {
99521                 var enabled = svgOpenstreetcamImages.enabled,
99522                     service = getService();
99523
99524                 layer = selection.selectAll('.layer-openstreetcam')
99525                     .data(service ? [0] : []);
99526
99527                 layer.exit()
99528                     .remove();
99529
99530                 var layerEnter = layer.enter()
99531                     .append('g')
99532                     .attr('class', 'layer-openstreetcam')
99533                     .style('display', enabled ? 'block' : 'none');
99534
99535                 layerEnter
99536                     .append('g')
99537                     .attr('class', 'sequences');
99538
99539                 layerEnter
99540                     .append('g')
99541                     .attr('class', 'markers');
99542
99543                 layer = layerEnter
99544                     .merge(layer);
99545
99546                 if (enabled) {
99547                     if (service && ~~context.map().zoom() >= minZoom) {
99548                         editOn();
99549                         update();
99550                         service.loadImages(projection);
99551                     } else {
99552                         editOff();
99553                     }
99554                 }
99555             }
99556
99557
99558             drawImages.enabled = function(_) {
99559                 if (!arguments.length) { return svgOpenstreetcamImages.enabled; }
99560                 svgOpenstreetcamImages.enabled = _;
99561                 if (svgOpenstreetcamImages.enabled) {
99562                     showLayer();
99563                 } else {
99564                     hideLayer();
99565                 }
99566                 dispatch.call('change');
99567                 return this;
99568             };
99569
99570
99571             drawImages.supported = function() {
99572                 return !!getService();
99573             };
99574
99575
99576             init();
99577             return drawImages;
99578         }
99579
99580         function svgOsm(projection, context, dispatch) {
99581             var enabled = true;
99582
99583
99584             function drawOsm(selection) {
99585                 selection.selectAll('.layer-osm')
99586                     .data(['covered', 'areas', 'lines', 'points', 'labels'])
99587                     .enter()
99588                     .append('g')
99589                     .attr('class', function(d) { return 'layer-osm ' + d; });
99590
99591                 selection.selectAll('.layer-osm.points').selectAll('.points-group')
99592                     .data(['points', 'midpoints', 'vertices', 'turns'])
99593                     .enter()
99594                     .append('g')
99595                     .attr('class', function(d) { return 'points-group ' + d; });
99596             }
99597
99598
99599             function showLayer() {
99600                 var layer = context.surface().selectAll('.data-layer.osm');
99601                 layer.interrupt();
99602
99603                 layer
99604                     .classed('disabled', false)
99605                     .style('opacity', 0)
99606                     .transition()
99607                     .duration(250)
99608                     .style('opacity', 1)
99609                     .on('end interrupt', function () {
99610                         dispatch.call('change');
99611                     });
99612             }
99613
99614
99615             function hideLayer() {
99616                 var layer = context.surface().selectAll('.data-layer.osm');
99617                 layer.interrupt();
99618
99619                 layer
99620                     .transition()
99621                     .duration(250)
99622                     .style('opacity', 0)
99623                     .on('end interrupt', function () {
99624                         layer.classed('disabled', true);
99625                         dispatch.call('change');
99626                     });
99627             }
99628
99629
99630             drawOsm.enabled = function(val) {
99631                 if (!arguments.length) { return enabled; }
99632                 enabled = val;
99633
99634                 if (enabled) {
99635                     showLayer();
99636                 } else {
99637                     hideLayer();
99638                 }
99639
99640                 dispatch.call('change');
99641                 return this;
99642             };
99643
99644
99645             return drawOsm;
99646         }
99647
99648         var _notesEnabled = false;
99649         var _osmService;
99650
99651
99652         function svgNotes(projection, context, dispatch$1) {
99653             if (!dispatch$1) { dispatch$1 = dispatch('change'); }
99654             var throttledRedraw = throttle(function () { dispatch$1.call('change'); }, 1000);
99655             var minZoom = 12;
99656             var touchLayer = d3_select(null);
99657             var drawLayer = d3_select(null);
99658             var _notesVisible = false;
99659
99660
99661             function markerPath(selection, klass) {
99662                 selection
99663                     .attr('class', klass)
99664                     .attr('transform', 'translate(-8, -22)')
99665                     .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');
99666             }
99667
99668
99669             // Loosely-coupled osm service for fetching notes.
99670             function getService() {
99671                 if (services$1.osm && !_osmService) {
99672                     _osmService = services$1.osm;
99673                     _osmService.on('loadedNotes', throttledRedraw);
99674                 } else if (!services$1.osm && _osmService) {
99675                     _osmService = null;
99676                 }
99677
99678                 return _osmService;
99679             }
99680
99681
99682             // Show the notes
99683             function editOn() {
99684                 if (!_notesVisible) {
99685                     _notesVisible = true;
99686                     drawLayer
99687                         .style('display', 'block');
99688                 }
99689             }
99690
99691
99692             // Immediately remove the notes and their touch targets
99693             function editOff() {
99694                 if (_notesVisible) {
99695                     _notesVisible = false;
99696                     drawLayer
99697                         .style('display', 'none');
99698                     drawLayer.selectAll('.note')
99699                         .remove();
99700                     touchLayer.selectAll('.note')
99701                         .remove();
99702                 }
99703             }
99704
99705
99706             // Enable the layer.  This shows the notes and transitions them to visible.
99707             function layerOn() {
99708                 editOn();
99709
99710                 drawLayer
99711                     .style('opacity', 0)
99712                     .transition()
99713                     .duration(250)
99714                     .style('opacity', 1)
99715                     .on('end interrupt', function () {
99716                         dispatch$1.call('change');
99717                     });
99718             }
99719
99720
99721             // Disable the layer.  This transitions the layer invisible and then hides the notes.
99722             function layerOff() {
99723                 throttledRedraw.cancel();
99724                 drawLayer.interrupt();
99725                 touchLayer.selectAll('.note')
99726                     .remove();
99727
99728                 drawLayer
99729                     .transition()
99730                     .duration(250)
99731                     .style('opacity', 0)
99732                     .on('end interrupt', function () {
99733                         editOff();
99734                         dispatch$1.call('change');
99735                     });
99736             }
99737
99738
99739             // Update the note markers
99740             function updateMarkers() {
99741                 if (!_notesVisible || !_notesEnabled) { return; }
99742
99743                 var service = getService();
99744                 var selectedID = context.selectedNoteID();
99745                 var data = (service ? service.notes(projection) : []);
99746                 var getTransform = svgPointTransform(projection);
99747
99748                 // Draw markers..
99749                 var notes = drawLayer.selectAll('.note')
99750                     .data(data, function(d) { return d.status + d.id; });
99751
99752                 // exit
99753                 notes.exit()
99754                     .remove();
99755
99756                 // enter
99757                 var notesEnter = notes.enter()
99758                     .append('g')
99759                     .attr('class', function(d) { return 'note note-' + d.id + ' ' + d.status; })
99760                     .classed('new', function(d) { return d.id < 0; });
99761
99762                 notesEnter
99763                     .append('ellipse')
99764                     .attr('cx', 0.5)
99765                     .attr('cy', 1)
99766                     .attr('rx', 6.5)
99767                     .attr('ry', 3)
99768                     .attr('class', 'stroke');
99769
99770                 notesEnter
99771                     .append('path')
99772                     .call(markerPath, 'shadow');
99773
99774                 notesEnter
99775                     .append('use')
99776                     .attr('class', 'note-fill')
99777                     .attr('width', '20px')
99778                     .attr('height', '20px')
99779                     .attr('x', '-8px')
99780                     .attr('y', '-22px')
99781                     .attr('xlink:href', '#iD-icon-note');
99782
99783                 notesEnter.selectAll('.icon-annotation')
99784                     .data(function(d) { return [d]; })
99785                     .enter()
99786                     .append('use')
99787                     .attr('class', 'icon-annotation')
99788                     .attr('width', '10px')
99789                     .attr('height', '10px')
99790                     .attr('x', '-3px')
99791                     .attr('y', '-19px')
99792                     .attr('xlink:href', function(d) {
99793                         return '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
99794                     });
99795
99796                 // update
99797                 notes
99798                     .merge(notesEnter)
99799                     .sort(sortY)
99800                     .classed('selected', function(d) {
99801                         var mode = context.mode();
99802                         var isMoving = mode && mode.id === 'drag-note';  // no shadows when dragging
99803                         return !isMoving && d.id === selectedID;
99804                     })
99805                     .attr('transform', getTransform);
99806
99807
99808                 // Draw targets..
99809                 if (touchLayer.empty()) { return; }
99810                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
99811
99812                 var targets = touchLayer.selectAll('.note')
99813                     .data(data, function(d) { return d.id; });
99814
99815                 // exit
99816                 targets.exit()
99817                     .remove();
99818
99819                 // enter/update
99820                 targets.enter()
99821                     .append('rect')
99822                     .attr('width', '20px')
99823                     .attr('height', '20px')
99824                     .attr('x', '-8px')
99825                     .attr('y', '-22px')
99826                     .merge(targets)
99827                     .sort(sortY)
99828                     .attr('class', function(d) {
99829                         var newClass = (d.id < 0 ? 'new' : '');
99830                         return 'note target note-' + d.id + ' ' + fillClass + newClass;
99831                     })
99832                     .attr('transform', getTransform);
99833
99834
99835                 function sortY(a, b) {
99836                     return (a.id === selectedID) ? 1 : (b.id === selectedID) ? -1 : b.loc[1] - a.loc[1];
99837                 }
99838             }
99839
99840
99841             // Draw the notes layer and schedule loading notes and updating markers.
99842             function drawNotes(selection) {
99843                 var service = getService();
99844
99845                 var surface = context.surface();
99846                 if (surface && !surface.empty()) {
99847                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
99848                 }
99849
99850                 drawLayer = selection.selectAll('.layer-notes')
99851                     .data(service ? [0] : []);
99852
99853                 drawLayer.exit()
99854                     .remove();
99855
99856                 drawLayer = drawLayer.enter()
99857                     .append('g')
99858                     .attr('class', 'layer-notes')
99859                     .style('display', _notesEnabled ? 'block' : 'none')
99860                     .merge(drawLayer);
99861
99862                 if (_notesEnabled) {
99863                     if (service && ~~context.map().zoom() >= minZoom) {
99864                         editOn();
99865                         service.loadNotes(projection);
99866                         updateMarkers();
99867                     } else {
99868                         editOff();
99869                     }
99870                 }
99871             }
99872
99873
99874             // Toggles the layer on and off
99875             drawNotes.enabled = function(val) {
99876                 if (!arguments.length) { return _notesEnabled; }
99877
99878                 _notesEnabled = val;
99879                 if (_notesEnabled) {
99880                     layerOn();
99881                 } else {
99882                     layerOff();
99883                     if (context.selectedNoteID()) {
99884                         context.enter(modeBrowse(context));
99885                     }
99886                 }
99887
99888                 dispatch$1.call('change');
99889                 return this;
99890             };
99891
99892
99893             return drawNotes;
99894         }
99895
99896         function svgTouch() {
99897
99898             function drawTouch(selection) {
99899                 selection.selectAll('.layer-touch')
99900                     .data(['areas', 'lines', 'points', 'turns', 'markers'])
99901                     .enter()
99902                     .append('g')
99903                     .attr('class', function(d) { return 'layer-touch ' + d; });
99904             }
99905
99906             return drawTouch;
99907         }
99908
99909         function svgLayers(projection, context) {
99910             var dispatch$1 = dispatch('change');
99911             var svg = d3_select(null);
99912             var _layers = [
99913                 { id: 'osm', layer: svgOsm(projection, context, dispatch$1) },
99914                 { id: 'notes', layer: svgNotes(projection, context, dispatch$1) },
99915                 { id: 'data', layer: svgData(projection, context, dispatch$1) },
99916                 { id: 'keepRight', layer: svgKeepRight(projection, context, dispatch$1) },
99917                 { id: 'improveOSM', layer: svgImproveOSM(projection, context, dispatch$1) },
99918                 { id: 'streetside', layer: svgStreetside(projection, context, dispatch$1)},
99919                 { id: 'mapillary', layer: svgMapillaryImages(projection, context, dispatch$1) },
99920                 { id: 'mapillary-map-features',  layer: svgMapillaryMapFeatures(projection, context, dispatch$1) },
99921                 { id: 'mapillary-signs',  layer: svgMapillarySigns(projection, context, dispatch$1) },
99922                 { id: 'openstreetcam', layer: svgOpenstreetcamImages(projection, context, dispatch$1) },
99923                 { id: 'debug', layer: svgDebug(projection, context) },
99924                 { id: 'geolocate', layer: svgGeolocate(projection) },
99925                 { id: 'touch', layer: svgTouch() }
99926             ];
99927
99928
99929             function drawLayers(selection) {
99930                 svg = selection.selectAll('.surface')
99931                     .data([0]);
99932
99933                 svg = svg.enter()
99934                     .append('svg')
99935                     .attr('class', 'surface')
99936                     .merge(svg);
99937
99938                 var defs = svg.selectAll('.surface-defs')
99939                     .data([0]);
99940
99941                 defs.enter()
99942                     .append('defs')
99943                     .attr('class', 'surface-defs');
99944
99945                 var groups = svg.selectAll('.data-layer')
99946                     .data(_layers);
99947
99948                 groups.exit()
99949                     .remove();
99950
99951                 groups.enter()
99952                     .append('g')
99953                     .attr('class', function(d) { return 'data-layer ' + d.id; })
99954                     .merge(groups)
99955                     .each(function(d) { d3_select(this).call(d.layer); });
99956             }
99957
99958
99959             drawLayers.all = function() {
99960                 return _layers;
99961             };
99962
99963
99964             drawLayers.layer = function(id) {
99965                 var obj = _layers.find(function(o) { return o.id === id; });
99966                 return obj && obj.layer;
99967             };
99968
99969
99970             drawLayers.only = function(what) {
99971                 var arr = [].concat(what);
99972                 var all = _layers.map(function(layer) { return layer.id; });
99973                 return drawLayers.remove(utilArrayDifference(all, arr));
99974             };
99975
99976
99977             drawLayers.remove = function(what) {
99978                 var arr = [].concat(what);
99979                 arr.forEach(function(id) {
99980                     _layers = _layers.filter(function(o) { return o.id !== id; });
99981                 });
99982                 dispatch$1.call('change');
99983                 return this;
99984             };
99985
99986
99987             drawLayers.add = function(what) {
99988                 var arr = [].concat(what);
99989                 arr.forEach(function(obj) {
99990                     if ('id' in obj && 'layer' in obj) {
99991                         _layers.push(obj);
99992                     }
99993                 });
99994                 dispatch$1.call('change');
99995                 return this;
99996             };
99997
99998
99999             drawLayers.dimensions = function(val) {
100000                 if (!arguments.length) { return utilGetDimensions(svg); }
100001                 utilSetDimensions(svg, val);
100002                 return this;
100003             };
100004
100005
100006             return utilRebind(drawLayers, dispatch$1, 'on');
100007         }
100008
100009         function svgLines(projection, context) {
100010             var detected = utilDetect();
100011
100012             var highway_stack = {
100013                 motorway: 0,
100014                 motorway_link: 1,
100015                 trunk: 2,
100016                 trunk_link: 3,
100017                 primary: 4,
100018                 primary_link: 5,
100019                 secondary: 6,
100020                 tertiary: 7,
100021                 unclassified: 8,
100022                 residential: 9,
100023                 service: 10,
100024                 footway: 11
100025             };
100026
100027
100028             function drawTargets(selection, graph, entities, filter) {
100029                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
100030                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
100031                 var getPath = svgPath(projection).geojson;
100032                 var activeID = context.activeID();
100033                 var base = context.history().base();
100034
100035                 // The targets and nopes will be MultiLineString sub-segments of the ways
100036                 var data = { targets: [], nopes: [] };
100037
100038                 entities.forEach(function(way) {
100039                     var features = svgSegmentWay(way, graph, activeID);
100040                     data.targets.push.apply(data.targets, features.passive);
100041                     data.nopes.push.apply(data.nopes, features.active);
100042                 });
100043
100044
100045                 // Targets allow hover and vertex snapping
100046                 var targetData = data.targets.filter(getPath);
100047                 var targets = selection.selectAll('.line.target-allowed')
100048                     .filter(function(d) { return filter(d.properties.entity); })
100049                     .data(targetData, function key(d) { return d.id; });
100050
100051                 // exit
100052                 targets.exit()
100053                     .remove();
100054
100055                 var segmentWasEdited = function(d) {
100056                     var wayID = d.properties.entity.id;
100057                     // if the whole line was edited, don't draw segment changes
100058                     if (!base.entities[wayID] ||
100059                         !fastDeepEqual(graph.entities[wayID].nodes, base.entities[wayID].nodes)) {
100060                         return false;
100061                     }
100062                     return d.properties.nodes.some(function(n) {
100063                         return !base.entities[n.id] ||
100064                                !fastDeepEqual(graph.entities[n.id].loc, base.entities[n.id].loc);
100065                     });
100066                 };
100067
100068                 // enter/update
100069                 targets.enter()
100070                     .append('path')
100071                     .merge(targets)
100072                     .attr('d', getPath)
100073                     .attr('class', function(d) {
100074                         return 'way line target target-allowed ' + targetClass + d.id;
100075                     })
100076                     .classed('segment-edited', segmentWasEdited);
100077
100078                 // NOPE
100079                 var nopeData = data.nopes.filter(getPath);
100080                 var nopes = selection.selectAll('.line.target-nope')
100081                     .filter(function(d) { return filter(d.properties.entity); })
100082                     .data(nopeData, function key(d) { return d.id; });
100083
100084                 // exit
100085                 nopes.exit()
100086                     .remove();
100087
100088                 // enter/update
100089                 nopes.enter()
100090                     .append('path')
100091                     .merge(nopes)
100092                     .attr('d', getPath)
100093                     .attr('class', function(d) {
100094                         return 'way line target target-nope ' + nopeClass + d.id;
100095                     })
100096                     .classed('segment-edited', segmentWasEdited);
100097             }
100098
100099
100100             function drawLines(selection, graph, entities, filter) {
100101                 var base = context.history().base();
100102
100103                 function waystack(a, b) {
100104                     var selected = context.selectedIDs();
100105                     var scoreA = selected.indexOf(a.id) !== -1 ? 20 : 0;
100106                     var scoreB = selected.indexOf(b.id) !== -1 ? 20 : 0;
100107
100108                     if (a.tags.highway) { scoreA -= highway_stack[a.tags.highway]; }
100109                     if (b.tags.highway) { scoreB -= highway_stack[b.tags.highway]; }
100110                     return scoreA - scoreB;
100111                 }
100112
100113
100114                 function drawLineGroup(selection, klass, isSelected) {
100115                     // Note: Don't add `.selected` class in draw modes
100116                     var mode = context.mode();
100117                     var isDrawing = mode && /^draw/.test(mode.id);
100118                     var selectedClass = (!isDrawing && isSelected) ? 'selected ' : '';
100119
100120                     var lines = selection
100121                         .selectAll('path')
100122                         .filter(filter)
100123                         .data(getPathData(isSelected), osmEntity.key);
100124
100125                     lines.exit()
100126                         .remove();
100127
100128                     // Optimization: Call expensive TagClasses only on enter selection. This
100129                     // works because osmEntity.key is defined to include the entity v attribute.
100130                     lines.enter()
100131                         .append('path')
100132                         .attr('class', function(d) {
100133
100134                             var prefix = 'way line';
100135
100136                             // if this line isn't styled by its own tags
100137                             if (!d.hasInterestingTags()) {
100138
100139                                 var parentRelations = graph.parentRelations(d);
100140                                 var parentMultipolygons = parentRelations.filter(function(relation) {
100141                                     return relation.isMultipolygon();
100142                                 });
100143
100144                                 // and if it's a member of at least one multipolygon relation
100145                                 if (parentMultipolygons.length > 0 &&
100146                                     // and only multipolygon relations
100147                                     parentRelations.length === parentMultipolygons.length) {
100148                                     // then fudge the classes to style this as an area edge
100149                                     prefix = 'relation area';
100150                                 }
100151                             }
100152
100153                             var oldMPClass = oldMultiPolygonOuters[d.id] ? 'old-multipolygon ' : '';
100154                             return prefix + ' ' + klass + ' ' + selectedClass + oldMPClass + d.id;
100155                         })
100156                         .classed('added', function(d) {
100157                             return !base.entities[d.id];
100158                         })
100159                         .classed('geometry-edited', function(d) {
100160                             return graph.entities[d.id] &&
100161                                 base.entities[d.id] &&
100162                                 !fastDeepEqual(graph.entities[d.id].nodes, base.entities[d.id].nodes);
100163                         })
100164                         .classed('retagged', function(d) {
100165                             return graph.entities[d.id] &&
100166                                 base.entities[d.id] &&
100167                                 !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
100168                         })
100169                         .call(svgTagClasses())
100170                         .merge(lines)
100171                         .sort(waystack)
100172                         .attr('d', getPath)
100173                         .call(svgTagClasses().tags(svgRelationMemberTags(graph)));
100174
100175                     return selection;
100176                 }
100177
100178
100179                 function getPathData(isSelected) {
100180                     return function() {
100181                         var layer = this.parentNode.__data__;
100182                         var data = pathdata[layer] || [];
100183                         return data.filter(function(d) {
100184                             if (isSelected)
100185                                 { return context.selectedIDs().indexOf(d.id) !== -1; }
100186                             else
100187                                 { return context.selectedIDs().indexOf(d.id) === -1; }
100188                         });
100189                     };
100190                 }
100191
100192                 function addMarkers(layergroup, pathclass, groupclass, groupdata, marker) {
100193                     var markergroup = layergroup
100194                         .selectAll('g.' + groupclass)
100195                         .data([pathclass]);
100196
100197                     markergroup = markergroup.enter()
100198                         .append('g')
100199                         .attr('class', groupclass)
100200                         .merge(markergroup);
100201
100202                     var markers = markergroup
100203                         .selectAll('path')
100204                         .filter(filter)
100205                         .data(
100206                             function data() { return groupdata[this.parentNode.__data__] || []; },
100207                             function key(d) { return [d.id, d.index]; }
100208                         );
100209
100210                     markers.exit()
100211                         .remove();
100212
100213                     markers = markers.enter()
100214                         .append('path')
100215                         .attr('class', pathclass)
100216                         .merge(markers)
100217                         .attr('marker-mid', marker)
100218                         .attr('d', function(d) { return d.d; });
100219
100220                     if (detected.ie) {
100221                         markers.each(function() { this.parentNode.insertBefore(this, this); });
100222                     }
100223                 }
100224
100225
100226                 var getPath = svgPath(projection, graph);
100227                 var ways = [];
100228                 var onewaydata = {};
100229                 var sideddata = {};
100230                 var oldMultiPolygonOuters = {};
100231
100232                 for (var i = 0; i < entities.length; i++) {
100233                     var entity = entities[i];
100234                     var outer = osmOldMultipolygonOuterMember(entity, graph);
100235                     if (outer) {
100236                         ways.push(entity.mergeTags(outer.tags));
100237                         oldMultiPolygonOuters[outer.id] = true;
100238                     } else if (entity.geometry(graph) === 'line') {
100239                         ways.push(entity);
100240                     }
100241                 }
100242
100243                 ways = ways.filter(getPath);
100244                 var pathdata = utilArrayGroupBy(ways, function(way) { return way.layer(); });
100245
100246                 Object.keys(pathdata).forEach(function(k) {
100247                     var v = pathdata[k];
100248                     var onewayArr = v.filter(function(d) { return d.isOneWay(); });
100249                     var onewaySegments = svgMarkerSegments(
100250                         projection, graph, 35,
100251                         function shouldReverse(entity) { return entity.tags.oneway === '-1'; },
100252                         function bothDirections(entity) {
100253                             return entity.tags.oneway === 'reversible' || entity.tags.oneway === 'alternating';
100254                         }
100255                     );
100256                     onewaydata[k] = utilArrayFlatten(onewayArr.map(onewaySegments));
100257
100258                     var sidedArr = v.filter(function(d) { return d.isSided(); });
100259                     var sidedSegments = svgMarkerSegments(
100260                         projection, graph, 30,
100261                         function shouldReverse() { return false; },
100262                         function bothDirections() { return false; }
100263                     );
100264                     sideddata[k] = utilArrayFlatten(sidedArr.map(sidedSegments));
100265                 });
100266
100267
100268                 var covered = selection.selectAll('.layer-osm.covered');     // under areas
100269                 var uncovered = selection.selectAll('.layer-osm.lines');     // over areas
100270                 var touchLayer = selection.selectAll('.layer-touch.lines');
100271
100272                 // Draw lines..
100273                 [covered, uncovered].forEach(function(selection) {
100274                     var range = (selection === covered ? d3_range(-10,0) : d3_range(0,11));
100275                     var layergroup = selection
100276                         .selectAll('g.layergroup')
100277                         .data(range);
100278
100279                     layergroup = layergroup.enter()
100280                         .append('g')
100281                         .attr('class', function(d) { return 'layergroup layer' + String(d); })
100282                         .merge(layergroup);
100283
100284                     layergroup
100285                         .selectAll('g.linegroup')
100286                         .data(['shadow', 'casing', 'stroke', 'shadow-highlighted', 'casing-highlighted', 'stroke-highlighted'])
100287                         .enter()
100288                         .append('g')
100289                         .attr('class', function(d) { return 'linegroup line-' + d; });
100290
100291                     layergroup.selectAll('g.line-shadow')
100292                         .call(drawLineGroup, 'shadow', false);
100293                     layergroup.selectAll('g.line-casing')
100294                         .call(drawLineGroup, 'casing', false);
100295                     layergroup.selectAll('g.line-stroke')
100296                         .call(drawLineGroup, 'stroke', false);
100297
100298                     layergroup.selectAll('g.line-shadow-highlighted')
100299                         .call(drawLineGroup, 'shadow', true);
100300                     layergroup.selectAll('g.line-casing-highlighted')
100301                         .call(drawLineGroup, 'casing', true);
100302                     layergroup.selectAll('g.line-stroke-highlighted')
100303                         .call(drawLineGroup, 'stroke', true);
100304
100305                     addMarkers(layergroup, 'oneway', 'onewaygroup', onewaydata, 'url(#oneway-marker)');
100306                     addMarkers(layergroup, 'sided', 'sidedgroup', sideddata,
100307                         function marker(d) {
100308                             var category = graph.entity(d.id).sidednessIdentifier();
100309                             return 'url(#sided-marker-' + category + ')';
100310                         }
100311                     );
100312                 });
100313
100314                 // Draw touch targets..
100315                 touchLayer
100316                     .call(drawTargets, graph, ways, filter);
100317             }
100318
100319
100320             return drawLines;
100321         }
100322
100323         function svgMidpoints(projection, context) {
100324             var targetRadius = 8;
100325
100326             function drawTargets(selection, graph, entities, filter) {
100327                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
100328                 var getTransform = svgPointTransform(projection).geojson;
100329
100330                 var data = entities.map(function(midpoint) {
100331                     return {
100332                         type: 'Feature',
100333                         id: midpoint.id,
100334                         properties: {
100335                             target: true,
100336                             entity: midpoint
100337                         },
100338                         geometry: {
100339                             type: 'Point',
100340                             coordinates: midpoint.loc
100341                         }
100342                     };
100343                 });
100344
100345                 var targets = selection.selectAll('.midpoint.target')
100346                     .filter(function(d) { return filter(d.properties.entity); })
100347                     .data(data, function key(d) { return d.id; });
100348
100349                 // exit
100350                 targets.exit()
100351                     .remove();
100352
100353                 // enter/update
100354                 targets.enter()
100355                     .append('circle')
100356                     .attr('r', targetRadius)
100357                     .merge(targets)
100358                     .attr('class', function(d) { return 'node midpoint target ' + fillClass + d.id; })
100359                     .attr('transform', getTransform);
100360             }
100361
100362
100363             function drawMidpoints(selection, graph, entities, filter, extent) {
100364                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.midpoints');
100365                 var touchLayer = selection.selectAll('.layer-touch.points');
100366
100367                 var mode = context.mode();
100368                 if ((mode && mode.id !== 'select') || !context.map().withinEditableZoom()) {
100369                     drawLayer.selectAll('.midpoint').remove();
100370                     touchLayer.selectAll('.midpoint.target').remove();
100371                     return;
100372                 }
100373
100374                 var poly = extent.polygon();
100375                 var midpoints = {};
100376
100377                 for (var i = 0; i < entities.length; i++) {
100378                     var entity = entities[i];
100379
100380                     if (entity.type !== 'way') { continue; }
100381                     if (!filter(entity)) { continue; }
100382                     if (context.selectedIDs().indexOf(entity.id) < 0) { continue; }
100383
100384                     var nodes = graph.childNodes(entity);
100385                     for (var j = 0; j < nodes.length - 1; j++) {
100386                         var a = nodes[j];
100387                         var b = nodes[j + 1];
100388                         var id = [a.id, b.id].sort().join('-');
100389
100390                         if (midpoints[id]) {
100391                             midpoints[id].parents.push(entity);
100392                         } else if (geoVecLength(projection(a.loc), projection(b.loc)) > 40) {
100393                             var point = geoVecInterp(a.loc, b.loc, 0.5);
100394                             var loc = null;
100395
100396                             if (extent.intersects(point)) {
100397                                 loc = point;
100398                             } else {
100399                                 for (var k = 0; k < 4; k++) {
100400                                     point = geoLineIntersection([a.loc, b.loc], [poly[k], poly[k + 1]]);
100401                                     if (point &&
100402                                         geoVecLength(projection(a.loc), projection(point)) > 20 &&
100403                                         geoVecLength(projection(b.loc), projection(point)) > 20)
100404                                     {
100405                                         loc = point;
100406                                         break;
100407                                     }
100408                                 }
100409                             }
100410
100411                             if (loc) {
100412                                 midpoints[id] = {
100413                                     type: 'midpoint',
100414                                     id: id,
100415                                     loc: loc,
100416                                     edge: [a.id, b.id],
100417                                     parents: [entity]
100418                                 };
100419                             }
100420                         }
100421                     }
100422                 }
100423
100424
100425                 function midpointFilter(d) {
100426                     if (midpoints[d.id])
100427                         { return true; }
100428
100429                     for (var i = 0; i < d.parents.length; i++) {
100430                         if (filter(d.parents[i])) {
100431                             return true;
100432                         }
100433                     }
100434
100435                     return false;
100436                 }
100437
100438
100439                 var groups = drawLayer.selectAll('.midpoint')
100440                     .filter(midpointFilter)
100441                     .data(Object.values(midpoints), function(d) { return d.id; });
100442
100443                 groups.exit()
100444                     .remove();
100445
100446                 var enter = groups.enter()
100447                     .insert('g', ':first-child')
100448                     .attr('class', 'midpoint');
100449
100450                 enter
100451                     .append('polygon')
100452                     .attr('points', '-6,8 10,0 -6,-8')
100453                     .attr('class', 'shadow');
100454
100455                 enter
100456                     .append('polygon')
100457                     .attr('points', '-3,4 5,0 -3,-4')
100458                     .attr('class', 'fill');
100459
100460                 groups = groups
100461                     .merge(enter)
100462                     .attr('transform', function(d) {
100463                         var translate = svgPointTransform(projection);
100464                         var a = graph.entity(d.edge[0]);
100465                         var b = graph.entity(d.edge[1]);
100466                         var angle = geoAngle(a, b, projection) * (180 / Math.PI);
100467                         return translate(d) + ' rotate(' + angle + ')';
100468                     })
100469                     .call(svgTagClasses().tags(
100470                         function(d) { return d.parents[0].tags; }
100471                     ));
100472
100473                 // Propagate data bindings.
100474                 groups.select('polygon.shadow');
100475                 groups.select('polygon.fill');
100476
100477
100478                 // Draw touch targets..
100479                 touchLayer
100480                     .call(drawTargets, graph, Object.values(midpoints), midpointFilter);
100481             }
100482
100483             return drawMidpoints;
100484         }
100485
100486         function svgPoints(projection, context) {
100487
100488             function markerPath(selection, klass) {
100489                 selection
100490                     .attr('class', klass)
100491                     .attr('transform', 'translate(-8, -23)')
100492                     .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');
100493             }
100494
100495             function sortY(a, b) {
100496                 return b.loc[1] - a.loc[1];
100497             }
100498
100499
100500             // Avoid exit/enter if we're just moving stuff around.
100501             // The node will get a new version but we only need to run the update selection.
100502             function fastEntityKey(d) {
100503                 var mode = context.mode();
100504                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
100505                 return isMoving ? d.id : osmEntity.key(d);
100506             }
100507
100508
100509             function drawTargets(selection, graph, entities, filter) {
100510                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
100511                 var getTransform = svgPointTransform(projection).geojson;
100512                 var activeID = context.activeID();
100513                 var data = [];
100514
100515                 entities.forEach(function(node) {
100516                     if (activeID === node.id) { return; }   // draw no target on the activeID
100517
100518                     data.push({
100519                         type: 'Feature',
100520                         id: node.id,
100521                         properties: {
100522                             target: true,
100523                             entity: node
100524                         },
100525                         geometry: node.asGeoJSON()
100526                     });
100527                 });
100528
100529                 var targets = selection.selectAll('.point.target')
100530                     .filter(function(d) { return filter(d.properties.entity); })
100531                     .data(data, function key(d) { return d.id; });
100532
100533                 // exit
100534                 targets.exit()
100535                     .remove();
100536
100537                 // enter/update
100538                 targets.enter()
100539                     .append('rect')
100540                     .attr('x', -10)
100541                     .attr('y', -26)
100542                     .attr('width', 20)
100543                     .attr('height', 30)
100544                     .merge(targets)
100545                     .attr('class', function(d) { return 'node point target ' + fillClass + d.id; })
100546                     .attr('transform', getTransform);
100547             }
100548
100549
100550             function drawPoints(selection, graph, entities, filter) {
100551                 var wireframe = context.surface().classed('fill-wireframe');
100552                 var zoom = geoScaleToZoom(projection.scale());
100553                 var base = context.history().base();
100554
100555                 // Points with a direction will render as vertices at higher zooms..
100556                 function renderAsPoint(entity) {
100557                     return entity.geometry(graph) === 'point' &&
100558                         !(zoom >= 18 && entity.directions(graph, projection).length);
100559                 }
100560
100561                 // All points will render as vertices in wireframe mode too..
100562                 var points = wireframe ? [] : entities.filter(renderAsPoint);
100563                 points.sort(sortY);
100564
100565
100566                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.points');
100567                 var touchLayer = selection.selectAll('.layer-touch.points');
100568
100569                 // Draw points..
100570                 var groups = drawLayer.selectAll('g.point')
100571                     .filter(filter)
100572                     .data(points, fastEntityKey);
100573
100574                 groups.exit()
100575                     .remove();
100576
100577                 var enter = groups.enter()
100578                     .append('g')
100579                     .attr('class', function(d) { return 'node point ' + d.id; })
100580                     .order();
100581
100582                 enter
100583                     .append('path')
100584                     .call(markerPath, 'shadow');
100585
100586                 enter
100587                     .append('ellipse')
100588                     .attr('cx', 0.5)
100589                     .attr('cy', 1)
100590                     .attr('rx', 6.5)
100591                     .attr('ry', 3)
100592                     .attr('class', 'stroke');
100593
100594                 enter
100595                     .append('path')
100596                     .call(markerPath, 'stroke');
100597
100598                 enter
100599                     .append('use')
100600                     .attr('transform', 'translate(-5, -19)')
100601                     .attr('class', 'icon')
100602                     .attr('width', '11px')
100603                     .attr('height', '11px');
100604
100605                 groups = groups
100606                     .merge(enter)
100607                     .attr('transform', svgPointTransform(projection))
100608                     .classed('added', function(d) {
100609                         return !base.entities[d.id]; // if it doesn't exist in the base graph, it's new
100610                     })
100611                     .classed('moved', function(d) {
100612                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].loc, base.entities[d.id].loc);
100613                     })
100614                     .classed('retagged', function(d) {
100615                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
100616                     })
100617                     .call(svgTagClasses());
100618
100619                 groups.select('.shadow');   // propagate bound data
100620                 groups.select('.stroke');   // propagate bound data
100621                 groups.select('.icon')      // propagate bound data
100622                     .attr('xlink:href', function(entity) {
100623                         var preset = context.presets().match(entity, graph);
100624                         var picon = preset && preset.icon;
100625
100626                         if (!picon) {
100627                             return '';
100628                         } else {
100629                             var isMaki = /^maki-/.test(picon);
100630                             return '#' + picon + (isMaki ? '-11' : '');
100631                         }
100632                     });
100633
100634
100635                 // Draw touch targets..
100636                 touchLayer
100637                     .call(drawTargets, graph, points, filter);
100638             }
100639
100640
100641             return drawPoints;
100642         }
100643
100644         function svgTurns(projection, context) {
100645
100646             function icon(turn) {
100647                 var u = turn.u ? '-u' : '';
100648                 if (turn.no) { return '#iD-turn-no' + u; }
100649                 if (turn.only) { return '#iD-turn-only' + u; }
100650                 return '#iD-turn-yes' + u;
100651             }
100652
100653             function drawTurns(selection, graph, turns) {
100654
100655                 function turnTransform(d) {
100656                     var pxRadius = 50;
100657                     var toWay = graph.entity(d.to.way);
100658                     var toPoints = graph.childNodes(toWay)
100659                         .map(function (n) { return n.loc; })
100660                         .map(projection);
100661                     var toLength = geoPathLength(toPoints);
100662                     var mid = toLength / 2;    // midpoint of destination way
100663
100664                     var toNode = graph.entity(d.to.node);
100665                     var toVertex = graph.entity(d.to.vertex);
100666                     var a = geoAngle(toVertex, toNode, projection);
100667                     var o = projection(toVertex.loc);
100668                     var r = d.u ? 0                  // u-turn: no radius
100669                         : !toWay.__via ? pxRadius    // leaf way: put marker at pxRadius
100670                         : Math.min(mid, pxRadius);   // via way: prefer pxRadius, fallback to mid for very short ways
100671
100672                     return 'translate(' + (r * Math.cos(a) + o[0]) + ',' + (r * Math.sin(a) + o[1]) + ') ' +
100673                         'rotate(' + a * 180 / Math.PI + ')';
100674                 }
100675
100676
100677                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.turns');
100678                 var touchLayer = selection.selectAll('.layer-touch.turns');
100679
100680                 // Draw turns..
100681                 var groups = drawLayer.selectAll('g.turn')
100682                     .data(turns, function(d) { return d.key; });
100683
100684                 // exit
100685                 groups.exit()
100686                     .remove();
100687
100688                 // enter
100689                 var groupsEnter = groups.enter()
100690                     .append('g')
100691                     .attr('class', function(d) { return 'turn ' + d.key; });
100692
100693                 var turnsEnter = groupsEnter
100694                     .filter(function(d) { return !d.u; });
100695
100696                 turnsEnter.append('rect')
100697                     .attr('transform', 'translate(-22, -12)')
100698                     .attr('width', '44')
100699                     .attr('height', '24');
100700
100701                 turnsEnter.append('use')
100702                     .attr('transform', 'translate(-22, -12)')
100703                     .attr('width', '44')
100704                     .attr('height', '24');
100705
100706                 var uEnter = groupsEnter
100707                     .filter(function(d) { return d.u; });
100708
100709                 uEnter.append('circle')
100710                     .attr('r', '16');
100711
100712                 uEnter.append('use')
100713                     .attr('transform', 'translate(-16, -16)')
100714                     .attr('width', '32')
100715                     .attr('height', '32');
100716
100717                 // update
100718                 groups = groups
100719                     .merge(groupsEnter)
100720                     .attr('opacity', function(d) { return d.direct === false ? '0.7' : null; })
100721                     .attr('transform', turnTransform);
100722
100723                 groups.select('use')
100724                     .attr('xlink:href', icon);
100725
100726                 groups.select('rect');      // propagate bound data
100727                 groups.select('circle');    // propagate bound data
100728
100729
100730                 // Draw touch targets..
100731                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
100732                 groups = touchLayer.selectAll('g.turn')
100733                     .data(turns, function(d) { return d.key; });
100734
100735                 // exit
100736                 groups.exit()
100737                     .remove();
100738
100739                 // enter
100740                 groupsEnter = groups.enter()
100741                     .append('g')
100742                     .attr('class', function(d) { return 'turn ' + d.key; });
100743
100744                 turnsEnter = groupsEnter
100745                     .filter(function(d) { return !d.u; });
100746
100747                 turnsEnter.append('rect')
100748                     .attr('class', 'target ' + fillClass)
100749                     .attr('transform', 'translate(-22, -12)')
100750                     .attr('width', '44')
100751                     .attr('height', '24');
100752
100753                 uEnter = groupsEnter
100754                     .filter(function(d) { return d.u; });
100755
100756                 uEnter.append('circle')
100757                     .attr('class', 'target ' + fillClass)
100758                     .attr('r', '16');
100759
100760                 // update
100761                 groups = groups
100762                     .merge(groupsEnter)
100763                     .attr('transform', turnTransform);
100764
100765                 groups.select('rect');      // propagate bound data
100766                 groups.select('circle');    // propagate bound data
100767
100768
100769                 return this;
100770             }
100771
100772             return drawTurns;
100773         }
100774
100775         function svgVertices(projection, context) {
100776             var radiuses = {
100777                 //       z16-, z17,   z18+,  w/icon
100778                 shadow: [6,    7.5,   7.5,   12],
100779                 stroke: [2.5,  3.5,   3.5,   8],
100780                 fill:   [1,    1.5,   1.5,   1.5]
100781             };
100782
100783             var _currHoverTarget;
100784             var _currPersistent = {};
100785             var _currHover = {};
100786             var _prevHover = {};
100787             var _currSelected = {};
100788             var _prevSelected = {};
100789             var _radii = {};
100790
100791
100792             function sortY(a, b) {
100793                 return b.loc[1] - a.loc[1];
100794             }
100795
100796             // Avoid exit/enter if we're just moving stuff around.
100797             // The node will get a new version but we only need to run the update selection.
100798             function fastEntityKey(d) {
100799                 var mode = context.mode();
100800                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
100801                 return isMoving ? d.id : osmEntity.key(d);
100802             }
100803
100804
100805             function draw(selection, graph, vertices, sets, filter) {
100806                 sets = sets || { selected: {}, important: {}, hovered: {} };
100807
100808                 var icons = {};
100809                 var directions = {};
100810                 var wireframe = context.surface().classed('fill-wireframe');
100811                 var zoom = geoScaleToZoom(projection.scale());
100812                 var z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2);
100813                 var activeID = context.activeID();
100814                 var base = context.history().base();
100815
100816
100817                 function getIcon(d) {
100818                     // always check latest entity, as fastEntityKey avoids enter/exit now
100819                     var entity = graph.entity(d.id);
100820                     if (entity.id in icons) { return icons[entity.id]; }
100821
100822                     icons[entity.id] =
100823                         entity.hasInterestingTags() &&
100824                         context.presets().match(entity, graph).icon;
100825
100826                     return icons[entity.id];
100827                 }
100828
100829
100830                 // memoize directions results, return false for empty arrays (for use in filter)
100831                 function getDirections(entity) {
100832                     if (entity.id in directions) { return directions[entity.id]; }
100833
100834                     var angles = entity.directions(graph, projection);
100835                     directions[entity.id] = angles.length ? angles : false;
100836                     return angles;
100837                 }
100838
100839
100840                 function updateAttributes(selection) {
100841                     ['shadow', 'stroke', 'fill'].forEach(function(klass) {
100842                         var rads = radiuses[klass];
100843                         selection.selectAll('.' + klass)
100844                             .each(function(entity) {
100845                                 var i = z && getIcon(entity);
100846                                 var r = rads[i ? 3 : z];
100847
100848                                 // slightly increase the size of unconnected endpoints #3775
100849                                 if (entity.id !== activeID && entity.isEndpoint(graph) && !entity.isConnected(graph)) {
100850                                     r += 1.5;
100851                                 }
100852
100853                                 if (klass === 'shadow') {   // remember this value, so we don't need to
100854                                     _radii[entity.id] = r;  // recompute it when we draw the touch targets
100855                                 }
100856
100857                                 d3_select(this)
100858                                     .attr('r', r)
100859                                     .attr('visibility', (i && klass === 'fill') ? 'hidden' : null);
100860                             });
100861                     });
100862                 }
100863
100864                 vertices.sort(sortY);
100865
100866                 var groups = selection.selectAll('g.vertex')
100867                     .filter(filter)
100868                     .data(vertices, fastEntityKey);
100869
100870                 // exit
100871                 groups.exit()
100872                     .remove();
100873
100874                 // enter
100875                 var enter = groups.enter()
100876                     .append('g')
100877                     .attr('class', function(d) { return 'node vertex ' + d.id; })
100878                     .order();
100879
100880                 enter
100881                     .append('circle')
100882                     .attr('class', 'shadow');
100883
100884                 enter
100885                     .append('circle')
100886                     .attr('class', 'stroke');
100887
100888                 // Vertices with tags get a fill.
100889                 enter.filter(function(d) { return d.hasInterestingTags(); })
100890                     .append('circle')
100891                     .attr('class', 'fill');
100892
100893                 // update
100894                 groups = groups
100895                     .merge(enter)
100896                     .attr('transform', svgPointTransform(projection))
100897                     .classed('sibling', function(d) { return d.id in sets.selected; })
100898                     .classed('shared', function(d) { return graph.isShared(d); })
100899                     .classed('endpoint', function(d) { return d.isEndpoint(graph); })
100900                     .classed('added', function(d) {
100901                         return !base.entities[d.id]; // if it doesn't exist in the base graph, it's new
100902                     })
100903                     .classed('moved', function(d) {
100904                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].loc, base.entities[d.id].loc);
100905                     })
100906                     .classed('retagged', function(d) {
100907                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
100908                     })
100909                     .call(updateAttributes);
100910
100911                 // Vertices with icons get a `use`.
100912                 var iconUse = groups
100913                     .selectAll('.icon')
100914                     .data(function data(d) { return zoom >= 17 && getIcon(d) ? [d] : []; }, fastEntityKey);
100915
100916                 // exit
100917                 iconUse.exit()
100918                     .remove();
100919
100920                 // enter
100921                 iconUse.enter()
100922                     .append('use')
100923                     .attr('class', 'icon')
100924                     .attr('width', '11px')
100925                     .attr('height', '11px')
100926                     .attr('transform', 'translate(-5.5, -5.5)')
100927                     .attr('xlink:href', function(d) {
100928                         var picon = getIcon(d);
100929                         var isMaki = /^maki-/.test(picon);
100930                         return '#' + picon + (isMaki ? '-11' : '');
100931                     });
100932
100933
100934                 // Vertices with directions get viewfields
100935                 var dgroups = groups
100936                     .selectAll('.viewfieldgroup')
100937                     .data(function data(d) { return zoom >= 18 && getDirections(d) ? [d] : []; }, fastEntityKey);
100938
100939                 // exit
100940                 dgroups.exit()
100941                     .remove();
100942
100943                 // enter/update
100944                 dgroups = dgroups.enter()
100945                     .insert('g', '.shadow')
100946                     .attr('class', 'viewfieldgroup')
100947                     .merge(dgroups);
100948
100949                 var viewfields = dgroups.selectAll('.viewfield')
100950                     .data(getDirections, function key(d) { return osmEntity.key(d); });
100951
100952                 // exit
100953                 viewfields.exit()
100954                     .remove();
100955
100956                 // enter/update
100957                 viewfields.enter()
100958                     .append('path')
100959                     .attr('class', 'viewfield')
100960                     .attr('d', 'M0,0H0')
100961                     .merge(viewfields)
100962                     .attr('marker-start', 'url(#viewfield-marker' + (wireframe ? '-wireframe' : '') + ')')
100963                     .attr('transform', function(d) { return 'rotate(' + d + ')'; });
100964             }
100965
100966
100967             function drawTargets(selection, graph, entities, filter) {
100968                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
100969                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
100970                 var getTransform = svgPointTransform(projection).geojson;
100971                 var activeID = context.activeID();
100972                 var data = { targets: [], nopes: [] };
100973
100974                 entities.forEach(function(node) {
100975                     if (activeID === node.id) { return; }   // draw no target on the activeID
100976
100977                     var vertexType = svgPassiveVertex(node, graph, activeID);
100978                     if (vertexType !== 0) {     // passive or adjacent - allow to connect
100979                         data.targets.push({
100980                             type: 'Feature',
100981                             id: node.id,
100982                             properties: {
100983                                 target: true,
100984                                 entity: node
100985                             },
100986                             geometry: node.asGeoJSON()
100987                         });
100988                     } else {
100989                         data.nopes.push({
100990                             type: 'Feature',
100991                             id: node.id + '-nope',
100992                             properties: {
100993                                 nope: true,
100994                                 target: true,
100995                                 entity: node
100996                             },
100997                             geometry: node.asGeoJSON()
100998                         });
100999                     }
101000                 });
101001
101002                 // Targets allow hover and vertex snapping
101003                 var targets = selection.selectAll('.vertex.target-allowed')
101004                     .filter(function(d) { return filter(d.properties.entity); })
101005                     .data(data.targets, function key(d) { return d.id; });
101006
101007                 // exit
101008                 targets.exit()
101009                     .remove();
101010
101011                 // enter/update
101012                 targets.enter()
101013                     .append('circle')
101014                     .attr('r', function(d) {
101015                         return _radii[d.id]
101016                           || radiuses.shadow[3];
101017                     })
101018                     .merge(targets)
101019                     .attr('class', function(d) {
101020                         return 'node vertex target target-allowed '
101021                         + targetClass + d.id;
101022                     })
101023                     .attr('transform', getTransform);
101024
101025
101026                 // NOPE
101027                 var nopes = selection.selectAll('.vertex.target-nope')
101028                     .filter(function(d) { return filter(d.properties.entity); })
101029                     .data(data.nopes, function key(d) { return d.id; });
101030
101031                 // exit
101032                 nopes.exit()
101033                     .remove();
101034
101035                 // enter/update
101036                 nopes.enter()
101037                     .append('circle')
101038                     .attr('r', function(d) { return (_radii[d.properties.entity.id] || radiuses.shadow[3]); })
101039                     .merge(nopes)
101040                     .attr('class', function(d) { return 'node vertex target target-nope ' + nopeClass + d.id; })
101041                     .attr('transform', getTransform);
101042             }
101043
101044
101045             // Points can also render as vertices:
101046             // 1. in wireframe mode or
101047             // 2. at higher zooms if they have a direction
101048             function renderAsVertex(entity, graph, wireframe, zoom) {
101049                 var geometry = entity.geometry(graph);
101050                 return geometry === 'vertex' || (geometry === 'point' && (
101051                     wireframe || (zoom >= 18 && entity.directions(graph, projection).length)
101052                 ));
101053             }
101054
101055
101056             function isEditedNode(node, base, head) {
101057                 var baseNode = base.entities[node.id];
101058                 var headNode = head.entities[node.id];
101059                 return !headNode ||
101060                     !baseNode ||
101061                     !fastDeepEqual(headNode.tags, baseNode.tags) ||
101062                     !fastDeepEqual(headNode.loc, baseNode.loc);
101063             }
101064
101065
101066             function getSiblingAndChildVertices(ids, graph, wireframe, zoom) {
101067                 var results = {};
101068
101069                 function addChildVertices(entity) {
101070                     var geometry = entity.geometry(graph);
101071                     if (!context.features().isHiddenFeature(entity, graph, geometry)) {
101072                         var i;
101073                         if (entity.type === 'way') {
101074                             for (i = 0; i < entity.nodes.length; i++) {
101075                                 var child = graph.hasEntity(entity.nodes[i]);
101076                                 if (child) {
101077                                     addChildVertices(child);
101078                                 }
101079                             }
101080                         } else if (entity.type === 'relation') {
101081                             for (i = 0; i < entity.members.length; i++) {
101082                                 var member = graph.hasEntity(entity.members[i].id);
101083                                 if (member) {
101084                                     addChildVertices(member);
101085                                 }
101086                             }
101087                         } else if (renderAsVertex(entity, graph, wireframe, zoom)) {
101088                             results[entity.id] = entity;
101089                         }
101090                     }
101091                 }
101092
101093                 ids.forEach(function(id) {
101094                     var entity = graph.hasEntity(id);
101095                     if (!entity) { return; }
101096
101097                     if (entity.type === 'node') {
101098                         if (renderAsVertex(entity, graph, wireframe, zoom)) {
101099                             results[entity.id] = entity;
101100                             graph.parentWays(entity).forEach(function(entity) {
101101                                 addChildVertices(entity);
101102                             });
101103                         }
101104                     } else {  // way, relation
101105                         addChildVertices(entity);
101106                     }
101107                 });
101108
101109                 return results;
101110             }
101111
101112
101113             function drawVertices(selection, graph, entities, filter, extent, fullRedraw) {
101114                 var wireframe = context.surface().classed('fill-wireframe');
101115                 var visualDiff = context.surface().classed('highlight-edited');
101116                 var zoom = geoScaleToZoom(projection.scale());
101117                 var mode = context.mode();
101118                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
101119                 var base = context.history().base();
101120
101121                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.vertices');
101122                 var touchLayer = selection.selectAll('.layer-touch.points');
101123
101124                 if (fullRedraw) {
101125                     _currPersistent = {};
101126                     _radii = {};
101127                 }
101128
101129                 // Collect important vertices from the `entities` list..
101130                 // (during a paritial redraw, it will not contain everything)
101131                 for (var i = 0; i < entities.length; i++) {
101132                     var entity = entities[i];
101133                     var geometry = entity.geometry(graph);
101134                     var keep = false;
101135
101136                     // a point that looks like a vertex..
101137                     if ((geometry === 'point') && renderAsVertex(entity, graph, wireframe, zoom)) {
101138                         _currPersistent[entity.id] = entity;
101139                         keep = true;
101140
101141                     // a vertex of some importance..
101142                     } else if (geometry === 'vertex' &&
101143                         (entity.hasInterestingTags() || entity.isEndpoint(graph) || entity.isConnected(graph)
101144                         || (visualDiff && isEditedNode(entity, base, graph)))) {
101145                         _currPersistent[entity.id] = entity;
101146                         keep = true;
101147                     }
101148
101149                     // whatever this is, it's not a persistent vertex..
101150                     if (!keep && !fullRedraw) {
101151                         delete _currPersistent[entity.id];
101152                     }
101153                 }
101154
101155                 // 3 sets of vertices to consider:
101156                 var sets = {
101157                     persistent: _currPersistent,  // persistent = important vertices (render always)
101158                     selected: _currSelected,      // selected + siblings of selected (render always)
101159                     hovered: _currHover           // hovered + siblings of hovered (render only in draw modes)
101160                 };
101161
101162                 var all = Object.assign({}, (isMoving ? _currHover : {}), _currSelected, _currPersistent);
101163
101164                 // Draw the vertices..
101165                 // The filter function controls the scope of what objects d3 will touch (exit/enter/update)
101166                 // Adjust the filter function to expand the scope beyond whatever entities were passed in.
101167                 var filterRendered = function(d) {
101168                     return d.id in _currPersistent || d.id in _currSelected || d.id in _currHover || filter(d);
101169                 };
101170                 drawLayer
101171                     .call(draw, graph, currentVisible(all), sets, filterRendered);
101172
101173                 // Draw touch targets..
101174                 // When drawing, render all targets (not just those affected by a partial redraw)
101175                 var filterTouch = function(d) {
101176                     return isMoving ? true : filterRendered(d);
101177                 };
101178                 touchLayer
101179                     .call(drawTargets, graph, currentVisible(all), filterTouch);
101180
101181
101182                 function currentVisible(which) {
101183                     return Object.keys(which)
101184                         .map(graph.hasEntity, graph)     // the current version of this entity
101185                         .filter(function (entity) { return entity && entity.intersects(extent, graph); });
101186                 }
101187             }
101188
101189
101190             // partial redraw - only update the selected items..
101191             drawVertices.drawSelected = function(selection, graph, extent) {
101192                 var wireframe = context.surface().classed('fill-wireframe');
101193                 var zoom = geoScaleToZoom(projection.scale());
101194
101195                 _prevSelected = _currSelected || {};
101196                 if (context.map().isInWideSelection()) {
101197                     _currSelected = {};
101198                     context.selectedIDs().forEach(function(id) {
101199                         var entity = graph.hasEntity(id);
101200                         if (!entity) { return; }
101201
101202                         if (entity.type === 'node') {
101203                             if (renderAsVertex(entity, graph, wireframe, zoom)) {
101204                                 _currSelected[entity.id] = entity;
101205                             }
101206                         }
101207                     });
101208
101209                 } else {
101210                     _currSelected = getSiblingAndChildVertices(context.selectedIDs(), graph, wireframe, zoom);
101211                 }
101212
101213                 // note that drawVertices will add `_currSelected` automatically if needed..
101214                 var filter = function(d) { return d.id in _prevSelected; };
101215                 drawVertices(selection, graph, Object.values(_prevSelected), filter, extent, false);
101216             };
101217
101218
101219             // partial redraw - only update the hovered items..
101220             drawVertices.drawHover = function(selection, graph, target, extent) {
101221                 if (target === _currHoverTarget) { return; }  // continue only if something changed
101222
101223                 var wireframe = context.surface().classed('fill-wireframe');
101224                 var zoom = geoScaleToZoom(projection.scale());
101225
101226                 _prevHover = _currHover || {};
101227                 _currHoverTarget = target;
101228                 var entity = target && target.properties && target.properties.entity;
101229
101230                 if (entity) {
101231                     _currHover = getSiblingAndChildVertices([entity.id], graph, wireframe, zoom);
101232                 } else {
101233                     _currHover = {};
101234                 }
101235
101236                 // note that drawVertices will add `_currHover` automatically if needed..
101237                 var filter = function(d) { return d.id in _prevHover; };
101238                 drawVertices(selection, graph, Object.values(_prevHover), filter, extent, false);
101239             };
101240
101241             return drawVertices;
101242         }
101243
101244         function utilBindOnce(target, type, listener, capture) {
101245             var typeOnce = type + '.once';
101246             function one() {
101247                 target.on(typeOnce, null);
101248                 listener.apply(this, arguments);
101249             }
101250             target.on(typeOnce, one, capture);
101251             return this;
101252         }
101253
101254         // constants
101255         var TILESIZE = 256;
101256         var minZoom = 2;
101257         var maxZoom = 24;
101258         var kMin = geoZoomToScale(minZoom, TILESIZE);
101259         var kMax = geoZoomToScale(maxZoom, TILESIZE);
101260
101261         function clamp(num, min, max) {
101262             return Math.max(min, Math.min(num, max));
101263         }
101264
101265
101266         function rendererMap(context) {
101267             var dispatch$1 = dispatch('move', 'drawn', 'crossEditableZoom');
101268             var projection = context.projection;
101269             var curtainProjection = context.curtainProjection;
101270             var drawLayers = svgLayers(projection, context);
101271             var drawPoints = svgPoints(projection, context);
101272             var drawVertices = svgVertices(projection, context);
101273             var drawLines = svgLines(projection, context);
101274             var drawAreas = svgAreas(projection, context);
101275             var drawMidpoints = svgMidpoints(projection, context);
101276             var drawLabels = svgLabels(projection, context);
101277
101278             var _selection = d3_select(null);
101279             var supersurface = d3_select(null);
101280             var wrapper = d3_select(null);
101281             var surface = d3_select(null);
101282
101283             var _dimensions = [1, 1];
101284             var _dblClickEnabled = true;
101285             var _redrawEnabled = true;
101286             var _gestureTransformStart;
101287             var _transformStart = projection.transform();
101288             var _transformLast;
101289             var _isTransformed = false;
101290             var _minzoom = 0;
101291             var _getMouseCoords;
101292             var _mouseEvent;
101293             var _lastWithinEditableZoom;
101294
101295             var zoom = d3_zoom()
101296                 .scaleExtent([kMin, kMax])
101297                 .interpolate(d3_interpolate)
101298                 .filter(zoomEventFilter)
101299                 .on('zoom', zoomPan);
101300
101301             var scheduleRedraw = throttle(redraw, 750);
101302             // var isRedrawScheduled = false;
101303             // var pendingRedrawCall;
101304             // function scheduleRedraw() {
101305             //     // Only schedule the redraw if one has not already been set.
101306             //     if (isRedrawScheduled) return;
101307             //     isRedrawScheduled = true;
101308             //     var that = this;
101309             //     var args = arguments;
101310             //     pendingRedrawCall = window.requestIdleCallback(function () {
101311             //         // Reset the boolean so future redraws can be set.
101312             //         isRedrawScheduled = false;
101313             //         redraw.apply(that, args);
101314             //     }, { timeout: 1400 });
101315             // }
101316
101317             function cancelPendingRedraw() {
101318                 scheduleRedraw.cancel();
101319                 // isRedrawScheduled = false;
101320                 // window.cancelIdleCallback(pendingRedrawCall);
101321             }
101322
101323
101324             function map(selection) {
101325                 _selection = selection;
101326
101327                 context
101328                     .on('change.map', immediateRedraw);
101329
101330                 var osm = context.connection();
101331                 if (osm) {
101332                     osm.on('change.map', immediateRedraw);
101333                 }
101334
101335                 function didUndoOrRedo(targetTransform) {
101336                     var mode = context.mode().id;
101337                     if (mode !== 'browse' && mode !== 'select') { return; }
101338                     if (targetTransform) {
101339                         map.transformEase(targetTransform);
101340                     }
101341                 }
101342
101343                 context.history()
101344                     .on('merge.map', function() { scheduleRedraw(); })
101345                     .on('change.map', immediateRedraw)
101346                     .on('undone.map', function(stack, fromStack) {
101347                         didUndoOrRedo(fromStack.transform);
101348                     })
101349                     .on('redone.map', function(stack) {
101350                         didUndoOrRedo(stack.transform);
101351                     });
101352
101353                 context.background()
101354                     .on('change.map', immediateRedraw);
101355
101356                 context.features()
101357                     .on('redraw.map', immediateRedraw);
101358
101359                 drawLayers
101360                     .on('change.map', function() {
101361                         context.background().updateImagery();
101362                         immediateRedraw();
101363                     });
101364
101365                 selection
101366                     .on('dblclick.map', dblClick)
101367                     .call(zoom)
101368                     .call(zoom.transform, projection.transform());
101369
101370                 supersurface = selection.append('div')
101371                     .attr('id', 'supersurface')
101372                     .call(utilSetTransform, 0, 0);
101373
101374                 // Need a wrapper div because Opera can't cope with an absolutely positioned
101375                 // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16
101376                 wrapper = supersurface
101377                     .append('div')
101378                     .attr('class', 'layer layer-data');
101379
101380                 map.surface = surface = wrapper
101381                     .call(drawLayers)
101382                     .selectAll('.surface')
101383                     .attr('id', 'surface');
101384
101385                 surface
101386                     .call(drawLabels.observe)
101387                     .on('gesturestart.surface', function() {
101388                         _gestureTransformStart = projection.transform();
101389                     })
101390                     .on('gesturechange.surface', gestureChange)
101391                     .on('mousedown.zoom', function() {
101392                         if (event.button === 2) {
101393                             event.stopPropagation();
101394                         }
101395                     }, true)
101396                     .on('mouseup.zoom', function() {
101397                         if (resetTransform()) {
101398                             immediateRedraw();
101399                         }
101400                     })
101401                     .on('mousemove.map', function() {
101402                         _mouseEvent = event;
101403                     })
101404                     .on('mouseover.vertices', function() {
101405                         if (map.editableDataEnabled() && !_isTransformed) {
101406                             var hover = event.target.__data__;
101407                             surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
101408                             dispatch$1.call('drawn', this, { full: false });
101409                         }
101410                     })
101411                     .on('mouseout.vertices', function() {
101412                         if (map.editableDataEnabled() && !_isTransformed) {
101413                             var hover = event.relatedTarget && event.relatedTarget.__data__;
101414                             surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
101415                             dispatch$1.call('drawn', this, { full: false });
101416                         }
101417                     });
101418
101419                 context.on('enter.map',  function() {
101420                     if (map.editableDataEnabled(true /* skip zoom check */) && !_isTransformed) {
101421                         // redraw immediately any objects affected by a change in selectedIDs.
101422                         var graph = context.graph();
101423                         var selectedAndParents = {};
101424                         context.selectedIDs().forEach(function(id) {
101425                             var entity = graph.hasEntity(id);
101426                             if (entity) {
101427                                 selectedAndParents[entity.id] = entity;
101428                                 if (entity.type === 'node') {
101429                                     graph.parentWays(entity).forEach(function(parent) {
101430                                         selectedAndParents[parent.id] = parent;
101431                                     });
101432                                 }
101433                             }
101434                         });
101435                         var data = Object.values(selectedAndParents);
101436                         var filter = function(d) { return d.id in selectedAndParents; };
101437
101438                         data = context.features().filter(data, graph);
101439
101440                         surface
101441                             .call(drawVertices.drawSelected, graph, map.extent())
101442                             .call(drawLines, graph, data, filter)
101443                             .call(drawAreas, graph, data, filter)
101444                             .call(drawMidpoints, graph, data, filter, map.trimmedExtent());
101445
101446                         dispatch$1.call('drawn', this, { full: false });
101447
101448                         // redraw everything else later
101449                         scheduleRedraw();
101450                     }
101451                 });
101452
101453                 map.dimensions(utilGetDimensions(selection));
101454             }
101455
101456
101457             function zoomEventFilter() {
101458                 // Fix for #2151, (see also d3/d3-zoom#60, d3/d3-brush#18)
101459                 // Intercept `mousedown` and check if there is an orphaned zoom gesture.
101460                 // This can happen if a previous `mousedown` occurred without a `mouseup`.
101461                 // If we detect this, dispatch `mouseup` to complete the orphaned gesture,
101462                 // so that d3-zoom won't stop propagation of new `mousedown` events.
101463                 if (event.type === 'mousedown') {
101464                     var hasOrphan = false;
101465                     var listeners = window.__on;
101466                     for (var i = 0; i < listeners.length; i++) {
101467                         var listener = listeners[i];
101468                         if (listener.name === 'zoom' && listener.type === 'mouseup') {
101469                             hasOrphan = true;
101470                             break;
101471                         }
101472                     }
101473                     if (hasOrphan) {
101474                         var event$1 = window.CustomEvent;
101475                         if (event$1) {
101476                             event$1 = new event$1('mouseup');
101477                         } else {
101478                             event$1 = window.document.createEvent('Event');
101479                             event$1.initEvent('mouseup', false, false);
101480                         }
101481                         // Event needs to be dispatched with an event.view property.
101482                         event$1.view = window;
101483                         window.dispatchEvent(event$1);
101484                     }
101485                 }
101486
101487                 return event.button !== 2;   // ignore right clicks
101488             }
101489
101490
101491             function pxCenter() {
101492                 return [_dimensions[0] / 2, _dimensions[1] / 2];
101493             }
101494
101495
101496             function drawEditable(difference, extent) {
101497                 var mode = context.mode();
101498                 var graph = context.graph();
101499                 var features = context.features();
101500                 var all = context.intersects(map.extent());
101501                 var fullRedraw = false;
101502                 var data;
101503                 var set;
101504                 var filter;
101505
101506                 if (map.isInWideSelection()) {
101507                     data = [];
101508                     utilEntityAndDeepMemberIDs(mode.selectedIDs(), context.graph()).forEach(function(id) {
101509                         var entity = context.hasEntity(id);
101510                         if (entity) { data.push(entity); }
101511                     });
101512                     fullRedraw = true;
101513                     filter = utilFunctor(true);
101514
101515                 } else if (difference) {
101516                     var complete = difference.complete(map.extent());
101517                     data = Object.values(complete).filter(Boolean);
101518                     set = new Set(Object.keys(complete));
101519                     filter = function(d) { return set.has(d.id); };
101520                     features.clear(data);
101521
101522                 } else {
101523                     // force a full redraw if gatherStats detects that a feature
101524                     // should be auto-hidden (e.g. points or buildings)..
101525                     if (features.gatherStats(all, graph, _dimensions)) {
101526                         extent = undefined;
101527                     }
101528
101529                     if (extent) {
101530                         data = context.intersects(map.extent().intersection(extent));
101531                         set = new Set(data.map(function(entity) { return entity.id; }));
101532                         filter = function(d) { return set.has(d.id); };
101533
101534                     } else {
101535                         data = all;
101536                         fullRedraw = true;
101537                         filter = utilFunctor(true);
101538                     }
101539                 }
101540
101541                 data = features.filter(data, graph);
101542
101543                 if (mode && mode.id === 'select') {
101544                     // update selected vertices - the user might have just double-clicked a way,
101545                     // creating a new vertex, triggering a partial redraw without a mode change
101546                     surface.call(drawVertices.drawSelected, graph, map.extent());
101547                 }
101548
101549                 surface
101550                     .call(drawVertices, graph, data, filter, map.extent(), fullRedraw)
101551                     .call(drawLines, graph, data, filter)
101552                     .call(drawAreas, graph, data, filter)
101553                     .call(drawMidpoints, graph, data, filter, map.trimmedExtent())
101554                     .call(drawLabels, graph, data, filter, _dimensions, fullRedraw)
101555                     .call(drawPoints, graph, data, filter);
101556
101557                 dispatch$1.call('drawn', this, {full: true});
101558             }
101559
101560
101561             function editOff() {
101562                 context.features().resetStats();
101563                 surface.selectAll('.layer-osm *').remove();
101564                 surface.selectAll('.layer-touch:not(.markers) *').remove();
101565
101566                 var allowed = {
101567                     'browse': true,
101568                     'save': true,
101569                     'select-note': true,
101570                     'select-data': true,
101571                     'select-error': true
101572                 };
101573
101574                 var mode = context.mode();
101575                 if (mode && !allowed[mode.id]) {
101576                     context.enter(modeBrowse(context));
101577                 }
101578
101579                 dispatch$1.call('drawn', this, {full: true});
101580             }
101581
101582
101583             function dblClick() {
101584                 if (!_dblClickEnabled) {
101585                     event.preventDefault();
101586                     event.stopImmediatePropagation();
101587                 }
101588             }
101589
101590
101591             function gestureChange() {
101592                 // Remap Safari gesture events to wheel events - #5492
101593                 // We want these disabled most places, but enabled for zoom/unzoom on map surface
101594                 // https://developer.mozilla.org/en-US/docs/Web/API/GestureEvent
101595                 var e = event;
101596                 e.preventDefault();
101597
101598                 var props = {
101599                     deltaMode: 0,    // dummy values to ignore in zoomPan
101600                     deltaY: 1,       // dummy values to ignore in zoomPan
101601                     clientX: e.clientX,
101602                     clientY: e.clientY,
101603                     screenX: e.screenX,
101604                     screenY: e.screenY,
101605                     x: e.x,
101606                     y: e.y
101607                 };
101608
101609                 var e2 = new WheelEvent('wheel', props);
101610                 e2._scale = e.scale;         // preserve the original scale
101611                 e2._rotation = e.rotation;   // preserve the original rotation
101612
101613                 _selection.node().dispatchEvent(e2);
101614             }
101615
101616
101617             function zoomPan(manualEvent) {
101618                 var event$1 = (manualEvent || event);
101619                 var source = event$1.sourceEvent;
101620                 var eventTransform = event$1.transform;
101621                 var x = eventTransform.x;
101622                 var y = eventTransform.y;
101623                 var k = eventTransform.k;
101624
101625                 if (_transformStart.x === x &&
101626                     _transformStart.y === y &&
101627                     _transformStart.k === k) {
101628                     return;  // no change
101629                 }
101630
101631                 // Special handling of 'wheel' events:
101632                 // They might be triggered by the user scrolling the mouse wheel,
101633                 // or 2-finger pinch/zoom gestures, the transform may need adjustment.
101634                 if (source && source.type === 'wheel') {
101635                     var detected = utilDetect();
101636                     var dX = source.deltaX;
101637                     var dY = source.deltaY;
101638                     var x2 = x;
101639                     var y2 = y;
101640                     var k2 = k;
101641                     var t0, p0, p1;
101642
101643                     // Normalize mousewheel scroll speed (Firefox) - #3029
101644                     // If wheel delta is provided in LINE units, recalculate it in PIXEL units
101645                     // We are essentially redoing the calculations that occur here:
101646                     //   https://github.com/d3/d3-zoom/blob/78563a8348aa4133b07cac92e2595c2227ca7cd7/src/zoom.js#L203
101647                     // See this for more info:
101648                     //   https://github.com/basilfx/normalize-wheel/blob/master/src/normalizeWheel.js
101649                     if (source.deltaMode === 1 /* LINE */) {
101650                         // Convert from lines to pixels, more if the user is scrolling fast.
101651                         // (I made up the exp function to roughly match Firefox to what Chrome does)
101652                         // These numbers should be floats, because integers are treated as pan gesture below.
101653                         var lines = Math.abs(source.deltaY);
101654                         var sign = (source.deltaY > 0) ? 1 : -1;
101655                         dY = sign * clamp(
101656                             Math.exp((lines - 1) * 0.75) * 4.000244140625,
101657                             4.000244140625,    // min
101658                             350.000244140625   // max
101659                         );
101660
101661                         // On Firefox Windows and Linux we always get +/- the scroll line amount (default 3)
101662                         // There doesn't seem to be any scroll accelleration.
101663                         // This multiplier increases the speed a little bit - #5512
101664                         if (detected.os !== 'mac') {
101665                             dY *= 5;
101666                         }
101667
101668                         // recalculate x2,y2,k2
101669                         t0 = _isTransformed ? _transformLast : _transformStart;
101670                         p0 = _getMouseCoords(source);
101671                         p1 = t0.invert(p0);
101672                         k2 = t0.k * Math.pow(2, -dY / 500);
101673                         k2 = clamp(k2, kMin, kMax);
101674                         x2 = p0[0] - p1[0] * k2;
101675                         y2 = p0[1] - p1[1] * k2;
101676
101677                     // 2 finger map pinch zooming (Safari) - #5492
101678                     // These are fake `wheel` events we made from Safari `gesturechange` events..
101679                     } else if (source._scale) {
101680                         // recalculate x2,y2,k2
101681                         t0 = _gestureTransformStart;
101682                         p0 = _getMouseCoords(source);
101683                         p1 = t0.invert(p0);
101684                         k2 = t0.k * source._scale;
101685                         k2 = clamp(k2, kMin, kMax);
101686                         x2 = p0[0] - p1[0] * k2;
101687                         y2 = p0[1] - p1[1] * k2;
101688
101689                     // 2 finger map pinch zooming (all browsers except Safari) - #5492
101690                     // Pinch zooming via the `wheel` event will always have:
101691                     // - `ctrlKey = true`
101692                     // - `deltaY` is not round integer pixels (ignore `deltaX`)
101693                     } else if (source.ctrlKey && !isInteger(dY)) {
101694                         dY *= 6;   // slightly scale up whatever the browser gave us
101695
101696                         // recalculate x2,y2,k2
101697                         t0 = _isTransformed ? _transformLast : _transformStart;
101698                         p0 = _getMouseCoords(source);
101699                         p1 = t0.invert(p0);
101700                         k2 = t0.k * Math.pow(2, -dY / 500);
101701                         k2 = clamp(k2, kMin, kMax);
101702                         x2 = p0[0] - p1[0] * k2;
101703                         y2 = p0[1] - p1[1] * k2;
101704
101705                     // Trackpad scroll zooming with shift or alt/option key down
101706                     } else if ((source.altKey || source.shiftKey) && isInteger(dY)) {
101707                         // recalculate x2,y2,k2
101708                         t0 = _isTransformed ? _transformLast : _transformStart;
101709                         p0 = _getMouseCoords(source);
101710                         p1 = t0.invert(p0);
101711                         k2 = t0.k * Math.pow(2, -dY / 500);
101712                         k2 = clamp(k2, kMin, kMax);
101713                         x2 = p0[0] - p1[0] * k2;
101714                         y2 = p0[1] - p1[1] * k2;
101715
101716                     // 2 finger map panning (Mac only, all browsers) - #5492, #5512
101717                     // Panning via the `wheel` event will always have:
101718                     // - `ctrlKey = false`
101719                     // - `deltaX`,`deltaY` are round integer pixels
101720                     } else if (detected.os === 'mac' && !source.ctrlKey && isInteger(dX) && isInteger(dY)) {
101721                         p1 = projection.translate();
101722                         x2 = p1[0] - dX;
101723                         y2 = p1[1] - dY;
101724                         k2 = projection.scale();
101725                         k2 = clamp(k2, kMin, kMax);
101726                     }
101727
101728                     // something changed - replace the event transform
101729                     if (x2 !== x || y2 !== y || k2 !== k) {
101730                         x = x2;
101731                         y = y2;
101732                         k = k2;
101733                         eventTransform = identity$8.translate(x2, y2).scale(k2);
101734                         _selection.node().__zoom = eventTransform;
101735                     }
101736
101737                 }
101738
101739                 var withinEditableZoom = map.withinEditableZoom();
101740                 if (_lastWithinEditableZoom !== withinEditableZoom) {
101741                     if (_lastWithinEditableZoom !== undefined) {
101742                         // notify that the map zoomed in or out over the editable zoom threshold
101743                         dispatch$1.call('crossEditableZoom', this, map);
101744                     }
101745                     _lastWithinEditableZoom = withinEditableZoom;
101746                 }
101747
101748                 if (geoScaleToZoom(k, TILESIZE) < _minzoom) {
101749                     surface.interrupt();
101750                     uiFlash().text(t('cannot_zoom'))();
101751                     setCenterZoom(map.center(), context.minEditableZoom(), 0, true);
101752                     scheduleRedraw();
101753                     dispatch$1.call('move', this, map);
101754                     return;
101755                 }
101756
101757                 projection.transform(eventTransform);
101758
101759                 var scale = k / _transformStart.k;
101760                 var tX = (x / scale - _transformStart.x) * scale;
101761                 var tY = (y / scale - _transformStart.y) * scale;
101762
101763                 if (context.inIntro()) {
101764                     curtainProjection.transform({
101765                         x: x - tX,
101766                         y: y - tY,
101767                         k: k
101768                     });
101769                 }
101770
101771                 if (source) {
101772                     _mouseEvent = event$1;
101773                 }
101774                 _isTransformed = true;
101775                 _transformLast = eventTransform;
101776                 utilSetTransform(supersurface, tX, tY, scale);
101777                 scheduleRedraw();
101778
101779                 dispatch$1.call('move', this, map);
101780
101781
101782                 function isInteger(val) {
101783                     return typeof val === 'number' && isFinite(val) && Math.floor(val) === val;
101784                 }
101785             }
101786
101787
101788             function resetTransform() {
101789                 if (!_isTransformed) { return false; }
101790
101791                 // deprecation warning - Radial Menu to be removed in iD v3
101792                 surface.selectAll('.edit-menu, .radial-menu').interrupt().remove();
101793                 utilSetTransform(supersurface, 0, 0);
101794                 _isTransformed = false;
101795                 if (context.inIntro()) {
101796                     curtainProjection.transform(projection.transform());
101797                 }
101798                 return true;
101799             }
101800
101801
101802             function redraw(difference, extent) {
101803                 if (surface.empty() || !_redrawEnabled) { return; }
101804
101805                 // If we are in the middle of a zoom/pan, we can't do differenced redraws.
101806                 // It would result in artifacts where differenced entities are redrawn with
101807                 // one transform and unchanged entities with another.
101808                 if (resetTransform()) {
101809                     difference = extent = undefined;
101810                 }
101811
101812                 var zoom = map.zoom();
101813                 var z = String(~~zoom);
101814
101815                 if (surface.attr('data-zoom') !== z) {
101816                     surface.attr('data-zoom', z);
101817                 }
101818
101819                 // class surface as `lowzoom` around z17-z18.5 (based on latitude)
101820                 var lat = map.center()[1];
101821                 var lowzoom = linear$2()
101822                     .domain([-60, 0, 60])
101823                     .range([17, 18.5, 17])
101824                     .clamp(true);
101825
101826                 surface
101827                     .classed('low-zoom', zoom <= lowzoom(lat));
101828
101829
101830                 if (!difference) {
101831                     supersurface.call(context.background());
101832                     wrapper.call(drawLayers);
101833                 }
101834
101835                 // OSM
101836                 if (map.editableDataEnabled() || map.isInWideSelection()) {
101837                     context.loadTiles(projection);
101838                     drawEditable(difference, extent);
101839                 } else {
101840                     editOff();
101841                 }
101842
101843                 _transformStart = projection.transform();
101844
101845                 return map;
101846             }
101847
101848
101849
101850             var immediateRedraw = function(difference, extent) {
101851                 if (!difference && !extent) { cancelPendingRedraw(); }
101852                 redraw(difference, extent);
101853             };
101854
101855
101856             map.mouse = function() {
101857                 var event$1 = _mouseEvent || event;
101858                 if (event$1) {
101859                     var s;
101860                     while ((s = event$1.sourceEvent)) { event$1 = s; }
101861                     return _getMouseCoords(event$1);
101862                 }
101863                 return null;
101864             };
101865
101866
101867             // returns Lng/Lat
101868             map.mouseCoordinates = function() {
101869                 var coord = map.mouse() || pxCenter();
101870                 return projection.invert(coord);
101871             };
101872
101873
101874             map.dblclickEnable = function(val) {
101875                 if (!arguments.length) { return _dblClickEnabled; }
101876                 _dblClickEnabled = val;
101877                 return map;
101878             };
101879
101880
101881             map.redrawEnable = function(val) {
101882                 if (!arguments.length) { return _redrawEnabled; }
101883                 _redrawEnabled = val;
101884                 return map;
101885             };
101886
101887
101888             map.isTransformed = function() {
101889                 return _isTransformed;
101890             };
101891
101892
101893             function setTransform(t2, duration, force) {
101894                 var t = projection.transform();
101895                 if (!force && t2.k === t.k && t2.x === t.x && t2.y === t.y) { return false; }
101896
101897                 if (duration) {
101898                     _selection
101899                         .transition()
101900                         .duration(duration)
101901                         .on('start', function() { map.startEase(); })
101902                         .call(zoom.transform, identity$8.translate(t2.x, t2.y).scale(t2.k));
101903                 } else {
101904                     projection.transform(t2);
101905                     _transformStart = t2;
101906                     _selection.call(zoom.transform, _transformStart);
101907                 }
101908
101909                 return true;
101910             }
101911
101912
101913             function setCenterZoom(loc2, z2, duration, force) {
101914                 var c = map.center();
101915                 var z = map.zoom();
101916                 if (loc2[0] === c[0] && loc2[1] === c[1] && z2 === z && !force) { return false; }
101917
101918                 var proj = geoRawMercator().transform(projection.transform());  // copy projection
101919
101920                 var k2 = clamp(geoZoomToScale(z2, TILESIZE), kMin, kMax);
101921                 proj.scale(k2);
101922
101923                 var t = proj.translate();
101924                 var point = proj(loc2);
101925
101926                 var center = pxCenter();
101927                 t[0] += center[0] - point[0];
101928                 t[1] += center[1] - point[1];
101929
101930                 return setTransform(identity$8.translate(t[0], t[1]).scale(k2), duration, force);
101931             }
101932
101933
101934             map.pan = function(delta, duration) {
101935                 var t = projection.translate();
101936                 var k = projection.scale();
101937
101938                 t[0] += delta[0];
101939                 t[1] += delta[1];
101940
101941                 if (duration) {
101942                     _selection
101943                         .transition()
101944                         .duration(duration)
101945                         .on('start', function() { map.startEase(); })
101946                         .call(zoom.transform, identity$8.translate(t[0], t[1]).scale(k));
101947                 } else {
101948                     projection.translate(t);
101949                     _transformStart = projection.transform();
101950                     _selection.call(zoom.transform, _transformStart);
101951                     dispatch$1.call('move', this, map);
101952                     immediateRedraw();
101953                 }
101954
101955                 return map;
101956             };
101957
101958
101959             map.dimensions = function(val) {
101960                 if (!arguments.length) { return _dimensions; }
101961
101962                 _dimensions = val;
101963                 drawLayers.dimensions(_dimensions);
101964                 context.background().dimensions(_dimensions);
101965                 projection.clipExtent([[0, 0], _dimensions]);
101966                 _getMouseCoords = utilFastMouse(supersurface.node());
101967
101968                 scheduleRedraw();
101969                 return map;
101970             };
101971
101972
101973             function zoomIn(delta) {
101974                 setCenterZoom(map.center(), ~~map.zoom() + delta, 250, true);
101975             }
101976
101977             function zoomOut(delta) {
101978                 setCenterZoom(map.center(), ~~map.zoom() - delta, 250, true);
101979             }
101980
101981             map.zoomIn = function() { zoomIn(1); };
101982             map.zoomInFurther = function() { zoomIn(4); };
101983             map.canZoomIn = function() { return map.zoom() < maxZoom; };
101984
101985             map.zoomOut = function() { zoomOut(1); };
101986             map.zoomOutFurther = function() { zoomOut(4); };
101987             map.canZoomOut = function() { return map.zoom() > minZoom; };
101988
101989             map.center = function(loc2) {
101990                 if (!arguments.length) {
101991                     return projection.invert(pxCenter());
101992                 }
101993
101994                 if (setCenterZoom(loc2, map.zoom())) {
101995                     dispatch$1.call('move', this, map);
101996                 }
101997
101998                 scheduleRedraw();
101999                 return map;
102000             };
102001
102002             map.unobscuredCenterZoomEase = function(loc, zoom) {
102003                 var offset = map.unobscuredOffsetPx();
102004
102005                 var proj = geoRawMercator().transform(projection.transform());  // copy projection
102006                 // use the target zoom to calculate the offset center
102007                 proj.scale(geoZoomToScale(zoom, TILESIZE));
102008
102009                 var locPx = proj(loc);
102010                 var offsetLocPx = [locPx[0] + offset[0], locPx[1] + offset[1]];
102011                 var offsetLoc = proj.invert(offsetLocPx);
102012
102013                 map.centerZoomEase(offsetLoc, zoom);
102014             };
102015
102016             map.unobscuredOffsetPx = function() {
102017                 var openPane = d3_select('.map-panes .map-pane.shown');
102018                 if (!openPane.empty()) {
102019                     return [openPane.node().offsetWidth/2, 0];
102020                 }
102021                 return [0, 0];
102022             };
102023
102024             map.zoom = function(z2) {
102025                 if (!arguments.length) {
102026                     return Math.max(geoScaleToZoom(projection.scale(), TILESIZE), 0);
102027                 }
102028
102029                 if (z2 < _minzoom) {
102030                     surface.interrupt();
102031                     uiFlash().text(t('cannot_zoom'))();
102032                     z2 = context.minEditableZoom();
102033                 }
102034
102035                 if (setCenterZoom(map.center(), z2)) {
102036                     dispatch$1.call('move', this, map);
102037                 }
102038
102039                 scheduleRedraw();
102040                 return map;
102041             };
102042
102043
102044             map.centerZoom = function(loc2, z2) {
102045                 if (setCenterZoom(loc2, z2)) {
102046                     dispatch$1.call('move', this, map);
102047                 }
102048
102049                 scheduleRedraw();
102050                 return map;
102051             };
102052
102053
102054             map.zoomTo = function(entity) {
102055                 var extent = entity.extent(context.graph());
102056                 if (!isFinite(extent.area())) { return map; }
102057
102058                 var z2 = clamp(map.trimmedExtentZoom(extent), 0, 20);
102059                 return map.centerZoom(extent.center(), z2);
102060             };
102061
102062
102063             map.centerEase = function(loc2, duration) {
102064                 duration = duration || 250;
102065                 setCenterZoom(loc2, map.zoom(), duration);
102066                 return map;
102067             };
102068
102069
102070             map.zoomEase = function(z2, duration) {
102071                 duration = duration || 250;
102072                 setCenterZoom(map.center(), z2, duration, false);
102073                 return map;
102074             };
102075
102076
102077             map.centerZoomEase = function(loc2, z2, duration) {
102078                 duration = duration || 250;
102079                 setCenterZoom(loc2, z2, duration, false);
102080                 return map;
102081             };
102082
102083
102084             map.transformEase = function(t2, duration) {
102085                 duration = duration || 250;
102086                 setTransform(t2, duration, false);
102087                 return map;
102088             };
102089
102090
102091             map.zoomToEase = function(obj, duration) {
102092                 var extent;
102093                 if (Array.isArray(obj)) {
102094                     obj.forEach(function(entity) {
102095                         var entityExtent = entity.extent(context.graph());
102096                         if (!extent) {
102097                             extent = entityExtent;
102098                         } else {
102099                             extent = extent.extend(entityExtent);
102100                         }
102101                     });
102102                 } else {
102103                     extent = obj.extent(context.graph());
102104                 }
102105                 if (!isFinite(extent.area())) { return map; }
102106
102107                 var z2 = clamp(map.trimmedExtentZoom(extent), 0, 20);
102108                 return map.centerZoomEase(extent.center(), z2, duration);
102109             };
102110
102111
102112             map.startEase = function() {
102113                 utilBindOnce(surface, 'mousedown.ease', function() {
102114                     map.cancelEase();
102115                 });
102116                 return map;
102117             };
102118
102119
102120             map.cancelEase = function() {
102121                 _selection.interrupt();
102122                 return map;
102123             };
102124
102125
102126             map.extent = function(val) {
102127                 if (!arguments.length) {
102128                     return new geoExtent(
102129                         projection.invert([0, _dimensions[1]]),
102130                         projection.invert([_dimensions[0], 0])
102131                     );
102132                 } else {
102133                     var extent = geoExtent(val);
102134                     map.centerZoom(extent.center(), map.extentZoom(extent));
102135                 }
102136             };
102137
102138
102139             map.trimmedExtent = function(val) {
102140                 if (!arguments.length) {
102141                     var headerY = 60;
102142                     var footerY = 30;
102143                     var pad = 10;
102144                     return new geoExtent(
102145                         projection.invert([pad, _dimensions[1] - footerY - pad]),
102146                         projection.invert([_dimensions[0] - pad, headerY + pad])
102147                     );
102148                 } else {
102149                     var extent = geoExtent(val);
102150                     map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
102151                 }
102152             };
102153
102154
102155             function calcExtentZoom(extent, dim) {
102156                 var tl = projection([extent[0][0], extent[1][1]]);
102157                 var br = projection([extent[1][0], extent[0][1]]);
102158
102159                 // Calculate maximum zoom that fits extent
102160                 var hFactor = (br[0] - tl[0]) / dim[0];
102161                 var vFactor = (br[1] - tl[1]) / dim[1];
102162                 var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
102163                 var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
102164                 var newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff);
102165
102166                 return newZoom;
102167             }
102168
102169
102170             map.extentZoom = function(val) {
102171                 return calcExtentZoom(geoExtent(val), _dimensions);
102172             };
102173
102174
102175             map.trimmedExtentZoom = function(val) {
102176                 var trimY = 120;
102177                 var trimX = 40;
102178                 var trimmed = [_dimensions[0] - trimX, _dimensions[1] - trimY];
102179                 return calcExtentZoom(geoExtent(val), trimmed);
102180             };
102181
102182
102183             map.withinEditableZoom = function() {
102184                 return map.zoom() >= context.minEditableZoom();
102185             };
102186
102187
102188             map.isInWideSelection = function() {
102189                 return !map.withinEditableZoom() && context.mode() && context.mode().id === 'select';
102190             };
102191
102192
102193             map.editableDataEnabled = function(skipZoomCheck) {
102194
102195                 var layer = context.layers().layer('osm');
102196                 if (!layer || !layer.enabled()) { return false; }
102197
102198                 return skipZoomCheck || map.withinEditableZoom();
102199             };
102200
102201
102202             map.notesEditable = function() {
102203                 var layer = context.layers().layer('notes');
102204                 if (!layer || !layer.enabled()) { return false; }
102205
102206                 return map.withinEditableZoom();
102207             };
102208
102209
102210             map.minzoom = function(val) {
102211                 if (!arguments.length) { return _minzoom; }
102212                 _minzoom = val;
102213                 return map;
102214             };
102215
102216
102217             map.layers = drawLayers;
102218
102219
102220             return utilRebind(map, dispatch$1, 'on');
102221         }
102222
102223         function rendererPhotos(context) {
102224             var dispatch$1 = dispatch('change');
102225             var _layerIDs = ['streetside', 'mapillary', 'mapillary-map-features', 'mapillary-signs', 'openstreetcam'];
102226             var _allPhotoTypes = ['flat', 'panoramic'];
102227             var _shownPhotoTypes = _allPhotoTypes.slice();   // shallow copy
102228
102229             function photos() {}
102230
102231             function updateStorage() {
102232                 if (window.mocha) { return; }
102233
102234                 var q = utilStringQs(window.location.hash.substring(1));
102235                 var enabled = context.layers().all().filter(function(d) {
102236                     return _layerIDs.indexOf(d.id) !== -1 && d.layer && d.layer.supported() && d.layer.enabled();
102237                 }).map(function(d) {
102238                     return d.id;
102239                 });
102240                 if (enabled.length) {
102241                     q.photo_overlay = enabled.join(',');
102242                 } else {
102243                     delete q.photo_overlay;
102244                 }
102245                 window.location.replace('#' + utilQsString(q, true));
102246             }
102247
102248             photos.overlayLayerIDs = function() {
102249                 return _layerIDs;
102250             };
102251
102252             photos.allPhotoTypes = function() {
102253                 return _allPhotoTypes;
102254             };
102255
102256             function showsLayer(id) {
102257                 var layer = context.layers().layer(id);
102258                 return layer && layer.supported() && layer.enabled();
102259             }
102260
102261             photos.shouldFilterByPhotoType = function() {
102262                 return showsLayer('mapillary') ||
102263                     (showsLayer('streetside') && showsLayer('openstreetcam'));
102264             };
102265
102266             photos.showsPhotoType = function(val) {
102267                 if (!photos.shouldFilterByPhotoType()) { return true; }
102268
102269                 return _shownPhotoTypes.indexOf(val) !== -1;
102270             };
102271
102272             photos.showsFlat = function() {
102273                 return photos.showsPhotoType('flat');
102274             };
102275
102276             photos.showsPanoramic = function() {
102277                 return photos.showsPhotoType('panoramic');
102278             };
102279
102280             photos.togglePhotoType = function(val) {
102281                 var index = _shownPhotoTypes.indexOf(val);
102282                 if (index !== -1) {
102283                     _shownPhotoTypes.splice(index, 1);
102284                 } else {
102285                     _shownPhotoTypes.push(val);
102286                 }
102287                 dispatch$1.call('change', this);
102288                 return photos;
102289             };
102290
102291             photos.init = function() {
102292                 var q = utilStringQs(window.location.hash.substring(1));
102293                 if (q.photo_overlay) {
102294                     var hashOverlayIDs = q.photo_overlay.replace(/;/g, ',').split(',');
102295                     hashOverlayIDs.forEach(function(id) {
102296                         var layer = context.layers().layer(id);
102297                         if (layer) { layer.enabled(true); }
102298                     });
102299                 }
102300
102301                 context.layers().on('change.rendererPhotos', updateStorage);
102302             };
102303
102304             return utilRebind(photos, dispatch$1, 'on');
102305         }
102306
102307         function uiAccount(context) {
102308             var osm = context.connection();
102309
102310
102311             function update(selection) {
102312                 if (!osm) { return; }
102313
102314                 if (!osm.authenticated()) {
102315                     selection.selectAll('#userLink, #logoutLink')
102316                         .classed('hide', true);
102317                     return;
102318                 }
102319
102320                 osm.userDetails(function(err, details) {
102321                     var userLink = selection.select('#userLink'),
102322                         logoutLink = selection.select('#logoutLink');
102323
102324                     userLink.html('');
102325                     logoutLink.html('');
102326
102327                     if (err || !details) { return; }
102328
102329                     selection.selectAll('#userLink, #logoutLink')
102330                         .classed('hide', false);
102331
102332                     // Link
102333                     userLink.append('a')
102334                         .attr('href', osm.userURL(details.display_name))
102335                         .attr('target', '_blank');
102336
102337                     // Add thumbnail or dont
102338                     if (details.image_url) {
102339                         userLink.append('img')
102340                             .attr('class', 'icon pre-text user-icon')
102341                             .attr('src', details.image_url);
102342                     } else {
102343                         userLink
102344                             .call(svgIcon('#iD-icon-avatar', 'pre-text light'));
102345                     }
102346
102347                     // Add user name
102348                     userLink.append('span')
102349                         .attr('class', 'label')
102350                         .text(details.display_name);
102351
102352                     logoutLink.append('a')
102353                         .attr('class', 'logout')
102354                         .attr('href', '#')
102355                         .text(t('logout'))
102356                         .on('click.logout', function() {
102357                             event.preventDefault();
102358                             osm.logout();
102359                         });
102360                 });
102361             }
102362
102363
102364             return function(selection) {
102365                 selection.append('li')
102366                     .attr('id', 'logoutLink')
102367                     .classed('hide', true);
102368
102369                 selection.append('li')
102370                     .attr('id', 'userLink')
102371                     .classed('hide', true);
102372
102373                 if (osm) {
102374                     osm.on('change.account', function() { update(selection); });
102375                     update(selection);
102376                 }
102377             };
102378         }
102379
102380         function uiAttribution(context) {
102381             var selection;
102382
102383
102384             function attribution(data, klass) {
102385                 var div = selection.selectAll('.' + klass)
102386                     .data([0]);
102387
102388                 div = div.enter()
102389                     .append('div')
102390                     .attr('class', klass)
102391                     .merge(div);
102392
102393
102394                 var background = div.selectAll('.attribution')
102395                     .data(data, function(d) { return d.name(); });
102396
102397                 background.exit()
102398                     .remove();
102399
102400                 background = background.enter()
102401                     .append('span')
102402                     .attr('class', 'attribution')
102403                     .each(function(d) {
102404                         if (d.terms_html) {
102405                             d3_select(this)
102406                                 .html(d.terms_html);
102407                             return;
102408                         }
102409
102410                         var selection;
102411                         if (d.terms_url) {
102412                             selection = d3_select(this)
102413                                 .append('a')
102414                                 .attr('href', d.terms_url)
102415                                 .attr('target', '_blank');
102416                         } else {
102417                             selection = d3_select(this);
102418                         }
102419
102420
102421                         var id_safe = d.id.replace(/\./g, '<TX_DOT>');
102422                         var terms_text = t('imagery.' + id_safe + '.attribution.text',
102423                             { default: d.terms_text || d.id || d.name() }
102424                         );
102425
102426                         if (d.icon && !d.overlay) {
102427                             selection
102428                                 .append('img')
102429                                 .attr('class', 'source-image')
102430                                 .attr('src', d.icon);
102431                         }
102432
102433                         selection
102434                             .append('span')
102435                             .attr('class', 'attribution-text')
102436                             .text(terms_text);
102437                     })
102438                     .merge(background);
102439
102440
102441                 var copyright = background.selectAll('.copyright-notice')
102442                     .data(function(d) {
102443                         var notice = d.copyrightNotices(context.map().zoom(), context.map().extent());
102444                         return notice ? [notice] : [];
102445                     });
102446
102447                 copyright.exit()
102448                     .remove();
102449
102450                 copyright = copyright.enter()
102451                     .append('span')
102452                     .attr('class', 'copyright-notice')
102453                     .merge(copyright);
102454
102455                 copyright
102456                     .text(String);
102457             }
102458
102459
102460             function update() {
102461                 attribution([context.background().baseLayerSource()], 'base-layer-attribution');
102462                 attribution(context.background().overlayLayerSources().filter(function (s) {
102463                     return s.validZoom(context.map().zoom());
102464                 }), 'overlay-layer-attribution');
102465             }
102466
102467
102468             return function(select) {
102469                 selection = select;
102470
102471                 context.background()
102472                     .on('change.attribution', update);
102473
102474                 context.map()
102475                     .on('move.attribution', throttle(update, 400, {leading: false}));
102476
102477                 update();
102478             };
102479         }
102480
102481         function uiBackgroundDisplayOptions(context) {
102482             var detected = utilDetect();
102483             var storedOpacity = context.storage('background-opacity');
102484             var minVal = 0.25;
102485             var maxVal = detected.cssfilters ? 2 : 1;
102486
102487             var sliders = detected.cssfilters
102488                 ? ['brightness', 'contrast', 'saturation', 'sharpness']
102489                 : ['brightness'];
102490
102491             var _options = {
102492                 brightness: (storedOpacity !== null ? (+storedOpacity) : 1),
102493                 contrast: 1,
102494                 saturation: 1,
102495                 sharpness: 1
102496             };
102497
102498             var _selection = d3_select(null);
102499
102500
102501             function clamp(x, min, max) {
102502                 return Math.max(min, Math.min(x, max));
102503             }
102504
102505
102506             function updateValue(d, val) {
102507                 if (!val && event && event.target) {
102508                     val = event.target.value;
102509                 }
102510
102511                 val = clamp(val, minVal, maxVal);
102512
102513                 _options[d] = val;
102514                 context.background()[d](val);
102515
102516                 if (d === 'brightness') {
102517                     context.storage('background-opacity', val);
102518                 }
102519
102520                 _selection
102521                     .call(render);
102522             }
102523
102524
102525             function render(selection) {
102526                 var container = selection.selectAll('.display-options-container')
102527                     .data([0]);
102528
102529                 var containerEnter = container.enter()
102530                     .append('div')
102531                     .attr('class', 'display-options-container controls-list');
102532
102533                 // add slider controls
102534                 var slidersEnter = containerEnter.selectAll('.display-control')
102535                     .data(sliders)
102536                     .enter()
102537                     .append('div')
102538                     .attr('class', function(d) { return 'display-control display-control-' + d; });
102539
102540                 slidersEnter
102541                     .append('h5')
102542                     .text(function(d) { return t('background.' + d); })
102543                     .append('span')
102544                     .attr('class', function(d) { return 'display-option-value display-option-value-' + d; });
102545
102546                 slidersEnter
102547                     .append('input')
102548                     .attr('class', function(d) { return 'display-option-input display-option-input-' + d; })
102549                     .attr('type', 'range')
102550                     .attr('min', minVal)
102551                     .attr('max', maxVal)
102552                     .attr('step', '0.05')
102553                     .on('input', function(d) {
102554                         var val = d3_select(this).property('value');
102555                         updateValue(d, val);
102556                     });
102557
102558                 slidersEnter
102559                     .append('button')
102560                     .attr('title', t('background.reset'))
102561                     .attr('class', function(d) { return 'display-option-reset display-option-reset-' + d; })
102562                     .on('click', function(d) {
102563                         if (event.button !== 0) { return; }
102564                         updateValue(d, 1);
102565                     })
102566                     .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
102567
102568                 // reset all button
102569                 containerEnter
102570                     .append('a')
102571                     .attr('class', 'display-option-resetlink')
102572                     .attr('href', '#')
102573                     .text(t('background.reset_all'))
102574                     .on('click', function() {
102575                         for (var i = 0; i < sliders.length; i++) {
102576                             updateValue(sliders[i],1);
102577                         }
102578                     });
102579
102580                 // update
102581                 container = containerEnter
102582                     .merge(container);
102583
102584                 container.selectAll('.display-option-input')
102585                     .property('value', function(d) { return _options[d]; });
102586
102587                 container.selectAll('.display-option-value')
102588                     .text(function(d) { return Math.floor(_options[d] * 100) + '%'; });
102589
102590                 container.selectAll('.display-option-reset')
102591                     .classed('disabled', function(d) { return _options[d] === 1; });
102592
102593                 // first time only, set brightness if needed
102594                 if (containerEnter.size() && _options.brightness !== 1) {
102595                     context.background().brightness(_options.brightness);
102596                 }
102597             }
102598
102599
102600             function backgroundDisplayOptions(selection) {
102601                 _selection = selection;
102602
102603                 selection
102604                     .call(uiDisclosure(context, 'background_display_options', true)
102605                         .title(t('background.display_options'))
102606                         .content(render)
102607                     );
102608             }
102609
102610
102611             return backgroundDisplayOptions;
102612         }
102613
102614         function uiBackgroundOffset(context) {
102615             var directions = [
102616                 ['right', [0.5, 0]],
102617                 ['top', [0, -0.5]],
102618                 ['left', [-0.5, 0]],
102619                 ['bottom', [0, 0.5]]
102620             ];
102621
102622
102623             function d3_eventCancel() {
102624                 event.stopPropagation();
102625                 event.preventDefault();
102626             }
102627
102628
102629             function updateValue() {
102630                 var meters = geoOffsetToMeters(context.background().offset());
102631                 var x = +meters[0].toFixed(2);
102632                 var y = +meters[1].toFixed(2);
102633
102634                 d3_selectAll('.nudge-inner-rect')
102635                     .select('input')
102636                     .classed('error', false)
102637                     .property('value', x + ', ' + y);
102638
102639                 d3_selectAll('.nudge-reset')
102640                     .classed('disabled', function() {
102641                         return (x === 0 && y === 0);
102642                     });
102643             }
102644
102645
102646             function resetOffset() {
102647                 context.background().offset([0, 0]);
102648                 updateValue();
102649             }
102650
102651
102652             function nudge(d) {
102653                 context.background().nudge(d, context.map().zoom());
102654                 updateValue();
102655             }
102656
102657
102658             function clickNudgeButton(d) {
102659                 var interval;
102660                 var timeout = window.setTimeout(function() {
102661                         interval = window.setInterval(nudge.bind(null, d), 100);
102662                     }, 500);
102663
102664                 function doneNudge() {
102665                     window.clearTimeout(timeout);
102666                     window.clearInterval(interval);
102667                     d3_select(window)
102668                         .on('mouseup.buttonoffset', null, true)
102669                         .on('mousedown.buttonoffset', null, true);
102670                 }
102671
102672                 d3_select(window)
102673                     .on('mouseup.buttonoffset', doneNudge, true)
102674                     .on('mousedown.buttonoffset', doneNudge, true);
102675
102676                 nudge(d);
102677             }
102678
102679
102680             function inputOffset() {
102681                 var input = d3_select(this);
102682                 var d = input.node().value;
102683
102684                 if (d === '') { return resetOffset(); }
102685
102686                 d = d.replace(/;/g, ',').split(',').map(function(n) {
102687                     // if n is NaN, it will always get mapped to false.
102688                     return !isNaN(n) && n;
102689                 });
102690
102691                 if (d.length !== 2 || !d[0] || !d[1]) {
102692                     input.classed('error', true);
102693                     return;
102694                 }
102695
102696                 context.background().offset(geoMetersToOffset(d));
102697                 updateValue();
102698             }
102699
102700
102701             function dragOffset() {
102702                 if (event.button !== 0) { return; }
102703
102704                 var origin = [event.clientX, event.clientY];
102705
102706                 context.container()
102707                     .append('div')
102708                     .attr('class', 'nudge-surface');
102709
102710                 d3_select(window)
102711                     .on('mousemove.offset', function() {
102712                         var latest = [event.clientX, event.clientY];
102713                         var d = [
102714                             -(origin[0] - latest[0]) / 4,
102715                             -(origin[1] - latest[1]) / 4
102716                         ];
102717
102718                         origin = latest;
102719                         nudge(d);
102720                     })
102721                     .on('mouseup.offset', function() {
102722                         if (event.button !== 0) { return; }
102723                         d3_selectAll('.nudge-surface')
102724                             .remove();
102725
102726                         d3_select(window)
102727                             .on('mousemove.offset', null)
102728                             .on('mouseup.offset', null);
102729                     });
102730             }
102731
102732
102733             function render(selection) {
102734                 var container = selection.selectAll('.nudge-container')
102735                     .data([0]);
102736
102737                 var containerEnter = container.enter()
102738                     .append('div')
102739                     .attr('class', 'nudge-container cf');
102740
102741                 containerEnter
102742                     .append('div')
102743                     .attr('class', 'nudge-instructions')
102744                     .text(t('background.offset'));
102745
102746                 var nudgeEnter = containerEnter
102747                     .append('div')
102748                     .attr('class', 'nudge-outer-rect')
102749                     .on('mousedown', dragOffset);
102750
102751                 nudgeEnter
102752                     .append('div')
102753                     .attr('class', 'nudge-inner-rect')
102754                     .append('input')
102755                     .on('change', inputOffset);
102756
102757                 containerEnter
102758                     .append('div')
102759                     .selectAll('button')
102760                     .data(directions).enter()
102761                     .append('button')
102762                     .attr('class', function(d) { return d[0] + ' nudge'; })
102763                     .on('contextmenu', d3_eventCancel)
102764                     .on('mousedown', function(d) {
102765                         if (event.button !== 0) { return; }
102766                         clickNudgeButton(d[1]);
102767                     });
102768
102769                 containerEnter
102770                     .append('button')
102771                     .attr('title', t('background.reset'))
102772                     .attr('class', 'nudge-reset disabled')
102773                     .on('contextmenu', d3_eventCancel)
102774                     .on('click', function() {
102775                         if (event.button !== 0) { return; }
102776                         resetOffset();
102777                     })
102778                     .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
102779
102780                 updateValue();
102781             }
102782
102783
102784             function backgroundOffset(selection) {
102785                 selection
102786                     .call(uiDisclosure(context, 'background_offset', false)
102787                         .title(t('background.fix_misalignment'))
102788                         .content(render)
102789                     );
102790             }
102791
102792
102793             context.background()
102794                 .on('change.backgroundOffset-update', updateValue);
102795
102796             return backgroundOffset;
102797         }
102798
102799         // import { utilGetDimensions } from '../util/dimensions';
102800
102801
102802         function uiMapInMap(context) {
102803
102804             function mapInMap(selection) {
102805                 var backgroundLayer = rendererTileLayer(context);
102806                 var overlayLayers = {};
102807                 var projection = geoRawMercator();
102808                 var dataLayer = svgData(projection, context).showLabels(false);
102809                 var debugLayer = svgDebug(projection, context);
102810                 var zoom = d3_zoom()
102811                     .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(24)])
102812                     .on('start', zoomStarted)
102813                     .on('zoom', zoomed)
102814                     .on('end', zoomEnded);
102815
102816                 var wrap = d3_select(null);
102817                 var tiles = d3_select(null);
102818                 var viewport = d3_select(null);
102819
102820                 var _isTransformed = false;
102821                 var _isHidden = true;
102822                 var _skipEvents = false;
102823                 var _gesture = null;
102824                 var _zDiff = 6;    // by default, minimap renders at (main zoom - 6)
102825                 var _dMini;        // dimensions of minimap
102826                 var _cMini;        // center pixel of minimap
102827                 var _tStart;       // transform at start of gesture
102828                 var _tCurr;        // transform at most recent event
102829                 var _timeoutID;
102830
102831
102832                 function zoomStarted() {
102833                     if (_skipEvents) { return; }
102834                     _tStart = _tCurr = projection.transform();
102835                     _gesture = null;
102836                 }
102837
102838
102839                 function zoomed() {
102840                     if (_skipEvents) { return; }
102841
102842                     var x = event.transform.x;
102843                     var y = event.transform.y;
102844                     var k = event.transform.k;
102845                     var isZooming = (k !== _tStart.k);
102846                     var isPanning = (x !== _tStart.x || y !== _tStart.y);
102847
102848                     if (!isZooming && !isPanning) {
102849                         return;  // no change
102850                     }
102851
102852                     // lock in either zooming or panning, don't allow both in minimap.
102853                     if (!_gesture) {
102854                         _gesture = isZooming ? 'zoom' : 'pan';
102855                     }
102856
102857                     var tMini = projection.transform();
102858                     var tX, tY, scale;
102859
102860                     if (_gesture === 'zoom') {
102861                         scale = k / tMini.k;
102862                         tX = (_cMini[0] / scale - _cMini[0]) * scale;
102863                         tY = (_cMini[1] / scale - _cMini[1]) * scale;
102864                     } else {
102865                         k = tMini.k;
102866                         scale = 1;
102867                         tX = x - tMini.x;
102868                         tY = y - tMini.y;
102869                     }
102870
102871                     utilSetTransform(tiles, tX, tY, scale);
102872                     utilSetTransform(viewport, 0, 0, scale);
102873                     _isTransformed = true;
102874                     _tCurr = identity$8.translate(x, y).scale(k);
102875
102876                     var zMain = geoScaleToZoom(context.projection.scale());
102877                     var zMini = geoScaleToZoom(k);
102878
102879                     _zDiff = zMain - zMini;
102880
102881                     queueRedraw();
102882                 }
102883
102884
102885                 function zoomEnded() {
102886                     if (_skipEvents) { return; }
102887                     if (_gesture !== 'pan') { return; }
102888
102889                     updateProjection();
102890                     _gesture = null;
102891                     context.map().center(projection.invert(_cMini));   // recenter main map..
102892                 }
102893
102894
102895                 function updateProjection() {
102896                     var loc = context.map().center();
102897                     var tMain = context.projection.transform();
102898                     var zMain = geoScaleToZoom(tMain.k);
102899                     var zMini = Math.max(zMain - _zDiff, 0.5);
102900                     var kMini = geoZoomToScale(zMini);
102901
102902                     projection
102903                         .translate([tMain.x, tMain.y])
102904                         .scale(kMini);
102905
102906                     var point = projection(loc);
102907                     var mouse = (_gesture === 'pan') ? geoVecSubtract([_tCurr.x, _tCurr.y], [_tStart.x, _tStart.y]) : [0, 0];
102908                     var xMini = _cMini[0] - point[0] + tMain.x + mouse[0];
102909                     var yMini = _cMini[1] - point[1] + tMain.y + mouse[1];
102910
102911                     projection
102912                         .translate([xMini, yMini])
102913                         .clipExtent([[0, 0], _dMini]);
102914
102915                     _tCurr = projection.transform();
102916
102917                     if (_isTransformed) {
102918                         utilSetTransform(tiles, 0, 0);
102919                         utilSetTransform(viewport, 0, 0);
102920                         _isTransformed = false;
102921                     }
102922
102923                     zoom
102924                         .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(zMain - 3)]);
102925
102926                     _skipEvents = true;
102927                     wrap.call(zoom.transform, _tCurr);
102928                     _skipEvents = false;
102929                 }
102930
102931
102932                 function redraw() {
102933                     clearTimeout(_timeoutID);
102934                     if (_isHidden) { return; }
102935
102936                     updateProjection();
102937                     var zMini = geoScaleToZoom(projection.scale());
102938
102939                     // setup tile container
102940                     tiles = wrap
102941                         .selectAll('.map-in-map-tiles')
102942                         .data([0]);
102943
102944                     tiles = tiles.enter()
102945                         .append('div')
102946                         .attr('class', 'map-in-map-tiles')
102947                         .merge(tiles);
102948
102949                     // redraw background
102950                     backgroundLayer
102951                         .source(context.background().baseLayerSource())
102952                         .projection(projection)
102953                         .dimensions(_dMini);
102954
102955                     var background = tiles
102956                         .selectAll('.map-in-map-background')
102957                         .data([0]);
102958
102959                     background.enter()
102960                         .append('div')
102961                         .attr('class', 'map-in-map-background')
102962                         .merge(background)
102963                         .call(backgroundLayer);
102964
102965
102966                     // redraw overlay
102967                     var overlaySources = context.background().overlayLayerSources();
102968                     var activeOverlayLayers = [];
102969                     for (var i = 0; i < overlaySources.length; i++) {
102970                         if (overlaySources[i].validZoom(zMini)) {
102971                             if (!overlayLayers[i]) { overlayLayers[i] = rendererTileLayer(context); }
102972                             activeOverlayLayers.push(overlayLayers[i]
102973                                 .source(overlaySources[i])
102974                                 .projection(projection)
102975                                 .dimensions(_dMini));
102976                         }
102977                     }
102978
102979                     var overlay = tiles
102980                         .selectAll('.map-in-map-overlay')
102981                         .data([0]);
102982
102983                     overlay = overlay.enter()
102984                         .append('div')
102985                         .attr('class', 'map-in-map-overlay')
102986                         .merge(overlay);
102987
102988
102989                     var overlays = overlay
102990                         .selectAll('div')
102991                         .data(activeOverlayLayers, function(d) { return d.source().name(); });
102992
102993                     overlays.exit()
102994                         .remove();
102995
102996                     overlays = overlays.enter()
102997                         .append('div')
102998                         .merge(overlays)
102999                         .each(function(layer) { d3_select(this).call(layer); });
103000
103001
103002                     var dataLayers = tiles
103003                         .selectAll('.map-in-map-data')
103004                         .data([0]);
103005
103006                     dataLayers.exit()
103007                         .remove();
103008
103009                     dataLayers = dataLayers.enter()
103010                         .append('svg')
103011                         .attr('class', 'map-in-map-data')
103012                         .merge(dataLayers)
103013                         .call(dataLayer)
103014                         .call(debugLayer);
103015
103016
103017                     // redraw viewport bounding box
103018                     if (_gesture !== 'pan') {
103019                         var getPath = d3_geoPath(projection);
103020                         var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
103021
103022                         viewport = wrap.selectAll('.map-in-map-viewport')
103023                             .data([0]);
103024
103025                         viewport = viewport.enter()
103026                             .append('svg')
103027                             .attr('class', 'map-in-map-viewport')
103028                             .merge(viewport);
103029
103030
103031                         var path = viewport.selectAll('.map-in-map-bbox')
103032                             .data([bbox]);
103033
103034                         path.enter()
103035                             .append('path')
103036                             .attr('class', 'map-in-map-bbox')
103037                             .merge(path)
103038                             .attr('d', getPath)
103039                             .classed('thick', function(d) { return getPath.area(d) < 30; });
103040                     }
103041                 }
103042
103043
103044                 function queueRedraw() {
103045                     clearTimeout(_timeoutID);
103046                     _timeoutID = setTimeout(function() { redraw(); }, 750);
103047                 }
103048
103049
103050                 function toggle() {
103051                     if (event) { event.preventDefault(); }
103052
103053                     _isHidden = !_isHidden;
103054
103055                     d3_select('.minimap-toggle-item')
103056                         .classed('active', !_isHidden)
103057                         .select('input')
103058                         .property('checked', !_isHidden);
103059
103060                     if (_isHidden) {
103061                         wrap
103062                             .style('display', 'block')
103063                             .style('opacity', '1')
103064                             .transition()
103065                             .duration(200)
103066                             .style('opacity', '0')
103067                             .on('end', function() {
103068                                 selection.selectAll('.map-in-map')
103069                                     .style('display', 'none');
103070                             });
103071                     } else {
103072                         wrap
103073                             .style('display', 'block')
103074                             .style('opacity', '0')
103075                             .transition()
103076                             .duration(200)
103077                             .style('opacity', '1')
103078                             .on('end', function() {
103079                                 redraw();
103080                             });
103081                     }
103082                 }
103083
103084
103085                 uiMapInMap.toggle = toggle;
103086
103087                 wrap = selection.selectAll('.map-in-map')
103088                     .data([0]);
103089
103090                 wrap = wrap.enter()
103091                     .append('div')
103092                     .attr('class', 'map-in-map')
103093                     .style('display', (_isHidden ? 'none' : 'block'))
103094                     .call(zoom)
103095                     .on('dblclick.zoom', null)
103096                     .merge(wrap);
103097
103098                 // reflow warning: Hardcode dimensions - currently can't resize it anyway..
103099                 _dMini = [200,150]; //utilGetDimensions(wrap);
103100                 _cMini = geoVecScale(_dMini, 0.5);
103101
103102                 context.map()
103103                     .on('drawn.map-in-map', function(drawn) {
103104                         if (drawn.full === true) {
103105                             redraw();
103106                         }
103107                     });
103108
103109                 redraw();
103110
103111                 context.keybinding()
103112                     .on(t('background.minimap.key'), toggle);
103113             }
103114
103115             return mapInMap;
103116         }
103117
103118         function uiConfirm(selection) {
103119             var modalSelection = uiModal(selection);
103120
103121             modalSelection.select('.modal')
103122                 .classed('modal-alert', true);
103123
103124             var section = modalSelection.select('.content');
103125
103126             section.append('div')
103127                 .attr('class', 'modal-section header');
103128
103129             section.append('div')
103130                 .attr('class', 'modal-section message-text');
103131
103132             var buttons = section.append('div')
103133                 .attr('class', 'modal-section buttons cf');
103134
103135
103136             modalSelection.okButton = function() {
103137                 buttons
103138                     .append('button')
103139                     .attr('class', 'button ok-button action')
103140                     .on('click.confirm', function() {
103141                         modalSelection.remove();
103142                     })
103143                     .text(t('confirm.okay'))
103144                     .node()
103145                     .focus();
103146
103147                 return modalSelection;
103148             };
103149
103150
103151             return modalSelection;
103152         }
103153
103154         function uiSettingsCustomBackground(context) {
103155             var dispatch$1 = dispatch('change');
103156
103157             function render(selection) {
103158                 // keep separate copies of original and current settings
103159                 var _origSettings = {
103160                     template: context.storage('background-custom-template')
103161                 };
103162                 var _currSettings = {
103163                     template: context.storage('background-custom-template')
103164                 };
103165
103166                 var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
103167                 var modal = uiConfirm(selection).okButton();
103168
103169                 modal
103170                     .classed('settings-modal settings-custom-background', true);
103171
103172                 modal.select('.modal-section.header')
103173                     .append('h3')
103174                     .text(t('settings.custom_background.header'));
103175
103176
103177                 var textSection = modal.select('.modal-section.message-text');
103178
103179                 textSection
103180                     .append('pre')
103181                     .attr('class', 'instructions-template')
103182                     .text(t('settings.custom_background.instructions', { example: example }));
103183
103184                 textSection
103185                     .append('textarea')
103186                     .attr('class', 'field-template')
103187                     .attr('placeholder', t('settings.custom_background.template.placeholder'))
103188                     .call(utilNoAuto)
103189                     .property('value', _currSettings.template);
103190
103191
103192                 // insert a cancel button
103193                 var buttonSection = modal.select('.modal-section.buttons');
103194
103195                 buttonSection
103196                     .insert('button', '.ok-button')
103197                     .attr('class', 'button cancel-button secondary-action')
103198                     .text(t('confirm.cancel'));
103199
103200
103201                 buttonSection.select('.cancel-button')
103202                     .on('click.cancel', clickCancel);
103203
103204                 buttonSection.select('.ok-button')
103205                     .attr('disabled', isSaveDisabled)
103206                     .on('click.save', clickSave);
103207
103208
103209                 function isSaveDisabled() {
103210                     return null;
103211                 }
103212
103213
103214                 // restore the original template
103215                 function clickCancel() {
103216                     textSection.select('.field-template').property('value', _origSettings.template);
103217                     context.storage('background-custom-template', _origSettings.template);
103218                     this.blur();
103219                     modal.close();
103220                 }
103221
103222                 // accept the current template
103223                 function clickSave() {
103224                     _currSettings.template = textSection.select('.field-template').property('value');
103225                     context.storage('background-custom-template', _currSettings.template);
103226                     this.blur();
103227                     modal.close();
103228                     dispatch$1.call('change', this, _currSettings);
103229                 }
103230             }
103231
103232             return utilRebind(render, dispatch$1, 'on');
103233         }
103234
103235         function uiBackground(context) {
103236             var key = t('background.key');
103237
103238             var _pane = d3_select(null);
103239
103240             var _customSource = context.background().findSource('custom');
103241             var _previousBackground = context.background().findSource(context.storage('background-last-used-toggle'));
103242
103243             var _backgroundList = d3_select(null);
103244             var _overlayList = d3_select(null);
103245             var _displayOptionsContainer = d3_select(null);
103246             var _offsetContainer = d3_select(null);
103247
103248             var backgroundDisplayOptions = uiBackgroundDisplayOptions(context);
103249             var backgroundOffset = uiBackgroundOffset(context);
103250
103251             var settingsCustomBackground = uiSettingsCustomBackground(context)
103252                 .on('change', customChanged);
103253
103254
103255             function setTooltips(selection) {
103256                 selection.each(function(d, i, nodes) {
103257                     var item = d3_select(this).select('label');
103258                     var span = item.select('span');
103259                     var placement = (i < nodes.length / 2) ? 'bottom' : 'top';
103260                     var description = d.description();
103261                     var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth'));
103262
103263                     item.call(tooltip().destroyAny);
103264
103265                     if (d === _previousBackground) {
103266                         item.call(tooltip()
103267                             .placement(placement)
103268                             .html(true)
103269                             .title(function() {
103270                                 var tip = '<div>' + t('background.switch') + '</div>';
103271                                 return uiTooltipHtml(tip, uiCmd('⌘' + key));
103272                             })
103273                         );
103274                     } else if (description || isOverflowing) {
103275                         item.call(tooltip()
103276                             .placement(placement)
103277                             .title(description || d.name())
103278                         );
103279                     }
103280                 });
103281             }
103282
103283
103284             function updateLayerSelections(selection) {
103285                 function active(d) {
103286                     return context.background().showsLayer(d);
103287                 }
103288
103289                 selection.selectAll('li')
103290                     .classed('active', active)
103291                     .classed('switch', function(d) { return d === _previousBackground; })
103292                     .call(setTooltips)
103293                     .selectAll('input')
103294                     .property('checked', active);
103295             }
103296
103297
103298             function chooseBackground(d) {
103299                 if (d.id === 'custom' && !d.template()) {
103300                     return editCustom();
103301                 }
103302
103303                 event.preventDefault();
103304                 _previousBackground = context.background().baseLayerSource();
103305                 context.storage('background-last-used-toggle', _previousBackground.id);
103306                 context.storage('background-last-used', d.id);
103307                 context.background().baseLayerSource(d);
103308                 _backgroundList.call(updateLayerSelections);
103309                 document.activeElement.blur();
103310             }
103311
103312
103313             function customChanged(d) {
103314                 if (d && d.template) {
103315                     _customSource.template(d.template);
103316                     chooseBackground(_customSource);
103317                 } else {
103318                     _customSource.template('');
103319                     chooseBackground(context.background().findSource('none'));
103320                 }
103321             }
103322
103323
103324             function editCustom() {
103325                 event.preventDefault();
103326                 context.container()
103327                     .call(settingsCustomBackground);
103328             }
103329
103330
103331             function chooseOverlay(d) {
103332                 event.preventDefault();
103333                 context.background().toggleOverlayLayer(d);
103334                 _overlayList.call(updateLayerSelections);
103335                 document.activeElement.blur();
103336             }
103337
103338
103339             function drawListItems(layerList, type, change, filter) {
103340                 var sources = context.background()
103341                     .sources(context.map().extent(), context.map().zoom(), true)
103342                     .filter(filter);
103343
103344                 var layerLinks = layerList.selectAll('li')
103345                     .data(sources, function(d) { return d.name(); });
103346
103347                 layerLinks.exit()
103348                     .remove();
103349
103350                 var enter = layerLinks.enter()
103351                     .append('li')
103352                     .classed('layer-custom', function(d) { return d.id === 'custom'; })
103353                     .classed('best', function(d) { return d.best(); });
103354
103355                 var label = enter
103356                     .append('label');
103357
103358                 label
103359                     .append('input')
103360                     .attr('type', type)
103361                     .attr('name', 'layers')
103362                     .on('change', change);
103363
103364                 label
103365                     .append('span')
103366                     .text(function(d) { return d.name(); });
103367
103368                 enter.filter(function(d) { return d.id === 'custom'; })
103369                     .append('button')
103370                     .attr('class', 'layer-browse')
103371                     .call(tooltip()
103372                         .title(t('settings.custom_background.tooltip'))
103373                         .placement((textDirection === 'rtl') ? 'right' : 'left')
103374                     )
103375                     .on('click', editCustom)
103376                     .call(svgIcon('#iD-icon-more'));
103377
103378                 enter.filter(function(d) { return d.best(); })
103379                     .append('div')
103380                     .attr('class', 'best')
103381                     .call(tooltip()
103382                         .title(t('background.best_imagery'))
103383                         .placement((textDirection === 'rtl') ? 'right' : 'left')
103384                     )
103385                     .append('span')
103386                     .html('&#9733;');
103387
103388
103389                 layerList.selectAll('li')
103390                     .sort(sortSources);
103391
103392                 layerList
103393                     .call(updateLayerSelections);
103394
103395
103396                 function sortSources(a, b) {
103397                     return a.best() && !b.best() ? -1
103398                         : b.best() && !a.best() ? 1
103399                         : d3_descending(a.area(), b.area()) || d3_ascending(a.name(), b.name()) || 0;
103400                 }
103401             }
103402
103403
103404             function renderBackgroundList(selection) {
103405
103406                 // the background list
103407                 var container = selection.selectAll('.layer-background-list')
103408                     .data([0]);
103409
103410                 _backgroundList = container.enter()
103411                     .append('ul')
103412                     .attr('class', 'layer-list layer-background-list')
103413                     .attr('dir', 'auto')
103414                     .merge(container);
103415
103416
103417                 // add minimap toggle below list
103418                 var bgExtrasListEnter = selection.selectAll('.bg-extras-list')
103419                     .data([0])
103420                     .enter()
103421                     .append('ul')
103422                     .attr('class', 'layer-list bg-extras-list');
103423
103424                 var minimapLabelEnter = bgExtrasListEnter
103425                     .append('li')
103426                     .attr('class', 'minimap-toggle-item')
103427                     .append('label')
103428                     .call(tooltip()
103429                         .html(true)
103430                         .title(uiTooltipHtml(t('background.minimap.tooltip'), t('background.minimap.key')))
103431                         .placement('top')
103432                     );
103433
103434                 minimapLabelEnter
103435                     .append('input')
103436                     .attr('type', 'checkbox')
103437                     .on('change', function() {
103438                         event.preventDefault();
103439                         uiMapInMap.toggle();
103440                     });
103441
103442                 minimapLabelEnter
103443                     .append('span')
103444                     .text(t('background.minimap.description'));
103445
103446
103447                 var panelLabelEnter = bgExtrasListEnter
103448                     .append('li')
103449                     .attr('class', 'background-panel-toggle-item')
103450                     .append('label')
103451                     .call(tooltip()
103452                         .html(true)
103453                         .title(uiTooltipHtml(t('background.panel.tooltip'), uiCmd('⌘⇧' + t('info_panels.background.key'))))
103454                         .placement('top')
103455                     );
103456
103457                 panelLabelEnter
103458                     .append('input')
103459                     .attr('type', 'checkbox')
103460                     .on('change', function() {
103461                         event.preventDefault();
103462                         context.ui().info.toggle('background');
103463                     });
103464
103465                 panelLabelEnter
103466                     .append('span')
103467                     .text(t('background.panel.description'));
103468
103469
103470                 // "Info / Report a Problem" link
103471                 selection.selectAll('.imagery-faq')
103472                     .data([0])
103473                     .enter()
103474                     .append('div')
103475                     .attr('class', 'imagery-faq')
103476                     .append('a')
103477                     .attr('target', '_blank')
103478                     .call(svgIcon('#iD-icon-out-link', 'inline'))
103479                     .attr('href', 'https://github.com/openstreetmap/iD/blob/master/FAQ.md#how-can-i-report-an-issue-with-background-imagery')
103480                     .append('span')
103481                     .text(t('background.imagery_problem_faq'));
103482
103483                 updateBackgroundList();
103484             }
103485
103486
103487             function renderOverlayList(selection) {
103488                 var container = selection.selectAll('.layer-overlay-list')
103489                     .data([0]);
103490
103491                 _overlayList = container.enter()
103492                     .append('ul')
103493                     .attr('class', 'layer-list layer-overlay-list')
103494                     .attr('dir', 'auto')
103495                     .merge(container);
103496
103497                 updateOverlayList();
103498             }
103499
103500             function updateBackgroundList() {
103501                 _backgroundList
103502                     .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; });
103503             }
103504
103505             function updateOverlayList() {
103506                 _overlayList
103507                     .call(drawListItems, 'checkbox', chooseOverlay, function(d) { return !d.isHidden() && d.overlay; });
103508             }
103509
103510
103511             function update() {
103512                 if (!_pane.select('.disclosure-wrap-background_list').classed('hide')) {
103513                     updateBackgroundList();
103514                 }
103515
103516                 if (!_pane.select('.disclosure-wrap-overlay_list').classed('hide')) {
103517                     updateOverlayList();
103518                 }
103519
103520                 _displayOptionsContainer
103521                     .call(backgroundDisplayOptions);
103522
103523                 _offsetContainer
103524                     .call(backgroundOffset);
103525             }
103526
103527
103528             function quickSwitch() {
103529                 if (event) {
103530                     event.stopImmediatePropagation();
103531                     event.preventDefault();
103532                 }
103533                 if (_previousBackground) {
103534                     chooseBackground(_previousBackground);
103535                 }
103536             }
103537
103538             var paneTooltip = tooltip()
103539                 .placement((textDirection === 'rtl') ? 'right' : 'left')
103540                 .html(true)
103541                 .title(uiTooltipHtml(t('background.description'), key));
103542
103543             uiBackground.togglePane = function() {
103544                 if (event) { event.preventDefault(); }
103545                 paneTooltip.hide();
103546                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
103547             };
103548
103549             function hidePane() {
103550                 context.ui().togglePanes();
103551             }
103552
103553             uiBackground.renderToggleButton = function(selection) {
103554
103555                 selection
103556                     .append('button')
103557                     .on('click', uiBackground.togglePane)
103558                     .call(svgIcon('#iD-icon-layers', 'light'))
103559                     .call(paneTooltip);
103560             };
103561
103562             uiBackground.renderPane = function(selection) {
103563
103564                 _pane = selection
103565                     .append('div')
103566                     .attr('class', 'fillL map-pane background-pane hide')
103567                     .attr('pane', 'background');
103568
103569
103570                 var heading = _pane
103571                     .append('div')
103572                     .attr('class', 'pane-heading');
103573
103574                 heading
103575                     .append('h2')
103576                     .text(t('background.title'));
103577
103578                 heading
103579                     .append('button')
103580                     .on('click', hidePane)
103581                     .call(svgIcon('#iD-icon-close'));
103582
103583
103584                 var content = _pane
103585                     .append('div')
103586                     .attr('class', 'pane-content');
103587
103588                 // background list
103589                 content
103590                     .append('div')
103591                     .attr('class', 'background-background-list-container')
103592                     .call(uiDisclosure(context, 'background_list', true)
103593                         .title(t('background.backgrounds'))
103594                         .content(renderBackgroundList)
103595                     );
103596
103597                 // overlay list
103598                 content
103599                     .append('div')
103600                     .attr('class', 'background-overlay-list-container')
103601                     .call(uiDisclosure(context, 'overlay_list', true)
103602                         .title(t('background.overlays'))
103603                         .content(renderOverlayList)
103604                     );
103605
103606                 // display options
103607                 _displayOptionsContainer = content
103608                     .append('div')
103609                     .attr('class', 'background-display-options');
103610
103611                 // offset controls
103612                 _offsetContainer = content
103613                     .append('div')
103614                     .attr('class', 'background-offset');
103615
103616
103617                 // add listeners
103618                 context.map()
103619                     .on('move.background-update',
103620                         debounce(function() { window.requestIdleCallback(update); }, 1000)
103621                     );
103622
103623
103624                 context.background()
103625                     .on('change.background-update', update);
103626
103627
103628                 update();
103629
103630                 context.keybinding()
103631                     .on(key, uiBackground.togglePane)
103632                     .on(uiCmd('⌘' + key), quickSwitch);
103633             };
103634
103635             return uiBackground;
103636         }
103637
103638         function uiContributors(context) {
103639             var osm = context.connection(),
103640                 debouncedUpdate = debounce(function() { update(); }, 1000),
103641                 limit = 4,
103642                 hidden = false,
103643                 wrap = d3_select(null);
103644
103645
103646             function update() {
103647                 if (!osm) { return; }
103648
103649                 var users = {},
103650                     entities = context.intersects(context.map().extent());
103651
103652                 entities.forEach(function(entity) {
103653                     if (entity && entity.user) { users[entity.user] = true; }
103654                 });
103655
103656                 var u = Object.keys(users),
103657                     subset = u.slice(0, u.length > limit ? limit - 1 : limit);
103658
103659                 wrap.html('')
103660                     .call(svgIcon('#iD-icon-nearby', 'pre-text light'));
103661
103662                 var userList = d3_select(document.createElement('span'));
103663
103664                 userList.selectAll()
103665                     .data(subset)
103666                     .enter()
103667                     .append('a')
103668                     .attr('class', 'user-link')
103669                     .attr('href', function(d) { return osm.userURL(d); })
103670                     .attr('target', '_blank')
103671                     .text(String);
103672
103673                 if (u.length > limit) {
103674                     var count = d3_select(document.createElement('span'));
103675
103676                     count.append('a')
103677                         .attr('target', '_blank')
103678                         .attr('href', function() {
103679                             return osm.changesetsURL(context.map().center(), context.map().zoom());
103680                         })
103681                         .text(u.length - limit + 1);
103682
103683                     wrap.append('span')
103684                         .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() }));
103685
103686                 } else {
103687                     wrap.append('span')
103688                         .html(t('contributors.list', { users: userList.html() }));
103689                 }
103690
103691                 if (!u.length) {
103692                     hidden = true;
103693                     wrap
103694                         .transition()
103695                         .style('opacity', 0);
103696
103697                 } else if (hidden) {
103698                     wrap
103699                         .transition()
103700                         .style('opacity', 1);
103701                 }
103702             }
103703
103704
103705             return function(selection) {
103706                 if (!osm) { return; }
103707                 wrap = selection;
103708                 update();
103709
103710                 osm.on('loaded.contributors', debouncedUpdate);
103711                 context.map().on('move.contributors', debouncedUpdate);
103712             };
103713         }
103714
103715         function uiFeatureInfo(context) {
103716             function update(selection) {
103717                 var features = context.features();
103718                 var stats = features.stats();
103719                 var count = 0;
103720                 var hiddenList = features.hidden().map(function(k) {
103721                     if (stats[k]) {
103722                         count += stats[k];
103723                         return String(stats[k]) + ' ' + t('feature.' + k + '.description');
103724                     }
103725                 }).filter(Boolean);
103726
103727                 selection.html('');
103728
103729                 if (hiddenList.length) {
103730                     var tooltipBehavior = tooltip()
103731                         .placement('top')
103732                         .html(true)
103733                         .title(function() {
103734                             return uiTooltipHtml(hiddenList.join('<br/>'));
103735                         });
103736
103737                     selection.append('a')
103738                         .attr('class', 'chip')
103739                         .attr('href', '#')
103740                         .attr('tabindex', -1)
103741                         .html(t('feature_info.hidden_warning', { count: count }))
103742                         .call(tooltipBehavior)
103743                         .on('click', function() {
103744                             tooltipBehavior.hide();
103745                             event.preventDefault();
103746                             // open the Map Data pane
103747                             context.ui().togglePanes(d3_select('.map-panes .map-data-pane'));
103748                         });
103749                 }
103750
103751                 selection
103752                     .classed('hide', !hiddenList.length);
103753             }
103754
103755
103756             return function(selection) {
103757                 update(selection);
103758
103759                 context.features().on('change.feature_info', function() {
103760                     update(selection);
103761                 });
103762             };
103763         }
103764
103765         function uiFullScreen(context) {
103766             var element = context.container().node();
103767             // var button = d3_select(null);
103768
103769
103770             function getFullScreenFn() {
103771                 if (element.requestFullscreen) {
103772                     return element.requestFullscreen;
103773                 } else if (element.msRequestFullscreen) {
103774                     return element.msRequestFullscreen;
103775                 } else if (element.mozRequestFullScreen) {
103776                     return element.mozRequestFullScreen;
103777                 } else if (element.webkitRequestFullscreen) {
103778                     return element.webkitRequestFullscreen;
103779                 }
103780             }
103781
103782
103783             function getExitFullScreenFn() {
103784                 if (document.exitFullscreen) {
103785                     return document.exitFullscreen;
103786                 } else if (document.msExitFullscreen) {
103787                     return document.msExitFullscreen;
103788                 } else if (document.mozCancelFullScreen) {
103789                     return document.mozCancelFullScreen;
103790                 } else if (document.webkitExitFullscreen) {
103791                     return document.webkitExitFullscreen;
103792                 }
103793             }
103794
103795
103796             function isFullScreen() {
103797                 return document.fullscreenElement ||
103798                     document.mozFullScreenElement ||
103799                     document.webkitFullscreenElement ||
103800                     document.msFullscreenElement;
103801             }
103802
103803
103804             function isSupported() {
103805                 return !!getFullScreenFn();
103806             }
103807
103808
103809             function fullScreen() {
103810                 event.preventDefault();
103811                 if (!isFullScreen()) {
103812                     // button.classed('active', true);
103813                     getFullScreenFn().apply(element);
103814                 } else {
103815                     // button.classed('active', false);
103816                     getExitFullScreenFn().apply(document);
103817                 }
103818             }
103819
103820
103821             return function() { // selection) {
103822                 if (!isSupported()) { return; }
103823
103824                 // button = selection.append('button')
103825                 //     .attr('title', t('full_screen'))
103826                 //     .attr('tabindex', -1)
103827                 //     .on('click', fullScreen)
103828                 //     .call(tooltip);
103829
103830                 // button.append('span')
103831                 //     .attr('class', 'icon full-screen');
103832
103833                 var detected = utilDetect();
103834                 var keys = (detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11']);
103835                 context.keybinding().on(keys, fullScreen);
103836             };
103837         }
103838
103839         function uiGeolocate(context) {
103840             var geoOptions = { enableHighAccuracy: false, timeout: 6000 /* 6sec */ };
103841             var locating = uiLoading(context).message(t('geolocate.locating')).blocking(true);
103842             var layer = context.layers().layer('geolocate');
103843             var _position;
103844             var _extent;
103845             var _timeoutID;
103846
103847
103848             function click() {
103849                 if (context.inIntro()) { return; }
103850                 context.enter(modeBrowse(context));
103851                 if (!layer.enabled()) {
103852                     if (!_position) {
103853                         context.container().call(locating);
103854                         navigator.geolocation.getCurrentPosition(success, error, geoOptions);
103855                     } else {
103856                         zoomTo();
103857                     }
103858                 } else {
103859                     layer.enabled(null, false);
103860                 }
103861                 // This timeout ensures that we still call finish() even if
103862                 // the user declines to share their location in Firefox
103863                 _timeoutID = setTimeout(finish, 10000 /* 10sec */ );
103864             }
103865
103866             function zoomTo() {
103867                 var map = context.map();
103868                 layer.enabled(_position, true);
103869                 map.centerZoomEase(_extent.center(), Math.min(20, map.extentZoom(_extent)));
103870             }
103871
103872
103873             function success(geolocation) {
103874                 _position = geolocation;
103875                 var coords = _position.coords;
103876                 _extent = geoExtent([coords.longitude, coords.latitude]).padByMeters(coords.accuracy);
103877                 zoomTo();
103878                 finish();
103879             }
103880
103881
103882             function error() {
103883                 finish();
103884             }
103885
103886
103887             function finish() {
103888                 locating.close();  // unblock ui
103889                 if (_timeoutID) { clearTimeout(_timeoutID); }
103890                 _timeoutID = undefined;
103891             }
103892
103893
103894             return function(selection) {
103895                 if (!navigator.geolocation) { return; }
103896
103897                 selection
103898                     .append('button')
103899                     .attr('title', t('geolocate.title'))
103900                     .on('click', click)
103901                     .call(svgIcon('#iD-icon-geolocate', 'light'))
103902                     .call(tooltip()
103903                         .placement((textDirection === 'rtl') ? 'right' : 'left'));
103904             };
103905         }
103906
103907         var defaults$1 = createCommonjsModule(function (module) {
103908         function getDefaults() {
103909           return {
103910             baseUrl: null,
103911             breaks: false,
103912             gfm: true,
103913             headerIds: true,
103914             headerPrefix: '',
103915             highlight: null,
103916             langPrefix: 'language-',
103917             mangle: true,
103918             pedantic: false,
103919             renderer: null,
103920             sanitize: false,
103921             sanitizer: null,
103922             silent: false,
103923             smartLists: false,
103924             smartypants: false,
103925             xhtml: false
103926           };
103927         }
103928
103929         function changeDefaults(newDefaults) {
103930           module.exports.defaults = newDefaults;
103931         }
103932
103933         module.exports = {
103934           defaults: getDefaults(),
103935           getDefaults: getDefaults,
103936           changeDefaults: changeDefaults
103937         };
103938         });
103939         var defaults_1 = defaults$1.defaults;
103940         var defaults_2 = defaults$1.getDefaults;
103941         var defaults_3 = defaults$1.changeDefaults;
103942
103943         /**
103944          * Helpers
103945          */
103946         var escapeTest = /[&<>"']/;
103947         var escapeReplace = /[&<>"']/g;
103948         var escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
103949         var escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
103950         var escapeReplacements = {
103951           '&': '&amp;',
103952           '<': '&lt;',
103953           '>': '&gt;',
103954           '"': '&quot;',
103955           "'": '&#39;'
103956         };
103957         var getEscapeReplacement = function (ch) { return escapeReplacements[ch]; };
103958         function escape$1(html, encode) {
103959           if (encode) {
103960             if (escapeTest.test(html)) {
103961               return html.replace(escapeReplace, getEscapeReplacement);
103962             }
103963           } else {
103964             if (escapeTestNoEncode.test(html)) {
103965               return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
103966             }
103967           }
103968
103969           return html;
103970         }
103971
103972         var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
103973
103974         function unescape$1(html) {
103975           // explicitly match decimal, hex, and named HTML entities
103976           return html.replace(unescapeTest, function (_, n) {
103977             n = n.toLowerCase();
103978             if (n === 'colon') { return ':'; }
103979             if (n.charAt(0) === '#') {
103980               return n.charAt(1) === 'x'
103981                 ? String.fromCharCode(parseInt(n.substring(2), 16))
103982                 : String.fromCharCode(+n.substring(1));
103983             }
103984             return '';
103985           });
103986         }
103987
103988         var caret = /(^|[^\[])\^/g;
103989         function edit(regex, opt) {
103990           regex = regex.source || regex;
103991           opt = opt || '';
103992           var obj = {
103993             replace: function (name, val) {
103994               val = val.source || val;
103995               val = val.replace(caret, '$1');
103996               regex = regex.replace(name, val);
103997               return obj;
103998             },
103999             getRegex: function () {
104000               return new RegExp(regex, opt);
104001             }
104002           };
104003           return obj;
104004         }
104005
104006         var nonWordAndColonTest = /[^\w:]/g;
104007         var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
104008         function cleanUrl(sanitize, base, href) {
104009           if (sanitize) {
104010             var prot;
104011             try {
104012               prot = decodeURIComponent(unescape$1(href))
104013                 .replace(nonWordAndColonTest, '')
104014                 .toLowerCase();
104015             } catch (e) {
104016               return null;
104017             }
104018             if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
104019               return null;
104020             }
104021           }
104022           if (base && !originIndependentUrl.test(href)) {
104023             href = resolveUrl$1(base, href);
104024           }
104025           try {
104026             href = encodeURI(href).replace(/%25/g, '%');
104027           } catch (e) {
104028             return null;
104029           }
104030           return href;
104031         }
104032
104033         var baseUrls = {};
104034         var justDomain = /^[^:]+:\/*[^/]*$/;
104035         var protocol = /^([^:]+:)[\s\S]*$/;
104036         var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;
104037
104038         function resolveUrl$1(base, href) {
104039           if (!baseUrls[' ' + base]) {
104040             // we can ignore everything in base after the last slash of its path component,
104041             // but we might need to add _that_
104042             // https://tools.ietf.org/html/rfc3986#section-3
104043             if (justDomain.test(base)) {
104044               baseUrls[' ' + base] = base + '/';
104045             } else {
104046               baseUrls[' ' + base] = rtrim(base, '/', true);
104047             }
104048           }
104049           base = baseUrls[' ' + base];
104050           var relativeBase = base.indexOf(':') === -1;
104051
104052           if (href.substring(0, 2) === '//') {
104053             if (relativeBase) {
104054               return href;
104055             }
104056             return base.replace(protocol, '$1') + href;
104057           } else if (href.charAt(0) === '/') {
104058             if (relativeBase) {
104059               return href;
104060             }
104061             return base.replace(domain, '$1') + href;
104062           } else {
104063             return base + href;
104064           }
104065         }
104066
104067         var noopTest = { exec: function noopTest() {} };
104068
104069         function merge$1(obj) {
104070           var arguments$1 = arguments;
104071
104072           var i = 1,
104073             target,
104074             key;
104075
104076           for (; i < arguments.length; i++) {
104077             target = arguments$1[i];
104078             for (key in target) {
104079               if (Object.prototype.hasOwnProperty.call(target, key)) {
104080                 obj[key] = target[key];
104081               }
104082             }
104083           }
104084
104085           return obj;
104086         }
104087
104088         function splitCells(tableRow, count) {
104089           // ensure that every cell-delimiting pipe has a space
104090           // before it to distinguish it from an escaped pipe
104091           var row = tableRow.replace(/\|/g, function (match, offset, str) {
104092               var escaped = false,
104093                 curr = offset;
104094               while (--curr >= 0 && str[curr] === '\\') { escaped = !escaped; }
104095               if (escaped) {
104096                 // odd number of slashes means | is escaped
104097                 // so we leave it alone
104098                 return '|';
104099               } else {
104100                 // add space before unescaped |
104101                 return ' |';
104102               }
104103             }),
104104             cells = row.split(/ \|/);
104105           var i = 0;
104106
104107           if (cells.length > count) {
104108             cells.splice(count);
104109           } else {
104110             while (cells.length < count) { cells.push(''); }
104111           }
104112
104113           for (; i < cells.length; i++) {
104114             // leading or trailing whitespace is ignored per the gfm spec
104115             cells[i] = cells[i].trim().replace(/\\\|/g, '|');
104116           }
104117           return cells;
104118         }
104119
104120         // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
104121         // /c*$/ is vulnerable to REDOS.
104122         // invert: Remove suffix of non-c chars instead. Default falsey.
104123         function rtrim(str, c, invert) {
104124           var l = str.length;
104125           if (l === 0) {
104126             return '';
104127           }
104128
104129           // Length of suffix matching the invert condition.
104130           var suffLen = 0;
104131
104132           // Step left until we fail to match the invert condition.
104133           while (suffLen < l) {
104134             var currChar = str.charAt(l - suffLen - 1);
104135             if (currChar === c && !invert) {
104136               suffLen++;
104137             } else if (currChar !== c && invert) {
104138               suffLen++;
104139             } else {
104140               break;
104141             }
104142           }
104143
104144           return str.substr(0, l - suffLen);
104145         }
104146
104147         function findClosingBracket(str, b) {
104148           if (str.indexOf(b[1]) === -1) {
104149             return -1;
104150           }
104151           var l = str.length;
104152           var level = 0,
104153             i = 0;
104154           for (; i < l; i++) {
104155             if (str[i] === '\\') {
104156               i++;
104157             } else if (str[i] === b[0]) {
104158               level++;
104159             } else if (str[i] === b[1]) {
104160               level--;
104161               if (level < 0) {
104162                 return i;
104163               }
104164             }
104165           }
104166           return -1;
104167         }
104168
104169         function checkSanitizeDeprecation(opt) {
104170           if (opt && opt.sanitize && !opt.silent) {
104171             console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');
104172           }
104173         }
104174
104175         var helpers$1 = {
104176           escape: escape$1,
104177           unescape: unescape$1,
104178           edit: edit,
104179           cleanUrl: cleanUrl,
104180           resolveUrl: resolveUrl$1,
104181           noopTest: noopTest,
104182           merge: merge$1,
104183           splitCells: splitCells,
104184           rtrim: rtrim,
104185           findClosingBracket: findClosingBracket,
104186           checkSanitizeDeprecation: checkSanitizeDeprecation
104187         };
104188
104189         var noopTest$1 = helpers$1.noopTest;
104190         var edit$1 = helpers$1.edit;
104191         var merge$2 = helpers$1.merge;
104192
104193         /**
104194          * Block-Level Grammar
104195          */
104196         var block = {
104197           newline: /^\n+/,
104198           code: /^( {4}[^\n]+\n*)+/,
104199           fences: /^ {0,3}(`{3,}|~{3,})([^`~\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
104200           hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
104201           heading: /^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,
104202           blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
104203           list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
104204           html: '^ {0,3}(?:' // optional indentation
104205             + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
104206             + '|comment[^\\n]*(\\n+|$)' // (2)
104207             + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
104208             + '|<![A-Z][\\s\\S]*?>\\n*' // (4)
104209             + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
104210             + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
104211             + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
104212             + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
104213             + ')',
104214           def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
104215           nptable: noopTest$1,
104216           table: noopTest$1,
104217           lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
104218           // regex template, placeholders will be replaced according to different paragraph
104219           // interruption rules of commonmark and the original markdown spec:
104220           _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,
104221           text: /^[^\n]+/
104222         };
104223
104224         block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
104225         block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
104226         block.def = edit$1(block.def)
104227           .replace('label', block._label)
104228           .replace('title', block._title)
104229           .getRegex();
104230
104231         block.bullet = /(?:[*+-]|\d{1,9}\.)/;
104232         block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/;
104233         block.item = edit$1(block.item, 'gm')
104234           .replace(/bull/g, block.bullet)
104235           .getRegex();
104236
104237         block.list = edit$1(block.list)
104238           .replace(/bull/g, block.bullet)
104239           .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
104240           .replace('def', '\\n+(?=' + block.def.source + ')')
104241           .getRegex();
104242
104243         block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
104244           + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
104245           + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
104246           + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
104247           + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
104248           + '|track|ul';
104249         block._comment = /<!--(?!-?>)[\s\S]*?-->/;
104250         block.html = edit$1(block.html, 'i')
104251           .replace('comment', block._comment)
104252           .replace('tag', block._tag)
104253           .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
104254           .getRegex();
104255
104256         block.paragraph = edit$1(block._paragraph)
104257           .replace('hr', block.hr)
104258           .replace('heading', ' {0,3}#{1,6} +')
104259           .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
104260           .replace('blockquote', ' {0,3}>')
104261           .replace('fences', ' {0,3}(?:`{3,}|~{3,})[^`\\n]*\\n')
104262           .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
104263           .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)')
104264           .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
104265           .getRegex();
104266
104267         block.blockquote = edit$1(block.blockquote)
104268           .replace('paragraph', block.paragraph)
104269           .getRegex();
104270
104271         /**
104272          * Normal Block Grammar
104273          */
104274
104275         block.normal = merge$2({}, block);
104276
104277         /**
104278          * GFM Block Grammar
104279          */
104280
104281         block.gfm = merge$2({}, block.normal, {
104282           nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
104283           table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
104284         });
104285
104286         /**
104287          * Pedantic grammar (original John Gruber's loose markdown specification)
104288          */
104289
104290         block.pedantic = merge$2({}, block.normal, {
104291           html: edit$1(
104292             '^ *(?:comment *(?:\\n|\\s*$)'
104293             + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
104294             + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
104295             .replace('comment', block._comment)
104296             .replace(/tag/g, '(?!(?:'
104297               + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
104298               + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
104299               + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
104300             .getRegex(),
104301           def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
104302           heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
104303           fences: noopTest$1, // fences not supported
104304           paragraph: edit$1(block.normal._paragraph)
104305             .replace('hr', block.hr)
104306             .replace('heading', ' *#{1,6} *[^\n]')
104307             .replace('lheading', block.lheading)
104308             .replace('blockquote', ' {0,3}>')
104309             .replace('|fences', '')
104310             .replace('|list', '')
104311             .replace('|html', '')
104312             .getRegex()
104313         });
104314
104315         /**
104316          * Inline-Level Grammar
104317          */
104318         var inline = {
104319           escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
104320           autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
104321           url: noopTest$1,
104322           tag: '^comment'
104323             + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
104324             + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
104325             + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
104326             + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
104327             + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
104328           link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
104329           reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
104330           nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
104331           strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
104332           em: /^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
104333           code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
104334           br: /^( {2,}|\\)\n(?!\s*$)/,
104335           del: noopTest$1,
104336           text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/
104337         };
104338
104339         // list of punctuation marks from common mark spec
104340         // without ` and ] to workaround Rule 17 (inline code blocks/links)
104341         inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~';
104342         inline.em = edit$1(inline.em).replace(/punctuation/g, inline._punctuation).getRegex();
104343
104344         inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
104345
104346         inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
104347         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])?)+(?![-_])/;
104348         inline.autolink = edit$1(inline.autolink)
104349           .replace('scheme', inline._scheme)
104350           .replace('email', inline._email)
104351           .getRegex();
104352
104353         inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
104354
104355         inline.tag = edit$1(inline.tag)
104356           .replace('comment', block._comment)
104357           .replace('attribute', inline._attribute)
104358           .getRegex();
104359
104360         inline._label = /(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
104361         inline._href = /<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/;
104362         inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
104363
104364         inline.link = edit$1(inline.link)
104365           .replace('label', inline._label)
104366           .replace('href', inline._href)
104367           .replace('title', inline._title)
104368           .getRegex();
104369
104370         inline.reflink = edit$1(inline.reflink)
104371           .replace('label', inline._label)
104372           .getRegex();
104373
104374         /**
104375          * Normal Inline Grammar
104376          */
104377
104378         inline.normal = merge$2({}, inline);
104379
104380         /**
104381          * Pedantic Inline Grammar
104382          */
104383
104384         inline.pedantic = merge$2({}, inline.normal, {
104385           strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
104386           em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
104387           link: edit$1(/^!?\[(label)\]\((.*?)\)/)
104388             .replace('label', inline._label)
104389             .getRegex(),
104390           reflink: edit$1(/^!?\[(label)\]\s*\[([^\]]*)\]/)
104391             .replace('label', inline._label)
104392             .getRegex()
104393         });
104394
104395         /**
104396          * GFM Inline Grammar
104397          */
104398
104399         inline.gfm = merge$2({}, inline.normal, {
104400           escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),
104401           _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
104402           url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
104403           _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
104404           del: /^~+(?=\S)([\s\S]*?\S)~+/,
104405           text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
104406         });
104407
104408         inline.gfm.url = edit$1(inline.gfm.url, 'i')
104409           .replace('email', inline.gfm._extended_email)
104410           .getRegex();
104411         /**
104412          * GFM + Line Breaks Inline Grammar
104413          */
104414
104415         inline.breaks = merge$2({}, inline.gfm, {
104416           br: edit$1(inline.br).replace('{2,}', '*').getRegex(),
104417           text: edit$1(inline.gfm.text)
104418             .replace('\\b_', '\\b_| {2,}\\n')
104419             .replace(/\{2,\}/g, '*')
104420             .getRegex()
104421         });
104422
104423         var rules = {
104424           block: block,
104425           inline: inline
104426         };
104427
104428         var defaults$2 = defaults$1.defaults;
104429         var block$1 = rules.block;
104430         var rtrim$1 = helpers$1.rtrim;
104431         var splitCells$1 = helpers$1.splitCells;
104432         var escape$2 = helpers$1.escape;
104433
104434         /**
104435          * Block Lexer
104436          */
104437         var Lexer_1 = /*@__PURE__*/(function () {
104438           function Lexer(options) {
104439             this.tokens = [];
104440             this.tokens.links = Object.create(null);
104441             this.options = options || defaults$2;
104442             this.rules = block$1.normal;
104443
104444             if (this.options.pedantic) {
104445               this.rules = block$1.pedantic;
104446             } else if (this.options.gfm) {
104447               this.rules = block$1.gfm;
104448             }
104449           }
104450
104451           var staticAccessors = { rules: { configurable: true } };
104452
104453           /**
104454            * Expose Block Rules
104455            */
104456           staticAccessors.rules.get = function () {
104457             return block$1;
104458           };
104459
104460           /**
104461            * Static Lex Method
104462            */
104463           Lexer.lex = function lex (src, options) {
104464             var lexer = new Lexer(options);
104465             return lexer.lex(src);
104466           };
104467           /**
104468            * Preprocessing
104469            */
104470           Lexer.prototype.lex = function lex (src) {
104471             src = src
104472               .replace(/\r\n|\r/g, '\n')
104473               .replace(/\t/g, '    ');
104474
104475             return this.token(src, true);
104476           };
104477           /**
104478            * Lexing
104479            */
104480           Lexer.prototype.token = function token (src, top) {
104481             src = src.replace(/^ +$/gm, '');
104482             var next,
104483               loose,
104484               cap,
104485               bull,
104486               b,
104487               item,
104488               listStart,
104489               listItems,
104490               t,
104491               space,
104492               i,
104493               tag,
104494               l,
104495               isordered,
104496               istask,
104497               ischecked;
104498
104499             while (src) {
104500               // newline
104501               if (cap = this.rules.newline.exec(src)) {
104502                 src = src.substring(cap[0].length);
104503                 if (cap[0].length > 1) {
104504                   this.tokens.push({
104505                     type: 'space'
104506                   });
104507                 }
104508               }
104509
104510               // code
104511               if (cap = this.rules.code.exec(src)) {
104512                 var lastToken = this.tokens[this.tokens.length - 1];
104513                 src = src.substring(cap[0].length);
104514                 // An indented code block cannot interrupt a paragraph.
104515                 if (lastToken && lastToken.type === 'paragraph') {
104516                   lastToken.text += '\n' + cap[0].trimRight();
104517                 } else {
104518                   cap = cap[0].replace(/^ {4}/gm, '');
104519                   this.tokens.push({
104520                     type: 'code',
104521                     codeBlockStyle: 'indented',
104522                     text: !this.options.pedantic
104523                       ? rtrim$1(cap, '\n')
104524                       : cap
104525                   });
104526                 }
104527                 continue;
104528               }
104529
104530               // fences
104531               if (cap = this.rules.fences.exec(src)) {
104532                 src = src.substring(cap[0].length);
104533                 this.tokens.push({
104534                   type: 'code',
104535                   lang: cap[2] ? cap[2].trim() : cap[2],
104536                   text: cap[3] || ''
104537                 });
104538                 continue;
104539               }
104540
104541               // heading
104542               if (cap = this.rules.heading.exec(src)) {
104543                 src = src.substring(cap[0].length);
104544                 this.tokens.push({
104545                   type: 'heading',
104546                   depth: cap[1].length,
104547                   text: cap[2]
104548                 });
104549                 continue;
104550               }
104551
104552               // table no leading pipe (gfm)
104553               if (cap = this.rules.nptable.exec(src)) {
104554                 item = {
104555                   type: 'table',
104556                   header: splitCells$1(cap[1].replace(/^ *| *\| *$/g, '')),
104557                   align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
104558                   cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
104559                 };
104560
104561                 if (item.header.length === item.align.length) {
104562                   src = src.substring(cap[0].length);
104563
104564                   for (i = 0; i < item.align.length; i++) {
104565                     if (/^ *-+: *$/.test(item.align[i])) {
104566                       item.align[i] = 'right';
104567                     } else if (/^ *:-+: *$/.test(item.align[i])) {
104568                       item.align[i] = 'center';
104569                     } else if (/^ *:-+ *$/.test(item.align[i])) {
104570                       item.align[i] = 'left';
104571                     } else {
104572                       item.align[i] = null;
104573                     }
104574                   }
104575
104576                   for (i = 0; i < item.cells.length; i++) {
104577                     item.cells[i] = splitCells$1(item.cells[i], item.header.length);
104578                   }
104579
104580                   this.tokens.push(item);
104581
104582                   continue;
104583                 }
104584               }
104585
104586               // hr
104587               if (cap = this.rules.hr.exec(src)) {
104588                 src = src.substring(cap[0].length);
104589                 this.tokens.push({
104590                   type: 'hr'
104591                 });
104592                 continue;
104593               }
104594
104595               // blockquote
104596               if (cap = this.rules.blockquote.exec(src)) {
104597                 src = src.substring(cap[0].length);
104598
104599                 this.tokens.push({
104600                   type: 'blockquote_start'
104601                 });
104602
104603                 cap = cap[0].replace(/^ *> ?/gm, '');
104604
104605                 // Pass `top` to keep the current
104606                 // "toplevel" state. This is exactly
104607                 // how markdown.pl works.
104608                 this.token(cap, top);
104609
104610                 this.tokens.push({
104611                   type: 'blockquote_end'
104612                 });
104613
104614                 continue;
104615               }
104616
104617               // list
104618               if (cap = this.rules.list.exec(src)) {
104619                 src = src.substring(cap[0].length);
104620                 bull = cap[2];
104621                 isordered = bull.length > 1;
104622
104623                 listStart = {
104624                   type: 'list_start',
104625                   ordered: isordered,
104626                   start: isordered ? +bull : '',
104627                   loose: false
104628                 };
104629
104630                 this.tokens.push(listStart);
104631
104632                 // Get each top-level item.
104633                 cap = cap[0].match(this.rules.item);
104634
104635                 listItems = [];
104636                 next = false;
104637                 l = cap.length;
104638                 i = 0;
104639
104640                 for (; i < l; i++) {
104641                   item = cap[i];
104642
104643                   // Remove the list item's bullet
104644                   // so it is seen as the next token.
104645                   space = item.length;
104646                   item = item.replace(/^ *([*+-]|\d+\.) */, '');
104647
104648                   // Outdent whatever the
104649                   // list item contains. Hacky.
104650                   if (~item.indexOf('\n ')) {
104651                     space -= item.length;
104652                     item = !this.options.pedantic
104653                       ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
104654                       : item.replace(/^ {1,4}/gm, '');
104655                   }
104656
104657                   // Determine whether the next list item belongs here.
104658                   // Backpedal if it does not belong in this list.
104659                   if (i !== l - 1) {
104660                     b = block$1.bullet.exec(cap[i + 1])[0];
104661                     if (bull.length > 1 ? b.length === 1
104662                       : (b.length > 1 || (this.options.smartLists && b !== bull))) {
104663                       src = cap.slice(i + 1).join('\n') + src;
104664                       i = l - 1;
104665                     }
104666                   }
104667
104668                   // Determine whether item is loose or not.
104669                   // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
104670                   // for discount behavior.
104671                   loose = next || /\n\n(?!\s*$)/.test(item);
104672                   if (i !== l - 1) {
104673                     next = item.charAt(item.length - 1) === '\n';
104674                     if (!loose) { loose = next; }
104675                   }
104676
104677                   if (loose) {
104678                     listStart.loose = true;
104679                   }
104680
104681                   // Check for task list items
104682                   istask = /^\[[ xX]\] /.test(item);
104683                   ischecked = undefined;
104684                   if (istask) {
104685                     ischecked = item[1] !== ' ';
104686                     item = item.replace(/^\[[ xX]\] +/, '');
104687                   }
104688
104689                   t = {
104690                     type: 'list_item_start',
104691                     task: istask,
104692                     checked: ischecked,
104693                     loose: loose
104694                   };
104695
104696                   listItems.push(t);
104697                   this.tokens.push(t);
104698
104699                   // Recurse.
104700                   this.token(item, false);
104701
104702                   this.tokens.push({
104703                     type: 'list_item_end'
104704                   });
104705                 }
104706
104707                 if (listStart.loose) {
104708                   l = listItems.length;
104709                   i = 0;
104710                   for (; i < l; i++) {
104711                     listItems[i].loose = true;
104712                   }
104713                 }
104714
104715                 this.tokens.push({
104716                   type: 'list_end'
104717                 });
104718
104719                 continue;
104720               }
104721
104722               // html
104723               if (cap = this.rules.html.exec(src)) {
104724                 src = src.substring(cap[0].length);
104725                 this.tokens.push({
104726                   type: this.options.sanitize
104727                     ? 'paragraph'
104728                     : 'html',
104729                   pre: !this.options.sanitizer
104730                     && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
104731                   text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$2(cap[0])) : cap[0]
104732                 });
104733                 continue;
104734               }
104735
104736               // def
104737               if (top && (cap = this.rules.def.exec(src))) {
104738                 src = src.substring(cap[0].length);
104739                 if (cap[3]) { cap[3] = cap[3].substring(1, cap[3].length - 1); }
104740                 tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
104741                 if (!this.tokens.links[tag]) {
104742                   this.tokens.links[tag] = {
104743                     href: cap[2],
104744                     title: cap[3]
104745                   };
104746                 }
104747                 continue;
104748               }
104749
104750               // table (gfm)
104751               if (cap = this.rules.table.exec(src)) {
104752                 item = {
104753                   type: 'table',
104754                   header: splitCells$1(cap[1].replace(/^ *| *\| *$/g, '')),
104755                   align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
104756                   cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
104757                 };
104758
104759                 if (item.header.length === item.align.length) {
104760                   src = src.substring(cap[0].length);
104761
104762                   for (i = 0; i < item.align.length; i++) {
104763                     if (/^ *-+: *$/.test(item.align[i])) {
104764                       item.align[i] = 'right';
104765                     } else if (/^ *:-+: *$/.test(item.align[i])) {
104766                       item.align[i] = 'center';
104767                     } else if (/^ *:-+ *$/.test(item.align[i])) {
104768                       item.align[i] = 'left';
104769                     } else {
104770                       item.align[i] = null;
104771                     }
104772                   }
104773
104774                   for (i = 0; i < item.cells.length; i++) {
104775                     item.cells[i] = splitCells$1(
104776                       item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
104777                       item.header.length);
104778                   }
104779
104780                   this.tokens.push(item);
104781
104782                   continue;
104783                 }
104784               }
104785
104786               // lheading
104787               if (cap = this.rules.lheading.exec(src)) {
104788                 src = src.substring(cap[0].length);
104789                 this.tokens.push({
104790                   type: 'heading',
104791                   depth: cap[2].charAt(0) === '=' ? 1 : 2,
104792                   text: cap[1]
104793                 });
104794                 continue;
104795               }
104796
104797               // top-level paragraph
104798               if (top && (cap = this.rules.paragraph.exec(src))) {
104799                 src = src.substring(cap[0].length);
104800                 this.tokens.push({
104801                   type: 'paragraph',
104802                   text: cap[1].charAt(cap[1].length - 1) === '\n'
104803                     ? cap[1].slice(0, -1)
104804                     : cap[1]
104805                 });
104806                 continue;
104807               }
104808
104809               // text
104810               if (cap = this.rules.text.exec(src)) {
104811                 // Top-level should never reach here.
104812                 src = src.substring(cap[0].length);
104813                 this.tokens.push({
104814                   type: 'text',
104815                   text: cap[0]
104816                 });
104817                 continue;
104818               }
104819
104820               if (src) {
104821                 throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
104822               }
104823             }
104824
104825             return this.tokens;
104826           };
104827
104828           Object.defineProperties( Lexer, staticAccessors );
104829
104830           return Lexer;
104831         }());
104832
104833         var defaults$3 = defaults$1.defaults;
104834         var cleanUrl$1 = helpers$1.cleanUrl;
104835         var escape$3 = helpers$1.escape;
104836
104837         /**
104838          * Renderer
104839          */
104840         var Renderer_1 = /*@__PURE__*/(function () {
104841           function Renderer(options) {
104842             this.options = options || defaults$3;
104843           }
104844
104845           Renderer.prototype.code = function code (code$1, infostring, escaped) {
104846             var lang = (infostring || '').match(/\S*/)[0];
104847             if (this.options.highlight) {
104848               var out = this.options.highlight(code$1, lang);
104849               if (out != null && out !== code$1) {
104850                 escaped = true;
104851                 code$1 = out;
104852               }
104853             }
104854
104855             if (!lang) {
104856               return '<pre><code>'
104857                 + (escaped ? code$1 : escape$3(code$1, true))
104858                 + '</code></pre>';
104859             }
104860
104861             return '<pre><code class="'
104862               + this.options.langPrefix
104863               + escape$3(lang, true)
104864               + '">'
104865               + (escaped ? code$1 : escape$3(code$1, true))
104866               + '</code></pre>\n';
104867           };
104868           Renderer.prototype.blockquote = function blockquote (quote) {
104869             return '<blockquote>\n' + quote + '</blockquote>\n';
104870           };
104871           Renderer.prototype.html = function html (html$1) {
104872             return html$1;
104873           };
104874           Renderer.prototype.heading = function heading (text, level, raw, slugger) {
104875             if (this.options.headerIds) {
104876               return '<h'
104877                 + level
104878                 + ' id="'
104879                 + this.options.headerPrefix
104880                 + slugger.slug(raw)
104881                 + '">'
104882                 + text
104883                 + '</h'
104884                 + level
104885                 + '>\n';
104886             }
104887             // ignore IDs
104888             return '<h' + level + '>' + text + '</h' + level + '>\n';
104889           };
104890           Renderer.prototype.hr = function hr () {
104891             return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
104892           };
104893           Renderer.prototype.list = function list (body, ordered, start) {
104894             var type = ordered ? 'ol' : 'ul',
104895               startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
104896             return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
104897           };
104898           Renderer.prototype.listitem = function listitem (text) {
104899             return '<li>' + text + '</li>\n';
104900           };
104901           Renderer.prototype.checkbox = function checkbox (checked) {
104902             return '<input '
104903               + (checked ? 'checked="" ' : '')
104904               + 'disabled="" type="checkbox"'
104905               + (this.options.xhtml ? ' /' : '')
104906               + '> ';
104907           };
104908           Renderer.prototype.paragraph = function paragraph (text) {
104909             return '<p>' + text + '</p>\n';
104910           };
104911           Renderer.prototype.table = function table (header, body) {
104912             if (body) { body = '<tbody>' + body + '</tbody>'; }
104913
104914             return '<table>\n'
104915               + '<thead>\n'
104916               + header
104917               + '</thead>\n'
104918               + body
104919               + '</table>\n';
104920           };
104921           Renderer.prototype.tablerow = function tablerow (content) {
104922             return '<tr>\n' + content + '</tr>\n';
104923           };
104924           Renderer.prototype.tablecell = function tablecell (content, flags) {
104925             var type = flags.header ? 'th' : 'td';
104926             var tag = flags.align
104927               ? '<' + type + ' align="' + flags.align + '">'
104928               : '<' + type + '>';
104929             return tag + content + '</' + type + '>\n';
104930           };
104931           // span level renderer
104932           Renderer.prototype.strong = function strong (text) {
104933             return '<strong>' + text + '</strong>';
104934           };
104935           Renderer.prototype.em = function em (text) {
104936             return '<em>' + text + '</em>';
104937           };
104938           Renderer.prototype.codespan = function codespan (text) {
104939             return '<code>' + text + '</code>';
104940           };
104941           Renderer.prototype.br = function br () {
104942             return this.options.xhtml ? '<br/>' : '<br>';
104943           };
104944           Renderer.prototype.del = function del (text) {
104945             return '<del>' + text + '</del>';
104946           };
104947           Renderer.prototype.link = function link (href, title, text) {
104948             href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);
104949             if (href === null) {
104950               return text;
104951             }
104952             var out = '<a href="' + escape$3(href) + '"';
104953             if (title) {
104954               out += ' title="' + title + '"';
104955             }
104956             out += '>' + text + '</a>';
104957             return out;
104958           };
104959           Renderer.prototype.image = function image (href, title, text) {
104960             href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);
104961             if (href === null) {
104962               return text;
104963             }
104964
104965             var out = '<img src="' + href + '" alt="' + text + '"';
104966             if (title) {
104967               out += ' title="' + title + '"';
104968             }
104969             out += this.options.xhtml ? '/>' : '>';
104970             return out;
104971           };
104972           Renderer.prototype.text = function text (text$1) {
104973             return text$1;
104974           };
104975
104976           return Renderer;
104977         }());
104978
104979         /**
104980          * Slugger generates header id
104981          */
104982         var Slugger_1 = /*@__PURE__*/(function () {
104983           function Slugger() {
104984             this.seen = {};
104985           }
104986
104987           /**
104988            * Convert string to unique id
104989            */
104990           Slugger.prototype.slug = function slug (value) {
104991             var slug = value
104992               .toLowerCase()
104993               .trim()
104994               .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
104995               .replace(/\s/g, '-');
104996
104997             if (this.seen.hasOwnProperty(slug)) {
104998               var originalSlug = slug;
104999               do {
105000                 this.seen[originalSlug]++;
105001                 slug = originalSlug + '-' + this.seen[originalSlug];
105002               } while (this.seen.hasOwnProperty(slug));
105003             }
105004             this.seen[slug] = 0;
105005
105006             return slug;
105007           };
105008
105009           return Slugger;
105010         }());
105011
105012         var defaults$4 = defaults$1.defaults;
105013         var inline$1 = rules.inline;
105014         var findClosingBracket$1 = helpers$1.findClosingBracket;
105015         var escape$4 = helpers$1.escape;
105016
105017         /**
105018          * Inline Lexer & Compiler
105019          */
105020         var InlineLexer_1 = /*@__PURE__*/(function () {
105021           function InlineLexer(links, options) {
105022             this.options = options || defaults$4;
105023             this.links = links;
105024             this.rules = inline$1.normal;
105025             this.options.renderer = this.options.renderer || new Renderer_1();
105026             this.renderer = this.options.renderer;
105027             this.renderer.options = this.options;
105028
105029             if (!this.links) {
105030               throw new Error('Tokens array requires a `links` property.');
105031             }
105032
105033             if (this.options.pedantic) {
105034               this.rules = inline$1.pedantic;
105035             } else if (this.options.gfm) {
105036               if (this.options.breaks) {
105037                 this.rules = inline$1.breaks;
105038               } else {
105039                 this.rules = inline$1.gfm;
105040               }
105041             }
105042           }
105043
105044           var staticAccessors = { rules: { configurable: true } };
105045
105046           /**
105047            * Expose Inline Rules
105048            */
105049           staticAccessors.rules.get = function () {
105050             return inline$1;
105051           };
105052
105053           /**
105054            * Static Lexing/Compiling Method
105055            */
105056           InlineLexer.output = function output (src, links, options) {
105057             var inline = new InlineLexer(links, options);
105058             return inline.output(src);
105059           };
105060
105061           /**
105062            * Lexing/Compiling
105063            */
105064           InlineLexer.prototype.output = function output (src) {
105065             var out = '',
105066               link,
105067               text,
105068               href,
105069               title,
105070               cap,
105071               prevCapZero;
105072
105073             while (src) {
105074               // escape
105075               if (cap = this.rules.escape.exec(src)) {
105076                 src = src.substring(cap[0].length);
105077                 out += escape$4(cap[1]);
105078                 continue;
105079               }
105080
105081               // tag
105082               if (cap = this.rules.tag.exec(src)) {
105083                 if (!this.inLink && /^<a /i.test(cap[0])) {
105084                   this.inLink = true;
105085                 } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
105086                   this.inLink = false;
105087                 }
105088                 if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
105089                   this.inRawBlock = true;
105090                 } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
105091                   this.inRawBlock = false;
105092                 }
105093
105094                 src = src.substring(cap[0].length);
105095                 out += this.options.sanitize
105096                   ? this.options.sanitizer
105097                     ? this.options.sanitizer(cap[0])
105098                     : escape$4(cap[0])
105099                   : cap[0];
105100                 continue;
105101               }
105102
105103               // link
105104               if (cap = this.rules.link.exec(src)) {
105105                 var lastParenIndex = findClosingBracket$1(cap[2], '()');
105106                 if (lastParenIndex > -1) {
105107                   var start = cap[0].indexOf('!') === 0 ? 5 : 4;
105108                   var linkLen = start + cap[1].length + lastParenIndex;
105109                   cap[2] = cap[2].substring(0, lastParenIndex);
105110                   cap[0] = cap[0].substring(0, linkLen).trim();
105111                   cap[3] = '';
105112                 }
105113                 src = src.substring(cap[0].length);
105114                 this.inLink = true;
105115                 href = cap[2];
105116                 if (this.options.pedantic) {
105117                   link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
105118
105119                   if (link) {
105120                     href = link[1];
105121                     title = link[3];
105122                   } else {
105123                     title = '';
105124                   }
105125                 } else {
105126                   title = cap[3] ? cap[3].slice(1, -1) : '';
105127                 }
105128                 href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
105129                 out += this.outputLink(cap, {
105130                   href: InlineLexer.escapes(href),
105131                   title: InlineLexer.escapes(title)
105132                 });
105133                 this.inLink = false;
105134                 continue;
105135               }
105136
105137               // reflink, nolink
105138               if ((cap = this.rules.reflink.exec(src))
105139                   || (cap = this.rules.nolink.exec(src))) {
105140                 src = src.substring(cap[0].length);
105141                 link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
105142                 link = this.links[link.toLowerCase()];
105143                 if (!link || !link.href) {
105144                   out += cap[0].charAt(0);
105145                   src = cap[0].substring(1) + src;
105146                   continue;
105147                 }
105148                 this.inLink = true;
105149                 out += this.outputLink(cap, link);
105150                 this.inLink = false;
105151                 continue;
105152               }
105153
105154               // strong
105155               if (cap = this.rules.strong.exec(src)) {
105156                 src = src.substring(cap[0].length);
105157                 out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
105158                 continue;
105159               }
105160
105161               // em
105162               if (cap = this.rules.em.exec(src)) {
105163                 src = src.substring(cap[0].length);
105164                 out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
105165                 continue;
105166               }
105167
105168               // code
105169               if (cap = this.rules.code.exec(src)) {
105170                 src = src.substring(cap[0].length);
105171                 out += this.renderer.codespan(escape$4(cap[2].trim(), true));
105172                 continue;
105173               }
105174
105175               // br
105176               if (cap = this.rules.br.exec(src)) {
105177                 src = src.substring(cap[0].length);
105178                 out += this.renderer.br();
105179                 continue;
105180               }
105181
105182               // del (gfm)
105183               if (cap = this.rules.del.exec(src)) {
105184                 src = src.substring(cap[0].length);
105185                 out += this.renderer.del(this.output(cap[1]));
105186                 continue;
105187               }
105188
105189               // autolink
105190               if (cap = this.rules.autolink.exec(src)) {
105191                 src = src.substring(cap[0].length);
105192                 if (cap[2] === '@') {
105193                   text = escape$4(this.mangle(cap[1]));
105194                   href = 'mailto:' + text;
105195                 } else {
105196                   text = escape$4(cap[1]);
105197                   href = text;
105198                 }
105199                 out += this.renderer.link(href, null, text);
105200                 continue;
105201               }
105202
105203               // url (gfm)
105204               if (!this.inLink && (cap = this.rules.url.exec(src))) {
105205                 if (cap[2] === '@') {
105206                   text = escape$4(cap[0]);
105207                   href = 'mailto:' + text;
105208                 } else {
105209                   // do extended autolink path validation
105210                   do {
105211                     prevCapZero = cap[0];
105212                     cap[0] = this.rules._backpedal.exec(cap[0])[0];
105213                   } while (prevCapZero !== cap[0]);
105214                   text = escape$4(cap[0]);
105215                   if (cap[1] === 'www.') {
105216                     href = 'http://' + text;
105217                   } else {
105218                     href = text;
105219                   }
105220                 }
105221                 src = src.substring(cap[0].length);
105222                 out += this.renderer.link(href, null, text);
105223                 continue;
105224               }
105225
105226               // text
105227               if (cap = this.rules.text.exec(src)) {
105228                 src = src.substring(cap[0].length);
105229                 if (this.inRawBlock) {
105230                   out += this.renderer.text(this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$4(cap[0])) : cap[0]);
105231                 } else {
105232                   out += this.renderer.text(escape$4(this.smartypants(cap[0])));
105233                 }
105234                 continue;
105235               }
105236
105237               if (src) {
105238                 throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
105239               }
105240             }
105241
105242             return out;
105243           };
105244
105245           InlineLexer.escapes = function escapes (text) {
105246             return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
105247           };
105248
105249           /**
105250            * Compile Link
105251            */
105252           InlineLexer.prototype.outputLink = function outputLink (cap, link) {
105253             var href = link.href,
105254               title = link.title ? escape$4(link.title) : null;
105255
105256             return cap[0].charAt(0) !== '!'
105257               ? this.renderer.link(href, title, this.output(cap[1]))
105258               : this.renderer.image(href, title, escape$4(cap[1]));
105259           };
105260
105261           /**
105262            * Smartypants Transformations
105263            */
105264           InlineLexer.prototype.smartypants = function smartypants (text) {
105265             if (!this.options.smartypants) { return text; }
105266             return text
105267               // em-dashes
105268               .replace(/---/g, '\u2014')
105269               // en-dashes
105270               .replace(/--/g, '\u2013')
105271               // opening singles
105272               .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
105273               // closing singles & apostrophes
105274               .replace(/'/g, '\u2019')
105275               // opening doubles
105276               .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
105277               // closing doubles
105278               .replace(/"/g, '\u201d')
105279               // ellipses
105280               .replace(/\.{3}/g, '\u2026');
105281           };
105282
105283           /**
105284            * Mangle Links
105285            */
105286           InlineLexer.prototype.mangle = function mangle (text) {
105287             if (!this.options.mangle) { return text; }
105288             var l = text.length;
105289             var out = '',
105290               i = 0,
105291               ch;
105292
105293             for (; i < l; i++) {
105294               ch = text.charCodeAt(i);
105295               if (Math.random() > 0.5) {
105296                 ch = 'x' + ch.toString(16);
105297               }
105298               out += '&#' + ch + ';';
105299             }
105300
105301             return out;
105302           };
105303
105304           Object.defineProperties( InlineLexer, staticAccessors );
105305
105306           return InlineLexer;
105307         }());
105308
105309         /**
105310          * TextRenderer
105311          * returns only the textual part of the token
105312          */
105313         var TextRenderer_1 = /*@__PURE__*/(function () {
105314           function TextRenderer () {}
105315
105316           TextRenderer.prototype.strong = function strong (text) {
105317             return text;
105318           };
105319
105320           TextRenderer.prototype.em = function em (text) {
105321             return text;
105322           };
105323
105324           TextRenderer.prototype.codespan = function codespan (text) {
105325             return text;
105326           };
105327
105328           TextRenderer.prototype.del = function del (text) {
105329             return text;
105330           };
105331
105332           TextRenderer.prototype.text = function text (text$1) {
105333             return text$1;
105334           };
105335
105336           TextRenderer.prototype.link = function link (href, title, text) {
105337             return '' + text;
105338           };
105339
105340           TextRenderer.prototype.image = function image (href, title, text) {
105341             return '' + text;
105342           };
105343
105344           TextRenderer.prototype.br = function br () {
105345             return '';
105346           };
105347
105348           return TextRenderer;
105349         }());
105350
105351         var defaults$5 = defaults$1.defaults;
105352         var merge$3 = helpers$1.merge;
105353         var unescape$2 = helpers$1.unescape;
105354
105355         /**
105356          * Parsing & Compiling
105357          */
105358         var Parser_1 = /*@__PURE__*/(function () {
105359           function Parser(options) {
105360             this.tokens = [];
105361             this.token = null;
105362             this.options = options || defaults$5;
105363             this.options.renderer = this.options.renderer || new Renderer_1();
105364             this.renderer = this.options.renderer;
105365             this.renderer.options = this.options;
105366             this.slugger = new Slugger_1();
105367           }
105368
105369           /**
105370            * Static Parse Method
105371            */
105372           Parser.parse = function parse (tokens, options) {
105373             var parser = new Parser(options);
105374             return parser.parse(tokens);
105375           };
105376           /**
105377            * Parse Loop
105378            */
105379           Parser.prototype.parse = function parse (tokens) {
105380             this.inline = new InlineLexer_1(tokens.links, this.options);
105381             // use an InlineLexer with a TextRenderer to extract pure text
105382             this.inlineText = new InlineLexer_1(
105383               tokens.links,
105384               merge$3({}, this.options, { renderer: new TextRenderer_1() })
105385             );
105386             this.tokens = tokens.reverse();
105387
105388             var out = '';
105389             while (this.next()) {
105390               out += this.tok();
105391             }
105392
105393             return out;
105394           };
105395           /**
105396            * Next Token
105397            */
105398           Parser.prototype.next = function next () {
105399             this.token = this.tokens.pop();
105400             return this.token;
105401           };
105402           /**
105403            * Preview Next Token
105404            */
105405           Parser.prototype.peek = function peek () {
105406             return this.tokens[this.tokens.length - 1] || 0;
105407           };
105408           /**
105409            * Parse Text Tokens
105410            */
105411           Parser.prototype.parseText = function parseText () {
105412             var body = this.token.text;
105413
105414             while (this.peek().type === 'text') {
105415               body += '\n' + this.next().text;
105416             }
105417
105418             return this.inline.output(body);
105419           };
105420           /**
105421            * Parse Current Token
105422            */
105423           Parser.prototype.tok = function tok () {
105424             var body = '';
105425             switch (this.token.type) {
105426               case 'space': {
105427                 return '';
105428               }
105429               case 'hr': {
105430                 return this.renderer.hr();
105431               }
105432               case 'heading': {
105433                 return this.renderer.heading(
105434                   this.inline.output(this.token.text),
105435                   this.token.depth,
105436                   unescape$2(this.inlineText.output(this.token.text)),
105437                   this.slugger);
105438               }
105439               case 'code': {
105440                 return this.renderer.code(this.token.text,
105441                   this.token.lang,
105442                   this.token.escaped);
105443               }
105444               case 'table': {
105445                 var header = '',
105446                   i,
105447                   row,
105448                   cell,
105449                   j;
105450
105451                 // header
105452                 cell = '';
105453                 for (i = 0; i < this.token.header.length; i++) {
105454                   cell += this.renderer.tablecell(
105455                     this.inline.output(this.token.header[i]),
105456                     { header: true, align: this.token.align[i] }
105457                   );
105458                 }
105459                 header += this.renderer.tablerow(cell);
105460
105461                 for (i = 0; i < this.token.cells.length; i++) {
105462                   row = this.token.cells[i];
105463
105464                   cell = '';
105465                   for (j = 0; j < row.length; j++) {
105466                     cell += this.renderer.tablecell(
105467                       this.inline.output(row[j]),
105468                       { header: false, align: this.token.align[j] }
105469                     );
105470                   }
105471
105472                   body += this.renderer.tablerow(cell);
105473                 }
105474                 return this.renderer.table(header, body);
105475               }
105476               case 'blockquote_start': {
105477                 body = '';
105478
105479                 while (this.next().type !== 'blockquote_end') {
105480                   body += this.tok();
105481                 }
105482
105483                 return this.renderer.blockquote(body);
105484               }
105485               case 'list_start': {
105486                 body = '';
105487                 var ordered = this.token.ordered,
105488                   start = this.token.start;
105489
105490                 while (this.next().type !== 'list_end') {
105491                   body += this.tok();
105492                 }
105493
105494                 return this.renderer.list(body, ordered, start);
105495               }
105496               case 'list_item_start': {
105497                 body = '';
105498                 var loose = this.token.loose;
105499                 var checked = this.token.checked;
105500                 var task = this.token.task;
105501
105502                 if (this.token.task) {
105503                   if (loose) {
105504                     if (this.peek().type === 'text') {
105505                       var nextToken = this.peek();
105506                       nextToken.text = this.renderer.checkbox(checked) + ' ' + nextToken.text;
105507                     } else {
105508                       this.tokens.push({
105509                         type: 'text',
105510                         text: this.renderer.checkbox(checked)
105511                       });
105512                     }
105513                   } else {
105514                     body += this.renderer.checkbox(checked);
105515                   }
105516                 }
105517
105518                 while (this.next().type !== 'list_item_end') {
105519                   body += !loose && this.token.type === 'text'
105520                     ? this.parseText()
105521                     : this.tok();
105522                 }
105523                 return this.renderer.listitem(body, task, checked);
105524               }
105525               case 'html': {
105526                 // TODO parse inline content if parameter markdown=1
105527                 return this.renderer.html(this.token.text);
105528               }
105529               case 'paragraph': {
105530                 return this.renderer.paragraph(this.inline.output(this.token.text));
105531               }
105532               case 'text': {
105533                 return this.renderer.paragraph(this.parseText());
105534               }
105535               default: {
105536                 var errMsg = 'Token with "' + this.token.type + '" type was not found.';
105537                 if (this.options.silent) {
105538                   console.log(errMsg);
105539                 } else {
105540                   throw new Error(errMsg);
105541                 }
105542               }
105543             }
105544           };
105545
105546           return Parser;
105547         }());
105548
105549         var merge$4 = helpers$1.merge;
105550         var checkSanitizeDeprecation$1 = helpers$1.checkSanitizeDeprecation;
105551         var escape$5 = helpers$1.escape;
105552         var getDefaults = defaults$1.getDefaults;
105553         var changeDefaults = defaults$1.changeDefaults;
105554         var defaults$6 = defaults$1.defaults;
105555
105556         /**
105557          * Marked
105558          */
105559         function marked(src, opt, callback) {
105560           // throw error in case of non string input
105561           if (typeof src === 'undefined' || src === null) {
105562             throw new Error('marked(): input parameter is undefined or null');
105563           }
105564           if (typeof src !== 'string') {
105565             throw new Error('marked(): input parameter is of type '
105566               + Object.prototype.toString.call(src) + ', string expected');
105567           }
105568
105569           if (callback || typeof opt === 'function') {
105570             if (!callback) {
105571               callback = opt;
105572               opt = null;
105573             }
105574
105575             opt = merge$4({}, marked.defaults, opt || {});
105576             checkSanitizeDeprecation$1(opt);
105577             var highlight = opt.highlight;
105578             var tokens,
105579               pending,
105580               i = 0;
105581
105582             try {
105583               tokens = Lexer_1.lex(src, opt);
105584             } catch (e) {
105585               return callback(e);
105586             }
105587
105588             pending = tokens.length;
105589
105590             var done = function(err) {
105591               if (err) {
105592                 opt.highlight = highlight;
105593                 return callback(err);
105594               }
105595
105596               var out;
105597
105598               try {
105599                 out = Parser_1.parse(tokens, opt);
105600               } catch (e) {
105601                 err = e;
105602               }
105603
105604               opt.highlight = highlight;
105605
105606               return err
105607                 ? callback(err)
105608                 : callback(null, out);
105609             };
105610
105611             if (!highlight || highlight.length < 3) {
105612               return done();
105613             }
105614
105615             delete opt.highlight;
105616
105617             if (!pending) { return done(); }
105618
105619             for (; i < tokens.length; i++) {
105620               (function(token) {
105621                 if (token.type !== 'code') {
105622                   return --pending || done();
105623                 }
105624                 return highlight(token.text, token.lang, function(err, code) {
105625                   if (err) { return done(err); }
105626                   if (code == null || code === token.text) {
105627                     return --pending || done();
105628                   }
105629                   token.text = code;
105630                   token.escaped = true;
105631                   --pending || done();
105632                 });
105633               })(tokens[i]);
105634             }
105635
105636             return;
105637           }
105638           try {
105639             opt = merge$4({}, marked.defaults, opt || {});
105640             checkSanitizeDeprecation$1(opt);
105641             return Parser_1.parse(Lexer_1.lex(src, opt), opt);
105642           } catch (e) {
105643             e.message += '\nPlease report this to https://github.com/markedjs/marked.';
105644             if ((opt || marked.defaults).silent) {
105645               return '<p>An error occurred:</p><pre>'
105646                 + escape$5(e.message + '', true)
105647                 + '</pre>';
105648             }
105649             throw e;
105650           }
105651         }
105652
105653         /**
105654          * Options
105655          */
105656
105657         marked.options =
105658         marked.setOptions = function(opt) {
105659           merge$4(marked.defaults, opt);
105660           changeDefaults(marked.defaults);
105661           return marked;
105662         };
105663
105664         marked.getDefaults = getDefaults;
105665
105666         marked.defaults = defaults$6;
105667
105668         /**
105669          * Expose
105670          */
105671
105672         marked.Parser = Parser_1;
105673         marked.parser = Parser_1.parse;
105674
105675         marked.Renderer = Renderer_1;
105676         marked.TextRenderer = TextRenderer_1;
105677
105678         marked.Lexer = Lexer_1;
105679         marked.lexer = Lexer_1.lex;
105680
105681         marked.InlineLexer = InlineLexer_1;
105682         marked.inlineLexer = InlineLexer_1.output;
105683
105684         marked.Slugger = Slugger_1;
105685
105686         marked.parse = marked;
105687
105688         var marked_1 = marked;
105689
105690         function pointBox(loc, context) {
105691             var rect = context.surfaceRect();
105692             var point = context.curtainProjection(loc);
105693             return {
105694                 left: point[0] + rect.left - 40,
105695                 top: point[1] + rect.top - 60,
105696                 width: 80,
105697                 height: 90
105698             };
105699         }
105700
105701
105702         function pad$2(locOrBox, padding, context) {
105703             var box;
105704             if (locOrBox instanceof Array) {
105705                 var rect = context.surfaceRect();
105706                 var point = context.curtainProjection(locOrBox);
105707                 box = {
105708                     left: point[0] + rect.left,
105709                     top: point[1] + rect.top
105710                 };
105711             } else {
105712                 box = locOrBox;
105713             }
105714
105715             return {
105716                 left: box.left - padding,
105717                 top: box.top - padding,
105718                 width: (box.width || 0) + 2 * padding,
105719                 height: (box.width || 0) + 2 * padding
105720             };
105721         }
105722
105723
105724         function icon(name, svgklass, useklass) {
105725             return '<svg class="icon ' + (svgklass || '') + '">' +
105726                  '<use xlink:href="' + name + '"' +
105727                  (useklass ? ' class="' + useklass + '"' : '') + '></use></svg>';
105728         }
105729
105730
105731         function slugify(text) {
105732             return text.toString().toLowerCase()
105733                 .replace(/\s+/g, '-')           // Replace spaces with -
105734                 .replace(/[^\w\-]+/g, '')       // Remove all non-word chars
105735                 .replace(/\-\-+/g, '-')         // Replace multiple - with single -
105736                 .replace(/^-+/, '')             // Trim - from start of text
105737                 .replace(/-+$/, '');            // Trim - from end of text
105738         }
105739
105740
105741         // console warning for missing walkthrough names
105742         var missingStrings = {};
105743         function checkKey(key, text) {
105744             if (t(key, { default: undefined}) === undefined) {
105745                 if (missingStrings.hasOwnProperty(key)) { return; }  // warn once
105746                 missingStrings[key] = text;
105747                 var missing = key + ': ' + text;
105748                 if (typeof console !== 'undefined') { console.log(missing); } // eslint-disable-line
105749             }
105750         }
105751
105752
105753         function localize(obj) {
105754             var key;
105755
105756             // Assign name if entity has one..
105757             var name = obj.tags && obj.tags.name;
105758             if (name) {
105759                 key = 'intro.graph.name.' + slugify(name);
105760                 obj.tags.name = t(key, { default: name });
105761                 checkKey(key, name);
105762             }
105763
105764             // Assign street name if entity has one..
105765             var street = obj.tags && obj.tags['addr:street'];
105766             if (street) {
105767                 key = 'intro.graph.name.' + slugify(street);
105768                 obj.tags['addr:street'] = t(key, { default: street });
105769                 checkKey(key, street);
105770
105771                 // Add address details common across walkthrough..
105772                 var addrTags = [
105773                     'block_number', 'city', 'county', 'district', 'hamlet', 'neighbourhood',
105774                     'postcode', 'province', 'quarter', 'state', 'subdistrict', 'suburb'
105775                 ];
105776                 addrTags.forEach(function(k) {
105777                     var key = 'intro.graph.' + k;
105778                     var tag = 'addr:' + k;
105779                     var val = obj.tags && obj.tags[tag];
105780                     var str = t(key, { default: val });
105781
105782                     if (str) {
105783                         if (str.match(/^<.*>$/) !== null) {
105784                             delete obj.tags[tag];
105785                         } else {
105786                             obj.tags[tag] = str;
105787                         }
105788                     }
105789                 });
105790             }
105791
105792             return obj;
105793         }
105794
105795
105796         // Used to detect squareness.. some duplicataion of code from actionOrthogonalize.
105797         function isMostlySquare(points) {
105798             // note: uses 15 here instead of the 12 from actionOrthogonalize because
105799             // actionOrthogonalize can actually straighten some larger angles as it iterates
105800             var threshold = 15; // degrees within right or straight
105801             var lowerBound = Math.cos((90 - threshold) * Math.PI / 180);  // near right
105802             var upperBound = Math.cos(threshold * Math.PI / 180);         // near straight
105803
105804             for (var i = 0; i < points.length; i++) {
105805                 var a = points[(i - 1 + points.length) % points.length];
105806                 var origin = points[i];
105807                 var b = points[(i + 1) % points.length];
105808
105809                 var dotp = geoVecNormalizedDot(a, b, origin);
105810                 var mag = Math.abs(dotp);
105811                 if (mag > lowerBound && mag < upperBound) {
105812                     return false;
105813                 }
105814             }
105815
105816             return true;
105817         }
105818
105819
105820         function selectMenuItem(operation) {
105821             var selector = '.edit-menu .edit-menu-item-' + operation +
105822                 ', .radial-menu .radial-menu-item-' + operation;
105823             return d3_select(selector);
105824         }
105825
105826
105827         function transitionTime(point1, point2) {
105828             var distance = geoSphericalDistance(point1, point2);
105829             if (distance === 0)
105830                 { return 0; }
105831             else if (distance < 80)
105832                 { return 500; }
105833             else
105834                 { return 1000; }
105835         }
105836
105837         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",brand:"Sherwin Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams"}},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",brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",shop:"variety_store"}},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.634513,41.946181]},n102:{id:"n102",loc:[-85.637357,41.942216]},n1020:{id:"n1020",loc:[-85.634079,41.946194]},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.634766,41.946178]},n1028:{id:"n1028",loc:[-85.634622,41.946179],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","seamark:type":"light_major"}},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.635775,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",crossing:"unmarked"}},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.635806,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.942648]},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.634982,41.946262],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.635805,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.635798,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.634841,41.945778]},n2525:{id:"n2525",loc:[-85.635315,41.945939]},n2526:{id:"n2526",loc:[-85.634841,41.945921]},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.635818,41.942677],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.635777,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.635818,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.635774,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.635783,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.635785,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.63489,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",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en: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",natural:"water",water:"river"}},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","n3355","n1020"],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:{name:"Hoffman Pond",natural:"water",water:"reservoir"}},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",highway:"footway"}},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]},w599:{tags:{footway:"sidewalk",highway:"footway"},id:"w599",nodes:["n1021","n1022","n731","n728","n1023","n1025","n1024","n1019"]},w618:{tags:{footway:"sidewalk",highway:"footway"},id:"w618",nodes:["n1020","n1021"]},n3355:{id:"n3355",loc:[-85.634489,41.946193]}};
105838
105839         // Tooltips and svg mask used to highlight certain features
105840         function uiCurtain() {
105841
105842             var surface = d3_select(null),
105843                 tooltip = d3_select(null),
105844                 darkness = d3_select(null);
105845
105846             function curtain(selection) {
105847                 surface = selection
105848                     .append('svg')
105849                     .attr('id', 'curtain')
105850                     .style('z-index', 1000)
105851                     .style('pointer-events', 'none')
105852                     .style('position', 'absolute')
105853                     .style('top', 0)
105854                     .style('left', 0);
105855
105856                 darkness = surface.append('path')
105857                     .attr('x', 0)
105858                     .attr('y', 0)
105859                     .attr('class', 'curtain-darkness');
105860
105861                 d3_select(window).on('resize.curtain', resize);
105862
105863                 tooltip = selection.append('div')
105864                     .attr('class', 'tooltip')
105865                     .style('z-index', 1002);
105866
105867                 tooltip
105868                     .append('div')
105869                     .attr('class', 'popover-arrow');
105870
105871                 tooltip
105872                     .append('div')
105873                     .attr('class', 'popover-inner');
105874
105875                 resize();
105876
105877
105878                 function resize() {
105879                     surface
105880                         .attr('width', window.innerWidth)
105881                         .attr('height', window.innerHeight);
105882                     curtain.cut(darkness.datum());
105883                 }
105884             }
105885
105886
105887             /**
105888              * Reveal cuts the curtain to highlight the given box,
105889              * and shows a tooltip with instructions next to the box.
105890              *
105891              * @param  {String|ClientRect} [box]   box used to cut the curtain
105892              * @param  {String}    [text]          text for a tooltip
105893              * @param  {Object}    [options]
105894              * @param  {string}    [options.tooltipClass]    optional class to add to the tooltip
105895              * @param  {integer}   [options.duration]        transition time in milliseconds
105896              * @param  {string}    [options.buttonText]      if set, create a button with this text label
105897              * @param  {function}  [options.buttonCallback]  if set, the callback for the button
105898              * @param  {String|ClientRect} [options.tooltipBox]  box for tooltip position, if different from box for the curtain
105899              */
105900             curtain.reveal = function(box, text, options) {
105901                 if (typeof box === 'string') {
105902                     box = d3_select(box).node();
105903                 }
105904                 if (box && box.getBoundingClientRect) {
105905                     box = copyBox(box.getBoundingClientRect());
105906                 }
105907
105908                 options = options || {};
105909
105910                 var tooltipBox;
105911                 if (options.tooltipBox) {
105912                     tooltipBox = options.tooltipBox;
105913                     if (typeof tooltipBox === 'string') {
105914                         tooltipBox = d3_select(tooltipBox).node();
105915                     }
105916                     if (tooltipBox && tooltipBox.getBoundingClientRect) {
105917                         tooltipBox = copyBox(tooltipBox.getBoundingClientRect());
105918                     }
105919                 } else {
105920                     tooltipBox = box;
105921                 }
105922
105923                 if (tooltipBox && text) {
105924                     // pseudo markdown bold text for the instruction section..
105925                     var parts = text.split('**');
105926                     var html = parts[0] ? '<span>' + parts[0] + '</span>' : '';
105927                     if (parts[1]) {
105928                         html += '<span class="instruction">' + parts[1] + '</span>';
105929                     }
105930
105931                     html = html.replace(/\*(.*?)\*/g, '<em>$1</em>');   // emphasis
105932                     html = html.replace(/\{br\}/g, '<br/><br/>');       // linebreak
105933
105934                     if (options.buttonText && options.buttonCallback) {
105935                         html += '<div class="button-section">' +
105936                             '<button href="#" class="button action">' + options.buttonText + '</button></div>';
105937                     }
105938
105939                     var classes = 'curtain-tooltip popover tooltip arrowed in ' + (options.tooltipClass || '');
105940                     tooltip
105941                         .classed(classes, true)
105942                         .selectAll('.popover-inner')
105943                         .html(html);
105944
105945                     if (options.buttonText && options.buttonCallback) {
105946                         var button = tooltip.selectAll('.button-section .button.action');
105947                         button
105948                             .on('click', function() {
105949                                 event.preventDefault();
105950                                 options.buttonCallback();
105951                             });
105952                     }
105953
105954                     var tip = copyBox(tooltip.node().getBoundingClientRect()),
105955                         w = window.innerWidth,
105956                         h = window.innerHeight,
105957                         tooltipWidth = 200,
105958                         tooltipArrow = 5,
105959                         side, pos;
105960
105961
105962                     // hack: this will have bottom placement,
105963                     // so need to reserve extra space for the tooltip illustration.
105964                     if (options.tooltipClass === 'intro-mouse') {
105965                         tip.height += 80;
105966                     }
105967
105968                     // trim box dimensions to just the portion that fits in the window..
105969                     if (tooltipBox.top + tooltipBox.height > h) {
105970                         tooltipBox.height -= (tooltipBox.top + tooltipBox.height - h);
105971                     }
105972                     if (tooltipBox.left + tooltipBox.width > w) {
105973                         tooltipBox.width -= (tooltipBox.left + tooltipBox.width - w);
105974                     }
105975
105976                     // determine tooltip placement..
105977
105978                     if (tooltipBox.top + tooltipBox.height < 100) {
105979                         // tooltip below box..
105980                         side = 'bottom';
105981                         pos = [
105982                             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
105983                             tooltipBox.top + tooltipBox.height
105984                         ];
105985
105986                     } else if (tooltipBox.top > h - 140) {
105987                         // tooltip above box..
105988                         side = 'top';
105989                         pos = [
105990                             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
105991                             tooltipBox.top - tip.height
105992                         ];
105993
105994                     } else {
105995                         // tooltip to the side of the tooltipBox..
105996                         var tipY = tooltipBox.top + tooltipBox.height / 2 - tip.height / 2;
105997
105998                         if (textDirection === 'rtl') {
105999                             if (tooltipBox.left - tooltipWidth - tooltipArrow < 70) {
106000                                 side = 'right';
106001                                 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
106002
106003                             } else {
106004                                 side = 'left';
106005                                 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
106006                             }
106007
106008                         } else {
106009                             if (tooltipBox.left + tooltipBox.width + tooltipArrow + tooltipWidth > w - 70) {
106010                                 side = 'left';
106011                                 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
106012                             }
106013                             else {
106014                                 side = 'right';
106015                                 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
106016                             }
106017                         }
106018                     }
106019
106020                     if (options.duration !== 0 || !tooltip.classed(side)) {
106021                         tooltip.call(uiToggle(true));
106022                     }
106023
106024                     tooltip
106025                         .style('top', pos[1] + 'px')
106026                         .style('left', pos[0] + 'px')
106027                         .attr('class', classes + ' ' + side);
106028
106029
106030                     // shift popover-inner if it is very close to the top or bottom edge
106031                     // (doesn't affect the placement of the popover-arrow)
106032                     var shiftY = 0;
106033                     if (side === 'left' || side === 'right') {
106034                         if (pos[1] < 60) {
106035                             shiftY = 60 - pos[1];
106036                         }
106037                         else if (pos[1] + tip.height > h - 100) {
106038                             shiftY = h - pos[1] - tip.height - 100;
106039                         }
106040                     }
106041                     tooltip.selectAll('.popover-inner')
106042                         .style('top', shiftY + 'px');
106043
106044                 } else {
106045                     tooltip
106046                         .classed('in', false)
106047                         .call(uiToggle(false));
106048                 }
106049
106050                 curtain.cut(box, options.duration);
106051
106052                 return tooltip;
106053             };
106054
106055
106056             curtain.cut = function(datum, duration) {
106057                 darkness.datum(datum)
106058                     .interrupt();
106059
106060                 var selection;
106061                 if (duration === 0) {
106062                     selection = darkness;
106063                 } else {
106064                     selection = darkness
106065                         .transition()
106066                         .duration(duration || 600)
106067                         .ease(linear$1);
106068                 }
106069
106070                 selection
106071                     .attr('d', function(d) {
106072                         var string = 'M 0,0 L 0,' + window.innerHeight + ' L ' +
106073                             window.innerWidth + ',' + window.innerHeight + 'L' +
106074                             window.innerWidth + ',0 Z';
106075
106076                         if (!d) { return string; }
106077                         return string + 'M' +
106078                             d.left + ',' + d.top + 'L' +
106079                             d.left + ',' + (d.top + d.height) + 'L' +
106080                             (d.left + d.width) + ',' + (d.top + d.height) + 'L' +
106081                             (d.left + d.width) + ',' + (d.top) + 'Z';
106082
106083                     });
106084             };
106085
106086
106087             curtain.remove = function() {
106088                 surface.remove();
106089                 tooltip.remove();
106090                 d3_select(window).on('resize.curtain', null);
106091             };
106092
106093
106094             // ClientRects are immutable, so copy them to an object,
106095             // in case we need to trim the height/width.
106096             function copyBox(src) {
106097                 return {
106098                     top: src.top,
106099                     right: src.right,
106100                     bottom: src.bottom,
106101                     left: src.left,
106102                     width: src.width,
106103                     height: src.height
106104                 };
106105             }
106106
106107
106108             return curtain;
106109         }
106110
106111         function uiIntroWelcome(context, reveal) {
106112             var dispatch$1 = dispatch('done');
106113             var listener = clickListener();
106114
106115             var chapter = {
106116                 title: 'intro.welcome.title'
106117             };
106118
106119
106120             function welcome() {
106121                 context.map().centerZoom([-85.63591, 41.94285], 19);
106122                 reveal('.intro-nav-wrap .chapter-welcome',
106123                     t('intro.welcome.welcome'),
106124                     { buttonText: t('intro.ok'), buttonCallback: practice }
106125                 );
106126             }
106127
106128             function practice() {
106129                 reveal('.intro-nav-wrap .chapter-welcome',
106130                     t('intro.welcome.practice'),
106131                     { buttonText: t('intro.ok'), buttonCallback: words }
106132                 );
106133             }
106134
106135             function words() {
106136                 reveal('.intro-nav-wrap .chapter-welcome',
106137                     t('intro.welcome.words'),
106138                     { buttonText: t('intro.ok'), buttonCallback: mouse }
106139                 );
106140             }
106141
106142
106143             function mouse() {
106144                 reveal('.intro-nav-wrap .chapter-welcome',
106145                     t('intro.welcome.mouse'),
106146                     { buttonText: t('intro.ok'), buttonCallback: leftClick }
106147                 );
106148             }
106149
106150
106151             function leftClick() {
106152                 var counter = 0;
106153                 var times = 5;
106154
106155                 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
106156                     t('intro.welcome.leftclick', { num: times }),
106157                     { tooltipClass: 'intro-mouse' }
106158                 );
106159
106160                 tooltip.selectAll('.popover-inner')
106161                     .insert('svg', 'span')
106162                     .attr('class', 'tooltip-illustration')
106163                     .append('use')
106164                     .attr('xlink:href', '#iD-walkthrough-mouse');
106165
106166                 tooltip
106167                     .append('div')
106168                     .attr('class', 'counter');
106169
106170                 tooltip.call(listener);
106171
106172                 listener.on('click', function(which) {
106173                     if (which === 'left') {
106174                         d3_select('.curtain-tooltip.intro-mouse .counter')
106175                             .text(String(++counter));
106176
106177                         if (counter === times) {
106178                             window.setTimeout(function() { continueTo(rightClick); }, 1000);
106179                         }
106180                     }
106181                 });
106182
106183                 function continueTo(nextStep) {
106184                     listener.on('click', null);
106185                     tooltip.call(listener.off);
106186                     tooltip.select('.counter').remove();
106187                     nextStep();
106188                 }
106189             }
106190
106191
106192             function rightClick() {
106193                 var counter = 0;
106194                 var times = 5;
106195
106196                 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
106197                     t('intro.welcome.rightclick', { num: times }),
106198                     { tooltipClass: 'intro-mouse' }
106199                 );
106200
106201                 tooltip.selectAll('.popover-inner')
106202                     .insert('svg', 'span')
106203                     .attr('class', 'tooltip-illustration')
106204                     .append('use')
106205                     .attr('xlink:href', '#iD-walkthrough-mouse');
106206
106207                 tooltip
106208                     .append('div')
106209                     .attr('class', 'counter');
106210
106211                 tooltip.call(listener);
106212
106213                 listener.on('click', function(which) {
106214                     if (which === 'right') {
106215                         d3_select('.curtain-tooltip.intro-mouse .counter')
106216                             .text(String(++counter));
106217
106218                         if (counter === times) {
106219                             window.setTimeout(function() { continueTo(chapters); }, 1000);
106220                         }
106221                     }
106222                 });
106223
106224                 function continueTo(nextStep) {
106225                     listener.on('click', null);
106226                     tooltip.call(listener.off);
106227                     tooltip.select('.counter').remove();
106228                     nextStep();
106229                 }
106230             }
106231
106232
106233             function chapters() {
106234                 dispatch$1.call('done');
106235                 reveal('.intro-nav-wrap .chapter-navigation',
106236                     t('intro.welcome.chapters', { next: t('intro.navigation.title') })
106237                 );
106238             }
106239
106240
106241             chapter.enter = function() {
106242                 welcome();
106243             };
106244
106245
106246             chapter.exit = function() {
106247                 listener.off();
106248                 d3_select('.curtain-tooltip.intro-mouse')
106249                     .selectAll('.counter')
106250                     .remove();
106251             };
106252
106253
106254             chapter.restart = function() {
106255                 chapter.exit();
106256                 chapter.enter();
106257             };
106258
106259
106260             return utilRebind(chapter, dispatch$1, 'on');
106261         }
106262
106263
106264
106265         function clickListener() {
106266             var dispatch$1 = dispatch('click');
106267             var minTime = 120;
106268             var tooltip = d3_select(null);
106269             var down = {};
106270
106271             // `down` keeps track of which buttons/keys are down.
106272             // Setting a property in `down` happens immediately.
106273             // Unsetting a property in `down` is delayed because
106274             //   on Windows a contextmenu event happens after keyup/mouseup
106275
106276             function keydown() {
106277                 if (event.keyCode === 93)  {   // context menu
106278                     event.preventDefault();
106279                     event.stopPropagation();
106280                     down.menu = event.timeStamp;
106281                     tooltip.classed('rightclick', true);
106282                 }
106283             }
106284
106285
106286             function keyup() {
106287                 if (event.keyCode === 93)  {   // context menu
106288                     event.preventDefault();
106289                     event.stopPropagation();
106290                     var endTime = event.timeStamp;
106291                     var startTime = down.menu || endTime;
106292                     var delay = (endTime - startTime < minTime) ? minTime : 0;
106293
106294                     window.setTimeout(function() {
106295                         tooltip.classed('rightclick', false);
106296                         down.menu = undefined;  // delayed, for Windows
106297                     }, delay);
106298
106299                     dispatch$1.call('click', this, 'right');
106300                 }
106301             }
106302
106303
106304             function mousedown() {
106305                 var button = event.button;
106306                 if (button === 0 && !event.ctrlKey) {
106307                     tooltip.classed('leftclick', true);
106308                 } else if (button === 2) {
106309                     tooltip.classed('rightclick', true);
106310                 }
106311                 down[button] = event.timeStamp;
106312             }
106313
106314
106315             function mouseup() {
106316                 var button = event.button;
106317                 var endTime = event.timeStamp;
106318                 var startTime = down[button] || endTime;
106319                 var delay = (endTime - startTime < minTime) ? minTime : 0;
106320
106321                 if (button === 0 && !event.ctrlKey) {
106322                     window.setTimeout(function() {
106323                         tooltip.classed('leftclick', false);
106324                         down[button] = undefined;  // delayed, for Windows
106325                     }, delay);
106326
106327                     dispatch$1.call('click', this, 'left');
106328
106329                 } else if (button === 2) {
106330                     window.setTimeout(function() {
106331                         tooltip.classed('rightclick', false);
106332                         down[button] = undefined;  // delayed, for Windows
106333                     }, delay);
106334
106335                     dispatch$1.call('click', this, 'right');
106336
106337                 } else {
106338                     window.setTimeout(function() {
106339                         down[button] = undefined;  // delayed, for Windows
106340                     }, delay);
106341                 }
106342             }
106343
106344
106345             function contextmenu() {
106346                 event.preventDefault();
106347                 event.stopPropagation();
106348                 if (!down[2] && !down.menu) {
106349                     tooltip.classed('rightclick', true);
106350                     window.setTimeout(function() {
106351                         tooltip.classed('rightclick', false);
106352                     }, minTime);
106353                     dispatch$1.call('click', this, 'right');
106354                 }
106355             }
106356
106357
106358             var behavior = function(selection) {
106359                 tooltip = selection;
106360                 down = {};
106361
106362                 d3_select(window)
106363                     .on('keydown.intro', keydown)
106364                     .on('keyup.intro', keyup)
106365                     .on('mousedown.intro', mousedown)
106366                     .on('mouseup.intro', mouseup)
106367                     .on('contextmenu.intro', contextmenu);
106368             };
106369
106370
106371             behavior.off = function() {
106372                 d3_select(window)
106373                     .on('keydown.intro', null)
106374                     .on('keyup.intro', null)
106375                     .on('mousedown.intro', null)
106376                     .on('mouseup.intro', null)
106377                     .on('contextmenu.intro', null);
106378
106379                 tooltip
106380                     .classed('leftclick', false)
106381                     .classed('rightclick', false);
106382             };
106383
106384             return utilRebind(behavior, dispatch$1, 'on');
106385         }
106386
106387         function uiIntroNavigation(context, reveal) {
106388             var dispatch$1 = dispatch('done');
106389             var timeouts = [];
106390             var hallId = 'n2061';
106391             var townHall = [-85.63591, 41.94285];
106392             var springStreetId = 'w397';
106393             var springStreetEndId = 'n1834';
106394             var springStreet = [-85.63582, 41.94255];
106395             var onewayField = context.presets().field('oneway');
106396             var maxspeedField = context.presets().field('maxspeed');
106397
106398
106399             var chapter = {
106400                 title: 'intro.navigation.title'
106401             };
106402
106403
106404             function timeout(f, t) {
106405                 timeouts.push(window.setTimeout(f, t));
106406             }
106407
106408
106409             function eventCancel() {
106410                 event.stopPropagation();
106411                 event.preventDefault();
106412             }
106413
106414
106415             function isTownHallSelected() {
106416                 var ids = context.selectedIDs();
106417                 return ids.length === 1 && ids[0] === hallId;
106418             }
106419
106420
106421             function dragMap() {
106422                 context.enter(modeBrowse(context));
106423                 context.history().reset('initial');
106424
106425                 var msec = transitionTime(townHall, context.map().center());
106426                 if (msec) { reveal(null, null, { duration: 0 }); }
106427                 context.map().centerZoomEase(townHall, 19, msec);
106428
106429                 timeout(function() {
106430                     var centerStart = context.map().center();
106431
106432                     reveal('#surface', t('intro.navigation.drag'));
106433                     context.map().on('drawn.intro', function() {
106434                         reveal('#surface', t('intro.navigation.drag'), { duration: 0 });
106435                     });
106436
106437                     context.map().on('move.intro', function() {
106438                         var centerNow = context.map().center();
106439                         if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) {
106440                             context.map().on('move.intro', null);
106441                             timeout(function() { continueTo(zoomMap); }, 3000);
106442                         }
106443                     });
106444
106445                 }, msec + 100);
106446
106447                 function continueTo(nextStep) {
106448                     context.map().on('move.intro drawn.intro', null);
106449                     nextStep();
106450                 }
106451             }
106452
106453
106454             function zoomMap() {
106455                 var zoomStart = context.map().zoom();
106456
106457                 reveal('#surface',
106458                     t('intro.navigation.zoom', {
106459                         plus: icon('#iD-icon-plus', 'pre-text'),
106460                         minus: icon('#iD-icon-minus', 'pre-text')
106461                     })
106462                 );
106463
106464                 context.map().on('drawn.intro', function() {
106465                     reveal('#surface',
106466                         t('intro.navigation.zoom', {
106467                             plus: icon('#iD-icon-plus', 'pre-text'),
106468                             minus: icon('#iD-icon-minus', 'pre-text')
106469                         }), { duration: 0 }
106470                     );
106471                 });
106472
106473                 context.map().on('move.intro', function() {
106474                     if (context.map().zoom() !== zoomStart) {
106475                         context.map().on('move.intro', null);
106476                         timeout(function() { continueTo(features); }, 3000);
106477                     }
106478                 });
106479
106480                 function continueTo(nextStep) {
106481                     context.map().on('move.intro drawn.intro', null);
106482                     nextStep();
106483                 }
106484             }
106485
106486
106487             function features() {
106488                 var onClick = function() { continueTo(pointsLinesAreas); };
106489
106490                 reveal('#surface', t('intro.navigation.features'),
106491                     { buttonText: t('intro.ok'), buttonCallback: onClick }
106492                 );
106493
106494                 context.map().on('drawn.intro', function() {
106495                     reveal('#surface', t('intro.navigation.features'),
106496                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
106497                     );
106498                 });
106499
106500                 function continueTo(nextStep) {
106501                     context.map().on('drawn.intro', null);
106502                     nextStep();
106503                 }
106504             }
106505
106506             function pointsLinesAreas() {
106507                 var onClick = function() { continueTo(nodesWays); };
106508
106509                 reveal('#surface', t('intro.navigation.points_lines_areas'),
106510                     { buttonText: t('intro.ok'), buttonCallback: onClick }
106511                 );
106512
106513                 context.map().on('drawn.intro', function() {
106514                     reveal('#surface', t('intro.navigation.points_lines_areas'),
106515                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
106516                     );
106517                 });
106518
106519                 function continueTo(nextStep) {
106520                     context.map().on('drawn.intro', null);
106521                     nextStep();
106522                 }
106523             }
106524
106525             function nodesWays() {
106526                 var onClick = function() { continueTo(clickTownHall); };
106527
106528                 reveal('#surface', t('intro.navigation.nodes_ways'),
106529                     { buttonText: t('intro.ok'), buttonCallback: onClick }
106530                 );
106531
106532                 context.map().on('drawn.intro', function() {
106533                     reveal('#surface', t('intro.navigation.nodes_ways'),
106534                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
106535                     );
106536                 });
106537
106538                 function continueTo(nextStep) {
106539                     context.map().on('drawn.intro', null);
106540                     nextStep();
106541                 }
106542             }
106543
106544             function clickTownHall() {
106545                 context.enter(modeBrowse(context));
106546                 context.history().reset('initial');
106547
106548                 var entity = context.hasEntity(hallId);
106549                 if (!entity) { return; }
106550                 reveal(null, null, { duration: 0 });
106551                 context.map().centerZoomEase(entity.loc, 19, 500);
106552
106553                 timeout(function() {
106554                     var entity = context.hasEntity(hallId);
106555                     if (!entity) { return; }
106556                     var box = pointBox(entity.loc, context);
106557                     reveal(box, t('intro.navigation.click_townhall'));
106558
106559                     context.map().on('move.intro drawn.intro', function() {
106560                         var entity = context.hasEntity(hallId);
106561                         if (!entity) { return; }
106562                         var box = pointBox(entity.loc, context);
106563                         reveal(box, t('intro.navigation.click_townhall'), { duration: 0 });
106564                     });
106565
106566                     context.on('enter.intro', function() {
106567                         if (isTownHallSelected()) { continueTo(selectedTownHall); }
106568                     });
106569
106570                 }, 550);  // after centerZoomEase
106571
106572                 context.history().on('change.intro', function() {
106573                     if (!context.hasEntity(hallId)) {
106574                         continueTo(clickTownHall);
106575                     }
106576                 });
106577
106578                 function continueTo(nextStep) {
106579                     context.on('enter.intro', null);
106580                     context.map().on('move.intro drawn.intro', null);
106581                     context.history().on('change.intro', null);
106582                     nextStep();
106583                 }
106584             }
106585
106586
106587             function selectedTownHall() {
106588                 if (!isTownHallSelected()) { return clickTownHall(); }
106589
106590                 var entity = context.hasEntity(hallId);
106591                 if (!entity) { return clickTownHall(); }
106592
106593                 var box = pointBox(entity.loc, context);
106594                 var onClick = function() { continueTo(editorTownHall); };
106595
106596                 reveal(box, t('intro.navigation.selected_townhall'),
106597                     { buttonText: t('intro.ok'), buttonCallback: onClick }
106598                 );
106599
106600                 context.map().on('move.intro drawn.intro', function() {
106601                     var entity = context.hasEntity(hallId);
106602                     if (!entity) { return; }
106603                     var box = pointBox(entity.loc, context);
106604                     reveal(box, t('intro.navigation.selected_townhall'),
106605                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
106606                     );
106607                 });
106608
106609                 context.history().on('change.intro', function() {
106610                     if (!context.hasEntity(hallId)) {
106611                         continueTo(clickTownHall);
106612                     }
106613                 });
106614
106615                 function continueTo(nextStep) {
106616                     context.map().on('move.intro drawn.intro', null);
106617                     context.history().on('change.intro', null);
106618                     nextStep();
106619                 }
106620             }
106621
106622
106623             function editorTownHall() {
106624                 if (!isTownHallSelected()) { return clickTownHall(); }
106625
106626                 // disallow scrolling
106627                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
106628
106629                 var onClick = function() { continueTo(presetTownHall); };
106630
106631                 reveal('.entity-editor-pane',
106632                     t('intro.navigation.editor_townhall'),
106633                     { buttonText: t('intro.ok'), buttonCallback: onClick }
106634                 );
106635
106636                 context.on('exit.intro', function() {
106637                     continueTo(clickTownHall);
106638                 });
106639
106640                 context.history().on('change.intro', function() {
106641                     if (!context.hasEntity(hallId)) {
106642                         continueTo(clickTownHall);
106643                     }
106644                 });
106645
106646                 function continueTo(nextStep) {
106647                     context.on('exit.intro', null);
106648                     context.history().on('change.intro', null);
106649                     d3_select('.inspector-wrap').on('wheel.intro', null);
106650                     nextStep();
106651                 }
106652             }
106653
106654
106655             function presetTownHall() {
106656                 if (!isTownHallSelected()) { return clickTownHall(); }
106657
106658                 // reset pane, in case user happened to change it..
106659                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
106660                 // disallow scrolling
106661                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
106662
106663                 // preset match, in case the user happened to change it.
106664                 var entity = context.entity(context.selectedIDs()[0]);
106665                 var preset = context.presets().match(entity, context.graph());
106666
106667                 var onClick = function() { continueTo(fieldsTownHall); };
106668
106669                 context.on('exit.intro', function() {
106670                     continueTo(clickTownHall);
106671                 });
106672
106673                 context.history().on('change.intro', function() {
106674                     if (!context.hasEntity(hallId)) {
106675                         continueTo(clickTownHall);
106676                     }
106677                 });
106678
106679                 reveal('.inspector-body .preset-list-item.inspector-inner',
106680                     t('intro.navigation.preset_townhall', { preset: preset.name() }),
106681                     { buttonText: t('intro.ok'), buttonCallback: onClick }
106682                 );
106683
106684                 function continueTo(nextStep) {
106685                     context.on('exit.intro', null);
106686                     context.history().on('change.intro', null);
106687                     d3_select('.inspector-wrap').on('wheel.intro', null);
106688                     nextStep();
106689                 }
106690             }
106691
106692
106693             function fieldsTownHall() {
106694                 if (!isTownHallSelected()) { return clickTownHall(); }
106695
106696                 // reset pane, in case user happened to change it..
106697                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
106698                 // disallow scrolling
106699                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
106700
106701                 var onClick = function() { continueTo(closeTownHall); };
106702
106703                 reveal('.inspector-body .preset-editor',
106704                     t('intro.navigation.fields_townhall'),
106705                     { buttonText: t('intro.ok'), buttonCallback: onClick }
106706                 );
106707
106708                 context.on('exit.intro', function() {
106709                     continueTo(clickTownHall);
106710                 });
106711
106712                 context.history().on('change.intro', function() {
106713                     if (!context.hasEntity(hallId)) {
106714                         continueTo(clickTownHall);
106715                     }
106716                 });
106717
106718                 function continueTo(nextStep) {
106719                     context.on('exit.intro', null);
106720                     context.history().on('change.intro', null);
106721                     d3_select('.inspector-wrap').on('wheel.intro', null);
106722                     nextStep();
106723                 }
106724             }
106725
106726
106727             function closeTownHall() {
106728                 if (!isTownHallSelected()) { return clickTownHall(); }
106729
106730                 var selector = '.entity-editor-pane button.preset-close svg use';
106731                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
106732
106733                 reveal('.entity-editor-pane',
106734                     t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') })
106735                 );
106736
106737                 context.on('exit.intro', function() {
106738                     continueTo(searchStreet);
106739                 });
106740
106741                 context.history().on('change.intro', function() {
106742                     // update the close icon in the tooltip if the user edits something.
106743                     var selector = '.entity-editor-pane button.preset-close svg use';
106744                     var href = d3_select(selector).attr('href') || '#iD-icon-close';
106745
106746                     reveal('.entity-editor-pane',
106747                         t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }),
106748                         { duration: 0 }
106749                     );
106750                 });
106751
106752                 function continueTo(nextStep) {
106753                     context.on('exit.intro', null);
106754                     context.history().on('change.intro', null);
106755                     nextStep();
106756                 }
106757             }
106758
106759
106760             function searchStreet() {
106761                 context.enter(modeBrowse(context));
106762                 context.history().reset('initial');  // ensure spring street exists
106763
106764                 var msec = transitionTime(springStreet, context.map().center());
106765                 if (msec) { reveal(null, null, { duration: 0 }); }
106766                 context.map().centerZoomEase(springStreet, 19, msec);  // ..and user can see it
106767
106768                 timeout(function() {
106769                     reveal('.search-header input',
106770                         t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') })
106771                     );
106772
106773                     d3_select('.search-header input')
106774                         .on('keyup.intro', checkSearchResult);
106775                 }, msec + 100);
106776             }
106777
106778
106779             function checkSearchResult() {
106780                 var first = d3_select('.feature-list-item:nth-child(0n+2)');  // skip "No Results" item
106781                 var firstName = first.select('.entity-name');
106782                 var name = t('intro.graph.name.spring-street');
106783
106784                 if (!firstName.empty() && firstName.text() === name) {
106785                     reveal(first.node(),
106786                         t('intro.navigation.choose_street', { name: name }),
106787                         { duration: 300 }
106788                     );
106789
106790                     context.on('exit.intro', function() {
106791                         continueTo(selectedStreet);
106792                     });
106793
106794                     d3_select('.search-header input')
106795                         .on('keydown.intro', eventCancel, true)
106796                         .on('keyup.intro', null);
106797                 }
106798
106799                 function continueTo(nextStep) {
106800                     context.on('exit.intro', null);
106801                     d3_select('.search-header input')
106802                         .on('keydown.intro', null)
106803                         .on('keyup.intro', null);
106804                     nextStep();
106805                 }
106806             }
106807
106808
106809             function selectedStreet() {
106810                 if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
106811                     return searchStreet();
106812                 }
106813
106814                 var onClick = function() { continueTo(editorStreet); };
106815                 var entity = context.entity(springStreetEndId);
106816                 var box = pointBox(entity.loc, context);
106817                 box.height = 500;
106818
106819                 reveal(box,
106820                     t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
106821                     { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick }
106822                 );
106823
106824                 timeout(function() {
106825                     context.map().on('move.intro drawn.intro', function() {
106826                         var entity = context.hasEntity(springStreetEndId);
106827                         if (!entity) { return; }
106828                         var box = pointBox(entity.loc, context);
106829                         box.height = 500;
106830                         reveal(box,
106831                             t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
106832                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
106833                         );
106834                     });
106835                 }, 600);  // after reveal.
106836
106837                 context.on('enter.intro', function(mode) {
106838                     if (!context.hasEntity(springStreetId)) {
106839                         return continueTo(searchStreet);
106840                     }
106841                     var ids = context.selectedIDs();
106842                     if (mode.id !== 'select' || !ids.length || ids[0] !== springStreetId) {
106843                         // keep Spring Street selected..
106844                         context.enter(modeSelect(context, [springStreetId]));
106845                     }
106846                 });
106847
106848                 context.history().on('change.intro', function() {
106849                     if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
106850                         timeout(function() {
106851                             continueTo(searchStreet);
106852                         }, 300);  // after any transition (e.g. if user deleted intersection)
106853                     }
106854                 });
106855
106856                 function continueTo(nextStep) {
106857                     context.map().on('move.intro drawn.intro', null);
106858                     context.on('enter.intro', null);
106859                     context.history().on('change.intro', null);
106860                     nextStep();
106861                 }
106862             }
106863
106864
106865             function editorStreet() {
106866                 var selector = '.entity-editor-pane button.preset-close svg use';
106867                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
106868
106869                 reveal('.entity-editor-pane',
106870                     t('intro.navigation.editor_street', {
106871                         button: icon(href, 'pre-text'),
106872                         field1: onewayField.label(),
106873                         field2: maxspeedField.label()
106874                     })
106875                 );
106876
106877                 context.on('exit.intro', function() {
106878                     continueTo(play);
106879                 });
106880
106881                 context.history().on('change.intro', function() {
106882                     // update the close icon in the tooltip if the user edits something.
106883                     var selector = '.entity-editor-pane button.preset-close svg use';
106884                     var href = d3_select(selector).attr('href') || '#iD-icon-close';
106885
106886                     reveal('.entity-editor-pane',
106887                         t('intro.navigation.editor_street', {
106888                             button: icon(href, 'pre-text'),
106889                             field1: onewayField.label().toLowerCase(),
106890                             field2: maxspeedField.label().toLowerCase()
106891                         }), { duration: 0 }
106892                     );
106893                 });
106894
106895                 function continueTo(nextStep) {
106896                     context.on('exit.intro', null);
106897                     context.history().on('change.intro', null);
106898                     nextStep();
106899                 }
106900             }
106901
106902
106903             function play() {
106904                 dispatch$1.call('done');
106905                 reveal('#id-container',
106906                     t('intro.navigation.play', { next: t('intro.points.title') }), {
106907                         tooltipBox: '.intro-nav-wrap .chapter-point',
106908                         buttonText: t('intro.ok'),
106909                         buttonCallback: function() { reveal('#id-container'); }
106910                     }
106911                 );
106912             }
106913
106914
106915             chapter.enter = function() {
106916                 dragMap();
106917             };
106918
106919
106920             chapter.exit = function() {
106921                 timeouts.forEach(window.clearTimeout);
106922                 context.on('enter.intro exit.intro', null);
106923                 context.map().on('move.intro drawn.intro', null);
106924                 context.history().on('change.intro', null);
106925                 d3_select('.inspector-wrap').on('wheel.intro', null);
106926                 d3_select('.search-header input').on('keydown.intro keyup.intro', null);
106927             };
106928
106929
106930             chapter.restart = function() {
106931                 chapter.exit();
106932                 chapter.enter();
106933             };
106934
106935
106936             return utilRebind(chapter, dispatch$1, 'on');
106937         }
106938
106939         function uiIntroPoint(context, reveal) {
106940             var dispatch$1 = dispatch('done');
106941             var timeouts = [];
106942             var intersection = [-85.63279, 41.94394];
106943             var building = [-85.632422, 41.944045];
106944             var cafePreset = context.presets().item('amenity/cafe');
106945             var _pointID = null;
106946
106947
106948             var chapter = {
106949                 title: 'intro.points.title'
106950             };
106951
106952
106953             function timeout(f, t) {
106954                 timeouts.push(window.setTimeout(f, t));
106955             }
106956
106957
106958             function revealEditMenu(loc, text, options) {
106959                 var rect = context.surfaceRect();
106960                 var point = context.curtainProjection(loc);
106961                 var pad = 40;
106962                 var width = 250 + (2 * pad);
106963                 var height = 250;
106964                 var startX = rect.left + point[0];
106965                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
106966                 var box = {
106967                     left: left,
106968                     top: point[1] + rect.top - 60,
106969                     width: width,
106970                     height: height
106971                 };
106972                 reveal(box, text, options);
106973             }
106974
106975
106976             function eventCancel() {
106977                 event.stopPropagation();
106978                 event.preventDefault();
106979             }
106980
106981
106982             function addPoint() {
106983                 context.enter(modeBrowse(context));
106984                 context.history().reset('initial');
106985
106986                 var msec = transitionTime(intersection, context.map().center());
106987                 if (msec) { reveal(null, null, { duration: 0 }); }
106988                 context.map().centerZoomEase(intersection, 19, msec);
106989
106990                 timeout(function() {
106991                     var tooltip = reveal('button.add-point',
106992                         t('intro.points.add_point', { button: icon('#iD-icon-point', 'pre-text') }));
106993
106994                     _pointID = null;
106995
106996                     tooltip.selectAll('.popover-inner')
106997                         .insert('svg', 'span')
106998                         .attr('class', 'tooltip-illustration')
106999                         .append('use')
107000                         .attr('xlink:href', '#iD-graphic-points');
107001
107002                     context.on('enter.intro', function(mode) {
107003                         if (mode.id !== 'add-point') { return; }
107004                         continueTo(placePoint);
107005                     });
107006                 }, msec + 100);
107007
107008                 function continueTo(nextStep) {
107009                     context.on('enter.intro', null);
107010                     nextStep();
107011                 }
107012             }
107013
107014
107015             function placePoint() {
107016                 if (context.mode().id !== 'add-point') {
107017                     return chapter.restart();
107018                 }
107019
107020                 var pointBox = pad$2(building, 150, context);
107021                 reveal(pointBox, t('intro.points.place_point'));
107022
107023                 context.map().on('move.intro drawn.intro', function() {
107024                     pointBox = pad$2(building, 150, context);
107025                     reveal(pointBox, t('intro.points.place_point'), { duration: 0 });
107026                 });
107027
107028                 context.on('enter.intro', function(mode) {
107029                     if (mode.id !== 'select') { return chapter.restart(); }
107030                     _pointID = context.mode().selectedIDs()[0];
107031                     continueTo(searchPreset);
107032                 });
107033
107034                 function continueTo(nextStep) {
107035                     context.map().on('move.intro drawn.intro', null);
107036                     context.on('enter.intro', null);
107037                     nextStep();
107038                 }
107039             }
107040
107041
107042             function searchPreset() {
107043                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
107044                     return addPoint();
107045                 }
107046
107047                 // disallow scrolling
107048                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
107049
107050                 d3_select('.preset-search-input')
107051                     .on('keydown.intro', null)
107052                     .on('keyup.intro', checkPresetSearch);
107053
107054                 reveal('.preset-search-input',
107055                     t('intro.points.search_cafe', { preset: cafePreset.name() })
107056                 );
107057
107058                 context.on('enter.intro', function(mode) {
107059                     if (!_pointID || !context.hasEntity(_pointID)) {
107060                         return continueTo(addPoint);
107061                     }
107062
107063                     var ids = context.selectedIDs();
107064                     if (mode.id !== 'select' || !ids.length || ids[0] !== _pointID) {
107065                         // keep the user's point selected..
107066                         context.enter(modeSelect(context, [_pointID]));
107067
107068                         // disallow scrolling
107069                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
107070
107071                         d3_select('.preset-search-input')
107072                             .on('keydown.intro', null)
107073                             .on('keyup.intro', checkPresetSearch);
107074
107075                         reveal('.preset-search-input',
107076                             t('intro.points.search_cafe', { preset: cafePreset.name() })
107077                         );
107078
107079                         context.history().on('change.intro', null);
107080                     }
107081                 });
107082
107083
107084                 function checkPresetSearch() {
107085                     var first = d3_select('.preset-list-item:first-child');
107086
107087                     if (first.classed('preset-amenity-cafe')) {
107088                         d3_select('.preset-search-input')
107089                             .on('keydown.intro', eventCancel, true)
107090                             .on('keyup.intro', null);
107091
107092                         reveal(first.select('.preset-list-button').node(),
107093                             t('intro.points.choose_cafe', { preset: cafePreset.name() }),
107094                             { duration: 300 }
107095                         );
107096
107097                         context.history().on('change.intro', function() {
107098                             continueTo(aboutFeatureEditor);
107099                         });
107100                     }
107101                 }
107102
107103                 function continueTo(nextStep) {
107104                     context.on('enter.intro', null);
107105                     context.history().on('change.intro', null);
107106                     d3_select('.inspector-wrap').on('wheel.intro', null);
107107                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
107108                     nextStep();
107109                 }
107110             }
107111
107112
107113             function aboutFeatureEditor() {
107114                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
107115                     return addPoint();
107116                 }
107117
107118                 timeout(function() {
107119                     reveal('.entity-editor-pane', t('intro.points.feature_editor'), {
107120                         tooltipClass: 'intro-points-describe',
107121                         buttonText: t('intro.ok'),
107122                         buttonCallback: function() { continueTo(addName); }
107123                     });
107124                 }, 400);
107125
107126                 context.on('exit.intro', function() {
107127                     // if user leaves select mode here, just continue with the tutorial.
107128                     continueTo(reselectPoint);
107129                 });
107130
107131                 function continueTo(nextStep) {
107132                     context.on('exit.intro', null);
107133                     nextStep();
107134                 }
107135             }
107136
107137
107138             function addName() {
107139                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
107140                     return addPoint();
107141                 }
107142
107143                 // reset pane, in case user happened to change it..
107144                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
107145
107146                 timeout(function() {
107147                     // It's possible for the user to add a name in a previous step..
107148                     // If so, don't tell them to add the name in this step.
107149                     // Give them an OK button instead.
107150                     var entity = context.entity(_pointID);
107151                     if (entity.tags.name) {
107152                         var tooltip = reveal('.entity-editor-pane', t('intro.points.add_name'), {
107153                             tooltipClass: 'intro-points-describe',
107154                             buttonText: t('intro.ok'),
107155                             buttonCallback: function() { continueTo(addCloseEditor); }
107156                         });
107157                         tooltip.select('.instruction').style('display', 'none');
107158
107159                     } else {
107160                         reveal('.entity-editor-pane', t('intro.points.add_name'),
107161                             { tooltipClass: 'intro-points-describe' }
107162                         );
107163                     }
107164                 }, 400);
107165
107166                 context.history().on('change.intro', function() {
107167                     continueTo(addCloseEditor);
107168                 });
107169
107170                 context.on('exit.intro', function() {
107171                     // if user leaves select mode here, just continue with the tutorial.
107172                     continueTo(reselectPoint);
107173                 });
107174
107175                 function continueTo(nextStep) {
107176                     context.on('exit.intro', null);
107177                     context.history().on('change.intro', null);
107178                     nextStep();
107179                 }
107180             }
107181
107182
107183             function addCloseEditor() {
107184                 // reset pane, in case user happened to change it..
107185                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
107186
107187                 var selector = '.entity-editor-pane button.preset-close svg use';
107188                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
107189
107190                 context.on('exit.intro', function() {
107191                     continueTo(reselectPoint);
107192                 });
107193
107194                 reveal('.entity-editor-pane',
107195                     t('intro.points.add_close', { button: icon(href, 'pre-text') })
107196                 );
107197
107198                 function continueTo(nextStep) {
107199                     context.on('exit.intro', null);
107200                     nextStep();
107201                 }
107202             }
107203
107204
107205             function reselectPoint() {
107206                 if (!_pointID) { return chapter.restart(); }
107207                 var entity = context.hasEntity(_pointID);
107208                 if (!entity) { return chapter.restart(); }
107209
107210                 // make sure it's still a cafe, in case user somehow changed it..
107211                 var oldPreset = context.presets().match(entity, context.graph());
107212                 context.replace(actionChangePreset(_pointID, oldPreset, cafePreset));
107213
107214                 context.enter(modeBrowse(context));
107215
107216                 var msec = transitionTime(entity.loc, context.map().center());
107217                 if (msec) { reveal(null, null, { duration: 0 }); }
107218                 context.map().centerEase(entity.loc, msec);
107219
107220                 timeout(function() {
107221                     var box = pointBox(entity.loc, context);
107222                     reveal(box, t('intro.points.reselect'), { duration: 600 });
107223
107224                     timeout(function() {
107225                         context.map().on('move.intro drawn.intro', function() {
107226                             var entity = context.hasEntity(_pointID);
107227                             if (!entity) { return chapter.restart(); }
107228                             var box = pointBox(entity.loc, context);
107229                             reveal(box, t('intro.points.reselect'), { duration: 0 });
107230                         });
107231                     }, 600); // after reveal..
107232
107233                     context.on('enter.intro', function(mode) {
107234                         if (mode.id !== 'select') { return; }
107235                         continueTo(updatePoint);
107236                     });
107237
107238                 }, msec + 100);
107239
107240                 function continueTo(nextStep) {
107241                     context.map().on('move.intro drawn.intro', null);
107242                     context.on('enter.intro', null);
107243                     nextStep();
107244                 }
107245             }
107246
107247
107248             function updatePoint() {
107249                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
107250                     return continueTo(reselectPoint);
107251                 }
107252
107253                 // reset pane, in case user happened to untag the point..
107254                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
107255
107256                 context.on('exit.intro', function() {
107257                     continueTo(reselectPoint);
107258                 });
107259
107260                 context.history().on('change.intro', function() {
107261                     continueTo(updateCloseEditor);
107262                 });
107263
107264                 timeout(function() {
107265                     reveal('.entity-editor-pane', t('intro.points.update'),
107266                         { tooltipClass: 'intro-points-describe' }
107267                     );
107268                 }, 400);
107269
107270                 function continueTo(nextStep) {
107271                     context.on('exit.intro', null);
107272                     context.history().on('change.intro', null);
107273                     nextStep();
107274                 }
107275             }
107276
107277
107278             function updateCloseEditor() {
107279                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
107280                     return continueTo(reselectPoint);
107281                 }
107282
107283                 // reset pane, in case user happened to change it..
107284                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
107285
107286                 context.on('exit.intro', function() {
107287                     continueTo(rightClickPoint);
107288                 });
107289
107290                 timeout(function() {
107291                     reveal('.entity-editor-pane',
107292                         t('intro.points.update_close', { button: icon('#iD-icon-apply', 'pre-text') })
107293                     );
107294                 }, 500);
107295
107296                 function continueTo(nextStep) {
107297                     context.on('exit.intro', null);
107298                     nextStep();
107299                 }
107300             }
107301
107302
107303             function rightClickPoint() {
107304                 if (!_pointID) { return chapter.restart(); }
107305                 var entity = context.hasEntity(_pointID);
107306                 if (!entity) { return chapter.restart(); }
107307
107308                 context.enter(modeBrowse(context));
107309
107310                 var box = pointBox(entity.loc, context);
107311                 reveal(box, t('intro.points.rightclick'), { duration: 600 });
107312
107313                 timeout(function() {
107314                     context.map().on('move.intro drawn.intro', function() {
107315                         var entity = context.hasEntity(_pointID);
107316                         if (!entity) { return chapter.restart(); }
107317                         var box = pointBox(entity.loc, context);
107318                         reveal(box, t('intro.points.rightclick'), { duration: 0 });
107319                     });
107320                 }, 600); // after reveal
107321
107322                 context.on('enter.intro', function(mode) {
107323                     if (mode.id !== 'select') { return; }
107324                     var ids = context.selectedIDs();
107325                     if (ids.length !== 1 || ids[0] !== _pointID) { return; }
107326
107327                     timeout(function() {
107328                         var node = selectMenuItem('delete').node();
107329                         if (!node) { return; }
107330                         continueTo(enterDelete);
107331                     }, 300);  // after menu visible
107332                 });
107333
107334                 function continueTo(nextStep) {
107335                     context.on('enter.intro', null);
107336                     context.map().on('move.intro drawn.intro', null);
107337                     nextStep();
107338                 }
107339             }
107340
107341
107342             function enterDelete() {
107343                 if (!_pointID) { return chapter.restart(); }
107344                 var entity = context.hasEntity(_pointID);
107345                 if (!entity) { return chapter.restart(); }
107346
107347                 var node = selectMenuItem('delete').node();
107348                 if (!node) { return continueTo(rightClickPoint); }
107349
107350                 revealEditMenu(entity.loc,
107351                     t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') })
107352                 );
107353
107354                 timeout(function() {
107355                     context.map().on('move.intro drawn.intro', function() {
107356                         revealEditMenu(entity.loc,
107357                             t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') }),
107358                             { duration: 0}
107359                         );
107360                     });
107361                 }, 300); // after menu visible
107362
107363                 context.on('exit.intro', function() {
107364                     if (!_pointID) { return chapter.restart(); }
107365                     var entity = context.hasEntity(_pointID);
107366                     if (entity) { return continueTo(rightClickPoint); }  // point still exists
107367                 });
107368
107369                 context.history().on('change.intro', function(changed) {
107370                     if (changed.deleted().length) {
107371                         continueTo(undo);
107372                     }
107373                 });
107374
107375                 function continueTo(nextStep) {
107376                     context.map().on('move.intro drawn.intro', null);
107377                     context.history().on('change.intro', null);
107378                     context.on('exit.intro', null);
107379                     nextStep();
107380                 }
107381             }
107382
107383
107384             function undo() {
107385                 context.history().on('change.intro', function() {
107386                     continueTo(play);
107387                 });
107388
107389                 var iconName = '#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo');
107390                 reveal('#bar button.undo-button',
107391                     t('intro.points.undo', { button: icon(iconName, 'pre-text') })
107392                 );
107393
107394                 function continueTo(nextStep) {
107395                     context.history().on('change.intro', null);
107396                     nextStep();
107397                 }
107398             }
107399
107400
107401             function play() {
107402                 dispatch$1.call('done');
107403                 reveal('#id-container',
107404                     t('intro.points.play', { next: t('intro.areas.title') }), {
107405                         tooltipBox: '.intro-nav-wrap .chapter-area',
107406                         buttonText: t('intro.ok'),
107407                         buttonCallback: function() { reveal('#id-container'); }
107408                     }
107409                 );
107410             }
107411
107412
107413             chapter.enter = function() {
107414                 addPoint();
107415             };
107416
107417
107418             chapter.exit = function() {
107419                 timeouts.forEach(window.clearTimeout);
107420                 context.on('enter.intro exit.intro', null);
107421                 context.map().on('move.intro drawn.intro', null);
107422                 context.history().on('change.intro', null);
107423                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
107424                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
107425             };
107426
107427
107428             chapter.restart = function() {
107429                 chapter.exit();
107430                 chapter.enter();
107431             };
107432
107433
107434             return utilRebind(chapter, dispatch$1, 'on');
107435         }
107436
107437         function uiIntroArea(context, reveal) {
107438             var dispatch$1 = dispatch('done');
107439             var playground = [-85.63552, 41.94159];
107440             var playgroundPreset = context.presets().item('leisure/playground');
107441             var descriptionField = context.presets().field('description');
107442             var timeouts = [];
107443             var _areaID;
107444
107445
107446             var chapter = {
107447                 title: 'intro.areas.title'
107448             };
107449
107450
107451             function timeout(f, t) {
107452                 timeouts.push(window.setTimeout(f, t));
107453             }
107454
107455
107456             function eventCancel() {
107457                 event.stopPropagation();
107458                 event.preventDefault();
107459             }
107460
107461
107462             function revealPlayground(center, text, options) {
107463                 var padding = 180 * Math.pow(2, context.map().zoom() - 19.5);
107464                 var box = pad$2(center, padding, context);
107465                 reveal(box, text, options);
107466             }
107467
107468
107469             function addArea() {
107470                 context.enter(modeBrowse(context));
107471                 context.history().reset('initial');
107472                 _areaID = null;
107473
107474                 var msec = transitionTime(playground, context.map().center());
107475                 if (msec) { reveal(null, null, { duration: 0 }); }
107476                 context.map().centerZoomEase(playground, 19, msec);
107477
107478                 timeout(function() {
107479                     var tooltip = reveal('button.add-area',
107480                         t('intro.areas.add_playground', { button: icon('#iD-icon-area', 'pre-text') }));
107481
107482                     tooltip.selectAll('.popover-inner')
107483                         .insert('svg', 'span')
107484                         .attr('class', 'tooltip-illustration')
107485                         .append('use')
107486                         .attr('xlink:href', '#iD-graphic-areas');
107487
107488                     context.on('enter.intro', function(mode) {
107489                         if (mode.id !== 'add-area') { return; }
107490                         continueTo(startPlayground);
107491                     });
107492                 }, msec + 100);
107493
107494                 function continueTo(nextStep) {
107495                     context.on('enter.intro', null);
107496                     nextStep();
107497                 }
107498             }
107499
107500
107501             function startPlayground() {
107502                 if (context.mode().id !== 'add-area') {
107503                     return chapter.restart();
107504                 }
107505
107506                 _areaID = null;
107507                 context.map().zoomEase(19.5, 500);
107508
107509                 timeout(function() {
107510                     revealPlayground(playground,
107511                         t('intro.areas.start_playground'), { duration: 250 }
107512                     );
107513
107514                     timeout(function() {
107515                         context.map().on('move.intro drawn.intro', function() {
107516                             revealPlayground(playground,
107517                                 t('intro.areas.start_playground'), { duration: 0 }
107518                             );
107519                         });
107520                         context.on('enter.intro', function(mode) {
107521                             if (mode.id !== 'draw-area') { return chapter.restart(); }
107522                             continueTo(continuePlayground);
107523                         });
107524                     }, 250);  // after reveal
107525
107526                 }, 550);  // after easing
107527
107528                 function continueTo(nextStep) {
107529                     context.map().on('move.intro drawn.intro', null);
107530                     context.on('enter.intro', null);
107531                     nextStep();
107532                 }
107533             }
107534
107535
107536             function continuePlayground() {
107537                 if (context.mode().id !== 'draw-area') {
107538                     return chapter.restart();
107539                 }
107540
107541                 _areaID = null;
107542                 revealPlayground(playground,
107543                     t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
107544                     { duration: 250 }
107545                 );
107546
107547                 timeout(function() {
107548                     context.map().on('move.intro drawn.intro', function() {
107549                         revealPlayground(playground,
107550                             t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
107551                             { duration: 0 }
107552                         );
107553                     });
107554                 }, 250);  // after reveal
107555
107556                 context.on('enter.intro', function(mode) {
107557                     if (mode.id === 'draw-area') {
107558                         var entity = context.hasEntity(context.selectedIDs()[0]);
107559                         if (entity && entity.nodes.length >= 6) {
107560                             return continueTo(finishPlayground);
107561                         } else {
107562                             return;
107563                         }
107564                     } else if (mode.id === 'select') {
107565                         _areaID = context.selectedIDs()[0];
107566                         return continueTo(searchPresets);
107567                     } else {
107568                         return chapter.restart();
107569                     }
107570                 });
107571
107572                 function continueTo(nextStep) {
107573                     context.map().on('move.intro drawn.intro', null);
107574                     context.on('enter.intro', null);
107575                     nextStep();
107576                 }
107577             }
107578
107579
107580             function finishPlayground() {
107581                 if (context.mode().id !== 'draw-area') {
107582                     return chapter.restart();
107583                 }
107584
107585                 _areaID = null;
107586                 revealPlayground(playground,
107587                     t('intro.areas.finish_playground'), { duration: 250 }
107588                 );
107589
107590                 timeout(function() {
107591                     context.map().on('move.intro drawn.intro', function() {
107592                         revealPlayground(playground,
107593                             t('intro.areas.finish_playground'), { duration: 0 }
107594                         );
107595                     });
107596                 }, 250);  // after reveal
107597
107598                 context.on('enter.intro', function(mode) {
107599                     if (mode.id === 'draw-area') {
107600                         return;
107601                     } else if (mode.id === 'select') {
107602                         _areaID = context.selectedIDs()[0];
107603                         return continueTo(searchPresets);
107604                     } else {
107605                         return chapter.restart();
107606                     }
107607                 });
107608
107609                 function continueTo(nextStep) {
107610                     context.map().on('move.intro drawn.intro', null);
107611                     context.on('enter.intro', null);
107612                     nextStep();
107613                 }
107614             }
107615
107616
107617             function searchPresets() {
107618                 if (!_areaID || !context.hasEntity(_areaID)) {
107619                     return addArea();
107620                 }
107621                 var ids = context.selectedIDs();
107622                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
107623                     context.enter(modeSelect(context, [_areaID]));
107624                 }
107625
107626                 // disallow scrolling
107627                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
107628
107629                 timeout(function() {
107630                     // reset pane, in case user somehow happened to change it..
107631                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
107632
107633                     d3_select('.preset-search-input')
107634                         .on('keydown.intro', null)
107635                         .on('keyup.intro', checkPresetSearch);
107636
107637                     reveal('.preset-search-input',
107638                         t('intro.areas.search_playground', { preset: playgroundPreset.name() })
107639                     );
107640                 }, 400);  // after preset list pane visible..
107641
107642                 context.on('enter.intro', function(mode) {
107643                     if (!_areaID || !context.hasEntity(_areaID)) {
107644                         return continueTo(addArea);
107645                     }
107646
107647                     var ids = context.selectedIDs();
107648                     if (mode.id !== 'select' || !ids.length || ids[0] !== _areaID) {
107649                         // keep the user's area selected..
107650                         context.enter(modeSelect(context, [_areaID]));
107651
107652                         // reset pane, in case user somehow happened to change it..
107653                         d3_select('.inspector-wrap .panewrap').style('right', '-100%');
107654                         // disallow scrolling
107655                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
107656
107657                         d3_select('.preset-search-input')
107658                             .on('keydown.intro', null)
107659                             .on('keyup.intro', checkPresetSearch);
107660
107661                         reveal('.preset-search-input',
107662                             t('intro.areas.search_playground', { preset: playgroundPreset.name() })
107663                         );
107664
107665                         context.history().on('change.intro', null);
107666                     }
107667                 });
107668
107669                 function checkPresetSearch() {
107670                     var first = d3_select('.preset-list-item:first-child');
107671
107672                     if (first.classed('preset-leisure-playground')) {
107673                         reveal(first.select('.preset-list-button').node(),
107674                             t('intro.areas.choose_playground', { preset: playgroundPreset.name() }),
107675                             { duration: 300 }
107676                         );
107677
107678                         d3_select('.preset-search-input')
107679                             .on('keydown.intro', eventCancel, true)
107680                             .on('keyup.intro', null);
107681
107682                         context.history().on('change.intro', function() {
107683                             continueTo(clickAddField);
107684                         });
107685                     }
107686                 }
107687
107688                 function continueTo(nextStep) {
107689                     d3_select('.inspector-wrap').on('wheel.intro', null);
107690                     context.on('enter.intro', null);
107691                     context.history().on('change.intro', null);
107692                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
107693                     nextStep();
107694                 }
107695             }
107696
107697
107698             function clickAddField() {
107699                 if (!_areaID || !context.hasEntity(_areaID)) {
107700                     return addArea();
107701                 }
107702                 var ids = context.selectedIDs();
107703                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
107704                     return searchPresets();
107705                 }
107706
107707                 if (!d3_select('.form-field-description').empty()) {
107708                     return continueTo(describePlayground);
107709                 }
107710
107711                 // disallow scrolling
107712                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
107713
107714                 timeout(function() {
107715                     // reset pane, in case user somehow happened to change it..
107716                     d3_select('.inspector-wrap .panewrap').style('right', '0%');
107717
107718                     // It's possible for the user to add a description in a previous step..
107719                     // If they did this already, just continue to next step.
107720                     var entity = context.entity(_areaID);
107721                     if (entity.tags.description) {
107722                         return continueTo(play);
107723                     }
107724
107725                     // scroll "Add field" into view
107726                     var box = d3_select('.more-fields').node().getBoundingClientRect();
107727                     if (box.top > 300) {
107728                         var pane = d3_select('.entity-editor-pane .inspector-body');
107729                         var start = pane.node().scrollTop;
107730                         var end = start + (box.top - 300);
107731
107732                         pane
107733                             .transition()
107734                             .duration(250)
107735                             .tween('scroll.inspector', function() {
107736                                 var node = this;
107737                                 var i = d3_interpolateNumber(start, end);
107738                                 return function(t) {
107739                                     node.scrollTop = i(t);
107740                                 };
107741                             });
107742                     }
107743
107744                     timeout(function() {
107745                         reveal('.more-fields .combobox-input',
107746                             t('intro.areas.add_field'),
107747                             { duration: 300 }
107748                         );
107749
107750                         d3_select('.more-fields .combobox-input')
107751                             .on('click.intro', function() {
107752                                 // Watch for the combobox to appear...
107753                                 var watcher;
107754                                 watcher = window.setInterval(function() {
107755                                     if (!d3_select('div.combobox').empty()) {
107756                                         window.clearInterval(watcher);
107757                                         continueTo(chooseDescriptionField);
107758                                     }
107759                                 }, 300);
107760                             });
107761                     }, 300);  // after "Add Field" visible
107762
107763                 }, 400);  // after editor pane visible
107764
107765                 context.on('exit.intro', function() {
107766                     return continueTo(searchPresets);
107767                 });
107768
107769                 function continueTo(nextStep) {
107770                     d3_select('.inspector-wrap').on('wheel.intro', null);
107771                     d3_select('.more-fields .combobox-input').on('click.intro', null);
107772                     context.on('exit.intro', null);
107773                     nextStep();
107774                 }
107775             }
107776
107777
107778             function chooseDescriptionField() {
107779                 if (!_areaID || !context.hasEntity(_areaID)) {
107780                     return addArea();
107781                 }
107782                 var ids = context.selectedIDs();
107783                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
107784                     return searchPresets();
107785                 }
107786
107787                 if (!d3_select('.form-field-description').empty()) {
107788                     return continueTo(describePlayground);
107789                 }
107790
107791                 // Make sure combobox is ready..
107792                 if (d3_select('div.combobox').empty()) {
107793                     return continueTo(clickAddField);
107794                 }
107795                 // Watch for the combobox to go away..
107796                 var watcher;
107797                 watcher = window.setInterval(function() {
107798                     if (d3_select('div.combobox').empty()) {
107799                         window.clearInterval(watcher);
107800                         timeout(function() {
107801                             if (d3_select('.form-field-description').empty()) {
107802                                 continueTo(retryChooseDescription);
107803                             } else {
107804                                 continueTo(describePlayground);
107805                             }
107806                         }, 300);  // after description field added.
107807                     }
107808                 }, 300);
107809
107810                 reveal('div.combobox',
107811                     t('intro.areas.choose_field', { field: descriptionField.label() }),
107812                     { duration: 300 }
107813                 );
107814
107815                 context.on('exit.intro', function() {
107816                     return continueTo(searchPresets);
107817                 });
107818
107819                 function continueTo(nextStep) {
107820                     if (watcher) { window.clearInterval(watcher); }
107821                     context.on('exit.intro', null);
107822                     nextStep();
107823                 }
107824             }
107825
107826
107827             function describePlayground() {
107828                 if (!_areaID || !context.hasEntity(_areaID)) {
107829                     return addArea();
107830                 }
107831                 var ids = context.selectedIDs();
107832                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
107833                     return searchPresets();
107834                 }
107835
107836                 // reset pane, in case user happened to change it..
107837                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
107838
107839                 if (d3_select('.form-field-description').empty()) {
107840                     return continueTo(retryChooseDescription);
107841                 }
107842
107843                 context.on('exit.intro', function() {
107844                     continueTo(play);
107845                 });
107846
107847                 reveal('.entity-editor-pane',
107848                     t('intro.areas.describe_playground', { button: icon('#iD-icon-apply', 'pre-text') }),
107849                     { duration: 300 }
107850                 );
107851
107852                 function continueTo(nextStep) {
107853                     context.on('exit.intro', null);
107854                     nextStep();
107855                 }
107856             }
107857
107858
107859             function retryChooseDescription() {
107860                 if (!_areaID || !context.hasEntity(_areaID)) {
107861                     return addArea();
107862                 }
107863                 var ids = context.selectedIDs();
107864                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
107865                     return searchPresets();
107866                 }
107867
107868                 // reset pane, in case user happened to change it..
107869                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
107870
107871                 reveal('.entity-editor-pane',
107872                     t('intro.areas.retry_add_field', { field: descriptionField.label() }), {
107873                     buttonText: t('intro.ok'),
107874                     buttonCallback: function() { continueTo(clickAddField); }
107875                 });
107876
107877                 context.on('exit.intro', function() {
107878                     return continueTo(searchPresets);
107879                 });
107880
107881                 function continueTo(nextStep) {
107882                     context.on('exit.intro', null);
107883                     nextStep();
107884                 }
107885             }
107886
107887
107888             function play() {
107889                 dispatch$1.call('done');
107890                 reveal('#id-container',
107891                     t('intro.areas.play', { next: t('intro.lines.title') }), {
107892                         tooltipBox: '.intro-nav-wrap .chapter-line',
107893                         buttonText: t('intro.ok'),
107894                         buttonCallback: function() { reveal('#id-container'); }
107895                     }
107896                 );
107897             }
107898
107899
107900             chapter.enter = function() {
107901                 addArea();
107902             };
107903
107904
107905             chapter.exit = function() {
107906                 timeouts.forEach(window.clearTimeout);
107907                 context.on('enter.intro exit.intro', null);
107908                 context.map().on('move.intro drawn.intro', null);
107909                 context.history().on('change.intro', null);
107910                 d3_select('.inspector-wrap').on('wheel.intro', null);
107911                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
107912                 d3_select('.more-fields .combobox-input').on('click.intro', null);
107913             };
107914
107915
107916             chapter.restart = function() {
107917                 chapter.exit();
107918                 chapter.enter();
107919             };
107920
107921
107922             return utilRebind(chapter, dispatch$1, 'on');
107923         }
107924
107925         function uiIntroLine(context, reveal) {
107926             var dispatch$1 = dispatch('done');
107927             var timeouts = [];
107928             var _tulipRoadID = null;
107929             var flowerRoadID = 'w646';
107930             var tulipRoadStart = [-85.6297754121684, 41.95805253325314];
107931             var tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204];
107932             var tulipRoadIntersection = [-85.62974496187628, 41.95742515554585];
107933             var roadCategory = context.presets().item('category-road_minor');
107934             var residentialPreset = context.presets().item('highway/residential');
107935             var woodRoadID = 'w525';
107936             var woodRoadEndID = 'n2862';
107937             var woodRoadAddNode = [-85.62390110349587, 41.95397111462291];
107938             var woodRoadDragEndpoint = [-85.623867390213, 41.95466987786487];
107939             var woodRoadDragMidpoint = [-85.62386254803509, 41.95430395953872];
107940             var washingtonStreetID = 'w522';
107941             var twelfthAvenueID = 'w1';
107942             var eleventhAvenueEndID = 'n3550';
107943             var twelfthAvenueEndID = 'n5';
107944             var _washingtonSegmentID = null;
107945             var eleventhAvenueEnd = context.entity(eleventhAvenueEndID).loc;
107946             var twelfthAvenueEnd = context.entity(twelfthAvenueEndID).loc;
107947             var deleteLinesLoc = [-85.6219395542764, 41.95228033922477];
107948             var twelfthAvenue = [-85.62219310052491, 41.952505413152956];
107949
107950
107951             var chapter = {
107952                 title: 'intro.lines.title'
107953             };
107954
107955
107956             function timeout(f, t) {
107957                 timeouts.push(window.setTimeout(f, t));
107958             }
107959
107960
107961             function eventCancel() {
107962                 event.stopPropagation();
107963                 event.preventDefault();
107964             }
107965
107966
107967             function revealEditMenu(loc, text, options) {
107968                 var rect = context.surfaceRect();
107969                 var point = context.curtainProjection(loc);
107970                 var pad = 40;
107971                 var width = 250 + (2 * pad);
107972                 var height = 350;
107973                 var startX = rect.left + point[0];
107974                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
107975                 var box = {
107976                     left: left,
107977                     top: point[1] + rect.top - 60,
107978                     width: width,
107979                     height: height
107980                 };
107981                 reveal(box, text, options);
107982             }
107983
107984
107985             function addLine() {
107986                 context.enter(modeBrowse(context));
107987                 context.history().reset('initial');
107988
107989                 var msec = transitionTime(tulipRoadStart, context.map().center());
107990                 if (msec) { reveal(null, null, { duration: 0 }); }
107991                 context.map().centerZoomEase(tulipRoadStart, 18.5, msec);
107992
107993                 timeout(function() {
107994                     var tooltip = reveal('button.add-line',
107995                         t('intro.lines.add_line', { button: icon('#iD-icon-line', 'pre-text') }));
107996
107997                     tooltip.selectAll('.popover-inner')
107998                         .insert('svg', 'span')
107999                         .attr('class', 'tooltip-illustration')
108000                         .append('use')
108001                         .attr('xlink:href', '#iD-graphic-lines');
108002
108003                     context.on('enter.intro', function(mode) {
108004                         if (mode.id !== 'add-line') { return; }
108005                         continueTo(startLine);
108006                     });
108007                 }, msec + 100);
108008
108009                 function continueTo(nextStep) {
108010                     context.on('enter.intro', null);
108011                     nextStep();
108012                 }
108013             }
108014
108015
108016             function startLine() {
108017                 if (context.mode().id !== 'add-line') { return chapter.restart(); }
108018
108019                 _tulipRoadID = null;
108020
108021                 var padding = 70 * Math.pow(2, context.map().zoom() - 18);
108022                 var box = pad$2(tulipRoadStart, padding, context);
108023                 box.height = box.height + 100;
108024                 reveal(box, t('intro.lines.start_line'));
108025
108026                 context.map().on('move.intro drawn.intro', function() {
108027                     padding = 70 * Math.pow(2, context.map().zoom() - 18);
108028                     box = pad$2(tulipRoadStart, padding, context);
108029                     box.height = box.height + 100;
108030                     reveal(box, t('intro.lines.start_line'), { duration: 0 });
108031                 });
108032
108033                 context.on('enter.intro', function(mode) {
108034                     if (mode.id !== 'draw-line') { return chapter.restart(); }
108035                     continueTo(drawLine);
108036                 });
108037
108038                 function continueTo(nextStep) {
108039                     context.map().on('move.intro drawn.intro', null);
108040                     context.on('enter.intro', null);
108041                     nextStep();
108042                 }
108043             }
108044
108045
108046             function drawLine() {
108047                 if (context.mode().id !== 'draw-line') { return chapter.restart(); }
108048
108049                 _tulipRoadID = context.mode().selectedIDs()[0];
108050                 context.map().centerEase(tulipRoadMidpoint, 500);
108051
108052                 timeout(function() {
108053                     var padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
108054                     var box = pad$2(tulipRoadMidpoint, padding, context);
108055                     box.height = box.height * 2;
108056                     reveal(box,
108057                         t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') })
108058                     );
108059
108060                     context.map().on('move.intro drawn.intro', function() {
108061                         padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
108062                         box = pad$2(tulipRoadMidpoint, padding, context);
108063                         box.height = box.height * 2;
108064                         reveal(box,
108065                             t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }),
108066                             { duration: 0 }
108067                         );
108068                     });
108069                 }, 550);  // after easing..
108070
108071                 context.history().on('change.intro', function() {
108072                     if (isLineConnected()) {
108073                         continueTo(continueLine);
108074                     }
108075                 });
108076
108077                 context.on('enter.intro', function(mode) {
108078                     if (mode.id === 'draw-line') {
108079                         return;
108080                     } else if (mode.id === 'select') {
108081                         continueTo(retryIntersect);
108082                         return;
108083                     } else {
108084                         return chapter.restart();
108085                     }
108086                 });
108087
108088                 function continueTo(nextStep) {
108089                     context.map().on('move.intro drawn.intro', null);
108090                     context.history().on('change.intro', null);
108091                     context.on('enter.intro', null);
108092                     nextStep();
108093                 }
108094             }
108095
108096
108097             function isLineConnected() {
108098                 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
108099                 if (!entity) { return false; }
108100
108101                 var drawNodes = context.graph().childNodes(entity);
108102                 return drawNodes.some(function(node) {
108103                     return context.graph().parentWays(node).some(function(parent) {
108104                         return parent.id === flowerRoadID;
108105                     });
108106                 });
108107             }
108108
108109
108110             function retryIntersect() {
108111                 d3_select(window).on('mousedown.intro', eventCancel, true);
108112
108113                 var box = pad$2(tulipRoadIntersection, 80, context);
108114                 reveal(box,
108115                     t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') })
108116                 );
108117
108118                 timeout(chapter.restart, 3000);
108119             }
108120
108121
108122             function continueLine() {
108123                 if (context.mode().id !== 'draw-line') { return chapter.restart(); }
108124                 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
108125                 if (!entity) { return chapter.restart(); }
108126
108127                 context.map().centerEase(tulipRoadIntersection, 500);
108128
108129                 reveal('#surface', t('intro.lines.continue_line'));
108130
108131                 context.on('enter.intro', function(mode) {
108132                     if (mode.id === 'draw-line')
108133                         { return; }
108134                     else if (mode.id === 'select')
108135                         { return continueTo(chooseCategoryRoad); }
108136                     else
108137                         { return chapter.restart(); }
108138                 });
108139
108140                 function continueTo(nextStep) {
108141                     context.on('enter.intro', null);
108142                     nextStep();
108143                 }
108144             }
108145
108146
108147             function chooseCategoryRoad() {
108148                 if (context.mode().id !== 'select') { return chapter.restart(); }
108149
108150                 context.on('exit.intro', function() {
108151                     return chapter.restart();
108152                 });
108153
108154                 var button = d3_select('.preset-category-road_minor .preset-list-button');
108155                 if (button.empty()) { return chapter.restart(); }
108156
108157                 // disallow scrolling
108158                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108159
108160                 timeout(function() {
108161                     // reset pane, in case user somehow happened to change it..
108162                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
108163
108164                     reveal(button.node(),
108165                         t('intro.lines.choose_category_road', { category: roadCategory.name() })
108166                     );
108167
108168                     button.on('click.intro', function() {
108169                         continueTo(choosePresetResidential);
108170                     });
108171
108172                 }, 400);  // after editor pane visible
108173
108174                 function continueTo(nextStep) {
108175                     d3_select('.inspector-wrap').on('wheel.intro', null);
108176                     d3_select('.preset-list-button').on('click.intro', null);
108177                     context.on('exit.intro', null);
108178                     nextStep();
108179                 }
108180             }
108181
108182
108183             function choosePresetResidential() {
108184                 if (context.mode().id !== 'select') { return chapter.restart(); }
108185
108186                 context.on('exit.intro', function() {
108187                     return chapter.restart();
108188                 });
108189
108190                 var subgrid = d3_select('.preset-category-road_minor .subgrid');
108191                 if (subgrid.empty()) { return chapter.restart(); }
108192
108193                 subgrid.selectAll(':not(.preset-highway-residential) .preset-list-button')
108194                     .on('click.intro', function() {
108195                         continueTo(retryPresetResidential);
108196                     });
108197
108198                 subgrid.selectAll('.preset-highway-residential .preset-list-button')
108199                     .on('click.intro', function() {
108200                         continueTo(nameRoad);
108201                     });
108202
108203                 timeout(function() {
108204                     reveal(subgrid.node(),
108205                         t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }),
108206                         { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 }
108207                     );
108208                 }, 300);
108209
108210                 function continueTo(nextStep) {
108211                     d3_select('.preset-list-button').on('click.intro', null);
108212                     context.on('exit.intro', null);
108213                     nextStep();
108214                 }
108215             }
108216
108217
108218             // selected wrong road type
108219             function retryPresetResidential() {
108220                 if (context.mode().id !== 'select') { return chapter.restart(); }
108221
108222                 context.on('exit.intro', function() {
108223                     return chapter.restart();
108224                 });
108225
108226                 // disallow scrolling
108227                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108228
108229                 timeout(function() {
108230                     var button = d3_select('.entity-editor-pane .preset-list-button');
108231
108232                     reveal(button.node(),
108233                         t('intro.lines.retry_preset_residential', { preset: residentialPreset.name() })
108234                     );
108235
108236                     button.on('click.intro', function() {
108237                         continueTo(chooseCategoryRoad);
108238                     });
108239
108240                 }, 500);
108241
108242                 function continueTo(nextStep) {
108243                     d3_select('.inspector-wrap').on('wheel.intro', null);
108244                     d3_select('.preset-list-button').on('click.intro', null);
108245                     context.on('exit.intro', null);
108246                     nextStep();
108247                 }
108248             }
108249
108250
108251             function nameRoad() {
108252                 context.on('exit.intro', function() {
108253                     continueTo(didNameRoad);
108254                 });
108255
108256                 timeout(function() {
108257                     reveal('.entity-editor-pane',
108258                         t('intro.lines.name_road', { button: icon('#iD-icon-apply', 'pre-text') }),
108259                         { tooltipClass: 'intro-lines-name_road' }
108260                     );
108261                 }, 500);
108262
108263                 function continueTo(nextStep) {
108264                     context.on('exit.intro', null);
108265                     nextStep();
108266                 }
108267             }
108268
108269
108270             function didNameRoad() {
108271                 context.history().checkpoint('doneAddLine');
108272
108273                 timeout(function() {
108274                     reveal('#surface', t('intro.lines.did_name_road'), {
108275                         buttonText: t('intro.ok'),
108276                         buttonCallback: function() { continueTo(updateLine); }
108277                     });
108278                 }, 500);
108279
108280                 function continueTo(nextStep) {
108281                     nextStep();
108282                 }
108283             }
108284
108285
108286             function updateLine() {
108287                 context.history().reset('doneAddLine');
108288                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108289                     return chapter.restart();
108290                 }
108291
108292                 var msec = transitionTime(woodRoadDragMidpoint, context.map().center());
108293                 if (msec) { reveal(null, null, { duration: 0 }); }
108294                 context.map().centerZoomEase(woodRoadDragMidpoint, 19, msec);
108295
108296                 timeout(function() {
108297                     var padding = 250 * Math.pow(2, context.map().zoom() - 19);
108298                     var box = pad$2(woodRoadDragMidpoint, padding, context);
108299                     var advance = function() { continueTo(addNode); };
108300
108301                     reveal(box, t('intro.lines.update_line'),
108302                         { buttonText: t('intro.ok'), buttonCallback: advance }
108303                     );
108304
108305                     context.map().on('move.intro drawn.intro', function() {
108306                         var padding = 250 * Math.pow(2, context.map().zoom() - 19);
108307                         var box = pad$2(woodRoadDragMidpoint, padding, context);
108308                         reveal(box, t('intro.lines.update_line'),
108309                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
108310                         );
108311                     });
108312                 }, msec + 100);
108313
108314                 function continueTo(nextStep) {
108315                     context.map().on('move.intro drawn.intro', null);
108316                     nextStep();
108317                 }
108318             }
108319
108320
108321             function addNode() {
108322                 context.history().reset('doneAddLine');
108323                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108324                     return chapter.restart();
108325                 }
108326
108327                 var padding = 40 * Math.pow(2, context.map().zoom() - 19);
108328                 var box = pad$2(woodRoadAddNode, padding, context);
108329                 reveal(box, t('intro.lines.add_node'));
108330
108331                 context.map().on('move.intro drawn.intro', function() {
108332                     var padding = 40 * Math.pow(2, context.map().zoom() - 19);
108333                     var box = pad$2(woodRoadAddNode, padding, context);
108334                     reveal(box, t('intro.lines.add_node'), { duration: 0 });
108335                 });
108336
108337                 context.history().on('change.intro', function(changed) {
108338                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108339                         return continueTo(updateLine);
108340                     }
108341                     if (changed.created().length === 1) {
108342                         timeout(function() { continueTo(startDragEndpoint); }, 500);
108343                     }
108344                 });
108345
108346                 context.on('enter.intro', function(mode) {
108347                     if (mode.id !== 'select') {
108348                         continueTo(updateLine);
108349                     }
108350                 });
108351
108352                 function continueTo(nextStep) {
108353                     context.map().on('move.intro drawn.intro', null);
108354                     context.history().on('change.intro', null);
108355                     context.on('enter.intro', null);
108356                     nextStep();
108357                 }
108358             }
108359
108360
108361             function startDragEndpoint() {
108362                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108363                     return continueTo(updateLine);
108364                 }
108365                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
108366                 var box = pad$2(woodRoadDragEndpoint, padding, context);
108367                 reveal(box, t('intro.lines.start_drag_endpoint'));
108368
108369                 context.map().on('move.intro drawn.intro', function() {
108370                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108371                         return continueTo(updateLine);
108372                     }
108373                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
108374                     var box = pad$2(woodRoadDragEndpoint, padding, context);
108375                     reveal(box, t('intro.lines.start_drag_endpoint'), { duration: 0 });
108376
108377                     var entity = context.entity(woodRoadEndID);
108378                     if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) <= 4) {
108379                         continueTo(finishDragEndpoint);
108380                     }
108381                 });
108382
108383                 function continueTo(nextStep) {
108384                     context.map().on('move.intro drawn.intro', null);
108385                     nextStep();
108386                 }
108387             }
108388
108389
108390             function finishDragEndpoint() {
108391                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108392                     return continueTo(updateLine);
108393                 }
108394
108395                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
108396                 var box = pad$2(woodRoadDragEndpoint, padding, context);
108397                 reveal(box, t('intro.lines.finish_drag_endpoint'));
108398
108399                 context.map().on('move.intro drawn.intro', function() {
108400                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108401                         return continueTo(updateLine);
108402                     }
108403                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
108404                     var box = pad$2(woodRoadDragEndpoint, padding, context);
108405                     reveal(box, t('intro.lines.finish_drag_endpoint'), { duration: 0 });
108406
108407                     var entity = context.entity(woodRoadEndID);
108408                     if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) > 4) {
108409                         continueTo(startDragEndpoint);
108410                     }
108411                 });
108412
108413                 context.on('enter.intro', function() {
108414                     continueTo(startDragMidpoint);
108415                 });
108416
108417                 function continueTo(nextStep) {
108418                     context.map().on('move.intro drawn.intro', null);
108419                     context.on('enter.intro', null);
108420                     nextStep();
108421                 }
108422             }
108423
108424
108425             function startDragMidpoint() {
108426                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108427                     return continueTo(updateLine);
108428                 }
108429                 if (context.selectedIDs().indexOf(woodRoadID) === -1) {
108430                     context.enter(modeSelect(context, [woodRoadID]));
108431                 }
108432
108433                 var padding = 80 * Math.pow(2, context.map().zoom() - 19);
108434                 var box = pad$2(woodRoadDragMidpoint, padding, context);
108435                 reveal(box, t('intro.lines.start_drag_midpoint'));
108436
108437                 context.map().on('move.intro drawn.intro', function() {
108438                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108439                         return continueTo(updateLine);
108440                     }
108441                     var padding = 80 * Math.pow(2, context.map().zoom() - 19);
108442                     var box = pad$2(woodRoadDragMidpoint, padding, context);
108443                     reveal(box, t('intro.lines.start_drag_midpoint'), { duration: 0 });
108444                 });
108445
108446                 context.history().on('change.intro', function(changed) {
108447                     if (changed.created().length === 1) {
108448                         continueTo(continueDragMidpoint);
108449                     }
108450                 });
108451
108452                 context.on('enter.intro', function(mode) {
108453                     if (mode.id !== 'select') {
108454                         // keep Wood Road selected so midpoint triangles are drawn..
108455                         context.enter(modeSelect(context, [woodRoadID]));
108456                     }
108457                 });
108458
108459                 function continueTo(nextStep) {
108460                     context.map().on('move.intro drawn.intro', null);
108461                     context.history().on('change.intro', null);
108462                     context.on('enter.intro', null);
108463                     nextStep();
108464                 }
108465             }
108466
108467
108468             function continueDragMidpoint() {
108469                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108470                     return continueTo(updateLine);
108471                 }
108472
108473                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
108474                 var box = pad$2(woodRoadDragEndpoint, padding, context);
108475                 box.height += 400;
108476
108477                 var advance = function() {
108478                     context.history().checkpoint('doneUpdateLine');
108479                     continueTo(deleteLines);
108480                 };
108481
108482                 reveal(box, t('intro.lines.continue_drag_midpoint'),
108483                     { buttonText: t('intro.ok'), buttonCallback: advance }
108484                 );
108485
108486                 context.map().on('move.intro drawn.intro', function() {
108487                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
108488                         return continueTo(updateLine);
108489                     }
108490                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
108491                     var box = pad$2(woodRoadDragEndpoint, padding, context);
108492                     box.height += 400;
108493                     reveal(box, t('intro.lines.continue_drag_midpoint'),
108494                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
108495                     );
108496                 });
108497
108498                 function continueTo(nextStep) {
108499                     context.map().on('move.intro drawn.intro', null);
108500                     nextStep();
108501                 }
108502             }
108503
108504
108505             function deleteLines() {
108506                 context.history().reset('doneUpdateLine');
108507                 context.enter(modeBrowse(context));
108508
108509                 if (!context.hasEntity(washingtonStreetID) ||
108510                     !context.hasEntity(twelfthAvenueID) ||
108511                     !context.hasEntity(eleventhAvenueEndID)) {
108512                     return chapter.restart();
108513                 }
108514
108515                 var msec = transitionTime(deleteLinesLoc, context.map().center());
108516                 if (msec) { reveal(null, null, { duration: 0 }); }
108517                 context.map().centerZoomEase(deleteLinesLoc, 18, msec);
108518
108519                 timeout(function() {
108520                     var padding = 200 * Math.pow(2, context.map().zoom() - 18);
108521                     var box = pad$2(deleteLinesLoc, padding, context);
108522                     box.top -= 200;
108523                     box.height += 400;
108524                     var advance = function() { continueTo(rightClickIntersection); };
108525
108526                     reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
108527                         { buttonText: t('intro.ok'), buttonCallback: advance }
108528                     );
108529
108530                     context.map().on('move.intro drawn.intro', function() {
108531                         var padding = 200 * Math.pow(2, context.map().zoom() - 18);
108532                         var box = pad$2(deleteLinesLoc, padding, context);
108533                         box.top -= 200;
108534                         box.height += 400;
108535                         reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
108536                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
108537                         );
108538                     });
108539
108540                     context.history().on('change.intro', function() {
108541                         timeout(function() {
108542                             continueTo(deleteLines);
108543                         }, 500);  // after any transition (e.g. if user deleted intersection)
108544                     });
108545
108546                 }, msec + 100);
108547
108548                 function continueTo(nextStep) {
108549                     context.map().on('move.intro drawn.intro', null);
108550                     context.history().on('change.intro', null);
108551                     nextStep();
108552                 }
108553             }
108554
108555
108556             function rightClickIntersection() {
108557                 context.history().reset('doneUpdateLine');
108558                 context.enter(modeBrowse(context));
108559
108560                 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
108561
108562                 timeout(function() {
108563                     var padding = 60 * Math.pow(2, context.map().zoom() - 18);
108564                     var box = pad$2(eleventhAvenueEnd, padding, context);
108565                     reveal(box, t('intro.lines.rightclick_intersection',
108566                         { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') })
108567                     );
108568
108569                     context.map().on('move.intro drawn.intro', function() {
108570                         var padding = 60 * Math.pow(2, context.map().zoom() - 18);
108571                         var box = pad$2(eleventhAvenueEnd, padding, context);
108572                         reveal(box, t('intro.lines.rightclick_intersection',
108573                             { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }),
108574                             { duration: 0 }
108575                         );
108576                     });
108577
108578                     context.on('enter.intro', function(mode) {
108579                         if (mode.id !== 'select') { return; }
108580                         var ids = context.selectedIDs();
108581                         if (ids.length !== 1 || ids[0] !== eleventhAvenueEndID) { return; }
108582
108583                         timeout(function() {
108584                             var node = selectMenuItem('split').node();
108585                             if (!node) { return; }
108586                             continueTo(splitIntersection);
108587                         }, 300);  // after menu visible
108588                     });
108589
108590                     context.history().on('change.intro', function() {
108591                         timeout(function() {
108592                             continueTo(deleteLines);
108593                         }, 300);  // after any transition (e.g. if user deleted intersection)
108594                     });
108595
108596                 }, 600);
108597
108598                 function continueTo(nextStep) {
108599                     context.map().on('move.intro drawn.intro', null);
108600                     context.on('enter.intro', null);
108601                     context.history().on('change.intro', null);
108602                     nextStep();
108603                 }
108604             }
108605
108606
108607             function splitIntersection() {
108608                 if (!context.hasEntity(washingtonStreetID) ||
108609                     !context.hasEntity(twelfthAvenueID) ||
108610                     !context.hasEntity(eleventhAvenueEndID)) {
108611                     return continueTo(deleteLines);
108612                 }
108613
108614                 var node = selectMenuItem('split').node();
108615                 if (!node) { return continueTo(rightClickIntersection); }
108616
108617                 var wasChanged = false;
108618                 var menuCoords = context.map().mouseCoordinates();
108619                 _washingtonSegmentID = null;
108620
108621                 revealEditMenu(menuCoords, t('intro.lines.split_intersection',
108622                     { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') })
108623                 );
108624
108625                 context.map().on('move.intro drawn.intro', function() {
108626                     var node = selectMenuItem('split').node();
108627                     if (!wasChanged && !node) { return continueTo(rightClickIntersection); }
108628
108629                     revealEditMenu(menuCoords, t('intro.lines.split_intersection',
108630                         { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }),
108631                         { duration: 0 }
108632                     );
108633                 });
108634
108635                 context.history().on('change.intro', function(changed) {
108636                     wasChanged = true;
108637                     timeout(function() {
108638                         if (context.history().undoAnnotation() === t('operations.split.annotation.line')) {
108639                             _washingtonSegmentID = changed.created()[0].id;
108640                             continueTo(didSplit);
108641                         } else {
108642                             _washingtonSegmentID = null;
108643                             continueTo(retrySplit);
108644                         }
108645                     }, 300);  // after any transition (e.g. if user deleted intersection)
108646                 });
108647
108648                 function continueTo(nextStep) {
108649                     context.map().on('move.intro drawn.intro', null);
108650                     context.history().on('change.intro', null);
108651                     nextStep();
108652                 }
108653             }
108654
108655
108656             function retrySplit() {
108657                 context.enter(modeBrowse(context));
108658                 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
108659                 var advance = function() { continueTo(rightClickIntersection); };
108660
108661                 var padding = 60 * Math.pow(2, context.map().zoom() - 18);
108662                 var box = pad$2(eleventhAvenueEnd, padding, context);
108663                 reveal(box, t('intro.lines.retry_split'),
108664                     { buttonText: t('intro.ok'), buttonCallback: advance }
108665                 );
108666
108667                 context.map().on('move.intro drawn.intro', function() {
108668                     var padding = 60 * Math.pow(2, context.map().zoom() - 18);
108669                     var box = pad$2(eleventhAvenueEnd, padding, context);
108670                     reveal(box, t('intro.lines.retry_split'),
108671                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
108672                     );
108673                 });
108674
108675                 function continueTo(nextStep) {
108676                     context.map().on('move.intro drawn.intro', null);
108677                     nextStep();
108678                 }
108679             }
108680
108681
108682             function didSplit() {
108683                 if (!_washingtonSegmentID ||
108684                     !context.hasEntity(_washingtonSegmentID) ||
108685                     !context.hasEntity(washingtonStreetID) ||
108686                     !context.hasEntity(twelfthAvenueID) ||
108687                     !context.hasEntity(eleventhAvenueEndID)) {
108688                     return continueTo(rightClickIntersection);
108689                 }
108690
108691                 var ids = context.selectedIDs();
108692                 var string = 'intro.lines.did_split_' + (ids.length > 1 ? 'multi' : 'single');
108693                 var street = t('intro.graph.name.washington-street');
108694
108695                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
108696                 var box = pad$2(twelfthAvenue, padding, context);
108697                 box.width = box.width / 2;
108698                 reveal(box, t(string, { street1: street, street2: street }),
108699                     { duration: 500 }
108700                 );
108701
108702                 timeout(function() {
108703                     context.map().centerZoomEase(twelfthAvenue, 18, 500);
108704
108705                     context.map().on('move.intro drawn.intro', function() {
108706                         var padding = 200 * Math.pow(2, context.map().zoom() - 18);
108707                         var box = pad$2(twelfthAvenue, padding, context);
108708                         box.width = box.width / 2;
108709                         reveal(box, t(string, { street1: street, street2: street }),
108710                             { duration: 0 }
108711                         );
108712                     });
108713                 }, 600);  // after initial reveal and curtain cut
108714
108715                 context.on('enter.intro', function() {
108716                     var ids = context.selectedIDs();
108717                     if (ids.length === 1 && ids[0] === _washingtonSegmentID) {
108718                         continueTo(multiSelect);
108719                     }
108720                 });
108721
108722                 context.history().on('change.intro', function() {
108723                     if (!_washingtonSegmentID ||
108724                         !context.hasEntity(_washingtonSegmentID) ||
108725                         !context.hasEntity(washingtonStreetID) ||
108726                         !context.hasEntity(twelfthAvenueID) ||
108727                         !context.hasEntity(eleventhAvenueEndID)) {
108728                         return continueTo(rightClickIntersection);
108729                     }
108730                 });
108731
108732                 function continueTo(nextStep) {
108733                     context.map().on('move.intro drawn.intro', null);
108734                     context.on('enter.intro', null);
108735                     context.history().on('change.intro', null);
108736                     nextStep();
108737                 }
108738             }
108739
108740
108741             function multiSelect() {
108742                 if (!_washingtonSegmentID ||
108743                     !context.hasEntity(_washingtonSegmentID) ||
108744                     !context.hasEntity(washingtonStreetID) ||
108745                     !context.hasEntity(twelfthAvenueID) ||
108746                     !context.hasEntity(eleventhAvenueEndID)) {
108747                     return continueTo(rightClickIntersection);
108748                 }
108749
108750                 var ids = context.selectedIDs();
108751                 var hasWashington = ids.indexOf(_washingtonSegmentID) !== -1;
108752                 var hasTwelfth = ids.indexOf(twelfthAvenueID) !== -1;
108753
108754                 if (hasWashington && hasTwelfth) {
108755                     return continueTo(multiRightClick);
108756                 } else if (!hasWashington && !hasTwelfth) {
108757                     return continueTo(didSplit);
108758                 }
108759
108760                 context.map().centerZoomEase(twelfthAvenue, 18, 500);
108761
108762                 timeout(function() {
108763                     var selected, other, padding, box;
108764                     if (hasWashington) {
108765                         selected = t('intro.graph.name.washington-street');
108766                         other = t('intro.graph.name.12th-avenue');
108767                         padding = 60 * Math.pow(2, context.map().zoom() - 18);
108768                         box = pad$2(twelfthAvenueEnd, padding, context);
108769                         box.width *= 3;
108770                     } else {
108771                         selected = t('intro.graph.name.12th-avenue');
108772                         other = t('intro.graph.name.washington-street');
108773                         padding = 200 * Math.pow(2, context.map().zoom() - 18);
108774                         box = pad$2(twelfthAvenue, padding, context);
108775                         box.width /= 2;
108776                     }
108777
108778                     reveal(box,
108779                         t('intro.lines.multi_select', { selected: selected, other1: other, other2: other })
108780                     );
108781
108782                     context.map().on('move.intro drawn.intro', function() {
108783                         if (hasWashington) {
108784                             selected = t('intro.graph.name.washington-street');
108785                             other = t('intro.graph.name.12th-avenue');
108786                             padding = 60 * Math.pow(2, context.map().zoom() - 18);
108787                             box = pad$2(twelfthAvenueEnd, padding, context);
108788                             box.width *= 3;
108789                         } else {
108790                             selected = t('intro.graph.name.12th-avenue');
108791                             other = t('intro.graph.name.washington-street');
108792                             padding = 200 * Math.pow(2, context.map().zoom() - 18);
108793                             box = pad$2(twelfthAvenue, padding, context);
108794                             box.width /= 2;
108795                         }
108796
108797                         reveal(box,
108798                             t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }),
108799                             { duration: 0 }
108800                         );
108801                     });
108802
108803                     context.on('enter.intro', function() {
108804                         continueTo(multiSelect);
108805                     });
108806
108807                     context.history().on('change.intro', function() {
108808                         if (!_washingtonSegmentID ||
108809                             !context.hasEntity(_washingtonSegmentID) ||
108810                             !context.hasEntity(washingtonStreetID) ||
108811                             !context.hasEntity(twelfthAvenueID) ||
108812                             !context.hasEntity(eleventhAvenueEndID)) {
108813                             return continueTo(rightClickIntersection);
108814                         }
108815                     });
108816                 }, 600);
108817
108818                 function continueTo(nextStep) {
108819                     context.map().on('move.intro drawn.intro', null);
108820                     context.on('enter.intro', null);
108821                     context.history().on('change.intro', null);
108822                     nextStep();
108823                 }
108824             }
108825
108826
108827             function multiRightClick() {
108828                 if (!_washingtonSegmentID ||
108829                     !context.hasEntity(_washingtonSegmentID) ||
108830                     !context.hasEntity(washingtonStreetID) ||
108831                     !context.hasEntity(twelfthAvenueID) ||
108832                     !context.hasEntity(eleventhAvenueEndID)) {
108833                     return continueTo(rightClickIntersection);
108834                 }
108835
108836                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
108837                 var box = pad$2(twelfthAvenue, padding, context);
108838                 reveal(box, t('intro.lines.multi_rightclick'));
108839
108840                 context.map().on('move.intro drawn.intro', function() {
108841                     var padding = 200 * Math.pow(2, context.map().zoom() - 18);
108842                     var box = pad$2(twelfthAvenue, padding, context);
108843                     reveal(box, t('intro.lines.multi_rightclick'), { duration: 0 });
108844                 });
108845
108846                 d3_select(window).on('click.intro contextmenu.intro', function() {
108847                     timeout(function() {
108848                         var ids = context.selectedIDs();
108849                         if (ids.length === 2 &&
108850                             ids.indexOf(twelfthAvenueID) !== -1 &&
108851                             ids.indexOf(_washingtonSegmentID) !== -1) {
108852                                 var node = selectMenuItem('delete').node();
108853                                 if (!node) { return; }
108854                                 continueTo(multiDelete);
108855                         } else if (ids.length === 1 &&
108856                             ids.indexOf(_washingtonSegmentID) !== -1) {
108857                             return continueTo(multiSelect);
108858                         } else {
108859                             return continueTo(didSplit);
108860                         }
108861                     }, 300);  // after edit menu visible
108862                 }, true);
108863
108864                 context.history().on('change.intro', function() {
108865                     if (!_washingtonSegmentID ||
108866                         !context.hasEntity(_washingtonSegmentID) ||
108867                         !context.hasEntity(washingtonStreetID) ||
108868                         !context.hasEntity(twelfthAvenueID) ||
108869                         !context.hasEntity(eleventhAvenueEndID)) {
108870                         return continueTo(rightClickIntersection);
108871                     }
108872                 });
108873
108874                 function continueTo(nextStep) {
108875                     context.map().on('move.intro drawn.intro', null);
108876                     d3_select(window).on('click.intro contextmenu.intro', null, true);
108877                     context.history().on('change.intro', null);
108878                     nextStep();
108879                 }
108880             }
108881
108882
108883             function multiDelete() {
108884                 if (!_washingtonSegmentID ||
108885                     !context.hasEntity(_washingtonSegmentID) ||
108886                     !context.hasEntity(washingtonStreetID) ||
108887                     !context.hasEntity(twelfthAvenueID) ||
108888                     !context.hasEntity(eleventhAvenueEndID)) {
108889                     return continueTo(rightClickIntersection);
108890                 }
108891
108892                 var node = selectMenuItem('delete').node();
108893                 if (!node) { return continueTo(multiRightClick); }
108894
108895                 var menuCoords = context.map().mouseCoordinates();
108896                 revealEditMenu(menuCoords,
108897                     t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') })
108898                 );
108899
108900                 context.map().on('move.intro drawn.intro', function() {
108901                     revealEditMenu(menuCoords,
108902                         t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') }),
108903                         { duration: 0 }
108904                     );
108905                 });
108906
108907                 context.on('exit.intro', function() {
108908                     if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
108909                         return continueTo(multiSelect);  // left select mode but roads still exist
108910                     }
108911                 });
108912
108913                 context.history().on('change.intro', function() {
108914                     if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
108915                         continueTo(retryDelete);         // changed something but roads still exist
108916                     } else {
108917                         continueTo(play);
108918                     }
108919                 });
108920
108921                 function continueTo(nextStep) {
108922                     context.map().on('move.intro drawn.intro', null);
108923                     context.on('exit.intro', null);
108924                     context.history().on('change.intro', null);
108925                     nextStep();
108926                 }
108927             }
108928
108929
108930             function retryDelete() {
108931                 context.enter(modeBrowse(context));
108932
108933                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
108934                 var box = pad$2(twelfthAvenue, padding, context);
108935                 reveal(box, t('intro.lines.retry_delete'), {
108936                     buttonText: t('intro.ok'),
108937                     buttonCallback: function() { continueTo(multiSelect); }
108938                 });
108939
108940                 function continueTo(nextStep) {
108941                     nextStep();
108942                 }
108943             }
108944
108945
108946             function play() {
108947                 dispatch$1.call('done');
108948                 reveal('#id-container',
108949                     t('intro.lines.play', { next: t('intro.buildings.title') }), {
108950                         tooltipBox: '.intro-nav-wrap .chapter-building',
108951                         buttonText: t('intro.ok'),
108952                         buttonCallback: function() { reveal('#id-container'); }
108953                     }
108954                 );
108955            }
108956
108957
108958             chapter.enter = function() {
108959                 addLine();
108960             };
108961
108962
108963             chapter.exit = function() {
108964                 timeouts.forEach(window.clearTimeout);
108965                 d3_select(window).on('mousedown.intro', null, true);
108966                 context.on('enter.intro exit.intro', null);
108967                 context.map().on('move.intro drawn.intro', null);
108968                 context.history().on('change.intro', null);
108969                 d3_select('.inspector-wrap').on('wheel.intro', null);
108970                 d3_select('.preset-list-button').on('click.intro', null);
108971             };
108972
108973
108974             chapter.restart = function() {
108975                 chapter.exit();
108976                 chapter.enter();
108977             };
108978
108979
108980             return utilRebind(chapter, dispatch$1, 'on');
108981         }
108982
108983         function uiIntroBuilding(context, reveal) {
108984             var dispatch$1 = dispatch('done');
108985             var house = [-85.62815, 41.95638];
108986             var tank = [-85.62732, 41.95347];
108987             var buildingCatetory = context.presets().item('category-building');
108988             var housePreset = context.presets().item('building/house');
108989             var tankPreset = context.presets().item('man_made/storage_tank');
108990             var timeouts = [];
108991             var _houseID = null;
108992             var _tankID = null;
108993
108994
108995             var chapter = {
108996                 title: 'intro.buildings.title'
108997             };
108998
108999
109000             function timeout(f, t) {
109001                 timeouts.push(window.setTimeout(f, t));
109002             }
109003
109004
109005             function eventCancel() {
109006                 event.stopPropagation();
109007                 event.preventDefault();
109008             }
109009
109010
109011             function revealHouse(center, text, options) {
109012                 var padding = 160 * Math.pow(2, context.map().zoom() - 20);
109013                 var box = pad$2(center, padding, context);
109014                 reveal(box, text, options);
109015             }
109016
109017
109018             function revealTank(center, text, options) {
109019                 var padding = 190 * Math.pow(2, context.map().zoom() - 19.5);
109020                 var box = pad$2(center, padding, context);
109021                 reveal(box, text, options);
109022             }
109023
109024
109025             function revealEditMenu(loc, text, options) {
109026                 var rect = context.surfaceRect();
109027                 var point = context.curtainProjection(loc);
109028                 var pad = 40;
109029                 var width = 250 + (2 * pad);
109030                 var height = 350;
109031                 var startX = rect.left + point[0];
109032                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
109033                 var box = {
109034                     left: left,
109035                     top: point[1] + rect.top - 60,
109036                     width: width,
109037                     height: height
109038                 };
109039                 reveal(box, text, options);
109040             }
109041
109042
109043             function addHouse() {
109044                 context.enter(modeBrowse(context));
109045                 context.history().reset('initial');
109046                 _houseID = null;
109047
109048                 var msec = transitionTime(house, context.map().center());
109049                 if (msec) { reveal(null, null, { duration: 0 }); }
109050                 context.map().centerZoomEase(house, 19, msec);
109051
109052                 timeout(function() {
109053                     var tooltip = reveal('button.add-area',
109054                         t('intro.buildings.add_building', { button: icon('#iD-icon-area', 'pre-text') }));
109055
109056                     tooltip.selectAll('.popover-inner')
109057                         .insert('svg', 'span')
109058                         .attr('class', 'tooltip-illustration')
109059                         .append('use')
109060                         .attr('xlink:href', '#iD-graphic-buildings');
109061
109062                     context.on('enter.intro', function(mode) {
109063                         if (mode.id !== 'add-area') { return; }
109064                         continueTo(startHouse);
109065                     });
109066                 }, msec + 100);
109067
109068                 function continueTo(nextStep) {
109069                     context.on('enter.intro', null);
109070                     nextStep();
109071                 }
109072             }
109073
109074
109075             function startHouse() {
109076                 if (context.mode().id !== 'add-area') {
109077                     return continueTo(addHouse);
109078                 }
109079
109080                 _houseID = null;
109081                 context.map().zoomEase(20, 500);
109082
109083                 timeout(function() {
109084                     revealHouse(house, t('intro.buildings.start_building'));
109085
109086                     context.map().on('move.intro drawn.intro', function() {
109087                         revealHouse(house, t('intro.buildings.start_building'), { duration: 0 });
109088                     });
109089
109090                     context.on('enter.intro', function(mode) {
109091                         if (mode.id !== 'draw-area') { return chapter.restart(); }
109092                         continueTo(continueHouse);
109093                     });
109094
109095                 }, 550);  // after easing
109096
109097                 function continueTo(nextStep) {
109098                     context.map().on('move.intro drawn.intro', null);
109099                     context.on('enter.intro', null);
109100                     nextStep();
109101                 }
109102             }
109103
109104
109105             function continueHouse() {
109106                 if (context.mode().id !== 'draw-area') {
109107                     return continueTo(addHouse);
109108                 }
109109
109110                 _houseID = null;
109111
109112                 revealHouse(house, t('intro.buildings.continue_building'));
109113
109114                 context.map().on('move.intro drawn.intro', function() {
109115                     revealHouse(house, t('intro.buildings.continue_building'), { duration: 0 });
109116                 });
109117
109118                 context.on('enter.intro', function(mode) {
109119                     if (mode.id === 'draw-area') {
109120                         return;
109121                     } else if (mode.id === 'select') {
109122                         var graph = context.graph();
109123                         var way = context.entity(context.selectedIDs()[0]);
109124                         var nodes = graph.childNodes(way);
109125                         var points = utilArrayUniq(nodes)
109126                             .map(function(n) { return context.projection(n.loc); });
109127
109128                         if (isMostlySquare(points)) {
109129                             _houseID = way.id;
109130                             return continueTo(chooseCategoryBuilding);
109131                         } else {
109132                             return continueTo(retryHouse);
109133                         }
109134
109135                     } else {
109136                         return chapter.restart();
109137                     }
109138                 });
109139
109140                 function continueTo(nextStep) {
109141                     context.map().on('move.intro drawn.intro', null);
109142                     context.on('enter.intro', null);
109143                     nextStep();
109144                 }
109145             }
109146
109147
109148             function retryHouse() {
109149                 var onClick = function() { continueTo(addHouse); };
109150
109151                 revealHouse(house, t('intro.buildings.retry_building'),
109152                     { buttonText: t('intro.ok'), buttonCallback: onClick }
109153                 );
109154
109155                 context.map().on('move.intro drawn.intro', function() {
109156                     revealHouse(house, t('intro.buildings.retry_building'),
109157                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
109158                     );
109159                 });
109160
109161                 function continueTo(nextStep) {
109162                     context.map().on('move.intro drawn.intro', null);
109163                     nextStep();
109164                 }
109165             }
109166
109167
109168             function chooseCategoryBuilding() {
109169                 if (!_houseID || !context.hasEntity(_houseID)) {
109170                     return addHouse();
109171                 }
109172                 var ids = context.selectedIDs();
109173                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
109174                     context.enter(modeSelect(context, [_houseID]));
109175                 }
109176
109177                 // disallow scrolling
109178                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
109179
109180                 timeout(function() {
109181                     // reset pane, in case user somehow happened to change it..
109182                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
109183
109184                     var button = d3_select('.preset-category-building .preset-list-button');
109185
109186                     reveal(button.node(),
109187                         t('intro.buildings.choose_category_building', { category: buildingCatetory.name() })
109188                     );
109189
109190                     button.on('click.intro', function() {
109191                         button.on('click.intro', null);
109192                         continueTo(choosePresetHouse);
109193                     });
109194
109195                 }, 400);  // after preset list pane visible..
109196
109197
109198                 context.on('enter.intro', function(mode) {
109199                     if (!_houseID || !context.hasEntity(_houseID)) {
109200                         return continueTo(addHouse);
109201                     }
109202                     var ids = context.selectedIDs();
109203                     if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
109204                         return continueTo(chooseCategoryBuilding);
109205                     }
109206                 });
109207
109208                 function continueTo(nextStep) {
109209                     d3_select('.inspector-wrap').on('wheel.intro', null);
109210                     d3_select('.preset-list-button').on('click.intro', null);
109211                     context.on('enter.intro', null);
109212                     nextStep();
109213                 }
109214             }
109215
109216
109217             function choosePresetHouse() {
109218                 if (!_houseID || !context.hasEntity(_houseID)) {
109219                     return addHouse();
109220                 }
109221                 var ids = context.selectedIDs();
109222                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
109223                     context.enter(modeSelect(context, [_houseID]));
109224                 }
109225
109226                 // disallow scrolling
109227                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
109228
109229                 timeout(function() {
109230                     // reset pane, in case user somehow happened to change it..
109231                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
109232
109233                     var button = d3_select('.preset-building-house .preset-list-button');
109234
109235                     reveal(button.node(),
109236                         t('intro.buildings.choose_preset_house', { preset: housePreset.name() }),
109237                         { duration: 300 }
109238                     );
109239
109240                     button.on('click.intro', function() {
109241                         button.on('click.intro', null);
109242                         continueTo(closeEditorHouse);
109243                     });
109244
109245                 }, 400);  // after preset list pane visible..
109246
109247                 context.on('enter.intro', function(mode) {
109248                     if (!_houseID || !context.hasEntity(_houseID)) {
109249                         return continueTo(addHouse);
109250                     }
109251                     var ids = context.selectedIDs();
109252                     if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
109253                         return continueTo(chooseCategoryBuilding);
109254                     }
109255                 });
109256
109257                 function continueTo(nextStep) {
109258                     d3_select('.inspector-wrap').on('wheel.intro', null);
109259                     d3_select('.preset-list-button').on('click.intro', null);
109260                     context.on('enter.intro', null);
109261                     nextStep();
109262                 }
109263             }
109264
109265
109266             function closeEditorHouse() {
109267                 if (!_houseID || !context.hasEntity(_houseID)) {
109268                     return addHouse();
109269                 }
109270                 var ids = context.selectedIDs();
109271                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
109272                     context.enter(modeSelect(context, [_houseID]));
109273                 }
109274
109275                 context.history().checkpoint('hasHouse');
109276
109277                 context.on('exit.intro', function() {
109278                     continueTo(rightClickHouse);
109279                 });
109280
109281                 timeout(function() {
109282                     reveal('.entity-editor-pane',
109283                         t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
109284                     );
109285                 }, 500);
109286
109287                 function continueTo(nextStep) {
109288                     context.on('exit.intro', null);
109289                     nextStep();
109290                 }
109291             }
109292
109293
109294             function rightClickHouse() {
109295                 if (!_houseID) { return chapter.restart(); }
109296
109297                 context.enter(modeBrowse(context));
109298                 context.history().reset('hasHouse');
109299                 var zoom = context.map().zoom();
109300                 if (zoom < 20) {
109301                     zoom = 20;
109302                 }
109303                 context.map().centerZoomEase(house, zoom, 500);
109304
109305                 context.on('enter.intro', function(mode) {
109306                     if (mode.id !== 'select') { return; }
109307                     var ids = context.selectedIDs();
109308                     if (ids.length !== 1 || ids[0] !== _houseID) { return; }
109309
109310                     timeout(function() {
109311                         var node = selectMenuItem('orthogonalize').node();
109312                         if (!node) { return; }
109313                         continueTo(clickSquare);
109314                     }, 300);  // after menu visible
109315                 });
109316
109317                 context.map().on('move.intro drawn.intro', function() {
109318                     revealHouse(house, t('intro.buildings.rightclick_building'), { duration: 0 });
109319                 });
109320
109321                 context.history().on('change.intro', function() {
109322                     continueTo(rightClickHouse);
109323                 });
109324
109325                 function continueTo(nextStep) {
109326                     context.on('enter.intro', null);
109327                     context.map().on('move.intro drawn.intro', null);
109328                     context.history().on('change.intro', null);
109329                     nextStep();
109330                 }
109331             }
109332
109333
109334             function clickSquare() {
109335                 if (!_houseID) { return chapter.restart(); }
109336                 var entity = context.hasEntity(_houseID);
109337                 if (!entity) { return continueTo(rightClickHouse); }
109338
109339                 var node = selectMenuItem('orthogonalize').node();
109340                 if (!node) { return continueTo(rightClickHouse); }
109341
109342                 var wasChanged = false;
109343                 var menuCoords = context.map().mouseCoordinates();
109344
109345                 revealEditMenu(menuCoords,
109346                     t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') })
109347                 );
109348
109349                 context.on('enter.intro', function(mode) {
109350                     if (mode.id === 'browse') {
109351                         continueTo(rightClickHouse);
109352                     } else if (mode.id === 'move' || mode.id === 'rotate') {
109353                         continueTo(retryClickSquare);
109354                     }
109355                 });
109356
109357                 context.map().on('move.intro drawn.intro', function() {
109358                     var node = selectMenuItem('orthogonalize').node();
109359                     if (!wasChanged && !node) { return continueTo(rightClickHouse); }
109360
109361                     revealEditMenu(menuCoords,
109362                         t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') }),
109363                         { duration: 0 }
109364                     );
109365                 });
109366
109367                 context.history().on('change.intro', function() {
109368                     wasChanged = true;
109369                     context.history().on('change.intro', null);
109370
109371                     // Something changed.  Wait for transition to complete and check undo annotation.
109372                     timeout(function() {
109373                         if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.feature.single')) {
109374                             continueTo(doneSquare);
109375                         } else {
109376                             continueTo(retryClickSquare);
109377                         }
109378                     }, 500);  // after transitioned actions
109379                 });
109380
109381                 function continueTo(nextStep) {
109382                     context.on('enter.intro', null);
109383                     context.map().on('move.intro drawn.intro', null);
109384                     context.history().on('change.intro', null);
109385                     nextStep();
109386                 }
109387             }
109388
109389
109390             function retryClickSquare() {
109391                 context.enter(modeBrowse(context));
109392
109393                 revealHouse(house, t('intro.buildings.retry_square'), {
109394                     buttonText: t('intro.ok'),
109395                     buttonCallback: function() { continueTo(rightClickHouse); }
109396                 });
109397
109398                 function continueTo(nextStep) {
109399                     nextStep();
109400                 }
109401             }
109402
109403
109404             function doneSquare() {
109405                 context.history().checkpoint('doneSquare');
109406
109407                 revealHouse(house, t('intro.buildings.done_square'), {
109408                     buttonText: t('intro.ok'),
109409                     buttonCallback: function() { continueTo(addTank); }
109410                 });
109411
109412                 function continueTo(nextStep) {
109413                     nextStep();
109414                 }
109415             }
109416
109417
109418             function addTank() {
109419                 context.enter(modeBrowse(context));
109420                 context.history().reset('doneSquare');
109421                 _tankID = null;
109422
109423                 var msec = transitionTime(tank, context.map().center());
109424                 if (msec) { reveal(null, null, { duration: 0 }); }
109425                 context.map().centerZoomEase(tank, 19.5, msec);
109426
109427                 timeout(function() {
109428                     reveal('button.add-area',
109429                         t('intro.buildings.add_tank', { button: icon('#iD-icon-area', 'pre-text') })
109430                     );
109431
109432                     context.on('enter.intro', function(mode) {
109433                         if (mode.id !== 'add-area') { return; }
109434                         continueTo(startTank);
109435                     });
109436                 }, msec + 100);
109437
109438                 function continueTo(nextStep) {
109439                     context.on('enter.intro', null);
109440                     nextStep();
109441                 }
109442             }
109443
109444
109445             function startTank() {
109446                 if (context.mode().id !== 'add-area') {
109447                     return continueTo(addTank);
109448                 }
109449
109450                 _tankID = null;
109451
109452                 timeout(function() {
109453                     revealTank(tank, t('intro.buildings.start_tank'));
109454
109455                     context.map().on('move.intro drawn.intro', function() {
109456                         revealTank(tank, t('intro.buildings.start_tank'), { duration: 0 });
109457                     });
109458
109459                     context.on('enter.intro', function(mode) {
109460                         if (mode.id !== 'draw-area') { return chapter.restart(); }
109461                         continueTo(continueTank);
109462                     });
109463
109464                 }, 550);  // after easing
109465
109466                 function continueTo(nextStep) {
109467                     context.map().on('move.intro drawn.intro', null);
109468                     context.on('enter.intro', null);
109469                     nextStep();
109470                 }
109471             }
109472
109473
109474             function continueTank() {
109475                 if (context.mode().id !== 'draw-area') {
109476                     return continueTo(addTank);
109477                 }
109478
109479                 _tankID = null;
109480
109481                 revealTank(tank, t('intro.buildings.continue_tank'));
109482
109483                 context.map().on('move.intro drawn.intro', function() {
109484                     revealTank(tank, t('intro.buildings.continue_tank'), { duration: 0 });
109485                 });
109486
109487                 context.on('enter.intro', function(mode) {
109488                     if (mode.id === 'draw-area') {
109489                         return;
109490                     } else if (mode.id === 'select') {
109491                         _tankID = context.selectedIDs()[0];
109492                         return continueTo(searchPresetTank);
109493                     } else {
109494                         return continueTo(addTank);
109495                     }
109496                 });
109497
109498                 function continueTo(nextStep) {
109499                     context.map().on('move.intro drawn.intro', null);
109500                     context.on('enter.intro', null);
109501                     nextStep();
109502                 }
109503             }
109504
109505
109506             function searchPresetTank() {
109507                 if (!_tankID || !context.hasEntity(_tankID)) {
109508                     return addTank();
109509                 }
109510                 var ids = context.selectedIDs();
109511                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
109512                     context.enter(modeSelect(context, [_tankID]));
109513                 }
109514
109515                 // disallow scrolling
109516                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
109517
109518                 timeout(function() {
109519                     // reset pane, in case user somehow happened to change it..
109520                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
109521
109522                     d3_select('.preset-search-input')
109523                         .on('keydown.intro', null)
109524                         .on('keyup.intro', checkPresetSearch);
109525
109526                     reveal('.preset-search-input',
109527                         t('intro.buildings.search_tank', { preset: tankPreset.name() })
109528                     );
109529                 }, 400);  // after preset list pane visible..
109530
109531                 context.on('enter.intro', function(mode) {
109532                     if (!_tankID || !context.hasEntity(_tankID)) {
109533                         return continueTo(addTank);
109534                     }
109535
109536                     var ids = context.selectedIDs();
109537                     if (mode.id !== 'select' || !ids.length || ids[0] !== _tankID) {
109538                         // keep the user's area selected..
109539                         context.enter(modeSelect(context, [_tankID]));
109540
109541                         // reset pane, in case user somehow happened to change it..
109542                         d3_select('.inspector-wrap .panewrap').style('right', '-100%');
109543                         // disallow scrolling
109544                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
109545
109546                         d3_select('.preset-search-input')
109547                             .on('keydown.intro', null)
109548                             .on('keyup.intro', checkPresetSearch);
109549
109550                         reveal('.preset-search-input',
109551                             t('intro.buildings.search_tank', { preset: tankPreset.name() })
109552                         );
109553
109554                         context.history().on('change.intro', null);
109555                     }
109556                 });
109557
109558                 function checkPresetSearch() {
109559                     var first = d3_select('.preset-list-item:first-child');
109560
109561                     if (first.classed('preset-man_made-storage_tank')) {
109562                         reveal(first.select('.preset-list-button').node(),
109563                             t('intro.buildings.choose_tank', { preset: tankPreset.name() }),
109564                             { duration: 300 }
109565                         );
109566
109567                         d3_select('.preset-search-input')
109568                             .on('keydown.intro', eventCancel, true)
109569                             .on('keyup.intro', null);
109570
109571                         context.history().on('change.intro', function() {
109572                             continueTo(closeEditorTank);
109573                         });
109574                     }
109575                 }
109576
109577                 function continueTo(nextStep) {
109578                     d3_select('.inspector-wrap').on('wheel.intro', null);
109579                     context.on('enter.intro', null);
109580                     context.history().on('change.intro', null);
109581                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
109582                     nextStep();
109583                 }
109584             }
109585
109586
109587             function closeEditorTank() {
109588                 if (!_tankID || !context.hasEntity(_tankID)) {
109589                     return addTank();
109590                 }
109591                 var ids = context.selectedIDs();
109592                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
109593                     context.enter(modeSelect(context, [_tankID]));
109594                 }
109595
109596                 context.history().checkpoint('hasTank');
109597
109598                 context.on('exit.intro', function() {
109599                     continueTo(rightClickTank);
109600                 });
109601
109602                 timeout(function() {
109603                     reveal('.entity-editor-pane',
109604                         t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
109605                     );
109606                 }, 500);
109607
109608                 function continueTo(nextStep) {
109609                     context.on('exit.intro', null);
109610                     nextStep();
109611                 }
109612             }
109613
109614
109615             function rightClickTank() {
109616                 if (!_tankID) { return continueTo(addTank); }
109617
109618                 context.enter(modeBrowse(context));
109619                 context.history().reset('hasTank');
109620                 context.map().centerEase(tank, 500);
109621
109622                 timeout(function() {
109623                     context.on('enter.intro', function(mode) {
109624                         if (mode.id !== 'select') { return; }
109625                         var ids = context.selectedIDs();
109626                         if (ids.length !== 1 || ids[0] !== _tankID) { return; }
109627
109628                         timeout(function() {
109629                             var node = selectMenuItem('circularize').node();
109630                             if (!node) { return; }
109631                             continueTo(clickCircle);
109632                         }, 300);  // after menu visible
109633                     });
109634
109635                     revealTank(tank, t('intro.buildings.rightclick_tank'));
109636
109637                     context.map().on('move.intro drawn.intro', function() {
109638                         revealTank(tank, t('intro.buildings.rightclick_tank'), { duration: 0 });
109639                     });
109640
109641                     context.history().on('change.intro', function() {
109642                         continueTo(rightClickTank);
109643                     });
109644
109645                 }, 600);
109646
109647                 function continueTo(nextStep) {
109648                     context.on('enter.intro', null);
109649                     context.map().on('move.intro drawn.intro', null);
109650                     context.history().on('change.intro', null);
109651                     nextStep();
109652                 }
109653             }
109654
109655
109656             function clickCircle() {
109657                 if (!_tankID) { return chapter.restart(); }
109658                 var entity = context.hasEntity(_tankID);
109659                 if (!entity) { return continueTo(rightClickTank); }
109660
109661                 var node = selectMenuItem('circularize').node();
109662                 if (!node) { return continueTo(rightClickTank); }
109663
109664                 var wasChanged = false;
109665                 var menuCoords = context.map().mouseCoordinates();
109666
109667                 revealEditMenu(menuCoords,
109668                     t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') })
109669                 );
109670
109671                 context.on('enter.intro', function(mode) {
109672                     if (mode.id === 'browse') {
109673                         continueTo(rightClickTank);
109674                     } else if (mode.id === 'move' || mode.id === 'rotate') {
109675                         continueTo(retryClickCircle);
109676                     }
109677                 });
109678
109679                 context.map().on('move.intro drawn.intro', function() {
109680                     var node = selectMenuItem('circularize').node();
109681                     if (!wasChanged && !node) { return continueTo(rightClickTank); }
109682
109683                     revealEditMenu(menuCoords,
109684                         t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') }),
109685                         { duration: 0 }
109686                     );
109687                 });
109688
109689                 context.history().on('change.intro', function() {
109690                     wasChanged = true;
109691                     context.history().on('change.intro', null);
109692
109693                     // Something changed.  Wait for transition to complete and check undo annotation.
109694                     timeout(function() {
109695                         if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) {
109696                             continueTo(play);
109697                         } else {
109698                             continueTo(retryClickCircle);
109699                         }
109700                     }, 500);  // after transitioned actions
109701                 });
109702
109703                 function continueTo(nextStep) {
109704                     context.on('enter.intro', null);
109705                     context.map().on('move.intro drawn.intro', null);
109706                     context.history().on('change.intro', null);
109707                     nextStep();
109708                 }
109709             }
109710
109711
109712             function retryClickCircle() {
109713                 context.enter(modeBrowse(context));
109714
109715                 revealTank(tank, t('intro.buildings.retry_circle'), {
109716                     buttonText: t('intro.ok'),
109717                     buttonCallback: function() { continueTo(rightClickTank); }
109718                 });
109719
109720                 function continueTo(nextStep) {
109721                     nextStep();
109722                 }
109723             }
109724
109725
109726             function play() {
109727                 dispatch$1.call('done');
109728                 reveal('#id-container',
109729                     t('intro.buildings.play', { next: t('intro.startediting.title') }), {
109730                         tooltipBox: '.intro-nav-wrap .chapter-startEditing',
109731                         buttonText: t('intro.ok'),
109732                         buttonCallback: function() { reveal('#id-container'); }
109733                     }
109734                 );
109735             }
109736
109737
109738             chapter.enter = function() {
109739                 addHouse();
109740             };
109741
109742
109743             chapter.exit = function() {
109744                 timeouts.forEach(window.clearTimeout);
109745                 context.on('enter.intro exit.intro', null);
109746                 context.map().on('move.intro drawn.intro', null);
109747                 context.history().on('change.intro', null);
109748                 d3_select('.inspector-wrap').on('wheel.intro', null);
109749                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
109750                 d3_select('.more-fields .combobox-input').on('click.intro', null);
109751             };
109752
109753
109754             chapter.restart = function() {
109755                 chapter.exit();
109756                 chapter.enter();
109757             };
109758
109759
109760             return utilRebind(chapter, dispatch$1, 'on');
109761         }
109762
109763         function uiIntroStartEditing(context, reveal) {
109764             var dispatch$1 = dispatch('done', 'startEditing');
109765             var modalSelection = d3_select(null);
109766
109767
109768             var chapter = {
109769                 title: 'intro.startediting.title'
109770             };
109771
109772             function showHelp() {
109773                 reveal('.map-control.help-control',
109774                     t('intro.startediting.help', { button: icon('#iD-icon-help', 'pre-text'), key: t('help.key') }), {
109775                         buttonText: t('intro.ok'),
109776                         buttonCallback: function() { shortcuts(); }
109777                     }
109778                 );
109779             }
109780
109781             function shortcuts() {
109782                 reveal('.map-control.help-control',
109783                     t('intro.startediting.shortcuts', { key: t('shortcuts.toggle.key') }), {
109784                         buttonText: t('intro.ok'),
109785                         buttonCallback: function() { showSave(); }
109786                     }
109787                 );
109788             }
109789
109790             function showSave() {
109791                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
109792                 reveal('#bar button.save',
109793                     t('intro.startediting.save'), {
109794                         buttonText: t('intro.ok'),
109795                         buttonCallback: function() { showStart(); }
109796                     }
109797                 );
109798             }
109799
109800             function showStart() {
109801                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
109802
109803                 modalSelection = uiModal(context.container());
109804
109805                 modalSelection.select('.modal')
109806                     .attr('class', 'modal-splash modal col6');
109807
109808                 modalSelection.selectAll('.close').remove();
109809
109810                 var startbutton = modalSelection.select('.content')
109811                     .attr('class', 'fillL')
109812                     .append('button')
109813                         .attr('class', 'modal-section huge-modal-button')
109814                         .on('click', function() {
109815                             modalSelection.remove();
109816                         });
109817
109818                     startbutton
109819                         .append('svg')
109820                         .attr('class', 'illustration')
109821                         .append('use')
109822                         .attr('xlink:href', '#iD-logo-walkthrough');
109823
109824                     startbutton
109825                         .append('h2')
109826                         .text(t('intro.startediting.start'));
109827
109828                 dispatch$1.call('startEditing');
109829             }
109830
109831
109832             chapter.enter = function() {
109833                 showHelp();
109834             };
109835
109836
109837             chapter.exit = function() {
109838                 modalSelection.remove();
109839                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
109840             };
109841
109842
109843             return utilRebind(chapter, dispatch$1, 'on');
109844         }
109845
109846         var chapterUi = {
109847             welcome: uiIntroWelcome,
109848             navigation: uiIntroNavigation,
109849             point: uiIntroPoint,
109850             area: uiIntroArea,
109851             line: uiIntroLine,
109852             building: uiIntroBuilding,
109853             startEditing: uiIntroStartEditing
109854         };
109855
109856         var chapterFlow = [
109857             'welcome',
109858             'navigation',
109859             'point',
109860             'area',
109861             'line',
109862             'building',
109863             'startEditing'
109864         ];
109865
109866
109867         function uiIntro(context) {
109868             var INTRO_IMAGERY = 'EsriWorldImageryClarity';
109869             var introGraph = {};
109870             var _currChapter;
109871
109872             // create entities for intro graph and localize names
109873             for (var id in dataIntroGraph) {
109874                 introGraph[id] = osmEntity(localize(dataIntroGraph[id]));
109875             }
109876
109877
109878             function intro(selection) {
109879                 context.enter(modeBrowse(context));
109880
109881                 // Save current map state
109882                 var osm = context.connection();
109883                 var history = context.history().toJSON();
109884                 var hash = window.location.hash;
109885                 var center = context.map().center();
109886                 var zoom = context.map().zoom();
109887                 var background = context.background().baseLayerSource();
109888                 var overlays = context.background().overlayLayerSources();
109889                 var opacity = d3_selectAll('#map .layer-background').style('opacity');
109890                 var caches = osm && osm.caches();
109891                 var baseEntities = context.history().graph().base().entities;
109892
109893                 // Show sidebar and disable the sidebar resizing button
109894                 // (this needs to be before `context.inIntro(true)`)
109895                 context.ui().sidebar.expand();
109896                 d3_selectAll('button.sidebar-toggle').classed('disabled', true);
109897
109898                 // Block saving
109899                 context.inIntro(true);
109900
109901                 // Load semi-real data used in intro
109902                 if (osm) { osm.toggle(false).reset(); }
109903                 context.history().reset();
109904                 context.history().merge(Object.values(coreGraph().load(introGraph).entities));
109905                 context.history().checkpoint('initial');
109906
109907                 // Setup imagery
109908                 var imagery = context.background().findSource(INTRO_IMAGERY);
109909                 if (imagery) {
109910                     context.background().baseLayerSource(imagery);
109911                 } else {
109912                     context.background().bing();
109913                 }
109914                 overlays.forEach(function(d) {
109915                     context.background().toggleOverlayLayer(d);
109916                 });
109917
109918                 // Setup data layers (only OSM)
109919                 var layers = context.layers();
109920                 layers.all().forEach(function(item) {
109921                     // if the layer has the function `enabled`
109922                     if (typeof item.layer.enabled === 'function') {
109923                         item.layer.enabled(item.id === 'osm');
109924                     }
109925                 });
109926
109927
109928                 d3_selectAll('#map .layer-background').style('opacity', 1);
109929
109930                 var curtain = uiCurtain();
109931                 selection.call(curtain);
109932
109933                 // Store that the user started the walkthrough..
109934                 context.storage('walkthrough_started', 'yes');
109935
109936                 // Restore previous walkthrough progress..
109937                 var storedProgress = context.storage('walkthrough_progress') || '';
109938                 var progress = storedProgress.split(';').filter(Boolean);
109939
109940                 var chapters = chapterFlow.map(function(chapter, i) {
109941                     var s = chapterUi[chapter](context, curtain.reveal)
109942                         .on('done', function() {
109943                             context.presets().init();  // clear away "recent" presets
109944
109945                             buttons.filter(function(d) {
109946                                 return d.title === s.title;
109947                             }).classed('finished', true);
109948
109949                             if (i < chapterFlow.length - 1) {
109950                                 var next = chapterFlow[i + 1];
109951                                 d3_select('button.chapter-' + next)
109952                                     .classed('next', true);
109953                             }
109954
109955                             // Store walkthrough progress..
109956                             progress.push(chapter);
109957                             context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
109958                         });
109959                     return s;
109960                 });
109961
109962                 chapters[chapters.length - 1].on('startEditing', function() {
109963                     // Store walkthrough progress..
109964                     progress.push('startEditing');
109965                     context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
109966
109967                     // Store if walkthrough is completed..
109968                     var incomplete = utilArrayDifference(chapterFlow, progress);
109969                     if (!incomplete.length) {
109970                         context.storage('walkthrough_completed', 'yes');
109971                     }
109972
109973                     curtain.remove();
109974                     navwrap.remove();
109975                     d3_selectAll('#map .layer-background').style('opacity', opacity);
109976                     d3_selectAll('button.sidebar-toggle').classed('disabled', false);
109977                     if (osm) { osm.toggle(true).reset().caches(caches); }
109978                     context.history().reset().merge(Object.values(baseEntities));
109979                     context.background().baseLayerSource(background);
109980                     overlays.forEach(function(d) { context.background().toggleOverlayLayer(d); });
109981                     if (history) { context.history().fromJSON(history, false); }
109982                     context.map().centerZoom(center, zoom);
109983                     window.location.replace(hash);
109984                     context.inIntro(false);
109985                 });
109986
109987                 var navwrap = selection
109988                     .append('div')
109989                     .attr('class', 'intro-nav-wrap fillD');
109990
109991                 navwrap
109992                     .append('svg')
109993                     .attr('class', 'intro-nav-wrap-logo')
109994                     .append('use')
109995                     .attr('xlink:href', '#iD-logo-walkthrough');
109996
109997                 var buttonwrap = navwrap
109998                     .append('div')
109999                     .attr('class', 'joined')
110000                     .selectAll('button.chapter');
110001
110002                 var buttons = buttonwrap
110003                     .data(chapters)
110004                     .enter()
110005                     .append('button')
110006                     .attr('class', function(d, i) { return 'chapter chapter-' + chapterFlow[i]; })
110007                     .on('click', enterChapter);
110008
110009                 buttons
110010                     .append('span')
110011                     .text(function(d) { return t(d.title); });
110012
110013                 buttons
110014                     .append('span')
110015                     .attr('class', 'status')
110016                     .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
110017
110018                 enterChapter(chapters[0]);
110019
110020
110021                 function enterChapter(newChapter) {
110022                     if (_currChapter) { _currChapter.exit(); }
110023                     context.enter(modeBrowse(context));
110024
110025                     _currChapter = newChapter;
110026                     _currChapter.enter();
110027
110028                     buttons
110029                         .classed('next', false)
110030                         .classed('active', function(d) {
110031                             return d.title === _currChapter.title;
110032                         });
110033                 }
110034             }
110035
110036
110037             return intro;
110038         }
110039
110040         function uiShortcuts(context) {
110041             var detected = utilDetect();
110042             var _activeTab = 0;
110043             var _modalSelection;
110044             var _selection = d3_select(null);
110045
110046
110047             context.keybinding()
110048                 .on([t('shortcuts.toggle.key'), '?'], function () {
110049                     if (d3_selectAll('.modal-shortcuts').size()) {  // already showing
110050                         if (_modalSelection) {
110051                             _modalSelection.close();
110052                             _modalSelection = null;
110053                         }
110054                     } else {
110055                         _modalSelection = uiModal(_selection);
110056                         shortcutsModal(_modalSelection);
110057                     }
110058                 });
110059
110060
110061             function shortcutsModal(_modalSelection) {
110062                 _modalSelection.select('.modal')
110063                     .classed('modal-shortcuts', true);
110064
110065                 var shortcutsModal = _modalSelection.select('.content');
110066
110067                 shortcutsModal
110068                     .append('div')
110069                     .attr('class', 'modal-section')
110070                     .append('h3')
110071                     .text(t('shortcuts.title'));
110072
110073                 shortcutsModal
110074                     .call(render);
110075             }
110076
110077
110078             function render(selection) {
110079                 var wrapper = selection
110080                     .selectAll('.wrapper')
110081                     .data([0]);
110082
110083                 var wrapperEnter = wrapper
110084                     .enter()
110085                     .append('div')
110086                     .attr('class', 'wrapper modal-section');
110087
110088                 var tabsBar = wrapperEnter
110089                     .append('div')
110090                     .attr('class', 'tabs-bar');
110091
110092                 var shortcutsList = wrapperEnter
110093                     .append('div')
110094                     .attr('class', 'shortcuts-list');
110095
110096                 wrapper = wrapper.merge(wrapperEnter);
110097
110098                 var tabs = tabsBar
110099                     .selectAll('.tab')
110100                     .data(dataShortcuts);
110101
110102                 var tabsEnter = tabs
110103                     .enter()
110104                     .append('div')
110105                     .attr('class', 'tab')
110106                     .on('click', function (d, i) {
110107                         _activeTab = i;
110108                         render(selection);
110109                     });
110110
110111                 tabsEnter
110112                     .append('span')
110113                     .text(function (d) { return t(d.text); });
110114
110115                 tabs = tabs
110116                     .merge(tabsEnter);
110117
110118                 // Update
110119                 wrapper.selectAll('.tab')
110120                     .classed('active', function (d, i) {
110121                         return i === _activeTab;
110122                     });
110123
110124
110125                 var shortcuts = shortcutsList
110126                     .selectAll('.shortcut-tab')
110127                     .data(dataShortcuts);
110128
110129                 var shortcutsEnter = shortcuts
110130                     .enter()
110131                     .append('div')
110132                     .attr('class', function(d) { return 'shortcut-tab shortcut-tab-' + d.tab; });
110133
110134                 var columnsEnter = shortcutsEnter
110135                     .selectAll('.shortcut-column')
110136                     .data(function (d) { return d.columns; })
110137                     .enter()
110138                     .append('table')
110139                     .attr('class', 'shortcut-column');
110140
110141                 var rowsEnter = columnsEnter
110142                     .selectAll('.shortcut-row')
110143                     .data(function (d) { return d.rows; })
110144                     .enter()
110145                     .append('tr')
110146                     .attr('class', 'shortcut-row');
110147
110148
110149                 var sectionRows = rowsEnter
110150                     .filter(function (d) { return !d.shortcuts; });
110151
110152                 sectionRows
110153                     .append('td');
110154
110155                 sectionRows
110156                     .append('td')
110157                     .attr('class', 'shortcut-section')
110158                     .append('h3')
110159                     .text(function (d) { return t(d.text); });
110160
110161
110162                 var shortcutRows = rowsEnter
110163                     .filter(function (d) { return d.shortcuts; });
110164
110165                 var shortcutKeys = shortcutRows
110166                     .append('td')
110167                     .attr('class', 'shortcut-keys');
110168
110169                 var modifierKeys = shortcutKeys
110170                     .filter(function (d) { return d.modifiers; });
110171
110172                 modifierKeys
110173                     .selectAll('kbd.modifier')
110174                     .data(function (d) {
110175                         if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
110176                             return ['⌘'];
110177                         } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
110178                             return [];
110179                         } else {
110180                             return d.modifiers;
110181                         }
110182                     })
110183                     .enter()
110184                     .each(function () {
110185                         var selection = d3_select(this);
110186
110187                         selection
110188                             .append('kbd')
110189                             .attr('class', 'modifier')
110190                             .text(function (d) { return uiCmd.display(d); });
110191
110192                         selection
110193                             .append('span')
110194                             .text('+');
110195                     });
110196
110197
110198                 shortcutKeys
110199                     .selectAll('kbd.shortcut')
110200                     .data(function (d) {
110201                         var arr = d.shortcuts;
110202                         if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
110203                             arr = ['Y'];
110204                         } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
110205                             arr = ['F11'];
110206                         }
110207
110208                         // replace translations
110209                         arr = arr.map(function(s) {
110210                             return uiCmd.display(s.indexOf('.') !== -1 ? t(s) : s);
110211                         });
110212
110213                         return utilArrayUniq(arr).map(function(s) {
110214                             return {
110215                                 shortcut: s,
110216                                 separator: d.separator,
110217                                 suffix: d.suffix
110218                             };
110219                         });
110220                     })
110221                     .enter()
110222                     .each(function (d, i, nodes) {
110223                         var selection = d3_select(this);
110224                         var click = d.shortcut.toLowerCase().match(/(.*).click/);
110225
110226                         if (click && click[1]) {   // replace "left_click", "right_click" with mouse icon
110227                             selection
110228                                 .call(svgIcon('#iD-walkthrough-mouse', 'mouseclick', click[1]));
110229                         } else {
110230                             selection
110231                                 .append('kbd')
110232                                 .attr('class', 'shortcut')
110233                                 .text(function (d) { return d.shortcut; });
110234                         }
110235
110236                         if (i < nodes.length - 1) {
110237                             selection
110238                                 .append('span')
110239                                 .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0');
110240                         } else if (i === nodes.length - 1 && d.suffix) {
110241                             selection
110242                                 .append('span')
110243                                 .text(d.suffix);
110244                         }
110245                     });
110246
110247
110248                 shortcutKeys
110249                     .filter(function(d) { return d.gesture; })
110250                     .each(function () {
110251                         var selection = d3_select(this);
110252
110253                         selection
110254                             .append('span')
110255                             .text('+');
110256
110257                         selection
110258                             .append('span')
110259                             .attr('class', 'gesture')
110260                             .text(function (d) { return t(d.gesture); });
110261                     });
110262
110263
110264                 shortcutRows
110265                     .append('td')
110266                     .attr('class', 'shortcut-desc')
110267                     .text(function (d) { return d.text ? t(d.text) : '\u00a0'; });
110268
110269
110270                 shortcuts = shortcuts
110271                     .merge(shortcutsEnter);
110272
110273                 // Update
110274                 wrapper.selectAll('.shortcut-tab')
110275                     .style('display', function (d, i) {
110276                         return i === _activeTab ? 'flex' : 'none';
110277                     });
110278             }
110279
110280
110281             return function(selection, show) {
110282                 _selection = selection;
110283                 if (show) {
110284                     _modalSelection = uiModal(selection);
110285                     shortcutsModal(_modalSelection);
110286                 }
110287             };
110288         }
110289
110290         function uiHelp(context) {
110291             var key = t('help.key');
110292
110293             var _pane = d3_select(null);
110294
110295             var docKeys = [
110296                 ['help', [
110297                     'welcome',
110298                     'open_data_h',
110299                     'open_data',
110300                     'before_start_h',
110301                     'before_start',
110302                     'open_source_h',
110303                     'open_source',
110304                     'open_source_help'
110305                 ]],
110306                 ['overview', [
110307                     'navigation_h',
110308                     'navigation_drag',
110309                     'navigation_zoom',
110310                     'features_h',
110311                     'features',
110312                     'nodes_ways'
110313                 ]],
110314                 ['editing', [
110315                     'select_h',
110316                     'select_left_click',
110317                     'select_right_click',
110318                     'multiselect_h',
110319                     'multiselect_shift_click',
110320                     'multiselect_lasso',
110321                     'undo_redo_h',
110322                     'undo_redo',
110323                     'save_h',
110324                     'save',
110325                     'save_validation',
110326                     'upload_h',
110327                     'upload',
110328                     'backups_h',
110329                     'backups',
110330                     'keyboard_h',
110331                     'keyboard'
110332                 ]],
110333                 ['feature_editor', [
110334                     'intro',
110335                     'definitions',
110336                     'type_h',
110337                     'type',
110338                     'type_picker',
110339                     'fields_h',
110340                     'fields_all_fields',
110341                     'fields_example',
110342                     'fields_add_field',
110343                     'tags_h',
110344                     'tags_all_tags',
110345                     'tags_resources'
110346                 ]],
110347                 ['points', [
110348                     'intro',
110349                     'add_point_h',
110350                     'add_point',
110351                     'add_point_finish',
110352                     'move_point_h',
110353                     'move_point',
110354                     'delete_point_h',
110355                     'delete_point',
110356                     'delete_point_command'
110357                 ]],
110358                 ['lines', [
110359                     'intro',
110360                     'add_line_h',
110361                     'add_line',
110362                     'add_line_draw',
110363                     'add_line_finish',
110364                     'modify_line_h',
110365                     'modify_line_dragnode',
110366                     'modify_line_addnode',
110367                     'connect_line_h',
110368                     'connect_line',
110369                     'connect_line_display',
110370                     'connect_line_drag',
110371                     'connect_line_tag',
110372                     'disconnect_line_h',
110373                     'disconnect_line_command',
110374                     'move_line_h',
110375                     'move_line_command',
110376                     'move_line_connected',
110377                     'delete_line_h',
110378                     'delete_line',
110379                     'delete_line_command'
110380                 ]],
110381                 ['areas', [
110382                     'intro',
110383                     'point_or_area_h',
110384                     'point_or_area',
110385                     'add_area_h',
110386                     'add_area_command',
110387                     'add_area_draw',
110388                     'add_area_finish',
110389                     'square_area_h',
110390                     'square_area_command',
110391                     'modify_area_h',
110392                     'modify_area_dragnode',
110393                     'modify_area_addnode',
110394                     'delete_area_h',
110395                     'delete_area',
110396                     'delete_area_command'
110397                 ]],
110398                 ['relations', [
110399                     'intro',
110400                     'edit_relation_h',
110401                     'edit_relation',
110402                     'edit_relation_add',
110403                     'edit_relation_delete',
110404                     'maintain_relation_h',
110405                     'maintain_relation',
110406                     'relation_types_h',
110407                     'multipolygon_h',
110408                     'multipolygon',
110409                     'multipolygon_create',
110410                     'multipolygon_merge',
110411                     'turn_restriction_h',
110412                     'turn_restriction',
110413                     'turn_restriction_field',
110414                     'turn_restriction_editing',
110415                     'route_h',
110416                     'route',
110417                     'route_add',
110418                     'boundary_h',
110419                     'boundary',
110420                     'boundary_add'
110421                 ]],
110422                 ['notes', [
110423                     'intro',
110424                     'add_note_h',
110425                     'add_note',
110426                     'move_note',
110427                     'update_note_h',
110428                     'update_note',
110429                     'save_note_h',
110430                     'save_note'
110431                 ]],
110432
110433                 ['imagery', [
110434                     'intro',
110435                     'sources_h',
110436                     'choosing',
110437                     'sources',
110438                     'offsets_h',
110439                     'offset',
110440                     'offset_change'
110441                 ]],
110442                 ['streetlevel', [
110443                     'intro',
110444                     'using_h',
110445                     'using',
110446                     'photos',
110447                     'viewer'
110448                 ]],
110449                 ['gps', [
110450                     'intro',
110451                     'survey',
110452                     'using_h',
110453                     'using',
110454                     'tracing',
110455                     'upload'
110456                 ]],
110457                 ['qa', [
110458                     'intro',
110459                     'tools_h',
110460                     'tools',
110461                     'issues_h',
110462                     'issues'
110463                 ]]
110464             ];
110465
110466             var headings = {
110467                 'help.help.open_data_h': 3,
110468                 'help.help.before_start_h': 3,
110469                 'help.help.open_source_h': 3,
110470                 'help.overview.navigation_h': 3,
110471                 'help.overview.features_h': 3,
110472                 'help.editing.select_h': 3,
110473                 'help.editing.multiselect_h': 3,
110474                 'help.editing.undo_redo_h': 3,
110475                 'help.editing.save_h': 3,
110476                 'help.editing.upload_h': 3,
110477                 'help.editing.backups_h': 3,
110478                 'help.editing.keyboard_h': 3,
110479                 'help.feature_editor.type_h': 3,
110480                 'help.feature_editor.fields_h': 3,
110481                 'help.feature_editor.tags_h': 3,
110482                 'help.points.add_point_h': 3,
110483                 'help.points.move_point_h': 3,
110484                 'help.points.delete_point_h': 3,
110485                 'help.lines.add_line_h': 3,
110486                 'help.lines.modify_line_h': 3,
110487                 'help.lines.connect_line_h': 3,
110488                 'help.lines.disconnect_line_h': 3,
110489                 'help.lines.move_line_h': 3,
110490                 'help.lines.delete_line_h': 3,
110491                 'help.areas.point_or_area_h': 3,
110492                 'help.areas.add_area_h': 3,
110493                 'help.areas.square_area_h': 3,
110494                 'help.areas.modify_area_h': 3,
110495                 'help.areas.delete_area_h': 3,
110496                 'help.relations.edit_relation_h': 3,
110497                 'help.relations.maintain_relation_h': 3,
110498                 'help.relations.relation_types_h': 2,
110499                 'help.relations.multipolygon_h': 3,
110500                 'help.relations.turn_restriction_h': 3,
110501                 'help.relations.route_h': 3,
110502                 'help.relations.boundary_h': 3,
110503                 'help.notes.add_note_h': 3,
110504                 'help.notes.update_note_h': 3,
110505                 'help.notes.save_note_h': 3,
110506                 'help.imagery.sources_h': 3,
110507                 'help.imagery.offsets_h': 3,
110508                 'help.streetlevel.using_h': 3,
110509                 'help.gps.using_h': 3,
110510                 'help.qa.tools_h': 3,
110511                 'help.qa.issues_h': 3
110512             };
110513
110514             var replacements = {
110515                 point: icon('#iD-icon-point', 'pre-text'),
110516                 line: icon('#iD-icon-line', 'pre-text'),
110517                 area: icon('#iD-icon-area', 'pre-text'),
110518                 note: icon('#iD-icon-note', 'pre-text add-note'),
110519                 plus: icon('#iD-icon-plus', 'pre-text'),
110520                 minus: icon('#iD-icon-minus', 'pre-text'),
110521                 orthogonalize: icon('#iD-operation-orthogonalize', 'pre-text'),
110522                 disconnect: icon('#iD-operation-disconnect', 'pre-text'),
110523                 layers: icon('#iD-icon-layers', 'pre-text'),
110524                 data: icon('#iD-icon-data', 'pre-text'),
110525                 inspect: icon('#iD-icon-inspect', 'pre-text'),
110526                 move: icon('#iD-operation-move', 'pre-text'),
110527                 merge: icon('#iD-operation-merge', 'pre-text'),
110528                 delete: icon('#iD-operation-delete', 'pre-text'),
110529                 close: icon('#iD-icon-close', 'pre-text'),
110530                 undo: icon(textDirection === 'rtl' ? '#iD-icon-redo' : '#iD-icon-undo', 'pre-text'),
110531                 redo: icon(textDirection === 'rtl' ? '#iD-icon-undo' : '#iD-icon-redo', 'pre-text'),
110532                 save: icon('#iD-icon-save', 'pre-text'),
110533                 leftclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'left'),
110534                 rightclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'right'),
110535                 shift: uiCmd.display('⇧'),
110536                 alt: uiCmd.display('⌥'),
110537                 return: uiCmd.display('↵'),
110538                 version: context.version
110539             };
110540
110541             // For each section, squash all the texts into a single markdown document
110542             var docs = docKeys.map(function(key) {
110543                 var helpkey = 'help.' + key[0];
110544                 var text = key[1].reduce(function(all, part) {
110545                     var subkey = helpkey + '.' + part;
110546                     var depth = headings[subkey];                              // is this subkey a heading?
110547                     var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
110548                     return all + hhh + t(subkey, replacements) + '\n\n';
110549                 }, '');
110550
110551                 return {
110552                     title: t(helpkey + '.title'),
110553                     html: marked_1(text.trim())
110554                 };
110555             });
110556
110557             var paneTooltip = tooltip()
110558                 .placement((textDirection === 'rtl') ? 'right' : 'left')
110559                 .html(true)
110560                 .title(uiTooltipHtml(t('help.title'), key));
110561
110562             function hidePane() {
110563                 context.ui().togglePanes();
110564             }
110565
110566             uiHelp.togglePane = function() {
110567                 if (event) { event.preventDefault(); }
110568                 paneTooltip.hide();
110569                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
110570             };
110571
110572             uiHelp.renderToggleButton = function(selection) {
110573
110574                 selection.append('button')
110575                     .on('click', uiHelp.togglePane)
110576                     .call(svgIcon('#iD-icon-help', 'light'))
110577                     .call(paneTooltip);
110578             };
110579
110580
110581             uiHelp.renderPane = function(selection) {
110582
110583                 function clickHelp(d, i) {
110584                     var rtl = (textDirection === 'rtl');
110585                     content.property('scrollTop', 0);
110586                     doctitle.html(d.title);
110587
110588                     body.html(d.html);
110589                     body.selectAll('a')
110590                         .attr('target', '_blank');
110591                     menuItems.classed('selected', function(m) {
110592                         return m.title === d.title;
110593                     });
110594
110595                     nav.html('');
110596                     if (rtl) {
110597                         nav.call(drawNext).call(drawPrevious);
110598                     } else {
110599                         nav.call(drawPrevious).call(drawNext);
110600                     }
110601
110602
110603                     function drawNext(selection) {
110604                         if (i < docs.length - 1) {
110605                             var nextLink = selection
110606                                 .append('a')
110607                                 .attr('class', 'next')
110608                                 .on('click', function() {
110609                                     clickHelp(docs[i + 1], i + 1);
110610                                 });
110611
110612                             nextLink
110613                                 .append('span')
110614                                 .text(docs[i + 1].title)
110615                                 .call(svgIcon((rtl ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
110616                         }
110617                     }
110618
110619
110620                     function drawPrevious(selection) {
110621                         if (i > 0) {
110622                             var prevLink = selection
110623                                 .append('a')
110624                                 .attr('class', 'previous')
110625                                 .on('click', function() {
110626                                     clickHelp(docs[i - 1], i - 1);
110627                                 });
110628
110629                             prevLink
110630                                 .call(svgIcon((rtl ? '#iD-icon-forward' : '#iD-icon-backward'), 'inline'))
110631                                 .append('span')
110632                                 .text(docs[i - 1].title);
110633                         }
110634                     }
110635                 }
110636
110637
110638                 function clickWalkthrough() {
110639                     if (context.inIntro()) { return; }
110640                     context.container().call(uiIntro(context));
110641                     context.ui().togglePanes();
110642                 }
110643
110644
110645                 function clickShortcuts() {
110646                     context.container().call(uiShortcuts(context), true);
110647                 }
110648
110649
110650                 _pane = selection.append('div')
110651                     .attr('class', 'help-wrap map-pane fillL hide')
110652                     .attr('pane', 'help');
110653
110654                 var heading = _pane
110655                     .append('div')
110656                     .attr('class', 'pane-heading');
110657
110658                 var doctitle = heading
110659                     .append('h2')
110660                     .text(t('help.title'));
110661
110662                 heading
110663                     .append('button')
110664                     .on('click', hidePane)
110665                     .call(svgIcon('#iD-icon-close'));
110666
110667
110668                 var content = _pane
110669                     .append('div')
110670                     .attr('class', 'pane-content');
110671
110672                 var toc = content
110673                     .append('ul')
110674                     .attr('class', 'toc');
110675
110676                 var menuItems = toc.selectAll('li')
110677                     .data(docs)
110678                     .enter()
110679                     .append('li')
110680                     .append('a')
110681                     .html(function(d) { return d.title; })
110682                     .on('click', clickHelp);
110683
110684                 var shortcuts = toc
110685                     .append('li')
110686                     .attr('class', 'shortcuts')
110687                     .call(tooltip()
110688                         .html(true)
110689                         .title(uiTooltipHtml(t('shortcuts.tooltip'), '?'))
110690                         .placement('top')
110691                     )
110692                     .append('a')
110693                     .on('click', clickShortcuts);
110694
110695                 shortcuts
110696                     .append('div')
110697                     .text(t('shortcuts.title'));
110698
110699                 var walkthrough = toc
110700                     .append('li')
110701                     .attr('class', 'walkthrough')
110702                     .append('a')
110703                     .on('click', clickWalkthrough);
110704
110705                 walkthrough
110706                     .append('svg')
110707                     .attr('class', 'logo logo-walkthrough')
110708                     .append('use')
110709                     .attr('xlink:href', '#iD-logo-walkthrough');
110710
110711                 walkthrough
110712                     .append('div')
110713                     .text(t('splash.walkthrough'));
110714
110715
110716                 var helpContent = content
110717                     .append('div')
110718                     .attr('class', 'left-content');
110719
110720                 var body = helpContent
110721                     .append('div')
110722                     .attr('class', 'body');
110723
110724                 var nav = helpContent
110725                     .append('div')
110726                     .attr('class', 'nav');
110727
110728                 clickHelp(docs[0], 0);
110729
110730                 context.keybinding()
110731                     .on(key, uiHelp.togglePane);
110732
110733             };
110734
110735             return uiHelp;
110736         }
110737
110738         function uiPanelBackground(context) {
110739             var background = context.background();
110740             var currSourceName = null;
110741             var metadata = {};
110742             var metadataKeys = [
110743                 'zoom', 'vintage', 'source', 'description', 'resolution', 'accuracy'
110744             ];
110745
110746             var debouncedRedraw = debounce(redraw, 250);
110747
110748             function redraw(selection) {
110749                 var source = background.baseLayerSource();
110750                 var isDG = (source.id.match(/^DigitalGlobe/i) !== null);
110751
110752                 if (currSourceName !== source.name()) {
110753                     currSourceName = source.name();
110754                     metadata = {};
110755                 }
110756
110757                 selection.html('');
110758
110759                 var list = selection
110760                     .append('ul')
110761                     .attr('class', 'background-info');
110762
110763                 list
110764                     .append('li')
110765                     .text(currSourceName);
110766
110767                 metadataKeys.forEach(function(k) {
110768                     // DigitalGlobe vintage is available in raster layers for now.
110769                     if (isDG && k === 'vintage') { return; }
110770
110771                     list
110772                         .append('li')
110773                         .attr('class', 'background-info-list-' + k)
110774                         .classed('hide', !metadata[k])
110775                         .text(t('info_panels.background.' + k) + ':')
110776                         .append('span')
110777                         .attr('class', 'background-info-span-' + k)
110778                         .text(metadata[k]);
110779                 });
110780
110781                 debouncedGetMetadata(selection);
110782
110783                 var toggleTiles = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles';
110784
110785                 selection
110786                     .append('a')
110787                     .text(t('info_panels.background.' + toggleTiles))
110788                     .attr('href', '#')
110789                     .attr('class', 'button button-toggle-tiles')
110790                     .on('click', function() {
110791                         event.preventDefault();
110792                         context.setDebug('tile', !context.getDebug('tile'));
110793                         selection.call(redraw);
110794                     });
110795
110796                 if (isDG) {
110797                     var key = source.id + '-vintage';
110798                     var sourceVintage = context.background().findSource(key);
110799                     var showsVintage = context.background().showsLayer(sourceVintage);
110800                     var toggleVintage = showsVintage ? 'hide_vintage' : 'show_vintage';
110801                     selection
110802                         .append('a')
110803                         .text(t('info_panels.background.' + toggleVintage))
110804                         .attr('href', '#')
110805                         .attr('class', 'button button-toggle-vintage')
110806                         .on('click', function() {
110807                             event.preventDefault();
110808                             context.background().toggleOverlayLayer(sourceVintage);
110809                             selection.call(redraw);
110810                         });
110811                 }
110812
110813                 // disable if necessary
110814                 ['DigitalGlobe-Premium', 'DigitalGlobe-Standard'].forEach(function(layerId) {
110815                     if (source.id !== layerId) {
110816                         var key = layerId + '-vintage';
110817                         var sourceVintage = context.background().findSource(key);
110818                         if (context.background().showsLayer(sourceVintage)) {
110819                             context.background().toggleOverlayLayer(sourceVintage);
110820                         }
110821                     }
110822                 });
110823             }
110824
110825
110826             var debouncedGetMetadata = debounce(getMetadata, 250);
110827
110828             function getMetadata(selection) {
110829                 var tile = d3_select('.layer-background img.tile-center');   // tile near viewport center
110830                 if (tile.empty()) { return; }
110831
110832                 var sourceName = currSourceName;
110833                 var d = tile.datum();
110834                 var zoom = (d && d.length >= 3 && d[2]) || Math.floor(context.map().zoom());
110835                 var center = context.map().center();
110836
110837                 // update zoom
110838                 metadata.zoom = String(zoom);
110839                 selection.selectAll('.background-info-list-zoom')
110840                     .classed('hide', false)
110841                     .selectAll('.background-info-span-zoom')
110842                     .text(metadata.zoom);
110843
110844                 if (!d || !d.length >= 3) { return; }
110845
110846                 background.baseLayerSource().getMetadata(center, d, function(err, result) {
110847                     if (err || currSourceName !== sourceName) { return; }
110848
110849                     // update vintage
110850                     var vintage = result.vintage;
110851                     metadata.vintage = (vintage && vintage.range) || t('info_panels.background.unknown');
110852                     selection.selectAll('.background-info-list-vintage')
110853                         .classed('hide', false)
110854                         .selectAll('.background-info-span-vintage')
110855                         .text(metadata.vintage);
110856
110857                     // update other metdata
110858                     metadataKeys.forEach(function(k) {
110859                         if (k === 'zoom' || k === 'vintage') { return; }  // done already
110860                         var val = result[k];
110861                         metadata[k] = val;
110862                         selection.selectAll('.background-info-list-' + k)
110863                             .classed('hide', !val)
110864                             .selectAll('.background-info-span-' + k)
110865                             .text(val);
110866                     });
110867                 });
110868             }
110869
110870
110871             var panel = function(selection) {
110872                 selection.call(redraw);
110873
110874                 context.map()
110875                     .on('drawn.info-background', function() {
110876                         selection.call(debouncedRedraw);
110877                     })
110878                     .on('move.info-background', function() {
110879                         selection.call(debouncedGetMetadata);
110880                     });
110881
110882             };
110883
110884             panel.off = function() {
110885                 context.map()
110886                     .on('drawn.info-background', null)
110887                     .on('move.info-background', null);
110888             };
110889
110890             panel.id = 'background';
110891             panel.title = t('info_panels.background.title');
110892             panel.key = t('info_panels.background.key');
110893
110894
110895             return panel;
110896         }
110897
110898         function uiPanelHistory(context) {
110899             var osm;
110900
110901             function displayTimestamp(timestamp) {
110902                 if (!timestamp) { return t('info_panels.history.unknown'); }
110903                 var detected = utilDetect();
110904                 var options = {
110905                     day: 'numeric', month: 'short', year: 'numeric',
110906                     hour: 'numeric', minute: 'numeric', second: 'numeric'
110907                 };
110908                 var d = new Date(timestamp);
110909                 if (isNaN(d.getTime())) { return t('info_panels.history.unknown'); }
110910                 return d.toLocaleString(detected.locale, options);
110911             }
110912
110913
110914             function displayUser(selection, userName) {
110915                 if (!userName) {
110916                     selection
110917                         .append('span')
110918                         .text(t('info_panels.history.unknown'));
110919                     return;
110920                 }
110921
110922                 selection
110923                     .append('span')
110924                     .attr('class', 'user-name')
110925                     .text(userName);
110926
110927                 var links = selection
110928                     .append('div')
110929                     .attr('class', 'links');
110930
110931                 if (osm) {
110932                     links
110933                         .append('a')
110934                         .attr('class', 'user-osm-link')
110935                         .attr('href', osm.userURL(userName))
110936                         .attr('target', '_blank')
110937                         .attr('tabindex', -1)
110938                         .text('OSM');
110939                 }
110940
110941                 links
110942                     .append('a')
110943                     .attr('class', 'user-hdyc-link')
110944                     .attr('href', 'https://hdyc.neis-one.org/?' + userName)
110945                     .attr('target', '_blank')
110946                     .attr('tabindex', -1)
110947                     .text('HDYC');
110948             }
110949
110950
110951             function displayChangeset(selection, changeset) {
110952                 if (!changeset) {
110953                     selection
110954                         .append('span')
110955                         .text(t('info_panels.history.unknown'));
110956                     return;
110957                 }
110958
110959                 selection
110960                     .append('span')
110961                     .attr('class', 'changeset-id')
110962                     .text(changeset);
110963
110964                 var links = selection
110965                     .append('div')
110966                     .attr('class', 'links');
110967
110968                 if (osm) {
110969                     links
110970                         .append('a')
110971                         .attr('class', 'changeset-osm-link')
110972                         .attr('href', osm.changesetURL(changeset))
110973                         .attr('target', '_blank')
110974                         .attr('tabindex', -1)
110975                         .text('OSM');
110976                 }
110977
110978                 links
110979                     .append('a')
110980                     .attr('class', 'changeset-osmcha-link')
110981                     .attr('href', 'https://osmcha.mapbox.com/changesets/' + changeset)
110982                     .attr('target', '_blank')
110983                     .attr('tabindex', -1)
110984                     .text('OSMCha');
110985
110986                 links
110987                     .append('a')
110988                     .attr('class', 'changeset-achavi-link')
110989                     .attr('href', 'https://overpass-api.de/achavi/?changeset=' + changeset)
110990                     .attr('target', '_blank')
110991                     .attr('tabindex', -1)
110992                     .text('Achavi');
110993             }
110994
110995
110996             function redraw(selection) {
110997                 var selectedNoteID = context.selectedNoteID();
110998                 osm = context.connection();
110999
111000                 var selected, note, entity;
111001                 if (selectedNoteID && osm) {       // selected 1 note
111002                     selected = [ t('note.note') + ' ' + selectedNoteID ];
111003                     note = osm.getNote(selectedNoteID);
111004                 } else {                           // selected 1..n entities
111005                     selected = context.selectedIDs()
111006                         .filter(function(e) { return context.hasEntity(e); });
111007                     if (selected.length) {
111008                         entity = context.entity(selected[0]);
111009                     }
111010                 }
111011
111012                 var singular = selected.length === 1 ? selected[0] : null;
111013
111014                 selection.html('');
111015
111016                 selection
111017                     .append('h4')
111018                     .attr('class', 'history-heading')
111019                     .text(singular || t('info_panels.history.selected', { n: selected.length }));
111020
111021                 if (!singular) { return; }
111022
111023                 if (entity) {
111024                     selection.call(redrawEntity, entity);
111025                 } else if (note) {
111026                     selection.call(redrawNote, note);
111027                 }
111028             }
111029
111030
111031             function redrawNote(selection, note) {
111032                 if (!note || note.isNew()) {
111033                     selection
111034                         .append('div')
111035                         .text(t('info_panels.history.note_no_history'));
111036                     return;
111037                 }
111038
111039                 var list = selection
111040                     .append('ul');
111041
111042                 list
111043                     .append('li')
111044                     .text(t('info_panels.history.note_comments') + ':')
111045                     .append('span')
111046                     .text(note.comments.length);
111047
111048                 if (note.comments.length) {
111049                     list
111050                         .append('li')
111051                         .text(t('info_panels.history.note_created_date') + ':')
111052                         .append('span')
111053                         .text(displayTimestamp(note.comments[0].date));
111054
111055                     list
111056                         .append('li')
111057                         .text(t('info_panels.history.note_created_user') + ':')
111058                         .call(displayUser, note.comments[0].user);
111059                 }
111060
111061                 if (osm) {
111062                     selection
111063                         .append('a')
111064                         .attr('class', 'view-history-on-osm')
111065                         .attr('target', '_blank')
111066                         .attr('tabindex', -1)
111067                         .attr('href', osm.noteURL(note))
111068                         .call(svgIcon('#iD-icon-out-link', 'inline'))
111069                         .append('span')
111070                         .text(t('info_panels.history.note_link_text'));
111071                 }
111072             }
111073
111074
111075             function redrawEntity(selection, entity) {
111076                 if (!entity || entity.isNew()) {
111077                     selection
111078                         .append('div')
111079                         .text(t('info_panels.history.no_history'));
111080                     return;
111081                 }
111082
111083                 var links = selection
111084                     .append('div')
111085                     .attr('class', 'links');
111086
111087                 if (osm) {
111088                     links
111089                         .append('a')
111090                         .attr('class', 'view-history-on-osm')
111091                         .attr('href', osm.historyURL(entity))
111092                         .attr('target', '_blank')
111093                         .attr('tabindex', -1)
111094                         .attr('title', t('info_panels.history.link_text'))
111095                         .text('OSM');
111096                 }
111097                 links
111098                     .append('a')
111099                     .attr('class', 'pewu-history-viewer-link')
111100                     .attr('href', 'https://pewu.github.io/osm-history/#/' + entity.type + '/' + entity.osmId())
111101                     .attr('target', '_blank')
111102                     .attr('tabindex', -1)
111103                     .text('PeWu');
111104
111105                 var list = selection
111106                     .append('ul');
111107
111108                 list
111109                     .append('li')
111110                     .text(t('info_panels.history.version') + ':')
111111                     .append('span')
111112                     .text(entity.version);
111113
111114                 list
111115                     .append('li')
111116                     .text(t('info_panels.history.last_edit') + ':')
111117                     .append('span')
111118                     .text(displayTimestamp(entity.timestamp));
111119
111120                 list
111121                     .append('li')
111122                     .text(t('info_panels.history.edited_by') + ':')
111123                     .call(displayUser, entity.user);
111124
111125                 list
111126                     .append('li')
111127                     .text(t('info_panels.history.changeset') + ':')
111128                     .call(displayChangeset, entity.changeset);
111129             }
111130
111131
111132             var panel = function(selection) {
111133                 selection.call(redraw);
111134
111135                 context.map()
111136                     .on('drawn.info-history', function() {
111137                         selection.call(redraw);
111138                     });
111139
111140                 context
111141                     .on('enter.info-history', function() {
111142                         selection.call(redraw);
111143                     });
111144             };
111145
111146             panel.off = function() {
111147                 context.map().on('drawn.info-history', null);
111148                 context.on('enter.info-history', null);
111149             };
111150
111151             panel.id = 'history';
111152             panel.title = t('info_panels.history.title');
111153             panel.key = t('info_panels.history.key');
111154
111155
111156             return panel;
111157         }
111158
111159         var OSM_PRECISION = 7;
111160         var locale$2 = utilDetect().locale;
111161
111162         /**
111163          * Returns a localized representation of the given length measurement.
111164          *
111165          * @param {Number} m area in meters
111166          * @param {Boolean} isImperial true for U.S. customary units; false for metric
111167          */
111168         function displayLength(m, isImperial) {
111169             var d = m * (isImperial ? 3.28084 : 1);
111170             var unit;
111171
111172             if (isImperial) {
111173                 if (d >= 5280) {
111174                     d /= 5280;
111175                     unit = 'miles';
111176                 } else {
111177                     unit = 'feet';
111178                 }
111179             } else {
111180                 if (d >= 1000) {
111181                     d /= 1000;
111182                     unit = 'kilometers';
111183                 } else {
111184                     unit = 'meters';
111185                 }
111186             }
111187
111188             return t('units.' + unit, {
111189                 quantity: d.toLocaleString(locale$2, {
111190                     maximumSignificantDigits: 4
111191                 })
111192             });
111193         }
111194
111195         /**
111196          * Returns a localized representation of the given area measurement.
111197          *
111198          * @param {Number} m2 area in square meters
111199          * @param {Boolean} isImperial true for U.S. customary units; false for metric
111200          */
111201         function displayArea(m2, isImperial) {
111202             var d = m2 * (isImperial ? 10.7639111056 : 1);
111203             var d1, d2, area;
111204             var unit1 = '';
111205             var unit2 = '';
111206
111207             if (isImperial) {
111208                 if (d >= 6969600) { // > 0.25mi² show mi²
111209                     d1 = d / 27878400;
111210                     unit1 = 'square_miles';
111211                 } else {
111212                     d1 = d;
111213                     unit1 = 'square_feet';
111214                 }
111215
111216                 if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres
111217                     d2 = d / 43560;
111218                     unit2 = 'acres';
111219                 }
111220
111221             } else {
111222                 if (d >= 250000) { // > 0.25km² show km²
111223                     d1 = d / 1000000;
111224                     unit1 = 'square_kilometers';
111225                 } else {
111226                     d1 = d;
111227                     unit1 = 'square_meters';
111228                 }
111229
111230                 if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares
111231                     d2 = d / 10000;
111232                     unit2 = 'hectares';
111233                 }
111234             }
111235
111236             area = t('units.' + unit1, {
111237                 quantity: d1.toLocaleString(locale$2, {
111238                     maximumSignificantDigits: 4
111239                 })
111240             });
111241
111242             if (d2) {
111243                 return t('units.area_pair', {
111244                     area1: area,
111245                     area2: t('units.' + unit2, {
111246                         quantity: d2.toLocaleString(locale$2, {
111247                             maximumSignificantDigits: 2
111248                         })
111249                     })
111250                 });
111251             } else {
111252                 return area;
111253             }
111254         }
111255
111256         function wrap(x, min, max) {
111257             var d = max - min;
111258             return ((x - min) % d + d) % d + min;
111259         }
111260
111261         function clamp$1(x, min, max) {
111262             return Math.max(min, Math.min(x, max));
111263         }
111264
111265         function displayCoordinate(deg, pos, neg) {
111266             var min = (Math.abs(deg) - Math.floor(Math.abs(deg))) * 60;
111267             var sec = (min - Math.floor(min)) * 60;
111268             var displayDegrees = t('units.arcdegrees', {
111269                 quantity: Math.floor(Math.abs(deg)).toLocaleString(locale$2)
111270             });
111271             var displayCoordinate;
111272
111273             if (Math.floor(sec) > 0) {
111274                 displayCoordinate = displayDegrees +
111275                     t('units.arcminutes', {
111276                         quantity: Math.floor(min).toLocaleString(locale$2)
111277                     }) +
111278                     t('units.arcseconds', {
111279                         quantity: Math.round(sec).toLocaleString(locale$2)
111280                     });
111281             } else if (Math.floor(min) > 0) {
111282                 displayCoordinate = displayDegrees +
111283                     t('units.arcminutes', {
111284                         quantity: Math.round(min).toLocaleString(locale$2)
111285                     });
111286             } else {
111287                 displayCoordinate = t('units.arcdegrees', {
111288                     quantity: Math.round(Math.abs(deg)).toLocaleString(locale$2)
111289                 });
111290             }
111291
111292             if (deg === 0) {
111293                 return displayCoordinate;
111294             } else {
111295                 return t('units.coordinate', {
111296                     coordinate: displayCoordinate,
111297                     direction: t('units.' + (deg > 0 ? pos : neg))
111298                 });
111299             }
111300         }
111301
111302         /**
111303          * Returns given coordinate pair in degree-minute-second format.
111304          *
111305          * @param {Array<Number>} coord longitude and latitude
111306          */
111307         function dmsCoordinatePair(coord) {
111308             return t('units.coordinate_pair', {
111309                 latitude: displayCoordinate(clamp$1(coord[1], -90, 90), 'north', 'south'),
111310                 longitude: displayCoordinate(wrap(coord[0], -180, 180), 'east', 'west')
111311             });
111312         }
111313
111314         /**
111315          * Returns the given coordinate pair in decimal format.
111316          * note: unlocalized to avoid comma ambiguity - see #4765
111317          *
111318          * @param {Array<Number>} coord longitude and latitude
111319          */
111320         function decimalCoordinatePair(coord) {
111321             return t('units.coordinate_pair', {
111322                 latitude: clamp$1(coord[1], -90, 90).toFixed(OSM_PRECISION),
111323                 longitude: wrap(coord[0], -180, 180).toFixed(OSM_PRECISION)
111324             });
111325         }
111326
111327         function uiPanelLocation(context) {
111328             var currLocation = '';
111329
111330
111331             function redraw(selection) {
111332                 selection.html('');
111333
111334                 var list = selection
111335                     .append('ul');
111336
111337                 // Mouse coordinates
111338                 var coord = context.map().mouseCoordinates();
111339                 if (coord.some(isNaN)) {
111340                     coord = context.map().center();
111341                 }
111342
111343                 list
111344                     .append('li')
111345                     .text(dmsCoordinatePair(coord))
111346                     .append('li')
111347                     .text(decimalCoordinatePair(coord));
111348
111349                 // Location Info
111350                 selection
111351                     .append('div')
111352                     .attr('class', 'location-info')
111353                     .text(currLocation || ' ');
111354
111355                 debouncedGetLocation(selection, coord);
111356             }
111357
111358
111359             var debouncedGetLocation = debounce(getLocation, 250);
111360             function getLocation(selection, coord) {
111361                 if (!services$1.geocoder) {
111362                     currLocation = t('info_panels.location.unknown_location');
111363                     selection.selectAll('.location-info')
111364                         .text(currLocation);
111365                 } else {
111366                     services$1.geocoder.reverse(coord, function(err, result) {
111367                         currLocation = result ? result.display_name : t('info_panels.location.unknown_location');
111368                         selection.selectAll('.location-info')
111369                             .text(currLocation);
111370                     });
111371                 }
111372             }
111373
111374
111375             var panel = function(selection) {
111376                 selection.call(redraw);
111377
111378                 context.surface()
111379                     .on('mousemove.info-location', function() {
111380                         selection.call(redraw);
111381                     });
111382             };
111383
111384             panel.off = function() {
111385                 context.surface()
111386                     .on('mousemove.info-location', null);
111387             };
111388
111389             panel.id = 'location';
111390             panel.title = t('info_panels.location.title');
111391             panel.key = t('info_panels.location.key');
111392
111393
111394             return panel;
111395         }
111396
111397         function uiPanelMeasurement(context) {
111398             var locale = utilDetect().locale;
111399             var isImperial = (locale.toLowerCase() === 'en-us');
111400
111401
111402             function radiansToMeters(r) {
111403                 // using WGS84 authalic radius (6371007.1809 m)
111404                 return r * 6371007.1809;
111405             }
111406
111407             function steradiansToSqmeters(r) {
111408                 // http://gis.stackexchange.com/a/124857/40446
111409                 return r / (4 * Math.PI) * 510065621724000;
111410             }
111411
111412
111413             function toLineString(feature) {
111414                 if (feature.type === 'LineString') { return feature; }
111415
111416                 var result = { type: 'LineString', coordinates: [] };
111417                 if (feature.type === 'Polygon') {
111418                     result.coordinates = feature.coordinates[0];
111419                 } else if (feature.type === 'MultiPolygon') {
111420                     result.coordinates = feature.coordinates[0][0];
111421                 }
111422
111423                 return result;
111424             }
111425
111426
111427             function nodeCount(feature) {
111428               if (feature.type === 'LineString') { return feature.coordinates.length; }
111429               if (feature.type === 'Polygon') { return feature.coordinates[0].length - 1; }
111430             }
111431
111432
111433             function redraw(selection) {
111434                 var resolver = context.graph();
111435                 var selectedNoteID = context.selectedNoteID();
111436                 var osm = services$1.osm;
111437
111438                 var selected, center, entity, note, geometry;
111439
111440                 if (selectedNoteID && osm) {       // selected 1 note
111441                     selected = [ t('note.note') + ' ' + selectedNoteID ];
111442                     note = osm.getNote(selectedNoteID);
111443                     center = note.loc;
111444                     geometry = 'note';
111445
111446                 } else {                           // selected 1..n entities
111447                     var extent = geoExtent();
111448                     selected = context.selectedIDs()
111449                         .filter(function(e) { return context.hasEntity(e); });
111450                     if (selected.length) {
111451                         for (var i = 0; i < selected.length; i++) {
111452                             entity = context.entity(selected[i]);
111453                             extent._extend(entity.extent(resolver));
111454                         }
111455                         center = extent.center();
111456                         geometry = entity.geometry(resolver);
111457                     }
111458                 }
111459
111460                 var singular = selected.length === 1 ? selected[0] : null;
111461
111462                 selection.html('');
111463
111464                 selection
111465                     .append('h4')
111466                     .attr('class', 'measurement-heading')
111467                     .text(singular || t('info_panels.measurement.selected', { n: selected.length.toLocaleString(locale) }));
111468
111469                 if (!selected.length) { return; }
111470
111471
111472                 var list = selection
111473                     .append('ul');
111474                 var coordItem;
111475
111476                 // multiple selected features, just display extent center..
111477                 if (!singular) {
111478                     coordItem = list
111479                         .append('li')
111480                         .text(t('info_panels.measurement.center') + ':');
111481                     coordItem.append('span')
111482                         .text(dmsCoordinatePair(center));
111483                     coordItem.append('span')
111484                         .text(decimalCoordinatePair(center));
111485                     return;
111486                 }
111487
111488                 // single selected feature, display details..
111489                 if (geometry === 'line' || geometry === 'area') {
111490                     var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate());
111491                     var feature = entity.asGeoJSON(resolver);
111492                     var length = radiansToMeters(d3_geoLength(toLineString(feature)));
111493                     var lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length'));
111494                     var centroid = d3_geoCentroid(feature);
111495
111496                     list
111497                         .append('li')
111498                         .text(t('info_panels.measurement.geometry') + ':')
111499                         .append('span')
111500                         .text(
111501                             closed ? t('info_panels.measurement.closed_' + geometry) : t('geometry.' + geometry)
111502                         );
111503
111504                     if (entity.type !== 'relation') {
111505                         list
111506                             .append('li')
111507                             .text(t('info_panels.measurement.node_count') + ':')
111508                             .append('span')
111509                             .text(nodeCount(feature).toLocaleString(locale));
111510                     }
111511
111512                     if (closed) {
111513                         var area = steradiansToSqmeters(entity.area(resolver));
111514                         list
111515                             .append('li')
111516                             .text(t('info_panels.measurement.area') + ':')
111517                             .append('span')
111518                             .text(displayArea(area, isImperial));
111519                     }
111520
111521
111522                     list
111523                         .append('li')
111524                         .text(lengthLabel + ':')
111525                         .append('span')
111526                         .text(displayLength(length, isImperial));
111527
111528                     coordItem = list
111529                         .append('li')
111530                         .text(t('info_panels.measurement.centroid') + ':');
111531                     coordItem.append('span')
111532                         .text(dmsCoordinatePair(centroid));
111533                     coordItem.append('span')
111534                         .text(decimalCoordinatePair(centroid));
111535
111536                     var toggle  = isImperial ? 'imperial' : 'metric';
111537
111538                     selection
111539                         .append('a')
111540                         .text(t('info_panels.measurement.' + toggle))
111541                         .attr('href', '#')
111542                         .attr('class', 'button button-toggle-units')
111543                         .on('click', function() {
111544                             event.preventDefault();
111545                             isImperial = !isImperial;
111546                             selection.call(redraw);
111547                         });
111548
111549                 } else {
111550                     var centerLabel = t('info_panels.measurement.' +
111551                         (note || entity.type === 'node' ? 'location' : 'center'));
111552
111553                     list
111554                         .append('li')
111555                         .text(t('info_panels.measurement.geometry') + ':')
111556                         .append('span')
111557                         .text(t('geometry.' + geometry));
111558
111559                     coordItem = list
111560                         .append('li')
111561                         .text(centerLabel + ':');
111562                     coordItem.append('span')
111563                         .text(dmsCoordinatePair(center));
111564                     coordItem.append('span')
111565                         .text(decimalCoordinatePair(center));
111566                 }
111567             }
111568
111569
111570             var panel = function(selection) {
111571                 selection.call(redraw);
111572
111573                 context.map()
111574                     .on('drawn.info-measurement', function() {
111575                         selection.call(redraw);
111576                     });
111577
111578                 context
111579                     .on('enter.info-measurement', function() {
111580                         selection.call(redraw);
111581                     });
111582             };
111583
111584             panel.off = function() {
111585                 context.map().on('drawn.info-measurement', null);
111586                 context.on('enter.info-measurement', null);
111587             };
111588
111589             panel.id = 'measurement';
111590             panel.title = t('info_panels.measurement.title');
111591             panel.key = t('info_panels.measurement.key');
111592
111593
111594             return panel;
111595         }
111596
111597         var uiInfoPanels = {
111598             background: uiPanelBackground,
111599             history: uiPanelHistory,
111600             location: uiPanelLocation,
111601             measurement: uiPanelMeasurement,
111602         };
111603
111604         function uiInfo(context) {
111605             var ids = Object.keys(uiInfoPanels);
111606             var wasActive = ['measurement'];
111607             var panels = {};
111608             var active = {};
111609
111610             // create panels
111611             ids.forEach(function(k) {
111612                 if (!panels[k]) {
111613                     panels[k] = uiInfoPanels[k](context);
111614                     active[k] = false;
111615                 }
111616             });
111617
111618
111619             function info(selection) {
111620
111621                 function redraw() {
111622                     var activeids = ids.filter(function(k) { return active[k]; }).sort();
111623
111624                     var containers = infoPanels.selectAll('.panel-container')
111625                         .data(activeids, function(k) { return k; });
111626
111627                     containers.exit()
111628                         .style('opacity', 1)
111629                         .transition()
111630                         .duration(200)
111631                         .style('opacity', 0)
111632                         .on('end', function(d) {
111633                             d3_select(this)
111634                                 .call(panels[d].off)
111635                                 .remove();
111636                         });
111637
111638                     var enter = containers.enter()
111639                         .append('div')
111640                         .attr('class', function(d) { return 'fillD2 panel-container panel-container-' + d; });
111641
111642                     enter
111643                         .style('opacity', 0)
111644                         .transition()
111645                         .duration(200)
111646                         .style('opacity', 1);
111647
111648                     var title = enter
111649                         .append('div')
111650                         .attr('class', 'panel-title fillD2');
111651
111652                     title
111653                         .append('h3')
111654                         .text(function(d) { return panels[d].title; });
111655
111656                     title
111657                         .append('button')
111658                         .attr('class', 'close')
111659                         .on('click', function (d) { info.toggle(d); })
111660                         .call(svgIcon('#iD-icon-close'));
111661
111662                     enter
111663                         .append('div')
111664                         .attr('class', function(d) { return 'panel-content panel-content-' + d; });
111665
111666
111667                     // redraw the panels
111668                     infoPanels.selectAll('.panel-content')
111669                         .each(function(d) {
111670                             d3_select(this).call(panels[d]);
111671                         });
111672                 }
111673
111674
111675                 info.toggle = function(which) {
111676                     if (event) {
111677                         event.stopImmediatePropagation();
111678                         event.preventDefault();
111679                     }
111680
111681                     var activeids = ids.filter(function(k) { return active[k]; });
111682
111683                     if (which) {  // toggle one
111684                         active[which] = !active[which];
111685                         if (activeids.length === 1 && activeids[0] === which) {  // none active anymore
111686                             wasActive = [which];
111687                         }
111688
111689                         d3_select('.' + which + '-panel-toggle-item')
111690                             .classed('active', active[which])
111691                             .select('input')
111692                             .property('checked', active[which]);
111693
111694                     } else {      // toggle all
111695                         if (activeids.length) {
111696                             wasActive = activeids;
111697                             activeids.forEach(function(k) { active[k] = false; });
111698                         } else {
111699                             wasActive.forEach(function(k) { active[k] = true; });
111700                         }
111701                     }
111702
111703                     redraw();
111704                 };
111705
111706
111707                 var infoPanels = selection.selectAll('.info-panels')
111708                     .data([0]);
111709
111710                 infoPanels = infoPanels.enter()
111711                     .append('div')
111712                     .attr('class', 'info-panels')
111713                     .merge(infoPanels);
111714
111715                 redraw();
111716
111717                 context.keybinding()
111718                     .on(uiCmd('⌘' + t('info_panels.key')), info.toggle);
111719
111720                 ids.forEach(function(k) {
111721                     var key = t('info_panels.' + k + '.key', { default: null });
111722                     if (!key) { return; }
111723                     context.keybinding()
111724                         .on(uiCmd('⌘⇧' + key), function() { info.toggle(k); });
111725                 });
111726             }
111727
111728             return info;
111729         }
111730
111731         function uiIssues(context) {
111732             var key = t('issues.key');
111733
111734             var MINSQUARE = 0;
111735             var MAXSQUARE = 20;
111736             var DEFAULTSQUARE = 5;  // see also unsquare_way.js
111737
111738             var _errorsSelection = d3_select(null);
111739             var _warningsSelection = d3_select(null);
111740             var _rulesList = d3_select(null);
111741             var _pane = d3_select(null);
111742             var _toggleButton = d3_select(null);
111743
111744             var _errors = [];
111745             var _warnings = [];
111746             var _options = {
111747                 what: context.storage('validate-what') || 'edited',    // 'all', 'edited'
111748                 where: context.storage('validate-where') || 'all'  // 'all', 'visible'
111749             };
111750
111751             // listeners
111752             context.validator().on('validated.uiIssues',
111753                 function() { window.requestIdleCallback(update); }
111754             );
111755             context.map().on('move.uiIssues',
111756                 debounce(function() { window.requestIdleCallback(update); }, 1000)
111757             );
111758
111759
111760             function addNotificationBadge(selection) {
111761                 var d = 10;
111762                 selection.selectAll('svg.notification-badge')
111763                     .data([0])
111764                     .enter()
111765                     .append('svg')
111766                     .attr('viewbox', '0 0 ' + d + ' ' + d)
111767                     .attr('class', 'notification-badge hide')
111768                     .append('circle')
111769                     .attr('cx', d / 2)
111770                     .attr('cy', d / 2)
111771                     .attr('r', (d / 2) - 1)
111772                     .attr('fill', 'currentColor');
111773             }
111774
111775
111776             function renderErrorsList(selection) {
111777                 _errorsSelection = selection
111778                     .call(drawIssuesList, 'errors', _errors);
111779             }
111780
111781
111782             function renderWarningsList(selection) {
111783                 _warningsSelection = selection
111784                     .call(drawIssuesList, 'warnings', _warnings);
111785             }
111786
111787
111788             function drawIssuesList(selection, which, issues) {
111789                 var list = selection.selectAll('.issues-list')
111790                     .data([0]);
111791
111792                 list = list.enter()
111793                     .append('ul')
111794                     .attr('class', 'layer-list issues-list ' + which + '-list')
111795                     .merge(list);
111796
111797
111798                 var items = list.selectAll('li')
111799                     .data(issues, function(d) { return d.id; });
111800
111801                 // Exit
111802                 items.exit()
111803                     .remove();
111804
111805                 // Enter
111806                 var itemsEnter = items.enter()
111807                     .append('li')
111808                     .attr('class', function (d) { return 'issue severity-' + d.severity; })
111809                     .on('click', function(d) {
111810                         context.validator().focusIssue(d);
111811                     })
111812                     .on('mouseover', function(d) {
111813                         utilHighlightEntities(d.entityIds, true, context);
111814                     })
111815                     .on('mouseout', function(d) {
111816                         utilHighlightEntities(d.entityIds, false, context);
111817                     });
111818
111819
111820                 var labelsEnter = itemsEnter
111821                     .append('div')
111822                     .attr('class', 'issue-label');
111823
111824                 var textEnter = labelsEnter
111825                     .append('span')
111826                     .attr('class', 'issue-text');
111827
111828                 textEnter
111829                     .append('span')
111830                     .attr('class', 'issue-icon')
111831                     .each(function(d) {
111832                         var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
111833                         d3_select(this)
111834                             .call(svgIcon(iconName));
111835                     });
111836
111837                 textEnter
111838                     .append('span')
111839                     .attr('class', 'issue-message');
111840
111841                 /*
111842                 labelsEnter
111843                     .append('span')
111844                     .attr('class', 'issue-autofix')
111845                     .each(function(d) {
111846                         if (!d.autoFix) return;
111847
111848                         d3_select(this)
111849                             .append('button')
111850                             .attr('title', t('issues.fix_one.title'))
111851                             .datum(d.autoFix)  // set button datum to the autofix
111852                             .attr('class', 'autofix action')
111853                             .on('click', function(d) {
111854                                 d3_event.preventDefault();
111855                                 d3_event.stopPropagation();
111856
111857                                 var issuesEntityIDs = d.issue.entityIds;
111858                                 utilHighlightEntities(issuesEntityIDs.concat(d.entityIds), false, context);
111859
111860                                 context.perform.apply(context, d.autoArgs);
111861                                 context.validator().validate();
111862                             })
111863                             .call(svgIcon('#iD-icon-wrench'));
111864                     });
111865                 */
111866
111867                 // Update
111868                 items = items
111869                     .merge(itemsEnter)
111870                     .order();
111871
111872                 items.selectAll('.issue-message')
111873                     .text(function(d) {
111874                         return d.message(context);
111875                     });
111876
111877                 /*
111878                 // autofix
111879                 var canAutoFix = issues.filter(function(issue) { return issue.autoFix; });
111880
111881                 var autoFixAll = selection.selectAll('.autofix-all')
111882                     .data(canAutoFix.length ? [0] : []);
111883
111884                 // exit
111885                 autoFixAll.exit()
111886                     .remove();
111887
111888                 // enter
111889                 var autoFixAllEnter = autoFixAll.enter()
111890                     .insert('div', '.issues-list')
111891                     .attr('class', 'autofix-all');
111892
111893                 var linkEnter = autoFixAllEnter
111894                     .append('a')
111895                     .attr('class', 'autofix-all-link')
111896                     .attr('href', '#');
111897
111898                 linkEnter
111899                     .append('span')
111900                     .attr('class', 'autofix-all-link-text')
111901                     .text(t('issues.fix_all.title'));
111902
111903                 linkEnter
111904                     .append('span')
111905                     .attr('class', 'autofix-all-link-icon')
111906                     .call(svgIcon('#iD-icon-wrench'));
111907
111908                 if (which === 'warnings') {
111909                     renderIgnoredIssuesReset(selection);
111910                 }
111911
111912                 // update
111913                 autoFixAll = autoFixAll
111914                     .merge(autoFixAllEnter);
111915
111916                 autoFixAll.selectAll('.autofix-all-link')
111917                     .on('click', function() {
111918                         context.pauseChangeDispatch();
111919                         context.perform(actionNoop());
111920                         canAutoFix.forEach(function(issue) {
111921                             var args = issue.autoFix.autoArgs.slice();  // copy
111922                             if (typeof args[args.length - 1] !== 'function') {
111923                                 args.pop();
111924                             }
111925                             args.push(t('issues.fix_all.annotation'));
111926                             context.replace.apply(context, args);
111927                         });
111928                         context.resumeChangeDispatch();
111929                         context.validator().validate();
111930                     });
111931                 */
111932             }
111933
111934
111935             function updateOptionValue(d, val) {
111936                 if (!val && event && event.target) {
111937                     val = event.target.value;
111938                 }
111939
111940                 _options[d] = val;
111941                 context.storage('validate-' + d, val);
111942                 context.validator().validate();
111943             }
111944
111945
111946             function renderIssuesOptions(selection) {
111947                 var container = selection.selectAll('.issues-options-container')
111948                     .data([0]);
111949
111950                 container = container.enter()
111951                     .append('div')
111952                     .attr('class', 'issues-options-container')
111953                     .merge(container);
111954
111955                 var data = [
111956                     { key: 'what', values: ['edited', 'all'] },
111957                     { key: 'where', values: ['visible', 'all'] }
111958                 ];
111959
111960                 var options = container.selectAll('.issues-option')
111961                     .data(data, function(d) { return d.key; });
111962
111963                 var optionsEnter = options.enter()
111964                     .append('div')
111965                     .attr('class', function(d) { return 'issues-option issues-option-' + d.key; });
111966
111967                 optionsEnter
111968                     .append('div')
111969                     .attr('class', 'issues-option-title')
111970                     .text(function(d) { return t('issues.options.' + d.key + '.title'); });
111971
111972                 var valuesEnter = optionsEnter.selectAll('label')
111973                     .data(function(d) {
111974                         return d.values.map(function(val) { return { value: val, key: d.key }; });
111975                     })
111976                     .enter()
111977                     .append('label');
111978
111979                 valuesEnter
111980                     .append('input')
111981                     .attr('type', 'radio')
111982                     .attr('name', function(d) { return 'issues-option-' + d.key; })
111983                     .attr('value', function(d) { return d.value; })
111984                     .property('checked', function(d) { return _options[d.key] === d.value; })
111985                     .on('change', function(d) { updateOptionValue(d.key, d.value); });
111986
111987                 valuesEnter
111988                     .append('span')
111989                     .text(function(d) { return t('issues.options.' + d.key + '.' + d.value); });
111990             }
111991
111992
111993             function renderNoIssuesBox(selection) {
111994
111995                 var box = selection.append('div')
111996                     .attr('class', 'box');
111997
111998                 box
111999                     .append('div')
112000                     .call(svgIcon('#iD-icon-apply', 'pre-text'));
112001
112002                 var noIssuesMessage = box
112003                     .append('span');
112004
112005                 noIssuesMessage
112006                     .append('strong')
112007                     .attr('class', 'message');
112008
112009                 noIssuesMessage
112010                     .append('br');
112011
112012                 noIssuesMessage
112013                     .append('span')
112014                     .attr('class', 'details');
112015             }
112016
112017             function renderIgnoredIssuesReset(selection) {
112018
112019                 var ignoredIssues = context.validator()
112020                     .getIssues({ what: 'all', where: 'all', includeDisabledRules: true, includeIgnored: 'only' });
112021
112022                 var resetIgnored = selection.selectAll('.reset-ignored')
112023                     .data(ignoredIssues.length ? [0] : []);
112024
112025                 // exit
112026                 resetIgnored.exit()
112027                     .remove();
112028
112029                 // enter
112030                 var resetIgnoredEnter = resetIgnored.enter()
112031                     .append('div')
112032                     .attr('class', 'reset-ignored section-footer');
112033
112034                 resetIgnoredEnter
112035                     .append('a')
112036                     .attr('href', '#');
112037
112038                 // update
112039                 resetIgnored = resetIgnored
112040                     .merge(resetIgnoredEnter);
112041
112042                 resetIgnored.select('a')
112043                     .text(t('issues.reset_ignored', { count: ignoredIssues.length.toString() }));
112044
112045                 resetIgnored.on('click', function() {
112046                     context.validator().resetIgnoredIssues();
112047                 });
112048             }
112049
112050
112051             function renderRulesList(selection) {
112052                 var container = selection.selectAll('.issues-rulelist-container')
112053                     .data([0]);
112054
112055                 var containerEnter = container.enter()
112056                     .append('div')
112057                     .attr('class', 'issues-rulelist-container');
112058
112059                 containerEnter
112060                     .append('ul')
112061                     .attr('class', 'layer-list issue-rules-list');
112062
112063                 var ruleLinks = containerEnter
112064                     .append('div')
112065                     .attr('class', 'issue-rules-links section-footer');
112066
112067                 ruleLinks
112068                     .append('a')
112069                     .attr('class', 'issue-rules-link')
112070                     .attr('href', '#')
112071                     .text(t('issues.enable_all'))
112072                     .on('click', function() {
112073                         context.validator().disableRules([]);
112074                     });
112075
112076                 ruleLinks
112077                     .append('a')
112078                     .attr('class', 'issue-rules-link')
112079                     .attr('href', '#')
112080                     .text(t('issues.disable_all'))
112081                     .on('click', function() {
112082                         var keys = context.validator().getRuleKeys();
112083                         context.validator().disableRules(keys);
112084                     });
112085
112086
112087                 // Update
112088                 container = container
112089                     .merge(containerEnter);
112090
112091                 _rulesList = container.selectAll('.issue-rules-list');
112092
112093                 updateRulesList();
112094             }
112095
112096
112097             function updateRulesList() {
112098                 var ruleKeys = context.validator().getRuleKeys();
112099                 _rulesList
112100                     .call(drawListItems, ruleKeys, 'checkbox', 'rule', toggleRule, isRuleEnabled);
112101             }
112102
112103
112104             function isRuleEnabled(d) {
112105                 return context.validator().isRuleEnabled(d);
112106             }
112107
112108
112109             function toggleRule(d) {
112110                 context.validator().toggleRule(d);
112111             }
112112
112113             function setNoIssuesText() {
112114
112115                 function checkForHiddenIssues(cases) {
112116                     for (var type in cases) {
112117                         var opts = cases[type];
112118                         var hiddenIssues = context.validator().getIssues(opts);
112119                         if (hiddenIssues.length) {
112120                             _pane.select('.issues-none .details')
112121                                 .text(t(
112122                                     'issues.no_issues.hidden_issues.' + type,
112123                                     { count: hiddenIssues.length.toString() }
112124                                 ));
112125                             return;
112126                         }
112127                     }
112128                     _pane.select('.issues-none .details')
112129                         .text(t('issues.no_issues.hidden_issues.none'));
112130                 }
112131
112132                 var messageType;
112133
112134                 if (_options.what === 'edited' && _options.where === 'visible') {
112135
112136                     messageType = 'edits_in_view';
112137
112138                     checkForHiddenIssues({
112139                         elsewhere: { what: 'edited', where: 'all' },
112140                         everything_else: { what: 'all', where: 'visible' },
112141                         disabled_rules: { what: 'edited', where: 'visible', includeDisabledRules: 'only' },
112142                         everything_else_elsewhere: { what: 'all', where: 'all' },
112143                         disabled_rules_elsewhere: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
112144                         ignored_issues: { what: 'edited', where: 'visible', includeIgnored: 'only' },
112145                         ignored_issues_elsewhere: { what: 'edited', where: 'all', includeIgnored: 'only' }
112146                     });
112147
112148                 } else if (_options.what === 'edited' && _options.where === 'all') {
112149
112150                     messageType = 'edits';
112151
112152                     checkForHiddenIssues({
112153                         everything_else: { what: 'all', where: 'all' },
112154                         disabled_rules: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
112155                         ignored_issues: { what: 'edited', where: 'all', includeIgnored: 'only' }
112156                     });
112157
112158                 } else if (_options.what === 'all' && _options.where === 'visible') {
112159
112160                     messageType = 'everything_in_view';
112161
112162                     checkForHiddenIssues({
112163                         elsewhere: { what: 'all', where: 'all' },
112164                         disabled_rules: { what: 'all', where: 'visible', includeDisabledRules: 'only' },
112165                         disabled_rules_elsewhere: { what: 'all', where: 'all', includeDisabledRules: 'only' },
112166                         ignored_issues: { what: 'all', where: 'visible', includeIgnored: 'only' },
112167                         ignored_issues_elsewhere: { what: 'all', where: 'all', includeIgnored: 'only' }
112168                     });
112169                 } else if (_options.what === 'all' && _options.where === 'all') {
112170
112171                     messageType = 'everything';
112172
112173                     checkForHiddenIssues({
112174                         disabled_rules: { what: 'all', where: 'all', includeDisabledRules: 'only' },
112175                         ignored_issues: { what: 'all', where: 'all', includeIgnored: 'only' }
112176                     });
112177                 }
112178
112179                 if (_options.what === 'edited' && context.history().difference().summary().length === 0) {
112180                     messageType = 'no_edits';
112181                 }
112182
112183                 _pane.select('.issues-none .message')
112184                     .text(t('issues.no_issues.message.' + messageType));
112185
112186             }
112187
112188
112189             function update() {
112190                 var issuesBySeverity = context.validator().getIssuesBySeverity(_options);
112191
112192                 // sort issues by distance away from the center of the map
112193                 var center = context.map().center();
112194                 var graph = context.graph();
112195                 _errors = issuesBySeverity.error.map(withDistance).sort(byDistance);
112196                 _warnings = issuesBySeverity.warning.map(withDistance).sort(byDistance);
112197
112198                 // cut off at 1000
112199                 var errorCount = _errors.length > 1000 ? '1000+' : String(_errors.length);
112200                 var warningCount = _warnings.length > 1000 ? '1000+' : String(_warnings.length);
112201                 _errors = _errors.slice(0, 1000);
112202                 _warnings = _warnings.slice(0, 1000);
112203
112204
112205                 _toggleButton.selectAll('.notification-badge')
112206                     .classed('error', (_errors.length > 0))
112207                     .classed('warning', (_errors.length === 0 && _warnings.length > 0))
112208                     .classed('hide', (_errors.length === 0 && _warnings.length === 0));
112209
112210
112211                 _pane.selectAll('.issues-errors')
112212                     .classed('hide', _errors.length === 0);
112213
112214                 if (_errors.length > 0) {
112215                     _pane.selectAll('.hide-toggle-issues_errors .hide-toggle-text')
112216                         .text(t('issues.errors.list_title', { count: errorCount }));
112217                     if (!_pane.select('.disclosure-wrap-issues_errors').classed('hide')) {
112218                         _errorsSelection
112219                             .call(drawIssuesList, 'errors', _errors);
112220                     }
112221                 }
112222
112223                 _pane.selectAll('.issues-warnings')
112224                     .classed('hide', _warnings.length === 0);
112225
112226                 if (_warnings.length > 0) {
112227                     _pane.selectAll('.hide-toggle-issues_warnings .hide-toggle-text')
112228                         .text(t('issues.warnings.list_title', { count: warningCount }));
112229                     if (!_pane.select('.disclosure-wrap-issues_warnings').classed('hide')) {
112230                         _warningsSelection
112231                             .call(drawIssuesList, 'warnings', _warnings);
112232                         renderIgnoredIssuesReset(_warningsSelection);
112233                     }
112234                 }
112235
112236                 var hasIssues = _warnings.length > 0 || _errors.length > 0;
112237
112238                 var issuesNone = _pane.select('.issues-none');
112239                 issuesNone.classed('hide', hasIssues);
112240                 if (!hasIssues) {
112241                     renderIgnoredIssuesReset(issuesNone);
112242                     setNoIssuesText();
112243                 }
112244
112245                 if (!_pane.select('.disclosure-wrap-issues_rules').classed('hide')) {
112246                     updateRulesList();
112247                 }
112248
112249
112250                 function byDistance(a, b) {
112251                     return a.dist - b.dist;
112252                 }
112253
112254                 function withDistance(issue) {
112255                     var extent = issue.extent(graph);
112256                     var dist = extent ? geoSphericalDistance(center, extent.center()) : 0;
112257                     return Object.assign(issue, { dist: dist });
112258                 }
112259             }
112260
112261
112262             function drawListItems(selection, data, type, name, change, active) {
112263                 var items = selection.selectAll('li')
112264                     .data(data);
112265
112266                 // Exit
112267                 items.exit()
112268                     .remove();
112269
112270                 // Enter
112271                 var enter = items.enter()
112272                     .append('li');
112273
112274                 if (name === 'rule') {
112275                     enter
112276                         .call(tooltip()
112277                             .title(function(d) { return t('issues.' + d + '.tip'); })
112278                             .placement('top')
112279                         );
112280                 }
112281
112282                 var label = enter
112283                     .append('label');
112284
112285                 label
112286                     .append('input')
112287                     .attr('type', type)
112288                     .attr('name', name)
112289                     .on('change', change);
112290
112291                 label
112292                     .append('span')
112293                     .html(function(d) {
112294                         var params = {};
112295                         if (d === 'unsquare_way') {
112296                             params.val = '<span class="square-degrees"></span>';
112297                         }
112298                         return t('issues.' + d + '.title', params);
112299                     });
112300
112301                 // Update
112302                 items = items
112303                     .merge(enter);
112304
112305                 items
112306                     .classed('active', active)
112307                     .selectAll('input')
112308                     .property('checked', active)
112309                     .property('indeterminate', false);
112310
112311
112312                 // user-configurable square threshold
112313                 var degStr = context.storage('validate-square-degrees');
112314                 if (degStr === null) {
112315                     degStr = '' + DEFAULTSQUARE;
112316                 }
112317
112318                 var span = items.selectAll('.square-degrees');
112319                 var input = span.selectAll('.square-degrees-input')
112320                     .data([0]);
112321
112322                 // enter / update
112323                 input.enter()
112324                     .append('input')
112325                     .attr('type', 'number')
112326                     .attr('min', '' + MINSQUARE)
112327                     .attr('max', '' + MAXSQUARE)
112328                     .attr('step', '0.5')
112329                     .attr('class', 'square-degrees-input')
112330                     .call(utilNoAuto)
112331                     .on('click', function () {
112332                         event.preventDefault();
112333                         event.stopPropagation();
112334                         this.select();
112335                     })
112336                     .on('keyup', function () {
112337                         if (event.keyCode === 13) { // enter
112338                             this.blur();
112339                             this.select();
112340                         }
112341                     })
112342                     .on('blur', changeSquare)
112343                     .merge(input)
112344                     .property('value', degStr);
112345             }
112346
112347
112348             function changeSquare() {
112349                 var input = d3_select(this);
112350                 var degStr = utilGetSetValue(input).trim();
112351                 var degNum = parseFloat(degStr, 10);
112352
112353                 if (!isFinite(degNum)) {
112354                     degNum = DEFAULTSQUARE;
112355                 } else if (degNum > MAXSQUARE) {
112356                     degNum = MAXSQUARE;
112357                 } else if (degNum < MINSQUARE) {
112358                     degNum = MINSQUARE;
112359                 }
112360
112361                 degNum = Math.round(degNum * 10 ) / 10;   // round to 1 decimal
112362                 degStr = '' + degNum;
112363
112364                 input
112365                     .property('value', degStr);
112366
112367                 context.storage('validate-square-degrees', degStr);
112368                 context.validator().reloadUnsquareIssues();
112369             }
112370
112371
112372             function hidePane() {
112373                 context.ui().togglePanes();
112374             }
112375
112376
112377
112378             var paneTooltip = tooltip()
112379                 .placement((textDirection === 'rtl') ? 'right' : 'left')
112380                 .html(true)
112381                 .title(uiTooltipHtml(t('issues.title'), key));
112382
112383
112384
112385             uiIssues.togglePane = function() {
112386                 if (event) { event.preventDefault(); }
112387                 paneTooltip.hide();
112388                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
112389             };
112390
112391
112392             uiIssues.renderToggleButton = function(selection) {
112393                 _toggleButton = selection
112394                     .append('button')
112395                     .on('click', uiIssues.togglePane)
112396                     .call(svgIcon('#iD-icon-alert', 'light'))
112397                     .call(addNotificationBadge)
112398                     .call(paneTooltip);
112399             };
112400
112401
112402             uiIssues.renderPane = function(selection) {
112403                 _pane = selection
112404                     .append('div')
112405                     .attr('class', 'fillL map-pane issues-pane hide')
112406                     .attr('pane', 'map-issues');
112407
112408                 var heading = _pane
112409                     .append('div')
112410                     .attr('class', 'pane-heading');
112411
112412                 heading
112413                     .append('h2')
112414                     .text(t('issues.title'));
112415
112416                 heading
112417                     .append('button')
112418                     .on('click', hidePane)
112419                     .call(svgIcon('#iD-icon-close'));
112420
112421                 var content = _pane
112422                     .append('div')
112423                     .attr('class', 'pane-content');
112424
112425                 content
112426                     .append('div')
112427                     .attr('class', 'issues-options')
112428                     .call(renderIssuesOptions);
112429
112430                 content
112431                     .append('div')
112432                     .attr('class', 'issues-none')
112433                     .call(renderNoIssuesBox);
112434
112435                 // errors
112436                 content
112437                     .append('div')
112438                     .attr('class', 'issues-errors')
112439                     .call(uiDisclosure(context, 'issues_errors', true)
112440                         .content(renderErrorsList)
112441                     );
112442
112443                 // warnings
112444                 content
112445                     .append('div')
112446                     .attr('class', 'issues-warnings')
112447                     .call(uiDisclosure(context, 'issues_warnings', true)
112448                         .content(renderWarningsList)
112449                     );
112450
112451                 // rules
112452                 content
112453                     .append('div')
112454                     .attr('class', 'issues-rules')
112455                     .call(uiDisclosure(context, 'issues_rules', false)
112456                         .title(t('issues.rules.title'))
112457                         .content(renderRulesList)
112458                     );
112459
112460                 // update();
112461
112462                 context.keybinding()
112463                     .on(key, uiIssues.togglePane);
112464             };
112465
112466             return uiIssues;
112467         }
112468
112469         function uiIssuesInfo(context) {
112470
112471             var warningsItem = {
112472                 id: 'warnings',
112473                 count: 0,
112474                 iconID: 'iD-icon-alert',
112475                 descriptionID: 'issues.warnings_and_errors'
112476             };
112477
112478             var resolvedItem = {
112479                 id: 'resolved',
112480                 count: 0,
112481                 iconID: 'iD-icon-apply',
112482                 descriptionID: 'issues.user_resolved_issues'
112483             };
112484
112485             function update(selection) {
112486
112487                 var shownItems = [];
112488
112489                 if (context.storage('validate-what') === 'all') {
112490
112491                     var liveIssues = context.validator().getIssues({
112492                         what: context.storage('validate-what') || 'edited',
112493                         where: context.storage('validate-where') || 'all'
112494                     });
112495                     if (liveIssues.length) {
112496                         warningsItem.count = liveIssues.length;
112497                         shownItems.push(warningsItem);
112498                     }
112499
112500                     var resolvedIssues = context.validator().getResolvedIssues();
112501                     if (resolvedIssues.length) {
112502                         resolvedItem.count = resolvedIssues.length;
112503                         shownItems.push(resolvedItem);
112504                     }
112505                 }
112506
112507                 var chips = selection.selectAll('.chip')
112508                     .data(shownItems, function(d) {
112509                         return d.id;
112510                     });
112511
112512                 chips.exit().remove();
112513
112514                 var enter = chips.enter()
112515                     .append('a')
112516                     .attr('class', function(d) {
112517                         return 'chip ' + d.id + '-count';
112518                     })
112519                     .attr('href', '#')
112520                     .attr('tabindex', -1)
112521                     .each(function(d) {
112522
112523                         var chipSelection = d3_select(this);
112524
112525                         var tooltipBehavior = tooltip()
112526                             .placement('top')
112527                             .title(t(d.descriptionID));
112528
112529                         chipSelection
112530                             .call(tooltipBehavior)
112531                             .on('click', function() {
112532                                 event.preventDefault();
112533
112534                                 tooltipBehavior.hide(d3_select(this));
112535                                 // open the Issues pane
112536                                 context.ui().togglePanes(d3_select('.map-panes .issues-pane'));
112537                             });
112538
112539                         chipSelection.call(svgIcon('#' + d.iconID));
112540
112541                     });
112542
112543                 enter.append('span')
112544                     .attr('class', 'count');
112545
112546                 enter.merge(chips)
112547                     .selectAll('span.count')
112548                     .text(function(d) {
112549                         return d.count.toString();
112550                     });
112551             }
112552
112553
112554             return function(selection) {
112555                 update(selection);
112556
112557                 context.validator().on('validated.infobox', function() {
112558                     update(selection);
112559                 });
112560             };
112561         }
112562
112563         function uiSettingsCustomData(context) {
112564             var dispatch$1 = dispatch('change');
112565
112566             function render(selection) {
112567                 var dataLayer = context.layers().layer('data');
112568
112569                 // keep separate copies of original and current settings
112570                 var _origSettings = {
112571                     fileList: (dataLayer && dataLayer.fileList()) || null,
112572                     url: context.storage('settings-custom-data-url')
112573                 };
112574                 var _currSettings = {
112575                     fileList: (dataLayer && dataLayer.fileList()) || null,
112576                     url: context.storage('settings-custom-data-url')
112577                 };
112578
112579                 // var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
112580                 var modal = uiConfirm(selection).okButton();
112581
112582                 modal
112583                     .classed('settings-modal settings-custom-data', true);
112584
112585                 modal.select('.modal-section.header')
112586                     .append('h3')
112587                     .text(t('settings.custom_data.header'));
112588
112589
112590                 var textSection = modal.select('.modal-section.message-text');
112591
112592                 textSection
112593                     .append('pre')
112594                     .attr('class', 'instructions-file')
112595                     .text(t('settings.custom_data.file.instructions'));
112596
112597                 textSection
112598                     .append('input')
112599                     .attr('class', 'field-file')
112600                     .attr('type', 'file')
112601                     .property('files', _currSettings.fileList)  // works for all except IE11
112602                     .on('change', function() {
112603                         var files = event.target.files;
112604                         if (files && files.length) {
112605                             _currSettings.url = '';
112606                             textSection.select('.field-url').property('value', '');
112607                             _currSettings.fileList = files;
112608                         } else {
112609                             _currSettings.fileList = null;
112610                         }
112611                     });
112612
112613                 textSection
112614                     .append('h4')
112615                     .text(t('settings.custom_data.or'));
112616
112617                 textSection
112618                     .append('pre')
112619                     .attr('class', 'instructions-url')
112620                     .text(t('settings.custom_data.url.instructions'));
112621
112622                 textSection
112623                     .append('textarea')
112624                     .attr('class', 'field-url')
112625                     .attr('placeholder', t('settings.custom_data.url.placeholder'))
112626                     .call(utilNoAuto)
112627                     .property('value', _currSettings.url);
112628
112629
112630                 // insert a cancel button
112631                 var buttonSection = modal.select('.modal-section.buttons');
112632
112633                 buttonSection
112634                     .insert('button', '.ok-button')
112635                     .attr('class', 'button cancel-button secondary-action')
112636                     .text(t('confirm.cancel'));
112637
112638
112639                 buttonSection.select('.cancel-button')
112640                     .on('click.cancel', clickCancel);
112641
112642                 buttonSection.select('.ok-button')
112643                     .attr('disabled', isSaveDisabled)
112644                     .on('click.save', clickSave);
112645
112646
112647                 function isSaveDisabled() {
112648                     return null;
112649                 }
112650
112651
112652                 // restore the original url
112653                 function clickCancel() {
112654                     textSection.select('.field-url').property('value', _origSettings.url);
112655                     context.storage('settings-custom-data-url', _origSettings.url);
112656                     this.blur();
112657                     modal.close();
112658                 }
112659
112660                 // accept the current url
112661                 function clickSave() {
112662                     _currSettings.url = textSection.select('.field-url').property('value').trim();
112663
112664                     // one or the other but not both
112665                     if (_currSettings.url) { _currSettings.fileList = null; }
112666                     if (_currSettings.fileList) { _currSettings.url = ''; }
112667
112668                     context.storage('settings-custom-data-url', _currSettings.url);
112669                     this.blur();
112670                     modal.close();
112671                     dispatch$1.call('change', this, _currSettings);
112672                 }
112673             }
112674
112675             return utilRebind(render, dispatch$1, 'on');
112676         }
112677
112678         function uiMapData(context) {
112679             var key = t('map_data.key');
112680             var osmDataToggleKey = uiCmd('⌥' + t('area_fill.wireframe.key'));
112681             var features = context.features().keys();
112682             var layers = context.layers();
112683             var fills = ['wireframe', 'partial', 'full'];
112684
112685             var settingsCustomData = uiSettingsCustomData(context)
112686                 .on('change', customChanged);
112687
112688             var _pane = d3_select(null);
112689
112690             var _fillSelected = context.storage('area-fill') || 'partial';
112691             var _dataLayerContainer = d3_select(null);
112692             var _photoOverlayContainer = d3_select(null);
112693             var _fillList = d3_select(null);
112694             var _featureList = d3_select(null);
112695             var _visualDiffList = d3_select(null);
112696             var _QAList = d3_select(null);
112697
112698
112699             function showsFeature(d) {
112700                 return context.features().enabled(d);
112701             }
112702
112703
112704             function autoHiddenFeature(d) {
112705                 if (d.type === 'kr_error') { return context.errors().autoHidden(d); }
112706                 return context.features().autoHidden(d);
112707             }
112708
112709
112710             function clickFeature(d) {
112711                 context.features().toggle(d);
112712                 update();
112713             }
112714
112715
112716             function showsQA(d) {
112717                 var QAKeys = [d];
112718                 var QALayers = layers.all().filter(function(obj) { return QAKeys.indexOf(obj.id) !== -1; });
112719                 var data = QALayers.filter(function(obj) { return obj.layer.supported(); });
112720
112721                 function layerSupported(d) {
112722                     return d.layer && d.layer.supported();
112723                 }
112724                 function layerEnabled(d) {
112725                     return layerSupported(d) && d.layer.enabled();
112726                 }
112727
112728                 return layerEnabled(data[0]);
112729             }
112730
112731
112732             function showsFill(d) {
112733                 return _fillSelected === d;
112734             }
112735
112736
112737             function setFill(d) {
112738                 fills.forEach(function(opt) {
112739                     context.surface().classed('fill-' + opt, Boolean(opt === d));
112740                 });
112741
112742                 _fillSelected = d;
112743                 context.storage('area-fill', d);
112744                 if (d !== 'wireframe') {
112745                     context.storage('area-fill-toggle', d);
112746                 }
112747                 update();
112748             }
112749
112750
112751             function toggleHighlightEdited() {
112752                 event.preventDefault();
112753                 var surface = context.surface();
112754                 surface.classed('highlight-edited', !surface.classed('highlight-edited'));
112755                 updateVisualDiffList();
112756
112757                 context.map().pan([0,0]);  // trigger a redraw
112758             }
112759
112760
112761             function showsLayer(which) {
112762                 var layer = layers.layer(which);
112763                 if (layer) {
112764                     return layer.enabled();
112765                 }
112766                 return false;
112767             }
112768
112769
112770             function setLayer(which, enabled) {
112771                 // Don't allow layer changes while drawing - #6584
112772                 var mode = context.mode();
112773                 if (mode && /^draw/.test(mode.id)) { return; }
112774
112775                 var layer = layers.layer(which);
112776                 if (layer) {
112777                     layer.enabled(enabled);
112778
112779                     if (!enabled && (which === 'osm' || which === 'notes')) {
112780                         context.enter(modeBrowse(context));
112781                     }
112782
112783                     update();
112784                 }
112785             }
112786
112787
112788             function toggleLayer(which) {
112789                 setLayer(which, !showsLayer(which));
112790             }
112791
112792
112793             function drawPhotoItems(selection) {
112794                 var photoKeys = context.photos().overlayLayerIDs();
112795                 var photoLayers = layers.all().filter(function(obj) { return photoKeys.indexOf(obj.id) !== -1; });
112796                 var data = photoLayers.filter(function(obj) { return obj.layer.supported(); });
112797
112798                 function layerSupported(d) {
112799                     return d.layer && d.layer.supported();
112800                 }
112801                 function layerEnabled(d) {
112802                     return layerSupported(d) && d.layer.enabled();
112803                 }
112804
112805                 var ul = selection
112806                     .selectAll('.layer-list-photos')
112807                     .data([0]);
112808
112809                 ul = ul.enter()
112810                     .append('ul')
112811                     .attr('class', 'layer-list layer-list-photos')
112812                     .merge(ul);
112813
112814                 var li = ul.selectAll('.list-item-photos')
112815                     .data(data);
112816
112817                 li.exit()
112818                     .remove();
112819
112820                 var liEnter = li.enter()
112821                     .append('li')
112822                     .attr('class', function(d) {
112823                         var classes = 'list-item-photos list-item-' + d.id;
112824                         if (d.id === 'mapillary-signs' || d.id === 'mapillary-map-features') {
112825                             classes += ' indented';
112826                         }
112827                         return classes;
112828                     });
112829
112830                 var labelEnter = liEnter
112831                     .append('label')
112832                     .each(function(d) {
112833                         var titleID;
112834                         if (d.id === 'mapillary-signs') { titleID = 'mapillary.signs.tooltip'; }
112835                         else if (d.id === 'mapillary') { titleID = 'mapillary_images.tooltip'; }
112836                         else if (d.id === 'openstreetcam') { titleID = 'openstreetcam_images.tooltip'; }
112837                         else { titleID = d.id.replace(/-/g, '_') + '.tooltip'; }
112838                         d3_select(this)
112839                             .call(tooltip()
112840                                 .title(t(titleID))
112841                                 .placement('top')
112842                             );
112843                     });
112844
112845                 labelEnter
112846                     .append('input')
112847                     .attr('type', 'checkbox')
112848                     .on('change', function(d) { toggleLayer(d.id); });
112849
112850                 labelEnter
112851                     .append('span')
112852                     .text(function(d) {
112853                         var id = d.id;
112854                         if (id === 'mapillary-signs') { id = 'photo_overlays.traffic_signs'; }
112855                         return t(id.replace(/-/g, '_') + '.title');
112856                     });
112857
112858                 labelEnter
112859                     .filter(function(d) { return d.id === 'mapillary-map-features'; })
112860                     .append('a')
112861                     .attr('class', 'request-data-link')
112862                     .attr('target', '_blank')
112863                     .attr('tabindex', -1)
112864                     .call(svgIcon('#iD-icon-out-link', 'inline'))
112865                     .attr('href', 'https://mapillary.github.io/mapillary_solutions/data-request')
112866                     .append('span')
112867                     .text(t('mapillary_map_features.request_data'));
112868
112869
112870                 // Update
112871                 li
112872                     .merge(liEnter)
112873                     .classed('active', layerEnabled)
112874                     .selectAll('input')
112875                     .property('checked', layerEnabled);
112876             }
112877
112878             function drawPhotoTypeItems(selection) {
112879                 var data = context.photos().allPhotoTypes();
112880
112881                 function typeEnabled(d) {
112882                     return context.photos().showsPhotoType(d);
112883                 }
112884
112885                 var ul = selection
112886                     .selectAll('.layer-list-photo-types')
112887                     .data(context.photos().shouldFilterByPhotoType() ? [0] : []);
112888
112889                 ul.exit()
112890                     .remove();
112891
112892                 ul = ul.enter()
112893                     .append('ul')
112894                     .attr('class', 'layer-list layer-list-photo-types')
112895                     .merge(ul);
112896
112897                 var li = ul.selectAll('.list-item-photo-types')
112898                     .data(data);
112899
112900                 li.exit()
112901                     .remove();
112902
112903                 var liEnter = li.enter()
112904                     .append('li')
112905                     .attr('class', function(d) {
112906                         return 'list-item-photo-types list-item-' + d;
112907                     });
112908
112909                 var labelEnter = liEnter
112910                     .append('label')
112911                     .each(function(d) {
112912                         d3_select(this)
112913                             .call(tooltip()
112914                                 .title(t('photo_overlays.photo_type.' + d + '.tooltip'))
112915                                 .placement('top')
112916                             );
112917                     });
112918
112919                 labelEnter
112920                     .append('input')
112921                     .attr('type', 'checkbox')
112922                     .on('change', function(d) {
112923                         context.photos().togglePhotoType(d);
112924                         update();
112925                     });
112926
112927                 labelEnter
112928                     .append('span')
112929                     .text(function(d) {
112930                         return t('photo_overlays.photo_type.' + d + '.title');
112931                     });
112932
112933
112934                 // Update
112935                 li
112936                     .merge(liEnter)
112937                     .classed('active', typeEnabled)
112938                     .selectAll('input')
112939                     .property('checked', typeEnabled);
112940             }
112941
112942
112943             function drawOsmItems(selection) {
112944                 var osmKeys = ['osm', 'notes'];
112945                 var osmLayers = layers.all().filter(function(obj) { return osmKeys.indexOf(obj.id) !== -1; });
112946
112947                 var ul = selection
112948                     .selectAll('.layer-list-osm')
112949                     .data([0]);
112950
112951                 ul = ul.enter()
112952                     .append('ul')
112953                     .attr('class', 'layer-list layer-list-osm')
112954                     .merge(ul);
112955
112956                 var li = ul.selectAll('.list-item')
112957                     .data(osmLayers);
112958
112959                 li.exit()
112960                     .remove();
112961
112962                 var liEnter = li.enter()
112963                     .append('li')
112964                     .attr('class', function(d) { return 'list-item list-item-' + d.id; });
112965
112966                 var labelEnter = liEnter
112967                     .append('label')
112968                     .each(function(d) {
112969                         if (d.id === 'osm') {
112970                             d3_select(this)
112971                                 .call(tooltip()
112972                                     .html(true)
112973                                     .title(uiTooltipHtml(t('map_data.layers.' + d.id + '.tooltip'), osmDataToggleKey))
112974                                     .placement('bottom')
112975                                 );
112976                         } else {
112977                             d3_select(this)
112978                                 .call(tooltip()
112979                                     .title(t('map_data.layers.' + d.id + '.tooltip'))
112980                                     .placement('bottom')
112981                                 );
112982                         }
112983                     });
112984
112985                 labelEnter
112986                     .append('input')
112987                     .attr('type', 'checkbox')
112988                     .on('change', function(d) { toggleLayer(d.id); });
112989
112990                 labelEnter
112991                     .append('span')
112992                     .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
112993
112994
112995                 // Update
112996                 li
112997                     .merge(liEnter)
112998                     .classed('active', function (d) { return d.layer.enabled(); })
112999                     .selectAll('input')
113000                     .property('checked', function (d) { return d.layer.enabled(); });
113001             }
113002
113003
113004             function drawQAItems(selection) {
113005                 var qaKeys = ['keepRight', 'improveOSM'];
113006                 var qaLayers = layers.all().filter(function(obj) { return qaKeys.indexOf(obj.id) !== -1; });
113007
113008                 var ul = selection
113009                     .selectAll('.layer-list-qa')
113010                     .data([0]);
113011
113012                 ul = ul.enter()
113013                     .append('ul')
113014                     .attr('class', 'layer-list layer-list-qa')
113015                     .merge(ul);
113016
113017                 var li = ul.selectAll('.list-item')
113018                     .data(qaLayers);
113019
113020                 li.exit()
113021                     .remove();
113022
113023                 var liEnter = li.enter()
113024                     .append('li')
113025                     .attr('class', function(d) { return 'list-item list-item-' + d.id; });
113026
113027                 var labelEnter = liEnter
113028                     .append('label')
113029                     .each(function(d) {
113030                         d3_select(this)
113031                             .call(tooltip()
113032                                 .title(t('map_data.layers.' + d.id + '.tooltip'))
113033                                 .placement('bottom')
113034                             );
113035                     });
113036
113037                 labelEnter
113038                     .append('input')
113039                     .attr('type', 'checkbox')
113040                     .on('change', function(d) { toggleLayer(d.id); });
113041
113042                 labelEnter
113043                     .append('span')
113044                     .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
113045
113046
113047                 // Update
113048                 li
113049                     .merge(liEnter)
113050                     .classed('active', function (d) { return d.layer.enabled(); })
113051                     .selectAll('input')
113052                     .property('checked', function (d) { return d.layer.enabled(); });
113053             }
113054
113055
113056             // Beta feature - sample vector layers to support Detroit Mapping Challenge
113057             // https://github.com/osmus/detroit-mapping-challenge
113058             function drawVectorItems(selection) {
113059                 var dataLayer = layers.layer('data');
113060                 var vtData = [
113061                     {
113062                         name: 'Detroit Neighborhoods/Parks',
113063                         src: 'neighborhoods-parks',
113064                         tooltip: 'Neighborhood boundaries and parks as compiled by City of Detroit in concert with community groups.',
113065                         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'
113066                     }, {
113067                         name: 'Detroit Composite POIs',
113068                         src: 'composite-poi',
113069                         tooltip: 'Fire Inspections, Business Licenses, and other public location data collated from the City of Detroit.',
113070                         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'
113071                     }, {
113072                         name: 'Detroit All-The-Places POIs',
113073                         src: 'alltheplaces-poi',
113074                         tooltip: 'Public domain business location data created by web scrapers.',
113075                         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'
113076                     }
113077                 ];
113078
113079                 // Only show this if the map is around Detroit..
113080                 var detroit = geoExtent([-83.5, 42.1], [-82.8, 42.5]);
113081                 var showVectorItems = (context.map().zoom() > 9 && detroit.contains(context.map().center()));
113082
113083                 var container = selection.selectAll('.vectortile-container')
113084                     .data(showVectorItems ? [0] : []);
113085
113086                 container.exit()
113087                     .remove();
113088
113089                 var containerEnter = container.enter()
113090                     .append('div')
113091                     .attr('class', 'vectortile-container');
113092
113093                 containerEnter
113094                     .append('h4')
113095                     .attr('class', 'vectortile-header')
113096                     .text('Detroit Vector Tiles (Beta)');
113097
113098                 containerEnter
113099                     .append('ul')
113100                     .attr('class', 'layer-list layer-list-vectortile');
113101
113102                 containerEnter
113103                     .append('div')
113104                     .attr('class', 'vectortile-footer')
113105                     .append('a')
113106                     .attr('target', '_blank')
113107                     .attr('tabindex', -1)
113108                     .call(svgIcon('#iD-icon-out-link', 'inline'))
113109                     .attr('href', 'https://github.com/osmus/detroit-mapping-challenge')
113110                     .append('span')
113111                     .text('About these layers');
113112
113113                 container = container
113114                     .merge(containerEnter);
113115
113116
113117                 var ul = container.selectAll('.layer-list-vectortile');
113118
113119                 var li = ul.selectAll('.list-item')
113120                     .data(vtData);
113121
113122                 li.exit()
113123                     .remove();
113124
113125                 var liEnter = li.enter()
113126                     .append('li')
113127                     .attr('class', function(d) { return 'list-item list-item-' + d.src; });
113128
113129                 var labelEnter = liEnter
113130                     .append('label')
113131                     .each(function(d) {
113132                         d3_select(this).call(
113133                             tooltip().title(d.tooltip).placement('top')
113134                         );
113135                     });
113136
113137                 labelEnter
113138                     .append('input')
113139                     .attr('type', 'radio')
113140                     .attr('name', 'vectortile')
113141                     .on('change', selectVTLayer);
113142
113143                 labelEnter
113144                     .append('span')
113145                     .text(function(d) { return d.name; });
113146
113147                 // Update
113148                 li
113149                     .merge(liEnter)
113150                     .classed('active', isVTLayerSelected)
113151                     .selectAll('input')
113152                     .property('checked', isVTLayerSelected);
113153
113154
113155                 function isVTLayerSelected(d) {
113156                     return dataLayer && dataLayer.template() === d.template;
113157                 }
113158
113159                 function selectVTLayer(d) {
113160                     context.storage('settings-custom-data-url', d.template);
113161                     if (dataLayer) {
113162                         dataLayer.template(d.template, d.src);
113163                         dataLayer.enabled(true);
113164                     }
113165                 }
113166             }
113167
113168
113169             function drawCustomDataItems(selection) {
113170                 var dataLayer = layers.layer('data');
113171                 var hasData = dataLayer && dataLayer.hasData();
113172                 var showsData = hasData && dataLayer.enabled();
113173
113174                 var ul = selection
113175                     .selectAll('.layer-list-data')
113176                     .data(dataLayer ? [0] : []);
113177
113178                 // Exit
113179                 ul.exit()
113180                     .remove();
113181
113182                 // Enter
113183                 var ulEnter = ul.enter()
113184                     .append('ul')
113185                     .attr('class', 'layer-list layer-list-data');
113186
113187                 var liEnter = ulEnter
113188                     .append('li')
113189                     .attr('class', 'list-item-data');
113190
113191                 var labelEnter = liEnter
113192                     .append('label')
113193                     .call(tooltip()
113194                         .title(t('map_data.layers.custom.tooltip'))
113195                         .placement('top')
113196                     );
113197
113198                 labelEnter
113199                     .append('input')
113200                     .attr('type', 'checkbox')
113201                     .on('change', function() { toggleLayer('data'); });
113202
113203                 labelEnter
113204                     .append('span')
113205                     .text(t('map_data.layers.custom.title'));
113206
113207                 liEnter
113208                     .append('button')
113209                     .call(tooltip()
113210                         .title(t('settings.custom_data.tooltip'))
113211                         .placement((textDirection === 'rtl') ? 'right' : 'left')
113212                     )
113213                     .on('click', editCustom)
113214                     .call(svgIcon('#iD-icon-more'));
113215
113216                 liEnter
113217                     .append('button')
113218                     .call(tooltip()
113219                         .title(t('map_data.layers.custom.zoom'))
113220                         .placement((textDirection === 'rtl') ? 'right' : 'left')
113221                     )
113222                     .on('click', function() {
113223                         event.preventDefault();
113224                         event.stopPropagation();
113225                         dataLayer.fitZoom();
113226                     })
113227                     .call(svgIcon('#iD-icon-search'));
113228
113229                 // Update
113230                 ul = ul
113231                     .merge(ulEnter);
113232
113233                 ul.selectAll('.list-item-data')
113234                     .classed('active', showsData)
113235                     .selectAll('label')
113236                     .classed('deemphasize', !hasData)
113237                     .selectAll('input')
113238                     .property('disabled', !hasData)
113239                     .property('checked', showsData);
113240             }
113241
113242
113243             function editCustom() {
113244                 event.preventDefault();
113245                 context.container()
113246                     .call(settingsCustomData);
113247             }
113248
113249
113250             function customChanged(d) {
113251                 var dataLayer = layers.layer('data');
113252
113253                 if (d && d.url) {
113254                     dataLayer.url(d.url);
113255                 } else if (d && d.fileList) {
113256                     dataLayer.fileList(d.fileList);
113257                 }
113258             }
113259
113260
113261             function drawListItems(selection, data, type, name, change, active) {
113262                 var items = selection.selectAll('li')
113263                     .data(data);
113264
113265                 // Exit
113266                 items.exit()
113267                     .remove();
113268
113269                 // Enter
113270                 var enter = items.enter()
113271                     .append('li')
113272                     .call(tooltip()
113273                         .html(true)
113274                         .title(function(d) {
113275                             var tip = t(name + '.' + d + '.tooltip');
113276                             var key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null);
113277                             if (d === 'highlight_edits') { key = t('map_data.highlight_edits.key'); }
113278
113279                             if ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d)) {
113280                                 var msg = showsLayer('osm') ? t('map_data.autohidden') : t('map_data.osmhidden');
113281                                 tip += '<div>' + msg + '</div>';
113282                             }
113283                             return uiTooltipHtml(tip, key);
113284                         })
113285                         .placement('top')
113286                     );
113287
113288                 var label = enter
113289                     .append('label');
113290
113291                 label
113292                     .append('input')
113293                     .attr('type', type)
113294                     .attr('name', name)
113295                     .on('change', change);
113296
113297                 label
113298                     .append('span')
113299                     .text(function(d) { return t(name + '.' + d + '.description'); });
113300
113301                 // Update
113302                 items = items
113303                     .merge(enter);
113304
113305                 items
113306                     .classed('active', active)
113307                     .selectAll('input')
113308                     .property('checked', active)
113309                     .property('indeterminate', function(d) {
113310                         return ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d));
113311                     });
113312             }
113313
113314
113315             function renderDataLayers(selection) {
113316                 var container = selection.selectAll('.data-layer-container')
113317                     .data([0]);
113318
113319                 _dataLayerContainer = container.enter()
113320                     .append('div')
113321                     .attr('class', 'data-layer-container')
113322                     .merge(container);
113323
113324                 updateDataLayers();
113325             }
113326
113327             function renderPhotoOverlays(selection) {
113328                 var container = selection.selectAll('.photo-overlay-container')
113329                     .data([0]);
113330
113331                 _photoOverlayContainer = container.enter()
113332                     .append('div')
113333                     .attr('class', 'photo-overlay-container')
113334                     .merge(container);
113335
113336                 updatePhotoOverlays();
113337             }
113338
113339
113340             function renderStyleOptions(selection) {
113341                 var container = selection.selectAll('.layer-fill-list')
113342                     .data([0]);
113343
113344                 _fillList = container.enter()
113345                     .append('ul')
113346                     .attr('class', 'layer-list layer-fill-list')
113347                     .merge(container);
113348
113349                 updateFillList();
113350
113351                 var container2 = selection.selectAll('.layer-visual-diff-list')
113352                     .data([0]);
113353
113354                 _visualDiffList = container2.enter()
113355                     .append('ul')
113356                     .attr('class', 'layer-list layer-visual-diff-list')
113357                     .merge(container2);
113358
113359                 updateVisualDiffList();
113360             }
113361
113362
113363             function renderFeatureList(selection) {
113364                 var container = selection.selectAll('.layer-feature-list-container')
113365                     .data([0]);
113366
113367                 var containerEnter = container.enter()
113368                     .append('div')
113369                     .attr('class', 'layer-feature-list-container');
113370
113371                 containerEnter
113372                     .append('ul')
113373                     .attr('class', 'layer-list layer-feature-list');
113374
113375                 var footer = containerEnter
113376                     .append('div')
113377                     .attr('class', 'feature-list-links section-footer');
113378
113379                 footer
113380                     .append('a')
113381                     .attr('class', 'feature-list-link')
113382                     .attr('href', '#')
113383                     .text(t('issues.enable_all'))
113384                     .on('click', function() {
113385                         context.features().enableAll();
113386                     });
113387
113388                 footer
113389                     .append('a')
113390                     .attr('class', 'feature-list-link')
113391                     .attr('href', '#')
113392                     .text(t('issues.disable_all'))
113393                     .on('click', function() {
113394                         context.features().disableAll();
113395                     });
113396
113397                 // Update
113398                 container = container
113399                     .merge(containerEnter);
113400
113401                 _featureList = container.selectAll('.layer-feature-list');
113402
113403                 updateFeatureList();
113404             }
113405
113406             function updatePhotoOverlays() {
113407                 _photoOverlayContainer
113408                     .call(drawPhotoItems)
113409                     .call(drawPhotoTypeItems);
113410             }
113411
113412             function updateDataLayers() {
113413                 _dataLayerContainer
113414                     .call(drawOsmItems)
113415                     .call(drawQAItems)
113416                     .call(drawCustomDataItems)
113417                     .call(drawVectorItems);      // Beta - Detroit mapping challenge
113418             }
113419
113420             function updateFillList() {
113421                 _fillList
113422                     .call(drawListItems, fills, 'radio', 'area_fill', setFill, showsFill);
113423             }
113424
113425             function updateVisualDiffList() {
113426                 _visualDiffList
113427                     .call(drawListItems, ['highlight_edits'], 'checkbox', 'visual_diff', toggleHighlightEdited, function() {
113428                         return context.surface().classed('highlight-edited');
113429                     });
113430             }
113431
113432             function updateFeatureList() {
113433                 _featureList
113434                     .call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature);
113435             }
113436
113437             function update() {
113438
113439                 if (!_pane.select('.disclosure-wrap-data_layers').classed('hide')) {
113440                     updateDataLayers();
113441                 }
113442                 if (!_pane.select('.disclosure-wrap-photo_overlays').classed('hide')) {
113443                     updatePhotoOverlays();
113444                 }
113445                 if (!_pane.select('.disclosure-wrap-fill_area').classed('hide')) {
113446                     updateFillList();
113447                 }
113448                 if (!_pane.select('.disclosure-wrap-map_features').classed('hide')) {
113449                     updateFeatureList();
113450                 }
113451
113452                 _QAList
113453                     .call(drawListItems, ['keep-right'], 'checkbox', 'QA', function(d) { toggleLayer(d); }, showsQA);
113454             }
113455
113456
113457             function toggleWireframe() {
113458                 if (event) {
113459                     event.preventDefault();
113460                     event.stopPropagation();
113461                 }
113462
113463                 if (_fillSelected === 'wireframe') {
113464                     _fillSelected = context.storage('area-fill-toggle') || 'partial';
113465                 } else {
113466                     _fillSelected = 'wireframe';
113467                 }
113468
113469                 setFill(_fillSelected);
113470                 context.map().pan([0,0]);  // trigger a redraw
113471             }
113472
113473             var paneTooltip = tooltip()
113474                 .placement((textDirection === 'rtl') ? 'right' : 'left')
113475                 .html(true)
113476                 .title(uiTooltipHtml(t('map_data.description'), key));
113477
113478             function hidePane() {
113479                 context.ui().togglePanes();
113480             }
113481
113482             uiMapData.togglePane = function() {
113483                 if (event) { event.preventDefault(); }
113484                 paneTooltip.hide();
113485                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
113486             };
113487
113488             uiMapData.renderToggleButton = function(selection) {
113489
113490                 selection
113491                     .append('button')
113492                     .on('click', uiMapData.togglePane)
113493                     .call(svgIcon('#iD-icon-data', 'light'))
113494                     .call(paneTooltip);
113495             };
113496
113497
113498             uiMapData.renderPane = function(selection) {
113499
113500                 _pane = selection
113501                     .append('div')
113502                     .attr('class', 'fillL map-pane map-data-pane hide')
113503                     .attr('pane', 'map-data');
113504
113505                 var heading = _pane
113506                     .append('div')
113507                     .attr('class', 'pane-heading');
113508
113509                 heading
113510                     .append('h2')
113511                     .text(t('map_data.title'));
113512
113513                 heading
113514                     .append('button')
113515                     .on('click', hidePane)
113516                     .call(svgIcon('#iD-icon-close'));
113517
113518
113519                 var content = _pane
113520                     .append('div')
113521                     .attr('class', 'pane-content');
113522
113523
113524                 // data layers
113525                 content
113526                     .append('div')
113527                     .attr('class', 'map-data-data-layers')
113528                     .call(uiDisclosure(context, 'data_layers', true)
113529                         .title(t('map_data.data_layers'))
113530                         .content(renderDataLayers)
113531                     );
113532
113533                 // photo overlays
113534                 content
113535                     .append('div')
113536                     .attr('class', 'map-data-photo-overlays')
113537                     .call(uiDisclosure(context, 'photo_overlays', false)
113538                         .title(t('photo_overlays.title'))
113539                         .content(renderPhotoOverlays)
113540                     );
113541
113542                 // area fills
113543                 content
113544                     .append('div')
113545                     .attr('class', 'map-data-area-fills')
113546                     .call(uiDisclosure(context, 'fill_area', false)
113547                         .title(t('map_data.style_options'))
113548                         .content(renderStyleOptions)
113549                     );
113550
113551                 // feature filters
113552                 content
113553                     .append('div')
113554                     .attr('class', 'map-data-feature-filters')
113555                     .call(uiDisclosure(context, 'map_features', false)
113556                         .title(t('map_data.map_features'))
113557                         .content(renderFeatureList)
113558                     );
113559
113560
113561                 // add listeners
113562                 context.features()
113563                     .on('change.map_data-update', update);
113564
113565                 update();
113566                 setFill(_fillSelected);
113567
113568                 context.keybinding()
113569                     .on(key, uiMapData.togglePane)
113570                     .on(t('area_fill.wireframe.key'), toggleWireframe)
113571                     .on(osmDataToggleKey, function() {
113572                         event.preventDefault();
113573                         event.stopPropagation();
113574                         toggleLayer('osm');
113575                     })
113576                     .on(t('map_data.highlight_edits.key'), toggleHighlightEdited);
113577             };
113578
113579             return uiMapData;
113580         }
113581
113582         function uiNotice(context) {
113583
113584             return function(selection) {
113585                 var div = selection
113586                     .append('div')
113587                     .attr('class', 'notice');
113588
113589                 var button = div
113590                     .append('button')
113591                     .attr('class', 'zoom-to notice fillD')
113592                     .on('click', function() {
113593                         context.map().zoomEase(context.minEditableZoom());
113594                     })
113595                     .on('wheel', function() {   // let wheel events pass through #4482
113596                         var e2 = new WheelEvent(event.type, event);
113597                         context.surface().node().dispatchEvent(e2);
113598                     });
113599
113600                 button
113601                     .call(svgIcon('#iD-icon-plus', 'pre-text'))
113602                     .append('span')
113603                     .attr('class', 'label')
113604                     .text(t('zoom_in_edit'));
113605
113606
113607                 function disableTooHigh() {
113608                     var canEdit = context.map().zoom() >= context.minEditableZoom();
113609                     div.style('display', canEdit ? 'none' : 'block');
113610                 }
113611
113612                 context.map()
113613                     .on('move.notice', debounce(disableTooHigh, 500));
113614
113615                 disableTooHigh();
113616             };
113617         }
113618
113619         function uiPhotoviewer(context) {
113620
113621             var dispatch$1 = dispatch('resize');
113622
113623             function photoviewer(selection) {
113624                 selection
113625                     .append('button')
113626                     .attr('class', 'thumb-hide')
113627                     .on('click', function () {
113628                         if (services$1.streetside) { services$1.streetside.hideViewer(); }
113629                         if (services$1.mapillary) { services$1.mapillary.hideViewer(); }
113630                         if (services$1.openstreetcam) { services$1.openstreetcam.hideViewer(); }
113631                     })
113632                     .append('div')
113633                     .call(svgIcon('#iD-icon-close'));
113634
113635                 selection
113636                     .append('button')
113637                     .attr('class', 'resize-handle-xy')
113638                     .on(
113639                         'mousedown',
113640                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true, resizeOnY: true })
113641                     );
113642
113643                 selection
113644                     .append('button')
113645                     .attr('class', 'resize-handle-x')
113646                     .on(
113647                         'mousedown',
113648                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true })
113649                     );
113650
113651                 selection
113652                     .append('button')
113653                     .attr('class', 'resize-handle-y')
113654                     .on(
113655                         'mousedown',
113656                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnY: true })
113657                     );
113658
113659                 services$1.streetside.loadViewer(context);
113660                 services$1.mapillary.loadViewer(context);
113661                 services$1.openstreetcam.loadViewer(context);
113662
113663                 function buildResizeListener(target, eventName, dispatch, options) {
113664                     var resizeOnX = !!options.resizeOnX;
113665                     var resizeOnY = !!options.resizeOnY;
113666                     var minHeight = options.minHeight || 240;
113667                     var minWidth = options.minWidth || 320;
113668                     var startX;
113669                     var startY;
113670                     var startWidth;
113671                     var startHeight;
113672
113673                     function startResize() {
113674                         var mapSize = context.map().dimensions();
113675
113676                         if (resizeOnX) {
113677                             var maxWidth = mapSize[0];
113678                             var newWidth = clamp((startWidth + event.clientX - startX), minWidth, maxWidth);
113679                             target.style('width', newWidth + 'px');
113680                         }
113681
113682                         if (resizeOnY) {
113683                             var maxHeight = mapSize[1] - 90;  // preserve space at top/bottom of map
113684                             var newHeight = clamp((startHeight + startY - event.clientY), minHeight, maxHeight);
113685                             target.style('height', newHeight + 'px');
113686                         }
113687
113688                         dispatch.call(eventName, target, utilGetDimensions(target, true));
113689                     }
113690
113691                     function clamp(num, min, max) {
113692                         return Math.max(min, Math.min(num, max));
113693                     }
113694
113695                     function stopResize() {
113696                         d3_select(window)
113697                             .on('.' + eventName, null);
113698                     }
113699
113700                     return function initResize() {
113701                         startX = event.clientX;
113702                         startY = event.clientY;
113703                         startWidth = target.node().getBoundingClientRect().width;
113704                         startHeight = target.node().getBoundingClientRect().height;
113705
113706                         d3_select(window)
113707                             .on('mousemove.' + eventName, startResize, false)
113708                             .on('mouseup.' + eventName, stopResize, false);
113709                     };
113710                 }
113711             }
113712
113713             photoviewer.onMapResize = function() {
113714                 var photoviewer = d3_select('#photoviewer');
113715                 var content = d3_select('#content');
113716                 var mapDimensions = utilGetDimensions(content, true);
113717                 // shrink photo viewer if it is too big
113718                 // (-90 preserves space at top and bottom of map used by menus)
113719                 var photoDimensions = utilGetDimensions(photoviewer, true);
113720                 if (photoDimensions[0] > mapDimensions[0] || photoDimensions[1] > (mapDimensions[1] - 90)) {
113721                     var setPhotoDimensions = [
113722                         Math.min(photoDimensions[0], mapDimensions[0]),
113723                         Math.min(photoDimensions[1], mapDimensions[1] - 90) ];
113724
113725                     photoviewer
113726                         .style('width', setPhotoDimensions[0] + 'px')
113727                         .style('height', setPhotoDimensions[1] + 'px');
113728
113729                     dispatch$1.call('resize', photoviewer, setPhotoDimensions);
113730                 }
113731             };
113732
113733             return utilRebind(photoviewer, dispatch$1, 'on');
113734         }
113735
113736         function uiPreferences(context) {
113737           var key = t('preferences.key');
113738           var _pane = d3_select(null);
113739           var _showThirdPartyIcons = context.storage('preferences.privacy.thirdpartyicons') || 'true';
113740
113741           var paneTooltip = tooltip()
113742             .placement((textDirection === 'rtl') ? 'right' : 'left')
113743             .html(true)
113744             .title(uiTooltipHtml(t('preferences.description'), key));
113745
113746
113747           function renderPrivacyOptions(selection) {
113748             // enter
113749             var privacyOptionsListEnter = selection.selectAll('.privacy-options-list')
113750               .data([0])
113751               .enter()
113752               .append('ul')
113753               .attr('class', 'layer-list privacy-options-list');
113754
113755             var thirdPartyIconsEnter = privacyOptionsListEnter
113756               .append('li')
113757               .attr('class', 'privacy-third-party-icons-item')
113758               .append('label')
113759               .call(tooltip()
113760                 .title(t('preferences.privacy.third_party_icons.tooltip'))
113761                 .placement('bottom')
113762               );
113763
113764             thirdPartyIconsEnter
113765               .append('input')
113766               .attr('type', 'checkbox')
113767               .on('change', function () {
113768                 event.preventDefault();
113769                 _showThirdPartyIcons = (_showThirdPartyIcons === 'true') ? 'false' : 'true';
113770                 context.storage('preferences.privacy.thirdpartyicons', _showThirdPartyIcons);
113771                 update();
113772               });
113773
113774             thirdPartyIconsEnter
113775               .append('span')
113776               .text(t('preferences.privacy.third_party_icons.description'));
113777
113778
113779             // Privacy Policy link
113780             selection.selectAll('.privacy-link')
113781               .data([0])
113782               .enter()
113783               .append('div')
113784               .attr('class', 'privacy-link')
113785               .append('a')
113786               .attr('target', '_blank')
113787               .call(svgIcon('#iD-icon-out-link', 'inline'))
113788               .attr('href', 'https://github.com/openstreetmap/iD/blob/master/PRIVACY.md')
113789               .append('span')
113790               .text(t('preferences.privacy.privacy_link'));
113791
113792             update();
113793
113794
113795             function update() {
113796               selection.selectAll('.privacy-third-party-icons-item')
113797                 .classed('active', (_showThirdPartyIcons === 'true'))
113798                 .select('input')
113799                 .property('checked', (_showThirdPartyIcons === 'true'));
113800             }
113801           }
113802
113803
113804           uiPreferences.togglePane = function () {
113805             if (event) { event.preventDefault(); }
113806             paneTooltip.hide();
113807             context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
113808           };
113809
113810
113811           uiPreferences.renderToggleButton = function (selection) {
113812             selection
113813               .append('button')
113814               .on('click', uiPreferences.togglePane)
113815               .call(svgIcon('#fas-user-cog', 'light'))
113816               .call(paneTooltip);
113817           };
113818
113819
113820           uiPreferences.renderPane = function (selection) {
113821             _pane = selection
113822               .append('div')
113823               .attr('class', 'fillL map-pane preferences-pane hide')
113824               .attr('pane', 'preferences');
113825
113826             var heading = _pane
113827               .append('div')
113828               .attr('class', 'pane-heading');
113829
113830             heading
113831               .append('h2')
113832               .text(t('preferences.title'));
113833
113834             heading
113835               .append('button')
113836               .on('click', function () { return context.ui().togglePanes(); })
113837               .call(svgIcon('#iD-icon-close'));
113838
113839
113840             var content = _pane
113841               .append('div')
113842               .attr('class', 'pane-content');
113843
113844             content
113845               .append('div')
113846               .attr('class', 'preferences-privacy')
113847               .call(uiDisclosure(context, 'preferences_third_party', true)
113848                 .title(t('preferences.privacy.title'))
113849                 .content(renderPrivacyOptions)
113850               );
113851
113852             context.keybinding()
113853               .on(key, uiPreferences.togglePane);
113854           };
113855
113856           return uiPreferences;
113857         }
113858
113859         function uiRestore(context) {
113860           return function(selection) {
113861             if (!context.history().hasRestorableChanges()) { return; }
113862
113863             var modalSelection = uiModal(selection, true);
113864
113865             modalSelection.select('.modal')
113866               .attr('class', 'modal fillL');
113867
113868             var introModal = modalSelection.select('.content');
113869
113870             introModal
113871               .append('div')
113872               .attr('class', 'modal-section')
113873               .append('h3')
113874               .text(t('restore.heading'));
113875
113876             introModal
113877               .append('div')
113878               .attr('class','modal-section')
113879               .append('p')
113880               .text(t('restore.description'));
113881
113882             var buttonWrap = introModal
113883               .append('div')
113884               .attr('class', 'modal-actions');
113885
113886             var restore = buttonWrap
113887               .append('button')
113888               .attr('class', 'restore')
113889               .on('click', function () {
113890                 context.history().restore();
113891                 modalSelection.remove();
113892               });
113893
113894             restore
113895               .append('svg')
113896               .attr('class', 'logo logo-restore')
113897               .append('use')
113898               .attr('xlink:href', '#iD-logo-restore');
113899
113900             restore
113901               .append('div')
113902               .text(t('restore.restore'));
113903
113904             var reset = buttonWrap
113905               .append('button')
113906               .attr('class', 'reset')
113907               .on('click', function () {
113908                 context.history().clearSaved();
113909                 modalSelection.remove();
113910               });
113911
113912             reset
113913               .append('svg')
113914               .attr('class', 'logo logo-reset')
113915               .append('use')
113916               .attr('xlink:href', '#iD-logo-reset');
113917
113918             reset
113919               .append('div')
113920               .text(t('restore.reset'));
113921
113922             restore.node().focus();
113923           };
113924         }
113925
113926         function uiScale(context) {
113927             var projection = context.projection,
113928                 isImperial = (utilDetect().locale.toLowerCase() === 'en-us'),
113929                 maxLength = 180,
113930                 tickHeight = 8;
113931
113932
113933             function scaleDefs(loc1, loc2) {
113934                 var lat = (loc2[1] + loc1[1]) / 2,
113935                     conversion = (isImperial ? 3.28084 : 1),
113936                     dist = geoLonToMeters(loc2[0] - loc1[0], lat) * conversion,
113937                     scale = { dist: 0, px: 0, text: '' },
113938                     buckets, i, val, dLon;
113939
113940                 if (isImperial) {
113941                     buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1];
113942                 } else {
113943                     buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1];
113944                 }
113945
113946                 // determine a user-friendly endpoint for the scale
113947                 for (i = 0; i < buckets.length; i++) {
113948                     val = buckets[i];
113949                     if (dist >= val) {
113950                         scale.dist = Math.floor(dist / val) * val;
113951                         break;
113952                     } else {
113953                         scale.dist = +dist.toFixed(2);
113954                     }
113955                 }
113956
113957                 dLon = geoMetersToLon(scale.dist / conversion, lat);
113958                 scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]);
113959
113960                 scale.text = displayLength(scale.dist / conversion, isImperial);
113961
113962                 return scale;
113963             }
113964
113965
113966             function update(selection) {
113967                 // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn)
113968                 var dims = context.map().dimensions(),
113969                     loc1 = projection.invert([0, dims[1]]),
113970                     loc2 = projection.invert([maxLength, dims[1]]),
113971                     scale = scaleDefs(loc1, loc2);
113972
113973                 selection.select('#scale-path')
113974                     .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight);
113975
113976                 selection.select('#scale-textgroup')
113977                     .attr('transform', 'translate(' + (scale.px + 8) + ',' + tickHeight + ')');
113978
113979                 selection.select('#scale-text')
113980                     .text(scale.text);
113981             }
113982
113983
113984             return function(selection) {
113985                 function switchUnits() {
113986                     isImperial = !isImperial;
113987                     selection.call(update);
113988                 }
113989
113990                 var scalegroup = selection.append('svg')
113991                     .attr('id', 'scale')
113992                     .on('click', switchUnits)
113993                     .append('g')
113994                     .attr('transform', 'translate(10,11)');
113995
113996                 scalegroup
113997                     .append('path')
113998                     .attr('id', 'scale-path');
113999
114000                 scalegroup
114001                     .append('g')
114002                     .attr('id', 'scale-textgroup')
114003                     .append('text')
114004                     .attr('id', 'scale-text');
114005
114006                 selection.call(update);
114007
114008                 context.map().on('move.scale', function() {
114009                     update(selection);
114010                 });
114011             };
114012         }
114013
114014         var pair_1 = pair$1;
114015
114016
114017         function search(input, dims) {
114018           if (!dims) { dims = 'NSEW'; }
114019           if (typeof input !== 'string') { return null; }
114020
114021           input = input.toUpperCase();
114022           var regex = /^[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)[°º˚]?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/;
114023
114024           var m = input.match(regex);
114025           if (!m) { return null; }  // no match
114026
114027           var matched = m[0];
114028
114029           // extract dimension.. m[1] = leading, m[5] = trailing
114030           var dim;
114031           if (m[1] && m[5]) {                 // if matched both..
114032             dim = m[1];                       // keep leading
114033             matched = matched.slice(0, -1);   // remove trailing dimension from match
114034           } else {
114035             dim = m[1] || m[5];
114036           }
114037
114038           // if unrecognized dimension
114039           if (dim && dims.indexOf(dim) === -1) { return null; }
114040
114041           // extract DMS
114042           var deg = m[2] ? parseFloat(m[2]) : 0;
114043           var min = m[3] ? parseFloat(m[3]) / 60 : 0;
114044           var sec = m[4] ? parseFloat(m[4]) / 3600 : 0;
114045           var sign = (deg < 0) ? -1 : 1;
114046           if (dim === 'S' || dim === 'W') { sign *= -1; }
114047
114048           return {
114049             val: (Math.abs(deg) + min + sec) * sign,
114050             dim: dim,
114051             matched: matched,
114052             remain: input.slice(matched.length)
114053           };
114054         }
114055
114056
114057         function pair$1(input, dims) {
114058           input = input.trim();
114059           var one = search(input, dims);
114060           if (!one) { return null; }
114061
114062           input = one.remain.trim();
114063           var two = search(input, dims);
114064           if (!two || two.remain) { return null; }
114065
114066           if (one.dim) {
114067             return swapdim(one.val, two.val, one.dim);
114068           } else {
114069             return [one.val, two.val];
114070           }
114071         }
114072
114073
114074         function swapdim(a, b, dim) {
114075           if (dim === 'N' || dim === 'S') { return [a, b]; }
114076           if (dim === 'W' || dim === 'E') { return [b, a]; }
114077         }
114078
114079         function uiFeatureList(context) {
114080             var _geocodeResults;
114081
114082
114083             function featureList(selection) {
114084                 var header = selection
114085                     .append('div')
114086                     .attr('class', 'header fillL cf');
114087
114088                 header
114089                     .append('h3')
114090                     .text(t('inspector.feature_list'));
114091
114092                 var searchWrap = selection
114093                     .append('div')
114094                     .attr('class', 'search-header');
114095
114096                 var search = searchWrap
114097                     .append('input')
114098                     .attr('placeholder', t('inspector.search'))
114099                     .attr('type', 'search')
114100                     .call(utilNoAuto)
114101                     .on('keypress', keypress)
114102                     .on('keydown', keydown)
114103                     .on('input', inputevent);
114104
114105                 searchWrap
114106                     .call(svgIcon('#iD-icon-search', 'pre-text'));
114107
114108                 var listWrap = selection
114109                     .append('div')
114110                     .attr('class', 'inspector-body');
114111
114112                 var list = listWrap
114113                     .append('div')
114114                     .attr('class', 'feature-list cf');
114115
114116                 context
114117                     .on('exit.feature-list', clearSearch);
114118                 context.map()
114119                     .on('drawn.feature-list', mapDrawn);
114120
114121                 context.keybinding()
114122                     .on(uiCmd('⌘F'), focusSearch);
114123
114124
114125                 function focusSearch() {
114126                     var mode = context.mode() && context.mode().id;
114127                     if (mode !== 'browse') { return; }
114128
114129                     event.preventDefault();
114130                     search.node().focus();
114131                 }
114132
114133
114134                 function keydown() {
114135                     if (event.keyCode === 27) {  // escape
114136                         search.node().blur();
114137                     }
114138                 }
114139
114140
114141                 function keypress() {
114142                     var q = search.property('value'),
114143                         items = list.selectAll('.feature-list-item');
114144                     if (event.keyCode === 13 && q.length && items.size()) {  // return
114145                         click(items.datum());
114146                     }
114147                 }
114148
114149
114150                 function inputevent() {
114151                     _geocodeResults = undefined;
114152                     drawList();
114153                 }
114154
114155
114156                 function clearSearch() {
114157                     search.property('value', '');
114158                     drawList();
114159                 }
114160
114161
114162                 function mapDrawn(e) {
114163                     if (e.full) {
114164                         drawList();
114165                     }
114166                 }
114167
114168
114169                 function features() {
114170                     var result = [];
114171                     var graph = context.graph();
114172                     var visibleCenter = context.map().extent().center();
114173                     var q = search.property('value').toLowerCase();
114174
114175                     if (!q) { return result; }
114176
114177                     var idMatch = q.match(/^([nwr])([0-9]+)$/);
114178
114179                     if (idMatch) {
114180                         result.push({
114181                             id: idMatch[0],
114182                             geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation',
114183                             type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'),
114184                             name: idMatch[2]
114185                         });
114186                     }
114187
114188                     var locationMatch = pair_1(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/);
114189
114190                     if (locationMatch) {
114191                         var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])];
114192                         result.push({
114193                             id: -1,
114194                             geometry: 'point',
114195                             type: t('inspector.location'),
114196                             name: dmsCoordinatePair([loc[1], loc[0]]),
114197                             location: loc
114198                         });
114199                     }
114200
114201                     var allEntities = graph.entities;
114202                     var localResults = [];
114203                     for (var id in allEntities) {
114204                         var entity = allEntities[id];
114205                         if (!entity) { continue; }
114206
114207                         var name = utilDisplayName(entity) || '';
114208                         if (name.toLowerCase().indexOf(q) < 0) { continue; }
114209                         
114210                         var matched = context.presets().match(entity, graph);
114211                         var type = (matched && matched.name()) || utilDisplayType(entity.id);
114212                         var extent = entity.extent(graph);
114213                         var distance = extent ? geoSphericalDistance(visibleCenter, extent.center()) : 0;
114214
114215                         localResults.push({
114216                             id: entity.id,
114217                             entity: entity,
114218                             geometry: context.geometry(entity.id),
114219                             type: type,
114220                             name: name,
114221                             distance: distance
114222                         });
114223
114224                         if (localResults.length > 100) { break; }
114225                     }
114226                     localResults = localResults.sort(function byDistance(a, b) {
114227                         return a.distance - b.distance;
114228                     });
114229                     result = result.concat(localResults);
114230
114231                     (_geocodeResults || []).forEach(function(d) {
114232                         if (d.osm_type && d.osm_id) {    // some results may be missing these - #1890
114233
114234                             // Make a temporary osmEntity so we can preset match
114235                             // and better localize the search result - #4725
114236                             var id = osmEntity.id.fromOSM(d.osm_type, d.osm_id);
114237                             var tags = {};
114238                             tags[d.class] = d.type;
114239
114240                             var attrs = { id: id, type: d.osm_type, tags: tags };
114241                             if (d.osm_type === 'way') {   // for ways, add some fake closed nodes
114242                                 attrs.nodes = ['a','a'];  // so that geometry area is possible
114243                             }
114244
114245                             var tempEntity = osmEntity(attrs);
114246                             var tempGraph = coreGraph([tempEntity]);
114247                             var matched = context.presets().match(tempEntity, tempGraph);
114248                             var type = (matched && matched.name()) || utilDisplayType(id);
114249
114250                             result.push({
114251                                 id: tempEntity.id,
114252                                 geometry: tempEntity.geometry(tempGraph),
114253                                 type: type,
114254                                 name: d.display_name,
114255                                 extent: new geoExtent(
114256                                     [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])],
114257                                     [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])])
114258                             });
114259                         }
114260                     });
114261
114262                     if (q.match(/^[0-9]+$/)) {
114263                         // if query is just a number, possibly an OSM ID without a prefix
114264                         result.push({
114265                             id: 'n' + q,
114266                             geometry: 'point',
114267                             type: t('inspector.node'),
114268                             name: q
114269                         });
114270                         result.push({
114271                             id: 'w' + q,
114272                             geometry: 'line',
114273                             type: t('inspector.way'),
114274                             name: q
114275                         });
114276                         result.push({
114277                             id: 'r' + q,
114278                             geometry: 'relation',
114279                             type: t('inspector.relation'),
114280                             name: q
114281                         });
114282                     }
114283
114284                     return result;
114285                 }
114286
114287
114288                 function drawList() {
114289                     var value = search.property('value');
114290                     var results = features();
114291
114292                     list.classed('filtered', value.length);
114293
114294                     var resultsIndicator = list.selectAll('.no-results-item')
114295                         .data([0])
114296                         .enter()
114297                         .append('button')
114298                         .property('disabled', true)
114299                         .attr('class', 'no-results-item')
114300                         .call(svgIcon('#iD-icon-alert', 'pre-text'));
114301
114302                     resultsIndicator.append('span')
114303                         .attr('class', 'entity-name');
114304
114305                     list.selectAll('.no-results-item .entity-name')
114306                         .text(t('geocoder.no_results_worldwide'));
114307
114308                     if (services$1.geocoder) {
114309                       list.selectAll('.geocode-item')
114310                           .data([0])
114311                           .enter()
114312                           .append('button')
114313                           .attr('class', 'geocode-item')
114314                           .on('click', geocoderSearch)
114315                           .append('div')
114316                           .attr('class', 'label')
114317                           .append('span')
114318                           .attr('class', 'entity-name')
114319                           .text(t('geocoder.search'));
114320                     }
114321
114322                     list.selectAll('.no-results-item')
114323                         .style('display', (value.length && !results.length) ? 'block' : 'none');
114324
114325                     list.selectAll('.geocode-item')
114326                         .style('display', (value && _geocodeResults === undefined) ? 'block' : 'none');
114327
114328                     list.selectAll('.feature-list-item')
114329                         .data([-1])
114330                         .remove();
114331
114332                     var items = list.selectAll('.feature-list-item')
114333                         .data(results, function(d) { return d.id; });
114334
114335                     var enter = items.enter()
114336                         .insert('button', '.geocode-item')
114337                         .attr('class', 'feature-list-item')
114338                         .on('mouseover', mouseover)
114339                         .on('mouseout', mouseout)
114340                         .on('click', click);
114341
114342                     var label = enter
114343                         .append('div')
114344                         .attr('class', 'label');
114345
114346                     label
114347                         .each(function(d) {
114348                             d3_select(this)
114349                                 .call(svgIcon('#iD-icon-' + d.geometry, 'pre-text'));
114350                         });
114351
114352                     label
114353                         .append('span')
114354                         .attr('class', 'entity-type')
114355                         .text(function(d) { return d.type; });
114356
114357                     label
114358                         .append('span')
114359                         .attr('class', 'entity-name')
114360                         .text(function(d) { return d.name; });
114361
114362                     enter
114363                         .style('opacity', 0)
114364                         .transition()
114365                         .style('opacity', 1);
114366
114367                     items.order();
114368
114369                     items.exit()
114370                         .remove();
114371                 }
114372
114373
114374                 function mouseover(d) {
114375                     if (d.id === -1) { return; }
114376
114377                     context.surface().selectAll(utilEntityOrMemberSelector([d.id], context.graph()))
114378                         .classed('hover', true);
114379                 }
114380
114381
114382                 function mouseout() {
114383                     context.surface().selectAll('.hover')
114384                         .classed('hover', false);
114385                 }
114386
114387
114388                 function click(d) {
114389                     event.preventDefault();
114390                     if (d.location) {
114391                         context.map().centerZoomEase([d.location[1], d.location[0]], 19);
114392                     }
114393                     else if (d.entity) {
114394                         if (d.entity.type === 'node') {
114395                             context.map().center(d.entity.loc);
114396                         } else if (d.entity.type === 'way') {
114397                             var center = context.projection(context.map().center());
114398                             var edge = geoChooseEdge(context.childNodes(d.entity), center, context.projection);
114399                             context.map().center(edge.loc);
114400                         }
114401                         context.enter(modeSelect(context, [d.entity.id]));
114402                     } else {
114403                         context.zoomToEntity(d.id);
114404                     }
114405                 }
114406
114407
114408                 function geocoderSearch() {
114409                     services$1.geocoder.search(search.property('value'), function (err, resp) {
114410                         _geocodeResults = resp || [];
114411                         drawList();
114412                     });
114413                 }
114414             }
114415
114416
114417             return featureList;
114418         }
114419
114420         function uiPresetIcon(context) {
114421           var arguments$1 = arguments;
114422
114423           var _preset;
114424           var _geometry;
114425           var _sizeClass = 'medium';
114426
114427
114428           function isSmall() {
114429             return _sizeClass === 'small';
114430           }
114431
114432
114433           function presetIcon(selection) {
114434             selection.each(render);
114435           }
114436
114437
114438           function getIcon(p, geom) {
114439             if (isSmall() && p.isFallback && p.isFallback())
114440               { return 'iD-icon-' + p.id; }
114441             else if (p.icon)
114442               { return p.icon; }
114443             else if (geom === 'line')
114444               { return 'iD-other-line'; }
114445             else if (geom === 'vertex')
114446               { return p.isFallback() ? '' : 'temaki-vertex'; }
114447             else if (isSmall() && geom === 'point')
114448               { return ''; }
114449             else
114450               { return 'maki-marker-stroked'; }
114451           }
114452
114453
114454           function renderPointBorder(enter) {
114455             var w = 40;
114456             var h = 40;
114457
114458             enter
114459               .append('svg')
114460               .attr('class', 'preset-icon-fill preset-icon-point-border')
114461               .attr('width', w)
114462               .attr('height', h)
114463               .attr('viewBox', ("0 0 " + w + " " + h))
114464               .append('path')
114465               .attr('transform', 'translate(11.5, 8)')
114466               .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');
114467           }
114468
114469
114470           function renderCircleFill(fillEnter) {
114471             var w = 60;
114472             var h = 60;
114473             var d = 40;
114474
114475             fillEnter
114476               .append('svg')
114477               .attr('class', 'preset-icon-fill preset-icon-fill-vertex')
114478               .attr('width', w)
114479               .attr('height', h)
114480               .attr('viewBox', ("0 0 " + w + " " + h))
114481               .append('circle')
114482               .attr('cx', w / 2)
114483               .attr('cy', h / 2)
114484               .attr('r', d / 2);
114485           }
114486
114487
114488           function renderSquareFill(fillEnter) {
114489             var d = isSmall() ? 40 : 60;
114490             var w = d;
114491             var h = d;
114492             var l = d * 2/3;
114493             var c1 = (w-l) / 2;
114494             var c2 = c1 + l;
114495
114496             fillEnter = fillEnter
114497               .append('svg')
114498               .attr('class', 'preset-icon-fill preset-icon-fill-area')
114499               .attr('width', w)
114500               .attr('height', h)
114501               .attr('viewBox', ("0 0 " + w + " " + h));
114502
114503             ['fill', 'stroke'].forEach(function (klass) {
114504               fillEnter
114505                 .append('path')
114506                 .attr('d', ("M" + c1 + " " + c1 + " L" + c1 + " " + c2 + " L" + c2 + " " + c2 + " L" + c2 + " " + c1 + " Z"))
114507                 .attr('class', ("line area " + klass));
114508             });
114509
114510             var rVertex = 2.5;
114511             [[c1, c1], [c1, c2], [c2, c2], [c2, c1]].forEach(function (point) {
114512               fillEnter
114513                 .append('circle')
114514                 .attr('class', 'vertex')
114515                 .attr('cx', point[0])
114516                 .attr('cy', point[1])
114517                 .attr('r', rVertex);
114518             });
114519
114520             if (!isSmall()) {
114521               var rMidpoint = 1.25;
114522               [[c1, w/2], [c2, w/2], [h/2, c1], [h/2, c2]].forEach(function (point) {
114523                 fillEnter
114524                   .append('circle')
114525                   .attr('class', 'midpoint')
114526                   .attr('cx', point[0])
114527                   .attr('cy', point[1])
114528                   .attr('r', rMidpoint);
114529               });
114530             }
114531           }
114532
114533
114534           function renderLine(lineEnter) {
114535             var d = isSmall() ? 40 : 60;
114536             // draw the line parametrically
114537             var w = d;
114538             var h = d;
114539             var y = Math.round(d * 0.72);
114540             var l = Math.round(d * 0.6);
114541             var r = 2.5;
114542             var x1 = (w - l) / 2;
114543             var x2 = x1 + l;
114544
114545             lineEnter = lineEnter
114546               .append('svg')
114547               .attr('class', 'preset-icon-line')
114548               .attr('width', w)
114549               .attr('height', h)
114550               .attr('viewBox', ("0 0 " + w + " " + h));
114551
114552             ['casing', 'stroke'].forEach(function (klass) {
114553               lineEnter
114554                 .append('path')
114555                 .attr('d', ("M" + x1 + " " + y + " L" + x2 + " " + y))
114556                 .attr('class', ("line " + klass));
114557             });
114558
114559             [[x1-1, y], [x2+1, y]].forEach(function (point) {
114560               lineEnter
114561                 .append('circle')
114562                 .attr('class', 'vertex')
114563                 .attr('cx', point[0])
114564                 .attr('cy', point[1])
114565                 .attr('r', r);
114566             });
114567           }
114568
114569
114570           function renderRoute(routeEnter) {
114571             var d = isSmall() ? 40 : 60;
114572             // draw the route parametrically
114573             var w = d;
114574             var h = d;
114575             var y1 = Math.round(d * 0.80);
114576             var y2 = Math.round(d * 0.68);
114577             var l = Math.round(d * 0.6);
114578             var r = 2;
114579             var x1 = (w - l) / 2;
114580             var x2 = x1 + l / 3;
114581             var x3 = x2 + l / 3;
114582             var x4 = x3 + l / 3;
114583
114584             routeEnter = routeEnter
114585               .append('svg')
114586               .attr('class', 'preset-icon-route')
114587               .attr('width', w)
114588               .attr('height', h)
114589               .attr('viewBox', ("0 0 " + w + " " + h));
114590
114591             ['casing', 'stroke'].forEach(function (klass) {
114592               routeEnter
114593                 .append('path')
114594                 .attr('d', ("M" + x1 + " " + y1 + " L" + x2 + " " + y2))
114595                 .attr('class', ("segment0 line " + klass));
114596               routeEnter
114597                 .append('path')
114598                 .attr('d', ("M" + x2 + " " + y2 + " L" + x3 + " " + y1))
114599                 .attr('class', ("segment1 line " + klass));
114600               routeEnter
114601                 .append('path')
114602                 .attr('d', ("M" + x3 + " " + y1 + " L" + x4 + " " + y2))
114603                 .attr('class', ("segment2 line " + klass));
114604             });
114605
114606             [[x1, y1], [x2, y2], [x3, y1], [x4, y2]].forEach(function (point) {
114607               routeEnter
114608                 .append('circle')
114609                 .attr('class', 'vertex')
114610                 .attr('cx', point[0])
114611                 .attr('cy', point[1])
114612                 .attr('r', r);
114613             });
114614           }
114615
114616
114617           // Route icons are drawn with a zigzag annotation underneath:
114618           //     o   o
114619           //    / \ /
114620           //   o   o
114621           // This dataset defines the styles that are used to draw the zigzag segments.
114622           var routeSegments = {
114623             bicycle: ['highway/cycleway', 'highway/cycleway', 'highway/cycleway'],
114624             bus: ['highway/unclassified', 'highway/secondary', 'highway/primary'],
114625             detour: ['highway/tertiary', 'highway/residential', 'highway/unclassified'],
114626             ferry: ['route/ferry', 'route/ferry', 'route/ferry'],
114627             foot: ['highway/footway', 'highway/footway', 'highway/footway'],
114628             hiking: ['highway/path', 'highway/path', 'highway/path'],
114629             horse: ['highway/bridleway', 'highway/bridleway', 'highway/bridleway'],
114630             light_rail: ['railway/light_rail', 'railway/light_rail', 'railway/light_rail'],
114631             monorail: ['railway/monorail', 'railway/monorail', 'railway/monorail'],
114632             pipeline: ['man_made/pipeline', 'man_made/pipeline', 'man_made/pipeline'],
114633             piste: ['piste/downhill', 'piste/hike', 'piste/nordic'],
114634             power: ['power/line', 'power/line', 'power/line'],
114635             road: ['highway/secondary', 'highway/primary', 'highway/trunk'],
114636             subway: ['railway/subway', 'railway/subway', 'railway/subway'],
114637             train: ['railway/rail', 'railway/rail', 'railway/rail'],
114638             tram: ['railway/tram', 'railway/tram', 'railway/tram'],
114639             waterway: ['waterway/stream', 'waterway/stream', 'waterway/stream']
114640           };
114641
114642
114643           function render() {
114644             var p = _preset.apply(this, arguments);
114645             var geom = _geometry ? _geometry.apply(this, arguments) : null;
114646             if (geom === 'relation' && p.tags && ((p.tags.type === 'route' && p.tags.route && routeSegments[p.tags.route]) || p.tags.type === 'waterway')) {
114647               geom = 'route';
114648             }
114649
114650             var showThirdPartyIcons = context.storage('preferences.privacy.thirdpartyicons') || 'true';
114651             var isFallback = isSmall() && p.isFallback && p.isFallback();
114652             var imageURL = (showThirdPartyIcons === 'true') && p.imageURL;
114653             var picon = getIcon(p, geom);
114654             var isMaki = picon && /^maki-/.test(picon);
114655             var isTemaki = picon && /^temaki-/.test(picon);
114656             var isFa = picon && /^fa[srb]-/.test(picon);
114657             var isTnp = picon && /^tnp-/.test(picon);
114658             var isiDIcon = picon && !(isMaki || isTemaki || isFa || isTnp);
114659             var isCategory = !p.setTags;
114660             var drawPoint = picon && geom === 'point' && isSmall() && !isFallback;
114661             var drawVertex = picon !== null && geom === 'vertex' && (!isSmall() || !isFallback);
114662             var drawLine = picon && geom === 'line' && !isFallback && !isCategory;
114663             var drawArea = picon && geom === 'area' && !isFallback;
114664             var drawRoute = picon && geom === 'route';
114665             var isFramed = (drawVertex || drawArea || drawLine || drawRoute);
114666
114667             var tags = !isCategory ? p.setTags({}, geom) : {};
114668             for (var k in tags) {
114669               if (tags[k] === '*') {
114670                 tags[k] = 'yes';
114671               }
114672             }
114673
114674             var tagClasses = svgTagClasses().getClassesString(tags, '');
114675             var selection = d3_select(this);
114676
114677             var container = selection.selectAll('.preset-icon-container')
114678               .data([0]);
114679
114680             container = container.enter()
114681               .append('div')
114682               .attr('class', ("preset-icon-container " + _sizeClass))
114683               .merge(container);
114684
114685             container
114686               .classed('showing-img', !!imageURL)
114687               .classed('fallback', isFallback);
114688
114689
114690             var pointBorder = container.selectAll('.preset-icon-point-border')
114691               .data(drawPoint ? [0] : []);
114692
114693             pointBorder.exit()
114694               .remove();
114695
114696             var pointBorderEnter = pointBorder.enter();
114697             renderPointBorder(pointBorderEnter);
114698             pointBorder = pointBorderEnter.merge(pointBorder);
114699
114700
114701             var vertexFill = container.selectAll('.preset-icon-fill-vertex')
114702               .data(drawVertex ? [0] : []);
114703
114704             vertexFill.exit()
114705               .remove();
114706
114707             var vertexFillEnter = vertexFill.enter();
114708             renderCircleFill(vertexFillEnter);
114709             vertexFill = vertexFillEnter.merge(vertexFill);
114710
114711
114712             var fill = container.selectAll('.preset-icon-fill-area')
114713               .data(drawArea ? [0] : []);
114714
114715             fill.exit()
114716               .remove();
114717
114718             var fillEnter = fill.enter();
114719             renderSquareFill(fillEnter);
114720             fill = fillEnter.merge(fill);
114721
114722             fill.selectAll('path.stroke')
114723               .attr('class', ("area stroke " + tagClasses));
114724             fill.selectAll('path.fill')
114725               .attr('class', ("area fill " + tagClasses));
114726
114727
114728             var line = container.selectAll('.preset-icon-line')
114729               .data(drawLine ? [0] : []);
114730
114731             line.exit()
114732               .remove();
114733
114734             var lineEnter = line.enter();
114735             renderLine(lineEnter);
114736             line = lineEnter.merge(line);
114737
114738             line.selectAll('path.stroke')
114739               .attr('class', ("line stroke " + tagClasses));
114740             line.selectAll('path.casing')
114741               .attr('class', ("line casing " + tagClasses));
114742
114743
114744             var route = container.selectAll('.preset-icon-route')
114745               .data(drawRoute ? [0] : []);
114746
114747             route.exit()
114748               .remove();
114749
114750             var routeEnter = route.enter();
114751             renderRoute(routeEnter);
114752             route = routeEnter.merge(route);
114753
114754             if (drawRoute) {
114755               var routeType = p.tags.type === 'waterway' ? 'waterway' : p.tags.route;
114756               var segmentPresetIDs = routeSegments[routeType];
114757               for (var i in segmentPresetIDs) {
114758                 var segmentPreset = context.presets().item(segmentPresetIDs[i]);
114759                 var segmentTagClasses = svgTagClasses().getClassesString(segmentPreset.tags, '');
114760                 route.selectAll(("path.stroke.segment" + i))
114761                   .attr('class', ("segment" + i + " line stroke " + segmentTagClasses));
114762                 route.selectAll(("path.casing.segment" + i))
114763                   .attr('class', ("segment" + i + " line casing " + segmentTagClasses));
114764               }
114765             }
114766
114767
114768             var icon = container.selectAll('.preset-icon')
114769               .data(picon ? [0] : []);
114770
114771             icon.exit()
114772               .remove();
114773
114774             icon = icon.enter()
114775               .append('div')
114776               .attr('class', 'preset-icon')
114777               .call(svgIcon(''))
114778               .merge(icon);
114779
114780             icon
114781               .attr('class', 'preset-icon ' + (geom ? geom + '-geom' : ''))
114782               .classed('framed', isFramed)
114783               .classed('preset-icon-iD', isiDIcon);
114784
114785             icon.selectAll('svg')
114786               .attr('class', 'icon ' + picon + ' ' + (!isiDIcon && geom !== 'line'  ? '' : tagClasses));
114787
114788             icon.selectAll('use')
114789               .attr('href', '#' + picon + (isMaki ? (isSmall() && geom === 'point' ? '-11' : '-15') : ''));
114790
114791             var imageIcon = container.selectAll('img.image-icon')
114792               .data(imageURL ? [0] : []);
114793
114794             imageIcon.exit()
114795               .remove();
114796
114797             imageIcon = imageIcon.enter()
114798               .append('img')
114799               .attr('class', 'image-icon')
114800               .on('load', function () { return container.classed('showing-img', true); } )
114801               .on('error', function () { return container.classed('showing-img', false); } )
114802               .merge(imageIcon);
114803
114804             imageIcon
114805               .attr('src', imageURL);
114806           }
114807
114808
114809           presetIcon.preset = function (val) {
114810             if (!arguments$1.length) { return _preset; }
114811             _preset = utilFunctor(val);
114812             return presetIcon;
114813           };
114814
114815
114816           presetIcon.geometry = function (val) {
114817             if (!arguments$1.length) { return _geometry; }
114818             _geometry = utilFunctor(val);
114819             return presetIcon;
114820           };
114821
114822
114823           presetIcon.sizeClass = function (val) {
114824             if (!arguments$1.length) { return _sizeClass; }
114825             _sizeClass = val;
114826             return presetIcon;
114827           };
114828
114829           return presetIcon;
114830         }
114831
114832         function uiRawMemberEditor(context) {
114833             var taginfo = services$1.taginfo;
114834             var _entityID;
114835             var _contentSelection = d3_select(null);
114836             var _maxMembers = 1000;
114837
114838             function downloadMember(d) {
114839                 event.preventDefault();
114840
114841                 // display the loading indicator
114842                 d3_select(this.parentNode).classed('tag-reference-loading', true);
114843                 context.loadEntity(d.id, function() {
114844                     updateDisclosureContent(_contentSelection);
114845                 });
114846             }
114847
114848             function zoomToMember(d) {
114849                 event.preventDefault();
114850
114851                 var entity = context.entity(d.id);
114852                 context.map().zoomTo(entity);
114853
114854                 // highlight the feature in case it wasn't previously on-screen
114855                 utilHighlightEntities([d.id], true, context);
114856             }
114857
114858
114859             function selectMember(d) {
114860                 event.preventDefault();
114861
114862                 // remove the hover-highlight styling
114863                 utilHighlightEntities([d.id], false, context);
114864
114865                 var entity = context.entity(d.id);
114866                 var mapExtent = context.map().extent();
114867                 if (!entity.intersects(mapExtent, context.graph())) {
114868                     // zoom to the entity if its extent is not visible now
114869                     context.map().zoomToEase(entity);
114870                 }
114871
114872                 context.enter(modeSelect(context, [d.id]));
114873             }
114874
114875
114876             function changeRole(d) {
114877                 var oldRole = d.role;
114878                 var newRole = d3_select(this).property('value');
114879
114880                 if (oldRole !== newRole) {
114881                     var member = { id: d.id, type: d.type, role: newRole };
114882                     context.perform(
114883                         actionChangeMember(d.relation.id, member, d.index),
114884                         t('operations.change_role.annotation')
114885                     );
114886                 }
114887             }
114888
114889
114890             function deleteMember(d) {
114891
114892                 // remove the hover-highlight styling
114893                 utilHighlightEntities([d.id], false, context);
114894
114895                 context.perform(
114896                     actionDeleteMember(d.relation.id, d.index),
114897                     t('operations.delete_member.annotation')
114898                 );
114899
114900                 if (!context.hasEntity(d.relation.id)) {
114901                     context.enter(modeBrowse(context));
114902                 }
114903             }
114904
114905             function updateDisclosureContent(selection) {
114906                 _contentSelection = selection;
114907
114908                 var memberships = [];
114909                 var entity = context.entity(_entityID);
114910                 entity.members.slice(0, _maxMembers).forEach(function(member, index) {
114911                     memberships.push({
114912                         index: index,
114913                         id: member.id,
114914                         type: member.type,
114915                         role: member.role,
114916                         relation: entity,
114917                         member: context.hasEntity(member.id)
114918                     });
114919                 });
114920
114921                 var list = selection.selectAll('.member-list')
114922                     .data([0]);
114923
114924                 list = list.enter()
114925                     .append('ul')
114926                     .attr('class', 'member-list')
114927                     .merge(list);
114928
114929
114930                 var items = list.selectAll('li')
114931                     .data(memberships, function(d) {
114932                         return osmEntity.key(d.relation) + ',' + d.index + ',' +
114933                             (d.member ? osmEntity.key(d.member) : 'incomplete');
114934                     });
114935
114936                 items.exit()
114937                     .each(unbind)
114938                     .remove();
114939
114940                 var itemsEnter = items.enter()
114941                     .append('li')
114942                     .attr('class', 'member-row form-field')
114943                     .classed('member-incomplete', function(d) { return !d.member; });
114944
114945                 itemsEnter
114946                     .each(function(d) {
114947                         var item = d3_select(this);
114948
114949                         var label = item
114950                             .append('label')
114951                             .attr('class', 'field-label');
114952
114953                         if (d.member) {
114954                             // highlight the member feature in the map while hovering on the list item
114955                             item
114956                                 .on('mouseover', function() {
114957                                     utilHighlightEntities([d.id], true, context);
114958                                 })
114959                                 .on('mouseout', function() {
114960                                     utilHighlightEntities([d.id], false, context);
114961                                 });
114962
114963                             var labelLink = label
114964                                 .append('span')
114965                                 .attr('class', 'label-text')
114966                                 .append('a')
114967                                 .attr('href', '#')
114968                                 .on('click', selectMember);
114969
114970                             labelLink
114971                                 .append('span')
114972                                 .attr('class', 'member-entity-type')
114973                                 .text(function(d) {
114974                                     var matched = context.presets().match(d.member, context.graph());
114975                                     return (matched && matched.name()) || utilDisplayType(d.member.id);
114976                                 });
114977
114978                             labelLink
114979                                 .append('span')
114980                                 .attr('class', 'member-entity-name')
114981                                 .text(function(d) { return utilDisplayName(d.member); });
114982
114983                             label
114984                                 .append('button')
114985                                 .attr('class', 'member-zoom')
114986                                 .attr('title', t('icons.zoom_to'))
114987                                 .call(svgIcon('#iD-icon-geolocate'))
114988                                 .on('click', zoomToMember);
114989
114990                         } else {
114991                             var labelText = label
114992                                 .append('span')
114993                                 .attr('class', 'label-text');
114994
114995                             labelText
114996                                 .append('span')
114997                                 .attr('class', 'member-entity-type')
114998                                 .text(t('inspector.' + d.type, { id: d.id }));
114999
115000                             labelText
115001                                 .append('span')
115002                                 .attr('class', 'member-entity-name')
115003                                 .text(t('inspector.incomplete', { id: d.id }));
115004
115005                             label
115006                                 .append('button')
115007                                 .attr('class', 'member-download')
115008                                 .attr('title', t('icons.download'))
115009                                 .attr('tabindex', -1)
115010                                 .call(svgIcon('#iD-icon-load'))
115011                                 .on('click', downloadMember);
115012                         }
115013                     });
115014
115015                 var wrapEnter = itemsEnter
115016                     .append('div')
115017                     .attr('class', 'form-field-input-wrap form-field-input-member');
115018
115019                 wrapEnter
115020                     .append('input')
115021                     .attr('class', 'member-role')
115022                     .property('type', 'text')
115023                     .attr('maxlength', 255)
115024                     .attr('placeholder', t('inspector.role'))
115025                     .call(utilNoAuto);
115026
115027                 wrapEnter
115028                     .append('button')
115029                     .attr('tabindex', -1)
115030                     .attr('title', t('icons.remove'))
115031                     .attr('class', 'remove form-field-button member-delete')
115032                     .call(svgIcon('#iD-operation-delete'));
115033
115034                 if (taginfo) {
115035                     wrapEnter.each(bindTypeahead);
115036                 }
115037
115038                 var dragOrigin, targetIndex;
115039
115040                 itemsEnter.call(d3_drag()
115041                     .on('start', function() {
115042                         dragOrigin = {
115043                             x: event.x,
115044                             y: event.y
115045                         };
115046                         targetIndex = null;
115047                     })
115048                     .on('drag', function(d, index) {
115049                         var x = event.x - dragOrigin.x,
115050                             y = event.y - dragOrigin.y;
115051
115052                         if (!d3_select(this).classed('dragging') &&
115053                             // don't display drag until dragging beyond a distance threshold
115054                             Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) <= 5) { return; }
115055
115056                         d3_select(this)
115057                             .classed('dragging', true);
115058
115059                         targetIndex = null;
115060
115061                         selection.selectAll('li.member-row')
115062                             .style('transform', function(d2, index2) {
115063                                 var node = d3_select(this).node();
115064                                 if (index === index2) {
115065                                     return 'translate(' + x + 'px, ' + y + 'px)';
115066                                 } else if (index2 > index && event.y > node.offsetTop - node.offsetHeight) {
115067                                     if (targetIndex === null || index2 > targetIndex) {
115068                                         targetIndex = index2;
115069                                     }
115070                                     return 'translateY(-100%)';
115071                                 } else if (index2 < index && event.y < node.offsetTop) {
115072                                     if (targetIndex === null || index2 < targetIndex) {
115073                                         targetIndex = index2;
115074                                     }
115075                                     return 'translateY(100%)';
115076                                 }
115077                                 return null;
115078                             });
115079                     })
115080                     .on('end', function(d, index) {
115081
115082                         if (!d3_select(this).classed('dragging')) {
115083                             return;
115084                         }
115085
115086                         d3_select(this)
115087                             .classed('dragging', false);
115088
115089                         selection.selectAll('li.member-row')
115090                             .style('transform', null);
115091
115092                         if (targetIndex !== null) {
115093                             // dragged to a new position, reorder
115094                             context.perform(
115095                                 actionMoveMember(d.relation.id, index, targetIndex),
115096                                 t('operations.reorder_members.annotation')
115097                             );
115098                         }
115099                     })
115100                 );
115101
115102
115103                 // update
115104                 items = items
115105                     .merge(itemsEnter);
115106
115107                 items.select('input.member-role')
115108                     .property('value', function(d) { return d.role; })
115109                     .on('blur', changeRole)
115110                     .on('change', changeRole);
115111
115112                 items.select('button.member-delete')
115113                     .on('click', deleteMember);
115114
115115
115116
115117                 function bindTypeahead(d) {
115118                     var row = d3_select(this);
115119                     var role = row.selectAll('input.member-role');
115120                     var origValue = role.property('value');
115121
115122                     function sort(value, data) {
115123                         var sameletter = [];
115124                         var other = [];
115125                         for (var i = 0; i < data.length; i++) {
115126                             if (data[i].value.substring(0, value.length) === value) {
115127                                 sameletter.push(data[i]);
115128                             } else {
115129                                 other.push(data[i]);
115130                             }
115131                         }
115132                         return sameletter.concat(other);
115133                     }
115134
115135                     role.call(uiCombobox(context, 'member-role')
115136                         .fetcher(function(role, callback) {
115137                             // The `geometry` param is used in the `taginfo.js` interface for
115138                             // filtering results, as a key into the `tag_members_fractions`
115139                             // object.  If we don't know the geometry because the member is
115140                             // not yet downloaded, it's ok to guess based on type.
115141                             var geometry;
115142                             if (d.member) {
115143                                 geometry = context.geometry(d.member.id);
115144                             } else if (d.type === 'relation') {
115145                                 geometry = 'relation';
115146                             } else if (d.type === 'way') {
115147                                 geometry = 'line';
115148                             } else {
115149                                 geometry = 'point';
115150                             }
115151
115152                             var rtype = entity.tags.type;
115153                             taginfo.roles({
115154                                 debounce: true,
115155                                 rtype: rtype || '',
115156                                 geometry: geometry,
115157                                 query: role
115158                             }, function(err, data) {
115159                                 if (!err) { callback(sort(role, data)); }
115160                             });
115161                         })
115162                         .on('cancel', function() {
115163                             role.property('value', origValue);
115164                         })
115165                     );
115166                 }
115167
115168
115169                 function unbind() {
115170                     var row = d3_select(this);
115171
115172                     row.selectAll('input.member-role')
115173                         .call(uiCombobox.off);
115174                 }
115175             }
115176
115177             function rawMemberEditor(selection) {
115178                 var entity = context.entity(_entityID);
115179
115180                 var gt = entity.members.length > _maxMembers ? '>' : '';
115181                 selection.call(uiDisclosure(context, 'raw_member_editor', true)
115182                     .title(t('inspector.all_members') + ' (' + gt + entity.members.slice(0, _maxMembers).length + ')')
115183                     .expanded(true)
115184                     .updatePreference(false)
115185                     .on('toggled', function(expanded) {
115186                         if (expanded) {
115187                             selection.node().parentNode.scrollTop += 200;
115188                         }
115189                     })
115190                     .content(updateDisclosureContent)
115191                 );
115192             }
115193
115194             rawMemberEditor.entityID = function(val) {
115195                 if (!arguments.length) { return _entityID; }
115196                 _entityID = val;
115197                 return rawMemberEditor;
115198             };
115199
115200
115201             return rawMemberEditor;
115202         }
115203
115204         function uiRawMembershipEditor(context) {
115205             var taginfo = services$1.taginfo;
115206             var nearbyCombo = uiCombobox(context, 'parent-relation')
115207                 .minItems(1)
115208                 .fetcher(fetchNearbyRelations)
115209                 .itemsMouseEnter(function(d) {
115210                     if (d.relation) { utilHighlightEntities([d.relation.id], true, context); }
115211                 })
115212                 .itemsMouseLeave(function(d) {
115213                     if (d.relation) { utilHighlightEntities([d.relation.id], false, context); }
115214                 });
115215             var _inChange = false;
115216             var _entityID;
115217             var _showBlank;
115218
115219
115220             function selectRelation(d) {
115221                 event.preventDefault();
115222
115223                 // remove the hover-highlight styling
115224                 utilHighlightEntities([d.relation.id], false, context);
115225
115226                 context.enter(modeSelect(context, [d.relation.id]));
115227             }
115228
115229
115230             function changeRole(d) {
115231                 if (d === 0) { return; }    // called on newrow (shoudn't happen)
115232                 if (_inChange) { return; }  // avoid accidental recursive call #5731
115233
115234                 var oldRole = d.member.role;
115235                 var newRole = d3_select(this).property('value');
115236
115237                 if (oldRole !== newRole) {
115238                     _inChange = true;
115239                     context.perform(
115240                         actionChangeMember(d.relation.id, Object.assign({}, d.member, { role: newRole }), d.index),
115241                         t('operations.change_role.annotation')
115242                     );
115243                 }
115244                 _inChange = false;
115245             }
115246
115247
115248             function addMembership(d, role) {
115249                 this.blur();           // avoid keeping focus on the button
115250                 _showBlank = false;
115251
115252                 var member = { id: _entityID, type: context.entity(_entityID).type, role: role };
115253
115254                 if (d.relation) {
115255                     context.perform(
115256                         actionAddMember(d.relation.id, member),
115257                         t('operations.add_member.annotation')
115258                     );
115259
115260                 } else {
115261                     var relation = osmRelation();
115262                     context.perform(
115263                         actionAddEntity(relation),
115264                         actionAddMember(relation.id, member),
115265                         t('operations.add.annotation.relation')
115266                     );
115267
115268                     context.enter(modeSelect(context, [relation.id]).newFeature(true));
115269                 }
115270             }
115271
115272
115273             function deleteMembership(d) {
115274                 this.blur();           // avoid keeping focus on the button
115275                 if (d === 0) { return; }   // called on newrow (shoudn't happen)
115276
115277                 // remove the hover-highlight styling
115278                 utilHighlightEntities([d.relation.id], false, context);
115279
115280                 context.perform(
115281                     actionDeleteMember(d.relation.id, d.index),
115282                     t('operations.delete_member.annotation')
115283                 );
115284             }
115285
115286
115287             function fetchNearbyRelations(q, callback) {
115288                 var newRelation = { relation: null, value: t('inspector.new_relation') };
115289
115290                 var result = [];
115291
115292                 var graph = context.graph();
115293
115294                 function baseDisplayLabel(entity) {
115295                     var matched = context.presets().match(entity, graph);
115296                     var presetName = (matched && matched.name()) || t('inspector.relation');
115297                     var entityName = utilDisplayName(entity) || '';
115298
115299                     return presetName + ' ' + entityName;
115300                 }
115301
115302                 var explicitRelation = q && context.hasEntity(q.toLowerCase());
115303                 if (explicitRelation && explicitRelation.type === 'relation' && explicitRelation.id !== _entityID) {
115304                     // loaded relation is specified explicitly, only show that
115305
115306                     result.push({
115307                         relation: explicitRelation,
115308                         value: baseDisplayLabel(explicitRelation) + ' ' + explicitRelation.id
115309                     });
115310                 } else {
115311
115312                     context.intersects(context.extent()).forEach(function(entity) {
115313                         if (entity.type !== 'relation' || entity.id === _entityID) { return; }
115314
115315                         var value = baseDisplayLabel(entity);
115316                         if (q && (value + ' ' + entity.id).toLowerCase().indexOf(q.toLowerCase()) === -1) { return; }
115317
115318                         result.push({ relation: entity, value: value });
115319                     });
115320
115321                     result.sort(function(a, b) {
115322                         return osmRelation.creationOrder(a.relation, b.relation);
115323                     });
115324
115325                     // Dedupe identical names by appending relation id - see #2891
115326                     var dupeGroups = Object.values(utilArrayGroupBy(result, 'value'))
115327                         .filter(function(v) { return v.length > 1; });
115328
115329                     dupeGroups.forEach(function(group) {
115330                         group.forEach(function(obj) {
115331                             obj.value += ' ' + obj.relation.id;
115332                         });
115333                     });
115334                 }
115335
115336                 result.forEach(function(obj) {
115337                     obj.title = obj.value;
115338                 });
115339
115340                 result.unshift(newRelation);
115341                 callback(result);
115342             }
115343
115344
115345             function rawMembershipEditor(selection) {
115346                 var entity = context.entity(_entityID);
115347                 var parents = context.graph().parentRelations(entity);
115348                 var memberships = [];
115349
115350                 parents.slice(0, 1000).forEach(function(relation) {
115351                     relation.members.forEach(function(member, index) {
115352                         if (member.id === entity.id) {
115353                             memberships.push({ relation: relation, member: member, index: index });
115354                         }
115355                     });
115356                 });
115357
115358                 var gt = parents.length > 1000 ? '>' : '';
115359                 selection.call(uiDisclosure(context, 'raw_membership_editor', true)
115360                     .title(t('inspector.all_relations') + ' (' + gt + memberships.length + ')')
115361                     .expanded(true)
115362                     .updatePreference(false)
115363                     .on('toggled', function(expanded) {
115364                         if (expanded) { selection.node().parentNode.scrollTop += 200; }
115365                     })
115366                     .content(content)
115367                 );
115368
115369
115370                 function content(selection) {
115371                     var list = selection.selectAll('.member-list')
115372                         .data([0]);
115373
115374                     list = list.enter()
115375                         .append('ul')
115376                         .attr('class', 'member-list')
115377                         .merge(list);
115378
115379
115380                     var items = list.selectAll('li.member-row-normal')
115381                         .data(memberships, function(d) {
115382                             return osmEntity.key(d.relation) + ',' + d.index;
115383                         });
115384
115385                     items.exit()
115386                         .each(unbind)
115387                         .remove();
115388
115389                     // Enter
115390                     var itemsEnter = items.enter()
115391                         .append('li')
115392                         .attr('class', 'member-row member-row-normal form-field');
115393
115394                     // highlight the relation in the map while hovering on the list item
115395                     itemsEnter.on('mouseover', function(d) {
115396                             utilHighlightEntities([d.relation.id], true, context);
115397                         })
115398                         .on('mouseout', function(d) {
115399                             utilHighlightEntities([d.relation.id], false, context);
115400                         });
115401
115402                     var labelEnter = itemsEnter
115403                         .append('label')
115404                         .attr('class', 'field-label')
115405                         .append('span')
115406                         .attr('class', 'label-text')
115407                         .append('a')
115408                         .attr('href', '#')
115409                         .on('click', selectRelation);
115410
115411                     labelEnter
115412                         .append('span')
115413                         .attr('class', 'member-entity-type')
115414                         .text(function(d) {
115415                             var matched = context.presets().match(d.relation, context.graph());
115416                             return (matched && matched.name()) || t('inspector.relation');
115417                         });
115418
115419                     labelEnter
115420                         .append('span')
115421                         .attr('class', 'member-entity-name')
115422                         .text(function(d) { return utilDisplayName(d.relation); });
115423
115424                     var wrapEnter = itemsEnter
115425                         .append('div')
115426                         .attr('class', 'form-field-input-wrap form-field-input-member');
115427
115428                     wrapEnter
115429                         .append('input')
115430                         .attr('class', 'member-role')
115431                         .property('type', 'text')
115432                         .attr('maxlength', 255)
115433                         .attr('placeholder', t('inspector.role'))
115434                         .call(utilNoAuto)
115435                         .property('value', function(d) { return d.member.role; })
115436                         .on('blur', changeRole)
115437                         .on('change', changeRole);
115438
115439                     wrapEnter
115440                         .append('button')
115441                         .attr('tabindex', -1)
115442                         .attr('class', 'remove form-field-button member-delete')
115443                         .call(svgIcon('#iD-operation-delete'))
115444                         .on('click', deleteMembership);
115445
115446                     if (taginfo) {
115447                         wrapEnter.each(bindTypeahead);
115448                     }
115449
115450
115451                     var newMembership = list.selectAll('.member-row-new')
115452                         .data(_showBlank ? [0] : []);
115453
115454                     // Exit
115455                     newMembership.exit()
115456                         .remove();
115457
115458                     // Enter
115459                     var newMembershipEnter = newMembership.enter()
115460                         .append('li')
115461                         .attr('class', 'member-row member-row-new form-field');
115462
115463                     newMembershipEnter
115464                         .append('label')
115465                         .attr('class', 'field-label')
115466                         .append('input')
115467                         .attr('placeholder', t('inspector.choose_relation'))
115468                         .attr('type', 'text')
115469                         .attr('class', 'member-entity-input')
115470                         .call(utilNoAuto);
115471
115472                     var newWrapEnter = newMembershipEnter
115473                         .append('div')
115474                         .attr('class', 'form-field-input-wrap form-field-input-member');
115475
115476                     newWrapEnter
115477                         .append('input')
115478                         .attr('class', 'member-role')
115479                         .property('type', 'text')
115480                         .attr('maxlength', 255)
115481                         .attr('placeholder', t('inspector.role'))
115482                         .call(utilNoAuto);
115483
115484                     newWrapEnter
115485                         .append('button')
115486                         .attr('tabindex', -1)
115487                         .attr('class', 'remove form-field-button member-delete')
115488                         .call(svgIcon('#iD-operation-delete'))
115489                         .on('click', function() {
115490                             list.selectAll('.member-row-new')
115491                                 .remove();
115492                         });
115493
115494                     // Update
115495                     newMembership = newMembership
115496                         .merge(newMembershipEnter);
115497
115498                     newMembership.selectAll('.member-entity-input')
115499                         .on('blur', cancelEntity)   // if it wasn't accepted normally, cancel it
115500                         .call(nearbyCombo
115501                             .on('accept', acceptEntity)
115502                             .on('cancel', cancelEntity)
115503                         );
115504
115505
115506                     // Container for the Add button
115507                     var addRow = selection.selectAll('.add-row')
115508                         .data([0]);
115509
115510                     // enter
115511                     var addRowEnter = addRow.enter()
115512                         .append('div')
115513                         .attr('class', 'add-row');
115514
115515                     var addRelationButton = addRowEnter
115516                         .append('button')
115517                         .attr('class', 'add-relation');
115518
115519                     addRelationButton
115520                         .call(svgIcon('#iD-icon-plus', 'light'));
115521                     addRelationButton
115522                         .call(tooltip().title(t('inspector.add_to_relation')).placement(textDirection === 'ltr' ? 'right' : 'left'));
115523
115524                     addRowEnter
115525                         .append('div')
115526                         .attr('class', 'space-value');   // preserve space
115527
115528                     addRowEnter
115529                         .append('div')
115530                         .attr('class', 'space-buttons');  // preserve space
115531
115532                     // update
115533                     addRow = addRow
115534                         .merge(addRowEnter);
115535
115536                     addRow.select('.add-relation')
115537                         .on('click', function() {
115538                             _showBlank = true;
115539                             content(selection);
115540                             list.selectAll('.member-entity-input').node().focus();
115541                         });
115542
115543
115544                     function acceptEntity(d) {
115545                         if (!d) {
115546                             cancelEntity();
115547                             return;
115548                         }
115549                         // remove hover-higlighting
115550                         if (d.relation) { utilHighlightEntities([d.relation.id], false, context); }
115551
115552                         var role = list.selectAll('.member-row-new .member-role').property('value');
115553                         addMembership(d, role);
115554                     }
115555
115556
115557                     function cancelEntity() {
115558                         var input = newMembership.selectAll('.member-entity-input');
115559                         input.property('value', '');
115560
115561                         // remove hover-higlighting
115562                         context.surface().selectAll('.highlighted')
115563                             .classed('highlighted', false);
115564                     }
115565
115566
115567                     function bindTypeahead(d) {
115568                         var row = d3_select(this);
115569                         var role = row.selectAll('input.member-role');
115570                         var origValue = role.property('value');
115571
115572                         function sort(value, data) {
115573                             var sameletter = [];
115574                             var other = [];
115575                             for (var i = 0; i < data.length; i++) {
115576                                 if (data[i].value.substring(0, value.length) === value) {
115577                                     sameletter.push(data[i]);
115578                                 } else {
115579                                     other.push(data[i]);
115580                                 }
115581                             }
115582                             return sameletter.concat(other);
115583                         }
115584
115585                         role.call(uiCombobox(context, 'member-role')
115586                             .fetcher(function(role, callback) {
115587                                 var rtype = d.relation.tags.type;
115588                                 taginfo.roles({
115589                                     debounce: true,
115590                                     rtype: rtype || '',
115591                                     geometry: context.geometry(_entityID),
115592                                     query: role
115593                                 }, function(err, data) {
115594                                     if (!err) { callback(sort(role, data)); }
115595                                 });
115596                             })
115597                             .on('cancel', function() {
115598                                 role.property('value', origValue);
115599                             })
115600                         );
115601                     }
115602
115603
115604                     function unbind() {
115605                         var row = d3_select(this);
115606
115607                         row.selectAll('input.member-role')
115608                             .call(uiCombobox.off);
115609                     }
115610                 }
115611             }
115612
115613
115614             rawMembershipEditor.entityID = function(val) {
115615                 if (!arguments.length) { return _entityID; }
115616                 _entityID = val;
115617                 _showBlank = false;
115618                 return rawMembershipEditor;
115619             };
115620
115621
115622             return rawMembershipEditor;
115623         }
115624
115625         // This currently only works with the 'restrictions' field
115626         // It borrows some code from uiHelp
115627
115628         function uiFieldHelp(context, fieldName) {
115629             var fieldHelp = {};
115630             var _inspector = d3_select(null);
115631             var _wrap = d3_select(null);
115632             var _body = d3_select(null);
115633
115634             var fieldHelpKeys = {
115635                 restrictions: [
115636                     ['about',[
115637                         'about',
115638                         'from_via_to',
115639                         'maxdist',
115640                         'maxvia'
115641                     ]],
115642                     ['inspecting',[
115643                         'about',
115644                         'from_shadow',
115645                         'allow_shadow',
115646                         'restrict_shadow',
115647                         'only_shadow',
115648                         'restricted',
115649                         'only'
115650                     ]],
115651                     ['modifying',[
115652                         'about',
115653                         'indicators',
115654                         'allow_turn',
115655                         'restrict_turn',
115656                         'only_turn'
115657                     ]],
115658                     ['tips',[
115659                         'simple',
115660                         'simple_example',
115661                         'indirect',
115662                         'indirect_example',
115663                         'indirect_noedit'
115664                     ]]
115665                 ]
115666             };
115667
115668             var fieldHelpHeadings = {};
115669
115670             var replacements = {
115671                 distField: t('restriction.controls.distance'),
115672                 viaField: t('restriction.controls.via'),
115673                 fromShadow: icon('#iD-turn-shadow', 'pre-text shadow from'),
115674                 allowShadow: icon('#iD-turn-shadow', 'pre-text shadow allow'),
115675                 restrictShadow: icon('#iD-turn-shadow', 'pre-text shadow restrict'),
115676                 onlyShadow: icon('#iD-turn-shadow', 'pre-text shadow only'),
115677                 allowTurn: icon('#iD-turn-yes', 'pre-text turn'),
115678                 restrictTurn: icon('#iD-turn-no', 'pre-text turn'),
115679                 onlyTurn: icon('#iD-turn-only', 'pre-text turn')
115680             };
115681
115682
115683             // For each section, squash all the texts into a single markdown document
115684             var docs = fieldHelpKeys[fieldName].map(function(key) {
115685                 var helpkey = 'help.field.' + fieldName + '.' + key[0];
115686                 var text = key[1].reduce(function(all, part) {
115687                     var subkey = helpkey + '.' + part;
115688                     var depth = fieldHelpHeadings[subkey];                     // is this subkey a heading?
115689                     var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
115690                     return all + hhh + t(subkey, replacements) + '\n\n';
115691                 }, '');
115692
115693                 return {
115694                     key: helpkey,
115695                     title: t(helpkey + '.title'),
115696                     html: marked_1(text.trim())
115697                 };
115698             });
115699
115700
115701             function show() {
115702                 updatePosition();
115703
115704                 _body
115705                     .classed('hide', false)
115706                     .style('opacity', '0')
115707                     .transition()
115708                     .duration(200)
115709                     .style('opacity', '1');
115710             }
115711
115712
115713             function hide() {
115714                 _body
115715                     .classed('hide', true)
115716                     .transition()
115717                     .duration(200)
115718                     .style('opacity', '0')
115719                     .on('end', function () {
115720                         _body.classed('hide', true);
115721                     });
115722             }
115723
115724
115725             function clickHelp(index) {
115726                 var d = docs[index];
115727                 var tkeys = fieldHelpKeys[fieldName][index][1];
115728
115729                 _body.selectAll('.field-help-nav-item')
115730                     .classed('active', function(d, i) { return i === index; });
115731
115732                 var content = _body.selectAll('.field-help-content')
115733                     .html(d.html);
115734
115735                 // class the paragraphs so we can find and style them
115736                 content.selectAll('p')
115737                     .attr('class', function(d, i) { return tkeys[i]; });
115738
115739                 // insert special content for certain help sections
115740                 if (d.key === 'help.field.restrictions.inspecting') {
115741                     content
115742                         .insert('img', 'p.from_shadow')
115743                         .attr('class', 'field-help-image cf')
115744                         .attr('src', context.imagePath('tr_inspect.gif'));
115745
115746                 } else if (d.key === 'help.field.restrictions.modifying') {
115747                     content
115748                         .insert('img', 'p.allow_turn')
115749                         .attr('class', 'field-help-image cf')
115750                         .attr('src', context.imagePath('tr_modify.gif'));
115751                 }
115752             }
115753
115754
115755             fieldHelp.button = function(selection) {
115756                 if (_body.empty()) { return; }
115757
115758                 var button = selection.selectAll('.field-help-button')
115759                     .data([0]);
115760
115761                 // enter/update
115762                 button.enter()
115763                     .append('button')
115764                     .attr('class', 'field-help-button')
115765                     .attr('tabindex', -1)
115766                     .call(svgIcon('#iD-icon-help'))
115767                     .merge(button)
115768                     .on('click', function () {
115769                         event.stopPropagation();
115770                         event.preventDefault();
115771                         if (_body.classed('hide')) {
115772                             show();
115773                         } else {
115774                             hide();
115775                         }
115776                     });
115777             };
115778
115779
115780             function updatePosition() {
115781                 var wrap = _wrap.node();
115782                 var inspector = _inspector.node();
115783                 var wRect = wrap.getBoundingClientRect();
115784                 var iRect = inspector.getBoundingClientRect();
115785
115786                 _body
115787                     .style('top', wRect.top + inspector.scrollTop - iRect.top + 'px');
115788             }
115789
115790
115791             fieldHelp.body = function(selection) {
115792                 // This control expects the field to have a form-field-input-wrap div
115793                 _wrap = selection.selectAll('.form-field-input-wrap');
115794                 if (_wrap.empty()) { return; }
115795
115796                 // absolute position relative to the inspector, so it "floats" above the fields
115797                 _inspector = d3_select('#sidebar .entity-editor-pane .inspector-body');
115798                 if (_inspector.empty()) { return; }
115799
115800                 _body = _inspector.selectAll('.field-help-body')
115801                     .data([0]);
115802
115803                 var enter = _body.enter()
115804                     .append('div')
115805                     .attr('class', 'field-help-body hide');   // initially hidden
115806
115807                 var titleEnter = enter
115808                     .append('div')
115809                     .attr('class', 'field-help-title cf');
115810
115811                 titleEnter
115812                     .append('h2')
115813                     .attr('class', ((textDirection === 'rtl') ? 'fr' : 'fl'))
115814                     .text(t('help.field.' + fieldName + '.title'));
115815
115816                 titleEnter
115817                     .append('button')
115818                     .attr('class', 'fr close')
115819                     .on('click', function() {
115820                         event.stopPropagation();
115821                         event.preventDefault();
115822                         hide();
115823                     })
115824                     .call(svgIcon('#iD-icon-close'));
115825
115826                 var navEnter = enter
115827                     .append('div')
115828                     .attr('class', 'field-help-nav cf');
115829
115830                 var titles = docs.map(function(d) { return d.title; });
115831                 navEnter.selectAll('.field-help-nav-item')
115832                     .data(titles)
115833                     .enter()
115834                     .append('div')
115835                     .attr('class', 'field-help-nav-item')
115836                     .text(function(d) { return d; })
115837                     .on('click', function(d, i) {
115838                         event.stopPropagation();
115839                         event.preventDefault();
115840                         clickHelp(i);
115841                     });
115842
115843                 enter
115844                     .append('div')
115845                     .attr('class', 'field-help-content');
115846
115847                 _body = _body
115848                     .merge(enter);
115849
115850                 clickHelp(0);
115851             };
115852
115853
115854             return fieldHelp;
115855         }
115856
115857         function uiFieldCheck(field, context) {
115858             var dispatch$1 = dispatch('change');
115859             var options = field.strings && field.strings.options;
115860             var values = [];
115861             var texts = [];
115862
115863             var input = d3_select(null);
115864             var text = d3_select(null);
115865             var label = d3_select(null);
115866             var reverser = d3_select(null);
115867
115868             var _impliedYes;
115869             var _entityID;
115870             var _value;
115871
115872
115873             if (options) {
115874                 for (var k in options) {
115875                     values.push(k === 'undefined' ? undefined : k);
115876                     texts.push(field.t('options.' + k, { 'default': options[k] }));
115877                 }
115878             } else {
115879                 values = [undefined, 'yes'];
115880                 texts = [t('inspector.unknown'), t('inspector.check.yes')];
115881                 if (field.type !== 'defaultCheck') {
115882                     values.push('no');
115883                     texts.push(t('inspector.check.no'));
115884                 }
115885             }
115886
115887
115888             // Checks tags to see whether an undefined value is "Assumed to be Yes"
115889             function checkImpliedYes() {
115890                 _impliedYes = (field.id === 'oneway_yes');
115891
115892                 // hack: pretend `oneway` field is a `oneway_yes` field
115893                 // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841
115894                 if (field.id === 'oneway') {
115895                     var entity = context.entity(_entityID);
115896                     for (var key in entity.tags) {
115897                         if (key in osmOneWayTags && (entity.tags[key] in osmOneWayTags[key])) {
115898                             _impliedYes = true;
115899                             texts[0] = t('presets.fields.oneway_yes.options.undefined');
115900                             break;
115901                         }
115902                     }
115903                 }
115904             }
115905
115906
115907             function reverserHidden() {
115908                 if (!d3_select('div.inspector-hover').empty()) { return true; }
115909                 return !(_value === 'yes' || (_impliedYes && !_value));
115910             }
115911
115912
115913             function reverserSetText(selection) {
115914                 var entity = context.hasEntity(_entityID);
115915                 if (reverserHidden() || !entity) { return selection; }
115916
115917                 var first = entity.first();
115918                 var last = entity.isClosed() ? entity.nodes[entity.nodes.length - 2] : entity.last();
115919                 var pseudoDirection = first < last;
115920                 var icon = pseudoDirection ? '#iD-icon-forward' : '#iD-icon-backward';
115921
115922                 selection.selectAll('.reverser-span')
115923                     .text(t('inspector.check.reverser'))
115924                     .call(svgIcon(icon, 'inline'));
115925
115926                 return selection;
115927             }
115928
115929
115930             var check = function(selection) {
115931                 checkImpliedYes();
115932
115933                 label = selection.selectAll('.form-field-input-wrap')
115934                     .data([0]);
115935
115936                 var enter = label.enter()
115937                     .append('label')
115938                     .attr('class', 'form-field-input-wrap form-field-input-check');
115939
115940                 enter
115941                     .append('input')
115942                     .property('indeterminate', field.type !== 'defaultCheck')
115943                     .attr('type', 'checkbox')
115944                     .attr('id', 'preset-input-' + field.safeid);
115945
115946                 enter
115947                     .append('span')
115948                     .text(texts[0])
115949                     .attr('class', 'value');
115950
115951                 if (field.type === 'onewayCheck') {
115952                     enter
115953                         .append('a')
115954                         .attr('id', 'preset-input-' + field.safeid + '-reverser')
115955                         .attr('class', 'reverser button' + (reverserHidden() ? ' hide' : ''))
115956                         .attr('href', '#')
115957                         .append('span')
115958                         .attr('class', 'reverser-span');
115959                 }
115960
115961                 label = label.merge(enter);
115962                 input = label.selectAll('input');
115963                 text = label.selectAll('span.value');
115964
115965                 input
115966                     .on('click', function() {
115967                         event.stopPropagation();
115968                         var t = {};
115969                         t[field.key] = values[(values.indexOf(_value) + 1) % values.length];
115970
115971                         // Don't cycle through `alternating` or `reversible` states - #4970
115972                         // (They are supported as translated strings, but should not toggle with clicks)
115973                         if (t[field.key] === 'reversible' || t[field.key] === 'alternating') {
115974                             t[field.key] = values[0];
115975                         }
115976
115977                         dispatch$1.call('change', this, t);
115978                     });
115979
115980                 if (field.type === 'onewayCheck') {
115981                     reverser = label.selectAll('.reverser');
115982
115983                     reverser
115984                         .call(reverserSetText)
115985                         .on('click', function() {
115986                             event.preventDefault();
115987                             event.stopPropagation();
115988                             context.perform(
115989                                 actionReverse(_entityID),
115990                                 t('operations.reverse.annotation')
115991                             );
115992                             
115993                             // must manually revalidate since no 'change' event was called
115994                             context.validator().validate();
115995
115996                             d3_select(this)
115997                                 .call(reverserSetText);
115998                         });
115999                 }
116000             };
116001
116002
116003             check.entity = function(_) {
116004                 if (!arguments.length) { return context.hasEntity(_entityID); }
116005                 _entityID = _.id;
116006                 return check;
116007             };
116008
116009
116010             check.tags = function(tags) {
116011
116012                 function isChecked(val) {
116013                     return val !== 'no' && val !== '' && val !== undefined && val !== null;
116014                 }
116015
116016                 function textFor(val) {
116017                     if (val === '') { val = undefined; }
116018                     var index = values.indexOf(val);
116019                     return (index !== -1 ? texts[index] : ('"' + val + '"'));
116020                 }
116021
116022                 checkImpliedYes();
116023                 _value = tags[field.key] && tags[field.key].toLowerCase();
116024
116025                 if (field.type === 'onewayCheck' && (_value === '1' || _value === '-1')) {
116026                     _value = 'yes';
116027                 }
116028
116029                 input
116030                     .property('indeterminate', field.type !== 'defaultCheck' && !_value)
116031                     .property('checked', isChecked(_value));
116032
116033                 text
116034                     .text(textFor(_value));
116035
116036                 label
116037                     .classed('set', !!_value);
116038
116039                 if (field.type === 'onewayCheck') {
116040                     reverser
116041                         .classed('hide', reverserHidden())
116042                         .call(reverserSetText);
116043                 }
116044             };
116045
116046
116047             check.focus = function() {
116048                 input.node().focus();
116049             };
116050
116051             return utilRebind(check, dispatch$1, 'on');
116052         }
116053
116054         function uiFieldCombo(field, context) {
116055             var dispatch$1 = dispatch('change');
116056             var taginfo = services$1.taginfo;
116057             var isMulti = (field.type === 'multiCombo');
116058             var isNetwork = (field.type === 'networkCombo');
116059             var isSemi = (field.type === 'semiCombo');
116060             var optstrings = field.strings && field.strings.options;
116061             var optarray = field.options;
116062             var snake_case = (field.snake_case || (field.snake_case === undefined));
116063             var caseSensitive = field.caseSensitive;
116064             var combobox = uiCombobox(context, 'combo-' + field.safeid)
116065                 .caseSensitive(caseSensitive)
116066                 .minItems(isMulti || isSemi ? 1 : 2);
116067             var container = d3_select(null);
116068             var inputWrap = d3_select(null);
116069             var input = d3_select(null);
116070             var _comboData = [];
116071             var _multiData = [];
116072             var _entity;
116073             var _countryCode;
116074
116075             // ensure multiCombo field.key ends with a ':'
116076             if (isMulti && /[^:]$/.test(field.key)) {
116077                 field.key += ':';
116078             }
116079
116080
116081             function snake(s) {
116082                 return s.replace(/\s+/g, '_');
116083             }
116084
116085             function unsnake(s) {
116086                 return s.replace(/_+/g, ' ');
116087             }
116088
116089             function clean(s) {
116090                 return s.split(';')
116091                     .map(function(s) { return s.trim(); })
116092                     .join(';');
116093             }
116094
116095
116096             // returns the tag value for a display value
116097             // (for multiCombo, dval should be the key suffix, not the entire key)
116098             function tagValue(dval) {
116099                 dval = clean(dval || '');
116100
116101                 if (optstrings) {
116102                     var found = _comboData.find(function(o) {
116103                         return o.key && clean(o.value) === dval;
116104                     });
116105                     if (found) {
116106                         return found.key;
116107                     }
116108                 }
116109
116110                 if (field.type === 'typeCombo' && !dval) {
116111                     return 'yes';
116112                 }
116113
116114                 return (snake_case ? snake(dval) : dval) || undefined;
116115             }
116116
116117
116118             // returns the display value for a tag value
116119             // (for multiCombo, tval should be the key suffix, not the entire key)
116120             function displayValue(tval) {
116121                 tval = tval || '';
116122
116123                 if (optstrings) {
116124                     var found = _comboData.find(function(o) {
116125                         return o.key === tval && o.value;
116126                     });
116127                     if (found) {
116128                         return found.value;
116129                     }
116130                 }
116131
116132                 if (field.type === 'typeCombo' && tval.toLowerCase() === 'yes') {
116133                     return '';
116134                 }
116135
116136                 return snake_case ? unsnake(tval) : tval;
116137             }
116138
116139
116140             // Compute the difference between arrays of objects by `value` property
116141             //
116142             // objectDifference([{value:1}, {value:2}, {value:3}], [{value:2}])
116143             // > [{value:1}, {value:3}]
116144             //
116145             function objectDifference(a, b) {
116146                 return a.filter(function(d1) {
116147                     return !b.some(function(d2) { return d1.value === d2.value; });
116148                 });
116149             }
116150
116151
116152             function initCombo(selection, attachTo) {
116153                 if (optstrings) {
116154                     selection.attr('readonly', 'readonly');
116155                     selection.call(combobox, attachTo);
116156                     setStaticValues(setPlaceholder);
116157
116158                 } else if (optarray) {
116159                     selection.call(combobox, attachTo);
116160                     setStaticValues(setPlaceholder);
116161
116162                 } else if (taginfo) {
116163                     selection.call(combobox.fetcher(setTaginfoValues), attachTo);
116164                     setTaginfoValues('', setPlaceholder);
116165                 }
116166             }
116167
116168
116169             function setStaticValues(callback) {
116170                 if (!(optstrings || optarray)) { return; }
116171
116172                 if (optstrings) {
116173                     _comboData = Object.keys(optstrings).map(function(k) {
116174                         var v = field.t('options.' + k, { 'default': optstrings[k] });
116175                         return {
116176                             key: k,
116177                             value: v,
116178                             title: v
116179                         };
116180                     });
116181
116182                 } else if (optarray) {
116183                     _comboData = optarray.map(function(k) {
116184                         var v = snake_case ? unsnake(k) : k;
116185                         return {
116186                             key: k,
116187                             value: v,
116188                             title: v
116189                         };
116190                     });
116191                 }
116192
116193                 combobox.data(objectDifference(_comboData, _multiData));
116194                 if (callback) { callback(_comboData); }
116195             }
116196
116197
116198             function setTaginfoValues(q, callback) {
116199                 var fn = isMulti ? 'multikeys' : 'values';
116200                 var query = (isMulti ? field.key : '') + q;
116201                 var hasCountryPrefix = isNetwork && _countryCode && _countryCode.indexOf(q.toLowerCase()) === 0;
116202                 if (hasCountryPrefix) {
116203                     query = _countryCode + ':';
116204                 }
116205
116206                 var params = {
116207                     debounce: (q !== ''),
116208                     key: field.key,
116209                     query: query
116210                 };
116211
116212                 if (_entity) {
116213                     params.geometry = context.geometry(_entity.id);
116214                 }
116215
116216                 taginfo[fn](params, function(err, data) {
116217                     if (err) { return; }
116218
116219                     data = data.filter(function(d) {
116220
116221                         if (field.type === 'typeCombo' && d.value === 'yes') {
116222                             // don't show the fallback value
116223                             return false;
116224                         }
116225
116226                         // don't show values with very low usage
116227                         return !d.count || d.count > 10;
116228                     });
116229
116230                     var deprecatedValues = osmEntity.deprecatedTagValuesByKey()[field.key];
116231                     if (deprecatedValues) {
116232                         // don't suggest deprecated tag values
116233                         data = data.filter(function(d) {
116234                             return deprecatedValues.indexOf(d.value) === -1;
116235                         });
116236                     }
116237
116238                     if (hasCountryPrefix) {
116239                         data = data.filter(function(d) {
116240                             return d.value.toLowerCase().indexOf(_countryCode + ':') === 0;
116241                         });
116242                     }
116243
116244                     // hide the caret if there are no suggestions
116245                     container.classed('empty-combobox', data.length === 0);
116246
116247                     _comboData = data.map(function(d) {
116248                         var k = d.value;
116249                         if (isMulti) { k = k.replace(field.key, ''); }
116250                         var v = snake_case ? unsnake(k) : k;
116251                         return {
116252                             key: k,
116253                             value: v,
116254                             title: isMulti ? v : d.title
116255                         };
116256                     });
116257
116258                     _comboData = objectDifference(_comboData, _multiData);
116259                     if (callback) { callback(_comboData); }
116260                 });
116261             }
116262
116263
116264             function setPlaceholder(values) {
116265                 var ph;
116266
116267                 if (isMulti || isSemi) {
116268                     ph = field.placeholder() || t('inspector.add');
116269                 } else {
116270                     var vals = values
116271                         .map(function(d) { return d.value; })
116272                         .filter(function(s) { return s.length < 20; });
116273
116274                     var placeholders = vals.length > 1 ? vals : values.map(function(d) { return d.key; });
116275                     ph = field.placeholder() || placeholders.slice(0, 3).join(', ');
116276                 }
116277
116278                 if (!/(…|\.\.\.)$/.test(ph)) {
116279                     ph += '…';
116280                 }
116281
116282                 container.selectAll('input')
116283                     .attr('placeholder', ph);
116284             }
116285
116286
116287             function change() {
116288                 var t = {};
116289                 var val;
116290
116291                 if (isMulti || isSemi) {
116292                     val = tagValue(utilGetSetValue(input).replace(/,/g, ';')) || '';
116293                     container.classed('active', false);
116294                     utilGetSetValue(input, '');
116295
116296                     var vals = val.split(';').filter(Boolean);
116297                     if (!vals.length) { return; }
116298
116299                     if (isMulti) {
116300                         utilArrayUniq(vals).forEach(function(v) {
116301                             var key = field.key + v;
116302                             if (_entity) {
116303                                 // don't set a multicombo value to 'yes' if it already has a non-'no' value
116304                                 // e.g. `language:de=main`
116305                                 var old = _entity.tags[key] || '';
116306                                 if (old && old.toLowerCase() !== 'no') { return; }
116307                             }
116308                             field.keys.push(key);
116309                             t[key] = 'yes';
116310                         });
116311
116312                     } else if (isSemi) {
116313                         var arr = _multiData.map(function(d) { return d.key; });
116314                         arr = arr.concat(vals);
116315                         t[field.key] = utilArrayUniq(arr).filter(Boolean).join(';');
116316                     }
116317
116318                     window.setTimeout(function() { input.node().focus(); }, 10);
116319
116320                 } else {
116321                     val = tagValue(utilGetSetValue(input));
116322                     t[field.key] = val;
116323                 }
116324
116325                 dispatch$1.call('change', this, t);
116326             }
116327
116328
116329             function removeMultikey(d) {
116330                 event.stopPropagation();
116331                 var t = {};
116332                 if (isMulti) {
116333                     t[d.key] = undefined;
116334                 } else if (isSemi) {
116335                     var arr = _multiData.map(function(md) {
116336                         return md.key === d.key ? null : md.key;
116337                     }).filter(Boolean);
116338
116339                     arr = utilArrayUniq(arr);
116340                     t[field.key] = arr.length ? arr.join(';') : undefined;
116341                 }
116342                 dispatch$1.call('change', this, t);
116343             }
116344
116345
116346             function combo(selection) {
116347                 container = selection.selectAll('.form-field-input-wrap')
116348                     .data([0]);
116349
116350                 var type = (isMulti || isSemi) ? 'multicombo': 'combo';
116351                 container = container.enter()
116352                     .append('div')
116353                     .attr('class', 'form-field-input-wrap form-field-input-' + type)
116354                     .merge(container);
116355
116356                 if (isMulti || isSemi) {
116357                     container = container.selectAll('.chiplist')
116358                         .data([0]);
116359
116360                     var listClass = 'chiplist';
116361
116362                     // Use a separate line for each value in the Destinations field
116363                     // to mimic highway exit signs
116364                     if (field.id === 'destination_oneway') {
116365                         listClass += ' full-line-chips';
116366                     }
116367
116368                     container = container.enter()
116369                         .append('ul')
116370                         .attr('class', listClass)
116371                         .on('click', function() {
116372                             window.setTimeout(function() { input.node().focus(); }, 10);
116373                         })
116374                         .merge(container);
116375
116376
116377                     inputWrap = container.selectAll('.input-wrap')
116378                         .data([0]);
116379
116380                     inputWrap = inputWrap.enter()
116381                         .append('li')
116382                         .attr('class', 'input-wrap')
116383                         .merge(inputWrap);
116384
116385                     input = inputWrap.selectAll('input')
116386                         .data([0]);
116387                 } else {
116388                     input = container.selectAll('input')
116389                         .data([0]);
116390                 }
116391
116392                 input = input.enter()
116393                     .append('input')
116394                     .attr('type', 'text')
116395                     .attr('id', 'preset-input-' + field.safeid)
116396                     .call(utilNoAuto)
116397                     .call(initCombo, selection)
116398                     .merge(input);
116399
116400                 if (isNetwork && _entity) {
116401                     var center = _entity.extent(context.graph()).center();
116402                     var countryCode = iso1A2Code(center);
116403                     _countryCode = countryCode && countryCode.toLowerCase();
116404                 }
116405
116406                 input
116407                     .on('change', change)
116408                     .on('blur', change);
116409
116410                 input
116411                     .on('keydown.field', function() {
116412                         switch (event.keyCode) {
116413                             case 13: // ↩ Return
116414                                 input.node().blur(); // blurring also enters the value
116415                                 event.stopPropagation();
116416                                 break;
116417                         }
116418                     });
116419
116420                 if (isMulti || isSemi) {
116421                     combobox
116422                         .on('accept', function() {
116423                             input.node().blur();
116424                             input.node().focus();
116425                         });
116426
116427                     input
116428                         .on('focus', function() { container.classed('active', true); });
116429                 }
116430             }
116431
116432
116433             combo.tags = function(tags) {
116434                 if (isMulti || isSemi) {
116435                     _multiData = [];
116436
116437                     if (isMulti) {
116438                         // Build _multiData array containing keys already set..
116439                         for (var k in tags) {
116440                             if (k.indexOf(field.key) !== 0) { continue; }
116441                             var v = (tags[k] || '').toLowerCase();
116442                             if (v === '' || v === 'no') { continue; }
116443
116444                             var suffix = k.substring(field.key.length);
116445                             _multiData.push({
116446                                 key: k,
116447                                 value: displayValue(suffix)
116448                             });
116449                         }
116450
116451                         // Set keys for form-field modified (needed for undo and reset buttons)..
116452                         field.keys = _multiData.map(function(d) { return d.key; });
116453
116454                     } else if (isSemi) {
116455                         var arr = utilArrayUniq((tags[field.key] || '').split(';')).filter(Boolean);
116456                         _multiData = arr.map(function(k) {
116457                             return {
116458                                 key: k,
116459                                 value: displayValue(k)
116460                             };
116461                         });
116462                     }
116463
116464                     // Exclude existing multikeys from combo options..
116465                     var available = objectDifference(_comboData, _multiData);
116466                     combobox.data(available);
116467
116468                     // Hide 'Add' button if this field uses fixed set of
116469                     // translateable optstrings and they're all currently used..
116470                     container.selectAll('.combobox-input, .combobox-caret')
116471                         .classed('hide', optstrings && !available.length);
116472
116473
116474                     // Render chips
116475                     var chips = container.selectAll('.chip')
116476                         .data(_multiData);
116477
116478                     chips.exit()
116479                         .remove();
116480
116481                     var enter = chips.enter()
116482                         .insert('li', '.input-wrap')
116483                         .attr('class', 'chip')
116484                         .classed('draggable', isSemi);
116485
116486                     enter.append('span');
116487                     enter.append('a');
116488
116489                     chips = chips.merge(enter)
116490                         .order();
116491
116492                     if (isSemi) { // only semiCombo values are ordered
116493                         registerDragAndDrop(chips);
116494                     }
116495
116496                     chips.select('span')
116497                         .text(function(d) { return d.value; });
116498
116499                     chips.select('a')
116500                         .on('click', removeMultikey)
116501                         .attr('class', 'remove')
116502                         .text('×');
116503
116504                 } else {
116505                     utilGetSetValue(input, displayValue(tags[field.key]));
116506                 }
116507             };
116508
116509             function registerDragAndDrop(selection) {
116510
116511                 // allow drag and drop re-ordering of chips
116512                 var dragOrigin, targetIndex;
116513                 selection.call(d3_drag()
116514                     .on('start', function() {
116515                         dragOrigin = {
116516                             x: event.x,
116517                             y: event.y
116518                         };
116519                         targetIndex = null;
116520                     })
116521                     .on('drag', function(d, index) {
116522                         var x = event.x - dragOrigin.x,
116523                             y = event.y - dragOrigin.y;
116524
116525                         if (!d3_select(this).classed('dragging') &&
116526                             // don't display drag until dragging beyond a distance threshold
116527                             Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) <= 5) { return; }
116528
116529                         d3_select(this)
116530                             .classed('dragging', true);
116531
116532                         targetIndex = null;
116533                         var targetIndexOffsetTop = null;
116534                         var draggedTagWidth = d3_select(this).node().offsetWidth;
116535
116536                         if (field.id === 'destination_oneway') { // meaning tags are full width
116537                             container.selectAll('.chip')
116538                                 .style('transform', function(d2, index2) {
116539                                     var node = d3_select(this).node();
116540
116541                                     if (index === index2) {
116542                                         return 'translate(' + x + 'px, ' + y + 'px)';
116543                                     // move the dragged tag up the order
116544                                     } else if (index2 > index && event.y > node.offsetTop) {
116545                                         if (targetIndex === null || index2 > targetIndex) {
116546                                             targetIndex = index2;
116547                                         }
116548                                         return 'translateY(-100%)';
116549                                     // move the dragged tag down the order
116550                                     } else if (index2 < index && event.y < node.offsetTop + node.offsetHeight) {
116551                                         if (targetIndex === null || index2 < targetIndex) {
116552                                             targetIndex = index2;
116553                                         }
116554                                         return 'translateY(100%)';
116555                                     }
116556                                     return null;
116557                                 });
116558                         } else {
116559                             container.selectAll('.chip')
116560                                 .each(function(d2, index2) {
116561                                     var node = d3_select(this).node();
116562
116563                                     // check the cursor is in the bounding box
116564                                     if (
116565                                         index !== index2 &&
116566                                         event.x < node.offsetLeft + node.offsetWidth + 5 &&
116567                                         event.x > node.offsetLeft &&
116568                                         event.y < node.offsetTop + node.offsetHeight &&
116569                                         event.y > node.offsetTop
116570                                     ) {
116571                                         targetIndex = index2;
116572                                         targetIndexOffsetTop = node.offsetTop;
116573                                     }
116574                                 })
116575                                 .style('transform', function(d2, index2) {
116576                                     var node = d3_select(this).node();
116577
116578                                     if (index === index2) {
116579                                         return 'translate(' + x + 'px, ' + y + 'px)';
116580                                     }
116581
116582                                     // only translate tags in the same row
116583                                     if (node.offsetTop === targetIndexOffsetTop) {
116584                                         if (index2 < index && index2 >= targetIndex) {
116585                                             return 'translateX(' + draggedTagWidth + 'px)';
116586                                         } else if (index2 > index && index2 <= targetIndex) {
116587                                             return 'translateX(-' + draggedTagWidth + 'px)';
116588                                         }
116589                                     }
116590                                     return null;
116591                                 });
116592                             }
116593                     })
116594                     .on('end', function(d, index) {
116595                         if (!d3_select(this).classed('dragging')) {
116596                             return;
116597                         }
116598
116599                         d3_select(this)
116600                             .classed('dragging', false);
116601
116602                         container.selectAll('.chip')
116603                             .style('transform', null);
116604
116605                         if (typeof targetIndex === 'number') {
116606                             var element = _multiData[index];
116607                             _multiData.splice(index, 1);
116608                             _multiData.splice(targetIndex, 0, element);
116609
116610                             var t = {};
116611
116612                             if (_multiData.length) {
116613                                 t[field.key] = _multiData.map(function(element) {
116614                                     return element.key;
116615                                 }).join(';');
116616                             } else {
116617                                 t[field.key] = undefined;
116618                             }
116619
116620                             dispatch$1.call('change', this, t);
116621                         }
116622                         dragOrigin = undefined;
116623                         targetIndex = undefined;
116624                     })
116625                 );
116626             }
116627
116628
116629             combo.focus = function() {
116630                 input.node().focus();
116631             };
116632
116633
116634             combo.entity = function(val) {
116635                 if (!arguments.length) { return _entity; }
116636                 _entity = val;
116637                 return combo;
116638             };
116639
116640
116641             return utilRebind(combo, dispatch$1, 'on');
116642         }
116643
116644         function uiFieldText(field, context) {
116645             var dispatch$1 = dispatch('change');
116646             var input = d3_select(null);
116647             var outlinkButton = d3_select(null);
116648             var _entity;
116649
116650             function i(selection) {
116651                 var preset = _entity && context.presets().match(_entity, context.graph());
116652                 var isLocked = preset && preset.suggestion && field.id === 'brand';
116653                 field.locked(isLocked);
116654
116655                 var wrap = selection.selectAll('.form-field-input-wrap')
116656                     .data([0]);
116657
116658                 wrap = wrap.enter()
116659                     .append('div')
116660                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
116661                     .merge(wrap);
116662
116663                 var fieldID = 'preset-input-' + field.safeid;
116664
116665                 input = wrap.selectAll('input')
116666                     .data([0]);
116667
116668                 input = input.enter()
116669                     .append('input')
116670                     .attr('type', field.type === 'identifier' ? 'text' : field.type)
116671                     .attr('id', fieldID)
116672                     .attr('placeholder', field.placeholder() || t('inspector.unknown'))
116673                     .classed(field.type, true)
116674                     .call(utilNoAuto)
116675                     .merge(input);
116676
116677                 input
116678                     .classed('disabled', !!isLocked)
116679                     .attr('readonly', isLocked || null)
116680                     .on('input', change(true))
116681                     .on('blur', change())
116682                     .on('change', change());
116683
116684
116685                 if (field.type === 'tel' && _entity) {
116686                     var center = _entity.extent(context.graph()).center();
116687                     var countryCode = iso1A2Code(center);
116688                     var format = countryCode && dataPhoneFormats[countryCode.toLowerCase()];
116689                     if (format) {
116690                         wrap.selectAll('#' + fieldID)
116691                             .attr('placeholder', format);
116692                     }
116693
116694                 } else if (field.type === 'number') {
116695                     var rtl = (textDirection === 'rtl');
116696
116697                     input.attr('type', 'text');
116698
116699                     var buttons = wrap.selectAll('.increment, .decrement')
116700                         .data(rtl ? [1, -1] : [-1, 1]);
116701
116702                     buttons.enter()
116703                         .append('button')
116704                         .attr('tabindex', -1)
116705                         .attr('class', function(d) {
116706                             var which = (d === 1 ? 'increment' : 'decrement');
116707                             return 'form-field-button ' + which;
116708                         })
116709                         .merge(buttons)
116710                         .on('click', function(d) {
116711                             event.preventDefault();
116712                             var raw_vals = input.node().value || '0';
116713                             var vals = raw_vals.split(';');
116714                             vals = vals.map(function(v) {
116715                                 var num = parseFloat(v.trim(), 10);
116716                                 return isFinite(num) ? clamped(num + d) : v.trim();
116717                             });
116718                             input.node().value = vals.join(';');
116719                             change()();
116720                         });
116721                 } else if (field.type === 'identifier' && field.urlFormat && field.pattern) {
116722
116723                     input.attr('type', 'text');
116724
116725                     outlinkButton = wrap.selectAll('.foreign-id-permalink')
116726                         .data([0]);
116727
116728                     outlinkButton.enter()
116729                         .append('button')
116730                         .attr('tabindex', -1)
116731                         .call(svgIcon('#iD-icon-out-link'))
116732                         .attr('class', 'form-field-button foreign-id-permalink')
116733                         .classed('disabled', !validIdentifierValueForLink())
116734                         .attr('title', function() {
116735                             var domainResults = /^https?:\/\/(.{1,}?)\//.exec(field.urlFormat);
116736                             if (domainResults.length >= 2 && domainResults[1]) {
116737                                 var domain = domainResults[1];
116738                                 return t('icons.view_on', { domain: domain });
116739                             }
116740                             return '';
116741                         })
116742                         .on('click', function() {
116743                             event.preventDefault();
116744
116745                             var value = validIdentifierValueForLink();
116746                             if (value) {
116747                                 var url = field.urlFormat.replace(/{value}/, encodeURIComponent(value));
116748                                 window.open(url, '_blank');
116749                             }
116750                         })
116751                         .merge(outlinkButton);
116752                 }
116753             }
116754
116755
116756             function validIdentifierValueForLink() {
116757                 if (field.type === 'identifier' && field.pattern) {
116758                     var value = utilGetSetValue(input).trim().split(';')[0];
116759                     return value && value.match(new RegExp(field.pattern));
116760                 }
116761                 return null;
116762             }
116763
116764
116765             // clamp number to min/max
116766             function clamped(num) {
116767                 if (field.minValue !== undefined) {
116768                     num = Math.max(num, field.minValue);
116769                 }
116770                 if (field.maxValue !== undefined) {
116771                     num = Math.min(num, field.maxValue);
116772                 }
116773                 return num;
116774             }
116775
116776
116777             function change(onInput) {
116778                 return function() {
116779                     var t = {};
116780                     var val = utilGetSetValue(input).trim() || undefined;
116781
116782                     if (!onInput) {
116783                         if (field.type === 'number' && val !== undefined) {
116784                             var vals = val.split(';');
116785                             vals = vals.map(function(v) {
116786                                 var num = parseFloat(v.trim(), 10);
116787                                 return isFinite(num) ? clamped(num) : v.trim();
116788                             });
116789                             val = vals.join(';');
116790                         }
116791                         utilGetSetValue(input, val || '');
116792                     }
116793                     t[field.key] = val;
116794                     dispatch$1.call('change', this, t, onInput);
116795                 };
116796             }
116797
116798
116799             i.entity = function(val) {
116800                 if (!arguments.length) { return _entity; }
116801                 _entity = val;
116802                 return i;
116803             };
116804
116805
116806             i.tags = function(tags) {
116807                 utilGetSetValue(input, tags[field.key] || '');
116808
116809                 if (outlinkButton && !outlinkButton.empty()) {
116810                     var disabled = !validIdentifierValueForLink();
116811                     outlinkButton.classed('disabled', disabled);
116812                 }
116813             };
116814
116815
116816             i.focus = function() {
116817                 var node = input.node();
116818                 if (node) { node.focus(); }
116819             };
116820
116821             return utilRebind(i, dispatch$1, 'on');
116822         }
116823
116824         function uiFieldAccess(field, context) {
116825             var dispatch$1 = dispatch('change');
116826             var items = d3_select(null);
116827
116828             function access(selection) {
116829                 var wrap = selection.selectAll('.form-field-input-wrap')
116830                     .data([0]);
116831
116832                 wrap = wrap.enter()
116833                     .append('div')
116834                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
116835                     .merge(wrap);
116836
116837                 var list = wrap.selectAll('ul')
116838                     .data([0]);
116839
116840                 list = list.enter()
116841                     .append('ul')
116842                     .attr('class', 'rows')
116843                     .merge(list);
116844
116845
116846                 items = list.selectAll('li')
116847                     .data(field.keys);
116848
116849                 // Enter
116850                 var enter = items.enter()
116851                     .append('li')
116852                     .attr('class', function(d) { return 'labeled-input preset-access-' + d; });
116853
116854                 enter
116855                     .append('span')
116856                     .attr('class', 'label preset-label-access')
116857                     .attr('for', function(d) { return 'preset-input-access-' + d; })
116858                     .text(function(d) { return field.t('types.' + d); });
116859
116860                 enter
116861                     .append('div')
116862                     .attr('class', 'preset-input-access-wrap')
116863                     .append('input')
116864                     .attr('type', 'text')
116865                     .attr('class', function(d) { return 'preset-input-access preset-input-access-' + d; })
116866                     .call(utilNoAuto)
116867                     .each(function(d) {
116868                         d3_select(this)
116869                             .call(uiCombobox(context, 'access-' + d)
116870                                 .data(access.options(d))
116871                             );
116872                     });
116873
116874
116875                 // Update
116876                 items = items.merge(enter);
116877
116878                 wrap.selectAll('.preset-input-access')
116879                     .on('change', change)
116880                     .on('blur', change);
116881             }
116882
116883
116884             function change(d) {
116885                 var tag = {};
116886                 tag[d] = utilGetSetValue(d3_select(this)) || undefined;
116887                 dispatch$1.call('change', this, tag);
116888             }
116889
116890
116891             access.options = function(type) {
116892                 var options = ['no', 'permissive', 'private', 'permit', 'destination'];
116893
116894                 if (type !== 'access') {
116895                     options.unshift('yes');
116896                     options.push('designated');
116897
116898                     if (type === 'bicycle') {
116899                         options.push('dismount');
116900                     }
116901                 }
116902
116903                 return options.map(function(option) {
116904                     return {
116905                         title: field.t('options.' + option + '.description'),
116906                         value: option
116907                     };
116908                 });
116909             };
116910
116911
116912             var placeholders = {
116913                 footway: {
116914                     foot: 'designated',
116915                     motor_vehicle: 'no'
116916                 },
116917                 steps: {
116918                     foot: 'yes',
116919                     motor_vehicle: 'no',
116920                     bicycle: 'no',
116921                     horse: 'no'
116922                 },
116923                 pedestrian: {
116924                     foot: 'yes',
116925                     motor_vehicle: 'no'
116926                 },
116927                 cycleway: {
116928                     motor_vehicle: 'no',
116929                     bicycle: 'designated'
116930                 },
116931                 bridleway: {
116932                     motor_vehicle: 'no',
116933                     horse: 'designated'
116934                 },
116935                 path: {
116936                     foot: 'yes',
116937                     motor_vehicle: 'no',
116938                     bicycle: 'yes',
116939                     horse: 'yes'
116940                 },
116941                 motorway: {
116942                     foot: 'no',
116943                     motor_vehicle: 'yes',
116944                     bicycle: 'no',
116945                     horse: 'no'
116946                 },
116947                 trunk: {
116948                     motor_vehicle: 'yes'
116949                 },
116950                 primary: {
116951                     foot: 'yes',
116952                     motor_vehicle: 'yes',
116953                     bicycle: 'yes',
116954                     horse: 'yes'
116955                 },
116956                 secondary: {
116957                     foot: 'yes',
116958                     motor_vehicle: 'yes',
116959                     bicycle: 'yes',
116960                     horse: 'yes'
116961                 },
116962                 tertiary: {
116963                     foot: 'yes',
116964                     motor_vehicle: 'yes',
116965                     bicycle: 'yes',
116966                     horse: 'yes'
116967                 },
116968                 residential: {
116969                     foot: 'yes',
116970                     motor_vehicle: 'yes',
116971                     bicycle: 'yes',
116972                     horse: 'yes'
116973                 },
116974                 unclassified: {
116975                     foot: 'yes',
116976                     motor_vehicle: 'yes',
116977                     bicycle: 'yes',
116978                     horse: 'yes'
116979                 },
116980                 service: {
116981                     foot: 'yes',
116982                     motor_vehicle: 'yes',
116983                     bicycle: 'yes',
116984                     horse: 'yes'
116985                 },
116986                 motorway_link: {
116987                     foot: 'no',
116988                     motor_vehicle: 'yes',
116989                     bicycle: 'no',
116990                     horse: 'no'
116991                 },
116992                 trunk_link: {
116993                     motor_vehicle: 'yes'
116994                 },
116995                 primary_link: {
116996                     foot: 'yes',
116997                     motor_vehicle: 'yes',
116998                     bicycle: 'yes',
116999                     horse: 'yes'
117000                 },
117001                 secondary_link: {
117002                     foot: 'yes',
117003                     motor_vehicle: 'yes',
117004                     bicycle: 'yes',
117005                     horse: 'yes'
117006                 },
117007                 tertiary_link: {
117008                     foot: 'yes',
117009                     motor_vehicle: 'yes',
117010                     bicycle: 'yes',
117011                     horse: 'yes'
117012                 }
117013             };
117014
117015
117016             access.tags = function(tags) {
117017                 utilGetSetValue(items.selectAll('.preset-input-access'),
117018                     function(d) { return tags[d] || ''; })
117019                     .attr('placeholder', function() {
117020                         return tags.access ? tags.access : field.placeholder();
117021                     });
117022
117023                 items.selectAll('.preset-input-access-access')
117024                     .attr('placeholder', 'yes');
117025
117026                 var which = tags.highway;
117027                 if (!placeholders[which]) { return; }
117028
117029                 var keys = Object.keys(placeholders[which]);
117030                 keys.forEach(function(k) {
117031                     var v = placeholders[which][k];
117032                     items.selectAll('.preset-input-access-' + k)
117033                         .attr('placeholder', tags.access || v);
117034                 });
117035             };
117036
117037
117038             access.focus = function() {
117039                 items.selectAll('.preset-input-access')
117040                     .node().focus();
117041             };
117042
117043
117044             return utilRebind(access, dispatch$1, 'on');
117045         }
117046
117047         function uiFieldAddress(field, context) {
117048             var dispatch$1 = dispatch('init', 'change');
117049             var wrap = d3_select(null);
117050             var _isInitialized = false;
117051             var _entity;
117052             // needed for placeholder strings
117053             var addrField = context.presets().field('address');
117054
117055             function getNearStreets() {
117056                 var extent = _entity.extent(context.graph());
117057                 var l = extent.center();
117058                 var box = geoExtent(l).padByMeters(200);
117059
117060                 var streets = context.intersects(box)
117061                     .filter(isAddressable)
117062                     .map(function(d) {
117063                         var loc = context.projection([
117064                             (extent[0][0] + extent[1][0]) / 2,
117065                             (extent[0][1] + extent[1][1]) / 2
117066                         ]);
117067                         var choice = geoChooseEdge(context.childNodes(d), loc, context.projection);
117068
117069                         return {
117070                             title: d.tags.name,
117071                             value: d.tags.name,
117072                             dist: choice.distance
117073                         };
117074                     })
117075                     .sort(function(a, b) {
117076                         return a.dist - b.dist;
117077                     });
117078
117079                 return utilArrayUniqBy(streets, 'value');
117080
117081                 function isAddressable(d) {
117082                     return d.tags.highway && d.tags.name && d.type === 'way';
117083                 }
117084             }
117085
117086
117087             function getNearCities() {
117088                 var extent = _entity.extent(context.graph());
117089                 var l = extent.center();
117090                 var box = geoExtent(l).padByMeters(200);
117091
117092                 var cities = context.intersects(box)
117093                     .filter(isAddressable)
117094                     .map(function(d) {
117095                         return {
117096                             title: d.tags['addr:city'] || d.tags.name,
117097                             value: d.tags['addr:city'] || d.tags.name,
117098                             dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
117099                         };
117100                     })
117101                     .sort(function(a, b) {
117102                         return a.dist - b.dist;
117103                     });
117104
117105                 return utilArrayUniqBy(cities, 'value');
117106
117107
117108                 function isAddressable(d) {
117109                     if (d.tags.name) {
117110                         if (d.tags.admin_level === '8' && d.tags.boundary === 'administrative')
117111                             { return true; }
117112                         if (d.tags.border_type === 'city')
117113                             { return true; }
117114                         if (d.tags.place === 'city' || d.tags.place === 'town' || d.tags.place === 'village')
117115                             { return true; }
117116                     }
117117
117118                     if (d.tags['addr:city'])
117119                         { return true; }
117120
117121                     return false;
117122                 }
117123             }
117124
117125             function getNearValues(key) {
117126                 var extent = _entity.extent(context.graph());
117127                 var l = extent.center();
117128                 var box = geoExtent(l).padByMeters(200);
117129
117130                 var results = context.intersects(box)
117131                     .filter(function hasTag(d) { return d.id !== _entity.id && d.tags[key]; })
117132                     .map(function(d) {
117133                         return {
117134                             title: d.tags[key],
117135                             value: d.tags[key],
117136                             dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
117137                         };
117138                     })
117139                     .sort(function(a, b) {
117140                         return a.dist - b.dist;
117141                     });
117142
117143                 return utilArrayUniqBy(results, 'value');
117144             }
117145
117146
117147             function updateForCountryCode(countryCode) {
117148                 countryCode = countryCode.toLowerCase();
117149
117150                 var addressFormat;
117151                 for (var i = 0; i < dataAddressFormats.length; i++) {
117152                     var format = dataAddressFormats[i];
117153                     if (!format.countryCodes) {
117154                         addressFormat = format;   // choose the default format, keep going
117155                     } else if (format.countryCodes.indexOf(countryCode) !== -1) {
117156                         addressFormat = format;   // choose the country format, stop here
117157                         break;
117158                     }
117159                 }
117160
117161                 var dropdowns = addressFormat.dropdowns || [
117162                     'city', 'county', 'country', 'district', 'hamlet',
117163                     'neighbourhood', 'place', 'postcode', 'province',
117164                     'quarter', 'state', 'street', 'subdistrict', 'suburb'
117165                 ];
117166
117167                 var widths = addressFormat.widths || {
117168                     housenumber: 1/3, street: 2/3,
117169                     city: 2/3, state: 1/4, postcode: 1/3
117170                 };
117171
117172                 function row(r) {
117173                     // Normalize widths.
117174                     var total = r.reduce(function(sum, key) {
117175                         return sum + (widths[key] || 0.5);
117176                     }, 0);
117177
117178                     return r.map(function(key) {
117179                         return {
117180                             id: key,
117181                             width: (widths[key] || 0.5) / total
117182                         };
117183                     });
117184                 }
117185
117186                 wrap.selectAll('.addr-row')
117187                     .data(addressFormat.format)
117188                     .enter()
117189                     .append('div')
117190                     .attr('class', 'addr-row')
117191                     .selectAll('input')
117192                     .data(row)
117193                     .enter()
117194                     .append('input')
117195                     .property('type', 'text')
117196                     .attr('placeholder', function (d) {
117197                         var localkey = d.id + '!' + countryCode;
117198                         var tkey = addrField.strings.placeholders[localkey] ? localkey : d.id;
117199                         return addrField.t('placeholders.' + tkey);
117200                     })
117201                     .attr('class', function (d) { return 'addr-' + d.id; })
117202                     .call(utilNoAuto)
117203                     .each(addDropdown)
117204                     .style('width', function (d) { return d.width * 100 + '%'; });
117205
117206
117207                 function addDropdown(d) {
117208                     if (dropdowns.indexOf(d.id) === -1) { return; }  // not a dropdown
117209
117210                     var nearValues = (d.id === 'street') ? getNearStreets
117211                         : (d.id === 'city') ? getNearCities
117212                         : getNearValues;
117213
117214                     d3_select(this)
117215                         .call(uiCombobox(context, 'address-' + d.id)
117216                             .minItems(1)
117217                             .caseSensitive(true)
117218                             .fetcher(function(value, callback) {
117219                                 callback(nearValues('addr:' + d.id));
117220                             })
117221                         );
117222                 }
117223
117224                 wrap.selectAll('input')
117225                     .on('blur', change())
117226                     .on('change', change());
117227
117228                 wrap.selectAll('input:not(.combobox-input)')
117229                     .on('input', change(true));
117230
117231                 dispatch$1.call('init');
117232                 _isInitialized = true;
117233             }
117234
117235
117236             function address(selection) {
117237                 _isInitialized = false;
117238
117239                 wrap = selection.selectAll('.form-field-input-wrap')
117240                     .data([0]);
117241
117242                 wrap = wrap.enter()
117243                     .append('div')
117244                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
117245                     .merge(wrap);
117246
117247                 if (_entity) {
117248                     var countryCode;
117249                     if (context.inIntro()) {
117250                         // localize the address format for the walkthrough
117251                         countryCode = t('intro.graph.countrycode');
117252                     } else {
117253                         var center = _entity.extent(context.graph()).center();
117254                         countryCode = iso1A2Code(center);
117255                     }
117256                     if (countryCode) { updateForCountryCode(countryCode); }
117257                 }
117258             }
117259
117260
117261             function change(onInput) {
117262                 return function() {
117263                     var tags = {};
117264
117265                     wrap.selectAll('input')
117266                         .each(function (subfield) {
117267                             tags[field.key + ':' + subfield.id] = this.value || undefined;
117268                         });
117269
117270                     dispatch$1.call('change', this, tags, onInput);
117271                 };
117272             }
117273
117274
117275             function updateTags(tags) {
117276                 utilGetSetValue(wrap.selectAll('input'), function (subfield) {
117277                     return tags[field.key + ':' + subfield.id] || '';
117278                 });
117279             }
117280
117281
117282             address.entity = function(val) {
117283                 if (!arguments.length) { return _entity; }
117284                 _entity = val;
117285                 return address;
117286             };
117287
117288
117289             address.tags = function(tags) {
117290                 if (_isInitialized) {
117291                     updateTags(tags);
117292                 } else {
117293                     dispatch$1.on('init', function () {
117294                         dispatch$1.on('init', null);
117295                         updateTags(tags);
117296                     });
117297                 }
117298             };
117299
117300
117301             address.focus = function() {
117302                 var node = wrap.selectAll('input').node();
117303                 if (node) { node.focus(); }
117304             };
117305
117306
117307             return utilRebind(address, dispatch$1, 'on');
117308         }
117309
117310         function uiFieldCycleway(field, context) {
117311             var dispatch$1 = dispatch('change');
117312             var items = d3_select(null);
117313             var wrap = d3_select(null);
117314
117315             function cycleway(selection) {
117316
117317                 function stripcolon(s) {
117318                     return s.replace(':', '');
117319                 }
117320
117321
117322                 wrap = selection.selectAll('.form-field-input-wrap')
117323                     .data([0]);
117324
117325                 wrap = wrap.enter()
117326                     .append('div')
117327                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
117328                     .merge(wrap);
117329
117330
117331                 var div = wrap.selectAll('ul')
117332                     .data([0]);
117333
117334                 div = div.enter()
117335                     .append('ul')
117336                     .attr('class', 'rows')
117337                     .merge(div);
117338
117339                 var keys = ['cycleway:left', 'cycleway:right'];
117340
117341                 items = div.selectAll('li')
117342                     .data(keys);
117343
117344                 var enter = items.enter()
117345                     .append('li')
117346                     .attr('class', function(d) { return 'labeled-input preset-cycleway-' + stripcolon(d); });
117347
117348                 enter
117349                     .append('span')
117350                     .attr('class', 'label preset-label-cycleway')
117351                     .attr('for', function(d) { return 'preset-input-cycleway-' + stripcolon(d); })
117352                     .text(function(d) { return field.t('types.' + d); });
117353
117354                 enter
117355                     .append('div')
117356                     .attr('class', 'preset-input-cycleway-wrap')
117357                     .append('input')
117358                     .attr('type', 'text')
117359                     .attr('class', function(d) { return 'preset-input-cycleway preset-input-' + stripcolon(d); })
117360                     .call(utilNoAuto)
117361                     .each(function(d) {
117362                         d3_select(this)
117363                             .call(uiCombobox(context, 'cycleway-' + stripcolon(d))
117364                                 .data(cycleway.options(d))
117365                             );
117366                     });
117367
117368                 items = items.merge(enter);
117369
117370                 // Update
117371                 wrap.selectAll('.preset-input-cycleway')
117372                     .on('change', change)
117373                     .on('blur', change);
117374             }
117375
117376
117377             function change() {
117378                 var left = utilGetSetValue(d3_select('.preset-input-cyclewayleft'));
117379                 var right = utilGetSetValue(d3_select('.preset-input-cyclewayright'));
117380                 var tag = {};
117381
117382                 if (left === 'none' || left === '') { left = undefined; }
117383                 if (right === 'none' || right === '') { right = undefined; }
117384
117385                 // Always set both left and right as changing one can affect the other
117386                 tag = {
117387                     cycleway: undefined,
117388                     'cycleway:left': left,
117389                     'cycleway:right': right
117390                 };
117391
117392                 // If the left and right tags match, use the cycleway tag to tag both
117393                 // sides the same way
117394                 if (left === right) {
117395                     tag = {
117396                         cycleway: left,
117397                         'cycleway:left': undefined,
117398                         'cycleway:right': undefined
117399                     };
117400                 }
117401
117402                 dispatch$1.call('change', this, tag);
117403             }
117404
117405
117406             cycleway.options = function() {
117407                 return Object.keys(field.strings.options).map(function(option) {
117408                     return {
117409                         title: field.t('options.' + option + '.description'),
117410                         value: option
117411                     };
117412                 });
117413             };
117414
117415
117416             cycleway.tags = function(tags) {
117417                 utilGetSetValue(items.selectAll('.preset-input-cycleway'), function(d) {
117418                         // If cycleway is set, always return that
117419                         if (tags.cycleway) {
117420                             return tags.cycleway;
117421                         }
117422                         return tags[d] || '';
117423                     })
117424                     .attr('placeholder', field.placeholder());
117425             };
117426
117427
117428             cycleway.focus = function() {
117429                 var node = wrap.selectAll('input').node();
117430                 if (node) { node.focus(); }
117431             };
117432
117433
117434             return utilRebind(cycleway, dispatch$1, 'on');
117435         }
117436
117437         function uiFieldLanes(field, context) {
117438             var dispatch$1 = dispatch('change');
117439             var LANE_WIDTH = 40;
117440             var LANE_HEIGHT = 200;
117441             var _entityID;
117442
117443             function lanes(selection) {
117444                 var lanesData = context.entity(_entityID).lanes();
117445
117446                 if (!d3_select('.inspector-wrap.inspector-hidden').empty() || !selection.node().parentNode) {
117447                     selection.call(lanes.off);
117448                     return;
117449                 }
117450
117451                 var wrap = selection.selectAll('.form-field-input-wrap')
117452                     .data([0]);
117453
117454                 wrap = wrap.enter()
117455                     .append('div')
117456                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
117457                     .merge(wrap);
117458
117459                 var surface =  wrap.selectAll('.surface')
117460                     .data([0]);
117461
117462                 var d = utilGetDimensions(wrap);
117463                 var freeSpace = d[0] - lanesData.lanes.length * LANE_WIDTH * 1.5 + LANE_WIDTH * 0.5;
117464
117465                 surface = surface.enter()
117466                     .append('svg')
117467                     .attr('width', d[0])
117468                     .attr('height', 300)
117469                     .attr('class', 'surface')
117470                     .merge(surface);
117471
117472
117473                 var lanesSelection = surface.selectAll('.lanes')
117474                     .data([0]);
117475
117476                 lanesSelection = lanesSelection.enter()
117477                     .append('g')
117478                     .attr('class', 'lanes')
117479                     .merge(lanesSelection);
117480
117481                 lanesSelection
117482                     .attr('transform', function () {
117483                         return 'translate(' + (freeSpace / 2) + ', 0)';
117484                     });
117485
117486
117487                 var lane = lanesSelection.selectAll('.lane')
117488                    .data(lanesData.lanes);
117489
117490                 lane.exit()
117491                     .remove();
117492
117493                 var enter = lane.enter()
117494                     .append('g')
117495                     .attr('class', 'lane');
117496
117497                 enter
117498                     .append('g')
117499                     .append('rect')
117500                     .attr('y', 50)
117501                     .attr('width', LANE_WIDTH)
117502                     .attr('height', LANE_HEIGHT);
117503
117504                 enter
117505                     .append('g')
117506                     .attr('class', 'forward')
117507                     .append('text')
117508                     .attr('y', 40)
117509                     .attr('x', 14)
117510                     .text('▲');
117511
117512                 enter
117513                     .append('g')
117514                     .attr('class', 'bothways')
117515                     .append('text')
117516                     .attr('y', 40)
117517                     .attr('x', 14)
117518                     .text('▲▼');
117519
117520                 enter
117521                     .append('g')
117522                     .attr('class', 'backward')
117523                     .append('text')
117524                     .attr('y', 40)
117525                     .attr('x', 14)
117526                     .text('▼');
117527
117528
117529                 lane = lane
117530                     .merge(enter);
117531
117532                 lane
117533                     .attr('transform', function(d) {
117534                         return 'translate(' + (LANE_WIDTH * d.index * 1.5) + ', 0)';
117535                     });
117536
117537                 lane.select('.forward')
117538                     .style('visibility', function(d) {
117539                         return d.direction === 'forward' ? 'visible' : 'hidden';
117540                     });
117541
117542                 lane.select('.bothways')
117543                     .style('visibility', function(d) {
117544                         return d.direction === 'bothways' ? 'visible' : 'hidden';
117545                     });
117546
117547                 lane.select('.backward')
117548                     .style('visibility', function(d) {
117549                         return d.direction === 'backward' ? 'visible' : 'hidden';
117550                     });
117551             }
117552
117553
117554             lanes.entity = function(val) {
117555                 if (!_entityID || _entityID !== val.id) {
117556                     _entityID = val.id;
117557                 }
117558             };
117559
117560             lanes.tags = function() {};
117561             lanes.focus = function() {};
117562             lanes.off = function() {};
117563
117564             return utilRebind(lanes, dispatch$1, 'on');
117565         }
117566
117567         var languagesArray = [];
117568         function loadLanguagesArray() {
117569             if (languagesArray.length !== 0) { return; }
117570
117571             // some conversion is needed to ensure correct OSM tags are used
117572             var replacements = {
117573                 sr: 'sr-Cyrl',      // in OSM, `sr` implies Cyrillic
117574                 'sr-Cyrl': false    // `sr-Cyrl` isn't used in OSM
117575             };
117576
117577             for (var code in dataLanguages) {
117578                 if (replacements[code] === false) { continue; }
117579                 var metaCode = code;
117580                 if (replacements[code]) { metaCode = replacements[code]; }
117581
117582                 languagesArray.push({
117583                     localName: languageName(metaCode, { localOnly: true }),
117584                     nativeName: dataLanguages[metaCode].nativeName,
117585                     code: code,
117586                     label: languageName(metaCode)
117587                 });
117588             }
117589         }
117590
117591
117592         function uiFieldLocalized(field, context) {
117593             var dispatch$1 = dispatch('change', 'input');
117594             var wikipedia = services$1.wikipedia;
117595             var input = d3_select(null);
117596             var localizedInputs = d3_select(null);
117597             var _countryCode;
117598
117599             var allSuggestions = context.presets().collection.filter(function(p) {
117600                 return p.suggestion === true;
117601             });
117602
117603             // reuse these combos
117604             var langCombo = uiCombobox(context, 'localized-lang')
117605                 .fetcher(fetchLanguages)
117606                 .minItems(0);
117607
117608             var brandCombo = uiCombobox(context, 'localized-brand')
117609                 .canAutocomplete(false)
117610                 .minItems(1);
117611
117612             var _selection = d3_select(null);
117613             var _multilingual = [];
117614             var _buttonTip = tooltip()
117615                 .title(t('translate.translate'))
117616                 .placement('left');
117617             var _wikiTitles;
117618             var _entity;
117619
117620
117621             function calcLocked() {
117622                 if (!_entity) {    // the original entity
117623                     field.locked(false);
117624                     return;
117625                 }
117626
117627                 var latest = context.hasEntity(_entity.id);
117628                 if (!latest) {    // get current entity, possibly edited
117629                     field.locked(false);
117630                     return;
117631                 }
117632
117633                 var hasOriginalName = (latest.tags.name && latest.tags.name === _entity.tags.name);
117634                 var hasWikidata = latest.tags.wikidata || latest.tags['name:etymology:wikidata'];
117635                 var preset = context.presets().match(latest, context.graph());
117636                 var isSuggestion = preset && preset.suggestion;
117637                 var showsBrand = preset && preset.fields
117638                     .filter(function(d) { return d.id === 'brand'; }).length;
117639
117640                 var isLocked = !!(field.id === 'name' && hasOriginalName &&
117641                     (hasWikidata || (isSuggestion && !showsBrand)));
117642
117643                 field.locked(isLocked);
117644             }
117645
117646             // update _multilingual, maintaining the existing order
117647             function calcMultilingual(tags) {
117648                 var existingLangsOrdered = _multilingual.map(function(item) {
117649                     return item.lang;
117650                 });
117651                 var existingLangs = new Set(existingLangsOrdered.filter(Boolean));
117652
117653                 for (var k in tags) {
117654                     var m = k.match(/^(.*):([a-zA-Z_-]+)$/);
117655                     if (m && m[1] === field.key && m[2]) {
117656                         var item = { lang: m[2], value: tags[k] };
117657                         if (existingLangs.has(item.lang)) {
117658                             // update the value
117659                             _multilingual[existingLangsOrdered.indexOf(item.lang)].value = item.value;
117660                             existingLangs.delete(item.lang);
117661                         } else {
117662                             _multilingual.push(item);
117663                         }
117664                     }
117665                 }
117666
117667                 _multilingual = _multilingual.filter(function(item) {
117668                     return !item.lang || !existingLangs.has(item.lang);
117669                 });
117670             }
117671
117672
117673             function localized(selection) {
117674                 // load if needed
117675                 loadLanguagesArray();
117676
117677                 _selection = selection;
117678                 calcLocked();
117679                 var isLocked = field.locked();
117680                 var entity = _entity && context.hasEntity(_entity.id);  // get latest
117681                 var preset = entity && context.presets().match(entity, context.graph());
117682
117683                 var wrap = selection.selectAll('.form-field-input-wrap')
117684                     .data([0]);
117685
117686                 // enter/update
117687                 wrap = wrap.enter()
117688                     .append('div')
117689                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
117690                     .merge(wrap);
117691
117692                 input = wrap.selectAll('.localized-main')
117693                     .data([0]);
117694
117695                 // enter/update
117696                 input = input.enter()
117697                     .append('input')
117698                     .attr('type', 'text')
117699                     .attr('id', 'preset-input-' + field.safeid)
117700                     .attr('class', 'localized-main')
117701                     .attr('placeholder', field.placeholder())
117702                     .call(utilNoAuto)
117703                     .merge(input);
117704
117705                 if (preset && field.id === 'name') {
117706                     var pTag = preset.id.split('/', 2);
117707                     var pKey = pTag[0];
117708                     var pValue = pTag[1];
117709
117710                     if (!preset.suggestion) {
117711                         // Not a suggestion preset - Add a suggestions dropdown if it makes sense to.
117712                         // This code attempts to determine if the matched preset is the
117713                         // kind of preset that even can benefit from name suggestions..
117714                         // - true = shops, cafes, hotels, etc. (also generic and fallback presets)
117715                         // - false = churches, parks, hospitals, etc. (things not in the index)
117716                         var isFallback = preset.isFallback();
117717                         var goodSuggestions = allSuggestions.filter(function(s) {
117718                             if (isFallback) { return true; }
117719                             var sTag = s.id.split('/', 2);
117720                             var sKey = sTag[0];
117721                             var sValue = sTag[1];
117722                             return pKey === sKey && (!pValue || pValue === sValue);
117723                         });
117724
117725                         // Show the suggestions.. If the user picks one, change the tags..
117726                         if (allSuggestions.length && goodSuggestions.length) {
117727                             input
117728                                 .on('blur.localized', checkBrandOnBlur)
117729                                 .call(brandCombo
117730                                     .fetcher(fetchBrandNames(preset, allSuggestions))
117731                                     .on('accept', acceptBrand)
117732                                     .on('cancel', cancelBrand)
117733                                 );
117734                         }
117735                     }
117736                 }
117737
117738                 input
117739                     .classed('disabled', !!isLocked)
117740                     .attr('readonly', isLocked || null)
117741                     .on('input', change(true))
117742                     .on('blur', change())
117743                     .on('change', change());
117744
117745
117746                 var translateButton = wrap.selectAll('.localized-add')
117747                     .data([0]);
117748
117749                 translateButton = translateButton.enter()
117750                     .append('button')
117751                     .attr('class', 'localized-add form-field-button')
117752                     .attr('tabindex', -1)
117753                     .call(svgIcon('#iD-icon-plus'))
117754                     .merge(translateButton);
117755
117756                 translateButton
117757                     .classed('disabled', !!isLocked)
117758                     .call(isLocked ? _buttonTip.destroy : _buttonTip)
117759                     .on('click', addNew);
117760
117761
117762                 if (entity && !_multilingual.length) {
117763                     calcMultilingual(entity.tags);
117764                 }
117765
117766                 localizedInputs = selection.selectAll('.localized-multilingual')
117767                     .data([0]);
117768
117769                 localizedInputs = localizedInputs.enter()
117770                     .append('div')
117771                     .attr('class', 'localized-multilingual')
117772                     .merge(localizedInputs);
117773
117774                 localizedInputs
117775                     .call(renderMultilingual);
117776
117777                 localizedInputs.selectAll('button, input')
117778                     .classed('disabled', !!isLocked)
117779                     .attr('readonly', isLocked || null);
117780
117781
117782
117783                 // We are not guaranteed to get an `accept` or `cancel` when blurring the field.
117784                 // (This can happen if the user actives the combo, arrows down, and then clicks off to blur)
117785                 // So compare the current field value against the suggestions one last time.
117786                 function checkBrandOnBlur() {
117787                     var latest = context.hasEntity(_entity.id);
117788                     if (!latest) { return; }   // deleting the entity blurred the field?
117789
117790                     var preset = context.presets().match(latest, context.graph());
117791                     if (preset && preset.suggestion) { return; }   // already accepted
117792
117793                     // note: here we are testing against "decorated" names, i.e. 'Starbucks – Cafe'
117794                     var name = utilGetSetValue(input).trim();
117795                     var matched = allSuggestions.filter(function(s) { return name === s.name(); });
117796
117797                     if (matched.length === 1) {
117798                         acceptBrand({ suggestion: matched[0] });
117799                     } else {
117800                         cancelBrand();
117801                     }
117802                 }
117803
117804
117805                 function acceptBrand(d) {
117806                     if (!d) {
117807                         cancelBrand();
117808                         return;
117809                     }
117810
117811                     var entity = context.entity(_entity.id);  // get latest
117812                     var tags = entity.tags;
117813                     var geometry = entity.geometry(context.graph());
117814                     var removed = preset.unsetTags(tags, geometry);
117815                     for (var k in tags) {
117816                         tags[k] = removed[k];  // set removed tags to `undefined`
117817                     }
117818                     tags = d.suggestion.setTags(tags, geometry);
117819                     utilGetSetValue(input, tags.name);
117820                     dispatch$1.call('change', this, tags);
117821                 }
117822
117823
117824                 // user hit escape, clean whatever preset name appears after the last ' – '
117825                 function cancelBrand() {
117826                     var name = utilGetSetValue(input);
117827                     var clean = cleanName(name);
117828                     if (clean !== name) {
117829                         utilGetSetValue(input, clean);
117830                         dispatch$1.call('change', this, { name: clean });
117831                     }
117832                 }
117833
117834                 // Remove whatever is after the last ' – '
117835                 // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
117836                 function cleanName(name) {
117837                     var parts = name.split(' – ');
117838                     if (parts.length > 1) {
117839                         parts.pop();
117840                         name = parts.join(' – ');
117841                     }
117842                     return name;
117843                 }
117844
117845
117846                 function fetchBrandNames(preset, suggestions) {
117847                     var pTag = preset.id.split('/', 2);
117848                     var pKey = pTag[0];
117849                     var pValue = pTag[1];
117850
117851                     return function(value, callback) {
117852                         var results = [];
117853                         if (value && value.length > 2) {
117854                             for (var i = 0; i < suggestions.length; i++) {
117855                                 var s = suggestions[i];
117856
117857                                 // don't suggest brands from incompatible countries
117858                                 if (_countryCode && s.countryCodes &&
117859                                     s.countryCodes.indexOf(_countryCode) === -1) { continue; }
117860
117861                                 var sTag = s.id.split('/', 2);
117862                                 var sKey = sTag[0];
117863                                 var sValue = sTag[1];
117864                                 var name = s.name();
117865                                 var dist = utilEditDistance(value, name.substring(0, value.length));
117866                                 var matchesPreset = (pKey === sKey && (!pValue || pValue === sValue));
117867
117868                                 if (dist < 1 || (matchesPreset && dist < 3)) {
117869                                     var obj = {
117870                                         title: name,
117871                                         value: name,
117872                                         suggestion: s,
117873                                         dist: dist + (matchesPreset ? 0 : 1)  // penalize if not matched preset
117874                                     };
117875                                     results.push(obj);
117876                                 }
117877                             }
117878                             results.sort(function(a, b) { return a.dist - b.dist; });
117879                         }
117880                         results = results.slice(0, 10);
117881                         callback(results);
117882                     };
117883                 }
117884
117885
117886                 function addNew() {
117887                     event.preventDefault();
117888                     if (field.locked()) { return; }
117889
117890                     var defaultLang = utilDetect().locale.toLowerCase().split('-')[0];
117891                     var langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
117892                     var isLangEn = defaultLang.indexOf('en') > -1;
117893                     if (isLangEn || langExists) {
117894                         defaultLang = '';
117895                         langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
117896                     }
117897
117898                     if (!langExists) {
117899                         // prepend the value so it appears at the top
117900                         _multilingual.unshift({ lang: defaultLang, value: '' });
117901
117902                         localizedInputs
117903                             .call(renderMultilingual);
117904                     }
117905                 }
117906
117907
117908                 function change(onInput) {
117909                     return function() {
117910                         if (field.locked()) {
117911                             event.preventDefault();
117912                             return;
117913                         }
117914                         var t = {};
117915                         t[field.key] = utilGetSetValue(d3_select(this)) || undefined;
117916                         dispatch$1.call('change', this, t, onInput);
117917                     };
117918                 }
117919             }
117920
117921
117922             function key(lang) {
117923                 return field.key + ':' + lang;
117924             }
117925
117926
117927             function changeLang(d) {
117928                 var lang = utilGetSetValue(d3_select(this));
117929                 var t = {};
117930                 var language = languagesArray.find(function(d) {
117931                     return (d.localName && d.localName.toLowerCase() === lang.toLowerCase()) ||
117932                         d.label.toLowerCase() === lang.toLowerCase() ||
117933                         (d.nativeName && d.nativeName.toLowerCase() === lang.toLowerCase());
117934                 });
117935
117936                 if (language) { lang = language.code; }
117937
117938                 if (d.lang && d.lang !== lang) {
117939                     t[key(d.lang)] = undefined;
117940                 }
117941
117942                 var value = utilGetSetValue(d3_select(this.parentNode)
117943                     .selectAll('.localized-value'));
117944
117945                 if (lang && value) {
117946                     t[key(lang)] = value;
117947                 } else if (lang && _wikiTitles && _wikiTitles[d.lang]) {
117948                     t[key(lang)] = _wikiTitles[d.lang];
117949                 }
117950
117951                 d.lang = lang;
117952                 dispatch$1.call('change', this, t);
117953             }
117954
117955
117956             function changeValue(d) {
117957                 if (!d.lang) { return; }
117958                 var value = utilGetSetValue(d3_select(this)) || undefined;
117959                 var t = {};
117960                 t[key(d.lang)] = value;
117961                 d.value = value;
117962                 dispatch$1.call('change', this, t);
117963             }
117964
117965
117966             function fetchLanguages(value, cb) {
117967                 var v = value.toLowerCase();
117968
117969                 // show the user's language first
117970                 var langCodes = [currentLocale, currentLocale.split('-')[0]];
117971
117972                 if (_countryCode && dataTerritoryLanguages[_countryCode]) {
117973                     langCodes = langCodes.concat(dataTerritoryLanguages[_countryCode]);
117974                 }
117975
117976                 var langItems = [];
117977                 langCodes.forEach(function(code) {
117978                     var langItem = languagesArray.find(function(item) {
117979                         return item.code === code;
117980                     });
117981                     if (langItem) { langItems.push(langItem); }
117982                 });
117983                 langItems = utilArrayUniq(langItems.concat(languagesArray));
117984
117985                 cb(langItems.filter(function(d) {
117986                     return d.label.toLowerCase().indexOf(v) >= 0 ||
117987                         (d.localName && d.localName.toLowerCase().indexOf(v) >= 0) ||
117988                         (d.nativeName && d.nativeName.toLowerCase().indexOf(v) >= 0) ||
117989                         d.code.toLowerCase().indexOf(v) >= 0;
117990                 }).map(function(d) {
117991                     return { value: d.label };
117992                 }));
117993             }
117994
117995
117996             function renderMultilingual(selection) {
117997                 var entries = selection.selectAll('div.entry')
117998                     .data(_multilingual, function(d) { return d.lang; });
117999
118000                 entries.exit()
118001                     .style('top', '0')
118002                     .style('max-height', '240px')
118003                     .transition()
118004                     .duration(200)
118005                     .style('opacity', '0')
118006                     .style('max-height', '0px')
118007                     .remove();
118008
118009                 var entriesEnter = entries.enter()
118010                     .append('div')
118011                     .attr('class', 'entry')
118012                     .each(function() {
118013                         var wrap = d3_select(this);
118014
118015                         var label = wrap
118016                             .append('label')
118017                             .attr('class', 'field-label');
118018
118019                         var text = label
118020                             .append('span')
118021                             .attr('class', 'label-text');
118022
118023                         text
118024                             .append('span')
118025                             .attr('class', 'label-textvalue')
118026                             .text(t('translate.localized_translation_label'));
118027
118028                         text
118029                             .append('span')
118030                             .attr('class', 'label-textannotation');
118031
118032                         label
118033                             .append('button')
118034                             .attr('class', 'remove-icon-multilingual')
118035                             .on('click', function(d, index) {
118036                                 if (field.locked()) { return; }
118037                                 event.preventDefault();
118038
118039                                 if (!d.lang || !d.value) {
118040                                     _multilingual.splice(index, 1);
118041                                     renderMultilingual(selection);
118042                                 } else {
118043                                     // remove from entity tags
118044                                     var t = {};
118045                                     t[key(d.lang)] = undefined;
118046                                     dispatch$1.call('change', this, t);
118047                                 }
118048
118049                             })
118050                             .call(svgIcon('#iD-operation-delete'));
118051
118052                         wrap
118053                             .append('input')
118054                             .attr('class', 'localized-lang')
118055                             .attr('type', 'text')
118056                             .attr('placeholder', t('translate.localized_translation_language'))
118057                             .on('blur', changeLang)
118058                             .on('change', changeLang)
118059                             .call(langCombo);
118060
118061                         wrap
118062                             .append('input')
118063                             .attr('type', 'text')
118064                             .attr('placeholder', t('translate.localized_translation_name'))
118065                             .attr('class', 'localized-value')
118066                             .on('blur', changeValue)
118067                             .on('change', changeValue);
118068                     });
118069
118070                 entriesEnter
118071                     .style('margin-top', '0px')
118072                     .style('max-height', '0px')
118073                     .style('opacity', '0')
118074                     .transition()
118075                     .duration(200)
118076                     .style('margin-top', '10px')
118077                     .style('max-height', '240px')
118078                     .style('opacity', '1')
118079                     .on('end', function() {
118080                         d3_select(this)
118081                             .style('max-height', '')
118082                             .style('overflow', 'visible');
118083                     });
118084
118085                 entries = entries.merge(entriesEnter);
118086
118087                 entries.order();
118088
118089                 utilGetSetValue(entries.select('.localized-lang'), function(d) {
118090                     return languageName(d.lang);
118091                 });
118092
118093                 utilGetSetValue(entries.select('.localized-value'),
118094                     function(d) { return d.value; });
118095             }
118096
118097
118098             localized.tags = function(tags) {
118099                 // Fetch translations from wikipedia
118100                 if (tags.wikipedia && !_wikiTitles) {
118101                     _wikiTitles = {};
118102                     var wm = tags.wikipedia.match(/([^:]+):(.+)/);
118103                     if (wm && wm[0] && wm[1]) {
118104                         wikipedia.translations(wm[1], wm[2], function(err, d) {
118105                             if (err || !d) { return; }
118106                             _wikiTitles = d;
118107                         });
118108                     }
118109                 }
118110
118111                 utilGetSetValue(input, tags[field.key] || '');
118112
118113                 calcMultilingual(tags);
118114
118115                 _selection
118116                     .call(localized);
118117             };
118118
118119
118120             localized.focus = function() {
118121                 input.node().focus();
118122             };
118123
118124
118125             localized.entity = function(val) {
118126                 if (!arguments.length) { return _entity; }
118127                 _entity = val;
118128                 _multilingual = [];
118129                 loadCountryCode();
118130                 return localized;
118131             };
118132
118133             function loadCountryCode() {
118134                 var center = _entity.extent(context.graph()).center();
118135                 var countryCode = iso1A2Code(center);
118136                 _countryCode = countryCode && countryCode.toLowerCase();
118137             }
118138
118139             return utilRebind(localized, dispatch$1, 'on');
118140         }
118141
118142         function uiFieldMaxspeed(field, context) {
118143             var dispatch$1 = dispatch('change');
118144             var unitInput = d3_select(null);
118145             var input = d3_select(null);
118146             var _entity;
118147             var _isImperial;
118148
118149             var speedCombo = uiCombobox(context, 'maxspeed');
118150             var unitCombo = uiCombobox(context, 'maxspeed-unit')
118151                     .data(['km/h', 'mph'].map(comboValues));
118152
118153             var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120];
118154             var imperialValues = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80];
118155
118156
118157             function maxspeed(selection) {
118158
118159                 var wrap = selection.selectAll('.form-field-input-wrap')
118160                     .data([0]);
118161
118162                 wrap = wrap.enter()
118163                     .append('div')
118164                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
118165                     .merge(wrap);
118166
118167
118168                 input = wrap.selectAll('#preset-input-' + field.safeid)
118169                     .data([0]);
118170
118171                 input = input.enter()
118172                     .append('input')
118173                     .attr('type', 'text')
118174                     .attr('id', 'preset-input-' + field.safeid)
118175                     .attr('placeholder', field.placeholder())
118176                     .call(utilNoAuto)
118177                     .call(speedCombo)
118178                     .merge(input);
118179
118180                 input
118181                     .on('change', change)
118182                     .on('blur', change);
118183
118184                 var loc = _entity.extent(context.graph()).center();
118185
118186                 _isImperial = roadSpeedUnit(loc) === 'mph';
118187
118188                 unitInput = wrap.selectAll('input.maxspeed-unit')
118189                     .data([0]);
118190
118191                 unitInput = unitInput.enter()
118192                     .append('input')
118193                     .attr('type', 'text')
118194                     .attr('class', 'maxspeed-unit')
118195                     .call(unitCombo)
118196                     .merge(unitInput);
118197
118198                 unitInput
118199                     .on('blur', changeUnits)
118200                     .on('change', changeUnits);
118201
118202
118203                 function changeUnits() {
118204                     _isImperial = utilGetSetValue(unitInput) === 'mph';
118205                     utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
118206                     setSuggestions();
118207                     change();
118208                 }
118209             }
118210
118211
118212             function setSuggestions() {
118213                 speedCombo.data((_isImperial ? imperialValues : metricValues).map(comboValues));
118214                 utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
118215             }
118216
118217
118218             function comboValues(d) {
118219                 return {
118220                     value: d.toString(),
118221                     title: d.toString()
118222                 };
118223             }
118224
118225
118226             function change() {
118227                 var tag = {};
118228                 var value = utilGetSetValue(input);
118229
118230                 if (!value) {
118231                     tag[field.key] = undefined;
118232                 } else if (isNaN(value) || !_isImperial) {
118233                     tag[field.key] = value;
118234                 } else {
118235                     tag[field.key] = value + ' mph';
118236                 }
118237
118238                 dispatch$1.call('change', this, tag);
118239             }
118240
118241
118242             maxspeed.tags = function(tags) {
118243                 var value = tags[field.key];
118244
118245                 if (value && value.indexOf('mph') >= 0) {
118246                     value = parseInt(value, 10);
118247                     _isImperial = true;
118248                 } else if (value) {
118249                     _isImperial = false;
118250                 }
118251
118252                 setSuggestions();
118253                 utilGetSetValue(input, value || '');
118254             };
118255
118256
118257             maxspeed.focus = function() {
118258                 input.node().focus();
118259             };
118260
118261
118262             maxspeed.entity = function(val) {
118263                 _entity = val;
118264             };
118265
118266
118267             return utilRebind(maxspeed, dispatch$1, 'on');
118268         }
118269
118270         function uiFieldRadio(field, context) {
118271             var dispatch$1 = dispatch('change');
118272             var placeholder = d3_select(null);
118273             var wrap = d3_select(null);
118274             var labels = d3_select(null);
118275             var radios = d3_select(null);
118276             var radioData = (field.options || (field.strings && field.strings.options && Object.keys(field.strings.options)) || field.keys).slice();  // shallow copy
118277             var typeField;
118278             var layerField;
118279             var _oldType = {};
118280             var _entity;
118281
118282
118283             function selectedKey() {
118284                 var node = wrap.selectAll('.form-field-input-radio label.active input');
118285                 return !node.empty() && node.datum();
118286             }
118287
118288
118289             function radio(selection) {
118290                 selection.classed('preset-radio', true);
118291
118292                 wrap = selection.selectAll('.form-field-input-wrap')
118293                     .data([0]);
118294
118295                 var enter = wrap.enter()
118296                     .append('div')
118297                     .attr('class', 'form-field-input-wrap form-field-input-radio');
118298
118299                 enter
118300                     .append('span')
118301                     .attr('class', 'placeholder');
118302
118303                 wrap = wrap
118304                     .merge(enter);
118305
118306
118307                 placeholder = wrap.selectAll('.placeholder');
118308
118309                 labels = wrap.selectAll('label')
118310                     .data(radioData);
118311
118312                 enter = labels.enter()
118313                     .append('label');
118314
118315                 enter
118316                     .append('input')
118317                     .attr('type', 'radio')
118318                     .attr('name', field.id)
118319                     .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); })
118320                     .attr('checked', false);
118321
118322                 enter
118323                     .append('span')
118324                     .text(function(d) { return field.t('options.' + d, { 'default': d }); });
118325
118326                 labels = labels
118327                     .merge(enter);
118328
118329                 radios = labels.selectAll('input')
118330                     .on('change', changeRadio);
118331
118332             }
118333
118334
118335             function structureExtras(selection, tags) {
118336                 var selected = selectedKey() || tags.layer !== undefined;
118337                 var type = context.presets().field(selected);
118338                 var layer = context.presets().field('layer');
118339                 var showLayer = (selected === 'bridge' || selected === 'tunnel' || tags.layer !== undefined);
118340
118341
118342                 var extrasWrap = selection.selectAll('.structure-extras-wrap')
118343                     .data(selected ? [0] : []);
118344
118345                 extrasWrap.exit()
118346                     .remove();
118347
118348                 extrasWrap = extrasWrap.enter()
118349                     .append('div')
118350                     .attr('class', 'structure-extras-wrap')
118351                     .merge(extrasWrap);
118352
118353                 var list = extrasWrap.selectAll('ul')
118354                     .data([0]);
118355
118356                 list = list.enter()
118357                     .append('ul')
118358                     .attr('class', 'rows')
118359                     .merge(list);
118360
118361
118362                 // Type
118363                 if (type) {
118364                     if (!typeField || typeField.id !== selected) {
118365                         typeField = uiField(context, type, _entity, { wrap: false })
118366                             .on('change', changeType);
118367                     }
118368                     typeField.tags(tags);
118369                 } else {
118370                     typeField = null;
118371                 }
118372
118373                 var typeItem = list.selectAll('.structure-type-item')
118374                     .data(typeField ? [typeField] : [], function(d) { return d.id; });
118375
118376                 // Exit
118377                 typeItem.exit()
118378                     .remove();
118379
118380                 // Enter
118381                 var typeEnter = typeItem.enter()
118382                     .insert('li', ':first-child')
118383                     .attr('class', 'labeled-input structure-type-item');
118384
118385                 typeEnter
118386                     .append('span')
118387                     .attr('class', 'label structure-label-type')
118388                     .attr('for', 'preset-input-' + selected)
118389                     .text(t('inspector.radio.structure.type'));
118390
118391                 typeEnter
118392                     .append('div')
118393                     .attr('class', 'structure-input-type-wrap');
118394
118395                 // Update
118396                 typeItem = typeItem
118397                     .merge(typeEnter);
118398
118399                 if (typeField) {
118400                     typeItem.selectAll('.structure-input-type-wrap')
118401                         .call(typeField.render);
118402                 }
118403
118404
118405                 // Layer
118406                 if (layer && showLayer) {
118407                     if (!layerField) {
118408                         layerField = uiField(context, layer, _entity, { wrap: false })
118409                             .on('change', changeLayer);
118410                     }
118411                     layerField.tags(tags);
118412                     field.keys = utilArrayUnion(field.keys, ['layer']);
118413                 } else {
118414                     layerField = null;
118415                     field.keys = field.keys.filter(function(k) { return k !== 'layer'; });
118416                 }
118417
118418                 var layerItem = list.selectAll('.structure-layer-item')
118419                     .data(layerField ? [layerField] : []);
118420
118421                 // Exit
118422                 layerItem.exit()
118423                     .remove();
118424
118425                 // Enter
118426                 var layerEnter = layerItem.enter()
118427                     .append('li')
118428                     .attr('class', 'labeled-input structure-layer-item');
118429
118430                 layerEnter
118431                     .append('span')
118432                     .attr('class', 'label structure-label-layer')
118433                     .attr('for', 'preset-input-layer')
118434                     .text(t('inspector.radio.structure.layer'));
118435
118436                 layerEnter
118437                     .append('div')
118438                     .attr('class', 'structure-input-layer-wrap');
118439
118440                 // Update
118441                 layerItem = layerItem
118442                     .merge(layerEnter);
118443
118444                 if (layerField) {
118445                     layerItem.selectAll('.structure-input-layer-wrap')
118446                         .call(layerField.render);
118447                 }
118448             }
118449
118450
118451             function changeType(t, onInput) {
118452                 var key = selectedKey();
118453                 if (!key) { return; }
118454
118455                 var val = t[key];
118456                 if (val !== 'no') {
118457                     _oldType[key] = val;
118458                 }
118459
118460                 if (field.type === 'structureRadio') {
118461                     // remove layer if it should not be set
118462                     if (val === 'no' ||
118463                         (key !== 'bridge' && key !== 'tunnel') ||
118464                         (key === 'tunnel' && val === 'building_passage')) {
118465                         t.layer = undefined;
118466                     }
118467                     // add layer if it should be set
118468                     if (t.layer === undefined) {
118469                         if (key === 'bridge' && val !== 'no') {
118470                             t.layer = '1';
118471                         }
118472                         if (key === 'tunnel' && val !== 'no' && val !== 'building_passage') {
118473                             t.layer = '-1';
118474                         }
118475                     }
118476                  }
118477
118478                 dispatch$1.call('change', this, t, onInput);
118479             }
118480
118481
118482             function changeLayer(t, onInput) {
118483                 if (t.layer === '0') {
118484                     t.layer = undefined;
118485                 }
118486                 dispatch$1.call('change', this, t, onInput);
118487             }
118488
118489
118490             function changeRadio() {
118491                 var t = {};
118492                 var activeKey;
118493
118494                 if (field.key) {
118495                     t[field.key] = undefined;
118496                 }
118497
118498                 radios.each(function(d) {
118499                     var active = d3_select(this).property('checked');
118500                     if (active) { activeKey = d; }
118501
118502                     if (field.key) {
118503                         if (active) { t[field.key] = d; }
118504                     } else {
118505                         var val = _oldType[activeKey] || 'yes';
118506                         t[d] = active ? val : undefined;
118507                     }
118508                 });
118509
118510                 if (field.type === 'structureRadio') {
118511                     if (activeKey === 'bridge') {
118512                         t.layer = '1';
118513                     } else if (activeKey === 'tunnel' && t.tunnel !== 'building_passage') {
118514                         t.layer = '-1';
118515                     } else {
118516                         t.layer = undefined;
118517                     }
118518                 }
118519
118520                 dispatch$1.call('change', this, t);
118521             }
118522
118523
118524             radio.tags = function(tags) {
118525                 function checked(d) {
118526                     if (field.key) {
118527                         return tags[field.key] === d;
118528                     } else {
118529                         return !!(tags[d] && tags[d].toLowerCase() !== 'no');
118530                     }
118531                 }
118532
118533                 labels.classed('active', checked);
118534                 radios.property('checked', checked);
118535
118536                 var selection = radios.filter(function() { return this.checked; });
118537
118538                 if (selection.empty()) {
118539                     placeholder.text(t('inspector.none'));
118540                 } else {
118541                     placeholder.text(selection.attr('value'));
118542                     _oldType[selection.datum()] = tags[selection.datum()];
118543                 }
118544
118545                 if (field.type === 'structureRadio') {
118546                     // For waterways without a tunnel tag, set 'culvert' as
118547                     // the _oldType to default to if the user picks 'tunnel'
118548                     if (!!tags.waterway && !_oldType.tunnel) {
118549                         _oldType.tunnel = 'culvert';
118550                     }
118551
118552                     wrap.call(structureExtras, tags);
118553                 }
118554             };
118555
118556
118557             radio.focus = function() {
118558                 radios.node().focus();
118559             };
118560
118561
118562             radio.entity = function(val) {
118563                 if (!arguments.length) { return _entity; }
118564                 _entity = val;
118565                 _oldType = {};
118566                 return radio;
118567             };
118568
118569
118570             return utilRebind(radio, dispatch$1, 'on');
118571         }
118572
118573         function uiFieldRestrictions(field, context) {
118574             var dispatch$1 = dispatch('change');
118575             var breathe = behaviorBreathe();
118576
118577             context.storage('turn-restriction-via-way', null);                 // remove old key
118578             var storedViaWay = context.storage('turn-restriction-via-way0');   // use new key #6922
118579             var storedDistance = context.storage('turn-restriction-distance');
118580
118581             var _maxViaWay = storedViaWay !== null ? (+storedViaWay) : 0;
118582             var _maxDistance = storedDistance ? (+storedDistance) : 30;
118583             var _initialized = false;
118584             var _parent = d3_select(null);       // the entire field
118585             var _container = d3_select(null);    // just the map
118586             var _oldTurns;
118587             var _graph;
118588             var _vertexID;
118589             var _intersection;
118590             var _fromWayID;
118591
118592             var _lastXPos;
118593
118594
118595             function restrictions(selection) {
118596                 _parent = selection;
118597
118598                 // try to reuse the intersection, but always rebuild it if the graph has changed
118599                 if (_vertexID && (context.graph() !== _graph || !_intersection)) {
118600                     _graph = context.graph();
118601                     _intersection = osmIntersection(_graph, _vertexID, _maxDistance);
118602                 }
118603
118604                 // It's possible for there to be no actual intersection here.
118605                 // for example, a vertex of two `highway=path`
118606                 // In this case, hide the field.
118607                 var isOK = (
118608                     _intersection &&
118609                     _intersection.vertices.length &&           // has vertices
118610                     _intersection.vertices                     // has the vertex that the user selected
118611                         .filter(function(vertex) { return vertex.id === _vertexID; }).length &&
118612                     _intersection.ways.length > 2 &&           // has more than 2 ways
118613                     _intersection.ways                         // has more than 1 TO way
118614                         .filter(function(way) { return way.__to; }).length > 1
118615                 );
118616
118617                 // Also hide in the case where
118618                 d3_select(selection.node().parentNode).classed('hide', !isOK);
118619
118620                 // if form field is hidden or has detached from dom, clean up.
118621                 if (!isOK ||
118622                     !d3_select('.inspector-wrap.inspector-hidden').empty() ||
118623                     !selection.node().parentNode ||
118624                     !selection.node().parentNode.parentNode) {
118625                     selection.call(restrictions.off);
118626                     return;
118627                 }
118628
118629
118630                 var wrap = selection.selectAll('.form-field-input-wrap')
118631                     .data([0]);
118632
118633                 wrap = wrap.enter()
118634                     .append('div')
118635                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
118636                     .merge(wrap);
118637
118638                 var container = wrap.selectAll('.restriction-container')
118639                     .data([0]);
118640
118641                 // enter
118642                 var containerEnter = container.enter()
118643                     .append('div')
118644                     .attr('class', 'restriction-container');
118645
118646                 containerEnter
118647                     .append('div')
118648                     .attr('class', 'restriction-help');
118649
118650                 // update
118651                 _container = containerEnter
118652                     .merge(container)
118653                     .call(renderViewer);
118654
118655                 var controls = wrap.selectAll('.restriction-controls')
118656                     .data([0]);
118657
118658                 // enter/update
118659                 controls.enter()
118660                     .append('div')
118661                     .attr('class', 'restriction-controls-container')
118662                     .append('div')
118663                     .attr('class', 'restriction-controls')
118664                     .merge(controls)
118665                     .call(renderControls);
118666             }
118667
118668
118669             function renderControls(selection) {
118670                 var distControl = selection.selectAll('.restriction-distance')
118671                     .data([0]);
118672
118673                 distControl.exit()
118674                     .remove();
118675
118676                 var distControlEnter = distControl.enter()
118677                     .append('div')
118678                     .attr('class', 'restriction-control restriction-distance');
118679
118680                 distControlEnter
118681                     .append('span')
118682                     .attr('class', 'restriction-control-label restriction-distance-label')
118683                     .text(t('restriction.controls.distance') + ':');
118684
118685                 distControlEnter
118686                     .append('input')
118687                     .attr('class', 'restriction-distance-input')
118688                     .attr('type', 'range')
118689                     .attr('min', '20')
118690                     .attr('max', '50')
118691                     .attr('step', '5');
118692
118693                 distControlEnter
118694                     .append('span')
118695                     .attr('class', 'restriction-distance-text');
118696
118697                 // update
118698                 selection.selectAll('.restriction-distance-input')
118699                     .property('value', _maxDistance)
118700                     .on('input', function() {
118701                         var val = d3_select(this).property('value');
118702                         _maxDistance = +val;
118703                         _intersection = null;
118704                         _container.selectAll('.layer-osm .layer-turns *').remove();
118705                         context.storage('turn-restriction-distance', _maxDistance);
118706                         _parent.call(restrictions);
118707                     });
118708
118709                 selection.selectAll('.restriction-distance-text')
118710                     .text(displayMaxDistance(_maxDistance));
118711
118712
118713                 var viaControl = selection.selectAll('.restriction-via-way')
118714                     .data([0]);
118715
118716                 viaControl.exit()
118717                     .remove();
118718
118719                 var viaControlEnter = viaControl.enter()
118720                     .append('div')
118721                     .attr('class', 'restriction-control restriction-via-way');
118722
118723                 viaControlEnter
118724                     .append('span')
118725                     .attr('class', 'restriction-control-label restriction-via-way-label')
118726                     .text(t('restriction.controls.via') + ':');
118727
118728                 viaControlEnter
118729                     .append('input')
118730                     .attr('class', 'restriction-via-way-input')
118731                     .attr('type', 'range')
118732                     .attr('min', '0')
118733                     .attr('max', '2')
118734                     .attr('step', '1');
118735
118736                 viaControlEnter
118737                     .append('span')
118738                     .attr('class', 'restriction-via-way-text');
118739
118740                 // update
118741                 selection.selectAll('.restriction-via-way-input')
118742                     .property('value', _maxViaWay)
118743                     .on('input', function() {
118744                         var val = d3_select(this).property('value');
118745                         _maxViaWay = +val;
118746                         _container.selectAll('.layer-osm .layer-turns *').remove();
118747                         context.storage('turn-restriction-via-way0', _maxViaWay);
118748                         _parent.call(restrictions);
118749                     });
118750
118751                 selection.selectAll('.restriction-via-way-text')
118752                     .text(displayMaxVia(_maxViaWay));
118753             }
118754
118755
118756             function renderViewer(selection) {
118757                 if (!_intersection) { return; }
118758
118759                 var vgraph = _intersection.graph;
118760                 var filter = utilFunctor(true);
118761                 var projection = geoRawMercator();
118762
118763                 // Reflow warning: `utilGetDimensions` calls `getBoundingClientRect`
118764                 // Instead of asking the restriction-container for its dimensions,
118765                 //  we can ask the #sidebar, which can have its dimensions cached.
118766                 // width: calc as sidebar - padding
118767                 // height: hardcoded (from `80_app.css`)
118768                 // var d = utilGetDimensions(selection);
118769                 var sdims = utilGetDimensions(d3_select('#sidebar'));
118770                 var d = [ sdims[0] - 50, 370 ];
118771                 var c = geoVecScale(d, 0.5);
118772                 var z = 22;
118773
118774                 projection.scale(geoZoomToScale(z));
118775
118776                 // Calculate extent of all key vertices
118777                 var extent = geoExtent();
118778                 for (var i = 0; i < _intersection.vertices.length; i++) {
118779                     extent._extend(_intersection.vertices[i].extent());
118780                 }
118781
118782                 // If this is a large intersection, adjust zoom to fit extent
118783                 if (_intersection.vertices.length > 1) {
118784                     var padding = 180;   // in z22 pixels
118785                     var tl = projection([extent[0][0], extent[1][1]]);
118786                     var br = projection([extent[1][0], extent[0][1]]);
118787                     var hFactor = (br[0] - tl[0]) / (d[0] - padding);
118788                     var vFactor = (br[1] - tl[1]) / (d[1] - padding);
118789                     var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
118790                     var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
118791                     z = z - Math.max(hZoomDiff, vZoomDiff);
118792                     projection.scale(geoZoomToScale(z));
118793                 }
118794
118795                 var padTop = 35;   // reserve top space for hint text
118796                 var extentCenter = projection(extent.center());
118797                 extentCenter[1] = extentCenter[1] - padTop;
118798
118799                 projection
118800                     .translate(geoVecSubtract(c, extentCenter))
118801                     .clipExtent([[0, 0], d]);
118802
118803                 var drawLayers = svgLayers(projection, context).only(['osm','touch']).dimensions(d);
118804                 var drawVertices = svgVertices(projection, context);
118805                 var drawLines = svgLines(projection, context);
118806                 var drawTurns = svgTurns(projection, context);
118807
118808                 var firstTime = selection.selectAll('.surface').empty();
118809
118810                 selection
118811                     .call(drawLayers);
118812
118813                 var surface = selection.selectAll('.surface')
118814                     .classed('tr', true);
118815
118816                 if (firstTime) {
118817                     _initialized = true;
118818
118819                     surface
118820                         .call(breathe);
118821                 }
118822
118823                 // This can happen if we've lowered the detail while a FROM way
118824                 // is selected, and that way is no longer part of the intersection.
118825                 if (_fromWayID && !vgraph.hasEntity(_fromWayID)) {
118826                     _fromWayID = null;
118827                     _oldTurns = null;
118828                 }
118829
118830                 surface
118831                     .call(utilSetDimensions, d)
118832                     .call(drawVertices, vgraph, _intersection.vertices, filter, extent, z)
118833                     .call(drawLines, vgraph, _intersection.ways, filter)
118834                     .call(drawTurns, vgraph, _intersection.turns(_fromWayID, _maxViaWay));
118835
118836                 surface
118837                     .on('click.restrictions', click)
118838                     .on('mouseover.restrictions', mouseover);
118839
118840                 surface
118841                     .selectAll('.selected')
118842                     .classed('selected', false);
118843
118844                 surface
118845                     .selectAll('.related')
118846                     .classed('related', false);
118847
118848                 if (_fromWayID) {
118849                     var way = vgraph.entity(_fromWayID);
118850                     surface
118851                         .selectAll('.' + _fromWayID)
118852                         .classed('selected', true)
118853                         .classed('related', true);
118854                 }
118855
118856                 document.addEventListener('resizeWindow', function () {
118857                     utilSetDimensions(_container, null);
118858                     redraw(1);
118859                 }, false);
118860
118861                 updateHints(null);
118862
118863
118864                 function click() {
118865                     surface
118866                         .call(breathe.off)
118867                         .call(breathe);
118868
118869                     var datum = event.target.__data__;
118870                     var entity = datum && datum.properties && datum.properties.entity;
118871                     if (entity) {
118872                         datum = entity;
118873                     }
118874
118875                     if (datum instanceof osmWay && (datum.__from || datum.__via)) {
118876                         _fromWayID = datum.id;
118877                         _oldTurns = null;
118878                         redraw();
118879
118880                     } else if (datum instanceof osmTurn) {
118881                         var actions, extraActions, turns, i;
118882                         var restrictionType = osmInferRestriction(vgraph, datum, projection);
118883
118884                         if (datum.restrictionID && !datum.direct) {
118885                             return;
118886
118887                         } else if (datum.restrictionID && !datum.only) {    // NO -> ONLY
118888                             var seen = {};
118889                             var datumOnly = JSON.parse(JSON.stringify(datum));   // deep clone the datum
118890                             datumOnly.only = true;                               // but change this property
118891                             restrictionType = restrictionType.replace(/^no/, 'only');
118892
118893                             // Adding an ONLY restriction should destroy all other direct restrictions from the FROM towards the VIA.
118894                             // We will remember them in _oldTurns, and restore them if the user clicks again.
118895                             turns = _intersection.turns(_fromWayID, 2);
118896                             extraActions = [];
118897                             _oldTurns = [];
118898                             for (i = 0; i < turns.length; i++) {
118899                                 var turn = turns[i];
118900                                 if (seen[turn.restrictionID]) { continue; }  // avoid deleting the turn twice (#4968, #4928)
118901
118902                                 if (turn.direct && turn.path[1] === datum.path[1]) {
118903                                     seen[turns[i].restrictionID] = true;
118904                                     turn.restrictionType = osmInferRestriction(vgraph, turn, projection);
118905                                     _oldTurns.push(turn);
118906                                     extraActions.push(actionUnrestrictTurn(turn));
118907                                 }
118908                             }
118909
118910                             actions = _intersection.actions.concat(extraActions, [
118911                                 actionRestrictTurn(datumOnly, restrictionType),
118912                                 t('operations.restriction.annotation.create')
118913                             ]);
118914
118915                         } else if (datum.restrictionID) {   // ONLY -> Allowed
118916                             // Restore whatever restrictions we might have destroyed by cycling thru the ONLY state.
118917                             // This relies on the assumption that the intersection was already split up when we
118918                             // performed the previous action (NO -> ONLY), so the IDs in _oldTurns shouldn't have changed.
118919                             turns = _oldTurns || [];
118920                             extraActions = [];
118921                             for (i = 0; i < turns.length; i++) {
118922                                 if (turns[i].key !== datum.key) {
118923                                     extraActions.push(actionRestrictTurn(turns[i], turns[i].restrictionType));
118924                                 }
118925                             }
118926                             _oldTurns = null;
118927
118928                             actions = _intersection.actions.concat(extraActions, [
118929                                 actionUnrestrictTurn(datum),
118930                                 t('operations.restriction.annotation.delete')
118931                             ]);
118932
118933                         } else {    // Allowed -> NO
118934                             actions = _intersection.actions.concat([
118935                                 actionRestrictTurn(datum, restrictionType),
118936                                 t('operations.restriction.annotation.create')
118937                             ]);
118938                         }
118939
118940                         context.perform.apply(context, actions);
118941
118942                         // At this point the datum will be changed, but will have same key..
118943                         // Refresh it and update the help..
118944                         var s = surface.selectAll('.' + datum.key);
118945                         datum = s.empty() ? null : s.datum();
118946                         updateHints(datum);
118947
118948                     } else {
118949                         _fromWayID = null;
118950                         _oldTurns = null;
118951                         redraw();
118952                     }
118953                 }
118954
118955
118956                 function mouseover() {
118957                     var datum = event.target.__data__;
118958                     updateHints(datum);
118959                 }
118960
118961                 _lastXPos = _lastXPos || sdims[0];
118962
118963                 function redraw(minChange) {
118964                     var xPos = -1;
118965
118966                     if (minChange) {
118967                         xPos = utilGetDimensions(d3_select('#sidebar'))[0];
118968                     }
118969
118970                     if (!minChange || (minChange && Math.abs(xPos - _lastXPos) >= minChange)) {
118971                         if (context.hasEntity(_vertexID)) {
118972                             _lastXPos = xPos;
118973                             _container.call(renderViewer);
118974                         }
118975                     }
118976                 }
118977
118978
118979                 function highlightPathsFrom(wayID) {
118980                     surface.selectAll('.related')
118981                         .classed('related', false)
118982                         .classed('allow', false)
118983                         .classed('restrict', false)
118984                         .classed('only', false);
118985
118986                     surface.selectAll('.' + wayID)
118987                         .classed('related', true);
118988
118989                     if (wayID) {
118990                         var turns = _intersection.turns(wayID, _maxViaWay);
118991                         for (var i = 0; i < turns.length; i++) {
118992                             var turn = turns[i];
118993                             var ids = [turn.to.way];
118994                             var klass = (turn.no ? 'restrict' : (turn.only ? 'only' : 'allow'));
118995
118996                             if (turn.only || turns.length === 1) {
118997                                 if (turn.via.ways) {
118998                                     ids = ids.concat(turn.via.ways);
118999                                 }
119000                             } else if (turn.to.way === wayID) {
119001                                 continue;
119002                             }
119003
119004                             surface.selectAll(utilEntitySelector(ids))
119005                                 .classed('related', true)
119006                                 .classed('allow', (klass === 'allow'))
119007                                 .classed('restrict', (klass === 'restrict'))
119008                                 .classed('only', (klass === 'only'));
119009                         }
119010                     }
119011                 }
119012
119013
119014                 function updateHints(datum) {
119015                     var help = _container.selectAll('.restriction-help').html('');
119016
119017                     var placeholders = {};
119018                     ['from', 'via', 'to'].forEach(function(k) {
119019                         placeholders[k] = '<span class="qualifier">' + t('restriction.help.' + k) + '</span>';
119020                     });
119021
119022                     var entity = datum && datum.properties && datum.properties.entity;
119023                     if (entity) {
119024                         datum = entity;
119025                     }
119026
119027                     if (_fromWayID) {
119028                         way = vgraph.entity(_fromWayID);
119029                         surface
119030                             .selectAll('.' + _fromWayID)
119031                             .classed('selected', true)
119032                             .classed('related', true);
119033                     }
119034
119035                     // Hovering a way
119036                     if (datum instanceof osmWay && datum.__from) {
119037                         way = datum;
119038
119039                         highlightPathsFrom(_fromWayID ? null : way.id);
119040                         surface.selectAll('.' + way.id)
119041                             .classed('related', true);
119042
119043                         var clickSelect = (!_fromWayID || _fromWayID !== way.id);
119044                         help
119045                             .append('div')      // "Click to select FROM {fromName}." / "FROM {fromName}"
119046                             .html(t('restriction.help.' + (clickSelect ? 'select_from_name' : 'from_name'), {
119047                                 from: placeholders.from,
119048                                 fromName: displayName(way.id, vgraph)
119049                             }));
119050
119051
119052                     // Hovering a turn arrow
119053                     } else if (datum instanceof osmTurn) {
119054                         var restrictionType = osmInferRestriction(vgraph, datum, projection);
119055                         var turnType = restrictionType.replace(/^(only|no)\_/, '');
119056                         var indirect = (datum.direct === false ? t('restriction.help.indirect') : '');
119057                         var klass, turnText, nextText;
119058
119059                         if (datum.no) {
119060                             klass = 'restrict';
119061                             turnText = t('restriction.help.turn.no_' + turnType, { indirect: indirect });
119062                             nextText = t('restriction.help.turn.only_' + turnType, { indirect: '' });
119063                         } else if (datum.only) {
119064                             klass = 'only';
119065                             turnText = t('restriction.help.turn.only_' + turnType, { indirect: indirect });
119066                             nextText = t('restriction.help.turn.allowed_' + turnType, { indirect: '' });
119067                         } else {
119068                             klass = 'allow';
119069                             turnText = t('restriction.help.turn.allowed_' + turnType, { indirect: indirect });
119070                             nextText = t('restriction.help.turn.no_' + turnType, { indirect: '' });
119071                         }
119072
119073                         help
119074                             .append('div')      // "NO Right Turn (indirect)"
119075                             .attr('class', 'qualifier ' + klass)
119076                             .text(turnText);
119077
119078                         help
119079                             .append('div')      // "FROM {fromName} TO {toName}"
119080                             .html(t('restriction.help.from_name_to_name', {
119081                                 from: placeholders.from,
119082                                 fromName: displayName(datum.from.way, vgraph),
119083                                 to: placeholders.to,
119084                                 toName: displayName(datum.to.way, vgraph)
119085                             }));
119086
119087                         if (datum.via.ways && datum.via.ways.length) {
119088                             var names = [];
119089                             for (var i = 0; i < datum.via.ways.length; i++) {
119090                                 var prev = names[names.length - 1];
119091                                 var curr = displayName(datum.via.ways[i], vgraph);
119092                                 if (!prev || curr !== prev)   // collapse identical names
119093                                     { names.push(curr); }
119094                             }
119095
119096                             help
119097                                 .append('div')      // "VIA {viaNames}"
119098                                 .html(t('restriction.help.via_names', {
119099                                     via: placeholders.via,
119100                                     viaNames: names.join(', ')
119101                                 }));
119102                         }
119103
119104                         if (!indirect) {
119105                             help
119106                                 .append('div')      // Click for "No Right Turn"
119107                                 .text(t('restriction.help.toggle', { turn: nextText.trim() }));
119108                         }
119109
119110                         highlightPathsFrom(null);
119111                         var alongIDs = datum.path.slice();
119112                         surface.selectAll(utilEntitySelector(alongIDs))
119113                             .classed('related', true)
119114                             .classed('allow', (klass === 'allow'))
119115                             .classed('restrict', (klass === 'restrict'))
119116                             .classed('only', (klass === 'only'));
119117
119118
119119                     // Hovering empty surface
119120                     } else {
119121                         highlightPathsFrom(null);
119122                         if (_fromWayID) {
119123                             help
119124                                 .append('div')      // "FROM {fromName}"
119125                                 .html(t('restriction.help.from_name', {
119126                                     from: placeholders.from,
119127                                     fromName: displayName(_fromWayID, vgraph)
119128                                 }));
119129
119130                         } else {
119131                             help
119132                                 .append('div')      // "Click to select a FROM segment."
119133                                 .html(t('restriction.help.select_from', {
119134                                     from: placeholders.from
119135                                 }));
119136                         }
119137                     }
119138                 }
119139             }
119140
119141
119142             function displayMaxDistance(maxDist) {
119143                 var isImperial = (utilDetect().locale.toLowerCase() === 'en-us');
119144                 var opts;
119145
119146                 if (isImperial) {
119147                     var distToFeet = {   // imprecise conversion for prettier display
119148                         20: 70, 25: 85, 30: 100, 35: 115, 40: 130, 45: 145, 50: 160
119149                     }[maxDist];
119150                     opts = { distance: t('units.feet', { quantity: distToFeet }) };
119151                 } else {
119152                     opts = { distance: t('units.meters', { quantity: maxDist }) };
119153                 }
119154
119155                 return t('restriction.controls.distance_up_to', opts);
119156             }
119157
119158
119159             function displayMaxVia(maxVia) {
119160                 return maxVia === 0 ? t('restriction.controls.via_node_only')
119161                     : maxVia === 1 ? t('restriction.controls.via_up_to_one')
119162                     : t('restriction.controls.via_up_to_two');
119163             }
119164
119165
119166             function displayName(entityID, graph) {
119167                 var entity = graph.entity(entityID);
119168                 var name = utilDisplayName(entity) || '';
119169                 var matched = context.presets().match(entity, graph);
119170                 var type = (matched && matched.name()) || utilDisplayType(entity.id);
119171                 return name || type;
119172             }
119173
119174
119175             restrictions.entity = function(val) {
119176                 _intersection = null;
119177                 _fromWayID = null;
119178                 _oldTurns = null;
119179                 _vertexID = val.id;
119180             };
119181
119182
119183             restrictions.tags = function() {};
119184             restrictions.focus = function() {};
119185
119186
119187             restrictions.off = function(selection) {
119188                 if (!_initialized) { return; }
119189
119190                 selection.selectAll('.surface')
119191                     .call(breathe.off)
119192                     .on('click.restrictions', null)
119193                     .on('mouseover.restrictions', null);
119194
119195                 d3_select(window)
119196                     .on('resize.restrictions', null);
119197             };
119198
119199
119200             return utilRebind(restrictions, dispatch$1, 'on');
119201         }
119202
119203         function uiFieldTextarea(field) {
119204             var dispatch$1 = dispatch('change');
119205             var input = d3_select(null);
119206
119207
119208             function textarea(selection) {
119209                 var wrap = selection.selectAll('.form-field-input-wrap')
119210                     .data([0]);
119211
119212                 wrap = wrap.enter()
119213                     .append('div')
119214                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
119215                     .merge(wrap);
119216
119217                 input = wrap.selectAll('textarea')
119218                     .data([0]);
119219
119220                 input = input.enter()
119221                     .append('textarea')
119222                     .attr('id', 'preset-input-' + field.safeid)
119223                     .attr('placeholder', field.placeholder() || t('inspector.unknown'))
119224                     .attr('maxlength', 255)
119225                     .call(utilNoAuto)
119226                     .on('input', change(true))
119227                     .on('blur', change())
119228                     .on('change', change())
119229                     .merge(input);
119230             }
119231
119232
119233             function change(onInput) {
119234                 return function() {
119235                     var t = {};
119236                     t[field.key] = utilGetSetValue(input) || undefined;
119237                     dispatch$1.call('change', this, t, onInput);
119238                 };
119239             }
119240
119241
119242             textarea.tags = function(tags) {
119243                 utilGetSetValue(input, tags[field.key] || '');
119244             };
119245
119246
119247             textarea.focus = function() {
119248                 input.node().focus();
119249             };
119250
119251
119252             return utilRebind(textarea, dispatch$1, 'on');
119253         }
119254
119255         function uiFieldWikidata(field, context) {
119256             var wikidata = services$1.wikidata;
119257             var dispatch$1 = dispatch('change');
119258             var searchInput = d3_select(null);
119259             var _qid = null;
119260             var _wikidataEntity = null;
119261             var _wikiURL = '';
119262             var _entity;
119263
119264             var _wikipediaKey = field.keys && field.keys.find(function(key) {
119265                     return key.includes('wikipedia');
119266                 }),
119267                 _hintKey = field.key === 'wikidata' ? 'name' : field.key.split(':')[0];
119268
119269             var combobox = uiCombobox(context, 'combo-' + field.safeid)
119270                 .caseSensitive(true)
119271                 .minItems(1);
119272
119273             function wiki(selection) {
119274
119275                 var wrap = selection.selectAll('.form-field-input-wrap')
119276                     .data([0]);
119277
119278                 wrap = wrap.enter()
119279                     .append('div')
119280                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
119281                     .merge(wrap);
119282
119283
119284                 var list = wrap.selectAll('ul')
119285                     .data([0]);
119286
119287                 list = list.enter()
119288                     .append('ul')
119289                     .attr('class', 'rows')
119290                     .merge(list);
119291
119292                 var searchRow = list.selectAll('li.wikidata-search')
119293                     .data([0]);
119294
119295                 var searchRowEnter = searchRow.enter()
119296                     .append('li')
119297                     .attr('class', 'wikidata-search');
119298
119299                 searchInput = searchRowEnter
119300                     .append('input')
119301                     .attr('type', 'text')
119302                     .style('flex', '1')
119303                     .call(utilNoAuto);
119304
119305                 searchInput
119306                     .on('focus', function() {
119307                         var node = d3_select(this).node();
119308                         node.setSelectionRange(0, node.value.length);
119309                     })
119310                     .on('blur', function() {
119311                         setLabelForEntity();
119312                     })
119313                     .call(combobox.fetcher(fetchWikidataItems));
119314
119315                 combobox.on('accept', function(d) {
119316                     _qid = d.id;
119317                     change();
119318                 }).on('cancel', function() {
119319                     setLabelForEntity();
119320                 });
119321
119322                 searchRowEnter
119323                     .append('button')
119324                     .attr('class', 'form-field-button wiki-link')
119325                     .attr('title', t('icons.view_on', { domain: 'wikidata.org' }))
119326                     .attr('tabindex', -1)
119327                     .call(svgIcon('#iD-icon-out-link'))
119328                     .on('click', function() {
119329                         event.preventDefault();
119330                         if (_wikiURL) { window.open(_wikiURL, '_blank'); }
119331                     });
119332
119333                 var wikidataProperties = ['description', 'identifier'];
119334
119335                 var items = list.selectAll('li.labeled-input')
119336                     .data(wikidataProperties);
119337
119338                 // Enter
119339                 var enter = items.enter()
119340                     .append('li')
119341                     .attr('class', function(d) { return 'labeled-input preset-wikidata-' + d; });
119342
119343                 enter
119344                     .append('span')
119345                     .attr('class', 'label')
119346                     .attr('for', function(d) { return 'preset-input-wikidata-' + d; })
119347                     .text(function(d) { return t('wikidata.' + d); });
119348
119349                 enter
119350                     .append('input')
119351                     .attr('type', 'text')
119352                     .attr('id', function(d) { return 'preset-input-wikidata-' + d; })
119353                     .call(utilNoAuto)
119354                     .classed('disabled', 'true')
119355                     .attr('readonly', 'true');
119356
119357                 enter
119358                     .append('button')
119359                     .attr('class', 'form-field-button')
119360                     .attr('title', t('icons.copy'))
119361                     .attr('tabindex', -1)
119362                     .call(svgIcon('#iD-operation-copy'))
119363                     .on('click', function() {
119364                         event.preventDefault();
119365                         d3_select(this.parentNode)
119366                             .select('input')
119367                             .node()
119368                             .select();
119369                         document.execCommand('copy');
119370                     });
119371
119372             }
119373
119374             function fetchWikidataItems(q, callback) {
119375
119376                 if (!q && _entity) {
119377                     q = (_hintKey && context.entity(_entity.id).tags[_hintKey]) || '';
119378                 }
119379
119380                 wikidata.itemsForSearchQuery(q, function(err, data) {
119381                     if (err) { return; }
119382
119383                     for (var i in data) {
119384                         data[i].value = data[i].label + ' (' +  data[i].id + ')';
119385                         data[i].title = data[i].description;
119386                     }
119387
119388                     if (callback) { callback(data); }
119389                 });
119390             }
119391
119392
119393             function change() {
119394                 var syncTags = {};
119395                 syncTags[field.key] = _qid;
119396                 dispatch$1.call('change', this, syncTags);
119397
119398                 // attempt asynchronous update of wikidata tag..
119399                 var initGraph = context.graph();
119400                 var initEntityID = _entity.id;
119401
119402                 wikidata.entityByQID(_qid, function(err, entity) {
119403                     if (err) { return; }
119404
119405                     // If graph has changed, we can't apply this update.
119406                     if (context.graph() !== initGraph) { return; }
119407
119408                     if (!entity.sitelinks) { return; }
119409
119410                     var langs = wikidata.languagesToQuery();
119411                     // use the label and description languages as fallbacks
119412                     ['labels', 'descriptions'].forEach(function(key) {
119413                         if (!entity[key]) { return; }
119414
119415                         var valueLangs = Object.keys(entity[key]);
119416                         if (valueLangs.length === 0) { return; }
119417                         var valueLang = valueLangs[0];
119418
119419                         if (langs.indexOf(valueLang) === -1) {
119420                             langs.push(valueLang);
119421                         }
119422                     });
119423
119424                     var currTags = Object.assign({}, context.entity(initEntityID).tags);  // shallow copy
119425
119426                     if (_wikipediaKey) {
119427                         var foundPreferred;
119428                         for (var i in langs) {
119429                             var lang = langs[i];
119430                             var siteID = lang.replace('-', '_') + 'wiki';
119431                             if (entity.sitelinks[siteID]) {
119432                                 foundPreferred = true;
119433                                 currTags[_wikipediaKey] = lang + ':' + entity.sitelinks[siteID].title;
119434                                 // use the first match
119435                                 break;
119436                             }
119437                         }
119438
119439                         if (!foundPreferred) {
119440                             // No wikipedia sites available in the user's language or the fallback languages,
119441                             // default to any wikipedia sitelink
119442
119443                             var wikiSiteKeys = Object.keys(entity.sitelinks).filter(function(site) {
119444                                 return site.endsWith('wiki');
119445                             });
119446
119447                             if (wikiSiteKeys.length === 0) {
119448                                 // if no wikipedia pages are linked to this wikidata entity, delete that tag
119449                                 if (currTags[_wikipediaKey]) {
119450                                     delete currTags[_wikipediaKey];
119451                                 }
119452                             } else {
119453                                 var wikiLang = wikiSiteKeys[0].slice(0, -4).replace('_', '-');
119454                                 var wikiTitle = entity.sitelinks[wikiSiteKeys[0]].title;
119455                                 currTags[_wikipediaKey] = wikiLang + ':' + wikiTitle;
119456                             }
119457                         }
119458                     }
119459
119460                     // Coalesce the update of wikidata tag into the previous tag change
119461                     context.overwrite(
119462                         actionChangeTags(initEntityID, currTags),
119463                         context.history().undoAnnotation()
119464                     );
119465
119466                     // do not dispatch.call('change') here, because entity_editor
119467                     // changeTags() is not intended to be called asynchronously
119468
119469                 });
119470             }
119471
119472             function setLabelForEntity() {
119473                 var label = '';
119474                 if (_wikidataEntity) {
119475                     label = entityPropertyForDisplay(_wikidataEntity, 'labels');
119476                     if (label.length === 0) {
119477                         label = _wikidataEntity.id.toString();
119478                     }
119479                 }
119480                 utilGetSetValue(d3_select('li.wikidata-search input'), label);
119481             }
119482
119483
119484             wiki.tags = function(tags) {
119485                 _qid = tags[field.key] || '';
119486
119487                 if (!/^Q[0-9]*$/.test(_qid)) {   // not a proper QID
119488                     unrecognized();
119489                     return;
119490                 }
119491
119492                 // QID value in correct format
119493                 _wikiURL = 'https://wikidata.org/wiki/' + _qid;
119494                 wikidata.entityByQID(_qid, function(err, entity) {
119495                     if (err) {
119496                         unrecognized();
119497                         return;
119498                     }
119499                     _wikidataEntity = entity;
119500
119501                     setLabelForEntity();
119502
119503                     var description = entityPropertyForDisplay(entity, 'descriptions');
119504
119505                     d3_select('.form-field-wikidata button.wiki-link')
119506                         .classed('disabled', false);
119507
119508                     d3_select('.preset-wikidata-description')
119509                         .style('display', function(){
119510                             return description.length > 0 ? 'flex' : 'none';
119511                         })
119512                         .select('input')
119513                         .attr('value', description);
119514
119515                     d3_select('.preset-wikidata-identifier')
119516                         .style('display', function(){
119517                             return entity.id ? 'flex' : 'none';
119518                         })
119519                         .select('input')
119520                         .attr('value', entity.id);
119521                 });
119522
119523
119524                 // not a proper QID
119525                 function unrecognized() {
119526                     _wikidataEntity = null;
119527                     setLabelForEntity();
119528
119529                     d3_select('.preset-wikidata-description')
119530                         .style('display', 'none');
119531                     d3_select('.preset-wikidata-identifier')
119532                         .style('display', 'none');
119533
119534                     d3_select('.form-field-wikidata button.wiki-link')
119535                         .classed('disabled', true);
119536
119537                     if (_qid && _qid !== '') {
119538                         _wikiURL = 'https://wikidata.org/wiki/Special:Search?search=' + _qid;
119539                     } else {
119540                         _wikiURL = '';
119541                     }
119542                 }
119543             };
119544
119545             function entityPropertyForDisplay(wikidataEntity, propKey) {
119546                 if (!wikidataEntity[propKey]) { return ''; }
119547                 var propObj = wikidataEntity[propKey];
119548                 var langKeys = Object.keys(propObj);
119549                 if (langKeys.length === 0) { return ''; }
119550                 // sorted by priority, since we want to show the user's language first if possible
119551                 var langs = wikidata.languagesToQuery();
119552                 for (var i in langs) {
119553                     var lang = langs[i];
119554                     var valueObj = propObj[lang];
119555                     if (valueObj && valueObj.value && valueObj.value.length > 0) { return valueObj.value; }
119556                 }
119557                 // default to any available value
119558                 return propObj[langKeys[0]].value;
119559             }
119560
119561
119562             wiki.entity = function(val) {
119563                 if (!arguments.length) { return _entity; }
119564                 _entity = val;
119565                 return wiki;
119566             };
119567
119568
119569             wiki.focus = function() {
119570                 searchInput.node().focus();
119571             };
119572
119573
119574             return utilRebind(wiki, dispatch$1, 'on');
119575         }
119576
119577         function uiFieldWikipedia(field, context) {
119578             var dispatch$1 = dispatch('change');
119579             var wikipedia = services$1.wikipedia;
119580             var wikidata = services$1.wikidata;
119581             var lang = d3_select(null);
119582             var title = d3_select(null);
119583             var _wikiURL = '';
119584             var _entity;
119585
119586             var langCombo = uiCombobox(context, 'wikipedia-lang')
119587                 .fetcher(function(value, cb) {
119588                     var v = value.toLowerCase();
119589
119590                     cb(wikipedia$2.filter(function(d) {
119591                         return d[0].toLowerCase().indexOf(v) >= 0 ||
119592                             d[1].toLowerCase().indexOf(v) >= 0 ||
119593                             d[2].toLowerCase().indexOf(v) >= 0;
119594                     }).map(function(d) {
119595                         return { value: d[1] };
119596                     }));
119597                 });
119598
119599             var titleCombo = uiCombobox(context, 'wikipedia-title')
119600                 .fetcher(function(value, cb) {
119601                     if (!value && _entity) {
119602                         value = context.entity(_entity.id).tags.name || '';
119603                     }
119604
119605                     var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions;
119606                     searchfn(language()[2], value, function(query, data) {
119607                         cb(data.map(function(d) {
119608                             return { value: d };
119609                         }));
119610                     });
119611                 });
119612
119613
119614             function wiki(selection) {
119615                 var wrap = selection.selectAll('.form-field-input-wrap')
119616                     .data([0]);
119617
119618                 wrap = wrap.enter()
119619                     .append('div')
119620                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
119621                     .merge(wrap);
119622
119623
119624                 var langRow = wrap.selectAll('.wiki-lang-container')
119625                     .data([0]);
119626
119627                 langRow = langRow.enter()
119628                     .append('div')
119629                     .attr('class', 'wiki-lang-container')
119630                     .merge(langRow);
119631
119632
119633                 lang = langRow.selectAll('input.wiki-lang')
119634                     .data([0]);
119635
119636                 lang = lang.enter()
119637                     .append('input')
119638                     .attr('type', 'text')
119639                     .attr('class', 'wiki-lang')
119640                     .attr('placeholder', t('translate.localized_translation_language'))
119641                     .call(utilNoAuto)
119642                     .call(langCombo)
119643                     .merge(lang);
119644
119645                 utilGetSetValue(lang, language()[1]);
119646
119647                 lang
119648                     .on('blur', changeLang)
119649                     .on('change', changeLang);
119650
119651
119652                 var titleRow = wrap.selectAll('.wiki-title-container')
119653                     .data([0]);
119654
119655                 titleRow = titleRow.enter()
119656                     .append('div')
119657                     .attr('class', 'wiki-title-container')
119658                     .merge(titleRow);
119659
119660                 title = titleRow.selectAll('input.wiki-title')
119661                     .data([0]);
119662
119663                 title = title.enter()
119664                     .append('input')
119665                     .attr('type', 'text')
119666                     .attr('class', 'wiki-title')
119667                     .attr('id', 'preset-input-' + field.safeid)
119668                     .call(utilNoAuto)
119669                     .call(titleCombo)
119670                     .merge(title);
119671
119672                 title
119673                     .on('blur', blur)
119674                     .on('change', change);
119675
119676
119677                 var link = titleRow.selectAll('.wiki-link')
119678                     .data([0]);
119679
119680                 link = link.enter()
119681                     .append('button')
119682                     .attr('class', 'form-field-button wiki-link')
119683                     .attr('tabindex', -1)
119684                     .attr('title', t('icons.view_on', { domain: 'wikipedia.org' }))
119685                     .call(svgIcon('#iD-icon-out-link'))
119686                     .merge(link);
119687
119688                 link
119689                     .on('click', function() {
119690                         event.preventDefault();
119691                         if (_wikiURL) { window.open(_wikiURL, '_blank'); }
119692                     });
119693             }
119694
119695
119696             function language() {
119697                 var value = utilGetSetValue(lang).toLowerCase();
119698                 var locale = utilDetect().locale.toLowerCase();
119699                 var localeLanguage;
119700                 return wikipedia$2.find(function(d) {
119701                     if (d[2] === locale) { localeLanguage = d; }
119702                     return d[0].toLowerCase() === value ||
119703                         d[1].toLowerCase() === value ||
119704                         d[2] === value;
119705                 }) || localeLanguage || ['English', 'English', 'en'];
119706             }
119707
119708
119709             function changeLang() {
119710                 utilGetSetValue(lang, language()[1]);
119711                 change(true);
119712             }
119713
119714
119715             function blur() {
119716                 change(true);
119717             }
119718
119719
119720             function change(skipWikidata) {
119721                 var value = utilGetSetValue(title);
119722                 var m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/);
119723                 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
119724                 var syncTags = {};
119725
119726                 if (l) {
119727                     // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization
119728                     value = decodeURIComponent(m[2]).replace(/_/g, ' ');
119729                     if (m[3]) {
119730                         var anchor;
119731                         // try {
119732                         // leave this out for now - #6232
119733                             // Best-effort `anchordecode:` implementation
119734                             // anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1'));
119735                         // } catch (e) {
119736                             anchor = decodeURIComponent(m[3]);
119737                         // }
119738                         value += '#' + anchor.replace(/_/g, ' ');
119739                     }
119740                     value = value.slice(0, 1).toUpperCase() + value.slice(1);
119741                     utilGetSetValue(lang, l[1]);
119742                     utilGetSetValue(title, value);
119743                 }
119744
119745                 if (value) {
119746                     syncTags.wikipedia = language()[2] + ':' + value;
119747                 } else {
119748                     syncTags.wikipedia = undefined;
119749                 }
119750
119751                 dispatch$1.call('change', this, syncTags);
119752
119753
119754                 if (skipWikidata || !value || !language()[2]) { return; }
119755
119756                 // attempt asynchronous update of wikidata tag..
119757                 var initGraph = context.graph();
119758                 var initEntityID = _entity.id;
119759
119760                 wikidata.itemsByTitle(language()[2], value, function(err, data) {
119761                     if (err) { return; }
119762
119763                     // If graph has changed, we can't apply this update.
119764                     if (context.graph() !== initGraph) { return; }
119765
119766                     if (!data || !Object.keys(data).length) { return; }
119767
119768                     var qids = Object.keys(data);
119769                     var value = qids && qids.find(function(id) { return id.match(/^Q\d+$/); });
119770                     var currTags = Object.assign({}, context.entity(initEntityID).tags);  // shallow copy
119771
119772                     currTags.wikidata = value;
119773
119774                     // Coalesce the update of wikidata tag into the previous tag change
119775                     context.overwrite(
119776                         actionChangeTags(initEntityID, currTags),
119777                         context.history().undoAnnotation()
119778                     );
119779
119780                     // do not dispatch.call('change') here, because entity_editor
119781                     // changeTags() is not intended to be called asynchronously
119782                 });
119783             }
119784
119785
119786             wiki.tags = function(tags) {
119787                 var value = tags[field.key] || '';
119788                 var m = value.match(/([^:]+):([^#]+)(?:#(.+))?/);
119789                 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
119790                 var anchor = m && m[3];
119791
119792                 // value in correct format
119793                 if (l) {
119794                     utilGetSetValue(lang, l[1]);
119795                     utilGetSetValue(title, m[2] + (anchor ? ('#' + anchor) : ''));
119796                     if (anchor) {
119797                         try {
119798                             // Best-effort `anchorencode:` implementation
119799                             anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.');
119800                         } catch (e) {
119801                             anchor = anchor.replace(/ /g, '_');
119802                         }
119803                     }
119804                     _wikiURL = 'https://' + m[1] + '.wikipedia.org/wiki/' +
119805                         m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : '');
119806
119807                 // unrecognized value format
119808                 } else {
119809                     utilGetSetValue(title, value);
119810                     if (value && value !== '') {
119811                         utilGetSetValue(lang, '');
119812                         _wikiURL = 'https://en.wikipedia.org/wiki/Special:Search?search=' + value;
119813                     } else {
119814                         _wikiURL = '';
119815                     }
119816                 }
119817             };
119818
119819
119820             wiki.entity = function(val) {
119821                 if (!arguments.length) { return _entity; }
119822                 _entity = val;
119823                 return wiki;
119824             };
119825
119826
119827             wiki.focus = function() {
119828                 title.node().focus();
119829             };
119830
119831
119832             return utilRebind(wiki, dispatch$1, 'on');
119833         }
119834
119835         var uiFields = {
119836             access: uiFieldAccess,
119837             address: uiFieldAddress,
119838             check: uiFieldCheck,
119839             combo: uiFieldCombo,
119840             cycleway: uiFieldCycleway,
119841             defaultCheck: uiFieldCheck,
119842             email: uiFieldText,
119843             identifier: uiFieldText,
119844             lanes: uiFieldLanes,
119845             localized: uiFieldLocalized,
119846             maxspeed: uiFieldMaxspeed,
119847             multiCombo: uiFieldCombo,
119848             networkCombo: uiFieldCombo,
119849             number: uiFieldText,
119850             onewayCheck: uiFieldCheck,
119851             radio: uiFieldRadio,
119852             restrictions: uiFieldRestrictions,
119853             semiCombo: uiFieldCombo,
119854             structureRadio: uiFieldRadio,
119855             tel: uiFieldText,
119856             text: uiFieldText,
119857             textarea: uiFieldTextarea,
119858             typeCombo: uiFieldCombo,
119859             url: uiFieldText,
119860             wikidata: uiFieldWikidata,
119861             wikipedia: uiFieldWikipedia
119862         };
119863
119864         function uiField(context, presetField, entity, options) {
119865             options = Object.assign({
119866                 show: true,
119867                 wrap: true,
119868                 remove: true,
119869                 revert: true,
119870                 info: true
119871             }, options);
119872
119873             var dispatch$1 = dispatch('change');
119874             var field = Object.assign({}, presetField);   // shallow copy
119875             var _show = options.show;
119876             var _state = '';
119877             var _tags = {};
119878
119879             var _locked = false;
119880             var _lockedTip = tooltip()
119881                 .title(t('inspector.lock.suggestion', { label: field.label }))
119882                 .placement('bottom');
119883
119884
119885             field.keys = field.keys || [field.key];
119886
119887             // only create the fields that are actually being shown
119888             if (_show && !field.impl) {
119889                 createField();
119890             }
119891
119892             // Creates the field.. This is done lazily,
119893             // once we know that the field will be shown.
119894             function createField() {
119895                 field.impl = uiFields[field.type](field, context)
119896                     .on('change', function(t, onInput) {
119897                         dispatch$1.call('change', field, t, onInput);
119898                     });
119899
119900                 if (entity) {
119901                     field.entityID = entity.id;
119902                     // if this field cares about the entity, pass it along
119903                     if (field.impl.entity) {
119904                         field.impl.entity(entity);
119905                     }
119906                 }
119907             }
119908
119909
119910             function isModified() {
119911                 if (!entity) { return false; }
119912                 var original = context.graph().base().entities[entity.id];
119913                 return field.keys.some(function(key) {
119914                     return original ? _tags[key] !== original.tags[key] : _tags[key];
119915                 });
119916             }
119917
119918
119919             function tagsContainFieldKey() {
119920                 return field.keys.some(function(key) {
119921                     if (field.type === 'multiCombo') {
119922                         for (var tagKey in _tags) {
119923                             if (tagKey.indexOf(key) === 0) {
119924                                 return true;
119925                             }
119926                         }
119927                         return false;
119928                     }
119929                     return _tags[key] !== undefined;
119930                 });
119931             }
119932
119933
119934             function revert(d) {
119935                 event.stopPropagation();
119936                 event.preventDefault();
119937                 if (!entity || _locked) { return; }
119938
119939                 var original = context.graph().base().entities[entity.id];
119940                 var t = {};
119941                 d.keys.forEach(function(key) {
119942                     t[key] = original ? original.tags[key] : undefined;
119943                 });
119944
119945                 dispatch$1.call('change', d, t);
119946             }
119947
119948
119949             function remove(d) {
119950                 event.stopPropagation();
119951                 event.preventDefault();
119952                 if (_locked) { return; }
119953
119954                 var t = {};
119955                 d.keys.forEach(function(key) {
119956                     t[key] = undefined;
119957                 });
119958
119959                 dispatch$1.call('change', d, t);
119960             }
119961
119962
119963             field.render = function(selection) {
119964                 var container = selection.selectAll('.form-field')
119965                     .data([field]);
119966
119967                 // Enter
119968                 var enter = container.enter()
119969                     .append('div')
119970                     .attr('class', function(d) { return 'form-field form-field-' + d.safeid; })
119971                     .classed('nowrap', !options.wrap);
119972
119973                 if (options.wrap) {
119974                     var labelEnter = enter
119975                         .append('label')
119976                         .attr('class', 'field-label')
119977                         .attr('for', function(d) { return 'preset-input-' + d.safeid; });
119978
119979                     var textEnter = labelEnter
119980                         .append('span')
119981                         .attr('class', 'label-text');
119982
119983                     textEnter
119984                         .append('span')
119985                         .attr('class', 'label-textvalue')
119986                         .text(function(d) { return d.label(); });
119987
119988                     textEnter
119989                         .append('span')
119990                         .attr('class', 'label-textannotation');
119991
119992                     if (options.remove) {
119993                         labelEnter
119994                             .append('button')
119995                             .attr('class', 'remove-icon')
119996                             .attr('title', t('icons.remove'))
119997                             .attr('tabindex', -1)
119998                             .call(svgIcon('#iD-operation-delete'));
119999                     }
120000
120001                     if (options.revert) {
120002                         labelEnter
120003                             .append('button')
120004                             .attr('class', 'modified-icon')
120005                             .attr('title', t('icons.undo'))
120006                             .attr('tabindex', -1)
120007                             .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-redo' : '#iD-icon-undo'));
120008                     }
120009                 }
120010
120011
120012                 // Update
120013                 container = container
120014                     .merge(enter);
120015
120016                 container.select('.field-label > .remove-icon')  // propagate bound data
120017                     .on('click', remove);
120018
120019                 container.select('.field-label > .modified-icon')  // propagate bound data
120020                     .on('click', revert);
120021
120022                 container
120023                     .each(function(d) {
120024                         var selection = d3_select(this);
120025
120026                         if (!d.impl) {
120027                             createField();
120028                         }
120029
120030                         var reference, help;
120031
120032                         // instantiate field help
120033                         if (options.wrap && field.type === 'restrictions') {
120034                             help = uiFieldHelp(context, 'restrictions');
120035                         }
120036
120037                         // instantiate tag reference
120038                         if (options.wrap && options.info) {
120039                             var referenceKey = d.key;
120040                             if (d.type === 'multiCombo') {   // lookup key without the trailing ':'
120041                                 referenceKey = referenceKey.replace(/:$/, '');
120042                             }
120043
120044                             reference = uiTagReference(d.reference || { key: referenceKey });
120045                             if (_state === 'hover') {
120046                                 reference.showing(false);
120047                             }
120048                         }
120049
120050                         selection
120051                             .call(d.impl);
120052
120053                         // add field help components
120054                         if (help) {
120055                             selection
120056                                 .call(help.body)
120057                                 .select('.field-label')
120058                                 .call(help.button);
120059                         }
120060
120061                         // add tag reference components
120062                         if (reference) {
120063                             selection
120064                                 .call(reference.body)
120065                                 .select('.field-label')
120066                                 .call(reference.button);
120067                         }
120068
120069                         d.impl.tags(_tags);
120070                     });
120071
120072
120073                     container
120074                         .classed('locked', _locked)
120075                         .classed('modified', isModified())
120076                         .classed('present', tagsContainFieldKey());
120077
120078
120079                     // show a tip and lock icon if the field is locked
120080                     var annotation = container.selectAll('.field-label .label-textannotation');
120081                     var icon = annotation.selectAll('.icon')
120082                         .data(_locked ? [0]: []);
120083
120084                     icon.exit()
120085                         .remove();
120086
120087                     icon.enter()
120088                         .append('svg')
120089                         .attr('class', 'icon')
120090                         .append('use')
120091                         .attr('xlink:href', '#fas-lock');
120092
120093                     container.call(_locked ? _lockedTip : _lockedTip.destroy);
120094             };
120095
120096
120097             field.state = function(val) {
120098                 if (!arguments.length) { return _state; }
120099                 _state = val;
120100                 return field;
120101             };
120102
120103
120104             field.tags = function(val) {
120105                 if (!arguments.length) { return _tags; }
120106                 _tags = val;
120107
120108                 if (tagsContainFieldKey() && !_show) {
120109                     // always show a field if it has a value to display
120110                     _show = true;
120111                     if (!field.impl) {
120112                         createField();
120113                     }
120114                 }
120115
120116                 return field;
120117             };
120118
120119
120120             field.locked = function(val) {
120121                 if (!arguments.length) { return _locked; }
120122                 _locked = val;
120123                 return field;
120124             };
120125
120126
120127             field.show = function() {
120128                 _show = true;
120129                 if (!field.impl) {
120130                     createField();
120131                 }
120132                 if (field.default && field.key && _tags[field.key] !== field.default) {
120133                     var t = {};
120134                     t[field.key] = field.default;
120135                     dispatch$1.call('change', this, t);
120136                 }
120137             };
120138
120139             // A shown field has a visible UI, a non-shown field is in the 'Add field' dropdown
120140             field.isShown = function() {
120141                 return _show;
120142             };
120143
120144
120145             // An allowed field can appear in the UI or in the 'Add field' dropdown.
120146             // A non-allowed field is hidden from the user altogether
120147             field.isAllowed = function() {
120148
120149                 var latest = entity && context.hasEntity(entity.id);   // check the most current copy of the entity
120150                 if (!latest) { return true; }
120151
120152                 if (field.countryCodes || field.notCountryCodes) {
120153                     var center = latest.extent(context.graph()).center();
120154                     var countryCode = iso1A2Code(center);
120155
120156                     if (!countryCode) { return false; }
120157
120158                     countryCode = countryCode.toLowerCase();
120159
120160                     if (field.countryCodes && field.countryCodes.indexOf(countryCode) === -1) {
120161                         return false;
120162                     }
120163                     if (field.notCountryCodes && field.notCountryCodes.indexOf(countryCode) !== -1) {
120164                         return false;
120165                     }
120166                 }
120167
120168                 var prerequisiteTag = field.prerequisiteTag;
120169
120170                 if (!tagsContainFieldKey() && // ignore tagging prerequisites if a value is already present
120171                     prerequisiteTag) {
120172                     if (prerequisiteTag.key) {
120173                         var value = latest.tags[prerequisiteTag.key];
120174                         if (!value) { return false; }
120175
120176                         if (prerequisiteTag.valueNot) {
120177                             return prerequisiteTag.valueNot !== value;
120178                         }
120179                         if (prerequisiteTag.value) {
120180                             return prerequisiteTag.value === value;
120181                         }
120182                     } else if (prerequisiteTag.keyNot) {
120183                         if (latest.tags[prerequisiteTag.keyNot]) { return false; }
120184                     }
120185                 }
120186
120187                 return true;
120188             };
120189
120190
120191             field.focus = function() {
120192                 if (field.impl) {
120193                     field.impl.focus();
120194                 }
120195             };
120196
120197
120198             return utilRebind(field, dispatch$1, 'on');
120199         }
120200
120201         function uiFormFields(context) {
120202             var moreCombo = uiCombobox(context, 'more-fields').minItems(1);
120203             var _fieldsArr = [];
120204             var _lastPlaceholder = '';
120205             var _state = '';
120206             var _klass = '';
120207
120208
120209             function formFields(selection) {
120210                 var allowedFields = _fieldsArr.filter(function(field) { return field.isAllowed(); });
120211                 var shown = allowedFields.filter(function(field) { return field.isShown(); });
120212                 var notShown = allowedFields.filter(function(field) { return !field.isShown(); });
120213
120214                 var container = selection.selectAll('.form-fields-container')
120215                     .data([0]);
120216
120217                 container = container.enter()
120218                     .append('div')
120219                     .attr('class', 'form-fields-container ' + (_klass || ''))
120220                     .merge(container);
120221
120222
120223                 var fields = container.selectAll('.wrap-form-field')
120224                     .data(shown, function(d) { return d.id + (d.entityID || ''); });
120225
120226                 fields.exit()
120227                     .remove();
120228
120229                 // Enter
120230                 var enter = fields.enter()
120231                     .append('div')
120232                     .attr('class', function(d) { return 'wrap-form-field wrap-form-field-' + d.safeid; });
120233
120234                 // Update
120235                 fields = fields
120236                     .merge(enter);
120237
120238                 fields
120239                     .order()
120240                     .each(function(d) {
120241                         d3_select(this)
120242                             .call(d.render);
120243                     });
120244
120245
120246                 var titles = [];
120247                 var moreFields = notShown.map(function(field) {
120248                     var label = field.label();
120249                     titles.push(label);
120250                     
120251                     var terms = field.terms();
120252                     if (field.key) { terms.push(field.key); }
120253                     if (field.keys) { terms = terms.concat(field.keys); }
120254
120255                     return {
120256                         title: label,
120257                         value: label,
120258                         field: field,
120259                         terms: terms
120260                     };
120261                 });
120262
120263                 var placeholder = titles.slice(0,3).join(', ') + ((titles.length > 3) ? '…' : '');
120264
120265
120266                 var more = selection.selectAll('.more-fields')
120267                     .data((_state === 'hover' || moreFields.length === 0) ? [] : [0]);
120268
120269                 more.exit()
120270                     .remove();
120271
120272                 more = more.enter()
120273                     .append('div')
120274                     .attr('class', 'more-fields')
120275                     .append('label')
120276                     .text(t('inspector.add_fields'))
120277                     .merge(more);
120278
120279
120280                 var input = more.selectAll('.value')
120281                     .data([0]);
120282
120283                 input.exit()
120284                     .remove();
120285
120286                 input = input.enter()
120287                     .append('input')
120288                     .attr('class', 'value')
120289                     .attr('type', 'text')
120290                     .attr('placeholder', placeholder)
120291                     .call(utilNoAuto)
120292                     .merge(input);
120293
120294                 input
120295                     .call(utilGetSetValue, '')
120296                     .call(moreCombo
120297                         .data(moreFields)
120298                         .on('accept', function (d) {
120299                             if (!d) { return; }  // user entered something that was not matched
120300                             var field = d.field;
120301                             field.show();
120302                             selection.call(formFields);  // rerender
120303                             if (field.type !== 'semiCombo' && field.type !== 'multiCombo') {
120304                                 field.focus();
120305                             }
120306                         })
120307                     );
120308
120309                 // avoid updating placeholder excessively (triggers style recalc)
120310                 if (_lastPlaceholder !== placeholder) {
120311                     input.attr('placeholder', placeholder);
120312                     _lastPlaceholder = placeholder;
120313                 }
120314             }
120315
120316
120317             formFields.fieldsArr = function(val) {
120318                 if (!arguments.length) { return _fieldsArr; }
120319                 _fieldsArr = val || [];
120320                 return formFields;
120321             };
120322
120323             formFields.state = function(val) {
120324                 if (!arguments.length) { return _state; }
120325                 _state = val;
120326                 return formFields;
120327             };
120328
120329             formFields.klass = function(val) {
120330                 if (!arguments.length) { return _klass; }
120331                 _klass = val;
120332                 return formFields;
120333             };
120334
120335
120336             return formFields;
120337         }
120338
120339         function uiPresetEditor(context) {
120340             var dispatch$1 = dispatch('change');
120341             var formFields = uiFormFields(context);
120342             var _state;
120343             var _fieldsArr;
120344             var _preset;
120345             var _tags;
120346             var _entityID;
120347
120348
120349             function presetEditor(selection) {
120350                 selection.call(uiDisclosure(context, 'preset_fields', true)
120351                     .title(t('inspector.all_fields'))
120352                     .content(render)
120353                 );
120354             }
120355
120356
120357             function render(selection) {
120358                 if (!_fieldsArr) {
120359                     var entity = context.entity(_entityID);
120360                     var geometry = context.geometry(_entityID);
120361                     var presets = context.presets();
120362
120363                     _fieldsArr = [];
120364
120365                     _preset.fields.forEach(function(field) {
120366                         if (field.matchGeometry(geometry)) {
120367                             _fieldsArr.push(
120368                                 uiField(context, field, entity)
120369                             );
120370                         }
120371                     });
120372
120373                     if (entity.isHighwayIntersection(context.graph()) && presets.field('restrictions')) {
120374                         _fieldsArr.push(
120375                             uiField(context, presets.field('restrictions'), entity)
120376                         );
120377                     }
120378
120379                     var additionalFields = utilArrayUnion(_preset.moreFields, presets.universal());
120380                     additionalFields.sort(function(field1, field2) {
120381                         return field1.label().localeCompare(field2.label(), currentLocale);
120382                     });
120383
120384                     additionalFields.forEach(function(field) {
120385                         if (_preset.fields.indexOf(field) === -1 &&
120386                             field.matchGeometry(geometry)) {
120387                             _fieldsArr.push(
120388                                 uiField(context, field, entity, { show: false })
120389                             );
120390                         }
120391                     });
120392
120393                     _fieldsArr.forEach(function(field) {
120394                         field
120395                             .on('change', function(t, onInput) {
120396                                 dispatch$1.call('change', field, t, onInput);
120397                             });
120398                     });
120399                 }
120400
120401                 _fieldsArr.forEach(function(field) {
120402                     field
120403                         .state(_state)
120404                         .tags(_tags);
120405                 });
120406
120407
120408                 selection
120409                     .call(formFields
120410                         .fieldsArr(_fieldsArr)
120411                         .state(_state)
120412                         .klass('inspector-inner fillL3')
120413                     );
120414
120415
120416                 selection.selectAll('.wrap-form-field input')
120417                     .on('keydown', function() {
120418                         // if user presses enter, and combobox is not active, accept edits..
120419                         if (event.keyCode === 13 && d3_select('.combobox').empty()) {
120420                             context.enter(modeBrowse(context));
120421                         }
120422                     });
120423             }
120424
120425
120426             presetEditor.preset = function(val) {
120427                 if (!arguments.length) { return _preset; }
120428                 if (_preset && _preset.id === val.id) { return presetEditor; }
120429                 _preset = val;
120430                 _fieldsArr = null;
120431                 return presetEditor;
120432             };
120433
120434
120435             presetEditor.state = function(val) {
120436                 if (!arguments.length) { return _state; }
120437                 _state = val;
120438                 return presetEditor;
120439             };
120440
120441
120442             presetEditor.tags = function(val) {
120443                 if (!arguments.length) { return _tags; }
120444                 _tags = val;
120445                 // Don't reset _fieldsArr here.
120446                 return presetEditor;
120447             };
120448
120449
120450             presetEditor.entityID = function(val) {
120451                 if (!arguments.length) { return _entityID; }
120452                 if (_entityID === val) { return presetEditor; }
120453                 _entityID = val;
120454                 _fieldsArr = null;
120455                 return presetEditor;
120456             };
120457
120458
120459             return utilRebind(presetEditor, dispatch$1, 'on');
120460         }
120461
120462         function uiEntityIssues(context) {
120463             var _selection = d3_select(null);
120464             var _activeIssueID;
120465             var _entityID;
120466
120467             // Refresh on validated events
120468             context.validator()
120469                 .on('validated.entity_issues', function() {
120470                      _selection.selectAll('.disclosure-wrap-entity_issues')
120471                          .call(render);
120472
120473                     update();
120474                 })
120475                 .on('focusedIssue.entity_issues', function(issue) {
120476                      makeActiveIssue(issue.id);
120477                 });
120478
120479
120480             function entityIssues(selection) {
120481                 _selection = selection;
120482
120483                 selection
120484                     .call(uiDisclosure(context, 'entity_issues', true)
120485                         .content(render)
120486                     );
120487
120488                 update();
120489             }
120490
120491             function getIssues() {
120492                 return context.validator().getEntityIssues(_entityID, { includeDisabledRules: true });
120493             }
120494
120495             function makeActiveIssue(issueID) {
120496                 _activeIssueID = issueID;
120497                 _selection.selectAll('.issue-container')
120498                     .classed('active', function(d) { return d.id === _activeIssueID; });
120499             }
120500
120501             function update() {
120502
120503                 var issues = getIssues();
120504
120505                 _selection
120506                     .classed('hide', issues.length === 0);
120507
120508                 _selection.selectAll('.hide-toggle-entity_issues span')
120509                     .text(t('issues.list_title', { count: issues.length }));
120510             }
120511
120512
120513             function render(selection) {
120514                 var issues = getIssues();
120515                 _activeIssueID = issues.length > 0 ? issues[0].id : null;
120516
120517
120518                 var containers = selection.selectAll('.issue-container')
120519                     .data(issues, function(d) { return d.id; });
120520
120521                 // Exit
120522                 containers.exit()
120523                     .remove();
120524
120525                 // Enter
120526                 var containersEnter = containers.enter()
120527                     .append('div')
120528                     .attr('class', 'issue-container');
120529
120530
120531                 var itemsEnter = containersEnter
120532                     .append('div')
120533                     .attr('class', function(d) { return 'issue severity-' + d.severity; })
120534                     .on('mouseover.highlight', function(d) {
120535                         // don't hover-highlight the selected entity
120536                         var ids = d.entityIds
120537                             .filter(function(e) { return e !== _entityID; });
120538
120539                         utilHighlightEntities(ids, true, context);
120540                     })
120541                     .on('mouseout.highlight', function(d) {
120542                         var ids = d.entityIds
120543                             .filter(function(e) { return e !== _entityID; });
120544
120545                         utilHighlightEntities(ids, false, context);
120546                     });
120547
120548                 var labelsEnter = itemsEnter
120549                     .append('div')
120550                     .attr('class', 'issue-label')
120551                     .on('click', function(d) {
120552
120553                         makeActiveIssue(d.id); // expand only the clicked item
120554
120555                         var extent = d.extent(context.graph());
120556                         if (extent) {
120557                             var setZoom = Math.max(context.map().zoom(), 19);
120558                             context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
120559                         }
120560                     });
120561
120562                 var textEnter = labelsEnter
120563                     .append('span')
120564                     .attr('class', 'issue-text');
120565
120566                 textEnter
120567                     .append('span')
120568                     .attr('class', 'issue-icon')
120569                     .each(function(d) {
120570                         var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
120571                         d3_select(this)
120572                             .call(svgIcon(iconName));
120573                     });
120574
120575                 textEnter
120576                     .append('span')
120577                     .attr('class', 'issue-message');
120578
120579
120580                 var infoButton = labelsEnter
120581                     .append('button')
120582                     .attr('class', 'issue-info-button')
120583                     .attr('title', t('icons.information'))
120584                     .attr('tabindex', -1)
120585                     .call(svgIcon('#iD-icon-inspect'));
120586
120587                 infoButton
120588                     .on('click', function () {
120589                         event.stopPropagation();
120590                         event.preventDefault();
120591                         this.blur();    // avoid keeping focus on the button - #4641
120592
120593                         var container = d3_select(this.parentNode.parentNode.parentNode);
120594                         var info = container.selectAll('.issue-info');
120595                         var isExpanded = info.classed('expanded');
120596
120597                         if (isExpanded) {
120598                             info
120599                                 .transition()
120600                                 .duration(200)
120601                                 .style('max-height', '0px')
120602                                 .style('opacity', '0')
120603                                 .on('end', function () {
120604                                     info.classed('expanded', false);
120605                                 });
120606                         } else {
120607                             info
120608                                 .classed('expanded', true)
120609                                 .transition()
120610                                 .duration(200)
120611                                 .style('max-height', '200px')
120612                                 .style('opacity', '1')
120613                                 .on('end', function () {
120614                                     info.style('max-height', null);
120615                                 });
120616                         }
120617                     });
120618
120619                 itemsEnter
120620                     .append('ul')
120621                     .attr('class', 'issue-fix-list');
120622
120623                 containersEnter
120624                     .append('div')
120625                     .attr('class', 'issue-info')
120626                     .style('max-height', '0')
120627                     .style('opacity', '0')
120628                     .each(function(d) {
120629                         if (typeof d.reference === 'function') {
120630                             d3_select(this)
120631                                 .call(d.reference);
120632                         } else {
120633                             d3_select(this)
120634                                 .text(t('inspector.no_documentation_key'));
120635                         }
120636                     });
120637
120638
120639                 // Update
120640                 containers = containers
120641                     .merge(containersEnter)
120642                     .classed('active', function(d) { return d.id === _activeIssueID; });
120643
120644                 containers.selectAll('.issue-message')
120645                     .text(function(d) {
120646                         return d.message(context);
120647                     });
120648
120649                 // fixes
120650                 var fixLists = containers.selectAll('.issue-fix-list');
120651
120652                 var fixes = fixLists.selectAll('.issue-fix-item')
120653                     .data(function(d) { return d.fixes ? d.fixes(context) : []; }, function(fix) { return fix.id; });
120654
120655                 fixes.exit()
120656                     .remove();
120657
120658                 var fixesEnter = fixes.enter()
120659                     .append('li')
120660                     .attr('class', 'issue-fix-item')
120661                     .on('click', function(d) {
120662                         // not all fixes are actionable
120663                         if (!d3_select(this).classed('actionable') || !d.onClick) { return; }
120664
120665                         // Don't run another fix for this issue within a second of running one
120666                         // (Necessary for "Select a feature type" fix. Most fixes should only ever run once)
120667                         if (d.issue.dateLastRanFix && new Date() - d.issue.dateLastRanFix < 1000) { return; }
120668                         d.issue.dateLastRanFix = new Date();
120669
120670                         // remove hover-highlighting
120671                         utilHighlightEntities(d.issue.entityIds.concat(d.entityIds), false, context);
120672
120673                         new Promise(function(resolve, reject) {
120674                             d.onClick(context, resolve, reject);
120675                             if (d.onClick.length <= 1) {
120676                                 // if the fix doesn't take any completion parameters then consider it resolved
120677                                 resolve();
120678                             }
120679                         })
120680                         .then(function() {
120681                             // revalidate whenever the fix has finished running successfully
120682                             context.validator().validate();
120683                         });
120684                     })
120685                     .on('mouseover.highlight', function(d) {
120686                         utilHighlightEntities(d.entityIds, true, context);
120687                     })
120688                     .on('mouseout.highlight', function(d) {
120689                         utilHighlightEntities(d.entityIds, false, context);
120690                     });
120691
120692                 fixesEnter
120693                     .append('span')
120694                     .attr('class', 'fix-icon')
120695                     .each(function(d) {
120696                         var iconName = d.icon || 'iD-icon-wrench';
120697                         if (iconName.startsWith('maki')) {
120698                             iconName += '-15';
120699                         }
120700                         d3_select(this).call(svgIcon('#' + iconName));
120701                     });
120702
120703                 fixesEnter
120704                     .append('span')
120705                     .attr('class', 'fix-message')
120706                     .text(function(d) { return d.title; });
120707
120708                 fixesEnter.merge(fixes)
120709                     .classed('actionable', function(d) {
120710                         return d.onClick;
120711                     })
120712                     .attr('title', function(d) {
120713                         if (d.disabledReason) {
120714                             return d.disabledReason;
120715                         }
120716                         return null;
120717                     });
120718             }
120719
120720
120721             entityIssues.entityID = function(val) {
120722                 if (!arguments.length) { return _entityID; }
120723                 if (_entityID !== val) {
120724                     _entityID = val;
120725                     _activeIssueID = null;
120726                 }
120727                 return entityIssues;
120728             };
120729
120730
120731             return entityIssues;
120732         }
120733
120734         function uiEntityEditor(context) {
120735             var dispatch$1 = dispatch('choose');
120736             var _state = 'select';
120737             var _coalesceChanges = false;
120738             var _modified = false;
120739             var _scrolled = false;
120740             var _base;
120741             var _entityID;
120742             var _activePreset;
120743             var _tagReference;
120744
120745             var entityIssues = uiEntityIssues(context);
120746             var quickLinks = uiQuickLinks();
120747             var presetEditor = uiPresetEditor(context).on('change', changeTags);
120748             var rawTagEditor = uiRawTagEditor(context).on('change', changeTags);
120749             var rawMemberEditor = uiRawMemberEditor(context);
120750             var rawMembershipEditor = uiRawMembershipEditor(context);
120751
120752             function entityEditor(selection) {
120753                 var entity = context.entity(_entityID);
120754                 var tags = Object.assign({}, entity.tags);  // shallow copy
120755
120756                 // Header
120757                 var header = selection.selectAll('.header')
120758                     .data([0]);
120759
120760                 // Enter
120761                 var headerEnter = header.enter()
120762                     .append('div')
120763                     .attr('class', 'header fillL cf');
120764
120765                 headerEnter
120766                     .append('button')
120767                     .attr('class', 'fl preset-reset preset-choose')
120768                     .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-forward' : '#iD-icon-backward'));
120769
120770                 headerEnter
120771                     .append('button')
120772                     .attr('class', 'fr preset-close')
120773                     .on('click', function() { context.enter(modeBrowse(context)); })
120774                     .call(svgIcon(_modified ? '#iD-icon-apply' : '#iD-icon-close'));
120775
120776                 headerEnter
120777                     .append('h3')
120778                     .text(t('inspector.edit'));
120779
120780                 // Update
120781                 header = header
120782                     .merge(headerEnter);
120783
120784                 header.selectAll('.preset-reset')
120785                     .on('click', function() {
120786                         dispatch$1.call('choose', this, _activePreset);
120787                     });
120788
120789
120790                 // Body
120791                 var body = selection.selectAll('.inspector-body')
120792                     .data([0]);
120793
120794                 // Enter
120795                 var bodyEnter = body.enter()
120796                     .append('div')
120797                     .attr('class', 'inspector-body')
120798                     .on('scroll.entity-editor', function() { _scrolled = true; });
120799
120800                 bodyEnter
120801                     .append('div')
120802                     .attr('class', 'preset-list-item inspector-inner')
120803                     .append('div')
120804                     .attr('class', 'preset-list-button-wrap')
120805                     .append('button')
120806                     .attr('class', 'preset-list-button preset-reset')
120807                     .call(tooltip().title(t('inspector.back_tooltip')).placement('bottom'))
120808                     .append('div')
120809                     .attr('class', 'label')
120810                     .append('div')
120811                     .attr('class', 'label-inner');
120812
120813                 bodyEnter
120814                     .append('div')
120815                     .attr('class', 'preset-quick-links');
120816
120817                 bodyEnter
120818                     .append('div')
120819                     .attr('class', 'entity-issues');
120820
120821                 bodyEnter
120822                     .append('div')
120823                     .attr('class', 'preset-editor');
120824
120825                 bodyEnter
120826                     .append('div')
120827                     .attr('class', 'raw-tag-editor inspector-inner');
120828
120829                 bodyEnter
120830                     .append('div')
120831                     .attr('class', 'raw-member-editor inspector-inner');
120832
120833                 bodyEnter
120834                     .append('div')
120835                     .attr('class', 'raw-membership-editor inspector-inner');
120836
120837                 bodyEnter
120838                     .append('input')
120839                     .attr('type', 'text')
120840                     .attr('class', 'key-trap');
120841
120842
120843                 // Update
120844                 body = body
120845                     .merge(bodyEnter);
120846
120847                 // update header
120848                 if (_tagReference) {
120849                     body.selectAll('.preset-list-button-wrap')
120850                         .call(_tagReference.button);
120851
120852                     body.selectAll('.preset-list-item')
120853                         .call(_tagReference.body);
120854                 }
120855
120856                 body.selectAll('.preset-reset')
120857                     .on('click', function() {
120858                         dispatch$1.call('choose', this, _activePreset);
120859                     });
120860
120861                 body.select('.preset-list-item button')
120862                     .call(uiPresetIcon(context)
120863                         .geometry(context.geometry(_entityID))
120864                         .preset(_activePreset)
120865                     );
120866
120867                 // NOTE: split on en-dash, not a hypen (to avoid conflict with hyphenated names)
120868                 var label = body.select('.label-inner');
120869                 var nameparts = label.selectAll('.namepart')
120870                     .data(_activePreset.name().split(' – '), function(d) { return d; });
120871
120872                 nameparts.exit()
120873                     .remove();
120874
120875                 nameparts
120876                     .enter()
120877                     .append('div')
120878                     .attr('class', 'namepart')
120879                     .text(function(d) { return d; });
120880
120881                 // update quick links
120882                 var choices = [{
120883                     id: 'zoom_to',
120884                     label: 'inspector.zoom_to.title',
120885                     tooltip: function() {
120886                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_feature'), t('inspector.zoom_to.key'));
120887                     },
120888                     click: function zoomTo() {
120889                         context.mode().zoomToSelected();
120890                     }
120891                 }];
120892
120893                 body.select('.preset-quick-links')
120894                     .call(quickLinks.choices(choices));
120895
120896
120897                 // update editor sections
120898                 body.select('.entity-issues')
120899                     .call(entityIssues
120900                         .entityID(_entityID)
120901                     );
120902
120903                 body.select('.preset-editor')
120904                     .call(presetEditor
120905                         .preset(_activePreset)
120906                         .entityID(_entityID)
120907                         .tags(tags)
120908                         .state(_state)
120909                     );
120910
120911                 body.select('.raw-tag-editor')
120912                     .call(rawTagEditor
120913                         .preset(_activePreset)
120914                         .entityID(_entityID)
120915                         .tags(tags)
120916                         .state(_state)
120917                     );
120918
120919                 if (entity.type === 'relation') {
120920                     body.select('.raw-member-editor')
120921                         .style('display', 'block')
120922                         .call(rawMemberEditor
120923                             .entityID(_entityID)
120924                         );
120925                 } else {
120926                     body.select('.raw-member-editor')
120927                         .style('display', 'none');
120928                 }
120929
120930                 body.select('.raw-membership-editor')
120931                     .call(rawMembershipEditor
120932                         .entityID(_entityID)
120933                     );
120934
120935                 body.select('.key-trap')
120936                     .on('keydown.key-trap', function() {
120937                         // On tabbing, send focus back to the first field on the inspector-body
120938                         // (probably the `name` field) #4159
120939                         if (event.keyCode === 9 && !event.shiftKey) {
120940                             event.preventDefault();
120941                             body.select('input').node().focus();
120942                         }
120943                     });
120944
120945                 context.history()
120946                     .on('change.entity-editor', historyChanged);
120947
120948
120949                 function historyChanged(difference) {
120950                     if (_state === 'hide') { return; }
120951                     var significant = !difference ||
120952                             difference.didChange.properties ||
120953                             difference.didChange.addition ||
120954                             difference.didChange.deletion;
120955                     if (!significant) { return; }
120956
120957                     var entity = context.hasEntity(_entityID);
120958                     var graph = context.graph();
120959                     if (!entity) { return; }
120960
120961                     var match = context.presets().match(entity, graph);
120962                     var activePreset = entityEditor.preset();
120963                     var weakPreset = activePreset &&
120964                         Object.keys(activePreset.addTags || {}).length === 0;
120965
120966                     // A "weak" preset doesn't set any tags. (e.g. "Address")
120967                     // Don't replace a weak preset with a fallback preset (e.g. "Point")
120968                     if (!(weakPreset && match.isFallback())) {
120969                         entityEditor.preset(match);
120970
120971                         if (match.id !== activePreset.id) {
120972                             // flash the button to indicate the preset changed
120973                             selection
120974                                 .selectAll('button.preset-reset .label')
120975                                 .style('background-color', '#fff')
120976                                 .transition()
120977                                 .duration(500)
120978                                 .style('background-color', null);
120979                         }
120980                     }
120981                     entityEditor.modified(_base !== graph);
120982                     entityEditor(selection);
120983                 }
120984             }
120985
120986
120987             // Tag changes that fire on input can all get coalesced into a single
120988             // history operation when the user leaves the field.  #2342
120989             function changeTags(changed, onInput) {
120990                 var entity = context.entity(_entityID);
120991                 var annotation = t('operations.change_tags.annotation');
120992                 var tags = Object.assign({}, entity.tags);   // shallow copy
120993
120994                 for (var k in changed) {
120995                     if (!k) { continue; }
120996                     var v = changed[k];
120997                     if (v !== undefined || tags.hasOwnProperty(k)) {
120998                         tags[k] = v;
120999                     }
121000                 }
121001
121002                 if (!onInput) {
121003                     tags = utilCleanTags(tags);
121004                 }
121005
121006                 if (!fastDeepEqual(entity.tags, tags)) {
121007                     if (_coalesceChanges) {
121008                         context.overwrite(actionChangeTags(_entityID, tags), annotation);
121009                     } else {
121010                         context.perform(actionChangeTags(_entityID, tags), annotation);
121011                         _coalesceChanges = !!onInput;
121012                     }
121013                 }
121014
121015                 // if leaving field (blur event), rerun validation
121016                 if (!onInput) {
121017                     context.validator().validate();
121018                 }
121019             }
121020
121021
121022             entityEditor.modified = function(val) {
121023                 if (!arguments.length) { return _modified; }
121024                 _modified = val;
121025                 d3_selectAll('button.preset-close use')
121026                     .attr('xlink:href', (_modified ? '#iD-icon-apply' : '#iD-icon-close'));
121027                 return entityEditor;
121028             };
121029
121030
121031             entityEditor.state = function(val) {
121032                 if (!arguments.length) { return _state; }
121033                 _state = val;
121034                 return entityEditor;
121035             };
121036
121037
121038             entityEditor.entityID = function(val) {
121039                 if (!arguments.length) { return _entityID; }
121040                 if (_entityID === val) { return entityEditor; }  // exit early if no change
121041
121042                 _entityID = val;
121043                 _base = context.graph();
121044                 _coalesceChanges = false;
121045
121046                 // reset the scroll to the top of the inspector (warning: triggers reflow)
121047                 if (_scrolled) {
121048                     window.requestIdleCallback(function() {
121049                         var body = d3_selectAll('.entity-editor-pane .inspector-body');
121050                         if (!body.empty()) {
121051                             _scrolled = false;
121052                             body.node().scrollTop = 0;
121053                         }
121054                     });
121055                 }
121056
121057                 var presetMatch = context.presets().match(context.entity(_entityID), _base);
121058
121059                 return entityEditor
121060                     .preset(presetMatch)
121061                     .modified(false);
121062             };
121063
121064
121065             entityEditor.preset = function(val) {
121066                 if (!arguments.length) { return _activePreset; }
121067                 if (val !== _activePreset) {
121068                     _activePreset = val;
121069                     _tagReference = uiTagReference(_activePreset.reference(context.geometry(_entityID)))
121070                         .showing(false);
121071                 }
121072                 return entityEditor;
121073             };
121074
121075
121076             return utilRebind(entityEditor, dispatch$1, 'on');
121077         }
121078
121079         function uiPresetList(context) {
121080             var dispatch$1 = dispatch('choose');
121081             var _entityID;
121082             var _currentPreset;
121083             var _autofocus = false;
121084
121085
121086             function presetList(selection) {
121087                 var entity = context.entity(_entityID);
121088                 var geometry = context.geometry(_entityID);
121089
121090                 // Treat entities on addr:interpolation lines as points, not vertices (#3241)
121091                 if (geometry === 'vertex' && entity.isOnAddressLine(context.graph())) {
121092                     geometry = 'point';
121093                 }
121094
121095                 var presets = context.presets().matchGeometry(geometry);
121096
121097                 selection.html('');
121098
121099                 var messagewrap = selection
121100                     .append('div')
121101                     .attr('class', 'header fillL');
121102
121103                 var message = messagewrap
121104                     .append('h3')
121105                     .text(t('inspector.choose'));
121106
121107                 messagewrap
121108                     .append('button')
121109                     .attr('class', 'preset-choose')
121110                     .on('click', function() { dispatch$1.call('choose', this, _currentPreset); })
121111                     .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'));
121112
121113                 function initialKeydown() {
121114                     // hack to let delete shortcut work when search is autofocused
121115                     if (search.property('value').length === 0 &&
121116                         (event.keyCode === utilKeybinding.keyCodes['⌫'] ||
121117                          event.keyCode === utilKeybinding.keyCodes['⌦'])) {
121118                         event.preventDefault();
121119                         event.stopPropagation();
121120                         operationDelete([_entityID], context)();
121121
121122                     // hack to let undo work when search is autofocused
121123                     } else if (search.property('value').length === 0 &&
121124                         (event.ctrlKey || event.metaKey) &&
121125                         event.keyCode === utilKeybinding.keyCodes.z) {
121126                         event.preventDefault();
121127                         event.stopPropagation();
121128                         context.undo();
121129                     } else if (!event.ctrlKey && !event.metaKey) {
121130                         // don't check for delete/undo hack on future keydown events
121131                         d3_select(this).on('keydown', keydown);
121132                         keydown.call(this);
121133                     }
121134                 }
121135
121136                 function keydown() {
121137                     // down arrow
121138                     if (event.keyCode === utilKeybinding.keyCodes['↓'] &&
121139                         // if insertion point is at the end of the string
121140                         search.node().selectionStart === search.property('value').length) {
121141                         event.preventDefault();
121142                         event.stopPropagation();
121143                         // move focus to the first item in the preset list
121144                         var buttons = list.selectAll('.preset-list-button');
121145                         if (!buttons.empty()) { buttons.nodes()[0].focus(); }
121146                     }
121147                 }
121148
121149                 function keypress() {
121150                     // enter
121151                     var value = search.property('value');
121152                     if (event.keyCode === 13 && value.length) {
121153                         list.selectAll('.preset-list-item:first-child')
121154                             .each(function(d) { d.choose.call(this); });
121155                     }
121156                 }
121157
121158                 function inputevent() {
121159                     var value = search.property('value');
121160                     list.classed('filtered', value.length);
121161                     var entity = context.entity(_entityID);
121162                     var results, messageText;
121163                     if (value.length && entity) {
121164                         var center = entity.extent(context.graph()).center();
121165                         var countryCode = iso1A2Code(center);
121166
121167                         results = presets.search(value, geometry, countryCode && countryCode.toLowerCase());
121168                         messageText = t('inspector.results', {
121169                             n: results.collection.length,
121170                             search: value
121171                         });
121172                     } else {
121173                         results = context.presets().defaults(geometry, 36);
121174                         messageText = t('inspector.choose');
121175                     }
121176                     list.call(drawList, results);
121177                     message.text(messageText);
121178                 }
121179
121180                 var searchWrap = selection
121181                     .append('div')
121182                     .attr('class', 'search-header');
121183
121184                 var search = searchWrap
121185                     .append('input')
121186                     .attr('class', 'preset-search-input')
121187                     .attr('placeholder', t('inspector.search'))
121188                     .attr('type', 'search')
121189                     .call(utilNoAuto)
121190                     .on('keydown', initialKeydown)
121191                     .on('keypress', keypress)
121192                     .on('input', inputevent);
121193
121194                 searchWrap
121195                     .call(svgIcon('#iD-icon-search', 'pre-text'));
121196
121197                 if (_autofocus) {
121198                     search.node().focus();
121199                 }
121200
121201                 var listWrap = selection
121202                     .append('div')
121203                     .attr('class', 'inspector-body');
121204
121205                 var list = listWrap
121206                     .append('div')
121207                     .attr('class', 'preset-list fillL cf')
121208                     .call(drawList, context.presets().defaults(geometry, 36));
121209
121210                 context.features().on('change.preset-list', updateForFeatureHiddenState);
121211             }
121212
121213
121214             function drawList(list, presets) {
121215                 var collection = presets.collection.reduce(function(collection, preset) {
121216                     if (preset.members) {
121217                         if (preset.members.collection.filter(function(preset) {
121218                             return preset.addable();
121219                         }).length > 1) {
121220                             collection.push(CategoryItem(preset));
121221                         }
121222                     } else if (preset.addable()) {
121223                         collection.push(PresetItem(preset));
121224                     }
121225                     return collection;
121226                 }, []);
121227
121228                 var items = list.selectAll('.preset-list-item')
121229                     .data(collection, function(d) { return d.preset.id; });
121230
121231                 items.order();
121232
121233                 items.exit()
121234                     .remove();
121235
121236                 items.enter()
121237                     .append('div')
121238                     .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); })
121239                     .classed('current', function(item) { return item.preset === _currentPreset; })
121240                     .each(function(item) { d3_select(this).call(item); })
121241                     .style('opacity', 0)
121242                     .transition()
121243                     .style('opacity', 1);
121244
121245                 updateForFeatureHiddenState();
121246             }
121247
121248             function itemKeydown(){
121249                 // the actively focused item
121250                 var item = d3_select(this.closest('.preset-list-item'));
121251                 var parentItem = d3_select(item.node().parentNode.closest('.preset-list-item'));
121252
121253                 // arrow down, move focus to the next, lower item
121254                 if (event.keyCode === utilKeybinding.keyCodes['↓']) {
121255                     event.preventDefault();
121256                     event.stopPropagation();
121257                     // the next item in the list at the same level
121258                     var nextItem = d3_select(item.node().nextElementSibling);
121259                     // if there is no next item in this list
121260                     if (nextItem.empty()) {
121261                         // if there is a parent item
121262                         if (!parentItem.empty()) {
121263                             // the item is the last item of a sublist,
121264                             // select the next item at the parent level
121265                             nextItem = d3_select(parentItem.node().nextElementSibling);
121266                         }
121267                     // if the focused item is expanded
121268                     } else if (d3_select(this).classed('expanded')) {
121269                         // select the first subitem instead
121270                         nextItem = item.select('.subgrid .preset-list-item:first-child');
121271                     }
121272                     if (!nextItem.empty()) {
121273                         // focus on the next item
121274                         nextItem.select('.preset-list-button').node().focus();
121275                     }
121276
121277                 // arrow up, move focus to the previous, higher item
121278                 } else if (event.keyCode === utilKeybinding.keyCodes['↑']) {
121279                     event.preventDefault();
121280                     event.stopPropagation();
121281                     // the previous item in the list at the same level
121282                     var previousItem = d3_select(item.node().previousElementSibling);
121283
121284                     // if there is no previous item in this list
121285                     if (previousItem.empty()) {
121286                         // if there is a parent item
121287                         if (!parentItem.empty()) {
121288                             // the item is the first subitem of a sublist select the parent item
121289                             previousItem = parentItem;
121290                         }
121291                     // if the previous item is expanded
121292                     } else if (previousItem.select('.preset-list-button').classed('expanded')) {
121293                         // select the last subitem of the sublist of the previous item
121294                         previousItem = previousItem.select('.subgrid .preset-list-item:last-child');
121295                     }
121296
121297                     if (!previousItem.empty()) {
121298                         // focus on the previous item
121299                         previousItem.select('.preset-list-button').node().focus();
121300                     } else {
121301                         // the focus is at the top of the list, move focus back to the search field
121302                         var search = d3_select(this.closest('.preset-list-pane')).select('.preset-search-input');
121303                         search.node().focus();
121304                     }
121305
121306                 // arrow left, move focus to the parent item if there is one
121307                 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
121308                     event.preventDefault();
121309                     event.stopPropagation();
121310                     // if there is a parent item, focus on the parent item
121311                     if (!parentItem.empty()) {
121312                         parentItem.select('.preset-list-button').node().focus();
121313                     }
121314
121315                 // arrow right, choose this item
121316                 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
121317                     event.preventDefault();
121318                     event.stopPropagation();
121319                     item.datum().choose.call(d3_select(this).node());
121320                 }
121321             }
121322
121323
121324             function CategoryItem(preset) {
121325                 var box, sublist, shown = false;
121326
121327                 function item(selection) {
121328                     var wrap = selection.append('div')
121329                         .attr('class', 'preset-list-button-wrap category');
121330
121331                     function click() {
121332                         var isExpanded = d3_select(this).classed('expanded');
121333                         var iconName = isExpanded ?
121334                             (textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward') : '#iD-icon-down';
121335                         d3_select(this)
121336                             .classed('expanded', !isExpanded);
121337                         d3_select(this).selectAll('div.label-inner svg.icon use')
121338                             .attr('href', iconName);
121339                         item.choose();
121340                     }
121341
121342                     var button = wrap
121343                         .append('button')
121344                         .attr('class', 'preset-list-button')
121345                         .classed('expanded', false)
121346                         .call(uiPresetIcon(context)
121347                             .geometry(context.geometry(_entityID))
121348                             .preset(preset))
121349                         .on('click', click)
121350                         .on('keydown', function() {
121351                             // right arrow, expand the focused item
121352                             if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
121353                                 event.preventDefault();
121354                                 event.stopPropagation();
121355                                 // if the item isn't expanded
121356                                 if (!d3_select(this).classed('expanded')) {
121357                                     // toggle expansion (expand the item)
121358                                     click.call(this);
121359                                 }
121360                             // left arrow, collapse the focused item
121361                             } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
121362                                 event.preventDefault();
121363                                 event.stopPropagation();
121364                                 // if the item is expanded
121365                                 if (d3_select(this).classed('expanded')) {
121366                                     // toggle expansion (collapse the item)
121367                                     click.call(this);
121368                                 }
121369                             } else {
121370                                 itemKeydown.call(this);
121371                             }
121372                         });
121373
121374                     var label = button
121375                         .append('div')
121376                         .attr('class', 'label')
121377                         .append('div')
121378                         .attr('class', 'label-inner');
121379
121380                     label
121381                         .append('div')
121382                         .attr('class', 'namepart')
121383                         .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'))
121384                         .append('span')
121385                         .html(function() { return preset.name() + '&hellip;'; });
121386
121387                     box = selection.append('div')
121388                         .attr('class', 'subgrid')
121389                         .style('max-height', '0px')
121390                         .style('opacity', 0);
121391
121392                     box.append('div')
121393                         .attr('class', 'arrow');
121394
121395                     sublist = box.append('div')
121396                         .attr('class', 'preset-list fillL3');
121397                 }
121398
121399
121400                 item.choose = function() {
121401                     if (!box || !sublist) { return; }
121402
121403                     if (shown) {
121404                         shown = false;
121405                         box.transition()
121406                             .duration(200)
121407                             .style('opacity', '0')
121408                             .style('max-height', '0px')
121409                             .style('padding-bottom', '0px');
121410                     } else {
121411                         shown = true;
121412                         var members = preset.members.matchGeometry(context.geometry(_entityID));
121413                         sublist.call(drawList, members);
121414                         box.transition()
121415                             .duration(200)
121416                             .style('opacity', '1')
121417                             .style('max-height', 200 + members.collection.length * 190 + 'px')
121418                             .style('padding-bottom', '10px');
121419                     }
121420                 };
121421
121422                 item.preset = preset;
121423                 return item;
121424             }
121425
121426
121427             function PresetItem(preset) {
121428                 function item(selection) {
121429                     var wrap = selection.append('div')
121430                         .attr('class', 'preset-list-button-wrap');
121431
121432                     var button = wrap.append('button')
121433                         .attr('class', 'preset-list-button')
121434                         .call(uiPresetIcon(context)
121435                             .geometry(context.geometry(_entityID))
121436                             .preset(preset))
121437                         .on('click', item.choose)
121438                         .on('keydown', itemKeydown);
121439
121440                     var label = button
121441                         .append('div')
121442                         .attr('class', 'label')
121443                         .append('div')
121444                         .attr('class', 'label-inner');
121445
121446                     // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
121447                     label.selectAll('.namepart')
121448                         .data(preset.name().split(' – '))
121449                         .enter()
121450                         .append('div')
121451                         .attr('class', 'namepart')
121452                         .text(function(d) { return d; });
121453
121454                     wrap.call(item.reference.button);
121455                     selection.call(item.reference.body);
121456                 }
121457
121458                 item.choose = function() {
121459                     if (d3_select(this).classed('disabled')) { return; }
121460
121461                     context.presets().setMostRecent(preset, context.geometry(_entityID));
121462                     context.perform(
121463                         actionChangePreset(_entityID, _currentPreset, preset),
121464                         t('operations.change_tags.annotation')
121465                     );
121466
121467                     context.validator().validate();  // rerun validation
121468                     dispatch$1.call('choose', this, preset);
121469                 };
121470
121471                 item.help = function() {
121472                     event.stopPropagation();
121473                     item.reference.toggle();
121474                 };
121475
121476                 item.preset = preset;
121477                 item.reference = uiTagReference(preset.reference(context.geometry(_entityID)));
121478
121479                 return item;
121480             }
121481
121482
121483             function updateForFeatureHiddenState() {
121484                 if (!context.hasEntity(_entityID)) { return; }
121485
121486                 var geometry = context.geometry(_entityID);
121487                 var button = d3_selectAll('.preset-list .preset-list-button');
121488
121489                 // remove existing tooltips
121490                 button.call(tooltip().destroyAny);
121491
121492                 button.each(function(item, index) {
121493                     var hiddenPresetFeaturesId = context.features().isHiddenPreset(item.preset, geometry);
121494                     var isHiddenPreset = !context.inIntro() &&
121495                         !!hiddenPresetFeaturesId &&
121496                         item.preset !== _currentPreset;
121497
121498                     d3_select(this)
121499                         .classed('disabled', isHiddenPreset);
121500
121501                     if (isHiddenPreset) {
121502                         var isAutoHidden = context.features().autoHidden(hiddenPresetFeaturesId);
121503                         var tooltipIdSuffix = isAutoHidden ? 'zoom' : 'manual';
121504                         var tooltipObj = { features: t('feature.' + hiddenPresetFeaturesId + '.description') };
121505                         d3_select(this).call(tooltip()
121506                             .title(t('inspector.hidden_preset.' + tooltipIdSuffix, tooltipObj))
121507                             .placement(index < 2 ? 'bottom' : 'top')
121508                         );
121509                     }
121510                 });
121511             }
121512
121513             presetList.autofocus = function(val) {
121514                 if (!arguments.length) { return _autofocus; }
121515                 _autofocus = val;
121516                 return presetList;
121517             };
121518
121519
121520             presetList.entityID = function(val) {
121521                 if (!arguments.length) { return _entityID; }
121522                 _entityID = val;
121523                 presetList.preset(context.presets().match(context.entity(_entityID), context.graph()));
121524                 return presetList;
121525             };
121526
121527
121528             presetList.preset = function(val) {
121529                 if (!arguments.length) { return _currentPreset; }
121530                 _currentPreset = val;
121531                 return presetList;
121532             };
121533
121534
121535             return utilRebind(presetList, dispatch$1, 'on');
121536         }
121537
121538         function uiInspector(context) {
121539             var presetList = uiPresetList(context);
121540             var entityEditor = uiEntityEditor(context);
121541             var wrap = d3_select(null),
121542                 presetPane = d3_select(null),
121543                 editorPane = d3_select(null);
121544             var _state = 'select';
121545             var _entityID;
121546             var _newFeature = false;
121547
121548
121549             function inspector(selection, newFeature) {
121550                 presetList
121551                     .entityID(_entityID)
121552                     .autofocus(_newFeature)
121553                     .on('choose', inspector.setPreset);
121554
121555                 entityEditor
121556                     .state(_state)
121557                     .entityID(_entityID)
121558                     .on('choose', inspector.showList);
121559
121560                 wrap = selection.selectAll('.panewrap')
121561                     .data([0]);
121562
121563                 var enter = wrap.enter()
121564                     .append('div')
121565                     .attr('class', 'panewrap');
121566
121567                 enter
121568                     .append('div')
121569                     .attr('class', 'preset-list-pane pane');
121570
121571                 enter
121572                     .append('div')
121573                     .attr('class', 'entity-editor-pane pane');
121574
121575                 wrap = wrap.merge(enter);
121576                 presetPane = wrap.selectAll('.preset-list-pane');
121577                 editorPane = wrap.selectAll('.entity-editor-pane');
121578
121579                 var entity = context.entity(_entityID);
121580
121581                 var hasNonGeometryTags = entity.hasNonGeometryTags();
121582                 var isTaglessOrIntersectionVertex = entity.geometry(context.graph()) === 'vertex' &&
121583                     (!hasNonGeometryTags && !entity.isHighwayIntersection(context.graph()));
121584                 var issues = context.validator().getEntityIssues(_entityID);
121585                 // start with the preset list if the feature is new and untagged or is an uninteresting vertex
121586                 var showPresetList = (newFeature && !hasNonGeometryTags) || (isTaglessOrIntersectionVertex && !issues.length);
121587
121588                 if (showPresetList) {
121589                     wrap.style('right', '-100%');
121590                     presetPane.call(presetList);
121591                 } else {
121592                     wrap.style('right', '0%');
121593                     editorPane.call(entityEditor);
121594                 }
121595
121596                 var footer = selection.selectAll('.footer')
121597                     .data([0]);
121598
121599                 footer = footer.enter()
121600                     .append('div')
121601                     .attr('class', 'footer')
121602                     .merge(footer);
121603
121604                 footer
121605                     .call(uiViewOnOSM(context)
121606                         .what(context.hasEntity(_entityID))
121607                     );
121608             }
121609
121610             inspector.showList = function(preset) {
121611                 wrap.transition()
121612                     .styleTween('right', function() { return d3_interpolate('0%', '-100%'); });
121613
121614                 presetPane
121615                     .call(presetList.preset(preset).autofocus(true));
121616             };
121617
121618             inspector.setPreset = function(preset) {
121619
121620                 // upon setting multipolygon, go to the area preset list instead of the editor
121621                 if (preset.id === 'type/multipolygon') {
121622                     presetPane
121623                         .call(presetList.preset(preset).autofocus(true));
121624
121625                 } else {
121626                     wrap.transition()
121627                         .styleTween('right', function() { return d3_interpolate('-100%', '0%'); });
121628
121629                     editorPane
121630                         .call(entityEditor.preset(preset));
121631                 }
121632
121633             };
121634
121635             inspector.state = function(val) {
121636                 if (!arguments.length) { return _state; }
121637                 _state = val;
121638                 entityEditor.state(_state);
121639
121640                 // remove any old field help overlay that might have gotten attached to the inspector
121641                 d3_selectAll('.field-help-body').remove();
121642
121643                 return inspector;
121644             };
121645
121646
121647             inspector.entityID = function(val) {
121648                 if (!arguments.length) { return _entityID; }
121649                 _entityID = val;
121650                 return inspector;
121651             };
121652
121653
121654             inspector.newFeature = function(val) {
121655                 if (!arguments.length) { return _newFeature; }
121656                 _newFeature = val;
121657                 return inspector;
121658             };
121659
121660
121661             return inspector;
121662         }
121663
121664         function uiSidebar(context) {
121665             var inspector = uiInspector(context);
121666             var dataEditor = uiDataEditor(context);
121667             var noteEditor = uiNoteEditor(context);
121668             var improveOsmEditor = uiImproveOsmEditor(context);
121669             var keepRightEditor = uiKeepRightEditor(context);
121670             var _current;
121671             var _wasData = false;
121672             var _wasNote = false;
121673             var _wasQAError = false;
121674
121675
121676             function sidebar(selection) {
121677                 var container = d3_select('#id-container');
121678                 var minWidth = 280;
121679                 var sidebarWidth;
121680                 var containerWidth;
121681                 var dragOffset;
121682
121683                 var resizer = selection
121684                     .append('div')
121685                     .attr('id', 'sidebar-resizer');
121686
121687                 // Set the initial width constraints
121688                 selection
121689                     .style('min-width', minWidth + 'px')
121690                     .style('max-width', '400px')
121691                     .style('width', '33.3333%');
121692
121693                 resizer.call(d3_drag()
121694                     .container(container.node())
121695                     .on('start', function() {
121696                         // offset from edge of sidebar-resizer
121697                         dragOffset = event.sourceEvent.offsetX - 1;
121698
121699                         sidebarWidth = selection.node().getBoundingClientRect().width;
121700                         containerWidth = container.node().getBoundingClientRect().width;
121701                         var widthPct = (sidebarWidth / containerWidth) * 100;
121702                         selection
121703                             .style('width', widthPct + '%')    // lock in current width
121704                             .style('max-width', '85%');        // but allow larger widths
121705
121706                         resizer.classed('dragging', true);
121707                     })
121708                     .on('drag', function() {
121709                         var isRTL = (textDirection === 'rtl');
121710                         var scaleX = isRTL ? 0 : 1;
121711                         var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
121712
121713                         var x = event.x - dragOffset;
121714                         sidebarWidth = isRTL ? containerWidth - x : x;
121715
121716                         var isCollapsed = selection.classed('collapsed');
121717                         var shouldCollapse = sidebarWidth < minWidth;
121718
121719                         selection.classed('collapsed', shouldCollapse);
121720
121721                         if (shouldCollapse) {
121722                             if (!isCollapsed) {
121723                                 selection
121724                                     .style(xMarginProperty, '-400px')
121725                                     .style('width', '400px');
121726
121727                                 context.ui().onResize([(sidebarWidth - event.dx) * scaleX, 0]);
121728                             }
121729
121730                         } else {
121731                             var widthPct = (sidebarWidth / containerWidth) * 100;
121732                             selection
121733                                 .style(xMarginProperty, null)
121734                                 .style('width', widthPct + '%');
121735
121736                             if (isCollapsed) {
121737                                 context.ui().onResize([-sidebarWidth * scaleX, 0]);
121738                             } else {
121739                                 context.ui().onResize([-event.dx * scaleX, 0]);
121740                             }
121741                         }
121742                     })
121743                     .on('end', function() {
121744                         resizer.classed('dragging', false);
121745                     })
121746                 );
121747
121748                 var featureListWrap = selection
121749                     .append('div')
121750                     .attr('class', 'feature-list-pane')
121751                     .call(uiFeatureList(context));
121752
121753                 var inspectorWrap = selection
121754                     .append('div')
121755                     .attr('class', 'inspector-hidden inspector-wrap fr');
121756
121757
121758                 function hover(datum) {
121759                     if (datum && datum.__featurehash__) {   // hovering on data
121760                         _wasData = true;
121761                         sidebar
121762                             .show(dataEditor.datum(datum));
121763
121764                         selection.selectAll('.sidebar-component')
121765                             .classed('inspector-hover', true);
121766
121767                     } else if (datum instanceof osmNote) {
121768                         if (context.mode().id === 'drag-note') { return; }
121769                         _wasNote = true;
121770
121771                         var osm = services$1.osm;
121772                         if (osm) {
121773                             datum = osm.getNote(datum.id);   // marker may contain stale data - get latest
121774                         }
121775
121776                         sidebar
121777                             .show(noteEditor.note(datum));
121778
121779                         selection.selectAll('.sidebar-component')
121780                             .classed('inspector-hover', true);
121781
121782                     } else if (datum instanceof qaError) {
121783                         _wasQAError = true;
121784
121785                         var errService = services$1[datum.service];
121786                         if (errService) {
121787                             // marker may contain stale data - get latest
121788                             datum = errService.getError(datum.id);
121789                         }
121790
121791                         // Temporary solution while only two services
121792                         var errEditor = (datum.service === 'keepRight') ? keepRightEditor : improveOsmEditor;
121793
121794                         d3_selectAll('.qa_error.' + datum.service)
121795                             .classed('hover', function(d) { return d.id === datum.id; });
121796
121797                         sidebar
121798                             .show(errEditor.error(datum));
121799
121800                         selection.selectAll('.sidebar-component')
121801                             .classed('inspector-hover', true);
121802
121803                     } else if (!_current && (datum instanceof osmEntity)) {
121804                         featureListWrap
121805                             .classed('inspector-hidden', true);
121806
121807                         inspectorWrap
121808                             .classed('inspector-hidden', false)
121809                             .classed('inspector-hover', true);
121810
121811                         if (inspector.entityID() !== datum.id || inspector.state() !== 'hover') {
121812                             inspector
121813                                 .state('hover')
121814                                 .entityID(datum.id);
121815
121816                             inspectorWrap
121817                                 .call(inspector);
121818                         }
121819
121820                     } else if (!_current) {
121821                         featureListWrap
121822                             .classed('inspector-hidden', false);
121823                         inspectorWrap
121824                             .classed('inspector-hidden', true);
121825                         inspector
121826                             .state('hide');
121827
121828                     } else if (_wasData || _wasNote || _wasQAError) {
121829                         _wasNote = false;
121830                         _wasData = false;
121831                         _wasQAError = false;
121832                         d3_selectAll('.note').classed('hover', false);
121833                         d3_selectAll('.qa_error').classed('hover', false);
121834                         sidebar.hide();
121835                     }
121836                 }
121837
121838                 sidebar.hover = throttle(hover, 200);
121839
121840
121841                 sidebar.intersects = function(extent) {
121842                     var rect = selection.node().getBoundingClientRect();
121843                     return extent.intersects([
121844                         context.projection.invert([0, rect.height]),
121845                         context.projection.invert([rect.width, 0])
121846                     ]);
121847                 };
121848
121849
121850                 sidebar.select = function(id, newFeature) {
121851                     sidebar.hide();
121852
121853                     if (id) {
121854                         var entity = context.entity(id);
121855                         // uncollapse the sidebar
121856                         if (selection.classed('collapsed')) {
121857                             if (newFeature) {
121858                                 var extent = entity.extent(context.graph());
121859                                 sidebar.expand(sidebar.intersects(extent));
121860                             }
121861                         }
121862
121863                         featureListWrap
121864                             .classed('inspector-hidden', true);
121865
121866                         inspectorWrap
121867                             .classed('inspector-hidden', false)
121868                             .classed('inspector-hover', false);
121869
121870                         if (inspector.entityID() !== id || inspector.state() !== 'select') {
121871                             inspector
121872                                 .state('select')
121873                                 .entityID(id)
121874                                 .newFeature(newFeature);
121875
121876                             inspectorWrap
121877                                 .call(inspector, newFeature);
121878                         }
121879
121880                         sidebar.showPresetList = function() {
121881                             inspector.showList(context.presets().match(entity, context.graph()));
121882                         };
121883
121884                     } else {
121885                         inspector
121886                             .state('hide');
121887                     }
121888                 };
121889
121890
121891                 sidebar.show = function(component, element) {
121892                     featureListWrap
121893                         .classed('inspector-hidden', true);
121894                     inspectorWrap
121895                         .classed('inspector-hidden', true);
121896
121897                     if (_current) { _current.remove(); }
121898                     _current = selection
121899                         .append('div')
121900                         .attr('class', 'sidebar-component')
121901                         .call(component, element);
121902                 };
121903
121904
121905                 sidebar.hide = function() {
121906                     featureListWrap
121907                         .classed('inspector-hidden', false);
121908                     inspectorWrap
121909                         .classed('inspector-hidden', true);
121910
121911                     if (_current) { _current.remove(); }
121912                     _current = null;
121913                 };
121914
121915
121916                 sidebar.expand = function(moveMap) {
121917                     if (selection.classed('collapsed')) {
121918                         sidebar.toggle(moveMap);
121919                     }
121920                 };
121921
121922
121923                 sidebar.collapse = function(moveMap) {
121924                     if (!selection.classed('collapsed')) {
121925                         sidebar.toggle(moveMap);
121926                     }
121927                 };
121928
121929
121930                 sidebar.toggle = function(moveMap) {
121931                     var e = event;
121932                     if (e && e.sourceEvent) {
121933                         e.sourceEvent.preventDefault();
121934                     } else if (e) {
121935                         e.preventDefault();
121936                     }
121937
121938                     // Don't allow sidebar to toggle when the user is in the walkthrough.
121939                     if (context.inIntro()) { return; }
121940
121941                     var isCollapsed = selection.classed('collapsed');
121942                     var isCollapsing = !isCollapsed;
121943                     var isRTL = (textDirection === 'rtl');
121944                     var scaleX = isRTL ? 0 : 1;
121945                     var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
121946
121947                     sidebarWidth = selection.node().getBoundingClientRect().width;
121948
121949                     // switch from % to px
121950                     selection.style('width', sidebarWidth + 'px');
121951
121952                     var startMargin, endMargin, lastMargin;
121953                     if (isCollapsing) {
121954                         startMargin = lastMargin = 0;
121955                         endMargin = -sidebarWidth;
121956                     } else {
121957                         startMargin = lastMargin = -sidebarWidth;
121958                         endMargin = 0;
121959                     }
121960
121961                     selection.transition()
121962                         .style(xMarginProperty, endMargin + 'px')
121963                         .tween('panner', function() {
121964                             var i = d3_interpolateNumber(startMargin, endMargin);
121965                             return function(t) {
121966                                 var dx = lastMargin - Math.round(i(t));
121967                                 lastMargin = lastMargin - dx;
121968                                 context.ui().onResize(moveMap ? undefined : [dx * scaleX, 0]);
121969                             };
121970                         })
121971                         .on('end', function() {
121972                             selection.classed('collapsed', isCollapsing);
121973
121974                             // switch back from px to %
121975                             if (!isCollapsing) {
121976                                 var containerWidth = container.node().getBoundingClientRect().width;
121977                                 var widthPct = (sidebarWidth / containerWidth) * 100;
121978                                 selection
121979                                     .style(xMarginProperty, null)
121980                                     .style('width', widthPct + '%');
121981                             }
121982                         });
121983                 };
121984
121985                 // toggle the sidebar collapse when double-clicking the resizer
121986                 resizer.on('dblclick', sidebar.toggle);
121987             }
121988
121989             sidebar.showPresetList = function() {};
121990             sidebar.hover = function() {};
121991             sidebar.hover.cancel = function() {};
121992             sidebar.intersects = function() {};
121993             sidebar.select = function() {};
121994             sidebar.show = function() {};
121995             sidebar.hide = function() {};
121996             sidebar.expand = function() {};
121997             sidebar.collapse = function() {};
121998             sidebar.toggle = function() {};
121999
122000             return sidebar;
122001         }
122002
122003         function uiSpinner(context) {
122004             var osm = context.connection();
122005
122006
122007             return function(selection) {
122008                 var img = selection
122009                     .append('img')
122010                     .attr('src', context.imagePath('loader-black.gif'))
122011                     .style('opacity', 0);
122012
122013                 if (osm) {
122014                     osm
122015                         .on('loading.spinner', function() {
122016                             img.transition()
122017                                 .style('opacity', 1);
122018                         })
122019                         .on('loaded.spinner', function() {
122020                             img.transition()
122021                                 .style('opacity', 0);
122022                         });
122023                 }
122024             };
122025         }
122026
122027         function uiSplash(context) {
122028           return function (selection) {
122029             // Exception - if there are restorable changes, skip this splash screen.
122030             // This is because we currently only support one `uiModal` at a time
122031             //  and we need to show them `uiRestore`` instead of this one.
122032             if (context.history().hasRestorableChanges()) { return; }
122033
122034             // If user has not seen this version of the privacy policy, show the splash again.
122035             var updateMessage = '';
122036             var sawPrivacyVersion = context.storage('sawPrivacyVersion');
122037             if (sawPrivacyVersion !== context.privacyVersion) {
122038               updateMessage = t('splash.privacy_update');
122039               context.storage('sawSplash', null);
122040             }
122041
122042             if (context.storage('sawSplash')) { return; }
122043
122044             context.storage('sawSplash', true);
122045             context.storage('sawPrivacyVersion', context.privacyVersion);
122046
122047             var modalSelection = uiModal(selection);
122048
122049             modalSelection.select('.modal')
122050               .attr('class', 'modal-splash modal');
122051
122052             var introModal = modalSelection.select('.content')
122053               .append('div')
122054               .attr('class', 'fillL');
122055
122056             introModal
122057               .append('div')
122058               .attr('class','modal-section')
122059               .append('h3')
122060               .text(t('splash.welcome'));
122061
122062             var modalSection = introModal
122063               .append('div')
122064               .attr('class','modal-section');
122065
122066             modalSection
122067               .append('p')
122068               .html(t('splash.text', {
122069                 version: context.version,
122070                 website: '<a target="_blank" href="http://ideditor.blog/">ideditor.blog</a>',
122071                 github: '<a target="_blank" href="https://github.com/openstreetmap/iD">github.com</a>'
122072               }));
122073
122074             modalSection
122075               .append('p')
122076               .html(t('splash.privacy', {
122077                 updateMessage: updateMessage,
122078                 privacyLink: '<a target="_blank" href="https://github.com/openstreetmap/iD/blob/master/PRIVACY.md">' +
122079                   t('splash.privacy_policy') + '</a>'
122080               }));
122081
122082             var buttonWrap = introModal
122083               .append('div')
122084               .attr('class', 'modal-actions');
122085
122086             var walkthrough = buttonWrap
122087               .append('button')
122088               .attr('class', 'walkthrough')
122089               .on('click', function () {
122090                 context.container().call(uiIntro(context));
122091                 modalSelection.close();
122092               });
122093
122094             walkthrough
122095               .append('svg')
122096               .attr('class', 'logo logo-walkthrough')
122097               .append('use')
122098               .attr('xlink:href', '#iD-logo-walkthrough');
122099
122100             walkthrough
122101               .append('div')
122102               .text(t('splash.walkthrough'));
122103
122104             var startEditing = buttonWrap
122105               .append('button')
122106               .attr('class', 'start-editing')
122107               .on('click', modalSelection.close);
122108
122109             startEditing
122110               .append('svg')
122111               .attr('class', 'logo logo-features')
122112               .append('use')
122113               .attr('xlink:href', '#iD-logo-features');
122114
122115             startEditing
122116               .append('div')
122117               .text(t('splash.start'));
122118
122119             modalSelection.select('button.close')
122120               .attr('class','hide');
122121           };
122122         }
122123
122124         function uiStatus(context) {
122125             var osm = context.connection();
122126
122127
122128             return function(selection) {
122129                 if (!osm) { return; }
122130
122131                 function update(err, apiStatus) {
122132                     selection.html('');
122133
122134                     if (err) {
122135                         if (apiStatus === 'connectionSwitched') {
122136                             // if the connection was just switched, we can't rely on
122137                             // the status (we're getting the status of the previous api)
122138                             return;
122139
122140                         } else if (apiStatus === 'rateLimited') {
122141                             selection
122142                                 .text(t('osm_api_status.message.rateLimit'))
122143                                 .append('a')
122144                                 .attr('class', 'api-status-login')
122145                                 .attr('target', '_blank')
122146                                 .call(svgIcon('#iD-icon-out-link', 'inline'))
122147                                 .append('span')
122148                                 .text(t('login'))
122149                                 .on('click.login', function() {
122150                                     event.preventDefault();
122151                                     osm.authenticate();
122152                                 });
122153                         } else {
122154
122155                             // don't allow retrying too rapidly
122156                             var throttledRetry = throttle(function() {
122157                                 // try loading the visible tiles
122158                                 context.loadTiles(context.projection);
122159                                 // manually reload the status too in case all visible tiles were already loaded
122160                                 osm.reloadApiStatus();
122161                             }, 2000);
122162
122163                             // eslint-disable-next-line no-warning-comments
122164                             // TODO: nice messages for different error types
122165                             selection
122166                                 .text(t('osm_api_status.message.error') + ' ')
122167                                 .append('a')
122168                                 // let the user manually retry their connection directly
122169                                 .text(t('osm_api_status.retry'))
122170                                 .on('click.retry', function() {
122171                                     event.preventDefault();
122172                                     throttledRetry();
122173                                 });
122174                         }
122175
122176                     } else if (apiStatus === 'readonly') {
122177                         selection.text(t('osm_api_status.message.readonly'));
122178                     } else if (apiStatus === 'offline') {
122179                         selection.text(t('osm_api_status.message.offline'));
122180                     }
122181
122182                     selection.attr('class', 'api-status ' + (err ? 'error' : apiStatus));
122183                 }
122184
122185                 osm.on('apiStatusChange.uiStatus', update);
122186
122187                 // reload the status periodically regardless of other factors
122188                 window.setInterval(function() {
122189                     osm.reloadApiStatus();
122190                 }, 90000);
122191
122192                 // load the initial status in case no OSM data was loaded yet
122193                 osm.reloadApiStatus();
122194             };
122195         }
122196
122197         function modeDrawArea(context, wayID, startGraph, baselineGraph, button) {
122198             var mode = {
122199                 button: button,
122200                 id: 'draw-area'
122201             };
122202
122203             var behavior;
122204
122205             mode.wayID = wayID;
122206
122207             mode.enter = function() {
122208                 var way = context.entity(wayID);
122209
122210                 behavior = behaviorDrawWay(context, wayID, undefined, mode, startGraph, baselineGraph)
122211                     .tail(t('modes.draw_area.tail'));
122212
122213                 var addNode = behavior.addNode;
122214
122215                 behavior.addNode = function(node, d) {
122216                     var length = way.nodes.length;
122217                     var penultimate = length > 2 ? way.nodes[length - 2] : null;
122218
122219                     if (node.id === way.first() || node.id === penultimate) {
122220                         behavior.finish();
122221                     } else {
122222                         addNode(node, d);
122223                     }
122224                 };
122225
122226                 context.install(behavior);
122227             };
122228
122229
122230             mode.exit = function() {
122231                 context.uninstall(behavior);
122232             };
122233
122234
122235             mode.selectedIDs = function() {
122236                 return [wayID];
122237             };
122238
122239
122240             mode.activeID = function() {
122241                 return (behavior && behavior.activeID()) || [];
122242             };
122243
122244
122245             return mode;
122246         }
122247
122248         function modeAddArea(context, mode) {
122249             mode.id = 'add-area';
122250
122251             var behavior = behaviorAddWay(context)
122252                 .tail(t('modes.add_area.tail'))
122253                 .on('start', start)
122254                 .on('startFromWay', startFromWay)
122255                 .on('startFromNode', startFromNode);
122256
122257             var defaultTags = { area: 'yes' };
122258             if (mode.preset) { defaultTags = mode.preset.setTags(defaultTags, 'area'); }
122259
122260
122261             function actionClose(wayId) {
122262                 return function (graph) {
122263                     return graph.replace(graph.entity(wayId).close());
122264                 };
122265             }
122266
122267
122268             function start(loc) {
122269                 var startGraph = context.graph();
122270                 var node = osmNode({ loc: loc });
122271                 var way = osmWay({ tags: defaultTags });
122272
122273                 context.perform(
122274                     actionAddEntity(node),
122275                     actionAddEntity(way),
122276                     actionAddVertex(way.id, node.id),
122277                     actionClose(way.id)
122278                 );
122279
122280                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
122281             }
122282
122283
122284             function startFromWay(loc, edge) {
122285                 var startGraph = context.graph();
122286                 var node = osmNode({ loc: loc });
122287                 var way = osmWay({ tags: defaultTags });
122288
122289                 context.perform(
122290                     actionAddEntity(node),
122291                     actionAddEntity(way),
122292                     actionAddVertex(way.id, node.id),
122293                     actionClose(way.id),
122294                     actionAddMidpoint({ loc: loc, edge: edge }, node)
122295                 );
122296
122297                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
122298             }
122299
122300
122301             function startFromNode(node) {
122302                 var startGraph = context.graph();
122303                 var way = osmWay({ tags: defaultTags });
122304
122305                 context.perform(
122306                     actionAddEntity(way),
122307                     actionAddVertex(way.id, node.id),
122308                     actionClose(way.id)
122309                 );
122310
122311                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
122312             }
122313
122314
122315             mode.enter = function() {
122316                 context.install(behavior);
122317             };
122318
122319
122320             mode.exit = function() {
122321                 context.uninstall(behavior);
122322             };
122323
122324
122325             return mode;
122326         }
122327
122328         function modeAddLine(context, mode) {
122329             mode.id = 'add-line';
122330
122331             var behavior = behaviorAddWay(context)
122332                 .tail(t('modes.add_line.tail'))
122333                 .on('start', start)
122334                 .on('startFromWay', startFromWay)
122335                 .on('startFromNode', startFromNode);
122336
122337             var defaultTags = {};
122338             if (mode.preset) { defaultTags = mode.preset.setTags(defaultTags, 'line'); }
122339
122340
122341             function start(loc) {
122342                 var startGraph = context.graph();
122343                 var node = osmNode({ loc: loc });
122344                 var way = osmWay({ tags: defaultTags });
122345
122346                 context.perform(
122347                     actionAddEntity(node),
122348                     actionAddEntity(way),
122349                     actionAddVertex(way.id, node.id)
122350                 );
122351
122352                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
122353             }
122354
122355
122356             function startFromWay(loc, edge) {
122357                 var startGraph = context.graph();
122358                 var node = osmNode({ loc: loc });
122359                 var way = osmWay({ tags: defaultTags });
122360
122361                 context.perform(
122362                     actionAddEntity(node),
122363                     actionAddEntity(way),
122364                     actionAddVertex(way.id, node.id),
122365                     actionAddMidpoint({ loc: loc, edge: edge }, node)
122366                 );
122367
122368                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
122369             }
122370
122371
122372             function startFromNode(node) {
122373                 var startGraph = context.graph();
122374                 var way = osmWay({ tags: defaultTags });
122375
122376                 context.perform(
122377                     actionAddEntity(way),
122378                     actionAddVertex(way.id, node.id)
122379                 );
122380
122381                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
122382             }
122383
122384
122385             mode.enter = function() {
122386                 context.install(behavior);
122387             };
122388
122389
122390             mode.exit = function() {
122391                 context.uninstall(behavior);
122392             };
122393
122394             return mode;
122395         }
122396
122397         function modeAddPoint(context, mode) {
122398
122399             mode.id = 'add-point';
122400
122401             var behavior = behaviorDraw(context)
122402                 .tail(t('modes.add_point.tail'))
122403                 .on('click', add)
122404                 .on('clickWay', addWay)
122405                 .on('clickNode', addNode)
122406                 .on('cancel', cancel)
122407                 .on('finish', cancel);
122408
122409             var defaultTags = {};
122410             if (mode.preset) { defaultTags = mode.preset.setTags(defaultTags, 'point'); }
122411
122412
122413             function add(loc) {
122414                 var node = osmNode({ loc: loc, tags: defaultTags });
122415
122416                 context.perform(
122417                     actionAddEntity(node),
122418                     t('operations.add.annotation.point')
122419                 );
122420
122421                 enterSelectMode(node);
122422             }
122423
122424
122425             function addWay(loc, edge) {
122426                 var node = osmNode({ tags: defaultTags });
122427
122428                 context.perform(
122429                     actionAddMidpoint({loc: loc, edge: edge}, node),
122430                     t('operations.add.annotation.vertex')
122431                 );
122432
122433                 enterSelectMode(node);
122434             }
122435
122436             function enterSelectMode(node) {
122437                 context.enter(
122438                     modeSelect(context, [node.id]).newFeature(true)
122439                 );
122440             }
122441
122442
122443             function addNode(node) {
122444                 if (Object.keys(defaultTags).length === 0) {
122445                     enterSelectMode(node);
122446                     return;
122447                 }
122448
122449                 var tags = Object.assign({}, node.tags);  // shallow copy
122450                 for (var key in defaultTags) {
122451                     tags[key] = defaultTags[key];
122452                 }
122453
122454                 context.perform(
122455                     actionChangeTags(node.id, tags),
122456                     t('operations.add.annotation.point')
122457                 );
122458
122459                 enterSelectMode(node);
122460             }
122461
122462
122463             function cancel() {
122464                 context.enter(modeBrowse(context));
122465             }
122466
122467
122468             mode.enter = function() {
122469                 context.install(behavior);
122470             };
122471
122472
122473             mode.exit = function() {
122474                 context.uninstall(behavior);
122475             };
122476
122477
122478             return mode;
122479         }
122480
122481         function modeAddNote(context) {
122482             var mode = {
122483                 id: 'add-note',
122484                 button: 'note',
122485                 title: t('modes.add_note.title'),
122486                 description: t('modes.add_note.description'),
122487                 key: t('modes.add_note.key')
122488             };
122489
122490             var behavior = behaviorDraw(context)
122491                 .tail(t('modes.add_note.tail'))
122492                 .on('click', add)
122493                 .on('cancel', cancel)
122494                 .on('finish', cancel);
122495
122496
122497             function add(loc) {
122498                 var osm = services$1.osm;
122499                 if (!osm) { return; }
122500
122501                 var note = osmNote({ loc: loc, status: 'open', comments: [] });
122502                 osm.replaceNote(note);
122503
122504                 // force a reraw (there is no history change that would otherwise do this)
122505                 context.pan([0,0]);
122506
122507                 context
122508                     .selectedNoteID(note.id)
122509                     .enter(modeSelectNote(context, note.id).newFeature(true));
122510             }
122511
122512
122513             function cancel() {
122514                 context.enter(modeBrowse(context));
122515             }
122516
122517
122518             mode.enter = function() {
122519                 context.install(behavior);
122520             };
122521
122522
122523             mode.exit = function() {
122524                 context.uninstall(behavior);
122525             };
122526
122527
122528             return mode;
122529         }
122530
122531         function uiConflicts(context) {
122532             var dispatch$1 = dispatch('cancel', 'save');
122533             var keybinding = utilKeybinding('conflicts');
122534             var _origChanges;
122535             var _conflictList;
122536
122537
122538             function keybindingOn() {
122539                 d3_select(document)
122540                     .call(keybinding.on('⎋', cancel, true));
122541             }
122542
122543             function keybindingOff() {
122544                 d3_select(document)
122545                     .call(keybinding.unbind);
122546             }
122547
122548             function tryAgain() {
122549                 keybindingOff();
122550                 dispatch$1.call('save');
122551             }
122552
122553             function cancel() {
122554                 keybindingOff();
122555                 dispatch$1.call('cancel');
122556             }
122557
122558
122559             function conflicts(selection) {
122560                 keybindingOn();
122561
122562                 var headerEnter = selection.selectAll('.header')
122563                     .data([0])
122564                     .enter()
122565                     .append('div')
122566                     .attr('class', 'header fillL');
122567
122568                 headerEnter
122569                     .append('button')
122570                     .attr('class', 'fr')
122571                     .on('click', cancel)
122572                     .call(svgIcon('#iD-icon-close'));
122573
122574                 headerEnter
122575                     .append('h3')
122576                     .text(t('save.conflict.header'));
122577
122578                 var bodyEnter = selection.selectAll('.body')
122579                     .data([0])
122580                     .enter()
122581                     .append('div')
122582                     .attr('class', 'body fillL');
122583
122584                 var conflictsHelpEnter = bodyEnter
122585                     .append('div')
122586                     .attr('class', 'conflicts-help')
122587                     .text(t('save.conflict.help'));
122588
122589
122590                 // Download changes link
122591                 var detected = utilDetect();
122592                 var changeset = new osmChangeset();
122593
122594                 delete changeset.id;  // Export without changeset_id
122595
122596                 var data = JXON.stringify(changeset.osmChangeJXON(_origChanges));
122597                 var blob = new Blob([data], { type: 'text/xml;charset=utf-8;' });
122598                 var fileName = 'changes.osc';
122599
122600                 var linkEnter = conflictsHelpEnter.selectAll('.download-changes')
122601                     .append('a')
122602                     .attr('class', 'download-changes');
122603
122604                 if (detected.download) {      // All except IE11 and Edge
122605                     linkEnter                 // download the data as a file
122606                         .attr('href', window.URL.createObjectURL(blob))
122607                         .attr('download', fileName);
122608
122609                 } else {                      // IE11 and Edge
122610                     linkEnter                 // open data uri in a new tab
122611                         .attr('target', '_blank')
122612                         .on('click.download', function() {
122613                             navigator.msSaveBlob(blob, fileName);
122614                         });
122615                 }
122616
122617                 linkEnter
122618                     .call(svgIcon('#iD-icon-load', 'inline'))
122619                     .append('span')
122620                     .text(t('save.conflict.download_changes'));
122621
122622
122623                 bodyEnter
122624                     .append('div')
122625                     .attr('class', 'conflict-container fillL3')
122626                     .call(showConflict, 0);
122627
122628                 bodyEnter
122629                     .append('div')
122630                     .attr('class', 'conflicts-done')
122631                     .attr('opacity', 0)
122632                     .style('display', 'none')
122633                     .text(t('save.conflict.done'));
122634
122635                 var buttonsEnter = bodyEnter
122636                     .append('div')
122637                     .attr('class','buttons col12 joined conflicts-buttons');
122638
122639                 buttonsEnter
122640                     .append('button')
122641                     .attr('disabled', _conflictList.length > 1)
122642                     .attr('class', 'action conflicts-button col6')
122643                     .text(t('save.title'))
122644                     .on('click.try_again', tryAgain);
122645
122646                 buttonsEnter
122647                     .append('button')
122648                     .attr('class', 'secondary-action conflicts-button col6')
122649                     .text(t('confirm.cancel'))
122650                     .on('click.cancel', cancel);
122651             }
122652
122653
122654             function showConflict(selection, index) {
122655                 index = utilWrap(index, _conflictList.length);
122656
122657                 var parent = d3_select(selection.node().parentNode);
122658
122659                 // enable save button if this is the last conflict being reviewed..
122660                 if (index === _conflictList.length - 1) {
122661                     window.setTimeout(function() {
122662                         parent.select('.conflicts-button')
122663                             .attr('disabled', null);
122664
122665                         parent.select('.conflicts-done')
122666                             .transition()
122667                             .attr('opacity', 1)
122668                             .style('display', 'block');
122669                     }, 250);
122670                 }
122671
122672                 var conflict = selection
122673                     .selectAll('.conflict')
122674                     .data([_conflictList[index]]);
122675
122676                 conflict.exit()
122677                     .remove();
122678
122679                 var conflictEnter = conflict.enter()
122680                     .append('div')
122681                     .attr('class', 'conflict');
122682
122683                 conflictEnter
122684                     .append('h4')
122685                     .attr('class', 'conflict-count')
122686                     .text(t('save.conflict.count', { num: index + 1, total: _conflictList.length }));
122687
122688                 conflictEnter
122689                     .append('a')
122690                     .attr('class', 'conflict-description')
122691                     .attr('href', '#')
122692                     .text(function(d) { return d.name; })
122693                     .on('click', function(d) {
122694                         event.preventDefault();
122695                         zoomToEntity(d.id);
122696                     });
122697
122698                 var details = conflictEnter
122699                     .append('div')
122700                     .attr('class', 'conflict-detail-container');
122701
122702                 details
122703                     .append('ul')
122704                     .attr('class', 'conflict-detail-list')
122705                     .selectAll('li')
122706                     .data(function(d) { return d.details || []; })
122707                     .enter()
122708                     .append('li')
122709                     .attr('class', 'conflict-detail-item')
122710                     .html(function(d) { return d; });
122711
122712                 details
122713                     .append('div')
122714                     .attr('class', 'conflict-choices')
122715                     .call(addChoices);
122716
122717                 details
122718                     .append('div')
122719                     .attr('class', 'conflict-nav-buttons joined cf')
122720                     .selectAll('button')
122721                     .data(['previous', 'next'])
122722                     .enter()
122723                     .append('button')
122724                     .text(function(d) { return t('save.conflict.' + d); })
122725                     .attr('class', 'conflict-nav-button action col6')
122726                     .attr('disabled', function(d, i) {
122727                         return (i === 0 && index === 0) ||
122728                             (i === 1 && index === _conflictList.length - 1) || null;
122729                     })
122730                     .on('click', function(d, i) {
122731                         event.preventDefault();
122732
122733                         var container = parent.selectAll('.conflict-container');
122734                         var sign = (i === 0 ? -1 : 1);
122735
122736                         container
122737                             .selectAll('.conflict')
122738                             .remove();
122739
122740                         container
122741                             .call(showConflict, index + sign);
122742                     });
122743
122744             }
122745
122746
122747             function addChoices(selection) {
122748                 var choices = selection
122749                     .append('ul')
122750                     .attr('class', 'layer-list')
122751                     .selectAll('li')
122752                     .data(function(d) { return d.choices || []; });
122753
122754                 // enter
122755                 var choicesEnter = choices.enter()
122756                     .append('li')
122757                     .attr('class', 'layer');
122758
122759                 var labelEnter = choicesEnter
122760                     .append('label');
122761
122762                 labelEnter
122763                     .append('input')
122764                     .attr('type', 'radio')
122765                     .attr('name', function(d) { return d.id; })
122766                     .on('change', function(d, i) {
122767                         var ul = this.parentNode.parentNode.parentNode;
122768                         ul.__data__.chosen = i;
122769                         choose(ul, d);
122770                     });
122771
122772                 labelEnter
122773                     .append('span')
122774                     .text(function(d) { return d.text; });
122775
122776                 // update
122777                 choicesEnter
122778                     .merge(choices)
122779                     .each(function(d, i) {
122780                         var ul = this.parentNode;
122781                         if (ul.__data__.chosen === i) {
122782                             choose(ul, d);
122783                         }
122784                     });
122785             }
122786
122787
122788             function choose(ul, datum) {
122789                 if (event) { event.preventDefault(); }
122790
122791                 d3_select(ul)
122792                     .selectAll('li')
122793                     .classed('active', function(d) { return d === datum; })
122794                     .selectAll('input')
122795                     .property('checked', function(d) { return d === datum; });
122796
122797                 var extent = geoExtent();
122798                 var entity;
122799
122800                 entity = context.graph().hasEntity(datum.id);
122801                 if (entity) { extent._extend(entity.extent(context.graph())); }
122802
122803                 datum.action();
122804
122805                 entity = context.graph().hasEntity(datum.id);
122806                 if (entity) { extent._extend(entity.extent(context.graph())); }
122807
122808                 zoomToEntity(datum.id, extent);
122809             }
122810
122811
122812             function zoomToEntity(id, extent) {
122813                 context.surface().selectAll('.hover')
122814                     .classed('hover', false);
122815
122816                 var entity = context.graph().hasEntity(id);
122817                 if (entity) {
122818                     if (extent) {
122819                         context.map().trimmedExtent(extent);
122820                     } else {
122821                         context.map().zoomToEase(entity);
122822                     }
122823                     context.surface().selectAll(utilEntityOrMemberSelector([entity.id], context.graph()))
122824                         .classed('hover', true);
122825                 }
122826             }
122827
122828
122829             // The conflict list should be an array of objects like:
122830             // {
122831             //     id: id,
122832             //     name: entityName(local),
122833             //     details: merge.conflicts(),
122834             //     chosen: 1,
122835             //     choices: [
122836             //         choice(id, keepMine, forceLocal),
122837             //         choice(id, keepTheirs, forceRemote)
122838             //     ]
122839             // }
122840             conflicts.conflictList = function(_) {
122841                 if (!arguments.length) { return _conflictList; }
122842                 _conflictList = _;
122843                 return conflicts;
122844             };
122845
122846
122847             conflicts.origChanges = function(_) {
122848                 if (!arguments.length) { return _origChanges; }
122849                 _origChanges = _;
122850                 return conflicts;
122851             };
122852
122853
122854             return utilRebind(conflicts, dispatch$1, 'on');
122855         }
122856
122857         function uiChangesetEditor(context) {
122858             var dispatch$1 = dispatch('change');
122859             var formFields = uiFormFields(context);
122860             var commentCombo = uiCombobox(context, 'comment').caseSensitive(true);
122861             var _fieldsArr;
122862             var _tags;
122863             var _changesetID;
122864
122865
122866             function changesetEditor(selection) {
122867                 render(selection);
122868             }
122869
122870
122871             function render(selection) {
122872                 var initial = false;
122873
122874                 if (!_fieldsArr) {
122875                     initial = true;
122876                     var presets = context.presets();
122877
122878                     _fieldsArr = [
122879                         uiField(context, presets.field('comment'), null, { show: true, revert: false }),
122880                         uiField(context, presets.field('source'), null, { show: false, revert: false }),
122881                         uiField(context, presets.field('hashtags'), null, { show: false, revert: false }) ];
122882
122883                     _fieldsArr.forEach(function(field) {
122884                         field
122885                             .on('change', function(t, onInput) {
122886                                 dispatch$1.call('change', field, t, onInput);
122887                             });
122888                     });
122889                 }
122890
122891                 _fieldsArr.forEach(function(field) {
122892                     field
122893                         .tags(_tags);
122894                 });
122895
122896
122897                 selection
122898                     .call(formFields.fieldsArr(_fieldsArr));
122899
122900
122901                 if (initial) {
122902                     var commentField = selection.select('#preset-input-comment');
122903                     var commentNode = commentField.node();
122904
122905                     if (commentNode) {
122906                         commentNode.focus();
122907                         commentNode.select();
122908                     }
122909
122910                     // trigger a 'blur' event so that comment field can be cleaned
122911                     // and checked for hashtags, even if retrieved from localstorage
122912                     utilTriggerEvent(commentField, 'blur');
122913
122914                     var osm = context.connection();
122915                     if (osm) {
122916                         osm.userChangesets(function (err, changesets) {
122917                             if (err) { return; }
122918
122919                             var comments = changesets.map(function(changeset) {
122920                                 var comment = changeset.tags.comment;
122921                                 return comment ? { title: comment, value: comment } : null;
122922                             }).filter(Boolean);
122923
122924                             commentField
122925                                 .call(commentCombo
122926                                     .data(utilArrayUniqBy(comments, 'title'))
122927                                 );
122928                         });
122929                     }
122930                 }
122931
122932                 // Add warning if comment mentions Google
122933                 var hasGoogle = _tags.comment.match(/google/i);
122934                 var commentWarning = selection.select('.form-field-comment').selectAll('.comment-warning')
122935                     .data(hasGoogle ? [0] : []);
122936
122937                 commentWarning.exit()
122938                     .transition()
122939                     .duration(200)
122940                     .style('opacity', 0)
122941                     .remove();
122942
122943                 var commentEnter = commentWarning.enter()
122944                     .insert('div', '.tag-reference-body')
122945                     .attr('class', 'field-warning comment-warning')
122946                     .style('opacity', 0);
122947
122948                 commentEnter
122949                     .append('a')
122950                     .attr('target', '_blank')
122951                     .attr('tabindex', -1)
122952                     .call(svgIcon('#iD-icon-alert', 'inline'))
122953                     .attr('href', t('commit.google_warning_link'))
122954                     .append('span')
122955                     .text(t('commit.google_warning'));
122956
122957                 commentEnter
122958                     .transition()
122959                     .duration(200)
122960                     .style('opacity', 1);
122961             }
122962
122963
122964             changesetEditor.tags = function(_) {
122965                 if (!arguments.length) { return _tags; }
122966                 _tags = _;
122967                 // Don't reset _fieldsArr here.
122968                 return changesetEditor;
122969             };
122970
122971
122972             changesetEditor.changesetID = function(_) {
122973                 if (!arguments.length) { return _changesetID; }
122974                 if (_changesetID === _) { return changesetEditor; }
122975                 _changesetID = _;
122976                 _fieldsArr = null;
122977                 return changesetEditor;
122978             };
122979
122980
122981             return utilRebind(changesetEditor, dispatch$1, 'on');
122982         }
122983
122984         function uiCommitChanges(context) {
122985             var detected = utilDetect();
122986             var _entityID;
122987
122988
122989             function commitChanges(selection) {
122990                 var history = context.history();
122991                 var summary = history.difference().summary();
122992
122993                 var container = selection.selectAll('.modal-section.commit-section')
122994                     .data([0]);
122995
122996                 var containerEnter = container.enter()
122997                     .append('div')
122998                     .attr('class', 'commit-section modal-section fillL2');
122999
123000                 containerEnter
123001                     .append('h3')
123002                     .text(t('commit.changes', { count: summary.length }));
123003
123004                 containerEnter
123005                     .append('ul')
123006                     .attr('class', 'changeset-list');
123007
123008                 container = containerEnter
123009                     .merge(container);
123010
123011
123012                 var items = container.select('ul').selectAll('li')
123013                     .data(summary);
123014
123015                 var itemsEnter = items.enter()
123016                     .append('li')
123017                     .attr('class', 'change-item');
123018
123019                 itemsEnter
123020                     .each(function(d) {
123021                         d3_select(this)
123022                             .call(svgIcon('#iD-icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType));
123023                     });
123024
123025                 itemsEnter
123026                     .append('span')
123027                     .attr('class', 'change-type')
123028                     .text(function(d) { return t('commit.' + d.changeType) + ' '; });
123029
123030                 itemsEnter
123031                     .append('strong')
123032                     .attr('class', 'entity-type')
123033                     .text(function(d) {
123034                         var matched = context.presets().match(d.entity, d.graph);
123035                         return (matched && matched.name()) || utilDisplayType(d.entity.id);
123036                     });
123037
123038                 itemsEnter
123039                     .append('span')
123040                     .attr('class', 'entity-name')
123041                     .text(function(d) {
123042                         var name = utilDisplayName(d.entity) || '',
123043                             string = '';
123044                         if (name !== '') {
123045                             string += ':';
123046                         }
123047                         return string += ' ' + name;
123048                     });
123049
123050                 itemsEnter
123051                     .style('opacity', 0)
123052                     .transition()
123053                     .style('opacity', 1);
123054
123055                 items = itemsEnter
123056                     .merge(items);
123057
123058                 items
123059                     .on('mouseover', mouseover)
123060                     .on('mouseout', mouseout)
123061                     .on('click', click);
123062
123063
123064                 // Download changeset link
123065                 var changeset = new osmChangeset().update({ id: undefined });
123066                 var changes = history.changes(actionDiscardTags(history.difference()));
123067
123068                 delete changeset.id;  // Export without chnageset_id
123069
123070                 var data = JXON.stringify(changeset.osmChangeJXON(changes));
123071                 var blob = new Blob([data], {type: 'text/xml;charset=utf-8;'});
123072                 var fileName = 'changes.osc';
123073
123074                 var linkEnter = container.selectAll('.download-changes')
123075                     .data([0])
123076                     .enter()
123077                     .append('a')
123078                     .attr('class', 'download-changes');
123079
123080                 if (detected.download) {      // All except IE11 and Edge
123081                     linkEnter                 // download the data as a file
123082                         .attr('href', window.URL.createObjectURL(blob))
123083                         .attr('download', fileName);
123084
123085                 } else {                      // IE11 and Edge
123086                     linkEnter                 // open data uri in a new tab
123087                         .attr('target', '_blank')
123088                         .on('click.download', function() {
123089                             navigator.msSaveBlob(blob, fileName);
123090                         });
123091                 }
123092
123093                 linkEnter
123094                     .call(svgIcon('#iD-icon-load', 'inline'))
123095                     .append('span')
123096                     .text(t('commit.download_changes'));
123097
123098
123099                 function mouseover(d) {
123100                     if (d.entity) {
123101                         context.surface().selectAll(
123102                             utilEntityOrMemberSelector([d.entity.id], context.graph())
123103                         ).classed('hover', true);
123104                     }
123105                 }
123106
123107
123108                 function mouseout() {
123109                     context.surface().selectAll('.hover')
123110                         .classed('hover', false);
123111                 }
123112
123113
123114                 function click(change) {
123115                     if (change.changeType === 'deleted') {
123116                         _entityID = null;
123117                     } else {
123118                         var entity = change.entity;
123119                         _entityID = change.entity.id;
123120                         context.map().zoomToEase(entity);
123121                         context.surface().selectAll(utilEntityOrMemberSelector([_entityID], context.graph()))
123122                             .classed('hover', true);
123123                     }
123124                 }
123125             }
123126
123127
123128             commitChanges.entityID = function(_) {
123129                 if (!arguments.length) { return _entityID; }
123130                 _entityID = _;
123131                 return commitChanges;
123132             };
123133
123134
123135             return commitChanges;
123136         }
123137
123138         function uiCommitWarnings(context) {
123139
123140             function commitWarnings(selection) {
123141                 var issuesBySeverity = context.validator()
123142                     .getIssuesBySeverity({ what: 'edited', where: 'all', includeDisabledRules: true });
123143
123144                 for (var severity in issuesBySeverity) {
123145                     var issues = issuesBySeverity[severity];
123146                     var section = severity + '-section';
123147                     var issueItem = severity + '-item';
123148
123149                     var container = selection.selectAll('.' + section)
123150                         .data(issues.length ? [0] : []);
123151
123152                     container.exit()
123153                         .remove();
123154
123155                     var containerEnter = container.enter()
123156                         .append('div')
123157                         .attr('class', 'modal-section ' + section + ' fillL2');
123158
123159                     containerEnter
123160                         .append('h3')
123161                         .text(severity === 'warning' ? t('commit.warnings') : t('commit.errors'));
123162
123163                     containerEnter
123164                         .append('ul')
123165                         .attr('class', 'changeset-list');
123166
123167                     container = containerEnter
123168                         .merge(container);
123169
123170
123171                     var items = container.select('ul').selectAll('li')
123172                         .data(issues, function(d) { return d.id; });
123173
123174                     items.exit()
123175                         .remove();
123176
123177                     var itemsEnter = items.enter()
123178                         .append('li')
123179                         .attr('class', issueItem);
123180
123181                     itemsEnter
123182                         .call(svgIcon('#iD-icon-alert', 'pre-text'));
123183
123184                     itemsEnter
123185                         .append('strong')
123186                         .attr('class', 'issue-message');
123187
123188                     itemsEnter.filter(function(d) { return d.tooltip; })
123189                         .call(tooltip()
123190                             .title(function(d) { return d.tooltip; })
123191                             .placement('top')
123192                         );
123193
123194                     items = itemsEnter
123195                         .merge(items);
123196
123197                     items.selectAll('.issue-message')
123198                         .text(function(d) {
123199                             return d.message(context);
123200                         });
123201
123202                     items
123203                         .on('mouseover', function(d) {
123204                             if (d.entityIds) {
123205                                 context.surface().selectAll(
123206                                     utilEntityOrMemberSelector(
123207                                         d.entityIds,
123208                                         context.graph()
123209                                     )
123210                                 ).classed('hover', true);
123211                             }
123212                         })
123213                         .on('mouseout', function() {
123214                             context.surface().selectAll('.hover')
123215                                 .classed('hover', false);
123216                         })
123217                         .on('click', function(d) {
123218                             context.validator().focusIssue(d);
123219                         });
123220                 }
123221             }
123222
123223
123224             return commitWarnings;
123225         }
123226
123227         var _changeset$1;
123228         var readOnlyTags = [
123229             /^changesets_count$/,
123230             /^created_by$/,
123231             /^ideditor:/,
123232             /^imagery_used$/,
123233             /^host$/,
123234             /^locale$/,
123235             /^warnings:/,
123236             /^resolved:/
123237         ];
123238
123239         // treat most punctuation (except -, _, +, &) as hashtag delimiters - #4398
123240         // from https://stackoverflow.com/a/25575009
123241         var hashtagRegex = /(#[^\u2000-\u206F\u2E00-\u2E7F\s\\'!"#$%()*,.\/:;<=>?@\[\]^`{|}~]+)/g;
123242
123243
123244         function uiCommit(context) {
123245             var dispatch$1 = dispatch('cancel', 'save');
123246             var _userDetails;
123247             var _selection;
123248
123249             var changesetEditor = uiChangesetEditor(context)
123250                 .on('change', changeTags);
123251             var rawTagEditor = uiRawTagEditor(context)
123252                 .on('change', changeTags);
123253             var commitChanges = uiCommitChanges(context);
123254             var commitWarnings = uiCommitWarnings(context);
123255
123256
123257             function commit(selection) {
123258                 _selection = selection;
123259
123260                 var osm = context.connection();
123261                 if (!osm) { return; }
123262
123263                 // expire stored comment, hashtags, source after cutoff datetime - #3947 #4899
123264                 var commentDate = +context.storage('commentDate') || 0;
123265                 var currDate = Date.now();
123266                 var cutoff = 2 * 86400 * 1000;   // 2 days
123267                 if (commentDate > currDate || currDate - commentDate > cutoff) {
123268                     context.storage('comment', null);
123269                     context.storage('hashtags', null);
123270                     context.storage('source', null);
123271                 }
123272
123273                 var tags;
123274                 // Initialize changeset if one does not exist yet.
123275                 // Also pull values from local storage.
123276                 if (!_changeset$1) {
123277
123278                     // load in the URL hash values, if any
123279                     var hash = context.ui().hash;
123280                     if (hash.comment) {
123281                         context.storage('comment', hash.comment);
123282                         context.storage('commentDate', Date.now());
123283                     }
123284                     if (hash.source) {
123285                         context.storage('source', hash.source);
123286                         context.storage('commentDate', Date.now());
123287                     }
123288                     if (hash.hashtags) {
123289                         context.storage('hashtags', hash.hashtags);
123290                     }
123291
123292                     var detected = utilDetect();
123293                     tags = {
123294                         comment: context.storage('comment') || '',
123295                         created_by: ('iD ' + context.version).substr(0, 255),
123296                         host: detected.host.substr(0, 255),
123297                         locale: detected.locale.substr(0, 255)
123298                     };
123299
123300                     // call findHashtags initially - this will remove stored
123301                     // hashtags if any hashtags are found in the comment - #4304
123302                     findHashtags(tags, true);
123303
123304                     var hashtags = context.storage('hashtags');
123305                     if (hashtags) {
123306                         tags.hashtags = hashtags;
123307                     }
123308
123309                     var source = context.storage('source');
123310                     if (source) {
123311                         tags.source = source;
123312                     }
123313                     var photoOverlaysUsed = context.history().photoOverlaysUsed();
123314                     if (photoOverlaysUsed.length) {
123315                         var sources = (tags.source || '').split(';');
123316
123317                         // include this tag for any photo layer
123318                         if (sources.indexOf('streetlevel imagery') === -1) {
123319                             sources.push('streetlevel imagery');
123320                         }
123321
123322                         // add the photo overlays used during editing as sources
123323                         photoOverlaysUsed.forEach(function(photoOverlay) {
123324                             if (sources.indexOf(photoOverlay) === -1) {
123325                                 sources.push(photoOverlay);
123326                             }
123327                         });
123328
123329                         tags.source = sources.join(';').substr(0, 255);
123330                     }
123331
123332                     _changeset$1 = new osmChangeset({ tags: tags });
123333                 }
123334
123335                 tags = Object.assign({}, _changeset$1.tags);   // shallow copy
123336
123337                 // assign tags for imagery used
123338                 var imageryUsed = context.history().imageryUsed().join(';').substr(0, 255);
123339                 tags.imagery_used = imageryUsed || 'None';
123340
123341                 // assign tags for closed issues and notes
123342                 var osmClosed = osm.getClosedIDs();
123343                 if (osmClosed.length) {
123344                     tags['closed:note'] = osmClosed.join(';').substr(0, 255);
123345                 }
123346                 if (services$1.keepRight) {
123347                     var krClosed = services$1.keepRight.getClosedIDs();
123348                     if (krClosed.length) {
123349                         tags['closed:keepright'] = krClosed.join(';').substr(0, 255);
123350                     }
123351                 }
123352                 if (services$1.improveOSM) {
123353                     var iOsmClosed = services$1.improveOSM.getClosedIDs();
123354                     if (iOsmClosed.length) {
123355                         tags['closed:improveosm'] = iOsmClosed.join(';').substr(0, 255);
123356                     }
123357                 }
123358
123359                 // remove existing issue counts
123360                 for (var key in tags) {
123361                     if (key.match(/(^warnings:)|(^resolved:)/)) {
123362                         delete tags[key];
123363                     }
123364                 }
123365
123366                 function addIssueCounts(issues, prefix) {
123367                     var issuesByType = utilArrayGroupBy(issues, 'type');
123368                     for (var issueType in issuesByType) {
123369                         var issuesOfType = issuesByType[issueType];
123370                         if (issuesOfType[0].subtype) {
123371                             var issuesBySubtype = utilArrayGroupBy(issuesOfType, 'subtype');
123372                             for (var issueSubtype in issuesBySubtype) {
123373                                 var issuesOfSubtype = issuesBySubtype[issueSubtype];
123374                                 tags[prefix + ':' + issueType + ':' + issueSubtype] = issuesOfSubtype.length.toString().substr(0, 255);
123375                             }
123376                         } else {
123377                             tags[prefix + ':' + issueType] = issuesOfType.length.toString().substr(0, 255);
123378                         }
123379                     }
123380                 }
123381
123382                 // add counts of warnings generated by the user's edits
123383                 var warnings = context.validator()
123384                     .getIssuesBySeverity({ what: 'edited', where: 'all', includeIgnored: true, includeDisabledRules: true }).warning;
123385                 addIssueCounts(warnings, 'warnings');
123386
123387                 // add counts of issues resolved by the user's edits
123388                 var resolvedIssues = context.validator().getResolvedIssues();
123389                 addIssueCounts(resolvedIssues, 'resolved');
123390
123391                 _changeset$1 = _changeset$1.update({ tags: tags });
123392
123393                 var header = selection.selectAll('.header')
123394                     .data([0]);
123395
123396                 var headerTitle = header.enter()
123397                     .append('div')
123398                     .attr('class', 'header fillL header-container');
123399
123400                 headerTitle
123401                     .append('div')
123402                     .attr('class', 'header-block header-block-outer');
123403
123404                 headerTitle
123405                     .append('div')
123406                     .attr('class', 'header-block')
123407                     .append('h3')
123408                     .text(t('commit.title'));
123409
123410                 headerTitle
123411                     .append('div')
123412                     .attr('class', 'header-block header-block-outer header-block-close')
123413                     .append('button')
123414                     .attr('class', 'close')
123415                     .on('click', function() { context.enter(modeBrowse(context)); })
123416                     .call(svgIcon('#iD-icon-close'));
123417
123418                 var body = selection.selectAll('.body')
123419                     .data([0]);
123420
123421                 body = body.enter()
123422                     .append('div')
123423                     .attr('class', 'body')
123424                     .merge(body);
123425
123426
123427                 // Changeset Section
123428                 var changesetSection = body.selectAll('.changeset-editor')
123429                     .data([0]);
123430
123431                 changesetSection = changesetSection.enter()
123432                     .append('div')
123433                     .attr('class', 'modal-section changeset-editor')
123434                     .merge(changesetSection);
123435
123436                 changesetSection
123437                     .call(changesetEditor
123438                         .changesetID(_changeset$1.id)
123439                         .tags(tags)
123440                     );
123441
123442
123443                 // Warnings
123444                 body.call(commitWarnings);
123445
123446
123447                 // Upload Explanation
123448                 var saveSection = body.selectAll('.save-section')
123449                     .data([0]);
123450
123451                 saveSection = saveSection.enter()
123452                     .append('div')
123453                     .attr('class','modal-section save-section fillL cf')
123454                     .merge(saveSection);
123455
123456                 var prose = saveSection.selectAll('.commit-info')
123457                     .data([0]);
123458
123459                 if (prose.enter().size()) {   // first time, make sure to update user details in prose
123460                     _userDetails = null;
123461                 }
123462
123463                 prose = prose.enter()
123464                     .append('p')
123465                     .attr('class', 'commit-info')
123466                     .text(t('commit.upload_explanation'))
123467                     .merge(prose);
123468
123469                 // always check if this has changed, but only update prose.html()
123470                 // if needed, because it can trigger a style recalculation
123471                 osm.userDetails(function(err, user) {
123472                     if (err) { return; }
123473
123474                     if (_userDetails === user) { return; }  // no change
123475                     _userDetails = user;
123476
123477                     var userLink = d3_select(document.createElement('div'));
123478
123479                     if (user.image_url) {
123480                         userLink
123481                             .append('img')
123482                             .attr('src', user.image_url)
123483                             .attr('class', 'icon pre-text user-icon');
123484                     }
123485
123486                     userLink
123487                         .append('a')
123488                         .attr('class', 'user-info')
123489                         .text(user.display_name)
123490                         .attr('href', osm.userURL(user.display_name))
123491                         .attr('target', '_blank');
123492
123493                     prose
123494                         .html(t('commit.upload_explanation_with_user', { user: userLink.html() }));
123495                 });
123496
123497
123498                 // Request Review
123499                 var requestReview = saveSection.selectAll('.request-review')
123500                     .data([0]);
123501
123502                 // Enter
123503                 var requestReviewEnter = requestReview.enter()
123504                     .append('div')
123505                     .attr('class', 'request-review');
123506
123507                 var labelEnter = requestReviewEnter
123508                     .append('label')
123509                     .attr('for', 'commit-input-request-review');
123510
123511                 labelEnter
123512                     .append('input')
123513                     .attr('type', 'checkbox')
123514                     .attr('id', 'commit-input-request-review');
123515
123516                 labelEnter
123517                     .append('span')
123518                     .text(t('commit.request_review'));
123519
123520                 // Update
123521                 requestReview = requestReview
123522                     .merge(requestReviewEnter);
123523
123524                 var requestReviewInput = requestReview.selectAll('input')
123525                     .property('checked', isReviewRequested(_changeset$1.tags))
123526                     .on('change', toggleRequestReview);
123527
123528
123529                 // Buttons
123530                 var buttonSection = saveSection.selectAll('.buttons')
123531                     .data([0]);
123532
123533                 // enter
123534                 var buttonEnter = buttonSection.enter()
123535                     .append('div')
123536                     .attr('class', 'buttons fillL cf');
123537
123538                 buttonEnter
123539                     .append('button')
123540                     .attr('class', 'secondary-action button cancel-button')
123541                     .append('span')
123542                     .attr('class', 'label')
123543                     .text(t('commit.cancel'));
123544
123545                 var uploadButton = buttonEnter
123546                     .append('button')
123547                     .attr('class', 'action button save-button');
123548
123549                 uploadButton.append('span')
123550                     .attr('class', 'label')
123551                     .text(t('commit.save'));
123552
123553                 var uploadBlockerTooltipText = getUploadBlockerMessage();
123554
123555                 // update
123556                 buttonSection = buttonSection
123557                     .merge(buttonEnter);
123558
123559                 buttonSection.selectAll('.cancel-button')
123560                     .on('click.cancel', function() {
123561                         var selectedID = commitChanges.entityID();
123562                         dispatch$1.call('cancel', this, selectedID);
123563                     });
123564
123565                 buttonSection.selectAll('.save-button')
123566                     .classed('disabled', uploadBlockerTooltipText !== null)
123567                     .on('click.save', function() {
123568                         if (!d3_select(this).classed('disabled')) {
123569                             this.blur();    // avoid keeping focus on the button - #4641
123570                             dispatch$1.call('save', this, _changeset$1);
123571                         }
123572                     });
123573
123574                 // remove any existing tooltip
123575                 tooltip().destroyAny(buttonSection.selectAll('.save-button'));
123576
123577                 if (uploadBlockerTooltipText) {
123578                     buttonSection.selectAll('.save-button')
123579                         .call(tooltip().title(uploadBlockerTooltipText).placement('top'));
123580                 }
123581
123582                 // Raw Tag Editor
123583                 var tagSection = body.selectAll('.tag-section.raw-tag-editor')
123584                     .data([0]);
123585
123586                 tagSection = tagSection.enter()
123587                     .append('div')
123588                     .attr('class', 'modal-section tag-section raw-tag-editor')
123589                     .merge(tagSection);
123590
123591                 var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
123592                 tagSection
123593                     .call(rawTagEditor
123594                         .expanded(expanded)
123595                         .readOnlyTags(readOnlyTags)
123596                         .tags(Object.assign({}, _changeset$1.tags))   // shallow copy
123597                     );
123598
123599
123600                 // Change summary
123601                 body.call(commitChanges);
123602
123603
123604                 function toggleRequestReview() {
123605                     var rr = requestReviewInput.property('checked');
123606                     updateChangeset({ review_requested: (rr ? 'yes' : undefined) });
123607
123608                     var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
123609                     tagSection
123610                         .call(rawTagEditor
123611                             .expanded(expanded)
123612                             .readOnlyTags(readOnlyTags)
123613                             .tags(Object.assign({}, _changeset$1.tags))   // shallow copy
123614                         );
123615                 }
123616             }
123617
123618
123619             function getUploadBlockerMessage() {
123620                 var errors = context.validator()
123621                     .getIssuesBySeverity({ what: 'edited', where: 'all' }).error;
123622
123623                 if (errors.length) {
123624                     return t('commit.outstanding_errors_message', { count: errors.length });
123625
123626                 } else {
123627                     var n = d3_select('#preset-input-comment').node();
123628                     var hasChangesetComment = n && n.value.length > 0;
123629                     if (!hasChangesetComment) {
123630                         return t('commit.comment_needed_message');
123631                     }
123632                 }
123633                 return null;
123634             }
123635
123636
123637             function changeTags(changed, onInput) {
123638                 if (changed.hasOwnProperty('comment')) {
123639                     if (changed.comment === undefined) {
123640                         changed.comment = '';
123641                     }
123642                     if (!onInput) {
123643                         context.storage('comment', changed.comment);
123644                         context.storage('commentDate', Date.now());
123645                     }
123646                 }
123647                 if (changed.hasOwnProperty('source')) {
123648                     if (changed.source === undefined) {
123649                         context.storage('source', null);
123650                     } else if (!onInput) {
123651                         context.storage('source', changed.source);
123652                         context.storage('commentDate', Date.now());
123653                     }
123654                 }
123655
123656                 updateChangeset(changed, onInput);
123657
123658                 if (_selection) {
123659                     _selection.call(commit);
123660                 }
123661             }
123662
123663
123664             function findHashtags(tags, commentOnly) {
123665                 var inComment = commentTags();
123666                 var inHashTags = hashTags();
123667
123668                 if (inComment !== null) {                    // when hashtags are detected in comment...
123669                     context.storage('hashtags', null);       // always remove stored hashtags - #4304
123670                     if (commentOnly) { inHashTags = []; }    // optionally override hashtags field
123671                 }
123672
123673                 // keep only one copy of the tags
123674                 var all = new Set();
123675                 var keepTags = [];
123676                 inComment.forEach(checkTag);
123677                 inHashTags.forEach(checkTag);
123678                 return keepTags;
123679
123680                 // Compare tags as lowercase strings, but keep original case tags
123681                 function checkTag(s) {
123682                     var compare = s.toLowerCase();
123683                     if (!all.has(compare)) {
123684                         all.add(compare);
123685                         keepTags.push(s);
123686                     }
123687                 }
123688
123689                 // Extract hashtags from `comment`
123690                 function commentTags() {
123691                     var matches = (tags.comment || '')
123692                         .replace(/http\S*/g, '')  // drop anything that looks like a URL - #4289
123693                         .match(hashtagRegex);
123694
123695                     return (matches || []);
123696                 }
123697
123698                 // Extract and clean hashtags from `hashtags`
123699                 function hashTags() {
123700                     var matches = (tags.hashtags || '')
123701                         .split(/[,;\s]+/)
123702                         .map(function (s) {
123703                             if (s[0] !== '#') { s = '#' + s; }    // prepend '#'
123704                             var matched = s.match(hashtagRegex);
123705                             return matched && matched[0];
123706                         }).filter(Boolean);                       // exclude falsy
123707
123708                     return (matches || []);
123709                 }
123710             }
123711
123712
123713             function isReviewRequested(tags) {
123714                 var rr = tags.review_requested;
123715                 if (rr === undefined) { return false; }
123716                 rr = rr.trim().toLowerCase();
123717                 return !(rr === '' || rr === 'no');
123718             }
123719
123720
123721             function updateChangeset(changed, onInput) {
123722                 var tags = Object.assign({}, _changeset$1.tags);   // shallow copy
123723
123724                 Object.keys(changed).forEach(function(k) {
123725                     var v = changed[k];
123726                     k = k.trim().substr(0, 255);
123727                     if (readOnlyTags.indexOf(k) !== -1) { return; }
123728
123729                     if (k !== '' && v !== undefined) {
123730                         if (onInput) {
123731                             tags[k] = v;
123732                         } else {
123733                             tags[k] = v.trim().substr(0, 255);
123734                         }
123735                     } else {
123736                         delete tags[k];
123737                     }
123738                 });
123739
123740                 if (!onInput) {
123741                     // when changing the comment, override hashtags with any found in comment.
123742                     var commentOnly = changed.hasOwnProperty('comment') && (changed.comment !== '');
123743                     var arr = findHashtags(tags, commentOnly);
123744                     if (arr.length) {
123745                         tags.hashtags = arr.join(';').substr(0, 255);
123746                         context.storage('hashtags', tags.hashtags);
123747                     } else {
123748                         delete tags.hashtags;
123749                         context.storage('hashtags', null);
123750                     }
123751                 }
123752
123753                 // always update userdetails, just in case user reauthenticates as someone else
123754                 if (_userDetails && _userDetails.changesets_count !== undefined) {
123755                     var changesetsCount = parseInt(_userDetails.changesets_count, 10) + 1;  // #4283
123756                     tags.changesets_count = String(changesetsCount);
123757
123758                     // first 100 edits - new user
123759                     if (changesetsCount <= 100) {
123760                         var s;
123761                         s = context.storage('walkthrough_completed');
123762                         if (s) {
123763                             tags['ideditor:walkthrough_completed'] = s;
123764                         }
123765
123766                         s = context.storage('walkthrough_progress');
123767                         if (s) {
123768                             tags['ideditor:walkthrough_progress'] = s;
123769                         }
123770
123771                         s = context.storage('walkthrough_started');
123772                         if (s) {
123773                             tags['ideditor:walkthrough_started'] = s;
123774                         }
123775                     }
123776                 } else {
123777                     delete tags.changesets_count;
123778                 }
123779
123780                 if (!fastDeepEqual(_changeset$1.tags, tags)) {
123781                     _changeset$1 = _changeset$1.update({ tags: tags });
123782                 }
123783             }
123784
123785
123786             commit.reset = function() {
123787                 _changeset$1 = null;
123788             };
123789
123790
123791             return utilRebind(commit, dispatch$1, 'on');
123792         }
123793
123794         function uiSuccess(context) {
123795           var arguments$1 = arguments;
123796
123797           var MAXEVENTS = 2;
123798           var detected = utilDetect();
123799           var dispatch$1 = dispatch('cancel');
123800           var _changeset;
123801           var _location;
123802
123803
123804           // string-to-date parsing in JavaScript is weird
123805           function parseEventDate(when) {
123806             if (!when) { return; }
123807
123808             var raw = when.trim();
123809             if (!raw) { return; }
123810
123811             if (!/Z$/.test(raw)) {   // if no trailing 'Z', add one
123812               raw += 'Z';            // this forces date to be parsed as a UTC date
123813             }
123814
123815             var parsed = new Date(raw);
123816             return new Date(parsed.toUTCString().substr(0, 25));  // convert to local timezone
123817           }
123818
123819
123820           function success(selection) {
123821             var header = selection
123822               .append('div')
123823               .attr('class', 'header fillL');
123824
123825             header
123826               .append('button')
123827               .attr('class', 'fr')
123828               .on('click', function () { return dispatch$1.call('cancel'); })
123829               .call(svgIcon('#iD-icon-close'));
123830
123831             header
123832               .append('h3')
123833               .text(t('success.just_edited'));
123834
123835             var body = selection
123836               .append('div')
123837               .attr('class', 'body save-success fillL');
123838
123839             var summary = body
123840               .append('div')
123841               .attr('class', 'save-summary');
123842
123843             summary
123844               .append('h3')
123845               .text(t('success.thank_you' + (_location ? '_location' : ''), { where: _location }));
123846
123847             summary
123848               .append('p')
123849               .text(t('success.help_html'))
123850               .append('a')
123851               .attr('class', 'link-out')
123852               .attr('target', '_blank')
123853               .attr('tabindex', -1)
123854               .attr('href', t('success.help_link_url'))
123855               .call(svgIcon('#iD-icon-out-link', 'inline'))
123856               .append('span')
123857               .text(t('success.help_link_text'));
123858
123859             var osm = context.connection();
123860             if (!osm) { return; }
123861
123862             var changesetURL = osm.changesetURL(_changeset.id);
123863
123864             var table = summary
123865               .append('table')
123866               .attr('class', 'summary-table');
123867
123868             var row = table
123869               .append('tr')
123870               .attr('class', 'summary-row');
123871
123872             row
123873               .append('td')
123874               .attr('class', 'cell-icon summary-icon')
123875               .append('a')
123876               .attr('target', '_blank')
123877               .attr('href', changesetURL)
123878               .append('svg')
123879               .attr('class', 'logo-small')
123880               .append('use')
123881               .attr('xlink:href', '#iD-logo-osm');
123882
123883             var summaryDetail = row
123884               .append('td')
123885               .attr('class', 'cell-detail summary-detail');
123886
123887             summaryDetail
123888               .append('a')
123889               .attr('class', 'cell-detail summary-view-on-osm')
123890               .attr('target', '_blank')
123891               .attr('href', changesetURL)
123892               .text(t('success.view_on_osm'));
123893
123894             summaryDetail
123895               .append('div')
123896               .html(t('success.changeset_id', {
123897                 changeset_id: ("<a href=\"" + changesetURL + "\" target=\"_blank\">" + (_changeset.id) + "</a>")
123898               }));
123899
123900
123901             // Get community index features intersecting the map..
123902             var communities = [];
123903             var properties = data.community.query(context.map().center(), true) || [];
123904
123905             // Gather the communities from the result
123906             properties.forEach(function (props) {
123907               var resourceIDs = Array.from(props.resourceIDs);
123908               resourceIDs.forEach(function (resourceID) {
123909                 var resource = data.community.resources[resourceID];
123910                 communities.push({
123911                   area: props.area || Infinity,
123912                   order: resource.order || 0,
123913                   resource: resource
123914                 });
123915               });
123916             });
123917
123918             // sort communities by feature area ascending, community order descending
123919             communities.sort(function (a, b) { return a.area - b.area || b.order - a.order; });
123920
123921             body
123922               .call(showCommunityLinks, communities.map(function (c) { return c.resource; }));
123923           }
123924
123925
123926           function showCommunityLinks(selection, resources) {
123927             var communityLinks = selection
123928               .append('div')
123929               .attr('class', 'save-communityLinks');
123930
123931             communityLinks
123932               .append('h3')
123933               .text(t('success.like_osm'));
123934
123935             var table = communityLinks
123936               .append('table')
123937               .attr('class', 'community-table');
123938
123939             var row = table.selectAll('.community-row')
123940               .data(resources);
123941
123942             var rowEnter = row.enter()
123943               .append('tr')
123944               .attr('class', 'community-row');
123945
123946             rowEnter
123947               .append('td')
123948               .attr('class', 'cell-icon community-icon')
123949               .append('a')
123950               .attr('target', '_blank')
123951               .attr('href', function (d) { return d.url; })
123952               .append('svg')
123953               .attr('class', 'logo-small')
123954               .append('use')
123955               .attr('xlink:href', function (d) { return ("#community-" + (d.type)); });
123956
123957             var communityDetail = rowEnter
123958               .append('td')
123959               .attr('class', 'cell-detail community-detail');
123960
123961             communityDetail
123962               .each(showCommunityDetails);
123963
123964             communityLinks
123965               .append('div')
123966               .attr('class', 'community-missing')
123967               .text(t('success.missing'))
123968               .append('a')
123969               .attr('class', 'link-out')
123970               .attr('target', '_blank')
123971               .attr('tabindex', -1)
123972               .call(svgIcon('#iD-icon-out-link', 'inline'))
123973               .attr('href', 'https://github.com/osmlab/osm-community-index/issues')
123974               .append('span')
123975               .text(t('success.tell_us'));
123976           }
123977
123978
123979           function showCommunityDetails(d) {
123980             var selection = d3_select(this);
123981             var communityID = d.id;
123982             var replacements = {
123983               url: linkify(d.url),
123984               signupUrl: linkify(d.signupUrl || d.url)
123985             };
123986
123987             selection
123988               .append('div')
123989               .attr('class', 'community-name')
123990               .append('a')
123991               .attr('target', '_blank')
123992               .attr('href', d.url)
123993               .text(t(("community." + (d.id) + ".name")));
123994
123995             var descriptionHTML = t(("community." + (d.id) + ".description"), replacements);
123996
123997             if (d.type === 'reddit') {   // linkify subreddits  #4997
123998               descriptionHTML = descriptionHTML
123999                 .replace(/(\/r\/\w*\/*)/i, function (match) { return linkify(d.url, match); });
124000             }
124001
124002             selection
124003               .append('div')
124004               .attr('class', 'community-description')
124005               .html(descriptionHTML);
124006
124007             if (d.extendedDescription || (d.languageCodes && d.languageCodes.length)) {
124008               selection
124009                 .append('div')
124010                 .call(uiDisclosure(context, ("community-more-" + (d.id)), false)
124011                   .expanded(false)
124012                   .updatePreference(false)
124013                   .title(t('success.more'))
124014                   .content(showMore)
124015                 );
124016             }
124017
124018             var nextEvents = (d.events || [])
124019               .map(function (event) {
124020                 event.date = parseEventDate(event.when);
124021                 return event;
124022               })
124023               .filter(function (event) {      // date is valid and future (or today)
124024                 var t = event.date.getTime();
124025                 var now = (new Date()).setHours(0,0,0,0);
124026                 return !isNaN(t) && t >= now;
124027               })
124028               .sort(function (a, b) {       // sort by date ascending
124029                 return a.date < b.date ? -1 : a.date > b.date ? 1 : 0;
124030               })
124031               .slice(0, MAXEVENTS);   // limit number of events shown
124032
124033             if (nextEvents.length) {
124034               selection
124035                 .append('div')
124036                 .call(uiDisclosure(context, ("community-events-" + (d.id)), false)
124037                   .expanded(false)
124038                   .updatePreference(false)
124039                   .title(t('success.events'))
124040                   .content(showNextEvents)
124041                 )
124042                 .select('.hide-toggle')
124043                 .append('span')
124044                 .attr('class', 'badge-text')
124045                 .text(nextEvents.length);
124046             }
124047
124048
124049             function showMore(selection) {
124050               var more = selection.selectAll('.community-more')
124051                 .data([0]);
124052
124053               var moreEnter = more.enter()
124054                 .append('div')
124055                 .attr('class', 'community-more');
124056
124057               if (d.extendedDescription) {
124058                 moreEnter
124059                   .append('div')
124060                   .attr('class', 'community-extended-description')
124061                   .html(t(("community." + (d.id) + ".extendedDescription"), replacements));
124062               }
124063
124064               if (d.languageCodes && d.languageCodes.length) {
124065                 var languageList = d.languageCodes
124066                   .map(function (code) { return languageName(code); })
124067                   .join(', ');
124068
124069                 moreEnter
124070                   .append('div')
124071                   .attr('class', 'community-languages')
124072                   .text(t('success.languages', { languages: languageList }));
124073               }
124074             }
124075
124076
124077             function showNextEvents(selection) {
124078               var events = selection
124079                 .append('div')
124080                 .attr('class', 'community-events');
124081
124082               var item = events.selectAll('.community-event')
124083                 .data(nextEvents);
124084
124085               var itemEnter = item.enter()
124086                 .append('div')
124087                 .attr('class', 'community-event');
124088
124089               itemEnter
124090                 .append('div')
124091                 .attr('class', 'community-event-name')
124092                 .append('a')
124093                 .attr('target', '_blank')
124094                 .attr('href', function (d) { return d.url; })
124095                 .text(function (d) {
124096                   var name = d.name;
124097                   if (d.i18n && d.id) {
124098                     name = t(("community." + communityID + ".events." + (d.id) + ".name"), { default: name });
124099                   }
124100                   return name;
124101                 });
124102
124103               itemEnter
124104                 .append('div')
124105                 .attr('class', 'community-event-when')
124106                 .text(function (d) {
124107                   var options = { weekday: 'short', day: 'numeric', month: 'short', year: 'numeric' };
124108                   if (d.date.getHours() || d.date.getMinutes()) {   // include time if it has one
124109                     options.hour = 'numeric';
124110                     options.minute = 'numeric';
124111                   }
124112                   return d.date.toLocaleString(detected.locale, options);
124113                 });
124114
124115               itemEnter
124116                 .append('div')
124117                 .attr('class', 'community-event-where')
124118                 .text(function (d) {
124119                   var where = d.where;
124120                   if (d.i18n && d.id) {
124121                     where = t(("community." + communityID + ".events." + (d.id) + ".where"), { default: where });
124122                   }
124123                   return where;
124124                 });
124125
124126               itemEnter
124127                 .append('div')
124128                 .attr('class', 'community-event-description')
124129                 .text(function (d) {
124130                   var description = d.description;
124131                   if (d.i18n && d.id) {
124132                     description = t(("community." + communityID + ".events." + (d.id) + ".description"), { default: description });
124133                   }
124134                   return description;
124135                 });
124136             }
124137
124138
124139             function linkify(url, text) {
124140               text = text || url;
124141               return ("<a target=\"_blank\" href=\"" + url + "\">" + text + "</a>");
124142             }
124143           }
124144
124145
124146           success.changeset = function (val) {
124147             if (!arguments$1.length) { return _changeset; }
124148             _changeset = val;
124149             return success;
124150           };
124151
124152
124153           success.location = function (val) {
124154             if (!arguments$1.length) { return _location; }
124155             _location = val;
124156             return success;
124157           };
124158
124159
124160           return utilRebind(success, dispatch$1, 'on');
124161         }
124162
124163         var _isSaving = false;
124164
124165
124166         function modeSave(context) {
124167             var mode = { id: 'save' };
124168             var keybinding = utilKeybinding('modeSave');
124169
124170             var loading = uiLoading(context)
124171                 .message(t('save.uploading'))
124172                 .blocking(true);
124173
124174             var commit = uiCommit(context)
124175                 .on('cancel', cancel)
124176                 .on('save', save);
124177
124178             var _toCheck = [];
124179             var _toLoad = [];
124180             var _loaded = {};
124181             var _toLoadCount = 0;
124182             var _toLoadTotal = 0;
124183
124184             var _conflicts = [];
124185             var _errors = [];
124186             var _origChanges;
124187             var _location;
124188
124189
124190             function cancel(selectedID) {
124191                 if (selectedID) {
124192                     context.enter(modeSelect(context, [selectedID]));
124193                 } else {
124194                     context.enter(modeBrowse(context));
124195                 }
124196             }
124197
124198
124199             function save(changeset, tryAgain, checkConflicts) {
124200                 // Guard against accidentally entering save code twice - #4641
124201                 if (_isSaving && !tryAgain) {
124202                     return;
124203                 }
124204
124205                 var osm = context.connection();
124206                 if (!osm) {
124207                     cancel();
124208                     return;
124209                 }
124210
124211                 // If user somehow got logged out mid-save, try to reauthenticate..
124212                 // This can happen if they were logged in from before, but the tokens are no longer valid.
124213                 if (!osm.authenticated()) {
124214                     osm.authenticate(function(err) {
124215                         if (err) {
124216                             cancel();   // quit save mode..
124217                         } else {
124218                             save(changeset, tryAgain, checkConflicts);  // continue where we left off..
124219                         }
124220                     });
124221                     return;
124222                 }
124223
124224                 if (!_isSaving) {
124225                     keybindingOff();
124226                     context.container().call(loading);  // block input
124227                     _isSaving = true;
124228                 }
124229
124230                 var history = context.history();
124231                 var localGraph = context.graph();
124232                 var remoteGraph = coreGraph(history.base(), true);
124233
124234                 _conflicts = [];
124235                 _errors = [];
124236
124237                 // Store original changes, in case user wants to download them as an .osc file
124238                 _origChanges = history.changes(actionDiscardTags(history.difference()));
124239
124240                 // First time, `history.perform` a no-op action.
124241                 // Any conflict resolutions will be done as `history.replace`
124242                 if (!tryAgain) {
124243                     history.perform(actionNoop());
124244                 }
124245
124246                 // Attempt a fast upload.. If there are conflicts, re-enter with `checkConflicts = true`
124247                 if (!checkConflicts) {
124248                     upload(changeset);
124249
124250                 // Do the full (slow) conflict check..
124251                 } else {
124252                     var summary = history.difference().summary();
124253                     _toCheck = [];
124254                     for (var i = 0; i < summary.length; i++) {
124255                         var item = summary[i];
124256                         if (item.changeType === 'modified') {
124257                             _toCheck.push(item.entity.id);
124258                         }
124259                     }
124260
124261                     _toLoad = withChildNodes(_toCheck, localGraph);
124262                     _loaded = {};
124263                     _toLoadCount = 0;
124264                     _toLoadTotal = _toLoad.length;
124265
124266                     if (_toCheck.length) {
124267                         showProgress(_toLoadCount, _toLoadTotal);
124268                         _toLoad.forEach(function(id) { _loaded[id] = false; });
124269                         osm.loadMultiple(_toLoad, loaded);
124270                     } else {
124271                         upload(changeset);
124272                     }
124273                 }
124274
124275                 return;
124276
124277
124278                 function withChildNodes(ids, graph) {
124279                     var s = new Set(ids);
124280                     ids.forEach(function(id) {
124281                         var entity = graph.entity(id);
124282                         if (entity.type !== 'way') { return; }
124283
124284                         graph.childNodes(entity).forEach(function(child) {
124285                             if (child.version !== undefined) {
124286                                 s.add(child.id);
124287                             }
124288                         });
124289                     });
124290
124291                     return Array.from(s);
124292                 }
124293
124294
124295                 // Reload modified entities into an alternate graph and check for conflicts..
124296                 function loaded(err, result) {
124297                     if (_errors.length) { return; }
124298
124299                     if (err) {
124300                         _errors.push({
124301                             msg: err.message || err.responseText,
124302                             details: [ t('save.status_code', { code: err.status }) ]
124303                         });
124304                         showErrors();
124305
124306                     } else {
124307                         var loadMore = [];
124308
124309                         result.data.forEach(function(entity) {
124310                             remoteGraph.replace(entity);
124311                             _loaded[entity.id] = true;
124312                             _toLoad = _toLoad.filter(function(val) { return val !== entity.id; });
124313
124314                             if (!entity.visible) { return; }
124315
124316                             // Because loadMultiple doesn't download /full like loadEntity,
124317                             // need to also load children that aren't already being checked..
124318                             var i, id;
124319                             if (entity.type === 'way') {
124320                                 for (i = 0; i < entity.nodes.length; i++) {
124321                                     id = entity.nodes[i];
124322                                     if (_loaded[id] === undefined) {
124323                                         _loaded[id] = false;
124324                                         loadMore.push(id);
124325                                     }
124326                                 }
124327                             } else if (entity.type === 'relation' && entity.isMultipolygon()) {
124328                                 for (i = 0; i < entity.members.length; i++) {
124329                                     id = entity.members[i].id;
124330                                     if (_loaded[id] === undefined) {
124331                                         _loaded[id] = false;
124332                                         loadMore.push(id);
124333                                     }
124334                                 }
124335                             }
124336                         });
124337
124338                         _toLoadCount += result.data.length;
124339                         _toLoadTotal += loadMore.length;
124340                         showProgress(_toLoadCount, _toLoadTotal);
124341
124342                         if (loadMore.length) {
124343                             _toLoad.push.apply(_toLoad, loadMore);
124344                             osm.loadMultiple(loadMore, loaded);
124345                         }
124346
124347                         if (!_toLoad.length) {
124348                             detectConflicts();
124349                         }
124350                     }
124351                 }
124352
124353
124354                 function detectConflicts() {
124355                     function choice(id, text, action) {
124356                         return { id: id, text: text, action: function() { history.replace(action); } };
124357                     }
124358                     function formatUser(d) {
124359                         return '<a href="' + osm.userURL(d) + '" target="_blank">' + d + '</a>';
124360                     }
124361                     function entityName(entity) {
124362                         return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id);
124363                     }
124364
124365                     function sameVersions(local, remote) {
124366                         if (local.version !== remote.version) { return false; }
124367
124368                         if (local.type === 'way') {
124369                             var children = utilArrayUnion(local.nodes, remote.nodes);
124370                             for (var i = 0; i < children.length; i++) {
124371                                 var a = localGraph.hasEntity(children[i]);
124372                                 var b = remoteGraph.hasEntity(children[i]);
124373                                 if (a && b && a.version !== b.version) { return false; }
124374                             }
124375                         }
124376
124377                         return true;
124378                     }
124379
124380                     _toCheck.forEach(function(id) {
124381                         var local = localGraph.entity(id);
124382                         var remote = remoteGraph.entity(id);
124383
124384                         if (sameVersions(local, remote)) { return; }
124385
124386                         var action = actionMergeRemoteChanges;
124387                         var merge = action(id, localGraph, remoteGraph, formatUser);
124388
124389                         history.replace(merge);
124390
124391                         var mergeConflicts = merge.conflicts();
124392                         if (!mergeConflicts.length) { return; }  // merged safely
124393
124394                         var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local');
124395                         var forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote');
124396                         var keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore'));
124397                         var keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete'));
124398
124399                         _conflicts.push({
124400                             id: id,
124401                             name: entityName(local),
124402                             details: mergeConflicts,
124403                             chosen: 1,
124404                             choices: [
124405                                 choice(id, keepMine, forceLocal),
124406                                 choice(id, keepTheirs, forceRemote)
124407                             ]
124408                         });
124409                     });
124410
124411                     upload(changeset);
124412                 }
124413             }
124414
124415
124416             function upload(changeset) {
124417                 var osm = context.connection();
124418                 if (!osm) {
124419                     _errors.push({ msg: 'No OSM Service' });
124420                 }
124421
124422                 if (_conflicts.length) {
124423                     _conflicts.sort(function(a, b) { return b.id.localeCompare(a.id); });
124424                     showConflicts(changeset);
124425
124426                 } else if (_errors.length) {
124427                     showErrors();
124428
124429                 } else {
124430                     var history = context.history();
124431                     var changes = history.changes(actionDiscardTags(history.difference()));
124432                     if (changes.modified.length || changes.created.length || changes.deleted.length) {
124433                         loadLocation();  // so it is ready when we display the save screen
124434                         osm.putChangeset(changeset, changes, uploadCallback);
124435                     } else {        // changes were insignificant or reverted by user
124436                         d3_select('.inspector-wrap *').remove();
124437                         loading.close();
124438                         _isSaving = false;
124439                         context.flush();
124440                         cancel();
124441                     }
124442                 }
124443             }
124444
124445
124446             function uploadCallback(err, changeset) {
124447                 if (err) {
124448                     if (err.status === 409) {          // 409 Conflict
124449                         save(changeset, true, true);   // tryAgain = true, checkConflicts = true
124450                     } else {
124451                         _errors.push({
124452                             msg: err.message || err.responseText,
124453                             details: [ t('save.status_code', { code: err.status }) ]
124454                         });
124455                         showErrors();
124456                     }
124457
124458                 } else {
124459                     context.history().clearSaved();
124460                     success(changeset);
124461                     // Add delay to allow for postgres replication #1646 #2678
124462                     window.setTimeout(function() {
124463                         d3_select('.inspector-wrap *').remove();
124464                         loading.close();
124465                         _isSaving = false;
124466                         context.flush();
124467                     }, 2500);
124468                 }
124469             }
124470
124471
124472             function showProgress(num, total) {
124473                 var modal = context.container().select('.loading-modal .modal-section');
124474                 var progress = modal.selectAll('.progress')
124475                     .data([0]);
124476
124477                 // enter/update
124478                 progress.enter()
124479                     .append('div')
124480                     .attr('class', 'progress')
124481                     .merge(progress)
124482                     .text(t('save.conflict_progress', { num: num, total: total }));
124483             }
124484
124485
124486             function showConflicts(changeset) {
124487                 var history = context.history();
124488                 var selection = context.container()
124489                     .select('#sidebar')
124490                     .append('div')
124491                     .attr('class','sidebar-component');
124492
124493                 loading.close();
124494                 _isSaving = false;
124495
124496                 var ui = uiConflicts(context)
124497                     .conflictList(_conflicts)
124498                     .origChanges(_origChanges)
124499                     .on('cancel', function() {
124500                         history.pop();
124501                         selection.remove();
124502                         keybindingOn();
124503                     })
124504                     .on('save', function() {
124505                         for (var i = 0; i < _conflicts.length; i++) {
124506                             if (_conflicts[i].chosen === 1) {  // user chose "keep theirs"
124507                                 var entity = context.hasEntity(_conflicts[i].id);
124508                                 if (entity && entity.type === 'way') {
124509                                     var children = utilArrayUniq(entity.nodes);
124510                                     for (var j = 0; j < children.length; j++) {
124511                                         history.replace(actionRevert(children[j]));
124512                                     }
124513                                 }
124514                                 history.replace(actionRevert(_conflicts[i].id));
124515                             }
124516                         }
124517
124518                         selection.remove();
124519                         save(changeset, true, false);  // tryAgain = true, checkConflicts = false
124520                     });
124521
124522                 selection.call(ui);
124523             }
124524
124525
124526             function showErrors() {
124527                 keybindingOn();
124528                 context.history().pop();
124529                 loading.close();
124530                 _isSaving = false;
124531
124532                 var selection = uiConfirm(context.container());
124533                 selection
124534                     .select('.modal-section.header')
124535                     .append('h3')
124536                     .text(t('save.error'));
124537
124538                 addErrors(selection, _errors);
124539                 selection.okButton();
124540             }
124541
124542
124543             function addErrors(selection, data) {
124544                 var message = selection
124545                     .select('.modal-section.message-text');
124546
124547                 var items = message
124548                     .selectAll('.error-container')
124549                     .data(data);
124550
124551                 var enter = items.enter()
124552                     .append('div')
124553                     .attr('class', 'error-container');
124554
124555                 enter
124556                     .append('a')
124557                     .attr('class', 'error-description')
124558                     .attr('href', '#')
124559                     .classed('hide-toggle', true)
124560                     .text(function(d) { return d.msg || t('save.unknown_error_details'); })
124561                     .on('click', function() {
124562                         event.preventDefault();
124563
124564                         var error = d3_select(this);
124565                         var detail = d3_select(this.nextElementSibling);
124566                         var exp = error.classed('expanded');
124567
124568                         detail.style('display', exp ? 'none' : 'block');
124569                         error.classed('expanded', !exp);
124570                     });
124571
124572                 var details = enter
124573                     .append('div')
124574                     .attr('class', 'error-detail-container')
124575                     .style('display', 'none');
124576
124577                 details
124578                     .append('ul')
124579                     .attr('class', 'error-detail-list')
124580                     .selectAll('li')
124581                     .data(function(d) { return d.details || []; })
124582                     .enter()
124583                     .append('li')
124584                     .attr('class', 'error-detail-item')
124585                     .text(function(d) { return d; });
124586
124587                 items.exit()
124588                     .remove();
124589             }
124590
124591
124592             function success(changeset) {
124593                 commit.reset();
124594
124595                 var ui = uiSuccess(context)
124596                     .changeset(changeset)
124597                     .location(_location)
124598                     .on('cancel', function() { context.ui().sidebar.hide(); });
124599
124600                 context.enter(modeBrowse(context).sidebar(ui));
124601             }
124602
124603
124604             function keybindingOn() {
124605                 d3_select(document)
124606                     .call(keybinding.on('⎋', cancel, true));
124607             }
124608
124609
124610             function keybindingOff() {
124611                 d3_select(document)
124612                     .call(keybinding.unbind);
124613             }
124614
124615
124616             // Reverse geocode current map location so we can display a message on
124617             // the success screen like "Thank you for editing around place, region."
124618             function loadLocation() {
124619                 _location = null;
124620                 if (!services$1.geocoder) { return; }
124621
124622                 services$1.geocoder.reverse(context.map().center(), function(err, result) {
124623                     if (err || !result || !result.address) { return; }
124624
124625                     var addr = result.address;
124626                     var place = (addr && (addr.town || addr.city || addr.county)) || '';
124627                     var region = (addr && (addr.state || addr.country)) || '';
124628                     var separator = (place && region) ? t('success.thank_you_where.separator') : '';
124629
124630                     _location = t('success.thank_you_where.format',
124631                         { place: place, separator: separator, region: region }
124632                     );
124633                 });
124634             }
124635
124636
124637             mode.enter = function() {
124638                 // Show sidebar
124639                 context.ui().sidebar.expand();
124640
124641                 function done() {
124642                     context.ui().sidebar.show(commit);
124643                 }
124644
124645                 keybindingOn();
124646
124647                 context.container().selectAll('#content')
124648                     .attr('class', 'inactive');
124649
124650                 var osm = context.connection();
124651                 if (!osm) {
124652                     cancel();
124653                     return;
124654                 }
124655
124656                 if (osm.authenticated()) {
124657                     done();
124658                 } else {
124659                     osm.authenticate(function(err) {
124660                         if (err) {
124661                             cancel();
124662                         } else {
124663                             done();
124664                         }
124665                     });
124666                 }
124667             };
124668
124669
124670             mode.exit = function() {
124671                 _isSaving = false;
124672
124673                 keybindingOff();
124674
124675                 context.container().selectAll('#content')
124676                     .attr('class', 'active');
124677
124678                 context.ui().sidebar.hide();
124679             };
124680
124681             return mode;
124682         }
124683
124684         function uiToolOldDrawModes(context) {
124685
124686             var tool = {
124687                 id: 'old_modes',
124688                 label: t('toolbar.add_feature')
124689             };
124690
124691             var modes = [
124692                 modeAddPoint(context, {
124693                     title: t('modes.add_point.title'),
124694                     button: 'point',
124695                     description: t('modes.add_point.description'),
124696                     preset: context.presets().item('point'),
124697                     key: '1'
124698                 }),
124699                 modeAddLine(context, {
124700                     title: t('modes.add_line.title'),
124701                     button: 'line',
124702                     description: t('modes.add_line.description'),
124703                     preset: context.presets().item('line'),
124704                     key: '2'
124705                 }),
124706                 modeAddArea(context, {
124707                     title: t('modes.add_area.title'),
124708                     button: 'area',
124709                     description: t('modes.add_area.description'),
124710                     preset: context.presets().item('area'),
124711                     key: '3'
124712                 })
124713             ];
124714
124715
124716             function enabled() {
124717                 return osmEditable();
124718             }
124719
124720             function osmEditable() {
124721                 return context.editable();
124722             }
124723
124724             modes.forEach(function(mode) {
124725                 context.keybinding().on(mode.key, function() {
124726                     if (!enabled()) { return; }
124727
124728                     if (mode.id === context.mode().id) {
124729                         context.enter(modeBrowse(context));
124730                     } else {
124731                         context.enter(mode);
124732                     }
124733                 });
124734             });
124735
124736             tool.render = function(selection) {
124737
124738                 var wrap = selection
124739                     .append('div')
124740                     .attr('class', 'joined')
124741                     .style('display', 'flex');
124742
124743                 context
124744                     .on('enter.editor', function(entered) {
124745                         selection.selectAll('button.add-button')
124746                             .classed('active', function(mode) { return entered.button === mode.button; });
124747                         context.container()
124748                             .classed('mode-' + entered.id, true);
124749                     });
124750
124751                 context
124752                     .on('exit.editor', function(exited) {
124753                         context.container()
124754                             .classed('mode-' + exited.id, false);
124755                     });
124756
124757
124758                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
124759
124760                 context.map()
124761                     .on('move.modes', debouncedUpdate)
124762                     .on('drawn.modes', debouncedUpdate);
124763
124764                 context
124765                     .on('enter.modes', update);
124766
124767                 update();
124768
124769
124770                 function update() {
124771
124772                     var buttons = wrap.selectAll('button.add-button')
124773                         .data(modes, function(d) { return d.id; });
124774
124775                     // exit
124776                     buttons.exit()
124777                         .remove();
124778
124779                     // enter
124780                     var buttonsEnter = buttons.enter()
124781                         .append('button')
124782                         .attr('class', function(d) { return d.id + ' add-button bar-button'; })
124783                         .on('click.mode-buttons', function(d) {
124784                             if (!enabled()) { return; }
124785
124786                             // When drawing, ignore accidental clicks on mode buttons - #4042
124787                             var currMode = context.mode().id;
124788                             if (/^draw/.test(currMode)) { return; }
124789
124790                             if (d.id === currMode) {
124791                                 context.enter(modeBrowse(context));
124792                             } else {
124793                                 context.enter(d);
124794                             }
124795                         })
124796                         .call(tooltip()
124797                             .placement('bottom')
124798                             .html(true)
124799                             .title(function(d) { return uiTooltipHtml(d.description, d.key); })
124800                             .scrollContainer(d3_select('#bar'))
124801                         );
124802
124803                     buttonsEnter
124804                         .each(function(d) {
124805                             d3_select(this)
124806                                 .call(svgIcon('#iD-icon-' + d.button));
124807                         });
124808
124809                     buttonsEnter
124810                         .append('span')
124811                         .attr('class', 'label')
124812                         .text(function(mode) { return mode.title; });
124813
124814                     // if we are adding/removing the buttons, check if toolbar has overflowed
124815                     if (buttons.enter().size() || buttons.exit().size()) {
124816                         context.ui().checkOverflow('#bar', true);
124817                     }
124818
124819                     // update
124820                     buttons = buttons
124821                         .merge(buttonsEnter)
124822                         .classed('disabled', function(d) { return !enabled(); });
124823                 }
124824             };
124825
124826             return tool;
124827         }
124828
124829         function uiToolNotes(context) {
124830
124831             var tool = {
124832                 id: 'notes',
124833                 label: t('modes.add_note.label')
124834             };
124835
124836             var mode = modeAddNote(context);
124837
124838             function enabled() {
124839                 return notesEnabled() && notesEditable();
124840             }
124841
124842             function notesEnabled() {
124843                 var noteLayer = context.layers().layer('notes');
124844                 return noteLayer && noteLayer.enabled();
124845             }
124846
124847             function notesEditable() {
124848                 var mode = context.mode();
124849                 return context.map().notesEditable() && mode && mode.id !== 'save';
124850             }
124851
124852             context.keybinding().on(mode.key, function() {
124853                 if (!enabled()) { return; }
124854
124855                 if (mode.id === context.mode().id) {
124856                     context.enter(modeBrowse(context));
124857                 } else {
124858                     context.enter(mode);
124859                 }
124860             });
124861
124862             tool.render = function(selection) {
124863
124864                 context
124865                     .on('enter.editor.notes', function(entered) {
124866                         selection.selectAll('button.add-button')
124867                             .classed('active', function(mode) { return entered.button === mode.button; });
124868                         context.container()
124869                             .classed('mode-' + entered.id, true);
124870                     });
124871
124872                 context
124873                     .on('exit.editor.notes', function(exited) {
124874                         context.container()
124875                             .classed('mode-' + exited.id, false);
124876                     });
124877
124878
124879                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
124880
124881                 context.map()
124882                     .on('move.notes', debouncedUpdate)
124883                     .on('drawn.notes', debouncedUpdate);
124884
124885                 context
124886                     .on('enter.notes', update);
124887
124888                 update();
124889
124890
124891                 function update() {
124892                     var showNotes = notesEnabled();
124893                     var data = showNotes ? [mode] : [];
124894
124895                     var buttons = selection.selectAll('button.add-button')
124896                         .data(data, function(d) { return d.id; });
124897
124898                     // exit
124899                     buttons.exit()
124900                         .remove();
124901
124902                     // enter
124903                     var buttonsEnter = buttons.enter()
124904                         .append('button')
124905                         .attr('tabindex', -1)
124906                         .attr('class', function(d) { return d.id + ' add-button bar-button'; })
124907                         .on('click.notes', function(d) {
124908                             if (!enabled()) { return; }
124909
124910                             // When drawing, ignore accidental clicks on mode buttons - #4042
124911                             var currMode = context.mode().id;
124912                             if (/^draw/.test(currMode)) { return; }
124913
124914                             if (d.id === currMode) {
124915                                 context.enter(modeBrowse(context));
124916                             } else {
124917                                 context.enter(d);
124918                             }
124919                         })
124920                         .call(tooltip()
124921                             .placement('bottom')
124922                             .html(true)
124923                             .title(function(d) { return uiTooltipHtml(d.description, d.key); })
124924                             .scrollContainer(d3_select('#bar'))
124925                         );
124926
124927                     buttonsEnter
124928                         .each(function(d) {
124929                             d3_select(this)
124930                                 .call(svgIcon(d.icon || '#iD-icon-' + d.button));
124931                         });
124932
124933                     // if we are adding/removing the buttons, check if toolbar has overflowed
124934                     if (buttons.enter().size() || buttons.exit().size()) {
124935                         context.ui().checkOverflow('#bar', true);
124936                     }
124937
124938                     // update
124939                     buttons = buttons
124940                         .merge(buttonsEnter)
124941                         .classed('disabled', function(d) { return !enabled(); });
124942                 }
124943             };
124944
124945             tool.uninstall = function() {
124946                 context
124947                     .on('enter.editor.notes', null)
124948                     .on('exit.editor.notes', null)
124949                     .on('enter.notes', null);
124950
124951                 context.map()
124952                     .on('move.notes', null)
124953                     .on('drawn.notes', null);
124954             };
124955
124956             return tool;
124957         }
124958
124959         function uiToolSave(context) {
124960
124961             var tool = {
124962                 id: 'save',
124963                 label: t('save.title')
124964             };
124965
124966             var button = null;
124967             var tooltipBehavior = null;
124968             var history = context.history();
124969             var key = uiCmd('⌘S');
124970             var _numChanges = 0;
124971
124972             function isSaving() {
124973                 var mode = context.mode();
124974                 return mode && mode.id === 'save';
124975             }
124976
124977             function isDisabled() {
124978                 return _numChanges === 0 || isSaving();
124979             }
124980
124981             function save() {
124982                 event.preventDefault();
124983                 if (!context.inIntro() && !isSaving() && history.hasChanges()) {
124984                     context.enter(modeSave(context));
124985                 }
124986             }
124987
124988             function bgColor() {
124989                 var step;
124990                 if (_numChanges === 0) {
124991                     return null;
124992                 } else if (_numChanges <= 50) {
124993                     step = _numChanges / 50;
124994                     return d3_interpolateRgb('#fff', '#ff8')(step);  // white -> yellow
124995                 } else {
124996                     step = Math.min((_numChanges - 50) / 50, 1.0);
124997                     return d3_interpolateRgb('#ff8', '#f88')(step);  // yellow -> red
124998                 }
124999             }
125000
125001
125002             function updateCount() {
125003                 var val = history.difference().summary().length;
125004                 if (val === _numChanges) { return; }
125005                 _numChanges = val;
125006
125007                 if (tooltipBehavior) {
125008                     tooltipBehavior
125009                         .title(uiTooltipHtml(
125010                             t(_numChanges > 0 ? 'save.help' : 'save.no_changes'), key)
125011                         );
125012                 }
125013
125014                 if (button) {
125015                     button
125016                         .classed('disabled', isDisabled())
125017                         .style('background', bgColor());
125018
125019                     button.select('span.count')
125020                         .text(_numChanges);
125021                 }
125022             }
125023
125024
125025             tool.render = function(selection) {
125026                 tooltipBehavior = tooltip()
125027                     .placement('bottom')
125028                     .html(true)
125029                     .title(uiTooltipHtml(t('save.no_changes'), key))
125030                     .scrollContainer(d3_select('#bar'));
125031
125032                 button = selection
125033                     .append('button')
125034                     .attr('class', 'save disabled bar-button')
125035                     .on('click', save)
125036                     .call(tooltipBehavior);
125037
125038                 button
125039                     .call(svgIcon('#iD-icon-save'));
125040
125041                 button
125042                     .append('span')
125043                     .attr('class', 'count')
125044                     .attr('aria-hidden', 'true')
125045                     .text('0');
125046
125047                 updateCount();
125048
125049
125050                 context.keybinding()
125051                     .on(key, save, true);
125052
125053
125054                 context.history()
125055                     .on('change.save', updateCount);
125056
125057                 context
125058                     .on('enter.save', function() {
125059                         if (button) {
125060                             button
125061                                 .classed('disabled', isDisabled());
125062
125063                             if (isSaving()) {
125064                                 button.call(tooltipBehavior.hide);
125065                             }
125066                         }
125067                     });
125068             };
125069
125070
125071             tool.uninstall = function() {
125072                 context.keybinding()
125073                     .off(key, true);
125074
125075                 context.history()
125076                     .on('change.save', null);
125077
125078                 context
125079                     .on('enter.save', null);
125080
125081                 button = null;
125082                 tooltipBehavior = null;
125083             };
125084
125085             return tool;
125086         }
125087
125088         function uiToolSidebarToggle(context) {
125089
125090             var tool = {
125091                 id: 'sidebar_toggle',
125092                 label: t('toolbar.inspect')
125093             };
125094
125095             tool.render = function(selection) {
125096                 selection
125097                     .append('button')
125098                     .attr('class', 'bar-button')
125099                     .on('click', function() {
125100                         context.ui().sidebar.toggle();
125101                     })
125102                     .call(tooltip()
125103                         .placement('bottom')
125104                         .html(true)
125105                         .title(uiTooltipHtml(t('sidebar.tooltip'), t('sidebar.key')))
125106                         .scrollContainer(d3_select('#bar'))
125107                     )
125108                     .call(svgIcon('#iD-icon-sidebar-' + (textDirection === 'rtl' ? 'right' : 'left')));
125109             };
125110
125111             return tool;
125112         }
125113
125114         function uiToolUndoRedo(context) {
125115
125116             var tool = {
125117                 id: 'undo_redo',
125118                 label: t('toolbar.undo_redo')
125119             };
125120
125121             var commands = [{
125122                 id: 'undo',
125123                 cmd: uiCmd('⌘Z'),
125124                 action: function() { if (editable()) { context.undo(); } },
125125                 annotation: function() { return context.history().undoAnnotation(); }
125126             }, {
125127                 id: 'redo',
125128                 cmd: uiCmd('⌘⇧Z'),
125129                 action: function() { if (editable()) { context.redo(); } },
125130                 annotation: function() { return context.history().redoAnnotation(); }
125131             }];
125132
125133
125134             function editable() {
125135                 return context.mode() && context.mode().id !== 'save' && context.map().editableDataEnabled(true /* ignore min zoom */);
125136             }
125137
125138
125139             tool.render = function(selection) {
125140                 var tooltipBehavior = tooltip()
125141                     .placement('bottom')
125142                     .html(true)
125143                     .title(function (d) {
125144                         return uiTooltipHtml(d.annotation() ?
125145                             t(d.id + '.tooltip', {action: d.annotation()}) :
125146                             t(d.id + '.nothing'), d.cmd);
125147                     })
125148                     .scrollContainer(d3_select('#bar'));
125149
125150                 var buttons = selection.selectAll('button')
125151                     .data(commands)
125152                     .enter()
125153                     .append('button')
125154                     .attr('class', function(d) { return 'disabled ' + d.id + '-button bar-button'; })
125155                     .on('click', function(d) { return d.action(); })
125156                     .call(tooltipBehavior);
125157
125158                 buttons.each(function(d) {
125159                     var iconName = d.id;
125160                     if (textDirection === 'rtl') {
125161                         if (iconName === 'undo') {
125162                             iconName = 'redo';
125163                         } else if (iconName === 'redo') {
125164                             iconName = 'undo';
125165                         }
125166                     }
125167                     d3_select(this)
125168                         .call(svgIcon('#iD-icon-' + iconName));
125169                 });
125170
125171                 context.keybinding()
125172                     .on(commands[0].cmd, function() { event.preventDefault(); commands[0].action(); })
125173                     .on(commands[1].cmd, function() { event.preventDefault(); commands[1].action(); });
125174
125175
125176                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
125177
125178                 context.map()
125179                     .on('move.undo_redo', debouncedUpdate)
125180                     .on('drawn.undo_redo', debouncedUpdate);
125181
125182                 context.history()
125183                     .on('change.undo_redo', function(difference) {
125184                         if (difference) { update(); }
125185                     });
125186
125187                 context
125188                     .on('enter.undo_redo', update);
125189
125190
125191                 function update() {
125192                     buttons
125193                         .property('disabled', !editable())
125194                         .classed('disabled', function(d) {
125195                             return !editable() || !d.annotation();
125196                         })
125197                         .each(function() {
125198                             var selection = d3_select(this);
125199                             if (!selection.select('.tooltip.in').empty()) {
125200                                 selection.call(tooltipBehavior.updateContent);
125201                             }
125202                         });
125203                 }
125204             };
125205
125206             tool.uninstall = function() {
125207                 context.keybinding()
125208                     .off(commands[0].cmd)
125209                     .off(commands[1].cmd);
125210
125211                 context.map()
125212                     .on('move.undo_redo', null)
125213                     .on('drawn.undo_redo', null);
125214
125215                 context.history()
125216                     .on('change.undo_redo', null);
125217
125218                 context
125219                     .on('enter.undo_redo', null);
125220             };
125221
125222             return tool;
125223         }
125224
125225         function uiTopToolbar(context) {
125226
125227             var sidebarToggle = uiToolSidebarToggle(context),
125228                 modes = uiToolOldDrawModes(context),
125229                 notes = uiToolNotes(context),
125230                 undoRedo = uiToolUndoRedo(context),
125231                 save = uiToolSave(context);
125232
125233             function notesEnabled() {
125234                 var noteLayer = context.layers().layer('notes');
125235                 return noteLayer && noteLayer.enabled();
125236             }
125237
125238             function topToolbar(bar) {
125239
125240                 bar.on('wheel.topToolbar', function() {
125241                     if (!event.deltaX) {
125242                         // translate vertical scrolling into horizontal scrolling in case
125243                         // the user doesn't have an input device that can scroll horizontally
125244                         bar.node().scrollLeft += event.deltaY;
125245                     }
125246                 });
125247
125248                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
125249                 context.layers()
125250                     .on('change.topToolbar', debouncedUpdate);
125251
125252                 update();
125253
125254                 function update() {
125255
125256                     var tools = [
125257                         sidebarToggle,
125258                         'spacer',
125259                         modes
125260                     ];
125261
125262                     tools.push('spacer');
125263
125264                     if (notesEnabled()) {
125265                         tools = tools.concat([notes, 'spacer']);
125266                     }
125267
125268                     tools = tools.concat([undoRedo, save]);
125269
125270                     var toolbarItems = bar.selectAll('.toolbar-item')
125271                         .data(tools, function(d) {
125272                             return d.id || d;
125273                         });
125274
125275                     toolbarItems.exit()
125276                         .each(function(d) {
125277                             if (d.uninstall) {
125278                                 d.uninstall();
125279                             }
125280                         })
125281                         .remove();
125282
125283                     var itemsEnter = toolbarItems
125284                         .enter()
125285                         .append('div')
125286                         .attr('class', function(d) {
125287                             var classes = 'toolbar-item ' + (d.id || d).replace('_', '-');
125288                             if (d.klass) { classes += ' ' + d.klass; }
125289                             return classes;
125290                         });
125291
125292                     var actionableItems = itemsEnter.filter(function(d) { return d !== 'spacer'; });
125293
125294                     actionableItems
125295                         .append('div')
125296                         .attr('class', 'item-content')
125297                         .each(function(d) {
125298                             d3_select(this).call(d.render, bar);
125299                         });
125300
125301                     actionableItems
125302                         .append('div')
125303                         .attr('class', 'item-label')
125304                         .text(function(d) {
125305                             return d.label;
125306                         });
125307                 }
125308
125309             }
125310
125311             return topToolbar;
125312         }
125313
125314         // these are module variables so they are preserved through a ui.restart()
125315         var sawVersion = null;
125316         var isNewVersion = false;
125317         var isNewUser = false;
125318
125319
125320         function uiVersion(context) {
125321
125322             var currVersion = context.version;
125323             var matchedVersion = currVersion.match(/\d+\.\d+\.\d+.*/);
125324
125325             if (sawVersion === null && matchedVersion !== null) {
125326                 isNewVersion = (context.storage('sawVersion') !== currVersion);
125327                 isNewUser = !context.storage('sawSplash');
125328                 context.storage('sawVersion', currVersion);
125329                 sawVersion = currVersion;
125330             }
125331
125332             return function(selection) {
125333                 selection
125334                     .append('a')
125335                     .attr('target', '_blank')
125336                     .attr('href', 'https://github.com/openstreetmap/iD')
125337                     .text(currVersion);
125338
125339                 // only show new version indicator to users that have used iD before
125340                 if (isNewVersion && !isNewUser) {
125341                     selection
125342                         .append('div')
125343                         .attr('class', 'badge')
125344                         .append('a')
125345                         .attr('target', '_blank')
125346                         .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CHANGELOG.md#whats-new')
125347                         .call(svgIcon('#maki-gift-11'))
125348                         .call(tooltip()
125349                             .title(t('version.whats_new', { version: currVersion }))
125350                             .placement('top')
125351                         );
125352                 }
125353             };
125354         }
125355
125356         function uiZoom(context) {
125357             var zooms = [{
125358                 id: 'zoom-in',
125359                 icon: 'plus',
125360                 title: t('zoom.in'),
125361                 action: context.zoomIn,
125362                 key: '+'
125363             }, {
125364                 id: 'zoom-out',
125365                 icon: 'minus',
125366                 title: t('zoom.out'),
125367                 action: context.zoomOut,
125368                 key: '-'
125369             }];
125370
125371
125372             function zoomIn() {
125373                 event.preventDefault();
125374                 context.zoomIn();
125375             }
125376
125377
125378             function zoomOut() {
125379                 event.preventDefault();
125380                 context.zoomOut();
125381             }
125382
125383
125384             function zoomInFurther() {
125385                 event.preventDefault();
125386                 context.zoomInFurther();
125387             }
125388
125389
125390             function zoomOutFurther() {
125391                 event.preventDefault();
125392                 context.zoomOutFurther();
125393             }
125394
125395
125396             return function(selection) {
125397                 var button = selection.selectAll('button')
125398                     .data(zooms)
125399                     .enter()
125400                     .append('button')
125401                     .attr('class', function(d) { return d.id; })
125402                     .on('click.editor', function(d) {
125403                         if (!d3_select(this).classed('disabled')) {
125404                             d.action();
125405                         }
125406                     })
125407                     .call(tooltip()
125408                         .placement((textDirection === 'rtl') ? 'right' : 'left')
125409                         .html(true)
125410                         .title(function(d) {
125411                             return uiTooltipHtml(d.title, d.key);
125412                         })
125413                     );
125414
125415                 button.each(function(d) {
125416                     d3_select(this)
125417                         .call(svgIcon('#iD-icon-' + d.icon, 'light'));
125418                 });
125419
125420                 ['plus', 'ffplus', '=', 'ffequals'].forEach(function(key) {
125421                     context.keybinding().on([key], zoomIn);
125422                     context.keybinding().on([uiCmd('⌘' + key)], zoomInFurther);
125423                 });
125424
125425                 ['_', '-', 'ffminus', 'dash'].forEach(function(key) {
125426                     context.keybinding().on([key], zoomOut);
125427                     context.keybinding().on([uiCmd('⌘' + key)], zoomOutFurther);
125428                 });
125429
125430                 function updateButtonStates() {
125431                     var canZoomIn = context.map().canZoomIn();
125432                     selection.select('button.zoom-in')
125433                         .classed('disabled', !canZoomIn);
125434
125435                     var canZoomOut = context.map().canZoomOut();
125436                     selection.select('button.zoom-out')
125437                         .classed('disabled', !canZoomOut);
125438                 }
125439
125440                 updateButtonStates();
125441
125442                 context.map().on('move.uiZoom', updateButtonStates);
125443             };
125444         }
125445
125446         function uiInit(context) {
125447             var _initCounter = 0;
125448             var _initCallback;
125449             var _needWidth = {};
125450
125451
125452             function render(container) {
125453                 container
125454                     .attr('dir', textDirection);
125455
125456                 // setup fullscreen keybindings (no button shown at this time)
125457                 container
125458                     .call(uiFullScreen(context));
125459
125460                 var map = context.map();
125461                 map.redrawEnable(false);  // don't draw until we've set zoom/lat/long
125462
125463                 container
125464                     .append('svg')
125465                     .attr('id', 'defs')
125466                     .call(svgDefs(context));
125467
125468                 container
125469                     .append('div')
125470                     .attr('id', 'sidebar')
125471                     .call(ui.sidebar);
125472
125473                 var content = container
125474                     .append('div')
125475                     .attr('id', 'content')
125476                     .attr('class', 'active');
125477
125478                 // Top toolbar
125479                 content
125480                     .append('div')
125481                     .attr('id', 'bar-wrap')
125482                     .append('div')
125483                     .attr('id', 'bar')
125484                     .attr('class', 'fillD')
125485                     .call(uiTopToolbar(context));
125486
125487                 content
125488                     .append('div')
125489                     .attr('id', 'map')
125490                     .attr('dir', 'ltr')
125491                     .call(map);
125492
125493
125494                 // Map controls
125495                 var controls = content
125496                     .append('div')
125497                     .attr('class', 'map-controls');
125498
125499                 controls
125500                     .append('div')
125501                     .attr('class', 'map-control zoombuttons')
125502                     .call(uiZoom(context));
125503
125504                 controls
125505                     .append('div')
125506                     .attr('class', 'map-control geolocate-control')
125507                     .call(uiGeolocate(context));
125508
125509                 var background = uiBackground(context);
125510                 controls
125511                     .append('div')
125512                     .attr('class', 'map-control background-control')
125513                     .call(background.renderToggleButton);
125514
125515                 var mapData = uiMapData(context);
125516                 controls
125517                     .append('div')
125518                     .attr('class', 'map-control map-data-control')
125519                     .call(mapData.renderToggleButton);
125520
125521                 var issues = uiIssues(context);
125522                 controls
125523                     .append('div')
125524                     .attr('class', 'map-control map-issues-control')
125525                     .call(issues.renderToggleButton);
125526
125527                 var preferences = uiPreferences(context);
125528                 controls
125529                     .append('div')
125530                     .attr('class', 'map-control preferences-control')
125531                     .call(preferences.renderToggleButton);
125532
125533                 var help = uiHelp(context);
125534                 controls
125535                     .append('div')
125536                     .attr('class', 'map-control help-control')
125537                     .call(help.renderToggleButton);
125538
125539                 content
125540                     .append('div')
125541                     .attr('class', 'spinner')
125542                     .call(uiSpinner(context));
125543
125544                 // Add attribution and footer
125545                 var about = content
125546                     .append('div')
125547                     .attr('id', 'about');
125548
125549                 about
125550                     .append('div')
125551                     .attr('id', 'attrib')
125552                     .attr('dir', 'ltr')
125553                     .call(uiAttribution(context));
125554
125555                 about
125556                     .append('div')
125557                     .attr('class', 'api-status')
125558                     .call(uiStatus(context));
125559
125560
125561                 var footer = about
125562                     .append('div')
125563                     .attr('id', 'footer')
125564                     .attr('class', 'fillD');
125565
125566                 footer
125567                     .append('div')
125568                     .attr('id', 'flash-wrap')
125569                     .attr('class', 'footer-hide');
125570
125571                 var footerWrap = footer
125572                     .append('div')
125573                     .attr('id', 'footer-wrap')
125574                     .attr('class', 'footer-show');
125575
125576                 footerWrap
125577                     .append('div')
125578                     .attr('id', 'scale-block')
125579                     .call(uiScale(context));
125580
125581                 var aboutList = footerWrap
125582                     .append('div')
125583                     .attr('id', 'info-block')
125584                     .append('ul')
125585                     .attr('id', 'about-list');
125586
125587                 if (!context.embed()) {
125588                     aboutList
125589                         .call(uiAccount(context));
125590                 }
125591
125592                 aboutList
125593                     .append('li')
125594                     .attr('class', 'version')
125595                     .call(uiVersion(context));
125596
125597                 var issueLinks = aboutList
125598                     .append('li');
125599
125600                 issueLinks
125601                     .append('a')
125602                     .attr('target', '_blank')
125603                     .attr('href', 'https://github.com/openstreetmap/iD/issues')
125604                     .call(svgIcon('#iD-icon-bug', 'light'))
125605                     .call(tooltip().title(t('report_a_bug')).placement('top'));
125606
125607                 issueLinks
125608                     .append('a')
125609                     .attr('target', '_blank')
125610                     .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating')
125611                     .call(svgIcon('#iD-icon-translate', 'light'))
125612                     .call(tooltip().title(t('help_translate')).placement('top'));
125613
125614                 aboutList
125615                     .append('li')
125616                     .attr('class', 'feature-warning')
125617                     .attr('tabindex', -1)
125618                     .call(uiFeatureInfo(context));
125619
125620                 aboutList
125621                     .append('li')
125622                     .attr('class', 'issues-info')
125623                     .attr('tabindex', -1)
125624                     .call(uiIssuesInfo(context));
125625
125626                 aboutList
125627                     .append('li')
125628                     .attr('class', 'user-list')
125629                     .attr('tabindex', -1)
125630                     .call(uiContributors(context));
125631
125632
125633                 // Setup map dimensions and move map to initial center/zoom.
125634                 // This should happen after #content and toolbars exist.
125635                 ui.onResize();
125636                 map.redrawEnable(true);
125637
125638                 ui.hash = behaviorHash(context);
125639                 ui.hash();
125640                 if (!ui.hash.hadHash) {
125641                     map.centerZoom([0, 0], 2);
125642                 }
125643
125644
125645                 var overMap = content
125646                     .append('div')
125647                     .attr('class', 'over-map');
125648
125649                 // Add panes
125650                 // This should happen after map is initialized, as some require surface()
125651                 var panes = overMap
125652                     .append('div')
125653                     .attr('class', 'map-panes');
125654
125655                 panes
125656                     .call(background.renderPane)
125657                     .call(mapData.renderPane)
125658                     .call(issues.renderPane)
125659                     .call(preferences.renderPane)
125660                     .call(help.renderPane);
125661
125662                 ui.info = uiInfo(context);
125663
125664                 // Add absolutely-positioned elements that sit on top of the map
125665                 // This should happen after the map is ready (center/zoom)
125666                 overMap
125667                     .call(uiMapInMap(context))
125668                     .call(ui.info)
125669                     .call(uiNotice(context));
125670
125671
125672                 overMap
125673                     .append('div')
125674                     .attr('id', 'photoviewer')
125675                     .classed('al', true)       // 'al'=left,  'ar'=right
125676                     .classed('hide', true)
125677                     .call(ui.photoviewer);
125678
125679
125680                 // Bind events
125681                 window.onbeforeunload = function() {
125682                     return context.save();
125683                 };
125684                 window.onunload = function() {
125685                     context.history().unlock();
125686                 };
125687
125688                 d3_select(window)
125689                     .on('gesturestart.editor', eventCancel)
125690                     .on('gesturechange.editor', eventCancel)
125691                     .on('gestureend.editor', eventCancel)
125692                     .on('resize.editor', ui.onResize);
125693
125694
125695                 var panPixels = 80;
125696                 context.keybinding()
125697                     .on('⌫', function() { event.preventDefault(); })
125698                     .on([t('sidebar.key'), '`', '²', '@'], ui.sidebar.toggle)   // #5663, #6864 - common QWERTY, AZERTY
125699                     .on('←', pan([panPixels, 0]))
125700                     .on('↑', pan([0, panPixels]))
125701                     .on('→', pan([-panPixels, 0]))
125702                     .on('↓', pan([0, -panPixels]))
125703                     .on(['⇧←', uiCmd('⌘←')], pan([map.dimensions()[0], 0]))
125704                     .on(['⇧↑', uiCmd('⌘↑')], pan([0, map.dimensions()[1]]))
125705                     .on(['⇧→', uiCmd('⌘→')], pan([-map.dimensions()[0], 0]))
125706                     .on(['⇧↓', uiCmd('⌘↓')], pan([0, -map.dimensions()[1]]));
125707
125708                 context.enter(modeBrowse(context));
125709
125710                 if (!_initCounter++) {
125711                     if (!ui.hash.startWalkthrough) {
125712                         context.container()
125713                             .call(uiSplash(context))
125714                             .call(uiRestore(context));
125715                     }
125716
125717                     context.container()
125718                         .call(uiShortcuts(context));
125719                 }
125720
125721                 var osm = context.connection();
125722                 var auth = uiLoading(context).message(t('loading_auth')).blocking(true);
125723
125724                 if (osm && auth) {
125725                     osm
125726                         .on('authLoading.ui', function() {
125727                             context.container()
125728                                 .call(auth);
125729                         })
125730                         .on('authDone.ui', function() {
125731                             auth.close();
125732                         });
125733                 }
125734
125735                 _initCounter++;
125736
125737                 if (ui.hash.startWalkthrough) {
125738                     ui.hash.startWalkthrough = false;
125739                     context.container().call(uiIntro(context));
125740                 }
125741
125742
125743                 function pan(d) {
125744                     return function() {
125745                         if (d3_select('.combobox').size()) { return; }
125746                         event.preventDefault();
125747                         context.pan(d, 100);
125748                     };
125749                 }
125750
125751                 function eventCancel() {
125752                     event.preventDefault();
125753                 }
125754             }
125755
125756
125757             function ui(node, callback) {
125758                 _initCallback = callback;
125759                 var container = d3_select(node);
125760                 context.container(container);
125761                 context.loadLocale(function(err) {
125762                     if (!err) {
125763                         render(container);
125764                     }
125765                     if (callback) {
125766                         callback(err);
125767                     }
125768                 });
125769             }
125770
125771
125772             ui.restart = function(arg) {
125773                 context.keybinding().clear();
125774                 context.locale(arg);
125775                 context.loadLocale(function(err) {
125776                     if (!err) {
125777                         context.container().selectAll('*').remove();
125778                         render(context.container());
125779                         if (_initCallback) { _initCallback(); }
125780                     }
125781                 });
125782             };
125783
125784             ui.sidebar = uiSidebar(context);
125785
125786             ui.photoviewer = uiPhotoviewer(context);
125787
125788             ui.onResize = function(withPan) {
125789                 var map = context.map();
125790
125791                 // Recalc dimensions of map and sidebar.. (`true` = force recalc)
125792                 // This will call `getBoundingClientRect` and trigger reflow,
125793                 //  but the values will be cached for later use.
125794                 var mapDimensions = utilGetDimensions(d3_select('#content'), true);
125795                 utilGetDimensions(d3_select('#sidebar'), true);
125796
125797                 if (withPan !== undefined) {
125798                     map.redrawEnable(false);
125799                     map.pan(withPan);
125800                     map.redrawEnable(true);
125801                 }
125802                 map.dimensions(mapDimensions);
125803
125804                 ui.photoviewer.onMapResize();
125805
125806                 // check if header or footer have overflowed
125807                 ui.checkOverflow('#bar');
125808                 ui.checkOverflow('#footer');
125809
125810                 // Use outdated code so it works on Explorer
125811                 var resizeWindowEvent = document.createEvent('Event');
125812
125813                 resizeWindowEvent.initEvent('resizeWindow', true, true);
125814
125815                 document.dispatchEvent(resizeWindowEvent);
125816             };
125817
125818
125819             // Call checkOverflow when resizing or whenever the contents change.
125820             ui.checkOverflow = function(selector, reset) {
125821                 if (reset) {
125822                     delete _needWidth[selector];
125823                 }
125824
125825                 var element = d3_select(selector);
125826                 var scrollWidth = element.property('scrollWidth');
125827                 var clientWidth = element.property('clientWidth');
125828                 var needed = _needWidth[selector] || scrollWidth;
125829
125830                 if (scrollWidth > clientWidth) {    // overflow happening
125831                     element.classed('narrow', true);
125832                     if (!_needWidth[selector]) {
125833                         _needWidth[selector] = scrollWidth;
125834                     }
125835
125836                 } else if (scrollWidth >= needed) {
125837                     element.classed('narrow', false);
125838                 }
125839             };
125840
125841             ui.togglePanes = function(showPane) {
125842                 var shownPanes = d3_selectAll('.map-pane.shown');
125843
125844                 var side = textDirection === 'ltr' ? 'right' : 'left';
125845
125846                 shownPanes
125847                     .classed('shown', false);
125848
125849                 d3_selectAll('.map-control button')
125850                     .classed('active', false);
125851
125852                 if (showPane) {
125853                     shownPanes
125854                         .style('display', 'none')
125855                         .style(side, '-500px');
125856
125857                     d3_selectAll('.' + showPane.attr('pane') + '-control button')
125858                         .classed('active', true);
125859
125860                     showPane
125861                         .classed('shown', true)
125862                         .style('display', 'block');
125863                     if (shownPanes.empty()) {
125864                         showPane
125865                             .style('display', 'block')
125866                             .style(side, '-500px')
125867                             .transition()
125868                             .duration(200)
125869                             .style(side, '0px');
125870                     } else {
125871                         showPane
125872                             .style(side, '0px');
125873                     }
125874                 } else {
125875                     shownPanes
125876                         .style('display', 'block')
125877                         .style(side, '0px')
125878                         .transition()
125879                         .duration(200)
125880                         .style(side, '-500px')
125881                         .on('end', function() {
125882                             d3_select(this).style('display', 'none');
125883                         });
125884                 }
125885             };
125886
125887             return ui;
125888         }
125889
125890         function coreContext() {
125891             var dispatch$1 = dispatch('enter', 'exit', 'change');
125892             var context = utilRebind({}, dispatch$1, 'on');
125893             var _deferred = new Set();
125894
125895             context.version = '2.17.2';
125896             context.privacyVersion = '20191217';
125897
125898             // create a special translation that contains the keys in place of the strings
125899             var tkeys = JSON.parse(JSON.stringify(en));  // clone deep
125900             var parents = [];
125901
125902             function traverser(v, k, obj) {
125903                 parents.push(k);
125904                 if (typeof v === 'object') {
125905                     forOwn(v, traverser);
125906                 } else if (typeof v === 'string') {
125907                     obj[k] = parents.join('.');
125908                 }
125909                 parents.pop();
125910             }
125911
125912             function forOwn(obj, fn) {
125913                 Object.keys(obj).forEach(function(k) { fn(obj[k], k, obj); });
125914             }
125915
125916             forOwn(tkeys, traverser);
125917             addTranslation('_tkeys_', tkeys);
125918
125919             addTranslation('en', en);
125920             setLocale('en');
125921
125922
125923             // https://github.com/openstreetmap/iD/issues/772
125924             // http://mathiasbynens.be/notes/localstorage-pattern#comment-9
125925             var storage;
125926             try { storage = localStorage; } catch (e) {}  // eslint-disable-line no-empty
125927             storage = storage || (function() {
125928                 var s = {};
125929                 return {
125930                     getItem: function(k) { return s[k]; },
125931                     setItem: function(k, v) { s[k] = v; },
125932                     removeItem: function(k) { delete s[k]; }
125933                 };
125934             })();
125935
125936             context.storage = function(k, v) {
125937                 try {
125938                     if (arguments.length === 1) { return storage.getItem(k); }
125939                     else if (v === null) { storage.removeItem(k); }
125940                     else { storage.setItem(k, v); }
125941                 } catch (e) {
125942                     // localstorage quota exceeded
125943                     /* eslint-disable no-console */
125944                     if (typeof console !== 'undefined') { console.error('localStorage quota exceeded'); }
125945                     /* eslint-enable no-console */
125946                 }
125947             };
125948
125949
125950             /* User interface and keybinding */
125951             var ui;
125952             context.ui = function() { return ui; };
125953
125954             var keybinding = utilKeybinding('context');
125955             context.keybinding = function() { return keybinding; };
125956             d3_select(document).call(keybinding);
125957
125958
125959             /* Straight accessors. Avoid using these if you can. */
125960             var connection, history, validator;
125961             context.connection = function() { return connection; };
125962             context.history = function() { return history; };
125963             context.validator = function() { return validator; };
125964
125965             /* Connection */
125966             context.preauth = function(options) {
125967                 if (connection) {
125968                     connection.switch(options);
125969                 }
125970                 return context;
125971             };
125972
125973
125974             function afterLoad(cid, callback) {
125975                 return function(err, result) {
125976                     if (err) {
125977                         // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
125978                         if (err.status === 400 || err.status === 401 || err.status === 403) {
125979                             if (connection) {
125980                                 connection.logout();
125981                             }
125982                         }
125983                         if (typeof callback === 'function') {
125984                             callback(err);
125985                         }
125986                         return;
125987
125988                     } else if (connection && connection.getConnectionId() !== cid) {
125989                         if (typeof callback === 'function') {
125990                             callback({ message: 'Connection Switched', status: -1 });
125991                         }
125992                         return;
125993
125994                     } else {
125995                         history.merge(result.data, result.extent);
125996                         if (typeof callback === 'function') {
125997                             callback(err, result);
125998                         }
125999                         return;
126000                     }
126001                 };
126002             }
126003
126004
126005             context.loadTiles = function(projection, callback) {
126006                 var handle = window.requestIdleCallback(function() {
126007                     _deferred.delete(handle);
126008                     if (connection && context.editableDataEnabled()) {
126009                         var cid = connection.getConnectionId();
126010                         connection.loadTiles(projection, afterLoad(cid, callback));
126011                     }
126012                 });
126013                 _deferred.add(handle);
126014             };
126015
126016             context.loadTileAtLoc = function(loc, callback) {
126017                 var handle = window.requestIdleCallback(function() {
126018                     _deferred.delete(handle);
126019                     if (connection && context.editableDataEnabled()) {
126020                         var cid = connection.getConnectionId();
126021                         connection.loadTileAtLoc(loc, afterLoad(cid, callback));
126022                     }
126023                 });
126024                 _deferred.add(handle);
126025             };
126026
126027             context.loadEntity = function(entityID, callback) {
126028                 if (connection) {
126029                     var cid = connection.getConnectionId();
126030                     connection.loadEntity(entityID, afterLoad(cid, callback));
126031                 }
126032             };
126033
126034             context.zoomToEntity = function(entityID, zoomTo) {
126035                 if (zoomTo !== false) {
126036                     this.loadEntity(entityID, function(err, result) {
126037                         if (err) { return; }
126038                         var entity = result.data.find(function(e) { return e.id === entityID; });
126039                         if (entity) {
126040                             map.zoomTo(entity);
126041                         }
126042                     });
126043                 }
126044
126045                 map.on('drawn.zoomToEntity', function() {
126046                     if (!context.hasEntity(entityID)) { return; }
126047                     map.on('drawn.zoomToEntity', null);
126048                     context.on('enter.zoomToEntity', null);
126049                     context.enter(modeSelect(context, [entityID]));
126050                 });
126051
126052                 context.on('enter.zoomToEntity', function() {
126053                     if (mode.id !== 'browse') {
126054                         map.on('drawn.zoomToEntity', null);
126055                         context.on('enter.zoomToEntity', null);
126056                     }
126057                 });
126058             };
126059
126060             var minEditableZoom = 16;
126061             context.minEditableZoom = function(val) {
126062                 if (!arguments.length) { return minEditableZoom; }
126063                 minEditableZoom = val;
126064                 if (connection) {
126065                     connection.tileZoom(val);
126066                 }
126067                 return context;
126068             };
126069
126070
126071             /* History */
126072             var inIntro = false;
126073             context.inIntro = function(val) {
126074                 if (!arguments.length) { return inIntro; }
126075                 inIntro = val;
126076                 return context;
126077             };
126078
126079             context.save = function() {
126080                 // no history save, no message onbeforeunload
126081                 if (inIntro || d3_select('.modal').size()) { return; }
126082
126083                 var canSave;
126084                 if (mode && mode.id === 'save') {
126085                     canSave = false;
126086
126087                     // Attempt to prevent user from creating duplicate changes - see #5200
126088                     if (services$1.osm && services$1.osm.isChangesetInflight()) {
126089                         history.clearSaved();
126090                         return;
126091                     }
126092
126093                 } else {
126094                     canSave = context.selectedIDs().every(function(id) {
126095                         var entity = context.hasEntity(id);
126096                         return entity && !entity.isDegenerate();
126097                     });
126098                 }
126099
126100                 if (canSave) {
126101                     history.save();
126102                 }
126103                 if (history.hasChanges()) {
126104                     return t('save.unsaved_changes');
126105                 }
126106             };
126107
126108
126109             /* Graph */
126110             context.hasEntity = function(id) {
126111                 return history.graph().hasEntity(id);
126112             };
126113             context.entity = function(id) {
126114                 return history.graph().entity(id);
126115             };
126116             context.childNodes = function(way) {
126117                 return history.graph().childNodes(way);
126118             };
126119             context.geometry = function(id) {
126120                 return context.entity(id).geometry(history.graph());
126121             };
126122
126123
126124             /* Modes */
126125             var mode;
126126             context.mode = function() {
126127                 return mode;
126128             };
126129             context.enter = function(newMode) {
126130                 if (mode) {
126131                     mode.exit();
126132                     dispatch$1.call('exit', this, mode);
126133                 }
126134
126135                 mode = newMode;
126136                 mode.enter();
126137                 dispatch$1.call('enter', this, mode);
126138             };
126139
126140             context.selectedIDs = function() {
126141                 if (mode && mode.selectedIDs) {
126142                     return mode.selectedIDs();
126143                 } else {
126144                     return [];
126145                 }
126146             };
126147
126148             context.activeID = function() {
126149                 return mode && mode.activeID && mode.activeID();
126150             };
126151
126152             var _selectedNoteID;
126153             context.selectedNoteID = function(noteID) {
126154                 if (!arguments.length) { return _selectedNoteID; }
126155                 _selectedNoteID = noteID;
126156                 return context;
126157             };
126158
126159             var _selectedErrorID;
126160             context.selectedErrorID = function(errorID) {
126161                 if (!arguments.length) { return _selectedErrorID; }
126162                 _selectedErrorID = errorID;
126163                 return context;
126164             };
126165
126166
126167             /* Behaviors */
126168             context.install = function(behavior) {
126169                 context.surface().call(behavior);
126170             };
126171             context.uninstall = function(behavior) {
126172                 context.surface().call(behavior.off);
126173             };
126174
126175
126176             /* Copy/Paste */
126177             var copyIDs = [], copyGraph;
126178             context.copyGraph = function() { return copyGraph; };
126179             context.copyIDs = function(val) {
126180                 if (!arguments.length) { return copyIDs; }
126181                 copyIDs = val;
126182                 copyGraph = history.graph();
126183                 return context;
126184             };
126185
126186
126187             /* Background */
126188             var background;
126189             context.background = function() { return background; };
126190
126191
126192             /* Features */
126193             var features;
126194             context.features = function() { return features; };
126195             context.hasHiddenConnections = function(id) {
126196                 var graph = history.graph();
126197                 var entity = graph.entity(id);
126198                 return features.hasHiddenConnections(entity, graph);
126199             };
126200
126201
126202             /* Photos */
126203             var photos;
126204             context.photos = function() { return photos; };
126205
126206
126207             /* Presets */
126208             var presets;
126209             context.presets = function() { return presets; };
126210
126211
126212             /* Map */
126213             var map;
126214             context.map = function() { return map; };
126215             context.layers = function() { return map.layers; };
126216             context.surface = function() { return map.surface; };
126217             context.editableDataEnabled = function() { return map.editableDataEnabled(); };
126218             context.editable = function() {
126219
126220                // don't allow editing during save
126221                var mode = context.mode();
126222                if (!mode || mode.id === 'save') { return false; }
126223
126224                return map.editableDataEnabled();
126225             };
126226             context.surfaceRect = function() {
126227                 return map.surface.node().getBoundingClientRect();
126228             };
126229
126230
126231             /* Debug */
126232             var debugFlags = {
126233                 tile: false,        // tile boundaries
126234                 collision: false,   // label collision bounding boxes
126235                 imagery: false,     // imagery bounding polygons
126236                 community: false,   // community bounding polygons
126237                 imperial: false,    // imperial (not metric) bounding polygons
126238                 driveLeft: false,   // driveLeft bounding polygons
126239                 target: false,      // touch targets
126240                 downloaded: false   // downloaded data from osm
126241             };
126242             context.debugFlags = function() {
126243                 return debugFlags;
126244             };
126245             context.setDebug = function(flag, val) {
126246                 if (arguments.length === 1) { val = true; }
126247                 debugFlags[flag] = val;
126248                 dispatch$1.call('change');
126249                 return context;
126250             };
126251             context.getDebug = function(flag) {
126252                 return flag && debugFlags[flag];
126253             };
126254
126255
126256             /* Container */
126257             var container = d3_select(document.body);
126258             context.container = function(val) {
126259                 if (!arguments.length) { return container; }
126260                 container = val;
126261                 container.classed('id-container', true);
126262                 return context;
126263             };
126264             var embed;
126265             context.embed = function(val) {
126266                 if (!arguments.length) { return embed; }
126267                 embed = val;
126268                 return context;
126269             };
126270
126271
126272             /* Assets */
126273             var assetPath = '';
126274             context.assetPath = function(val) {
126275                 if (!arguments.length) { return assetPath; }
126276                 assetPath = val;
126277                 return context;
126278             };
126279
126280             var assetMap = {};
126281             context.assetMap = function(val) {
126282                 if (!arguments.length) { return assetMap; }
126283                 assetMap = val;
126284                 return context;
126285             };
126286
126287             context.asset = function(val) {
126288                 var filename = assetPath + val;
126289                 return assetMap[filename] || filename;
126290             };
126291
126292             context.imagePath = function(val) {
126293                 return context.asset('img/' + val);
126294             };
126295
126296
126297             /* locales */
126298             // `locale` variable contains a "requested locale".
126299             // It won't become the `currentLocale` until after loadLocale() is called.
126300             var locale, localePath;
126301
126302             context.locale = function(loc, path) {
126303                 if (!arguments.length) { return currentLocale; }
126304                 locale = loc;
126305                 localePath = path;
126306                 return context;
126307             };
126308
126309             context.loadLocale = function(callback) {
126310                 if (locale && locale !== 'en' && dataLocales.hasOwnProperty(locale)) {
126311                     localePath = localePath || context.asset('locales/' + locale + '.json');
126312                     d3_json(localePath)
126313                         .then(function(result) {
126314                             addTranslation(locale, result[locale]);
126315                             setLocale(locale);
126316                             utilDetect(true);
126317                             if (callback) { callback(); }
126318                         })
126319                         .catch(function(err) {
126320                             if (callback) { callback(err.message); }
126321                         });
126322                 } else {
126323                     if (locale) {
126324                         setLocale(locale);
126325                         utilDetect(true);
126326                     }
126327                     if (callback) {
126328                         callback();
126329                     }
126330                 }
126331             };
126332
126333
126334             /* reset (aka flush) */
126335             context.reset = context.flush = function() {
126336                 context.debouncedSave.cancel();
126337
126338                 Array.from(_deferred).forEach(function(handle) {
126339                     window.cancelIdleCallback(handle);
126340                     _deferred.delete(handle);
126341                 });
126342
126343                 Object.values(services$1).forEach(function(service) {
126344                     if (service && typeof service.reset === 'function') {
126345                         service.reset(context);
126346                     }
126347                 });
126348
126349                 validator.reset();
126350                 features.reset();
126351                 history.reset();
126352
126353                 return context;
126354             };
126355
126356
126357             /* Init */
126358
126359             context.projection = geoRawMercator();
126360             context.curtainProjection = geoRawMercator();
126361
126362             locale = utilDetect().locale;
126363             if (locale && !dataLocales.hasOwnProperty(locale)) {
126364                 locale = locale.split('-')[0];
126365             }
126366
126367             history = coreHistory(context);
126368             validator = coreValidator(context);
126369
126370             context.graph = history.graph;
126371             context.changes = history.changes;
126372             context.intersects = history.intersects;
126373             context.pauseChangeDispatch = history.pauseChangeDispatch;
126374             context.resumeChangeDispatch = history.resumeChangeDispatch;
126375
126376             // Debounce save, since it's a synchronous localStorage write,
126377             // and history changes can happen frequently (e.g. when dragging).
126378             context.debouncedSave = debounce(context.save, 350);
126379             function withDebouncedSave(fn) {
126380                 return function() {
126381                     var result = fn.apply(history, arguments);
126382                     context.debouncedSave();
126383                     return result;
126384                 };
126385             }
126386
126387             context.perform = withDebouncedSave(history.perform);
126388             context.replace = withDebouncedSave(history.replace);
126389             context.pop = withDebouncedSave(history.pop);
126390             context.overwrite = withDebouncedSave(history.overwrite);
126391             context.undo = withDebouncedSave(history.undo);
126392             context.redo = withDebouncedSave(history.redo);
126393
126394             ui = uiInit(context);
126395
126396             connection = services$1.osm;
126397             background = rendererBackground(context);
126398             features = rendererFeatures(context);
126399             photos = rendererPhotos(context);
126400             presets = presetIndex(context);
126401
126402             if (services$1.maprules && utilStringQs(window.location.hash).maprules) {
126403                 var maprules = utilStringQs(window.location.hash).maprules;
126404                 d3_json(maprules)
126405                     .then(function(mapcss) {
126406                         services$1.maprules.init();
126407                         mapcss.forEach(function(mapcssSelector) {
126408                             return services$1.maprules.addRule(mapcssSelector);
126409                         });
126410                     })
126411                     .catch(function() {
126412                         /* ignore */
126413                     });
126414             }
126415
126416             map = rendererMap(context);
126417             context.mouse = map.mouse;
126418             context.extent = map.extent;
126419             context.pan = map.pan;
126420             context.zoomIn = map.zoomIn;
126421             context.zoomOut = map.zoomOut;
126422             context.zoomInFurther = map.zoomInFurther;
126423             context.zoomOutFurther = map.zoomOutFurther;
126424             context.redrawEnable = map.redrawEnable;
126425
126426             Object.values(services$1).forEach(function(service) {
126427                 if (service && typeof service.init === 'function') {
126428                     service.init(context);
126429                 }
126430             });
126431
126432             validator.init();
126433             background.init();
126434             features.init();
126435             photos.init();
126436
126437             var presetsParameter = utilStringQs(window.location.hash).presets;
126438             if (presetsParameter && presetsParameter.indexOf('://') !== -1) {
126439                 // assume URL of external presets file
126440
126441                 presets.fromExternal(external, function(externalPresets) {
126442                     context.presets = function() { return externalPresets; }; // default + external presets...
126443                     osmSetAreaKeys(presets.areaKeys());
126444                     osmSetPointTags(presets.pointTags());
126445                     osmSetVertexTags(presets.vertexTags());
126446                 });
126447             } else {
126448                 var addablePresetIDs;
126449                 if (presetsParameter) {
126450                     // assume list of allowed preset IDs
126451                     addablePresetIDs = presetsParameter.split(',');
126452                 }
126453                 presets.init(addablePresetIDs);
126454                 osmSetAreaKeys(presets.areaKeys());
126455                 osmSetPointTags(presets.pointTags());
126456                 osmSetVertexTags(presets.vertexTags());
126457             }
126458
126459             return context;
126460         }
126461
126462         function uiSourceSwitch(context) {
126463             var keys;
126464
126465
126466             function click() {
126467                 event.preventDefault();
126468
126469                 var osm = context.connection();
126470                 if (!osm) { return; }
126471
126472                 if (context.inIntro()) { return; }
126473
126474                 if (context.history().hasChanges() &&
126475                     !window.confirm(t('source_switch.lose_changes'))) { return; }
126476
126477                 var isLive = d3_select(this)
126478                     .classed('live');
126479
126480                 isLive = !isLive;
126481                 context.enter(modeBrowse(context));
126482                 context.history().clearSaved();          // remove saved history
126483                 context.flush();                         // remove stored data
126484
126485                 d3_select(this)
126486                     .text(isLive ? t('source_switch.live') : t('source_switch.dev'))
126487                     .classed('live', isLive)
126488                     .classed('chip', isLive);
126489
126490                 osm.switch(isLive ? keys[0] : keys[1]);  // switch connection (warning: dispatches 'change' event)
126491             }
126492
126493             var sourceSwitch = function(selection) {
126494                 selection
126495                     .append('a')
126496                     .attr('href', '#')
126497                     .text(t('source_switch.live'))
126498                     .attr('class', 'live chip')
126499                     .on('click', click);
126500             };
126501
126502
126503             sourceSwitch.keys = function(_) {
126504                 if (!arguments.length) { return keys; }
126505                 keys = _;
126506                 return sourceSwitch;
126507             };
126508
126509
126510             return sourceSwitch;
126511         }
126512
126513         var Connection = services$1.osm;
126514
126515         var debug = false;
126516
126517         var iD = /*#__PURE__*/Object.freeze({
126518                 __proto__: null,
126519                 Connection: Connection,
126520                 debug: debug,
126521                 d3: index$3,
126522                 Context: coreContext,
126523                 setAreaKeys: osmSetAreaKeys,
126524                 get areaKeys () { return osmAreaKeys; },
126525                 Difference: coreDifference,
126526                 Graph: coreGraph,
126527                 History: coreHistory,
126528                 Tree: coreTree,
126529                 geoCross: geoVecCross,
126530                 geoInterp: geoVecInterp,
126531                 geoRoundCoordinates: geoVecFloor,
126532                 geoEuclideanDistance: geoVecLength,
126533                 Entity: osmEntity,
126534                 Node: osmNode,
126535                 Relation: osmRelation,
126536                 Way: osmWay,
126537                 BackgroundSource: rendererBackgroundSource,
126538                 Background: rendererBackground,
126539                 Features: rendererFeatures,
126540                 Map: rendererMap,
126541                 TileLayer: rendererTileLayer,
126542                 Detect: utilDetect,
126543                 uiPreset: uiPresetEditor,
126544                 actionAddEntity: actionAddEntity,
126545                 actionAddMember: actionAddMember,
126546                 actionAddMidpoint: actionAddMidpoint,
126547                 actionAddVertex: actionAddVertex,
126548                 actionChangeMember: actionChangeMember,
126549                 actionChangePreset: actionChangePreset,
126550                 actionChangeTags: actionChangeTags,
126551                 actionCircularize: actionCircularize,
126552                 actionConnect: actionConnect,
126553                 actionCopyEntities: actionCopyEntities,
126554                 actionDeleteMember: actionDeleteMember,
126555                 actionDeleteMultiple: actionDeleteMultiple,
126556                 actionDeleteNode: actionDeleteNode,
126557                 actionDeleteRelation: actionDeleteRelation,
126558                 actionDeleteWay: actionDeleteWay,
126559                 actionDiscardTags: actionDiscardTags,
126560                 actionDisconnect: actionDisconnect,
126561                 actionExtract: actionExtract,
126562                 actionJoin: actionJoin,
126563                 actionMerge: actionMerge,
126564                 actionMergeNodes: actionMergeNodes,
126565                 actionMergePolygon: actionMergePolygon,
126566                 actionMergeRemoteChanges: actionMergeRemoteChanges,
126567                 actionMove: actionMove,
126568                 actionMoveMember: actionMoveMember,
126569                 actionMoveNode: actionMoveNode,
126570                 actionNoop: actionNoop,
126571                 actionOrthogonalize: actionOrthogonalize,
126572                 actionRestrictTurn: actionRestrictTurn,
126573                 actionReverse: actionReverse,
126574                 actionRevert: actionRevert,
126575                 actionRotate: actionRotate,
126576                 actionSplit: actionSplit,
126577                 actionStraightenNodes: actionStraightenNodes,
126578                 actionStraightenWay: actionStraightenWay,
126579                 actionUnrestrictTurn: actionUnrestrictTurn,
126580                 actionReflect: actionReflect,
126581                 actionUpgradeTags: actionUpgradeTags,
126582                 behaviorAddWay: behaviorAddWay,
126583                 behaviorBreathe: behaviorBreathe,
126584                 behaviorCopy: behaviorCopy,
126585                 behaviorDrag: behaviorDrag,
126586                 behaviorDrawWay: behaviorDrawWay,
126587                 behaviorDraw: behaviorDraw,
126588                 behaviorEdit: behaviorEdit,
126589                 behaviorHash: behaviorHash,
126590                 behaviorHover: behaviorHover,
126591                 behaviorLasso: behaviorLasso,
126592                 behaviorOperation: behaviorOperation,
126593                 behaviorPaste: behaviorPaste,
126594                 behaviorSelect: behaviorSelect,
126595                 behaviorTail: behaviorTail,
126596                 coreContext: coreContext,
126597                 coreDifference: coreDifference,
126598                 coreGraph: coreGraph,
126599                 coreHistory: coreHistory,
126600                 coreTree: coreTree,
126601                 coreValidator: coreValidator,
126602                 data: data,
126603                 dataWikipedia: wikipedia$2,
126604                 dataAddressFormats: dataAddressFormats,
126605                 dataDeprecated: dataDeprecated,
126606                 dataDiscarded: dataDiscarded,
126607                 dataLanguages: dataLanguages,
126608                 dataLocales: dataLocales,
126609                 dataPhoneFormats: dataPhoneFormats,
126610                 dataShortcuts: dataShortcuts,
126611                 dataTerritoryLanguages: dataTerritoryLanguages,
126612                 dataEn: en,
126613                 geoExtent: geoExtent,
126614                 geoLatToMeters: geoLatToMeters,
126615                 geoLonToMeters: geoLonToMeters,
126616                 geoMetersToLat: geoMetersToLat,
126617                 geoMetersToLon: geoMetersToLon,
126618                 geoMetersToOffset: geoMetersToOffset,
126619                 geoOffsetToMeters: geoOffsetToMeters,
126620                 geoScaleToZoom: geoScaleToZoom,
126621                 geoSphericalClosestNode: geoSphericalClosestNode,
126622                 geoSphericalDistance: geoSphericalDistance,
126623                 geoZoomToScale: geoZoomToScale,
126624                 geoAngle: geoAngle,
126625                 geoChooseEdge: geoChooseEdge,
126626                 geoEdgeEqual: geoEdgeEqual,
126627                 geoGetSmallestSurroundingRectangle: geoGetSmallestSurroundingRectangle,
126628                 geoHasLineIntersections: geoHasLineIntersections,
126629                 geoHasSelfIntersections: geoHasSelfIntersections,
126630                 geoRotate: geoRotate,
126631                 geoLineIntersection: geoLineIntersection,
126632                 geoPathHasIntersections: geoPathHasIntersections,
126633                 geoPathIntersections: geoPathIntersections,
126634                 geoPathLength: geoPathLength,
126635                 geoPointInPolygon: geoPointInPolygon,
126636                 geoPolygonContainsPolygon: geoPolygonContainsPolygon,
126637                 geoPolygonIntersectsPolygon: geoPolygonIntersectsPolygon,
126638                 geoViewportEdge: geoViewportEdge,
126639                 geoRawMercator: geoRawMercator,
126640                 geoVecAdd: geoVecAdd,
126641                 geoVecAngle: geoVecAngle,
126642                 geoVecCross: geoVecCross,
126643                 geoVecDot: geoVecDot,
126644                 geoVecEqual: geoVecEqual,
126645                 geoVecFloor: geoVecFloor,
126646                 geoVecInterp: geoVecInterp,
126647                 geoVecLength: geoVecLength,
126648                 geoVecLengthSquare: geoVecLengthSquare,
126649                 geoVecNormalize: geoVecNormalize,
126650                 geoVecNormalizedDot: geoVecNormalizedDot,
126651                 geoVecProject: geoVecProject,
126652                 geoVecSubtract: geoVecSubtract,
126653                 geoVecScale: geoVecScale,
126654                 geoOrthoNormalizedDotProduct: geoOrthoNormalizedDotProduct,
126655                 geoOrthoCalcScore: geoOrthoCalcScore,
126656                 geoOrthoMaxOffsetAngle: geoOrthoMaxOffsetAngle,
126657                 geoOrthoCanOrthogonalize: geoOrthoCanOrthogonalize,
126658                 modeAddArea: modeAddArea,
126659                 modeAddLine: modeAddLine,
126660                 modeAddPoint: modeAddPoint,
126661                 modeAddNote: modeAddNote,
126662                 modeBrowse: modeBrowse,
126663                 modeDragNode: modeDragNode,
126664                 modeDragNote: modeDragNote,
126665                 modeDrawArea: modeDrawArea,
126666                 modeDrawLine: modeDrawLine,
126667                 modeMove: modeMove,
126668                 modeRotate: modeRotate,
126669                 modeSave: modeSave,
126670                 modeSelect: modeSelect,
126671                 modeSelectData: modeSelectData,
126672                 modeSelectError: modeSelectError,
126673                 modeSelectNote: modeSelectNote,
126674                 operationCircularize: operationCircularize,
126675                 operationContinue: operationContinue,
126676                 operationDelete: operationDelete,
126677                 operationDisconnect: operationDisconnect,
126678                 operationDowngrade: operationDowngrade,
126679                 operationExtract: operationExtract,
126680                 operationMerge: operationMerge,
126681                 operationMove: operationMove,
126682                 operationOrthogonalize: operationOrthogonalize,
126683                 operationReflectShort: operationReflectShort,
126684                 operationReflectLong: operationReflectLong,
126685                 operationReverse: operationReverse,
126686                 operationRotate: operationRotate,
126687                 operationSplit: operationSplit,
126688                 operationStraighten: operationStraighten,
126689                 osmChangeset: osmChangeset,
126690                 osmEntity: osmEntity,
126691                 osmNode: osmNode,
126692                 osmNote: osmNote,
126693                 osmRelation: osmRelation,
126694                 osmWay: osmWay,
126695                 qaError: qaError,
126696                 osmIntersection: osmIntersection,
126697                 osmTurn: osmTurn,
126698                 osmInferRestriction: osmInferRestriction,
126699                 osmLanes: osmLanes,
126700                 osmOldMultipolygonOuterMemberOfRelation: osmOldMultipolygonOuterMemberOfRelation,
126701                 osmIsOldMultipolygonOuterMember: osmIsOldMultipolygonOuterMember,
126702                 osmOldMultipolygonOuterMember: osmOldMultipolygonOuterMember,
126703                 osmJoinWays: osmJoinWays,
126704                 get osmAreaKeys () { return osmAreaKeys; },
126705                 osmSetAreaKeys: osmSetAreaKeys,
126706                 get osmPointTags () { return osmPointTags; },
126707                 osmSetPointTags: osmSetPointTags,
126708                 get osmVertexTags () { return osmVertexTags; },
126709                 osmSetVertexTags: osmSetVertexTags,
126710                 osmNodeGeometriesForTags: osmNodeGeometriesForTags,
126711                 osmOneWayTags: osmOneWayTags,
126712                 osmPavedTags: osmPavedTags,
126713                 osmIsInterestingTag: osmIsInterestingTag,
126714                 osmRoutableHighwayTagValues: osmRoutableHighwayTagValues,
126715                 osmFlowingWaterwayTagValues: osmFlowingWaterwayTagValues,
126716                 osmRailwayTrackTagValues: osmRailwayTrackTagValues,
126717                 presetCategory: presetCategory,
126718                 presetCollection: presetCollection,
126719                 presetField: presetField,
126720                 presetPreset: presetPreset,
126721                 presetIndex: presetIndex,
126722                 rendererBackgroundSource: rendererBackgroundSource,
126723                 rendererBackground: rendererBackground,
126724                 rendererFeatures: rendererFeatures,
126725                 rendererMap: rendererMap,
126726                 rendererPhotos: rendererPhotos,
126727                 rendererTileLayer: rendererTileLayer,
126728                 services: services$1,
126729                 serviceKeepRight: serviceKeepRight,
126730                 serviceImproveOSM: serviceImproveOSM,
126731                 serviceMapillary: serviceMapillary,
126732                 serviceMapRules: serviceMapRules,
126733                 serviceNominatim: serviceNominatim,
126734                 serviceOpenstreetcam: serviceOpenstreetcam,
126735                 serviceOsm: serviceOsm,
126736                 serviceOsmWikibase: serviceOsmWikibase,
126737                 serviceStreetside: serviceStreetside,
126738                 serviceTaginfo: serviceTaginfo,
126739                 serviceVectorTile: serviceVectorTile,
126740                 serviceWikidata: serviceWikidata,
126741                 serviceWikipedia: serviceWikipedia,
126742                 svgAreas: svgAreas,
126743                 svgData: svgData,
126744                 svgDebug: svgDebug,
126745                 svgDefs: svgDefs,
126746                 svgKeepRight: svgKeepRight,
126747                 svgIcon: svgIcon,
126748                 svgGeolocate: svgGeolocate,
126749                 svgLabels: svgLabels,
126750                 svgLayers: svgLayers,
126751                 svgLines: svgLines,
126752                 svgMapillaryImages: svgMapillaryImages,
126753                 svgMapillarySigns: svgMapillarySigns,
126754                 svgMidpoints: svgMidpoints,
126755                 svgNotes: svgNotes,
126756                 svgMarkerSegments: svgMarkerSegments,
126757                 svgOpenstreetcamImages: svgOpenstreetcamImages,
126758                 svgOsm: svgOsm,
126759                 svgPassiveVertex: svgPassiveVertex,
126760                 svgPath: svgPath,
126761                 svgPointTransform: svgPointTransform,
126762                 svgPoints: svgPoints,
126763                 svgRelationMemberTags: svgRelationMemberTags,
126764                 svgSegmentWay: svgSegmentWay,
126765                 svgStreetside: svgStreetside,
126766                 svgTagClasses: svgTagClasses,
126767                 svgTagPattern: svgTagPattern,
126768                 svgTouch: svgTouch,
126769                 svgTurns: svgTurns,
126770                 svgVertices: svgVertices,
126771                 uiFields: uiFields,
126772                 uiFieldDefaultCheck: uiFieldCheck,
126773                 uiFieldOnewayCheck: uiFieldCheck,
126774                 uiFieldCheck: uiFieldCheck,
126775                 uiFieldMultiCombo: uiFieldCombo,
126776                 uiFieldNetworkCombo: uiFieldCombo,
126777                 uiFieldSemiCombo: uiFieldCombo,
126778                 uiFieldTypeCombo: uiFieldCombo,
126779                 uiFieldCombo: uiFieldCombo,
126780                 uiFieldUrl: uiFieldText,
126781                 uiFieldIdentifier: uiFieldText,
126782                 uiFieldNumber: uiFieldText,
126783                 uiFieldTel: uiFieldText,
126784                 uiFieldEmail: uiFieldText,
126785                 uiFieldText: uiFieldText,
126786                 uiFieldAccess: uiFieldAccess,
126787                 uiFieldAddress: uiFieldAddress,
126788                 uiFieldCycleway: uiFieldCycleway,
126789                 uiFieldLanes: uiFieldLanes,
126790                 uiFieldLocalized: uiFieldLocalized,
126791                 uiFieldMaxspeed: uiFieldMaxspeed,
126792                 uiFieldStructureRadio: uiFieldRadio,
126793                 uiFieldRadio: uiFieldRadio,
126794                 uiFieldRestrictions: uiFieldRestrictions,
126795                 uiFieldTextarea: uiFieldTextarea,
126796                 uiFieldWikidata: uiFieldWikidata,
126797                 uiFieldWikipedia: uiFieldWikipedia,
126798                 uiIntro: uiIntro,
126799                 uiInfoPanels: uiInfoPanels,
126800                 uiPanelBackground: uiPanelBackground,
126801                 uiPanelHistory: uiPanelHistory,
126802                 uiPanelLocation: uiPanelLocation,
126803                 uiPanelMeasurement: uiPanelMeasurement,
126804                 uiSettingsCustomBackground: uiSettingsCustomBackground,
126805                 uiSettingsCustomData: uiSettingsCustomData,
126806                 uiInit: uiInit,
126807                 uiAccount: uiAccount,
126808                 uiAttribution: uiAttribution,
126809                 uiBackground: uiBackground,
126810                 uiBackgroundDisplayOptions: uiBackgroundDisplayOptions,
126811                 uiBackgroundOffset: uiBackgroundOffset,
126812                 uiChangesetEditor: uiChangesetEditor,
126813                 uiCmd: uiCmd,
126814                 uiCombobox: uiCombobox,
126815                 uiCommit: uiCommit,
126816                 uiCommitChanges: uiCommitChanges,
126817                 uiCommitWarnings: uiCommitWarnings,
126818                 uiConfirm: uiConfirm,
126819                 uiConflicts: uiConflicts,
126820                 uiContributors: uiContributors,
126821                 uiCurtain: uiCurtain,
126822                 uiDataEditor: uiDataEditor,
126823                 uiDataHeader: uiDataHeader,
126824                 uiDisclosure: uiDisclosure,
126825                 uiEditMenu: uiEditMenu,
126826                 uiEntityEditor: uiEntityEditor,
126827                 uiFeatureInfo: uiFeatureInfo,
126828                 uiFeatureList: uiFeatureList,
126829                 uiField: uiField,
126830                 uiFieldHelp: uiFieldHelp,
126831                 uiFlash: uiFlash,
126832                 uiFormFields: uiFormFields,
126833                 uiFullScreen: uiFullScreen,
126834                 uiGeolocate: uiGeolocate,
126835                 uiHelp: uiHelp,
126836                 uiImproveOsmComments: uiImproveOsmComments,
126837                 uiImproveOsmDetails: uiImproveOsmDetails,
126838                 uiImproveOsmEditor: uiImproveOsmEditor,
126839                 uiImproveOsmHeader: uiImproveOsmHeader,
126840                 uiInfo: uiInfo,
126841                 uiInspector: uiInspector,
126842                 uiIssuesInfo: uiIssuesInfo,
126843                 uiKeepRightDetails: uiKeepRightDetails,
126844                 uiKeepRightEditor: uiKeepRightEditor,
126845                 uiKeepRightHeader: uiKeepRightHeader,
126846                 uiLasso: uiLasso,
126847                 uiLoading: uiLoading,
126848                 uiMapData: uiMapData,
126849                 uiMapInMap: uiMapInMap,
126850                 uiModal: uiModal,
126851                 uiNotice: uiNotice,
126852                 uiNoteComments: uiNoteComments,
126853                 uiNoteEditor: uiNoteEditor,
126854                 uiNoteHeader: uiNoteHeader,
126855                 uiNoteReport: uiNoteReport,
126856                 uiPreferences: uiPreferences,
126857                 uiPresetEditor: uiPresetEditor,
126858                 uiPresetIcon: uiPresetIcon,
126859                 uiPresetList: uiPresetList,
126860                 uiQuickLinks: uiQuickLinks,
126861                 uiRadialMenu: uiRadialMenu,
126862                 uiRawMemberEditor: uiRawMemberEditor,
126863                 uiRawMembershipEditor: uiRawMembershipEditor,
126864                 uiRawTagEditor: uiRawTagEditor,
126865                 uiRestore: uiRestore,
126866                 uiScale: uiScale,
126867                 uiSelectionList: uiSelectionList,
126868                 uiSidebar: uiSidebar,
126869                 uiSourceSwitch: uiSourceSwitch,
126870                 uiSpinner: uiSpinner,
126871                 uiSplash: uiSplash,
126872                 uiStatus: uiStatus,
126873                 uiSuccess: uiSuccess,
126874                 uiTagReference: uiTagReference,
126875                 uiToggle: uiToggle,
126876                 uiTooltipHtml: uiTooltipHtml,
126877                 uiVersion: uiVersion,
126878                 uiViewOnOSM: uiViewOnOSM,
126879                 uiViewOnKeepRight: uiViewOnKeepRight,
126880                 uiZoom: uiZoom,
126881                 utilAesEncrypt: utilAesEncrypt,
126882                 utilAesDecrypt: utilAesDecrypt,
126883                 utilArrayChunk: utilArrayChunk,
126884                 utilArrayDifference: utilArrayDifference,
126885                 utilArrayFlatten: utilArrayFlatten,
126886                 utilArrayGroupBy: utilArrayGroupBy,
126887                 utilArrayIntersection: utilArrayIntersection,
126888                 utilArrayUnion: utilArrayUnion,
126889                 utilArrayUniq: utilArrayUniq,
126890                 utilArrayUniqBy: utilArrayUniqBy,
126891                 utilAsyncMap: utilAsyncMap,
126892                 utilCleanTags: utilCleanTags,
126893                 utilDeepMemberSelector: utilDeepMemberSelector,
126894                 utilDetect: utilDetect,
126895                 utilDisplayName: utilDisplayName,
126896                 utilDisplayNameForPath: utilDisplayNameForPath,
126897                 utilDisplayType: utilDisplayType,
126898                 utilDisplayLabel: utilDisplayLabel,
126899                 utilEntityRoot: utilEntityRoot,
126900                 utilEditDistance: utilEditDistance,
126901                 utilEntitySelector: utilEntitySelector,
126902                 utilEntityOrMemberSelector: utilEntityOrMemberSelector,
126903                 utilEntityOrDeepMemberSelector: utilEntityOrDeepMemberSelector,
126904                 utilFastMouse: utilFastMouse,
126905                 utilFunctor: utilFunctor,
126906                 utilGetAllNodes: utilGetAllNodes,
126907                 utilGetSetValue: utilGetSetValue,
126908                 utilHashcode: utilHashcode,
126909                 utilHighlightEntities: utilHighlightEntities,
126910                 utilKeybinding: utilKeybinding,
126911                 utilNoAuto: utilNoAuto,
126912                 utilObjectOmit: utilObjectOmit,
126913                 utilPrefixCSSProperty: utilPrefixCSSProperty,
126914                 utilPrefixDOMProperty: utilPrefixDOMProperty,
126915                 utilPreset: utilPreset,
126916                 utilQsString: utilQsString,
126917                 utilRebind: utilRebind,
126918                 utilSafeClassName: utilSafeClassName,
126919                 utilSetTransform: utilSetTransform,
126920                 utilSessionMutex: utilSessionMutex,
126921                 utilStringQs: utilStringQs,
126922                 utilTagDiff: utilTagDiff,
126923                 utilTagText: utilTagText,
126924                 utilTiler: utilTiler,
126925                 utilTriggerEvent: utilTriggerEvent,
126926                 utilWrap: utilWrap,
126927                 validationAlmostJunction: validationAlmostJunction,
126928                 validationCloseNodes: validationCloseNodes,
126929                 validationCrossingWays: validationCrossingWays,
126930                 validationDisconnectedWay: validationDisconnectedWay,
126931                 validationFormatting: validationFormatting,
126932                 validationHelpRequest: validationHelpRequest,
126933                 validationImpossibleOneway: validationImpossibleOneway,
126934                 validationIncompatibleSource: validationIncompatibleSource,
126935                 validationMaprules: validationMaprules,
126936                 validationMismatchedGeometry: validationMismatchedGeometry,
126937                 validationMissingRole: validationMissingRole,
126938                 validationMissingTag: validationMissingTag,
126939                 validationOutdatedTags: validationOutdatedTags,
126940                 validationPrivateData: validationPrivateData,
126941                 validationSuspiciousName: validationSuspiciousName,
126942                 validationUnsquareWay: validationUnsquareWay
126943         });
126944
126945         // polyfill requestIdleCallback
126946         window.requestIdleCallback = window.requestIdleCallback ||
126947             function(cb) {
126948                 var start = Date.now();
126949                 return window.requestAnimationFrame(function() {
126950                     cb({
126951                         didTimeout: false,
126952                         timeRemaining: function() {
126953                             return Math.max(0, 50 - (Date.now() - start));
126954                         }
126955                     });
126956                 });
126957             };
126958
126959         window.cancelIdleCallback = window.cancelIdleCallback ||
126960             function(id) {
126961                 window.cancelAnimationFrame(id);
126962             };
126963         window.iD = iD;
126964
126965 }());
126966 //# sourceMappingURL=iD.js.map